diff --git a/.github/workflows/upstream.yml b/.github/workflows/upstream.yml index 3ec9eb00..9931cd16 100644 --- a/.github/workflows/upstream.yml +++ b/.github/workflows/upstream.yml @@ -92,7 +92,9 @@ jobs: ) & ( git_sparse_clone master "https://github.com/xiaoqingfengATGH/feeds-xiaoqingfeng" "xiaoqingfeng" homeredirect luci-app-homeredirect - ) + ) & + + git_sparse_clone master "https://github.com/coolsnowwolf/lede" "leanlede" package/lean package/network/services/shellsync package/network/utils/dpdk for ipk in $(ls applications); do if [[ $(ls -l applications/$ipk/po | wc -l) -gt 3 ]]; then @@ -117,75 +119,8 @@ jobs: - name: Modify continue-on-error: true run: | - shopt -s extglob - ( - function latest() { - (curl -gs -H 'Content-Type: application/json' \ - -H "Authorization: Bearer ${{ secrets.REPO_TOKEN }}" \ - -X POST -d '{ "query": "query {repository(owner: \"'"$1"'\", name: \"'"$2"'\"){refs(refPrefix:\"refs/tags/\",last:1,orderBy:{field:TAG_COMMIT_DATE,direction:ASC}){edges{node{name target{commitUrl}}}}defaultBranchRef{target{...on Commit {oid}}}}}"}' https://api.github.com/graphql) - } - for pkg in $(ls !(luci-*|natflow|ps3netsrv|rblibtorrent|shadowsocksr-libev|v2ray-core|n2n_v2|mosdns|coremark|mbedtls|rtl8821cu|rtl8188eu|rtl8812au-ac|quickjspp|libcups)/Makefile); do - repo="$(grep PKG_SOURCE_URL $pkg | grep github | cut -f 4-5 -d '/' | sed -e 's/.git//' | grep -E '[0-9a-zA-Z_-]+$')" || true - if [ "$repo" ]; then - owner="$(echo $repo | cut -f 1 -d '/')" - name="$(echo $repo | cut -f 2 -d '/')" - latest="$(latest $owner $name)" - sed -i "s/PKG_SOURCE_VERSION:=.*/PKG_SOURCE_VERSION:=$(echo $latest | jq -r '.data.repository.defaultBranchRef.target.oid')/" $pkg || true - over="$(grep -E PKG_VERSION:=.*$ $pkg | cut -f 2 -d '=' | sed -e 's/^\(v\|release-\)//' | grep -E "[0-9]")" || true - if [ "$over" ]; then - ver="$(echo $latest | jq -r '.data.repository.refs.edges[-1].node.name' | sed -e 's/^\(v\|release-\)//' | grep -E "^[^()]*$" | grep -E "[0-9]")" || true - # [ "$ver" ] || ver="$(git ls-remote --tags git://github.com/$repo | cut -d/ -f3- | sort -t. -nk1,3 | awk '/^[^{]*$/{version=$1}END{print version}' | grep -o -E "[0-9].*")" || true - echo "$repo-$over-$ver" - if [ "$ver" ]; then - function version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; } - if version_lt "$over" "$ver"; then - sed -i -e "s/PKG_SOURCE_VERSION:=.*/PKG_SOURCE_VERSION:=$(echo $latest | jq -r '.data.repository.refs.edges[-1].node.target.commitUrl' | cut -f 7 -d /)/" \ - -e "s/PKG_VERSION:=.*/PKG_VERSION:=$ver/" $pkg || true - fi || true - fi - fi - fi - done - touch /tmp/ok - ) & - - for pkg in $(find -maxdepth 1 -type d -name "luci-*" ! -name "luci-app-dockerman" ! -name "luci-app-frpc" ! -name "luci-app-frps"); do - if [ "$(grep "luci.mk" $pkg/Makefile)" ]; then - sed -i '/\(PKG_VERSION\|PKG_RELEASE\):=/d' $pkg/Makefile - fi - grep -q '"nas",' $pkg/luasrc/controller/*.lua && ! grep -q '_("NAS")' $pkg/luasrc/controller/*.lua && - sed -i 's/index()/index()\n\tentry({"admin", "nas"}, firstchild(), _("NAS") , 45).dependent = false/' $pkg/luasrc/controller/*.lua - done - ( - for pkg in $(ls -d */); do - if [ "$(grep "PKG_RELEASE" $pkg/Makefile)" ]; then - sed -i "s/PKG_RELEASE:=.*/PKG_RELEASE:=$(git rev-list --count master $pkg)/" $pkg/Makefile || true - fi - done - touch /tmp/ok2 - ) & - bash diy/create_acl_for_luci.sh -a >/dev/null 2>&1 || true bash diy/convert_translation.sh -a >/dev/null 2>&1 || true - - rm -f miniupnpd/patches/106-spam-syslog* go-aliyundrive-webdav/patches/100-fix-read* - sed -i "/minisign:minisign/d" luci-app-dnscrypt-proxy2/Makefile - sed -i 's/+dockerd/+dockerd +cgroupfs-mount/' luci-app-docker*/Makefile - sed -i '$i /etc/init.d/dockerd restart &' luci-app-docker*/root/etc/uci-defaults/* - sed -i '/\/etc\/config\/AdGuardHome/a /etc/AdGuardHome.yaml' luci-app-adguardhome/Makefile - sed -i 's/+libcap /+libcap +libcap-bin /' luci-app-openclash/Makefile - - sed -i \ - -e 's?include \.\./\.\./\(lang\|devel\)?include $(TOPDIR)/feeds/packages/\1?' \ - -e "s/\(PKG_HASH\|PKG_MD5SUM\|PKG_MIRROR_HASH\):=.*/\1:=skip/" \ - -e 's?\.\./\.\./luci.mk?$(TOPDIR)/feeds/luci/luci.mk?' \ - -e 's/ca-certificates/ca-bundle/' \ - */Makefile - - while [[ ! -f /tmp/ok || ! -f /tmp/ok2 ]]; do - echo "wait" - sleep 1 - done - name: SSH connection to Actions uses: kiddin9/debugger-action@master diff --git a/.gitignore b/.gitignore index ff0bb7c9..aad622da 100644 --- a/.gitignore +++ b/.gitignore @@ -9,9 +9,7 @@ /luci-app-softether /luci-app-cifs /luci-app-cifsd -/luci-app-smstool /luci-app-mosquitto -/luci-app-appfilter /luci-app-babeld /luci-app-siitwizard /luci-app-ttyd diff --git a/aliyundrive-fuse/Makefile b/aliyundrive-fuse/Makefile deleted file mode 100644 index 60c164f7..00000000 --- a/aliyundrive-fuse/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=aliyundrive-fuse -PKG_VERSION:=0.1.6 -PKG_RELEASE:= - -PKG_LICENSE:=MIT -PKG_MAINTAINER:=messense - -PKG_LIBC:=musl -ifeq ($(ARCH),arm) - PKG_LIBC:=musleabi - - ARM_CPU_FEATURES:=$(word 2,$(subst +,$(space),$(call qstrip,$(CONFIG_CPU_TYPE)))) - ifneq ($(filter $(ARM_CPU_FEATURES),vfp vfpv2),) - PKG_LIBC:=musleabihf - endif -endif - -PKG_ARCH=$(ARCH) -ifeq ($(ARCH),i386) - PKG_ARCH:=i686 -endif - -PKG_SOURCE:=aliyundrive-fuse-v$(PKG_VERSION).$(PKG_ARCH)-unknown-linux-$(PKG_LIBC).tar.gz -PKG_SOURCE_URL:=https://github.com/messense/aliyundrive-fuse/releases/download/v$(PKG_VERSION)/ -PKG_HASH:=skip - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - SECTION:=multimedia - CATEGORY:=Multimedia - DEPENDS:=+fuse-utils - TITLE:=FUSE for AliyunDrive - URL:=https://github.com/messense/aliyundrive-fuse -endef - -define Package/$(PKG_NAME)/description -FUSE for AliyunDrive. -endef - -define Package/$(PKG_NAME)/conffiles -/etc/config/aliyundrive-fuse -endef - -define Download/sha256sum - FILE:=$(PKG_SOURCE).sha256 - URL_FILE:=$(FILE) - URL:=$(PKG_SOURCE_URL) - HASH:=skip -endef -$(eval $(call Download,sha256sum)) - -define Build/Prepare - mv $(DL_DIR)/$(PKG_SOURCE).sha256 . - cp $(DL_DIR)/$(PKG_SOURCE) . - shasum -a 256 -c $(PKG_SOURCE).sha256 - rm $(PKG_SOURCE).sha256 $(PKG_SOURCE) - - tar -C $(PKG_BUILD_DIR)/ -zxf $(DL_DIR)/$(PKG_SOURCE) -endef - -define Build/Compile - echo "$(PKG_NAME) using precompiled binary." -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/aliyundrive-fuse $(1)/usr/bin/aliyundrive-fuse - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/aliyundrive-fuse.init $(1)/etc/init.d/aliyundrive-fuse - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_CONF) ./files/aliyundrive-fuse.config $(1)/etc/config/aliyundrive-fuse -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/aliyundrive-fuse/files/aliyundrive-fuse.config b/aliyundrive-fuse/files/aliyundrive-fuse.config deleted file mode 100644 index 7be486f3..00000000 --- a/aliyundrive-fuse/files/aliyundrive-fuse.config +++ /dev/null @@ -1,7 +0,0 @@ -config default - option enable '0' - option debug '0' - option refresh_token '' - option domain_id '' - option mount_point '/mnt/aliyundrive' - option read_buffer_size '10485760' diff --git a/aliyundrive-fuse/files/aliyundrive-fuse.init b/aliyundrive-fuse/files/aliyundrive-fuse.init deleted file mode 100755 index c923b726..00000000 --- a/aliyundrive-fuse/files/aliyundrive-fuse.init +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh /etc/rc.common - -USE_PROCD=1 - -START=99 -STOP=15 - -NAME=aliyundrive-fuse - -uci_get_by_type() { - local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} - -start_service() { - local enable=$(uci_get_by_type default enable) - case "$enable" in - 1|on|true|yes|enabled) - local refresh_token=$(uci_get_by_type default refresh_token) - local domain_id=$(uci_get_by_type default domain_id) - local mount_point=$(uci_get_by_type default mount_point) - local read_buf_size=$(uci_get_by_type default read_buffer_size 10485760) - - local extra_options="" - - if [[ ! -z "$domain_id" ]]; then - extra_options="$extra_options --domain-id $domain_id" - fi - - mkdir -p "$mount_point" - procd_open_instance - procd_set_param command /bin/sh -c "/usr/bin/$NAME $extra_options -S $read_buf_size --workdir /var/run/$NAME $mount_point >>/var/log/$NAME.log 2>&1" - procd_set_param pidfile /var/run/$NAME.pid - procd_set_param env REFRESH_TOKEN="$refresh_token" - case $(uci_get_by_type default debug) in - 1|on|true|yes|enabled) - procd_append_param env RUST_LOG="aliyundrive_fuse=debug" ;; - *) ;; - esac - procd_close_instance ;; - *) - stop_service ;; - esac -} - -service_triggers() { - procd_add_reload_trigger "aliyundrive-fuse" -} diff --git a/aliyundrive-webdav/Makefile b/aliyundrive-webdav/Makefile deleted file mode 100644 index 2899d750..00000000 --- a/aliyundrive-webdav/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=aliyundrive-webdav -PKG_VERSION:=1.2.2 -PKG_RELEASE:= - -PKG_LICENSE:=MIT -PKG_MAINTAINER:=messense - -PKG_LIBC:=musl -ifeq ($(ARCH),arm) - PKG_LIBC:=musleabi - - ARM_CPU_FEATURES:=$(word 2,$(subst +,$(space),$(call qstrip,$(CONFIG_CPU_TYPE)))) - ifneq ($(filter $(ARM_CPU_FEATURES),vfp vfpv2),) - PKG_LIBC:=musleabihf - endif -endif - -PKG_ARCH=$(ARCH) -ifeq ($(ARCH),i386) - PKG_ARCH:=i686 -endif - -PKG_SOURCE:=aliyundrive-webdav-v$(PKG_VERSION).$(PKG_ARCH)-unknown-linux-$(PKG_LIBC).tar.gz -PKG_SOURCE_URL:=https://github.com/messense/aliyundrive-webdav/releases/download/v$(PKG_VERSION)/ -PKG_HASH:=skip - -include $(INCLUDE_DIR)/package.mk - -define Package/aliyundrive-webdav - SECTION:=multimedia - CATEGORY:=Multimedia - TITLE:=WebDAV server for AliyunDrive - URL:=https://github.com/messense/aliyundrive-webdav -endef - -define Package/aliyundrive-webdav/description -WebDAV server for AliyunDrive. -endef - -define Package/aliyundrive-webdav/conffiles -/etc/config/aliyundrive-webdav -endef - -define Download/sha256sum - FILE:=$(PKG_SOURCE).sha256 - URL_FILE:=$(FILE) - URL:=$(PKG_SOURCE_URL) - HASH:=skip -endef -$(eval $(call Download,sha256sum)) - -define Build/Prepare - mv $(DL_DIR)/$(PKG_SOURCE).sha256 . - cp $(DL_DIR)/$(PKG_SOURCE) . - shasum -a 256 -c $(PKG_SOURCE).sha256 - rm $(PKG_SOURCE).sha256 $(PKG_SOURCE) - - tar -C $(PKG_BUILD_DIR)/ -zxf $(DL_DIR)/$(PKG_SOURCE) -endef - -define Build/Compile - echo "aliyundrive-webdav using precompiled binary." -endef - -define Package/aliyundrive-webdav/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/aliyundrive-webdav $(1)/usr/bin/aliyundrive-webdav - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/aliyundrive-webdav.init $(1)/etc/init.d/aliyundrive-webdav - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_CONF) ./files/aliyundrive-webdav.config $(1)/etc/config/aliyundrive-webdav -endef - -$(eval $(call BuildPackage,aliyundrive-webdav)) diff --git a/aliyundrive-webdav/files/aliyundrive-webdav.config b/aliyundrive-webdav/files/aliyundrive-webdav.config deleted file mode 100644 index 6c27837e..00000000 --- a/aliyundrive-webdav/files/aliyundrive-webdav.config +++ /dev/null @@ -1,17 +0,0 @@ -config server - option enable '0' - option debug '0' - option refresh_token '' - option host '0.0.0.0' - option port '8080' - option auth_user '' - option auth_password '' - option read_buffer_size '10485760' - option cache_size '1000' - option cache_ttl '600' - option root '/' - option no_trash '0' - option domain_id '' - option read_only '0' - option tls_cert '' - option tls_key '' diff --git a/aliyundrive-webdav/files/aliyundrive-webdav.init b/aliyundrive-webdav/files/aliyundrive-webdav.init deleted file mode 100755 index 8b1b1a10..00000000 --- a/aliyundrive-webdav/files/aliyundrive-webdav.init +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh /etc/rc.common - -USE_PROCD=1 - -START=99 -STOP=15 - -NAME=aliyundrive-webdav - -uci_get_by_type() { - local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} - -start_service() { - local enable=$(uci_get_by_type server enable) - case "$enable" in - 1|on|true|yes|enabled) - local refresh_token=$(uci_get_by_type server refresh_token) - local auth_user=$(uci_get_by_type server auth_user) - local auth_password=$(uci_get_by_type server auth_password) - local read_buf_size=$(uci_get_by_type server read_buffer_size 10485760) - local cache_size=$(uci_get_by_type server cache_size 1000) - local cache_ttl=$(uci_get_by_type server cache_ttl 600) - local host=$(uci_get_by_type server host 127.0.0.1) - local port=$(uci_get_by_type server port 8080) - local root=$(uci_get_by_type server root /) - local domain_id=$(uci_get_by_type server domain_id) - local tls_cert=$(uci_get_by_type server tls_cert) - local tls_key=$(uci_get_by_type server tls_key) - - local extra_options="-I" - - if [[ ! -z "$domain_id" ]]; then - extra_options="$extra_options --domain-id $domain_id" - else - case "$(uci_get_by_type server no_trash 0)" in - 1|on|true|yes|enabled) - extra_options="$extra_options --no-trash" - ;; - *) ;; - esac - - case "$(uci_get_by_type server read_only 0)" in - 1|on|true|yes|enabled) - extra_options="$extra_options --read-only" - ;; - *) ;; - esac - fi - - if [[ ! -z "$tls_cert" && ! -z "$tls_key" ]]; then - extra_options="$extra_options --tls-cert $tls_cert --tls-key $tls_key" - fi - - procd_open_instance - procd_set_param command /bin/sh -c "/usr/bin/$NAME $extra_options --host $host --port $port --root $root -S $read_buf_size --cache-size $cache_size --cache-ttl $cache_ttl --workdir /var/run/$NAME >>/var/log/$NAME.log 2>&1" - procd_set_param pidfile /var/run/$NAME.pid - procd_set_param env REFRESH_TOKEN="$refresh_token" - [[ ! -z "$auth_user" ]] && procd_append_param env WEBDAV_AUTH_USER="$auth_user" - [[ ! -z "$auth_password" ]] && procd_append_param env WEBDAV_AUTH_PASSWORD="$auth_password" - case $(uci_get_by_type server debug) in - 1|on|true|yes|enabled) - procd_append_param env RUST_LOG="aliyundrive_webdav=debug" ;; - *) ;; - esac - procd_close_instance ;; - *) - stop_service ;; - esac -} - -service_triggers() { - procd_add_reload_trigger "aliyundrive-webdav" -} diff --git a/brook/Makefile b/brook/Makefile deleted file mode 100644 index 3e58d081..00000000 --- a/brook/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=brook -PKG_VERSION:=20210701 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/txthinking/brook/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=92c2253349af05ea5aa7a45cddd39ca638c732b2ffdb5066a5f03d2df40cb0b5 - -PKG_MAINTAINER:=Tianling Shen -PKG_LICENSE:=GPL-3.0 -PKG_LICENSE_FILES:=LICENSE - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -PKG_CONFIG_DEPENDS:= \ - CONFIG_BROOK_COMPRESS_GOPROXY \ - CONFIG_BROOK_COMPRESS_UPX - -GO_PKG:=github.com/txthinking/brook -GO_PKG_BUILD_PKG:=github.com/txthinking/brook/cli/brook -GO_PKG_LDFLAGS:=-s -w - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/brook - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=A cross-platform proxy software - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle - URL:=https://github.com/txthinking/brook -endef - -define Package/brook/description - Brook is a cross-platform strong encryption and not detectable proxy. - Zero-Configuration. -endef - -define Package/brook/config - config BROOK_COMPRESS_GOPROXY - bool "Compiling with GOPROXY proxy" - default n - - config BROOK_COMPRESS_UPX - bool "Compress executable files with UPX" - depends on !mips64 - default n -endef - -ifeq ($(CONFIG_BROOK_COMPRESS_GOPROXY),y) - export GO111MODULE=on - export GOPROXY=https://goproxy.baidu.com -endif - -define Build/Compile - $(call GoPackage/Build/Compile) -ifeq ($(CONFIG_BROOK_COMPRESS_UPX),y) - $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/brook -endif -endef - -$(eval $(call GoBinPackage,brook)) -$(eval $(call BuildPackage,brook)) diff --git a/chinadns-ng/Makefile b/chinadns-ng/Makefile deleted file mode 100644 index afd0b1c0..00000000 --- a/chinadns-ng/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=chinadns-ng -PKG_VERSION:=1.0-beta.25 -PKG_RELEASE:= - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/zfl9/chinadns-ng.git -PKG_SOURCE_DATE:=2021-05-08 -PKG_SOURCE_VERSION:=14cc6348d67b09cae37d9bce554c89c2c0e0b265 -PKG_MIRROR_HASH:=3b66fc0888d9488e3b8e39df3016d51fae1b43325d292381e94aa3c7d2318282 - -PKG_LICENSE:=AGPL-3.0-only -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=pexcn - -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/chinadns-ng - SECTION:=net - CATEGORY:=Network - SUBMENU:=IP Addresses and Names - TITLE:=ChinaDNS next generation, refactoring with epoll and ipset. - URL:=https://github.com/zfl9/chinadns-ng - DEPENDS:=+ipset -endef - -define Package/chinadns-ng/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/chinadns-ng $(1)/usr/bin -endef - -$(eval $(call BuildPackage,chinadns-ng)) diff --git a/diy/.packages/adguardhome/patches/version.patch b/diy/.packages/adguardhome/patches/version.patch deleted file mode 100644 index 31f1315d..00000000 --- a/diy/.packages/adguardhome/patches/version.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- a/client/src/helpers/version.js -+++ b/client/src/helpers/version.js -@@ -13,5 +13,5 @@ export const areEqualVersions = (left, right) => { - - const leftVersion = left.replace(/^v/, ''); - const rightVersion = right.replace(/^v/, ''); -- return leftVersion === rightVersion; -+ return leftVersion < rightVersion; - }; diff --git a/diy/.packages/ddns-scripts-aliyun/Makefile b/diy/.packages/ddns-scripts-aliyun/Makefile deleted file mode 100644 index b3775267..00000000 --- a/diy/.packages/ddns-scripts-aliyun/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=ddns-scripts-aliyun -PKG_VERSION:=1.0.2 -PKG_RELEASE:=1 - -PKG_LICENSE:=GPLv2 -PKG_MAINTAINER:=Sense - -PKG_BUILD_PARALLEL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - SECTION:=net - CATEGORY:=Network - SUBMENU:=IP Addresses and Names - TITLE:=Extension for aliyun.com (require curl) - PKGARCH:=all - DEPENDS:=+ddns-scripts +curl +jshn +openssl-util -endef - -define Package/$(PKG_NAME)/description - Dynamic DNS Client scripts extension for aliyun.com API v1 (require curl) - It requires: - "option username" to be a valid aliyun access key id - "option password" to be the matching aliyun access key secret - "option domain" the dns domain to update the record for (eg. A-record: home.) -endef - -define Build/Configure -endef - -define Build/Compile -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/lib/ddns - $(INSTALL_BIN) ./update_aliyun_com.sh $(1)/usr/lib/ddns - - $(INSTALL_DIR) $(1)/usr/share/ddns/default - $(INSTALL_DATA) ./aliyun.com.json $(1)/usr/share/ddns/default -endef - -define Package/$(PKG_NAME)/prerm -#!/bin/sh -if [ -z "$${IPKG_INSTROOT}" ]; then - /etc/init.d/ddns stop -fi -if [ -w $${IPKG_INSTROOT}/etc/ddns/services ]; then - /bin/sed -i '/aliyun\.com/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 - /bin/sed -i '/aliyun\.com/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 -fi -exit 0 -endef - -define Package/$(PKG_NAME)/postinst -#!/bin/sh -if [ -w $${IPKG_INSTROOT}/etc/ddns/services ]; then - /bin/sed -i '/aliyun\.com/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 - /bin/sed -i '/aliyun\.com/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 - printf "%s\\t\\t%s\\n" '"aliyun.com"' '"update_aliyun_com.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services - printf "%s\\t\\t%s\\n" '"aliyun.com"' '"update_aliyun_com.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services_ipv6 -fi -if [ -z "$${IPKG_INSTROOT}" ]; then - /etc/init.d/ddns enabled - /etc/init.d/ddns start -fi -exit 0 -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/diy/.packages/ddns-scripts-aliyun/aliyun.com.json b/diy/.packages/ddns-scripts-aliyun/aliyun.com.json deleted file mode 100644 index c1ad8a55..00000000 --- a/diy/.packages/ddns-scripts-aliyun/aliyun.com.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "aliyun.com", - "ipv4": { - "url": "update_aliyun_com.sh" - }, - "ipv6": { - "url": "update_aliyun_com.sh" - } -} diff --git a/diy/.packages/ddns-scripts-aliyun/update_aliyun_com.sh b/diy/.packages/ddns-scripts-aliyun/update_aliyun_com.sh deleted file mode 100644 index c91152b4..00000000 --- a/diy/.packages/ddns-scripts-aliyun/update_aliyun_com.sh +++ /dev/null @@ -1,304 +0,0 @@ -#!/bin/sh -# -# 用于阿里云域名解析的DNS更新脚本 -# 2017-2021 Sense -# 阿里云域名解析API文档 https://help.aliyun.com/document_detail/29739.html -# -# 本脚本由 dynamic_dns_functions.sh 内的函数 send_update() 调用 -# -# 需要在 /etc/config/ddns 中设置的选项 -# option username - 阿里云API访问账号 Access Key ID。可通过 aliyun.com 帐号管理的 accesskeys 获取, 或者访问 https://ak-console.aliyun.com -# option password - 阿里云API访问密钥 Access Key Secret -# option domain - 完整的域名。建议主机与域名之间使用 @符号 分隔,否则将以第一个 .符号 之前的内容作为主机名 -# - -# 检查传入参数 -[ -z "$username" ] && write_log 14 "配置错误!保存阿里云API访问账号的'用户名'不能为空" -[ -z "$password" ] && write_log 14 "配置错误!保存阿里云API访问密钥的'密码'不能为空" -[ $USE_CURL -eq 0 ] && USE_CURL=1 # 强制使用 cURL -[ $use_https -eq 1 -a -z "$cacert" ] && cacert="IGNORE" # 使用 HTTPS 时 CA 证书为空则不检查服务器证书 - -# 检查外部调用工具 -local CURL=$(command -v curl) -local CURL_SSL=$($CURL -V 2>/dev/null | grep -F "https") -local CURL_PROXY=$(find /lib /usr/lib -name libcurl.so* -exec strings {} 2>/dev/null \; | grep -im1 "all_proxy") -[ -z "$CURL" ] && write_log 13 "与阿里云服务器通信需要 cURL 支持, 请先安装" -command -v sed >/dev/null 2>&1 || write_log 13 "使用阿里云API需要 sed 支持, 请先安装" -command -v openssl >/dev/null 2>&1 || write_log 13 "使用阿里云API需要 openssl-util 支持, 请先安装" - -# 包含用于解析 JSON 格式返回值的函数 -. /usr/share/libubox/jshn.sh - -# 变量声明 -local __HOST __DOMAIN __FQDN __TYPE __PROG __URLBASE __DATA __TTL __SEPARATOR __RECID -__URLBASE="http://alidns.aliyuncs.com" -[ $use_https -eq 1 ] && __URLBASE=$(echo $__URLBASE | sed -e 's#^http:#https:#') -__TTL= -__SEPARATOR="&" - -# 从 $domain 分离主机和域名 -[ "${domain:0:2}" == "@." ] && domain="${domain/./}" # 主域名处理 -[ "$domain" == "${domain/@/}" ] && domain="${domain/./@}" # 未找到分隔符,兼容常用域名格式 -__HOST="${domain%%@*}" -__DOMAIN="${domain#*@}" -if [ -z "$__HOST" -o "$__HOST" == "$__DOMAIN" ]; then - __HOST="@" - __FQDN=${__DOMAIN} -else - __FQDN=${__HOST}.${__DOMAIN} -fi - -# 设置记录类型 -[ $use_ipv6 -eq 0 ] && __TYPE="A" || __TYPE="AAAA" - -# 构造基本通信命令, 从 dynamic_dns_functions.sh 函数 do_transfer() 复制 -build_command() { - __PROG="$CURL -qLsS -o $DATFILE --stderr $ERRFILE" - # check HTTPS support - [ -z "$CURL_SSL" -a $use_https -eq 1 ] && \ - write_log 13 "cURL: libcurl 编译时缺少 https 支持" - # force network/interface-device to use for communication - if [ -n "$bind_network" ]; then - local __DEVICE - network_get_device __DEVICE $bind_network || \ - write_log 13 "无法使用 'network_get_device $bind_network' 检测到本地设备 - 错误代码: '$?'" - write_log 7 "强制通过设备 '$__DEVICE' 进行通信" - __PROG="$__PROG --interface $__DEVICE" - fi - # force ip version to use - if [ $force_ipversion -eq 1 ]; then - [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6" # force IPv4/IPv6 - fi - # set certificate parameters - if [ $use_https -eq 1 ]; then - if [ "$cacert" = "IGNORE" ]; then # idea from Ticket #15327 to ignore server cert - __PROG="$__PROG --insecure" # but not empty better to use "IGNORE" - elif [ -f "$cacert" ]; then - __PROG="$__PROG --cacert $cacert" - elif [ -d "$cacert" ]; then - __PROG="$__PROG --capath $cacert" - elif [ -n "$cacert" ]; then # it's not a file and not a directory but given - write_log 14 "在 '$cacert' 中未发现用于 HTTPS 通信的有效证书" - fi - fi - # disable proxy if no set (there might be .wgetrc or .curlrc or wrong environment set) - # or check if libcurl compiled with proxy support - if [ -z "$proxy" ]; then - __PROG="$__PROG --noproxy '*'" - elif [ -z "$CURL_PROXY" ]; then - # if libcurl has no proxy support and proxy should be used then force ERROR - write_log 13 "cURL: libcurl 编译时缺少代理支持" - fi -} - -# 服务器通信函数, 从 dynamic_dns_functions.sh 函数 do_transfer() 复制 -server_transfer() { - local __URL="$@" - local __ERR=0 - local __CNT=0 # error counter - local __RUNPROG - - [ $# -eq 0 ] && write_log 12 "'server_transfer()' 出错 - 参数数量错误" - - while : ; do - build_Request $__URL - __RUNPROG="$__PROG -X POST '$__URLBASE' -d '$__DATA'" # build final command - - write_log 7 "#> $__RUNPROG" - eval $__RUNPROG # DO transfer - __ERR=$? # save error code - [ $__ERR -eq 0 ] && return 0 # no error leave - [ -n "$LUCI_HELPER" ] && return 1 # no retry if called by LuCI helper script - - write_log 3 "cURL Error: '$__ERR'" - write_log 7 "$(cat $ERRFILE)" # report error - - [ $VERBOSE -gt 1 ] && { - # VERBOSE > 1 then NO retry - write_log 4 "Transfer failed - Verbose Mode: $VERBOSE - NO retry on error" - return 1 - } - - __CNT=$(( $__CNT + 1 )) # increment error counter - # if error count > retry_count leave here - [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && \ - write_log 14 "Transfer failed after $retry_count retries" - - write_log 4 "Transfer failed - retry $__CNT/$retry_count in $RETRY_SECONDS seconds" - sleep $RETRY_SECONDS & - PID_SLEEP=$! - wait $PID_SLEEP # enable trap-handler - PID_SLEEP=0 - done - # we should never come here there must be a programming error - write_log 12 "'server_transfer()' 出错 - 程序代码错误" -} - -# 百分号编码 -percentEncode() { - if [ -z "${1//[A-Za-z0-9_.~-]/}" ]; then - echo -n "$1" - else - local string=$1 i=0 ret chr - while [ $i -lt ${#string} ]; do - chr=${string:$i:1} - [ -z "${chr#[^A-Za-z0-9_.~-]}" ] && chr=$(printf '%%%02X' "'$chr") - ret="$ret$chr" - let i++ - done - echo -n "$ret" - fi -} - -# 构造阿里云域名解析请求参数 -build_Request() { - local args="$@" HTTP_METHOD="POST" string signature - - # 添加请求参数 - __DATA= - for string in $args; do - case "${string%%=*}" in - Format|Version|AccessKeyId|SignatureMethod|Timestamp|SignatureVersion|SignatureNonce|Signature) ;; # 过滤公共参数 - *) __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}");; - esac - done - __DATA="${__DATA:1}" - - # 附加公共参数 - string="Format=JSON"; __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}") - string="Version=2015-01-09"; __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}") - string="AccessKeyId=$username"; __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}") - string="SignatureMethod=HMAC-SHA1"; __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}") - string="Timestamp="$(date -u '+%Y-%m-%dT%H:%M:%SZ'); __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}") - string="SignatureVersion=1.0"; __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}") - string="SignatureNonce="$(cat '/proc/sys/kernel/random/uuid'); __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}") - - # 对请求参数进行排序,用于生成签名 - string=$(echo -n "$__DATA" | sed 's/\'"${__SEPARATOR}"'/\n/g' | sort | sed ':label; N; s/\n/\'"${__SEPARATOR}"'/g; b label') - # 构造用于计算签名的字符串 - string="${HTTP_METHOD}${__SEPARATOR}"$(percentEncode "/")"${__SEPARATOR}"$(percentEncode "$string") - # 字符串计算签名HMAC值 - signature=$(echo -n "$string" | openssl dgst -sha1 -hmac "${password}&" -binary) - # HMAC值编码成字符串,得到签名值 - signature=$(echo -n "$signature" | openssl base64) - - # 附加签名参数 - string="Signature=$signature"; __DATA="$__DATA${__SEPARATOR}"$(percentEncode "${string%%=*}")"="$(percentEncode "${string#*=}") -} - -# 获取解析记录列表 -describe_domain() { - local __URL count value ipaddr i=1 ret=0 - __URL="Action=DescribeDomainRecords DomainName=${__DOMAIN} RRKeyWord=${__HOST} Type=${__TYPE}" - server_transfer "$__URL" || return 1 - json_cleanup; json_load "$(cat "$DATFILE" 2>/dev/null)" >/dev/null 2>&1 - json_get_var count "TotalCount" - if [ -z "$count" ]; then - json_get_var value "Message" - write_log 4 "Aliyun.com 响应失败, 错误原因: $value" - return 127 - else - json_select "DomainRecords" >/dev/null 2>&1 - json_select "Record" >/dev/null 2>&1 - while [ $i -le $count ]; do - json_select $i >/dev/null 2>&1 - json_get_var value "RR" - if [ "$value" == "$__HOST" ]; then - json_get_var __RECID "RecordId" -# write_log 7 "获得 ${__FQDN} ${__TYPE}记录ID: ${__RECID}" - json_get_var value "Locked" - [ $value -ne 0 ] && write_log 13 "Aliyun.com 上的 ${__FQDN} ${__TYPE}记录已被锁定, 无法更新" - json_get_var value "Status" - [ "$value" != "ENABLE" ] && ret=$(( $ret | 4 )) && write_log 7 "Aliyun.com 上的 ${__FQDN} ${__TYPE}记录已被禁用" - json_get_var value "Value" - # 展开 IPv6 地址用于比较 - if [ $use_ipv6 -eq 0 ]; then - ipaddr="$__IP" - else - expand_ipv6 $__IP ipaddr - expand_ipv6 $value value - fi - if [ "$value" == "$ipaddr" ]; then - write_log 7 "Aliyun.com 上的 ${__FQDN} ${__TYPE}记录无需更新" - else - write_log 7 "Aliyun.com 上的 ${__FQDN} ${__TYPE}记录需要更新" - ret=$(( $ret | 2 )) - fi - break - fi - json_select .. - let i++ - done - if [ -z "$__RECID" ]; then - write_log 7 "Aliyun.com 上的 ${__FQDN} ${__TYPE}记录不存在" - ret=8 - fi - fi - return $ret -} - -# 添加解析记录 -add_domain() { - local __URL value - __URL="Action=AddDomainRecord DomainName=${__DOMAIN} RR=${__HOST} Type=${__TYPE} Value=${__IP}" - [ -n "${__TTL}" ] && __URL="${__URL} TTL=${__TTL}" - server_transfer "$__URL" || return 1 - json_cleanup; json_load "$(cat "$DATFILE" 2>/dev/null)" >/dev/null 2>&1 - json_get_var value "RecordId" - if [ -z "$value" ]; then - json_get_var value "Message" - write_log 4 "Aliyun.com 响应失败, 错误原因: $value" - return 127 - else - write_log 7 "Aliyun.com 上的 ${__FQDN} ${__TYPE}记录已添加" - fi - return 0 -} - -# 更新解析记录 -update_domain() { - local __URL value - __URL="Action=UpdateDomainRecord RR=${__HOST} RecordId=${__RECID} Type=${__TYPE} Value=${__IP}" - [ -n "${__TTL}" ] && __URL="${__URL} TTL=${__TTL}" - server_transfer "$__URL" || return 1 - json_cleanup; json_load "$(cat "$DATFILE" 2>/dev/null)" >/dev/null 2>&1 - json_get_var value "RecordId" - if [ -z "$value" ]; then - json_get_var value "Message" - write_log 4 "Aliyun.com 响应失败, 错误原因: $value" - return 127 - else - write_log 7 "Aliyun.com 上的 ${__FQDN} ${__TYPE}记录已更新为: ${__IP}" - fi - return 0 -} - -# 启用解析记录 -enable_domain() { - local __URL value - __URL="Action=SetDomainRecordStatus RecordId=${__RECID} Status=Enable" - server_transfer "$__URL" || return 1 - json_cleanup; json_load "$(cat "$DATFILE" 2>/dev/null)" >/dev/null 2>&1 - json_get_var value "RecordId" - if [ -z "$value" ]; then - json_get_var value "Message" - write_log 4 "Aliyun.com 响应失败, 错误原因: $value" - return 127 - else - write_log 7 "Aliyun.com 上的 ${__FQDN} ${__TYPE}记录已启用" - fi - return 0 -} - -build_command -describe_domain -ret=$? -if [ $(( $ret & 1 )) -ne 0 ]; then - return $ret -elif [ $ret -eq 8 ]; then - sleep 3 && { add_domain; [ $? -ne 0 ] && return $?; } -else - [ $(( $ret & 4 )) -ne 0 ] && sleep 3 && { enable_domain; [ $? -ne 0 ] && return $?; } - [ $(( $ret & 2 )) -ne 0 ] && sleep 3 && { update_domain; [ $? -ne 0 ] && return $?; } -fi -return 0 diff --git a/diy/.packages/ddns-scripts-dnspod/Makefile b/diy/.packages/ddns-scripts-dnspod/Makefile deleted file mode 100644 index b81e0e49..00000000 --- a/diy/.packages/ddns-scripts-dnspod/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=ddns-scripts-dnspod -PKG_VERSION:=1.0.3 -PKG_RELEASE:=8 - -PKG_LICENSE:=GPLv2 -PKG_MAINTAINER:=Small_5 - -PKG_BUILD_PARALLEL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - SECTION:=net - CATEGORY:=Network - SUBMENU:=IP Addresses and Names - TITLE:=DDNS extension for Dnspod.com/Dnspod.cn - PKGARCH:=all - DEPENDS:=+ddns-scripts +curl +jsonfilter -endef - -define Package/$(PKG_NAME)/description - Dynamic DNS Client scripts extension for Dnspod.com/Dnspod.cn -endef - -define Build/Configure -endef - -define Build/Compile - $(CP) ./*.sh $(PKG_BUILD_DIR) - # remove comments, white spaces and empty lines - for FILE in `find $(PKG_BUILD_DIR) -type f`; do \ - $(SED) 's/^[[:space:]]*//' \ - -e '/^#[[:space:]]\|^#$$$$/d' \ - -e 's/[[:space:]]#[[:space:]].*$$$$//' \ - -e 's/[[:space:]]*$$$$//' \ - -e '/^\/\/[[:space:]]/d' \ - -e '/^[[:space:]]*$$$$/d' $$$$FILE; \ - done -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/lib/ddns - $(INSTALL_BIN) $(PKG_BUILD_DIR)/*.sh $(1)/usr/lib/ddns - $(INSTALL_DIR) $(1)/usr/share/ddns/default - $(INSTALL_DATA) ./*.json $(1)/usr/share/ddns/default -endef - -define Package/$(PKG_NAME)/prerm - #!/bin/sh - [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1 - exit 0 # suppress errors -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/diy/.packages/ddns-scripts-dnspod/README.md b/diy/.packages/ddns-scripts-dnspod/README.md deleted file mode 100644 index 9231680a..00000000 --- a/diy/.packages/ddns-scripts-dnspod/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# ddns-scripts-dnspod -支持同一域名同时使用A/AAAA记录 diff --git a/diy/.packages/ddns-scripts-dnspod/dnspod.cn.json b/diy/.packages/ddns-scripts-dnspod/dnspod.cn.json deleted file mode 100644 index dcfa4a25..00000000 --- a/diy/.packages/ddns-scripts-dnspod/dnspod.cn.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "dnspod.cn", - "ipv4": { - "url": "update_dnspod_cn.sh" - }, - "ipv6": { - "url": "update_dnspod_cn.sh" - } -} diff --git a/diy/.packages/ddns-scripts-dnspod/dnspod.com.json b/diy/.packages/ddns-scripts-dnspod/dnspod.com.json deleted file mode 100644 index 899c23a6..00000000 --- a/diy/.packages/ddns-scripts-dnspod/dnspod.com.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "dnspod.com", - "ipv4": { - "url": "update_dnspod_com.sh" - }, - "ipv6": { - "url": "update_dnspod_com.sh" - } -} diff --git a/diy/.packages/ddns-scripts-dnspod/update_dnspod_cn.sh b/diy/.packages/ddns-scripts-dnspod/update_dnspod_cn.sh deleted file mode 100644 index 8330fedf..00000000 --- a/diy/.packages/ddns-scripts-dnspod/update_dnspod_cn.sh +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/sh - -# 检查传入参数 -[ -z "$username" ] && write_log 14 "Configuration error! [User name] cannot be empty" -[ -z "$password" ] && write_log 14 "Configuration error! [Password] cannot be empty" - -# 检查外部调用工具 -[ -n "$CURL_SSL" ] || write_log 13 "Dnspod communication require cURL with SSL support. Please install" -[ -n "$CURL_PROXY" ] || write_log 13 "cURL: libcurl compiled without Proxy support" - -# 变量声明 -local __URLBASE __HOST __DOMAIN __TYPE __CMDBASE __POST __POST1 __RECIP __RECID __TTL -__URLBASE="https://dnsapi.cn" - -# 从 $domain 分离主机和域名 -[ "${domain:0:2}" = "@." ] && domain="${domain/./}" # 主域名处理 -[ "$domain" = "${domain/@/}" ] && domain="${domain/./@}" # 未找到分隔符,兼容常用域名格式 -__HOST="${domain%%@*}" -__DOMAIN="${domain#*@}" -[ -z "$__HOST" -o "$__HOST" = "$__DOMAIN" ] && __HOST=@ - -# 设置记录类型 -[ $use_ipv6 = 0 ] && __TYPE=A || __TYPE=AAAA - -# 构造基本通信命令 -build_command(){ - __CMDBASE="$CURL -Ss" - # 绑定用于通信的主机/IP - if [ -n "$bind_network" ];then - local __DEVICE - network_get_physdev __DEVICE $bind_network || write_log 13 "Can not detect local device using 'network_get_physdev $bind_network' - Error: '$?'" - write_log 7 "Force communication via device '$__DEVICE'" - __CMDBASE="$__CMDBASE --interface $__DEVICE" - fi - # 强制设定IP版本 - if [ $force_ipversion = 1 ];then - [ $use_ipv6 = 0 ] && __CMDBASE="$__CMDBASE -4" || __CMDBASE="$__CMDBASE -6" - fi - # 设置CA证书参数 - if [ $use_https = 1 ];then - if [ "$cacert" = IGNORE ];then - __CMDBASE="$__CMDBASE --insecure" - elif [ -f "$cacert" ];then - __CMDBASE="$__CMDBASE --cacert $cacert" - elif [ -d "$cacert" ];then - __CMDBASE="$__CMDBASE --capath $cacert" - elif [ -n "$cacert" ];then - write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication" - fi - fi - # 如果没有设置,禁用代理 (这可能是 .wgetrc 或环境设置错误) - [ -z "$proxy" ] && __CMDBASE="$__CMDBASE --noproxy '*'" - __CMDBASE="$__CMDBASE -d" -} - -# 用于Dnspod API的通信函数 -dnspod_transfer(){ - __CNT=0 - case "$1" in - 0)__A="$__CMDBASE '$__POST' $__URLBASE/Record.List";; - 1)__A="$__CMDBASE '$__POST1' $__URLBASE/Record.Create";; - 2)__A="$__CMDBASE '$__POST1&record_id=$__RECID&ttl=$__TTL' $__URLBASE/Record.Modify";; - esac - - write_log 7 "#> $__A" - while ! __TMP=`eval $__A 2>&1`;do - write_log 3 "[$__TMP]" - if [ $VERBOSE -gt 1 ];then - write_log 4 "Transfer failed - detailed mode: $VERBOSE - Do not try again after an error" - return 1 - fi - __CNT=$(( $__CNT + 1 )) - [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && write_log 14 "Transfer failed after $retry_count retries" - write_log 4 "Transfer failed - $__CNT Try again in $RETRY_SECONDS seconds" - sleep $RETRY_SECONDS & - PID_SLEEP=$! - wait $PID_SLEEP - PID_SLEEP=0 - done - __ERR=`jsonfilter -s "$__TMP" -e "@.status.code"` - [ $__ERR = 1 ] && return 0 - [ $__ERR = 10 ] && [ $1 = 0 ] && return 0 - __TMP=`jsonfilter -s "$__TMP" -e "@.status.message"` - local A="$(date +%H%M%S) ERROR : [$__TMP] - 终止进程" - logger -p user.err -t ddns-scripts[$$] $SECTION_ID: ${A:15} - printf "%s\n" " $A" >> $LOGFILE - exit 1 -} - -# 添加解析记录 -add_domain(){ - dnspod_transfer 1 - printf "%s\n" " $(date +%H%M%S) : 添加解析记录成功: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN],[IP:$__IP]" >> $LOGFILE - return 0 -} - -# 修改解析记录 -update_domain(){ - dnspod_transfer 2 - printf "%s\n" " $(date +%H%M%S) : 修改解析记录成功: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN],[IP:$__IP],[TTL:$__TTL]" >> $LOGFILE - return 0 -} - -# 获取域名解析记录 -describe_domain(){ - ret=0 - __POST="login_token=$username,$password&format=json&domain=$__DOMAIN&sub_domain=$__HOST" - __POST1="$__POST&value=$__IP&record_type=$__TYPE&record_line_id=0" - dnspod_transfer 0 - __TMP=`jsonfilter -s "$__TMP" -e "@.records[@.type='$__TYPE' && @.line_id='0']"` - if [ -z "$__TMP" ];then - printf "%s\n" " $(date +%H%M%S) : 解析记录不存在: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN]" >> $LOGFILE - ret=1 - else - __RECIP=`jsonfilter -s "$__TMP" -e "@.value"` - if [ "$__RECIP" != "$__IP" ];then - __RECID=`jsonfilter -s "$__TMP" -e "@.id"` - __TTL=`jsonfilter -s "$__TMP" -e "@.ttl"` - printf "%s\n" " $(date +%H%M%S) : 解析记录需要更新: [解析记录IP:$__RECIP] [本地IP:$__IP]" >> $LOGFILE - ret=2 - fi - fi -} - -build_command -describe_domain -if [ $ret = 1 ];then - sleep 3 - add_domain -elif [ $ret = 2 ];then - sleep 3 - update_domain -else - printf "%s\n" " $(date +%H%M%S) : 解析记录不需要更新: [解析记录IP:$__RECIP] [本地IP:$__IP]" >> $LOGFILE -fi - -return 0 diff --git a/diy/.packages/ddns-scripts-dnspod/update_dnspod_com.sh b/diy/.packages/ddns-scripts-dnspod/update_dnspod_com.sh deleted file mode 100644 index df2e1865..00000000 --- a/diy/.packages/ddns-scripts-dnspod/update_dnspod_com.sh +++ /dev/null @@ -1,144 +0,0 @@ -#!/bin/sh - -# 检查传入参数 -[ -z "$username" ] && write_log 14 "Configuration error! [User name] cannot be empty" -[ -z "$password" ] && write_log 14 "Configuration error! [Password] cannot be empty" - -# 检查外部调用工具 -[ -n "$CURL_SSL" ] || write_log 13 "Dnspod communication require cURL with SSL support. Please install" -[ -n "$CURL_PROXY" ] || write_log 13 "cURL: libcurl compiled without Proxy support" - -# 变量声明 -local __URLBASE __HOST __DOMAIN __TYPE __CMDBASE __TOKEN __POST __POST1 __RECIP __RECID __TTL -__URLBASE="https://api.dnspod.com" - -# 从 $domain 分离主机和域名 -[ "${domain:0:2}" = "@." ] && domain="${domain/./}" # 主域名处理 -[ "$domain" = "${domain/@/}" ] && domain="${domain/./@}" # 未找到分隔符,兼容常用域名格式 -__HOST="${domain%%@*}" -__DOMAIN="${domain#*@}" -[ -z "$__HOST" -o "$__HOST" = "$__DOMAIN" ] && __HOST=@ - -# 设置记录类型 -[ $use_ipv6 = 0 ] && __TYPE=A || __TYPE=AAAA - -# 构造基本通信命令 -build_command(){ - __CMDBASE="$CURL -Ss" - # 绑定用于通信的主机/IP - if [ -n "$bind_network" ];then - local __DEVICE - network_get_physdev __DEVICE $bind_network || write_log 13 "Can not detect local device using 'network_get_physdev $bind_network' - Error: '$?'" - write_log 7 "Force communication via device '$__DEVICE'" - __CMDBASE="$__CMDBASE --interface $__DEVICE" - fi - # 强制设定IP版本 - if [ $force_ipversion = 1 ];then - [ $use_ipv6 = 0 ] && __CMDBASE="$__CMDBASE -4" || __CMDBASE="$__CMDBASE -6" - fi - # 设置CA证书参数 - if [ $use_https = 1 ];then - if [ "$cacert" = IGNORE ];then - __CMDBASE="$__CMDBASE --insecure" - elif [ -f "$cacert" ];then - __CMDBASE="$__CMDBASE --cacert $cacert" - elif [ -d "$cacert" ];then - __CMDBASE="$__CMDBASE --capath $cacert" - elif [ -n "$cacert" ];then - write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication" - fi - fi - # 如果没有设置,禁用代理 (这可能是 .wgetrc 或环境设置错误) - [ -z "$proxy" ] && __CMDBASE="$__CMDBASE --noproxy '*'" - __CMDBASE="$__CMDBASE -d" -} - -# 用于Dnspod API的通信函数 -dnspod_transfer(){ - __CNT=0;__B= - case "$1" in - 0)__A="$__CMDBASE 'login_email=$username&login_password=$password&format=json' $__URLBASE/Auth";__B=$__A;; - 1)__A="$__CMDBASE '$__POST' $__URLBASE/Record.List";; - 2)__A="$__CMDBASE '$__POST1' $__URLBASE/Record.Create";; - 3)__A="$__CMDBASE '$__POST1&record_id=$__RECID&ttl=$__TTL' $__URLBASE/Record.Modify";; - esac - - [ -z "$__B" ] && __B=$(echo -e "$__A" | sed -e "s/${__TOKEN#*,}/***PW***/g") - write_log 7 "#> $__B" - while ! __TMP=`eval $__A 2>&1`;do - write_log 3 "[$__TMP]" - if [ $VERBOSE -gt 1 ];then - write_log 4 "Transfer failed - detailed mode: $VERBOSE - Do not try again after an error" - return 1 - fi - __CNT=$(( $__CNT + 1 )) - [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && write_log 14 "Transfer failed after $retry_count retries" - write_log 4 "Transfer failed - $__CNT Try again in $RETRY_SECONDS seconds" - sleep $RETRY_SECONDS & - PID_SLEEP=$! - wait $PID_SLEEP - PID_SLEEP=0 - done - __ERR=`jsonfilter -s "$__TMP" -e "@.status.code"` - [ $__ERR = 1 ] && return 0 - [ $__ERR = 10 ] && [ $1 = 1 ] && return 0 - __TMP=`jsonfilter -s "$__TMP" -e "@.status.message"` - [ "$__TMP" = "User is not exists" -o "$__TMP" = "Email address invalid" ] && __TMP=无效账号 - [ "$__TMP" = "Login fail, please check login info" ] && __TMP=无效密码 - [ "$__TMP" = "Domain name invalid, please input tld domain" ] && __TMP=无效域名 - local A="$(date +%H%M%S) ERROR : [$__TMP] - 终止进程" - logger -p user.err -t ddns-scripts[$$] $SECTION_ID: ${A:15} - printf "%s\n" " $A" >> $LOGFILE - exit 1 -} - -# 添加解析记录 -add_domain(){ - dnspod_transfer 2 - printf "%s\n" " $(date +%H%M%S) : 添加解析记录成功: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN],[IP:$__IP]" >> $LOGFILE - return 0 -} - -# 修改解析记录 -update_domain(){ - dnspod_transfer 3 - printf "%s\n" " $(date +%H%M%S) : 修改解析记录成功: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN],[IP:$__IP],[TTL:$__TTL]" >> $LOGFILE - return 0 -} - -# 获取域名解析记录 -describe_domain(){ - ret=0 - dnspod_transfer 0 - __TOKEN=`jsonfilter -s "$__TMP" -e "@.user_token"` - __POST="user_token=$__TOKEN&format=json&domain=$__DOMAIN&sub_domain=$__HOST" - __POST1="$__POST&value=$__IP&record_type=$__TYPE&record_line=default" - dnspod_transfer 1 - __TMP=`jsonfilter -s "$__TMP" -e "@.records[@.type='$__TYPE' && @.line='Default']"` - if [ -z "$__TMP" ];then - printf "%s\n" " $(date +%H%M%S) : 解析记录不存在: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN]" >> $LOGFILE - ret=1 - else - __RECIP=`jsonfilter -s "$__TMP" -e "@.value"` - if [ "$__RECIP" != "$__IP" ];then - __RECID=`jsonfilter -s "$__TMP" -e "@.id"` - __TTL=`jsonfilter -s "$__TMP" -e "@.ttl"` - printf "%s\n" " $(date +%H%M%S) : 解析记录需要更新: [解析记录IP:$__RECIP] [本地IP:$__IP]" >> $LOGFILE - ret=2 - fi - fi -} - -build_command -describe_domain -if [ $ret = 1 ];then - sleep 3 - add_domain -elif [ $ret = 2 ];then - sleep 3 - update_domain -else - printf "%s\n" " $(date +%H%M%S) : 解析记录不需要更新: [解析记录IP:$__RECIP] [本地IP:$__IP]" >> $LOGFILE -fi - -return 0 diff --git a/diy/.packages/firewall/patches/fullconenat.patch b/diy/.packages/firewall/patches/fullconenat.patch deleted file mode 100644 index d69e7129..00000000 --- a/diy/.packages/firewall/patches/fullconenat.patch +++ /dev/null @@ -1,63 +0,0 @@ -index 85a3750..9fac9b1 100644 ---- a/defaults.c -+++ b/defaults.c -@@ -46,7 +46,9 @@ const struct fw3_option fw3_flag_opts[] = { - FW3_OPT("synflood_protect", bool, defaults, syn_flood), - FW3_OPT("synflood_rate", limit, defaults, syn_flood_rate), - FW3_OPT("synflood_burst", int, defaults, syn_flood_rate.burst), -- -+ -+ FW3_OPT("fullcone", bool, defaults, fullcone), -+ - FW3_OPT("tcp_syncookies", bool, defaults, tcp_syncookies), - FW3_OPT("tcp_ecn", int, defaults, tcp_ecn), - FW3_OPT("tcp_window_scaling", bool, defaults, tcp_window_scaling), -diff --git a/options.h b/options.h -index 6edd174..c02eb97 100644 ---- a/options.h -+++ b/options.h -@@ -267,6 +267,7 @@ struct fw3_defaults - bool drop_invalid; - - bool syn_flood; -+ bool fullcone; - struct fw3_limit syn_flood_rate; - - bool tcp_syncookies; -diff --git a/zones.c b/zones.c -index 2aa7473..57eead0 100644 ---- a/zones.c -+++ b/zones.c -@@ -627,6 +627,7 @@ print_zone_rule(struct fw3_ipt_handle *h - struct fw3_address *msrc; - struct fw3_address *mdest; - struct fw3_ipt_rule *r; -+ struct fw3_defaults *defs = &state->defaults; - - if (!fw3_is_family(zone, handle->family)) - return; -@@ -712,8 +713,22 @@ print_zone_rule(struct fw3_ipt_handle *h - { - r = fw3_ipt_rule_new(handle); - fw3_ipt_rule_src_dest(r, msrc, mdest); -- fw3_ipt_rule_target(r, "MASQUERADE"); -- fw3_ipt_rule_append(r, "zone_%s_postrouting", zone->name); -+ /*FIXME: Workaround for FULLCONE-NAT*/ -+ if(defs->fullcone) -+ { -+ warn("%s will enable FULLCONE-NAT", zone->name); -+ fw3_ipt_rule_target(r, "FULLCONENAT"); -+ fw3_ipt_rule_append(r, "zone_%s_postrouting", zone->name); -+ r = fw3_ipt_rule_new(handle); -+ fw3_ipt_rule_src_dest(r, msrc, mdest); -+ fw3_ipt_rule_target(r, "FULLCONENAT"); -+ fw3_ipt_rule_append(r, "zone_%s_prerouting", zone->name); -+ } -+ else -+ { -+ fw3_ipt_rule_target(r, "MASQUERADE"); -+ fw3_ipt_rule_append(r, "zone_%s_postrouting", zone->name); -+ } - } - } - } diff --git a/diy/.packages/libcups/Makefile b/diy/.packages/libcups/Makefile deleted file mode 100644 index 83760696..00000000 --- a/diy/.packages/libcups/Makefile +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright (C) 2006-2012 OpenWrt.org -# Copyright (C) 2017-2018 Luiz Angelo Daros de Luca -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=cups -PKG_VERSION:=2.2.12 -PKG_RELEASE:=1 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-source.tar.gz -PKG_SOURCE_URL:=https://github.com/apple/cups/releases/download/v$(PKG_VERSION)/ -PKG_HASH:=0f61ab449e4748a24c6ab355b481ff7691247a140d327b2b7526fce34b7f9aa8 -PKG_MAINTAINER:=Luiz Angelo Daros de Luca -PKG_LICENSE:=GPL-2.0 -PKG_LICENSE_FILES:=LICENSE.txt -PKG_CPE_ID:=cpe:/a:apple:cups - -include $(INCLUDE_DIR)/package.mk - -define Package/libcups/Default - URL:=http://www.cups.org/ - SUBMENU:=Printing -endef - -define Package/libcups -$(call Package/cups/Default) - SECTION:=libs - CATEGORY:=Libraries - DEPENDS:=+zlib +libpthread +libpng +libjpeg +libusb-1.0 - TITLE:=Common UNIX Printing System - Core library - BUILDONLY:=1 -endef - -define Package/libcups/description - Common UNIX Printing System - Core library -endef - -TARGET_LDFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib - -CONFIGURE_ARGS+=--with-cups-user="nobody" \ - --with-cups-group="nogroup" \ - --with-components="core" \ - --with-pdftops="none" \ - --without-perl \ - --without-python \ - --without-php \ - --enable-shared \ - --enable-image \ - --enable-libusb \ - --disable-acl \ - --disable-dbus \ - --disable-dnssd \ - --disable-launchd \ - --disable-ldap \ - --disable-pam \ - --disable-slp \ - --disable-gnutls \ - --disable-openssl \ - --disable-cdsassl \ - --disable-ssl \ - --disable-gssapi \ - --disable-tiff \ - UNAME="Linux" \ - LIBS="$(TARGET_LDFLAGS) -lz -lpng -ljpeg" - -define Build/Compile - $(MAKE) -C $(PKG_BUILD_DIR)/cups \ - $(TARGET_CONFIGURE_OPTS) \ - DSTROOT="$(PKG_INSTALL_DIR)" \ - STRIP="/bin/true" \ - libcups.so.2 install-libs install-headers - $(MAKE) -C $(PKG_BUILD_DIR)/filter \ - $(TARGET_CONFIGURE_OPTS) \ - DSTROOT="$(PKG_INSTALL_DIR)" \ - STRIP="/bin/true" \ - libcupsimage.so.2 install-libs install-headers - $(INSTALL_DIR) $(PKG_INSTALL_DIR)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/cups-config $(PKG_INSTALL_DIR)/usr/bin -endef - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/cups-config $(1)/usr/bin/ - $(INSTALL_DIR) $(2)/bin - $(LN) $(STAGING_DIR)/usr/bin/cups-config $(2)/bin - - $(INSTALL_DIR) $(1)/usr/include - $(CP) $(PKG_INSTALL_DIR)/usr/include/cups $(1)/usr/include/ - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib*/libcups*.so* $(1)/usr/lib/ -endef - -define Package/libcups/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib*/libcups*.so* $(1)/usr/lib/ -endef - -$(eval $(call BuildPackage,libcups)) diff --git a/diy/.packages/luci-base/root/www/ng_index.html b/diy/.packages/luci-base/root/www/ng_index.html deleted file mode 100644 index e1c27883..00000000 --- a/diy/.packages/luci-base/root/www/ng_index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/diy/.packages/luci-mod-status/htdocs/luci-static/resources/view/status/include/19_cpu.js b/diy/.packages/luci-mod-status/htdocs/luci-static/resources/view/status/include/19_cpu.js deleted file mode 100644 index 792fbd99..00000000 --- a/diy/.packages/luci-mod-status/htdocs/luci-static/resources/view/status/include/19_cpu.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; -'require rpc'; - -var callCPUFreeInfo = rpc.declare({ - object: 'luci', - method: 'getCPUInfo' -}); - -function progressbar(value, max) { - var vn = parseInt(value) || 0, - mn = parseInt(max) || 100, - pc = Math.floor((100 / mn) * vn); - - return E('div', { - 'class': 'cbi-progressbar', - 'title': '%s%% / %s%%'.format(vn, mn, pc) - }, E('div', { 'style': 'width:%.2f%%'.format(pc) })); -} - -return L.Class.extend({ - title: _('CPU'), - - load: function() { - return L.resolveDefault(callCPUFreeInfo(), {}); - }, - - render: function(info) { - var fields = [ - _('Used'), (info.cpufree) ? info.cpufree : 0, 100 - ]; - - var table = E('div', { 'class': 'table cpu' }); - - for (var i = 0; i < fields.length; i += 3) { - table.appendChild(E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left', 'width': '33%' }, [ fields[i] ]), - E('div', { 'class': 'td left' }, [ - (fields[i + 1] != null) ? progressbar(fields[i + 1], fields[i + 2], true) : '?' - ]) - ])); - } - - return table; - } -}); diff --git a/diy/.packages/mbedtls/patches/100-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch b/diy/.packages/mbedtls/patches/100-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch deleted file mode 100644 index b6531181..00000000 --- a/diy/.packages/mbedtls/patches/100-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch +++ /dev/null @@ -1,401 +0,0 @@ -From dfb6015ca79a9fee28f7fcb0af7e350a83574b83 Mon Sep 17 00:00:00 2001 -From: "Markku-Juhani O. Saarinen" -Date: Mon, 20 Nov 2017 14:58:41 +0000 -Subject: Implements AES and GCM with ARMv8 Crypto Extensions - -A compact patch that provides AES and GCM implementations that utilize the -ARMv8 Crypto Extensions. The config flag is MBEDTLS_ARMV8CE_AES_C, which -is disabled by default as we don't do runtime checking for the feature. -The new implementation lives in armv8ce_aes.c. - -Provides similar functionality to https://github.com/ARMmbed/mbedtls/pull/432 -Thanks to Barry O'Rourke and others for that contribtion. - -Tested on a Cortex A53 device and QEMU. On a midrange phone the real AES-GCM -throughput increases about 4x, while raw AES speed is up to 10x faster. - -When cross-compiling, you want to set something like: - - export CC='aarch64-linux-gnu-gcc' - export CFLAGS='-Ofast -march=armv8-a+crypto' - scripts/config.pl set MBEDTLS_ARMV8CE_AES_C - -QEMU seems to also need - - export LDFLAGS='-static' - -Then run normal make or cmake etc. ---- - -diff -ruNa --binary a/ChangeLog.d/armv8_crypto_extensions.txt b/ChangeLog.d/armv8_crypto_extensions.txt ---- a/ChangeLog.d/armv8_crypto_extensions.txt 1970-01-01 08:00:00.000000000 +0800 -+++ b/ChangeLog.d/armv8_crypto_extensions.txt 2021-03-07 15:07:17.781911791 +0800 -@@ -0,0 +1,2 @@ -+Features -+ * Support ARMv8 Cryptography Extensions for AES and GCM. -diff -ruNa --binary a/include/mbedtls/armv8ce_aes.h b/include/mbedtls/armv8ce_aes.h ---- a/include/mbedtls/armv8ce_aes.h 1970-01-01 08:00:00.000000000 +0800 -+++ b/include/mbedtls/armv8ce_aes.h 2021-03-07 15:07:17.781911791 +0800 -@@ -0,0 +1,63 @@ -+/** -+ * \file armv8ce_aes.h -+ * -+ * \brief ARMv8 Cryptography Extensions -- Optimized code for AES and GCM -+ */ -+ -+/* -+ * -+ * Copyright (C) 2006-2017, ARM Limited, All Rights Reserved -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); you may -+ * not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ * -+ * This file is part of mbed TLS (https://tls.mbed.org) -+ */ -+ -+#ifndef MBEDTLS_ARMV8CE_AES_H -+#define MBEDTLS_ARMV8CE_AES_H -+ -+#include "aes.h" -+ -+/** -+ * \brief [ARMv8 Crypto Extensions] AES-ECB block en(de)cryption -+ * -+ * \param ctx AES context -+ * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT -+ * \param input 16-byte input block -+ * \param output 16-byte output block -+ * -+ * \return 0 on success (cannot fail) -+ */ -+ -+int mbedtls_armv8ce_aes_crypt_ecb( mbedtls_aes_context *ctx, -+ int mode, -+ const unsigned char input[16], -+ unsigned char output[16] ); -+ -+/** -+ * \brief [ARMv8 Crypto Extensions] Multiply in GF(2^128) for GCM -+ * -+ * \param c Result -+ * \param a First operand -+ * \param b Second operand -+ * -+ * \note Both operands and result are bit strings interpreted as -+ * elements of GF(2^128) as per the GCM spec. -+ */ -+ -+void mbedtls_armv8ce_gcm_mult( unsigned char c[16], -+ const unsigned char a[16], -+ const unsigned char b[16] ); -+ -+#endif /* MBEDTLS_ARMV8CE_AES_H */ -diff -ruNa --binary a/include/mbedtls/check_config.h b/include/mbedtls/check_config.h ---- a/include/mbedtls/check_config.h 2020-12-10 20:54:15.000000000 +0800 -+++ b/include/mbedtls/check_config.h 2021-03-07 15:06:45.625543309 +0800 -@@ -95,6 +95,10 @@ - #error "MBEDTLS_AESNI_C defined, but not all prerequisites" - #endif - -+#if defined(MBEDTLS_ARMV8CE_AES_C) && !defined(MBEDTLS_HAVE_ASM) -+#error "MBEDTLS_ARMV8CE_AES_C defined, but not all prerequisites" -+#endif -+ - #if defined(MBEDTLS_CTR_DRBG_C) && !defined(MBEDTLS_AES_C) - #error "MBEDTLS_CTR_DRBG_C defined, but not all prerequisites" - #endif -@@ -772,3 +776,4 @@ - typedef int mbedtls_iso_c_forbids_empty_translation_units; - - #endif /* MBEDTLS_CHECK_CONFIG_H */ -+ -diff -ruNa --binary a/include/mbedtls/config.h b/include/mbedtls/config.h ---- a/include/mbedtls/config.h 2020-12-10 20:54:15.000000000 +0800 -+++ b/include/mbedtls/config.h 2021-03-07 15:14:27.957855484 +0800 -@@ -73,6 +73,7 @@ - * Requires support for asm() in compiler. - * - * Used in: -+ * library/armv8ce_aes.c - * library/aria.c - * library/timing.c - * include/mbedtls/bn_mul.h -@@ -1888,6 +1889,21 @@ - #define MBEDTLS_AESNI_C - - /** -+ * \def MBEDTLS_ARMV8CE_AES_C -+ * -+ * Enable ARMv8 Crypto Extensions for AES and GCM -+ * -+ * Module: library/armv8ce_aes.c -+ * Caller: library/aes.c -+ * library/gcm.c -+ * -+ * Requires: MBEDTLS_HAVE_ASM -+ * -+ * This module adds support for Armv8 Cryptography Extensions for AES and GCM. -+ */ -+//#define MBEDTLS_ARMV8CE_AES_C -+ -+/** - * \def MBEDTLS_AES_C - * - * Enable the AES block cipher. -diff -ruNa --binary a/library/aes.c b/library/aes.c ---- a/library/aes.c 2020-12-10 20:54:15.000000000 +0800 -+++ b/library/aes.c 2021-03-07 15:06:45.625543309 +0800 -@@ -69,7 +69,9 @@ - #if defined(MBEDTLS_AESNI_C) - #include "mbedtls/aesni.h" - #endif -- -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+#include "mbedtls/armv8ce_aes.h" -+#endif - #if defined(MBEDTLS_SELF_TEST) - #if defined(MBEDTLS_PLATFORM_C) - #include "mbedtls/platform.h" -@@ -1052,6 +1054,11 @@ - return( mbedtls_aesni_crypt_ecb( ctx, mode, input, output ) ); - #endif - -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ // We don't do runtime checking for ARMv8 Crypto Extensions -+ return mbedtls_armv8ce_aes_crypt_ecb( ctx, mode, input, output ); -+#endif -+ - #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86) - if( aes_padlock_ace ) - { -diff -ruNa --binary a/library/armv8ce_aes.c b/library/armv8ce_aes.c ---- a/library/armv8ce_aes.c 1970-01-01 08:00:00.000000000 +0800 -+++ b/library/armv8ce_aes.c 2021-03-07 15:07:17.781911791 +0800 -@@ -0,0 +1,142 @@ -+/* -+ * ARMv8 Cryptography Extensions -- Optimized code for AES and GCM -+ * -+ * Copyright (C) 2006-2017, ARM Limited, All Rights Reserved -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); you may -+ * not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ * -+ * This file is part of mbed TLS (https://tls.mbed.org) -+ */ -+ -+#if !defined(MBEDTLS_CONFIG_FILE) -+#include "mbedtls/config.h" -+#else -+#include MBEDTLS_CONFIG_FILE -+#endif -+ -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ -+#include -+#include "mbedtls/armv8ce_aes.h" -+ -+#ifndef asm -+#define asm __asm -+#endif -+ -+/* -+ * [Armv8 Cryptography Extensions] AES-ECB block en(de)cryption -+ */ -+ -+#if defined(MBEDTLS_AES_C) -+ -+int mbedtls_armv8ce_aes_crypt_ecb( mbedtls_aes_context *ctx, -+ int mode, -+ const unsigned char input[16], -+ unsigned char output[16] ) -+{ -+ unsigned int i; -+ const uint8_t *rk; -+ uint8x16_t x, k; -+ -+ x = vld1q_u8( input ); /* input block */ -+ rk = (const uint8_t *) ctx->rk; /* round keys */ -+ -+ if( mode == MBEDTLS_AES_ENCRYPT ) -+ { -+ for( i = ctx->nr - 1; i != 0; i-- ) /* encryption loop */ -+ { -+ k = vld1q_u8( rk ); -+ rk += 16; -+ x = vaeseq_u8( x, k ); -+ x = vaesmcq_u8( x ); -+ } -+ k = vld1q_u8( rk ); -+ rk += 16; -+ x = vaeseq_u8( x, k ); -+ } -+ else -+ { -+ for( i = ctx->nr - 1; i != 0 ; i-- ) /* decryption loop */ -+ { -+ k = vld1q_u8( rk ); -+ rk += 16; -+ x = vaesdq_u8( x, k ); -+ x = vaesimcq_u8( x ); -+ } -+ k = vld1q_u8( rk ); -+ rk += 16; -+ x = vaesdq_u8( x, k ); -+ } -+ -+ k = vld1q_u8( rk ); /* final key just XORed */ -+ x = veorq_u8( x, k ); -+ vst1q_u8( output, x ); /* write out */ -+ -+ return ( 0 ); -+} -+ -+#endif /* MBEDTLS_AES_C */ -+ -+ -+/* -+ * [Armv8 Cryptography Extensions] Multiply in GF(2^128) for GCM -+ */ -+ -+#if defined(MBEDTLS_GCM_C) -+ -+void mbedtls_armv8ce_gcm_mult( unsigned char c[16], -+ const unsigned char a[16], -+ const unsigned char b[16] ) -+{ -+ /* GCM's GF(2^128) polynomial basis is x^128 + x^7 + x^2 + x + 1 */ -+ const uint64x2_t base = { 0, 0x86 }; /* note missing LS bit */ -+ -+ register uint8x16_t vc asm( "v0" ); /* named registers */ -+ register uint8x16_t va asm( "v1" ); /* (to avoid conflict) */ -+ register uint8x16_t vb asm( "v2" ); -+ register uint64x2_t vp asm( "v3" ); -+ -+ va = vld1q_u8( a ); /* load inputs */ -+ vb = vld1q_u8( b ); -+ vp = base; -+ -+ asm ( -+ "rbit %1.16b, %1.16b \n\t" /* reverse bit order */ -+ "rbit %2.16b, %2.16b \n\t" -+ "pmull2 %0.1q, %1.2d, %2.2d \n\t" /* v0 = a.hi * b.hi */ -+ "pmull2 v4.1q, %0.2d, %3.2d \n\t" /* mul v0 by x^64, reduce */ -+ "ext %0.16b, %0.16b, %0.16b, #8 \n\t" -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "ext v5.16b, %2.16b, %2.16b, #8 \n\t" /* (swap hi and lo in b) */ -+ "pmull v4.1q, %1.1d, v5.1d \n\t" /* v0 ^= a.lo * b.hi */ -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "pmull2 v4.1q, %1.2d, v5.2d \n\t" /* v0 ^= a.hi * b.lo */ -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "pmull2 v4.1q, %0.2d, %3.2d \n\t" /* mul v0 by x^64, reduce */ -+ "ext %0.16b, %0.16b, %0.16b, #8 \n\t" -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "pmull v4.1q, %1.1d, %2.1d \n\t" /* v0 ^= a.lo * b.lo */ -+ "eor %0.16b, %0.16b, v4.16b \n\t" -+ "rbit %0.16b, %0.16b \n\t" /* reverse bits for output */ -+ : "=w" (vc) /* q0: output */ -+ : "w" (va), "w" (vb), "w" (vp) /* q1, q2: input */ -+ : "v4", "v5" /* q4, q5: clobbered */ -+ ); -+ -+ vst1q_u8( c, vc ); /* write out */ -+} -+ -+#endif /* MBEDTLS_GCM_C */ -+ -+#endif /* MBEDTLS_ARMV8CE_AES_C */ -diff -ruNa --binary a/library/CMakeLists.txt b/library/CMakeLists.txt ---- a/library/CMakeLists.txt 2020-12-10 20:54:15.000000000 +0800 -+++ b/library/CMakeLists.txt 2021-03-07 15:06:45.625543309 +0800 -@@ -7,6 +7,7 @@ - aesni.c - arc4.c - aria.c -+ armv8ce_aes.c - asn1parse.c - asn1write.c - base64.c -diff -ruNa --binary a/library/gcm.c b/library/gcm.c ---- a/library/gcm.c 2020-12-10 20:54:15.000000000 +0800 -+++ b/library/gcm.c 2021-03-07 15:06:45.625543309 +0800 -@@ -71,6 +71,10 @@ - #include "mbedtls/aesni.h" - #endif - -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+#include "mbedtls/armv8ce_aes.h" -+#endif -+ - #if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) - #include "mbedtls/aes.h" - #include "mbedtls/platform.h" -@@ -140,6 +144,12 @@ - if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, h, 16, h, &olen ) ) != 0 ) - return( ret ); - -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ // we don't do feature testing with ARMv8 cryptography extensions -+ memcpy( ctx ->HL, h, 16 ); // put H at the beginning of buffer -+ return( 0 ); // that's all we need -+#endif -+ - /* pack h as two 64-bits ints, big-endian */ - GET_UINT32_BE( hi, h, 0 ); - GET_UINT32_BE( lo, h, 4 ); -@@ -248,6 +258,11 @@ - unsigned char lo, hi, rem; - uint64_t zh, zl; - -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ mbedtls_armv8ce_gcm_mult( output, x, (const unsigned char *) ctx->HL ); -+ return; -+#endif -+ - #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) { - unsigned char h[16]; -diff -ruNa --binary a/library/Makefile b/library/Makefile ---- a/library/Makefile 2020-12-10 20:54:15.000000000 +0800 -+++ b/library/Makefile 2021-03-07 15:12:49.277078224 +0800 -@@ -65,6 +65,7 @@ - - OBJS_CRYPTO= aes.o aesni.o arc4.o \ - aria.o asn1parse.o asn1write.o \ -+ armv8ce_aes.o \ - base64.o bignum.o blowfish.o \ - camellia.o ccm.o chacha20.o \ - chachapoly.o cipher.o cipher_wrap.o \ -diff -ruNa --binary a/library/version_features.c b/library/version_features.c ---- a/library/version_features.c 2020-12-10 20:54:15.000000000 +0800 -+++ b/library/version_features.c 2021-03-07 15:06:45.625543309 +0800 -@@ -583,6 +583,9 @@ - #if defined(MBEDTLS_AESNI_C) - "MBEDTLS_AESNI_C", - #endif /* MBEDTLS_AESNI_C */ -+#if defined(MBEDTLS_ARMV8CE_AES_C) -+ "MBEDTLS_ARMV8CE_AES_C", -+#endif /* MBEDTLS_ARMV8CE_AES_C */ - #if defined(MBEDTLS_AES_C) - "MBEDTLS_AES_C", - #endif /* MBEDTLS_AES_C */ - diff --git a/diy/.packages/opkg/patches/ignore_error.patch b/diy/.packages/opkg/patches/ignore_error.patch deleted file mode 100644 index 41f7005e..00000000 --- a/diy/.packages/opkg/patches/ignore_error.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- a/libopkg/pkg.c -+++ b/libopkg/pkg.c -@@ -1422,5 +1422,4 @@ - "package \"%s\" %s script returned status %d.\n", - pkg->name, script, err); -- return err; - } - diff --git a/diy/.packages/opkg/patches/user_agent.patch b/diy/.packages/opkg/patches/user_agent.patch deleted file mode 100644 index 1b495e8e..00000000 --- a/diy/.packages/opkg/patches/user_agent.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- a/libopkg/opkg_download.c -+++ b/libopkg/opkg_download.c -@@ -154,4 +154,5 @@ - argv[i++] = "wget"; - argv[i++] = "-q"; -+ argv[i++] = "--user-agent=Kiddin\'"; - if (conf->no_check_certificate) { - argv[i++] = "--no-check-certificate"; diff --git a/diy/.packages/opkg/patches/zh-cn.patch b/diy/.packages/opkg/patches/zh-cn.patch deleted file mode 100644 index e7ce2200..00000000 --- a/diy/.packages/opkg/patches/zh-cn.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- a/libopkg/opkg_download.c -+++ b/libopkg/opkg_download.c -@@ -174,9 +174,9 @@ - if (res) { - opkg_msg(ERROR, -- "Failed to download %s, wget returned %d.\n", -+ "下载失败 %s, wget returned %d.\n", - src, res); - if (res == 4) - opkg_msg(ERROR, -- "Check your network settings and connectivity.\n\n"); -+ "请检查网络设置, 确保本设备网络可用.\n\n"); - free(tmp_file_location); - return -1; - ---- a/libopkg/opkg.c -+++ b/libopkg/opkg.c -@@ -225,5 +225,5 @@ - new = pkg_hash_fetch_best_installation_candidate_by_name(package_name); - if (!new) { -- opkg_msg(ERROR, "Couldn't find package %s\n", package_name); -+ opkg_msg(ERROR, "找不到软件包 %s\n", package_name); - return -1; - } -@@ -242,5 +242,5 @@ - if (unresolved) { - char **tmp = unresolved; -- opkg_msg(ERROR, "Couldn't satisfy the following dependencies" -+ opkg_msg(ERROR, "无法满足以下依赖" - " for %s:\n", package_name); - while (*tmp) { -@@ -271,5 +271,5 @@ - - if (pkg->src == NULL) { -- opkg_msg(ERROR, "Package %s not available from any " -+ opkg_msg(ERROR, "在以下仓库未找到可用的 %s 软件包" - "configured src\n", package_name); - return -1; - ---- a/libopkg/opkg_install.c -+++ b/libopkg/opkg_install.c -@@ -222,6 +222,6 @@ - - if (pkg_size_kbs >= kbs_available) { -- opkg_msg(ERROR, "Only have %ldkb available on filesystem %s, " -- "pkg %s needs %ld\n", -+ opkg_msg(ERROR, "剩余可用容量不足, 文件系统 %s 当前剩余 %ldkb 可用," -+ "软件包 %s 需要 %ld\n", - kbs_available, root_dir, pkg->name, pkg_size_kbs); - return -1; -@@ -1319,6 +1319,6 @@ - } - if (err) { -- opkg_msg(ERROR, "Failed to download %s. " -- "Perhaps you need to run 'opkg update'?\n", -+ opkg_msg(ERROR, "下载 %s 失败. " -+ "请更新列表后重试\n", - pkg->name); - return -1; diff --git a/diy/patches/ARMV8CE_AES.patch b/diy/patches/ARMV8CE_AES.patch deleted file mode 100644 index 140130c1..00000000 --- a/diy/patches/ARMV8CE_AES.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- a/mbedtls/Makefile -+++ b/mbedtls/Makefile -@@ -23,6 +23,8 @@ PKG_CPE_ID:=cpe:/a:arm:mbed_tls - - PKG_CONFIG_DEPENDS := \ - CONFIG_LIBMBEDTLS_DEBUG_C \ -+ CONFIG_LIBMBEDTLS_HAVE_ARMV8CE_AES \ -+ CONFIG_LIBMBEDTLS_HAVE_SSE2 \ - CONFIG_LIBMBEDTLS_HKDF_C - - include $(INCLUDE_DIR)/package.mk -@@ -60,6 +62,34 @@ config LIBMBEDTLS_DEBUG_C - - Usually, you don't need this, so don't select this if you're unsure. - -+config LIBMBEDTLS_HAVE_ARMV8CE_AES -+ depends on PACKAGE_libmbedtls -+ bool -+ default y -+ prompt "Enable use of the ARMv8 Crypto Extensions" -+ depends on aarch64 && !TARGET_bcm27xx && !TARGET_bcm4908 -+ help -+ Use of the ARMv8 Crypto Extensions greatly increase performance -+ (up to 4x faster on AES-GCM while 10x faster on raw AES). -+ -+ Related instructions should be included in all modern Aarch64 -+ devices, except some wastes like Broadcom. -+ If you don't sure, say Y here. -+ -+config LIBMBEDTLS_HAVE_SSE2 -+ depends on PACKAGE_libmbedtls -+ bool -+ default y if !TARGET_x86_legacy && !TARGET_x86_geode -+ prompt "Enable use of x86 SSE2 instructions" -+ depends on x86_64 || i386 -+ help -+ Use of SSE2 instructions greatly increase performance (up to -+ 3x faster) with a minimum (~0.2%, or 23KB) increase in package -+ size, but it will bring no benefit if your hardware does not -+ support them, such as Geode GX and LX. In this case you may -+ save 23KB by saying yes here. AMD Geode NX, and Intel -+ Pentium 4 and above support SSE2. -+ - config LIBMBEDTLS_HKDF_C - depends on PACKAGE_libmbedtls - bool "Enable the HKDF algorithm (RFC 5869)" -@@ -92,6 +122,9 @@ PKG_INSTALL:=1 - - TARGET_CFLAGS += -ffunction-sections -fdata-sections - TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) -+ifneq ($(CONFIG_LIBMBEDTLS_HAVE_ARMV8CE_AES),) -+ TARGET_CFLAGS := $(filter-out -march=%,$(TARGET_CFLAGS)) -march=armv8-a+crypto -+endif - - CMAKE_OPTIONS += \ - -DUSE_SHARED_MBEDTLS_LIBRARY:Bool=ON \ -@@ -103,6 +136,8 @@ define Build/Configure - - awk 'BEGIN { rc = 1 } \ - /#define MBEDTLS_DEBUG_C/ { $$$$0 = "$(if $(CONFIG_LIBMBEDTLS_DEBUG_C),,// )#define MBEDTLS_DEBUG_C"; rc = 0 } \ -+ /#define MBEDTLS_ARMV8CE_AES_C/ { $$$$0 = "$(if $(CONFIG_LIBMBEDTLS_HAVE_ARMV8CE_AES),,// )#define MBEDTLS_ARMV8CE_AES_C"; rc = 0 } \ -+ /#define MBEDTLS_HAVE_SSE2/ { $$$$0 = "$(if $(CONFIG_LIBMBEDTLS_HAVE_SSE2),,// )#define MBEDTLS_HAVE_SSE2"; rc = 0 } \ - { print } \ - END { exit(rc) }' $(PKG_BUILD_DIR)/include/mbedtls/config.h \ - >$(PKG_BUILD_DIR)/include/mbedtls/config.h.new && \ diff --git a/diy/patches/acl.patch b/diy/patches/acl.patch deleted file mode 100644 index 58749336..00000000 --- a/diy/patches/acl.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- /dev/null -+++ b/luci-app-oaf/root/usr/share/rpcd/acl.d/luci-app-oaf.json -@@ -0,0 +1,11 @@ -+{ -+ "luci-app-oaf": { -+ "description": "Grant UCI access for luci-app-oaf", -+ "read": { -+ "uci": [ "appfilter" ] -+ }, -+ "write": { -+ "uci": [ "appfilter" ] -+ } -+ } -+} diff --git a/diy/patches/cgroupfs-mount.patch b/diy/patches/cgroupfs-mount.patch deleted file mode 100644 index 042e87f6..00000000 --- a/diy/patches/cgroupfs-mount.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/cgroupfs-mount/files/cgroupfs-mount.init -+++ b/cgroupfs-mount/files/cgroupfs-mount.init -@@ -3,10 +3,5 @@ - START=01 - - boot() { -- # Procd mounts non-hierarchical cgroupfs so unmount first before cgroupfs-mount -- if mountpoint -q /sys/fs/cgroup; then -- umount /sys/fs/cgroup/ -- fi -- - cgroupfs-mount - } diff --git a/diy/patches/ddnsto.patch b/diy/patches/ddnsto.patch deleted file mode 100644 index b4449fc5..00000000 --- a/diy/patches/ddnsto.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- a/luci-app-ddnsto/root/etc/uci-defaults/50_luci-ddnsto -+++ b/luci-app-ddnsto/root/etc/uci-defaults/50_luci-ddnsto -@@ -1,4 +1,11 @@ - #!/bin/sh - -+uci -q batch <<-EOF >/dev/null -+ delete ucitrack.@ddnsto[-1] -+ add ucitrack ddnsto -+ set ucitrack.@ddnsto[-1].init=ddnsto -+ commit ucitrack -+EOF -+ - rm -f /tmp/luci-indexcache - exit 0 - ---- a/ddnsto/files/ddnsto.init -+++ b/ddnsto/files/ddnsto.init -@@ -24,3 +24,7 @@ start_service() { - procd_set_param respawn - procd_close_instance - } -+ -+service_triggers() { -+ procd_add_reload_trigger 'ddnsto' -+} - ---- a/linkease/files/linkease.init -+++ b/linkease/files/linkease.init -@@ -21,3 +21,7 @@ start_service() { - procd_set_param respawn - procd_close_instance - } -+ -+service_triggers() { -+ procd_add_reload_trigger 'linkease' -+} diff --git a/diy/patches/disable_network_rollback.patch b/diy/patches/disable_network_rollback.patch deleted file mode 100644 index 619e64b6..00000000 --- a/diy/patches/disable_network_rollback.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- a/luci-base/htdocs/luci-static/resources/network.js -+++ b/luci-base/htdocs/luci-static/resources/network.js -@@ -4376,4 +4376,6 @@ WifiNetwork = baseclass.extend(/** @lends LuCI.network.WifiNetwork.prototype */ - } - }); - -+setTimeout("document.getElementsByClassName('cbi-button-apply')[0].children[3].children[0].value='1'",1000) -+ - return Network; diff --git a/diy/patches/dispatcher.patch b/diy/patches/dispatcher.patch deleted file mode 100644 index 72b4b102..00000000 --- a/diy/patches/dispatcher.patch +++ /dev/null @@ -1,43 +0,0 @@ ---- a/luci-base/luasrc/dispatcher.lua -+++ b/luci-base/luasrc/dispatcher.lua -@@ -461,5 +461,10 @@ - context.request = r - -- local pathinfo = http.urldecode(request:getenv("PATH_INFO") or "", true) -+ local pathinfo = "" -+ if sys.call("test -s /tmp/resolv.conf.d/resolv.conf.auto") == 0 then -+ pathinfo = http.urldecode(request:getenv("PATH_INFO") or "", true) -+ else -+ pathinfo = http.urldecode(request:getenv("PATH_INFO") or "admin/system/initsetup", true) -+ end - - if prefix then -@@ -894,6 +899,11 @@ - end - -- http.header("Set-Cookie", 'sysauth=%s; path=%s; SameSite=Strict; HttpOnly%s' %{ -- sid, build_url(), http.getenv("HTTPS") == "on" and "; secure" or "" -+ local cookie_p = uci:get("wizard", "default", "cookie_p") -+ local timeout = 'Thu, 01 Jan 3000 01:00:00 GMT' -+ if cookie_p == '0' then -+ timeout = '' -+ end -+ http.header("Set-Cookie", 'sysauth=%s; expires=%s; path=%s; SameSite=Strict; HttpOnly%s' %{ -+ sid, timeout, build_url(), http.getenv("HTTPS") == "on" and "; secure" or "" - }) - -@@ -917,6 +927,12 @@ - local perm = check_acl_depends(required_path_acls, ctx.authacl and ctx.authacl["access-group"]) - if perm == nil then -- http.status(403, "Forbidden") -- return -+ local sid = context.authsession -+ if sid then -+ util.ubus("session", "destroy", { ubus_rpc_session = sid }) -+ luci.http.header("Set-Cookie", "sysauth=%s; expires=%s; path=%s" %{ -+ '', 'Thu, 01 Jan 1970 01:00:00 GMT', build_url() -+ }) -+ end -+ luci.http.redirect(build_url()) - end - diff --git a/diy/patches/dns_redirect.patch b/diy/patches/dns_redirect.patch deleted file mode 100644 index a1f424a6..00000000 --- a/diy/patches/dns_redirect.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -+++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -@@ -164,6 +164,10 @@ return view.extend({ - s.tab('advanced', _('Advanced Settings')); - s.tab('leases', _('Static Leases')); - -+ s.taboption('general', form.Flag, 'dns_redirect', -+ _('DNS Redirect'), -+ _('Redirect client DNS to dnsmasq')); -+ - s.taboption('general', form.Flag, 'domainneeded', - _('Domain required'), - _('Don\'t forward DNS-Requests without DNS-Name')); diff --git a/diy/patches/fix-apply.patch b/diy/patches/fix-apply.patch deleted file mode 100644 index bea42095..00000000 --- a/diy/patches/fix-apply.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/luci-app-uugamebooster/root/etc/init.d/uuplugin -+++ b/luci-app-uugamebooster/root/etc/init.d/uuplugin -@@ -21,3 +21,7 @@ start_service() { - procd_close_instance - fi - } -+ -+service_triggers() { -+ procd_add_reload_trigger "uuplugin" -+} diff --git a/diy/patches/hijack-domain.patch b/diy/patches/hijack-domain.patch deleted file mode 100644 index f0f1edc4..00000000 --- a/diy/patches/hijack-domain.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -+++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -@@ -163,6 +163,26 @@ return view.extend({ - s.tab('tftp', _('TFTP Settings')); - s.tab('advanced', _('Advanced Settings')); - s.tab('leases', _('Static Leases')); -+ s.tab('custom_domain', _('Custom Redirect Domain')); -+ -+ o = s.taboption('custom_domain', form.SectionValue, 'domain', form.GridSection, 'domain', null, -+ _('Define a custom domain name and the corresponding PTR record')); -+ -+ ss = o.subsection; -+ -+ ss.addremove = true; -+ ss.anonymous = true; -+ -+ so = ss.option(form.Value, 'name', _('Domain Name')); -+ so.datatype = 'hostname'; -+ so.rmempty = true; -+ -+ so = ss.option(form.Value, 'ip', _('IPv4-Address')); -+ so.datatype = 'or(ip4addr,"ignore")'; -+ so.rmempty = true; -+ -+ so = ss.option(form.Value, 'comments', _('Comments')); -+ so.rmempty = true; - - s.taboption('general', form.Flag, 'domainneeded', - _('Domain required'), diff --git a/diy/patches/luci-add-filter-aaaa-option.patch b/diy/patches/luci-add-filter-aaaa-option.patch deleted file mode 100644 index a35be7a8..00000000 --- a/diy/patches/luci-add-filter-aaaa-option.patch +++ /dev/null @@ -1,26 +0,0 @@ -From d5714003b9ba288b45e6866472315a99230292f5 Mon Sep 17 00:00:00 2001 -From: Chuck -Date: Wed, 3 Jun 2020 16:37:41 +0800 -Subject: [PATCH] dnsmasq: add filter-aaaa option - -Signed-off-by: Chuck ---- - .../luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -index 6693dc0eac..1c8f943758 100644 ---- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -+++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -@@ -199,6 +199,11 @@ return view.extend({ - s.taboption('files', form.DynamicList, 'addnhosts', - _('Additional Hosts files')).optional = true; - -+ o = s.taboption('advanced', form.Flag, 'filter_aaaa', -+ _('Disable IPv6 DNS forwards'), -+ _('Filter IPv6(AAAA) DNS Query Name Resolve')); -+ o.optional = true; -+ - o = s.taboption('advanced', form.Flag, 'quietdhcp', - _('Suppress logging'), - _('Suppress logging of the routine operation of these protocols')); diff --git a/diy/patches/luci-app-mentohust.patch b/diy/patches/luci-app-mentohust.patch deleted file mode 100644 index baa7aff0..00000000 --- a/diy/patches/luci-app-mentohust.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/luci-app-mentohust/Makefile -+++ b/luci-app-mentohust/Makefile -@@ -11,6 +11,7 @@ include $(INCLUDE_DIR)/package.mk - define Package/luci-app-mentohust - SECTION:=luci - CATEGORY:=LuCI -+ DEPENDS:=+mentohust - SUBMENU:=3. Applications - TITLE:=MentoHUST 802.1X Client for LuCI - PKGARCH:=all diff --git a/diy/patches/luci-app-oaf.patch b/diy/patches/luci-app-oaf.patch deleted file mode 100644 index a953984f..00000000 --- a/diy/patches/luci-app-oaf.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/luci-app-oaf/luasrc/model/cbi/appfilter/appfilter.lua -+++ b/luci-app-oaf/luasrc/model/cbi/appfilter/appfilter.lua -@@ -19,6 +19,14 @@ m = Map("appfilter", - - s = m:section(TypedSection, "global", translate("Basic Settings")) - s:option(Flag, "enable", translate("Enable App Filter"),translate("")) -+um = s:option(DummyValue, "") -+um.template="cbi/oaf_dvalue" -+local fullcone=SYS.exec("uci get firewall.@defaults[0].fullcone"); -+local bbr=SYS.exec("uci get flowoffload.@flow[0].bbr"); -+local flow_offloading=SYS.exec("uci get flowoffload.@flow[0].flow_offloading"); -+if string.match(flow_offloading, "1") then -+ um.value="运行环境检测失败,请先关闭ACC加速模块!" -+end - s.anonymous = true - - local rule_count=0 diff --git a/diy/patches/min-ttl.patch b/diy/patches/min-ttl.patch deleted file mode 100644 index cd21c2e4..00000000 --- a/diy/patches/min-ttl.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -+++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js -@@ -364,6 +364,13 @@ return view.extend({ - o.datatype = 'range(0,10000)'; - o.placeholder = 150; - -+ o = s.taboption('advanced', form.Value, 'mini_ttl', -+ _('Minimum TTL to send to clients'), -+ _('Modify DNS entries minimum TTL (max is 86400, 0 is no modify)')); -+ o.optional = true; -+ o.datatype = 'range(0,86400)'; -+ o.placeholder = 0; -+ - s.taboption('tftp', form.Flag, 'enable_tftp', - _('Enable TFTP server')).optional = true; - diff --git a/diy/patches/miniupnp.patch b/diy/patches/miniupnp.patch deleted file mode 100644 index a9d94885..00000000 --- a/diy/patches/miniupnp.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/miniupnpd/Makefile -+++ b/miniupnpd/Makefile -@@ -8,11 +8,12 @@ - include $(TOPDIR)/rules.mk - - PKG_NAME:=miniupnpd --PKG_VERSION:=2.0.20170421 -+PKG_VERSION:=3.0.20180503 - PKG_RELEASE:=3 - - PKG_SOURCE_URL:=http://miniupnp.free.fr/files --PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -+PKG_SOURCE:=$(PKG_NAME)-2.0.20180503.tar.gz -+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-2.0.20180503 - PKG_HASH:=9677aeccadf73b4bf8bb9d832c32b5da8266b4d58eed888f3fd43d7656405643 - - PKG_MAINTAINER:=Markus Stenberg diff --git a/diy/patches/mtwifi.patch b/diy/patches/mtwifi.patch deleted file mode 100644 index d9b0745e..00000000 --- a/diy/patches/mtwifi.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- a/luci-app-mtwifi/luasrc/view/admin_mtk/mtk_wifi_dev_cfg.htm -+++ b/luci-app-mtwifi/luasrc/view/admin_mtk/mtk_wifi_dev_cfg.htm -@@ -472,7 +472,7 @@ - } - - function getCountryRegionList(mode) { -- XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_country_region_list")%>', 'mode='+mode, -+ XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_country_region_list")%>', { "mode" : mode }, - function(x) - { - //console.log(x); -@@ -497,7 +497,7 @@ - } - - function getChannelList(mode, country_region) { -- XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_channel_list")%>', 'mode='+mode+'&country_region='+country_region, -+ XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_channel_list")%>', { "mode" : mode, "country_region" : country_region }, - function(x) - { - console.log(x); -@@ -616,7 +616,7 @@ - mode = mode.value*1; - - var cr = GetCountryRegion(mode); -- XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_5G_2nd_80Mhz_channel_list")%>', 'ch_cur='+ch+'&country_region='+cr, -+ XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_5G_2nd_80Mhz_channel_list")%>', { "ch_cur" : ch, "country_region" : cr }, - function(x) - { - //console.log(x); -@@ -658,7 +658,7 @@ - mode = mode.value*1; - - var cr = GetCountryRegion(mode); -- XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_HT_ext_channel_list")%>', 'ch_cur='+ch+'&country_region='+cr, -+ XHR.get('<%=luci.dispatcher.build_url("admin", "network", "wifi", "get_HT_ext_channel_list")%>', { "ch_cur" : ch, "country_region" : cr }, - function(x) - { - console.log(x); - ---- a/luci-app-mtwifi/luasrc/view/admin_mtk/mtk_wifi_overview.htm -+++ b/luci-app-mtwifi/luasrc/view/admin_mtk/mtk_wifi_overview.htm -@@ -31,7 +31,7 @@

无线概况

- - - -- -+ - - - Generic Mediatek <%=dev.devname%> diff --git a/diy/patches/openvpn.patch b/diy/patches/openvpn.patch deleted file mode 100644 index e16fd832..00000000 --- a/diy/patches/openvpn.patch +++ /dev/null @@ -1,87 +0,0 @@ ---- a/openvpn/files/etc/hotplug.d/openvpn/01-user -+++ b/openvpn/files/etc/hotplug.d/openvpn/01-user -@@ -1,9 +1,10 @@ - #!/bin/sh - - [ -e "/etc/openvpn.user" ] && { -+[ -e "/etc/openvpn/openvpn.user" ] && { - env -i ACTION="$ACTION" INSTANCE="$INSTANCE" \ - /bin/sh \ -- /etc/openvpn.user \ -+ /etc/openvpn/openvpn.user \ - $* - } - - ---- a/openvpn/files/openvpn.init -+++ b/openvpn/files/openvpn.init -@@ -140,9 +140,6 @@ openvpn_add_instance() { - local name="$1" - local dir="$2" - local conf="$3" -- local security="$4" -- local up="$5" -- local down="$6" - - procd_open_instance "$name" - procd_set_param command "$PROG" \ -@@ -150,13 +147,8 @@ openvpn_add_instance() { - --status "/var/run/openvpn.$name.status" \ - --cd "$dir" \ - --config "$conf" \ -- --up "/usr/libexec/openvpn-hotplug up $name" \ -- --down "/usr/libexec/openvpn-hotplug down $name" \ -- ${up:+--setenv user_up "$up"} \ -- ${down:+--setenv user_down "$down"} \ -- --script-security "${security:-2}" \ -- $(openvpn_get_dev "$name" "$conf") \ -- $(openvpn_get_credentials "$name" "$conf") -+ --script-security 2 \ -+ $(openvpn_get_dev "$name" "$conf") - procd_set_param file "$dir/$conf" - procd_set_param term_timeout 15 - procd_set_param respawn -@@ -177,28 +169,22 @@ start_instance() { - return 1 - } - -- local up down script_security -- config_get up "$s" up -- config_get down "$s" down -- config_get script_security "$s" script_security -- - [ ! -d "/var/run" ] && mkdir -p "/var/run" - - if [ ! -z "$config" ]; then - append UCI_STARTED "$config" "$LIST_SEP" -- [ -n "$up" ] || get_openvpn_option "$config" up up -- [ -n "$down" ] || get_openvpn_option "$config" down down -- openvpn_add_instance "$s" "${config%/*}" "$config" "$script_security" "$up" "$down" -+ openvpn_add_instance "$s" "${config%/*}" "$config" - return - fi - -- create_temp_file "/var/etc/openvpn-$s.conf" -+ [ ! -d "/var/etc" ] && mkdir -p "/var/etc" -+ [ -f "/var/etc/openvpn-$s.conf" ] && rm "/var/etc/openvpn-$s.conf" - - append_bools "$s" $OPENVPN_BOOLS - append_params "$s" $OPENVPN_PARAMS - append_list "$s" $OPENVPN_LIST - -- openvpn_add_instance "$s" "/var/etc" "openvpn-$s.conf" "$script_security" "$up" "$down" -+ openvpn_add_instance "$s" "/var/etc" "openvpn-$s.conf" - } - - start_service() { -@@ -240,9 +226,7 @@ start_service() { - continue - fi - -- get_openvpn_option "$path" up up || up="" -- get_openvpn_option "$path" down down || down="" -- openvpn_add_instance "$name" "${path%/*}" "$path" "" "$up" "$down" -+ openvpn_add_instance "$name" "${path%/*}" "$path" "" - fi - done - fi diff --git a/diy/patches/opkginstall.patch b/diy/patches/opkginstall.patch deleted file mode 100644 index 143de62f..00000000 --- a/diy/patches/opkginstall.patch +++ /dev/null @@ -1,228 +0,0 @@ ---- a/luci-app-opkg/htdocs/luci-static/resources/view/opkg.js -+++ b/luci-app-opkg/htdocs/luci-static/resources/view/opkg.js -@@ -232,7 +232,7 @@ function display(pattern) - var avail = packages.available.pkgs[name], - inst = packages.installed.pkgs[name]; - -- if (!inst || !inst.installed) -+ if (!inst || !inst.installed || pkg.name.includes('kmod-') || pkg.name.includes('busybox') || pkg.name.includes('base-files')) - continue; - - if (!avail || compareVersion(avail.version, pkg.version) <= 0) -@@ -245,6 +245,7 @@ function display(pattern) - btn = E('div', { - 'class': 'btn cbi-button-positive', - 'data-package': name, -+ 'action': 'upgrade', - 'click': handleInstall - }, _('Upgrade…')); - } -@@ -260,6 +261,9 @@ function display(pattern) - }, _('Remove…')); - } - else { -+ if (pkg.name.includes('luci-i18n')) -+ continue; -+ - var inst = packages.installed.pkgs[name]; - - ver = truncateVersion(pkg.version || '-'); -@@ -268,12 +272,14 @@ function display(pattern) - btn = E('div', { - 'class': 'btn cbi-button-action', - 'data-package': name, -+ 'action': 'install', - 'click': handleInstall - }, _('Install…')); -- else if (inst.installed && inst.version != pkg.version) -+ else if (inst.installed && compareVersion(pkg.version, inst.version) > 0) - btn = E('div', { - 'class': 'btn cbi-button-positive', - 'data-package': name, -+ 'action': 'upgrade', - 'click': handleInstall - }, _('Upgrade…')); - else -@@ -370,6 +376,12 @@ function handleMode(ev) - - currentDisplayMode = tab.getAttribute('data-mode'); - -+ if (currentDisplayMode == "updates"){ -+ var filterv = document.querySelector('input[name="filter"]') -+ if ( filterv.value == "luci-app-") -+ filterv.value = "" -+ } -+ - display(document.querySelector('input[name="filter"]').value); - - ev.target.blur(); -@@ -631,6 +643,7 @@ function handleReset(ev) - function handleInstall(ev) - { - var name = ev.target.getAttribute('data-package'), -+ action = ev.target.getAttribute('action'), - pkg = packages.available.pkgs[name], - depcache = {}, - size; -@@ -687,7 +700,7 @@ function handleInstall(ev) - errs || inst || '', - E('div', { 'class': 'right' }, [ - E('label', { 'class': 'cbi-checkbox', 'style': 'float:left' }, [ -- E('input', { 'id': 'overwrite-cb', 'type': 'checkbox', 'name': 'overwrite', 'disabled': isReadonlyView }), ' ', -+ E('input', { 'id': 'overwrite-cb', 'type': 'checkbox', 'name': 'overwrite', 'checked': 'checked', 'disabled': isReadonlyView }), ' ', - E('label', { 'for': 'overwrite-cb' }), ' ', - _('Overwrite files from other package(s)') - ]), -@@ -697,7 +710,7 @@ function handleInstall(ev) - }, _('Cancel')), - ' ', - E('div', { -- 'data-command': 'install', -+ 'data-command': action, - 'data-package': name, - 'class': 'btn cbi-button-action', - 'click': handleOpkg, -@@ -881,6 +894,10 @@ function handleOpkg(ev) - ]); - - var argv = [ cmd, '--force-removal-of-dependent-packages' ]; -+ -+ argv.push('--force-checksum'); -+ -+ argv.push('--force-depends'); - - if (rem && rem.checked) - argv.push('--autoremove'); -@@ -984,8 +1001,8 @@ function updateLists(data) - mount = L.toArray(data[0].filter(function(m) { return m.mount == '/' || m.mount == '/overlay' })) - .sort(function(a, b) { return a.mount > b.mount })[0] || { size: 0, free: 0 }; - -- pg.firstElementChild.style.width = Math.floor(mount.size ? ((100 / mount.size) * mount.free) : 100) + '%'; -- pg.setAttribute('title', '%s (%.1024mB)'.format(pg.firstElementChild.style.width, mount.free)); -+ pg.firstElementChild.style.width = Math.floor(mount.size ? ((100 / mount.size) * (mount.size-mount.free)) : 100) + '%'; -+ pg.setAttribute('title', '%s (%.1024mB)'.format(pg.firstElementChild.style.width, (mount.size-mount.free))); - - parseList(data[1], packages.available); - parseList(data[2], packages.installed); -@@ -1020,14 +1037,14 @@ return view.extend({ - - E('div', { 'class': 'controls' }, [ - E('div', {}, [ -- E('label', {}, _('Free space') + ':'), -+ E('label', {}, _('Used space') + ':'), - E('div', { 'class': 'cbi-progressbar', 'title': _('unknown') }, E('div', {}, [ '\u00a0' ])) - ]), - - E('div', {}, [ - E('label', {}, _('Filter') + ':'), - E('span', { 'class': 'control-group' }, [ -- E('input', { 'type': 'text', 'name': 'filter', 'placeholder': _('Type to filter…'), 'value': query, 'keyup': handleKeyUp }), -+ E('input', { 'type': 'text', 'name': 'filter', 'placeholder': _('Type to filter…'), 'value': 'luci-app-', 'keyup': handleKeyUp }), - E('button', { 'class': 'btn cbi-button', 'click': handleReset }, [ _('Clear') ]) - ]) - ]), -@@ -1056,14 +1073,6 @@ return view.extend({ - E('li', { 'data-mode': 'updates', 'class': 'installed cbi-tab-disabled', 'click': handleMode }, E('a', { 'href': '#' }, [ _('Updates') ])) - ]), - -- E('div', { 'class': 'controls', 'style': 'display:none' }, [ -- E('div', { 'id': 'pager', 'class': 'center' }, [ -- E('button', { 'class': 'btn cbi-button-neutral prev', 'aria-label': _('Previous page'), 'click': handlePage }, [ '«' ]), -- E('div', { 'class': 'text' }, [ 'dummy' ]), -- E('button', { 'class': 'btn cbi-button-neutral next', 'aria-label': _('Next page'), 'click': handlePage }, [ '»' ]) -- ]) -- ]), -- - E('table', { 'id': 'packages', 'class': 'table' }, [ - E('tr', { 'class': 'tr cbi-section-table-titles' }, [ - E('th', { 'class': 'th col-2 left' }, [ _('Package name') ]), -@@ -1072,6 +1081,14 @@ return view.extend({ - E('th', { 'class': 'th col-10 left' }, [ _('Description') ]), - E('th', { 'class': 'th right cbi-section-actions' }, [ '\u00a0' ]) - ]) -+ ]), -+ -+ E('div', { 'class': 'controls', 'style': 'display:none' }, [ -+ E('div', { 'id': 'pager', 'class': 'center' }, [ -+ E('button', { 'class': 'btn cbi-button-neutral prev', 'aria-label': _('Previous page'), 'click': handlePage }, [ '«' ]), -+ E('div', { 'class': 'text' }, [ 'dummy' ]), -+ E('button', { 'class': 'btn cbi-button-neutral next', 'aria-label': _('Next page'), 'click': handlePage }, [ '»' ]) -+ ]) - ]) - ]); - - ---- a/luci-app-opkg/root/usr/libexec/opkg-call -+++ b/luci-app-opkg/root/usr/libexec/opkg-call -@@ -13,13 +13,13 @@ case "$action" in - lists_dir=$(sed -rne 's#^lists_dir \S+ (\S+)#\1#p' /etc/opkg.conf /etc/opkg/*.conf 2>/dev/null | tail -n 1) - find "${lists_dir:-/usr/lib/opkg/lists}" -type f '!' -name '*.sig' | xargs -r gzip -cd - ;; -- install|update|remove) -+ install|update|upgrade|remove) - ( - opkg="opkg" - - while [ -n "$1" ]; do - case "$1" in -- --autoremove|--force-overwrite|--force-removal-of-dependent-packages) -+ --autoremove|--force-overwrite|--force-removal-of-dependent-packages|--force-checksum|--force-depends) - opkg="$opkg $1" - shift - ;; -@@ -35,8 +35,32 @@ case "$action" in - if flock -x 200; then - $opkg $action "$@" /tmp/opkg.out 2>/tmp/opkg.err - code=$? -- stdout=$(cat /tmp/opkg.out) -+ if [[ $@ == luci-app-* && "$(opkg list | grep luci-i18n-"$(echo $@ | cut -d - -f 3-)"-zh-cn)" ]]; then -+ $opkg $action luci-i18n-"$(echo $@ | cut -d - -f 3-)"-zh-cn >/tmp/opkg.out 2>/dev/null -+ fi -+ case "$action" in -+ install|upgrade) -+ [ "$(opkg list-installed | cut -f 1 -d ' ' | grep -w $@)" ] && { -+ rm -f /tmp/opkg.err -+ } -+ ;; -+ remove) -+ . /etc/profile.d/opkg.sh; opkg save -+ [ ! "$(opkg list-installed | cut -f 1 -d ' ' | grep -w $@)" ] && { -+ rm -f /tmp/opkg.err -+ } -+ ;; -+ esac -+ grep -q "wget returned 8" /tmp/opkg.err && { -+ opkg update /tmp/opkg.out 2>/tmp/opkg.err -+ $opkg $action "$@" >/tmp/opkg.out 2>>/tmp/opkg.err -+ } - stderr=$(cat /tmp/opkg.err) -+ [ -n "$stderr" ] || { -+ echo "🎉 已完成, 请关闭本窗口~" >>/tmp/opkg.out -+ code=0 -+ } -+ stdout=$(cat /tmp/opkg.out) - else - code=255 - stderr="Failed to acquire lock" - ---- a/luci-app-opkg/root/usr/share/rpcd/acl.d/luci-app-opkg.json -+++ b/luci-app-opkg/root/usr/share/rpcd/acl.d/luci-app-opkg.json -@@ -20,6 +20,7 @@ - "/usr/libexec/opkg-call install *": [ "exec" ], - "/usr/libexec/opkg-call remove *": [ "exec" ], - "/usr/libexec/opkg-call update *": [ "exec" ], -+ "/usr/libexec/opkg-call upgrade *": [ "exec" ], - "/etc/opkg.conf": [ "write" ], - "/etc/opkg/*.conf": [ "write" ], - "/tmp/upload.ipk": [ "write" ] - ---- a/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js -+++ b/luci-mod-system/htdocs/luci-static/resources/view/system/flash.js -@@ -261,6 +261,7 @@ return view.extend({ - body.push(E('p', {}, E('label', { 'class': 'btn' }, [ - opts.backup_pkgs[0], ' ', _('Include in backup a list of current installed packages at /etc/backup/installed_packages.txt') - ]))); -+ opts.backup_pkgs[0].checked = true; - }; - - var cntbtn = E('button', { diff --git a/diy/patches/pdnsd-filter-aaaa.patch b/diy/patches/pdnsd-filter-aaaa.patch deleted file mode 100644 index 9e28b2fc..00000000 --- a/diy/patches/pdnsd-filter-aaaa.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- /dev/null -+++ b/pdnsd-alt/patches/10-filter-aaaa.patch -@@ -0,0 +1,18 @@ -+--- a/src/dns_answer.c -++++ b/src/dns_answer.c -+@@ -567,6 +567,7 @@ static int add_rrset(dns_msg_t **ans, size_t *sz, size_t *allocsz, -+ if (rnd_recs) b=first=randrr(crrset->rrs); -+ -+ while (b) { -++ if (tp==T_AAAA) goto add_rrset_next; -+ if (!add_rr(ans, sz, allocsz, rrn, tp, ans_ttl(crrset,queryts), -+ b->rdlen, b->data, S_ANSWER, udp, cb)) -+ return 0; -+@@ -584,6 +585,7 @@ static int add_rrset(dns_msg_t **ans, size_t *sz, size_t *allocsz, -+ break; -+ } -+ } -++add_rrset_next: -+ b=b->next; -+ if (rnd_recs) { -+ if(!b) b=crrset->rrs; /* wraparound */ diff --git a/diy/patches/wireless.patch b/diy/patches/wireless.patch deleted file mode 100644 index 60a50815..00000000 --- a/diy/patches/wireless.patch +++ /dev/null @@ -1,93 +0,0 @@ ---- a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js -+++ b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js -@@ -885,6 +885,10 @@ return view.extend({ - if (hwtype == 'mac80211') { - o = ss.taboption('general', form.Flag, 'legacy_rates', _('Allow legacy 802.11b rates'), _('Legacy or badly behaving devices may require legacy 802.11b rates to interoperate. Airtime efficiency may be significantly reduced where these are used. It is recommended to not allow 802.11b rates where possible.')); - -+ o = ss.taboption("advanced", form.Flag, 'mu_beamformer', _('MU-MIMO')); -+ o.rmempty = false; -+ o.default = '0'; -+ - o = ss.taboption('general', CBIWifiTxPowerValue, 'txpower', _('Maximum transmit power'), _('Specifies the maximum transmit power the wireless radio may use. Depending on regulatory requirements and wireless usage, the actual transmit power may be reduced by the driver.')); - o.wifiNetwork = radioNet; - -@@ -916,6 +920,9 @@ return view.extend({ - o.datatype = 'range(15,65535)'; - o.placeholder = 100; - o.rmempty = true; -+ -+ o = ss.taboption('advanced', form.Flag, 'vendor_vht', _('Enable 256-QAM'), _('802.11n 2.4Ghz Only')); -+ o.default = o.disabled; - } - - -@@ -1001,6 +1008,68 @@ return view.extend({ - }; - - if (hwtype == 'mac80211') { -+ // Probe 802.11k support -+ o = ss.taboption('encryption', form.Flag, 'ieee80211k', _('802.11k'), _('Enables The 802.11k standard provides information to discover the best available access point')); -+ o.depends({ mode : 'ap', encryption : 'wpa' }); -+ o.depends({ mode : 'ap', encryption : 'wpa2' }); -+ o.depends({ mode : 'ap-wds', encryption : 'wpa' }); -+ o.depends({ mode : 'ap-wds', encryption : 'wpa2' }); -+ o.depends({ mode : 'ap', encryption : 'psk' }); -+ o.depends({ mode : 'ap', encryption : 'psk2' }); -+ o.depends({ mode : 'ap', encryption : 'psk-mixed' }); -+ o.depends({ mode : 'ap-wds', encryption : 'psk' }); -+ o.depends({ mode : 'ap-wds', encryption : 'psk2' }); -+ o.depends({ mode : 'ap-wds', encryption : 'psk-mixed' }); -+ o.rmempty = true; -+ -+ o = ss.taboption('encryption', form.Flag, 'rrm_neighbor_report', _('Enable neighbor report via radio measurements')); -+ o.default = o.enabled; -+ o.depends({ ieee80211k : '1' }); -+ o.rmempty = true; -+ -+ o = ss.taboption('encryption', form.Flag, 'rrm_beacon_report', _('Enable beacon report via radio measurements')); -+ o.default = o.enabled; -+ o.depends({ ieee80211k : '1' }); -+ o.rmempty = true; -+ // End of 802.11k options -+ -+ // Probe 802.11v support -+ o = ss.taboption('encryption', form.Flag, 'ieee80211v', _('802.11v'), _('Enables 802.11v allows client devices to exchange information about the network topology,tating overall improvement of the wireless network.')); -+ o.depends({ mode : 'ap', encryption : 'wpa' }); -+ o.depends({ mode : 'ap', encryption : 'wpa2' }); -+ o.depends({ mode : 'ap-wds', encryption : 'wpa' }); -+ o.depends({ mode : 'ap-wds', encryption : 'wpa2' }); -+ o.depends({ mode : 'ap', encryption : 'psk' }); -+ o.depends({ mode : 'ap', encryption : 'psk2' }); -+ o.depends({ mode : 'ap', encryption : 'psk-mixed' }); -+ o.depends({ mode : 'ap-wds', encryption : 'psk' }); -+ o.depends({ mode : 'ap-wds', encryption : 'psk2' }); -+ o.depends({ mode : 'ap-wds', encryption : 'psk-mixed' }); -+ o.rmempty = true; -+ -+ -+ o = ss.taboption('encryption', form.Flag, 'wnm_sleep_mode', _('extended sleep mode for stations')); -+ o.default = o.disabled; -+ o.depends({ ieee80211v : '1' }); -+ o.rmempty = true; -+ -+ o = ss.taboption('encryption', form.Flag, 'bss_transition', _('BSS Transition Management')); -+ o.default = o.disabled; -+ o.depends({ ieee80211v : '1' }); -+ o.rmempty = true; -+ -+ o = ss.taboption('encryption', form.ListValue, 'time_advertisement', _('Time advertisement')); -+ o.depends({ ieee80211v : '1' }); -+ o.value('0', _('disabled')); -+ o.value('2', _('UTC time at which the TSF timer is 0')); -+ o.rmempty = true; -+ -+ o = ss.taboption('encryption', form.Value, 'time_zone', _('time zone'), _('Local time zone as specified in 8.3 of IEEE Std 1003.1-2004')); -+ o.depends({ time_advertisement : '2' }); -+ o.placeholder = 'UTC8'; -+ o.rmempty = true; -+ // End of 802.11v options -+ - var mode = ss.children[0], - bssid = ss.children[5], - encr; - diff --git a/dns2socks/Makefile b/dns2socks/Makefile deleted file mode 100644 index 982f3512..00000000 --- a/dns2socks/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=dns2socks -PKG_VERSION:=2.1 -PKG_RELEASE:= - -PKG_SOURCE:=SourceCode.zip -PKG_SOURCE_URL:=@SF/dns2socks -PKG_SOURCE_DATE:=2020-02-18 -PKG_HASH:=406b5003523577d39da66767adfe54f7af9b701374363729386f32f6a3a995f4 - -PKG_MAINTAINER:=ghostmaker -PKG_LICENSE:=BSD-3-Clause -PKG_LICENSE_FILE:=LICENSE - -include $(INCLUDE_DIR)/package.mk - -UNZIP_CMD:=unzip -q -d $(PKG_BUILD_DIR) $(DL_DIR)/$(PKG_SOURCE) - -define Package/dns2socks - SECTION:=net - CATEGORY:=Network - SUBMENU:=IP Addresses and Names - TITLE:=DNS to SOCKS or HTTP proxy - URL:=http://dns2socks.sourceforge.net/ - DEPENDS:=+libpthread -endef - -define Package/dns2socks/description - This is a command line utility to resolve DNS requests via - a SOCKS tunnel like Tor or a HTTP proxy. -endef - -define Build/Compile - $(TARGET_CC) \ - $(TARGET_CFLAGS) \ - $(TARGET_CPPFLAGS) \ - $(FPIC) \ - -o $(PKG_BUILD_DIR)/DNS2SOCKS/dns2socks \ - $(PKG_BUILD_DIR)/DNS2SOCKS/DNS2SOCKS.c \ - $(TARGET_LDFLAGS) -pthread -endef - -define Package/dns2socks/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/DNS2SOCKS/dns2socks $(1)/usr/bin/dns2socks -endef - -$(eval $(call BuildPackage,dns2socks)) diff --git a/homeredirect/Makefile b/homeredirect/Makefile deleted file mode 100644 index 5f7c77ab..00000000 --- a/homeredirect/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -# -# Copyright (c) 2020 xiaoqingfeng (xiaoqingfengatgm@gmail.com) -# Feed site - https://github.com/xiaoqingfengATGH/feeds-xiaoqingfeng -# This is free software, licensed under the GNU General Public License v3. -# -include $(TOPDIR)/rules.mk - -PKG_NAME:=HomeRedirect -PKG_VERSION:=1.4 -PKG_RELEASE:= -PKG_DATE:=20210226 - -PKG_MAINTAINER:=xiaoqingfeng -PKG_LICENSE:=GPL-3.0-or-later -PKG_LICENSE_FILES:=LICENSE - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - SECTION:=net - CATEGORY:=Network - TITLE:=Port forwarding utility for HomeLede. - DEPENDS:=+bash +coreutils-nohup +socat - PKGARCH:=all - URL:=https://github.com/xiaoqingfengATGH/feeds-xiaoqingfeng -endef - -define Package/$(PKG_NAME)/config -help - $(PKG_NAME) - Version: $(PKG_VERSION)-$(PKG_RELEASE) - Port forwarding utility for HomeLede. Support TCP/UDP ipv4 & ipv6. -endef - -define Package/$(PKG_NAME)/description -Port forwarding utility for HomeLede. Support TCP/UDP ipv4 & ipv6. -endef - -define Package/$(PKG_NAME)/conffiles -/etc/config/homeredirect -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_DIR) $(1)/etc/homeredirect - $(INSTALL_BIN) files/etc/init.d/homeredirect $(1)/etc/init.d - $(INSTALL_CONF) files/etc/config/homeredirect $(1)/etc/config - $(INSTALL_DATA) files/etc/homeredirect/firewall.include $(1)/etc/homeredirect/ - $(INSTALL_DATA) files/etc/homeredirect/script.sh $(1)/etc/homeredirect/ -endef - -define Package/$(PKG_NAME)/postinst -#!/bin/sh -exit 0 -endef - -define Package/$(PKG_NAME)/prerm -#!/bin/sh -/etc/init.d/homeredirect stop -uci -q batch <<-EOF >/dev/null - delete ucitrack.@homeredirect[-1] - commit ucitrack -EOF -uci -q batch <<-EOF >/dev/null - delete firewall.homeredirect -EOF -exit 0 -endef - -define Build/Configure -endef - -define Build/Prepare -endef - -define Build/Compile -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/homeredirect/files/etc/config/homeredirect b/homeredirect/files/etc/config/homeredirect deleted file mode 100644 index 10afeb96..00000000 --- a/homeredirect/files/etc/config/homeredirect +++ /dev/null @@ -1,38 +0,0 @@ -config global - option enabled '1' - -config redirect - option proto 'tcp4' - option src_ip '0.0.0.0' - option src_dport '60609' - option dest_ip '192.168.1.100' - option dest_port '3389' - option name 'TCP_REDIRECT_IPV4' - option enabled '0' - -config redirect - option proto 'tcp6' - option src_ip '::' - option src_dport '60608' - option dest_ip 'fd5b:64cf:4ff4::1c4' - option dest_port '3389' - option name 'TCP_REDIRECT_IPV6' - option enabled '0' - -config redirect - option proto 'udp4' - option src_ip '0.0.0.0' - option src_dport '64511' - option dest_ip '192.168.1.100' - option dest_port '500' - option name 'UDP_REDIRECT_IPV4' - option enabled '0' - -config redirect - option proto 'udp6' - option src_ip '::' - option src_dport '64500' - option dest_ip 'fd5b:64cf:4ff4::1c4' - option dest_port '4500' - option name 'UDP_REDIRECT_IPV6' - option enabled '0' \ No newline at end of file diff --git a/homeredirect/files/etc/homeredirect/firewall.include b/homeredirect/files/etc/homeredirect/firewall.include deleted file mode 100644 index 1356ac93..00000000 --- a/homeredirect/files/etc/homeredirect/firewall.include +++ /dev/null @@ -1 +0,0 @@ -bash /etc/homeredirect/script.sh \ No newline at end of file diff --git a/homeredirect/files/etc/homeredirect/script.sh b/homeredirect/files/etc/homeredirect/script.sh deleted file mode 100644 index f3707f73..00000000 --- a/homeredirect/files/etc/homeredirect/script.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -del_rule() { - count=$(iptables -n -L INPUT 2>/dev/null | grep -c "HOME_REDIRECT") - if [ -n "$count" ]; then - until [ "$count" = 0 ] - do - rules=$(iptables -n -L INPUT --line-num 2>/dev/null | grep "HOME_REDIRECT" | awk '{print $1}') - for rule in $rules - do - iptables -D INPUT $rule 2>/dev/null - break - done - count=$(expr $count - 1) - done - fi - - iptables -F HOME_REDIRECT 2>/dev/null - iptables -X HOME_REDIRECT 2>/dev/null -} - -add_rule(){ - iptables -N HOME_REDIRECT - iptables -I INPUT -j HOME_REDIRECT - - maxRedirctCount=$(uci show homeredirect | grep @redirect | awk -F '[' '{print $2}' | awk -F ']' '{print $1}' | sort | tail -n 1) - - for ((i=($maxRedirctCount);i>=0;i--)); - do - enabled=$(uci get homeredirect.@redirect[$i].enabled) - if [ $enabled -eq 1 ]; then - protoAll=$(uci get homeredirect.@redirect[$i].proto) - proto=${protoAll:0:3} - port=$(uci get homeredirect.@redirect[$i].src_dport) - iptables -A HOME_REDIRECT -p $proto --dport $port -j ACCEPT - fi - done -} - -del_rule - -enable=$(uci get homeredirect.@global[0].enabled) -if [ $enable -eq 1 ]; then - add_rule -fi diff --git a/homeredirect/files/etc/init.d/homeredirect b/homeredirect/files/etc/init.d/homeredirect deleted file mode 100644 index 61dcf1fd..00000000 --- a/homeredirect/files/etc/init.d/homeredirect +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=99 - -RUNLOG_DIR=/tmp/hr - -PROCESSED_REDIRECT=0 - -log() -{ - logger -t homeredirect $1 -} - -setupDefaultSrcIP() { - if [ -z $src_ip ];then - if [ "$1" = "ipv4" ]; then - src_ip="0.0.0.0" - else - src_ip="::" - fi - fi -} - -setup() { - - config_get enabled $1 enabled - - id=$1 - config_get proto $1 proto - config_get src_ip $1 src_ip - config_get src_dport $1 src_dport - config_get dest_ip $1 dest_ip - config_get dest_port $1 dest_port - config_get name $1 name - - terminateRedirect $id - - [ "$enabled" != "1" ] && return 0 - - PROCESSED_REDIRECT=1 - - if [ "$proto" = "tcp4" ]; then - src_addresstype="TCP4-LISTEN" - dest_addresstype="TCP4" - setupDefaultSrcIP "ipv4" - elif [ "$proto" = "tcp6" ]; then - src_addresstype="TCP6-LISTEN" - dest_addresstype="TCP6" - setupDefaultSrcIP "ipv6" - src_ip="[$src_ip]" - dest_ip="[$dest_ip]" - elif [ "$proto" = "udp4" ]; then - src_addresstype="UDP4-LISTEN" - dest_addresstype="UDP4" - setupDefaultSrcIP "ipv4" - elif [ "$proto" = "udp6" ]; then - src_addresstype="UDP6-LISTEN" - dest_addresstype="UDP6" - setupDefaultSrcIP "ipv6" - src_ip="[$src_ip]" - dest_ip="[$dest_ip]" - fi - - #echo "nohup socat -lf $RUNLOG_DIR/$id.log $src_addresstype:$src_dport,bind=$src_ip,fork $dest_addresstype:$dest_ip:$dest_port > $RUNLOG_DIR/$id.log 2>&1 &" - nohup socat -lf $RUNLOG_DIR/$id.log $src_addresstype:$src_dport,bind=$src_ip,fork $dest_addresstype:$dest_ip:$dest_port > $RUNLOG_DIR/$id.log 2>&1 & - log "[HomeRedirect] Port redirect from $proto $src_ip:$src_dport==>$dest_addresstype:$dest_ip:$dest_port started." -} - -# param $1 is port -showTcpPortState() { - local process=$(netstat -ltnp | awk -F ' ' '{if(NR>2) print $1"/"$4"/"$7}' | grep :$1) - if [ -n "$process" ]; then - echo $process - else - echo 'TCP Port $1 is Free.' - fi -} -# param $1 is port -showUdpPortState() { - local process=$(netstat -lunp | awk -F ' ' '{if(NR>2) print $1"/"$4"/"$6}'|grep :$1) - if [ -n "$process" ]; then - echo $process - else - echo 'UDP Port $1 is Free.' - fi -} - -isRedirectRunning() { - local runningPID=$(ps | grep socat | grep $RUNLOG_DIR/$1 | sed '/grep/d' | awk -F ' ' '{print $1}') - if [ -n "$runningPID" ]; then - return 1 - else - return 0 - fi -} - -# param $1 is redirect id -terminateRedirect() { - isRedirectRunning $1 - [ "$?" = "1" ] && { - local runningPID=$(ps | grep socat | grep $RUNLOG_DIR/$1 | sed '/grep/d' | awk -F ' ' '{print $1}') - #echo "Going to kill process $runningPID" - kill $runningPID - } -} - -terminateAll() { - local runningPIDs=$(ps | grep socat | grep $RUNLOG_DIR | sed '/grep/d' | awk -F ' ' '{print $1}') - [ -n "$runningPIDs" ] && { - kill $runningPIDs - log "Redirect process : $runningPIDs stopped." - } -} - -start() { - local vt_enabled=$(uci -q get homeredirect.@global[0].enabled) - if [ "$vt_enabled" = 0 ]; then - terminateAll - fw3 reload - return 1 - fi - - rm -rf $RUNLOG_DIR - mkdir -p $RUNLOG_DIR - - config_load homeredirect - - PROCESSED_REDIRECT=0 - config_foreach setup redirect - [ "$PROCESSED_REDIRECT" == "1" ] && { - fw3 reload - } - log 'HomeRedirect started.' -} - -stop() { - terminateAll - fw3 reload - log 'HomeRedirect stopped.' -} diff --git a/hysteria/Makefile b/hysteria/Makefile deleted file mode 100644 index cb9cc58e..00000000 --- a/hysteria/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=hysteria -PKG_VERSION:=0.9.6 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/HyNetwork/hysteria/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=f543cfef69fc396c15248262d084aa3f6fef48a8cd98bdd8fda113fd4f5bf94c - -PKG_LICENSE:=MIT -PKG_LICENSE_FILE:=LICENSE -PKG_MAINTAINER:=Tianling Shen - -PKG_CONFIG_DEPENDS:= \ - CONFIG_HYSTERIA_COMPRESS_GOPROXY \ - CONFIG_HYSTERIA_COMPRESS_UPX - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -GO_PKG:=github.com/tobyxdd/hysteria -GO_PKG_BUILD_PKG:=github.com/tobyxdd/hysteria/cmd -GO_PKG_LDFLAGS:=-s -w -GO_PKG_LDFLAGS_X:=main.appVersion=$(PKG_VERSION) - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/hysteria - SECTION:=net - CATEGORY:=Network - TITLE:=A feature-packed network utility optimized for networks of poor quality - URL:=https://github.com/tobyxdd/hysteria - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle -endef - -define Package/hysteria/description - Hysteria is a feature-packed network utility optimized for networks - of poor quality (e.g. satellite connections, congested public Wi-Fi, - connecting from China to servers abroad) powered by a custom version - of QUIC protocol. -endef - -define Package/hysteria/config -config HYSTERIA_COMPRESS_GOPROXY - bool "Compiling with GOPROXY proxy" - default n - -config HYSTERIA_COMPRESS_UPX - bool "Compress executable files with UPX" - depends on !mips64 - default n -endef - -ifeq ($(CONFIG_HYSTERIA_COMPRESS_GOPROXY),y) - export GO111MODULE=on - export GOPROXY=https://goproxy.baidu.com -endif - -define Build/Compile - $(call GoPackage/Build/Compile) -ifeq ($(CONFIG_HYSTERIA_COMPRESS_UPX),y) - $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/cmd -endif -endef - -define Package/hysteria/install - $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR)) - $(INSTALL_DIR) $(1)/usr/bin/ - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/cmd $(1)/usr/bin/hysteria -endef - -$(eval $(call GoBinPackage,hysteria)) -$(eval $(call BuildPackage,hysteria)) diff --git a/ipt2socks/Makefile b/ipt2socks/Makefile deleted file mode 100644 index 16eac566..00000000 --- a/ipt2socks/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=ipt2socks -PKG_VERSION:=1.1.3 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/zfl9/ipt2socks/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=73a2498dc95934c225d358707e7f7d060b5ce81aa45260ada09cbd15207d27d1 - -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -PKG_LICENSE:=AGPL-3.0 -PKG_LICENSE_FILE:=LICENSE - -include $(INCLUDE_DIR)/package.mk - -define Package/ipt2socks - SECTION:=net - CATEGORY:=Network - TITLE:=Convert iptables to socks5 - URL:=https://github.com/zfl9/ipt2socks - DEPENDS:=+libpthread +libuv -endef - -define Package/ipt2socks/description - Utility for converting iptables (redirect/tproxy) to socks5. -endef - -TARGET_CFLAGS += $(FPIC) -flto -TARGET_LDFLAGS += -flto - -define Package/ipt2socks/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/ipt2socks $(1)/usr/bin -endef - -$(eval $(call BuildPackage,ipt2socks)) diff --git a/kcptun/Makefile b/kcptun/Makefile deleted file mode 100644 index d7a41ebd..00000000 --- a/kcptun/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=kcptun -PKG_VERSION:=20210922 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/xtaci/kcptun/tar.gz/v${PKG_VERSION}? -PKG_SOURCE_DATE:=2021-09-22 -PKG_HASH:=f6a08f0fe75fa85d15f9c0c28182c69a5ad909229b4c230a8cbe38f91ba2d038 - -PKG_MAINTAINER:=Dengfeng Liu , Chao Liu -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE.md - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -GO_PKG:=github.com/xtaci/kcptun - -GO_PKG_LDFLAGS_X:=main.VERSION=$(PKG_VERSION) - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/kcptun-config - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=Kcptun Config Scripts - URL:=https://github.com/xtaci/kcptun - DEPENDS:=$(GO_ARCH_DEPENDS) -endef - -define Package/kcptun-config/conffiles -/etc/config/kcptun -endef - -define Package/kcptun-config/install - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_CONF) ./files/kcptun.config $(1)/etc/config/kcptun - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/kcptun.init $(1)/etc/init.d/kcptun -endef - -define Package/kcptun/Default - define Package/kcptun-$(1) - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=KCP-based Secure Tunnel $(1) - URL:=https://github.com/xtaci/kcptun - DEPENDS:=+kcptun-config - endef - - define Package/kcptun-$(1)/description - kcptun is a Stable & Secure Tunnel Based On KCP with N:M Multiplexing. -This package only contains kcptun $(1). - endef - - define Package/kcptun-$(1)/install - $$(call GoPackage/Package/Install/Bin,$$(PKG_INSTALL_DIR)) - - $$(INSTALL_DIR) $$(1)/usr/bin - $$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/usr/bin/$(1) $$(1)/usr/bin/kcptun-$(1) - endef -endef - -$(eval $(call BuildPackage,kcptun-config)) -KCPTUN_COMPONENTS:=server client -$(foreach component,$(KCPTUN_COMPONENTS), \ - $(eval $(call Package/kcptun/Default,$(component))) \ - $(eval $(call GoBinPackage,kcptun-$(component))) \ - $(eval $(call BuildPackage,kcptun-$(component))) \ -) diff --git a/kcptun/files/kcptun.config b/kcptun/files/kcptun.config deleted file mode 100644 index 06000b47..00000000 --- a/kcptun/files/kcptun.config +++ /dev/null @@ -1,43 +0,0 @@ -config server - option disabled 1 - option listen 29900 - option target '127.0.0.1' - option target_port 12948 - option crypt 'aes' - option key 'secret' - option mode 'fast' - option datashard 10 - option parityshard 3 - option dscp 46 - option nocomp 1 - option snmplog '/var/log/snmp.log' - option snmpperiod 60 - option pprof 1 - option quiet 1 - option syslog 1 - option user nobody - -config client - option disabled 1 - option bind_address '0.0.0.0' - option local_port 12948 - option server 'vps' - option server_port 29900 - option crypt 'aes' - option key 'secret' - option mode 'fast' - option conn 1 - option autoexpire 0 - option scavengettl 600 - option mtu 1350 - option sndwnd 128 - option rcvwnd 512 - option nocomp 1 - option sockbuf 4194304 - option smuxver 1 - option smuxbuf 4194304 - option streambuf 2097152 - option keepalive 10 - option quiet 1 - option gogc 20 - option user nobody diff --git a/kcptun/files/kcptun.init b/kcptun/files/kcptun.init deleted file mode 100755 index b22f8504..00000000 --- a/kcptun/files/kcptun.init +++ /dev/null @@ -1,174 +0,0 @@ -#!/bin/sh /etc/rc.common -# -# Copyright (C) 2019 Chao Liu -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -USE_PROCD=1 -START=99 - -confdir=/var/etc/kcptun -bindir=/usr/bin - -mkjson_server_conf() { - [ "$disabled" = 0 ] || return 1 - [ -n "$listen" ] || return 1 - [ -n "$target" ] || return 1 - [ -n "$target_port" ] || return 1 - json_add_string listen ":$listen" - json_add_string target "$target:$target_port" - json_add_boolean pprof "$pprof" -} - -mkjson_client_conf() { - [ "$disabled" = 0 ] || return 1 - [ -n "$local_port" ] || return 1 - [ -n "$server" ] || return 1 - [ -n "$server_port" ] || return 1 - json_add_string localaddr "$bind_address:$local_port" - json_add_string remoteaddr "$server:$server_port" - [ -z "$conn" ] || json_add_int conn "$conn" - [ -z "$autoexpire" ] || json_add_int autoexpire "$autoexpire" - [ -z "$scavengettl" ] || json_add_int scavengettl "$scavengettl" -} - -kcptun() { - local cfg="$1" - local cfgtype="$2" - local bin="$bindir/kcptun-$cfgtype" - local confjson="$confdir/$cfgtype.$cfg.json" - - [ -x "$bin" ] || return - eval "$("validate_${cfgtype}_section" "$cfg" validate_mklocal)" - "validate_${cfgtype}_section" "$cfg" || return - [ "$disabled" = 0 ] || return - - json_init - mkjson_${cfgtype}_conf || return - [ -z "$crypt" ] || json_add_string crypt "$crypt" - [ -z "$key" ] || json_add_string key "$key" - [ -z "$mode" ] || json_add_string mode "$mode" - [ -z "$mtu" ] || json_add_int mtu "$mtu" - [ -z "$sndwnd" ] || json_add_int sndwnd "$sndwnd" - [ -z "$rcvwnd" ] || json_add_int rcvwnd "$rcvwnd" - [ -z "$datashard" ] || json_add_int datashard "$datashard" - [ -z "$parityshard" ] || json_add_int parityshard "$parityshard" - [ -z "$dscp" ] || json_add_int dscp "$dscp" - json_add_boolean nocomp "$nocomp" - [ -z "$sockbuf" ] || json_add_int sockbuf "$sockbuf" - [ -z "$smuxver" ] || json_add_int smuxver "$smuxver" - [ -z "$smuxbuf" ] || json_add_int smuxbuf "$smuxbuf" - [ -z "$streambuf" ] || json_add_int streambuf "$streambuf" - [ -z "$keepalive" ] || json_add_int keepalive "$keepalive" - [ -z "$snmplog" ] || json_add_string snmplog "$snmplog" - [ -z "$snmpperiod" ] || json_add_int snmpperiod "$snmpperiod" - json_add_boolean quiet "$quiet" - json_dump -i > "$confjson" - - procd_open_instance "$cfgtype.$cfg" - procd_set_param command "$bin" -c "$confjson" - [ -z "$gogc" ] || procd_set_param env GOGC="$gogc" - [ -z "$syslog" ] || procd_set_param stderr 1 - [ -z "$user" ] || procd_set_param user "$user" - procd_set_param file "$confjson" - procd_set_param respawn - procd_close_instance -} - -start_service() { - local cfgtype - - mkdir -p "$confdir" - config_load kcptun - for cfgtype in server client; do - config_foreach kcptun "$cfgtype" "$cfgtype" - done -} - -stop_service() { - rm -rf "$confdir" -} - -service_triggers() { - procd_add_reload_interface_trigger wan - procd_add_reload_trigger kcptun - procd_open_validate - validate_server_section - validate_client_section - procd_close_validate -} - -validate_mklocal() { - local tuple opts - - shift 2 - for tuple in "$@"; do - opts="${tuple%%:*} $opts" - done - [ -z "$opts" ] || echo "local $opts" -} - -validate() { - uci_validate_section kcptun "$@" -} - -validate_common_options() { - local cfgtype="$1"; shift - local cfg="$1"; shift - local func="$1"; shift - local crypt_methods='"aes", "aes-128", "aes-192", "salsa20", "blowfish", "twofish", "cast5", "3des", "tea", "xtea", "xor", "sm4", "none"' - local mode_profiles='"fast3", "fast2", "fast", "normal", "manual"' - - "${func:-validate}" "$cfgtype" "$cfg" "$@" \ - 'disabled:bool:0' \ - 'key:string' \ - "crypt:or($crypt_methods)" \ - "mode:or($mode_profiles)" \ - 'mtu:uinteger' \ - 'sndwnd:uinteger' \ - 'rcvwnd:uinteger' \ - 'datashard:uinteger' \ - 'parityshard:uinteger' \ - 'dscp:uinteger' \ - 'nocomp:bool' \ - 'sockbuf:uinteger' \ - 'smuxver:uinteger' \ - 'smuxbuf:uinteger' \ - 'streambuf:uinteger' \ - 'keepalive:uinteger' \ - 'snmplog:string' \ - 'snmpperiod:uinteger' \ - 'quiet:bool' \ - 'gogc:uinteger' \ - 'syslog:bool:1' \ - 'user:string:nobody' -} - -validate_server_options() { - validate_common_options server "$@" \ - 'listen:port' \ - 'target:host' \ - 'target_port:port' \ - 'pprof:bool' -} - -validate_client_options() { - validate_common_options client "$@" \ - 'bind_address:ipaddr' \ - 'local_port:port' \ - 'server:host' \ - 'server_port:port' \ - 'conn:uinteger' \ - 'autoexpire:uinteger' \ - 'scavengettl:uinteger' -} - -validate_server_section() { - validate_server_options "$1" "$2" -} - -validate_client_section() { - validate_client_options "$1" "$2" -} diff --git a/luci-app-advanced b/luci-app-advanced deleted file mode 160000 index 28c52fca..00000000 --- a/luci-app-advanced +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 28c52fcad8ac5d2933218811582b58bb7c32314b diff --git a/luci-app-aliyundrive-fuse/Makefile b/luci-app-aliyundrive-fuse/Makefile deleted file mode 100644 index 24f74b3d..00000000 --- a/luci-app-aliyundrive-fuse/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-aliyundrive-fuse -PKG_VERSION:=0.1.6 -PKG_RELEASE:= -PKG_PO_VERSION:=$(PKG_VERSION)-$(PKG_RELEASE) - -PKG_LICENSE:=MIT -PKG_MAINTAINER:=messense - -LUCI_TITLE:=LuCI Support for aliyundrive-fuse -LUCI_PKGARCH:=all -LUCI_DEPENDS:=+aliyundrive-fuse +lua +libuci-lua - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-aliyundrive-fuse/luasrc/controller/aliyundrive-fuse.lua b/luci-app-aliyundrive-fuse/luasrc/controller/aliyundrive-fuse.lua deleted file mode 100644 index d3fd4187..00000000 --- a/luci-app-aliyundrive-fuse/luasrc/controller/aliyundrive-fuse.lua +++ /dev/null @@ -1,35 +0,0 @@ -module("luci.controller.aliyundrive-fuse", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/aliyundrive-fuse") then - return - end - entry({"admin", "services", "aliyundrive-fuse"}, alias("admin", "services", "aliyundrive-fuse", "client"),_("AliyunDrive FUSE"), 10).dependent = true -- 首页 - entry({"admin", "services", "aliyundrive-fuse", "client"}, cbi("aliyundrive-fuse/client"),_("Settings"), 10).leaf = true -- 客户端配置 - entry({"admin", "services", "aliyundrive-fuse", "log"}, form("aliyundrive-fuse/log"),_("Log"), 30).leaf = true -- 日志页面 - - entry({"admin", "services", "aliyundrive-fuse", "status"}, call("action_status")).leaf = true - entry({"admin", "services", "aliyundrive-fuse", "logtail"}, call("action_logtail")).leaf = true -end - -function action_status() - local e = {} - e.running = luci.sys.call("pidof aliyundrive-fuse >/dev/null") == 0 - e.application = luci.sys.exec("aliyundrive-fuse --version") - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function action_logtail() - local fs = require "nixio.fs" - local log_path = "/var/log/aliyundrive-fuse.log" - local e = {} - e.running = luci.sys.call("pidof aliyundrive-fuse >/dev/null") == 0 - if fs.access(log_path) then - e.log = luci.sys.exec("tail -n 100 %s | sed 's/\\x1b\\[[0-9;]*m//g'" % log_path) - else - e.log = "" - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/luci-app-aliyundrive-fuse/luasrc/model/cbi/aliyundrive-fuse/client.lua b/luci-app-aliyundrive-fuse/luasrc/model/cbi/aliyundrive-fuse/client.lua deleted file mode 100644 index ef3bfea4..00000000 --- a/luci-app-aliyundrive-fuse/luasrc/model/cbi/aliyundrive-fuse/client.lua +++ /dev/null @@ -1,32 +0,0 @@ -local uci = luci.model.uci.cursor() -local m, e - -m = Map("aliyundrive-fuse") -m.title = translate("AliyunDrive FUSE") -m.description = translate("Project GitHub URL") - -m:section(SimpleSection).template = "aliyundrive-fuse/aliyundrive-fuse_status" - -e = m:section(TypedSection, "default") -e.anonymous = true - -enable = e:option(Flag, "enable", translate("Enable")) -enable.rmempty = false - -refresh_token = e:option(Value, "refresh_token", translate("Refresh Token")) -refresh_token.description = translate("How to get refresh token") - -mount_point = e:option(Value, "mount_point", translate("Mount Point")) -mount_point.default = "/mnt/aliyundrive" - -read_buffer_size = e:option(Value, "read_buffer_size", translate("Read Buffer Size")) -read_buffer_size.default = "10485760" -read_buffer_size.datatype = "uinteger" - -domain_id = e:option(Value, "domain_id", translate("Domain ID")) -domain_id.description = translate("Input domain_id option will use Aliyun PDS instead of AliyunDrive") - -debug = e:option(Flag, "debug", translate("Debug Mode")) -debug.rmempty = false - -return m diff --git a/luci-app-aliyundrive-fuse/luasrc/model/cbi/aliyundrive-fuse/log.lua b/luci-app-aliyundrive-fuse/luasrc/model/cbi/aliyundrive-fuse/log.lua deleted file mode 100644 index 7a5acab6..00000000 --- a/luci-app-aliyundrive-fuse/luasrc/model/cbi/aliyundrive-fuse/log.lua +++ /dev/null @@ -1,9 +0,0 @@ -log = SimpleForm("logview") -log.submit = false -log.reset = false - -t = log:field(DummyValue, '', '') -t.rawhtml = true -t.template = 'aliyundrive-fuse/aliyundrive-fuse_log' - -return log diff --git a/luci-app-aliyundrive-fuse/luasrc/view/aliyundrive-fuse/aliyundrive-fuse_log.htm b/luci-app-aliyundrive-fuse/luasrc/view/aliyundrive-fuse/aliyundrive-fuse_log.htm deleted file mode 100644 index 04851ba1..00000000 --- a/luci-app-aliyundrive-fuse/luasrc/view/aliyundrive-fuse/aliyundrive-fuse_log.htm +++ /dev/null @@ -1,15 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/luci-app-aliyundrive-fuse/luasrc/view/aliyundrive-fuse/aliyundrive-fuse_status.htm b/luci-app-aliyundrive-fuse/luasrc/view/aliyundrive-fuse/aliyundrive-fuse_status.htm deleted file mode 100644 index 22f19d0e..00000000 --- a/luci-app-aliyundrive-fuse/luasrc/view/aliyundrive-fuse/aliyundrive-fuse_status.htm +++ /dev/null @@ -1,21 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
diff --git a/luci-app-aliyundrive-fuse/po/zh-cn/aliyundrive-fuse.po b/luci-app-aliyundrive-fuse/po/zh-cn/aliyundrive-fuse.po deleted file mode 100644 index 54938889..00000000 --- a/luci-app-aliyundrive-fuse/po/zh-cn/aliyundrive-fuse.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "AliyunDrive" -msgstr "阿里云盘" - -msgid "AliyunDrive FUSE" -msgstr "阿里云盘 FUSE" - -msgid "Enable" -msgstr "启用" - -msgid "Refresh Token" -msgstr "Refresh Token" - -msgid "Mount Point" -msgstr "挂载点" - -msgid "Read Buffer Size" -msgstr "下载缓冲大小(bytes)" - -msgid "Collecting data..." -msgstr "获取数据中..." - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "Settings" -msgstr "设置" - -msgid "Log" -msgstr "日志" - -msgid "Debug Mode" -msgstr "调试模式" - -msgid "Project GitHub URL" -msgstr "GitHub 项目地址" - -msgid "How to get refresh token" -msgstr "查看获取 refresh token 的方法" - -msgid "Domain ID" -msgstr "阿里云相册与云盘服务 domainId" - -msgid "Input domain_id option will use Aliyun PDS instead of AliyunDrive" -msgstr "填写此选项将使用阿里云相册与网盘服务而不是阿里云盘" diff --git a/luci-app-aliyundrive-fuse/root/etc/uci-defaults/luci-aliyundrive-fuse b/luci-app-aliyundrive-fuse/root/etc/uci-defaults/luci-aliyundrive-fuse deleted file mode 100755 index f368ea27..00000000 --- a/luci-app-aliyundrive-fuse/root/etc/uci-defaults/luci-aliyundrive-fuse +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@aliyundrive-fuse[-1] - add ucitrack aliyundrive-fuse - set ucitrack.@aliyundrive-fuse[-1].init=aliyundrive-fuse - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/luci-app-aliyundrive-webdav/Makefile b/luci-app-aliyundrive-webdav/Makefile deleted file mode 100644 index 72677beb..00000000 --- a/luci-app-aliyundrive-webdav/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-aliyundrive-webdav -PKG_PO_VERSION:=$(PKG_VERSION)-$(PKG_RELEASE) - -PKG_LICENSE:=MIT -PKG_MAINTAINER:=messense - -LUCI_TITLE:=LuCI Support for aliyundrive-webdav -LUCI_PKGARCH:=all -LUCI_DEPENDS:=+aliyundrive-webdav - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-aliyundrive-webdav/luasrc/controller/aliyundrive-webdav.lua b/luci-app-aliyundrive-webdav/luasrc/controller/aliyundrive-webdav.lua deleted file mode 100644 index 0426e384..00000000 --- a/luci-app-aliyundrive-webdav/luasrc/controller/aliyundrive-webdav.lua +++ /dev/null @@ -1,40 +0,0 @@ -module("luci.controller.aliyundrive-webdav", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/aliyundrive-webdav") then - return - end - - local page - page = entry({"admin", "services", "aliyundrive-webdav"}, alias("admin", "services", "aliyundrive-webdav", "client"), _("AliyunDrive WebDAV"), 10) -- 首页 - page.dependent = true - page.acl_depends = { "luci-app-aliyundrive-webdav" } - - entry({"admin", "services", "aliyundrive-webdav", "client"}, cbi("aliyundrive-webdav/client"), _("Settings"), 10).leaf = true -- 客户端配置 - entry({"admin", "services", "aliyundrive-webdav", "log"}, form("aliyundrive-webdav/log"), _("Log"), 30).leaf = true -- 日志页面 - - entry({"admin", "services", "aliyundrive-webdav", "status"}, call("action_status")).leaf = true -- 运行状态 - entry({"admin", "services", "aliyundrive-webdav", "logtail"}, call("action_logtail")).leaf = true -- 日志采集 -end - -function action_status() - local e = {} - e.running = luci.sys.call("pidof aliyundrive-webdav >/dev/null") == 0 - e.application = luci.sys.exec("aliyundrive-webdav --version") - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function action_logtail() - local fs = require "nixio.fs" - local log_path = "/var/log/aliyundrive-webdav.log" - local e = {} - e.running = luci.sys.call("pidof aliyundrive-webdav >/dev/null") == 0 - if fs.access(log_path) then - e.log = luci.sys.exec("tail -n 100 %s | sed 's/\\x1b\\[[0-9;]*m//g'" % log_path) - else - e.log = "" - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/luci-app-aliyundrive-webdav/luasrc/model/cbi/aliyundrive-webdav/client.lua b/luci-app-aliyundrive-webdav/luasrc/model/cbi/aliyundrive-webdav/client.lua deleted file mode 100644 index 3e72e2d5..00000000 --- a/luci-app-aliyundrive-webdav/luasrc/model/cbi/aliyundrive-webdav/client.lua +++ /dev/null @@ -1,60 +0,0 @@ -m = Map("aliyundrive-webdav") -m.title = translate("AliyunDrive WebDAV") -m.description = translate("Project GitHub URL") - -m:section(SimpleSection).template = "aliyundrive-webdav/aliyundrive-webdav_status" - -e = m:section(TypedSection, "server") -e.anonymous = true - -enable = e:option(Flag, "enable", translate("Enable")) -enable.rmempty = false - -refresh_token = e:option(Value, "refresh_token", translate("Refresh Token")) -refresh_token.description = translate("How to get refresh token") - -root = e:option(Value, "root", translate("Root Directory")) -root.description = translate("Restrict access to a folder of aliyundrive, defaults to / which means no restrictions") -root.default = "/" - -host = e:option(Value, "host", translate("Host")) -host.default = "0.0.0.0" -host.datatype = "ipaddr" - -port = e:option(Value, "port", translate("Port")) -port.default = "8080" -port.datatype = "port" - -tls_cert = e:option(Value, "tls_cert", translate("TLS certificate file path")) -tls_key = e:option(Value, "tls_key", translate("TLS private key file path")) - -auth_user = e:option(Value, "auth_user", translate("Username")) -auth_password = e:option(Value, "auth_password", translate("Password")) -auth_password.password = true - -read_buffer_size = e:option(Value, "read_buffer_size", translate("Read Buffer Size")) -read_buffer_size.default = "10485760" -read_buffer_size.datatype = "uinteger" - -cache_size = e:option(Value, "cache_size", translate("Cache Size")) -cache_size.default = "1000" -cache_size.datatype = "uinteger" - -cache_ttl = e:option(Value, "cache_ttl", translate("Cache Expiration Time (seconds)")) -cache_ttl.default = "600" -cache_ttl.datatype = "uinteger" - -no_trash = e:option(Flag, "no_trash", translate("Delete file permanently instead of trashing")) -no_trash.rmempty = false - -read_only = e:option(Flag, "read_only", translate("Enable read only mode")) -read_only.description = translate("Disallow upload, modify and delete file operations") -read_only.rmempty = false - -domain_id = e:option(Value, "domain_id", translate("Domain ID")) -domain_id.description = translate("Input domain_id option will use Aliyun PDS instead of AliyunDrive") - -debug = e:option(Flag, "debug", translate("Debug Mode")) -debug.rmempty = false - -return m diff --git a/luci-app-aliyundrive-webdav/luasrc/model/cbi/aliyundrive-webdav/log.lua b/luci-app-aliyundrive-webdav/luasrc/model/cbi/aliyundrive-webdav/log.lua deleted file mode 100644 index 200cb192..00000000 --- a/luci-app-aliyundrive-webdav/luasrc/model/cbi/aliyundrive-webdav/log.lua +++ /dev/null @@ -1,9 +0,0 @@ -log = SimpleForm("logview") -log.submit = false -log.reset = false - -t = log:field(DummyValue, '', '') -t.rawhtml = true -t.template = 'aliyundrive-webdav/aliyundrive-webdav_log' - -return log diff --git a/luci-app-aliyundrive-webdav/luasrc/view/aliyundrive-webdav/aliyundrive-webdav_log.htm b/luci-app-aliyundrive-webdav/luasrc/view/aliyundrive-webdav/aliyundrive-webdav_log.htm deleted file mode 100644 index fd125856..00000000 --- a/luci-app-aliyundrive-webdav/luasrc/view/aliyundrive-webdav/aliyundrive-webdav_log.htm +++ /dev/null @@ -1,15 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/luci-app-aliyundrive-webdav/luasrc/view/aliyundrive-webdav/aliyundrive-webdav_status.htm b/luci-app-aliyundrive-webdav/luasrc/view/aliyundrive-webdav/aliyundrive-webdav_status.htm deleted file mode 100644 index cd52d7ba..00000000 --- a/luci-app-aliyundrive-webdav/luasrc/view/aliyundrive-webdav/aliyundrive-webdav_status.htm +++ /dev/null @@ -1,21 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
diff --git a/luci-app-aliyundrive-webdav/po/zh-cn/aliyundrive-webdav.po b/luci-app-aliyundrive-webdav/po/zh-cn/aliyundrive-webdav.po deleted file mode 100644 index 8c93882a..00000000 --- a/luci-app-aliyundrive-webdav/po/zh-cn/aliyundrive-webdav.po +++ /dev/null @@ -1,86 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "AliyunDrive" -msgstr "阿里云盘" - -msgid "AliyunDrive WebDAV" -msgstr "阿里云盘 WebDAV" - -msgid "Enable" -msgstr "启用" - -msgid "Refresh Token" -msgstr "Refresh Token" - -msgid "Root Directory" -msgstr "云盘根目录" - -msgid "Host" -msgstr "监听主机" - -msgid "Port" -msgstr "监听端口" - -msgid "TLS certificate file path" -msgstr "TLS 证书文件路径" - -msgid "TLS private key file path" -msgstr "TLS 私钥文件路径" - -msgid "Username" -msgstr "用户名" - -msgid "Password" -msgstr "密码" - -msgid "Read Buffer Size" -msgstr "下载缓冲大小(bytes)" - -msgid "Cache Size" -msgstr "目录缓存大小" - -msgid "Cache Expiration Time (seconds)" -msgstr "目录缓存过期时间(单位为秒)" - -msgid "Collecting data..." -msgstr "获取数据中..." - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "Settings" -msgstr "设置" - -msgid "Log" -msgstr "日志" - -msgid "Debug Mode" -msgstr "调试模式" - -msgid "Project GitHub URL" -msgstr "GitHub 项目地址" - -msgid "How to get refresh token" -msgstr "查看获取 refresh token 的方法" - -msgid "Restrict access to a folder of aliyundrive, defaults to / which means no restrictions" -msgstr "限制只能访问该云盘目录,默认为 / 表示不限制,注意这个参数不是本地磁盘路径" - -msgid "Delete file permanently instead of trashing" -msgstr "删除文件不放入回收站" - -msgid "Enable read only mode" -msgstr "启用只读模式" - -msgid "Disallow upload, modify and delete file operations" -msgstr "禁止上传、修改和删除文件操作" - -msgid "Domain ID" -msgstr "阿里云相册与云盘服务 domainId" - -msgid "Input domain_id option will use Aliyun PDS instead of AliyunDrive" -msgstr "填写此选项将使用阿里云相册与网盘服务而不是阿里云盘" diff --git a/luci-app-aliyundrive-webdav/po/zh_Hans b/luci-app-aliyundrive-webdav/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-aliyundrive-webdav/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-aliyundrive-webdav/root/etc/uci-defaults/luci-aliyundrive-webdav b/luci-app-aliyundrive-webdav/root/etc/uci-defaults/luci-aliyundrive-webdav deleted file mode 100755 index 69c5433c..00000000 --- a/luci-app-aliyundrive-webdav/root/etc/uci-defaults/luci-aliyundrive-webdav +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@aliyundrive-webdav[-1] - add ucitrack aliyundrive-webdav - set ucitrack.@aliyundrive-webdav[-1].init=aliyundrive-webdav - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/luci-app-aliyundrive-webdav/root/usr/share/rpcd/acl.d/luci-app-aliyundrive-webdav.json b/luci-app-aliyundrive-webdav/root/usr/share/rpcd/acl.d/luci-app-aliyundrive-webdav.json deleted file mode 100644 index 31dec7f6..00000000 --- a/luci-app-aliyundrive-webdav/root/usr/share/rpcd/acl.d/luci-app-aliyundrive-webdav.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-aliyundrive-webdav": { - "description": "Grant UCI access for luci-app-aliyundrive-webdav", - "read": { - "uci": [ "aliyundrive-webdav" ] - }, - "write": { - "uci": [ "aliyundrive-webdav" ] - } - } -} diff --git a/luci-app-argon-config b/luci-app-argon-config deleted file mode 160000 index c5c28baf..00000000 --- a/luci-app-argon-config +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c5c28baf5f67786fe5e89642ae49c94f5498744c diff --git a/luci-app-autotimeset b/luci-app-autotimeset deleted file mode 160000 index f5d1c710..00000000 --- a/luci-app-autotimeset +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f5d1c710a45640bdd40e67cfd9c44bf80006045c diff --git a/luci-app-autoupdate b/luci-app-autoupdate deleted file mode 160000 index c56bbd5c..00000000 --- a/luci-app-autoupdate +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c56bbd5ca43a17302e675b61841a6dc6811229b0 diff --git a/luci-app-beardropper b/luci-app-beardropper deleted file mode 160000 index e0280b19..00000000 --- a/luci-app-beardropper +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e0280b19010f2ac8ec616b5cde429825d1466872 diff --git a/luci-app-dockerman/Makefile b/luci-app-dockerman/Makefile deleted file mode 100644 index 51dfa5c0..00000000 --- a/luci-app-dockerman/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for docker -LUCI_DEPENDS:=@(aarch64||arm||x86_64) \ - +luci-compat \ - +luci-lib-docker \ - +luci-lib-ip \ - +docker \ - +dockerd \ - +ttyd -LUCI_PKGARCH:=all - -PKG_LICENSE:=AGPL-3.0 -PKG_MAINTAINER:=lisaac \ - Florian Eckert - -PKG_VERSION:=v0.5.25 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-dockerman/depends.lst b/luci-app-dockerman/depends.lst deleted file mode 100644 index 8a62f6a7..00000000 --- a/luci-app-dockerman/depends.lst +++ /dev/null @@ -1 +0,0 @@ -ttyd docker-cli \ No newline at end of file diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg deleted file mode 100644 index 4165f90b..00000000 --- a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Docker icon - - diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png deleted file mode 100644 index f156dc1c..00000000 Binary files a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png and /dev/null differ diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css deleted file mode 100644 index 911693b6..00000000 --- a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css +++ /dev/null @@ -1,91 +0,0 @@ -.fb-container { - margin-top: 1rem; -} -.fb-container .cbi-button { - height: 1.8rem; -} -.fb-container .cbi-input-text { - margin-bottom: 1rem; - width: 100%; -} -.fb-container .panel-title { - padding-bottom: 0; - width: 50%; - border-bottom: none; -} -.fb-container .panel-container { - display: flex; - align-items: center; - justify-content: space-between; - padding-bottom: 1rem; - border-bottom: 1px solid #eee; -} -.fb-container .upload-container { - display: none; - margin: 1rem 0; -} -.fb-container .upload-file { - margin-right: 2rem; -} -.fb-container .cbi-value-field { - text-align: left; -} -.fb-container .parent-icon strong { - margin-left: 1rem; -} -.fb-container td[class$="-icon"] { - cursor: pointer; -} -.fb-container .file-icon, .fb-container .folder-icon, .fb-container .link-icon { - position: relative; -} -.fb-container .file-icon:before, .fb-container .folder-icon:before, .fb-container .link-icon:before { - display: inline-block; - width: 1.5rem; - height: 1.5rem; - content: ''; - background-size: contain; - margin: 0 0.5rem 0 1rem; - vertical-align: middle; -} -.fb-container .file-icon:before { - background-image: url(file-icon.png); -} -.fb-container .folder-icon:before { - background-image: url(folder-icon.png); -} -.fb-container .link-icon:before { - background-image: url(link-icon.png); -} -@media screen and (max-width: 480px) { - .fb-container .upload-file { - width: 14.6rem; - } - .fb-container .cbi-value-owner, - .fb-container .cbi-value-perm { - display: none; - } -} - -.cbi-section-table { - width: 100%; -} - -.cbi-section-table-cell { - text-align: right; -} - -.cbi-button-install { -border-color: #c44; - color: #c44; - margin-left: 3px; -} - -.cbi-value-field { - padding: 10px 0; -} - -.parent-icon { - height: 1.8rem; - padding: 10px 0; -} \ No newline at end of file diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png deleted file mode 100644 index 1370df3a..00000000 Binary files a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png and /dev/null differ diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg deleted file mode 100644 index 90ca5a1c..00000000 --- a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png deleted file mode 100644 index 03cc82cd..00000000 Binary files a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png and /dev/null differ diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg deleted file mode 100644 index 3eb12a39..00000000 --- a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js b/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js deleted file mode 100644 index d9c06667..00000000 --- a/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js +++ /dev/null @@ -1,185 +0,0 @@ -// https://github.com/thiscouldbebetter/TarFileExplorer -class TarFileTypeFlag -{constructor(value,name) -{this.value=value;this.id="_"+this.value;this.name=name;} -static _instances;static Instances() -{if(TarFileTypeFlag._instances==null) -{TarFileTypeFlag._instances=new TarFileTypeFlag_Instances();} -return TarFileTypeFlag._instances;}} -class TarFileTypeFlag_Instances -{constructor() -{this.Normal=new TarFileTypeFlag("0","Normal");this.HardLink=new TarFileTypeFlag("1","Hard Link");this.SymbolicLink=new TarFileTypeFlag("2","Symbolic Link");this.CharacterSpecial=new TarFileTypeFlag("3","Character Special");this.BlockSpecial=new TarFileTypeFlag("4","Block Special");this.Directory=new TarFileTypeFlag("5","Directory");this.FIFO=new TarFileTypeFlag("6","FIFO");this.ContiguousFile=new TarFileTypeFlag("7","Contiguous File");this.LongFilePath=new TarFileTypeFlag("L","././@LongLink");this._All=[this.Normal,this.HardLink,this.SymbolicLink,this.CharacterSpecial,this.BlockSpecial,this.Directory,this.FIFO,this.ContiguousFile,this.LongFilePath,];for(var i=0;ia+=String.fromCharCode(b),"");entryNext.header.fileName=entryNext.header.fileName.replace(/\0/g,"");entries.splice(i,1);i--;}}} -downloadAs(fileNameToSaveAs) -{return FileHelper.saveBytesAsFile -(this.toBytes(),fileNameToSaveAs)} -entriesForDirectories() -{return this.entries.filter(x=>x.header.typeFlag.name==TarFileTypeFlag.Instances().Directory);} -toBytes() -{this.toBytes_PrependLongPathEntriesAsNeeded();var fileAsBytes=[];var entriesAsByteArrays=this.entries.map(x=>x.toBytes());this.consolidateLongPathEntries();for(var i=0;imaxLength) -{var entryFileNameAsBytes=entryFileName.split("").map(x=>x.charCodeAt(0));var entryContainingLongPathToPrepend=TarFileEntry.fileNew -(typeFlagLongPath.name,entryFileNameAsBytes);entryContainingLongPathToPrepend.header.typeFlag=typeFlagLongPath;entryContainingLongPathToPrepend.header.timeModifiedInUnixFormat=entryHeader.timeModifiedInUnixFormat;entryContainingLongPathToPrepend.header.checksumCalculate();entryHeader.fileName=entryFileName.substr(0,maxLength)+String.fromCharCode(0);entries.splice(i,0,entryContainingLongPathToPrepend);i++;}}} -toString() -{var newline="\n";var returnValue="[TarFile]"+newline;for(var i=0;i{var fileLoadedAsBinaryString=fileLoadedEvent.target.result;var fileLoadedAsBytes=ByteHelper.stringUTF8ToBytes(fileLoadedAsBinaryString);callback(fileToLoad.name,fileLoadedAsBytes);} -fileReader.readAsBinaryString(fileToLoad);} -static loadFileAsText(fileToLoad,callback) -{var fileReader=new FileReader();fileReader.onload=(fileLoadedEvent)=>{var textFromFileLoaded=fileLoadedEvent.target.result;callback(fileToLoad.name,textFromFileLoaded);};fileReader.readAsText(fileToLoad);} -static saveBytesAsFile(bytesToWrite,fileNameToSaveAs) -{var bytesToWriteAsArrayBuffer=new ArrayBuffer(bytesToWrite.length);var bytesToWriteAsUIntArray=new Uint8Array(bytesToWriteAsArrayBuffer);for(var i=0;i - - - - - diff --git a/luci-app-dockerman/luasrc/controller/dockerman.lua b/luci-app-dockerman/luasrc/controller/dockerman.lua deleted file mode 100644 index 7aeed56e..00000000 --- a/luci-app-dockerman/luasrc/controller/dockerman.lua +++ /dev/null @@ -1,614 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local docker = require "luci.model.docker" --- local uci = (require "luci.model.uci").cursor() - -module("luci.controller.dockerman",package.seeall) - -function index() - entry({"admin", "docker"}, - alias("admin", "docker", "config"), - _("Docker"), - 40).acl_depends = { "luci-app-dockerman" } - - entry({"admin", "docker", "config"},cbi("dockerman/configuration"),_("Configuration"), 8).leaf=true - - -- local uci = (require "luci.model.uci").cursor() - -- if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then - -- local host = uci:get("dockerd", "dockerman", "remote_host") - -- local port = uci:get("dockerd", "dockerman", "remote_port") - -- if not host or not port then - -- return - -- end - -- else - -- local socket = uci:get("dockerd", "dockerman", "socket_path") or "/var/run/docker.sock" - -- if socket and not nixio.fs.access(socket) then - -- return - -- end - -- end - - -- if (require "luci.model.docker").new():_ping().code ~= 200 then - -- return - -- end - - entry({"admin", "docker", "overview"}, form("dockerman/overview"),_("Overview"), 2).leaf=true - entry({"admin", "docker", "containers"}, form("dockerman/containers"), _("Containers"), 3).leaf=true - entry({"admin", "docker", "images"}, form("dockerman/images"), _("Images"), 4).leaf=true - entry({"admin", "docker", "networks"}, form("dockerman/networks"), _("Networks"), 5).leaf=true - entry({"admin", "docker", "volumes"}, form("dockerman/volumes"), _("Volumes"), 6).leaf=true - entry({"admin", "docker", "events"}, call("action_events"), _("Events"), 7) - - entry({"admin", "docker", "newcontainer"}, form("dockerman/newcontainer")).leaf=true - entry({"admin", "docker", "newnetwork"}, form("dockerman/newnetwork")).leaf=true - entry({"admin", "docker", "container"}, form("dockerman/container")).leaf=true - - entry({"admin", "docker", "container_stats"}, call("action_get_container_stats")).leaf=true - entry({"admin", "docker", "containers_stats"}, call("action_get_containers_stats")).leaf=true - entry({"admin", "docker", "get_system_df"}, call("action_get_system_df")).leaf=true - entry({"admin", "docker", "container_get_archive"}, call("download_archive")).leaf=true - entry({"admin", "docker", "container_put_archive"}, call("upload_archive")).leaf=true - entry({"admin", "docker", "container_list_file"}, call("list_file")).leaf=true - entry({"admin", "docker", "container_remove_file"}, call("remove_file")).leaf=true - entry({"admin", "docker", "container_rename_file"}, call("rename_file")).leaf=true - entry({"admin", "docker", "container_export"}, call("export_container")).leaf=true - entry({"admin", "docker", "images_save"}, call("save_images")).leaf=true - entry({"admin", "docker", "images_load"}, call("load_images")).leaf=true - entry({"admin", "docker", "images_import"}, call("import_images")).leaf=true - entry({"admin", "docker", "images_get_tags"}, call("get_image_tags")).leaf=true - entry({"admin", "docker", "images_tag"}, call("tag_image")).leaf=true - entry({"admin", "docker", "images_untag"}, call("untag_image")).leaf=true - entry({"admin", "docker", "confirm"}, call("action_confirm")).leaf=true -end - -function action_get_system_df() - local res = docker.new():df() - luci.http.status(res.code, res.message) - luci.http.prepare_content("application/json") - luci.http.write_json(res.body) -end - -function scandir(id, directory) - local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil - if not cmd_docker or cmd_docker:match("^%s+$") then - return - end - local i, t, popen = 0, {}, io.popen - local uci = (require "luci.model.uci").cursor() - local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") - local socket_path = not remote and uci:get("dockerd", "dockerman", "socket_path") or nil - local host = remote and uci:get("dockerd", "dockerman", "remote_host") or nil - local port = remote and uci:get("dockerd", "dockerman", "remote_port") or nil - if remote and host and port then - hosts = "tcp://" .. host .. ':'.. port - elseif socket_path then - hosts = "unix://" .. socket_path - else - return - end - local pfile = popen(cmd_docker .. ' -H "'.. hosts ..'" exec ' ..id .." ls -lh \""..directory.."\" | egrep -v '^total'") - for fileinfo in pfile:lines() do - i = i + 1 - t[i] = fileinfo - end - pfile:close() - return t -end - -function list_response(id, path, success) - luci.http.prepare_content("application/json") - local result - if success then - local rv = scandir(id, path) - result = { - ec = 0, - data = rv - } - else - result = { - ec = 1 - } - end - luci.http.write_json(result) -end - -function list_file(id) - local path = luci.http.formvalue("path") - list_response(id, path, true) -end - -function rename_file(id) - local filepath = luci.http.formvalue("filepath") - local newpath = luci.http.formvalue("newpath") - local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil - if not cmd_docker or cmd_docker:match("^%s+$") then - return - end - local uci = (require "luci.model.uci").cursor() - local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") - local socket_path = not remote and uci:get("dockerd", "dockerman", "socket_path") or nil - local host = remote and uci:get("dockerd", "dockerman", "remote_host") or nil - local port = remote and uci:get("dockerd", "dockerman", "remote_port") or nil - if remote and host and port then - hosts = "tcp://" .. host .. ':'.. port - elseif socket_path then - hosts = "unix://" .. socket_path - else - return - end - local success = os.execute(cmd_docker .. ' -H "'.. hosts ..'" exec '.. id ..' mv "'..filepath..'" "'..newpath..'"') - list_response(nixio.fs.dirname(filepath), success) -end - -function remove_file(id) - local path = luci.http.formvalue("path") - local isdir = luci.http.formvalue("isdir") - local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil - if not cmd_docker or cmd_docker:match("^%s+$") then - return - end - local uci = (require "luci.model.uci").cursor() - local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") - local socket_path = not remote and uci:get("dockerd", "dockerman", "socket_path") or nil - local host = remote and uci:get("dockerd", "dockerman", "remote_host") or nil - local port = remote and uci:get("dockerd", "dockerman", "remote_port") or nil - if remote and host and port then - hosts = "tcp://" .. host .. ':'.. port - elseif socket_path then - hosts = "unix://" .. socket_path - else - return - end - path = path:gsub("<>", "/") - path = path:gsub(" ", "\ ") - local success - if isdir then - success = os.execute(cmd_docker .. ' -H "'.. hosts ..'" exec '.. id ..' rm -r "'..path..'"') - else - success = os.remove(path) - end - list_response(nixio.fs.dirname(path), success) -end - -function action_events() - local logs = "" - local query ={} - - local dk = docker.new() - query["until"] = os.time() - local events = dk:events({query = query}) - - if events.code == 200 then - for _, v in ipairs(events.body) do - local date = "unknown" - if v and v.time then - date = os.date("%Y-%m-%d %H:%M:%S", v.time) - end - - local name = v.Actor.Attributes.name or "unknown" - local action = v.Action or "unknown" - - if v and v.Type == "container" then - local id = v.Actor.ID or "unknown" - logs = logs .. string.format("[%s] %s %s Container ID: %s Container Name: %s\n", date, v.Type, action, id, name) - elseif v.Type == "network" then - local container = v.Actor.Attributes.container or "unknown" - local network = v.Actor.Attributes.type or "unknown" - logs = logs .. string.format("[%s] %s %s Container ID: %s Network Name: %s Network type: %s\n", date, v.Type, action, container, name, network) - elseif v.Type == "image" then - local id = v.Actor.ID or "unknown" - logs = logs .. string.format("[%s] %s %s Image: %s Image name: %s\n", date, v.Type, action, id, name) - end - end - end - - luci.template.render("dockerman/logs", {self={syslog = logs, title="Events"}}) -end - -local calculate_cpu_percent = function(d) - if type(d) ~= "table" then - return - end - - local cpu_count = tonumber(d["cpu_stats"]["online_cpus"]) - local cpu_percent = 0.0 - local cpu_delta = tonumber(d["cpu_stats"]["cpu_usage"]["total_usage"]) - tonumber(d["precpu_stats"]["cpu_usage"]["total_usage"]) - local system_delta = tonumber(d["cpu_stats"]["system_cpu_usage"]) -- tonumber(d["precpu_stats"]["system_cpu_usage"]) - if system_delta > 0.0 then - cpu_percent = string.format("%.2f", cpu_delta / system_delta * 100.0 * cpu_count) - end - - return cpu_percent -end - -local get_memory = function(d) - if type(d) ~= "table" then - return - end - - -- local limit = string.format("%.2f", tonumber(d["memory_stats"]["limit"]) / 1024 / 1024) - -- local usage = string.format("%.2f", (tonumber(d["memory_stats"]["usage"]) - tonumber(d["memory_stats"]["stats"]["total_cache"])) / 1024 / 1024) - -- return usage .. "MB / " .. limit.. "MB" - - local limit =tonumber(d["memory_stats"]["limit"]) - local usage = tonumber(d["memory_stats"]["usage"]) - -- - tonumber(d["memory_stats"]["stats"]["total_cache"]) - - return usage, limit -end - -local get_rx_tx = function(d) - if type(d) ~="table" then - return - end - - local data = {} - if type(d["networks"]) == "table" then - for e, v in pairs(d["networks"]) do - data[e] = { - bw_tx = tonumber(v.tx_bytes), - bw_rx = tonumber(v.rx_bytes) - } - end - end - - return data -end - -local function get_stat(container_id) - if container_id then - local dk = docker.new() - local response = dk.containers:inspect({id = container_id}) - if response.code == 200 and response.body.State.Running then - response = dk.containers:stats({id = container_id, query = {stream = false, ["one-shot"] = true}}) - if response.code == 200 then - local container_stats = response.body - local cpu_percent = calculate_cpu_percent(container_stats) - local mem_useage, mem_limit = get_memory(container_stats) - local bw_rxtx = get_rx_tx(container_stats) - return response.code, response.body.message, { - cpu_percent = cpu_percent, - memory = { - mem_useage = mem_useage, - mem_limit = mem_limit - }, - bw_rxtx = bw_rxtx - } - else - return response.code, response.body.message - end - else - if response.code == 200 then - return 500, "container "..container_id.." not running" - else - return response.code, response.body.message - end - end - else - return 404, "No container name or id" - end -end -function action_get_container_stats(container_id) - local code, msg, res = get_stat(container_id) - luci.http.status(code, msg) - luci.http.prepare_content("application/json") - luci.http.write_json(res) -end - -function action_get_containers_stats() - local res = luci.http.formvalue(containers) or "" - local stats = {} - res = luci.jsonc.parse(res.containers) - if res and type(res) == "table" then - for i, v in ipairs(res) do - _,_,stats[v] = get_stat(v) - end - end - luci.http.status(200, "OK") - luci.http.prepare_content("application/json") - luci.http.write_json(stats) -end - -function action_confirm() - local data = docker:read_status() - if data then - data = data:gsub("\n","
"):gsub(" "," ") - code = 202 - msg = data - else - code = 200 - msg = "finish" - data = "finish" - end - - luci.http.status(code, msg) - luci.http.prepare_content("application/json") - luci.http.write_json({info = data}) -end - -function export_container(id) - local dk = docker.new() - local first - - local cb = function(res, chunk) - if res.code == 200 then - if not first then - first = true - luci.http.header('Content-Disposition', 'inline; filename="'.. id ..'.tar"') - luci.http.header('Content-Type', 'application\/x-tar') - end - luci.ltn12.pump.all(chunk, luci.http.write) - else - if not first then - first = true - luci.http.prepare_content("text/plain") - end - luci.ltn12.pump.all(chunk, luci.http.write) - end - end - - local res = dk.containers:export({id = id}, cb) -end - -function download_archive() - local id = luci.http.formvalue("id") - local path = luci.http.formvalue("path") - local filename = luci.http.formvalue("filename") or "archive" - local dk = docker.new() - local first - - local cb = function(res, chunk) - if res and res.code and res.code == 200 then - if not first then - first = true - luci.http.header('Content-Disposition', 'inline; filename="'.. filename .. '.tar"') - luci.http.header('Content-Type', 'application\/x-tar') - end - luci.ltn12.pump.all(chunk, luci.http.write) - else - if not first then - first = true - luci.http.status(res and res.code or 500, msg or "unknow") - luci.http.prepare_content("text/plain") - end - luci.ltn12.pump.all(chunk, luci.http.write) - end - end - - local res = dk.containers:get_archive({ - id = id, - query = { - path = luci.http.urlencode(path) - } - }, cb) -end - -function upload_archive(container_id) - local path = luci.http.formvalue("upload-path") - local dk = docker.new() - local ltn12 = require "luci.ltn12" - - local rec_send = function(sinkout) - luci.http.setfilehandler(function (meta, chunk, eof) - if chunk then - ltn12.pump.step(ltn12.source.string(chunk), sinkout) - end - end) - end - - local res = dk.containers:put_archive({ - id = container_id, - query = { - path = luci.http.urlencode(path) - }, - body = rec_send - }) - - local msg = res and res.message or res.body and res.body.message or nil - luci.http.status(res and res.code or 500, msg or "unknow") - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg or "unknow"}) -end - --- function save_images() --- local names = luci.http.formvalue("names") --- local dk = docker.new() --- local first - --- local cb = function(res, chunk) --- if res.code == 200 then --- if not first then --- first = true --- luci.http.status(res.code, res.message) --- luci.http.header('Content-Disposition', 'inline; filename="'.. "images" ..'.tar"') --- luci.http.header('Content-Type', 'application\/x-tar') --- end --- luci.ltn12.pump.all(chunk, luci.http.write) --- else --- if not first then --- first = true --- luci.http.prepare_content("text/plain") --- end --- luci.ltn12.pump.all(chunk, luci.http.write) --- end --- end - --- docker:write_status("Images: saving" .. " " .. names .. "...") --- local res = dk.images:get({ --- query = { --- names = luci.http.urlencode(names) --- } --- }, cb) --- docker:clear_status() - --- local msg = res and res.body and res.body.message or nil --- luci.http.status(res.code, msg) --- luci.http.prepare_content("application/json") --- luci.http.write_json({message = msg}) --- end - -function load_images() - local archive = luci.http.formvalue("upload-archive") - local dk = docker.new() - local ltn12 = require "luci.ltn12" - - local rec_send = function(sinkout) - luci.http.setfilehandler(function (meta, chunk, eof) - if chunk then - ltn12.pump.step(ltn12.source.string(chunk), sinkout) - end - end) - end - - docker:write_status("Images: loading...") - local res = dk.images:load({body = rec_send}) - local msg = res and res.body and ( res.body.message or res.body.stream or res.body.error ) or nil - if res and res.code == 200 and msg and msg:match("Loaded image ID") then - docker:clear_status() - else - docker:append_status("code:" .. (res and res.code or "500") .." ".. (msg or "unknow")) - end - - luci.http.status(res and res.code or 500, msg or "unknow") - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg or "unknow"}) -end - -function import_images() - local src = luci.http.formvalue("src") - local itag = luci.http.formvalue("tag") - local dk = docker.new() - local ltn12 = require "luci.ltn12" - - local rec_send = function(sinkout) - luci.http.setfilehandler(function (meta, chunk, eof) - if chunk then - ltn12.pump.step(ltn12.source.string(chunk), sinkout) - end - end) - end - - docker:write_status("Images: importing".. " ".. itag .."...\n") - local repo = itag and itag:match("^([^:]+)") - local tag = itag and itag:match("^[^:]-:([^:]+)") - local res = dk.images:create({ - query = { - fromSrc = luci.http.urlencode(src or "-"), - repo = repo or nil, - tag = tag or nil - }, - body = not src and rec_send or nil - }, docker.import_image_show_status_cb) - - local msg = res and res.body and ( res.body.message )or nil - if not msg and #res.body == 0 then - msg = res.body.status or res.body.error - elseif not msg and #res.body >= 1 then - msg = res.body[#res.body].status or res.body[#res.body].error - end - - if res.code == 200 and msg and msg:match("sha256:") then - docker:clear_status() - else - docker:append_status("code:" .. (res and res.code or "500") .." ".. (msg or "unknow")) - end - - luci.http.status(res and res.code or 500, msg or "unknow") - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg or "unknow"}) -end - -function get_image_tags(image_id) - if not image_id then - luci.http.status(400, "no image id") - luci.http.prepare_content("application/json") - luci.http.write_json({message = "no image id"}) - return - end - - local dk = docker.new() - local res = dk.images:inspect({ - id = image_id - }) - local msg = res and res.body and res.body.message or nil - luci.http.status(res and res.code or 500, msg or "unknow") - luci.http.prepare_content("application/json") - - if res.code == 200 then - local tags = res.body.RepoTags - luci.http.write_json({tags = tags}) - else - local msg = res and res.body and res.body.message or nil - luci.http.write_json({message = msg or "unknow"}) - end -end - -function tag_image(image_id) - local src = luci.http.formvalue("tag") - local image_id = image_id or luci.http.formvalue("id") - - if type(src) ~= "string" or not image_id then - luci.http.status(400, "no image id or tag") - luci.http.prepare_content("application/json") - luci.http.write_json({message = "no image id or tag"}) - return - end - - local repo = src:match("^([^:]+)") - local tag = src:match("^[^:]-:([^:]+)") - local dk = docker.new() - local res = dk.images:tag({ - id = image_id, - query={ - repo=repo, - tag=tag - } - }) - local msg = res and res.body and res.body.message or nil - luci.http.status(res and res.code or 500, msg or "unknow") - luci.http.prepare_content("application/json") - - if res.code == 201 then - local tags = res.body.RepoTags - luci.http.write_json({tags = tags}) - else - local msg = res and res.body and res.body.message or nil - luci.http.write_json({message = msg or "unknow"}) - end -end - -function untag_image(tag) - local tag = tag or luci.http.formvalue("tag") - - if not tag then - luci.http.status(400, "no tag name") - luci.http.prepare_content("application/json") - luci.http.write_json({message = "no tag name"}) - return - end - - local dk = docker.new() - local res = dk.images:inspect({name = tag}) - - if res.code == 200 then - local tags = res.body.RepoTags - if #tags > 1 then - local r = dk.images:remove({name = tag}) - local msg = r and r.body and r.body.message or nil - luci.http.status(r.code, msg) - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg}) - else - luci.http.status(500, "Cannot remove the last tag") - luci.http.prepare_content("application/json") - luci.http.write_json({message = "Cannot remove the last tag"}) - end - else - local msg = res and res.body and res.body.message or nil - luci.http.status(res and res.code or 500, msg or "unknow") - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg or "unknow"}) - end -end diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua deleted file mode 100644 index f62650fe..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua +++ /dev/null @@ -1,152 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2021 Florian Eckert -Copyright 2021 lisaac -]]-- - -local uci = (require "luci.model.uci").cursor() - -local m, s, o - -m = Map("dockerd", - translate("Docker - Configuration"), - translate("DockerMan is a simple docker manager client for LuCI")) - -if nixio.fs.access("/usr/bin/dockerd") and not m.uci:get_bool("dockerd", "dockerman", "remote_endpoint") then - s = m:section(NamedSection, "globals", "section", translate("Docker Daemon settings")) - - o = s:option(Flag, "auto_start", translate("Auto start")) - o.rmempty = false - o.write = function(self, section, value) - if value == "1" then - luci.util.exec("/etc/init.d/dockerd enable") - else - luci.util.exec("/etc/init.d/dockerd disable") - end - m.uci:set("dockerd", "globals", "auto_start", value) - end - - o = s:option(Value, "data_root", - translate("Docker Root Dir")) - o.placeholder = "/opt/docker/" - o:depends("remote_endpoint", 0) - - o = s:option(Value, "bip", - translate("Default bridge"), - translate("Configure the default bridge network")) - o.placeholder = "172.17.0.1/16" - o.datatype = "ipaddr" - o:depends("remote_endpoint", 0) - - o = s:option(DynamicList, "registry_mirrors", - translate("Registry Mirrors"), - translate("It replaces the daemon registry mirrors with a new set of registry mirrors")) - o:value("https://hub-mirror.c.163.com", "https://hub-mirror.c.163.com") - o:depends("remote_endpoint", 0) - o.forcewrite = true - - o = s:option(ListValue, "log_level", - translate("Log Level"), - translate('Set the logging level')) - o:value("debug", translate("Debug")) - o:value("", translate("Info")) -- This is the default debug level from the deamon is optin is not set - o:value("warn", translate("Warning")) - o:value("error", translate("Error")) - o:value("fatal", translate("Fatal")) - o.rmempty = true - o:depends("remote_endpoint", 0) - - o = s:option(DynamicList, "hosts", - translate("Client connection"), - translate('Specifies where the Docker daemon will listen for client connections (default: unix:///var/run/docker.sock)')) - o:value("unix:///var/run/docker.sock", "unix:///var/run/docker.sock") - o:value("tcp://0.0.0.0:2375", "tcp://0.0.0.0:2375") - o.rmempty = true - o:depends("remote_endpoint", 0) -end - -s = m:section(NamedSection, "dockerman", "section", translate("DockerMan settings")) -s:tab("ac", translate("Access Control")) -s:tab("dockerman", translate("DockerMan")) - -o = s:taboption("dockerman", Flag, "remote_endpoint", - translate("Remote Endpoint"), - translate("Connect to remote docker endpoint")) -o.rmempty = false -o.validate = function(self, value, sid) - local res = luci.http.formvaluetable("cbid.dockerd") - if res["dockerman.remote_endpoint"] == "1" then - if res["dockerman.remote_port"] and res["dockerman.remote_port"] ~= "" and res["dockerman.remote_host"] and res["dockerman.remote_host"] ~= "" then - return 1 - else - return nil, translate("Please input the PORT or HOST IP of remote docker instance!") - end - else - if not res["dockerman.socket_path"] then - return nil, translate("Please input the SOCKET PATH of docker daemon!") - end - end - return 0 -end - -o = s:taboption("dockerman", Value, "socket_path", - translate("Docker Socket Path")) -o.default = "/var/run/docker.sock" -o.placeholder = "/var/run/docker.sock" -o:depends("remote_endpoint", 0) - -o = s:taboption("dockerman", Value, "remote_host", - translate("Remote Host"), - translate("Host or IP Address for the connection to a remote docker instance")) -o.datatype = "host" -o.placeholder = "10.1.1.2" -o:depends("remote_endpoint", 1) - -o = s:taboption("dockerman", Value, "remote_port", - translate("Remote Port")) -o.placeholder = "2375" -o.datatype = "port" -o:depends("remote_endpoint", 1) - --- o = s:taboption("dockerman", Value, "status_path", translate("Action Status Tempfile Path"), translate("Where you want to save the docker status file")) --- o = s:taboption("dockerman", Flag, "debug", translate("Enable Debug"), translate("For debug, It shows all docker API actions of luci-app-dockerman in Debug Tempfile Path")) --- o.enabled="true" --- o.disabled="false" --- o = s:taboption("dockerman", Value, "debug_path", translate("Debug Tempfile Path"), translate("Where you want to save the debug tempfile")) - -if nixio.fs.access("/usr/bin/dockerd") and not m.uci:get_bool("dockerd", "dockerman", "remote_endpoint") then - o = s:taboption("ac", DynamicList, "ac_allowed_interface", translate("Allowed access interfaces"), translate("Which interface(s) can access containers under the bridge network, fill-in Interface Name")) - local interfaces = luci.sys and luci.sys.net and luci.sys.net.devices() or {} - for i, v in ipairs(interfaces) do - o:value(v, v) - end - o = s:taboption("ac", DynamicList, "ac_allowed_ports", translate("Ports allowed to be accessed"), translate("Which Port(s) can be accessed, it's not restricted by the Allowed Access interfaces configuration. Use this configuration with caution!")) - o.placeholder = "8080/tcp" - local docker = require "luci.model.docker" - local containers, res, lost_state - local dk = docker.new() - if dk:_ping().code ~= 200 then - lost_state = true - else - lost_state = false - res = dk.containers:list() - if res and res.code and res.code < 300 then - containers = res.body - end - end - - -- allowed_container.placeholder = "container name_or_id" - if containers then - for i, v in ipairs(containers) do - if v.State == "running" and v.Ports then - for _, port in ipairs(v.Ports) do - if port.PublicPort and port.IP and not string.find(port.IP,":") then - o:value(port.PublicPort.."/"..port.Type, v.Names[1]:sub(2) .. " | " .. port.PublicPort .. " | " .. port.Type) - end - end - end - end - end -end - -return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua deleted file mode 100644 index 12df9e92..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua +++ /dev/null @@ -1,810 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" - -local docker = require "luci.model.docker" -local dk = docker.new() - -container_id = arg[1] -local action = arg[2] or "info" - -local m, s, o -local images, networks, container_info, res - -if not container_id then - return -end - -res = dk.containers:inspect({id = container_id}) -if res.code < 300 then - container_info = res.body -else - return -end - -local get_ports = function(d) - local data - - if d.HostConfig and d.HostConfig.PortBindings then - for inter, out in pairs(d.HostConfig.PortBindings) do - data = (data and (data .. "
") or "") .. out[1]["HostPort"] .. ":" .. inter - end - end - - return data -end - -local get_env = function(d) - local data - - if d.Config and d.Config.Env then - for _,v in ipairs(d.Config.Env) do - data = (data and (data .. "
") or "") .. v - end - end - - return data -end - -local get_command = function(d) - local data - - if d.Config and d.Config.Cmd then - for _,v in ipairs(d.Config.Cmd) do - data = (data and (data .. " ") or "") .. v - end - end - - return data -end - -local get_mounts = function(d) - local data - - if d.Mounts then - for _,v in ipairs(d.Mounts) do - local v_sorce_d, v_dest_d - local v_sorce = "" - local v_dest = "" - for v_sorce_d in v["Source"]:gmatch('[^/]+') do - if v_sorce_d and #v_sorce_d > 12 then - v_sorce = v_sorce .. "/" .. v_sorce_d:sub(1,12) .. "..." - else - v_sorce = v_sorce .."/".. v_sorce_d - end - end - for v_dest_d in v["Destination"]:gmatch('[^/]+') do - if v_dest_d and #v_dest_d > 12 then - v_dest = v_dest .. "/" .. v_dest_d:sub(1,12) .. "..." - else - v_dest = v_dest .."/".. v_dest_d - end - end - data = (data and (data .. "
") or "") .. v_sorce .. ":" .. v["Destination"] .. (v["Mode"] ~= "" and (":" .. v["Mode"]) or "") - end - end - - return data -end - -local get_device = function(d) - local data - - if d.HostConfig and d.HostConfig.Devices then - for _,v in ipairs(d.HostConfig.Devices) do - data = (data and (data .. "
") or "") .. v["PathOnHost"] .. ":" .. v["PathInContainer"] .. (v["CgroupPermissions"] ~= "" and (":" .. v["CgroupPermissions"]) or "") - end - end - - return data -end - -local get_links = function(d) - local data - - if d.HostConfig and d.HostConfig.Links then - for _,v in ipairs(d.HostConfig.Links) do - data = (data and (data .. "
") or "") .. v - end - end - - return data -end - -local get_tmpfs = function(d) - local data - - if d.HostConfig and d.HostConfig.Tmpfs then - for k, v in pairs(d.HostConfig.Tmpfs) do - data = (data and (data .. "
") or "") .. k .. (v~="" and ":" or "")..v - end - end - - return data -end - -local get_dns = function(d) - local data - - if d.HostConfig and d.HostConfig.Dns then - for _, v in ipairs(d.HostConfig.Dns) do - data = (data and (data .. "
") or "") .. v - end - end - - return data -end - -local get_sysctl = function(d) - local data - - if d.HostConfig and d.HostConfig.Sysctls then - for k, v in pairs(d.HostConfig.Sysctls) do - data = (data and (data .. "
") or "") .. k..":"..v - end - end - - return data -end - -local get_networks = function(d) - local data={} - - if d.NetworkSettings and d.NetworkSettings.Networks and type(d.NetworkSettings.Networks) == "table" then - for k,v in pairs(d.NetworkSettings.Networks) do - data[k] = v.IPAddress or "" - end - end - - return data -end - - -local start_stop_remove = function(m, cmd) - local res - - docker:clear_status() - docker:append_status("Containers: " .. cmd .. " " .. container_id .. "...") - - if cmd ~= "upgrade" then - res = dk.containers[cmd](dk, {id = container_id}) - else - res = dk.containers_upgrade(dk, {id = container_id}) - end - - if res and res.code >= 300 then - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) - luci.http.redirect(luci.dispatcher.build_url("admin/docker/container/"..container_id)) - else - docker:clear_status() - if cmd ~= "remove" and cmd ~= "upgrade" then - luci.http.redirect(luci.dispatcher.build_url("admin/docker/container/"..container_id)) - else - luci.http.redirect(luci.dispatcher.build_url("admin/docker/containers")) - end - end -end - -m=SimpleForm("docker", - translatef("Docker - Container (%s)", container_info.Name:sub(2)), - translate("On this page, the selected container can be managed.")) -m.redirect = luci.dispatcher.build_url("admin/docker/containers") - -s = m:section(SimpleSection) -s.template = "dockerman/apply_widget" -s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") -if s.err then - docker:clear_status() -end - -s = m:section(Table,{{}}) -s.notitle=true -s.rowcolors=false -s.template = "cbi/nullsection" - -o = s:option(Button, "_start") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle=translate("Start") -o.inputstyle = "apply" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"start") -end - -o = s:option(Button, "_restart") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle=translate("Restart") -o.inputstyle = "reload" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"restart") -end - -o = s:option(Button, "_stop") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle=translate("Stop") -o.inputstyle = "reset" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"stop") -end - -o = s:option(Button, "_kill") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle=translate("Kill") -o.inputstyle = "reset" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"kill") -end - -o = s:option(Button, "_export") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle=translate("Export") -o.inputstyle = "apply" -o.forcewrite = true -o.write = function(self, section) - luci.http.redirect(luci.dispatcher.build_url("admin/docker/container_export/"..container_id)) -end - -o = s:option(Button, "_upgrade") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle=translate("Upgrade") -o.inputstyle = "reload" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"upgrade") -end - -o = s:option(Button, "_duplicate") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle=translate("Duplicate/Edit") -o.inputstyle = "add" -o.forcewrite = true -o.write = function(self, section) - luci.http.redirect(luci.dispatcher.build_url("admin/docker/newcontainer/duplicate/"..container_id)) -end - -o = s:option(Button, "_remove") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle=translate("Remove") -o.inputstyle = "remove" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"remove") -end - -s = m:section(SimpleSection) -s.template = "dockerman/container" - -if action == "info" then - res = dk.networks:list() - if res.code < 300 then - networks = res.body - else - return - end - m.submit = false - m.reset = false - table_info = { - ["01name"] = { - _key = translate("Name"), - _value = container_info.Name:sub(2) or "-", - _button=translate("Update") - }, - ["02id"] = { - _key = translate("ID"), - _value = container_info.Id or "-" - }, - ["03image"] = { - _key = translate("Image"), - _value = container_info.Config.Image .. "
" .. container_info.Image - }, - ["04status"] = { - _key = translate("Status"), - _value = container_info.State and container_info.State.Status or "-" - }, - ["05created"] = { - _key = translate("Created"), - _value = container_info.Created or "-" - }, - } - - if container_info.State.Status == "running" then - table_info["06start"] = { - _key = translate("Start Time"), - _value = container_info.State and container_info.State.StartedAt or "-" - } - else - table_info["06start"] = { - _key = translate("Finish Time"), - _value = container_info.State and container_info.State.FinishedAt or "-" - } - end - - table_info["07healthy"] = { - _key = translate("Healthy"), - _value = container_info.State and container_info.State.Health and container_info.State.Health.Status or "-" - } - table_info["08restart"] = { - _key = translate("Restart Policy"), - _value = container_info.HostConfig and container_info.HostConfig.RestartPolicy and container_info.HostConfig.RestartPolicy.Name or "-", - _button=translate("Update") - } - table_info["081user"] = { - _key = translate("User"), - _value = container_info.Config and (container_info.Config.User ~="" and container_info.Config.User or "-") or "-" - } - table_info["09mount"] = { - _key = translate("Mount/Volume"), - _value = get_mounts(container_info) or "-" - } - table_info["10cmd"] = { - _key = translate("Command"), - _value = get_command(container_info) or "-" - } - table_info["11env"] = { - _key = translate("Env"), - _value = get_env(container_info) or "-" - } - table_info["12ports"] = { - _key = translate("Ports"), - _value = get_ports(container_info) or "-" - } - table_info["13links"] = { - _key = translate("Links"), - _value = get_links(container_info) or "-" - } - table_info["14device"] = { - _key = translate("Device"), - _value = get_device(container_info) or "-" - } - table_info["15tmpfs"] = { - _key = translate("Tmpfs"), - _value = get_tmpfs(container_info) or "-" - } - table_info["16dns"] = { - _key = translate("DNS"), - _value = get_dns(container_info) or "-" - } - table_info["17sysctl"] = { - _key = translate("Sysctl"), - _value = get_sysctl(container_info) or "-" - } - - info_networks = get_networks(container_info) - list_networks = {} - for _, v in ipairs (networks) do - if v and v.Name then - local parent = v.Options and v.Options.parent or nil - local ip = v.IPAM and v.IPAM.Config and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil - ipv6 = v.IPAM and v.IPAM.Config and v.IPAM.Config[2] and v.IPAM.Config[2].Subnet or nil - local network_name = v.Name .. " | " .. v.Driver .. (parent and (" | " .. parent) or "") .. (ip and (" | " .. ip) or "").. (ipv6 and (" | " .. ipv6) or "") - list_networks[v.Name] = network_name - end - end - - if type(info_networks)== "table" then - for k,v in pairs(info_networks) do - table_info["14network"..k] = { - _key = translate("Network"), - _value = k.. (v~="" and (" | ".. v) or ""), - _button=translate("Disconnect") - } - list_networks[k]=nil - end - end - - table_info["15connect"] = { - _key = translate("Connect Network"), - _value = list_networks ,_opts = "", - _button=translate("Connect") - } - - s = m:section(Table,table_info) - s.nodescr=true - s.formvalue=function(self, section) - return table_info - end - - o = s:option(DummyValue, "_key", translate("Info")) - o.width = "20%" - - o = s:option(ListValue, "_value") - o.render = function(self, section, scope) - if table_info[section]._key == translate("Name") then - self:reset_values() - self.template = "cbi/value" - self.size = 30 - self.keylist = {} - self.vallist = {} - self.default=table_info[section]._value - Value.render(self, section, scope) - elseif table_info[section]._key == translate("Restart Policy") then - self.template = "cbi/lvalue" - self:reset_values() - self.size = nil - self:value("no", "No") - self:value("unless-stopped", "Unless stopped") - self:value("always", "Always") - self:value("on-failure", "On failure") - self.default=table_info[section]._value - ListValue.render(self, section, scope) - elseif table_info[section]._key == translate("Connect Network") then - self.template = "cbi/lvalue" - self:reset_values() - self.size = nil - for k,v in pairs(list_networks) do - if k ~= "host" then - self:value(k,v) - end - end - self.default=table_info[section]._value - ListValue.render(self, section, scope) - else - self:reset_values() - self.rawhtml=true - self.template = "cbi/dvalue" - self.default=table_info[section]._value - DummyValue.render(self, section, scope) - end - end - o.forcewrite = true - o.write = function(self, section, value) - table_info[section]._value=value - end - o.validate = function(self, value) - return value - end - - o = s:option(Value, "_opts") - o.forcewrite = true - o.write = function(self, section, value) - table_info[section]._opts=value - end - o.validate = function(self, value) - return value - end - o.render = function(self, section, scope) - if table_info[section]._key==translate("Connect Network") then - self.template = "cbi/value" - self.keylist = {} - self.vallist = {} - self.placeholder = "10.1.1.254" - self.datatype = "ip4addr" - self.default=table_info[section]._opts - Value.render(self, section, scope) - else - self.rawhtml=true - self.template = "cbi/dvalue" - self.default=table_info[section]._opts - DummyValue.render(self, section, scope) - end - end - - o = s:option(Button, "_button") - o.forcewrite = true - o.render = function(self, section, scope) - if table_info[section]._button and table_info[section]._value ~= nil then - self.inputtitle=table_info[section]._button - self.template = "cbi/button" - self.inputstyle = "edit" - Button.render(self, section, scope) - else - self.template = "cbi/dvalue" - self.default="" - DummyValue.render(self, section, scope) - end - end - o.write = function(self, section, value) - local res - - docker:clear_status() - - if section == "01name" then - docker:append_status("Containers: rename " .. container_id .. "...") - local new_name = table_info[section]._value - res = dk.containers:rename({ - id = container_id, - query = { - name=new_name - } - }) - elseif section == "08restart" then - docker:append_status("Containers: update " .. container_id .. "...") - local new_restart = table_info[section]._value - res = dk.containers:update({ - id = container_id, - body = { - RestartPolicy = { - Name = new_restart - } - } - }) - elseif table_info[section]._key == translate("Network") then - local _,_,leave_network - - _, _, leave_network = table_info[section]._value:find("(.-) | .+") - leave_network = leave_network or table_info[section]._value - docker:append_status("Network: disconnect " .. leave_network .. container_id .. "...") - res = dk.networks:disconnect({ - name = leave_network, - body = { - Container = container_id - } - }) - elseif section == "15connect" then - local connect_network = table_info[section]._value - local network_opiton - if connect_network ~= "none" - and connect_network ~= "bridge" - and connect_network ~= "host" then - - network_opiton = table_info[section]._opts ~= "" and { - IPAMConfig={ - IPv4Address=table_info[section]._opts - } - } or nil - end - docker:append_status("Network: connect " .. connect_network .. container_id .. "...") - res = dk.networks:connect({ - name = connect_network, - body = { - Container = container_id, - EndpointConfig= network_opiton - } - }) - end - - if res and res.code > 300 then - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) - else - docker:clear_status() - end - luci.http.redirect(luci.dispatcher.build_url("admin/docker/container/"..container_id.."/info")) - end -elseif action == "resources" then - s = m:section(SimpleSection) - o = s:option( Value, "cpus", - translate("CPUs"), - translate("Number of CPUs. Number is a fractional number. 0.000 means no limit.")) - o.placeholder = "1.5" - o.rmempty = true - o.datatype="ufloat" - o.default = container_info.HostConfig.NanoCpus / (10^9) - - o = s:option(Value, "cpushares", - translate("CPU Shares Weight"), - translate("CPU shares relative weight, if 0 is set, the system will ignore the value and use the default of 1024.")) - o.placeholder = "1024" - o.rmempty = true - o.datatype="uinteger" - o.default = container_info.HostConfig.CpuShares - - o = s:option(Value, "memory", - translate("Memory"), - translate("Memory limit (format: []). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.")) - o.placeholder = "128m" - o.rmempty = true - o.default = container_info.HostConfig.Memory ~=0 and ((container_info.HostConfig.Memory / 1024 /1024) .. "M") or 0 - - o = s:option(Value, "blkioweight", - translate("Block IO Weight"), - translate("Block IO weight (relative weight) accepts a weight value between 10 and 1000.")) - o.placeholder = "500" - o.rmempty = true - o.datatype="uinteger" - o.default = container_info.HostConfig.BlkioWeight - - m.handle = function(self, state, data) - if state == FORM_VALID then - local memory = data.memory - if memory and memory ~= 0 then - _,_,n,unit = memory:find("([%d%.]+)([%l%u]+)") - if n then - unit = unit and unit:sub(1,1):upper() or "B" - if unit == "M" then - memory = tonumber(n) * 1024 * 1024 - elseif unit == "G" then - memory = tonumber(n) * 1024 * 1024 * 1024 - elseif unit == "K" then - memory = tonumber(n) * 1024 - else - memory = tonumber(n) - end - end - end - - request_body = { - BlkioWeight = tonumber(data.blkioweight), - NanoCPUs = tonumber(data.cpus)*10^9, - Memory = tonumber(memory), - CpuShares = tonumber(data.cpushares) - } - - docker:write_status("Containers: update " .. container_id .. "...") - local res = dk.containers:update({id = container_id, body = request_body}) - if res and res.code >= 300 then - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) - else - docker:clear_status() - end - luci.http.redirect(luci.dispatcher.build_url("admin/docker/container/"..container_id.."/resources")) - end - end - -elseif action == "file" then - m.submit = false - m.reset = false - s= m:section(SimpleSection) - s.template = "dockerman/container_file_manager" - s.container = container_id - m.redirect = nil -elseif action == "inspect" then - s = m:section(SimpleSection) - s.syslog = luci.jsonc.stringify(container_info, true) - s.title = translate("Container Inspect") - s.template = "dockerman/logs" - m.submit = false - m.reset = false -elseif action == "logs" then - local logs = "" - local query ={ - stdout = 1, - stderr = 1, - tail = 1000 - } - - s = m:section(SimpleSection) - - logs = dk.containers:logs({id = container_id, query = query}) - if logs.code == 200 then - s.syslog=logs.body - else - s.syslog="Get Logs ERROR\n"..logs.code..": "..logs.body - end - - s.title=translate("Container Logs") - s.template = "dockerman/logs" - m.submit = false - m.reset = false -elseif action == "console" then - m.submit = false - m.reset = false - local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil - local cmd_ttyd = luci.util.exec("command -v ttyd"):match("^.+ttyd") or nil - - if cmd_docker and cmd_ttyd and container_info.State.Status == "running" then - local cmd = "/bin/sh" - local uid - - s = m:section(SimpleSection) - - o = s:option(Value, "command", translate("Command")) - o:value("/bin/sh", "/bin/sh") - o:value("/bin/ash", "/bin/ash") - o:value("/bin/bash", "/bin/bash") - o.default = "/bin/sh" - o.forcewrite = true - o.write = function(self, section, value) - cmd = value - end - - o = s:option(Value, "uid", translate("UID")) - o.forcewrite = true - o.write = function(self, section, value) - uid = value - end - - o = s:option(Button, "connect") - o.render = function(self, section, scope) - self.inputstyle = "add" - self.title = " " - self.inputtitle = translate("Connect") - Button.render(self, section, scope) - end - o.write = function(self, section) - local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil - local cmd_ttyd = luci.util.exec("command -v ttyd"):match("^.+ttyd") or nil - - if not cmd_docker or not cmd_ttyd or cmd_docker:match("^%s+$") or cmd_ttyd:match("^%s+$") then - return - end - - local ttyd_ssl = uci.get("ttyd", "@ttyd[0]", "ssl") - local ttyd_ssl_key = uci.get("ttyd", "@ttyd[0]", "ssl_key") - local ttyd_ssl_cert = uci.get("ttyd", "@ttyd[0]", "ssl_cert") - - if ttyd_ssl=="1" and ttyd_ssl_cert and ttyd_ssl_key then - cmd_ttyd=string.format('%s -S -C %s -K %s',cmd_ttyd,ttyd_ssl_cert,ttyd_ssl_key) - end - - local pid = luci.util.trim(luci.util.exec("netstat -lnpt | grep :7682 | grep ttyd | tr -s ' ' | cut -d ' ' -f7 | cut -d'/' -f1")) - if pid and pid ~= "" then - luci.util.exec("kill -9 " .. pid) - end - - local hosts - local uci = (require "luci.model.uci").cursor() - local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") or false - local host = nil - local port = nil - local socket = nil - - if remote then - host = uci:get("dockerd", "dockerman", "remote_host") or nil - port = uci:get("dockerd", "dockerman", "remote_port") or nil - else - socket = uci:get("dockerd", "dockerman", "socket_path") or "/var/run/docker.sock" - end - - if remote and host and port then - hosts = "tcp://" .. host .. ':'.. port - elseif socket then - hosts = "unix://" .. socket - else - return - end - - if uid and uid ~= "" then - uid = "-u " .. uid - else - uid = "" - end - - local start_cmd = string.format('%s -d 2 --once -p 7682 %s -H "%s" exec -it %s %s %s&', cmd_ttyd, cmd_docker, hosts, uid, container_id, cmd) - - os.execute(start_cmd) - - o = s:option(DummyValue, "console") - o.container_id = container_id - o.template = "dockerman/container_console" - end - end -elseif action == "stats" then - local response = dk.containers:top({id = container_id, query = {ps_args="-aux"}}) - local container_top - - if response.code == 200 then - container_top=response.body - else - response = dk.containers:top({id = container_id}) - if response.code == 200 then - container_top=response.body - end - end - - if type(container_top) == "table" then - s = m:section(SimpleSection) - s.container_id = container_id - s.template = "dockerman/container_stats" - table_stats = { - cpu={ - key=translate("CPU Useage"), - value='-' - }, - memory={ - key=translate("Memory Useage"), - value='-' - } - } - - container_top = response.body - s = m:section(Table, table_stats, translate("Stats")) - s:option(DummyValue, "key", translate("Stats")).width="33%" - s:option(DummyValue, "value") - top_section = m:section(Table, container_top.Processes, translate("TOP")) - for i, v in ipairs(container_top.Titles) do - top_section:option(DummyValue, i, translate(v)) - end - end - - m.submit = false - m.reset = false -end - -return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua deleted file mode 100644 index 47f634f8..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua +++ /dev/null @@ -1,284 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local http = require "luci.http" -local docker = require "luci.model.docker" - -local m, s, o -local images, networks, containers, res, lost_state -local urlencode = luci.http.protocol and luci.http.protocol.urlencode or luci.util.urlencode -local dk = docker.new() - -if dk:_ping().code ~= 200 then - lost_state = true -else - res = dk.images:list() - if res and res.code and res.code < 300 then - images = res.body - end - - res = dk.networks:list() - if res and res.code and res.code < 300 then - networks = res.body - end - - res = dk.containers:list({ - query = { - all = true - } - }) - if res and res.code and res.code < 300 then - containers = res.body - end -end - -function get_containers() - local data = {} - if type(containers) ~= "table" then - return nil - end - - for i, v in ipairs(containers) do - local index = (10^12 - v.Created) .. "_id_" .. v.Id - - data[index]={} - data[index]["_selected"] = 0 - data[index]["_id"] = v.Id:sub(1,12) - -- data[index]["name"] = v.Names[1]:sub(2) - data[index]["_status"] = v.Status - - if v.Status:find("^Up") then - data[index]["_name"] = ""..v.Names[1]:sub(2).."" - data[index]["_status"] = "".. data[index]["_status"] .. "" .. "


" - else - data[index]["_name"] = ""..v.Names[1]:sub(2).."" - data[index]["_status"] = ''.. data[index]["_status"] .. "" - end - - if (type(v.NetworkSettings) == "table" and type(v.NetworkSettings.Networks) == "table") then - for networkname, netconfig in pairs(v.NetworkSettings.Networks) do - data[index]["_network"] = (data[index]["_network"] ~= nil and (data[index]["_network"] .." | ") or "").. networkname .. (netconfig.IPAddress ~= "" and (": " .. netconfig.IPAddress) or "") - end - end - - -- networkmode = v.HostConfig.NetworkMode ~= "default" and v.HostConfig.NetworkMode or "bridge" - -- data[index]["_network"] = v.NetworkSettings.Networks[networkmode].IPAddress or nil - -- local _, _, image = v.Image:find("^sha256:(.+)") - -- if image ~= nil then - -- image=image:sub(1,12) - -- end - - if v.Ports and next(v.Ports) ~= nil then - data[index]["_ports"] = nil - local ip = require "luci.ip" - for _,v2 in ipairs(v.Ports) do - -- display ipv4 only - if ip.new(v2.IP or "0.0.0.0"):is4() then - data[index]["_ports"] = (data[index]["_ports"] and (data[index]["_ports"] .. ", ") or "") - .. ((v2.PublicPort and v2.Type and v2.Type == "tcp") and ('') or "") - .. (v2.PublicPort and (v2.PublicPort .. ":") or "") .. (v2.PrivatePort and (v2.PrivatePort .."/") or "") .. (v2.Type and v2.Type or "") - .. ((v2.PublicPort and v2.Type and v2.Type == "tcp")and "" or "") - end - end - end - - for ii,iv in ipairs(images) do - if iv.Id == v.ImageID then - data[index]["_image"] = iv.RepoTags and iv.RepoTags[1] or (iv.RepoDigests[1]:gsub("(.-)@.+", "%1") .. ":<none>") - end - end - data[index]["_id_name"] = ''.. data[index]["_name"] .. "
ID: " .. data[index]["_id"] - .. "

Image: " .. (data[index]["_image"] or "<none>") - .. "
" - - if type(v.Mounts) == "table" and next(v.Mounts) then - for _, v2 in pairs(v.Mounts) do - if v2.Type ~= "volume" then - local v_sorce_d, v_dest_d - local v_sorce = "" - local v_dest = "" - for v_sorce_d in v2["Source"]:gmatch('[^/]+') do - if v_sorce_d and #v_sorce_d > 12 then - v_sorce = v_sorce .. "/" .. v_sorce_d:sub(1,8) .. ".." - else - v_sorce = v_sorce .."/".. v_sorce_d - end - end - for v_dest_d in v2["Destination"]:gmatch('[^/]+') do - if v_dest_d and #v_dest_d > 12 then - v_dest = v_dest .. "/" .. v_dest_d:sub(1,8) .. ".." - else - v_dest = v_dest .."/".. v_dest_d - end - end - data[index]["_mounts"] = (data[index]["_mounts"] and (data[index]["_mounts"] .. "
") or "") .. '' .. v_sorce .. "→" .. v_dest..'' - end - end - end - - data[index]["_image_id"] = v.ImageID:sub(8,20) - data[index]["_command"] = v.Command - end - return data -end - -local container_list = not lost_state and get_containers() or {} - -m = SimpleForm("docker", - translate("Docker - Containers"), - translate("This page displays all containers that have been created on the connected docker host.")) -m.submit=false -m.reset=false -m:append(Template("dockerman/containers_running_stats")) - -s = m:section(SimpleSection) -s.template = "dockerman/apply_widget" -s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") -if s.err then - docker:clear_status() -end - -s = m:section(Table, container_list, translate("Containers")) -s.nodescr=true -s.config="containers" - -o = s:option(Flag, "_selected","") -o.disabled = 0 -o.enabled = 1 -o.default = 0 -o.width = "1%" -o.write=function(self, section, value) - container_list[section]._selected = value -end - --- o = s:option(DummyValue, "_id", translate("ID")) --- o.width="10%" - --- o = s:option(DummyValue, "_name", translate("Container Name")) --- o.rawhtml = true - -o = s:option(DummyValue, "_id_name", translate("Container Info")) -o.rawhtml = true -o.width="15%" - -o = s:option(DummyValue, "_status", translate("Status")) -o.width="15%" -o.rawhtml=true - -o = s:option(DummyValue, "_network", translate("Network")) -o.width="10%" - -o = s:option(DummyValue, "_ports", translate("Ports")) -o.width="5%" -o.rawhtml = true -o = s:option(DummyValue, "_mounts", translate("Mounts")) -o.width="25%" -o.rawhtml = true - --- o = s:option(DummyValue, "_image", translate("Image")) --- o.width="8%" - -o = s:option(DummyValue, "_command", translate("Command")) -o.width="15%" - -local start_stop_remove = function(m, cmd) - local container_selected = {} - -- 遍历table中sectionid - for k in pairs(container_list) do - -- 得到选中项的名字 - if container_list[k]._selected == 1 then - container_selected[#container_selected + 1] = container_list[k]["_id"] - end - end - if #container_selected > 0 then - local success = true - - docker:clear_status() - for _, cont in ipairs(container_selected) do - docker:append_status("Containers: " .. cmd .. " " .. cont .. "...") - local res = dk.containers[cmd](dk, {id = cont}) - if res and res.code and res.code >= 300 then - success = false - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") - else - docker:append_status("done\n") - end - end - - if success then - docker:clear_status() - end - - luci.http.redirect(luci.dispatcher.build_url("admin/docker/containers")) - end -end - -s = m:section(Table,{{}}) -s.notitle=true -s.rowcolors=false -s.template="cbi/nullsection" - -o = s:option(Button, "_new") -o.inputtitle = translate("Add") -o.template = "dockerman/cbi/inlinebutton" -o.inputstyle = "add" -o.forcewrite = true -o.write = function(self, section) - luci.http.redirect(luci.dispatcher.build_url("admin/docker/newcontainer")) -end -o.disable = lost_state - -o = s:option(Button, "_start") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle = translate("Start") -o.inputstyle = "apply" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"start") -end -o.disable = lost_state - -o = s:option(Button, "_restart") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle = translate("Restart") -o.inputstyle = "reload" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"restart") -end -o.disable = lost_state - -o = s:option(Button, "_stop") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle = translate("Stop") -o.inputstyle = "reset" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"stop") -end -o.disable = lost_state - -o = s:option(Button, "_kill") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle = translate("Kill") -o.inputstyle = "reset" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m,"kill") -end -o.disable = lost_state - -o = s:option(Button, "_remove") -o.template = "dockerman/cbi/inlinebutton" -o.inputtitle = translate("Remove") -o.inputstyle = "remove" -o.forcewrite = true -o.write = function(self, section) - start_stop_remove(m, "remove") -end -o.disable = lost_state - -return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua deleted file mode 100644 index c3d3eab0..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua +++ /dev/null @@ -1,284 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local docker = require "luci.model.docker" -local dk = docker.new() - -local containers, images, res, lost_state -local m, s, o - -if dk:_ping().code ~= 200 then - lost_state = true -else - res = dk.images:list() - if res and res.code and res.code < 300 then - images = res.body - end - - res = dk.containers:list({ query = { all = true } }) - if res and res.code and res.code < 300 then - containers = res.body - end -end - -function get_images() - local data = {} - - for i, v in ipairs(images) do - local index = v.Created .. v.Id - - data[index]={} - data[index]["_selected"] = 0 - data[index]["id"] = v.Id:sub(8) - data[index]["_id"] = '' .. v.Id:sub(8,20) .. '' - - if v.RepoTags and next(v.RepoTags)~=nil then - for i, v1 in ipairs(v.RepoTags) do - data[index]["_tags"] =(data[index]["_tags"] and ( data[index]["_tags"] .. "
" )or "") .. ((v1:match("") or (#v.RepoTags == 1)) and v1 or ('' .. v1 .. '')) - - if not data[index]["tag"] then - data[index]["tag"] = v1 - end - end - else - data[index]["_tags"] = v.RepoDigests[1] and v.RepoDigests[1]:match("^(.-)@.+") - data[index]["_tags"] = (data[index]["_tags"] and data[index]["_tags"] or "" ).. ":" - end - - data[index]["_tags"] = data[index]["_tags"]:gsub("","<none>") - for ci,cv in ipairs(containers) do - if v.Id == cv.ImageID then - data[index]["_containers"] = (data[index]["_containers"] and (data[index]["_containers"] .. " | ") or "").. - ''.. cv.Names[1]:sub(2).."" - end - end - - data[index]["_size"] = string.format("%.2f", tostring(v.Size/1024/1024)).."MB" - data[index]["_created"] = os.date("%Y/%m/%d %H:%M:%S",v.Created) - end - - return data -end - -local image_list = not lost_state and get_images() or {} - -m = SimpleForm("docker", - translate("Docker - Images"), - translate("On this page all images are displayed that are available on the system and with which a container can be created.")) -m.submit=false -m.reset=false - -local pull_value={ - _image_tag_name="", - _registry="index.docker.io" -} - -s = m:section(SimpleSection, - translate("Pull Image"), - translate("By entering a valid image name with the corresponding version, the docker image can be downloaded from the configured registry.")) -s.template="cbi/nullsection" - -o = s:option(Value, "_image_tag_name") -o.template = "dockerman/cbi/inlinevalue" -o.placeholder="lisaac/luci:latest" -o.write = function(self, section, value) - local hastag = value:find(":") - - if not hastag then - value = value .. ":latest" - end - pull_value["_image_tag_name"] = value -end - -o = s:option(Button, "_pull") -o.inputtitle= translate("Pull") -o.template = "dockerman/cbi/inlinebutton" -o.inputstyle = "add" -o.disable = lost_state -o.write = function(self, section) - local tag = pull_value["_image_tag_name"] - local json_stringify = luci.jsonc and luci.jsonc.stringify - - if tag and tag ~= "" then - docker:write_status("Images: " .. "pulling" .. " " .. tag .. "...\n") - local res = dk.images:create({query = {fromImage=tag}}, docker.pull_image_show_status_cb) - - if res and res.code and res.code == 200 and (res.body[#res.body] and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. tag)) then - docker:clear_status() - else - docker:append_status("code:" .. res.code.." ".. (res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message)).. "\n") - end - else - docker:append_status("code: 400 please input the name of image name!") - end - - luci.http.redirect(luci.dispatcher.build_url("admin/docker/images")) -end - -s = m:section(SimpleSection, - translate("Import Image"), - translate("When pressing the Import button, both a local image can be loaded onto the system and a valid image tar can be downloaded from remote.")) - -o = s:option(DummyValue, "_image_import") -o.template = "dockerman/images_import" -o.disable = lost_state - -s = m:section(Table, image_list, translate("Images overview")) - -o = s:option(Flag, "_selected","") -o.disabled = 0 -o.enabled = 1 -o.default = 0 -o.write = function(self, section, value) - image_list[section]._selected = value -end - -o = s:option(DummyValue, "_id", translate("ID")) -o.rawhtml = true - -o = s:option(DummyValue, "_tags", translate("RepoTags")) -o.rawhtml = true - -o = s:option(DummyValue, "_containers", translate("Containers")) -o.rawhtml = true - -o = s:option(DummyValue, "_size", translate("Size")) - -o = s:option(DummyValue, "_created", translate("Created")) - -local remove_action = function(force) - local image_selected = {} - - for k in pairs(image_list) do - if image_list[k]._selected == 1 then - image_selected[#image_selected+1] = (image_list[k]["_tags"]:match("
") or image_list[k]["_tags"]:match("<none>")) and image_list[k].id or image_list[k].tag - end - end - - if next(image_selected) ~= nil then - local success = true - - docker:clear_status() - for _, img in ipairs(image_selected) do - local query - docker:append_status("Images: " .. "remove" .. " " .. img .. "...") - - if force then - query = {force = true} - end - - local msg = dk.images:remove({ - id = img, - query = query - }) - if msg and msg.code ~= 200 then - docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") - success = false - else - docker:append_status("done\n") - end - end - - if success then - docker:clear_status() - end - - luci.http.redirect(luci.dispatcher.build_url("admin/docker/images")) - end -end - -s = m:section(SimpleSection) -s.template = "dockerman/apply_widget" -s.err = docker:read_status() -s.err = s.err and s.err:gsub("\n","
"):gsub(" "," ") -if s.err then - docker:clear_status() -end - -s = m:section(Table,{{}}) -s.notitle=true -s.rowcolors=false -s.template="cbi/nullsection" - -o = s:option(Button, "remove") -o.inputtitle= translate("Remove") -o.template = "dockerman/cbi/inlinebutton" -o.inputstyle = "remove" -o.forcewrite = true -o.write = function(self, section) - remove_action() -end -o.disable = lost_state - -o = s:option(Button, "forceremove") -o.inputtitle= translate("Force Remove") -o.template = "dockerman/cbi/inlinebutton" -o.inputstyle = "remove" -o.forcewrite = true -o.write = function(self, section) - remove_action(true) -end -o.disable = lost_state - -o = s:option(Button, "save") -o.inputtitle= translate("Save") -o.template = "dockerman/cbi/inlinebutton" -o.inputstyle = "edit" -o.disable = lost_state -o.forcewrite = true -o.write = function (self, section) - local image_selected = {} - - for k in pairs(image_list) do - if image_list[k]._selected == 1 then - image_selected[#image_selected + 1] = image_list[k].id - end - end - - if next(image_selected) ~= nil then - local names, first, show_name - - for _, img in ipairs(image_selected) do - names = names and (names .. "&names=".. img) or img - end - if #image_selected > 1 then - show_name = "images" - else - show_name = image_selected[1] - end - local cb = function(res, chunk) - if res and res.code and res.code == 200 then - if not first then - first = true - luci.http.header('Content-Disposition', 'inline; filename="'.. show_name .. '.tar"') - luci.http.header('Content-Type', 'application\/x-tar') - end - luci.ltn12.pump.all(chunk, luci.http.write) - else - if not first then - first = true - luci.http.prepare_content("text/plain") - end - luci.ltn12.pump.all(chunk, luci.http.write) - end - end - - docker:write_status("Images: " .. "save" .. " " .. table.concat(image_selected, "\n") .. "...") - local msg = dk.images:get({query = {names = names}}, cb) - if msg and msg.code and msg.code ~= 200 then - docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") - else - docker:clear_status() - end - end -end - -o = s:option(Button, "load") -o.inputtitle= translate("Load") -o.template = "dockerman/images_load" -o.inputstyle = "add" -o.disable = lost_state - -return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua deleted file mode 100644 index 37702c78..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua +++ /dev/null @@ -1,159 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local docker = require "luci.model.docker" - -local m, s, o -local networks, dk, res, lost_state - -dk = docker.new() - -if dk:_ping().code ~= 200 then - lost_state = true -else - res = dk.networks:list() - if res and res.code and res.code < 300 then - networks = res.body - end -end - -local get_networks = function () - local data = {} - - if type(networks) ~= "table" then - return nil - end - - for i, v in ipairs(networks) do - local index = v.Created .. v.Id - - data[index]={} - data[index]["_selected"] = 0 - data[index]["_id"] = v.Id:sub(1,12) - data[index]["_name"] = v.Name - data[index]["_driver"] = v.Driver - - if v.Driver == "bridge" then - data[index]["_interface"] = v.Options["com.docker.network.bridge.name"] - elseif v.Driver == "macvlan" then - data[index]["_interface"] = v.Options.parent - end - - data[index]["_subnet"] = v.IPAM and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil - data[index]["_gateway"] = v.IPAM and v.IPAM.Config[1] and v.IPAM.Config[1].Gateway or nil - end - - return data -end - -local network_list = not lost_state and get_networks() or {} - -m = SimpleForm("docker", - translate("Docker - Networks"), - translate("This page displays all docker networks that have been created on the connected docker host.")) -m.submit=false -m.reset=false - -s = m:section(Table, network_list, translate("Networks overview")) -s.nodescr=true - -o = s:option(Flag, "_selected","") -o.template = "dockerman/cbi/xfvalue" -o.disabled = 0 -o.enabled = 1 -o.default = 0 -o.render = function(self, section, scope) - self.disable = 0 - if network_list[section]["_name"] == "bridge" or network_list[section]["_name"] == "none" or network_list[section]["_name"] == "host" then - self.disable = 1 - end - Flag.render(self, section, scope) -end -o.write = function(self, section, value) - network_list[section]._selected = value -end - -o = s:option(DummyValue, "_id", translate("ID")) - -o = s:option(DummyValue, "_name", translate("Network Name")) - -o = s:option(DummyValue, "_driver", translate("Driver")) - -o = s:option(DummyValue, "_interface", translate("Parent Interface")) - -o = s:option(DummyValue, "_subnet", translate("Subnet")) - -o = s:option(DummyValue, "_gateway", translate("Gateway")) - -s = m:section(SimpleSection) -s.template = "dockerman/apply_widget" -s.err = docker:read_status() -s.err = s.err and s.err:gsub("\n","
"):gsub(" "," ") -if s.err then - docker:clear_status() -end - -s = m:section(Table,{{}}) -s.notitle=true -s.rowcolors=false -s.template="cbi/nullsection" - -o = s:option(Button, "_new") -o.inputtitle= translate("New") -o.template = "dockerman/cbi/inlinebutton" -o.notitle=true -o.inputstyle = "add" -o.forcewrite = true -o.disable = lost_state -o.write = function(self, section) - luci.http.redirect(luci.dispatcher.build_url("admin/docker/newnetwork")) -end - -o = s:option(Button, "_remove") -o.inputtitle= translate("Remove") -o.template = "dockerman/cbi/inlinebutton" -o.inputstyle = "remove" -o.forcewrite = true -o.disable = lost_state -o.write = function(self, section) - local network_selected = {} - local network_name_selected = {} - local network_driver_selected = {} - - for k in pairs(network_list) do - if network_list[k]._selected == 1 then - network_selected[#network_selected + 1] = network_list[k]._id - network_name_selected[#network_name_selected + 1] = network_list[k]._name - network_driver_selected[#network_driver_selected + 1] = network_list[k]._driver - end - end - - if next(network_selected) ~= nil then - local success = true - docker:clear_status() - - for ii, net in ipairs(network_selected) do - docker:append_status("Networks: " .. "remove" .. " " .. net .. "...") - local res = dk.networks["remove"](dk, {id = net}) - - if res and res.code and res.code >= 300 then - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") - success = false - else - docker:append_status("done\n") - if network_driver_selected[ii] == "macvlan" then - docker.remove_macvlan_interface(network_name_selected[ii]) - end - end - end - - if success then - docker:clear_status() - end - luci.http.redirect(luci.dispatcher.build_url("admin/docker/networks")) - end -end - -return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua deleted file mode 100644 index bfd1bf2a..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua +++ /dev/null @@ -1,923 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local docker = require "luci.model.docker" - -local m, s, o - -local dk = docker.new() - -local cmd_line = table.concat(arg, '/') -local images, networks -local create_body = {} - -if dk:_ping().code ~= 200 then - lost_state = true - images = {} - networks = {} -else - images = dk.images:list().body - networks = dk.networks:list().body -end - -local is_quot_complete = function(str) - local num = 0, w - require "math" - - if not str then - return true - end - - local num = 0, w - for w in str:gmatch("\"") do - num = num + 1 - end - - if math.fmod(num, 2) ~= 0 then - return false - end - - num = 0 - for w in str:gmatch("\'") do - num = num + 1 - end - - if math.fmod(num, 2) ~= 0 then - return false - end - - return true -end - -function contains(list, x) - for _, v in pairs(list) do - if v == x then - return true - end - end - return false -end - -local resolve_cli = function(cmd_line) - local config = { - advance = 1 - } - - local key_no_val = { - 't', - 'd', - 'i', - 'tty', - 'rm', - 'read_only', - 'interactive', - 'init', - 'help', - 'detach', - 'privileged', - 'P', - 'publish_all', - } - - local key_with_val = { - 'sysctl', - 'add_host', - 'a', - 'attach', - 'blkio_weight_device', - 'cap_add', - 'cap_drop', - 'device', - 'device_cgroup_rule', - 'device_read_bps', - 'device_read_iops', - 'device_write_bps', - 'device_write_iops', - 'dns', - 'dns_option', - 'dns_search', - 'e', - 'env', - 'env_file', - 'expose', - 'group_add', - 'l', - 'label', - 'label_file', - 'link', - 'link_local_ip', - 'log_driver', - 'log_opt', - 'network_alias', - 'p', - 'publish', - 'security_opt', - 'storage_opt', - 'tmpfs', - 'v', - 'volume', - 'volumes_from', - 'blkio_weight', - 'cgroup_parent', - 'cidfile', - 'cpu_period', - 'cpu_quota', - 'cpu_rt_period', - 'cpu_rt_runtime', - 'c', - 'cpu_shares', - 'cpus', - 'cpuset_cpus', - 'cpuset_mems', - 'detach_keys', - 'disable_content_trust', - 'domainname', - 'entrypoint', - 'gpus', - 'health_cmd', - 'health_interval', - 'health_retries', - 'health_start_period', - 'health_timeout', - 'h', - 'hostname', - 'ip', - 'ip6', - 'ipc', - 'isolation', - 'kernel_memory', - 'mac_address', - 'm', - 'memory', - 'memory_reservation', - 'memory_swap', - 'memory_swappiness', - 'mount', - 'name', - 'network', - 'no_healthcheck', - 'oom_kill_disable', - 'oom_score_adj', - 'pid', - 'pids_limit', - 'restart', - 'runtime', - 'shm_size', - 'sig_proxy', - 'stop_signal', - 'stop_timeout', - 'ulimit', - 'u', - 'user', - 'userns', - 'uts', - 'volume_driver', - 'w', - 'workdir' - } - - local key_abb = { - net='network', - a='attach', - c='cpu-shares', - d='detach', - e='env', - h='hostname', - i='interactive', - l='label', - m='memory', - p='publish', - P='publish_all', - t='tty', - u='user', - v='volume', - w='workdir' - } - - local key_with_list = { - 'sysctl', - 'add_host', - 'a', - 'attach', - 'blkio_weight_device', - 'cap_add', - 'cap_drop', - 'device', - 'device_cgroup_rule', - 'device_read_bps', - 'device_read_iops', - 'device_write_bps', - 'device_write_iops', - 'dns', - 'dns_optiondns_search', - 'e', - 'env', - 'env_file', - 'expose', - 'group_add', - 'l', - 'label', - 'label_file', - 'link', - 'link_local_ip', - 'log_opt', - 'network_alias', - 'p', - 'publish', - 'security_opt', - 'storage_opt', - 'tmpfs', - 'v', - 'volume', - 'volumes_from', - } - - local key = nil - local _key = nil - local val = nil - local is_cmd = false - - cmd_line = cmd_line:match("^DOCKERCLI%s+(.+)") - for w in cmd_line:gmatch("[^%s]+") do - if w =='\\' then - elseif not key and not _key and not is_cmd then - --key=val - key, val = w:match("^%-%-([%lP%-]-)=(.+)") - if not key then - --key val - key = w:match("^%-%-([%lP%-]+)") - if not key then - -- -v val - key = w:match("^%-([%lP%-]+)") - if key then - -- for -dit - if key:match("i") or key:match("t") or key:match("d") then - if key:match("i") then - config[key_abb["i"]] = true - key:gsub("i", "") - end - if key:match("t") then - config[key_abb["t"]] = true - key:gsub("t", "") - end - if key:match("d") then - config[key_abb["d"]] = true - key:gsub("d", "") - end - if key:match("P") then - config[key_abb["P"]] = true - key:gsub("P", "") - end - if key == "" then - key = nil - end - end - end - end - end - if key then - key = key:gsub("-","_") - key = key_abb[key] or key - if contains(key_no_val, key) then - config[key] = true - val = nil - key = nil - elseif contains(key_with_val, key) then - -- if key == "cap_add" then config.privileged = true end - else - key = nil - val = nil - end - else - config.image = w - key = nil - val = nil - is_cmd = true - end - elseif (key or _key) and not is_cmd then - if key == "mount" then - -- we need resolve mount options here - -- type=bind,source=/source,target=/app - local _type = w:match("^type=([^,]+),") or "bind" - local source = (_type ~= "tmpfs") and (w:match("source=([^,]+),") or w:match("src=([^,]+),")) or "" - local target = w:match(",target=([^,]+)") or w:match(",dst=([^,]+)") or w:match(",destination=([^,]+)") or "" - local ro = w:match(",readonly") and "ro" or nil - - if source and target then - if _type ~= "tmpfs" then - local bind_propagation = (_type == "bind") and w:match(",bind%-propagation=([^,]+)") or nil - val = source..":"..target .. ((ro or bind_propagation) and (":" .. (ro and ro or "") .. (((ro and bind_propagation) and "," or "") .. (bind_propagation and bind_propagation or ""))or "")) - else - local tmpfs_mode = w:match(",tmpfs%-mode=([^,]+)") or nil - local tmpfs_size = w:match(",tmpfs%-size=([^,]+)") or nil - key = "tmpfs" - val = target .. ((tmpfs_mode or tmpfs_size) and (":" .. (tmpfs_mode and ("mode=" .. tmpfs_mode) or "") .. ((tmpfs_mode and tmpfs_size) and "," or "") .. (tmpfs_size and ("size=".. tmpfs_size) or "")) or "") - if not config[key] then - config[key] = {} - end - table.insert( config[key], val ) - key = nil - val = nil - end - end - else - val = w - end - elseif is_cmd then - config["command"] = (config["command"] and (config["command"] .. " " )or "") .. w - end - if (key or _key) and val then - key = _key or key - if contains(key_with_list, key) then - if not config[key] then - config[key] = {} - end - if _key then - config[key][#config[key]] = config[key][#config[key]] .. " " .. w - else - table.insert( config[key], val ) - end - if is_quot_complete(config[key][#config[key]]) then - config[key][#config[key]] = config[key][#config[key]]:gsub("[\"\']", "") - _key = nil - else - _key = key - end - else - config[key] = (config[key] and (config[key] .. " ") or "") .. val - if is_quot_complete(config[key]) then - config[key] = config[key]:gsub("[\"\']", "") - _key = nil - else - _key = key - end - end - key = nil - val = nil - end - end - - return config -end - -local default_config = {} - -if cmd_line and cmd_line:match("^DOCKERCLI.+") then - default_config = resolve_cli(cmd_line) -elseif cmd_line and cmd_line:match("^duplicate/[^/]+$") then - local container_id = cmd_line:match("^duplicate/(.+)") - create_body = dk:containers_duplicate_config({id = container_id}) or {} - if not create_body.HostConfig then - create_body.HostConfig = {} - end - - if next(create_body) ~= nil then - default_config.name = nil - default_config.image = create_body.Image - default_config.hostname = create_body.Hostname - default_config.tty = create_body.Tty and true or false - default_config.interactive = create_body.OpenStdin and true or false - default_config.privileged = create_body.HostConfig.Privileged and true or false - default_config.restart = create_body.HostConfig.RestartPolicy and create_body.HostConfig.RestartPolicy.name or nil - -- default_config.network = create_body.HostConfig.NetworkMode == "default" and "bridge" or create_body.HostConfig.NetworkMode - -- if container has leave original network, and add new network, .HostConfig.NetworkMode is INcorrect, so using first child of .NetworkingConfig.EndpointsConfig - default_config.network = create_body.NetworkingConfig and create_body.NetworkingConfig.EndpointsConfig and next(create_body.NetworkingConfig.EndpointsConfig) or nil - default_config.ip = default_config.network and default_config.network ~= "bridge" and default_config.network ~= "host" and default_config.network ~= "null" and create_body.NetworkingConfig.EndpointsConfig[default_config.network].IPAMConfig and create_body.NetworkingConfig.EndpointsConfig[default_config.network].IPAMConfig.IPv4Address or nil - default_config.link = create_body.HostConfig.Links - default_config.env = create_body.Env - default_config.dns = create_body.HostConfig.Dns - default_config.volume = create_body.HostConfig.Binds - default_config.cap_add = create_body.HostConfig.CapAdd - default_config.publish_all = create_body.HostConfig.PublishAllPorts - - if create_body.HostConfig.Sysctls and type(create_body.HostConfig.Sysctls) == "table" then - default_config.sysctl = {} - for k, v in pairs(create_body.HostConfig.Sysctls) do - table.insert( default_config.sysctl, k.."="..v ) - end - end - if create_body.HostConfig.LogConfig then - if create_body.HostConfig.LogConfig.Config and type(create_body.HostConfig.LogConfig.Config) == "table" then - default_config.log_opt = {} - for k, v in pairs(create_body.HostConfig.LogConfig.Config) do - table.insert( default_config.log_opt, k.."="..v ) - end - end - default_config.log_driver = create_body.HostConfig.LogConfig.Type or nil - end - - if create_body.HostConfig.PortBindings and type(create_body.HostConfig.PortBindings) == "table" then - default_config.publish = {} - for k, v in pairs(create_body.HostConfig.PortBindings) do - for x, y in ipairs(v) do - table.insert( default_config.publish, y.HostPort..":"..k:match("^(%d+)/.+").."/"..k:match("^%d+/(.+)") ) - end - end - end - - default_config.user = create_body.User or nil - default_config.command = create_body.Cmd and type(create_body.Cmd) == "table" and table.concat(create_body.Cmd, " ") or nil - default_config.advance = 1 - default_config.cpus = create_body.HostConfig.NanoCPUs - default_config.cpu_shares = create_body.HostConfig.CpuShares - default_config.memory = create_body.HostConfig.Memory - default_config.blkio_weight = create_body.HostConfig.BlkioWeight - - if create_body.HostConfig.Devices and type(create_body.HostConfig.Devices) == "table" then - default_config.device = {} - for _, v in ipairs(create_body.HostConfig.Devices) do - table.insert( default_config.device, v.PathOnHost..":"..v.PathInContainer..(v.CgroupPermissions ~= "" and (":" .. v.CgroupPermissions) or "") ) - end - end - - if create_body.HostConfig.Tmpfs and type(create_body.HostConfig.Tmpfs) == "table" then - default_config.tmpfs = {} - for k, v in pairs(create_body.HostConfig.Tmpfs) do - table.insert( default_config.tmpfs, k .. (v~="" and ":" or "")..v ) - end - end - end -end - -m = SimpleForm("docker", translate("Docker - Containers")) -m.redirect = luci.dispatcher.build_url("admin", "docker", "containers") -if lost_state then - m.submit=false - m.reset=false -end - -s = m:section(SimpleSection) -s.template = "dockerman/apply_widget" -s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") -if s.err then - docker:clear_status() -end - -s = m:section(SimpleSection, translate("Create new docker container")) -s.addremove = true -s.anonymous = true - -o = s:option(DummyValue,"cmd_line", translate("Resolve CLI")) -o.rawhtml = true -o.template = "dockerman/newcontainer_resolve" - -o = s:option(Value, "name", translate("Container Name")) -o.rmempty = true -o.default = default_config.name or nil - -o = s:option(Flag, "interactive", translate("Interactive (-i)")) -o.rmempty = true -o.disabled = 0 -o.enabled = 1 -o.default = default_config.interactive and 1 or 0 - -o = s:option(Flag, "tty", translate("TTY (-t)")) -o.rmempty = true -o.disabled = 0 -o.enabled = 1 -o.default = default_config.tty and 1 or 0 - -o = s:option(Value, "image", translate("Docker Image")) -o.rmempty = true -o.default = default_config.image or nil -for _, v in ipairs (images) do - if v.RepoTags then - o:value(v.RepoTags[1], v.RepoTags[1]) - end -end - -o = s:option(Flag, "_force_pull", translate("Always pull image first")) -o.rmempty = true -o.disabled = 0 -o.enabled = 1 -o.default = 0 - -o = s:option(Flag, "privileged", translate("Privileged")) -o.rmempty = true -o.disabled = 0 -o.enabled = 1 -o.default = default_config.privileged and 1 or 0 - -o = s:option(ListValue, "restart", translate("Restart Policy")) -o.rmempty = true -o:value("no", "No") -o:value("unless-stopped", "Unless stopped") -o:value("always", "Always") -o:value("on-failure", "On failure") -o.default = default_config.restart or "unless-stopped" - -local d_network = s:option(ListValue, "network", translate("Networks")) -d_network.rmempty = true -d_network.default = default_config.network or "bridge" - -local d_ip = s:option(Value, "ip", translate("IPv4 Address")) -d_ip.datatype="ip4addr" -d_ip:depends("network", "nil") -d_ip.default = default_config.ip or nil - -o = s:option(DynamicList, "link", translate("Links with other containers")) -o.placeholder = "container_name:alias" -o.rmempty = true -o:depends("network", "bridge") -o.default = default_config.link or nil - -o = s:option(DynamicList, "dns", translate("Set custom DNS servers")) -o.placeholder = "8.8.8.8" -o.rmempty = true -o.default = default_config.dns or nil - -o = s:option(Value, "user", - translate("User(-u)"), - translate("The user that commands are run as inside the container.(format: name|uid[:group|gid])")) -o.placeholder = "1000:1000" -o.rmempty = true -o.default = default_config.user or nil - -o = s:option(DynamicList, "env", - translate("Environmental Variable(-e)"), - translate("Set environment variables to inside the container")) -o.placeholder = "TZ=Asia/Shanghai" -o.rmempty = true -o.default = default_config.env or nil - -o = s:option(DynamicList, "volume", - translate("Bind Mount(-v)"), - translate("Bind mount a volume")) -o.placeholder = "/media:/media:slave" -o.rmempty = true -o.default = default_config.volume or nil - -local d_publish = s:option(DynamicList, "publish", - translate("Exposed Ports(-p)"), - translate("Publish container's port(s) to the host")) -d_publish.placeholder = "2200:22/tcp" -d_publish.rmempty = true -d_publish.default = default_config.publish or nil - -o = s:option(Value, "command", translate("Run command")) -o.placeholder = "/bin/sh init.sh" -o.rmempty = true -o.default = default_config.command or nil - -o = s:option(Flag, "advance", translate("Advance")) -o.rmempty = true -o.disabled = 0 -o.enabled = 1 -o.default = default_config.advance or 0 - -o = s:option(Value, "hostname", - translate("Host Name"), - translate("The hostname to use for the container")) -o.rmempty = true -o.default = default_config.hostname or nil -o:depends("advance", 1) - -o = s:option(Flag, "publish_all", - translate("Exposed All Ports(-P)"), - translate("Allocates an ephemeral host port for all of a container's exposed ports")) -o.rmempty = true -o.disabled = 0 -o.enabled = 1 -o.default = default_config.publish_all and 1 or 0 -o:depends("advance", 1) - -o = s:option(DynamicList, "device", - translate("Device(--device)"), - translate("Add host device to the container")) -o.placeholder = "/dev/sda:/dev/xvdc:rwm" -o.rmempty = true -o:depends("advance", 1) -o.default = default_config.device or nil - -o = s:option(DynamicList, "tmpfs", - translate("Tmpfs(--tmpfs)"), - translate("Mount tmpfs directory")) -o.placeholder = "/run:rw,noexec,nosuid,size=65536k" -o.rmempty = true -o:depends("advance", 1) -o.default = default_config.tmpfs or nil - -o = s:option(DynamicList, "sysctl", - translate("Sysctl(--sysctl)"), - translate("Sysctls (kernel parameters) options")) -o.placeholder = "net.ipv4.ip_forward=1" -o.rmempty = true -o:depends("advance", 1) -o.default = default_config.sysctl or nil - -o = s:option(DynamicList, "cap_add", - translate("CAP-ADD(--cap-add)"), - translate("A list of kernel capabilities to add to the container")) -o.placeholder = "NET_ADMIN" -o.rmempty = true -o:depends("advance", 1) -o.default = default_config.cap_add or nil - -o = s:option(Value, "cpus", - translate("CPUs"), - translate("Number of CPUs. Number is a fractional number. 0.000 means no limit")) -o.placeholder = "1.5" -o.rmempty = true -o:depends("advance", 1) -o.datatype="ufloat" -o.default = default_config.cpus or nil - -o = s:option(Value, "cpu_shares", - translate("CPU Shares Weight"), - translate("CPU shares relative weight, if 0 is set, the system will ignore the value and use the default of 1024")) -o.placeholder = "1024" -o.rmempty = true -o:depends("advance", 1) -o.datatype="uinteger" -o.default = default_config.cpu_shares or nil - -o = s:option(Value, "memory", - translate("Memory"), - translate("Memory limit (format: []). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M")) -o.placeholder = "128m" -o.rmempty = true -o:depends("advance", 1) -o.default = default_config.memory or nil - -o = s:option(Value, "blkio_weight", - translate("Block IO Weight"), - translate("Block IO weight (relative weight) accepts a weight value between 10 and 1000")) -o.placeholder = "500" -o.rmempty = true -o:depends("advance", 1) -o.datatype="uinteger" -o.default = default_config.blkio_weight or nil - -o = s:option(Value, "log_driver", - translate("Logging driver"), - translate("The logging driver for the container")) -o.placeholder = "json-file" -o.rmempty = true -o:depends("advance", 1) -o.default = default_config.log_driver or nil - -o = s:option(DynamicList, "log_opt", - translate("Log driver options"), - translate("The logging configuration for this container")) -o.placeholder = "max-size=1m" -o.rmempty = true -o:depends("advance", 1) -o.default = default_config.log_opt or nil - -for _, v in ipairs (networks) do - if v.Name then - local parent = v.Options and v.Options.parent or nil - local ip = v.IPAM and v.IPAM.Config and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil - ipv6 = v.IPAM and v.IPAM.Config and v.IPAM.Config[2] and v.IPAM.Config[2].Subnet or nil - local network_name = v.Name .. " | " .. v.Driver .. (parent and (" | " .. parent) or "") .. (ip and (" | " .. ip) or "").. (ipv6 and (" | " .. ipv6) or "") - d_network:value(v.Name, network_name) - - if v.Name ~= "none" and v.Name ~= "bridge" and v.Name ~= "host" then - d_ip:depends("network", v.Name) - end - - if v.Driver == "bridge" then - d_publish:depends("network", v.Name) - end - end -end - -m.handle = function(self, state, data) - if state ~= FORM_VALID then - return - end - - local tmp - local name = data.name or ("luci_" .. os.date("%Y%m%d%H%M%S")) - local hostname = data.hostname - local tty = type(data.tty) == "number" and (data.tty == 1 and true or false) or default_config.tty or false - local publish_all = type(data.publish_all) == "number" and (data.publish_all == 1 and true or false) or default_config.publish_all or false - local interactive = type(data.interactive) == "number" and (data.interactive == 1 and true or false) or default_config.interactive or false - local image = data.image - local user = data.user - - if image and not image:match(".-:.+") then - image = image .. ":latest" - end - - local privileged = type(data.privileged) == "number" and (data.privileged == 1 and true or false) or default_config.privileged or false - local restart = data.restart - local env = data.env - local dns = data.dns - local cap_add = data.cap_add - local sysctl = {} - local log_driver = data.log_driver - - tmp = data.sysctl - if type(tmp) == "table" then - for i, v in ipairs(tmp) do - local k,v1 = v:match("(.-)=(.+)") - if k and v1 then - sysctl[k]=v1 - end - end - end - - local log_opt = {} - tmp = data.log_opt - if type(tmp) == "table" then - for i, v in ipairs(tmp) do - local k,v1 = v:match("(.-)=(.+)") - if k and v1 then - log_opt[k]=v1 - end - end - end - - local network = data.network - local ip = (network ~= "bridge" and network ~= "host" and network ~= "none") and data.ip or nil - local volume = data.volume - local memory = data.memory or nil - local cpu_shares = data.cpu_shares or nil - local cpus = data.cpus or nil - local blkio_weight = data.blkio_weight or nil - - local portbindings = {} - local exposedports = {} - - local tmpfs = {} - tmp = data.tmpfs - if type(tmp) == "table" then - for i, v in ipairs(tmp)do - local k= v:match("([^:]+)") - local v1 = v:match(".-:([^:]+)") or "" - if k then - tmpfs[k]=v1 - end - end - end - - local device = {} - tmp = data.device - if type(tmp) == "table" then - for i, v in ipairs(tmp) do - local t = {} - local _,_, h, c, p = v:find("(.-):(.-):(.+)") - if h and c then - t['PathOnHost'] = h - t['PathInContainer'] = c - t['CgroupPermissions'] = p or "rwm" - else - local _,_, h, c = v:find("(.-):(.+)") - if h and c then - t['PathOnHost'] = h - t['PathInContainer'] = c - t['CgroupPermissions'] = "rwm" - else - t['PathOnHost'] = v - t['PathInContainer'] = v - t['CgroupPermissions'] = "rwm" - end - end - - if next(t) ~= nil then - table.insert( device, t ) - end - end - end - - tmp = data.publish or {} - for i, v in ipairs(tmp) do - for v1 ,v2 in string.gmatch(v, "(%d+):([^%s]+)") do - local _,_,p= v2:find("^%d+/(%w+)") - if p == nil then - v2=v2..'/tcp' - end - portbindings[v2] = {{HostPort=v1}} - exposedports[v2] = {HostPort=v1} - end - end - - local link = data.link - tmp = data.command - local command = {} - if tmp ~= nil then - for v in string.gmatch(tmp, "[^%s]+") do - command[#command+1] = v - end - end - - if memory and memory ~= 0 then - _,_,n,unit = memory:find("([%d%.]+)([%l%u]+)") - if n then - unit = unit and unit:sub(1,1):upper() or "B" - if unit == "M" then - memory = tonumber(n) * 1024 * 1024 - elseif unit == "G" then - memory = tonumber(n) * 1024 * 1024 * 1024 - elseif unit == "K" then - memory = tonumber(n) * 1024 - else - memory = tonumber(n) - end - end - end - - create_body.Hostname = network ~= "host" and (hostname or name) or nil - create_body.Tty = tty and true or false - create_body.OpenStdin = interactive and true or false - create_body.User = user - create_body.Cmd = command - create_body.Env = env - create_body.Image = image - create_body.ExposedPorts = exposedports - create_body.HostConfig = create_body.HostConfig or {} - create_body.HostConfig.Dns = dns - create_body.HostConfig.Binds = volume - create_body.HostConfig.RestartPolicy = { Name = restart, MaximumRetryCount = 0 } - create_body.HostConfig.Privileged = privileged and true or false - create_body.HostConfig.PortBindings = portbindings - create_body.HostConfig.Memory = memory and tonumber(memory) - create_body.HostConfig.CpuShares = cpu_shares and tonumber(cpu_shares) - create_body.HostConfig.NanoCPUs = cpus and tonumber(cpus) * 10 ^ 9 - create_body.HostConfig.BlkioWeight = blkio_weight and tonumber(blkio_weight) - create_body.HostConfig.PublishAllPorts = publish_all - - if create_body.HostConfig.NetworkMode ~= network then - create_body.NetworkingConfig = nil - end - - create_body.HostConfig.NetworkMode = network - - if ip then - if create_body.NetworkingConfig and create_body.NetworkingConfig.EndpointsConfig and type(create_body.NetworkingConfig.EndpointsConfig) == "table" then - for k, v in pairs (create_body.NetworkingConfig.EndpointsConfig) do - if k == network and v.IPAMConfig and v.IPAMConfig.IPv4Address then - v.IPAMConfig.IPv4Address = ip - else - create_body.NetworkingConfig.EndpointsConfig = { [network] = { IPAMConfig = { IPv4Address = ip } } } - end - break - end - else - create_body.NetworkingConfig = { EndpointsConfig = { [network] = { IPAMConfig = { IPv4Address = ip } } } } - end - elseif not create_body.NetworkingConfig then - create_body.NetworkingConfig = nil - end - - create_body["HostConfig"]["Tmpfs"] = tmpfs - create_body["HostConfig"]["Devices"] = device - create_body["HostConfig"]["Sysctls"] = sysctl - create_body["HostConfig"]["CapAdd"] = cap_add - create_body["HostConfig"]["LogConfig"] = { - Config = log_opt, - Type = log_driver - } - - if network == "bridge" then - create_body["HostConfig"]["Links"] = link - end - - local pull_image = function(image) - local json_stringify = luci.jsonc and luci.jsonc.stringify - docker:append_status("Images: " .. "pulling" .. " " .. image .. "...\n") - local res = dk.images:create({query = {fromImage=image}}, docker.pull_image_show_status_cb) - if res and res.code and res.code == 200 and (res.body[#res.body] and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. image or res.body[#res.body].status == "Status: Image is up to date for ".. image)) then - docker:append_status("done\n") - else - res.code = (res.code == 200) and 500 or res.code - docker:append_status("code:" .. res.code.." ".. (res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message)).. "\n") - luci.http.redirect(luci.dispatcher.build_url("admin/docker/newcontainer")) - end - end - - docker:clear_status() - local exist_image = false - - if image then - for _, v in ipairs (images) do - if v.RepoTags and v.RepoTags[1] == image then - exist_image = true - break - end - end - if not exist_image then - pull_image(image) - elseif data._force_pull == 1 then - pull_image(image) - end - end - - create_body = docker.clear_empty_tables(create_body) - - docker:append_status("Container: " .. "create" .. " " .. name .. "...") - local res = dk.containers:create({name = name, body = create_body}) - if res and res.code and res.code == 201 then - docker:clear_status() - luci.http.redirect(luci.dispatcher.build_url("admin/docker/containers")) - else - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) - luci.http.redirect(luci.dispatcher.build_url("admin/docker/newcontainer")) - end -end - -return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua deleted file mode 100644 index c87678b8..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua +++ /dev/null @@ -1,258 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local docker = require "luci.model.docker" - -local m, s, o - -local dk = docker.new() -if dk:_ping().code ~= 200 then - lost_state = true -end - -m = SimpleForm("docker", translate("Docker - Network")) -m.redirect = luci.dispatcher.build_url("admin", "docker", "networks") -if lost_state then - m.submit=false - m.reset=false -end - - -s = m:section(SimpleSection) -s.template = "dockerman/apply_widget" -s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") -if s.err then - docker:clear_status() -end - -s = m:section(SimpleSection, translate("Create new docker network")) -s.addremove = true -s.anonymous = true - -o = s:option(Value, "name", - translate("Network Name"), - translate("Name of the network that can be selected during container creation")) -o.rmempty = true - -o = s:option(ListValue, "driver", translate("Driver")) -o.rmempty = true -o:value("bridge", translate("Bridge device")) -o:value("macvlan", translate("MAC VLAN")) -o:value("ipvlan", translate("IP VLAN")) -o:value("overlay", translate("Overlay network")) - -o = s:option(Value, "parent", translate("Base device")) -o.rmempty = true -o:depends("driver", "macvlan") -local interfaces = luci.sys and luci.sys.net and luci.sys.net.devices() or {} -for _, v in ipairs(interfaces) do - o:value(v, v) -end -o.default="br-lan" -o.placeholder="br-lan" - -o = s:option(ListValue, "macvlan_mode", translate("Mode")) -o.rmempty = true -o:depends("driver", "macvlan") -o.default="bridge" -o:value("bridge", translate("Bridge (Support direct communication between MAC VLANs)")) -o:value("private", translate("Private (Prevent communication between MAC VLANs)")) -o:value("vepa", translate("VEPA (Virtual Ethernet Port Aggregator)")) -o:value("passthru", translate("Pass-through (Mirror physical device to single MAC VLAN)")) - -o = s:option(ListValue, "ipvlan_mode", translate("Ipvlan Mode")) -o.rmempty = true -o:depends("driver", "ipvlan") -o.default="l3" -o:value("l2", translate("L2 bridge")) -o:value("l3", translate("L3 bridge")) - -o = s:option(Flag, "ingress", - translate("Ingress"), - translate("Ingress network is the network which provides the routing-mesh in swarm mode")) -o.rmempty = true -o.disabled = 0 -o.enabled = 1 -o.default = 0 -o:depends("driver", "overlay") - -o = s:option(DynamicList, "options", translate("Options")) -o.rmempty = true -o.placeholder="com.docker.network.driver.mtu=1500" - -o = s:option(Flag, "internal", translate("Internal"), translate("Restrict external access to the network")) -o.rmempty = true -o:depends("driver", "overlay") -o.disabled = 0 -o.enabled = 1 -o.default = 0 - -if nixio.fs.access("/etc/config/network") and nixio.fs.access("/etc/config/firewall")then - o = s:option(Flag, "op_macvlan", translate("Create macvlan interface"), translate("Auto create macvlan interface in Openwrt")) - o:depends("driver", "macvlan") - o.disabled = 0 - o.enabled = 1 - o.default = 1 -end - -o = s:option(Value, "subnet", translate("Subnet")) -o.rmempty = true -o.placeholder="10.1.0.0/16" -o.datatype="ip4addr" - -o = s:option(Value, "gateway", translate("Gateway")) -o.rmempty = true -o.placeholder="10.1.1.1" -o.datatype="ip4addr" - -o = s:option(Value, "ip_range", translate("IP range")) -o.rmempty = true -o.placeholder="10.1.1.0/24" -o.datatype="ip4addr" - -o = s:option(DynamicList, "aux_address", translate("Exclude IPs")) -o.rmempty = true -o.placeholder="my-route=10.1.1.1" - -o = s:option(Flag, "ipv6", translate("Enable IPv6")) -o.rmempty = true -o.disabled = 0 -o.enabled = 1 -o.default = 0 - -o = s:option(Value, "subnet6", translate("IPv6 Subnet")) -o.rmempty = true -o.placeholder="fe80::/10" -o.datatype="ip6addr" -o:depends("ipv6", 1) - -o = s:option(Value, "gateway6", translate("IPv6 Gateway")) -o.rmempty = true -o.placeholder="fe80::1" -o.datatype="ip6addr" -o:depends("ipv6", 1) - -m.handle = function(self, state, data) - if state == FORM_VALID then - local name = data.name - local driver = data.driver - - local internal = data.internal == 1 and true or false - - local subnet = data.subnet - local gateway = data.gateway - local ip_range = data.ip_range - - local aux_address = {} - local tmp = data.aux_address or {} - for i,v in ipairs(tmp) do - _,_,k1,v1 = v:find("(.-)=(.+)") - aux_address[k1] = v1 - end - - local options = {} - tmp = data.options or {} - for i,v in ipairs(tmp) do - _,_,k1,v1 = v:find("(.-)=(.+)") - options[k1] = v1 - end - - local ipv6 = data.ipv6 == 1 and true or false - - local create_body = { - Name = name, - Driver = driver, - EnableIPv6 = ipv6, - IPAM = { - Driver= "default" - }, - Internal = internal - } - - if subnet or gateway or ip_range then - create_body["IPAM"]["Config"] = { - { - Subnet = subnet, - Gateway = gateway, - IPRange = ip_range, - AuxAddress = aux_address, - AuxiliaryAddresses = aux_address - } - } - end - - if driver == "macvlan" then - create_body["Options"] = { - macvlan_mode = data.macvlan_mode, - parent = data.parent - } - elseif driver == "ipvlan" then - create_body["Options"] = { - ipvlan_mode = data.ipvlan_mode - } - elseif driver == "overlay" then - create_body["Ingress"] = data.ingerss == 1 and true or false - end - - if ipv6 and data.subnet6 and data.subnet6 then - if type(create_body["IPAM"]["Config"]) ~= "table" then - create_body["IPAM"]["Config"] = {} - end - local index = #create_body["IPAM"]["Config"] - create_body["IPAM"]["Config"][index+1] = { - Subnet = data.subnet6, - Gateway = data.gateway6 - } - end - - if next(options) ~= nil then - create_body["Options"] = create_body["Options"] or {} - for k, v in pairs(options) do - create_body["Options"][k] = v - end - end - - create_body = docker.clear_empty_tables(create_body) - docker:write_status("Network: " .. "create" .. " " .. create_body.Name .. "...") - - local res = dk.networks:create({ - body = create_body - }) - - if res and res.code == 201 then - docker:write_status("Network: " .. "create macvlan interface...") - res = dk.networks:inspect({ - name = create_body.Name - }) - - if driver == "macvlan" and - data.op_macvlan ~= 0 and - res and - res.code and - res.code == 200 and - res.body and - res.body.IPAM and - res.body.IPAM.Config and - res.body.IPAM.Config[1] and - res.body.IPAM.Config[1].Gateway and - res.body.IPAM.Config[1].Subnet then - - docker.create_macvlan_interface(data.name, - data.parent, - res.body.IPAM.Config[1].Gateway, - res.body.IPAM.Config[1].Subnet) - end - - docker:clear_status() - luci.http.redirect(luci.dispatcher.build_url("admin/docker/networks")) - else - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") - luci.http.redirect(luci.dispatcher.build_url("admin/docker/newnetwork")) - end - end -end - -return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua deleted file mode 100644 index c91f349c..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua +++ /dev/null @@ -1,151 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local docker = require "luci.model.docker" -local uci = (require "luci.model.uci").cursor() - -local m, s, o, lost_state -local dk = docker.new() - -if dk:_ping().code ~= 200 then - lost_state = true -end - -m = SimpleForm("dockerd", - translate("Docker - Overview"), - translate("An overview with the relevant data is displayed here with which the LuCI docker client is connected.") -.. - " " .. - [[]] .. - translate("Github") .. - [[]]) -m.submit=false -m.reset=false - -local docker_info_table = {} --- docker_info_table['0OperatingSystem'] = {_key=translate("Operating System"),_value='-'} --- docker_info_table['1Architecture'] = {_key=translate("Architecture"),_value='-'} --- docker_info_table['2KernelVersion'] = {_key=translate("Kernel Version"),_value='-'} -docker_info_table['3ServerVersion'] = {_key=translate("Docker Version"),_value='-'} -docker_info_table['4ApiVersion'] = {_key=translate("Api Version"),_value='-'} -docker_info_table['5NCPU'] = {_key=translate("CPUs"),_value='-'} -docker_info_table['6MemTotal'] = {_key=translate("Total Memory"),_value='-'} -docker_info_table['7DockerRootDir'] = {_key=translate("Docker Root Dir"),_value='-'} -docker_info_table['8IndexServerAddress'] = {_key=translate("Index Server Address"),_value='-'} -docker_info_table['9RegistryMirrors'] = {_key=translate("Registry Mirrors"),_value='-'} - -if nixio.fs.access("/usr/bin/dockerd") and not uci:get_bool("dockerd", "dockerman", "remote_endpoint") then - s = m:section(SimpleSection) - s.template = "dockerman/apply_widget" - s.err=docker:read_status() - s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") - if s.err then - docker:clear_status() - end - s = m:section(Table,{{}}) - s.notitle=true - s.rowcolors=false - s.template = "cbi/nullsection" - - o = s:option(Button, "_start") - o.template = "dockerman/cbi/inlinebutton" - o.inputtitle = lost_state and translate("Start") or translate("Stop") - o.inputstyle = lost_state and "add" or "remove" - o.forcewrite = true - o.write = function(self, section) - docker:clear_status() - - if lost_state then - docker:append_status("Docker daemon: starting") - luci.util.exec("/etc/init.d/dockerd start") - luci.util.exec("sleep 5") - luci.util.exec("/etc/init.d/dockerman start") - - else - docker:append_status("Docker daemon: stopping") - luci.util.exec("/etc/init.d/dockerd stop") - end - docker:clear_status() - luci.http.redirect(luci.dispatcher.build_url("admin/docker/overview")) - end - - o = s:option(Button, "_restart") - o.template = "dockerman/cbi/inlinebutton" - o.inputtitle = translate("Restart") - o.inputstyle = "reload" - o.forcewrite = true - o.write = function(self, section) - docker:clear_status() - docker:append_status("Docker daemon: restarting") - luci.util.exec("/etc/init.d/dockerd restart") - luci.util.exec("sleep 5") - luci.util.exec("/etc/init.d/dockerman start") - docker:clear_status() - luci.http.redirect(luci.dispatcher.build_url("admin/docker/overview")) - end -end - -s = m:section(Table, docker_info_table) -s:option(DummyValue, "_key", translate("Info")) -s:option(DummyValue, "_value") - -s = m:section(SimpleSection) -s.template = "dockerman/overview" - -s.containers_running = '-' -s.images_used = '-' -s.containers_total = '-' -s.images_total = '-' -s.networks_total = '-' -s.volumes_total = '-' - --- local socket = luci.model.uci.cursor():get("dockerd", "dockerman", "socket_path") -if not lost_state then - local containers_list = dk.containers:list({query = {all=true}}).body - local images_list = dk.images:list().body - local vol = dk.volumes:list() - local volumes_list = vol and vol.body and vol.body.Volumes or {} - local networks_list = dk.networks:list().body or {} - local docker_info = dk:info() - - -- docker_info_table['0OperatingSystem']._value = docker_info.body.OperatingSystem - -- docker_info_table['1Architecture']._value = docker_info.body.Architecture - -- docker_info_table['2KernelVersion']._value = docker_info.body.KernelVersion - docker_info_table['3ServerVersion']._value = docker_info.body.ServerVersion - docker_info_table['4ApiVersion']._value = docker_info.headers["Api-Version"] - docker_info_table['5NCPU']._value = tostring(docker_info.body.NCPU) - docker_info_table['6MemTotal']._value = docker.byte_format(docker_info.body.MemTotal) - if docker_info.body.DockerRootDir then - local statvfs = nixio.fs.statvfs(docker_info.body.DockerRootDir) - local size = statvfs and (statvfs.bavail * statvfs.bsize) or 0 - docker_info_table['7DockerRootDir']._value = docker_info.body.DockerRootDir .. " (" .. tostring(docker.byte_format(size)) .. " " .. translate("Available") .. ")" - end - - docker_info_table['8IndexServerAddress']._value = docker_info.body.IndexServerAddress - for i, v in ipairs(docker_info.body.RegistryConfig.Mirrors) do - docker_info_table['9RegistryMirrors']._value = docker_info_table['9RegistryMirrors']._value == "-" and v or (docker_info_table['9RegistryMirrors']._value .. ", " .. v) - end - - s.images_used = 0 - for i, v in ipairs(images_list) do - for ci,cv in ipairs(containers_list) do - if v.Id == cv.ImageID then - s.images_used = s.images_used + 1 - break - end - end - end - - s.containers_running = tostring(docker_info.body.ContainersRunning) - s.images_used = tostring(s.images_used) - s.containers_total = tostring(docker_info.body.Containers) - s.images_total = tostring(#images_list) - s.networks_total = tostring(#networks_list) - s.volumes_total = tostring(#volumes_list) -else - docker_info_table['3ServerVersion']._value = translate("Can NOT connect to docker daemon, please check!!") -end - -return m diff --git a/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua b/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua deleted file mode 100644 index 43e6bda3..00000000 --- a/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua +++ /dev/null @@ -1,142 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local docker = require "luci.model.docker" -local dk = docker.new() - -local m, s, o - -local res, containers, volumes, lost_state - -function get_volumes() - local data = {} - for i, v in ipairs(volumes) do - local index = v.Name - data[index]={} - data[index]["_selected"] = 0 - data[index]["_nameraw"] = v.Name - data[index]["_name"] = v.Name:sub(1,12) - - for ci,cv in ipairs(containers) do - if cv.Mounts and type(cv.Mounts) ~= "table" then - break - end - for vi, vv in ipairs(cv.Mounts) do - if v.Name == vv.Name then - data[index]["_containers"] = (data[index]["_containers"] and (data[index]["_containers"] .. " | ") or "").. - ''.. cv.Names[1]:sub(2)..'' - end - end - end - data[index]["_driver"] = v.Driver - data[index]["_mountpoint"] = nil - - for v1 in v.Mountpoint:gmatch('[^/]+') do - if v1 == index then - data[index]["_mountpoint"] = data[index]["_mountpoint"] .."/" .. v1:sub(1,12) .. "..." - else - data[index]["_mountpoint"] = (data[index]["_mountpoint"] and data[index]["_mountpoint"] or "").."/".. v1 - end - end - data[index]["_created"] = v.CreatedAt - data[index]["_size"] = "-" - end - - return data -end -if dk:_ping().code ~= 200 then - lost_state = true -else - res = dk.volumes:list() - if res and res.code and res.code <300 then - volumes = res.body.Volumes - end - - res = dk.containers:list({ - query = { - all=true - } - }) - if res and res.code and res.code <300 then - containers = res.body - end -end - -local volume_list = not lost_state and get_volumes() or {} - -m = SimpleForm("docker", translate("Docker - Volumes")) -m.submit=false -m.reset=false -m:append(Template("dockerman/volume_size")) - -s = m:section(Table, volume_list, translate("Volumes overview")) - -o = s:option(Flag, "_selected","") -o.disabled = 0 -o.enabled = 1 -o.default = 0 -o.write = function(self, section, value) - volume_list[section]._selected = value -end - -o = s:option(DummyValue, "_name", translate("Name")) -o = s:option(DummyValue, "_driver", translate("Driver")) -o = s:option(DummyValue, "_containers", translate("Containers")) -o.rawhtml = true -o = s:option(DummyValue, "_mountpoint", translate("Mount Point")) -o = s:option(DummyValue, "_size", translate("Size")) -o.rawhtml = true -o = s:option(DummyValue, "_created", translate("Created")) - -s = m:section(SimpleSection) -s.template = "dockerman/apply_widget" -s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") -if s.err then - docker:clear_status() -end - -s = m:section(Table,{{}}) -s.notitle=true -s.rowcolors=false -s.template="cbi/nullsection" - -o = s:option(Button, "remove") -o.inputtitle= translate("Remove") -o.template = "dockerman/cbi/inlinebutton" -o.inputstyle = "remove" -o.forcewrite = true -o.disable = lost_state -o.write = function(self, section) - local volume_selected = {} - - for k in pairs(volume_list) do - if volume_list[k]._selected == 1 then - volume_selected[#volume_selected+1] = k - end - end - - if next(volume_selected) ~= nil then - local success = true - docker:clear_status() - for _,vol in ipairs(volume_selected) do - docker:append_status("Volumes: " .. "remove" .. " " .. vol .. "...") - local msg = dk.volumes["remove"](dk, {id = vol}) - if msg and msg.code and msg.code ~= 204 then - docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") - success = false - else - docker:append_status("done\n") - end - end - - if success then - docker:clear_status() - end - luci.http.redirect(luci.dispatcher.build_url("admin/docker/volumes")) - end -end - -return m diff --git a/luci-app-dockerman/luasrc/model/docker.lua b/luci-app-dockerman/luasrc/model/docker.lua deleted file mode 100644 index 2a902912..00000000 --- a/luci-app-dockerman/luasrc/model/docker.lua +++ /dev/null @@ -1,507 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -local docker = require "luci.docker" -local fs = require "nixio.fs" -local uci = (require "luci.model.uci").cursor() - -local _docker = {} -_docker.options = {} - ---pull image and return iamge id -local update_image = function(self, image_name) - local json_stringify = luci.jsonc and luci.jsonc.stringify - _docker:append_status("Images: " .. "pulling" .. " " .. image_name .. "...\n") - local res = self.images:create({query = {fromImage=image_name}}, _docker.pull_image_show_status_cb) - - if res and res.code and res.code == 200 and (#res.body > 0 and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. image_name)) then - _docker:append_status("done\n") - else - res.body.message = res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message) - end - - new_image_id = self.images:inspect({name = image_name}).body.Id - return new_image_id, res -end - -local table_equal = function(t1, t2) - if not t1 then - return true - end - - if not t2 then - return false - end - - if #t1 ~= #t2 then - return false - end - - for i, v in ipairs(t1) do - if t1[i] ~= t2[i] then - return false - end - end - - return true -end - -local table_subtract = function(t1, t2) - if not t1 or next(t1) == nil then - return nil - end - - if not t2 or next(t2) == nil then - return t1 - end - - local res = {} - for _, v1 in ipairs(t1) do - local found = false - for _, v2 in ipairs(t2) do - if v1 == v2 then - found= true - break - end - end - if not found then - table.insert(res, v1) - end - end - - return next(res) == nil and nil or res -end - -local map_subtract = function(t1, t2) - if not t1 or next(t1) == nil then - return nil - end - - if not t2 or next(t2) == nil then - return t1 - end - - local res = {} - for k1, v1 in pairs(t1) do - local found = false - for k2, v2 in ipairs(t2) do - if k1 == k2 and luci.util.serialize_data(v1) == luci.util.serialize_data(v2) then - found= true - break - end - end - - if not found then - res[k1] = v1 - end - end - - return next(res) ~= nil and res or nil -end - -_docker.clear_empty_tables = function ( t ) - local k, v - - if next(t) == nil then - t = nil - else - for k, v in pairs(t) do - if type(v) == 'table' then - t[k] = _docker.clear_empty_tables(v) - if t[k] and next(t[k]) == nil then - t[k] = nil - end - end - end - end - - return t -end - -local get_config = function(container_config, image_config) - local config = container_config.Config - local old_host_config = container_config.HostConfig - local old_network_setting = container_config.NetworkSettings.Networks or {} - - if config.WorkingDir == image_config.WorkingDir then - config.WorkingDir = "" - end - - if config.User == image_config.User then - config.User = "" - end - - if table_equal(config.Cmd, image_config.Cmd) then - config.Cmd = nil - end - - if table_equal(config.Entrypoint, image_config.Entrypoint) then - config.Entrypoint = nil - end - - if table_equal(config.ExposedPorts, image_config.ExposedPorts) then - config.ExposedPorts = nil - end - - config.Env = table_subtract(config.Env, image_config.Env) - config.Labels = table_subtract(config.Labels, image_config.Labels) - config.Volumes = map_subtract(config.Volumes, image_config.Volumes) - - if old_host_config.PortBindings and next(old_host_config.PortBindings) ~= nil then - config.ExposedPorts = {} - for p, v in pairs(old_host_config.PortBindings) do - config.ExposedPorts[p] = { HostPort=v[1] and v[1].HostPort } - end - end - - local network_setting = {} - local multi_network = false - local extra_network = {} - - for k, v in pairs(old_network_setting) do - if multi_network then - extra_network[k] = v - else - network_setting[k] = v - end - multi_network = true - end - - local host_config = old_host_config - host_config.Mounts = {} - for i, v in ipairs(container_config.Mounts) do - if v.Type == "volume" then - table.insert(host_config.Mounts, { - Type = v.Type, - Target = v.Destination, - Source = v.Source:match("([^/]+)\/_data"), - BindOptions = (v.Type == "bind") and {Propagation = v.Propagation} or nil, - ReadOnly = not v.RW - }) - end - end - - local create_body = config - create_body["HostConfig"] = host_config - create_body["NetworkingConfig"] = {EndpointsConfig = network_setting} - create_body = _docker.clear_empty_tables(create_body) or {} - extra_network = _docker.clear_empty_tables(extra_network) or {} - - return create_body, extra_network -end - -local upgrade = function(self, request) - _docker:clear_status() - - local container_info = self.containers:inspect({id = request.id}) - - if container_info.code > 300 and type(container_info.body) == "table" then - return container_info - end - - local image_name = container_info.body.Config.Image - if not image_name:match(".-:.+") then - image_name = image_name .. ":latest" - end - - local old_image_id = container_info.body.Image - local container_name = container_info.body.Name:sub(2) - - local image_id, res = update_image(self, image_name) - if res and res.code and res.code ~= 200 then - return res - end - - if image_id == old_image_id then - return {code = 305, body = {message = "Already up to date"}} - end - - local t = os.date("%Y%m%d%H%M%S") - _docker:append_status("Container: rename" .. " " .. container_name .. " to ".. container_name .. "_old_".. t .. "...") - res = self.containers:rename({name = container_name, query = { name = container_name .. "_old_" ..t }}) - if res and res.code and res.code < 300 then - _docker:append_status("done\n") - else - return res - end - - local image_config = self.images:inspect({id = old_image_id}).body.Config - local create_body, extra_network = get_config(container_info.body, image_config) - - -- create new container - _docker:append_status("Container: Create" .. " " .. container_name .. "...") - create_body = _docker.clear_empty_tables(create_body) - res = self.containers:create({name = container_name, body = create_body}) - if res and res.code and res.code > 300 then - return res - end - _docker:append_status("done\n") - - -- extra networks need to network connect action - for k, v in pairs(extra_network) do - _docker:append_status("Networks: Connect" .. " " .. container_name .. "...") - res = self.networks:connect({id = k, body = {Container = container_name, EndpointConfig = v}}) - if res and res.code and res.code > 300 then - return res - end - _docker:append_status("done\n") - end - - _docker:append_status("Container: " .. "Stop" .. " " .. container_name .. "_old_".. t .. "...") - res = self.containers:stop({name = container_name .. "_old_" ..t }) - if res and res.code and res.code < 305 then - _docker:append_status("done\n") - else - return res - end - - _docker:append_status("Container: " .. "Start" .. " " .. container_name .. "...") - res = self.containers:start({name = container_name}) - if res and res.code and res.code < 305 then - _docker:append_status("done\n") - else - return res - end - - _docker:clear_status() - return res -end - -local duplicate_config = function (self, request) - local container_info = self.containers:inspect({id = request.id}) - if container_info.code > 300 and type(container_info.body) == "table" then - return nil - end - - local old_image_id = container_info.body.Image - local image_config = self.images:inspect({id = old_image_id}).body.Config - - return get_config(container_info.body, image_config) -end - -_docker.new = function() - local host = nil - local port = nil - local socket_path = nil - local debug_path = nil - - if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then - host = uci:get("dockerd", "dockerman", "remote_host") or nil - port = uci:get("dockerd", "dockerman", "remote_port") or nil - else - socket_path = uci:get("dockerd", "dockerman", "socket_path") or "/var/run/docker.sock" - end - - local debug = uci:get_bool("dockerd", "dockerman", "debug") - if debug then - debug_path = uci:get("dockerd", "dockerman", "debug_path") or "/tmp/.docker_debug" - end - - local status_path = uci:get("dockerd", "dockerman", "status_path") or "/tmp/.docker_action_status" - - _docker.options = { - host = host, - port = port, - socket_path = socket_path, - debug = debug, - debug_path = debug_path, - status_path = status_path - } - - local _new = docker.new(_docker.options) - _new.containers_upgrade = upgrade - _new.containers_duplicate_config = duplicate_config - - return _new -end - -_docker.options.status_path = uci:get("dockerd", "dockerman", "status_path") or "/tmp/.docker_action_status" - -_docker.append_status=function(self,val) - if not val then - return - end - local file_docker_action_status=io.open(self.options.status_path, "a+") - file_docker_action_status:write(val) - file_docker_action_status:close() -end - -_docker.write_status=function(self,val) - if not val then - return - end - local file_docker_action_status=io.open(self.options.status_path, "w+") - file_docker_action_status:write(val) - file_docker_action_status:close() -end - -_docker.read_status=function(self) - return fs.readfile(self.options.status_path) -end - -_docker.clear_status=function(self) - fs.remove(self.options.status_path) -end - -local status_cb = function(res, source, handler) - res.body = res.body or {} - while true do - local chunk = source() - if chunk then - --standard output to res.body - table.insert(res.body, chunk) - handler(chunk) - else - return - end - end -end - ---{"status":"Pulling from library\/debian","id":"latest"} ---{"status":"Pulling fs layer","progressDetail":[],"id":"50e431f79093"} ---{"status":"Downloading","progressDetail":{"total":50381971,"current":2029978},"id":"50e431f79093","progress":"[==> ] 2.03MB\/50.38MB"} ---{"status":"Download complete","progressDetail":[],"id":"50e431f79093"} ---{"status":"Extracting","progressDetail":{"total":50381971,"current":17301504},"id":"50e431f79093","progress":"[=================> ] 17.3MB\/50.38MB"} ---{"status":"Pull complete","progressDetail":[],"id":"50e431f79093"} ---{"status":"Digest: sha256:a63d0b2ecbd723da612abf0a8bdb594ee78f18f691d7dc652ac305a490c9b71a"} ---{"status":"Status: Downloaded newer image for debian:latest"} -_docker.pull_image_show_status_cb = function(res, source) - return status_cb(res, source, function(chunk) - local json_parse = luci.jsonc.parse - local step = json_parse(chunk) - if type(step) == "table" then - local buf = _docker:read_status() - local num = 0 - local str = '\t' .. (step.id and (step.id .. ": ") or "") .. (step.status and step.status or "") .. (step.progress and (" " .. step.progress) or "").."\n" - if step.id then - buf, num = buf:gsub("\t"..step.id .. ": .-\n", str) - end - if num == 0 then - buf = buf .. str - end - _docker:write_status(buf) - end - end) -end - ---{"status":"Downloading from https://downloads.openwrt.org/releases/19.07.0/targets/x86/64/openwrt-19.07.0-x86-64-generic-rootfs.tar.gz"} ---{"status":"Importing","progressDetail":{"current":1572391,"total":3821714},"progress":"[====================\u003e ] 1.572MB/3.822MB"} ---{"status":"sha256:d5304b58e2d8cc0a2fd640c05cec1bd4d1229a604ac0dd2909f13b2b47a29285"} -_docker.import_image_show_status_cb = function(res, source) - return status_cb(res, source, function(chunk) - local json_parse = luci.jsonc.parse - local step = json_parse(chunk) - if type(step) == "table" then - local buf = _docker:read_status() - local num = 0 - local str = '\t' .. (step.status and step.status or "") .. (step.progress and (" " .. step.progress) or "").."\n" - if step.status then - buf, num = buf:gsub("\t"..step.status .. " .-\n", str) - end - if num == 0 then - buf = buf .. str - end - _docker:write_status(buf) - end - end) -end - -_docker.create_macvlan_interface = function(name, device, gateway, subnet) - if not fs.access("/etc/config/network") or not fs.access("/etc/config/firewall") then - return - end - - if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then - return - end - - local ip = require "luci.ip" - local if_name = "docker_"..name - local dev_name = "macvlan_"..name - local net_mask = tostring(ip.new(subnet):mask()) - local lan_interfaces - - -- add macvlan device - uci:delete("network", dev_name) - uci:set("network", dev_name, "device") - uci:set("network", dev_name, "name", dev_name) - uci:set("network", dev_name, "ifname", device) - uci:set("network", dev_name, "type", "macvlan") - uci:set("network", dev_name, "mode", "bridge") - - -- add macvlan interface - uci:delete("network", if_name) - uci:set("network", if_name, "interface") - uci:set("network", if_name, "proto", "static") - uci:set("network", if_name, "ifname", dev_name) - uci:set("network", if_name, "ipaddr", gateway) - uci:set("network", if_name, "netmask", net_mask) - uci:foreach("firewall", "zone", function(s) - if s.name == "lan" then - local interfaces - if type(s.network) == "table" then - interfaces = table.concat(s.network, " ") - uci:delete("firewall", s[".name"], "network") - else - interfaces = s.network and s.network or "" - end - interfaces = interfaces .. " " .. if_name - interfaces = interfaces:gsub("%s+", " ") - uci:set("firewall", s[".name"], "network", interfaces) - end - end) - - uci:commit("firewall") - uci:commit("network") - - os.execute("ifup " .. if_name) -end - -_docker.remove_macvlan_interface = function(name) - if not fs.access("/etc/config/network") or not fs.access("/etc/config/firewall") then - return - end - - if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then - return - end - - local if_name = "docker_"..name - local dev_name = "macvlan_"..name - uci:foreach("firewall", "zone", function(s) - if s.name == "lan" then - local interfaces - if type(s.network) == "table" then - interfaces = table.concat(s.network, " ") - else - interfaces = s.network and s.network or "" - end - interfaces = interfaces and interfaces:gsub(if_name, "") - interfaces = interfaces and interfaces:gsub("%s+", " ") - uci:set("firewall", s[".name"], "network", interfaces) - end - end) - - uci:delete("network", dev_name) - uci:delete("network", if_name) - uci:commit("network") - uci:commit("firewall") - - os.execute("ip link del " .. if_name) -end - -_docker.byte_format = function (byte) - if not byte then return 'NaN' end - local suff = {"B", "KB", "MB", "GB", "TB"} - for i=1, 5 do - if byte > 1024 and i < 5 then - byte = byte / 1024 - else - return string.format("%.2f %s", byte, suff[i]) - end - end -end - -return _docker diff --git a/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm b/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm deleted file mode 100644 index f96b2d72..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm +++ /dev/null @@ -1,147 +0,0 @@ - - - diff --git a/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm b/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm deleted file mode 100644 index a061a6db..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm +++ /dev/null @@ -1,7 +0,0 @@ -
- <% if self:cfgvalue(section) ~= false then %> - " type="submit"" <% if self.disable then %>disabled <% end %><%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> - <% else %> - - - <% end %> -
diff --git a/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm b/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm deleted file mode 100644 index e4b0cf7a..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm +++ /dev/null @@ -1,33 +0,0 @@ -
- - <%- if self.password then -%> - /> - <%- end -%> - 0, "data-choices", { self.keylist, self.vallist }) - %> /> - <%- if self.password then -%> -
- <% end %> -
diff --git a/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm b/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm deleted file mode 100644 index 244d2c10..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm +++ /dev/null @@ -1,9 +0,0 @@ -<% if self:cfgvalue(self.section) then section = self.section %> -
- <%+cbi/tabmenu%> -
- <%+cbi/ucisection%> -
-
-<% end %> - diff --git a/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm b/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm deleted file mode 100644 index 04f7bc2e..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm +++ /dev/null @@ -1,10 +0,0 @@ -<%+cbi/valueheader%> - /> - disabled <% end %><%= - attr("id", cbid) .. attr("name", cbid) .. attr("value", self.enabled or 1) .. - ifattr((self:cfgvalue(section) or self.default) == self.enabled, "checked", "checked") - %> /> - > -<%+cbi/valuefooter%> diff --git a/luci-app-dockerman/luasrc/view/dockerman/container.htm b/luci-app-dockerman/luasrc/view/dockerman/container.htm deleted file mode 100644 index 9f05d9d5..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/container.htm +++ /dev/null @@ -1,28 +0,0 @@ -
- - - diff --git a/luci-app-dockerman/luasrc/view/dockerman/container_console.htm b/luci-app-dockerman/luasrc/view/dockerman/container_console.htm deleted file mode 100644 index 1a4dc2a6..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/container_console.htm +++ /dev/null @@ -1,6 +0,0 @@ -
- -
- diff --git a/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm b/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm deleted file mode 100644 index 2e0650d9..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm +++ /dev/null @@ -1,332 +0,0 @@ - -
- -
- - -
-
-
- - diff --git a/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm b/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm deleted file mode 100644 index bbcd633e..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm +++ /dev/null @@ -1,81 +0,0 @@ - diff --git a/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm b/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm deleted file mode 100644 index d88e28be..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm +++ /dev/null @@ -1,91 +0,0 @@ - \ No newline at end of file diff --git a/luci-app-dockerman/luasrc/view/dockerman/images_import.htm b/luci-app-dockerman/luasrc/view/dockerman/images_import.htm deleted file mode 100644 index 0ad6e0fc..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/images_import.htm +++ /dev/null @@ -1,104 +0,0 @@ - - -
- disabled <% end %>/> - -
- - diff --git a/luci-app-dockerman/luasrc/view/dockerman/images_load.htm b/luci-app-dockerman/luasrc/view/dockerman/images_load.htm deleted file mode 100644 index b201510a..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/images_load.htm +++ /dev/null @@ -1,40 +0,0 @@ -
- disabled <% end %>/> - -
- diff --git a/luci-app-dockerman/luasrc/view/dockerman/logs.htm b/luci-app-dockerman/luasrc/view/dockerman/logs.htm deleted file mode 100644 index 6cd2cb09..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/logs.htm +++ /dev/null @@ -1,13 +0,0 @@ -<% if self.title == "Events" then %> -<%+header%> -

<%:Docker - Events%>

-
-

<%:Events%>

-<% end %> -
- -
-<% if self.title == "Events" then %> -
-<%+footer%> -<% end %> diff --git a/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm b/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm deleted file mode 100644 index 338fd59d..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm +++ /dev/null @@ -1,102 +0,0 @@ - - - -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/luci-app-dockerman/luasrc/view/dockerman/overview.htm b/luci-app-dockerman/luasrc/view/dockerman/overview.htm deleted file mode 100644 index e491fc51..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/overview.htm +++ /dev/null @@ -1,197 +0,0 @@ - - -
-
-
-
-
- -
-
-
-

<%:Containers%>

-

- <%- if self.containers_total ~= "-" then -%><%- end -%> - <%=self.containers_running%> - /<%=self.containers_total%> - <%- if self.containers_total ~= "-" then -%><%- end -%> -

-
-
-
-
-
-
-
- -
-
-
-

<%:Images%>

-

- <%- if self.images_total ~= "-" then -%><%- end -%> - <%=self.images_used%> - /<%=self.images_total%> - <%- if self.images_total ~= "-" then -%><%- end -%> -

-
-
-
-
-
-
-
- -
-
-
-

<%:Networks%>

-

- <%- if self.networks_total ~= "-" then -%><%- end -%> - <%=self.networks_total%> - - <%- if self.networks_total ~= "-" then -%><%- end -%> -

-
-
-
-
-
-
-
- -
-
-
-

<%:Volumes%>

-

- <%- if self.volumes_total ~= "-" then -%><%- end -%> - <%=self.volumes_total%> - - <%- if self.volumes_total ~= "-" then -%><%- end -%> -

-
-
-
-
diff --git a/luci-app-dockerman/luasrc/view/dockerman/volume_size.htm b/luci-app-dockerman/luasrc/view/dockerman/volume_size.htm deleted file mode 100644 index dc024734..00000000 --- a/luci-app-dockerman/luasrc/view/dockerman/volume_size.htm +++ /dev/null @@ -1,21 +0,0 @@ - \ No newline at end of file diff --git a/luci-app-dockerman/po/templates/dockerman.pot b/luci-app-dockerman/po/templates/dockerman.pot deleted file mode 100644 index 0d6a5de9..00000000 --- a/luci-app-dockerman/po/templates/dockerman.pot +++ /dev/null @@ -1,1002 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:619 -msgid "A list of kernel capabilities to add to the container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:69 -msgid "Access Control" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:223 -msgid "Add" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:595 -msgid "Add host device to the container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:571 -msgid "Advance" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:586 -msgid "Allocates an ephemeral host port for all of a container's exposed ports" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 -msgid "Allowed access interfaces" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:498 -msgid "Always pull image first" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:29 -msgid "" -"An overview with the relevant data is displayed here with which the LuCI " -"docker client is connected." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:43 -msgid "Api Version" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 -msgid "Auto create macvlan interface in Openwrt" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:18 -msgid "Auto start" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:134 -msgid "Available" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:47 -msgid "Base device" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:553 -msgid "Bind Mount(-v)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:554 -msgid "Bind mount a volume" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:596 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:652 -msgid "Block IO Weight" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:653 -msgid "" -"Block IO weight (relative weight) accepts a weight value between 10 and 1000" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:597 -msgid "" -"Block IO weight (relative weight) accepts a weight value between 10 and 1000." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:61 -msgid "Bridge (Support direct communication between MAC VLANs)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:42 -msgid "Bridge device" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:84 -msgid "" -"By entering a valid image name with the corresponding version, the docker " -"image can be downloaded from the configured registry." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:618 -msgid "CAP-ADD(--cap-add)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:581 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:635 -msgid "CPU Shares Weight" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:779 -msgid "CPU Useage" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:636 -msgid "" -"CPU shares relative weight, if 0 is set, the system will ignore the value " -"and use the default of 1024" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:582 -msgid "" -"CPU shares relative weight, if 0 is set, the system will ignore the value " -"and use the default of 1024." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:573 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:626 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:44 -msgid "CPUs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:159 -msgid "Can NOT connect to docker daemon, please check!!" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Cancel" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:60 -msgid "Client connection" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:347 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:687 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:182 -msgid "Command" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:100 -msgid "Command line" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:72 -msgid "Command line Error" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:17 -msgid "Configuration" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:36 -msgid "Configure the default bridge network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:405 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:707 -msgid "Connect" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:403 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:437 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:473 -msgid "Connect Network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:74 -msgid "Connect to remote docker endpoint" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:7 -msgid "Console" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:161 -msgid "Container Info" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:650 -msgid "Container Inspect" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:671 -msgid "Container Logs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:473 -msgid "Container Name" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:92 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:58 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:29 -msgid "Container detail" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:38 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:142 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:148 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:87 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:133 -msgid "Containers" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 -msgid "Create macvlan interface" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:465 -msgid "Create new docker container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:31 -msgid "Create new docker network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:312 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:153 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:92 -msgid "Created" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 -msgid "DELETING" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:371 -msgid "DNS" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:51 -msgid "Debug" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:35 -msgid "Default bridge" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:363 -msgid "Device" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:594 -msgid "Device(--device)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:396 -msgid "Disconnect" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:14 -msgid "Docker" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:12 -msgid "Docker - Configuration" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:192 -msgid "Docker - Container (%s)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:128 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:450 -msgid "Docker - Containers" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:3 -msgid "Docker - Events" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:72 -msgid "Docker - Images" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:15 -msgid "Docker - Network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:54 -msgid "Docker - Networks" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:28 -msgid "Docker - Overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:69 -msgid "Docker - Volumes" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:16 -msgid "Docker Daemon settings" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:489 -msgid "Docker Image" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:30 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:46 -msgid "Docker Root Dir" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:93 -msgid "Docker Socket Path" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:42 -msgid "Docker Version" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm:91 -msgid "Docker actions done." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:70 -msgid "DockerMan" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:13 -msgid "DockerMan is a simple docker manager client for LuCI" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:68 -msgid "DockerMan settings" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:172 -msgid "Download" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:82 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:40 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:85 -msgid "Driver" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:265 -msgid "Duplicate/Edit" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:120 -msgid "Enable IPv6" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:351 -msgid "Env" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:546 -msgid "Environmental Variable(-e)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:54 -msgid "Error" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:42 -#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:5 -msgid "Events" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:116 -msgid "Exclude IPs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:247 -msgid "Export" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:585 -msgid "Exposed All Ports(-P)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:560 -msgid "Exposed Ports(-p)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:55 -msgid "Fatal" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:6 -msgid "File" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:324 -msgid "Finish Time" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:220 -msgid "Force Remove" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:88 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:106 -msgid "Gateway" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:33 -msgid "Github" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:4 -msgid "Go to relevant configuration page" -msgstr "" - -#: applications/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json:3 -msgid "Grant UCI access for luci-app-dockerman" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:330 -msgid "Healthy" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:578 -msgid "Host Name" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:100 -msgid "Host or IP Address for the connection to a remote docker instance" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:300 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:142 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:78 -msgid "ID" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:44 -msgid "IP VLAN" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:111 -msgid "IP range" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:522 -msgid "IPv4 Address" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:132 -msgid "IPv6 Gateway" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:126 -msgid "IPv6 Subnet" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:304 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "Image" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:39 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:151 -msgid "Images" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:132 -msgid "Images overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:4 -msgid "Import" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:125 -msgid "Import Image" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:47 -msgid "Index Server Address" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:52 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:414 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:102 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:3 -msgid "Info" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:74 -msgid "Ingress" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:75 -msgid "" -"Ingress network is the network which provides the routing-mesh in swarm mode" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:8 -msgid "Inspect" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:477 -msgid "Interactive (-i)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 -msgid "Internal" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:66 -msgid "Ipvlan Mode" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:43 -msgid "" -"It replaces the daemon registry mirrors with a new set of registry mirrors" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:238 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:264 -msgid "Kill" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:70 -msgid "L2 bridge" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:71 -msgid "L3 bridge" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:359 -msgid "Links" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:527 -msgid "Links with other containers" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:283 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_load.htm:2 -msgid "Load" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:49 -msgid "Log Level" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:661 -msgid "Log driver options" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:9 -msgid "Logs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:43 -msgid "MAC VLAN" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:589 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:644 -msgid "Memory" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:783 -msgid "Memory Useage" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:645 -msgid "" -"Memory limit (format: []). Number is a positive integer. Unit " -"can be one of b, k, m, or g. Minimum is 4M" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:590 -msgid "" -"Memory limit (format: []). Number is a positive integer. Unit " -"can be one of b, k, m, or g. Minimum is 4M." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:57 -msgid "Mode" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:90 -msgid "Mount Point" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:603 -msgid "Mount tmpfs directory" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:343 -msgid "Mount/Volume" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:175 -msgid "Mounts" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:295 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:419 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:83 -msgid "Name" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:37 -msgid "Name of the network that can be selected during container creation" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:394 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:528 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:169 -msgid "Network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:80 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:36 -msgid "Network Name" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:40 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:518 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:169 -msgid "Networks" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:59 -msgid "Networks overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:104 -msgid "New" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:39 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "New tag" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:627 -msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:574 -msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:73 -msgid "" -"On this page all images are displayed that are available on the system and " -"with which a container can be created." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:193 -msgid "On this page, the selected container can be managed." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:82 -msgid "Options" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:45 -msgid "Overlay network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:37 -msgid "Overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 -msgid "PLEASE CONFIRM" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:84 -msgid "Parent Interface" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:64 -msgid "Pass-through (Mirror physical device to single MAC VLAN)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "Please input new tag" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:270 -msgid "Please input the PATH and select the file !" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:82 -msgid "Please input the PORT or HOST IP of remote docker instance!" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:86 -msgid "Please input the SOCKET PATH of docker daemon!" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Plese input command line:" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:355 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:172 -msgid "Ports" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 -msgid "Ports allowed to be accessed" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:62 -msgid "Private (Prevent communication between MAC VLANs)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:504 -msgid "Privileged" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:561 -msgid "Publish container's port(s) to the host" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:100 -msgid "Pull" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:83 -msgid "Pull Image" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:42 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:48 -msgid "Registry Mirrors" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:73 -msgid "Remote Endpoint" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:99 -msgid "Remote Host" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:106 -msgid "Remote Port" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:274 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:274 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:210 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:115 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:108 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:173 -msgid "Remove" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:43 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:82 -msgid "Remove tag" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:171 -msgid "Rename" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:145 -msgid "RepoTags" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:469 -msgid "Resolve CLI" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:4 -msgid "Resources" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:220 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:244 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:87 -msgid "Restart" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:334 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:427 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:510 -msgid "Restart Policy" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 -msgid "Restrict external access to the network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:31 -msgid "Reveal/hide password" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:566 -msgid "Run command" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:230 -msgid "Save" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:533 -msgid "Set custom DNS servers" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:547 -msgid "Set environment variables to inside the container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:50 -msgid "Set the logging level" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:151 -msgid "Size" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:61 -msgid "" -"Specifies where the Docker daemon will listen for client connections " -"(default: unix:///var/run/docker.sock)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:211 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:234 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 -msgid "Start" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:319 -msgid "Start Time" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:789 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:790 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:5 -msgid "Stats" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:308 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:165 -msgid "Status" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:229 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:254 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 -msgid "Stop" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Submit" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:86 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:101 -msgid "Subnet" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:375 -msgid "Sysctl" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:610 -msgid "Sysctl(--sysctl)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:611 -msgid "Sysctls (kernel parameters) options" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:792 -msgid "TOP" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:483 -msgid "TTY (-t)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:56 -msgid "TX/RX" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:579 -msgid "The hostname to use for the container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:662 -msgid "The logging configuration for this container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:540 -msgid "" -"The user that commands are run as inside the container.(format: name|uid[:" -"group|gid])" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:129 -msgid "" -"This page displays all containers that have been created on the connected " -"docker host." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:55 -msgid "" -"This page displays all docker networks that have been created on the " -"connected docker host." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:367 -msgid "Tmpfs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:602 -msgid "Tmpfs(--tmpfs)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:45 -msgid "Total Memory" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:697 -msgid "UID" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:297 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:336 -msgid "Update" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:256 -msgid "Upgrade" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:7 -msgid "Upload" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:303 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:304 -msgid "Upload Error" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:294 -msgid "Upload Success" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:48 -msgid "Upload/Download" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:339 -msgid "User" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:539 -msgid "User(-u)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:63 -msgid "VEPA (Virtual Ethernet Port Aggregator)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:41 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:187 -msgid "Volumes" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:73 -msgid "Volumes overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:53 -msgid "Warning" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:126 -msgid "" -"When pressing the Import button, both a local image can be loaded onto the " -"system and a valid image tar can be downloaded from remote." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 -msgid "" -"Which Port(s) can be accessed, it's not restricted by the Allowed Access " -"interfaces configuration. Use this configuration with caution!" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 -msgid "" -"Which interface(s) can access containers under the bridge network, fill-in " -"Interface Name" -msgstr "" diff --git a/luci-app-dockerman/po/zh-cn/dockerman.po b/luci-app-dockerman/po/zh-cn/dockerman.po deleted file mode 100644 index 2bdc11b8..00000000 --- a/luci-app-dockerman/po/zh-cn/dockerman.po +++ /dev/null @@ -1,1094 +0,0 @@ -msgid "" -msgstr "" -"PO-Revision-Date: 2021-03-19 04:16+0000\n" -"Last-Translator: Eric \n" -"Language-Team: Chinese (Simplified) \n" -"Language: zh_Hans\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5.2-dev\n" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:619 -msgid "A list of kernel capabilities to add to the container" -msgstr "要添加到容器的内核功能列表" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:69 -msgid "Access Control" -msgstr "访问控制" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:223 -msgid "Add" -msgstr "新增" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:595 -msgid "Add host device to the container" -msgstr "将主机设备添加到容器" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:571 -msgid "Advance" -msgstr "高级选项" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:586 -msgid "Allocates an ephemeral host port for all of a container's exposed ports" -msgstr "为容器的所有暴露端口分配临时主机端口" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 -msgid "Allowed access interfaces" -msgstr "允许的访问接口" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:498 -msgid "Always pull image first" -msgstr "总是先拉取镜像" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:29 -msgid "" -"An overview with the relevant data is displayed here with which the LuCI " -"docker client is connected." -msgstr "在此展示与LuCI docker客户端相连接的相关数据的概览。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:43 -msgid "Api Version" -msgstr "Api 版本" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 -msgid "Auto create macvlan interface in Openwrt" -msgstr "在 Openwrt 中自动创建 macvlan 界面" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:18 -msgid "Auto start" -msgstr "自动启动" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:134 -msgid "Available" -msgstr "可用" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:47 -msgid "Base device" -msgstr "基设备" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:553 -msgid "Bind Mount(-v)" -msgstr "绑定挂载(-v)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:554 -msgid "Bind mount a volume" -msgstr "绑定挂载卷" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:596 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:652 -msgid "Block IO Weight" -msgstr "块 IO 权重" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:653 -msgid "" -"Block IO weight (relative weight) accepts a weight value between 10 and 1000" -msgstr "块 IO 权重(相对权重)接受10到1000之间的数值" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:597 -msgid "" -"Block IO weight (relative weight) accepts a weight value between 10 and 1000." -msgstr "块 IO 权重(相对权重)接受10到1000之间的数值。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:61 -msgid "Bridge (Support direct communication between MAC VLANs)" -msgstr "桥接(支持 MAC VLAN 之间的直接通信)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:42 -msgid "Bridge device" -msgstr "Bridge device" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:84 -msgid "" -"By entering a valid image name with the corresponding version, the docker " -"image can be downloaded from the configured registry." -msgstr "" -"通过输入具有相应版本的有效映像名称,可以从镜像存储中心(Registry)中下载" -"docker映像。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:618 -msgid "CAP-ADD(--cap-add)" -msgstr "权限控制(--cap-add)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:581 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:635 -msgid "CPU Shares Weight" -msgstr "CPU 共享权重" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:779 -msgid "CPU Useage" -msgstr "CPU 使用率" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:636 -msgid "" -"CPU shares relative weight, if 0 is set, the system will ignore the value " -"and use the default of 1024" -msgstr "CPU 共享相对权重,如果设置为 0,则系统将忽略该值并使用默认值 1024" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:582 -msgid "" -"CPU shares relative weight, if 0 is set, the system will ignore the value " -"and use the default of 1024." -msgstr "CPU 共享相对权重,如果设置为 0,则系统将忽略该值并使用默认值 1024。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:573 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:626 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:44 -msgid "CPUs" -msgstr "线程数量" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:159 -msgid "Can NOT connect to docker daemon, please check!!" -msgstr "无法连接到docker守护进程(docker daemon),请检查!!" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Cancel" -msgstr "取消" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:60 -msgid "Client connection" -msgstr "客户端连接" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:347 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:687 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:182 -msgid "Command" -msgstr "命令" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:100 -msgid "Command line" -msgstr "命令行" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:72 -msgid "Command line Error" -msgstr "命令行错误" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:17 -msgid "Configuration" -msgstr "配置" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:36 -msgid "Configure the default bridge network" -msgstr "配置默认桥接网络" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:405 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:707 -msgid "Connect" -msgstr "连接" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:403 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:437 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:473 -msgid "Connect Network" -msgstr "连接网络" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:74 -msgid "Connect to remote docker endpoint" -msgstr "连接到远程docker" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:7 -msgid "Console" -msgstr "控制台" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:161 -msgid "Container Info" -msgstr "容器信息" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:650 -msgid "Container Inspect" -msgstr "检查容器" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:671 -msgid "Container Logs" -msgstr "容器日志" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:473 -msgid "Container Name" -msgstr "容器名称" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:92 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:58 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:29 -msgid "Container detail" -msgstr "容器详情" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:38 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:142 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:148 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:87 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:133 -msgid "Containers" -msgstr "容器" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 -msgid "Create macvlan interface" -msgstr "创建 macvlan 接口" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:465 -msgid "Create new docker container" -msgstr "创建 docker 容器" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:31 -msgid "Create new docker network" -msgstr "创建 docker 网络" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:312 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:153 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:92 -msgid "Created" -msgstr "创建时间" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 -msgid "DELETING" -msgstr "删除中" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:371 -msgid "DNS" -msgstr "DNS" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:51 -msgid "Debug" -msgstr "调试" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:35 -msgid "Default bridge" -msgstr "默认桥接" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:363 -msgid "Device" -msgstr "设备" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:594 -msgid "Device(--device)" -msgstr "设备(--device)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:396 -msgid "Disconnect" -msgstr "断开" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:14 -msgid "Docker" -msgstr "Docker" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:12 -msgid "Docker - Configuration" -msgstr "Docker - 配置" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:192 -msgid "Docker - Container (%s)" -msgstr "Docker - 容器 (%s)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:128 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:450 -msgid "Docker - Containers" -msgstr "Docker - 容器" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:3 -msgid "Docker - Events" -msgstr "Docker - 事件" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:72 -msgid "Docker - Images" -msgstr "Docker - 镜像" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:15 -msgid "Docker - Network" -msgstr "Docker - 网络" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:54 -msgid "Docker - Networks" -msgstr "Docker - 网络" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:28 -msgid "Docker - Overview" -msgstr "Docker - 概览" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:69 -msgid "Docker - Volumes" -msgstr "Docker - 存储卷" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:16 -msgid "Docker Daemon settings" -msgstr "Docker 服务端(Docker Daemon)设置" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:489 -msgid "Docker Image" -msgstr "Docker 镜像" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:30 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:46 -msgid "Docker Root Dir" -msgstr "Docker 根目录" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:93 -msgid "Docker Socket Path" -msgstr "Docker 套接字路径" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:42 -msgid "Docker Version" -msgstr "Docker 版本" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm:91 -msgid "Docker actions done." -msgstr "Docker 执行完成。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:70 -msgid "DockerMan" -msgstr "DockerMan" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:13 -msgid "DockerMan is a simple docker manager client for LuCI" -msgstr "DockerMan是用于LuCI的简单docker管理器客户端" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:68 -msgid "DockerMan settings" -msgstr "DockerMan设置" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:172 -msgid "Download" -msgstr "下载" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:82 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:40 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:85 -msgid "Driver" -msgstr "驱动" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:265 -msgid "Duplicate/Edit" -msgstr "复制/编辑" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:120 -msgid "Enable IPv6" -msgstr "启用 IPv6" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:351 -msgid "Env" -msgstr "环境变量" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:546 -msgid "Environmental Variable(-e)" -msgstr "环境变量(-e)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:54 -msgid "Error" -msgstr "错误" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:42 -#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:5 -msgid "Events" -msgstr "事件" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:116 -msgid "Exclude IPs" -msgstr "排除 IP" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:247 -msgid "Export" -msgstr "导出" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:585 -msgid "Exposed All Ports(-P)" -msgstr "暴露所有端口(-P)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:560 -msgid "Exposed Ports(-p)" -msgstr "暴露端口(-p)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:55 -msgid "Fatal" -msgstr "致命的" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:6 -msgid "File" -msgstr "文件" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:324 -msgid "Finish Time" -msgstr "完成时间" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:220 -msgid "Force Remove" -msgstr "强制移除" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:88 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:106 -msgid "Gateway" -msgstr "网关" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:33 -msgid "Github" -msgstr "Github" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:4 -msgid "Go to relevant configuration page" -msgstr "进入相关配置页面" - -#: applications/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json:3 -msgid "Grant UCI access for luci-app-dockerman" -msgstr "授予 UCI 访问 luci-app-dockerman 的权限" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:330 -msgid "Healthy" -msgstr "健康" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:578 -msgid "Host Name" -msgstr "主机名" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:100 -msgid "Host or IP Address for the connection to a remote docker instance" -msgstr "连接到远程Docker实例的主机名或IP地址" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:300 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:142 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:78 -msgid "ID" -msgstr "ID" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:44 -msgid "IP VLAN" -msgstr "IP VLAN" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:111 -msgid "IP range" -msgstr "IP 范围" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:522 -msgid "IPv4 Address" -msgstr "IPv4 地址" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:132 -msgid "IPv6 Gateway" -msgstr "IPv6 网关" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:126 -msgid "IPv6 Subnet" -msgstr "IPv6 子网" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:304 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "Image" -msgstr "镜像" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:39 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:151 -msgid "Images" -msgstr "镜像" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:132 -msgid "Images overview" -msgstr "镜像概览" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:4 -msgid "Import" -msgstr "导入" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:125 -msgid "Import Image" -msgstr "导入镜像" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:47 -msgid "Index Server Address" -msgstr "索引服务器地址" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:52 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:414 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:102 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:3 -msgid "Info" -msgstr "信息" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:74 -msgid "Ingress" -msgstr "入口" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:75 -msgid "" -"Ingress network is the network which provides the routing-mesh in swarm mode" -msgstr "入口网络是以群模式提供路由网格的网络" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:8 -msgid "Inspect" -msgstr "检查" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:477 -msgid "Interactive (-i)" -msgstr "交互(-i)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 -msgid "Internal" -msgstr "内部" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:66 -msgid "Ipvlan Mode" -msgstr "Ipvlan 模式" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:43 -msgid "" -"It replaces the daemon registry mirrors with a new set of registry mirrors" -msgstr "" -"设置新的镜像存储中心(Registry)镜像源,这将取代服务端(daemon)配置的镜像存" -"储中心(Registry)的镜像源" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:238 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:264 -msgid "Kill" -msgstr "强制关闭" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:70 -msgid "L2 bridge" -msgstr "L2 桥接" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:71 -msgid "L3 bridge" -msgstr "L3 桥接" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:359 -msgid "Links" -msgstr "链接" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:527 -msgid "Links with other containers" -msgstr "与其他容器的链接" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:283 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_load.htm:2 -msgid "Load" -msgstr "负载" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:49 -msgid "Log Level" -msgstr "日志等级" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:661 -msgid "Log driver options" -msgstr "日志驱动选项" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:9 -msgid "Logs" -msgstr "日志" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:43 -msgid "MAC VLAN" -msgstr "MAC VLAN" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:589 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:644 -msgid "Memory" -msgstr "内存" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:783 -msgid "Memory Useage" -msgstr "内存使用率" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:645 -msgid "" -"Memory limit (format: []). Number is a positive integer. Unit " -"can be one of b, k, m, or g. Minimum is 4M" -msgstr "" -"内存限制(格式:<数字>[<单位>])。数字是正整数。单位可以是 b、k、m 或 g 之一。" -"最小值为 4M" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:590 -msgid "" -"Memory limit (format: []). Number is a positive integer. Unit " -"can be one of b, k, m, or g. Minimum is 4M." -msgstr "" -"内存限制(格式:<数字>[<单位>])。数字是正整数。单位可以是 b、k、m 或 g 之一。" -"最小值为 4M。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:57 -msgid "Mode" -msgstr "模式" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:90 -msgid "Mount Point" -msgstr "挂载点" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:603 -msgid "Mount tmpfs directory" -msgstr "挂载 tmpfs 目录" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:343 -msgid "Mount/Volume" -msgstr "挂载/卷" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:175 -msgid "Mounts" -msgstr "挂载点" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:295 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:419 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:83 -msgid "Name" -msgstr "名称" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:37 -msgid "Name of the network that can be selected during container creation" -msgstr "在容器创建时可以选择网络的名称" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:394 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:528 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:169 -msgid "Network" -msgstr "网络" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:80 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:36 -msgid "Network Name" -msgstr "网络名称" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:40 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:518 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:169 -msgid "Networks" -msgstr "网络" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:59 -msgid "Networks overview" -msgstr "网络概览" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:104 -msgid "New" -msgstr "新建" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:39 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "New tag" -msgstr "新建标签" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:627 -msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit" -msgstr "CPU 数量。数字是小数。0.000 表示没有限制" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:574 -msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit." -msgstr "CPU 数量。数字是小数。0.000 表示没有限制。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:73 -msgid "" -"On this page all images are displayed that are available on the system and " -"with which a container can be created." -msgstr "在此页面上,显示系统上可用的所有镜像文件,并可以用它们来创建容器" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:193 -msgid "On this page, the selected container can be managed." -msgstr "在此页面可以管理所选的容器。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:82 -msgid "Options" -msgstr "选项" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:45 -msgid "Overlay network" -msgstr "Overlay network" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:37 -msgid "Overview" -msgstr "概览" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 -msgid "PLEASE CONFIRM" -msgstr "请确认" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:84 -msgid "Parent Interface" -msgstr "父接口" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:64 -msgid "Pass-through (Mirror physical device to single MAC VLAN)" -msgstr "直通(将物理设备镜像到单独的 MAC VLAN)" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "Please input new tag" -msgstr "请输入新的标签" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:270 -msgid "Please input the PATH and select the file !" -msgstr "请输入路径并选择文件!" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:82 -msgid "Please input the PORT or HOST IP of remote docker instance!" -msgstr "请输入合法的远程docker实例端口和主机IP" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:86 -msgid "Please input the SOCKET PATH of docker daemon!" -msgstr "请输入合法docker服务端(docker daemon)的SOCKET地址" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Plese input command line:" -msgstr "请输入 的命令行:" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:355 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:172 -msgid "Ports" -msgstr "端口" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 -msgid "Ports allowed to be accessed" -msgstr "允许访问的端口" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:62 -msgid "Private (Prevent communication between MAC VLANs)" -msgstr "专用(阻止 MAC VLAN 之间的通信)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:504 -msgid "Privileged" -msgstr "特权模式" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:561 -msgid "Publish container's port(s) to the host" -msgstr "将容器的端口发布到主机" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:100 -msgid "Pull" -msgstr "拉取" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:83 -msgid "Pull Image" -msgstr "拉取镜像" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:42 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:48 -msgid "Registry Mirrors" -msgstr "镜像加速器" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:73 -msgid "Remote Endpoint" -msgstr "远程实例" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:99 -msgid "Remote Host" -msgstr "远程主机" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:106 -msgid "Remote Port" -msgstr "远程端口" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:274 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:274 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:210 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:115 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:108 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:173 -msgid "Remove" -msgstr "移除" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:43 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:82 -msgid "Remove tag" -msgstr "移除标签" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:171 -msgid "Rename" -msgstr "重命名" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:145 -msgid "RepoTags" -msgstr "仓库标签" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:469 -msgid "Resolve CLI" -msgstr "解析 CLI" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:4 -msgid "Resources" -msgstr "资源" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:220 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:244 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:87 -msgid "Restart" -msgstr "重新启动" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:334 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:427 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:510 -msgid "Restart Policy" -msgstr "重启策略" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 -msgid "Restrict external access to the network" -msgstr "限制外部网络访问" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:31 -msgid "Reveal/hide password" -msgstr "显示/隐藏 密码" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:566 -msgid "Run command" -msgstr "运行命令" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:230 -msgid "Save" -msgstr "保存" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:533 -msgid "Set custom DNS servers" -msgstr "设置自定义 DNS 服务器" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:547 -msgid "Set environment variables to inside the container" -msgstr "在容器内部设置环境变量" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:50 -msgid "Set the logging level" -msgstr "设置日志记录级别" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:151 -msgid "Size" -msgstr "大小" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:61 -msgid "" -"Specifies where the Docker daemon will listen for client connections " -"(default: unix:///var/run/docker.sock)" -msgstr "" -"指定Docker服务端(Docker daemon)将在何处侦听客户端连接(默认: unix:///var/" -"run/docker.sock)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:211 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:234 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 -msgid "Start" -msgstr "启动" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:319 -msgid "Start Time" -msgstr "开始时间" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:789 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:790 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:5 -msgid "Stats" -msgstr "状态" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:308 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:165 -msgid "Status" -msgstr "状态" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:229 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:254 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 -msgid "Stop" -msgstr "停止" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Submit" -msgstr "提交" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:86 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:101 -msgid "Subnet" -msgstr "子网" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:375 -msgid "Sysctl" -msgstr "系统控制" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:610 -msgid "Sysctl(--sysctl)" -msgstr "系统控制(--sysctl)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:611 -msgid "Sysctls (kernel parameters) options" -msgstr "系统控制(内核参数)选项" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:792 -msgid "TOP" -msgstr "TOP" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:483 -msgid "TTY (-t)" -msgstr "TTY(-t)" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:56 -msgid "TX/RX" -msgstr "发射/接收" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:579 -msgid "The hostname to use for the container" -msgstr "容器使用的主机名" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:662 -msgid "The logging configuration for this container" -msgstr "该容器的日志记录配置" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:540 -msgid "" -"The user that commands are run as inside the container.(format: name|uid[:" -"group|gid])" -msgstr "在容器中以用户运行命令。(格式:name|uid[:group|gid])" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:129 -msgid "" -"This page displays all containers that have been created on the connected " -"docker host." -msgstr "此页面显示在连接的Docker主机上已创建的所有容器。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:55 -msgid "" -"This page displays all docker networks that have been created on the " -"connected docker host." -msgstr "此页面显示在已连接的Docker主机上创建的所有Docker网络。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:367 -msgid "Tmpfs" -msgstr "Tmpfs" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:602 -msgid "Tmpfs(--tmpfs)" -msgstr "Tmpfs(--tmpfs)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:45 -msgid "Total Memory" -msgstr "总内存" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:697 -msgid "UID" -msgstr "UID" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:297 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:336 -msgid "Update" -msgstr "更新" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:256 -msgid "Upgrade" -msgstr "升级" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:7 -msgid "Upload" -msgstr "上传" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:303 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:304 -msgid "Upload Error" -msgstr "上传错误" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:294 -msgid "Upload Success" -msgstr "上传成功" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:48 -msgid "Upload/Download" -msgstr "上传/下载" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:339 -msgid "User" -msgstr "用户" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:539 -msgid "User(-u)" -msgstr "用户(-u)" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:63 -msgid "VEPA (Virtual Ethernet Port Aggregator)" -msgstr "VEPA(虚拟以太网端口聚合器)" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:41 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:187 -msgid "Volumes" -msgstr "存储卷" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:73 -msgid "Volumes overview" -msgstr "卷概览" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:53 -msgid "Warning" -msgstr "警告" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:126 -msgid "" -"When pressing the Import button, both a local image can be loaded onto the " -"system and a valid image tar can be downloaded from remote." -msgstr "" -"按下导入按钮时,既可以将本地镜像文件加载到系统上,也可以从远程下载有效的Tar格" -"式的镜像文件。" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 -msgid "" -"Which Port(s) can be accessed, it's not restricted by the Allowed Access " -"interfaces configuration. Use this configuration with caution!" -msgstr "设置可以被访问的端口,该配置不受“允许的访问接口”配置的限制。请谨慎使用该配置选项!" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 -msgid "" -"Which interface(s) can access containers under the bridge network, fill-in " -"Interface Name" -msgstr "哪些接口可以访问桥接网络下的容器,请填写接口名称" - -#~ msgid "Containers allowed to be accessed" -#~ msgstr "允许访问的容器" - -#~ msgid "" -#~ "Which container(s) under bridge network can be accessed, even from " -#~ "interfaces that are not allowed, fill-in Container Id or Name" -#~ msgstr "" -#~ "桥接网络下哪些容器可以访问,即使是不允许从接口访问,也要填写容器 ID 或名称" - -#~ msgid "Connect to remote endpoint" -#~ msgstr "连接到远程终端" - -#~ msgid "Global settings" -#~ msgstr "全局设定" - -#~ msgid "Path" -#~ msgstr "路径" - -#~ msgid "Please input the PATH !" -#~ msgstr "请输入合法路径!" - -#~ msgid "Setting" -#~ msgstr "设置" - -#~ msgid "Specifies where the Docker daemon will listen for client connections" -#~ msgstr "指定Docker服务端(Docker daemon)侦听客户端连接的位置" - -#~ msgid "Docker Container" -#~ msgstr "Docker 容器" - -#~ msgid "" -#~ "DockerMan is a Simple Docker manager client for LuCI, If you have any " -#~ "issue please visit:" -#~ msgstr "" -#~ "DockerMan 是一个简单的 LuCI 客户端 Docker 管理器,如果您有任何问题,请访" -#~ "问:" - -#~ msgid "Import Images" -#~ msgstr "导入镜像" - -#~ msgid "New Container" -#~ msgstr "新建容器" - -#~ msgid "New Network" -#~ msgstr "新建网络" - -#~ msgid "Macvlan Mode" -#~ msgstr "Macvlan 模式" - -#~ msgid "" -#~ "Daemon unix socket (unix:///var/run/docker.sock) or TCP Remote Hosts " -#~ "(tcp://0.0.0.0:2375), default: unix:///var/run/docker.sock" -#~ msgstr "" -#~ "守护进程 unix 套接字 (unix:///var/run/docker.sock) 或 TCP 远程主机 " -#~ "(tcp://0.0.0.0:2375),默认值:unix:///var/run/docker.sock" - -#~ msgid "Docker Daemon" -#~ msgstr "Docker 服务端" - -#~ msgid "Dockerman connect to remote endpoint" -#~ msgstr "Dockerman 连接到远程端点" - -#~ msgid "Enable" -#~ msgstr "启用" - -#~ msgid "Server Host" -#~ msgstr "服务器主机" - -#~ msgid "Contaienr Info" -#~ msgstr "容器信息" diff --git a/luci-app-dockerman/po/zh_Hans b/luci-app-dockerman/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-dockerman/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-dockerman/postinst b/luci-app-dockerman/postinst deleted file mode 100644 index b0db1cb8..00000000 --- a/luci-app-dockerman/postinst +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -/init.sh env -touch /etc/config/dockerd -uci set dockerd.dockerman=dockerman -uci set dockerd.dockerman.socket_path=`uci get dockerd.dockerman.socket_path 2&> /dev/null || echo '/var/run/docker.sock'` -uci set dockerd.dockerman.status_path=`uci get dockerd.dockerman.status_path 2&> /dev/null || echo '/tmp/.docker_action_status'` -uci set dockerd.dockerman.debug=`uci get dockerd.dockerman.debug 2&> /dev/null || echo 'false'` -uci set dockerd.dockerman.debug_path=`uci get dockerd.dockerman.debug_path 2&> /dev/null || echo '/tmp/.docker_debug'` -uci set dockerd.dockerman.remote_port=`uci get dockerd.dockerman.remote_port 2&> /dev/null || echo '2375'` -uci set dockerd.dockerman.remote_endpoint=`uci get dockerd.dockerman.remote_endpoint 2&> /dev/null || echo '0'` -uci del_list dockerd.dockerman.ac_allowed_interface='br-lan' -uci add_list dockerd.dockerman.ac_allowed_interface='br-lan' -uci commit dockerd \ No newline at end of file diff --git a/luci-app-dockerman/root/etc/init.d/dockerman b/luci-app-dockerman/root/etc/init.d/dockerman deleted file mode 100755 index 80309aea..00000000 --- a/luci-app-dockerman/root/etc/init.d/dockerman +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=99 -USE_PROCD=1 -# PROCD_DEBUG=1 -config_load 'dockerd' -# config_get daemon_ea "dockerman" daemon_ea -_DOCKERD=/etc/init.d/dockerd - -docker_running(){ - docker version > /dev/null 2>&1 - return $? -} - -add_ports() { - [ $# -eq 0 ] && return - $($_DOCKERD running) && docker_running || return 1 - ids=$@ - for id in $ids; do - id=$(docker ps --filter "ID=$id" --quiet) - [ -z "$id" ] && { - echo "Docker containner not running"; - return 1; - } - ports=$(docker ps --filter "ID=$id" --format "{{.Ports}}") - # echo "$ports" - for port in $ports; do - echo "$port" | grep -qE "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:.*$" || continue; - [ "${port: -1}" == "," ] && port="${port:0:-1}" - local protocol="" - [ "${port%tcp}" != "$port" ] && protocol="/tcp" - [ "${port%udp}" != "$port" ] && protocol="/udp" - [ "$protocol" == "" ] && continue - port="${port%%->*}" - port="${port##*:}" - uci_add_list dockerd dockerman ac_allowed_ports "${port}${protocol}" - done - done - uci_commit dockerd -} - - -convert() { - _convert() { - _id=$1 - _id=$(docker ps --all --filter "ID=$_id" --quiet) - if [ -z "$_id" ]; then - uci_remove_list dockerd dockerman ac_allowed_container "$1" - return - fi - if /etc/init.d/dockerman add_ports "$_id"; then - uci_remove_list dockerd dockerman ac_allowed_container "$_id" - fi - } - config_list_foreach dockerman ac_allowed_container _convert - uci_commit dockerd -} - -iptables_append(){ - # Wait for a maximum of 10 second per command, retrying every millisecond - local iptables_wait_args="--wait 10 --wait-interval 1000" - if ! iptables ${iptables_wait_args} --check $@ 2>/dev/null; then - iptables ${iptables_wait_args} -A $@ 2>/dev/null - fi -} - -init_dockerman_chain(){ - iptables -N DOCKER-MAN >/dev/null 2>&1 - iptables -F DOCKER-MAN >/dev/null 2>&1 - iptables -D DOCKER-USER -j DOCKER-MAN >/dev/null 2>&1 - iptables -I DOCKER-USER -j DOCKER-MAN >/dev/null 2>&1 -} - -delete_dockerman_chain(){ - iptables -D DOCKER-USER -j DOCKER-MAN >/dev/null 2>&1 - iptables -F DOCKER-MAN >/dev/null 2>&1 - iptables -X DOCKER-MAN >/dev/null 2>&1 -} - -add_allowed_interface(){ - iptables_append DOCKER-MAN -i $1 -o docker0 -j RETURN -} - -add_allowed_ports(){ - port=$1 - if [ "${port%/tcp}" != "$port" ]; then - iptables_append DOCKER-MAN -p tcp -m conntrack --ctorigdstport ${port%/tcp} --ctdir ORIGINAL -j RETURN - elif [ "${port%/udp}" != "$port" ]; then - iptables_append DOCKER-MAN -p udp -m conntrack --ctorigdstport ${port%/udp} --ctdir ORIGINAL -j RETURN - fi -} - -handle_allowed_ports(){ - config_list_foreach "dockerman" "ac_allowed_ports" add_allowed_ports -} - -handle_allowed_interface(){ - config_list_foreach "dockerman" "ac_allowed_interface" add_allowed_interface - iptables_append DOCKER-MAN -m conntrack --ctstate ESTABLISHED,RELATED -o docker0 -j RETURN >/dev/null 2>&1 - iptables_append DOCKER-MAN -m conntrack --ctstate NEW,INVALID -o docker0 -j DROP >/dev/null 2>&1 - iptables_append DOCKER-MAN -j RETURN >/dev/null 2>&1 -} - -start_service(){ - [ -x "$_DOCKERD" ] && $($_DOCKERD enabled) || return 0 - delete_dockerman_chain - $($_DOCKERD running) && docker_running || return 0 - init_dockerman_chain - handle_allowed_ports - handle_allowed_interface -} - -stop_service(){ - delete_dockerman_chain -} - -service_triggers() { - procd_add_reload_trigger 'dockerd' -} - -reload_service() { - start -} - -boot() { - sleep 5s - start -} - -extra_command "add_ports" "Add allowed ports based on the container ID(s)" -extra_command "convert" "Convert Ac allowed container to AC allowed ports" diff --git a/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman b/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman deleted file mode 100755 index 4358728a..00000000 --- a/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -. $IPKG_INSTROOT/lib/functions.sh - -[ -x "$(command -v dockerd)" ] && chmod +x /etc/init.d/dockerman && /etc/init.d/dockerman enable >/dev/null 2>&1 -sed -i 's/self:cfgvalue(section) or {}/self:cfgvalue(section) or self.default or {}/' /usr/lib/lua/luci/view/cbi/dynlist.htm -/etc/init.d/uhttpd restart >/dev/null 2>&1 -rm -fr /tmp/luci-indexcache /tmp/luci-modulecache >/dev/null 2>&1 -touch /etc/config/dockerd -ls /etc/rc.d/*dockerd &> /dev/null && uci -q set dockerd.globals.auto_start="1" || uci -q set dockerd.globals.auto_start="0" -uci -q batch <<-EOF >/dev/null - set uhttpd.main.script_timeout="3600" - commit uhttpd - set dockerd.dockerman=dockerman - set dockerd.dockerman.socket_path='/var/run/docker.sock' - set dockerd.dockerman.status_path='/tmp/.docker_action_status' - set dockerd.dockerman.debug='false' - set dockerd.dockerman.debug_path='/tmp/.docker_debug' - set dockerd.dockerman.remote_endpoint='0' - - del_list dockerd.dockerman.ac_allowed_interface='br-lan' - add_list dockerd.dockerman.ac_allowed_interface='br-lan' - - commit dockerd -EOF -# remove dockerd firewall -config_load dockerd -remove_firewall(){ - cfg=${1} - uci_remove dockerd ${1} -} -config_foreach remove_firewall firewall -# Convert ac_allowed_container to ac_allowed_ports -(sleep 30s && /etc/init.d/dockerman convert;/etc/init.d/dockerman restart) & - -exit 0 diff --git a/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json b/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json deleted file mode 100644 index 78c2c641..00000000 --- a/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-dockerman": { - "description": "Grant UCI access for luci-app-dockerman", - "read": { - "uci": [ "dockerd" ] - }, - "write": { - "uci": [ "dockerd" ] - } - } -} diff --git a/luci-app-easyupdate/Makefile b/luci-app-easyupdate/Makefile deleted file mode 100644 index 06469dfb..00000000 --- a/luci-app-easyupdate/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) 2016 Openwrt.org -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI support for EasyUpdate From sundaqiang -LUCI_DEPENDS:=+bash -LUCI_PKGARCH:=all -PKG_MAINTAINER:=sundaqiang - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-easyupdate/README.md b/luci-app-easyupdate/README.md deleted file mode 100644 index 51173703..00000000 --- a/luci-app-easyupdate/README.md +++ /dev/null @@ -1,61 +0,0 @@ - -# luci-app-easyupdate׸£ - -ҪʹP3TERX/Actions-OpenWrtԶ̼һ - -### ʹ÷ - -#### · -```yaml - - name: Install feeds - run: cd openwrt && ./scripts/feeds install -a -f -``` -#### ² -```yaml - - name: Openwrt AutoUpdate - run: | - TEMP=$(date +"OpenWrt_%Y%m%d_%H%M%S_")$(git rev-parse --short HEAD) - echo "RELEASE_TAG=$TEMP" >> $GITHUB_ENV - #required>>add "DISTRIB_GITHUB" to "zzz-default-settings" - sed -i "/DISTRIB_DESCRIPTION=/a\sed -i '/DISTRIB_GITHUB/d' /etc/openwrt_release" openwrt/package/lean/default-settings/files/zzz-default-settings - sed -i "/DISTRIB_GITHUB/a\echo \"DISTRIB_GITHUB=\'https://github.com/${{github.repository}}\'\" >> /etc/openwrt_release" openwrt/package/lean/default-settings/files/zzz-default-settings - #required>>add "DISTRIB_VERSIONS" to "zzz-default-settings" - sed -i "/DISTRIB_DESCRIPTION=/a\sed -i '/DISTRIB_VERSIONS/d' /etc/openwrt_release" openwrt/package/lean/default-settings/files/zzz-default-settings - sed -i "/DISTRIB_VERSIONS/a\echo \"DISTRIB_VERSIONS=\'${TEMP:8}\'\" >> /etc/openwrt_release" openwrt/package/lean/default-settings/files/zzz-default-settings - #nonessential>>add "github.actor" to "DISTRIB_DESCRIPTION" in "zzz-default-settings" - sed -i "s/OpenWrt /${{github.actor}} compiled (${TEMP:8}) \/ OpenWrt /g" openwrt/package/lean/default-settings/files/zzz-default-settings -``` - -#### ²`tag_name`ֵ`${{ steps.tag.outputs.release_tag }}` -```yaml - - name: Upload firmware to release - uses: softprops/action-gh-release@v1 - if: steps.tag.outputs.status == 'success' && !cancelled() - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ steps.tag.outputs.release_tag }} - body_path: release.txt - files: ${{ env.FIRMWARE }}/* -``` - -#### Ϊ`${{ env.RELEASE_TAG }}` -```yaml - - name: Upload firmware to release - uses: softprops/action-gh-release@v1 - if: steps.tag.outputs.status == 'success' && !cancelled() - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ env.RELEASE_TAG }} - body_path: release.txt - files: ${{ env.FIRMWARE }}/* -``` - -#### Ҳֱʹ޸ĺõactions -[Actions-OpenWrt](https://github.com/sundaqiang/Actions-OpenWrt) - -### Чչʾ -![easyupdate][1] - - [1]: https://raw.githubusercontent.com/sundaqiang/openwrt-packages/master/img/easyupdate.png \ No newline at end of file diff --git a/luci-app-easyupdate/luasrc/controller/easyupdate.lua b/luci-app-easyupdate/luasrc/controller/easyupdate.lua deleted file mode 100644 index c2839e4d..00000000 --- a/luci-app-easyupdate/luasrc/controller/easyupdate.lua +++ /dev/null @@ -1,89 +0,0 @@ -module("luci.controller.easyupdate",package.seeall) - -function index() - if not nixio.fs.access("/etc/config/easyupdate") then - return - end - local c=luci.model.uci.cursor() - local r=0 - if not c:get("easyupdate", "main", "proxy") then - r=1 - c:set("easyupdate", "main", "proxy", "1") - end - if not c:get("easyupdate", "main", "keepconfig") then - r=1 - c:set("easyupdate", "main", "keepconfig", "1") - end - if not c:get("easyupdate", "main", "github") then - r=1 - local pcall, dofile, _G = pcall, dofile, _G - pcall(dofile, "/etc/openwrt_release") - c:set("easyupdate", "main", "github", _G.DISTRIB_GITHUB) - end - if r then - c:commit("easyupdate") - end - entry({"admin", "services", "easyupdate"}, cbi("easyupdate"),_("EasyUpdate"), 99).dependent = true - entry({"admin", "services", "easyupdate", "getver"}, call("getver")).leaf = true - entry({"admin", "services", "easyupdate", "download"}, call("download")).leaf = true - entry({"admin", "services", "easyupdate", "getlog"}, call("getlog")).leaf = true - entry({"admin", "services", "easyupdate", "flash"}, call("flash")).leaf = true -end - -function Split(str, delim, maxNb) - -- Eliminate bad cases... - if string.find(str, delim) == nil then - return { str } - end - if maxNb == nil or maxNb < 1 then - maxNb = 0 -- No limit - end - local result = {} - local pat = "(.-)" .. delim .. "()" - local nb = 0 - local lastPos - for part, pos in string.gfind(str, pat) do - nb = nb + 1 - result[nb] = part - lastPos = pos - if nb == maxNb then break end - end - -- Handle the last field - if nb ~= maxNb then - result[nb + 1] = string.sub(str, lastPos) - end - return result -end - -function getver() - local e={} - e.newver=luci.sys.exec("/usr/bin/easyupdate.sh -c") - e.newver=e.newver:sub(0,-2) - e.newverint=os.time({day=e.newver:sub(7,8), month=e.newver:sub(5,6), year=e.newver:sub(1,4), hour=e.newver:sub(10,11), min=e.newver:sub(12,13), sec=e.newver:sub(14,15)}) - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function download() - local e={} - luci.sys.exec("/usr/bin/easyupdate.sh -d") - e.code=1 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function getlog() - local e = {} - e.data=nixio.fs.readfile ("/tmp/easyupdate.log") - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function flash() - local e={} - local f = luci.http.formvalue('file') - luci.sys.exec("/usr/bin/easyupdate.sh -f " .. f) - e.code=1 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end \ No newline at end of file diff --git a/luci-app-easyupdate/luasrc/model/cbi/easyupdate.lua b/luci-app-easyupdate/luasrc/model/cbi/easyupdate.lua deleted file mode 100644 index 64426ba0..00000000 --- a/luci-app-easyupdate/luasrc/model/cbi/easyupdate.lua +++ /dev/null @@ -1,90 +0,0 @@ -local pcall, dofile, _G = pcall, dofile, _G -pcall(dofile, "/etc/openwrt_release") -local fs = require "nixio.fs" - -m=Map("easyupdate",translate("EasyUpdate"),translate("EasyUpdate LUCI supports scheduled upgrade & one-click firmware upgrade.") .. [[
]] .. translate("Update may cause the restart failure, Exercise caution when selecting automatic update.") .. [[

Powered by sundaqiang]]) - -s=m:section(TypedSection,"easyupdate") -s.anonymous=true - -e=s:option(Flag, "enable", translate("Enable"),translate("When selected, firmware upgrade will be automatically at the specified time.")) -e.default=0 -e.optional=false - -p=s:option(Flag, "proxy", translate("Use China Mirror"),translate("When selected, will use the China mirror when accessing Github.")) -p.default=1 -p.optional=false - -k= s:option(Flag, "keepconfig", translate("KEEP CONFIG"),translate("When selected, configuration is retained when firmware upgrade.")) -k.default=1 -k.optional=false - -f=s:option(Flag, "forceflash", translate("Preference Force Flashing"),translate("When selected, Preference Force Flashing while firmware upgrading.")) -f.default=0 -f.optional=false - -w=s:option(ListValue,"week",translate("Update Time"),translate("Advised to set the automatic update time to idle time.")) -w:value(7,translate("Everyday")) -w:value(1,translate("Monday")) -w:value(2,translate("Tuesday")) -w:value(3,translate("Wednesday")) -w:value(4,translate("Thursday")) -w:value(5,translate("Friday")) -w:value(6,translate("Saturday")) -w:value(0,translate("Sunday")) -w.default=1 -w:depends("enable", "1") - -h=s:option(Value,"hour",translate("Hour"),translate("Only 0 to 23 can be entered.")) -h.datatype="range(0,23)" -h.rmempty=true -h.default=0 -h:depends("enable", "1") - -n=s:option(Value,"minute",translate("Minute"),translate("Only 0 to 59 can be entered.")) -n.datatype="range(0,59)" -n.rmempty=true -n.default=30 -n:depends("enable", "1") - -g=s:option(Value,"github",translate("Github Url"),translate("Your Github project address.")) -g.default='' -g.rmempty=false - -l=s:option(TextValue,"",translate("Log")) -l.rmempty = true -l.rows = 15 -function l.cfgvalue() - return fs.readfile("/tmp/easyupdatemain.log") or "" -end -l.readonly="readonly" - -b=s:option(Button,"",translate("Firmware Upgrade")) -b.template="easyupdate/button" -b.versions=_G.DISTRIB_VERSIONS - -local apply = luci.http.formvalue("cbi.apply") -if apply then - local enable = luci.http.formvalue("cbid.easyupdate.main.enable") - crontabs=fs.readfile("/etc/crontabs/root") - if enable then - crontabs=crontabs:gsub('[%d%* ]+/usr/bin/easyupdate%.sh %-u # EasyUpdate\n', '') - if crontabs:sub(-1) == '\n' then - n='' - else - n='\n' - end - local week = luci.http.formvalue("cbid.easyupdate.main.week") - if week == '7' then - week='*' - end - local hour = luci.http.formvalue("cbid.easyupdate.main.hour") - local minute = luci.http.formvalue("cbid.easyupdate.main.minute") - crontabs=crontabs .. n .. minute .. ' ' .. hour .. ' ' .. '* * ' .. week .. ' /usr/bin/easyupdate.sh -u # EasyUpdate\n' - else - crontabs=crontabs:gsub('[%d%* ]+/usr/bin/easyupdate%.sh %-u # EasyUpdate\n', '') - end - fs.writefile ("/etc/crontabs/root", crontabs) -end - -return m \ No newline at end of file diff --git a/luci-app-easyupdate/luasrc/view/easyupdate/button.htm b/luci-app-easyupdate/luasrc/view/easyupdate/button.htm deleted file mode 100644 index c37ee614..00000000 --- a/luci-app-easyupdate/luasrc/view/easyupdate/button.htm +++ /dev/null @@ -1,184 +0,0 @@ -<%+cbi/valueheader%> - -
-
- 帮助 - - <%:Local Firmware Version%>:<%=self.versions%> - -
- 帮助 - - <%:Cloud Firmware Version%>:<%:Collecting data...%> - -
-<%+cbi/valuefooter%> - - \ No newline at end of file diff --git a/luci-app-easyupdate/po/zh-cn/easyupdate.po b/luci-app-easyupdate/po/zh-cn/easyupdate.po deleted file mode 100644 index 7fa52c21..00000000 --- a/luci-app-easyupdate/po/zh-cn/easyupdate.po +++ /dev/null @@ -1,77 +0,0 @@ -msgid "EasyUpdate" -msgstr "简易更新" - -msgid "EasyUpdate LUCI supports scheduled upgrade & one-click firmware upgrade." -msgstr "EasyUpdate 支持LUCI定时升级和一键式固件升级" - -msgid "Update may cause the restart failure, Exercise caution when selecting automatic update." -msgstr "升级可能导致重启失败,请谨慎选择自动升级" - -msgid "When selected, firmware upgrade will be automatically at the specified time." -msgstr "选中后,系统将在指定的时间自动升级固件。" - -msgid "When selected, will use the China mirror when accessing Github." -msgstr "选中后,将在访问Github时使用中国镜像。" - -msgid "KEEP CONFIG" -msgstr "保留配置" - -msgid "When selected, configuration is retained when firmware upgrade." -msgstr "选中后,固件升级时配置将保留。" - -msgid "Preference Force Flashing" -msgstr "强制刷入" - -msgid "When selected, Preference Force Flashing while firmware upgrading." -msgstr "选中时,升级固件时将强制刷入。" - -msgid "Update Time" -msgstr "更新时机" - -msgid "Advised to set the automatic update time to idle time." -msgstr "建议将自动更新时间设置为空闲时间。" - -msgid "Everyday" -msgstr "每天" - -msgid "Hour" -msgstr "小时" - -msgid "Only 0 to 23 can be entered." -msgstr "只能输入0 ~ 23" - -msgid "Minute" -msgstr "分钟" - -msgid "Only 0 to 59 can be entered." -msgstr "只能输入0 ~ 59" - -msgid "Github Url" -msgstr "Github网址" - -msgid "Your Github project address." -msgstr "你的Github项目地址" - -msgid "Firmware Upgrade" -msgstr "固件升级" - -msgid "Local Firmware Version" -msgstr "本地的固件版本" - -msgid "Cloud Firmware Version" -msgstr "云端的固件版本" - -msgid "Download Firmware" -msgstr "下载固件" - -msgid "Is the latest" -msgstr "已是最新" - -msgid "Retry Firmware Check" -msgstr "重试固件检查" - -msgid "Retry Firmware Upgrade" -msgstr "重试固件升级" - -msgid "Retry Firmware Download" -msgstr "重试固件下载" diff --git a/luci-app-easyupdate/po/zh_Hans b/luci-app-easyupdate/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-easyupdate/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-easyupdate/root/etc/config/easyupdate b/luci-app-easyupdate/root/etc/config/easyupdate deleted file mode 100644 index 5686c39a..00000000 --- a/luci-app-easyupdate/root/etc/config/easyupdate +++ /dev/null @@ -1,2 +0,0 @@ -config easyupdate 'main' - option enable '0' \ No newline at end of file diff --git a/luci-app-easyupdate/root/etc/uci-defaults/luci-app-easyupdate b/luci-app-easyupdate/root/etc/uci-defaults/luci-app-easyupdate deleted file mode 100644 index defc0a26..00000000 --- a/luci-app-easyupdate/root/etc/uci-defaults/luci-app-easyupdate +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@easyupdate[-1] - add ucitrack easyupdate - set ucitrack.@easyupdate[-1].init=easyupdate - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/luci-app-easyupdate/root/usr/bin/easyupdate.sh b/luci-app-easyupdate/root/usr/bin/easyupdate.sh deleted file mode 100755 index 6f48f74b..00000000 --- a/luci-app-easyupdate/root/usr/bin/easyupdate.sh +++ /dev/null @@ -1,164 +0,0 @@ -#!/bin/bash -# https://github.com/sundaqiang/openwrt-packages -# EasyUpdate for Openwrt - -function checkEnv() { - if !type sysupgrade >/dev/null 2>&1; then - writeLog 'Your firmware does not contain sysupgrade and does not support automatic updates(您的固件未包含sysupgrade,暂不支持自动更新)' - exit - fi -} - -function writeLog() { - now_time='['$(date +"%Y-%m-%d %H:%M:%S")']' - echo ${now_time} $1 | tee -a '/tmp/easyupdatemain.log' -} - -function shellHelp() { - checkEnv - cat </tmp/easyupdate.log 2>&1 & -} - -function flashFirmware() { - checkEnv - if [[ -z "$file" ]]; then - writeLog 'Please specify the file name(请指定文件名)' - else - writeLog 'Get whether to save the configuration(读取是否保存配置)' - keepconfig=$(uci get easyupdate.main.keepconfig) - if [ $keepconfig -eq 1 ]; then - keepconfig=' ' - res='yes' - else - keepconfig='-n ' - res='no' - fi - writeLog "Whether to save the configuration(读取是否保存配置):$res" - writeLog 'Start flash firmware, log output in /tmp/easyupdate.log(开始刷写固件,日志输出在/tmp/easyupdate.log)' - sysupgrade $keepconfig$file >/tmp/easyupdate.log 2>&1 & - fi -} - -function updateCloud() { - checkEnv - writeLog 'Get the local firmware version(获取本地固件版本)' - lFirVer=$(cat /etc/openwrt_release | sed -n "s/DISTRIB_VERSIONS='\(.*\)'/\1/p") - writeLog "Local firmware version(本地固件版本):$lFirVer" - writeLog 'Get the cloud firmware version(获取云端固件版本)' - cFirVer=$(getCloudVer) - writeLog "Cloud firmware version(云端固件版本):$cFirVer" - lFirVer=$(date -d "${lFirVer:0:4}-${lFirVer:4:2}-${lFirVer:6:2} ${lFirVer:9:2}:${lFirVer:11:2}:${lFirVer:13:2}" +%s) - cFirVer=$(date -d "${cFirVer:0:4}-${cFirVer:4:2}-${cFirVer:6:2} ${cFirVer:9:2}:${cFirVer:11:2}:${cFirVer:13:2}" +%s) - if [ $cFirVer -gt $lFirVer ]; then - writeLog 'Need to be updated(需要更新)' - downCloudVer - i=0 - while [ $i -le 100 ]; do - log=$(cat /tmp/easyupdate.log) - str=' error' - if [[ $log =~ $str ]]; then - writeLog 'Download error(下载出错)' - i=101 - break - else - str='Connection reset' - if [[ $log =~ $str ]]; then - writeLog 'Download error(下载出错)' - i=101 - break - else - str='Download completed' - if [[ $log =~ $str ]]; then - writeLog 'Download completes(下载完成)' - i=100 - break - else - echo $log | sed -n '$p' - if [[ $i -eq 99 ]]; then - writeLog 'Download the timeout(下载超时)' - break - fi - fi - fi - fi - i++ - sleep 3 - done - if [[ $i -eq 100 ]]; then - writeLog 'Prepare flash firmware(准备刷写固件)' - file=$(cat /tmp/easyupdate.log | sed -n "s/Writing to '\(.*\)'/\1/p") - flashFirmware - fi - else - writeLog "Is the latest(已是最新)" - fi -} - -if [[ -z "$1" ]]; then - shellHelp -else - case $1 in - -c) - getCloudVer - ;; - -d) - downCloudVer - ;; - -f) - file=$2 - flashFirmware - ;; - -u) - updateCloud - ;; - *) - shellHelp - ;; - esac -fi diff --git a/luci-app-easyupdate/root/usr/share/rpcd/acl.d/luci-app-easyupdate.json b/luci-app-easyupdate/root/usr/share/rpcd/acl.d/luci-app-easyupdate.json deleted file mode 100644 index 7a6ca923..00000000 --- a/luci-app-easyupdate/root/usr/share/rpcd/acl.d/luci-app-easyupdate.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-easyupdate": { - "description": "Grant UCI access for luci-app-easyupdate", - "read": { - "uci": [ "easyupdate" ] - }, - "write": { - "uci": [ "easyupdate" ] - } - } -} diff --git a/luci-app-homeredirect/Makefile b/luci-app-homeredirect/Makefile deleted file mode 100644 index 45d454d5..00000000 --- a/luci-app-homeredirect/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (C) 2020 xiaoqingfeng -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI for HomeRedirect -LUCI_DEPENDS:=+HomeRedirect -LUCI_PKGARCH:=all -PKG_NAME:=luci-app-homeredirect -PKG_MAINTAINER:=Richard Yu - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-homeredirect/luasrc/controller/homeredirect.lua b/luci-app-homeredirect/luasrc/controller/homeredirect.lua deleted file mode 100644 index d1a2ef47..00000000 --- a/luci-app-homeredirect/luasrc/controller/homeredirect.lua +++ /dev/null @@ -1,62 +0,0 @@ --- Copyright 2020 Richard --- feed site : https://github.com/xiaoqingfengATGH/feeds-xiaoqingfeng -module("luci.controller.homeredirect", package.seeall) -local appname = "homeredirect" -local RUNLOG_DIR = "/tmp/hr" -local ucic = luci.model.uci.cursor() -local http = require "luci.http" - -function index() - - entry({"admin", "services", "homeredirect", "show"}, call("show_menu")).leaf = true - entry({"admin", "services", "homeredirect", "hide"}, call("hide_menu")).leaf = true - - if nixio.fs.access("/etc/config/homeredirect") and - nixio.fs.access("/etc/config/homeredirect_show") then - entry({"admin", "services", "homeredirect"}, - alias("admin", "services", "homeredirect", "settings"), - _("Home Redirect"), 50).dependent = true - end - - entry({"admin", "services", "homeredirect", "settings"}, - cbi("homeredirect/settings")).leaf = true - entry({"admin", "services", "homeredirect", "status"}, call("status")).leaf = - true -end - -local function http_write_json(content) - http.prepare_content("application/json") - http.write_json(content or {code = 1}) -end - -function status() - local e = {} - e.enabled = ucic:get(appname, "@global[0]", "enabled") - ucic:foreach(appname, "redirect", function(redirect) - local state = -1 - local id = redirect['.name'] - local enabled = redirect['enabled'] - if enabled == "1" then - local pid = luci.sys.exec("ps | grep socat | grep " .. RUNLOG_DIR .. "/" .. id .. " | sed '/grep/d' | awk -F ' ' '{print $1}'") - if pid == "" then - state = 0 - else - state = tonumber(pid) - end - end - e[id] = state - end) - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function show_menu() - luci.sys.call("touch /etc/config/homeredirect_show") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "homeredirect")) -end - -function hide_menu() - luci.sys.call("rm -rf /etc/config/homeredirect_show") - luci.http.redirect(luci.dispatcher.build_url("admin", "status", "overview")) -end - diff --git a/luci-app-homeredirect/luasrc/model/cbi/homeredirect/settings.lua b/luci-app-homeredirect/luasrc/model/cbi/homeredirect/settings.lua deleted file mode 100644 index f080056c..00000000 --- a/luci-app-homeredirect/luasrc/model/cbi/homeredirect/settings.lua +++ /dev/null @@ -1,62 +0,0 @@ -local s = require "luci.sys" -local m, s, o -mp = Map("homeredirect", translate("Home Redirect - Port forwarding utility")) -mp.description = translate("HomeRedirect is a customized port forwarding utility for HomeLede. It supports TCP / UDP protocol, IPv4 and IPv6.") -mp:section(SimpleSection).template = "homeredirect/index" - -s = mp:section(TypedSection, "global") -s.anonymous = true - -enabled = s:option(Flag, "enabled", translate("Master switch")) -enabled.default = 0 -enabled.rmempty = false - -s = mp:section(TypedSection, "redirect", translate("Redirect Configuration")) -s.addremove = true -s.anonymous = true -s.template = "cbi/tblsection" -s.sortable = true - -enabled = s:option(Flag, "enabled", translate("Enabled")) -enabled.rmempty = false - -name = s:option(Value, "name", translate("Name")) -name.optional = false -name.rmempty = false - -proto = s:option(ListValue, "proto", translate("Transport Protocol")) -proto.default = "tcp4" -proto:value("tcp4", "TCP/IPv4") -proto:value("udp4", "UDP/IPv4") -proto:value("tcp6", "TCP/IPv6") -proto:value("udp6", "UDP/IPv6") - --- src_ip = s:option(Value, "src_ip", translate("Source IP")) --- src_ip.datatype = "ipaddr" --- src_ip.optional = false --- src_ip.rmempty = false - -src_dport = s:option(Value, "src_dport", translate("Source Port")) -src_dport.datatype = "port" -src_dport.optional = false -src_dport.rmempty = false - -dest_ip = s:option(Value, "dest_ip", translate("Destination Address")) -dest_ip.datatype = "ipaddr" -dest_ip.optional = false -dest_ip.rmempty = false - -dest_port = s:option(Value, "dest_port", translate("Destination Port")) -dest_port.datatype = "port" -dest_port.optional = false -dest_port.rmempty = false - -o = s:option(DummyValue, "rs", translate("Status")) -o.default = "检测中..." - -local apply=luci.http.formvalue("cbi.apply") -if apply then - io.popen("/etc/init.d/homeredirect restart") -end - -return mp diff --git a/luci-app-homeredirect/luasrc/view/homeredirect/index.htm b/luci-app-homeredirect/luasrc/view/homeredirect/index.htm deleted file mode 100644 index c2788dd3..00000000 --- a/luci-app-homeredirect/luasrc/view/homeredirect/index.htm +++ /dev/null @@ -1,38 +0,0 @@ -<% include("cbi/map") %> - \ No newline at end of file diff --git a/luci-app-homeredirect/po/zh-cn/homeredirect.po b/luci-app-homeredirect/po/zh-cn/homeredirect.po deleted file mode 100644 index 5a10d14a..00000000 --- a/luci-app-homeredirect/po/zh-cn/homeredirect.po +++ /dev/null @@ -1,44 +0,0 @@ -msgid "Home Redirect" -msgstr "端口转发" - -msgid "HomeRedirect is a customized port forwarding utility for HomeLede. It supports TCP / UDP protocol, IPv4 and IPv6." -msgstr "HomeRedirect是一款为HomeLede定制的端口转发工具,可以将路由上端口访问转发至任意位置,支持TCP/UDP协议,IPv4和IPv6。" - -msgid "Home Redirect - Port forwarding utility" -msgstr "Home Redirect 端口转发" - -msgid "Redirect Configuration" -msgstr "转发设置" - -msgid "Transport Protocol" -msgstr "传输协议" - -msgid "Source Port" -msgstr "路由器端口" - -msgid "Destination Address" -msgstr "转发目标地址" - -msgid "Destination Port" -msgstr "转发目标端口" - -msgid "Name" -msgstr "名称" - -msgid "Source IP" -msgstr "路由器IP" - -msgid "Status" -msgstr "状态" - -msgid "Master switch" -msgstr "总开关" - -msgid "Disabled" -msgstr "未启用" - -msgid "Not running" -msgstr "未运行" - -msgid "Running" -msgstr "运行中" diff --git a/luci-app-homeredirect/po/zh_Hans b/luci-app-homeredirect/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-homeredirect/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-homeredirect/root/etc/config/homeredirect_show b/luci-app-homeredirect/root/etc/config/homeredirect_show deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-homeredirect/root/etc/uci-defaults/luci-app-homeredirect b/luci-app-homeredirect/root/etc/uci-defaults/luci-app-homeredirect deleted file mode 100644 index 7a7c301b..00000000 --- a/luci-app-homeredirect/root/etc/uci-defaults/luci-app-homeredirect +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete firewall.homeredirect - set firewall.homeredirect=include - set firewall.homeredirect.type=script - set firewall.homeredirect.path=/etc/homeredirect/firewall.include - set firewall.homeredirect.reload=1 -EOF - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@homeredirect[-1] - add ucitrack homeredirect - set ucitrack.@homeredirect[-1].init=homeredirect - commit ucitrack -EOF - -rm -rf /tmp/luci-*cache -exit 0 diff --git a/luci-app-homeredirect/root/usr/share/rpcd/acl.d/luci-app-homeredirect.json b/luci-app-homeredirect/root/usr/share/rpcd/acl.d/luci-app-homeredirect.json deleted file mode 100644 index cea17c46..00000000 --- a/luci-app-homeredirect/root/usr/share/rpcd/acl.d/luci-app-homeredirect.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-homeredirect": { - "description": "Grant UCI access for luci-app-homeredirect", - "read": { - "uci": [ "homeredirect" ] - }, - "write": { - "uci": [ "homeredirect" ] - } - } -} diff --git a/luci-app-netdata b/luci-app-netdata deleted file mode 160000 index 4263cfb7..00000000 --- a/luci-app-netdata +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4263cfb7867143f5553eaf62fc9b790d7e711ad7 diff --git a/luci-app-netspeedtest/Makefile b/luci-app-netspeedtest/Makefile deleted file mode 100644 index 3a7d36f0..00000000 --- a/luci-app-netspeedtest/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (C) 2020-2021 sirpdboy -# The LuCI Network diagnosis and speed test -# This is free software, licensed under the GNU General Public License v3. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-netspeedtest -PKG_VERSION:=1.6 -PKG_RELEASE:= -PKG_LICENSE:=GPLv2 -PKG_MAINTAINER:=sirpdboy - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=LuCI Support for netspeedtest - DEPENDS:=+python3 +iperf3 - PKGARCH:=all -endef - - -define Build/Compile -endef - -define Package/$(PKG_NAME)/conffiles -/etc/config/netspeedtest -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci - cp -pR ./luasrc/* $(1)/usr/lib/lua/luci - $(INSTALL_DIR) $(1)/ - cp -pR ./root/* $(1)/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - po2lmo ./po/zh-cn/netspeedtest.po $(1)/usr/lib/lua/luci/i18n/netspeedtest.zh-cn.lmo -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) - diff --git a/luci-app-netspeedtest/README.md b/luci-app-netspeedtest/README.md deleted file mode 100644 index f96b557f..00000000 --- a/luci-app-netspeedtest/README.md +++ /dev/null @@ -1,123 +0,0 @@ -[![若部分图片无法正常显示,请挂上机场浏览或点这里到末尾看修复教程](https://visitor-badge.glitch.me/badge?page_id=sirpdboy-visitor-badge)](#解决-github-网页上图片显示失败的问题) [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) - - 图飞了😂 - - -欢迎来到sirpdboy的源码仓库! -= -Welcome to sirpdboy's git source of packages -- -[luci-app-NetSpeedTest — 网络速度测试1.5完整版](https://github.com/sirpdboy/NetSpeedTest) -====================== - -[![](https://img.shields.io/badge/-目录:-696969.svg)](#readme) [![](https://img.shields.io/badge/-写在前面-F5F5F5.svg)](#写在前面-) [![](https://img.shields.io/badge/-编译说明-F5F5F5.svg)](#编译说明-) [![](https://img.shields.io/badge/-说明-F5F5F5.svg)](#说明-) [![](https://img.shields.io/badge/-捐助-F5F5F5.svg)](#捐助-) - -请 **认真阅读完毕** 本页面,本页面包含注意事项和如何使用。 - -a new netspeedtest luci app bese luci-app-netspeedtest -- - -## 写在前面:[![](https://img.shields.io/badge/-写在前面-F5F5F5.svg)](#写在前面-) - - 一直在找OPENWRT上测试速度的插件,苦寻不到,于是有了它! -此插件可进行内外和外网网络速度测试。 - -1.内网测速基于iperf3 插件,服务端路由器如果没有安装请先安装此ipk插件。 - -2.测速的终端使用机器必须和测速服务器在同一个局域网络中! - -3.客户端使用步骤: - 启动测速服务器端-->下载测试客户端-->运行测速客户端-->输入服务端IP地址-->查看结果。 - -5.客户端运行,国内端下载中有“iperf3测速客户端”,运行它输入服务器IP即可。 - 国外原版,需要手动进入 CMD命令模式,再输入命令:iperf3.exe -c 服务器IP - -6.网络测速iperf3客户端下载地址:https://sipdboy.lanzoui.com/b01c3esih 密码:cpd6 - -8.外网测速使用speedtest.net测速内核,需要依赖speedtest,另外感谢superspeed和user1121114685因为借用了你们的灵感! - -9.外网测速最后测试阶段感谢佐大:佐须之男 测试查问题! - -10.新插件难免有bug 请不要大惊小怪。欢迎提交bug。 - -11.安装需要依赖: python3 iperf3 。 - -## 编译说明 [![](https://img.shields.io/badge/-编译说明-F5F5F5.svg)](#编译说明-) - -将NetSpeedTest 主题添加至 LEDE/OpenWRT 源码的方法。 - -## 下载源码方法一: -编辑源码文件夹根目录feeds.conf.default并加入如下内容: - -```Brach - # feeds获取源码: - src-git netspeedtest https://github.com/sirpdboy/netspeedtest - ``` - ```Brach - # 更新feeds,并安装主题: - scripts/feeds update netspeedtest - scripts/feeds install luci-app-netspeedtest - ``` - -## 下载源码方法二: - ```Brach - # 下载源码 - - git clone https://github.com/sirpdboy/netspeedtest package/netspeedtest - - make menuconfig - ``` -## 配置菜单 - ```Brach - make menuconfig - # 找到 LuCI -> Applications, 选择 luci-app-netspeedtest, 保存后退出。 - ``` -## 编译 - ```Brach - # 编译固件 - make package/netspeedtest/luci-app-netspeedtest/{clean,compile} V=s -``` - -## 说明 [![](https://img.shields.io/badge/-说明-F5F5F5.svg)](#说明-) - -源码来源:https://github.com/sirpdboy/netspeedtest/luci-app-netspeedtest - - -你可以随意使用其中的源码,但请注明出处。 -============================ - -# My other project -网络速度测试 :https://github.com/sirpdboy/netspeedtest - -定时关机重启 : https://github.com/sirpdboy/luci-app-autopoweroff - -关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice - -opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd - -opentoks 主题: https://github.com/sirpdboy/luci-theme-opentoks [仿KOOLSAHRE主题] - -btmob 主题: https://github.com/sirpdboy/luci-theme-btmob - -系统高级设置 : https://github.com/sirpdboy/luci-app-advanced - -## 捐助 [![](https://img.shields.io/badge/-捐助-F5F5F5.svg)](#捐助-) - -**如果你觉得此项目对你有帮助,请捐助我们,以使项目能持续发展,更加完善。··请作者喝杯咖啡~~~** - -**你们的支持就是我的动力!** - -### 捐助方式 - -| 图飞了😂 | 图飞了😂 | -| :-----------------: | :-------------: | -|图飞了😂|图飞了😂| - - - 图飞了😂 - - -###### [解决 Github 网页上图片显示失败的问题](https://blog.csdn.net/qq_38232598/article/details/91346392) - -[![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ) - diff --git a/luci-app-netspeedtest/luasrc/controller/netspeedtest.lua b/luci-app-netspeedtest/luasrc/controller/netspeedtest.lua deleted file mode 100644 index 9b949d42..00000000 --- a/luci-app-netspeedtest/luasrc/controller/netspeedtest.lua +++ /dev/null @@ -1,59 +0,0 @@ - -module("luci.controller.netspeedtest", package.seeall) - -function index() - - entry({"admin","network","netspeedtest"},cbi("netspeedtest/netspeedtest", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}),_("netspeedtest"),90).dependent=true - - entry({"admin", "network","test_iperf0"}, post("test_iperf0"), nil).leaf = true - - entry({"admin", "network","test_iperf1"}, post("test_iperf1"), nil).leaf = true - - entry({"admin","network","netspeedtest", "run"}, call("run")) - - entry({"admin", "network", "netspeedtest", "realtime_log"}, call("get_log")) - -end - - -function testlan(cmd, addr) - luci.http.prepare_content("text/plain") - local util = io.popen(cmd) - if util then - while true do - local ln = util:read("*l") - if not ln then break end - luci.http.write(ln) - luci.http.write("\n") - end - util:close() - end - -end - -function testwan(cmd) - local util = io.popen(cmd) - util:close() -end - -function test_iperf0(addr) - testlan("iperf3 -s ", addr) -end - -function test_iperf1(addr) - luci.sys.call("killall iperf3") -end - -function get_log() - local fs = require "nixio.fs" - local e = {} - e.running = luci.sys.call("busybox ps -w | grep netspeedtest | grep -v grep >/dev/null") == 0 - e.log = fs.readfile("/var/log/netspeedtest.log") or "" - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function run() - testwan("/etc/init.d/netspeedtest nstest ") - luci.http.redirect(luci.dispatcher.build_url("admin","network","netspeedtest")) -end diff --git a/luci-app-netspeedtest/luasrc/model/cbi/netspeedtest/netspeedtest.lua b/luci-app-netspeedtest/luasrc/model/cbi/netspeedtest/netspeedtest.lua deleted file mode 100644 index 56722a2c..00000000 --- a/luci-app-netspeedtest/luasrc/model/cbi/netspeedtest/netspeedtest.lua +++ /dev/null @@ -1,32 +0,0 @@ --- Copyright 2018 sirpdboy (herboy2008@gmail.com) -require("luci.util") -local o,t,e - -if luci.sys.call("pidof iperf3 >/dev/null") == 0 then - status = translate("iperf3 服务端运行中") -else - status = translate("iperf3 服务端已停止") -end - -o = Map("netspeedtest", "" .. translate("netspeedtest") .."",translate( "Network speed diagnosis test (including intranet and extranet)") ) - -t = o:section(TypedSection, "netspeedtest", translate('iperf3 lanspeedtest')) -t.anonymous = true -t.description = translate(string.format("%s
", status)) - -e = t:option(DummyValue, '', '') -e.rawhtml = true -e.template ='netspeedtest/netspeedtest' - - -t=o:section(TypedSection,"netspeedtest",translate("wanspeedtest")) -t.anonymous=true -e = t:option(DummyValue, '', '') -e.rawhtml = true -e.template ='netspeedtest/speedtest' - -e =t:option(DummyValue, '', '') -e.rawhtml = true -e.template = 'netspeedtest/log' - -return o diff --git a/luci-app-netspeedtest/luasrc/view/netspeedtest/log.htm b/luci-app-netspeedtest/luasrc/view/netspeedtest/log.htm deleted file mode 100644 index 7d297215..00000000 --- a/luci-app-netspeedtest/luasrc/view/netspeedtest/log.htm +++ /dev/null @@ -1,16 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/luci-app-netspeedtest/luasrc/view/netspeedtest/netspeedtest.htm b/luci-app-netspeedtest/luasrc/view/netspeedtest/netspeedtest.htm deleted file mode 100644 index e3e26947..00000000 --- a/luci-app-netspeedtest/luasrc/view/netspeedtest/netspeedtest.htm +++ /dev/null @@ -1,84 +0,0 @@ - -<% -local fs = require "nixio.fs" - -%> - - - - -
-
- - - - - - - - - - - - - -
- -
<%:iperf3 instructions%><%:The speed measurement terminal must be in the same LAN as the router that starts the speed measurement%>
<%:Operation steps: start router speed measurement service download test client run speed measurement client input IP address of router speed measurement service%>
<%:Iperf3 speed measurement software download%> - -
- - - -
-
diff --git a/luci-app-netspeedtest/luasrc/view/netspeedtest/speedtest.htm b/luci-app-netspeedtest/luasrc/view/netspeedtest/speedtest.htm deleted file mode 100644 index f7822bd6..00000000 --- a/luci-app-netspeedtest/luasrc/view/netspeedtest/speedtest.htm +++ /dev/null @@ -1,31 +0,0 @@ -<%+cbi/valueheader%> - -
- -
- - - -<%+cbi/valuefooter%> diff --git a/luci-app-netspeedtest/po/zh-cn/netspeedtest.po b/luci-app-netspeedtest/po/zh-cn/netspeedtest.po deleted file mode 100644 index d307d20d..00000000 --- a/luci-app-netspeedtest/po/zh-cn/netspeedtest.po +++ /dev/null @@ -1,66 +0,0 @@ -# -# Copyright (C) 2020-2021 sirpdboy herboy2008@gmail.com -# This is free software, licensed under the GNU General Public License v3. -# -msgid "" -msgstr "" -"Project-Id-Version: LuCi Chinese Translation\n" -"Report-Msgid-Bugs-To: \n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" - -msgid "netspeedtest" -msgstr "网速测试" - -msgid "Network speed diagnosis test (including intranet and extranet)" -msgstr "网络速度诊断测试(包括内网和外网)" - -msgid "iperf3 lanspeedtest" -msgstr "iperf3 内网测速" - -msgid "iperfstart" -msgstr "iperf服务启动" - -msgid "iperfstop" -msgstr "iperf服务停止" - -msgid "Perform operation" -msgstr "执行操作" - -msgid "iperf3 instructions" -msgstr "iperf3 使用说明" - -msgid "Test speed service started" -msgstr "测试速度服务已经启动" - -msgid "The speed measurement terminal must be in the same LAN as the router that starts the speed measurement" -msgstr "测速终端机必须与启动测速的路由器在同一局域网内" - -msgid "Operation steps: start router speed measurement service download test client run speed measurement client input IP address of router speed measurement service" -msgstr "使用步骤:A.启动路由器测速服务 B.下载测试客户端 C.运行测速客户端 D.输入路由器测速服务IP地址。 " - -msgid "Domestic download password:" -msgstr "国内下密码:" - -msgid "Iperf3 speed measurement software download" -msgstr "iperf3测速软件下载" - -msgid "wanspeedtest" -msgstr "宽带速率测试" - -msgid "Perform wanspeedtest" -msgstr "执行宽带测速" - -msgid "Operation execution complete" -msgstr "操作执行完毕" - -msgid "Network speed test, please wait for 1 minutes" -msgstr "网速测试中,请稍等1分钟" - -msgid "Download from foreign official websites" -msgstr "国外官网" - diff --git a/luci-app-netspeedtest/po/zh_Hans b/luci-app-netspeedtest/po/zh_Hans deleted file mode 100644 index 41451e4a..00000000 --- a/luci-app-netspeedtest/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-netspeedtest/root/etc/config/netspeedtest b/luci-app-netspeedtest/root/etc/config/netspeedtest deleted file mode 100644 index 7b431c83..00000000 --- a/luci-app-netspeedtest/root/etc/config/netspeedtest +++ /dev/null @@ -1,8 +0,0 @@ - -config netspeedtest - option enabled '0' - - -config wanspeedtest - option enabled '0' - diff --git a/luci-app-netspeedtest/root/etc/init.d/netspeedtest b/luci-app-netspeedtest/root/etc/init.d/netspeedtest deleted file mode 100644 index c446aa6a..00000000 --- a/luci-app-netspeedtest/root/etc/init.d/netspeedtest +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh /etc/rc.common -# Copyright 2020 -2021 sirpdboy (herboy2008@gmail.com) - -START=95 -STOP=10 - -. /lib/functions.sh -EXTRA_COMMANDS="nstest" -EXTRA_HELP=" netspeedtest" -NS_FILE=/usr/share/netspeedtest/netspeedtest.txt -TMP_T=/tmp/netspeedtest -LOG="/var/log/netspeedtest.log" - -limit_log() { - local logf=$1 - [ ! -f "$logf" ] && return - local sc=100 - [ -n "$2" ] && sc=$2 - local count=$(grep -c "" $logf) - if [ $count -gt $sc ];then - let count=count-$sc - sed -i "1,$count d" $logf - fi -} - -init_env() { - [ ! -f "$LOG" ] && echo "netspeedtest by sirpdboy" > $LOG - echo 1 > $NS_FILE - -} - -nstest() { - init_env - [ -f "$TMP_T" ] && return - echo 1 > $TMP_T - echo -ne "\n ————————————————————————————" | tee -a $LOG - /etc/init.d/speedtest | tee -a $NS_FILE - ns_server=`cat $NS_FILE | grep 'Hosted by' | cut -c10-` - ns_down=`cat $NS_FILE | grep 'Download:' |awk -F: '{printf $2}' ` - ns_up=`cat $NS_FILE | grep 'Upload:' |awk -F: '{printf $2}' ` - echo -ne "\n 测服信息:${ns_server} " | tee -a $LOG - echo -ne "\n 下行速率:${ns_down} ---- 上行速率:${ns_up} " | tee -a $LOG - echo -ne "\n 测试时间: " | tee -a $LOG - echo $(date +%Y-%m-%d" "%H:%M:%S) | tee -a $LOG - rm -rf $TMP_T -} - -reload(){ - start -} - -start() { - limit_log $LOG 200 - nstest -} diff --git a/luci-app-netspeedtest/root/etc/init.d/speedtest b/luci-app-netspeedtest/root/etc/init.d/speedtest deleted file mode 100644 index 186b5292..00000000 --- a/luci-app-netspeedtest/root/etc/init.d/speedtest +++ /dev/null @@ -1,2013 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright 2012 Matt Martz -# All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import csv -import datetime -import errno -import math -import os -import platform -import re -import signal -import socket -import sys -import threading -import timeit -import xml.parsers.expat - -try: - import gzip - GZIP_BASE = gzip.GzipFile -except ImportError: - gzip = None - GZIP_BASE = object - -__version__ = '2.1.4b1' - - -class FakeShutdownEvent(object): - """Class to fake a threading.Event.isSet so that users of this module - are not required to register their own threading.Event() - """ - - @staticmethod - def isSet(): - "Dummy method to always return false""" - return False - - is_set = isSet - - -# Some global variables we use -DEBUG = False -_GLOBAL_DEFAULT_TIMEOUT = object() -PY25PLUS = sys.version_info[:2] >= (2, 5) -PY26PLUS = sys.version_info[:2] >= (2, 6) -PY32PLUS = sys.version_info[:2] >= (3, 2) -PY310PLUS = sys.version_info[:2] >= (3, 10) - -# Begin import game to handle Python 2 and Python 3 -try: - import json -except ImportError: - try: - import simplejson as json - except ImportError: - json = None - -try: - import xml.etree.ElementTree as ET - try: - from xml.etree.ElementTree import _Element as ET_Element - except ImportError: - pass -except ImportError: - from xml.dom import minidom as DOM - from xml.parsers.expat import ExpatError - ET = None - -try: - from urllib2 import (urlopen, Request, HTTPError, URLError, - AbstractHTTPHandler, ProxyHandler, - HTTPDefaultErrorHandler, HTTPRedirectHandler, - HTTPErrorProcessor, OpenerDirector) -except ImportError: - from urllib.request import (urlopen, Request, HTTPError, URLError, - AbstractHTTPHandler, ProxyHandler, - HTTPDefaultErrorHandler, HTTPRedirectHandler, - HTTPErrorProcessor, OpenerDirector) - -try: - from httplib import HTTPConnection, BadStatusLine -except ImportError: - from http.client import HTTPConnection, BadStatusLine - -try: - from httplib import HTTPSConnection -except ImportError: - try: - from http.client import HTTPSConnection - except ImportError: - HTTPSConnection = None - -try: - from httplib import FakeSocket -except ImportError: - FakeSocket = None - -try: - from Queue import Queue -except ImportError: - from queue import Queue - -try: - from urlparse import urlparse -except ImportError: - from urllib.parse import urlparse - -try: - from urlparse import parse_qs -except ImportError: - try: - from urllib.parse import parse_qs - except ImportError: - from cgi import parse_qs - -try: - from hashlib import md5 -except ImportError: - from md5 import md5 - -try: - from argparse import ArgumentParser as ArgParser - from argparse import SUPPRESS as ARG_SUPPRESS - PARSER_TYPE_INT = int - PARSER_TYPE_STR = str - PARSER_TYPE_FLOAT = float -except ImportError: - from optparse import OptionParser as ArgParser - from optparse import SUPPRESS_HELP as ARG_SUPPRESS - PARSER_TYPE_INT = 'int' - PARSER_TYPE_STR = 'string' - PARSER_TYPE_FLOAT = 'float' - -try: - from cStringIO import StringIO - BytesIO = None -except ImportError: - try: - from StringIO import StringIO - BytesIO = None - except ImportError: - from io import StringIO, BytesIO - -try: - import __builtin__ -except ImportError: - import builtins - from io import TextIOWrapper, FileIO - - class _Py3Utf8Output(TextIOWrapper): - """UTF-8 encoded wrapper around stdout for py3, to override - ASCII stdout - """ - def __init__(self, f, **kwargs): - buf = FileIO(f.fileno(), 'w') - super(_Py3Utf8Output, self).__init__( - buf, - encoding='utf8', - errors='strict' - ) - - def write(self, s): - super(_Py3Utf8Output, self).write(s) - self.flush() - - _py3_print = getattr(builtins, 'print') - try: - _py3_utf8_stdout = _Py3Utf8Output(sys.stdout) - _py3_utf8_stderr = _Py3Utf8Output(sys.stderr) - except OSError: - # sys.stdout/sys.stderr is not a compatible stdout/stderr object - # just use it and hope things go ok - _py3_utf8_stdout = sys.stdout - _py3_utf8_stderr = sys.stderr - - def to_utf8(v): - """No-op encode to utf-8 for py3""" - return v - - def print_(*args, **kwargs): - """Wrapper function for py3 to print, with a utf-8 encoded stdout""" - if kwargs.get('file') == sys.stderr: - kwargs['file'] = _py3_utf8_stderr - else: - kwargs['file'] = kwargs.get('file', _py3_utf8_stdout) - _py3_print(*args, **kwargs) -else: - del __builtin__ - - def to_utf8(v): - """Encode value to utf-8 if possible for py2""" - try: - return v.encode('utf8', 'strict') - except AttributeError: - return v - - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5. - - Taken from https://pypi.python.org/pypi/six/ - - Modified to set encoding to UTF-8 always, and to flush after write - """ - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - encoding = 'utf8' # Always trust UTF-8 for output - if (isinstance(fp, file) and - isinstance(data, unicode) and - encoding is not None): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(encoding, errors) - fp.write(data) - fp.flush() - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) - -# Exception "constants" to support Python 2 through Python 3 -try: - import ssl - try: - CERT_ERROR = (ssl.CertificateError,) - except AttributeError: - CERT_ERROR = tuple() - - HTTP_ERRORS = ( - (HTTPError, URLError, socket.error, ssl.SSLError, BadStatusLine) + - CERT_ERROR - ) -except ImportError: - ssl = None - HTTP_ERRORS = (HTTPError, URLError, socket.error, BadStatusLine) - -if PY32PLUS: - etree_iter = ET.Element.iter -elif PY25PLUS: - etree_iter = ET_Element.getiterator - -if PY26PLUS: - thread_is_alive = threading.Thread.is_alive -else: - thread_is_alive = threading.Thread.isAlive - - -def event_is_set(event): - try: - return event.is_set() - except AttributeError: - return event.isSet() - - -class SpeedtestException(Exception): - """Base exception for this module""" - - -class SpeedtestCLIError(SpeedtestException): - """Generic exception for raising errors during CLI operation""" - - -class SpeedtestHTTPError(SpeedtestException): - """Base HTTP exception for this module""" - - -class SpeedtestConfigError(SpeedtestException): - """Configuration XML is invalid""" - - -class SpeedtestServersError(SpeedtestException): - """Servers XML is invalid""" - - -class ConfigRetrievalError(SpeedtestHTTPError): - """Could not retrieve config.php""" - - -class ServersRetrievalError(SpeedtestHTTPError): - """Could not retrieve speedtest-servers.php""" - - -class InvalidServerIDType(SpeedtestException): - """Server ID used for filtering was not an integer""" - - -class NoMatchedServers(SpeedtestException): - """No servers matched when filtering""" - - -class SpeedtestMiniConnectFailure(SpeedtestException): - """Could not connect to the provided speedtest mini server""" - - -class InvalidSpeedtestMiniServer(SpeedtestException): - """Server provided as a speedtest mini server does not actually appear - to be a speedtest mini server - """ - - -class ShareResultsConnectFailure(SpeedtestException): - """Could not connect to speedtest.net API to POST results""" - - -class ShareResultsSubmitFailure(SpeedtestException): - """Unable to successfully POST results to speedtest.net API after - connection - """ - - -class SpeedtestUploadTimeout(SpeedtestException): - """testlength configuration reached during upload - Used to ensure the upload halts when no additional data should be sent - """ - - -class SpeedtestBestServerFailure(SpeedtestException): - """Unable to determine best server""" - - -class SpeedtestMissingBestServer(SpeedtestException): - """get_best_server not called or not able to determine best server""" - - -def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT, - source_address=None): - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. - - Largely vendored from Python 2.7, modified to work with Python 2.4 - """ - - host, port = address - err = None - for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket.socket(af, socktype, proto) - if timeout is not _GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(float(timeout)) - if source_address: - sock.bind(source_address) - sock.connect(sa) - return sock - - except socket.error: - err = get_exception() - if sock is not None: - sock.close() - - if err is not None: - raise err - else: - raise socket.error("getaddrinfo returns an empty list") - - -class SpeedtestHTTPConnection(HTTPConnection): - """Custom HTTPConnection to support source_address across - Python 2.4 - Python 3 - """ - def __init__(self, *args, **kwargs): - source_address = kwargs.pop('source_address', None) - timeout = kwargs.pop('timeout', 10) - - self._tunnel_host = None - - HTTPConnection.__init__(self, *args, **kwargs) - - self.source_address = source_address - self.timeout = timeout - - def connect(self): - """Connect to the host and port specified in __init__.""" - try: - self.sock = socket.create_connection( - (self.host, self.port), - self.timeout, - self.source_address - ) - except (AttributeError, TypeError): - self.sock = create_connection( - (self.host, self.port), - self.timeout, - self.source_address - ) - - if self._tunnel_host: - self._tunnel() - - -if HTTPSConnection: - class SpeedtestHTTPSConnection(HTTPSConnection): - """Custom HTTPSConnection to support source_address across - Python 2.4 - Python 3 - """ - default_port = 443 - - def __init__(self, *args, **kwargs): - source_address = kwargs.pop('source_address', None) - timeout = kwargs.pop('timeout', 10) - - self._tunnel_host = None - - HTTPSConnection.__init__(self, *args, **kwargs) - - self.timeout = timeout - self.source_address = source_address - - def connect(self): - "Connect to a host on a given (SSL) port." - try: - self.sock = socket.create_connection( - (self.host, self.port), - self.timeout, - self.source_address - ) - except (AttributeError, TypeError): - self.sock = create_connection( - (self.host, self.port), - self.timeout, - self.source_address - ) - - if self._tunnel_host: - self._tunnel() - - if ssl: - try: - kwargs = {} - if hasattr(ssl, 'SSLContext'): - if self._tunnel_host: - kwargs['server_hostname'] = self._tunnel_host - else: - kwargs['server_hostname'] = self.host - self.sock = self._context.wrap_socket(self.sock, **kwargs) - except AttributeError: - self.sock = ssl.wrap_socket(self.sock) - try: - self.sock.server_hostname = self.host - except AttributeError: - pass - elif FakeSocket: - # Python 2.4/2.5 support - try: - self.sock = FakeSocket(self.sock, socket.ssl(self.sock)) - except AttributeError: - raise SpeedtestException( - 'This version of Python does not support HTTPS/SSL ' - 'functionality' - ) - else: - raise SpeedtestException( - 'This version of Python does not support HTTPS/SSL ' - 'functionality' - ) - - -def _build_connection(connection, source_address, timeout, context=None): - """Cross Python 2.4 - Python 3 callable to build an ``HTTPConnection`` or - ``HTTPSConnection`` with the args we need - - Called from ``http(s)_open`` methods of ``SpeedtestHTTPHandler`` or - ``SpeedtestHTTPSHandler`` - """ - def inner(host, **kwargs): - kwargs.update({ - 'source_address': source_address, - 'timeout': timeout - }) - if context: - kwargs['context'] = context - return connection(host, **kwargs) - return inner - - -class SpeedtestHTTPHandler(AbstractHTTPHandler): - """Custom ``HTTPHandler`` that can build a ``HTTPConnection`` with the - args we need for ``source_address`` and ``timeout`` - """ - def __init__(self, debuglevel=0, source_address=None, timeout=10): - AbstractHTTPHandler.__init__(self, debuglevel) - self.source_address = source_address - self.timeout = timeout - - def http_open(self, req): - return self.do_open( - _build_connection( - SpeedtestHTTPConnection, - self.source_address, - self.timeout - ), - req - ) - - http_request = AbstractHTTPHandler.do_request_ - - -class SpeedtestHTTPSHandler(AbstractHTTPHandler): - """Custom ``HTTPSHandler`` that can build a ``HTTPSConnection`` with the - args we need for ``source_address`` and ``timeout`` - """ - def __init__(self, debuglevel=0, context=None, source_address=None, - timeout=10): - AbstractHTTPHandler.__init__(self, debuglevel) - self._context = context - self.source_address = source_address - self.timeout = timeout - - def https_open(self, req): - return self.do_open( - _build_connection( - SpeedtestHTTPSConnection, - self.source_address, - self.timeout, - context=self._context, - ), - req - ) - - https_request = AbstractHTTPHandler.do_request_ - - -def build_opener(source_address=None, timeout=10): - """Function similar to ``urllib2.build_opener`` that will build - an ``OpenerDirector`` with the explicit handlers we want, - ``source_address`` for binding, ``timeout`` and our custom - `User-Agent` - """ - - printer('Timeout set to %d' % timeout, debug=True) - - if source_address: - source_address_tuple = (source_address, 0) - printer('Binding to source address: %r' % (source_address_tuple,), - debug=True) - else: - source_address_tuple = None - - handlers = [ - ProxyHandler(), - SpeedtestHTTPHandler(source_address=source_address_tuple, - timeout=timeout), - SpeedtestHTTPSHandler(source_address=source_address_tuple, - timeout=timeout), - HTTPDefaultErrorHandler(), - HTTPRedirectHandler(), - HTTPErrorProcessor() - ] - - opener = OpenerDirector() - opener.addheaders = [('User-agent', build_user_agent())] - - for handler in handlers: - opener.add_handler(handler) - - return opener - - -class GzipDecodedResponse(GZIP_BASE): - """A file-like object to decode a response encoded with the gzip - method, as described in RFC 1952. - - Largely copied from ``xmlrpclib``/``xmlrpc.client`` and modified - to work for py2.4-py3 - """ - def __init__(self, response): - # response doesn't support tell() and read(), required by - # GzipFile - if not gzip: - raise SpeedtestHTTPError('HTTP response body is gzip encoded, ' - 'but gzip support is not available') - IO = BytesIO or StringIO - self.io = IO() - while 1: - chunk = response.read(1024) - if len(chunk) == 0: - break - self.io.write(chunk) - self.io.seek(0) - gzip.GzipFile.__init__(self, mode='rb', fileobj=self.io) - - def close(self): - try: - gzip.GzipFile.close(self) - finally: - self.io.close() - - -def get_exception(): - """Helper function to work with py2.4-py3 for getting the current - exception in a try/except block - """ - return sys.exc_info()[1] - - -def distance(origin, destination): - """Determine distance between 2 sets of [lat,lon] in km""" - - lat1, lon1 = origin - lat2, lon2 = destination - radius = 6371 # km - - dlat = math.radians(lat2 - lat1) - dlon = math.radians(lon2 - lon1) - a = (math.sin(dlat / 2) * math.sin(dlat / 2) + - math.cos(math.radians(lat1)) * - math.cos(math.radians(lat2)) * math.sin(dlon / 2) * - math.sin(dlon / 2)) - c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) - d = radius * c - - return d - - -def build_user_agent(): - """Build a Mozilla/5.0 compatible User-Agent string""" - - ua_tuple = ( - 'Mozilla/5.0', - '(%s; U; %s; en-us)' % (platform.platform(), - platform.architecture()[0]), - 'Python/%s' % platform.python_version(), - '(KHTML, like Gecko)', - 'speedtest-cli/%s' % __version__ - ) - user_agent = ' '.join(ua_tuple) - printer('User-Agent: %s' % user_agent, debug=True) - return user_agent - - -def build_request(url, data=None, headers=None, bump='0', secure=False): - """Build a urllib2 request object - - This function automatically adds a User-Agent header to all requests - - """ - - if not headers: - headers = {} - - if url[0] == ':': - scheme = ('http', 'https')[bool(secure)] - schemed_url = '%s%s' % (scheme, url) - else: - schemed_url = url - - if '?' in url: - delim = '&' - else: - delim = '?' - - # WHO YOU GONNA CALL? CACHE BUSTERS! - final_url = '%s%sx=%s.%s' % (schemed_url, delim, - int(timeit.time.time() * 1000), - bump) - - headers.update({ - 'Cache-Control': 'no-cache', - }) - - printer('%s %s' % (('GET', 'POST')[bool(data)], final_url), - debug=True) - - return Request(final_url, data=data, headers=headers) - - -def catch_request(request, opener=None): - """Helper function to catch common exceptions encountered when - establishing a connection with a HTTP/HTTPS request - - """ - - if opener: - _open = opener.open - else: - _open = urlopen - - try: - uh = _open(request) - if request.get_full_url() != uh.geturl(): - printer('Redirected to %s' % uh.geturl(), debug=True) - return uh, False - except HTTP_ERRORS: - e = get_exception() - return None, e - - -def get_response_stream(response): - """Helper function to return either a Gzip reader if - ``Content-Encoding`` is ``gzip`` otherwise the response itself - - """ - - try: - getheader = response.headers.getheader - except AttributeError: - getheader = response.getheader - - if getheader('content-encoding') == 'gzip': - return GzipDecodedResponse(response) - - return response - - -def get_attributes_by_tag_name(dom, tag_name): - """Retrieve an attribute from an XML document and return it in a - consistent format - - Only used with xml.dom.minidom, which is likely only to be used - with python versions older than 2.5 - """ - elem = dom.getElementsByTagName(tag_name)[0] - return dict(list(elem.attributes.items())) - - -def print_dots(shutdown_event): - """Built in callback function used by Thread classes for printing - status - """ - def inner(current, total, start=False, end=False): - if event_is_set(shutdown_event): - return - - sys.stdout.write('.') - if current + 1 == total and end is True: - sys.stdout.write('\n') - sys.stdout.flush() - return inner - - -def do_nothing(*args, **kwargs): - pass - - -class HTTPDownloader(threading.Thread): - """Thread class for retrieving a URL""" - - def __init__(self, i, request, start, timeout, opener=None, - shutdown_event=None): - threading.Thread.__init__(self) - self.request = request - self.result = [0] - self.starttime = start - self.timeout = timeout - self.i = i - if opener: - self._opener = opener.open - else: - self._opener = urlopen - - if shutdown_event: - self._shutdown_event = shutdown_event - else: - self._shutdown_event = FakeShutdownEvent() - - def run(self): - try: - if (timeit.default_timer() - self.starttime) <= self.timeout: - f = self._opener(self.request) - while (not event_is_set(self._shutdown_event) and - (timeit.default_timer() - self.starttime) <= - self.timeout): - self.result.append(len(f.read(10240))) - if self.result[-1] == 0: - break - f.close() - except IOError: - pass - except HTTP_ERRORS: - pass - - -class HTTPUploaderData(object): - """File like object to improve cutting off the upload once the timeout - has been reached - """ - - def __init__(self, length, start, timeout, shutdown_event=None): - self.length = length - self.start = start - self.timeout = timeout - - if shutdown_event: - self._shutdown_event = shutdown_event - else: - self._shutdown_event = FakeShutdownEvent() - - self._data = None - - self.total = [0] - - def pre_allocate(self): - chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' - multiplier = int(round(int(self.length) / 36.0)) - IO = BytesIO or StringIO - try: - self._data = IO( - ('content1=%s' % - (chars * multiplier)[0:int(self.length) - 9] - ).encode() - ) - except MemoryError: - raise SpeedtestCLIError( - 'Insufficient memory to pre-allocate upload data. Please ' - 'use --no-pre-allocate' - ) - - @property - def data(self): - if not self._data: - self.pre_allocate() - return self._data - - def read(self, n=10240): - if ((timeit.default_timer() - self.start) <= self.timeout and - not event_is_set(self._shutdown_event)): - chunk = self.data.read(n) - self.total.append(len(chunk)) - return chunk - else: - raise SpeedtestUploadTimeout() - - def __len__(self): - return self.length - - -class HTTPUploader(threading.Thread): - """Thread class for putting a URL""" - - def __init__(self, i, request, start, size, timeout, opener=None, - shutdown_event=None): - threading.Thread.__init__(self) - self.request = request - self.request.data.start = self.starttime = start - self.size = size - self.result = 0 - self.timeout = timeout - self.i = i - - if opener: - self._opener = opener.open - else: - self._opener = urlopen - - if shutdown_event: - self._shutdown_event = shutdown_event - else: - self._shutdown_event = FakeShutdownEvent() - - def run(self): - request = self.request - try: - if ((timeit.default_timer() - self.starttime) <= self.timeout and - not event_is_set(self._shutdown_event)): - try: - f = self._opener(request) - except TypeError: - # PY24 expects a string or buffer - # This also causes issues with Ctrl-C, but we will concede - # for the moment that Ctrl-C on PY24 isn't immediate - request = build_request(self.request.get_full_url(), - data=request.data.read(self.size)) - f = self._opener(request) - f.read(11) - f.close() - self.result = sum(self.request.data.total) - else: - self.result = 0 - except (IOError, SpeedtestUploadTimeout): - self.result = sum(self.request.data.total) - except HTTP_ERRORS: - self.result = 0 - - -class SpeedtestResults(object): - """Class for holding the results of a speedtest, including: - - Download speed - Upload speed - Ping/Latency to test server - Data about server that the test was run against - - Additionally this class can return a result data as a dictionary or CSV, - as well as submit a POST of the result data to the speedtest.net API - to get a share results image link. - """ - - def __init__(self, download=0, upload=0, ping=0, server=None, client=None, - opener=None, secure=False): - self.download = download - self.upload = upload - self.ping = ping - if server is None: - self.server = {} - else: - self.server = server - self.client = client or {} - - self._share = None - self.timestamp = '%sZ' % datetime.datetime.utcnow().isoformat() - self.bytes_received = 0 - self.bytes_sent = 0 - - if opener: - self._opener = opener - else: - self._opener = build_opener() - - self._secure = secure - - def __repr__(self): - return repr(self.dict()) - - def share(self): - """POST data to the speedtest.net API to obtain a share results - link - """ - - if self._share: - return self._share - - download = int(round(self.download / 1000.0, 0)) - ping = int(round(self.ping, 0)) - upload = int(round(self.upload / 1000.0, 0)) - - # Build the request to send results back to speedtest.net - # We use a list instead of a dict because the API expects parameters - # in a certain order - api_data = [ - 'recommendedserverid=%s' % self.server['id'], - 'ping=%s' % ping, - 'screenresolution=', - 'promo=', - 'download=%s' % download, - 'screendpi=', - 'upload=%s' % upload, - 'testmethod=http', - 'hash=%s' % md5(('%s-%s-%s-%s' % - (ping, upload, download, '297aae72')) - .encode()).hexdigest(), - 'touchscreen=none', - 'startmode=pingselect', - 'accuracy=1', - 'bytesreceived=%s' % self.bytes_received, - 'bytessent=%s' % self.bytes_sent, - 'serverid=%s' % self.server['id'], - ] - - headers = {'Referer': 'http://c.speedtest.net/flash/speedtest.swf'} - request = build_request('://www.speedtest.net/api/api.php', - data='&'.join(api_data).encode(), - headers=headers, secure=self._secure) - f, e = catch_request(request, opener=self._opener) - if e: - raise ShareResultsConnectFailure(e) - - response = f.read() - code = f.code - f.close() - - if int(code) != 200: - raise ShareResultsSubmitFailure('Could not submit results to ' - 'speedtest.net') - - qsargs = parse_qs(response.decode()) - resultid = qsargs.get('resultid') - if not resultid or len(resultid) != 1: - raise ShareResultsSubmitFailure('Could not submit results to ' - 'speedtest.net') - - self._share = 'http://www.speedtest.net/result/%s.png' % resultid[0] - - return self._share - - def dict(self): - """Return dictionary of result data""" - - return { - 'download': self.download, - 'upload': self.upload, - 'ping': self.ping, - 'server': self.server, - 'timestamp': self.timestamp, - 'bytes_sent': self.bytes_sent, - 'bytes_received': self.bytes_received, - 'share': self._share, - 'client': self.client, - } - - @staticmethod - def csv_header(delimiter=','): - """Return CSV Headers""" - - row = ['Server ID', 'Sponsor', 'Server Name', 'Timestamp', 'Distance', - 'Ping', 'Download', 'Upload', 'Share', 'IP Address'] - out = StringIO() - writer = csv.writer(out, delimiter=delimiter, lineterminator='') - writer.writerow([to_utf8(v) for v in row]) - return out.getvalue() - - def csv(self, delimiter=','): - """Return data in CSV format""" - - data = self.dict() - out = StringIO() - writer = csv.writer(out, delimiter=delimiter, lineterminator='') - row = [data['server']['id'], data['server']['sponsor'], - data['server']['name'], data['timestamp'], - data['server']['d'], data['ping'], data['download'], - data['upload'], self._share or '', self.client['ip']] - writer.writerow([to_utf8(v) for v in row]) - return out.getvalue() - - def json(self, pretty=False): - """Return data in JSON format""" - - kwargs = {} - if pretty: - kwargs.update({ - 'indent': 4, - 'sort_keys': True - }) - return json.dumps(self.dict(), **kwargs) - - -class Speedtest(object): - """Class for performing standard speedtest.net testing operations""" - - def __init__(self, config=None, source_address=None, timeout=10, - secure=False, shutdown_event=None): - self.config = {} - - self._source_address = source_address - self._timeout = timeout - self._opener = build_opener(source_address, timeout) - - self._secure = secure - - if shutdown_event: - self._shutdown_event = shutdown_event - else: - self._shutdown_event = FakeShutdownEvent() - - self.get_config() - if config is not None: - self.config.update(config) - - self.servers = {} - self.closest = [] - self._best = {} - - self.results = SpeedtestResults( - client=self.config['client'], - opener=self._opener, - secure=secure, - ) - - @property - def best(self): - if not self._best: - self.get_best_server() - return self._best - - def get_config(self): - """Download the speedtest.net configuration and return only the data - we are interested in - """ - - headers = {} - if gzip: - headers['Accept-Encoding'] = 'gzip' - request = build_request('://www.speedtest.net/speedtest-config.php', - headers=headers, secure=self._secure) - uh, e = catch_request(request, opener=self._opener) - if e: - raise ConfigRetrievalError(e) - configxml_list = [] - - stream = get_response_stream(uh) - - while 1: - try: - configxml_list.append(stream.read(1024)) - except (OSError, EOFError): - raise ConfigRetrievalError(get_exception()) - if len(configxml_list[-1]) == 0: - break - stream.close() - uh.close() - - if int(uh.code) != 200: - return None - - configxml = ''.encode().join(configxml_list) - - printer('Config XML:\n%s' % configxml, debug=True) - - try: - try: - root = ET.fromstring(configxml) - except ET.ParseError: - e = get_exception() - raise SpeedtestConfigError( - 'Malformed speedtest.net configuration: %s' % e - ) - server_config = root.find('server-config').attrib - download = root.find('download').attrib - upload = root.find('upload').attrib - # times = root.find('times').attrib - client = root.find('client').attrib - - except AttributeError: - try: - root = DOM.parseString(configxml) - except ExpatError: - e = get_exception() - raise SpeedtestConfigError( - 'Malformed speedtest.net configuration: %s' % e - ) - server_config = get_attributes_by_tag_name(root, 'server-config') - download = get_attributes_by_tag_name(root, 'download') - upload = get_attributes_by_tag_name(root, 'upload') - # times = get_attributes_by_tag_name(root, 'times') - client = get_attributes_by_tag_name(root, 'client') - - ignore_servers = [ - int(i) for i in server_config['ignoreids'].split(',') if i - ] - - ratio = int(upload['ratio']) - upload_max = int(upload['maxchunkcount']) - up_sizes = [32768, 65536, 131072, 262144, 524288, 1048576, 7340032] - sizes = { - 'upload': up_sizes[ratio - 1:], - 'download': [350, 500, 750, 1000, 1500, 2000, 2500, - 3000, 3500, 4000] - } - - size_count = len(sizes['upload']) - - upload_count = int(math.ceil(upload_max / size_count)) - - counts = { - 'upload': upload_count, - 'download': int(download['threadsperurl']) - } - - threads = { - 'upload': int(upload['threads']), - 'download': int(server_config['threadcount']) * 2 - } - - length = { - 'upload': int(upload['testlength']), - 'download': int(download['testlength']) - } - - self.config.update({ - 'client': client, - 'ignore_servers': ignore_servers, - 'sizes': sizes, - 'counts': counts, - 'threads': threads, - 'length': length, - 'upload_max': upload_count * size_count - }) - - try: - self.lat_lon = (float(client['lat']), float(client['lon'])) - except ValueError: - raise SpeedtestConfigError( - 'Unknown location: lat=%r lon=%r' % - (client.get('lat'), client.get('lon')) - ) - - printer('Config:\n%r' % self.config, debug=True) - - return self.config - - def get_servers(self, servers=None, exclude=None): - """Retrieve a the list of speedtest.net servers, optionally filtered - to servers matching those specified in the ``servers`` argument - """ - if servers is None: - servers = [] - - if exclude is None: - exclude = [] - - self.servers.clear() - - for server_list in (servers, exclude): - for i, s in enumerate(server_list): - try: - server_list[i] = int(s) - except ValueError: - raise InvalidServerIDType( - '%s is an invalid server type, must be int' % s - ) - - urls = [ - '://www.speedtest.net/speedtest-servers-static.php', - 'http://c.speedtest.net/speedtest-servers-static.php', - '://www.speedtest.net/speedtest-servers.php', - 'http://c.speedtest.net/speedtest-servers.php', - ] - - headers = {} - if gzip: - headers['Accept-Encoding'] = 'gzip' - - errors = [] - for url in urls: - try: - request = build_request( - '%s?threads=%s' % (url, - self.config['threads']['download']), - headers=headers, - secure=self._secure - ) - uh, e = catch_request(request, opener=self._opener) - if e: - errors.append('%s' % e) - raise ServersRetrievalError() - - stream = get_response_stream(uh) - - serversxml_list = [] - while 1: - try: - serversxml_list.append(stream.read(1024)) - except (OSError, EOFError): - raise ServersRetrievalError(get_exception()) - if len(serversxml_list[-1]) == 0: - break - - stream.close() - uh.close() - - if int(uh.code) != 200: - raise ServersRetrievalError() - - serversxml = ''.encode().join(serversxml_list) - - printer('Servers XML:\n%s' % serversxml, debug=True) - - try: - try: - try: - root = ET.fromstring(serversxml) - except ET.ParseError: - e = get_exception() - raise SpeedtestServersError( - 'Malformed speedtest.net server list: %s' % e - ) - elements = etree_iter(root, 'server') - except AttributeError: - try: - root = DOM.parseString(serversxml) - except ExpatError: - e = get_exception() - raise SpeedtestServersError( - 'Malformed speedtest.net server list: %s' % e - ) - elements = root.getElementsByTagName('server') - except (SyntaxError, xml.parsers.expat.ExpatError): - raise ServersRetrievalError() - - for server in elements: - try: - attrib = server.attrib - except AttributeError: - attrib = dict(list(server.attributes.items())) - - if servers and int(attrib.get('id')) not in servers: - continue - - if (int(attrib.get('id')) in self.config['ignore_servers'] - or int(attrib.get('id')) in exclude): - continue - - try: - d = distance(self.lat_lon, - (float(attrib.get('lat')), - float(attrib.get('lon')))) - except Exception: - continue - - attrib['d'] = d - - try: - self.servers[d].append(attrib) - except KeyError: - self.servers[d] = [attrib] - - break - - except ServersRetrievalError: - continue - - if (servers or exclude) and not self.servers: - raise NoMatchedServers() - - return self.servers - - def set_mini_server(self, server): - """Instead of querying for a list of servers, set a link to a - speedtest mini server - """ - - urlparts = urlparse(server) - - name, ext = os.path.splitext(urlparts[2]) - if ext: - url = os.path.dirname(server) - else: - url = server - - request = build_request(url) - uh, e = catch_request(request, opener=self._opener) - if e: - raise SpeedtestMiniConnectFailure('Failed to connect to %s' % - server) - else: - text = uh.read() - uh.close() - - extension = re.findall('upload_?[Ee]xtension: "([^"]+)"', - text.decode()) - if not extension: - for ext in ['php', 'asp', 'aspx', 'jsp']: - try: - f = self._opener.open( - '%s/speedtest/upload.%s' % (url, ext) - ) - except Exception: - pass - else: - data = f.read().strip().decode() - if (f.code == 200 and - len(data.splitlines()) == 1 and - re.match('size=[0-9]', data)): - extension = [ext] - break - if not urlparts or not extension: - raise InvalidSpeedtestMiniServer('Invalid Speedtest Mini Server: ' - '%s' % server) - - self.servers = [{ - 'sponsor': 'Speedtest Mini', - 'name': urlparts[1], - 'd': 0, - 'url': '%s/speedtest/upload.%s' % (url.rstrip('/'), extension[0]), - 'latency': 0, - 'id': 0 - }] - - return self.servers - - def get_closest_servers(self, limit=5): - """Limit servers to the closest speedtest.net servers based on - geographic distance - """ - - if not self.servers: - self.get_servers() - - for d in sorted(self.servers.keys()): - for s in self.servers[d]: - self.closest.append(s) - if len(self.closest) == limit: - break - else: - continue - break - - printer('Closest Servers:\n%r' % self.closest, debug=True) - return self.closest - - def get_best_server(self, servers=None): - """Perform a speedtest.net "ping" to determine which speedtest.net - server has the lowest latency - """ - - if not servers: - if not self.closest: - servers = self.get_closest_servers() - servers = self.closest - - if self._source_address: - source_address_tuple = (self._source_address, 0) - else: - source_address_tuple = None - - user_agent = build_user_agent() - - results = {} - for server in servers: - cum = [] - url = os.path.dirname(server['url']) - stamp = int(timeit.time.time() * 1000) - latency_url = '%s/latency.txt?x=%s' % (url, stamp) - for i in range(0, 3): - this_latency_url = '%s.%s' % (latency_url, i) - printer('%s %s' % ('GET', this_latency_url), - debug=True) - urlparts = urlparse(latency_url) - try: - if urlparts[0] == 'https': - h = SpeedtestHTTPSConnection( - urlparts[1], - source_address=source_address_tuple - ) - else: - h = SpeedtestHTTPConnection( - urlparts[1], - source_address=source_address_tuple - ) - headers = {'User-Agent': user_agent} - path = '%s?%s' % (urlparts[2], urlparts[4]) - start = timeit.default_timer() - h.request("GET", path, headers=headers) - r = h.getresponse() - total = (timeit.default_timer() - start) - except HTTP_ERRORS: - e = get_exception() - printer('ERROR: %r' % e, debug=True) - cum.append(3600) - continue - - text = r.read(9) - if int(r.status) == 200 and text == 'test=test'.encode(): - cum.append(total) - else: - cum.append(3600) - h.close() - - avg = round((sum(cum) / 6) * 1000.0, 3) - results[avg] = server - - try: - fastest = sorted(results.keys())[0] - except IndexError: - raise SpeedtestBestServerFailure('Unable to connect to servers to ' - 'test latency.') - best = results[fastest] - best['latency'] = fastest - - self.results.ping = fastest - self.results.server = best - - self._best.update(best) - printer('Best Server:\n%r' % best, debug=True) - return best - - def download(self, callback=do_nothing, threads=None): - """Test download speed against speedtest.net - - A ``threads`` value of ``None`` will fall back to those dictated - by the speedtest.net configuration - """ - - urls = [] - for size in self.config['sizes']['download']: - for _ in range(0, self.config['counts']['download']): - urls.append('%s/random%sx%s.jpg' % - (os.path.dirname(self.best['url']), size, size)) - - request_count = len(urls) - requests = [] - for i, url in enumerate(urls): - requests.append( - build_request(url, bump=i, secure=self._secure) - ) - - max_threads = threads or self.config['threads']['download'] - in_flight = {'threads': 0} - - def producer(q, requests, request_count): - for i, request in enumerate(requests): - thread = HTTPDownloader( - i, - request, - start, - self.config['length']['download'], - opener=self._opener, - shutdown_event=self._shutdown_event - ) - while in_flight['threads'] >= max_threads: - timeit.time.sleep(0.001) - thread.start() - q.put(thread, True) - in_flight['threads'] += 1 - callback(i, request_count, start=True) - - finished = [] - - def consumer(q, request_count): - _is_alive = thread_is_alive - while len(finished) < request_count: - thread = q.get(True) - while _is_alive(thread): - thread.join(timeout=0.001) - in_flight['threads'] -= 1 - finished.append(sum(thread.result)) - callback(thread.i, request_count, end=True) - - q = Queue(max_threads) - prod_thread = threading.Thread(target=producer, - args=(q, requests, request_count)) - cons_thread = threading.Thread(target=consumer, - args=(q, request_count)) - start = timeit.default_timer() - prod_thread.start() - cons_thread.start() - _is_alive = thread_is_alive - while _is_alive(prod_thread): - prod_thread.join(timeout=0.001) - while _is_alive(cons_thread): - cons_thread.join(timeout=0.001) - - stop = timeit.default_timer() - self.results.bytes_received = sum(finished) - self.results.download = ( - (self.results.bytes_received / (stop - start)) * 8.0 - ) - if self.results.download > 100000: - self.config['threads']['upload'] = 8 - return self.results.download - - def upload(self, callback=do_nothing, pre_allocate=True, threads=None): - """Test upload speed against speedtest.net - - A ``threads`` value of ``None`` will fall back to those dictated - by the speedtest.net configuration - """ - - sizes = [] - - for size in self.config['sizes']['upload']: - for _ in range(0, self.config['counts']['upload']): - sizes.append(size) - - # request_count = len(sizes) - request_count = self.config['upload_max'] - - requests = [] - for i, size in enumerate(sizes): - # We set ``0`` for ``start`` and handle setting the actual - # ``start`` in ``HTTPUploader`` to get better measurements - data = HTTPUploaderData( - size, - 0, - self.config['length']['upload'], - shutdown_event=self._shutdown_event - ) - if pre_allocate: - data.pre_allocate() - - headers = {'Content-length': size} - requests.append( - ( - build_request(self.best['url'], data, secure=self._secure, - headers=headers), - size - ) - ) - - max_threads = threads or self.config['threads']['upload'] - in_flight = {'threads': 0} - - def producer(q, requests, request_count): - for i, request in enumerate(requests[:request_count]): - thread = HTTPUploader( - i, - request[0], - start, - request[1], - self.config['length']['upload'], - opener=self._opener, - shutdown_event=self._shutdown_event - ) - while in_flight['threads'] >= max_threads: - timeit.time.sleep(0.001) - thread.start() - q.put(thread, True) - in_flight['threads'] += 1 - callback(i, request_count, start=True) - - finished = [] - - def consumer(q, request_count): - _is_alive = thread_is_alive - while len(finished) < request_count: - thread = q.get(True) - while _is_alive(thread): - thread.join(timeout=0.001) - in_flight['threads'] -= 1 - finished.append(thread.result) - callback(thread.i, request_count, end=True) - - q = Queue(threads or self.config['threads']['upload']) - prod_thread = threading.Thread(target=producer, - args=(q, requests, request_count)) - cons_thread = threading.Thread(target=consumer, - args=(q, request_count)) - start = timeit.default_timer() - prod_thread.start() - cons_thread.start() - _is_alive = thread_is_alive - while _is_alive(prod_thread): - prod_thread.join(timeout=0.1) - while _is_alive(cons_thread): - cons_thread.join(timeout=0.1) - - stop = timeit.default_timer() - self.results.bytes_sent = sum(finished) - self.results.upload = ( - (self.results.bytes_sent / (stop - start)) * 8.0 - ) - return self.results.upload - - -def ctrl_c(shutdown_event): - """Catch Ctrl-C key sequence and set a SHUTDOWN_EVENT for our threaded - operations - """ - def inner(signum, frame): - shutdown_event.set() - printer('\nCancelling...', error=True) - sys.exit(0) - return inner - - -def version(): - """Print the version""" - - printer('speedtest-cli %s' % __version__) - printer('Python %s' % sys.version.replace('\n', '')) - sys.exit(0) - - -def csv_header(delimiter=','): - """Print the CSV Headers""" - - printer(SpeedtestResults.csv_header(delimiter=delimiter)) - sys.exit(0) - - -def parse_args(): - """Function to handle building and parsing of command line arguments""" - description = ( - 'Command line interface for testing internet bandwidth using ' - 'speedtest.net.\n' - '------------------------------------------------------------' - '--------------\n' - 'https://github.com/sivel/speedtest-cli') - - parser = ArgParser(description=description) - # Give optparse.OptionParser an `add_argument` method for - # compatibility with argparse.ArgumentParser - try: - parser.add_argument = parser.add_option - except AttributeError: - pass - parser.add_argument('--no-download', dest='download', default=True, - action='store_const', const=False, - help='Do not perform download test') - parser.add_argument('--no-upload', dest='upload', default=True, - action='store_const', const=False, - help='Do not perform upload test') - parser.add_argument('--single', default=False, action='store_true', - help='Only use a single connection instead of ' - 'multiple. This simulates a typical file ' - 'transfer.') - parser.add_argument('--bytes', dest='units', action='store_const', - const=('byte', 8), default=('bit', 1), - help='Display values in bytes instead of bits. Does ' - 'not affect the image generated by --share, nor ' - 'output from --json or --csv') - parser.add_argument('--share', action='store_true', - help='Generate and provide a URL to the speedtest.net ' - 'share results image, not displayed with --csv') - parser.add_argument('--simple', action='store_true', default=False, - help='Suppress verbose output, only show basic ' - 'information') - parser.add_argument('--csv', action='store_true', default=False, - help='Suppress verbose output, only show basic ' - 'information in CSV format. Speeds listed in ' - 'bit/s and not affected by --bytes') - parser.add_argument('--csv-delimiter', default=',', type=PARSER_TYPE_STR, - help='Single character delimiter to use in CSV ' - 'output. Default ","') - parser.add_argument('--csv-header', action='store_true', default=False, - help='Print CSV headers') - parser.add_argument('--json', action='store_true', default=False, - help='Suppress verbose output, only show basic ' - 'information in JSON format. Speeds listed in ' - 'bit/s and not affected by --bytes') - parser.add_argument('--list', action='store_true', - help='Display a list of speedtest.net servers ' - 'sorted by distance') - parser.add_argument('--server', type=PARSER_TYPE_INT, action='append', - help='Specify a server ID to test against. Can be ' - 'supplied multiple times') - parser.add_argument('--exclude', type=PARSER_TYPE_INT, action='append', - help='Exclude a server from selection. Can be ' - 'supplied multiple times') - parser.add_argument('--mini', help='URL of the Speedtest Mini server') - parser.add_argument('--source', help='Source IP address to bind to') - parser.add_argument('--timeout', default=10, type=PARSER_TYPE_FLOAT, - help='HTTP timeout in seconds. Default 10') - parser.add_argument('--secure', action='store_true', - help='Use HTTPS instead of HTTP when communicating ' - 'with speedtest.net operated servers') - parser.add_argument('--no-pre-allocate', dest='pre_allocate', - action='store_const', default=True, const=False, - help='Do not pre allocate upload data. Pre allocation ' - 'is enabled by default to improve upload ' - 'performance. To support systems with ' - 'insufficient memory, use this option to avoid a ' - 'MemoryError') - parser.add_argument('--version', action='store_true', - help='Show the version number and exit') - parser.add_argument('--debug', action='store_true', - help=ARG_SUPPRESS, default=ARG_SUPPRESS) - - options = parser.parse_args() - if isinstance(options, tuple): - args = options[0] - else: - args = options - return args - - -def validate_optional_args(args): - """Check if an argument was provided that depends on a module that may - not be part of the Python standard library. - - If such an argument is supplied, and the module does not exist, exit - with an error stating which module is missing. - """ - optional_args = { - 'json': ('json/simplejson python module', json), - 'secure': ('SSL support', HTTPSConnection), - } - - for arg, info in optional_args.items(): - if getattr(args, arg, False) and info[1] is None: - raise SystemExit('%s is not installed. --%s is ' - 'unavailable' % (info[0], arg)) - - -def printer(string, quiet=False, debug=False, error=False, **kwargs): - """Helper function print a string with various features""" - - if debug and not DEBUG: - return - - if debug: - if sys.stdout.isatty(): - out = '\033[1;30mDEBUG: %s\033[0m' % string - else: - out = 'DEBUG: %s' % string - else: - out = string - - if error: - kwargs['file'] = sys.stderr - - if not quiet: - print_(out, **kwargs) - - -def shell(): - """Run the full speedtest.net test""" - - global DEBUG - shutdown_event = threading.Event() - - signal.signal(signal.SIGINT, ctrl_c(shutdown_event)) - - args = parse_args() - - # Print the version and exit - if args.version: - version() - - if not args.download and not args.upload: - raise SpeedtestCLIError('Cannot supply both --no-download and ' - '--no-upload') - - if len(args.csv_delimiter) != 1: - raise SpeedtestCLIError('--csv-delimiter must be a single character') - - if args.csv_header: - csv_header(args.csv_delimiter) - - validate_optional_args(args) - - debug = getattr(args, 'debug', False) - if debug == 'SUPPRESSHELP': - debug = False - if debug: - DEBUG = True - - if args.simple or args.csv or args.json: - quiet = True - else: - quiet = False - - if args.csv or args.json: - machine_format = True - else: - machine_format = False - - # Don't set a callback if we are running quietly - if quiet or debug: - callback = do_nothing - else: - callback = print_dots(shutdown_event) - - printer('Retrieving speedtest.net configuration...', quiet) - try: - speedtest = Speedtest( - source_address=args.source, - timeout=args.timeout, - secure=args.secure - ) - except (ConfigRetrievalError,) + HTTP_ERRORS: - printer('Cannot retrieve speedtest configuration', error=True) - raise SpeedtestCLIError(get_exception()) - - if args.list: - try: - speedtest.get_servers() - except (ServersRetrievalError,) + HTTP_ERRORS: - printer('Cannot retrieve speedtest server list', error=True) - raise SpeedtestCLIError(get_exception()) - - for _, servers in sorted(speedtest.servers.items()): - for server in servers: - line = ('%(id)5s) %(sponsor)s (%(name)s, %(country)s) ' - '[%(d)0.2f km]' % server) - try: - printer(line) - except IOError: - e = get_exception() - if e.errno != errno.EPIPE: - raise - sys.exit(0) - - printer('Testing from %(isp)s (%(ip)s)...' % speedtest.config['client'], - quiet) - - if not args.mini: - printer('Retrieving speedtest.net server list...', quiet) - try: - speedtest.get_servers(servers=args.server, exclude=args.exclude) - except NoMatchedServers: - raise SpeedtestCLIError( - 'No matched servers: %s' % - ', '.join('%s' % s for s in args.server) - ) - except (ServersRetrievalError,) + HTTP_ERRORS: - printer('Cannot retrieve speedtest server list', error=True) - raise SpeedtestCLIError(get_exception()) - except InvalidServerIDType: - raise SpeedtestCLIError( - '%s is an invalid server type, must ' - 'be an int' % ', '.join('%s' % s for s in args.server) - ) - - if args.server and len(args.server) == 1: - printer('Retrieving information for the selected server...', quiet) - else: - printer('Selecting best server based on ping...', quiet) - speedtest.get_best_server() - elif args.mini: - speedtest.get_best_server(speedtest.set_mini_server(args.mini)) - - results = speedtest.results - - printer('Hosted by %(sponsor)s (%(name)s) [%(d)0.2f km]: ' - '%(latency)s ms' % results.server, quiet) - - if args.download: - printer('Testing download speed', quiet, - end=('', '\n')[bool(debug)]) - speedtest.download( - callback=callback, - threads=(None, 1)[args.single] - ) - printer('Download: %0.2f M%s/s' % - ((results.download / 1000.0 / 1000.0) / args.units[1], - args.units[0]), - quiet) - else: - printer('Skipping download test', quiet) - - if args.upload: - printer('Testing upload speed', quiet, - end=('', '\n')[bool(debug)]) - speedtest.upload( - callback=callback, - pre_allocate=args.pre_allocate, - threads=(None, 1)[args.single] - ) - printer('Upload: %0.2f M%s/s' % - ((results.upload / 1000.0 / 1000.0) / args.units[1], - args.units[0]), - quiet) - else: - printer('Skipping upload test', quiet) - - printer('Results:\n%r' % results.dict(), debug=True) - - if not args.simple and args.share: - results.share() - - if args.simple: - printer('Ping: %s ms\nDownload: %0.2f M%s/s\nUpload: %0.2f M%s/s' % - (results.ping, - (results.download / 1000.0 / 1000.0) / args.units[1], - args.units[0], - (results.upload / 1000.0 / 1000.0) / args.units[1], - args.units[0])) - elif args.csv: - printer(results.csv(delimiter=args.csv_delimiter)) - elif args.json: - printer(results.json()) - - if args.share and not machine_format: - printer('Share results: %s' % results.share()) - - -def main(): - try: - shell() - except KeyboardInterrupt: - printer('\nCancelling...', error=True) - except (SpeedtestException, SystemExit): - e = get_exception() - # Ignore a successful exit, or argparse exit - if getattr(e, 'code', 1) not in (0, 2): - msg = '%s' % e - if not msg: - msg = '%r' % e - raise SystemExit('ERROR: %s' % msg) - - -if __name__ == '__main__': - main() diff --git a/luci-app-netspeedtest/root/etc/uci-defaults/40_luci-app-netspeedtest b/luci-app-netspeedtest/root/etc/uci-defaults/40_luci-app-netspeedtest deleted file mode 100644 index 6263389d..00000000 --- a/luci-app-netspeedtest/root/etc/uci-defaults/40_luci-app-netspeedtest +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -chmod 755 /etc/init.d/netspeedtest /etc/init.d/speedtest >/dev/null 2>&1 -uci -q batch <<-EOF >/dev/null - delete ucitrack.@netspeedtest[-1] - add ucitrack netspeedtest - set ucitrack.@netspeedtest[-1].init=netspeedtest - commit ucitrack -EOF -rm -rf /tmp/luci-modulecache /tmp/luci-indexcache* -exit 0 diff --git a/luci-app-netspeedtest/root/usr/share/netspeedtest/netspeedtest.txt b/luci-app-netspeedtest/root/usr/share/netspeedtest/netspeedtest.txt deleted file mode 100644 index 0519ecba..00000000 --- a/luci-app-netspeedtest/root/usr/share/netspeedtest/netspeedtest.txt +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/luci-app-netspeedtest/root/usr/share/rpcd/acl.d/luci-app-netspeedtest.json b/luci-app-netspeedtest/root/usr/share/rpcd/acl.d/luci-app-netspeedtest.json deleted file mode 100644 index 3e1fcab6..00000000 --- a/luci-app-netspeedtest/root/usr/share/rpcd/acl.d/luci-app-netspeedtest.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-netspeedtest": { - "description": "Grant UCI access for luci-app-netspeedtest", - "read": { - "uci": [ "netspeedtest" ] - }, - "write": { - "uci": [ "netspeedtest" ] - } - } -} diff --git a/luci-app-nginx-manager/Makefile b/luci-app-nginx-manager/Makefile deleted file mode 100644 index c9f3bfa0..00000000 --- a/luci-app-nginx-manager/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) 2016 Openwrt.org -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI support for NginxManager From sundaqiang -LUCI_DEPENDS:=+luci-ssl-nginx -LUCI_PKGARCH:=all -PKG_MAINTAINER:=sundaqiang - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-nginx-manager/README.md b/luci-app-nginx-manager/README.md deleted file mode 100644 index 1e7b8ae2..00000000 --- a/luci-app-nginx-manager/README.md +++ /dev/null @@ -1,18 +0,0 @@ - -# luci-app-nginx-managerNginx - -Ĺopenwrtnginx - -### ע -1. ĬϵuhttpdΪ·ɺ̨web -2. +luci-nginx +luci-ssl-nginx +luci-ssl-opensslһῪ·ɺ̨https -3. ĬϵuhttpdɾuhttpdҪɾuhttpdڱǰڸĿ¼ִ² - -```bash -sed -i 's/+uhttpd +uhttpd-mod-ubus //g' feeds/luci/collections/luci/Makefile -``` - -### Чչʾ -![nginx-manager][1] - - [1]: https://raw.githubusercontent.com/sundaqiang/openwrt-packages/master/img/nginx-manager.png \ No newline at end of file diff --git a/luci-app-nginx-manager/luasrc/controller/nginx-manager.lua b/luci-app-nginx-manager/luasrc/controller/nginx-manager.lua deleted file mode 100644 index 1bc0103c..00000000 --- a/luci-app-nginx-manager/luasrc/controller/nginx-manager.lua +++ /dev/null @@ -1,42 +0,0 @@ -module("luci.controller.nginx-manager", package.seeall) - -function index() - nixio.fs.rename ("/etc/nginx/uci.conf", "/etc/nginx/ucibak.conf") - if not nixio.fs.access("/etc/nginx/nginx.conf") then - nixio.fs.copyr("/var/lib/nginx/uci.conf", "/etc/nginx/nginx.conf") - luci.sys.call("/etc/init.d/nginx restart") - end - file=nixio.fs.readfile("/etc/uwsgi/vassals/luci-webui.ini") - if tonumber(file:match("limit%pas[%p%s]+(%d+)")) < 5000 then - file=file:gsub("limit%pas[%p%s]+(%d+)","limit-as = 5000") - nixio.fs.writefile("/etc/uwsgi/vassals/luci-webui.ini", file) - luci.sys.call("/etc/init.d/uwsgi restart") - end - nixio.fs.writefile("/etc/config/nginx-manager", "") - x = luci.model.uci.cursor() - x:set("nginx-manager", "config", "nginx") - x:set("nginx-manager", "config", "name", "config") - x:set("nginx-manager", "config", "filepath", "/etc/config/nginx") - x:set("nginx-manager", "main", "nginx") - x:set("nginx-manager", "main", "name", "main") - x:set("nginx-manager", "main", "filepath", "/etc/nginx/nginx.conf") - for path in nixio.fs.dir("/etc/nginx/conf.d") do - if path:find(".conf$") ~= nil then - name = path:gsub(".conf", "") - x:set("nginx-manager", name, "nginx") - x:set("nginx-manager", name, "name", name) - x:set("nginx-manager", name, "filepath", "/etc/nginx/conf.d/" .. path) - end - end - x:commit("nginx-manager") - entry({"admin", "services", "nginx-manager"}, cbi("nginx-manager"), _("Nginx Manager"), 95).dependent = true - entry({"admin", "services", "nginx-manager", "setstatus"}, call("setstatus")).leaf = true -end - -function setstatus() - local e = {} - local mode = luci.http.formvalue('mode') - e.code=luci.sys.call("/etc/init.d/nginx " .. mode) - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end \ No newline at end of file diff --git a/luci-app-nginx-manager/luasrc/model/cbi/nginx-manager.lua b/luci-app-nginx-manager/luasrc/model/cbi/nginx-manager.lua deleted file mode 100644 index 9207c5e8..00000000 --- a/luci-app-nginx-manager/luasrc/model/cbi/nginx-manager.lua +++ /dev/null @@ -1,43 +0,0 @@ -local fs = require "nixio.fs" -local m = Map("nginx-manager",translate("Nginx Manager"), translate("A simple Nginx manager") .. [[
Powered by sundaqiang]]) -s = m:section(TypedSection, "nginx", translate("Web site list")) -s.template = "nginx-manager/index" -s.addremove = true -s.anonymous = false -s:tab("general", translate("General Info")) -s:tab("server", translate("Configuration File")) -s:taboption("general", DummyValue, "name", translate("name")) -s:taboption("general", DummyValue, "filepath", translate("File Path")) -file=s:taboption("server", TextValue, "") -file.template = "cbi/tvalue" -file.rows = 25 -file.wrap = "off" -file.rmempty = true - -function s.create(self,section) - path="/etc/nginx/conf.d/" .. section .. ".conf" - fs.copyr("/etc/nginx/conf.d/templates", path) - TypedSection.create(self,section) - self.map:set(section, "name", section) - self.map:set(section, "filepath", path) - return true -end -function s.remove(self,section) - path="/etc/nginx/conf.d/" .. section .. ".conf" - fs.remove(path) - TypedSection.remove(self,section) -end -function sync_value_to_file(value, file) - value = value:gsub("\r\n?", "\n") - local old_value = fs.readfile(file) - if value ~= old_value then - fs.writefile(file, value) - end -end -function file.cfgvalue(self,section) - return fs.readfile(self.map:get(section, "filepath")) or "" -end -function file.write(self, section, value) - sync_value_to_file(value, self.map:get(section, "filepath")) -end -return m diff --git a/luci-app-nginx-manager/luasrc/view/nginx-manager/index.htm b/luci-app-nginx-manager/luasrc/view/nginx-manager/index.htm deleted file mode 100644 index 86a9fcf8..00000000 --- a/luci-app-nginx-manager/luasrc/view/nginx-manager/index.htm +++ /dev/null @@ -1,62 +0,0 @@ -
- <% if self.title and #self.title > 0 then -%> - <%=self.title%> - <%- end %> - <% if self.description and #self.description > 0 then -%> -
<%=self.description%>
- <%- end %> -
- -
- -
- -
- -
-
- <% local isempty = true for i, k in ipairs(self:cfgsections()) do -%> - <%- section = k; isempty = false -%> - - <% if not self.anonymous then -%> -
- <%=section:upper()%> - -
- <%- end %> -
- <%+cbi/ucisection%> -
- <%- end %> - - <% if isempty then -%> - <%:This section contains no values yet%>

- <%- end %> - - <% if self.addremove then -%> - <% if self.template_addremove then include(self.template_addremove) else -%> -
- <% if self.anonymous then -%> - - <%- else -%> - <% if self.invalid_cts then -%>
<% end %> - - - <% if self.invalid_cts then -%> -
<%:Invalid%>
- <%- end %> - <%- end %> -
- <%- end %> - <%- end %> -
- - \ No newline at end of file diff --git a/luci-app-nginx-manager/po/zh-cn/nginx-manager.po b/luci-app-nginx-manager/po/zh-cn/nginx-manager.po deleted file mode 100644 index e7751481..00000000 --- a/luci-app-nginx-manager/po/zh-cn/nginx-manager.po +++ /dev/null @@ -1,26 +0,0 @@ -msgid "Nginx Manager" -msgstr "Nginx管理器" - -msgid "A simple Nginx manager" -msgstr "一个简易的Nginx管理器" - -msgid "Web site list" -msgstr "网站列表" - -msgid "Restart the nginx" -msgstr "重新启动Nginx" - -msgid "Reload the nginx" -msgstr "重新加载Nginx" - -msgid "Reload" -msgstr "重新加载" - -msgid "Configuration File" -msgstr "配置文件" - -msgid "General Info" -msgstr "基础信息" - -msgid "File Path" -msgstr "文件路径" \ No newline at end of file diff --git a/luci-app-nginx-manager/po/zh_Hans b/luci-app-nginx-manager/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-nginx-manager/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-nginx-manager/root/etc/nginx/conf.d/templates b/luci-app-nginx-manager/root/etc/nginx/conf.d/templates deleted file mode 100644 index aa1155ec..00000000 --- a/luci-app-nginx-manager/root/etc/nginx/conf.d/templates +++ /dev/null @@ -1,17 +0,0 @@ -server { - listen 8080; #bind prot 绑定的端口 - root /www; #directory 网站路径 - ssl_session_timeout 5m; - gzip on; - gzip_types text/plain application/json application/javascript application/x-javascript text/css application/xml text/javascript; - gzip_proxied any; - gzip_vary on; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_http_version 1.0; - - location / { - index index.html index.htm; #默认文件 - try_files $uri $uri/ /index.html; - } -} diff --git a/luci-app-nginx-manager/root/etc/uci-defaults/luci-app-nginx-manager b/luci-app-nginx-manager/root/etc/uci-defaults/luci-app-nginx-manager deleted file mode 100644 index 1db677c6..00000000 --- a/luci-app-nginx-manager/root/etc/uci-defaults/luci-app-nginx-manager +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@nginx-manager[-1] - add ucitrack nginx-manager - set ucitrack.@nginx-manage[-1].init=nginx - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/luci-app-nginx-manager/root/usr/share/rpcd/acl.d/luci-app-nginx-manager.json b/luci-app-nginx-manager/root/usr/share/rpcd/acl.d/luci-app-nginx-manager.json deleted file mode 100644 index 35339440..00000000 --- a/luci-app-nginx-manager/root/usr/share/rpcd/acl.d/luci-app-nginx-manager.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-nginx-manager": { - "description": "Grant UCI access for luci-app-nginx-manager", - "read": { - "uci": [ "nginx-manager" ] - }, - "write": { - "uci": [ "nginx-manager" ] - } - } -} diff --git a/luci-app-oaf/root/usr/share/rpcd/acl.d/luci-app-oaf.json b/luci-app-oaf/root/usr/share/rpcd/acl.d/luci-app-oaf.json deleted file mode 100644 index 8043690a..00000000 --- a/luci-app-oaf/root/usr/share/rpcd/acl.d/luci-app-oaf.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-oaf": { - "description": "Grant UCI access for luci-app-oaf", - "read": { - "uci": [ "appfilter" ] - }, - "write": { - "uci": [ "appfilter" ] - } - } -} diff --git a/luci-app-onliner b/luci-app-onliner deleted file mode 160000 index 85edcb3c..00000000 --- a/luci-app-onliner +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 85edcb3c2ec6e2abf778103e0b2a3877a071a456 diff --git a/luci-app-openclash/Makefile b/luci-app-openclash/Makefile deleted file mode 100644 index d57e5305..00000000 --- a/luci-app-openclash/Makefile +++ /dev/null @@ -1,106 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.44.16 -PKG_RELEASE:= -PKG_MAINTAINER:=vernesong - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=LuCI support for clash - PKGARCH:=all - DEPENDS:=+iptables +dnsmasq-full +coreutils +coreutils-nohup +bash +curl +ca-certificates +ipset +ip-full +iptables-mod-tproxy +iptables-mod-extra +libcap +libcap-bin +ruby +ruby-yaml +kmod-tun - MAINTAINER:=vernesong -endef - -define Package/$(PKG_NAME)/description - A LuCI support for clash -endef - -define Build/Prepare - $(CP) $(CURDIR)/root $(PKG_BUILD_DIR) - $(CP) $(CURDIR)/luasrc $(PKG_BUILD_DIR) - $(foreach po,$(wildcard ${CURDIR}/po/zh-cn/*.po), \ - po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));) - chmod 0755 $(PKG_BUILD_DIR)/root/etc/init.d/openclash - chmod -R 0755 $(PKG_BUILD_DIR)/root/usr/share/openclash/ - mkdir -p $(PKG_BUILD_DIR)/root/etc/openclash/config - mkdir -p $(PKG_BUILD_DIR)/root/etc/openclash/rule_provider - mkdir -p $(PKG_BUILD_DIR)/root/etc/openclash/backup - mkdir -p $(PKG_BUILD_DIR)/root/etc/openclash/core - mkdir -p $(PKG_BUILD_DIR)/root/usr/share/openclash/backup - cp -f "$(PKG_BUILD_DIR)/root/etc/config/openclash" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_rules.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_rules.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_rules_2.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_rules_2.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_hosts.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_hosts.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_fake_filter.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_fake_filter.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_domain_dns.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_domain_dns.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_domain_dns_policy.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_fallback_filter.yaml" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_netflix_domains.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_netflix_domains.list" >/dev/null 2>&1 -endef - -define Build/Configure -endef - -define Build/Compile -endef - -define Package/$(PKG_NAME)/conffiles -endef - -define Package/$(PKG_NAME)/preinst -#!/bin/sh -if [ -f "/etc/config/openclash" ]; then - cp -f "/etc/config/openclash" "/tmp/openclash.bak" >/dev/null 2>&1 - cp -rf "/etc/openclash" "/tmp/openclash" >/dev/null 2>&1 -fi -endef - -define Package/$(PKG_NAME)/postinst -endef - -define Package/$(PKG_NAME)/prerm -#!/bin/sh - uci -q set openclash.config.enable=0 - uci -q commit openclash - cp -f "/etc/config/openclash" "/tmp/openclash.bak" >/dev/null 2>&1 - cp -rf "/etc/openclash" "/tmp/openclash" >/dev/null 2>&1 -endef - -define Package/$(PKG_NAME)/postrm -#!/bin/sh - rm -rf /etc/openclash - rm -rf /tmp/openclash.log - rm -rf /tmp/openclash_start.log - rm -rf /tmp/openclash_last_version - rm -rf /tmp/openclash_config.tmp - rm -rf /tmp/openclash.change - rm -rf /tmp/Proxy_Group - rm -rf /tmp/rules_name - rm -rf /tmp/rule_providers_name - rm -rf /tmp/clash_last_version - rm -rf /usr/share/openclash/backup - rm -rf /tmp/openclash_fake_filter.list - rm -rf /tmp/openclash_servers_fake_filter.conf - rm -rf /tmp/dler* - uci -q delete firewall.openclash - uci -q commit firewall - uci -q delete ucitrack.@openclash[-1] - uci -q commit ucitrack - rm -rf /tmp/luci-* -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - $(INSTALL_DATA) $(PKG_BUILD_DIR)/*.*.lmo $(1)/usr/lib/lua/luci/i18n/ - $(CP) $(PKG_BUILD_DIR)/root/* $(1)/ - $(CP) $(PKG_BUILD_DIR)/luasrc/* $(1)/usr/lib/lua/luci/ -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/luci-app-openclash/luasrc/controller/openclash.lua b/luci-app-openclash/luasrc/controller/openclash.lua deleted file mode 100644 index faddaf43..00000000 --- a/luci-app-openclash/luasrc/controller/openclash.lua +++ /dev/null @@ -1,1248 +0,0 @@ -module("luci.controller.openclash", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/openclash") then - return - end - - local page - - page = entry({"admin", "services", "openclash"}, alias("admin", "services", "openclash", "client"), _("OpenClash"), 50) - page.dependent = true - page.acl_depends = { "luci-app-openclash" } - entry({"admin", "services", "openclash", "client"},form("openclash/client"),_("Overviews"), 20).leaf = true - entry({"admin", "services", "openclash", "status"},call("action_status")).leaf=true - entry({"admin", "services", "openclash", "state"},call("action_state")).leaf=true - entry({"admin", "services", "openclash", "startlog"},call("action_start")).leaf=true - entry({"admin", "services", "openclash", "refresh_log"},call("action_refresh_log")) - entry({"admin", "services", "openclash", "del_log"},call("action_del_log")) - entry({"admin", "services", "openclash", "del_start_log"},call("action_del_start_log")) - entry({"admin", "services", "openclash", "close_all_connection"},call("action_close_all_connection")) - entry({"admin", "services", "openclash", "reload_firewall"},call("action_reload_firewall")) - entry({"admin", "services", "openclash", "update_subscribe"},call("action_update_subscribe")) - entry({"admin", "services", "openclash", "update_other_rules"},call("action_update_other_rules")) - entry({"admin", "services", "openclash", "update_geoip"},call("action_update_geoip")) - entry({"admin", "services", "openclash", "currentversion"},call("action_currentversion")) - entry({"admin", "services", "openclash", "lastversion"},call("action_lastversion")) - entry({"admin", "services", "openclash", "save_corever_branch"},call("action_save_corever_branch")) - entry({"admin", "services", "openclash", "update"},call("action_update")) - entry({"admin", "services", "openclash", "update_ma"},call("action_update_ma")) - entry({"admin", "services", "openclash", "opupdate"},call("action_opupdate")) - entry({"admin", "services", "openclash", "coreupdate"},call("action_coreupdate")) - entry({"admin", "services", "openclash", "ping"}, call("act_ping")) - entry({"admin", "services", "openclash", "download_rule"}, call("action_download_rule")) - entry({"admin", "services", "openclash", "download_netflix_domains"}, call("action_download_netflix_domains")) - entry({"admin", "services", "openclash", "download_disney_domains"}, call("action_download_disney_domains")) - entry({"admin", "services", "openclash", "catch_netflix_domains"}, call("action_catch_netflix_domains")) - entry({"admin", "services", "openclash", "write_netflix_domains"}, call("action_write_netflix_domains")) - entry({"admin", "services", "openclash", "restore"}, call("action_restore_config")) - entry({"admin", "services", "openclash", "backup"}, call("action_backup")) - entry({"admin", "services", "openclash", "remove_all_core"}, call("action_remove_all_core")) - entry({"admin", "services", "openclash", "one_key_update"}, call("action_one_key_update")) - entry({"admin", "services", "openclash", "one_key_update_check"}, call("action_one_key_update_check")) - entry({"admin", "services", "openclash", "switch_mode"}, call("action_switch_mode")) - entry({"admin", "services", "openclash", "op_mode"}, call("action_op_mode")) - entry({"admin", "services", "openclash", "dler_info"}, call("action_dler_info")) - entry({"admin", "services", "openclash", "dler_checkin"}, call("action_dler_checkin")) - entry({"admin", "services", "openclash", "dler_logout"}, call("action_dler_logout")) - entry({"admin", "services", "openclash", "dler_login"}, call("action_dler_login")) - entry({"admin", "services", "openclash", "dler_login_info_save"}, call("action_dler_login_info_save")) - entry({"admin", "services", "openclash", "sub_info_get"}, call("sub_info_get")) - entry({"admin", "services", "openclash", "config_name"}, call("action_config_name")) - entry({"admin", "services", "openclash", "switch_config"}, call("action_switch_config")) - entry({"admin", "services", "openclash", "toolbar_show"}, call("action_toolbar_show")) - entry({"admin", "services", "openclash", "toolbar_show_sys"}, call("action_toolbar_show_sys")) - entry({"admin", "services", "openclash", "diag_connection"}, call("action_diag_connection")) - entry({"admin", "services", "openclash", "gen_debug_logs"}, call("action_gen_debug_logs")) - entry({"admin", "services", "openclash", "log_level"}, call("action_log_level")) - entry({"admin", "services", "openclash", "switch_log"}, call("action_switch_log")) - entry({"admin", "services", "openclash", "rule_mode"}, call("action_rule_mode")) - entry({"admin", "services", "openclash", "switch_rule_mode"}, call("action_switch_rule_mode")) - entry({"admin", "services", "openclash", "switch_run_mode"}, call("action_switch_run_mode")) - entry({"admin", "services", "openclash", "get_run_mode"}, call("action_get_run_mode")) - entry({"admin", "services", "openclash", "settings"},cbi("openclash/settings"),_("Global Settings"), 30).leaf = true - entry({"admin", "services", "openclash", "servers"},cbi("openclash/servers"),_("Servers and Groups"), 40).leaf = true - entry({"admin", "services", "openclash", "other-rules-edit"},cbi("openclash/other-rules-edit"), nil).leaf = true - entry({"admin", "services", "openclash", "rule-providers-settings"},cbi("openclash/rule-providers-settings"),_("Rule Providers and Groups"), 50).leaf = true - entry({"admin", "services", "openclash", "game-rules-manage"},form("openclash/game-rules-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "rule-providers-manage"},form("openclash/rule-providers-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "proxy-provider-file-manage"},form("openclash/proxy-provider-file-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "rule-providers-file-manage"},form("openclash/rule-providers-file-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "game-rules-file-manage"},form("openclash/game-rules-file-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "config-subscribe"},cbi("openclash/config-subscribe"),_("Config Update"), 60).leaf = true - entry({"admin", "services", "openclash", "config-subscribe-edit"},cbi("openclash/config-subscribe-edit"), nil).leaf = true - entry({"admin", "services", "openclash", "servers-config"},cbi("openclash/servers-config"), nil).leaf = true - entry({"admin", "services", "openclash", "groups-config"},cbi("openclash/groups-config"), nil).leaf = true - entry({"admin", "services", "openclash", "proxy-provider-config"},cbi("openclash/proxy-provider-config"), nil).leaf = true - entry({"admin", "services", "openclash", "rule-providers-config"},cbi("openclash/rule-providers-config"), nil).leaf = true - entry({"admin", "services", "openclash", "config"},form("openclash/config"),_("Config Manage"), 70).leaf = true - entry({"admin", "services", "openclash", "log"},cbi("openclash/log"),_("Server Logs"), 80).leaf = true - -end -local fs = require "luci.openclash" -local json = require "luci.jsonc" -local uci = require("luci.model.uci").cursor() -local datatype = require "luci.cbi.datatypes" - -local core_path_mode = uci:get("openclash", "config", "small_flash_memory") -if core_path_mode ~= "1" then - dev_core_path="/etc/openclash/core/clash" - tun_core_path="/etc/openclash/core/clash_tun" -else - dev_core_path="/tmp/etc/openclash/core/clash" - tun_core_path="/tmp/etc/openclash/core/clash_tun" -end - -local function is_running() - return luci.sys.call("pidof clash >/dev/null") == 0 -end - -local function is_web() - return luci.sys.call("pidof clash >/dev/null") == 0 -end - -local function restricted_mode() - return uci:get("openclash", "config", "restricted_mode") -end - -local function is_watchdog() - local ps_version = luci.sys.exec("ps --version 2>&1 |grep -c procps-ng |tr -d '\n'") - if ps_version == "1" then - return luci.sys.call("ps -efw |grep openclash_watchdog.sh |grep -v grep >/dev/null") == 0 - else - return luci.sys.call("ps -w |grep openclash_watchdog.sh |grep -v grep >/dev/null") == 0 - end -end - -local function cn_port() - return uci:get("openclash", "config", "cn_port") -end - -local function mode() - return uci:get("openclash", "config", "en_mode") -end - -local function ipdb() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/etc/openclash/Country.mmdb")) -end - -local function lhie1() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/lhie1.yaml")) -end - -local function ConnersHua() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/ConnersHua.yaml")) -end - -local function ConnersHua_return() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/ConnersHua_return.yaml")) -end - -local function chnroute() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/etc/openclash/rule_provider/ChinaIP.yaml")) -end - -local function daip() - local daip = luci.sys.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'") - if not daip or daip == "" then - local daip = luci.sys.exec("ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'") - end - return daip -end - -local function dase() - return uci:get("openclash", "config", "dashboard_password") -end - -local function db_foward_domain() - return uci:get("openclash", "config", "dashboard_forward_domain") -end - -local function db_foward_port() - return uci:get("openclash", "config", "dashboard_forward_port") -end - -local function check_lastversion() - luci.sys.exec("sh /usr/share/openclash/openclash_version.sh 2>/dev/null") - return luci.sys.exec("sed -n '/^https:/,$p' /tmp/openclash_last_version 2>/dev/null") -end - -local function check_currentversion() - return luci.sys.exec("sed -n '/^data:image/,$p' /usr/share/openclash/res/openclash_version 2>/dev/null") -end - -local function startlog() - local info = "" - local line_trans = "" - if nixio.fs.access("/tmp/openclash_start.log") then - info = luci.sys.exec("sed -n '$p' /tmp/openclash_start.log 2>/dev/null") - line_trans = info - if string.len(info) > 0 then - if not string.find (info, "【") and not string.find (info, "】") then - line_trans = luci.i18n.translate(string.sub(info, 0, -1)) - else - local no_trans = {} - line_trans = "" - local a = string.find (info, "【") - local b = string.find (info, "】") + 2 - local c = 0 - local v - local x - while true do - table.insert(no_trans, a) - table.insert(no_trans, b) - if string.find (info, "【", b+1) and string.find (info, "】", b+1) then - a = string.find (info, "【", b+1) - b = string.find (info, "】", b+1) + 2 - else - break - end - end - for k = 1, #no_trans, 2 do - x = no_trans[k] - v = no_trans[k+1] - if x <= 1 then - line_trans = line_trans .. string.sub(info, 0, v) - elseif v <= string.len(info) then - line_trans = line_trans .. luci.i18n.translate(string.sub(info, c, x - 1))..string.sub(info, x, v) - end - c = v + 1 - end - if c > string.len(info) then - line_trans = line_trans - else - line_trans = line_trans .. luci.i18n.translate(string.sub(info, c, -1)) - end - end - end - end - return line_trans -end - -local function coremodel() - local coremodel = luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") - return coremodel -end - -local function corecv() -if not nixio.fs.access(dev_core_path) then - return "0" -else - return luci.sys.exec(string.format("%s -v 2>/dev/null |awk -F ' ' '{print $2}'",dev_core_path)) -end -end - -local function coretuncv() -if not nixio.fs.access(tun_core_path) then - return "0" -else - return luci.sys.exec(string.format("%s -v 2>/dev/null |awk -F ' ' '{print $2}'",tun_core_path)) -end -end - -local function corelv() - luci.sys.call("sh /usr/share/openclash/clash_version.sh") - local core_lv = luci.sys.exec("sed -n 1p /tmp/clash_last_version 2>/dev/null") - local core_tun_lv = luci.sys.exec("sed -n 2p /tmp/clash_last_version 2>/dev/null") - return core_lv .. "," .. core_tun_lv -end - -local function opcv() - return luci.sys.exec("sed -n 1p /usr/share/openclash/res/openclash_version 2>/dev/null") -end - -local function oplv() - local new = luci.sys.call(string.format("sh /usr/share/openclash/openclash_version.sh")) - local oplv = luci.sys.exec("sed -n 1p /tmp/openclash_last_version 2>/dev/null") - return oplv .. "," .. new -end - -local function opup() - luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/openclash_version.sh >/dev/null 2>&1") - return luci.sys.call("sh /usr/share/openclash/openclash_update.sh >/dev/null 2>&1 &") -end - -local function coreup() - uci:set("openclash", "config", "enable", "1") - uci:commit("openclash") - local type = luci.http.formvalue("core_type") - luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/clash_version.sh >/dev/null 2>&1") - return luci.sys.call(string.format("/usr/share/openclash/openclash_core.sh '%s' >/dev/null 2>&1 &", type)) -end - -local function corever() - return uci:get("openclash", "config", "core_version") -end - -local function release_branch() - return uci:get("openclash", "config", "release_branch") -end - -local function save_corever_branch() - if luci.http.formvalue("core_ver") then - uci:set("openclash", "config", "core_version", luci.http.formvalue("core_ver")) - end - if luci.http.formvalue("release_branch") then - uci:set("openclash", "config", "release_branch", luci.http.formvalue("release_branch")) - end - uci:commit("openclash") - return "success" -end - -local function upchecktime() - local corecheck = os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/tmp/clash_last_version")) - local opcheck - if not corecheck or corecheck == "" then - opcheck = os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/tmp/openclash_last_version")) - if not opcheck or opcheck == "" then - return "1" - else - return opcheck - end - else - return corecheck - end -end - -local function historychecktime() - local CONFIG_FILE = uci:get("openclash", "config", "config_path") - if not CONFIG_FILE then return "0" end - local HISTORY_PATH_OLD = "/etc/openclash/history/" .. fs.filename(fs.basename(CONFIG_FILE)) - local HISTORY_PATH = "/etc/openclash/history/" .. fs.filename(fs.basename(CONFIG_FILE)) .. ".db" - if not nixio.fs.access(HISTORY_PATH) and not nixio.fs.access(HISTORY_PATH_OLD) then - return "0" - else - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime(HISTORY_PATH)) or os.date("%Y-%m-%d %H:%M:%S",fs.mtime(HISTORY_PATH_OLD)) - end -end - -function download_rule() - local filename = luci.http.formvalue("filename") - local state = luci.sys.call(string.format('/usr/share/openclash/openclash_download_rule_list.sh "%s" >/dev/null 2>&1',filename)) - return state -end - -function download_disney_domains() - local state = luci.sys.call(string.format('/usr/share/openclash/openclash_download_rule_list.sh "%s" >/dev/null 2>&1',"disney_domains")) - return state -end - -function download_netflix_domains() - local state = luci.sys.call(string.format('/usr/share/openclash/openclash_download_rule_list.sh "%s" >/dev/null 2>&1',"netflix_domains")) - return state -end - -function action_restore_config() - uci:set("openclash", "config", "enable", "0") - uci:commit("openclash") - luci.sys.call("/etc/init.d/openclash stop >/dev/null 2>&1") - luci.sys.call("cp '/usr/share/openclash/backup/openclash' '/etc/config/openclash' >/dev/null 2>&1 &") - luci.sys.call("cp /usr/share/openclash/backup/openclash_custom* /etc/openclash/custom/ >/dev/null 2>&1 &") - luci.http.redirect(luci.dispatcher.build_url('admin/services/openclash/settings')) -end - -function action_remove_all_core() - luci.sys.call("rm -rf /etc/openclash/core/* >/dev/null 2>&1") -end - -function action_one_key_update() - return luci.sys.call("sh /usr/share/openclash/openclash_update.sh 'one_key_update' >/dev/null 2>&1 &") -end - -local function dler_login_info_save() - uci:set("openclash", "config", "dler_email", luci.http.formvalue("email")) - uci:set("openclash", "config", "dler_passwd", luci.http.formvalue("passwd")) - uci:set("openclash", "config", "dler_checkin", luci.http.formvalue("checkin")) - uci:set("openclash", "config", "dler_checkin_interval", luci.http.formvalue("interval")) - if tonumber(luci.http.formvalue("multiple")) > 50 then - uci:set("openclash", "config", "dler_checkin_multiple", "50") - elseif tonumber(luci.http.formvalue("multiple")) < 1 or not tonumber(luci.http.formvalue("multiple")) then - uci:set("openclash", "config", "dler_checkin_multiple", "1") - else - uci:set("openclash", "config", "dler_checkin_multiple", luci.http.formvalue("multiple")) - end - uci:commit("openclash") - return "success" -end - -local function dler_login() - local info, token, get_sub, sub_info, sub_key, sub_match - local sub_path = "/tmp/dler_sub" - local email = uci:get("openclash", "config", "dler_email") - local passwd = uci:get("openclash", "config", "dler_passwd") - if email and passwd then - info = luci.sys.exec(string.format("curl -sL -H 'Content-Type: application/json' -d '{\"email\":\"%s\", \"passwd\":\"%s\"}' -X POST https://dler.cloud/api/v1/login", email, passwd)) - if info then - info = json.parse(info) - end - if info and info.ret == 200 then - token = info.data.token - uci:set("openclash", "config", "dler_token", token) - uci:commit("openclash") - get_sub = string.format("curl -sL -H 'Content-Type: application/json' -d '{\"access_token\":\"%s\"}' -X POST https://dler.cloud/api/v1/managed/clash -o %s", token, sub_path) - luci.sys.exec(get_sub) - sub_info = fs.readfile(sub_path) - if sub_info then - sub_info = json.parse(sub_info) - end - if sub_info and sub_info.ret == 200 then - sub_key = {"smart","ss","vmess","trojan"} - for _,v in ipairs(sub_key) do - while true do - sub_match = false - uci:foreach("openclash", "config_subscribe", - function(s) - if s.name == "Dler Cloud - " .. v and s.address == sub_info[v] then - sub_match = true - end - end) - if sub_match then break end - luci.sys.exec(string.format('sid=$(uci -q add openclash config_subscribe) && uci -q set openclash."$sid".name="Dler Cloud - %s" && uci -q set openclash."$sid".address="%s"', v, sub_info[v])) - uci:commit("openclash") - break - end - luci.sys.exec(string.format('curl -sL -m 3 --retry 2 --user-agent "clash" "%s" -o "/etc/openclash/config/Dler Cloud - %s.yaml" >/dev/null 2>&1', sub_info[v], v)) - end - end - return info.ret - else - uci:delete("openclash", "config", "dler_token") - uci:commit("openclash") - fs.unlink(sub_path) - fs.unlink("/tmp/dler_checkin") - fs.unlink("/tmp/dler_info") - return "402" - end - else - uci:delete("openclash", "config", "dler_token") - uci:commit("openclash") - fs.unlink(sub_path) - fs.unlink("/tmp/dler_checkin") - fs.unlink("/tmp/dler_info") - return "402" - end -end - -local function dler_logout() - local info, token - local token = uci:get("openclash", "config", "dler_token") - if token then - info = luci.sys.exec(string.format("curl -sL -H 'Content-Type: application/json' -d '{\"access_token\":\"%s\"}' -X POST https://dler.cloud/api/v1/logout", token)) - if info then - info = json.parse(info) - end - if info and info.ret == 200 then - uci:delete("openclash", "config", "dler_token") - uci:delete("openclash", "config", "dler_checkin") - uci:delete("openclash", "config", "dler_checkin_interval") - uci:delete("openclash", "config", "dler_checkin_multiple") - uci:commit("openclash") - fs.unlink("/tmp/dler_sub") - fs.unlink("/tmp/dler_checkin") - fs.unlink("/tmp/dler_info") - return info.ret - else - return "403" - end - else - return "403" - end -end - -local function dler_info() - local info, path, get_info - local token = uci:get("openclash", "config", "dler_token") - local email = uci:get("openclash", "config", "dler_email") - local passwd = uci:get("openclash", "config", "dler_passwd") - path = "/tmp/dler_info" - if token and email and passwd then - get_info = string.format("curl -sL -H 'Content-Type: application/json' -d '{\"email\":\"%s\", \"passwd\":\"%s\"}' -X POST https://dler.cloud/api/v1/information -o %s", email, passwd, path) - if not nixio.fs.access(path) then - luci.sys.exec(get_info) - else - if fs.readfile(path) == "" or not fs.readfile(path) then - luci.sys.exec(get_info) - else - if (os.time() - fs.mtime(path) > 900) then - luci.sys.exec(get_info) - end - end - end - info = fs.readfile(path) - if info then - info = json.parse(info) - end - if info and info.ret == 200 then - return info.data - else - fs.unlink(path) - luci.sys.exec(string.format("echo -e %s Dler Cloud Account Login Failed! Please Check And Try Again... >> /tmp/openclash.log", os.date("%Y-%m-%d %H:%M:%S"))) - return "error" - end - else - return "error" - end -end - -local function dler_checkin() - local info - local path = "/tmp/dler_checkin" - local token = uci:get("openclash", "config", "dler_token") - local email = uci:get("openclash", "config", "dler_email") - local passwd = uci:get("openclash", "config", "dler_passwd") - local multiple = uci:get("openclash", "config", "dler_checkin_multiple") or 1 - if token and email and passwd then - info = luci.sys.exec(string.format("curl -sL -H 'Content-Type: application/json' -d '{\"email\":\"%s\", \"passwd\":\"%s\", \"multiple\":\"%s\"}' -X POST https://dler.cloud/api/v1/checkin", email, passwd, multiple)) - if info then - info = json.parse(info) - end - if info and info.ret == 200 then - fs.unlink("/tmp/dler_info") - fs.writefile(path, info) - luci.sys.exec(string.format("echo -e %s Dler Cloud Checkin Successful, Result:【%s】 >> /tmp/openclash.log", os.date("%Y-%m-%d %H:%M:%S"), info.data.checkin)) - return info - else - if info and info.msg then - luci.sys.exec(string.format("echo -e %s Dler Cloud Checkin Failed, Result:【%s】 >> /tmp/openclash.log", os.date("%Y-%m-%d %H:%M:%S"), info.msg)) - else - luci.sys.exec(string.format("echo -e %s Dler Cloud Checkin Failed! Please Check And Try Again... >> /tmp/openclash.log",os.date("%Y-%m-%d %H:%M:%S"))) - end - return info - end - else - return "error" - end -end - -local function config_name() - local e,a={} - for t,o in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(o) - if a then - e[t]={} - e[t].name=fs.basename(o) - end - end - return json.parse(json.stringify(e)) or e -end - -local function config_path() - if uci:get("openclash", "config", "config_path") then - return string.sub(uci:get("openclash", "config", "config_path"), 23, -1) - else - return "" - end -end - -function action_switch_config() - uci:set("openclash", "config", "config_path", "/etc/openclash/config/"..luci.http.formvalue("config_name")) - uci:commit("openclash") -end - -function sub_info_get() - local filename, sub_url, sub_info, info, upload, download, total, expire, http_code - filename = luci.http.formvalue("filename") - sub_info = "" - if filename then - uci:foreach("openclash", "config_subscribe", - function(s) - if s.name == filename and s.address then - sub_url = s.address - info = luci.sys.exec(string.format("curl -sLI -m 10 -w 'http_code='%%{http_code} -H 'User-Agent: Clash' '%s'", sub_url)) - if info then - http_code=string.sub(string.match(info, "http_code=%d+"), 11, -1) - if tonumber(http_code) == 200 then - info = string.lower(info) - if string.find(info, "subscription%-userinfo") then - info = luci.sys.exec("echo '%s' |grep 'subscription-userinfo'" %info) - upload = string.sub(string.match(info, "upload=%d+"), 8, -1) or nil - download = string.sub(string.match(info, "download=%d+"), 10, -1) or nil - total = fs.filesize(string.sub(string.match(info, "total=%d+"), 7, -1)) or nil - expire = os.date("%Y-%m-%d %H:%M:%S", string.sub(string.match(info, "expire=%d+"), 8, -1)) or nil - used = fs.filesize(upload + download) or nil - sub_info = "Successful" - else - sub_info = "No Sub Info Found" - end - end - end - end - end - ) - if not sub_url then - sub_info = "No Sub Info Found" - end - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - http_code = http_code, - sub_info = sub_info, - used = used, - total = total, - expire = expire; - }) -end - -function action_rule_mode() - local mode, info - if is_running() then - local daip = daip() - local dase = dase() or "" - local cn_port = cn_port() - if not daip or not cn_port then return end - info = json.parse(luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/configs', dase, daip, cn_port))) - if info then - mode = info["mode"] - else - mode = uci:get("openclash", "config", "proxy_mode") or "rule" - end - else - mode = uci:get("openclash", "config", "proxy_mode") or "rule" - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - mode = mode; - }) -end - -function action_switch_rule_mode() - local mode, info - if is_running() then - local daip = daip() - local dase = dase() or "" - local cn_port = cn_port() - mode = luci.http.formvalue("rule_mode") - if not daip or not cn_port then luci.http.status(500, "Switch Faild") return end - info = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XPATCH http://"%s":"%s"/configs -d \'{\"mode\": \"%s\"}\'', dase, daip, cn_port, mode)) - if info ~= "" then - luci.http.status(500, "Switch Faild") - end - else - luci.http.status(500, "Switch Faild") - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - info = info; - }) -end - -function action_get_run_mode() - if mode() then - luci.http.prepare_content("application/json") - luci.http.write_json({ - clash = is_running(), - mode = mode(); - }) - else - luci.http.status(500, "Get Faild") - return - end -end - -function action_switch_run_mode() - local mode, operation_mode - if is_running() then - mode = luci.http.formvalue("run_mode") - operation_mode = uci:get("openclash", "config", "operation_mode") - if operation_mode == "redir-host" then - uci:set("openclash", "config", "en_mode", "redir-host"..mode) - elseif operation_mode == "fake-ip" then - uci:set("openclash", "config", "en_mode", "fake-ip"..mode) - end - uci:commit("openclash") - luci.sys.exec("/etc/init.d/openclash restart >/dev/null 2>&1 &") - else - luci.http.status(500, "Switch Faild") - return - end -end - -function action_log_level() - local level, info - if is_running() then - local daip = daip() - local dase = dase() or "" - local cn_port = cn_port() - if not daip or not cn_port then return end - info = json.parse(luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/configs', dase, daip, cn_port))) - if info then - level = info["log-level"] - else - level = uci:get("openclash", "config", "log_level") or "info" - end - else - level = uci:get("openclash", "config", "log_level") or "info" - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - log_level = level; - }) -end - -function action_switch_log() - local level, info - if is_running() then - local daip = daip() - local dase = dase() or "" - local cn_port = cn_port() - level = luci.http.formvalue("log_level") - if not daip or not cn_port then luci.http.status(500, "Switch Faild") return end - info = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XPATCH http://"%s":"%s"/configs -d \'{\"log-level\": \"%s\"}\'', dase, daip, cn_port, level)) - if info ~= "" then - luci.http.status(500, "Switch Faild") - end - else - luci.http.status(500, "Switch Faild") - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - info = info; - }) -end - -local function s(e) -local t=0 -local a={' B/S',' KB/S',' MB/S',' GB/S',' TB/S'} -if (e<=1024) then - return e..a[1] -else -repeat -e=e/1024 -t=t+1 -until(e<=1024) -return string.format("%.1f",e)..a[t] -end -end - -function action_toolbar_show_sys() - local pid = luci.sys.exec("pidof clash |head -1 |tr -d '\n' 2>/dev/null") - local mem, cpu - if pid and pid ~= "" then - mem = tonumber(luci.sys.exec(string.format("cat /proc/%s/status 2>/dev/null |grep -w VmRSS |awk '{print $2}'", pid))) - cpu = luci.sys.exec(string.format("top -b -n1 |grep -E '%s' 2>/dev/null |grep -v grep |awk '{for (i=1;i<=NF;i++) {if ($i ~ /clash/) break; else cpu=i}}; {print $cpu}' 2>/dev/null", pid)) - if mem and cpu then - mem = fs.filesize(mem*1024) - cpu = string.match(cpu, "%d+") - else - mem = "0 KB" - cpu = "0" - end - else - return - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - mem = mem, - cpu = cpu; - }) -end - -function action_toolbar_show() - local pid = luci.sys.exec("pidof clash |head -1 |tr -d '\n' 2>/dev/null") - local traffic, connections, connection, up, down, up_total, down_total, mem, cpu - if pid and pid ~= "" then - local daip = daip() - local dase = dase() or "" - local cn_port = cn_port() - if not daip or not cn_port then return end - traffic = json.parse(luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/traffic', dase, daip, cn_port))) - connections = json.parse(luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/connections', dase, daip, cn_port))) - if traffic and connections then - connection = #(connections.connections) - up = s(traffic.up) - down = s(traffic.down) - up_total = fs.filesize(connections.uploadTotal) - down_total = fs.filesize(connections.downloadTotal) - else - up = "0 B/S" - down = "0 B/S" - up_total = "0 KB" - down_total = "0 KB" - connection = "0" - end - mem = tonumber(luci.sys.exec(string.format("cat /proc/%s/status 2>/dev/null |grep -w VmRSS |awk '{print $2}'", pid))) - cpu = luci.sys.exec(string.format("top -b -n1 |grep -E '%s' 2>/dev/null |grep -v grep |awk '{for (i=1;i<=NF;i++) {if ($i ~ /clash/) break; else cpu=i}}; {print $cpu}' 2>/dev/null", pid)) - if mem and cpu then - mem = fs.filesize(mem*1024) - cpu = string.match(cpu, "%d+") - else - mem = "0 KB" - cpu = "0" - end - else - return - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - connections = connection, - up = up, - down = down, - up_total = up_total, - down_total = down_total, - mem = mem, - cpu = cpu; - }) -end - -function action_config_name() - luci.http.prepare_content("application/json") - luci.http.write_json({ - config_name = config_name(), - config_path = config_path(); - }) -end - -function action_save_corever_branch() - luci.http.prepare_content("application/json") - luci.http.write_json({ - save_corever_branch = save_corever_branch(); - }) -end - -function action_dler_login_info_save() - luci.http.prepare_content("application/json") - luci.http.write_json({ - dler_login_info_save = dler_login_info_save(); - }) -end - -function action_dler_info() - luci.http.prepare_content("application/json") - luci.http.write_json({ - dler_info = dler_info(); - }) -end - -function action_dler_checkin() - luci.http.prepare_content("application/json") - luci.http.write_json({ - dler_checkin = dler_checkin(); - }) -end - -function action_dler_logout() - luci.http.prepare_content("application/json") - luci.http.write_json({ - dler_logout = dler_logout(); - }) -end - -function action_dler_login() - luci.http.prepare_content("application/json") - luci.http.write_json({ - dler_login = dler_login(); - }) -end - -function action_one_key_update_check() - luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null") - luci.http.prepare_content("application/json") - luci.http.write_json({ - corever = corever(), - corelv = corelv(), - oplv = oplv(); - }) -end - -function action_op_mode() - local op_mode = uci:get("openclash", "config", "operation_mode") - luci.http.prepare_content("application/json") - luci.http.write_json({ - op_mode = op_mode; - }) -end - -function action_switch_mode() - local switch_mode = uci:get("openclash", "config", "operation_mode") - if switch_mode == "redir-host" then - uci:set("openclash", "config", "operation_mode", "fake-ip") - uci:commit("openclash") - else - uci:set("openclash", "config", "operation_mode", "redir-host") - uci:commit("openclash") - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - switch_mode = switch_mode; - }) -end - -function action_status() - luci.http.prepare_content("application/json") - luci.http.write_json({ - clash = is_running(), - watchdog = is_watchdog(), - daip = daip(), - dase = dase(), - db_foward_port = db_foward_port(), - db_foward_domain = db_foward_domain(), - web = is_web(), - cn_port = cn_port(), - restricted_mode = restricted_mode(); - }) -end - -function action_state() - luci.http.prepare_content("application/json") - luci.http.write_json({ - lhie1 = lhie1(), - ConnersHua = ConnersHua(), - ConnersHua_return = ConnersHua_return(), - ipdb = ipdb(), - historychecktime = historychecktime(), - chnroute = chnroute(); - }) -end - -function action_lastversion() - luci.http.prepare_content("application/json") - luci.http.write_json({ - lastversion = check_lastversion(); - }) -end - -function action_currentversion() - luci.http.prepare_content("application/json") - luci.http.write_json({ - currentversion = check_currentversion(); - }) -end - -function action_start() - luci.http.prepare_content("application/json") - luci.http.write_json({ - startlog = startlog(); - }) -end - -function action_update() - luci.http.prepare_content("application/json") - luci.http.write_json({ - coremodel = coremodel(), - corecv = corecv(), - coretuncv = coretuncv(), - opcv = opcv(), - corever = corever(), - release_branch = release_branch(), - upchecktime = upchecktime(), - corelv = corelv(), - oplv = oplv(); - }) -end - -function action_update_ma() - luci.http.prepare_content("application/json") - luci.http.write_json({ - oplv = oplv(), - corelv = corelv(), - corever = corever(); - }) -end - -function action_opupdate() - luci.http.prepare_content("application/json") - luci.http.write_json({ - opup = opup(); - }) -end - -function action_coreupdate() - luci.http.prepare_content("application/json") - luci.http.write_json({ - coreup = coreup(); - }) -end - -function action_close_all_connection() - return luci.sys.call("sh /usr/share/openclash/openclash_history_get.sh 'close_all_conection'") -end - -function action_reload_firewall() - return luci.sys.call("/etc/init.d/openclash reload") -end - -function action_update_subscribe() - fs.unlink("/tmp/Proxy_Group") - return luci.sys.call("/usr/share/openclash/openclash.sh >/dev/null 2>&1") -end - -function action_update_other_rules() - return luci.sys.call("/usr/share/openclash/openclash_rule.sh >/dev/null 2>&1") -end - -function action_update_geoip() - return luci.sys.call("/usr/share/openclash/openclash_ipdb.sh >/dev/null 2>&1") -end - -function act_ping() - local e={} - e.index=luci.http.formvalue("index") - e.ping=luci.sys.exec("ping -c 1 -W 1 %q 2>&1 | grep -o 'time=[0-9]*.[0-9]' | awk -F '=' '{print$2}'"%luci.http.formvalue("domain")) - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function action_download_rule() - luci.http.prepare_content("application/json") - luci.http.write_json({ - rule_download_status = download_rule(); - }) -end - -function action_download_netflix_domains() - luci.http.prepare_content("application/json") - luci.http.write_json({ - rule_download_status = download_netflix_domains(); - }) -end - -function action_download_disney_domains() - luci.http.prepare_content("application/json") - luci.http.write_json({ - rule_download_status = download_disney_domains(); - }) -end - -function action_refresh_log() - luci.http.prepare_content("application/json") - local logfile="/tmp/openclash.log" - local file = io.open(logfile, "r+") - local info, len, line, lens, cache, ex_match, line_trans - local data = "" - local limit = 1000 - local log_tb = {} - local log_len = tonumber(luci.http.formvalue("log_len")) or 0 - if file == nil then - return nil - end - file:seek("set") - info = file:read("*all") - info = info:reverse() - file:close() - cache, len = string.gsub(info, '[^\n]+', "") - if len == log_len then return nil end - if log_len == 0 then - if len > limit then lens = limit else lens = len end - else - lens = len - log_len - end - string.gsub(info, '[^\n]+', function(w) table.insert(log_tb, w) end, lens) - for i=1, lens do - line = log_tb[i]:reverse() - line_trans = line - ex_match = false - while true do - ex_keys = {"^Sec%-Fetch%-Mode", "^User%-Agent", "^Access%-Control", "^Accept", "^Origin", "^Referer", "^Connection", "^Pragma", "^Cache-"} - for key=1, #ex_keys do - if string.find (line, ex_keys[key]) then - ex_match = true - break - end - end - if ex_match then break end - if not string.find (line, "level=") then - if not string.find (line, "【") and not string.find (line, "】") then - line_trans = string.sub(line, 0, 20)..luci.i18n.translate(string.sub(line, 21, -1)) - else - local no_trans = {} - line_trans = "" - local a = string.find (line, "【") - local b = string.find (line, "】") + 2 - local c = 21 - local v - local x - while true do - table.insert(no_trans, a) - table.insert(no_trans, b) - if string.find (line, "【", b+1) and string.find (line, "】", b+1) then - a = string.find (line, "【", b+1) - b = string.find (line, "】", b+1) + 2 - else - break - end - end - for k = 1, #no_trans, 2 do - x = no_trans[k] - v = no_trans[k+1] - if x <= 21 then - line_trans = line_trans .. string.sub(line, 0, v) - elseif v <= string.len(line) then - line_trans = line_trans .. luci.i18n.translate(string.sub(line, c, x - 1)) .. string.sub(line, x, v) - end - c = v + 1 - end - if c > string.len(line) then - line_trans = string.sub(line, 0, 20) .. line_trans - else - line_trans = string.sub(line, 0, 20) .. line_trans .. luci.i18n.translate(string.sub(line, c, -1)) - end - end - end - if data == "" then - data = line_trans - elseif log_len == 0 and i == limit then - data = data .."\n" .. line_trans .. "\n..." - else - data = data .."\n" .. line_trans - end - break - end - end - luci.http.write_json({ - len = len, - log = data; - }) -end - -function action_del_log() - luci.sys.exec(": > /tmp/openclash.log") - return -end - -function action_del_start_log() - luci.sys.exec(": > /tmp/openclash_start.log") - return -end - -function split(str,delimiter) - local dLen = string.len(delimiter) - local newDeli = '' - for i=1,dLen,1 do - newDeli = newDeli .. "["..string.sub(delimiter,i,i).."]" - end - - local locaStart,locaEnd = string.find(str,newDeli) - local arr = {} - local n = 1 - while locaStart ~= nil - do - if locaStart>0 then - arr[n] = string.sub(str,1,locaStart-1) - n = n + 1 - end - - str = string.sub(str,locaEnd+1,string.len(str)) - locaStart,locaEnd = string.find(str,newDeli) - end - if str ~= nil then - arr[n] = str - end - return arr -end - -function action_write_netflix_domains() - local domains = luci.http.formvalue("domains") - local dustom_file = "/etc/openclash/custom/openclash_custom_netflix_domains.list" - local file = io.open(dustom_file, "a+") - file:seek("set") - local domain = file:read("*a") - for v, k in pairs(split(domains,"\n")) do - if not string.find(domain,k,1,true) then - file:write(k.."\n") - end - end - file:close() - return -end - -function action_catch_netflix_domains() - local cmd = "/usr/share/openclash/openclash_debug_getcon.lua 'netflix-nflxvideo'" - luci.http.prepare_content("text/plain") - local util = io.popen(cmd) - if util and util ~= "" then - while true do - local ln = util:read("*l") - if not ln then break end - luci.http.write(ln) - luci.http.write(",") - end - util:close() - return - end - luci.http.status(500, "Bad address") -end - -function action_diag_connection() - local addr = luci.http.formvalue("addr") - if addr and datatype.hostname(addr) or datatype.ipaddr(addr) then - local cmd = string.format("/usr/share/openclash/openclash_debug_getcon.lua %s", addr) - luci.http.prepare_content("text/plain") - local util = io.popen(cmd) - if util and util ~= "" then - while true do - local ln = util:read("*l") - if not ln then break end - luci.http.write(ln) - luci.http.write("\n") - end - util:close() - end - return - end - luci.http.status(500, "Bad address") -end - -function action_gen_debug_logs() - local gen_log = luci.sys.call("/usr/share/openclash/openclash_debug.sh") - if not gen_log then return end - local logfile = "/tmp/openclash_debug.log" - if not fs.access(logfile) then - return - end - luci.http.prepare_content("text/plain; charset=utf-8") - local file=io.open(logfile, "r+") - file:seek("set") - local info = "" - for line in file:lines() do - if info ~= "" then - info = info.."\n"..line - else - info = line - end - end - file:close() - luci.http.write(info) -end - -function action_backup() - local config = luci.sys.call("cp /etc/config/openclash /etc/openclash/openclash >/dev/null 2>&1") - local reader = ltn12_popen("tar -C '/etc/openclash/' -cz . 2>/dev/null") - - luci.http.header( - 'Content-Disposition', 'attachment; filename="Backup-OpenClash-%s.tar.gz"' %{ - os.date("%Y-%m-%d-%H-%M-%S") - }) - - luci.http.prepare_content("application/x-targz") - luci.ltn12.pump.all(reader, luci.http.write) -end - -function ltn12_popen(command) - - local fdi, fdo = nixio.pipe() - local pid = nixio.fork() - - if pid > 0 then - fdo:close() - local close - return function() - local buffer = fdi:read(2048) - local wpid, stat = nixio.waitpid(pid, "nohang") - if not close and wpid and stat == "exited" then - close = true - end - - if buffer and #buffer > 0 then - return buffer - elseif close then - fdi:close() - return nil - end - end - elseif pid == 0 then - nixio.dup(fdo, nixio.stdout) - fdi:close() - fdo:close() - nixio.exec("/bin/sh", "-c", command) - end -end \ No newline at end of file diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/client.lua b/luci-app-openclash/luasrc/model/cbi/openclash/client.lua deleted file mode 100644 index 317c68b7..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/client.lua +++ /dev/null @@ -1,145 +0,0 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require("luci.model.uci").cursor() - -m = SimpleForm("openclash",translate("OpenClash")) -m.description = translate("A Clash Client For OpenWrt") -m.reset = false -m.submit = false - -m:section(SimpleSection).template = "openclash/status" - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -function config_check(CONFIG_FILE) - local yaml = fs.isfile(CONFIG_FILE) - if yaml then - yaml = SYS.exec(string.format('ruby -ryaml -E UTF-8 -e "puts YAML.load_file(\'%s\')" 2>/dev/null',CONFIG_FILE)) - if yaml ~= "false\n" and yaml ~= "" then - return "Config Normal" - else - return "Config Abnormal" - end - elseif (yaml ~= 0) then - return "File Not Exist" - end -end - -local e,a={} -for t,o in ipairs(fs.glob("/etc/openclash/config/*"))do -a=fs.stat(o) -if a then -e[t]={} -e[t].num=string.format(t) -e[t].name=fs.basename(o) -BACKUP_FILE="/etc/openclash/backup/".. e[t].name -if fs.mtime(BACKUP_FILE) then - e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(BACKUP_FILE)) -else - e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",a.mtime) -end -if uci:get("openclash", "config", "config_path") and string.sub(uci:get("openclash", "config", "config_path"), 23, -1) == e[t].name then - e[t].state=translate("Enable") -else - e[t].state=translate("Disable") -end -e[t].check=translate(config_check(o)) -end -end - -form = SimpleForm("openclash") -form.reset = false -form.submit = false -tb=form:section(Table,e) -st=tb:option(DummyValue,"state",translate("State")) -st.template="openclash/cfg_check" -nm=tb:option(DummyValue,"name",translate("Config Alias")) -mt=tb:option(DummyValue,"mtime",translate("Update Time")) -ck=tb:option(DummyValue,"check",translate("Grammar Check")) -ck.template="openclash/cfg_check" -nm.template="openclash/sub_info_show" - -btnis=tb:option(Button,"switch",translate("Switch Config")) -btnis.template="openclash/other_button" -btnis.render=function(o,t,a) -if not e[t] then return false end -if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then -a.display="" -else -a.display="none" -end -o.inputstyle="apply" -Button.render(o,t,a) -end -btnis.write=function(a,t) -fs.unlink("/tmp/Proxy_Group") -uci:set("openclash", "config", "config_path", "/etc/openclash/config/"..e[t].name) -uci:set("openclash", "config", "enable", 1) -uci:commit("openclash") -SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") -HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "client")) -end - -s = SimpleForm("openclash") -s.reset = false -s.submit = false -s:section(SimpleSection).template = "openclash/myip" - -local t = { - {enable, disable} -} - -ap = SimpleForm("openclash") -ap.reset = false -ap.submit = false - -ss = ap:section(Table, t) - -o = ss:option(Button, "enable", " ") -o.inputtitle = translate("Enable OpenClash") -o.inputstyle = "apply" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") -end - -o = ss:option(Button, "disable", " ") -o.inputtitle = translate("Disable OpenClash") -o.inputstyle = "reset" -o.write = function() - uci:set("openclash", "config", "enable", 0) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash stop >/dev/null 2>&1 &") -end - -d = SimpleForm("openclash") -d.title = translate("Credits") -d.reset = false -d.submit = false -d:section(SimpleSection).template = "openclash/developer" - -dler = SimpleForm("openclash") -dler.reset = false -dler.submit = false -dler:section(SimpleSection).template = "openclash/dlercloud" - -if uci:get("openclash", "config", "dler_token") then - return m, dler, form, s, ap, d -else - return m, form, s, ap, d -end \ No newline at end of file diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua b/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua deleted file mode 100644 index d29b2736..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua +++ /dev/null @@ -1,193 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local json = require "luci.jsonc" -local sid = arg[1] - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - - -m = Map(openclash, translate("Config Subscribe Edit")) -m.pageaction = false -m.description=translate("Convert Subscribe function of Online is Supported By subconverter Written By tindy X") .. -"
".. -"
"..translate("API By tindy X & lhie1").. -"
".. -"
"..translate("Subconverter external configuration (subscription conversion template) Description: https://github.com/tindy2013/subconverter#external-configuration-file").. -"
".. -"
"..translate("If you need to customize the external configuration file (subscription conversion template), please write it according to the instructions, upload it to the accessible location of the external network, and fill in the address correctly when using it").. -"
".. -"
"..translate("If you have a recommended external configuration file (subscription conversion template), you can modify by following The file format of /usr/share/opencrash/res/sub_ini.list and pr") -m.redirect = luci.dispatcher.build_url("admin/services/openclash/config-subscribe") -if m.uci:get(openclash, sid) ~= "config_subscribe" then - luci.http.redirect(m.redirect) - return -end - --- [[ Config Subscribe Setting ]]-- -s = m:section(NamedSection, sid, "config_subscribe") -s.anonymous = true -s.addremove = false - ----- name -o = s:option(Value, "name", translate("Config Alias")) -o.description = font_red..bold_on..translate("Name For Distinguishing")..bold_off..font_off -o.placeholder = translate("config") -o.rmempty = true - ----- address -o = s:option(Value, "address", translate("Subscribe Address")) -o.description = font_red..bold_on..translate("Not Null")..bold_off..font_off -o.placeholder = translate("Not Null") -o.datatype = "or(host, string)" -o.rmempty = false - -local sub_path = "/tmp/dler_sub" -local info, token, get_sub, sub_info -local token = uci:get("openclash", "config", "dler_token") -if token then - get_sub = string.format("curl -sL -H 'Content-Type: application/json' --connect-timeout 2 -d '{\"access_token\":\"%s\"}' -X POST https://dler.cloud/api/v1/managed/clash -o %s", token, sub_path) - if not nixio.fs.access(sub_path) then - luci.sys.exec(get_sub) - else - if fs.readfile(sub_path) == "" or not fs.readfile(sub_path) then - luci.sys.exec(get_sub) - end - end - sub_info = fs.readfile(sub_path) - if sub_info then - sub_info = json.parse(sub_info) - end - if sub_info and sub_info.ret == 200 then - o:value(sub_info.smart) - o:value(sub_info.ss) - o:value(sub_info.vmess) - o:value(sub_info.trojan) - else - fs.unlink(sub_path) - end -end - ----- subconverter -o = s:option(Flag, "sub_convert", translate("Subscribe Convert Online")) -o.description = translate("Convert Subscribe Online With Template, Mix Proxies and Keep Settings options Will Not Effect") -o.default=0 - ----- Convert Address -o = s:option(Value, "convert_address", translate("Convert Address")) -o.rmempty = true -o.description = font_red..bold_on..translate("Note: There is A Risk of Privacy Leakage in Online Convert")..bold_off..font_off -o:depends("sub_convert", "1") -o:value("https://api.dler.io/sub", translate("api.dler.io")..translate("(Default)")) -o:value("https://subconverter.herokuapp.com/sub", translate("subconverter.herokuapp.com")..translate("(Default)")) -o:value("https://sub.id9.cc/sub", translate("sub.id9.cc")) -o:value("https://api.wcc.best/sub", translate("api.wcc.best")) -o.default = "https://api.dler.io/sub" - ----- Template -o = s:option(ListValue, "template", translate("Template Name")) -o.rmempty = true -o:depends("sub_convert", "1") -file = io.open("/usr/share/openclash/res/sub_ini.list", "r"); -for l in file:lines() do - if l ~= "" and l ~= nil then - o:value(string.sub(luci.sys.exec(string.format("echo '%s' |awk -F ',' '{print $1}' 2>/dev/null",l)),1,-2)) - end -end -file:close() -o:value("0", translate("Custom Template")) - ----- Custom Template -o = s:option(Value, "custom_template_url", translate("Custom Template URL")) -o.rmempty = true -o.placeholder = translate("Not Null") -o.datatype = "or(host, string)" -o:depends("template", "0") - ----- emoji -o = s:option(ListValue, "emoji", translate("Emoji")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- udp -o = s:option(ListValue, "udp", translate("UDP Enable")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- skip-cert-verify -o = s:option(ListValue, "skip_cert_verify", translate("skip-cert-verify")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- sort -o = s:option(ListValue, "sort", translate("Sort")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- node type -o = s:option(ListValue, "node_type", translate("Append Node Type")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- key -o = s:option(DynamicList, "keyword", font_red..bold_on..translate("Keyword Match")..bold_off..font_off) -o.description = font_red..bold_on..translate("eg: hk or tw&bgp")..bold_off..font_off -o.rmempty = true - ----- exkey -o = s:option(DynamicList, "ex_keyword", font_red..bold_on..translate("Exclude Keyword Match")..bold_off..font_off) -o.description = font_red..bold_on..translate("eg: hk or tw&bgp")..bold_off..font_off -o.rmempty = true - ----- de_exkey -o = s:option(MultiValue, "de_ex_keyword", font_red..bold_on..translate("Exclude Keyword Match Default")..bold_off..font_off) -o.rmempty = true -o:depends("sub_convert", 0) -o:value("过期时间") -o:value("剩余流量") -o:value("TG群") -o:value("官网") - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash, sid) - luci.http.redirect(m.redirect) -end - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua b/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua deleted file mode 100644 index d1b00fc5..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua +++ /dev/null @@ -1,143 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -m = Map("openclash", translate("Config Update")) -m.pageaction = false - -s = m:section(TypedSection, "openclash") -s.anonymous = true - ----- update Settings -o = s:option(Flag, "auto_update", translate("Auto Update")) -o.description = translate("Auto Update Server subscription") -o.default=0 - -o = s:option(ListValue, "config_auto_update_mode", translate("Update Mode")) -o:depends("auto_update", "1") -o:value("0", translate("Appointment Mode")) -o:value("1", translate("Loop Mode")) -o.default=0 -o.rmempty = true - -o = s:option(ListValue, "config_update_week_time", translate("Update Time (Every Week)")) -o:depends("config_auto_update_mode", "0") -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 -o.rmempty = true - -o = s:option(ListValue, "auto_update_time", translate("Update time (every day)")) -o:depends("config_auto_update_mode", "0") -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 -o.rmempty = true - -o = s:option(Value, "config_update_interval", translate("Update Interval(min)")) -o.default="60" -o.datatype = "integer" -o:depends("config_auto_update_mode", "1") -o.rmempty = true - --- [[ Edit Server ]] -- -s = m:section(TypedSection, "config_subscribe", translate("Config Subscribe Edit")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/config-subscribe-edit/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- name -o = s:option(DummyValue, "name", translate("Config Alias")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("config") -end - ----- address -o = s:option(Value, "address", translate("Subscribe Address")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - ----- template -o = s:option(DummyValue, "template", translate("Template Name")) -function o.cfgvalue(...) - if Value.cfgvalue(...) ~= "0" then - return Value.cfgvalue(...) or translate("None") - else - return translate("Custom Template") - end -end - -local t = { - {Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - m.uci:commit("openclash") -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Update Config") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - uci:foreach("openclash", "config_subscribe", - function(s) - if s.name ~= "" and s.name ~= nil and s.enabled == "1" then - local back_cfg_path_yaml="/etc/openclash/backup/" .. s.name .. ".yaml" - local back_cfg_path_yml="/etc/openclash/backup/" .. s.name .. ".yml" - fs.unlink(back_cfg_path_yaml) - fs.unlink(back_cfg_path_yml) - end - end) - SYS.call("/usr/share/openclash/openclash.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -m:append(Template("openclash/toolbar_show")) - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/config.lua deleted file mode 100644 index 629b1a0b..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/config.lua +++ /dev/null @@ -1,427 +0,0 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require("luci.model.uci").cursor() -local CHIF = "0" - -font_green = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] -align_mid = [[

]] -align_mid_off = [[

]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -function default_config_set(f) - local cf = uci:get("openclash", "config", "config_path") - if cf == "/etc/openclash/config/"..f or not cf or cf == "" or not fs.isfile(cf) then - if CHIF == "1" and cf == "/etc/openclash/config/"..f then - return - end - local fis = fs.glob("/etc/openclash/config/*")[1] - if fis ~= nil then - fcf = fs.basename(fis) - if fcf then - uci:set("openclash", "config", "config_path", "/etc/openclash/config/"..fcf) - uci:commit("openclash") - end - else - uci:set("openclash", "config", "config_path", "/etc/openclash/config/config.yaml") - uci:commit("openclash") - end - end -end - -function config_check(CONFIG_FILE) - local yaml = fs.isfile(CONFIG_FILE) - if yaml then - yaml = SYS.exec(string.format('ruby -ryaml -E UTF-8 -e "puts YAML.load_file(\'%s\')" 2>/dev/null',CONFIG_FILE)) - if yaml ~= "false\n" and yaml ~= "" then - return "Config Normal" - else - return "Config Abnormal" - end - elseif (yaml ~= 0) then - return "File Not Exist" - end -end - -ful = SimpleForm("upload", translate("Config Manage"), nil) -ful.reset = false -ful.submit = false - -sul =ful:section(SimpleSection, "") -o = sul:option(FileUpload, "") -o.template = "openclash/upload" -um = sul:option(DummyValue, "", nil) -um.template = "openclash/dvalue" - -local dir, fd, clash -clash = "/etc/openclash/clash" -dir = "/etc/openclash/config/" -bakck_dir="/etc/openclash/backup" -proxy_pro_dir="/etc/openclash/proxy_provider/" -rule_pro_dir="/etc/openclash/rule_provider/" -backup_dir="/tmp/" -create_bakck_dir=fs.mkdir(bakck_dir) -create_proxy_pro_dir=fs.mkdir(proxy_pro_dir) -create_rule_pro_dir=fs.mkdir(rule_pro_dir) - - -HTTP.setfilehandler( - function(meta, chunk, eof) - local fp = HTTP.formvalue("file_type") - if not fd then - if not meta then return end - - if fp == "config" then - if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end - elseif fp == "proxy-provider" then - if meta and chunk then fd = nixio.open(proxy_pro_dir .. meta.file, "w") end - elseif fp == "rule-provider" then - if meta and chunk then fd = nixio.open(rule_pro_dir .. meta.file, "w") end - elseif fp == "backup-file" then - if meta and chunk then fd = nixio.open(backup_dir .. meta.file, "w") end - end - - if not fd then - um.value = translate("upload file error.") - return - end - end - if chunk and fd then - fd:write(chunk) - end - if eof and fd then - fd:close() - fd = nil - if fp == "config" then - CHIF = "1" - if IsYamlFile(meta.file) then - local yamlbackup="/etc/openclash/backup/" .. meta.file - local c=fs.copy(dir .. meta.file,yamlbackup) - default_config_set(meta.file) - end - if IsYmlFile(meta.file) then - local ymlname=string.lower(string.sub(meta.file,0,-5)) - local ymlbackup="/etc/openclash/backup/".. ymlname .. ".yaml" - local c=fs.rename(dir .. meta.file,"/etc/openclash/config/".. ymlname .. ".yaml") - local c=fs.copy("/etc/openclash/config/".. ymlname .. ".yaml",ymlbackup) - local yamlname=ymlname .. ".yaml" - default_config_set(yamlname) - end - um.value = translate("File saved to") .. ' "/etc/openclash/config/"' - elseif fp == "proxy-provider" then - um.value = translate("File saved to") .. ' "/etc/openclash/proxy_provider/"' - elseif fp == "rule-provider" then - um.value = translate("File saved to") .. ' "/etc/openclash/rule_provider/"' - elseif fp == "backup-file" then - os.execute("tar -C '/etc/openclash/' -xzf %s >/dev/null 2>&1" % (backup_dir .. meta.file)) - os.execute("mv /etc/openclash/openclash /etc/config/openclash >/dev/null 2>&1") - fs.unlink(backup_dir .. meta.file) - um.value = translate("Backup File Restore Successful!") - end - fs.unlink("/tmp/Proxy_Group") - end - end -) - -if HTTP.formvalue("upload") then - local f = HTTP.formvalue("ulfile") - if #f <= 0 then - um.value = translate("No specify upload file.") - end -end - -local e,a={} -for t,o in ipairs(fs.glob("/etc/openclash/config/*"))do -a=fs.stat(o) -if a then -e[t]={} -e[t].name=fs.basename(o) -BACKUP_FILE="/etc/openclash/backup/".. e[t].name -if fs.mtime(BACKUP_FILE) then - e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(BACKUP_FILE)) -else - e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",a.mtime) -end -if uci:get("openclash", "config", "config_path") and string.sub(uci:get("openclash", "config", "config_path"), 23, -1) == e[t].name then - e[t].state=translate("Enable") -else - e[t].state=translate("Disable") -end -e[t].size=fs.filesize(a.size) -e[t].check=translate(config_check(o)) -e[t].remove=0 -end -end - -form=SimpleForm("config_file_list",translate("Config File List")) -form.reset=false -form.submit=false -tb=form:section(Table,e) -st=tb:option(DummyValue,"state",translate("State")) -st.template="openclash/cfg_check" -nm=tb:option(DummyValue,"name",translate("Config Alias")) -mt=tb:option(DummyValue,"mtime",translate("Update Time")) -sz=tb:option(DummyValue,"size",translate("Size")) -ck=tb:option(DummyValue,"check",translate("Grammar Check")) -ck.template="openclash/cfg_check" -nm.template="openclash/sub_info_show" - -btnis=tb:option(Button,"switch",translate("Switch Config")) -btnis.template="openclash/other_button" -btnis.render=function(o,t,a) -if not e[t] then return false end -if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then -a.display="" -else -a.display="none" -end -o.inputstyle="apply" -Button.render(o,t,a) -end -btnis.write=function(a,t) -fs.unlink("/tmp/Proxy_Group") -uci:set("openclash", "config", "config_path", "/etc/openclash/config/"..e[t].name) -uci:commit("openclash") -HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "config")) -end - -btncp=tb:option(Button,"copy",translate("Copy Config")) -btncp.template="openclash/other_button" -btncp.render=function(o,t,a) -if not e[t] then return false end -if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then -a.display="" -else -a.display="none" -end -o.inputstyle="apply" -Button.render(o,t,a) -end -btncp.write=function(a,t) - local num = 1 - while true do - num = num + 1 - if not fs.isfile("/etc/openclash/config/"..fs.filename(e[t].name).."("..num..")"..".yaml") then - fs.copy("/etc/openclash/config/"..e[t].name, "/etc/openclash/config/"..fs.filename(e[t].name).."("..num..")"..".yaml") - break - end - end - HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "config")) -end - -btndl = tb:option(Button,"download",translate("Download Config")) -btndl.template="openclash/other_button" -btndl.render=function(e,t,a) -e.inputstyle="remove" -Button.render(e,t,a) -end -btndl.write = function (a,t) - local sPath, sFile, fd, block - sPath = "/etc/openclash/config/"..e[t].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btndlr = tb:option(Button,"download_run",translate("Download Running Config")) -btndlr.template="openclash/other_button" -btndlr.render=function(c,t,a) - if nixio.fs.access("/etc/openclash/"..e[t].name) then - a.display="" - else - a.display="none" - end -c.inputstyle="remove" -Button.render(c,t,a) -end -btndlr.write = function (a,t) - local sPath, sFile, fd, block - sPath = "/etc/openclash/"..e[t].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btnrm=tb:option(Button,"remove",translate("Remove")) -btnrm.render=function(e,t,a) -e.inputstyle="reset" -Button.render(e,t,a) -end -btnrm.write=function(a,t) - fs.unlink("/tmp/Proxy_Group") - fs.unlink("/etc/openclash/backup/"..fs.basename(e[t].name)) - fs.unlink("/etc/openclash/history/"..fs.filename(e[t].name)) - fs.unlink("/etc/openclash/history/"..fs.filename(e[t].name)..".db") - fs.unlink("/etc/openclash/"..fs.basename(e[t].name)) - local a=fs.unlink("/etc/openclash/config/"..fs.basename(e[t].name)) - default_config_set(fs.basename(e[t].name)) - if a then table.remove(e,t)end - HTTP.redirect(DISP.build_url("admin", "services", "openclash","config")) -end - -p = SimpleForm("provider_file_manage",translate("Provider File Manage")) -p.reset = false -p.submit = false - -local provider_manage = { - {proxy_mg, rule_mg, game_mg} -} - -promg = p:section(Table, provider_manage) - -o = promg:option(Button, "proxy_mg", " ") -o.inputtitle = translate("Proxy Provider File List") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "proxy-provider-file-manage")) -end - -o = promg:option(Button, "rule_mg", " ") -o.inputtitle = translate("Rule Providers File List") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-file-manage")) -end - -o = promg:option(Button, "game_mg", " ") -o.inputtitle = translate("Game Rules File List") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-file-manage")) -end - -m = SimpleForm("openclash",translate("Config File Edit")) -m.reset = false -m.submit = false - -local tab = { - {user, default} -} - -s = m:section(Table, tab) -s.description = align_mid..translate("Support syntax check, press").." "..font_green..bold_on.."F11"..bold_off..font_off.." "..translate("to enter full screen editing mode")..align_mid_off -s.anonymous = true -s.addremove = false - -local conf = uci:get("openclash", "config", "config_path") -local dconf = "/usr/share/openclash/res/default.yaml" -if not conf then conf = "/etc/openclash/config/config.yaml" end -local conf_name = fs.basename(conf) -if not conf_name then conf_name = "config.yaml" end -local sconf = "/etc/openclash/"..conf_name - -sev = s:option(TextValue, "user") -sev.description = align_mid..translate("Modify Your Config file:").." "..font_green..bold_on..conf_name..bold_off..font_off.." "..translate("Here, Except The Settings That Were Taken Over")..align_mid_off -sev.rows = 40 -sev.wrap = "off" -sev.cfgvalue = function(self, section) - return NXFS.readfile(conf) or NXFS.readfile(dconf) or "" -end -sev.write = function(self, section, value) -if (CHIF == "0") then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile(conf) - if value ~= old_value then - NXFS.writefile(conf, value) - end -end -end - -def = s:option(TextValue, "default") -if fs.isfile(sconf) then - def.description = align_mid..translate("Config File Edited By OpenClash For Running")..align_mid_off -else - def.description = align_mid..translate("Default Config File With Correct Template")..align_mid_off -end -def.rows = 40 -def.wrap = "off" -def.readonly = true -def.cfgvalue = function(self, section) - return NXFS.readfile(sconf) or NXFS.readfile(dconf) or "" -end -def.write = function(self, section, value) -end - -local t = { - {Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - uci:commit("openclash") -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Apply Settings") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -m:append(Template("openclash/config_editor")) - -return ful , form , p , m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-file-manage.lua b/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-file-manage.lua deleted file mode 100644 index bcbd1c67..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-file-manage.lua +++ /dev/null @@ -1,105 +0,0 @@ - -local rule_form -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -local g,h={} -for n,m in ipairs(fs.glob("/etc/openclash/game_rules/*"))do -h=fs.stat(m) -if h then -g[n]={} -g[n].name=fs.basename(m) -g[n].mtime=os.date("%Y-%m-%d %H:%M:%S",h.mtime) -g[n].size=fs.filesize(h.size) -g[n].remove=0 -g[n].enable=false -end -end - -rule_form=SimpleForm("game_rules_file_list",translate("Game Rules File List")) -rule_form.reset=false -rule_form.submit=false -tb2=rule_form:section(Table,g) -nm2=tb2:option(DummyValue,"name",translate("File Name")) -mt2=tb2:option(DummyValue,"mtime",translate("Update Time")) -sz2=tb2:option(DummyValue,"size",translate("Size")) - -btndl2 = tb2:option(Button,"download2",translate("Download Config")) -btndl2.template="openclash/other_button" -btndl2.render=function(m,n,h) -m.inputstyle="remove" -Button.render(m,n,h) -end -btndl2.write = function (h,n) - local sPath, sFile, fd, block - sPath = "/etc/openclash/game_rules/"..g[n].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btnrm2=tb2:option(Button,"remove2",translate("Remove")) -btnrm2.render=function(g,n,h) -g.inputstyle="reset" -Button.render(g,n,h) -end -btnrm2.write=function(h,n) -local h=fs.unlink("/etc/openclash/game_rules/"..luci.openclash.basename(g[n].name)) -if h then table.remove(g,n)end -return h -end - -local t = { - {Refresh, Delete_all, Apply} -} - -a = rule_form:section(Table, t) - -o = a:option(Button, "Refresh", " ") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-file-manage")) -end - -o = a:option(Button, "Delete_all", " ") -o.inputtitle = translate("Delete All File") -o.inputstyle = "remove" -o.write = function() - luci.sys.call("rm -rf /etc/openclash/game_rules/* >/dev/null 2>&1") - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-file-manage")) -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "config")) -end - -return rule_form diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-manage.lua b/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-manage.lua deleted file mode 100644 index 30120bfd..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-manage.lua +++ /dev/null @@ -1,99 +0,0 @@ - -local form, m -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -m = SimpleForm("openclash", translate("Game Rules List")) -m.description=translate("Rule Project:").." SSTap-Rule ( https://github.com/FQrabbit/SSTap-Rule )" -m.reset = false -m.submit = false - -local t = { - {Refresh, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Refresh", " ") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage")) -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-settings")) -end - -if not NXFS.access("/tmp/rules_name") then - SYS.call("awk -F ',' '{print $1}' /usr/share/openclash/res/game_rules.list > /tmp/rules_name 2>/dev/null") -end -file = io.open("/tmp/rules_name", "r"); - ----- Rules List -local e={},o,t -if NXFS.access("/tmp/rules_name") then -for o in file:lines() do -table.insert(e,o) -end -for t,o in ipairs(e) do -e[t]={} -e[t].num=string.format(t) -e[t].name=o -e[t].filename=string.sub(luci.sys.exec(string.format("grep -F '%s,' /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $3}' 2>/dev/null",e[t].name)),1,-2) -if e[t].filename == "" then -e[t].filename=string.sub(luci.sys.exec(string.format("grep -F '%s,' /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null",e[t].name)),1,-2) -end -RULE_FILE="/etc/openclash/game_rules/".. e[t].filename -if fs.mtime(RULE_FILE) then -e[t].size=fs.filesize(fs.stat(RULE_FILE).size) -e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE)) -else -e[t].size="/" -e[t].mtime="/" -end -if fs.isfile(RULE_FILE) then - e[t].exist=translate("Exist") -else - e[t].exist=translate("Not Exist") -end -e[t].remove=0 -end -end -file:close() - -form=SimpleForm("filelist") -form.reset=false -form.submit=false -tb=form:section(Table,e) -nu=tb:option(DummyValue,"num",translate("Order Number")) -st=tb:option(DummyValue,"exist",translate("State")) -st.template="openclash/cfg_check" -nm=tb:option(DummyValue,"name",translate("Rule Name")) -fm=tb:option(DummyValue,"filename",translate("File Name")) -sz=tb:option(DummyValue,"size",translate("Size")) -mt=tb:option(DummyValue,"mtime",translate("Update Time")) - -btnis=tb:option(DummyValue,"filename",translate("Download Rule")) -btnis.template="openclash/download_rule" - -btnrm=tb:option(Button,"remove",translate("Remove")) -btnrm.render=function(e,t,a) -e.inputstyle="reset" -Button.render(e,t,a) -end -btnrm.write=function(a,t) -fs.unlink("/etc/openclash/game_rules/"..e[t].filename) -HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage")) -end - -return m, form diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua deleted file mode 100644 index 0e42a1ac..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua +++ /dev/null @@ -1,142 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -m = Map(openclash, translate("Edit Group")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") -if m.uci:get(openclash, sid) ~= "groups" then - luci.http.redirect(m.redirect) - return -end - --- [[ Groups Setting ]]-- -s = m:section(NamedSection, sid, "groups") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - -o = s:option(ListValue, "type", translate("Group Type")) -o.rmempty = true -o.description = translate("Choose The Operation Mode") -o:value("select", translate("Manual-Select")) -o:value("url-test", translate("URL-Test")) -o:value("fallback", translate("Fallback")) -o:value("load-balance", translate("Load-Balance")) -o:value("relay", translate("Relay-Traffic")) - -o = s:option(ListValue, "strategy", translate("Strategy Type")) -o.rmempty = true -o.description = translate("Choose The Load-Balance's Strategy Type") -o:value("consistent-hashing", translate("Consistent-hashing")) -o:value("round-robin", translate("Round-robin")) -o:depends("type", "load-balance") - -o = s:option(Value, "name", translate("Group Name")) -o.rmempty = false -o.default = "Group - "..sid - -o = s:option(ListValue, "disable_udp", translate("Disable UDP")) -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default = "false" -o.rmempty = false - -o = s:option(Value, "test_url", translate("Test URL")) -o:value("http://www.gstatic.com/generate_204") -o:value("https://cp.cloudflare.com/generate_204") -o.rmempty = false -o:depends("type", "url-test") -o:depends("type", "fallback") -o:depends("type", "load-balance") - -o = s:option(Value, "test_interval", translate("Test Interval(s)")) -o.default = "300" -o.rmempty = false -o:depends("type", "url-test") -o:depends("type", "fallback") -o:depends("type", "load-balance") - -o = s:option(Value, "tolerance", translate("Tolerance(ms)")) -o.default = "150" -o.rmempty = true -o:depends("type", "url-test") - --- [[ interface-name ]]-- -o = s:option(Value, "interface_name", translate("interface-name")) -o.rmempty = true -o.placeholder = translate("eth0") - --- [[ routing-mark ]]-- -o = s:option(Value, "routing_mark", translate("routing-mark")) -o.rmempty = true -o.placeholder = translate("2333") - -o = s:option(DynamicList, "other_group", translate("Other Group")) -o.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off -uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil and s.name ~= m.uci:get(openclash, sid, "name") then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") -o.rmempty = true - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - sys.call("/usr/share/openclash/yml_groups_name_ch.sh") - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash, sid) - luci.http.redirect(m.redirect) -end - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/log.lua b/luci-app-openclash/luasrc/model/cbi/openclash/log.lua deleted file mode 100644 index 258db628..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/log.lua +++ /dev/null @@ -1,22 +0,0 @@ --- -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" - -m = Map("openclash", translate("Server Logs")) -s = m:section(TypedSection, "openclash") -m.pageaction = false -s.anonymous = true -s.addremove=false - -log = s:option(TextValue, "clog") -log.readonly=true -log.pollcheck=true -log.template="openclash/log" -log.description = translate("") -log.rows = 29 - -m:append(Template("openclash/toolbar_show")) -m:append(Template("openclash/config_editor")) - -return m \ No newline at end of file diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua b/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua deleted file mode 100644 index ead19435..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua +++ /dev/null @@ -1,362 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] - -font_red = [[]] -font_green = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -m = Map(openclash, translate("Other Rules Edit")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/settings") -if m.uci:get(openclash, sid) ~= "other_rules" then - luci.http.redirect(m.redirect) - return -end - --- [[ Other Rules Setting ]]-- -s = m:section(NamedSection, sid, "other_rules") -s.anonymous = true -s.addremove = false - -o = s:option(Value, "Note", translate("Note")) -o.default = "default" -o.rmempty = false - -o = s:option(ListValue, "config", translate("Config File")) -local e,a={} -local groupnames,filename -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - if e[t].name == m.uci:get(openclash, sid, "config") then - filename = e[t].name - groupnames = sys.exec(string.format('ruby -ryaml -E UTF-8 -e "YAML.load_file(\'%s\')[\'proxy-groups\'].each do |i| puts i[\'name\']+\'##\' end" 2>/dev/null',f)) - end - end -end - -o = s:option(Button, translate("Get Group Names")) -o.title = translate("Get Group Names") -o.inputtitle = translate("Get Group Names") -o.description = translate("Get Group Names After Select Config File") -o.inputstyle = "reload" -o.write = function() - m.uci:commit("openclash") - luci.http.redirect(luci.dispatcher.build_url("admin/services/openclash/other-rules-edit/%s") % sid) -end - -if groupnames ~= nil and filename ~= nil then -o = s:option(ListValue, "rule_name", translate("Other Rules Name")) -o.rmempty = true -o:value("lhie1", translate("lhie1 Rules")) -o:value("ConnersHua", translate("ConnersHua(Provider-type) Rules")) -o:value("ConnersHua_return", translate("ConnersHua Return Rules")) - -o = s:option(ListValue, "GlobalTV", translate("GlobalTV")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "AsianTV", translate("AsianTV")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Proxy", translate("Proxy")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o:depends("rule_name", "ConnersHua_return") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Youtube", translate("Youtube")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Bilibili", translate("Bilibili")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Bahamut", translate("Bahamut")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "HBOMax", translate("HBO Max")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "HBOGo", translate("HBO Go")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Pornhub", translate("Pornhub")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Apple", translate("Apple")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "GoogleFCM", translate("Google FCM")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Scholar", translate("Scholar")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Microsoft", translate("Microsoft")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Netflix", translate("Netflix")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Disney", translate("Disney Plus")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Spotify", translate("Spotify")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Steam", translate("Steam")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Speedtest", translate("Speedtest")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Telegram", translate("Telegram")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "PayPal", translate("PayPal")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "AdBlock", translate("AdBlock")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Domestic", translate("Domestic")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Others", translate("Others")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o:depends("rule_name", "ConnersHua_return") -o.rmempty = true -o.description = translate("Choose Proxy Groups, Base On Your Config File").." ( "..font_green..bold_on..filename..bold_off..font_off.." )" -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -end - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - --luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash, sid) - luci.http.redirect(m.redirect) -end - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua deleted file mode 100644 index 8e847e4a..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua +++ /dev/null @@ -1,140 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local sys = require "luci.sys" -local sid = arg[1] -local fs = require "luci.openclash" - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -m = Map(openclash, translate("Edit Proxy-Provider")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") -if m.uci:get(openclash, sid) ~= "proxy-provider" then - luci.http.redirect(m.redirect) - return -end - --- [[ Provider Setting ]]-- -s = m:section(NamedSection, sid, "proxy-provider") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - -o = s:option(ListValue, "type", translate("Provider Type")) -o.rmempty = true -o.description = translate("Choose The Provider Type") -o:value("http") -o:value("file") - -o = s:option(Value, "name", translate("Provider Name")) -o.rmempty = false -o.default = "Proxy-provider - "..sid -if not m.uci:get("openclash", sid, "name") then - m.uci:set("openclash", sid, "manual", 1) -end - -o = s:option(ListValue, "path", translate("Provider Path")) -o.description = translate("Update Your Proxy Provider File From Config Luci Page") -local p,h={} -for t,f in ipairs(fs.glob("/etc/openclash/proxy_provider/*"))do - h=fs.stat(f) - if h then - p[t]={} - p[t].name=fs.basename(f) - if IsYamlFile(p[t].name) or IsYmlFile(p[t].name) then - o:value("./proxy_provider/"..p[t].name) - end - end -end -o.rmempty = false -o:depends("type", "file") - -o = s:option(Value, "provider_url", translate("Provider URL")) -o.rmempty = false -o:depends("type", "http") - -o = s:option(Value, "provider_filter", translate("Provider Filter")) -o.rmempty = true -o.placeholder = "bgp|sg" - -o = s:option(Value, "provider_interval", translate("Provider Interval(s)")) -o.default = "3600" -o.rmempty = false -o:depends("type", "http") - -o = s:option(ListValue, "health_check", translate("Provider Health Check")) -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=true - -o = s:option(Value, "health_check_url", translate("Health Check URL")) -o:value("http://www.gstatic.com/generate_204") -o:value("https://cp.cloudflare.com/generate_204") -o.rmempty = false - -o = s:option(Value, "health_check_interval", translate("Health Check Interval(s)")) -o.default = "300" -o.rmempty = false - -o = s:option(DynamicList, "groups", translate("Proxy Group")) -o.description = font_red..bold_on..translate("No Need Set when Config Create, The added Proxy Groups Must Exist")..bold_off..font_off -o.rmempty = true -o:value("all", translate("All Groups")) -m.uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash, sid) - luci.http.redirect(m.redirect) -end - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-file-manage.lua b/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-file-manage.lua deleted file mode 100644 index 651ec628..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-file-manage.lua +++ /dev/null @@ -1,105 +0,0 @@ - -local proxy_form -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -local p,r={} -for x,y in ipairs(fs.glob("/etc/openclash/proxy_provider/*"))do -r=fs.stat(y) -if r then -p[x]={} -p[x].name=fs.basename(y) -p[x].mtime=os.date("%Y-%m-%d %H:%M:%S",r.mtime) -p[x].size=fs.filesize(r.size) -p[x].remove=0 -p[x].enable=false -end -end - -proxy_form=SimpleForm("proxy_provider_file_list",translate("Proxy Provider File List")) -proxy_form.reset=false -proxy_form.submit=false -tb1=proxy_form:section(Table,p) -nm1=tb1:option(DummyValue,"name",translate("File Name")) -mt1=tb1:option(DummyValue,"mtime",translate("Update Time")) -sz1=tb1:option(DummyValue,"size",translate("Size")) - -btndl1 = tb1:option(Button,"download1",translate("Download Config")) -btndl1.template="openclash/other_button" -btndl1.render=function(y,x,r) -y.inputstyle="remove" -Button.render(y,x,r) -end -btndl1.write = function (r,x) - local sPath, sFile, fd, block - sPath = "/etc/openclash/proxy_provider/"..p[x].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btnrm1=tb1:option(Button,"remove1",translate("Remove")) -btnrm1.render=function(p,x,r) -p.inputstyle="reset" -Button.render(p,x,r) -end -btnrm1.write=function(r,x) -local r=fs.unlink("/etc/openclash/proxy_provider/"..luci.openclash.basename(p[x].name)) -if r then table.remove(p,x)end -return r -end - -local t = { - {Refresh, Delete_all, Apply} -} - -a = proxy_form:section(Table, t) - -o = a:option(Button, "Refresh", " ") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "proxy-provider-file-manage")) -end - -o = a:option(Button, "Delete_all", " ") -o.inputtitle = translate("Delete All File") -o.inputstyle = "remove" -o.write = function() - luci.sys.call("rm -rf /etc/openclash/proxy_provider/* >/dev/null 2>&1") - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "proxy-provider-file-manage")) -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "config")) -end - -return proxy_form diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua deleted file mode 100644 index f124be67..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua +++ /dev/null @@ -1,132 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -m = Map(openclash, translate("Edit Rule Providers")) -m.pageaction = false -m.description=translate("规则集使用介绍:https://lancellc.gitbook.io/clash/clash-config-file/rule-provider") -m.redirect = luci.dispatcher.build_url("admin/services/openclash/rule-providers-settings") -if m.uci:get(openclash, sid) ~= "rule_providers" then - luci.http.redirect(m.redirect) - return -end - --- [[ Rule Providers Setting ]]-- -s = m:section(NamedSection, sid, "rule_providers") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - -o = s:option(Value, "name", translate("Rule Providers Name")) -o.rmempty = false -o.default = "Rule-provider - "..sid - -o = s:option(ListValue, "type", translate("Rule Providers Type")) -o.rmempty = true -o.description = translate("Choose The Rule Providers Type") -o:value("http", translate("http")) -o:value("file", translate("file")) - -o = s:option(ListValue, "behavior", translate("Rule Behavior")) -o.rmempty = true -o.description = translate("Choose The Rule Behavior") -o:value("domain") -o:value("ipcidr") -o:value("classical") - -o = s:option(ListValue, "path", translate("Rule Providers Path")) -o.description = translate("Update Your Rule Providers File From Config Luci Page") -local p,h={} -for t,f in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do - h=fs.stat(f) - if h then - p[t]={} - p[t].name=fs.basename(f) - o:value("./rule_provider/"..p[t].name) - end -end -o.rmempty = false -o:depends("type", "file") - -o = s:option(Value, "url", translate("Rule Providers URL")) -o.rmempty = false -o:depends("type", "http") - -o = s:option(Value, "interval", translate("Rule Providers Interval(s)")) -o.default = "86400" -o.rmempty = false -o:depends("type", "http") - -o = s:option(ListValue, "position", translate("Append Position")) -o.rmempty = false -o:value("0", translate("Priority Match")) -o:value("1", translate("Extended Match")) - -o = s:option(ListValue, "group", translate("Set Proxy Group")) -o.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off -o.rmempty = true -m.uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - sys.call("/usr/share/openclash/yml_groups_name_ch.sh") - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash, sid) - luci.http.redirect(m.redirect) -end - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-file-manage.lua b/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-file-manage.lua deleted file mode 100644 index ee719f46..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-file-manage.lua +++ /dev/null @@ -1,105 +0,0 @@ - -local rule_form -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -local g,h={} -for n,m in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do -h=fs.stat(m) -if h then -g[n]={} -g[n].name=fs.basename(m) -g[n].mtime=os.date("%Y-%m-%d %H:%M:%S",h.mtime) -g[n].size=fs.filesize(h.size) -g[n].remove=0 -g[n].enable=false -end -end - -rule_form=SimpleForm("rule_provider_file_list",translate("Rule Providers File List")) -rule_form.reset=false -rule_form.submit=false -tb2=rule_form:section(Table,g) -nm2=tb2:option(DummyValue,"name",translate("File Name")) -mt2=tb2:option(DummyValue,"mtime",translate("Update Time")) -sz2=tb2:option(DummyValue,"size",translate("Size")) - -btndl2 = tb2:option(Button,"download2",translate("Download Config")) -btndl2.template="openclash/other_button" -btndl2.render=function(m,n,h) -m.inputstyle="remove" -Button.render(m,n,h) -end -btndl2.write = function (h,n) - local sPath, sFile, fd, block - sPath = "/etc/openclash/rule_provider/"..g[n].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btnrm2=tb2:option(Button,"remove2",translate("Remove")) -btnrm2.render=function(g,n,h) -g.inputstyle="reset" -Button.render(g,n,h) -end -btnrm2.write=function(h,n) -local h=fs.unlink("/etc/openclash/rule_provider/"..luci.openclash.basename(g[n].name)) -if h then table.remove(g,n)end -return h -end - -local t = { - {Refresh, Delete_all, Apply} -} - -a = rule_form:section(Table, t) - -o = a:option(Button, "Refresh", " ") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-file-manage")) -end - -o = a:option(Button, "Delete_all", " ") -o.inputtitle = translate("Delete All File") -o.inputstyle = "remove" -o.write = function() - luci.sys.call("rm -rf /etc/openclash/rule_provider/* >/dev/null 2>&1") - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-file-manage")) -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "config")) -end - -return rule_form diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-manage.lua b/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-manage.lua deleted file mode 100644 index e43cdcfc..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-manage.lua +++ /dev/null @@ -1,106 +0,0 @@ - -local form, m -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -m = SimpleForm("openclash", translate("Other Rule Providers List")) -m.description=translate("Rule Project:").." ConnersHua ( https://github.com/DivineEngine/Profiles )
".. -translate("Rule Project:").." lhie1 ( https://github.com/dler-io/Rules )
".. -translate("Rule Project:").." ACL4SSR ( https://github.com/ACL4SSR/ACL4SSR/tree/master )" -m.reset = false -m.submit = false - -local t = { - {Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Refresh", " ") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-manage")) -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-settings")) -end - -if not NXFS.access("/tmp/rule_providers_name") then - SYS.call("awk -v d=',' -F ',' '{print $4d$5}' /usr/share/openclash/res/rule_providers.list > /tmp/rule_providers_name 2>/dev/null") -end -file = io.open("/tmp/rule_providers_name", "r"); - ----- Rules List -local e={},o,t -if NXFS.access("/tmp/rule_providers_name") then -for o in file:lines() do -table.insert(e,o) -end -for t,o in ipairs(e) do -e[t]={} -e[t].num=string.format(t) -e[t].name=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $1}' 2>/dev/null",o)),1,-2) -e[t].lfilename=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $6}' 2>/dev/null",o)),1,-2) -if e[t].lfilename == "" then -e[t].lfilename=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $5}' 2>/dev/null",o)),1,-2) -end -e[t].filename=o -e[t].author=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $2}' 2>/dev/null",o)),1,-2) -e[t].rule_type=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $3}' 2>/dev/null",o)),1,-2) -RULE_FILE="/etc/openclash/rule_provider/".. e[t].lfilename -if fs.mtime(RULE_FILE) then -e[t].size=fs.filesize(fs.stat(RULE_FILE).size) -e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE)) -else -e[t].size="/" -e[t].mtime="/" -end -if fs.isfile(RULE_FILE) then - e[t].exist=translate("Exist") -else - e[t].exist=translate("Not Exist") -end -e[t].remove=0 -end -end -file:close() - -form=SimpleForm("filelist") -form.reset=false -form.submit=false -tb=form:section(Table,e) -nu=tb:option(DummyValue,"num",translate("Order Number")) -st=tb:option(DummyValue,"exist",translate("State")) -st.template="openclash/cfg_check" -tp=tb:option(DummyValue,"rule_type",translate("Rule Type")) -nm=tb:option(DummyValue,"name",translate("Rule Name")) -au=tb:option(DummyValue,"author",translate("Rule Author")) -fm=tb:option(DummyValue,"lfilename",translate("File Name")) -sz=tb:option(DummyValue,"size",translate("Size")) -mt=tb:option(DummyValue,"mtime",translate("Update Time")) - -btnis=tb:option(DummyValue,"filename",translate("Download Rule")) -btnis.template="openclash/download_rule" - -btnrm=tb:option(Button,"remove",translate("Remove")) -btnrm.render=function(e,t,a) -e.inputstyle="reset" -Button.render(e,t,a) -end -btnrm.write=function(a,t) -fs.unlink("/etc/openclash/rule_provider/"..e[t].lfilename) -HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-manage")) -end - -return m, form diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-settings.lua b/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-settings.lua deleted file mode 100644 index 93941a76..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-settings.lua +++ /dev/null @@ -1,261 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -m = Map(openclash, translate("Rule Providers and Groups")) -m.pageaction = false -m.description=translate("Attention:").. -"
"..translate("The game proxy is a test function and does not guarantee the availability of rules").. -"
"..translate("Preparation steps:").. -"
"..translate("1. In the page, create the policy group and node you are going to use, and apply the configuration (when adding nodes, you must select the policy group you want to join). Policy group type suggestion: fallback, game nodes must support UDP").. -"
"..translate("2. Click the or button to enter the rule list and download the rules you want to use").. -"
"..translate("3. On this page, set the corresponding configuration file and policy group of the rule you have downloaded, and save the settings").. -"
"..translate("4. Install the TUN core").. -"
".. -"
"..translate("When setting this page, if the groups is empty, please go to the page to add").. -"
".. -"
"..translate("Introduction to rule set usage: https://lancellc.gitbook.io/clash/clash-config-file/rule-provider") - -function IsRuleFile(e) -e=e or"" -local e=string.lower(string.sub(e,-6,-1)) -return e==".rules" -end - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end - -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - --- [[ Edit Game Rule ]] -- -s = m:section(TypedSection, "game_config", translate("Game Rules and Groups (Only TUN Core Support)")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- config -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - ----- rule name -o = s:option(DynamicList, "rule_name", translate("Game Rule's Name")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/game_rules/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].filename=fs.basename(f) - if IsRuleFile(e[t].filename) then - e[t].name=string.gsub(luci.sys.exec(string.format("grep ',%s$' /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $1}' 2>/dev/null",e[t].filename)), "[\r\n]", "") - if e[t].name ~= "" and e[t].name ~= nil then - o:value(e[t].name) - end - end - end -end - -o.rmempty = true - ----- Proxy Group -o = s:option(ListValue, "group", translate("Select Proxy Group")) -uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") -o.rmempty = true - --- [[ Edit Other Rule Provider ]] -- -s = m:section(TypedSection, "rule_provider_config", translate("Other Rule Providers and Groups (Only TUN Core Support)")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- config -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - ----- rule name -o = s:option(DynamicList, "rule_name", translate("Rule Provider's Name")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].filename=fs.basename(f) - if IsYamlFile(e[t].filename) or IsYmlFile(e[t].filename) then - e[t].name=string.gsub(luci.sys.exec(string.format("grep ',%s$' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $1}' 2>/dev/null",e[t].filename)), "[\r\n]", "") - if e[t].name ~= "" and e[t].name ~= nil then - o:value(e[t].name) - end - end - end -end - -o.rmempty = true - ----- Proxy Group -o = s:option(ListValue, "group", translate("Select Proxy Group")) -uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") -o.rmempty = true - -o = s:option(Value, "interval", translate("Rule Providers Interval(s)")) -o.default = "86400" -o.rmempty = false - ----- position -o = s:option(ListValue, "position", translate("Append Position")) -o.rmempty = false -o:value("0", translate("Priority Match")) -o:value("1", translate("Extended Match")) - --- [[ Edit Custom Rule Provider ]] -- -s = m:section(TypedSection, "rule_providers", translate("Custom Rule Providers and Groups (Only TUN Core Support)")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/rule-providers-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - -o = s:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("all") -end - -o = s:option(DummyValue, "name", translate("Rule Providers Name")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(ListValue, "position", translate("Append Position")) -o.rmempty = false -o:value("0", translate("Priority Match")) -o:value("1", translate("Extended Match")) - -local rm = { - {rule_mg, pro_mg} -} - -rmg = m:section(Table, rm) - -o = rmg:option(Button, "rule_mg", " ") -o.inputtitle = translate("Game Rules Manage") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage")) -end - -o = rmg:option(Button, "pro_mg", " ") -o.inputtitle = translate("Other Rule Provider Manage") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-manage")) -end - -local t = { - {Commit, Apply} -} - -ss = m:section(Table, t) - -o = ss:option(Button, "Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:commit("openclash") -end - -o = ss:option(Button, "Apply", " ") -o.inputtitle = translate("Apply Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -m:append(Template("openclash/toolbar_show")) - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua b/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua deleted file mode 100644 index ce546c5d..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua +++ /dev/null @@ -1,445 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] -local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid") - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -local encrypt_methods_ss = { - - -- stream - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "aes-128-gcm", - "aes-192-gcm", - "aes-256-gcm", - "chacha20-ietf", - "xchacha20", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305", -} - -local encrypt_methods_ssr = { - - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "chacha20-ietf", - "xchacha20", -} - -local securitys = { - "auto", - "none", - "aes-128-gcm", - "chacha20-poly1305" -} - -local protocols = { - "origin", - "auth_sha1_v4", - "auth_aes128_md5", - "auth_aes128_sha1", - "auth_chain_a", - "auth_chain_b", -} - -local obfs = { - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth", - "tls1.2_ticket_fastauth", -} - -m = Map(openclash, translate("Edit Server")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") - -if m.uci:get(openclash, sid) ~= "servers" then - luci.http.redirect(m.redirect) - return -end - --- [[ Servers Setting ]] -- -s = m:section(NamedSection, sid, "servers") -s.anonymous = true -s.addremove = false - -o = s:option(DummyValue, "server_url", "SS/SSR/VMESS/TROJAN URL") -o.rawhtml = true -o.template = "openclash/server_url" -o.value = sid - -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - -o = s:option(ListValue, "type", translate("Server Node Type")) -o:value("ss", translate("Shadowsocks")) -o:value("ssr", translate("ShadowsocksR")) -o:value("vmess", translate("Vmess")) -o:value("trojan", translate("trojan")) -o:value("snell", translate("Snell")) -o:value("socks5", translate("Socks5")) -o:value("http", translate("HTTP(S)")) -o.description = translate("Using incorrect encryption mothod may causes service fail to start") - -o = s:option(Value, "name", translate("Server Alias")) -o.rmempty = false -o.default = "Server - "..sid -if not m.uci:get("openclash", sid, "name") then - m.uci:set("openclash", sid, "manual", 1) -end - -o = s:option(Value, "server", translate("Server Address")) -o.datatype = "host" -o.rmempty = true - -o = s:option(Value, "port", translate("Server Port")) -o.datatype = "port" -o.rmempty = false -o.default = 443 - -o = s:option(Value, "password", translate("Password")) -o.password = true -o.rmempty = false -o:depends("type", "ss") -o:depends("type", "ssr") -o:depends("type", "trojan") - -o = s:option(Value, "psk", translate("Psk")) -o.rmempty = false -o:depends("type", "snell") - -o = s:option(ListValue, "snell_version", translate("Version")) -o:value("2") -o:value("3") -o:depends("type", "snell") - -o = s:option(ListValue, "cipher", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ss) do o:value(v) end -o.rmempty = true -o:depends("type", "ss") - -o = s:option(ListValue, "cipher_ssr", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ssr) do o:value(v) end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(ListValue, "protocol", translate("Protocol")) -for _, v in ipairs(protocols) do o:value(v) end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(Value, "protocol_param", translate("Protocol param(optional)")) -o:depends("type", "ssr") - -o = s:option(ListValue, "securitys", translate("Encrypt Method")) -for _, v in ipairs(securitys) do o:value(v) end -o.rmempty = true -o:depends("type", "vmess") - -o = s:option(ListValue, "obfs_ssr", translate("Obfs")) -for _, v in ipairs(obfs) do o:value(v) end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(Value, "obfs_param", translate("Obfs param(optional)")) -o:depends("type", "ssr") - --- AlterId -o = s:option(Value, "alterId", translate("AlterId")) -o.datatype = "port" -o.default = 32 -o.rmempty = true -o:depends("type", "vmess") - --- VmessId -o = s:option(Value, "uuid", translate("VmessId (UUID)")) -o.rmempty = true -o.default = uuid -o:depends("type", "vmess") - -o = s:option(ListValue, "udp", translate("UDP Enable")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("type", "ss") -o:depends("type", "ssr") -o:depends("type", "vmess") -o:depends("type", "socks5") -o:depends("type", "trojan") -o:depends({type = "snell", snell_version = "3"}) - -o = s:option(ListValue, "obfs", translate("obfs-mode")) -o.rmempty = true -o.default = "none" -o:value("none") -o:value("tls") -o:value("http") -o:value("websocket", translate("websocket (ws)")) -o:depends("type", "ss") - -o = s:option(ListValue, "obfs_snell", translate("obfs-mode")) -o.rmempty = true -o.default = "none" -o:value("none") -o:value("tls") -o:value("http") -o:depends("type", "snell") - -o = s:option(ListValue, "obfs_vmess", translate("obfs-mode")) -o.rmempty = true -o.default = "none" -o:value("none") -o:value("websocket", translate("websocket (ws)")) -o:value("http", translate("http")) -o:value("h2", translate("h2")) -o:value("grpc", translate("grpc")) -o:depends("type", "vmess") - -o = s:option(ListValue, "obfs_trojan", translate("obfs-mode")) -o.rmempty = true -o.default = "none" -o:value("none") -o:value("ws", translate("websocket (ws)")) -o:value("grpc", translate("grpc")) -o:depends("type", "trojan") - -o = s:option(Value, "host", translate("obfs-hosts")) -o.datatype = "host" -o.placeholder = translate("example.com") -o.rmempty = true -o:depends("obfs", "tls") -o:depends("obfs", "http") -o:depends("obfs", "websocket") -o:depends("obfs_snell", "tls") -o:depends("obfs_snell", "http") - --- vmess路径 -o = s:option(Value, "path", translate("path")) -o.rmempty = true -o.placeholder = translate("/") -o:depends("obfs", "websocket") - -o = s:option(DynamicList, "h2_host", translate("host")) -o.rmempty = true -o.placeholder = translate("http.example.com") -o.datatype = "host" -o:depends("obfs_vmess", "h2") - -o = s:option(Value, "h2_path", translate("path")) -o.rmempty = true -o.default = "/" -o:depends("obfs_vmess", "h2") - -o = s:option(DynamicList, "http_path", translate("path")) -o.rmempty = true -o:value("/") -o:value("/video") -o:depends("obfs_vmess", "http") - -o = s:option(Value, "custom", translate("headers")) -o.rmempty = true -o.placeholder = translate("v2ray.com") -o:depends("obfs", "websocket") - -o = s:option(Value, "ws_opts_path", translate("ws-opts-path")) -o.rmempty = true -o.placeholder = translate("/path") -o:depends("obfs_vmess", "websocket") - -o = s:option(DynamicList, "ws_opts_headers", translate("ws-opts-headers")) -o.rmempty = true -o.placeholder = translate("Host: v2ray.com") -o:depends("obfs_vmess", "websocket") - -o = s:option(Value, "max_early_data", translate("max-early-data")) -o.rmempty = true -o.placeholder = translate("2048") -o:depends("obfs_vmess", "websocket") - -o = s:option(Value, "early_data_header_name", translate("early-data-header-name")) -o.rmempty = true -o.placeholder = translate("Sec-WebSocket-Protocol") -o:depends("obfs_vmess", "websocket") - --- [[ skip-cert-verify ]]-- -o = s:option(ListValue, "skip_cert_verify", translate("skip-cert-verify")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("obfs", "websocket") -o:depends("obfs_vmess", "none") -o:depends("obfs_vmess", "websocket") -o:depends("obfs_vmess", "grpc") -o:depends("type", "socks5") -o:depends("type", "http") -o:depends("type", "trojan") - --- [[ TLS ]]-- -o = s:option(ListValue, "tls", translate("tls")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("obfs", "websocket") -o:depends("type", "vmess") -o:depends("type", "socks5") -o:depends("type", "http") - -o = s:option(Value, "servername", translate("servername")) -o.rmempty = true -o.datatype = "host" -o.placeholder = translate("example.com") -o:depends({obfs_vmess = "websocket", tls = "true"}) -o:depends({obfs_vmess = "grpc", tls = "true"}) -o:depends({obfs_vmess = "none", tls = "true"}) - -o = s:option(Value, "keep_alive", translate("keep-alive")) -o.rmempty = true -o.default = "true" -o:value("true") -o:value("false") -o:depends("obfs_vmess", "http") - --- [[ MUX ]]-- -o = s:option(ListValue, "mux", translate("mux")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("obfs", "websocket") - --- [[ sni ]]-- -o = s:option(Value, "sni", translate("sni")) -o.datatype = "host" -o.placeholder = translate("example.com") -o.rmempty = true -o:depends("type", "trojan") -o:depends("type", "http") - --- 验证用户名 -o = s:option(Value, "auth_name", translate("Auth Username")) -o:depends("type", "socks5") -o:depends("type", "http") -o.rmempty = true - --- 验证密码 -o = s:option(Value, "auth_pass", translate("Auth Password")) -o:depends("type", "socks5") -o:depends("type", "http") -o.rmempty = true - --- [[ alpn ]]-- -o = s:option(DynamicList, "alpn", translate("alpn")) -o.rmempty = true -o:value("h2") -o:value("http/1.1") -o:depends("type", "trojan") - --- [[ grpc ]]-- -o = s:option(Value, "grpc_service_name", translate("grpc-service-name")) -o.rmempty = true -o.datatype = "host" -o.placeholder = translate("example") -o:depends("obfs_trojan", "grpc") -o:depends("obfs_vmess", "grpc") - --- [[ trojan-ws-path ]]-- -o = s:option(Value, "trojan_ws_path", translate("Path")) -o.rmempty = true -o.placeholder = translate("/path") -o:depends("obfs_trojan", "ws") - --- [[ trojan-ws-headers ]]-- -o = s:option(DynamicList, "trojan_ws_headers", translate("Headers")) -o.rmempty = true -o.placeholder = translate("Host: v2ray.com") -o:depends("obfs_trojan", "ws") - --- [[ interface-name ]]-- -o = s:option(Value, "interface_name", translate("interface-name")) -o.rmempty = true -o.placeholder = translate("eth0") - --- [[ routing-mark ]]-- -o = s:option(Value, "routing_mark", translate("routing-mark")) -o.rmempty = true -o.placeholder = translate("2333") - -o = s:option(DynamicList, "groups", translate("Proxy Group")) -o.description = font_red..bold_on..translate("No Need Set when Config Create, The added Proxy Groups Must Exist")..bold_off..font_off -o.rmempty = true -o:value("all", translate("All Groups")) -m.uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - sys.call("/usr/share/openclash/cfg_servers_address_fake_filter.sh &") - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back", " ") -o.inputtitle = translate("Back Settings") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash, sid) - luci.http.redirect(m.redirect) -end - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/servers.lua b/luci-app-openclash/luasrc/model/cbi/openclash/servers.lua deleted file mode 100644 index 6b79db0c..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/servers.lua +++ /dev/null @@ -1,263 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -m = Map(openclash, translate("Servers manage and Config create")) -m.pageaction = false - -s = m:section(TypedSection, "openclash") -s.anonymous = true - -o = s:option(Flag, "create_config", translate("Create Config")) -o.description = font_red .. bold_on .. translate("Create Config By One-Click Only Need Proxies") .. bold_off .. font_off -o.default=0 - -o = s:option(ListValue, "rule_sources", translate("Choose Template For Create Config")) -o.description = translate("Use Other Rules To Create Config") -o:depends("create_config", 1) -o:value("lhie1", translate("lhie1 Rules")) -o:value("ConnersHua", translate("ConnersHua(Provider-type) Rules")) -o:value("ConnersHua_return", translate("ConnersHua Return Rules")) - -o = s:option(Flag, "mix_proxies", translate("Mix Proxies")) -o.description = font_red .. bold_on .. translate("Mix This Page's Proxies") .. bold_off .. font_off -o:depends("create_config", 1) -o.default=0 - -o = s:option(Flag, "servers_update", translate("Keep Settings")) -o.description = font_red .. bold_on .. translate("Only Update Servers Below When Subscription") .. bold_off .. font_off -o.default=0 - -o = s:option(DynamicList, "new_servers_group", translate("New Servers Group")) -o.description = translate("Set The New Subscribe Server's Default Proxy Groups") -o.rmempty = true -o:depends("servers_update", 1) -o:value("all", translate("All Groups")) -m.uci:foreach("openclash", "groups", - function(s) - o:value(s.name) - end) - --- [[ Groups Manage ]]-- -s = m:section(TypedSection, "groups", translate("Proxy Groups(No Need Set when Config Create)")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/groups-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - -o = s:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("all") -end - -o = s:option(DummyValue, "type", translate("Group Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "name", translate("Group Name")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - --- [[ Proxy-Provider Manage ]]-- -s = m:section(TypedSection, "proxy-provider", translate("Proxy-Provider")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/proxy-provider-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - -o = s:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("all") -end - -o = s:option(DummyValue, "type", translate("Provider Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "name", translate("Provider Name")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - --- [[ Servers Manage ]]-- -s = m:section(TypedSection, "servers", translate("Proxies")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/servers-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - -o = s:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("all") -end - -o = s:option(DummyValue, "type", translate("Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "name", translate("Server Alias")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "server", translate("Server Address")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "port", translate("Server Port")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "udp", translate("UDP Support")) -function o.cfgvalue(...) - if Value.cfgvalue(...) == "true" then - return translate("Enable") - elseif Value.cfgvalue(...) == "false" then - return translate("Disable") - else - return translate("None") - end -end - -o = s:option(DummyValue,"server",translate("Ping Latency")) -o.template="openclash/ping" -o.width="10%" - -local tt = { - {Delete_Unused_Servers, Delete_Servers, Delete_Proxy_Provider, Delete_Groups} -} - -b = m:section(Table, tt) - -o = b:option(Button,"Delete_Unused_Servers", " ") -o.inputtitle = translate("Delete Unused Servers") -o.inputstyle = "reset" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:commit("openclash") - luci.sys.call("sh /usr/share/openclash/cfg_unused_servers_del.sh 2>/dev/null") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = b:option(Button,"Delete_Servers", " ") -o.inputtitle = translate("Delete Servers") -o.inputstyle = "reset" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:delete_all("openclash", "servers", function(s) return true end) - m.uci:commit("openclash") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = b:option(Button,"Delete_Proxy_Provider", " ") -o.inputtitle = translate("Delete Proxy Providers") -o.inputstyle = "reset" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:delete_all("openclash", "proxy-provider", function(s) return true end) - m.uci:commit("openclash") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = b:option(Button,"Delete_Groups", " ") -o.inputtitle = translate("Delete Groups") -o.inputstyle = "reset" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:delete_all("openclash", "groups", function(s) return true end) - m.uci:commit("openclash") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -local t = { - {Load_Config, Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button,"Load_Config", " ") -o.inputtitle = translate("Read Config") -o.inputstyle = "apply" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:commit("openclash") - luci.sys.call("/usr/share/openclash/yml_groups_get.sh 2>/dev/null &") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash")) -end - -o = a:option(Button, "Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - m.uci:set("openclash", "config", "enable", 0) - m.uci:commit("openclash") -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Apply Settings") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - m.uci:set("openclash", "config", "enable", 0) - m.uci:commit("openclash") - luci.sys.call("/usr/share/openclash/yml_groups_set.sh >/dev/null 2>&1 &") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash")) -end - -m:append(Template("openclash/server_list")) -m:append(Template("openclash/toolbar_show")) - -return m diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua deleted file mode 100644 index 0ba4f5a4..00000000 --- a/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ /dev/null @@ -1,994 +0,0 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() -local json = require "luci.jsonc" - -font_green = [[]] -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -local op_mode = string.sub(luci.sys.exec('uci get openclash.config.operation_mode 2>/dev/null'),0,-2) -if not op_mode then op_mode = "redir-host" end -local lan_ip=SYS.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n' || ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'") - -m = Map("openclash", translate("Global Settings(Will Modify The Config File Or Subscribe According To The Settings On This Page)")) -m.pageaction = false -m.description=translate("To restore the default configuration, try accessing:").." http://"..lan_ip.."/cgi-bin/luci/admin/services/openclash/restore" - -s = m:section(TypedSection, "openclash") -s.anonymous = true - -s:tab("op_mode", translate("Operation Mode")) -s:tab("settings", translate("General Settings")) -s:tab("dns", translate("DNS Setting")) -s:tab("stream_enhance", translate("Streaming Enhance")) -s:tab("lan_ac", translate("Access Control")) -if op_mode == "fake-ip" then -s:tab("rules", translate("Rules Setting(Access Control)")) -else -s:tab("rules", translate("Rules Setting")) -end -s:tab("dashboard", translate("Dashboard Settings")) -s:tab("rules_update", translate("Rules Update")) -s:tab("geo_update", translate("GEOIP Update")) -s:tab("chnr_update", translate("Chnroute Update")) -s:tab("auto_restart", translate("Auto Restart")) -s:tab("version_update", translate("Version Update")) -s:tab("debug", translate("Debug Logs")) -s:tab("dlercloud", translate("Dler Cloud")) - -o = s:taboption("op_mode", ListValue, "en_mode", font_red..bold_on..translate("Select Mode")..bold_off..font_off) -o.description = translate("Select Mode For OpenClash Work, Try Flush DNS Cache If Network Error") -if op_mode == "redir-host" then -o:value("redir-host", translate("redir-host")) -o:value("redir-host-tun", translate("redir-host(tun mode)")) -o:value("redir-host-mix", translate("redir-host-mix(tun mix mode)")) -o.default = "redir-host" -else -o:value("fake-ip", translate("fake-ip")) -o:value("fake-ip-tun", translate("fake-ip(tun mode)")) -o:value("fake-ip-mix", translate("fake-ip-mix(tun mix mode)")) -o.default = "fake-ip" -end - -o = s:taboption("op_mode", Flag, "enable_udp_proxy", font_red..bold_on..translate("Proxy UDP Traffics")..bold_off..font_off) -o.description = translate("The Servers Must Support UDP forwarding")..", "..font_red..bold_on..translate("If Docker is Installed, UDP May Not Forward Normally")..bold_off..font_off -o:depends("en_mode", "redir-host") -o:depends("en_mode", "fake-ip") -o.default=1 - -o = s:taboption("op_mode", ListValue, "stack_type", translate("Select Stack Type")) -o.description = translate("Select Stack Type For TUN Mode, According To The Running Speed on Your Machine") -o:depends("en_mode", "redir-host-tun") -o:depends("en_mode", "fake-ip-tun") -o:depends("en_mode", "redir-host-mix") -o:depends("en_mode", "fake-ip-mix") -o:value("system", translate("System ")) -o:value("gvisor", translate("Gvisor")) -o.default = "system" - -o = s:taboption("op_mode", ListValue, "proxy_mode", font_red..bold_on..translate("Proxy Mode")..bold_off..font_off) -o.description = translate("Select Proxy Mode, Use Script Mode Could Prevent Proxy BT traffics If Rules Support, eg.lhie1's") -o:value("rule", translate("Rule Proxy Mode")) -o:value("global", translate("Global Proxy Mode")) -o:value("direct", translate("Direct Proxy Mode")) -o:value("script", translate("Script Proxy Mode (Tun Core Only)")) -o.default = "rule" - -o = s:taboption("op_mode", Flag, "ipv6_enable", font_red..bold_on..translate("Proxy IPv6 Traffic")..bold_off..font_off) -o.description = font_red..bold_on..translate("Disable IPv6 DHCP To Avoid Abnormal Connection If You Do Not Use")..bold_off..font_off -o.default=0 - -o = s:taboption("op_mode", Flag, "china_ip6_route", translate("China IPv6 Route")) -o.description = translate("Bypass The China Network Flows, Improve Performance") -o.default=0 -o:depends("ipv6_enable", 1) - -o = s:taboption("op_mode", Flag, "disable_udp_quic", font_red..bold_on..translate("Disable QUIC")..bold_off..font_off) -o.description = translate("Prevent YouTube and Others To Use QUIC Transmission")..", "..font_red..bold_on..translate("REJECT UDP Traffic On Port 443")..bold_off..font_off -o.default=1 - -o = s:taboption("op_mode", Flag, "enable_rule_proxy", font_red..bold_on..translate("Rule Match Proxy Mode")..bold_off..font_off) -o.description = translate("Only Proxy Rules Match, Prevent BT/P2P Passing") -o.default=0 - -o = s:taboption("op_mode", Flag, "common_ports", font_red..bold_on..translate("Common Ports Proxy Mode")..bold_off..font_off) -o.description = translate("Only Common Ports, Prevent BT/P2P Passing") -o.default=0 -o:depends("en_mode", "redir-host") -o:depends("en_mode", "redir-host-tun") -o:depends("en_mode", "redir-host-mix") - -o = s:taboption("op_mode", Flag, "china_ip_route", translate("China IP Route")) -o.description = translate("Bypass The China Network Flows, Improve Performance") -o.default=0 -o:depends("en_mode", "redir-host") -o:depends("en_mode", "redir-host-tun") -o:depends("en_mode", "redir-host-mix") - -o = s:taboption("op_mode", Flag, "small_flash_memory", translate("Small Flash Memory")) -o.description = translate("Move Core And GEOIP Data File To /tmp/etc/openclash For Small Flash Memory Device") -o.default=0 - ----- Operation Mode -switch_mode = s:taboption("op_mode", DummyValue, "", nil) -switch_mode.template = "openclash/switch_mode" - ----- General Settings -o = s:taboption("settings", ListValue, "interface_name", font_red..bold_on..translate("Bind Network Interface")..bold_off..font_off) -local de_int = SYS.exec("ip route |grep 'default' |awk '{print $5}' 2>/dev/null") or SYS.exec("/usr/share/openclash/openclash_get_network.lua 'dhcp'") -o.description = translate("Default Interface Name:").." "..font_green..bold_on..de_int..bold_off..font_off..translate(",Try Enable If Network Loopback") -local interfaces = SYS.exec("ls -l /sys/class/net/ 2>/dev/null |awk '{print $9}' 2>/dev/null") -for interface in string.gmatch(interfaces, "%S+") do - o:value(interface) -end -o:value("0", translate("Disable")) -o.default=0 - -o = s:taboption("settings", Value, "tolerance", font_red..bold_on..translate("Url-Test Group Tolerance (ms)")..bold_off..font_off) -o.description = translate("Switch To The New Proxy When The Delay Difference Between Old and The Fastest Currently is Greater Than This Value") -o:value("0", translate("Disable")) -o:value("100") -o:value("150") -o.datatype = "uinteger" -o.default = "0" - -o = s:taboption("settings", ListValue, "log_level", translate("Log Level")) -o.description = translate("Select Core's Log Level") -o:value("info", translate("Info Mode")) -o:value("warning", translate("Warning Mode")) -o:value("error", translate("Error Mode")) -o:value("debug", translate("Debug Mode")) -o:value("silent", translate("Silent Mode")) -o.default = "silent" - -o = s:taboption("settings", Value, "log_size", translate("Log Size (KB)")) -o.description = translate("Set Log File Size (KB)") -o.default=1024 - -o = s:taboption("settings", Flag, "intranet_allowed", translate("Only intranet allowed")) -o.description = translate("When Enabled, The Control Panel And The Connection Broker Port Will Not Be Accessible From The Public Network, Not Support IPv6 Yet") -o.default=0 - -o = s:taboption("settings", Value, "dns_port") -o.title = translate("DNS Port") -o.default = 7874 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "proxy_port") -o.title = translate("Redir Port") -o.default = 7892 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "tproxy_port") -o.title = translate("TProxy Port") -o.default = 7895 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "http_port") -o.title = translate("HTTP(S) Port") -o.default = 7890 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "socks_port") -o.title = translate("SOCKS5 Port") -o.default = 7891 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "mixed_port") -o.title = translate("Mixed Port") -o.default = 7893 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - ----- DNS Settings -o = s:taboption("dns", Flag, "enable_redirect_dns", font_red..bold_on..translate("Redirect Local DNS Setting")..bold_off..font_off) -o.description = translate("Set Local DNS Redirect") -o.default=1 - -o = s:taboption("dns", Flag, "enable_custom_dns", font_red..bold_on..translate("Custom DNS Setting")..bold_off..font_off) -o.description = font_red..bold_on..translate("Set OpenClash Upstream DNS Resolve Server")..bold_off..font_off -o.default=0 - -if op_mode == "redir-host" then -o = s:taboption("dns", Flag, "dns_remote", font_red..bold_on..translate("DNS Remote")..bold_off..font_off) -o.description = font_red..bold_on..translate("Add DNS Remote Support For Redir-Host")..bold_off..font_off -o.default=1 -end - -o = s:taboption("dns", Flag, "append_wan_dns", font_red..bold_on..translate("Append Upstream DNS")..bold_off..font_off) -o.description = font_red..bold_on..translate("Append The Upstream Assigned DNS And Gateway IP To The Nameserver")..bold_off..font_off -o.default=1 - -if op_mode == "fake-ip" then -o = s:taboption("dns", Flag, "store_fakeip", font_red..bold_on..translate("Persistence Fake-IP")..bold_off..font_off) -o.description = font_red..bold_on..translate("Cache Fake-IP DNS Resolution Records To File, Improve The Response Speed After Startup")..bold_off..font_off -o.default=1 -end - -o = s:taboption("dns", Flag, "ipv6_dns", translate("IPv6 DNS Resolve")) -o.description = font_red..bold_on..translate("Enable Clash to Resolve IPv6 DNS Requests")..bold_off..font_off -o.default=0 - -o = s:taboption("dns", Flag, "disable_masq_cache", translate("Disable Dnsmasq's DNS Cache")) -o.description = translate("Recommended Enabled For Avoiding Some Connection Errors")..font_red..bold_on..translate("(Maybe Incompatible For Your Firmware)")..bold_off..font_off -o.default=0 - -o = s:taboption("dns", Flag, "custom_fallback_filter", translate("Custom Fallback-Filter")) -o.description = translate("Take Effect If Fallback DNS Setted, Prevent DNS Pollution") -o.default=0 - -custom_fallback_filter = s:taboption("dns", Value, "custom_fallback_fil") -custom_fallback_filter.template = "cbi/tvalue" -custom_fallback_filter.rows = 20 -custom_fallback_filter.wrap = "off" -custom_fallback_filter:depends("custom_fallback_filter", "1") - -function custom_fallback_filter.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_fallback_filter.yaml") or "" -end -function custom_fallback_filter.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_fallback_filter.yaml") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_fallback_filter.yaml", value) - end - end -end - -o = s:taboption("dns", Flag, "dns_advanced_setting", translate("Advanced Setting")) -o.description = translate("DNS Advanced Settings")..font_red..bold_on..translate("(Please Don't Modify it at Will)")..bold_off..font_off -o.default=0 - -if op_mode == "fake-ip" then -o = s:taboption("dns", Button, translate("Fake-IP-Filter List Update")) -o.title = translate("Fake-IP-Filter List Update") -o:depends("dns_advanced_setting", "1") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("rm -rf /tmp/openclash_fake_filter.list >/dev/null 2>&1 && /etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -custom_fake_black = s:taboption("dns", Value, "custom_fake_filter") -custom_fake_black.template = "cbi/tvalue" -custom_fake_black.description = translate("Domain Names In The List Do Not Return Fake-IP, One rule per line") -custom_fake_black.rows = 20 -custom_fake_black.wrap = "off" -custom_fake_black:depends("dns_advanced_setting", "1") - -function custom_fake_black.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_fake_filter.list") or "" -end -function custom_fake_black.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_fake_filter.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_fake_filter.list", value) - end - end -end -end - -o = s:taboption("dns", Value, "custom_domain_dns_server", translate("Specify DNS Server")) -o.description = translate("Specify DNS Server For List and Server Nodes With Fake-IP Mode, Only One IP Server Address Support") -o.default="114.114.114.114" -o.placeholder = translate("114.114.114.114 or 127.0.0.1#5300") -o:depends("dns_advanced_setting", "1") - -custom_domain_dns = s:taboption("dns", Value, "custom_domain_dns") -custom_domain_dns.template = "cbi/tvalue" -custom_domain_dns.description = translate("Domain Names In The List Use The Custom DNS Server, One rule per line") -custom_domain_dns.rows = 20 -custom_domain_dns.wrap = "off" -custom_domain_dns:depends("dns_advanced_setting", "1") - -function custom_domain_dns.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_domain_dns.list") or "" -end -function custom_domain_dns.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_domain_dns.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_domain_dns.list", value) - end - end -end - -custom_domain_dns_policy = s:taboption("dns", Value, "custom_domain_dns_core") -custom_domain_dns_policy.template = "cbi/tvalue" -custom_domain_dns_policy.description = translate("Domain Names In The List Use The Custom DNS Server, But Still Return Fake-IP Results, One rule per line") -custom_domain_dns_policy.rows = 20 -custom_domain_dns_policy.wrap = "off" -custom_domain_dns_policy:depends("dns_advanced_setting", "1") - -function custom_domain_dns_policy.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_domain_dns_policy.list") or "" -end -function custom_domain_dns_policy.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_domain_dns_policy.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_domain_dns_policy.list", value) - end - end -end - ----- Access Control -if op_mode == "redir-host" then -o = s:taboption("lan_ac", ListValue, "lan_ac_mode", translate("LAN Access Control Mode")) -o:value("0", translate("Black List Mode")) -o:value("1", translate("White List Mode")) -o.default=0 - -ip_b = s:taboption("lan_ac", DynamicList, "lan_ac_black_ips", translate("LAN Bypassed Host List")) -ip_b:depends("lan_ac_mode", "0") -ip_b.datatype = "ipaddr" - -mac_b = s:taboption("lan_ac", DynamicList, "lan_ac_black_macs", translate("LAN Bypassed Mac List")) -mac_b.datatype = "list(macaddr)" -mac_b.rmempty = true -mac_b:depends("lan_ac_mode", "0") - -ip_w = s:taboption("lan_ac", DynamicList, "lan_ac_white_ips", translate("LAN Proxied Host List")) -ip_w:depends("lan_ac_mode", "1") -ip_w.datatype = "ipaddr" - -mac_w = s:taboption("lan_ac", DynamicList, "lan_ac_white_macs", translate("LAN Proxied Mac List")) -mac_w.datatype = "list(macaddr)" -mac_w.rmempty = true -mac_w:depends("lan_ac_mode", "1") - -luci.ip.neighbors({ family = 4 }, function(n) - if n.mac and n.dest then - ip_b:value(n.dest:string()) - ip_w:value(n.dest:string()) - mac_b:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) - mac_w:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) - end -end) - -if string.len(SYS.exec("/usr/share/openclash/openclash_get_network.lua 'gateway6'")) ~= 0 then -luci.ip.neighbors({ family = 6 }, function(n) - if n.mac and n.dest then - ip_b:value(n.dest:string()) - ip_w:value(n.dest:string()) - mac_b:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) - mac_w:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) - end -end) -end -end - -o = s:taboption("lan_ac", DynamicList, "wan_ac_black_ips", translate("WAN Bypassed Host List")) -o.datatype = "ipaddr" -o.description = translate("In The Fake-IP Mode, Only Pure IP Requests Are Supported") - ----- Rules Settings -o = s:taboption("rules", Flag, "rule_source", translate("Enable Other Rules")) -o.description = translate("Use Other Rules") -o.default=0 - -if op_mode == "fake-ip" then -o = s:taboption("rules", Flag, "enable_custom_clash_rules", font_red..bold_on..translate("Custom Clash Rules(Access Control)")..bold_off..font_off) -else -o = s:taboption("rules", Flag, "enable_custom_clash_rules", font_red..bold_on..translate("Custom Clash Rules")..bold_off..font_off) -end -o.description = translate("Use Custom Rules") -o.default=0 - -custom_rules = s:taboption("rules", Value, "custom_rules") -custom_rules:depends("enable_custom_clash_rules", 1) -custom_rules.template = "cbi/tvalue" -custom_rules.description = translate("Custom Priority Rules Here, For More Go:").." ".."https://lancellc.gitbook.io/clash/clash-config-file/rules".." ,"..translate("IP To CIDR:").." ".."http://ip2cidr.com" -custom_rules.rows = 20 -custom_rules.wrap = "off" - -function custom_rules.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_rules.list") or "" -end -function custom_rules.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_rules.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_rules.list", value) - end - end -end - -custom_rules_2 = s:taboption("rules", Value, "custom_rules_2") -custom_rules_2:depends("enable_custom_clash_rules", 1) -custom_rules_2.template = "cbi/tvalue" -custom_rules_2.description = translate("Custom Extended Rules Here, For More Go:").." ".."https://lancellc.gitbook.io/clash/clash-config-file/rules".." ,"..translate("IP To CIDR:").." ".."http://ip2cidr.com" -custom_rules_2.rows = 20 -custom_rules_2.wrap = "off" - -function custom_rules_2.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_rules_2.list") or "" -end -function custom_rules_2.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_rules_2.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_rules_2.list", value) - end - end -end - ---Stream Enhance -o = s:taboption("stream_enhance", Flag, "stream_domains_prefetch", font_red..bold_on..translate("Prefetch Netflix, Disney Plus Domains")..bold_off..font_off) -o.description = translate("Prevent Some Devices From Directly Using IP Access To Cause Unlocking Failure") -o.default=0 - -o = s:taboption("stream_enhance", Value, "stream_domains_prefetch_interval", translate("Domains Prefetch Interval(min)")) -o.default=1440 -o.datatype = "uinteger" -o.description = translate("Will Run Once Immediately After Started, The Interval Does Not Need To Be Too Short (Take Effect Immediately After Commit)") -o:depends("stream_domains_prefetch", "1") - -o = s:taboption("stream_enhance", DummyValue, "stream_domains_update", translate("Update Preset Domains List")) -o:depends("stream_domains_prefetch", "1") -o.template = "openclash/download_stream_domains" - -o = s:taboption("stream_enhance", Flag, "stream_auto_select", font_red..bold_on..translate("Auto Select Unlock Proxy")..bold_off..font_off) -o.description = translate("Auto Select Proxy For Streaming Unlock, Support Netflix, Disney Plus, HBO And YouTube Premium, etc") -o.default=0 - -o = s:taboption("stream_enhance", Value, "stream_auto_select_interval", translate("Auto Select Interval(min)")) -o.default=30 -o.datatype = "uinteger" -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_expand_group", font_red..bold_on..translate("Expand Group")..bold_off..font_off) -o.description = translate("Automatically Expand The Group When Selected") -o.default=0 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_netflix", translate("Netflix")) -o.default=1 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_netflix", translate("Netflix Group Filter")) -o.default = "Netflix|奈飞" -o.placeholder = "Netflix|奈飞" -o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") -o:depends("stream_auto_select_netflix", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_netflix", translate("Netflix Unlock Region Filter")) -o.default = "" -o.placeholder = "HK|SG|TW" -o.description = translate("It Will Be Selected Region According To The Regex") -o:depends("stream_auto_select_netflix", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_disney", translate("Disney Plus")) -o.default=0 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_disney", translate("Disney Plus Group Filter")) -o.default = "Disney|迪士尼" -o.placeholder = "Disney|迪士尼" -o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") -o:depends("stream_auto_select_disney", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_disney", translate("Disney Plus Unlock Region Filter")) -o.default = "" -o.placeholder = "HK|SG|TW" -o.description = translate("It Will Be Selected Region According To The Regex") -o:depends("stream_auto_select_disney", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_ytb", translate("YouTube Premium")) -o.default=0 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_ytb", translate("YouTube Premium Group Filter")) -o.default = "YouTube|油管" -o.placeholder = "YouTube|油管" -o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") -o:depends("stream_auto_select_ytb", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_ytb", translate("YouTube Premium Unlock Region Filter")) -o.default = "" -o.placeholder = "HK|US" -o.description = translate("It Will Be Selected Region According To The Regex") -o:depends("stream_auto_select_ytb", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_prime_video", translate("Amazon Prime Video")) -o.default=0 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_prime_video", translate("Amazon Prime Video Group Filter")) -o.default = "Amazon|Prime Video" -o.placeholder = "Amazon|Prime Video" -o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") -o:depends("stream_auto_select_prime_video", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_prime_video", translate("Amazon Prime Video Unlock Region Filter")) -o.default = "" -o.placeholder = "HK|US|SG" -o.description = translate("It Will Be Selected Region According To The Regex") -o:depends("stream_auto_select_prime_video", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_now", translate("HBO Now")) -o.default=0 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_now", translate("HBO Now Group Filter")) -o.default = "HBO|HBONow|HBO Now" -o.placeholder = "HBO|HBONow|HBO Now" -o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") -o:depends("stream_auto_select_hbo_now", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_max", translate("HBO Max")) -o.default=0 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_max", translate("HBO Max Group Filter")) -o.default = "HBO|HBOMax|HBO Max" -o.placeholder = "HBO|HBOMax|HBO Max" -o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") -o:depends("stream_auto_select_hbo_max", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_hbo_max", translate("HBO Max Unlock Region Filter")) -o.default = "" -o.placeholder = "US" -o.description = translate("It Will Be Selected Region According To The Regex") -o:depends("stream_auto_select_hbo_max", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_go_asia", translate("HBO GO Asia")) -o.default=0 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_go_asia", translate("HBO GO Asia Group Filter")) -o.default = "HBO|HBOGO|HBO GO" -o.placeholder = "HBO|HBOGO|HBO GO" -o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") -o:depends("stream_auto_select_hbo_go_asia", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_hbo_go_asia", translate("HBO Max Unlock Region Filter")) -o.default = "" -o.placeholder = "HK|SG|TW" -o.description = translate("It Will Be Selected Region According To The Regex") -o:depends("stream_auto_select_hbo_go_asia", "1") - -o = s:taboption("stream_enhance", Flag, "stream_auto_select_tvb_anywhere", translate("TVB Anywhere+")) -o.default=0 -o:depends("stream_auto_select", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_tvb_anywhere", translate("TVB Anywhere+ Group Filter")) -o.default = "TVB" -o.placeholder = "TVB" -o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails") -o:depends("stream_auto_select_tvb_anywhere", "1") - -o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_tvb_anywhere", translate("HBO Max Unlock Region Filter")) -o.default = "" -o.placeholder = "HK|SG|TW" -o.description = translate("It Will Be Selected Region According To The Regex") -o:depends("stream_auto_select_tvb_anywhere", "1") - ----- update Settings -o = s:taboption("rules_update", Flag, "other_rule_auto_update", translate("Auto Update")) -o.description = font_red..bold_on..translate("Auto Update Other Rules")..bold_off..font_off -o.default=0 - -o = s:taboption("rules_update", ListValue, "other_rule_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("rules_update", ListValue, "other_rule_update_day_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - -o = s:taboption("rules_update", Button, translate("Other Rules Update")) -o.title = translate("Update Other Rules") -o.inputtitle = translate("Check And Update") -o.description = translate("Other Rules Update(Only in Use)") -o.inputstyle = "reload" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/usr/share/openclash/openclash_rule.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -o = s:taboption("geo_update", Flag, "geo_auto_update", translate("Auto Update")) -o.description = translate("Auto Update GEOIP Database") -o.default=0 - -o = s:taboption("geo_update", ListValue, "geo_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("geo_update", ListValue, "geo_update_day_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - -o = s:taboption("geo_update", Value, "geo_custom_url") -o.title = translate("Custom GEOIP URL") -o.rmempty = false -o.description = translate("Custom GEOIP Data URL, Click Button Below To Refresh After Edit") -o:value("https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb", translate("Alecthw-lite-Version")..translate("(Default mmdb)")) -o:value("https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/Country.mmdb", translate("Alecthw-Version")..translate("(All Info mmdb)")) -o:value("https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb", translate("Hackl0us-Version")..translate("(Only CN)")) -o:value("https://geolite.clash.dev/Country.mmdb", translate("Geolite.clash.dev")) -o.default = "http://www.ideame.top/mmdb/Country.mmdb" - -o = s:taboption("geo_update", Button, translate("GEOIP Update")) -o.title = translate("Update GEOIP Database") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/usr/share/openclash/openclash_ipdb.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -o = s:taboption("chnr_update", Flag, "chnr_auto_update", translate("Auto Update")) -o.description = translate("Auto Update Chnroute Lists") -o.default=0 - -o = s:taboption("chnr_update", ListValue, "chnr_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("chnr_update", ListValue, "chnr_update_day_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - -o = s:taboption("chnr_update", Value, "chnr_custom_url") -o.title = translate("Custom Chnroute Lists URL") -o.rmempty = false -o.description = translate("Custom Chnroute Lists URL, Click Button Below To Refresh After Edit") -o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang-CN")..translate("(Default)")) -o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang-CN-CIDR")) -o:value("https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us-CN-CIDR")..translate("(Large Size)")) -o.default = "https://ispip.clang.cn/all_cn.txt" - -o = s:taboption("chnr_update", Value, "chnr6_custom_url") -o.title = translate("Custom Chnroute6 Lists URL") -o.rmempty = false -o.description = translate("Custom Chnroute6 Lists URL, Click Button Below To Refresh After Edit") -o:value("https://ispip.clang.cn/all_cn_ipv6.txt", translate("Clang-CN-IPV6")..translate("(Default)")) -o.default = "https://ispip.clang.cn/all_cn_ipv6.txt" - -o = s:taboption("chnr_update", Button, translate("Chnroute Lists Update")) -o.title = translate("Update Chnroute Lists") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/usr/share/openclash/openclash_chnroute.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -o = s:taboption("auto_restart", Flag, "auto_restart", translate("Auto Restart")) -o.description = translate("Auto Restart OpenClash") -o.default=0 - -o = s:taboption("auto_restart", ListValue, "auto_restart_week_time", translate("Restart Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("auto_restart", ListValue, "auto_restart_day_time", translate("Restart time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - ----- Dashboard Settings -local cn_port=SYS.exec("uci get openclash.config.cn_port 2>/dev/null |tr -d '\n'") -o = s:taboption("dashboard", Value, "cn_port") -o.title = translate("Dashboard Port") -o.default = 9090 -o.datatype = "port" -o.rmempty = false -o.description = translate("Dashboard Address Example:").." "..font_green..bold_on..lan_ip.."/luci-static/openclash、"..lan_ip..':'..cn_port..'/ui'..bold_off..font_off - -o = s:taboption("dashboard", Value, "dashboard_password") -o.title = translate("Dashboard Secret") -o.rmempty = true -o.description = translate("Set Dashboard Secret") - -o = s:taboption("dashboard", Value, "dashboard_forward_domain") -o.title = translate("Public Dashboard Address") -o.datatype = "or(host, string)" -o.placeholder = "example.com" -o.rmempty = true -o.description = translate("Domain Name For Dashboard Login From Public Network") - -o = s:taboption("dashboard", Value, "dashboard_forward_port") -o.title = translate("Public Dashboard Port") -o.datatype = "port" -o.rmempty = true -o.description = translate("Port For Dashboard Login From Public Network") - ----- version update -core_update = s:taboption("version_update", DummyValue, "", nil) -core_update.template = "openclash/update" - ----- debug -o = s:taboption("debug", DummyValue, "", nil) -o.template = "openclash/debug" - ----- dlercloud -o = s:taboption("dlercloud", Value, "dler_email") -o.title = translate("Account Email Address") -o.rmempty = true - -o = s:taboption("dlercloud", Value, "dler_passwd") -o.title = translate("Account Password") -o.password = true -o.rmempty = true - -if m.uci:get("openclash", "config", "dler_token") then - o = s:taboption("dlercloud", Flag, "dler_checkin") - o.title = translate("Checkin") - o.default=0 - o.rmempty = true -end - -o = s:taboption("dlercloud", Value, "dler_checkin_interval") -o.title = translate("Checkin Interval (hour)") -o:depends("dler_checkin", "1") -o.default=1 -o.rmempty = true - -o = s:taboption("dlercloud", Value, "dler_checkin_multiple") -o.title = translate("Checkin Multiple") -o.datatype = "uinteger" -o.default=1 -o:depends("dler_checkin", "1") -o.rmempty = true -o.description = font_green..bold_on..translate("Multiple Must Be a Positive Integer and No More Than 50")..bold_off..font_off -function o.validate(self, value) - if tonumber(value) < 1 then - return "1" - end - if tonumber(value) > 50 then - return "50" - end - return value -end - -o = s:taboption("dlercloud", DummyValue, "dler_login", translate("Account Login")) -o.template = "openclash/dler_login" -if m.uci:get("openclash", "config", "dler_token") then - o.value = font_green..bold_on..translate("Account logged in")..bold_off..font_off -else - o.value = font_red..bold_on..translate("Account not logged in")..bold_off..font_off -end - --- [[ Edit Server ]] -- -s = m:section(TypedSection, "dns_servers", translate("Add Custom DNS Servers")..translate("(Take Effect After Choose Above)")) -s.anonymous = true -s.addremove = true -s.sortable = false -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable"), font_red..bold_on..translate("(Enable or Disable)")..bold_off..font_off) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- group -o = s:option(ListValue, "group", translate("DNS Server Group")) -o.description = font_red..bold_on..translate("(NameServer Group Must Be Set)")..bold_off..font_off -o:value("nameserver", translate("NameServer")) -o:value("fallback", translate("FallBack")) -o.default = "nameserver" -o.rempty = false - ----- IP address -o = s:option(Value, "ip", translate("DNS Server Address")) -o.description = font_red..bold_on..translate("(Do Not Add Type Ahead)")..bold_off..font_off -o.placeholder = translate("Not Null") -o.datatype = "or(host, string)" -o.rmempty = true - ----- port -o = s:option(Value, "port", translate("DNS Server Port")) -o.description = font_red..bold_on..translate("(Require When Use Non-Standard Port)")..bold_off..font_off -o.datatype = "port" -o.rempty = true - ----- type -o = s:option(ListValue, "type", translate("DNS Server Type")) -o.description = font_red..bold_on..translate("(Communication protocol)")..bold_off..font_off -o:value("udp", translate("UDP")) -o:value("tcp", translate("TCP")) -o:value("tls", translate("TLS")) -o:value("https", translate("HTTPS")) -o.default = "udp" -o.rempty = false - --- [[ Other Rules Manage ]]-- -ss = m:section(TypedSection, "other_rules", translate("Other Rules Edit")..translate("(Take Effect After Choose Above)")) -ss.anonymous = true -ss.addremove = true -ss.sortable = true -ss.template = "cbi/tblsection" -ss.extedit = luci.dispatcher.build_url("admin/services/openclash/other-rules-edit/%s") -function ss.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(ss.extedit % sid) - return - end -end - -o = ss:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - -o = ss:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = ss:option(DummyValue, "rule_name", translate("Other Rules Name")) -function o.cfgvalue(...) - if Value.cfgvalue(...) == "lhie1" then - return translate("lhie1 Rules") - elseif Value.cfgvalue(...) == "ConnersHua" then - return translate("ConnersHua(Provider-type) Rules") - elseif Value.cfgvalue(...) == "ConnersHua_return" then - return translate("ConnersHua Return Rules") - else - return translate("None") - end -end - -o = ss:option(DummyValue, "Note", translate("Note")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - --- [[ Edit Authentication ]] -- -s = m:section(TypedSection, "authentication", translate("Set Authentication of SOCKS5/HTTP(S)")) -s.anonymous = true -s.addremove = true -s.sortable = false -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- username -o = s:option(Value, "username", translate("Username")) -o.placeholder = translate("Not Null") -o.rempty = true - ----- password -o = s:option(Value, "password", translate("Password")) -o.placeholder = translate("Not Null") -o.rmempty = true - -if op_mode == "redir-host" then -s = m:section(NamedSection, "config", translate("Set Custom Hosts, Only Work with Redir-Host Mode")) -s.anonymous = true - -custom_hosts = s:option(Value, "custom_hosts") -custom_hosts.template = "cbi/tvalue" -custom_hosts.description = translate("Custom Hosts Here, For More Go:").." ".."https://lancellc.gitbook.io/clash/clash-config-file/dns/host" -custom_hosts.rows = 20 -custom_hosts.wrap = "off" - -function custom_hosts.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_hosts.list") or "" -end -function custom_hosts.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_hosts.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_hosts.list", value) - end - end -end -end - -local t = { - {Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit", " ") -o.inputtitle = translate("Commit Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:commit("openclash") -end - -o = a:option(Button, "Apply", " ") -o.inputtitle = translate("Apply Settings") -o.inputstyle = "apply" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -m:append(Template("openclash/config_editor")) -m:append(Template("openclash/toolbar_show")) - -return m - - diff --git a/luci-app-openclash/luasrc/openclash.lua b/luci-app-openclash/luasrc/openclash.lua deleted file mode 100644 index 5142a86e..00000000 --- a/luci-app-openclash/luasrc/openclash.lua +++ /dev/null @@ -1,264 +0,0 @@ ---[[ -LuCI - Filesystem tools - -Description: -A module offering often needed filesystem manipulation functions - -FileId: -$Id$ - -License: -Copyright 2008 Steven Barth - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -]]-- - -local io = require "io" -local os = require "os" -local ltn12 = require "luci.ltn12" -local fs = require "nixio.fs" -local nutil = require "nixio.util" - -local type = type -local string = string - ---- LuCI filesystem library. -module "luci.openclash" - ---- Test for file access permission on given path. --- @class function --- @name access --- @param str String value containing the path --- @return Number containing the return code, 0 on sucess or nil on error --- @return String containing the error description (if any) --- @return Number containing the os specific errno (if any) -access = fs.access - ---- Evaluate given shell glob pattern and return a table containing all matching --- file and directory entries. --- @class function --- @name glob --- @param filename String containing the path of the file to read --- @return Table containing file and directory entries or nil if no matches --- @return String containing the error description (if no matches) --- @return Number containing the os specific errno (if no matches) -function glob(...) - local iter, code, msg = fs.glob(...) - if iter then - return nutil.consume(iter) - else - return nil, code, msg - end -end - ---- Checks wheather the given path exists and points to a regular file. --- @param filename String containing the path of the file to test --- @return Boolean indicating wheather given path points to regular file -function isfile(filename) - return fs.stat(filename, "type") == "reg" -end - ---- Checks wheather the given path exists and points to a directory. --- @param dirname String containing the path of the directory to test --- @return Boolean indicating wheather given path points to directory -function isdirectory(dirname) - return fs.stat(dirname, "type") == "dir" -end - ---- Read the whole content of the given file into memory. --- @param filename String containing the path of the file to read --- @return String containing the file contents or nil on error --- @return String containing the error message on error -readfile = fs.readfile - ---- Write the contents of given string to given file. --- @param filename String containing the path of the file to read --- @param data String containing the data to write --- @return Boolean containing true on success or nil on error --- @return String containing the error message on error -writefile = fs.writefile - ---- Copies a file. --- @param source Source file --- @param dest Destination --- @return Boolean containing true on success or nil on error -copy = fs.datacopy - ---- Renames a file. --- @param source Source file --- @param dest Destination --- @return Boolean containing true on success or nil on error -rename = fs.move - ---- Get the last modification time of given file path in Unix epoch format. --- @param path String containing the path of the file or directory to read --- @return Number containing the epoch time or nil on error --- @return String containing the error description (if any) --- @return Number containing the os specific errno (if any) -function mtime(path) - return fs.stat(path, "mtime") -end - ---- Set the last modification time of given file path in Unix epoch format. --- @param path String containing the path of the file or directory to read --- @param mtime Last modification timestamp --- @param atime Last accessed timestamp --- @return 0 in case of success nil on error --- @return String containing the error description (if any) --- @return Number containing the os specific errno (if any) -function utime(path, mtime, atime) - return fs.utimes(path, atime, mtime) -end - ---- Return the last element - usually the filename - from the given path with --- the directory component stripped. --- @class function --- @name basename --- @param path String containing the path to strip --- @return String containing the base name of given path --- @see dirname -basename = fs.basename - ---- Return the directory component of the given path with the last element --- stripped of. --- @class function --- @name dirname --- @param path String containing the path to strip --- @return String containing the directory component of given path --- @see basename -dirname = fs.dirname - ---- Return a table containing all entries of the specified directory. --- @class function --- @name dir --- @param path String containing the path of the directory to scan --- @return Table containing file and directory entries or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -function dir(...) - local iter, code, msg = fs.dir(...) - if iter then - local t = nutil.consume(iter) - t[#t+1] = "." - t[#t+1] = ".." - return t - else - return nil, code, msg - end -end - ---- Create a new directory, recursively on demand. --- @param path String with the name or path of the directory to create --- @param recursive Create multiple directory levels (optional, default is true) --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -function mkdir(path, recursive) - return recursive and fs.mkdirr(path) or fs.mkdir(path) -end - ---- Remove the given empty directory. --- @class function --- @name rmdir --- @param path String containing the path of the directory to remove --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -rmdir = fs.rmdir - -local stat_tr = { - reg = "regular", - dir = "directory", - lnk = "link", - chr = "character device", - blk = "block device", - fifo = "fifo", - sock = "socket" -} ---- Get information about given file or directory. --- @class function --- @name stat --- @param path String containing the path of the directory to query --- @return Table containing file or directory properties or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -function stat(path, key) - local data, code, msg = fs.stat(path) - if data then - data.mode = data.modestr - data.type = stat_tr[data.type] or "?" - end - return key and data and data[key] or data, code, msg -end - ---- Set permissions on given file or directory. --- @class function --- @name chmod --- @param path String containing the path of the directory --- @param perm String containing the permissions to set ([ugoa][+-][rwx]) --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -chmod = fs.chmod - ---- Create a hard- or symlink from given file (or directory) to specified target --- file (or directory) path. --- @class function --- @name link --- @param path1 String containing the source path to link --- @param path2 String containing the destination path for the link --- @param symlink Boolean indicating wheather to create a symlink (optional) --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -function link(src, dest, sym) - return sym and fs.symlink(src, dest) or fs.link(src, dest) -end - ---- Remove the given file. --- @class function --- @name unlink --- @param path String containing the path of the file to remove --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -unlink = fs.unlink - ---- Retrieve target of given symlink. --- @class function --- @name readlink --- @param path String containing the path of the symlink to read --- @return String containing the link target or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -readlink = fs.readlink - -function filename(str) - local idx = str:match(".+()%.%w+$") - if(idx) then - return str:sub(1, idx-1) - else - return str - end -end - -function filesize(e) - local t=0 - local a={' KB',' MB',' GB',' TB'} - repeat - e=e/1024 - t=t+1 - until(e<=1024) - return string.format("%.1f",e)..a[t] -end \ No newline at end of file diff --git a/luci-app-openclash/luasrc/view/openclash/cfg_check.htm b/luci-app-openclash/luasrc/view/openclash/cfg_check.htm deleted file mode 100644 index 1052d066..00000000 --- a/luci-app-openclash/luasrc/view/openclash/cfg_check.htm +++ /dev/null @@ -1,18 +0,0 @@ -<%+cbi/valueheader%> -
-<% - local val = self:cfgvalue(section) - if val == translate("Enable") or val == translate("Config Normal") or val == translate("Exist") then -%> -
-<% - else -%> -
-<% - end - write(pcdata(val)) -%> -
-
-<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/config_editor.htm b/luci-app-openclash/luasrc/view/openclash/config_editor.htm deleted file mode 100644 index 9c11de7b..00000000 --- a/luci-app-openclash/luasrc/view/openclash/config_editor.htm +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/luci-app-openclash/luasrc/view/openclash/debug.htm b/luci-app-openclash/luasrc/view/openclash/debug.htm deleted file mode 100644 index d1560ed3..00000000 --- a/luci-app-openclash/luasrc/view/openclash/debug.htm +++ /dev/null @@ -1,139 +0,0 @@ -<%# - Copyright 2010 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<% -local diag_host = "www.instagram.com" -%> - - - -
-
-
- <%:Connection Test (Current Browser)%>     - - -
-
- <%:Generate Logs%>     - -
-
- -
- <%:Collecting data...%> -
- -
- -
- <%:Collecting data...%> -
- -
-
\ No newline at end of file diff --git a/luci-app-openclash/luasrc/view/openclash/developer.htm b/luci-app-openclash/luasrc/view/openclash/developer.htm deleted file mode 100644 index e5dafc12..00000000 --- a/luci-app-openclash/luasrc/view/openclash/developer.htm +++ /dev/null @@ -1,141 +0,0 @@ - -
-
-
- <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> - <%:Collecting data...%> -
-
-
- - \ No newline at end of file diff --git a/luci-app-openclash/luasrc/view/openclash/dler_login.htm b/luci-app-openclash/luasrc/view/openclash/dler_login.htm deleted file mode 100644 index b1fbf761..00000000 --- a/luci-app-openclash/luasrc/view/openclash/dler_login.htm +++ /dev/null @@ -1,105 +0,0 @@ -<%+cbi/valueheader%> - - - - -<%=self.value%> -<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/dlercloud.htm b/luci-app-openclash/luasrc/view/openclash/dlercloud.htm deleted file mode 100644 index 82a17c6b..00000000 --- a/luci-app-openclash/luasrc/view/openclash/dlercloud.htm +++ /dev/null @@ -1,417 +0,0 @@ - - - - - - - - - -
-
-
-
-
-
-
- -
-
-
-

Dler Cloud

-
- <%:Simple & trustworthy%> -
-
-
-
-

-
-
-

- <%:Plan Expiration Time%>:<%:Collecting data...%> -

-

- <%:Account Balances%>:<%:Collecting data...%> -

-

- <%:Aff Balances%>:<%:Collecting data...%> -

-

- <%:Account Integral%>:<%:Collecting data...%> -

-
-
-

- <%:Today Used%>:<%:Collecting data...%> -

-

- <%:Plan Used%>:<%:Collecting data...%> -

-

- <%:Plan Unused%>:<%:Collecting data...%> -

-

- <%:Plan Traffic%>:<%:Collecting data...%> -

-
-
-

- -

-
-
-

Powered by dlercloud.com

-
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/luci-app-openclash/luasrc/view/openclash/download_rule.htm b/luci-app-openclash/luasrc/view/openclash/download_rule.htm deleted file mode 100644 index 1c0844f4..00000000 --- a/luci-app-openclash/luasrc/view/openclash/download_rule.htm +++ /dev/null @@ -1,41 +0,0 @@ -<%+cbi/valueheader%> - - - - - - -<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/download_stream_domains.htm b/luci-app-openclash/luasrc/view/openclash/download_stream_domains.htm deleted file mode 100644 index 334453be..00000000 --- a/luci-app-openclash/luasrc/view/openclash/download_stream_domains.htm +++ /dev/null @@ -1,152 +0,0 @@ -<%+cbi/valueheader%> - - - - - - - -
- <%:Collecting data...%> -
- -
-<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/dvalue.htm b/luci-app-openclash/luasrc/view/openclash/dvalue.htm deleted file mode 100644 index 83ef64e6..00000000 --- a/luci-app-openclash/luasrc/view/openclash/dvalue.htm +++ /dev/null @@ -1,13 +0,0 @@ -<%+cbi/valueheader%> -
-
-<%:Note: Please Upload File According To File Type, File Will Be Saved To The Prompt Path%> -
-
-<% - local val = self:cfgvalue(section) or self.default or "" - write(pcdata(val)) -%> -
-
-<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/log.htm b/luci-app-openclash/luasrc/view/openclash/log.htm deleted file mode 100644 index d5f5f735..00000000 --- a/luci-app-openclash/luasrc/view/openclash/log.htm +++ /dev/null @@ -1,308 +0,0 @@ -<%+cbi/valueheader%> - - - -
-
-
    -
  • <%:OpenClash Log%>
  • -
  • <%:Core Log%>
  • -
-
-
-
- -
-
- -
- - - - - - - - - - -
-
-
-
- -
- - - - - - - -
- - - - - - - -
-
- - - -<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/myip.htm b/luci-app-openclash/luasrc/view/openclash/myip.htm deleted file mode 100644 index f6e6de07..00000000 --- a/luci-app-openclash/luasrc/view/openclash/myip.htm +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - IP 地址查询 - - - -
- - -
-
-
-

<%:IP Address%>

-

- IPIP      <%:Mainland%>: -

-

- IP.PC    <%:Mainland%>: -

-

- IP.SB    <%:Abroad%>: -

-

- IPIFY    <%:Abroad%>: -

-
-
-

<%:Website Access Check%>

-

- <%:Baidu Search%>: -

-

- <%:NetEase Music%>: -

-

- GitHub: -

-

- YouTube: -

-
-
-
-

Powered by ip.skk.moe

-
-
-
- - - - - diff --git a/luci-app-openclash/luasrc/view/openclash/other_button.htm b/luci-app-openclash/luasrc/view/openclash/other_button.htm deleted file mode 100644 index a7a2e495..00000000 --- a/luci-app-openclash/luasrc/view/openclash/other_button.htm +++ /dev/null @@ -1,7 +0,0 @@ -<%+cbi/valueheader%> - <% if self:cfgvalue(section) ~= false then %> - " style="display: <%= display %>" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> - <% else %> - - - <% end %> -<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/ping.htm b/luci-app-openclash/luasrc/view/openclash/ping.htm deleted file mode 100644 index 8c86aee7..00000000 --- a/luci-app-openclash/luasrc/view/openclash/ping.htm +++ /dev/null @@ -1,3 +0,0 @@ -<%+cbi/valueheader%> --- ms -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-openclash/luasrc/view/openclash/server_list.htm b/luci-app-openclash/luasrc/view/openclash/server_list.htm deleted file mode 100644 index bc373d3c..00000000 --- a/luci-app-openclash/luasrc/view/openclash/server_list.htm +++ /dev/null @@ -1,32 +0,0 @@ -<%# - Copyright 2018-2019 Lienol - Licensed to the public under the Apache License 2.0. --%> - -<% -local dsp = require "luci.dispatcher" --%> - - diff --git a/luci-app-openclash/luasrc/view/openclash/server_url.htm b/luci-app-openclash/luasrc/view/openclash/server_url.htm deleted file mode 100644 index 134d7098..00000000 --- a/luci-app-openclash/luasrc/view/openclash/server_url.htm +++ /dev/null @@ -1,316 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/status.htm b/luci-app-openclash/luasrc/view/openclash/status.htm deleted file mode 100644 index 505076ad..00000000 --- a/luci-app-openclash/luasrc/view/openclash/status.htm +++ /dev/null @@ -1,786 +0,0 @@ - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
-

- -

-

- <%:Collecting data...%> -

-
-

- Wiki -     - star -     - Telegram -     - -

-
-

- <%:Tip: after started, please wait patiently until the connection is normal%> -

-
<%:Main Program%><%:Collecting data...%>><%:Control Panel Login IP%><%:Collecting data...%>
<%:Running Mode%><%:Collecting data...%> - - - - - - - <%:Control Panel Login Port%><%:Collecting data...%>
<%:Proxy Mode%><%:Collecting data...%> - - - - - - - - - <%:Control Panel Login Secret%><%:Collecting data...%>
<%:Yacd Control Panel%><%:Collecting data...%><%:Dashboard Control Panel%><%:Collecting data...%>

- -  <%:Up:%>  - - - 0 KB/S - - - - - -  <%:Down:%>  - - - 0 KB/S - - - - - -  <%:Up Total:%>  - - - 0 KB - - - - - -  <%:Down Total:%>  - - - 0 KB - - - - - -  <%:Connections:%>  - - - 0 - - - - - -  <%:Ram:%>  - - - 0 KB - - - - - -  <%:CPU:%>  - - - 0 % - - -    - -

-
-
-
-

<%:Quick Operation%>

<%:Collecting data...%>

<%:Collecting data...%>

<%:Collecting data...%>

<%:Collecting data...%>

<%:Collecting data...%>

<%:Collecting data...%>

-
-
- - - - - -
-

- <%:Please ensure that all items are displayed normally before running. If you need to update, please go to the global settings page%> -

-
<%:Node Select Backup%><%:Collecting data...%><%:lhie1 Rule Update%><%:Collecting data...%>
<%:ConnersHua Rule Update%><%:Collecting data...%><%:ConnersHua Return Rule Update%><%:Collecting data...%>
<%:Mainland IP Update%><%:Collecting data...%><%:GEOIP(By MaxMind)Data Update%><%:Collecting data...%>
-
- - diff --git a/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm b/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm deleted file mode 100644 index 2bdb2dd5..00000000 --- a/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm +++ /dev/null @@ -1,80 +0,0 @@ -<%+cbi/valueheader%> - - -
-<% - local fs = require "luci.openclash" - local val = self:cfgvalue(section) - local filename = fs.filename(val) - local idname = math.random(1000)..(string.match(filename, "[%w_]+") or "") - write(pcdata(val)) -%> -
-
-
- - -<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/switch_mode.htm b/luci-app-openclash/luasrc/view/openclash/switch_mode.htm deleted file mode 100644 index 96d7e7f1..00000000 --- a/luci-app-openclash/luasrc/view/openclash/switch_mode.htm +++ /dev/null @@ -1,45 +0,0 @@ - -
- - -
-

- <%:Collecting data...%> -

-
-
- - - diff --git a/luci-app-openclash/luasrc/view/openclash/toolbar_show.htm b/luci-app-openclash/luasrc/view/openclash/toolbar_show.htm deleted file mode 100644 index 7464cc97..00000000 --- a/luci-app-openclash/luasrc/view/openclash/toolbar_show.htm +++ /dev/null @@ -1,121 +0,0 @@ - - - - -
- -   <%:Current Config File%>:  -    - -   - -
- - \ No newline at end of file diff --git a/luci-app-openclash/luasrc/view/openclash/update.htm b/luci-app-openclash/luasrc/view/openclash/update.htm deleted file mode 100644 index 7c861d1a..00000000 --- a/luci-app-openclash/luasrc/view/openclash/update.htm +++ /dev/null @@ -1,424 +0,0 @@ - -
- - - - - - - - - - - - - - - - -
-

- <%:Note: if the update fails, you can manually download and upload%> -

-
<%:Compiled Version Selected%><%:Release Branch Selected%>
<%:Last Check Update%><%:Collecting data...%><%:CPU Architecture%><%:Collecting data...%>
-

- <%:Core path:%> /etc/openclash/core/clash -

-
[dev] <%:Current Core%><%:Collecting data...%>[dev] <%:Latest Core%><%:Collecting data...%>
<%:Update Core%><%:Collecting data...%><%:Download Latest Core%><%:Collecting data...%>
-

- <%:Core path:%>/etc/openclash/core/clash_tun -

-
[TUN] <%:Current Core%><%:Collecting data...%>[TUN] <%:Latest Core%><%:Collecting data...%>
<%:Update Core%><%:Collecting data...%><%:Download Latest Core%><%:Collecting data...%>
-
-
- - - - -
-

- <%:Client Update%> -

-
<%:Current Client%><%:Collecting data...%><%:Latest Client%><%:Collecting data...%>
<%:Update Client%><%:Collecting data...%><%:Download Latest Client%><%:Collecting data...%>
-
-
- - - - - - - -
-

- <%:Collecting data...%> -

-
-

- <%:Collecting data...%> -

-
-

- <%:Collecting data...%> -

-
-

- <%:Collecting data...%> -

-
-
- - diff --git a/luci-app-openclash/luasrc/view/openclash/upload.htm b/luci-app-openclash/luasrc/view/openclash/upload.htm deleted file mode 100644 index 8e407554..00000000 --- a/luci-app-openclash/luasrc/view/openclash/upload.htm +++ /dev/null @@ -1,27 +0,0 @@ -<%+cbi/valueheader%> -
-
-<%+cbi/valuefooter%> - - \ No newline at end of file diff --git a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po deleted file mode 100644 index b2f11600..00000000 --- a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ /dev/null @@ -1,2643 +0,0 @@ -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" - -msgid "OpenClash" -msgstr "OpenClash" - -msgid "A Clash Client For OpenWrt" -msgstr "一个运行在OpenWrt上的Clash客户端,兼容Shadowsocks、ShadowsocksR、Vmess、Trojan、Snell等协议,根据灵活的规则配置实现策略代理" - -msgid "Global Settings(Will Modify The Config File Or Subscribe According To The Settings On This Page)" -msgstr "全局设置(将按照本页设置自动修改配置文件和获取订阅)" - -msgid "Credits" -msgstr "技术支持" - -msgid "Overviews" -msgstr "运行状态" - -msgid "Global Settings" -msgstr "全局设置" - -msgid "Rule Providers and Groups" -msgstr "规则集与策略组管理" - -msgid "Game Rules and Groups (Only TUN Core Support)" -msgstr "游戏规则与策略组管理(仅TUN内核)" - -msgid "Other Rule Providers and Groups (Only TUN Core Support)" -msgstr "第三方规则集与策略组管理(仅TUN内核)" - -msgid "Custom Rule Providers and Groups (Only TUN Core Support)" -msgstr "自定义规则集与策略组管理(仅TUN内核)" - -msgid "General Settings" -msgstr "常规设置" - -msgid "DNS Setting" -msgstr "DNS设置" - -msgid "Config Update" -msgstr "配置文件订阅" - -msgid "Config Subscribe Edit" -msgstr "编辑配置文件订阅信息" - -msgid "Rules Update" -msgstr "第三方规则订阅" - -msgid "Dashboard Settings" -msgstr "外部控制" - -msgid "GEOIP数据库订阅" -msgstr "外部控制" - -msgid "Enable" -msgstr "启用" - -msgid "Disable" -msgstr "停用" - -msgid "Running" -msgstr "运行中" - -msgid "Not Running" -msgstr "未运行" - -msgid "(Enable or Disable)" -msgstr "(仅添加选中的设置)" - -msgid "Config Normal" -msgstr "检查通过" - -msgid "Config Abnormal" -msgstr "检查失败" - -msgid "File Not Exist" -msgstr "文件不存在" - -msgid "Not Set" -msgstr "未设置" - -msgid "Server Logs" -msgstr "运行日志" - -msgid "Debug Logs" -msgstr "调试日志" - -msgid "Generate Logs" -msgstr "生成日志" - -msgid "Click to Generate" -msgstr "点击生成" - -msgid "Enable OpenClash" -msgstr "启动 OpenClash" - -msgid "Disable OpenClash" -msgstr "关闭 OpenClash" - -msgid "Commit Settings" -msgstr "保存配置" - -msgid "Apply Settings" -msgstr "应用配置" - -msgid "Download Config" -msgstr "下载配置" - -msgid "Copy Config" -msgstr "复制配置" - -msgid "Update Config" -msgstr "更新配置" - -msgid "Download Running Config" -msgstr "下载运行配置" - -msgid "Select Mode" -msgstr "*运行模式" - -msgid "redir-host" -msgstr "Redir-Host(兼容)模式" - -msgid "fake-ip" -msgstr "Fake-IP(增强)模式" - -msgid "redir-host(tun mode)" -msgstr "Redir-Host(TUN)模式" - -msgid "fake-ip(tun mode)" -msgstr "Fake-IP(TUN)模式" - -msgid "redir-host-mix(tun mix mode)" -msgstr "Redir-Host(TUN-混合)模式【UDP-TUN,TCP-转发】" - -msgid "fake-ip-mix(tun mix mode)" -msgstr "Fake-IP(TUN-混合)模式【UDP-TUN,TCP-转发】" - -msgid "Select Mode For OpenClash Work, Try Flush DNS Cache If Network Error" -msgstr "选择运行模式,如客户端的网络异常请尝试清除DNS缓存" - -msgid "Proxy Mode" -msgstr "代理模式" - -msgid "Select Proxy Mode, Use Script Mode Could Prevent Proxy BT traffics If Rules Support, eg.lhie1's" -msgstr "选择默认代理模式,如果规则支持,使用脚本模式可以阻止代理BT流量,比如lhie1规则" - -msgid "Rule Proxy Mode" -msgstr "Rule【策略代理】" - -msgid "Global Proxy Mode" -msgstr "Global【全局代理(需前往控制面板手动指定节点)】" - -msgid "Direct Proxy Mode" -msgstr "Direct【全局直连】" - -msgid "Script Proxy Mode (Tun Core Only)" -msgstr "Script【脚本模式 - 仅TUN内核】" - -msgid "Select Stack Type" -msgstr "网络栈类型" - -msgid "Select Stack Type For TUN Mode, According To The Running Speed on Your Machine" -msgstr "请自行根据运行速度为TUN模式选择合适的网络栈" - -msgid "China IP Route" -msgstr "实验性:绕过中国大陆IP" - -msgid "China IPv6 Route" -msgstr "实验性:绕过中国大陆IPv6" - -msgid "Bypass The China Network Flows, Improve Performance" -msgstr "启用后中国大陆流量将不再经过内核,提升系统性能" - -msgid "Log Level" -msgstr "日志等级" - -msgid "Info Mode" -msgstr "Info【信息】" - -msgid "Warning Mode" -msgstr "Warning【警告】" - -msgid "Error Mode" -msgstr "Error【错误】" - -msgid "Debug Mode" -msgstr "Debug【调试】" - -msgid "Silent Mode" -msgstr "Silent【静默】" - -msgid "Select Core's Log Level" -msgstr "选择内核日志的默认输出模式" - -msgid "Only intranet allowed" -msgstr "仅允许内网" - -msgid "When Enabled, The Control Panel And The Connection Broker Port Will Not Be Accessible From The Public Network, Not Support IPv6 Yet" -msgstr "启用后将禁止从公网访问控制面板和连接代理端口, 暂不支持和IPv6代理同时启用" - -msgid "Redirect Local DNS Setting" -msgstr "*本地DNS劫持" - -msgid "Set Local DNS Redirect" -msgstr "默认启用,将自动设置Dnsmasq的上游服务器,如和其他插件冲突可停用,但须将OpenClash作为冲突插件的唯一上游服务器" - -msgid "Disable Dnsmasq's DNS Cache" -msgstr "禁止Dnsmasq缓存DNS" - -msgid "Recommended Enabled For Avoiding Some Connection Errors" -msgstr "推荐启用,防止因缓存造成连接错误" - -msgid "(Maybe Incompatible For Your Firmware)" -msgstr "(部分固件可能不兼容)" - -msgid "Custom DNS Setting" -msgstr "自定义上游DNS服务器" - -msgid "Use Custom Rules" -msgstr "启用后将把自定义规则增加到配置文件,规则请到下方文本框编辑" - -msgid "Add Custom DNS Servers" -msgstr "设置自定义上游DNS服务器" - -msgid "(Take Effect After Choose Above)" -msgstr "(在上方设置中启用本功能后生效)" - -msgid "Advanced Setting" -msgstr "高级设置" - -msgid "DNS Advanced Settings" -msgstr "DNS高级设置" - -msgid "(Please Don't Modify it at Will)" -msgstr "(如您不知道选项有何用,请不要随意修改)" - -msgid "Specify DNS Server" -msgstr "指定(第二)DNS服务器" - -msgid "Specify DNS Server For List and Server Nodes With Fake-IP Mode, Only One IP Server Address Support" -msgstr "指定下方列表中域名和Fake-IP模式下非代理集内节点的DNS服务器,只支持填写一个IP地址" - -msgid "Domain Names In The List Do Not Return Fake-IP, One rule per line" -msgstr "每行请只填写一个域名,列表中的域名在(Fake-IP模式)下查询DNS时将返回真实IP地址,更改后点击上方按钮生效" - -msgid "Domain Names In The List Use The Custom DNS Server, One rule per line" -msgstr "每行请只填写一个域名,列表中的域名将使用上方指定的DNS进行查询" - - -msgid "Domain Names In The List Use The Custom DNS Server, But Still Return Fake-IP Results, One rule per line" -msgstr "每行请只填写一个规则,列表中的域名将使用指定的DNS进行查询,但Fake-IP模式下仍将返回保留地址" - -msgid "Fake-IP-Filter List Update" -msgstr "更新Fake-IP域名黑名单" - -msgid "Set OpenClash Upstream DNS Resolve Server" -msgstr "启用将覆盖配置文件内的设置,请先在下方配置好服务器" - -msgid "DNS Server Group" -msgstr "服务器分组" - -msgid "(NameServer Group Must Be Set)" -msgstr "(NameServer 组必须设置)" - -msgid "DNS Server Address" -msgstr "服务器地址" - -msgid "(Do Not Add Type Ahead)" -msgstr "(请勿添加类型前缀)" - -msgid "DNS Server Port" -msgstr "服务器端口" - -msgid "(Require When Use Non-Standard Port)" -msgstr "(使用非标准端口时必须填写)" - -msgid "DNS Server Type" -msgstr "服务器类型" - -msgid "(Communication protocol)" -msgstr "(通讯协议)" - -msgid "Proxy IPv6 Traffic" -msgstr "IPv6 流量代理" - -msgid "Disable IPv6 DHCP To Avoid Abnormal Connection If You Do Not Use" -msgstr "如果您不使用,请禁用IPv6的DHCP以避免连接异常" - -msgid "IPv6 DNS Resolve" -msgstr "允许IPv6类型DNS解析" - -msgid "Enable Clash to Resolve IPv6 DNS Requests" -msgstr "允许解析IPv6类型的DNS请求" - -msgid "Rules Setting" -msgstr "规则设置" - -msgid "Rules Setting(Access Control)" -msgstr "规则设置(访问控制)" - -msgid "Config Manage" -msgstr "配置文件管理" - -msgid "Upload File Type" -msgstr "上传文件类型" - -msgid "Proxy Provider File" -msgstr "代理集文件" - -msgid "Rule Provider File" -msgstr "规则集文件" - -msgid "Upload" -msgstr "上传" - -msgid "File saved to" -msgstr "文件已成功上传到" - -msgid "upload file error." -msgstr "文件上传失败" - -msgid "No specify upload file." -msgstr "未指定上传文件" - -msgid "Note: Please Upload File According To File Type, File Will Be Saved To The Prompt Path" -msgstr "注意:请根据文件类型上传文件,文件将会被保存到提示路径" - -msgid "Proxy Provider File List" -msgstr "代理集文件列表" - -msgid "Rule Providers File List" -msgstr "规则集文件列表" - -msgid "Game Rules File List" -msgstr "游戏规则文件列表" - -msgid "Please Make Sure Ports Available" -msgstr "请确保端口可用" - -msgid "Update Subcription" -msgstr "更新订阅配置" - -msgid "Update time (every day)" -msgstr "更新时间(每天)" - -msgid "Update Interval(min)" -msgstr "更新间隔(分钟)" - -msgid "Update Mode" -msgstr "更新模式" - -msgid "Appointment Mode" -msgstr "预约" - -msgid "Loop Mode" -msgstr "循环" - -msgid "Auto Update" -msgstr "自动更新" - -msgid "Check And Update" -msgstr "检查并更新" - -msgid "After clash start running, wait a moment for servers to resolve,enjoy" -msgstr "运行后,请等待服务器上线" - -msgid "Redir Port" -msgstr "流量转发端口" - -msgid "TProxy Port" -msgstr "TProxy 端口" - -msgid "SOCKS5 Port" -msgstr "SOCKS5 代理端口" - -msgid "HTTP(S) Port" -msgstr "HTTP(S) 代理端口" - -msgid "Mixed Port" -msgstr "HTTP(S)&SOCKS5 混合代理端口" - -msgid "Set Authentication of SOCKS5/HTTP(S)" -msgstr "设置SOCKS5/HTTP(S)认证信息" - -msgid "Not Null" -msgstr "空值无效" - -msgid "Server Subscription Address" -msgstr "配置文件订阅地址" - -msgid "Auto Update Server subscription" -msgstr "自动更新配置文件" - -msgid "Modify Your Config file:" -msgstr "您可以在下方直接修改配置文件:" - -msgid "Here, Except The Settings That Were Taken Over" -msgstr ",仅支持未被接管的设置" - -msgid "Default Config File With Correct Template" -msgstr "参考配置文件,方便您查询各项参数注释和正确的设置、顺序" - -msgid "Config File Edited By OpenClash For Running" -msgstr "OpenClash修改后用于启动的配置文件" - -msgid "Dashboard Secret" -msgstr "管理页面登录密钥" - -msgid "Set Dashboard Secret" -msgstr "设置您的管理页面登录密钥" - -msgid "Dashboard Address Example:" -msgstr "管理页面地址示例:" - -msgid "Dashboard Port" -msgstr "管理页面端口" - -msgid "Public Dashboard Address" -msgstr "管理页面公网域名" - -msgid "Domain Name For Dashboard Login From Public Network" -msgstr "设置公网域名,便于从公网访问时自动登录" - -msgid "Public Dashboard Port" -msgstr "管理页面映射端口" - -msgid "Port For Dashboard Login From Public Network" -msgstr "设置映射端口,便于从公网访问时自动登录" - -msgid "GEOIP Update" -msgstr "GEOIP数据库订阅" - -msgid "Auto Update GEOIP Database" -msgstr "自动更新GEOIP数据库" - -msgid "Update GEOIP Database" -msgstr "更新GEOIP数据库" - -msgid "Auto Update Chnroute Lists" -msgstr "自动更新大陆白名单" - -msgid "Update Chnroute Lists" -msgstr "更新大陆白名单" - -msgid "Chnroute Update" -msgstr "大陆白名单订阅" - -msgid "Other Rules Update(Only in Use)" -msgstr "正在使用第三方规则时才能更新" - -msgid "Enable Other Rules" -msgstr "第三方规则" - -msgid "Use Other Rules" -msgstr "将覆盖配置文件内的所有规则 (不包括自定义规则),启用前请先在此页面下方创建配置" - -msgid "lhie1 Rules" -msgstr "lhie1 规则" - -msgid "ConnersHua Rules" -msgstr "ConnersHua 规则" - -msgid "ConnersHua(Provider-type) Rules" -msgstr "ConnersHua(规则集) 规则" - -msgid "ConnersHua Return Rules" -msgstr "ConnersHua 回国规则" - -msgid "Auto Update Other Rules" -msgstr "正在使用第三方规则时更新设置才会生效" - -msgid "Update Time (Every Week)" -msgstr "更新时间(每周)" - -msgid "Every Day" -msgstr "每天" - -msgid "Every Monday" -msgstr "每周一" - -msgid "Every Tuesday" -msgstr "每周二" - -msgid "Every Wednesday" -msgstr "每周三" - -msgid "Every Thursday" -msgstr "每周四" - -msgid "Every Friday" -msgstr "每周五" - -msgid "Every Saturday" -msgstr "每周六" - -msgid "Every Sunday" -msgstr "每周日" - -msgid "Update Other Rules" -msgstr "更新第三方规则" - -msgid "GlobalTV" -msgstr "国际流媒体" - -msgid "AsianTV" -msgstr "亚洲流媒体" - -msgid "Proxy" -msgstr "必须代理的流量" - -msgid "Apple" -msgstr "苹果服务(Apple)" - -msgid "Google FCM" -msgstr "谷歌推送(Google FCM)" - -msgid "Scholar" -msgstr "学术网站(Scholar)" - -msgid "Microsoft" -msgstr "微软服务(Microsoft)" - -msgid "Netflix" -msgstr "奈飞(Netflix)" - -msgid "Disney Plus" -msgstr "迪士尼+(Disney Plus)" - -msgid "Bilibili" -msgstr "哔哩哔哩(Bilibili)" - -msgid "Bahamut" -msgstr "巴哈姆特(Bahamut)" - -msgid "Steam" -msgstr "Steam(非下载流量)" - -msgid "Netease Music" -msgstr "网易云音乐" - -msgid "Speedtest" -msgstr "测速流量(Speedtest)" - -msgid "AdBlock" -msgstr "广告(AdBlock)" - -msgid "Domestic" -msgstr "国内流量" - -msgid "Others" -msgstr "未匹配到规则的流量" - -msgid "Choose Proxy Groups, Base On Your Config File" -msgstr "指定流量(策略)的代理方式,只支持选择(策略组),信息来源于您的配置文件" - -msgid "Custom Clash Rules" -msgstr "自定义规则" - -msgid "Custom Clash Rules(Access Control)" -msgstr "自定义规则(访问控制)" - -msgid "Custom Priority Rules Here, For More Go:" -msgstr "设置自定义规则(优先匹配),详细信息请参阅:" - -msgid "Custom Extended Rules Here, For More Go:" -msgstr "设置自定义规则(候补匹配),详细信息请参阅:" - -msgid "IP To CIDR:" -msgstr "在线IP段转CIDR地址:" - -msgid "Custom Hosts Here, For More Go:" -msgstr "设置自定义Hosts,详细信息请参阅:" - -msgid "Set Custom Rules" -msgstr "设置自定义规则(在上方规则设置中启用本功能后生效)" - -msgid "Set Custom Hosts, Only Work with Redir-Host Mode" -msgstr "设置自定义Hosts,仅在Redir-Host模式下生效(不会覆盖配置文件设置)" - -msgid "Version Update" -msgstr "版本更新" - -msgid "Model Not Found" -msgstr "处理器架构识别失败" - -msgid "Current Core Version" -msgstr "当前内核版本" - -msgid "Last Core Version" -msgstr "最新内核版本" - -msgid "Unknown" -msgstr "查询失败" - -msgid "Check Failed" -msgstr "查询更新失败" - -msgid "" -msgstr "<可更新>" - -msgid "Update Core File" -msgstr "更新内核" - -msgid "Download Form https://github.com/vernesong/OpenClash/releases/tag/Clash If Fail" -msgstr "" -"如下载失败可前往 https://github.com/vernesong/OpenClash/releases/tag/Clash 手动下载并上传" - -msgid "Last OpenClash Version" -msgstr "最新客户端版本" - -msgid "Current OpenClash Version" -msgstr "当前客户端版本" - -msgid "Update OpenClash" -msgstr "更新客户端" - -msgid "Only For IPK Install Type Or Not Release Memory" -msgstr "" -"只支持通过IPK安装的版本进行更新,因为随系统编译的版本更新后不会释放旧版本的闪存空间" - -msgid "Servers and Groups" -msgstr "服务器与策略组管理" - -msgid "Read Config" -msgstr "读取配置" - -msgid "Delete Unused Servers" -msgstr "删除未启用节点" - -msgid "Delete Servers" -msgstr "清空服务器配置" - -msgid "Delete Proxy Providers" -msgstr "清空代理集配置" - -msgid "Delete Groups" -msgstr "清空策略组配置" - -msgid "Back Settings" -msgstr "返回概览" - -msgid "Refresh Page" -msgstr "刷新页面" - -msgid "Servers manage and Config create" -msgstr "服务器&策略组管理(支持配置文件一键生成)" - -msgid "Keep Settings" -msgstr "保留配置" - -msgid "Only Update Servers Below When Subscription" -msgstr "订阅时仅更新节点和代理集,保留下方策略组设置,不修改顺序" - -msgid "New Servers Group" -msgstr "新节点默认策略组" - -msgid "Set The New Subscribe Server's Default Proxy Groups" -msgstr "选择符合订阅要求的新节点的默认策略组(请勿重复添加)" - -msgid "Choose Template For Create Config" -msgstr "选择配置文件模板" - -msgid "Use Other Rules To Create Config" -msgstr "使用第三方规则快速创建配置文件(创建后可在全局设置页面调整参数)" - -msgid "Disable Create Config" -msgstr "只更新配置文件服务器节点信息" - -msgid "Mix Proxies" -msgstr "混合节点" - -msgid "Mix This Page's Proxies" -msgstr "一键生成配置文件时合并本页下方的所有代理服务器信息(不区分配置文件)" - -msgid "Type" -msgstr "节点类型" - -msgid "Server Alias" -msgstr "别名(请勿重名)" - -msgid "Server Address" -msgstr "服务器地址" - -msgid "Server Port" -msgstr "服务器端口" - -msgid "UDP Support" -msgstr "UDP支持" - -msgid "Ping Latency" -msgstr "服务器延迟" - -msgid "Edit Server" -msgstr "编辑服务器配置" - -msgid "Server Node Type" -msgstr "服务器节点类型" - -msgid "Using incorrect encryption mothod may causes service fail to start" -msgstr "输入不正确的参数组合可能会导致服务无法启动" - -msgid "Password" -msgstr "密码" - -msgid "Encrypt Method" -msgstr "加密方式" - -msgid "Protocol" -msgstr "协议" - -msgid "Protocol param(optional)" -msgstr "传输协议参数(可选)" - -msgid "Obfs" -msgstr "混淆插件" - -msgid "Obfs param(optional)" -msgstr "混淆参数(可选)" - -msgid "UDP Enable" -msgstr "UDP支持" - -msgid "obfs-mode" -msgstr "传输协议" - -msgid "obfs-hosts" -msgstr "混淆参数(HOST)" - -msgid "Auth Username" -msgstr "登录用户名" - -msgid "Auth Password" -msgstr "登录密码" - -msgid "None" -msgstr "未配置" - -msgid "Create Config" -msgstr "一键生成配置文件" - -msgid "Create Config By One-Click Only Need Proxies" -msgstr "一键生成配置文件功能只需要配置服务器节点信息或代理集信息" - -msgid "Proxy Groups(No Need Set when Config Create)" -msgstr "策略组配置(使用一键生成配置文件功能时无需设置)" - -msgid "Proxies" -msgstr "服务器节点配置" - -msgid "Edit Rule Providers" -msgstr "编辑规则集配置" - -msgid "Rule Providers Type" -msgstr "规则集类型" - -msgid "Choose The Rule Providers Type" -msgstr "选择规则集类型" - -msgid "Append Position" -msgstr "规则集匹配顺序" - -msgid "Priority Match" -msgstr "优先(覆盖)" - -msgid "Extended Match" -msgstr "扩展(补充)" - -msgid "Rule Providers Name" -msgstr "别名(请勿重名)" - -msgid "Rule Behavior" -msgstr "规则类型" - -msgid "Choose The Rule Behavior" -msgstr "选择规则类型" - -msgid "Rule Providers Path" -msgstr "规则集路径" - -msgid "Update Your Rule Providers File From Config Luci Page" -msgstr "请先在配置文件管理页面上传您的规则集文件" - -msgid "Rule Providers URL" -msgstr "规则集地址" - -msgid "Rule Providers Interval(s)" -msgstr "规则集更新时间(秒)" - -msgid "Edit Group" -msgstr "编辑策略组配置" - -msgid "Group Type" -msgstr "策略组类型" - -msgid "Choose The Operation Mode" -msgstr "设置策略组挑选服务器节点的工作方式" - -msgid "Group Name" -msgstr "别名(请勿重名)" - -msgid "Disable UDP" -msgstr "禁用UDP连接" - -msgid "Test URL" -msgstr "检测地址(URL)" - -msgid "Test Interval(s)" -msgstr "检测频率(秒)" - -msgid "Tolerance(ms)" -msgstr "节点切换容忍值(毫秒)" - -msgid "Manual-Select" -msgstr "Select【手动选择】" - -msgid "URL-Test" -msgstr "URL-Test【最低延迟】" - -msgid "Fallback" -msgstr "Fallback【故障切换】" - -msgid "Load-Balance" -msgstr "Load-Balance【负载均衡】" - -msgid "Relay-Traffic" -msgstr "Relay【嵌套中转】" - -msgid "Other Group" -msgstr "包含其他策略组(请勿重复添加)" - -msgid "The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'" -msgstr "注意:除'DIRECT'和'REJECT'外,修改配置文件前添加的其他策略组必须已创建" - -msgid "The Added Proxy Provider Must Exist" -msgstr "修改配置文件前添加的代理集必须已创建" - -msgid "Proxy Group" -msgstr "添加到策略组(请勿重复添加)" - -msgid "Set Proxy Group" -msgstr "指定策略组" - -msgid "No Need Set when Config Create, The added Proxy Groups Must Exist" -msgstr "注意:使用一键生成配置文件功能时无需设置此项,修改配置文件前添加的策略组必须已创建" - -msgid "Clean Log" -msgstr "清理日志" - -msgid "Stop Refresh Log" -msgstr "停止刷新" - -msgid "Start Refresh Log" -msgstr "开始刷新" - -msgid "Config File" -msgstr "配置文件" - -msgid "State" -msgstr "状态" - -msgid "Update Time" -msgstr "更新时间" - -msgid "File Name" -msgstr "文件名" - -msgid "Grammar Check" -msgstr "语法检查" - -msgid "Switch Config" -msgstr "切换" - -msgid "Size" -msgstr "文件大小" - -msgid "Remove" -msgstr "移除" - -msgid "(Enable or Disable Subscribe)" -msgstr "(启用或禁用更新)" - -msgid "Config Alias" -msgstr "配置文件名" - -msgid "Name For Distinguishing" -msgstr "用于区分,请勿重名" - -msgid "Subscribe Address" -msgstr "订阅地址" - -msgid "Keyword Match" -msgstr "筛选节点" - -msgid "Exclude Keyword Match" -msgstr "排除节点" - -msgid "eg: hk or tw&bgp" -msgstr "格式示例:香港 或 台湾&bgp 或 新加坡&bgp&奈飞" - -msgid "Config File List" -msgstr "配置文件列表" - -msgid "Use For All Config File" -msgstr "添加到所有配置文件" - -msgid "Proxy-Provider" -msgstr "代理集配置" - -msgid "Edit Proxy-Provider" -msgstr "编辑代理集配置" - -msgid "Provider Type" -msgstr "代理集类型" - -msgid "Choose The Provider Type" -msgstr "选择代理集的类型" - -msgid "Provider Name" -msgstr "代理集别名(请勿重名)" - -msgid "Provider Path" -msgstr "代理集路径(Path)" - -msgid "Update Your Proxy Provider File From Config Luci Page" -msgstr "请先在配置文件管理页面上传您的代理集文件" - -msgid "Provider Filter" -msgstr "代理集节点筛选" - -msgid "Provider URL" -msgstr "代理集URL" - -msgid "Provider Interval(s)" -msgstr "代理集更新间隔(s)" - -msgid "Provider Health Check" -msgstr "代理集状态检查" - -msgid "Health Check URL" -msgstr "状态检查URL" - -msgid "Health Check Interval(s)" -msgstr "状态检查间隔(s)" - -msgid "Game Rule's Name" -msgstr "选择游戏规则" - -msgid "Rule Provider's Name" -msgstr "选择规则集(请勿重复添加)" - -msgid "Select Proxy Group" -msgstr "选择策略组" - -msgid "Game Rules List" -msgstr "游戏规则列表" - -msgid "Rule Name" -msgstr "规则名称" - -msgid "Rule Type" -msgstr "规则类型" - -msgid "Rule Author" -msgstr "规则作者" - -msgid "Download Rule" -msgstr "下载规则" - -msgid "Exist" -msgstr "已下载" - -msgid "Not Exist" -msgstr "未下载" - -msgid "Order Number" -msgstr "序号" - -msgid "Game Rules Manage" -msgstr "管理第三方游戏规则" - -msgid "Other Rule Provider Manage" -msgstr "管理第三方规则集" - -msgid "Other Rule Providers List" -msgstr "第三方规则集列表" - -msgid "Proxy UDP Traffics" -msgstr "*UDP流量转发" - -msgid "The Servers Must Support UDP forwarding" -msgstr "启用时服务器必须支持UDP转发" - -msgid "If Docker is Installed, UDP May Not Forward Normally" -msgstr "安装了Docker的固件请使用TUN模式,否则可能无法正常转发UDP,造成游戏异常" - -msgid "Disable QUIC" -msgstr "*禁用QUIC" - -msgid "Prevent YouTube and Others To Use QUIC Transmission" -msgstr "防止YouTube等使用QUIC导致速度不佳" - -msgid "REJECT UDP Traffic On Port 443" -msgstr "禁用443端口UDP流量" - -msgid "Operation Mode" -msgstr "模式设置" - -msgid "Select Operation Mode" -msgstr "*页面操作模式" - -msgid "Select Mode For Page Settings, Switch By Click the Button Bellow" -msgstr "选择全局设置的操作模式,单击下面的按钮进行切换" - -msgid "redir-host mode" -msgstr "Redir-Host 模式" - -msgid "fake-ip mode" -msgstr "Fake-IP 模式" - -msgid "Switch Operation Mode" -msgstr "切换操作模式" - -msgid "Switch Mode" -msgstr "切换" - -msgid "Access Control" -msgstr "访问控制" - -msgid "LAN Access Control Mode" -msgstr "局域网访问控制模式" - -msgid "Black List Mode" -msgstr "黑名单模式" - -msgid "White List Mode" -msgstr "白名单模式" - -msgid "LAN Bypassed Host List" -msgstr "不走代理的局域网设备 IP" - -msgid "LAN Proxied Host List" -msgstr "走代理的局域网设备 IP" - -msgid "WAN Bypassed Host List" -msgstr "不走代理的WAN IP" - -msgid "LAN Bypassed Mac List" -msgstr "不走代理的局域网设备 Mac" - -msgid "LAN Proxied Mac List" -msgstr "走代理的局域网设备 Mac" - -msgid "In The Fake-IP Mode, Only Pure IP Requests Are Supported" -msgstr "在Fake-IP模式下,只支持过滤纯IP类型的请求" - -msgid "Rule Match Proxy Mode" -msgstr "*仅代理命中规则流量" - -msgid "Only Proxy Rules Match, Prevent BT/P2P Passing" -msgstr "仅允许代理命中规则的流量,防止BT、P2P下载流量经过代理" - -msgid "Common Ports Proxy Mode" -msgstr "*仅允许常用端口流量" - -msgid "Only Common Ports, Prevent BT/P2P Passing" -msgstr "仅允许常用端口的流量经过Clash,防止BT、P2P下载流量经过代理" - -msgid "Provider File Manage" -msgstr "代理(规则)集文件管理" - -msgid "Config File Edit" -msgstr "配置文件编辑" - -msgid "Delete All File" -msgstr "删除所有文件" - -msgid "Template Name" -msgstr "订阅转换模板" - -msgid "Subscribe Convert Online" -msgstr "在线订阅转换" - -msgid "Custom Template URL" -msgstr "自定义模板地址" - -msgid "Custom Template" -msgstr "自定义模板" - -msgid "Emoji" -msgstr "添加Emoji" - -msgid "skip-cert-verify" -msgstr "跳过证书验证" - -msgid "Sort" -msgstr "排序" - -msgid "Append Node Type" -msgstr "插入节点类型" - -msgid "Convert Subscribe Online With Template, Mix Proxies and Keep Settings options Will Not Effect" -msgstr "根据模板在线转换配置文件,混合节点和保留配置功能将不可用" - -msgid "Convert Subscribe function of Online is Supported By subconverter Written By tindy X" -msgstr "在线订阅转换功能由tindy X通过subconverter提供支持" - -msgid "Small Flash Memory" -msgstr "小闪存模式" - -msgid "Move Core And GEOIP Data File To /tmp/etc/openclash For Small Flash Memory Device" -msgstr "针对闪存空间不够的设备,移动内核和GEOIP数据库文件到 /tmp/etc/openclash 文件夹" - -msgid "Round-robin" -msgstr "轮询(轮流使用全部代理)" - -msgid "Consistent-hashing" -msgstr "哈希匹配(访问相同网站时使用同一个代理)" - -msgid "Strategy Type" -msgstr "策略类型" - -msgid "Choose The Load-Balance's Strategy Type" -msgstr "选择负载均衡的策略类型" - -msgid "Main Program" -msgstr "主程序" - -msgid "Daemons" -msgstr "守护程序" - -msgid "Running Mode" -msgstr "运行模式" - -msgid "Yacd Control Panel" -msgstr "Yacd 控制面板" - -msgid "Dashboard Control Panel" -msgstr "Dashboard 控制面板" - -msgid "Control Panel Login IP" -msgstr "控制面板登录IP" - -msgid "Control Panel Login Port" -msgstr "控制面板登录端口" - -msgid "Control Panel Login Secret" -msgstr "控制面板登录密钥" - -msgid "Dashboard Control Panel" -msgstr "Dashboard 控制面板" - -msgid "Quick Operation" -msgstr "常用操作快捷按钮" - -msgid "Please ensure that all items are displayed normally before running. If you need to update, please go to the global settings page" -msgstr "组件的状态显示,运行前请确保各项目显示正常,需要更新请到全局设置页面操作" - -msgid "Node Select Backup" -msgstr "策略组节点选择 备份日期" - -msgid "ConnersHua Rule Update" -msgstr "ConnersHua 规则更新日期" - -msgid "Mainland IP Update" -msgstr "大陆IP白名单 更新日期" - -msgid "lhie1 Rule Update" -msgstr "lhie1 规则更新日期" - -msgid "ConnersHua Return Rule Update" -msgstr "ConnersHua 回国规则更新日期" - -msgid "GEOIP(By MaxMind)Data Update" -msgstr "GEOIP(By MaxMind)数据库日期" - -msgid "No Backup" -msgstr "暂未备份" - -msgid "Backup" -msgstr "备份" - -msgid "" -msgstr "<受限状态>" - -msgid "Enhance" -msgstr "增强" - -msgid "Compatible" -msgstr "兼容" - -msgid "Mix" -msgstr "混合" - -msgid "Open Panel" -msgstr "打开控制面板" - -msgid "Close All Connections" -msgstr "重置所有链接" - -msgid "Restore Nodes Selection" -msgstr "还原策略组节点选择" - -msgid "Save Nodes Selection" -msgstr "保存策略组节点选择" - -msgid "Reload Firewall Rules" -msgstr "重置防火墙规则" - -msgid "Check All Components Update" -msgstr "插件和内核检查更新" - -msgid "Check Config Update" -msgstr "配置文件检查更新" - -msgid "Check Third Party Rules Update" -msgstr "第三方规则检查更新" - -msgid "Check GEOIP Data Update" -msgstr "GEOIP数据库检查更新" - -msgid "Check and update all Cores and plug-ins?" -msgstr "确定要一键检查并更新所有内核及插件吗?" - -msgid "Check failed, Please try again later!" -msgstr "一键检查更新失败,请稍后再试!" - -msgid "No Compiled Version is Selected, Please Select on The Top and Try Again!" -msgstr "未选择编译版本,请到上方标签选择后重试!" - -msgid "Checking..." -msgstr "正在检查更新..." - -msgid "Reloading..." -msgstr "正在重置..." - -msgid "Restoring..." -msgstr "正在还原..." - -msgid "Saving..." -msgstr "正在保存..." - -msgid "Firewall Rules Reset Failed" -msgstr "防火墙规则重置失败" - -msgid "Close All Connections Railed" -msgstr "重置所有链接失败" - -msgid "Restore Nodes Selection Railed" -msgstr "还原失败" - -msgid "Save Nodes Selection Failed" -msgstr "备份失败" - -msgid "Tip: after started, please wait patiently until the connection is normal" -msgstr "Tip: OpenClash 成功启动后请耐心等待下方网站访问检查连接正常后再使用" - -msgid "Tip: You can modify the profile on the profile page (for content that is not taken over)" -msgstr "Tip: 您可以在配置文件页面直接修改配置文件(适用于没被接管的内容)" - -msgid "Tip: click the version icon above to jump to the client publishing page" -msgstr "Tip: 点击上方版本图标可跳转到客户端发布页面" - -msgid "Tip: do not write configuration files? Try to create one click on the server page" -msgstr "Tip: 不会编写配置文件?试试在【服务器与策略组管理】页面一键创建" - -msgid "Tip: some website are abnormal? Try switching modes or using third-party rules" -msgstr "Tip: 某些网站链接出现异常? 试试切换模式或者使用第三方规则" - -msgid "Tip: using the fake IP mode can get a faster access experience" -msgstr "Tip: 使用 Fake-IP 模式可以获得更加快速的访问体验" - -msgid "Tip: query DNS by TLS & TCP & HTTPS can get better anti pollution effect" -msgstr "Tip: 使用 TLS & TCP & HTTPS 方式查询DNS可以获得更好的抗污染效果" - -msgid "Tip: openlash will check the configuration file parameters to ensure that it works properly" -msgstr "Tip: OpenClash 启动时会检查配置文件参数【服务器(策略)组、规则、DNS设置】以确保能够正常工作" - -msgid "Tip: the nameserver group must have at least one server set when using custom DNS" -msgstr "Tip: 使用自定义DNS上游服务器时NameServer组必须设置至少一个服务器" - -msgid "Tip: the website access check shows the connection of the device currently logged in to the Luci page" -msgstr "Tip: 网站访问检查展示的是当前登录LUCI页面设备的连接情况" - -msgid "Tip: if you don not use IPv6, please turn off the DHCP service of IPv6, otherwise the connection will be abnormal" -msgstr "Tip: 如果不使用IPv6,请关闭IPv6的DHCP服务,否则会造成连接异常" - -msgid "Tip: you can update the version in the global settings page" -msgstr "Tip: 您可以在全局设置页面进行版本更新操作" - -msgid "Note: if the update fails, you can manually download and upload" -msgstr "注意:如更新失败可手动下载并上传" - -msgid "Note: the client may not support update, because the firmware with squashfs format will not release flash space after updating" -msgstr "注意:客户端可能无法更新,因为squashfs格式的固件更新后不会释放闪存空间" - -msgid "Compiled Version Selected" -msgstr "已选择编译版本" - -msgid "Release Branch Selected" -msgstr "已选择更新分支" - -msgid "CPU Architecture" -msgstr "处理器架构" - -msgid "Last Check Update" -msgstr "上次检查更新时间" - -msgid "Current Core" -msgstr "当前内核版本" - -msgid "Latest Core" -msgstr "最新内核版本" - -msgid "Core path:" -msgstr "内核路径:" - -msgid "Update Core" -msgstr "更新内核" - -msgid "Download Latest Core" -msgstr "下载最新版本内核" - -msgid "Client Update" -msgstr "客户端版本更新" - -msgid "Current Client" -msgstr "当前客户端版本" - -msgid "Update Client" -msgstr "更新客户端" - -msgid "Latest Client" -msgstr "最新客户端版本" - -msgid "Download Latest Client" -msgstr "下载最新版本客户端" - -msgid "Download" -msgstr "下载到本地" - -msgid "Restore Default Config" -msgstr "还原默认配置" - -msgid "One Click Check Update" -msgstr "一键检查更新" - -msgid "Failed to get the latest version. Please try again later!" -msgstr "最新版本获取失败,请稍后再试!" - -msgid "Are you sure want to restore the default config?" -msgstr "确定要还原默认配置吗?" - -msgid "Restore succeeded!" -msgstr "还原默认配置成功!" - -msgid "Restore failed!" -msgstr "还原默认配置失败!" - -msgid "Support syntax check, press" -msgstr "支持语法检查,按下" - -msgid "to enter full screen editing mode" -msgstr "进入全屏编辑模式" - -msgid "Switch page to Fake-IP mode" -msgstr "切换页面到 Fake-IP 模式" - -msgid "Switch page to Redir-Host mode" -msgstr "切换页面到 Redir-Host 模式" - -msgid "Page has been switched to Fake-IP mode!" -msgstr "页面已切换为Fake-IP模式!" - -msgid "Page has been switched to Redir-Host mode!" -msgstr "页面已切换为Redir-Host模式!" - -msgid "IP Address" -msgstr "IP 地址" - -msgid "Mainland" -msgstr "国内" - -msgid "Abroad" -msgstr "国外" - -msgid "Website Access Check" -msgstr "网站访问检查" - -msgid "Baidu Search" -msgstr "百度搜索" - -msgid "NetEase Music" -msgstr "网易云音乐" - -msgid "Querying..." -msgstr "查询中..." - -msgid "Testing..." -msgstr "检测中..." - -msgid "Access Timed Out" -msgstr "连接超时" - -msgid "Access Normal" -msgstr "连接正常" - -msgid "Access Denied" -msgstr "无法访问" - -msgid "Bind Network Interface" -msgstr "绑定网络接口" - -msgid "Default Interface Name:" -msgstr "当前系统默认接口:" - -msgid ",Try Enable If Network Loopback" -msgstr ", 如发生回环死机请尝试启用" - -msgid "Custom GEOIP URL" -msgstr "GEOIP数据库更新URL" - -msgid "Custom Chnroute6 Lists URL" -msgstr "大陆IPv6段更新URL" - -msgid "Custom Chnroute Lists URL" -msgstr "大陆IP段更新URL" - -msgid "Custom GEOIP Data URL, Click Button Below To Refresh After Edit" -msgstr "自定义GEOIP数据库的更新来源,编辑后点击下方按钮生效" - -msgid "Custom Chnroute Lists URL, Click Button Below To Refresh After Edit" -msgstr "自定义大陆IP段的更新来源,编辑后点击下方按钮生效" - -msgid "Custom Chnroute6 Lists URL, Click Button Below To Refresh After Edit" -msgstr "自定义大陆IPv6段的更新来源,编辑后点击下方按钮生效" - -msgid "(Default)" -msgstr "(默认)" - -msgid "(Default mmdb)" -msgstr "(默认,全部国家且仅写入iso_code和geoname_id)" - -msgid "(All Info mmdb)" -msgstr "(全部国家且且包含官方全部信息数据)" - -msgid "(Only CN)" -msgstr "(仅中国数据)" - -msgid "(Large Size)" -msgstr "(18MB大文件,请确保足够的剩余空间)" - -msgid "Other Rules Edit" -msgstr "设置第三方规则" - -msgid "Get Group Names" -msgstr "获取策略组" - -msgid "Get Group Names After Select Config File" -msgstr "选择配置文件后请点击以获取对应的策略组" - -msgid "Other Rules Name" -msgstr "第三方规则" - -msgid "Note" -msgstr "备注" - -msgid "Auto Restart" -msgstr "定时重启" - -msgid "Auto Restart OpenClash" -msgstr "定时重启插件" - -msgid "Restart Time (Every Week)" -msgstr "重启时间(每周)" - -msgid "Restart time (every day)" -msgstr "重启时间(每天)" - -msgid "DNS Port" -msgstr "DNS监听端口" - -msgid "Log Size (KB)" -msgstr "日志大小(KB)" - -msgid "Set Log File Size (KB)" -msgstr "设置日志文件大小(KB)" - -msgid "Download Log" -msgstr "下载日志" - -msgid "Convert Address" -msgstr "订阅转换服务地址" - -msgid "Note: There is A Risk of Privacy Leakage in Online Convert" -msgstr "注意:在线订阅转换存在隐私泄露风险" - -msgid "Remove Core" -msgstr "删除内核" - -msgid "Are you sure want to remove all core files?" -msgstr "确定要删除所有内核文件吗?" - -msgid "Remove succeeded!" -msgstr "删除成功!" - -msgid "Remove failed!" -msgstr "删除失败!" - -msgid "Import" -msgstr "导入配置信息" - -msgid "Export SSR" -msgstr "导出ssr配置信息" - -msgid "Import configuration information successfully." -msgstr "导入配置信息成功。" - -msgid "Invalid format." -msgstr "无效的格式。" - -msgid "User cancelled." -msgstr "用户已取消。" - -msgid "Paste sharing link here" -msgstr "在此处粘贴分享链接" - -msgid "Unable to copy SSR to clipboard." -msgstr "无法复制SSR网址到剪贴板。" - -msgid "Copy SSR to clipboard successfully." -msgstr "成功复制SSR网址到剪贴板。" - -msgid "Exclude Keyword Match Default" -msgstr "排除无效节点" - -msgid "Start Downloading" -msgstr "开始下载" - -msgid "Download Successful, Start Pre Update Test..." -msgstr "下载成功,开始进行更新前测试..." - -msgid "Pre Update Test Failed, The File is Saved in /tmp/opencrash.ipk, Please Try to Update Manually!" -msgstr "更新前测试失败,文件保存在/tmp/openclash.ipk,请尝试手动更新!" - -msgid "Pre Update Test Passed, Ready to Update and Please Do not Refresh The Page and Other Operations..." -msgstr "更新前测试通过,准备开始更新,更新过程请不要刷新页面和进行其他操作..." - -msgid "Uninstalling The Old Version, Please Do not Refresh The Page or Do Other Operations..." -msgstr "正在卸载旧版本,更新过程请不要刷新页面和进行其他操作..." - -msgid "Installing The New Version, Please Do Not Refresh The Page or Do Other Operations..." -msgstr "正在安装新版本,更新过程请不要刷新页面和进行其他操作..." - -msgid "OpenClash Update Successful, About To Restart!" -msgstr "OpenClash 更新成功,即将进行重启!" - -msgid "OpenClash Update Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually!" -msgstr "OpenClash 更新失败,文件保存在/tmp/openclash.ipk,请尝试手动更新!" - -msgid "Download Failed, Please Check The Network or Try Again Later!" -msgstr "下载失败,请检查网络或稍后再试!" - -msgid "Failed to Get Version Information, Please Try Again Later..." -msgstr "获取版本信息失败,请稍后再试..." - -msgid "OpenClash Has not Been Updated, Stop Continuing!" -msgstr "OpenClash 没有更新,停止继续操作!" - -msgid "Core Version Check Error, Please Try Again Later..." -msgstr "内核最新版本检测失败,请稍后再试..." - -msgid "Core Downloading, Please Try to Download and Upload Manually If Fails" -msgstr "版本内核正在下载,如下载失败请尝试手动下载并上传..." - -msgid "Core Download Successful, Start Update..." -msgstr "版本内核下载成功,开始更新..." - -msgid "Core Update Failed, Please Check The Network or Try Again Later!" -msgstr "版本内核更新失败,请检查网络或稍后再试!" - -msgid "Core Update Successful!" -msgstr "版本内核更新成功!" - -msgid "Core Update Failed. Please Make Sure Enough Flash Memory Space And Try Again!" -msgstr "版本内核更新失败,请确认设备闪存空间足够后再试!" - -msgid "No Compiled Version Selected, Please Select In Global Settings And Try Again!" -msgstr "未选择编译版本,请到全局设置中选择后再试!" - -msgid "Core Has Not Been Updated, Stop Continuing Operation!" -msgstr "版本内核没有更新,停止继续操作!" - -msgid "Start Downloading Third Party Rules in Use..." -msgstr "开始下载使用中的第三方规则..." - -msgid "Warrning: Multiple Other-Rules-Configurations Enabled, Ignore..." -msgstr "警告:检测到启用了多个第三方规则配置,忽略后续配置..." - -msgid "Download Successful, Start Preprocessing Rule File..." -msgstr "下载成功,开始预处理规则文件..." - -msgid "Error: Ruby Works Abnormally, Please Check The Ruby Library Depends!" -msgstr "错误:Ruby依赖异常,无法校验配置文件,请确认ruby依赖工作正常后重试!" - -msgid "Error:" -msgstr "错误:" - -msgid "Rule File Format Validation Failed, Please Try Again Later..." -msgstr "规则文件格式校验失败,请稍后再试..." - -msgid "Error: Updated Others Rules" -msgstr "错误:更新的第三方规则文件" - -msgid "Has No Rules Field, Update Exit..." -msgstr "规则部分校验失败,请稍后再试..." - -msgid "Has Incompatible Proxy-Group, Update Exit, Please Wait For OpenClash Update To Adapt..." -msgstr "含有未支持的新策略组,更新停止,请等待OpenClash版本更新适配..." - -msgid "Check The Downloaded Rule File For Updates..." -msgstr "检查下载的规则文件是否有更新..." - -msgid "Detected that The Downloaded Rule File Has Been Updated, Starting To Replace..." -msgstr "检测到下载的规则文件有更新,开始替换..." - -msgid "Other Rules" -msgstr "第三方规则文件" - -msgid "Update Successful!" -msgstr "更新成功!" - -msgid "Updated Other Rules" -msgstr "检测到更新的规则文件" - -msgid "No Change, Do Nothing!" -msgstr "没有更新,停止继续操作!" - -msgid "Update Error, Please Try Again Later..." -msgstr "下载失败,请检查网络或稍后再试..." - -msgid "Other Rules Not Enable, Update Stop!" -msgstr "未启用第三方规则,更新程序终止!" - -msgid "Get Other Rules Settings Faild, Update Stop!" -msgstr "未找到第三方规则配置,更新程序终止!" - -msgid "is Replaced Successfully, Start Picking Nodes..." -msgstr "替换成功,检测到已启用节点筛选,开始挑选节点..." - -msgid "is Replaced Successfully, Start to Reserving..." -msgstr "替换成功,检测到已启用保留配置,开始进行设置..." - -msgid "Config File Download Successful, Check If There is Any Update..." -msgstr "配置文件下载成功,检查是否有更新..." - -msgid "Are Updates, Start Replacing..." -msgstr "有更新,开始替换..." - -msgid "Download Successful, Start To Create..." -msgstr "下载成功,本地没有配置文件,开始创建..." - -msgid "Error: Ruby Works Abnormally, Please Check The Ruby Library Depends!" -msgstr "错误:Ruby依赖异常,无法校验配置文件,请确认ruby依赖工作正常后重试!" - -msgid "Config File Format Validation Failed..." -msgstr "配置文件格式校验失败..." - -msgid "Error: Updated Config" -msgstr "错误:更新的配置文件" - -msgid "Has No Proxy Field, Update Exit..." -msgstr "节点部分校验失败..." - -msgid "Start Updating Config File" -msgstr "开始更新配置文件" - -msgid "Config File Format Validation Failed, Trying To Download Without Agent..." -msgstr "配置文件格式校验失败,尝试不使用代理下载配置文件..." - -msgid "Has No Proxy Field, Trying To Download Without Agent..." -msgstr "节点部分校验失败,尝试不使用代理下载配置文件..." - -msgid "Error: Config File" -msgstr "错误:配置文件" - -msgid "Subscribed Failed, Trying to Download Without Agent..." -msgstr "订阅失败,尝试不使用代理下载配置文件..." - -msgid "Start Downloading The Chnroute Cidr List..." -msgstr "开始下载大陆IP白名单..." - -msgid "Start Downloading The Chnroute6 Cidr List..." -msgstr "开始下载大陆IPv6白名单..." - -msgid "Chnroute Cidr List Download Success, Check Updated..." -msgstr "大陆IP白名单下载成功,检查版本是否更新..." - -msgid "Chnroute6 Cidr List Download Success, Check Updated..." -msgstr "大陆IPv6白名单下载成功,检查版本是否更新..." - -msgid "Chnroute Cidr List Has Been Updated, Starting To Replace The Old Version..." -msgstr "大陆IP白名单有更新,开始替换旧版本..." - -msgid "Chnroute6 Cidr List Has Been Updated, Starting To Replace The Old Version..." -msgstr "大陆IPv6白名单有更新,开始替换旧版本..." - -msgid "Chnroute Cidr List Update Successful!" -msgstr "大陆IP白名单更新成功!" - -msgid "Chnroute6 Cidr List Update Successful!" -msgstr "大陆IPv6白名单更新成功!" - -msgid "Updated Chnroute Cidr List No Change, Do Nothing..." -msgstr "大陆IP白名单没有更新,停止继续操作..." - -msgid "Updated Chnroute6 Cidr List No Change, Do Nothing..." -msgstr "大陆IPv6白名单没有更新,停止继续操作..." - -msgid "Chnroute Cidr List Update Error, Please Try Again Later..." -msgstr "大陆IP白名单下载失败,请检查网络或稍后再试..." - -msgid "Chnroute6 Cidr List Update Error, Please Try Again Later..." -msgstr "大陆IPv6白名单下载失败,请检查网络或稍后再试..." - -msgid "Start Downloading Geoip Database..." -msgstr "开始下载 GEOIP 数据库..." - -msgid "Geoip Database Download Success, Check Updated..." -msgstr "GEOIP 数据库下载成功,检查数据库版本是否更新..." - -msgid "Geoip Database Has Been Updated, Starting To Replace The Old Version..." -msgstr "GEOIP 数据库版本有更新,开始替换数据库版本..." - -msgid "Geoip Database Update Successful!" -msgstr "GEOIP 数据库更新成功!" - -msgid "Updated Geoip Database No Change, Do Nothing..." -msgstr "数据库版本没有更新,停止继续操作..." - -msgid "Geoip Database Update Error, Please Try Again Later..." -msgstr "GEOIP 数据库下载失败,请检查网络或稍后再试..." - -msgid "Start Getting" -msgstr "开始获取" - -msgid "Groups Setting..." -msgstr "的策略组配置..." - -msgid "Group Setting..." -msgstr "的策略组配置..." - -msgid "Proxy-providers Setting..." -msgstr "的代理集配置..." - -msgid "Proxy-provider Setting..." -msgstr "的代理集配置..." - -msgid "Proxies Setting..." -msgstr "的服务器节点配置..." - -msgid "Proxy Setting..." -msgstr "的服务器节点配置..." - -msgid "Read Error, Config File" -msgstr "读取错误,配置文件" - -msgid "Abnormal!" -msgstr "异常!" - -msgid "Abnormal!" -msgstr "异常!" - -msgid "Deleting Old Configuration..." -msgstr "正在删除旧配置..." - -msgid "Error: Unable To Parse Config File, Please Check And Try Again!" -msgstr "配置文件校验失败,请检查配置文件后重试!" - -msgid "Start Writing" -msgstr "开始写入" - -msgid "Group To Config File..." -msgstr "策略组到配置文件..." - -msgid "Proxy To Config File..." -msgstr "节点到配置文件..." - -msgid "Proxy-provider To Config File..." -msgstr "代理集到配置文件..." - -msgid "Unable To Parse, Please Choose One-key Function To Create Config File..." -msgstr "的信息读取失败,无法进行修改,请选择一键创建配置文件..." - -msgid "Setting Secondary DNS Server List..." -msgstr "正在设置第二DNS服务器列表..." - -msgid "Setting Fake IP Filter..." -msgstr "正在设置Fake-IP黑名单..." - -msgid "Deleting" -msgstr "删除" - -msgid "Proxy-providers That no Longer Exists in Subscription" -msgstr "订阅中已不存在的代理集..." - -msgid "Proxies That no Longer Exists in Subscription" -msgstr "订阅中已不存在的节点..." - -msgid "Read Successful!" -msgstr "读取完成!" - -msgid "Write Successful!" -msgstr "写入完成!" - -msgid "Creating By Using Connershua (rule set) Rules..." -msgstr "使用ConnersHua(规则集)规则创建中..." - -msgid "Creating By Using lhie1 Rules..." -msgstr "使用lhie1规则创建中..." - -msgid "Creating By Using ConnersHua Return Rules..." -msgstr "使用ConnersHua回国规则创建中..." - -msgid "Created Successful, Updating Proxies, Proxy-providers, Groups..." -msgstr "创建完成,正在更新服务器、代理集、策略组信息..." - -msgid "Proxies, Proxy-providers, Groups Edited Successful, Updating Config File" -msgstr "服务器、代理集、策略组信息修改完成,正在更新配置文件" - -msgid "Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!" -msgstr "警告:由于第三方规则设置中的策略组名称与配置文件中的不符或不存在,停止继续设置第三方规则!" - -msgid "Error: Missing Porxy-Group's Name, Stop Setting The Other Rules!" -msgstr "错误:丢失或未指定第三方规则中的部分策略组,停止继续设置第三方规则!" - -msgid "Detected That The nameserver DNS Option Has No Server Set, Starting To Complete..." -msgstr "检测到DNS选项下的Nameserver未设置服务器,开始补全..." - -msgid "Error: Failed To Download Proxy-providers, Please Check The Log Page For Detailed error information!" -msgstr "错误: 代理集文件下载失败,请到日志页面查看详细错误信息!" - -msgid "Error: Failed To Download Rule-providers, Please Check The Log Page For Detailed error information!" -msgstr "错误: 规则集文件下载失败,请到日志页面查看详细错误信息!" - -msgid "Warning: Providers File Check Timeout, If Failed To start, Please Check The Log Page For Detailed error information!" -msgstr "警告: 代理集文件检查超时,如启动失败请到日志页面查看详细信息!" - -msgid "Error: Nameserver Option Must Be Setted, Stop Customing DNS Servers" -msgstr "错误: 配置文件DNS选项下的Nameserver必须设置服务器,已停止设置自定义DNS服务器!" - -msgid "Config File Does Not Exist, You Have Set Subscription Information, Ready To Download..." -msgstr "配置文件不存在,您已设置订阅信息,准备开始下载..." - -msgid "Error: Config Not Found" -msgstr "错误: 缺少配置文件,请上传或更新配置文件!" - -msgid "Error: Config File Format Validation Failed..." -msgstr "错误:配置文件格式校验失败..." - -msgid "Tip: Detected The Exclusive Function of The TUN Core, Use TUN Core to Start..." -msgstr "提示: 检测到配置了 TUN 内核专属功能,调用 TUN 内核启动..." - -msgid "Tip: No Special Configuration Detected, Use Dev Core to Start..." -msgstr "提示: 未检测到特殊配置,调用 Dev 内核启动..." - -msgid "Tip: Detected that the Dev Core is not Installed, Use TUN Core to Start..." -msgstr "提示: 检测到 Dev 内核未安装,调用 TUN 内核启动..." - -msgid "Tip: Detected that the Dev Core is not Installed, Use Game Core to Start..." -msgstr "提示: 检测到 Dev 内核未安装,调用 Game 内核启动..." - -msgid "Tip: Detected that the Dev Core is not Installed, Use Game Core to Start..." -msgstr "提示: 检测到 Dev 内核未安装,调用 Game 内核启动..." - -msgid "Tip: Detected that the GEOIP Database is not Installed, Ready to Download..." -msgstr "提示: 检测到GEOIP数据库文件不存在,准备开始下载..." - -msgid "Tip: Detected that the Core is not Installed, Ready to Download..." -msgstr "提示: 检测到内核文件不存在,准备开始下载..." - -msgid "Tip: Detected that the Chnroute Cidr List is not Installed, Ready to Download..." -msgstr "提示: 检测到大陆白名单列表不存在,准备开始下载..." - -msgid "Error: Could Not Load The Capsh Library, Please Verify The Capsh Shell Library Work Well..." -msgstr "错误:Capsh异常,请尝试重新安装依赖【libcap】和相应的Capsh库,终止启动..." - -msgid "Tip: You Could Download And Re-Install The libcap & libcap-bin Library From The Address Give" -msgstr "提示: 你可以尝试从给出的地址中查找、下载并重新安装架构对应的 libcap 和 libcap-bin 依赖" - -msgid "Error: Get DNS 'listen' Option Error, OpenClash Can Not Start With Raw Config File" -msgstr "错误: 无法获取DNS部分的监听端口设置, OpenClash 使用原始配置文件启动失败" - -msgid "Error: Get DNS 'enhanced-mode' Option Error, OpenClash Can Not Start With Raw Config File" -msgstr "错误: 无法获取DNS部分的运行模式设置, OpenClash 使用原始配置文件启动失败" - -msgid "Error: Get General 'redir-port' Option Error, OpenClash Can Not Start With Raw Config File" -msgstr "错误: 无法获取General部分的转发端口设置, OpenClash 使用原始配置文件启动失败" - -msgid "Error: OpenClash Can Not Start, Please Check The Error Info And Try Again!" -msgstr "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" - -msgid "Error: OpenClash Can Not Start, Try Use Raw Config Restart Again..." -msgstr "错误: OpenClash 启动失败,尝试使用原始配置文件启动..." - -msgid "Error: OpenClash Can Not Start, Try Use Backup Rules Start Again..." -msgstr "错误: OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序..." - -msgid "Found 53 Port Hijacked, Clean Up Firewall Rules..." -msgstr "发现53端口被劫持,清理防火墙规则..." - -msgid "OpenClash Start Running..." -msgstr "OpenClash 开始启动..." - -msgid "Step 1: Get The Configuration..." -msgstr "第一步: 获取配置..." - -msgid "Step 2: Check The Components..." -msgstr "第二步: 组件运行前检查..." - -msgid "Step 3: Modify The Config File..." -msgstr "第三步: 修改配置文件..." - -msgid "Step 4: Start Running The Clash Core..." -msgstr "第四步: 启动主程序..." - -msgid "Step 5: Check The Core Status..." -msgstr "第五步: 检查内核启动状态..." - -msgid "Step 6: Wait For The File Downloading..." -msgstr "第六步: 等待主程序下载外部文件..." - -msgid "Step 7: Set Control Panel..." -msgstr "第七步: 设置控制面板..." - -msgid "Step 8: Set Firewall Rules..." -msgstr "第八步: 设置防火墙规则..." - -msgid "Step 9: Restart Dnsmasq..." -msgstr "第九步: 重启 Dnsmasq 程序..." - -msgid "Step 10: Add Cron Rules, Start Daemons..." -msgstr "第十步: 添加计划任务,启动进程守护程序..." - -msgid "OpenClash Start Successful!" -msgstr "OpenClash 启动成功,请等待服务器上线!" - -msgid "Warning: OpenClash Start Successful, Please Note That Network May Abnormal With IPv6's DHCP Server" -msgstr "警告:OpenClash 启动成功,检测到您启用了IPv6的DHCP服务,可能会造成连接异常!" - -msgid "Warning: OpenClash Start Successful With Raw Config File, Please Note That It's Restricted Mode Now" -msgstr "警告:OpenClash 使用原始配置文件启动成功,部分设置可能未生效!" - -msgid "OpenClash Stoping..." -msgstr "OpenClash 开始关闭..." - -msgid "Step 1: Backup The Current Groups State..." -msgstr "第一步: 备份当前策略组状态..." - -msgid "Step 2: Delete OpenClash Firewall Rules..." -msgstr "第二步: 删除 OpenClash 防火墙规则..." - -msgid "Step 3: Close The OpenClash Daemons..." -msgstr "第三步: 关闭 OpenClash 守护程序..." - -msgid "Step 4: Close The Clash Core Process..." -msgstr "第四步: 关闭 Clash 主程序..." - -msgid "Step 5: Restart Dnsmasq..." -msgstr "第五步: 重启 Dnsmasq 程序..." - -msgid "Step 6: Delete OpenClash Residue File..." -msgstr "第六步:删除 OpenClash 残留文件..." - -msgid "OpenClash Already Stop!" -msgstr "OpenClash 关闭成功!" - -msgid "Reload OpenClash Firewall Rules..." -msgstr "重置 OpenClash 防火墙规则..." - -msgid "Warning: OpenClash Now Disabled, Need Start From Luci Page, Exit..." -msgstr "警告:OpenClash 目前处于未启用状态,请从插件页面启动本插件,脚本退出..." - -msgid "Warning: Multiple Restart Scripts Running, Exit..." -msgstr "警告:多个 OpenClash 启动脚本运行中,此脚本退出..." - -msgid "Watchdog: Multiple Clash Processes, Kill All..." -msgstr "守护程序:检测到多个 Clash 内核运行,清理中..." - -msgid "Watchdog: Clash Core Problem, Restart..." -msgstr "守护程序:检测到 Clash 内核崩溃,重启中..." - -msgid "Watchdog: Already Restart 3 Times With Clash Core Problem, Auto-Exit..." -msgstr "守护程序:已尝试自动重启三次 Clash 内核,为防止频繁重启造成严重后果,OpenClash 将停止运行..." - -msgid "Watchdog: Log Size Limit, Clean Up All Log Records..." -msgstr "守护程序:因日志大小限制,清理所有日志内容..." - -msgid "Watchdog: Reset Firewall For Enabling Redirect..." -msgstr "守护程序:检测到转发规则顺序错误,重置插件防火墙规则..." - -msgid "Watchdog: Force Reset DNS Hijack..." -msgstr "守护程序:重新设置 Dnsmasq 的 DNS 转发选项..." - -msgid "Rule File" -msgstr "规则文件" - -msgid "Download Error!" -msgstr "下载失败!" - -msgid "Download Successful!" -msgstr "下载成功!" - -msgid "Switch To The New Proxy When The Delay Difference Between Old and The Fastest Currently is Greater Than This Value" -msgstr "仅当旧代理和当前最快代理之间的延迟差大于此值时,才会切换到新代理" - -msgid "Url-Test Group Tolerance (ms)" -msgstr "Url-Test 策略组切换灵敏度(ms)" - -msgid "Attention:" -msgstr "注意事项:" - -msgid "The game proxy is a test function and does not guarantee the availability of rules" -msgstr "游戏代理为测试功能,不保证规则可用性" - -msgid "Preparation steps:" -msgstr "准备步骤:" - -msgid "1. In the page, create the policy group and node you are going to use, and apply the configuration (when adding nodes, you must select the policy group you want to join). Policy group type suggestion: fallback, game nodes must support UDP" -msgstr "1、在《服务器与策略组管理》页面创建您准备使用的策略组和节点,并应用配置(节点添加时必须选择要加入的策略组),策略组类型建议:FallBack,游戏节点必须支持UDP" - -msgid "2. Click the or button to enter the rule list and download the rules you want to use" -msgstr "2、点击《管理第三方游戏规则》或者《管理第三方规则集》按钮进入规则列表下载您要使用的规则" - -msgid "3. On this page, set the corresponding configuration file and policy group of the rule you have downloaded, and save the settings" -msgstr "3、在此页面设置您已下载的规则的对应配置文件、策略组并保存设置" - -msgid "4. Install the TUN core" -msgstr "4、安装TUN内核" - -msgid "When setting this page, if the groups is empty, please go to the page to add" -msgstr "本页设置时如策略组为空,请先到《服务器与策略组管理》页面进行添加" - -msgid "Introduction to rule set usage: https://lancellc.gitbook.io/clash/clash-config-file/rule-provider" -msgstr "规则集使用介绍:https://lancellc.gitbook.io/clash/clash-config-file/rule-provider" - -msgid "Subconverter external configuration (subscription conversion template) Description: https://github.com/tindy2013/subconverter#external-configuration-file" -msgstr "subconverter 外部配置(订阅转换模板)说明:https://github.com/tindy2013/subconverter#external-configuration-file" - -msgid "If you need to customize the external configuration file (subscription conversion template), please write it according to the instructions, upload it to the accessible location of the external network, and fill in the address correctly when using it" -msgstr "如需自定义外部配置文件(订阅转换模板),请按照说明编写后上传至外部网络可访问的位置,并在使用时正确填写地址" - -msgid "If you have a recommended external configuration file (subscription conversion template), you can modify by following The file format of /usr/share/opencrash/res/sub_ini.list and pr" -msgstr "如您有值得推荐的外部配置文件(订阅转换模板),可以按照 /usr/share/openclash/res/sub_ini.list 的文件格式修改后提交PR" - -msgid "To restore the default configuration, try accessing:" -msgstr "如遇到配置丢失或者需要还原默认配置,请尝试访问地址:" - -msgid "Take Effect If Fallback DNS Setted, Prevent DNS Pollution" -msgstr "只有在配置文件设置了 Fallback 组的DNS时才会生效,正确设置可以有效防止DNS污染" - -msgid "Custom Fallback-Filter" -msgstr "自定义Fallback-Filter" - -msgid "Error: Fallback-Filter Need fallback of DNS Been Setted, Ignore..." -msgstr "错误:只有在配置文件设置了Fallback组的DNS时Fallback-Filter才会生效,跳过此项修改..." - -msgid "Error: Unable To Parse Custom Fallback-Filter File, Ignore..." -msgstr "错误:读取自定义的Fallback-Filter设置失败,跳过此项修改..." - -msgid "Simple & trustworthy" -msgstr "简单 & 值得信赖" - -msgid "Cross-platform Support" -msgstr "丰富的第三方应用兼容性" - -msgid "Global Acceleration Network" -msgstr "全球网络基础设施" - -msgid "Easy to Use" -msgstr "操作简易" - -msgid "Intelligent Shunting" -msgstr "智能分流" - -msgid "Perfect Technical Support" -msgstr "完善技术支持" - -msgid "Plan Expiration Time" -msgstr "到期时间" - -msgid "Account Balances" -msgstr "账户余额" - -msgid "Aff Balances" -msgstr "返利余额" - -msgid "Account Integral" -msgstr "账户积分" - -msgid "Today Used" -msgstr "今日已用" - -msgid "Plan Used" -msgstr "本月已用" - -msgid "Plan Unused" -msgstr "剩余流量" - -msgid "Plan Traffic" -msgstr "套餐流量" - -msgid "Checkin" -msgstr "试试手气" - -msgid "Dler Cloud Account Login Failed! Please Check And Try Again..." -msgstr "Dler Cloud 账户登录失败!请检查账户信息并重试..." - -msgid "Dler Cloud Checkin Failed! Please Check And Try Again..." -msgstr "Dler Cloud 签到失败,请稍后再试!" - -msgid "Account Email Address" -msgstr "账号地址" - -msgid "Account Password" -msgstr "账号密码" - -msgid "Checkin Interval (hour)" -msgstr "签到间隔(小时)" - -msgid "Checkin Multiple" -msgstr "签到倍数" - -msgid "Multiple Must Be a Positive Integer and No More Than 50" -msgstr "倍数必须是正整数且不大于50" - -msgid "Dler Cloud Checkin Successful, Result:" -msgstr "Dler Cloud 签到成功,结果:" - -msgid "Dler Cloud Checkin Failed, Result:" -msgstr "Dler Cloud 签到失败,结果:" - -msgid "Downloading Rule..." -msgstr "正在下载规则..." - -msgid "Downloading Fail" -msgstr "下载失败" - -msgid "Downloading Successful" -msgstr "下载成功" - -msgid "Rule No Change" -msgstr "规则没有更新" - -msgid "Downloading Timeout" -msgstr "下载超时" - -msgid "Rule Project:" -msgstr "规则项目:" - -msgid "Rule Project:" -msgstr "规则项目:" - -msgid "Login..." -msgstr "登录中..." - -msgid "Dler Cloud Login Successful" -msgstr "Dler Cloud 登录成功" - -msgid "Dler Cloud Login Faild" -msgstr "Dler Cloud 登录失败" - -msgid "Login Account" -msgstr "登录账号" - -msgid "Dler Cloud Logout Successful" -msgstr "Dler Cloud 已成功退出" - -msgid "Dler Cloud Logout Faild" -msgstr "Dler Cloud 退出失败" - -msgid "Logout Account" -msgstr "退出账号" - -msgid "Account Login" -msgstr "账号登录" - -msgid "Account logged in" -msgstr "账号已登录" - -msgid "Account not logged in" -msgstr "账号未登录" - -msgid "Logout..." -msgstr "退出中..." - -msgid "Error Login Info" -msgstr "登录信息错误" - -msgid "Warning: Proxy is no longer used. Auto replaced by proxies" -msgstr "警告:【Proxy】写法已不再支持,自动替换为proxies" - -msgid "Warning: Proxy Group is no longer used. Auto replaced by proxy-groups" -msgstr "警告:【Proxy Group】写法已不再支持,自动替换为proxy-groups" - -msgid "Warning: Rule is no longer used. Auto replaced by rules" -msgstr "警告:【Rule】写法已不再支持,自动替换为rules" - -msgid "Warning: rule-provider is no longer used. Auto replaced by rule-providers" -msgstr "警告:【rule-provider】写法已不再支持,自动替换为rule-providers" - -msgid "Error: Load File Error," -msgstr "错误:文件解析失败," - -msgid "Error: Set General Error," -msgstr "错误:修改General配置失败," - -msgid "Error: Set Hosts Rules Error," -msgstr "错误:修改Hosts配置失败," - -msgid "Error: Set Fake-IP-Filter Error," -msgstr "错误:修改Fake-IP-Filter配置失败," - -msgid "Error: Set Nameserver-Policy Error," -msgstr "错误:修改Nameserver-Policy配置失败," - -msgid "Error: Set Custom Rules Error," -msgstr "错误:设置自定义规则失败," - -msgid "Error: Set BT/P2P DIRECT Rules Error," -msgstr "错误:设置仅代理命中规则流量(BT/P2P直连)失败," - -msgid "Error: Set 198.18.0.1/16 REJECT Rule Error," -msgstr "错误:设置198.18.0.1/16(REJECT)规则失败," - -msgid "Error: Set lhie1 Rules Error," -msgstr "错误:设置第三方规则(lhie1)失败," - -msgid "Error: Set ConnersHua Rules Error," -msgstr "错误:设置第三方规则(ConnersHua)失败," - -msgid "Error: Set ConnersHua Return Rules Error," -msgstr "错误:设置第三方规则(ConnersHua 回国)失败," - -msgid "Error: Filter Proxies Error," -msgstr "错误:节点筛选失败," - -msgid "Error: Unable To Parse Config File," -msgstr "错误:配置文件解析失败," - -msgid "Error: Unable To Parse Updated Rules File," -msgstr "错误:更新的规则文件解析失败," - -msgid "Error: Edit Provider Path Error," -msgstr "错误:修改集路径失败," - -msgid "Error: Set Url-Test Group Tolerance Error," -msgstr "错误:修改Url-Test策略组容忍值失败," - -msgid "Error: Game Rule Merge Error," -msgstr "错误:游戏规则合并失败," - -msgid "Error: Game Proxy Merge Error," -msgstr "错误:游戏规则策略组合并失败," - -msgid "Error: Rule Set Add Error," -msgstr "错误:规则集Rule-Set规则添加失败," - -msgid "Error: Custom Rule Provider Merge Error," -msgstr "错误:规则集Rule Provider合并失败," - -msgid "Error: Restore Backup Rules Error," -msgstr "错误:还原默认规则失败," - -msgid "Error: Restore Backup Rules Error," -msgstr "错误:还原默认规则失败," - -msgid "Error: Resolve Proxy-provider Error," -msgstr "错误:解析代理集失败," - -msgid "Error: Resolve Proxy Error," -msgstr "错误:节点解析失败," - -msgid "Error: Resolve Proxy-group Error," -msgstr "错误:策略组解析失败," - -msgid "Error: Set default-nameserver Error," -msgstr "错误:修改default-nameserver配置失败," - -msgid "Error: Netflix IP Rules Complete Error," -msgstr "错误:Netflix IP 规则补全失败," - -msgid "switching succeeded!" -msgstr "切换成功!" - -msgid "switching failed!" -msgstr "切换失败!" - -msgid "Current Config File" -msgstr "当前配置文件" - -msgid "Official Website" -msgstr "官方网站" - -msgid "Up:" -msgstr "上传:" - -msgid "Down:" -msgstr "下载:" - -msgid "Up Total:" -msgstr "上传总量:" - -msgid "Down Total:" -msgstr "下载总量:" - -msgid "Connections:" -msgstr "活动连接:" - -msgid "Ram:" -msgstr "内存占用:" - -msgid "CPU:" -msgstr "CPU占用:" - -msgid "Could not find any connection logs!" -msgstr "找不到任何连接日志!" - -msgid "Some error occurred!" -msgstr "发生了一些错误!" - -msgid "Click to Test" -msgstr "点击测试" - -msgid "Connection Test (Current Browser)" -msgstr "连接测试(当前浏览器)" - -msgid "Backup File" -msgstr "备份文件" - -msgid "Backup File Restore Successful!" -msgstr "备份文件恢复成功!" - -msgid "Backup OpenClash" -msgstr "备份 OpenClash" - -msgid "Not Select" -msgstr "未选择" - -msgid "1. It may be that the plugin is not running" -msgstr "1. 可能是插件未在运行" - -msgid "2. It may be that the cache causes the browser to directly use the IP for access" -msgstr "2. 可能是缓存导致浏览直接使用IP地址进行访问" - -msgid "3. It may be that DNS hijacking did not take effect, so clash unable to reverse the domain name" -msgstr "3. 可能是DNS未劫持成功,导致Clash无法正确反推出域名连接" - -msgid "4. It may be that the filled address cannot be resolved and connected" -msgstr "4. 可能是所填地址无法进行解析和连接" - -msgid "OpenClash Log" -msgstr "插件日志" - -msgid "Core Log" -msgstr "内核日志" - -msgid "Append Upstream DNS" -msgstr "追加上游DNS" - -msgid "Append The Upstream Assigned DNS And Gateway IP To The Nameserver" -msgstr "将上游分配的DNS和网关IP追加到Nameserver" - -msgid "All Groups" -msgstr "所有策略组" - -msgid "Are you sure want to switch the running mode?" -msgstr "确认要切换运行模式吗?" - -msgid "Tip: Because of the file" -msgstr "提示: 由于文件" - -msgid "modificated, Pause quick start..." -msgstr "被修改,暂停快速启动..." - -msgid "Click to Update" -msgstr "点击更新规则" - -msgid "Prefetch Netflix, Disney Plus Domains" -msgstr "实验性:预解析 Netflix、Disney Plus 域名" - -msgid "Prevent Some Devices From Directly Using IP Access To Cause Unlocking Failure" -msgstr "防止部分设备直接使用IP访问导致DNS解锁失败" - -msgid "Update Preset Domains List" -msgstr "更新预置域名列表" - -msgid "Domains Prefetch Interval(min)" -msgstr "域名预解析间隔(分钟)" - -msgid "Tip: Start Prefetch Netflix Domains..." -msgstr "提示:开始预解析 Netflix 域名..." - -msgid "Tip: Netflix Domains Prefetch Finished!" -msgstr "提示:Netflix 域名预解析完成!" - -msgid "Tip: Start Prefetch Disney Plus Domains..." -msgstr "提示:开始预解析 Disney Plus 域名..." - -msgid "Tip: Disney Plus Domains Prefetch Finished!" -msgstr "提示:Disney Plus 域名预解析完成!" - -msgid "Persistence Fake-IP" -msgstr "Fake-IP 持久化" - -msgid "Cache Fake-IP DNS Resolution Records To File, Improve The Response Speed After Startup" -msgstr "存储Fake-IP的DNS解析记录到文件,提升内核启动后的反应速度和稳定性" - -msgid "About to open fast.com" -msgstr "确认后将打开 fast.com 进行测速" - -msgid "Please make sure the OpenClash works normally" -msgstr "请确保 OpenClash 已在正常运行" - -msgid "The domains catch time is one minute" -msgstr "域名抓取功能运行时间为一分钟" - -msgid "You can also try to catch while unlocking device playing" -msgstr "您也可以在正常解锁的设备播放时尝试抓取" - -msgid "The catch result will be automatically saved" -msgstr "抓取结果将自动保存" - -msgid "Click to Catch" -msgstr "手动抓取域名" - -msgid "Catch Netflix" -msgstr "手动抓取 Netflix 域名" - -msgid "No domain names were catched..." -msgstr "未抓取到任何域名..." - -msgid "Will Run Once Immediately After Started, The Interval Does Not Need To Be Too Short (Take Effect Immediately After Commit)" -msgstr "启动后会立即执行一次,间隔无需太短(修改后保存配置即可生效)" - -msgid "Test failed" -msgstr "检测失败" - -msgid "OpenClash Start Failed" -msgstr "OpenClash 启动失败" - -msgid "interface-name" -msgstr "指定出口网卡" - -msgid "routing-mark" -msgstr "指定路由标记" - -msgid "Streaming Enhance" -msgstr "流媒体增强" - -msgid "Auto Select Unlock Proxy" -msgstr "自动选择解锁节点" - -msgid "Auto Select Proxy For Streaming Unlock, Support Netflix, Disney Plus, HBO And YouTube Premium, etc" -msgstr "自动选择解锁节点,支持 Netflix、Disney Plus、HBO 和 YouTube Premium 等" - -msgid "Auto Select Interval(min)" -msgstr "自动选择(检测)间隔(分钟)" - -msgid "Expand Group" -msgstr "展开策略组" - -msgid "Automatically Expand The Group When Selected" -msgstr "自动展开嵌套的策略组并进行解锁检测,启用后可能会造成网络不稳定" - -msgid "Netflix Group Filter" -msgstr "Netflix 策略组筛选" - -msgid "Disney Plus Group Filter" -msgstr "Disney Plus 策略组筛选" - -msgid "HBO Now Group Filter" -msgstr "HBO Now 策略组筛选" - -msgid "HBO Max Group Filter" -msgstr "HBO Max 策略组筛选" - -msgid "HBO GO Asia Group Filter" -msgstr "HBO GO Asia 策略组筛选" - -msgid "YouTube Premium Group Filter" -msgstr "YouTube Premium 策略组筛选" - -msgid "TVB Anywhere+ Group Filter" -msgstr "TVB Anywhere+ 策略组筛选" - -msgid "Amazon Prime Video Group Filter" -msgstr "Amazon Prime Video 策略组筛选" - -msgid "Netflix Unlock Region Filter" -msgstr "Netflix 解锁区域筛选" - -msgid "Disney Plus Unlock Region Filter" -msgstr "Disney Plus 解锁区域筛选" - -msgid "HBO Max Unlock Region Filter" -msgstr "HBO Max 解锁区域筛选" - -msgid "HBO GO Asia Unlock Region Filter" -msgstr "HBO GO Asia 解锁区域筛选" - -msgid "YouTube Premium Unlock Region Filter" -msgstr "YouTube Premium 解锁区域筛选" - -msgid "TVB Anywhere+ Unlock Region Filter" -msgstr "TVB Anywhere+ 解锁区域筛选" - -msgid "Amazon Prime Video Unlock Region Filter" -msgstr "Amazon Prime Video 解锁区域筛选" - -msgid "Tip: Start Auto Select Proxy For Netflix Unlock..." -msgstr "提示:开始自动选择(检测)Netflix 解锁节点..." - -msgid "Tip: Start Auto Select Proxy For Disney Plus Unlock..." -msgstr "提示:开始自动选择(检测)Disney Plus 解锁节点..." - -msgid "Tip: Start Auto Select Proxy For HBO Now Unlock..." -msgstr "提示:开始自动选择(检测)HBO Now 解锁节点..." - -msgid "Tip: Start Auto Select Proxy For HBO Max Unlock..." -msgstr "提示:开始自动选择(检测)HBO Max 解锁节点..." - -msgid "Tip: Start Auto Select Proxy For HBO GO Asia Unlock..." -msgstr "提示:开始自动选择(检测)HBO GO Asia 解锁节点..." - -msgid "Tip: Start Auto Select Proxy For YouTube Premium Unlock..." -msgstr "提示:开始自动选择(检测)YouTube Premium 解锁节点..." - -msgid "Tip: Start Auto Select Proxy For TVB Anywhere+ Unlock..." -msgstr "提示:开始自动选择(检测)TVB Anywhere+ 解锁节点..." - -msgid "Tip: Start Auto Select Proxy For Amazon Prime Video Unlock..." -msgstr "提示:开始自动选择(检测)Amazon Prime Video 解锁节点..." - -msgid "Netflix Group:" -msgstr "Netflix 策略组:" - -msgid "Disney Plus Group:" -msgstr "Disney Plus 策略组:" - -msgid "HBO Now Group:" -msgstr "HBO Now 策略组:" - -msgid "HBO Max Group:" -msgstr "HBO Max 策略组:" - -msgid "HBO GO Asia Group:" -msgstr "HBO GO Asia 策略组:" - -msgid "TVB Anywhere+ Group:" -msgstr "TVB Anywhere+ 策略组:" - -msgid "Amazon Prime Video Group:" -msgstr "Amazon Prime Video 策略组:" - -msgid "YouTube Premium Group:" -msgstr "YouTube Premium 策略组:" - -msgid "full support." -msgstr "完整解锁。" - -msgid "full support, area:" -msgstr "完整解锁,区域:" - -msgid "only support homemade!" -msgstr "仅支持自制剧!" - -msgid "unlock test faild!" -msgstr "解锁检测失败!" - -msgid "the type of group is not select, auto select could not work!" -msgstr "当前策略组类型非Select,无法进行自动选择!" - -msgid "Start auto select unlock proxy..." -msgstr "开始进行解锁节点自动选择..." - -msgid "only support homemade! the type of group is not select, auto select could not work!" -msgstr "仅支持自制剧!当前策略组类型非 Select,无法进行自动选择!" - -msgid "unlock test faild! the type of group is not select, auto select could not work!" -msgstr "解锁检测失败!当前策略组类型非 Select,无法进行自动选择!" - -msgid "only support homemade! start auto select unlock proxy..." -msgstr "仅支持自制剧!开始进行解锁节点自动选择..." - -msgid "unlock test faild! start auto select unlock proxy..." -msgstr "解锁检测失败!开始进行解锁节点自动选择..." - -msgid "It Will Be Searched According To The Regex When Auto Search Group Fails" -msgstr "策略组自动获取失败时将会根据正则表达式进行匹配" - -msgid "It Will Be Selected Region According To The Regex" -msgstr "解锁区域将会根据正则表达式进行匹配" - -msgid "not support unlock!" -msgstr "不支持解锁!" - -msgid "not support unlock! the type of group is not select, auto select could not work!" -msgstr "不支持解锁!当前策略组类型非 Select,无法进行自动选择!" - -msgid "not support unlock! start auto select unlock proxy..." -msgstr "不支持解锁!开始进行解锁节点自动选择..." - -msgid "unlock node auto selected successfully, the current selected is" -msgstr "解锁节点自动选择成功,当前选择的是" - -msgid "unlock node auto selected failed, no node available, rolled back to the" -msgstr "解锁节点自动选择失败,无可用节点,回退到" - -msgid ", area:" -msgstr ",区域:" - -msgid "failed to search based on keywords and automatically obtain the group, please confirm the validity of the regex!" -msgstr "根据关键字搜索且自动获取策略组失败,请确认关键字的有效性!" - -msgid "unlock node auto selected failed, no node match the regex, rolled back to other full support node" -msgstr "解锁节点自动选择失败,未找到区域匹配的节点,回退到其他区域的解锁节点" - -msgid "full support but not match the regex!" -msgstr "完整解锁但区域不匹配!" - -msgid "but not match the regex! the type of group is not select, auto select could not work!" -msgstr "完整解锁但区域不匹配!当前策略组类型非 Select,无法进行自动选择!" - -msgid "full support but not match the regex! start auto select unlock proxy..." -msgstr "完整解锁但区域不匹配!开始进行解锁节点自动选择..." - -msgid "DNS Remote" -msgstr "*远程域名解析" - -msgid "Add DNS Remote Support For Redir-Host" -msgstr "Redir-Host模式强制进行远程域名解析" \ No newline at end of file diff --git a/luci-app-openclash/po/zh_Hans b/luci-app-openclash/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-openclash/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-openclash/root/etc/config/openclash b/luci-app-openclash/root/etc/config/openclash deleted file mode 100644 index 473c96e2..00000000 --- a/luci-app-openclash/root/etc/config/openclash +++ /dev/null @@ -1,172 +0,0 @@ - -config openclash 'config' - option proxy_port '7892' - option tproxy_port '7895' - option mixed_port '7893' - option socks_port '7891' - option http_port '7890' - option dns_port '7874' - option enable '0' - option update '0' - option en_mode '0' - option auto_update '0' - option auto_update_time '0' - option cn_port '9090' - option dashboard_password '123456' - option rule_source '0' - option enable_custom_dns '0' - option ipv6_enable '0' - option ipv6_dns '0' - option enable_custom_clash_rules '0' - option other_rule_auto_update '0' - option core_version '0' - option en_mode 'redir-host' - option enable_redirect_dns '1' - option dns_advanced_setting '0' - option servers_if_update '0' - option disable_masq_cache '0' - option servers_update '0' - option log_level 'silent' - option proxy_mode 'rule' - option intranet_allowed '0' - option enable_udp_proxy '1' - option disable_udp_quic '1' - option lan_ac_mode '0' - option operation_mode 'redir-host' - option enable_rule_proxy '0' - option redirect_dns '0' - option small_flash_memory '0' - option interface_name '0' - option common_ports '0' - option log_size '1024' - option tolerance '0' - option store_fakeip '1' - option custom_fallback_filter '0' - option append_wan_dns '1' - option stream_domains_prefetch '0' - option stream_auto_select '0' - option dns_remote '1' - option release_branch 'master' - option geo_custom_url 'https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb' - option chnr_custom_url 'https://ispip.clang.cn/all_cn.txt' - option chnr6_custom_url 'https://ispip.clang.cn/all_cn_ipv6.txt' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '114.114.114.114' - option enabled '1' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '119.29.29.29' - option enabled '1' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '119.28.28.28' - option enabled '0' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '223.5.5.5' - option enabled '0' - -config dns_servers - option type 'https' - option ip 'doh.pub/dns-query' - option group 'nameserver' - option enabled '1' - -config dns_servers - option type 'https' - option ip 'dns.alidns.com/dns-query' - option group 'nameserver' - option enabled '1' - -config dns_servers - option type 'https' - option group 'fallback' - option ip 'dns.cloudflare.com/dns-query' - option enabled '1' - -config dns_servers - option group 'fallback' - option ip 'dns.google' - option port '853' - option type 'tls' - option enabled '0' - -config dns_servers - option group 'fallback' - option type 'https' - option ip '1.1.1.1/dns-query' - option enabled '0' - -config dns_servers - option group 'fallback' - option ip '1.1.1.1' - option port '853' - option type 'tls' - option enabled '0' - -config dns_servers - option enabled '0' - option group 'fallback' - option ip '8.8.8.8' - option port '853' - option type 'tls' - -config dns_servers - option type 'udp' - option group 'fallback' - option ip '2001:4860:4860::8888' - option port '53' - option enabled '0' - -config dns_servers - option type 'udp' - option group 'fallback' - option ip '2001:4860:4860::8844' - option port '53' - option enabled '0' - -config dns_servers - option type 'udp' - option group 'fallback' - option ip '2001:da8::666' - option port '53' - option enabled '1' - -config dns_servers - option group 'fallback' - option type 'https' - option ip 'public.dns.iij.jp/dns-query' - option enabled '1' - -config dns_servers - option group 'fallback' - option type 'https' - option ip 'jp.tiar.app/dns-query' - option enabled '1' - -config dns_servers - option group 'fallback' - option type 'https' - option ip 'jp.tiarap.org/dns-query' - option enabled '1' - -config dns_servers - option group 'fallback' - option ip 'jp.tiar.app' - option type 'tls' - option enabled '0' - -config dns_servers - option group 'fallback' - option ip 'dot.tiar.app' - option type 'tls' - option enabled '1' diff --git a/luci-app-openclash/root/etc/init.d/openclash b/luci-app-openclash/root/etc/init.d/openclash deleted file mode 100644 index 64df2507..00000000 --- a/luci-app-openclash/root/etc/init.d/openclash +++ /dev/null @@ -1,2351 +0,0 @@ -#!/bin/sh /etc/rc.common -# Copyright (c) 2019 vernesong - -START=99 -STOP=15 - -. $IPKG_INSTROOT/usr/share/openclash/openclash_ps.sh -. $IPKG_INSTROOT/usr/share/openclash/ruby.sh -. $IPKG_INSTROOT/usr/share/openclash/log.sh - -[ -f /etc/openwrt_release ] && { -RAW_CONFIG_FILE=$(uci -q get openclash.config.config_path) -BACKUP_FILE="/etc/openclash/backup/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)" -CONFIG_FILE="/etc/openclash/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)" -} -LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) -CLASH="/etc/openclash/clash" -CLASH_CONFIG="/etc/openclash" -CRON_FILE="/etc/crontabs/root" -CACHE_PATH_OLD="/etc/openclash/.cache" -CACHE_PATH="/etc/openclash/cache.db" -LOG_FILE="/tmp/openclash.log" -START_LOG="/tmp/openclash_start.log" -RULE_PROVIDER_FILE="/tmp/yaml_rule_provider.yaml" -DNS_FILE="/tmp/yaml_dns.yaml" -GAME_RULE_FILE="/tmp/yaml_game_rule.yaml" -FALLBACK_FILTER_FILE="/etc/openclash/custom/openclash_custom_fallback_filter.yaml" -LOCK_FILE=/tmp/lock/openclash.lock -PROXY_FWMARK="0x162" -PROXY_ROUTE_TABLE="0x162" - -set_lock() { - exec 888>"$LOCK_FILE" 2>/dev/null - flock -x 888 2>/dev/null -} - -del_lock() { - flock -u 888 2>/dev/null - rm -rf "$LOCK_FILE" -} - -add_cron() -{ - [ "$(tail -n1 /etc/crontabs/root | wc -l)" -eq 0 ] && [ -n "$(cat /etc/crontabs/root 2>/dev/null)" ] && echo >> /etc/crontabs/root - [ -z "$(grep "openclash.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.auto_update)" -eq 1 ] && [ "$(uci -q get openclash.config.config_auto_update_mode)" -ne 1 ] && echo "0 $(uci -q get openclash.config.auto_update_time) * * $(uci -q get openclash.config.config_update_week_time) /usr/share/openclash/openclash.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_rule.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.other_rule_auto_update)" -eq 1 ] && echo "0 $(uci -q get openclash.config.other_rule_update_day_time) * * $(uci -q get openclash.config.other_rule_update_week_time) /usr/share/openclash/openclash_rule.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_ipdb.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.geo_auto_update)" -eq 1 ] && echo "0 $(uci -q get openclash.config.geo_update_day_time) * * $(uci -q get openclash.config.geo_update_week_time) /usr/share/openclash/openclash_ipdb.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_chnroute.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.chnr_auto_update)" -eq 1 ] && echo "0 $(uci -q get openclash.config.chnr_update_day_time) * * $(uci -q get openclash.config.chnr_update_week_time) /usr/share/openclash/openclash_chnroute.sh" >> $CRON_FILE - } - [ -z "$(grep "/etc/init.d/openclash" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.auto_restart)" -eq 1 ] && echo "0 $(uci -q get openclash.config.auto_restart_day_time) * * $(uci -q get openclash.config.auto_restart_week_time) /etc/init.d/openclash restart 2>/dev/null" >> $CRON_FILE - } - crontab $CRON_FILE - nohup /usr/share/openclash/openclash_watchdog.sh & -} - -del_cron() -{ - sed -i '/openclash.sh/d' $CRON_FILE 2>/dev/null - sed -i '/openclash_rule.sh/d' $CRON_FILE 2>/dev/null - sed -i '/openclash_ipdb.sh/d' $CRON_FILE 2>/dev/null - sed -i '/openclash_chnroute.sh/d' $CRON_FILE 2>/dev/null - /etc/init.d/cron restart -} - -change_dns() { - if [ "$1" -eq 1 ]; then - uci -q del dhcp.@dnsmasq[-1].server - uci -q add_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" - uci -q delete dhcp.@dnsmasq[0].resolvfile - uci -q set dhcp.@dnsmasq[0].noresolv=1 - uci -q set openclash.config.redirect_dns=1 - else - uci -q set openclash.config.redirect_dns=0 - fi - if [ "$2" -eq 1 ]; then - uci -q set dhcp.@dnsmasq[0].cachesize=0 - fi - - if [ "$ipv6_dns" == 1 ] && [ -n "$(ip6tables -t mangle -L 2>&1 | grep -o 'Chain')" ]; then - #dnsmasq answer ipv6 - uci -q set dhcp.@dnsmasq[0].filter_aaaa=0 - fi - - uci -q commit dhcp - uci -q commit openclash - - /usr/share/openclash/openclash_custom_domain_dns.sh >/dev/null 2>&1 -} - -revert_dns() { - - [ "$1" -eq 1 ] && { - uci -q del_list dhcp.@dnsmasq[0].server=127.0.0.1#"$3" - } - - [ "$1" -eq 1 ] && [ "$4" -eq 0 ] && { - uci -q set openclash.config.redirect_dns=0 - } - - [ "$(uci -q get dhcp.@dnsmasq[0].cachesize)" = "0" ] && { - uci -q delete dhcp.@dnsmasq[0].cachesize - } - - [ "$1" -eq 1 ] && { - if [ -n "$5" ]; then - uci -q set dhcp.@dnsmasq[0].resolvfile="$5" - elif [ -s "/tmp/resolv.conf.d/resolv.conf.auto" ] && [ -n "$(grep "nameserver" /tmp/resolv.conf.d/resolv.conf.auto)" ]; then - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto - elif [ -s "/tmp/resolv.conf.auto" ] && [ -n "$(grep "nameserver" /tmp/resolv.conf.auto)" ]; then - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto - else - rm -rf /tmp/resolv.conf.auto - touch /tmp/resolv.conf.auto 2>/dev/null - cat >> "/tmp/resolv.conf.auto" <<-EOF -# Interface lan -nameserver 114.114.114.114 -nameserver 119.29.29.29 -EOF - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto - fi - uci -q set dhcp.@dnsmasq[0].noresolv=0 - } - - uci -q commit dhcp - uci -q commit openclash - rm -rf /tmp/dnsmasq.d/dnsmasq_openclash.conf - rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_custom_domain.conf -} - -kill_clash() -{ - clash_pids=$(pidof clash |sed 's/$//g') - for clash_pid in $clash_pids; do - kill -9 "$clash_pid" 2>/dev/null - done >/dev/null 2>&1 -} - -start_fail() -{ - kill_clash - stop - del_lock - exit 0 -} - -yml_dns_check() -{ - #检查DNS服务 - if [ -z "$(ruby_read "$1" "['dns']['nameserver']")" ]; then - LOG_OUT "Detected That The nameserver DNS Option Has No Server Set, Starting To Complete..." - echo " nameserver:" > "$DNS_FILE" 2>/dev/null - cat >> "$DNS_FILE" <<-EOF - - 114.114.114.114 - - 119.29.29.29 - - 223.5.5.5 - fallback: - - https://dns.cloudflare.com/dns-query - - https://public.dns.iij.jp/dns-query - - https://jp.tiar.app/dns-query - - https://jp.tiarap.org/dns-query - - tls://dot.tiar.app -EOF - if [ -z "$(ruby_read "$1" "['dns']")" ]; then - ruby_cover "$1" "['dns']" "$DNS_FILE" - else - ruby_merge "$1" "['dns']" "$DNS_FILE" - fi - fi - - #default-nameserver - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$1'); - reg = /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/; - reg6 = /^(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))|\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/i; - if Value['dns'].has_key?('fallback') then - Value_1=Value['dns']['nameserver'] | Value['dns']['fallback'] - else - Value_1=Value['dns']['nameserver'] - end; - Value_1.each{|x| - if x =~ reg or x =~ reg6 then - if Value['dns'].has_key?('default-nameserver') then - Value['dns']['default-nameserver']=Value['dns']['default-nameserver'].to_a.insert(-1,x).uniq - else - Value_2={'default-nameserver'=>[x]} - Value['dns'].merge!(Value_2) - end - end - }; - File.open('${1}','w') {|f| YAML.dump(Value, f)}; - rescue Exception => e - puts '${LOGTIME} Error: Set default-nameserver Error,【' + e.message + '】' - end - " 2>/dev/null >> $LOG_FILE - - #fallback-filter - if [ "$custom_fallback_filter" = "1" ]; then - if [ -z "$(ruby_read "$CONFIG_FILE" "['dns']['fallback']")" ]; then - LOG_OUT "Error: Fallback-Filter Need fallback of DNS Been Setted, Ignore..." - return - fi - if [ -z "$(ruby_read "$2" "['fallback-filter']")" ]; then - LOG_OUT "Error: Unable To Parse Custom Fallback-Filter File, Ignore..." - return - fi - ruby_merge "$CONFIG_FILE" "['dns']" "$2" - fi -} - -#Vmess-ws旧格式兼容,不支持proxy-provider -yml_vmess_compatible() -{ - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$1'); - if Value.key?('$2') then - Value_1 = Marshal.load(Marshal.dump(Value['$2'])); - Value['$2'].each{ - |x| - if x['type'] != 'vmess' then - next - end; - if x.key?('ws-path') then - if not x.key?('ws-opts') then - x['ws-opts'] = {'path'=>x['ws-path'].to_s} - else - if x['ws-opts'].nil? then - x['ws-opts'] = {'path'=>x['ws-path'].to_s} - elsif x['ws-opts']['path'].nil? then - x['ws-opts'].update({'path'=>x['ws-path'].to_s}) - else - x['ws-opts']['path'].update(x['ws-path'].to_s) - end - end - x.delete('ws-path') - end; - if x.key?('ws-headers') then - x['ws-headers'].keys.each{ - |v| - if not x.key?('ws-opts') then - x['ws-opts'] = {'headers'=>{v.to_s=>x['ws-headers'][v].to_s}} - else - if x['ws-opts'].nil? then - x['ws-opts'] = {'headers'=>{v.to_s=>x['ws-headers'][v].to_s}} - elsif x['ws-opts']['headers'].nil? then - x['ws-opts'].update({'headers'=>{v.to_s=>x['ws-headers'][v].to_s}}) - else - x['ws-opts']['headers'].update({v.to_s=>x['ws-headers'][v].to_s}) - end - end - }; - x.delete('ws-headers') - end; - }; - if not Value_1.eql?(Value['$2']) then - File.open('$1','w') {|f| YAML.dump(Value, f)} - end; - end; - rescue Exception => e - puts '${LOGTIME} Error: Edit Vmess compatible Error,【' + e.message + '】' - end - " 2>/dev/null >> $LOG_FILE -} - -#修改集路径 -yml_provider_path() -{ - - #provider_num=$(ruby_read "$1" "['$2'].count") - #local i=0 - #while [ $i -le "$provider_num" ] - #do - # provider_path=$(ruby_read "$1" "['$2'].values[$i]['path']") - # if [ "$(echo "$provider_path" |awk -F '/' '{print $(NF-1)}')" != "$3" ]; then - # provider_name=$(echo "$provider_path" |awk -F '/' '{print $NF}') - # ruby_edit "$1" "['$2'].values[$i]['path']='./${3}/${provider_name}'" - # uci set openclash.config.config_reload=0 2>/dev/null - # uci commit openclash - # fi - # let i++ - #done - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$1'); - if Value.key?('$2') then - Value_1 = Marshal.load(Marshal.dump(Value['$2'])); - Value['$2'].values.each{ - |x,v| - if not x['path'].include? '$3' and not x['path'].include? 'game_rules' then - v=File.basename(x['path']) - x['path']='./$3/'+v - end - #CDN Replace - if x['url'] and x['url'] =~ /^https:\/\/raw.githubusercontent.com/ then - x['url'] = 'https://cdn.jsdelivr.net/gh/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '@' + x['url'].split(x['url'].split('/')[2] + '/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '/')[1] - end - }; - if not Value_1.eql?(Value['$2']) then - File.open('$1','w') {|f| YAML.dump(Value, f)} - end - end; - rescue Exception => e - puts '${LOGTIME} Error: Edit Provider Path Error,【' + e.message + '】' - end - " 2>/dev/null >> $LOG_FILE -} - -#检查集文件防止启动失败 -yml_provider_check() -{ -provider_path_line=$(ruby_read "$CONFIG_FILE" ".key?('$2')") -local provider_path_check provider_path_check_num=0 -if "$provider_path_line"; then - while ( [ -n "$(pidof clash)" ] && [ "$provider_path_check_num" -le 5 ] ) - do - provider_path_check=$(ruby -ryaml -E UTF-8 -e " - Value = YAML.load_file('$CONFIG_FILE'); - Value['$2'].values.each{|x,v| - if not x['path'].empty? then - if x['path'].split('/')[0] == '.' then - v = '/etc/openclash/'+x['path'].split('./')[1] - else - v = x['path'] - end - end; - if File::exist?(v) then - if not YAML.load_file(v).key?('$3') then - puts false - break - end - else - puts false - break - end - } - " 2>/dev/null) - if [ "$provider_path_check" = "false" ]; then - let provider_path_check_num++ - sleep 2 - else - break - fi - done -fi - -if [ -z "$(pidof clash)" ] && [ -n "$provider_path_check" ]; then - if [ "$2" = "proxy-providers" ]; then - LOG_OUT "Error: Failed To Download Proxy-providers, Please Check The Log Page For Detailed error information!" - else - LOG_OUT "Error: Failed To Download Rule-providers, Please Check The Log Page For Detailed error information!" - fi - LOG_ALERT - start_fail -elif [ "$provider_path_check_num" -gt 5 ]; then - LOG_OUT "Warning: Providers File Check Timeout, If Failed To start, Please Check The Log Page For Detailed error information!" - sleep 3 -fi - -} - -#获取DHCP或接口的DNS并追加 -sys_dns_append() -{ - if [ "$1" = 1 ]; then - wan_dns=$(/usr/share/openclash/openclash_get_network.lua "dns") - wan6_dns=$(/usr/share/openclash/openclash_get_network.lua "dns6") - wan_gate=$(/usr/share/openclash/openclash_get_network.lua "gateway") - wan6_gate=$(/usr/share/openclash/openclash_get_network.lua "gateway6") - dhcp_iface=$(/usr/share/openclash/openclash_get_network.lua "dhcp") - if [ -z "$dhcp_iface" ]; then - if [ -n "$wan_dns" ]; then - if [ -z "$(grep "^ \{0,\}nameserver:$" /tmp/yaml_config.namedns.yaml 2>/dev/null)" ]; then - echo " nameserver:" >/tmp/yaml_config.namedns.yaml - fi - for i in $wan_dns; do - echo " - \"$i\"" >>/tmp/yaml_config.namedns.yaml - done - fi - if [ -n "$wan6_dns" ] && [ "$2" = 1 ]; then - if [ -z "$(grep "^ \{0,\}nameserver:$" /tmp/yaml_config.namedns.yaml 2>/dev/null)" ]; then - echo " nameserver:" >/tmp/yaml_config.namedns.yaml - fi - for i in $wan6_dns; do - echo " - \"[${i}]:53\"" >>/tmp/yaml_config.namedns.yaml - done - fi - else - if [ -z "$(grep "^ \{0,\}nameserver:$" /tmp/yaml_config.namedns.yaml 2>/dev/null)" ]; then - echo " nameserver:" >/tmp/yaml_config.namedns.yaml - fi - if [ -n "$wan_gate" ]; then - for i in $wan_gate; do - echo " - \"$i\"" >>/tmp/yaml_config.namedns.yaml - done - fi - if [ -n "$wan6_gate" ] && [ "$2" = 1 ]; then - for i in $wan6_gate; do - echo " - \"[${i}]:53\"" >>/tmp/yaml_config.namedns.yaml - done - fi - for i in $dhcp_iface; do - echo " - dhcp://\"$i\"" >>/tmp/yaml_config.namedns.yaml - done - fi - fi -} - -#获取自定义DNS设置 -yml_dns_get() -{ - - local section="$1" regex='^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$' - local enabled port type ip group dns_type dns_address - config_get_bool "enabled" "$section" "enabled" "1" - config_get "port" "$section" "port" "" - config_get "type" "$section" "type" "" - config_get "ip" "$section" "ip" "" - config_get "group" "$section" "group" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$ip" ]; then - return - fi - - if [[ $ip =~ $regex ]]; then - ip="[${ip}]" - fi - - if [ "$type" = "tcp" ]; then - dns_type="tcp://" - elif [ "$type" = "tls" ]; then - dns_type="tls://" - elif [ "$type" = "udp" ]; then - dns_type="" - elif [ "$type" = "https" ]; then - dns_type="https://" - fi - - if [ -n "$port" ] && [ -n "$ip" ]; then - dns_address="$ip:$port" - elif [ -z "$port" ] && [ -n "$ip" ]; then - dns_address="$ip" - else - return - fi - - if [ -n "$group" ]; then - if [ "$group" = "nameserver" ]; then - if [ -z "$(grep "^ \{0,\}nameserver:$" /tmp/yaml_config.namedns.yaml 2>/dev/null)" ]; then - echo " nameserver:" >/tmp/yaml_config.namedns.yaml - fi - echo " - \"$dns_type$dns_address\"" >>/tmp/yaml_config.namedns.yaml - else - if [ -z "$(grep "^ \{0,\}fallback:$" /tmp/yaml_config.falldns.yaml 2>/dev/null)" ]; then - echo " fallback:" >/tmp/yaml_config.falldns.yaml - fi - echo " - \"$dns_type$dns_address\"" >>/tmp/yaml_config.falldns.yaml - fi - else - return - fi -} - -#添加自定义DNS设置 -yml_dns_custom() -{ - if [ "$1" = 1 ] || [ "$3" = 1 ]; then - sys_dns_append "$3" "$4" - config_load "openclash" - config_foreach yml_dns_get "dns_servers" - ruby_uniq "/tmp/yaml_config.namedns.yaml" "['nameserver']" - ruby_uniq "/tmp/yaml_config.falldns.yaml" "['fallback']" - if [ -f "/tmp/yaml_config.namedns.yaml" ]; then - if [ -z "$(ruby_read "$2" "['dns']")" ]; then - ruby_cover "$2" "['dns']" "/tmp/yaml_config.namedns.yaml" - ruby_merge "$2" "['dns']" "/tmp/yaml_config.falldns.yaml" - elif [ "$1" = 1 ]; then - ruby_edit "$2" "['dns'].delete('nameserver')" - ruby_edit "$2" "['dns'].delete('fallback')" - ruby_merge "$2" "['dns']" "/tmp/yaml_config.namedns.yaml" - ruby_merge "$2" "['dns']" "/tmp/yaml_config.falldns.yaml" - else - ruby_merge "$2" "['dns']" "/tmp/yaml_config.namedns.yaml" - fi - else - LOG_OUT "Error: Nameserver Option Must Be Setted, Stop Customing DNS Servers" - fi - fi -} - -#获取认证信息 -yml_auth_get() -{ - local section="$1" - local enabled username password - config_get_bool "enabled" "$section" "enabled" "1" - config_get "username" "$section" "username" "" - config_get "password" "$section" "password" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$username" ] || [ -z "$password" ]; then - return - else - echo " - $username:$password" >>/tmp/config.auth - fi -} - -#添加认证信息 -yml_auth_custom() -{ - if [ -n "$(ruby_read "$1" "['authentication']")" ]; then - ruby_edit "$1" ".delete('authentication')" - fi - if [ -f /tmp/config.auth ]; then - sed -i '/^dns:/i\authentication:' "$1" 2>/dev/null - ruby_cover "$1" "['authentication']" "/tmp/config.auth" - rm -rf /tmp/config.auth 2>/dev/null - fi -} - -#Tolerance -yml_tolerance_set() -{ -if [ -n "$tolerance" ] && [ "$tolerance" -ne 0 ]; then -ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('${1}'); - Value['proxy-groups'].each{ - |x| - if x['type'] == 'url-test' then - x['tolerance']=${2} - end - }; - File.open('${1}','w') {|f| YAML.dump(Value, f)}; - rescue Exception => e - puts '${LOGTIME} Error: Set Url-Test Group Tolerance Error,【' + e.message + '】' - end -" 2>/dev/null >> $LOG_FILE -fi -} - -get_rule_file() -{ - if [ -z "$1" ]; then - return - fi - - GAME_RULE_FILE_NAME=$(grep "^$1," /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $3}' 2>/dev/null) - - if [ -z "$GAME_RULE_FILE_NAME" ]; then - GAME_RULE_FILE_NAME=$(grep "^$1," /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null) - fi - - GAME_RULE_PATH="./game_rules/$GAME_RULE_FILE_NAME" - - [ ! -f "$GAME_RULE_FILE" ] && echo "rules:" > "$GAME_RULE_FILE" - - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$GAME_RULE_FILE'); - if Value.has_key?('rules') and not Value['rules'].to_a.empty? then - Value['rules'].insert(-1,'RULE-SET,${1},${2}') - Value['rules']=Value['rules'].uniq - else - Value={'rules'=>['RULE-SET,${1},${2}']} - end; - Value_1={'rule-providers'=>{'${1}'=>{'type'=>'file', 'behavior'=>'ipcidr', 'path'=>'${GAME_RULE_PATH}'}}}; - if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then - Value['rule-providers'].merge!(Value_1['rule-providers']) - Value['rule-providers'].uniq - else - Value['rule-providers']=Value_1['rule-providers'] - end; - File.open('$GAME_RULE_FILE','w') {|f| YAML.dump(Value, f)}; - rescue Exception => e - puts '${LOGTIME} Error: Game Rule Merge Error,【' + e.message + '】' - end - " 2>/dev/null >> $LOG_FILE -} - -yml_game_rule_get() -{ - local section="$1" - local enabled group config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "group" "$section" "group" "" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$group" ]; then - return - fi - - config_list_foreach "$section" "rule_name" get_rule_file "$group" -} - -yml_rule_group_get() -{ - local section="$1" - local enabled group config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "group" "$section" "group" "" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$group" ] || [ "$group" = "DIRECT" ] || [ "$group" = "REJECT" ]; then - return - fi - - /usr/share/openclash/yml_groups_set.sh >/dev/null 2>&1 "$group" -} - -yml_game_custom() -{ -#处理游戏规则 -config_load "openclash" -config_foreach yml_game_rule_get "game_config" -[ -f "$GAME_RULE_FILE" ] && { -ruby -ryaml -E UTF-8 -e " -begin -Value = YAML.load_file('$CONFIG_FILE'); -Value_1 = YAML.load_file('$GAME_RULE_FILE'); -if Value.has_key?('rules') and not Value['rules'].to_a.empty? then - ruby_add_index = Value['rules'].index(Value['rules'].grep(/(GEOIP|MATCH|FINAL)/).first) - ruby_add_index ||= -1 - Value_2 = Value_1['rules'].reverse! - Value_2.each{|x| Value['rules'].insert(ruby_add_index,x)} - Value['rules']=Value['rules'].uniq; -else - Value['rules'] = Value_1['rules'] -end; -if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then - Value['rule-providers'].merge!(Value_1['rule-providers']) - Value['rule-providers'].uniq -else - Value['rule-providers']=Value_1['rule-providers'] -end; -File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)} -rescue Exception => e -puts '${LOGTIME} Error: Game Rule Merge Error,【' + e.message + '】' -end -" 2>/dev/null >> $LOG_FILE -} - -#处理游戏节点与策略组 -config_load "openclash" -config_foreach yml_rule_group_get "rule_provider_config" -config_foreach yml_rule_group_get "rule_providers" -config_foreach yml_rule_group_get "game_config" -if [ -f "/tmp/yaml_groups.yaml" ] || [ -f "/tmp/yaml_servers.yaml" ] || [ -f "/tmp/yaml_provider.yaml" ]; then -ruby -ryaml -E UTF-8 -e " -begin -Value = YAML.load_file('$CONFIG_FILE'); -if File::exist?('/tmp/yaml_groups.yaml') then - Value_1 = YAML.load_file('/tmp/yaml_groups.yaml'); - if Value.has_key?('proxy-groups') and not Value['proxy-groups'].to_a.empty? then - Value['proxy-groups'] = Value['proxy-groups']+Value_1 - Value['proxy-groups'].uniq - else - Value['proxy-groups']=Value_1 - end -end; -if File::exist?('/tmp/yaml_servers.yaml') then - Value_2 = YAML.load_file('/tmp/yaml_servers.yaml'); - if Value.has_key?('proxies') and not Value['proxies'].to_a.empty? then - Value['proxies'] = Value['proxies']+Value_2['proxies'] - Value['proxies'].uniq - else - Value['proxies']=Value_2['proxies'] - end -end; -if File::exist?('/tmp/yaml_provider.yaml') then - Value_3 = YAML.load_file('/tmp/yaml_provider.yaml'); - if Value.has_key?('proxy-providers') and not Value['proxy-providers'].to_a.empty? then - Value['proxy-providers'].merge!(Value_3['proxy-providers']) - Value['proxy-providers'].uniq - else - Value['proxy-providers']=Value_3['proxy-providers'] - end -end; -File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)} -rescue Exception => e -puts '${LOGTIME} Error: Game Proxy Merge Error,【' + e.message + '】' -end" 2>/dev/null >> $LOG_FILE -fi -} - -yml_rule_set_add() -{ -ruby -ryaml -E UTF-8 -e " -begin - Value = YAML.load_file('$CONFIG_FILE'); - if $3 == 1 then - if Value.has_key?('rule-set-bottom') and not Value['rule-set-bottom'].to_a.empty? then - Value['rule-set-bottom'].insert(-1,'RULE-SET,${1},${2}') - else - Value_1 = {'rule-set-bottom'=>['RULE-SET,${1},${2}']} - Value.merge!(Value_1); - end - Value['rule-set-bottom'] = Value['rule-set-bottom'].uniq - else - if Value.has_key?('rule-set-top') and not Value['rule-set-top'].to_a.empty? then - Value['rule-set-top'].insert(-1,'RULE-SET,${1},${2}') - else - Value_1 = {'rule-set-top'=>['RULE-SET,${1},${2}']} - Value.merge!(Value_1); - end - Value['rule-set-top'] = Value['rule-set-top'].uniq - end -File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)} -rescue Exception => e - puts '${LOGTIME} Error: Rule Set Add Error,【' + e.message + '】' -end -" 2>/dev/null >> $LOG_FILE -} - -yml_gen_rule_provider_file() -{ - if [ -z "$1" ]; then - return - fi - - RULE_PROVIDER_FILE_NAME=$(grep "^$1," /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $6}' 2>/dev/null) - if [ -z "$RULE_PROVIDER_FILE_NAME" ]; then - RULE_PROVIDER_FILE_NAME=$(grep "^$1," /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $5}' 2>/dev/null) - fi - RULE_PROVIDER_FILE_BEHAVIOR=$(grep ",$RULE_PROVIDER_FILE_NAME$" /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $3}' 2>/dev/null) - RULE_PROVIDER_FILE_PATH="/etc/openclash/rule_provider/$RULE_PROVIDER_FILE_NAME" - RULE_PROVIDER_FILE_URL_PATH="$(grep ",$RULE_PROVIDER_FILE_NAME$" /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $4$5}' 2>/dev/null)" - RULE_PROVIDER_FILE_URL="https://cdn.jsdelivr.net/gh/"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F 'master' '{print $2}')"" - if [ -n "$(grep "$RULE_PROVIDER_FILE_URL" $RULE_PROVIDER_FILE 2>/dev/null)" ]; then - return - fi - -cat >> "$RULE_PROVIDER_FILE" <<-EOF - $1: - type: http - behavior: $RULE_PROVIDER_FILE_BEHAVIOR - path: $RULE_PROVIDER_FILE_PATH - url: $RULE_PROVIDER_FILE_URL -EOF - if [ -z "$3" ]; then -cat >> "$RULE_PROVIDER_FILE" <<-EOF - interval=86400 -EOF - else -cat >> "$RULE_PROVIDER_FILE" <<-EOF - interval: $3 -EOF - fi - yml_rule_set_add "$1" "$2" "$4" -} - -yml_get_rule_provider() -{ - local section="$1" - local enabled group config interval position - config_get_bool "enabled" "$section" "enabled" "1" - config_get "group" "$section" "group" "" - config_get "config" "$section" "config" "" - config_get "interval" "$section" "interval" "" - config_get "position" "$section" "position" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$group" ]; then - return - fi - - config_list_foreach "$section" "rule_name" yml_gen_rule_provider_file "$group" "$interval" "$position" -} - -#处理自定义规则集 -yml_set_custom_rule_provider() -{ - local section="$1" - local enabled name config type behavior path url interval group position - config_get_bool "enabled" "$section" "enabled" "1" - config_get "name" "$section" "name" "" - config_get "config" "$section" "config" "" - config_get "type" "$section" "type" "" - config_get "behavior" "$section" "behavior" "" - config_get "path" "$section" "path" "" - config_get "url" "$section" "url" "" - config_get "interval" "$section" "interval" "" - config_get "group" "$section" "group" "" - config_get "position" "$section" "position" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -n "$(grep "$url" "$RULE_PROVIDER_FILE" 2>/dev/null)" ] && [ -n "$url" ]; then - return - fi - - if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$name" ] || [ -z "$type" ] || [ -z "$behavior" ]; then - return - fi - - if [ "$type" = "http" ] && [ -z "$url" ]; then - return - fi - - if [ "$path" != "./rule_provider/$name.yaml" ] && [ "$type" = "http" ]; then - path="./rule_provider/$name.yaml" - elif [ -z "$path" ]; then - return - fi - - if [ -n "$(grep "$path" "$RULE_PROVIDER_FILE" 2>/dev/null)" ]; then - return - fi - - if [ -z "$interval" ] && [ "$type" = "http" ]; then - interval=86400 - fi - -cat >> "$RULE_PROVIDER_FILE" <<-EOF - $name: - type: $type - behavior: $behavior - path: $path -EOF - if [ "$type" = "http" ]; then -cat >> "$RULE_PROVIDER_FILE" <<-EOF - url: $url - interval: $interval -EOF - fi - - yml_rule_set_add "$name" "$group" "$position" -} - -#处理规则集 -yml_custom_rule_provider() -{ - config_load "openclash" - config_foreach yml_get_rule_provider "rule_provider_config" - config_foreach yml_set_custom_rule_provider "rule_providers" - if [ -f "$RULE_PROVIDER_FILE" ]; then - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$CONFIG_FILE'); - rescue Exception => e - puts '${LOGTIME} Error: Load File Error,【' + e.message + '】' - end; - - begin - Value_1 = YAML.load_file('$RULE_PROVIDER_FILE'); - if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then - Value['rule-providers'].merge!(Value_1) - else - Value['rule-providers']=Value_1 - end; - rescue Exception => e - puts '${LOGTIME} Error: Custom Rule Provider Merge Error,【' + e.message + '】' - end; - - begin - if Value.has_key?('rules') and not Value['rules'].to_a.empty? then - if Value.has_key?('rule-set-bottom') and not Value['rule-set-bottom'].to_a.empty? then - if $enable_rule_proxy != 1 then - ruby_add_index = Value['rules'].index(Value['rules'].grep(/(GEOIP|MATCH|FINAL)/).first) - else - if Value['rules'].grep(/GEOIP/)[0].nil? or Value['rules'].grep(/GEOIP/)[0].empty? then - ruby_add_index = Value['rules'].index(Value['rules'].grep(/DST-PORT,80/).last) - ruby_add_index ||= Value['rules'].index(Value['rules'].grep(/(MATCH|FINAL)/).first) - else - ruby_add_index = Value['rules'].index(Value['rules'].grep(/GEOIP/).first) - end - end - ruby_add_index ||= -1 - Value['rule-set-bottom'].reverse.each{|x| Value['rules'].insert(ruby_add_index,x)} - Value.delete('rule-set-bottom') - end - if Value.has_key?('rule-set-top') and not Value['rule-set-top'].to_a.empty? then - if Value['rules'].to_a.grep(/(?=.*198.18.0)(?=.*REJECT)/).empty? then - Value['rule-set-top'].reverse.each{|x| Value['rules'].insert(0,x)} - else - ruby_add_index = Value['rules'].index(Value['rules'].grep(/(?=.*198.18.0)(?=.*REJECT)/).first) - Value['rule-set-top'].reverse.each{|x| Value['rules'].insert(ruby_add_index + 1,x)} - end - Value.delete('rule-set-top') - end - else - if Value.has_key?('rule-set-top') and not Value['rule-set-top'].to_a.empty? then - Value['rules'] = Value['rule-set-top'] - Value.delete('rule-set-top') - end - if Value.has_key?('rule-set-bottom') and not Value['rule-set-bottom'].to_a.empty? then - if Value.has_key?('rule-set-top') and not Value['rule-set-top'].to_a.empty? then - Value['rules'] = Value['rules'] | Value['rule-set-bottom'] - else - Value['rules'] = Value['rule-set-bottom'] - end - Value.delete('rule-set-bottom') - end - end; - rescue Exception => e - puts '${LOGTIME} Error: Rule Set Add Error,【' + e.message + '】' - ensure - File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)} - end; - " 2>/dev/null >> $LOG_FILE - fi -} - -#获取订阅配置 -sub_info_get() -{ - local section="$1" address enabled name - config_get_bool "enabled" "$section" "enabled" "1" - config_get "address" "$section" "address" "" - config_get "name" "$section" "name" "" - - if [ "$subscribe_enable" = "1" ]; then - return - fi - - if [ "$enabled" -eq 0 ]; then - return - fi - - if [ -z "$address" ]; then - return - fi - - if [ -z "$name" ]; then - CONFIG_NAME="config" - RAW_CONFIG_FILE="/etc/openclash/config/config.yaml" - CONFIG_FILE="/etc/openclash/config.yaml" - else - CONFIG_NAME="$name" - RAW_CONFIG_FILE="/etc/openclash/config/$name.yaml" - CONFIG_FILE="/etc/openclash/$name.yaml" - fi - - uci -q set openclash.config.config_path="$RAW_CONFIG_FILE" - uci -q commit openclash - subscribe_enable=1 -} - -#配置文件选择 -config_choose() -{ -if [ -z "$RAW_CONFIG_FILE" ] || [ ! -f "$RAW_CONFIG_FILE" ]; then - CONFIG_NAME=$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}') - if [ -n "$CONFIG_NAME" ]; then - uci -q set openclash.config.config_path="/etc/openclash/config/$CONFIG_NAME" - uci -q commit openclash - RAW_CONFIG_FILE="/etc/openclash/config/$CONFIG_NAME" - CONFIG_FILE="/etc/openclash/$CONFIG_NAME" - fi -fi 2>/dev/null -CONFIG_NAME=$(echo "$RAW_CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}" -HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db" - -if [ ! -f "$RAW_CONFIG_FILE" ]; then - config_load "openclash" - config_foreach sub_info_get "config_subscribe" - subscribe_auto_update=$(uci get openclash.config.auto_update 2>/dev/null) - if [ "$subscribe_enable" = "1" ] && [ "$subscribe_auto_update" -eq 1 ]; then - LOG_OUT "Config File Does Not Exist, You Have Set Subscription Information, Ready To Download..." - nohup /usr/share/openclash/openclash.sh & - del_lock - exit 0 - else - LOG_OUT "Error: Config Not Found" - sleep 3 - del_lock - exit 0 - fi -fi -} - -config_check() -{ -#创建启动配置 -#rm -rf "/etc/openclash/*.y*" 2>/dev/null -cp "$RAW_CONFIG_FILE" "$CONFIG_FILE" - -ruby -ryaml -E UTF-8 -e " -begin - YAML.load_file('$RAW_CONFIG_FILE'); -rescue Exception => e - puts '${LOGTIME} Error: Unable To Parse Config File,【' + e.message + '】' - system 'rm -rf ${CONFIG_FILE}' -end -" 2>/dev/null >> $LOG_FILE -if [ $? -ne 0 ]; then - LOG_OUT "Error: Ruby Works Abnormally, Please Check The Ruby Library Depends!" - sleep 3 - start_fail -elif [ ! -f "$CONFIG_FILE" ] || [ ! -s "$CONFIG_FILE" ]; then - LOG_OUT "Error: Config File Format Validation Failed..." - sleep 3 - start_fail -fi - -#检查field名称(不兼容旧写法) -ruby -ryaml -E UTF-8 -e " - Value = YAML.load_file('$CONFIG_FILE'); - if Value.key?('Proxy') or Value.key?('Proxy Group') or Value.key?('Rule') or Value.key?('rule-provider') then - if Value.key?('Proxy') then - Value['proxies'] = Value['Proxy'] - Value.delete('Proxy') - puts '${LOGTIME} Warning: Proxy is no longer used. Auto replaced by proxies' - end - if Value.key?('Proxy Group') then - Value['proxy-groups'] = Value['Proxy Group'] - Value.delete('Proxy Group') - puts '${LOGTIME} Warning: Proxy Group is no longer used. Auto replaced by proxy-groups' - end - if Value.key?('Rule') then - Value['rules'] = Value['Rule'] - Value.delete('Rule') - puts '${LOGTIME} Warning: Rule is no longer used. Auto replaced by rules' - end - if Value.key?('rule-provider') then - Value['rule-providers'] = Value['rule-provider'] - Value.delete('rule-provider') - puts '${LOGTIME} Warning: rule-provider is no longer used. Auto replaced by rule-providers' - end; - File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)}; - end; - " 2>/dev/null >> $LOG_FILE -} - -yml_other_rules_get() -{ - local section="$1" - local enabled config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ] || [ "$config" != "$2" ]; then - return - fi - - if [ -n "$rule_name" ]; then - return - fi - - config_get "rule_name" "$section" "rule_name" "" -} - -check_run_quick() -{ - quick_start=true - check_file="$RAW_CONFIG_FILE /etc/openclash/custom/openclash_custom_domain_dns.list /etc/openclash/custom/openclash_custom_domain_dns_policy.list /etc/openclash/custom/openclash_custom_fake_filter.list /etc/openclash/custom/openclash_custom_fallback_filter.yaml /etc/openclash/custom/openclash_custom_hosts.list /etc/openclash/custom/openclash_custom_rules.list /etc/openclash/custom/openclash_custom_rules_2.list $dev_core_path $tun_core_path $geoip_path $chnr_path $chnr6_path /usr/share/openclash/res/ConnersHua.yaml /usr/share/openclash/res/ConnersHua_return.yaml /usr/share/openclash/res/lhie1.yaml /usr/share/openclash/res/openclash_version /tmp/openclash_fake_filter.list" - if [ ! -f "$CONFIG_FILE" ] || [ ! -f "/tmp/openclash_config.tmp" ] || [ ! -f "/tmp/openclash.change" ]; then - quick_start=false - return - fi - cmp -s "/etc/config/openclash" "/tmp/openclash_config.tmp" - if [ "$?" -ne "0" ]; then - LOG_OUT "Tip: Because of the file【 /etc/config/openclash 】modificated, Pause quick start..." - quick_start=false - else - if [ -s "/tmp/openclash.change" ]; then - for i in $check_file; do - if [ -z "$(grep "$i $(date -r $i)$" "/tmp/openclash.change")" ]; then - LOG_OUT "Tip: Because of the file【 $i 】modificated, Pause quick start..." - quick_start=false - break - fi - done 2>/dev/null - fi - fi -} - -write_run_quick() -{ - if ! $quick_start; then - cp "/etc/config/openclash" "/tmp/openclash_config.tmp" - : > "/tmp/openclash.change" - for i in $check_file; do - echo "$i $(date -r $i)" >> "/tmp/openclash.change" - done 2>/dev/null - fi -} - -custom_rule_provider() -{ - local section="$1" - local enabled config - config_get "config" "$section" "config" "" - config_get_bool "enabled" "$section" "enabled" "1" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ "$config" = "all" ] || [ "$config" = "$CONFIG_NAME" ]; then - config_set_custom_rule_provider=1 - fi -} - -#运行模式处理 -do_run_mode() -{ - en_mode=$(uci -q get openclash.config.en_mode) - - if [ "$en_mode" = "fake-ip-tun" ]; then - en_mode_tun="1" - en_mode="fake-ip" - fi - - if [ "$en_mode" = "redir-host-tun" ]; then - en_mode_tun="1" - en_mode="redir-host" - fi - - if [ "$en_mode" = "redir-host-mix" ]; then - en_mode_tun="2" - en_mode="redir-host" - fi - - if [ "$en_mode" = "fake-ip-mix" ]; then - en_mode_tun="2" - en_mode="fake-ip" - fi -} - -do_run_file() -{ - - if [ "$small_flash_memory" != "1" ]; then - dev_core_path="/etc/openclash/core/clash" - tun_core_path="/etc/openclash/core/clash_tun" - geoip_path="/etc/openclash/Country.mmdb" - chnr_path="/etc/openclash/china_ip_route.ipset" - chnr6_path="/etc/openclash/china_ip6_route.ipset" - mv "/tmp/etc/openclash/Country.mmdb" "$geoip_path" 2>/dev/null - mv "/tmp/etc/openclash/china_ip_route.ipset" "$chnr_path" 2>/dev/null - mv "/tmp/etc/openclash/china_ip6_route.ipset" "$chnr6_path" 2>/dev/null - mv "/tmp/etc/openclash/core/" "/etc/openclash" 2>/dev/null - mv "/tmp/etc/openclash/cache.db" "/etc/openclash/cache.db" 2>/dev/null - rm -rf "/tmp/etc/openclash" 2>/dev/null - else - dev_core_path="/tmp/etc/openclash/core/clash" - tun_core_path="/tmp/etc/openclash/core/clash_tun" - geoip_path="/tmp/etc/openclash/Country.mmdb" - chnr_path="/tmp/etc/openclash/china_ip_route.ipset" - chnr6_path="/tmp/etc/openclash/china_ip6_route.ipset" - CACHE_PATH="/tmp/etc/openclash/cache.db" - mkdir -p /tmp/etc/openclash - [ ! -h "/etc/openclash/Country.mmdb" ] && mv "/etc/openclash/Country.mmdb" "$geoip_path" 2>/dev/null - [ ! -h "/etc/openclash/china_ip_route.ipset" ] && mv "/etc/openclash/china_ip_route.ipset" "$chnr_path" 2>/dev/null - [ ! -h "/etc/openclash/china_ip6_route.ipset" ] && mv "/etc/openclash/china_ip6_route.ipset" "$chnr6_path" 2>/dev/null - mv "/etc/openclash/core/" "/tmp/etc/openclash" 2>/dev/null - [ ! -h "/etc/openclash/cache.db" ] && mv "/etc/openclash/cache.db" "$CACHE_PATH" 2>/dev/null - fi - - rm -rf "/etc/openclash/clash" 2>/dev/null - - if [ -n "$en_mode_tun" ]; then - ln -s "$tun_core_path" /etc/openclash/clash 2>/dev/null - core_type="TUN" - core_start_log="Tip: Detected The Exclusive Function of The TUN Core, Use TUN Core to Start..." - fi - - if [ "$rule_source" != "0" ]; then - config_load "openclash" - config_foreach yml_other_rules_get "other_rules" "$CONFIG_NAME" - fi - - config_load "openclash" - config_set_custom_rule_provider=0 - for i in "rule_provider_config" "rule_provider_config" "rule_providers" "game_config"; do - config_foreach custom_rule_provider "$i" - if [ "$config_set_custom_rule_provider" -eq 1 ]; then - break - fi - done 2>/dev/null - - if [ "$proxy_mode" = "script" ] || [ "$config_set_custom_rule_provider" -eq 1 ] || [ "$rule_name" = "ConnersHua" ] || [ "$rule_name" = "lhie1" ] || [ -n "$(ruby_read "$RAW_CONFIG_FILE" "['rules'].grep(/(^RULE-SET,|^SCRIPT,)/)")" ] || [ -n "$(ruby_read "/etc/openclash/custom/openclash_custom_rules.list" "['rules'].grep(/(^RULE-SET,|^SCRIPT,)/)")" ] || [ -n "$(ruby_read "/etc/openclash/custom/openclash_custom_rules_2.list" "['rules'].grep(/(^RULE-SET,|^SCRIPT,)/)")" ]; then - if [ -z "$en_mode_tun" ]; then - rm -rf "/etc/openclash/clash" - ln -s "$tun_core_path" /etc/openclash/clash 2>/dev/null - core_type="TUN" - core_start_log="Tip: Detected The Exclusive Function of The TUN Core, Use TUN Core to Start..." - fi - fi - - if [ ! -f "/etc/openclash/clash" ] && [ -f "$dev_core_path" ] && [ -z "$core_type" ]; then - ln -s "$dev_core_path" /etc/openclash/clash 2>/dev/null - core_start_log="Tip: No Special Configuration Detected, Use Dev Core to Start..." - fi - - if [ ! -f "/etc/openclash/clash" ] && [ -f "$tun_core_path" ]; then - ln -s "$tun_core_path" /etc/openclash/clash 2>/dev/null - core_type="TUN" - core_start_log="Tip: Detected that the Dev Core is not Installed, Use TUN Core to Start..." - fi - - [ ! -f "$CLASH" ] && { - LOG_OUT "Tip: Detected that the Core is not Installed, Ready to Download..." - rm -rf "/tmp/clash_last_version" - /usr/share/openclash/openclash_core.sh "$core_type" - if [ "$core_type" == "TUN" ] && [ ! -f "$tun_core_path" ]; then - start_fail - elif [ -z "$core_type" ] && [ ! -f "$dev_core_path" ]; then - start_fail - else - del_lock - restart - exit 0 - fi - } - - [ ! -f "$geoip_path" ] && { - LOG_OUT "Tip: Detected that the GEOIP Database is not Installed, Ready to Download..." - /usr/share/openclash/openclash_ipdb.sh - } - - if [ "$china_ip_route" = "1" ] || [ "$china_ip6_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then - if [ ! -f "$chnr_path" ] || [ ! -f "$chnr6_path" ]; then - LOG_OUT "Tip: Detected that the Chnroute Cidr List is not Installed, Ready to Download..." - /usr/share/openclash/openclash_chnroute.sh - fi - fi - - if [ ! -f "$chnr_path" ] || [ ! -f "$chnr6_path" ] || [ ! -f "$geoip_path" ]; then - start_fail - fi - - [ ! -x "$tun_core_path" ] && chmod 4755 "$tun_core_path" 2>/dev/null - [ ! -x "$dev_core_path" ] && chmod 4755 "$dev_core_path" 2>/dev/null - - #fake_ip_filter - if [ "$3" = "fake-ip" ]; then - if [ ! -f "/tmp/openclash_fake_filter.list" ] || [ -n "$(grep "config servers" /etc/config/openclash 2>/dev/null)" ]; then - /usr/share/openclash/openclash_fake_filter.sh - fi - if [ -s "/tmp/openclash_servers_fake_filter.conf" ]; then - mkdir -p /tmp/dnsmasq.d - cp /tmp/openclash_servers_fake_filter.conf /tmp/dnsmasq.d/dnsmasq_openclash.conf - fi - fi - - [ -f "$geoip_path" ] && [ "$small_flash_memory" = "1" ] && { - ln -s "$geoip_path" /etc/openclash/Country.mmdb 2>/dev/null - } - - [ -f "$chnr_path" ] && [ "$small_flash_memory" = "1" ] && { - ln -s "$chnr_path" /etc/openclash/china_ip_route.ipset 2>/dev/null - } - - [ -f "$chnr6_path" ] && [ "$small_flash_memory" = "1" ] && { - ln -s "$chnr6_path" /etc/openclash/china_ip6_route.ipset 2>/dev/null - } - - #Resore history cache - if [ -f "$HISTORY_PATH" ] && [ -f "$HISTORY_PATH_OLD" ]; then - if [ "$(date -r $HISTORY_PATH +%s)" -ge "$(date -r $HISTORY_PATH_OLD +%s)" ]; then - cmp -s "$CACHE_PATH" "$HISTORY_PATH" - if [ "$?" -ne "0" ]; then - cp "$HISTORY_PATH" "$CACHE_PATH" 2>/dev/null - fi - else - cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD" - if [ "$?" -ne "0" ]; then - cp "$HISTORY_PATH_OLD" "$CACHE_PATH_OLD" 2>/dev/null - fi - fi - else - if [ -f "$HISTORY_PATH" ]; then - cmp -s "$CACHE_PATH" "$HISTORY_PATH" - if [ "$?" -ne "0" ]; then - cp "$HISTORY_PATH" "$CACHE_PATH" 2>/dev/null - fi - fi - if [ -f "$HISTORY_PATH_OLD" ]; then - cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD" - if [ "$?" -ne "0" ]; then - cp "$HISTORY_PATH_OLD" "$CACHE_PATH_OLD" 2>/dev/null - fi - fi - fi - [ -f "$CACHE_PATH" ] && [ "$small_flash_memory" = "1" ] && { - ln -s "$CACHE_PATH" /etc/openclash/cache.db 2>/dev/null - } - - if [ -z "$_koolshare" ]; then - if ! capsh --is-uid=0 >/dev/null || ! capsh --has-ambient >/dev/null; then - LOG_OUT "Error: Could Not Load The Capsh Library, Please Verify The Capsh Shell Library Work Well" - LOG_OUT "Tip: You Could Download And Re-Install The libcap & libcap-bin Library From The Address Give" - echo "" >> $LOG_FILE - echo "---------- https://mirrors.cloud.tencent.com/lede/snapshots/packages/ ----------" >> $LOG_FILE - echo "" >> $LOG_FILE - sleep 3 - start_fail - fi - fi - - #创建原始备份 - if [ ! -f "$2" ]; then - cp "$1" "$2" - fi - - #保存启动内核类型 - uci -q set openclash.config.core_type="$core_type" - uci -q commit openclash - -} - -#绑定interface防止回环 -check_interface_name() -{ - if [ -n "$interface_name" ] && [ "$interface_name" != "0" ]; then - ruby_edit "$CONFIG_FILE" "['interface-name']='$interface_name'" - else - sed -i "/^interface-name:/d" "$CONFIG_FILE" 2>/dev/null - fi -} - -start_run_core() -{ - LOG_OUT "$core_start_log" - ulimit -SHn 65535 2>/dev/null - ulimit -v unlimited 2>/dev/null - modprobe tun >/dev/null 2>&1 - check_interface_name - config_reload=$(uci -q get openclash.config.config_reload) - if [ -n "$(pidof clash)" ] && [ "$core_type" != "TUN" ] && [ "$config_reload" != "0" ]; then - curl -s --connect-timeout 5 -m 5 -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XPUT http://"$lan_ip":"$cn_port"/configs -d "{\"path\": \"$CONFIG_FILE\"}" 2>/dev/null - else - kill_clash - if [ -z "$_koolshare" ]; then - #防止赋权失败 - touch "/tmp/openclash.log" 2>/dev/null - chmod o+w /etc/openclash/proxy_provider/* 2>/dev/null - chmod o+w /etc/openclash/rule_provider/* 2>/dev/null - chmod o+w /tmp/openclash.log 2>/dev/null - chown nobody:nogroup /etc/openclash/core/* 2>/dev/null - #使用nobody启动内核方便代理路由自身流量 - capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin" - capsh --caps="${capabilties}+eip" -- -c "capsh --user=nobody --addamb='${capabilties}' -- -c 'nohup $CLASH -d $CLASH_CONFIG -f \"$CONFIG_FILE\" >> $LOG_FILE 2>&1 &'" >> $LOG_FILE 2>&1 - else - nohup $CLASH -d $CLASH_CONFIG -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 & - fi - fi - uci -q set openclash.config.config_reload=1 - uci -q commit openclash -} - -check_core_status() -{ - check_time=1 - while ( [ "$check_time" -le 3 ] && [ -n "$(pidof clash)" ] ) - do - sleep 1 - let check_time++ - done - if [ -z "$(pidof clash)" ]; then - LOG_ALERT - fi -} - -#不修改配置文件启动 -raw_config_start() -{ - cp "$RAW_CONFIG_FILE" "$CONFIG_FILE" - dns_port=$(ruby_read "$CONFIG_FILE" "['dns']['listen'].split(':')[1]") - en_mode=$(ruby_read "$CONFIG_FILE" "['dns']['enhanced-mode']") - proxy_port=$(ruby_read "$CONFIG_FILE" "['redir-port']") - - if [ -z "$dns_port" ] || [ -z "$en_mode" ] || [ -z "$proxy_port" ]; then - if [ -z "$dns_port" ]; then - LOG_OUT "Error: Get DNS 'listen' Option Error, OpenClash Can Not Start With Raw Config File" - sleep 2 - fi - if [ -z "$en_mode" ]; then - LOG_OUT "Error: Get DNS 'enhanced-mode' Option Error, OpenClash Can Not Start With Raw Config File" - sleep 2 - fi - if [ -z "$proxy_port" ]; then - LOG_OUT "Error: Get General 'redir-port' Option Error, OpenClash Can Not Start With Raw Config File" - sleep 2 - fi - start_fail - fi - - start_run_core - check_core_status - - if ! pidof clash >/dev/null; then - LOG_OUT "Error: OpenClash Can Not Start, Please Check The Error Info And Try Again!" - sleep 3 - start_fail - fi - - if [ "$en_mode" = "redir-host" ]; then - case $en_mode_tun in - "1") - uci -q set openclash.config.en_mode=redir-host-tun - ;; - "2") - uci -q set openclash.config.en_mode=redir-host-mix - ;; - *) - uci -q set openclash.config.en_mode=redir-host - esac - elif [ "$en_mode" = "fake-ip" ]; then - case $en_mode_tun in - "1") - uci -q set openclash.config.en_mode=fake-ip-tun - ;; - "2") - uci -q set openclash.config.en_mode=fake-ip-mix - ;; - *) - uci -q set openclash.config.en_mode=fake-ip - esac - fi - - dase=$(ruby_read "$CONFIG_FILE" "['secret']") - uci -q set openclash.config.dashboard_password="$dase" - - cn_port=$(ruby_read "$CONFIG_FILE" "['external-controller'].split(':')[1]") - uci -q set openclash.config.cn_port="$cn_port" - - uci -q set openclash.config.proxy_port="$proxy_port" - uci -q set openclash.config.restricted_mode=1 - - uci commit openclash -} - -try_restore_start() -{ - if [ -z "$(pidof clash)" ]; then - if [ "$rule_source" = 0 ] && [ "$enable_custom_clash_rules" = 0 ]; then - LOG_OUT "Error: OpenClash Can Not Start, Try Use Raw Config Restart Again..." - raw_config_start - else - LOG_OUT "Error: OpenClash Can Not Start, Try Use Backup Rules Start Again..." - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$RAW_CONFIG_FILE'); - Value_1 = YAML.load_file('$CONFIG_FILE'); - if Value.has_key?('rule-providers') then - Value_1['rule-providers'] = Value.select {|x| 'rule-providers' == x}['rule-providers'] - end; - if Value.has_key?('script') then - Value_1['script'] = Value.select {|x| 'script' == x}['script'] - end; - if Value.has_key?('rules') then - Value_1['rules'] = Value.select {|x| 'rules' == x}['rules'] - end; - File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value_1, f)} - rescue Exception => e - puts '${LOGTIME} Error: Restore Backup Rules Error,【' + e.message + '】' - end - " 2>/dev/null >> $LOG_FILE - start_run_core - check_core_status - if ! pidof clash >/dev/null; then - LOG_OUT "Error: OpenClash Can Not Start, Try Use Raw Config Restart Again..." - raw_config_start - fi - fi - fi -} - -#防火墙设置部分 -ac_add() -{ - if [ -z "$1" ]; then - return - fi - - ipset add "$2" "$1" 2>/dev/null - [ -n "$3" ] && ipset add "$3" "$1" 2>/dev/null -} - -firewall_rule_exclude() -{ - local section="$1" - local name src src_port dest dest_port proto target enabled family - - config_get "name" "$section" "name" "" - config_get "src" "$section" "src" "" - config_get "src_port" "$section" "src_port" "" - config_get "dest" "$section" "dest" "" - config_get "dest_port" "$section" "dest_port" "" - config_get "dest_ip" "$section" "dest_ip" "" - config_get "proto" "$section" "proto" "" - config_get "target" "$section" "target" "" - config_get "enabled" "$section" "enabled" "" - config_get "family" "$section" "family" "" - - if [ a"$target" != aACCEPT ] || [ a"$enabled" == a0 ]; then - return - fi - - local e_udp=false - local e_tcp=false - for p in $proto; do - if [ $p == tcp ]; then e_tcp=true; fi - if [ $p == udp ]; then e_udp=true; fi - if [ $p == all ]; then e_tcp=true; e_udp=true; fi - done - - if [ -z "$proto" ]; then e_tcp=true; e_udp=true; fi - - if ! $e_udp && ! $e_tcp ; then - return - fi - - dest_port=$(echo $dest_port |sed "s/-/:/g" 2>/dev/null) - dest_ip=$(echo $dest_ip |sed "s/ /,/g" 2>/dev/null) - - if [ -z "$family" ] || [ "$family" == "ipv4" ]; then - if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then - for i in $dest_port; do - if $e_tcp ; then - iptables -t nat -I openclash_output -p tcp --sport "$i" -j RETURN >/dev/null 2>&1 - if [ -z "$dest_ip" ]; then - iptables -t nat -I openclash -p tcp --sport "$i" -j RETURN >/dev/null 2>&1 - else - iptables -t nat -I openclash -p tcp -s "$dest_ip" --sport "$i" -j RETURN >/dev/null 2>&1 - fi - fi - if $e_udp ; then - iptables -t mangle -I openclash_output -p udp --sport "$i" -j RETURN >/dev/null 2>&1 - if [ -z "$dest_ip" ]; then - iptables -t mangle -I openclash -p udp --sport "$i" -j RETURN >/dev/null 2>&1 - else - iptables -t mangle -I openclash -p udp -s "$dest_ip" --sport "$i" -j RETURN >/dev/null 2>&1 - fi - fi - done - elif [ "$en_mode_tun" -eq 1 ]; then - for i in $dest_port; do - if $e_tcp ; then - iptables -t mangle -I openclash_output -p tcp --sport "$i" -j RETURN >/dev/null 2>&1 - if [ -z "$dest_ip" ]; then - iptables -t mangle -I openclash -p tcp --sport "$i" -j RETURN >/dev/null 2>&1 - else - iptables -t mangle -I openclash -p tcp -s "$dest_ip" --sport "$i" -j RETURN >/dev/null 2>&1 - fi - fi - if $e_udp ; then - iptables -t mangle -I openclash_output -p udp --sport "$i" -j RETURN >/dev/null 2>&1 - if [ -z "$dest_ip" ]; then - iptables -t mangle -I openclash -p udp --sport "$i" -j RETURN >/dev/null 2>&1 - else - iptables -t mangle -I openclash -p udp -s "$dest_ip" --sport "$i" -j RETURN >/dev/null 2>&1 - fi - fi - done - fi - fi - - if [ "$ipv6_enable" -eq 1 ] && [ -n "$(ip6tables -t mangle -L 2>&1 | grep -o 'Chain')" ]; then - if [ -z "$family" ] || [ "$family" == "ipv6" ]; then - for i in $dest_port; do - if $e_tcp ; then - if [ -z "$dest_ip" ]; then - ip6tables -t mangle -I openclash -p tcp --sport "$i" -j RETURN >/dev/null 2>&1 - else - ip6tables -t mangle -I openclash -s "$dest_ip" -p tcp --sport "$i" -j RETURN >/dev/null 2>&1 - fi - ip6tables -t mangle -I openclash_output -p tcp --sport "$i" -j RETURN >/dev/null 2>&1 - fi - if $e_udp ; then - if [ -z "$dest_ip" ]; then - ip6tables -t mangle -I openclash -p udp --sport "$i" -j RETURN >/dev/null 2>&1 - else - ip6tables -t mangle -I openclash -s "$dest_ip" -p udp --sport "$i" -j RETURN >/dev/null 2>&1 - fi - ip6tables -t mangle -I openclash_output -p udp --sport "$i" -j RETURN >/dev/null 2>&1 - fi - done - fi - fi -} - -firewall_redirect_exclude() -{ - local section="$1" - local src_dport dest_port dest_ip proto enabled - config_get "src_dport" "$section" "src_dport" "" - config_get "dest_port" "$section" "dest_port" "" - config_get "dest_ip" "$section" "dest_ip" "" - config_get "proto" "$section" "proto" "" - config_get "enabled" "$section" "enabled" "" - - if [ -z "$src_dport" ] || [ a"$enabled" == a0 ]; then - return - fi - local e_udp=false - local e_tcp=false - for p in $proto; do - if [ $p == tcp ]; then e_tcp=true; fi - if [ $p == udp ]; then e_udp=true; fi - if [ $p == all ]; then e_tcp=true; e_udp=true; fi - done - - if [ -z "$proto" ]; then e_tcp=true; e_udp=true; fi - - if ! $e_udp && ! $e_tcp ; then - return - fi - - if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then - iptables -t nat -I openclash_output -p tcp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash_output -p udp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p udp --dport "$src_dport" -j RETURN >/dev/null 2>&1 - elif [ "$en_mode_tun" -eq 1 ]; then - iptables -t mangle -I openclash_output -p tcp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash_output -p udp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p tcp --dport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p udp --dport "$src_dport" -j RETURN >/dev/null 2>&1 - if $e_tcp ; then - iptables -t mangle -I openclash -p tcp -s "$dest_ip" --sport "$dest_port" -j RETURN >/dev/null 2>&1 - fi - if $e_udp ; then - iptables -t mangle -I openclash -p udp -s "$dest_ip" --sport "$dest_port" -j RETURN >/dev/null 2>&1 - fi - fi - - if [ "$ipv6_enable" -eq 1 ] && [ -n "$(ip6tables -t mangle -L 2>&1 | grep -o 'Chain')" ]; then - if $e_tcp ; then - ip6tables -t mangle -I openclash -p tcp --dport "$src_dport" -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -I openclash -p tcp -s "$dest_ip" --sport "$dest_port" -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -I openclash_output -p tcp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -I openclash_output -p tcp -s "$dest_ip" --sport "$dest_port" -j RETURN >/dev/null 2>&1 - fi - if $e_udp ; then - ip6tables -t mangle -I openclash -p udp --dport "$src_dport" -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -I openclash -p udp -s "$dest_ip" --sport "$dest_port" -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -I openclash_output -p udp -s "$dest_ip" --sport "$dest_port" -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -I openclash_output -p udp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - fi - fi - -} - -set_firewall() -{ - -if [ -z "$(uci -q get firewall.openclash)" ] || [ -z "$(uci -q get ucitrack.@openclash[-1].init)" ]; then - uci -q delete ucitrack.@openclash[-1] - uci -q add ucitrack openclash - uci -q set ucitrack.@openclash[-1].init=openclash - uci -q commit ucitrack - uci -q delete firewall.openclash - uci -q set firewall.openclash=include - uci -q set firewall.openclash.type=script - uci -q set firewall.openclash.path=/var/etc/openclash.include - uci -q set firewall.openclash.reload=1 -fi - -mkdir -p /var/etc -cat > "/var/etc/openclash.include" <<-EOF -/etc/init.d/openclash reload >/dev/null 2>&1 -EOF - -if [ "$china_ip_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then - ipset -! flush china_ip_route 2>/dev/null - ipset -! restore /dev/null -fi - -if [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(iptables -t nat -nL PREROUTING --line-number |grep 'DNS Hijack')"]; then - DNSPORT=$(uci -q get dhcp.@dnsmasq[0].port) - if [ -z "$DNSPORT" ]; then - DNSPORT=$(netstat -nlp |grep -E '127.0.0.1:.*dnsmasq' |awk -F '127.0.0.1:' '{print $2}' |awk '{print $1}' |head -1 || echo "$dns_port") - fi - iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack" - iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack" -fi - -#lan_ac -if [ "$operation_mode" = "redir-host" ] && [ "$en_mode" = "redir-host" ]; then - if [ "$lan_ac_mode" = "0" ]; then - if [ -n "$(uci -q get openclash.config.lan_ac_black_ips)" ]; then - ipset create lan_ac_black_ips hash:net - ipset create lan_ac_black_ipv6s hash:net family inet6 - config_load "openclash" - config_list_foreach "config" "lan_ac_black_ips" ac_add "lan_ac_black_ips" "lan_ac_black_ipv6s" - fi - if [ -n "$(uci -q get openclash.config.lan_ac_black_macs)" ]; then - ipset create lan_ac_black_macs hash:mac - config_load "openclash" - config_list_foreach "config" "lan_ac_black_macs" ac_add "lan_ac_black_macs" - fi - elif [ "$lan_ac_mode" = "1" ]; then - if [ -n "$(uci -q get openclash.config.lan_ac_white_ips)" ]; then - ipset create lan_ac_white_ips hash:net - ipset create lan_ac_white_ipv6s hash:net family inet6 - config_load "openclash" - config_list_foreach "config" "lan_ac_white_ips" ac_add "lan_ac_white_ips" "lan_ac_white_ipv6s" - fi - if [ -n "$(uci -q get openclash.config.lan_ac_white_macs)" ]; then - ipset create lan_ac_white_macs hash:mac - config_load "openclash" - config_list_foreach "config" "lan_ac_white_macs" ac_add "lan_ac_white_macs" - fi - fi -fi - -#wan ac -if [ -n "$(uci -q get openclash.config.wan_ac_black_ips)" ]; then - ipset create wan_ac_black_ips hash:net - ipset create wan_ac_black_ipv6s hash:net family inet6 - config_load "openclash" - config_list_foreach "config" "wan_ac_black_ips" ac_add "wan_ac_black_ips" "wan_ac_black_ipv6s" -fi - -#local - ipset create localnetwork hash:net - ipset add localnetwork 0.0.0.0/8 - ipset add localnetwork 127.0.0.0/8 - ipset add localnetwork 10.0.0.0/8 - ipset add localnetwork 169.254.0.0/16 - ipset add localnetwork 192.168.0.0/16 - ipset add localnetwork 224.0.0.0/4 - ipset add localnetwork 240.0.0.0/4 - ipset add localnetwork 172.16.0.0/12 - ipset add localnetwork 100.64.0.0/10 - - if [ -n "$lan_ip_cidrs" ]; then - for lan_ip_cidr in $lan_ip_cidrs; do - ipset add localnetwork "$lan_ip_cidr" 2>/dev/null - done - fi - - if [ -n "$wan_ip4s" ]; then - for wan_ip4 in $wan_ip4s; do - ipset add localnetwork "$wan_ip4" 2>/dev/null - done - fi - -#common ports -if [ "$common_ports" = "1" ]; then - common_port="21 22 23 53 80 123 143 194 443 465 587 853 993 995 998 2052 2053 2082 2083 2086 2095 2096 5222 5228 5229 5230 8080 8443 8880 8888 8889" - ipset create common_ports bitmap:port range 0-65535 - for i in $common_port; do - ipset add common_ports $i - done -fi - -if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then - #tcp - iptables -t nat -N openclash - iptables -t nat -F openclash - iptables -t nat -A openclash -m set --match-set localnetwork dst -j RETURN - iptables -t nat -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - iptables -t nat -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - if [ "$china_ip_route" = "1" ]; then - iptables -t nat -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - fi - iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" - iptables -t nat -A PREROUTING -p tcp -j openclash - if [ -z "$en_mode_tun" ]; then - #Google dns - iptables -t nat -I PREROUTING -m comment --comment "OpenClash Google DNS Hijack" -p tcp -d 8.8.8.8 --dport 53 -j REDIRECT --to-ports "$proxy_port" - iptables -t nat -I PREROUTING -m comment --comment "OpenClash Google DNS Hijack" -p tcp -d 8.8.4.4 --dport 53 -j REDIRECT --to-ports "$proxy_port" - #udp - if [ "$enable_udp_proxy" -eq 1 ]; then - modprobe xt_TPROXY >/dev/null 2>&1 - ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" - ip route add local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE" - iptables -t mangle -N openclash - iptables -t mangle -F openclash - iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN - iptables -t mangle -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - if [ "$china_ip_route" = "1" ]; then - iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - fi - iptables -t mangle -A openclash -p udp --dport 53 -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK" - iptables -t mangle -A PREROUTING -p udp -j openclash - - #quic - if [ "$disable_udp_quic" -eq 1 ]; then - iptables -I INPUT -p udp --dport 443 -m comment --comment "OpenClash QUIC REJECT" -m set ! --match-set china_ip_route dst -j REJECT >/dev/null 2>&1 - fi - - elif [ "$en_mode" = "fake-ip" ]; then - modprobe xt_TPROXY >/dev/null 2>&1 - ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" - ip route add local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE" - iptables -t mangle -N openclash - iptables -t mangle -F openclash - iptables -t mangle -A openclash -p udp -d 198.18.0.0/16 -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK" - iptables -t mangle -A PREROUTING -p udp -j openclash - - #quic - if [ "$disable_udp_quic" -eq 1 ]; then - iptables -I INPUT -p udp --dport 443 -m comment --comment "OpenClash QUIC REJECT" -m set ! --match-set china_ip_route dst -j REJECT >/dev/null 2>&1 - fi - fi - fi - - if [ -z "$_koolshare" ]; then - iptables -t nat -N openclash_output - iptables -t nat -F openclash_output - iptables -t nat -A openclash_output -m set --match-set localnetwork dst -j RETURN - if [ "$en_mode" = "fake-ip" ]; then - if [ "$intranet_allowed" -eq 1 ]; then - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -d 198.18.0.0/16 -j DNAT --to-destination "$lan_ip:$proxy_port" - else - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports "$proxy_port" - fi - fi - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - iptables -t nat -A openclash_output -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - if [ "$china_ip_route" = "1" ]; then - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - fi - if [ "$intranet_allowed" -eq 1 ]; then - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j DNAT --to-destination "$lan_ip:$proxy_port" - else - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j REDIRECT --to-ports "$proxy_port" - fi - else - if [ "$en_mode" = "fake-ip" ]; then - iptables -t nat -N openclash_output - iptables -t nat -F openclash_output - if [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(iptables -t nat -nL OUTPUT --line-number |grep 'DNS Hijack')"]; then - iptables -t nat -I OUTPUT -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack" - iptables -t nat -I OUTPUT -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack" - fi - iptables -t nat -A openclash_output -m set --match-set localnetwork dst -j RETURN - if [ "$intranet_allowed" -eq 1 ]; then - iptables -t nat -A openclash_output -p tcp -d 198.18.0.0/16 -j DNAT --to-destination "$lan_ip:$proxy_port" - else - iptables -t nat -A openclash_output -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports "$proxy_port" - fi - - fi - fi - iptables -t nat -A OUTPUT -j openclash_output >/dev/null 2>&1 -fi -if [ -n "$en_mode_tun" ]; then - #TUN模式 - #启动TUN - TUN_WAIT=0 - ip link set utun up - while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 3 ] ) - do - ip link set utun up - let TUN_WAIT++ - sleep 2 - done - ip route replace default dev utun table "$PROXY_ROUTE_TABLE" - ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" - - #设置防火墙 - if [ "$en_mode" = "fake-ip" ]; then - iptables -t mangle -N openclash_output - iptables -t mangle -F openclash_output - iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN - if [ "$en_mode_tun" -eq 1 ]; then - if [ -z "$_koolshare" ]; then - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j MARK --set-mark "$PROXY_FWMARK" - else - iptables -t mangle -A openclash_output -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK" - fi - elif [ -z "$_koolshare" ]; then - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p udp -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK" - fi - iptables -t mangle -A OUTPUT -j openclash_output - elif [ -z "$_koolshare" ] && [ "$en_mode" = "redir-host" ] && [ "$en_mode_tun" -eq 1 ]; then - iptables -t mangle -N openclash_output - iptables -t mangle -F openclash_output - iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN - iptables -t mangle -A openclash_output -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - if [ "$china_ip_route" = "1" ]; then - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -A OUTPUT -j openclash_output - fi - - iptables -t mangle -N openclash - iptables -t mangle -F openclash - iptables -t mangle -N openclash_dns_hijack - iptables -t mangle -F openclash_dns_hijack - #其他流量 - iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - if [ "$china_ip_route" = "1" ]; then - iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - fi - iptables -t mangle -A openclash -j MARK --set-mark "$PROXY_FWMARK" - - if [ "$en_mode_tun" -eq 1 ]; then - iptables -t mangle -I PREROUTING -j openclash - iptables -t nat -I PREROUTING -m comment --comment "OpenClash Google DNS Hijack" -p tcp -d 8.8.8.8 --dport 53 -j ACCEPT - iptables -t nat -I PREROUTING -m comment --comment "OpenClash Google DNS Hijack" -p tcp -d 8.8.4.4 --dport 53 -j ACCEPT - else - iptables -t mangle -I PREROUTING -p tcp --dport 53 -j openclash_dns_hijack - iptables -t mangle -A openclash_dns_hijack -m comment --comment "OpenClash Google DNS Hijack" -d 8.8.8.8 -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -A openclash_dns_hijack -m comment --comment "OpenClash Google DNS Hijack" -d 8.8.4.4 -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -I PREROUTING -p udp -j openclash - iptables -t nat -I PREROUTING -m comment --comment "OpenClash Google DNS Hijack" -p tcp --dport 53 -d 8.8.8.8 -j ACCEPT - iptables -t nat -I PREROUTING -m comment --comment "OpenClash Google DNS Hijack" -p tcp --dport 53 -d 8.8.4.4 -j ACCEPT - fi - - #snat routerself for tun while bindaddress enable - if [ "$en_mode_tun" -eq 1 ] && [ "$intranet_allowed" -eq 1 ]; then - if [ -z "$_koolshare" ]; then - iptables -t nat -N openclash_post - iptables -t nat -F openclash_post - iptables -t nat -A openclash_post -m owner ! --uid-owner 65534 -i lo -d 127.0.0.1 -j SNAT --to-source "$lan_ip" - iptables -t nat -A POSTROUTING -j openclash_post - elif [ "$en_mode" = "fake-ip" ]; then - iptables -t nat -N openclash_post - iptables -t nat -F openclash_post - iptables -t nat -A openclash_post -i lo -d 127.0.0.1 -j SNAT --to-source "$lan_ip" - iptables -t nat -A POSTROUTING -j openclash_post - fi - fi - - #TUN FORWORD - iptables -I FORWARD -m comment --comment "OpenClash TUN Forward" -o utun -j ACCEPT - - #quic - if [ "$disable_udp_quic" -eq 1 ]; then - iptables -I FORWARD -p udp --dport 443 -o utun -m comment --comment "OpenClash QUIC REJECT" -m set ! --match-set china_ip_route dst -j REJECT >/dev/null 2>&1 - fi -fi - - - -#ipv6 -if [ "$ipv6_enable" -eq 1 ] && [ -n "$(ip6tables -t mangle -L 2>&1 | grep -o 'Chain')" ]; then - if [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(ip6tables -t nat -nL PREROUTING --line-number |grep 'dns_hijack')"]; then - ip6tables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack" - ip6tables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack" - fi - - if [ "$china_ip6_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then - ipset -! flush china_ip6_route 2>/dev/null - ipset -! restore /dev/null - fi - - #local - ipset create localnetwork6 hash:net family inet6 - ipset add localnetwork6 ::/128 - ipset add localnetwork6 ::1/128 - ipset add localnetwork6 ::ffff:0:0/96 - ipset add localnetwork6 ::ffff:0:0:0/96 - ipset add localnetwork6 64:ff9b::/96 - ipset add localnetwork6 100::/64 - ipset add localnetwork6 2001::/32 - ipset add localnetwork6 2001:20::/28 - ipset add localnetwork6 2001:db8::/32 - ipset add localnetwork6 2002::/16 - ipset add localnetwork6 fc00::/7 - ipset add localnetwork6 fe80::/10 - ipset add localnetwork6 ff00::/8 - - if [ -n "$wan_ip6s" ]; then - for wan_ip6 in $wan_ip6s; do - ipset add localnetwork6 "$wan_ip6" - done - fi - - modprobe xt_TPROXY >/dev/null 2>&1 - ip -6 rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" - ip -6 route add local ::/0 dev lo table "$PROXY_ROUTE_TABLE" - - #Google dns - ip6tables -t nat -I PREROUTING -m comment --comment "OpenClash Google DNS Hijack" -p tcp -d 2001:4860:4860::8888 --dport 53 -j ACCEPT - ip6tables -t nat -I PREROUTING -m comment --comment "OpenClash Google DNS Hijack" -p tcp -d 2001:4860:4860::8844 --dport 53 -j ACCEPT - - ip6tables -t mangle -N openclash - ip6tables -t mangle -F openclash - ip6tables -t mangle -A openclash -m set --match-set localnetwork6 dst -j RETURN - ip6tables -t mangle -A openclash -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1 - if [ "$en_mode" == "redir-host" ]; then - ip6tables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -A openclash -m set --match-set lan_ac_black_ipv6s src -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -A openclash -m set ! --match-set lan_ac_white_ipv6s src -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi - if [ "$china_ip6_route" = "1" ]; then - ip6tables -t mangle -A openclash -m set --match-set china_ip6_route dst -j RETURN >/dev/null 2>&1 - fi - ip6tables -t mangle -A openclash -p tcp -m comment --comment "OpenClash" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" - ip6tables -t mangle -A PREROUTING -j openclash - - if [ -z "$_koolshare" ]; then - ip6tables -t mangle -N openclash_output - ip6tables -t mangle -F openclash_output - ip6tables -t mangle -A openclash_output -m set --match-set localnetwork6 dst -j RETURN - ip6tables -t mangle -A openclash_output -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - ip6tables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - if [ "$china_ip6_route" = "1" ]; then - ip6tables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip6_route dst -j RETURN >/dev/null 2>&1 - fi - ip6tables -t mangle -A openclash_output -p tcp -m owner ! --uid-owner 65534 -j MARK --set-xmark "$PROXY_FWMARK" - ip6tables -t mangle -A OUTPUT -j openclash_output - fi - - #udp - if [ "$enable_udp_proxy" -eq 1 ] || [ -n "$en_mode_tun" ]; then - ip6tables -t mangle -A openclash_output -p udp -m owner ! --uid-owner 65534 -j MARK --set-xmark "$PROXY_FWMARK" - ip6tables -t mangle -A openclash -p udp -m comment --comment "OpenClash" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" - fi - - #quic - if [ "$disable_udp_quic" -eq 1 ]; then - ip6tables -I INPUT -p udp --dport 443 -m comment --comment "OpenClash QUIC REJECT" -m set ! --match-set china_ip6_route dst -j REJECT >/dev/null 2>&1 - fi - -fi 2>/dev/null - -#端口转发 -config_load "firewall" -config_foreach firewall_redirect_exclude "redirect" -config_foreach firewall_rule_exclude "rule" -} - -revert_firewall() -{ - rm -rf /var/etc/openclash.include - - ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - ip route del local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - - ip -6 rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - ip -6 route del local ::/0 dev lo table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - - #TUN - ip route del default dev utun table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - ip link set dev utun down >/dev/null 2>&1 - ip tuntap del utun mode tun >/dev/null 2>&1 - - for ipt in "iptables -nvL INPUT" "iptables -nvL FORWARD" "iptables -nvL POSTROUTING -t nat" "iptables -nvL OUTPUT -t nat" "iptables -nvL OUTPUT -t mangle" "iptables -nvL PREROUTING -t nat" "iptables -nvL PREROUTING -t mangle" "ip6tables -nvL PREROUTING -t mangle" "ip6tables -nvL OUTPUT -t mangle" "ip6tables -nvL PREROUTING -t nat" "ip6tables -nvL INPUT"; do - for comment in "openclash" "DNS Hijack" "OpenClash"; do - local lines=$($ipt |sed 1,2d |sed -n "/${comment}/=" 2>/dev/null |sort -rn) - if [ -n "$lines" ]; then - for line in $lines; do - $(echo "$ipt" |awk -v OFS=" " '{print $1,$4,$5}' |sed 's/[ ]*$//g') -D $(echo "$ipt" |awk '{print $3}') $line - done - fi - done - done >/dev/null 2>&1 - - for chain in "openclash" "openclash_output" "openclash_post" "openclash_dns_hijack"; do - iptables -t nat -F $chain - iptables -t nat -X $chain - iptables -t mangle -F $chain - iptables -t mangle -X $chain - ip6tables -t mangle -F $chain - ip6tables -t mangle -X $chain - done >/dev/null 2>&1 - - ipset destroy localnetwork6 >/dev/null 2>&1 - ipset destroy china_ip6_route >/dev/null 2>&1 - ipset destroy lan_ac_white_ipv6s >/dev/null 2>&1 - ipset destroy lan_ac_black_ipv6s >/dev/null 2>&1 - ipset destroy wan_ac_black_ipv6s >/dev/null 2>&1 - - ipset destroy localnetwork >/dev/null 2>&1 - ipset destroy china_ip_route >/dev/null 2>&1 - ipset destroy lan_ac_white_ips >/dev/null 2>&1 - ipset destroy lan_ac_black_ips >/dev/null 2>&1 - ipset destroy lan_ac_white_macs >/dev/null 2>&1 - ipset destroy lan_ac_black_macs >/dev/null 2>&1 - ipset destroy wan_ac_black_ips >/dev/null 2>&1 - ipset destroy common_ports >/dev/null 2>&1 -} - -get_config() -{ - rule_source=$(uci -q get openclash.config.rule_source) - enable_custom_dns=$(uci -q get openclash.config.enable_custom_dns) - enable_custom_clash_rules=$(uci -q get openclash.config.enable_custom_clash_rules) - da_password=$(uci -q get openclash.config.dashboard_password) - cn_port=$(uci -q get openclash.config.cn_port) - proxy_port=$(uci -q get openclash.config.proxy_port) - tproxy_port=$(uci -q get openclash.config.tproxy_port || echo 7895) - proxy_mode=$(uci -q get openclash.config.proxy_mode) - ipv6_enable=$(uci -q get openclash.config.ipv6_enable) - ipv6_dns=$(uci -q get openclash.config.ipv6_dns || echo 0) - http_port=$(uci -q get openclash.config.http_port) - socks_port=$(uci -q get openclash.config.socks_port) - enable_redirect_dns=$(uci -q get openclash.config.enable_redirect_dns) - lan_ip=$(uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null || ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1) - lan_ip_cidrs=$(ip route | grep "/" | awk '{print $1}' | grep -vE "^198.18" 2>/dev/null) - wan_ip4s=$(ifconfig | grep 'inet addr' | awk '{print $2}' | cut -d: -f2 | grep -vE "(^198.18|^192.168|^127.0)" 2>/dev/null) - wan_ip6s=$(ifconfig | grep 'inet6 addr' | awk '{print $3}' 2>/dev/null) - disable_masq_cache=$(uci -q get openclash.config.disable_masq_cache) - log_level=$(uci -q get openclash.config.log_level) - intranet_allowed=$(uci -q get openclash.config.intranet_allowed) - enable_udp_proxy=$(uci -q get openclash.config.enable_udp_proxy || echo 1) - disable_udp_quic=$(uci -q get openclash.config.disable_udp_quic) - operation_mode=$(uci -q get openclash.config.operation_mode) - lan_ac_mode=$(uci -q get openclash.config.lan_ac_mode) - enable_rule_proxy=$(uci -q get openclash.config.enable_rule_proxy) - stack_type=$(uci -q get openclash.config.stack_type) - china_ip_route=$(uci -q get openclash.config.china_ip_route) - china_ip6_route=$(uci -q get openclash.config.china_ip6_route) - small_flash_memory=$(uci -q get openclash.config.small_flash_memory) - mixed_port=$(uci -q get openclash.config.mixed_port) - interface_name=$(uci -q get openclash.config.interface_name) - common_ports=$(uci -q get openclash.config.common_ports) - dns_port=$(uci -q get openclash.config.dns_port) - tolerance=$(uci -q get openclash.config.tolerance) - custom_fallback_filter=$(uci -q get openclash.config.custom_fallback_filter) - stream_domains_prefetch=$(uci -q get openclash.config.stream_domains_prefetch || echo 0) - append_wan_dns=$(uci -q get openclash.config.append_wan_dns || echo 1) - store_fakeip=$(uci -q get openclash.config.store_fakeip || echo 1) - dns_remote=$(uci -q get openclash.config.dns_remote || echo 1) - _koolshare=$(cat /usr/lib/os-release 2>/dev/null |grep OPENWRT_RELEASE 2>/dev/null |grep -i koolshare 2>/dev/null) - [ -z "$dns_port" ] && dns_port=7874 && uci -q set openclash.config.dns_port=7874 - [ "$ipv6_enable" -eq 1 ] && [ "$intranet_allowed" -eq 1 ] && intranet_allowed=0 && uci -q set openclash.config.intranet_allowed=0 - uci -q set openclash.config.restricted_mode=0 && uci -q commit openclash -} - -start() -{ - - enable=$(uci -q get openclash.config.enable) - [ "$enable" != "1" ] && LOG_OUT "Warning: OpenClash Now Disabled, Need Start From Luci Page, Exit..." && SLOG_CLEAN && del_lock && exit 0 - - LOG_OUT "OpenClash Start Running..." - config_choose - do_run_mode - - LOG_OUT "Step 1: Get The Configuration..." - get_config - - LOG_OUT "Step 2: Check The Components..." - #检查文件是否存在 - do_run_file "$RAW_CONFIG_FILE" "$BACKUP_FILE" "$en_mode" - - #快速启动判断 - check_run_quick - - if ! $quick_start; then - LOG_OUT "Step 3: Modify The Config File..." - config_check - config_load "openclash" - config_foreach yml_auth_get "authentication" - yml_auth_custom "$CONFIG_FILE" - yml_dns_custom "$enable_custom_dns" "$CONFIG_FILE" "$append_wan_dns" "$ipv6_dns" - /usr/share/openclash/yml_change.sh 2>/dev/null "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$CONFIG_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$lan_ip" "$log_level" "$proxy_mode" "$intranet_allowed" "$en_mode_tun" "$stack_type" "$dns_port" "$core_type" "$mixed_port" "$tproxy_port" "$ipv6_dns" "$store_fakeip" "$stream_domains_prefetch" "$dns_remote" - /usr/share/openclash/yml_rules_change.sh 2>/dev/null "$LOGTIME" "$rule_source" "$enable_custom_clash_rules" "$CONFIG_FILE" "$enable_rule_proxy" "$CONFIG_NAME" - yml_custom_rule_provider - yml_game_custom - yml_provider_path "$CONFIG_FILE" "proxy-providers" "proxy_provider" - yml_provider_path "$CONFIG_FILE" "rule-providers" "rule_provider" - yml_vmess_compatible "$CONFIG_FILE" "proxies" - yml_dns_check "$CONFIG_FILE" "$FALLBACK_FILTER_FILE" - yml_tolerance_set "$CONFIG_FILE" "$tolerance" - fi - - LOG_OUT "Step 4: Start Running The Clash Core..." - start_run_core - - LOG_OUT "Step 5: Check The Core Status..." - check_core_status - - #检测proxy_provider配置文件状态 - LOG_OUT "Step 6: Wait For The File Downloading..." - yml_provider_check "$CONFIG_FILE" "proxy-providers" "proxies" - yml_provider_check "$CONFIG_FILE" "rule-providers" "payload" - try_restore_start - - LOG_OUT "Step 7: Set Control Panel..." - ln -s /usr/share/openclash/yacd /www/luci-static/openclash 2>/dev/null - - LOG_OUT "Step 8: Set Firewall Rules..." - set_firewall - - LOG_OUT "Step 9: Restart Dnsmasq..." - change_dns "$enable_redirect_dns" "$disable_masq_cache" - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - - LOG_OUT "Step 10: Add Cron Rules, Start Daemons..." - add_cron - if [ -z "$(uci -q get dhcp.lan.dhcpv6)" ] && [ "$(uci -q get openclash.config.restricted_mode)" != "1" ]; then - LOG_OUT "OpenClash Start Successful!" - sleep 3 - elif [ -n "$(uci -q get dhcp.lan.dhcpv6)" ] && [ "$ipv6_enable" -eq 0 ]; then - LOG_OUT "Warning: OpenClash Start Successful, Please Note That Network May Abnormal With IPv6's DHCP Server" - sleep 3 - fi - if [ "$(uci -q get openclash.config.restricted_mode)" = "1" ]; then - LOG_OUT "Warning: OpenClash Start Successful With Raw Config File, Please Note That It's Restricted Mode Now" - sleep 3 - fi - echo "OpenClash Already Start!" - write_run_quick - SLOG_CLEAN - rm -rf /tmp/yaml_* -} - -stop() -{ - - enable=$(uci -q get openclash.config.enable) - - LOG_OUT "OpenClash Stoping..." - LOG_OUT "Step 1: Backup The Current Groups State..." - /usr/share/openclash/openclash_history_get.sh 2>/dev/null - - LOG_OUT "Step 2: Delete OpenClash Firewall Rules..." - revert_firewall - - LOG_OUT "Step 3: Close The OpenClash Daemons..." - watchdog_pids=$(unify_ps_pids "openclash_watchdog.sh") - for watchdog_pid in $watchdog_pids; do - kill -9 "$watchdog_pid" >/dev/null 2>&1 - done >/dev/null 2>&1 - - streaming_unlock_pids=$(unify_ps_pids "openclash_streaming_unlock.lua") - for streaming_unlock_pid in $streaming_unlock_pids; do - kill -9 "$streaming_unlock_pid" >/dev/null 2>&1 - done >/dev/null 2>&1 - - LOG_OUT "Step 4: Close The Clash Core Process..." - if [ "$enable" != "1" ]; then - kill_clash - fi - - LOG_OUT "Step 5: Restart Dnsmasq..." - dns_port=$(uci -q get openclash.config.dns_port) - redirect_dns=$(uci -q get openclash.config.redirect_dns) - masq_cache=$(uci -q get openclash.config.masq_cache) - default_resolvfile=$(uci -q get openclash.config.default_resolvfile) - revert_dns "$redirect_dns" "$masq_cache" "$dns_port" "$enable" "$default_resolvfile" - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - - LOG_OUT "Step 6: Delete OpenClash Residue File..." - if [ "$enable" != "1" ]; then - rm -rf /www/luci-static/openclash - rm -rf /tmp/clash_last_version - rm -rf /tmp/Proxy_Group - rm -rf /tmp/rules_name - rm -rf /tmp/rule_providers_name - rm -rf /tmp/openclash_fake_filter.list - rm -rf /tmp/openclash_servers_fake_filter.conf - rm -rf /tmp/openclash_last_version - rm -rf /tmp/openclash_config.tmp - rm -rf /tmp/openclash.change - rm -rf /tmp/openclash_debug.log - del_lock - LOG_OUT "OpenClash Already Stop!" - sleep 3 - rm -rf $LOG_FILE - fi - - del_cron - rm -rf /tmp/yaml_* - rm -rf $START_LOG - echo "OpenClash Already Stop!" -} - - -restart() -{ - [ -f "$LOCK_FILE" ] && LOG_OUT "Warning: Multiple Restart Scripts Running, Exit..." && SLOG_CLEAN && exit 0 - mkdir -p /tmp/lock - touch $LOCK_FILE - set_lock - stop - start - del_lock -} - -reload() -{ - if pidof clash >/dev/null; then - set_lock - revert_firewall 2>/dev/null - do_run_mode 2>/dev/null - get_config 2>/dev/null - set_firewall 2>/dev/null - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - LOG_OUT "Reload OpenClash Firewall Rules..." - SLOG_CLEAN - del_lock - fi -} diff --git a/luci-app-openclash/root/etc/openclash/Country.mmdb b/luci-app-openclash/root/etc/openclash/Country.mmdb deleted file mode 100644 index 0e45fec0..00000000 Binary files a/luci-app-openclash/root/etc/openclash/Country.mmdb and /dev/null differ diff --git a/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset b/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset deleted file mode 100644 index aef4fe49..00000000 --- a/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset +++ /dev/null @@ -1,1940 +0,0 @@ -create china_ip6_route hash:net family inet6 hashsize 1024 maxelem 1000000 -add china_ip6_route 2001:250::/35 -add china_ip6_route 2001:250:2000::/35 -add china_ip6_route 2001:250:4000::/34 -add china_ip6_route 2001:250:8000::/33 -add china_ip6_route 2001:251::/32 -add china_ip6_route 2001:252::/32 -add china_ip6_route 2001:253::/32 -add china_ip6_route 2001:254::/32 -add china_ip6_route 2001:255::/32 -add china_ip6_route 2001:256::/32 -add china_ip6_route 2001:7fa:5::/48 -add china_ip6_route 2001:7fa:10::/48 -add china_ip6_route 2001:c68::/32 -add china_ip6_route 2001:cc0::/32 -add china_ip6_route 2001:da8::/32 -add china_ip6_route 2001:da9::/32 -add china_ip6_route 2001:daa::/32 -add china_ip6_route 2001:dc7::/32 -add china_ip6_route 2001:dd8:1::/48 -add china_ip6_route 2001:dd8:5::/48 -add china_ip6_route 2001:dd8:1a::/48 -add china_ip6_route 2001:dd9::/48 -add china_ip6_route 2001:df0:27e::/48 -add china_ip6_route 2001:df0:423::/48 -add china_ip6_route 2001:df0:9c0::/48 -add china_ip6_route 2001:df0:1bc0::/48 -add china_ip6_route 2001:df0:2180::/48 -add china_ip6_route 2001:df0:25c0::/48 -add china_ip6_route 2001:df0:26c0::/48 -add china_ip6_route 2001:df0:2d80::/48 -add china_ip6_route 2001:df0:2e00::/48 -add china_ip6_route 2001:df0:2e80::/48 -add china_ip6_route 2001:df0:4500::/48 -add china_ip6_route 2001:df0:9a00::/48 -add china_ip6_route 2001:df0:b180::/48 -add china_ip6_route 2001:df0:bf80::/48 -add china_ip6_route 2001:df0:d880::/48 -add china_ip6_route 2001:df1:c80::/48 -add china_ip6_route 2001:df1:4580::/48 -add china_ip6_route 2001:df1:5280::/48 -add china_ip6_route 2001:df1:5b80::/48 -add china_ip6_route 2001:df1:6180::/48 -add china_ip6_route 2001:df1:6b80::/48 -add china_ip6_route 2001:df1:8b00::/48 -add china_ip6_route 2001:df1:a100::/48 -add china_ip6_route 2001:df1:bd80::/48 -add china_ip6_route 2001:df1:c900::/48 -add china_ip6_route 2001:df1:d100::/48 -add china_ip6_route 2001:df1:d180::/48 -add china_ip6_route 2001:df1:da00::/48 -add china_ip6_route 2001:df1:f480::/48 -add china_ip6_route 2001:df1:f580::/48 -add china_ip6_route 2001:df1:fd80::/48 -add china_ip6_route 2001:df2:80::/48 -add china_ip6_route 2001:df2:180::/48 -add china_ip6_route 2001:df2:5780::/48 -add china_ip6_route 2001:df2:5a80::/48 -add china_ip6_route 2001:df2:a580::/48 -add china_ip6_route 2001:df3:1480::/48 -add china_ip6_route 2001:df3:2a80::/48 -add china_ip6_route 2001:df3:3a80::/48 -add china_ip6_route 2001:df3:a680::/48 -add china_ip6_route 2001:df3:b100::/48 -add china_ip6_route 2001:df3:b380::/48 -add china_ip6_route 2001:df3:c380::/48 -add china_ip6_route 2001:df3:c680::/48 -add china_ip6_route 2001:df3:d880::/48 -add china_ip6_route 2001:df3:ed80::/48 -add china_ip6_route 2001:df3:ef80::/48 -add china_ip6_route 2001:df4:880::/48 -add china_ip6_route 2001:df4:d80::/48 -add china_ip6_route 2001:df4:1280::/48 -add china_ip6_route 2001:df4:1500::/48 -add china_ip6_route 2001:df4:1880::/48 -add china_ip6_route 2001:df4:2780::/48 -add china_ip6_route 2001:df4:2e80::/48 -add china_ip6_route 2001:df4:2f00::/48 -add china_ip6_route 2001:df4:3c80::/48 -add china_ip6_route 2001:df4:3d80::/48 -add china_ip6_route 2001:df4:4b80::/48 -add china_ip6_route 2001:df4:4d80::/48 -add china_ip6_route 2001:df4:a680::/48 -add china_ip6_route 2001:df4:a980::/48 -add china_ip6_route 2001:df4:c180::/48 -add china_ip6_route 2001:df4:c580::/48 -add china_ip6_route 2001:df4:c780::/48 -add china_ip6_route 2001:df4:cf00::/48 -add china_ip6_route 2001:df4:de80::/48 -add china_ip6_route 2001:df5:2080::/48 -add china_ip6_route 2001:df5:5f80::/48 -add china_ip6_route 2001:df5:7800::/48 -add china_ip6_route 2001:df6:100::/48 -add china_ip6_route 2001:df6:3d00::/48 -add china_ip6_route 2001:df6:5d00::/48 -add china_ip6_route 2001:df6:6800::/48 -add china_ip6_route 2001:df6:9e80::/48 -add china_ip6_route 2001:df6:9f80::/48 -add china_ip6_route 2001:df6:df00::/48 -add china_ip6_route 2001:df6:f400::/48 -add china_ip6_route 2001:df7:1480::/48 -add china_ip6_route 2001:df7:2b80::/48 -add china_ip6_route 2001:df7:6600::/48 -add china_ip6_route 2001:df7:ab00::/48 -add china_ip6_route 2001:df7:e580::/48 -add china_ip6_route 2001:df7:f080::/48 -add china_ip6_route 2001:e08::/32 -add china_ip6_route 2001:e18::/32 -add china_ip6_route 2001:e80::/32 -add china_ip6_route 2001:e88::/32 -add china_ip6_route 2001:f38::/32 -add china_ip6_route 2001:f88::/32 -add china_ip6_route 2001:4438::/32 -add china_ip6_route 2001:4510::/29 -add china_ip6_route 2400:1040::/32 -add china_ip6_route 2400:1160::/32 -add china_ip6_route 2400:12c0::/32 -add china_ip6_route 2400:1340::/32 -add china_ip6_route 2400:1380::/32 -add china_ip6_route 2400:15c0::/32 -add china_ip6_route 2400:1640::/32 -add china_ip6_route 2400:16c0::/32 -add china_ip6_route 2400:1740::/32 -add china_ip6_route 2400:17c0::/32 -add china_ip6_route 2400:1840::/32 -add china_ip6_route 2400:18c0::/32 -add china_ip6_route 2400:1940::/32 -add china_ip6_route 2400:19a0::/32 -add china_ip6_route 2400:19c0::/32 -add china_ip6_route 2400:1a40::/32 -add china_ip6_route 2400:1ac0::/32 -add china_ip6_route 2400:1b40::/32 -add china_ip6_route 2400:1cc0::/32 -add china_ip6_route 2400:1d40::/32 -add china_ip6_route 2400:1dc0::/32 -add china_ip6_route 2400:1e40::/32 -add china_ip6_route 2400:1ec0::/32 -add china_ip6_route 2400:1f40::/32 -add china_ip6_route 2400:1fc0::/32 -add china_ip6_route 2400:3040::/32 -add china_ip6_route 2400:3140::/32 -add china_ip6_route 2400:3160::/32 -add china_ip6_route 2400:31c0::/32 -add china_ip6_route 2400:3200::/32 -add china_ip6_route 2400:3280::/32 -add china_ip6_route 2400:32c0::/32 -add china_ip6_route 2400:3340::/32 -add china_ip6_route 2400:33c0::/32 -add china_ip6_route 2400:3440::/32 -add china_ip6_route 2400:34c0::/32 -add china_ip6_route 2400:3540::/32 -add china_ip6_route 2400:35c0::/32 -add china_ip6_route 2400:3600::/32 -add china_ip6_route 2400:3640::/32 -add china_ip6_route 2400:3660::/32 -add china_ip6_route 2400:36c0::/32 -add china_ip6_route 2400:38c0::/32 -add china_ip6_route 2400:39c0::/32 -add china_ip6_route 2400:3a00::/32 -add china_ip6_route 2400:3a40::/32 -add china_ip6_route 2400:3b40::/32 -add china_ip6_route 2400:3bc0::/32 -add china_ip6_route 2400:3c40::/32 -add china_ip6_route 2400:3cc0::/32 -add china_ip6_route 2400:3e00::/32 -add china_ip6_route 2400:3f40::/32 -add china_ip6_route 2400:3f60::/32 -add china_ip6_route 2400:3fc0::/32 -add china_ip6_route 2400:4440::/32 -add china_ip6_route 2400:44c0::/32 -add china_ip6_route 2400:44e0::/32 -add china_ip6_route 2400:4540::/32 -add china_ip6_route 2400:4600::/32 -add china_ip6_route 2400:4640::/32 -add china_ip6_route 2400:46c0::/32 -add china_ip6_route 2400:4740::/32 -add china_ip6_route 2400:4bc0::/32 -add china_ip6_route 2400:4e00::/32 -add china_ip6_route 2400:4e40::/32 -add china_ip6_route 2400:5080::/32 -add china_ip6_route 2400:5280::/32 -add china_ip6_route 2400:5400::/32 -add china_ip6_route 2400:5580::/32 -add china_ip6_route 2400:55c0::/32 -add china_ip6_route 2400:5600::/32 -add china_ip6_route 2400:5640::/32 -add china_ip6_route 2400:56c0::/32 -add china_ip6_route 2400:57c0::/32 -add china_ip6_route 2400:5840::/32 -add china_ip6_route 2400:5a00::/32 -add china_ip6_route 2400:5a40::/32 -add china_ip6_route 2400:5ac0::/32 -add china_ip6_route 2400:5b40::/32 -add china_ip6_route 2400:5bc0::/32 -add china_ip6_route 2400:5c40::/32 -add china_ip6_route 2400:5c80::/32 -add china_ip6_route 2400:5cc0::/32 -add china_ip6_route 2400:5e80::/32 -add china_ip6_route 2400:5fc0::/32 -add china_ip6_route 2400:6000::/32 -add china_ip6_route 2400:6040::/32 -add china_ip6_route 2400:60c0::/32 -add china_ip6_route 2400:61c0::/32 -add china_ip6_route 2400:6200::/32 -add china_ip6_route 2400:6600::/32 -add china_ip6_route 2400:6640::/32 -add china_ip6_route 2400:66c0::/32 -add china_ip6_route 2400:6740::/32 -add china_ip6_route 2400:67c0::/32 -add china_ip6_route 2400:6840::/32 -add china_ip6_route 2400:68c0::/32 -add china_ip6_route 2400:6940::/32 -add china_ip6_route 2400:69c0::/32 -add china_ip6_route 2400:6a00::/32 -add china_ip6_route 2400:6a40::/32 -add china_ip6_route 2400:6ac0::/32 -add china_ip6_route 2400:6b40::/32 -add china_ip6_route 2400:6bc0::/32 -add china_ip6_route 2400:6c40::/32 -add china_ip6_route 2400:6cc0::/32 -add china_ip6_route 2400:6d40::/32 -add china_ip6_route 2400:6dc0::/32 -add china_ip6_route 2400:6e00::/32 -add china_ip6_route 2400:6e40::/32 -add china_ip6_route 2400:6ec0::/32 -add china_ip6_route 2400:6f40::/32 -add china_ip6_route 2400:6f80::/32 -add china_ip6_route 2400:6fc0::/32 -add china_ip6_route 2400:7040::/32 -add china_ip6_route 2400:7100::/32 -add china_ip6_route 2400:7140::/32 -add china_ip6_route 2400:71c0::/32 -add china_ip6_route 2400:7200::/32 -add china_ip6_route 2400:7240::/32 -add china_ip6_route 2400:72c0::/32 -add china_ip6_route 2400:7340::/32 -add china_ip6_route 2400:73c0::/32 -add china_ip6_route 2400:7440::/32 -add china_ip6_route 2400:74c0::/32 -add china_ip6_route 2400:7540::/32 -add china_ip6_route 2400:75c0::/32 -add china_ip6_route 2400:7640::/32 -add china_ip6_route 2400:7680::/32 -add china_ip6_route 2400:76c0::/32 -add china_ip6_route 2400:7740::/32 -add china_ip6_route 2400:77c0::/32 -add china_ip6_route 2400:79c0::/32 -add china_ip6_route 2400:7ac0::/32 -add china_ip6_route 2400:7bc0::/32 -add china_ip6_route 2400:7f80::/32 -add china_ip6_route 2400:7fc0::/32 -add china_ip6_route 2400:8080::/32 -add china_ip6_route 2400:8200::/32 -add china_ip6_route 2400:82c0::/32 -add china_ip6_route 2400:8580::/32 -add china_ip6_route 2400:8600::/32 -add china_ip6_route 2400:8780::/32 -add china_ip6_route 2400:87c0::/32 -add china_ip6_route 2400:8840::/32 -add china_ip6_route 2400:8980::/32 -add china_ip6_route 2400:89c0::/32 -add china_ip6_route 2400:8e00::/32 -add china_ip6_route 2400:8f00::/32 -add china_ip6_route 2400:8fc0::/32 -add china_ip6_route 2400:9040::/32 -add china_ip6_route 2400:9340::/32 -add china_ip6_route 2400:9580::/32 -add china_ip6_route 2400:95c0::/32 -add china_ip6_route 2400:9600::/32 -add china_ip6_route 2400:98c0::/32 -add china_ip6_route 2400:9a00::/32 -add china_ip6_route 2400:9dc0::/32 -add china_ip6_route 2400:9e00::/32 -add china_ip6_route 2400:a040::/32 -add china_ip6_route 2400:a380::/32 -add china_ip6_route 2400:a480::/32 -add china_ip6_route 2400:a780::/32 -add china_ip6_route 2400:a8c0::/32 -add china_ip6_route 2400:a900::/32 -add china_ip6_route 2400:a980::/32 -add china_ip6_route 2400:a981::/32 -add china_ip6_route 2400:a982::/31 -add china_ip6_route 2400:a984::/30 -add china_ip6_route 2400:abc0::/32 -add china_ip6_route 2400:ae00::/32 -add china_ip6_route 2400:b200::/32 -add china_ip6_route 2400:b2c0::/32 -add china_ip6_route 2400:b500::/32 -add china_ip6_route 2400:b600::/32 -add china_ip6_route 2400:b6c0::/32 -add china_ip6_route 2400:b700::/32 -add china_ip6_route 2400:b8c0::/32 -add china_ip6_route 2400:b9c0::/32 -add china_ip6_route 2400:ba00::/32 -add china_ip6_route 2400:ba40::/32 -add china_ip6_route 2400:ba41::/32 -add china_ip6_route 2400:bac0::/32 -add china_ip6_route 2400:bc40::/32 -add china_ip6_route 2400:be00::/32 -add china_ip6_route 2400:bf00::/32 -add china_ip6_route 2400:c200::/32 -add china_ip6_route 2400:c380::/32 -add china_ip6_route 2400:c840::/32 -add china_ip6_route 2400:c8c0::/32 -add china_ip6_route 2400:c940::/32 -add china_ip6_route 2400:c9c0::/32 -add china_ip6_route 2400:ca40::/32 -add china_ip6_route 2400:cac0::/32 -add china_ip6_route 2400:cb40::/32 -add china_ip6_route 2400:cb80::/32 -add china_ip6_route 2400:cbc0::/32 -add china_ip6_route 2400:cc40::/32 -add china_ip6_route 2400:cc80::/32 -add china_ip6_route 2400:ccc0::/32 -add china_ip6_route 2400:cd40::/32 -add china_ip6_route 2400:cdc0::/32 -add china_ip6_route 2400:ce00::/32 -add china_ip6_route 2400:ce40::/32 -add china_ip6_route 2400:cf40::/32 -add china_ip6_route 2400:cf80::/32 -add china_ip6_route 2400:cfc0::/32 -add china_ip6_route 2400:d0c0::/32 -add china_ip6_route 2400:d100::/32 -add china_ip6_route 2400:d1c0::/32 -add china_ip6_route 2400:d200::/32 -add china_ip6_route 2400:d300::/32 -add china_ip6_route 2400:d440::/32 -add china_ip6_route 2400:d600::/32 -add china_ip6_route 2400:d6c0::/32 -add china_ip6_route 2400:d780::/32 -add china_ip6_route 2400:da00::/32 -add china_ip6_route 2400:dd00::/28 -add china_ip6_route 2400:dd40::/32 -add china_ip6_route 2400:de00::/32 -add china_ip6_route 2400:de80::/32 -add china_ip6_route 2400:e0c0::/32 -add china_ip6_route 2400:e5c0::/32 -add china_ip6_route 2400:e680::/32 -add china_ip6_route 2400:e880::/32 -add china_ip6_route 2400:ebc0::/32 -add china_ip6_route 2400:edc0::/32 -add china_ip6_route 2400:ee00::/32 -add china_ip6_route 2400:eec0::/32 -add china_ip6_route 2400:ef40::/32 -add china_ip6_route 2400:f480::/32 -add china_ip6_route 2400:f5c0::/32 -add china_ip6_route 2400:f7c0::/32 -add china_ip6_route 2400:f840::/32 -add china_ip6_route 2400:f980::/32 -add china_ip6_route 2400:fac0::/32 -add china_ip6_route 2400:fb40::/32 -add china_ip6_route 2400:fbc0::/32 -add china_ip6_route 2400:fc40::/32 -add china_ip6_route 2400:fcc0::/32 -add china_ip6_route 2400:fe00::/32 -add china_ip6_route 2401:80::/32 -add china_ip6_route 2401:140::/32 -add china_ip6_route 2401:1c0::/32 -add china_ip6_route 2401:540::/32 -add china_ip6_route 2401:7c0::/32 -add china_ip6_route 2401:800::/32 -add china_ip6_route 2401:9c0::/32 -add china_ip6_route 2401:a00::/32 -add china_ip6_route 2401:a40::/32 -add china_ip6_route 2401:ac0::/32 -add china_ip6_route 2401:b40::/32 -add china_ip6_route 2401:bc0::/32 -add china_ip6_route 2401:c40::/32 -add china_ip6_route 2401:cc0::/32 -add china_ip6_route 2401:d40::/32 -add china_ip6_route 2401:e00::/32 -add china_ip6_route 2401:1000::/32 -add china_ip6_route 2401:11c0::/32 -add china_ip6_route 2401:1200::/32 -add china_ip6_route 2401:12c0::/32 -add china_ip6_route 2401:15c0::/32 -add china_ip6_route 2401:1740::/32 -add china_ip6_route 2401:18c0::/32 -add china_ip6_route 2401:1940::/32 -add china_ip6_route 2401:19c0::/32 -add china_ip6_route 2401:1a40::/32 -add china_ip6_route 2401:1ac0::/32 -add china_ip6_route 2401:1d40::/32 -add china_ip6_route 2401:1dc0::/32 -add china_ip6_route 2401:1e00::/32 -add china_ip6_route 2401:1ec0::/32 -add china_ip6_route 2401:1f40::/32 -add china_ip6_route 2401:2040::/32 -add china_ip6_route 2401:2080::/32 -add china_ip6_route 2401:23c0::/32 -add china_ip6_route 2401:2600::/32 -add china_ip6_route 2401:2780::/32 -add china_ip6_route 2401:2980::/32 -add china_ip6_route 2401:2a00::/32 -add china_ip6_route 2401:2b40::/32 -add china_ip6_route 2401:2e00::/32 -add china_ip6_route 2401:3100::/32 -add china_ip6_route 2401:3380::/32 -add china_ip6_route 2401:33c0::/32 -add china_ip6_route 2401:3440::/32 -add china_ip6_route 2401:3480::/32 -add china_ip6_route 2401:34c0::/32 -add china_ip6_route 2401:3640::/32 -add china_ip6_route 2401:3780::/32 -add china_ip6_route 2401:3800::/32 -add china_ip6_route 2401:3880::/32 -add china_ip6_route 2401:3980::/32 -add china_ip6_route 2401:3a00::/32 -add china_ip6_route 2401:3a80::/32 -add china_ip6_route 2401:3b80::/32 -add china_ip6_route 2401:3c80::/32 -add china_ip6_route 2401:3d80::/32 -add china_ip6_route 2401:3e80::/32 -add china_ip6_route 2401:3f80::/32 -add china_ip6_route 2401:4080::/32 -add china_ip6_route 2401:4180::/32 -add china_ip6_route 2401:4280::/32 -add china_ip6_route 2401:4380::/32 -add china_ip6_route 2401:4480::/32 -add china_ip6_route 2401:4580::/32 -add china_ip6_route 2401:4680::/32 -add china_ip6_route 2401:4780::/32 -add china_ip6_route 2401:4880::/32 -add china_ip6_route 2401:4a80::/32 -add china_ip6_route 2401:4b00::/32 -add china_ip6_route 2401:4f80::/32 -add china_ip6_route 2401:5180::/32 -add china_ip6_route 2401:5680::/32 -add china_ip6_route 2401:56c0::/32 -add china_ip6_route 2401:59c0::/32 -add china_ip6_route 2401:5b40::/32 -add china_ip6_route 2401:5c80::/32 -add china_ip6_route 2401:7180::/32 -add china_ip6_route 2401:71c0::/32 -add china_ip6_route 2401:7240::/32 -add china_ip6_route 2401:7340::/32 -add china_ip6_route 2401:7580::/32 -add china_ip6_route 2401:7680::/32 -add china_ip6_route 2401:7700::/32 -add china_ip6_route 2401:7780::/32 -add china_ip6_route 2401:7880::/32 -add china_ip6_route 2401:7980::/32 -add china_ip6_route 2401:7a00::/32 -add china_ip6_route 2401:7a80::/32 -add china_ip6_route 2401:7b80::/32 -add china_ip6_route 2401:7bc0::/32 -add china_ip6_route 2401:7c80::/32 -add china_ip6_route 2401:7cc0::/32 -add china_ip6_route 2401:7d40::/32 -add china_ip6_route 2401:7d80::/32 -add china_ip6_route 2401:7e00::/32 -add china_ip6_route 2401:7f80::/32 -add china_ip6_route 2401:8200::/32 -add china_ip6_route 2401:82c0::/32 -add china_ip6_route 2401:8380::/32 -add china_ip6_route 2401:8540::/32 -add china_ip6_route 2401:8600::/32 -add china_ip6_route 2401:8680::/32 -add china_ip6_route 2401:8840::/32 -add china_ip6_route 2401:8d00::/32 -add china_ip6_route 2401:8f40::/32 -add china_ip6_route 2401:8fc0::/32 -add china_ip6_route 2401:9340::/32 -add china_ip6_route 2401:9600::/32 -add china_ip6_route 2401:96c0::/32 -add china_ip6_route 2401:9740::/32 -add china_ip6_route 2401:98c0::/32 -add china_ip6_route 2401:9a00::/32 -add china_ip6_route 2401:9ac0::/32 -add china_ip6_route 2401:9b40::/32 -add china_ip6_route 2401:9bc0::/32 -add china_ip6_route 2401:9dc0::/32 -add china_ip6_route 2401:9e40::/32 -add china_ip6_route 2401:9f80::/32 -add china_ip6_route 2401:a140::/32 -add china_ip6_route 2401:a180::/32 -add china_ip6_route 2401:a340::/32 -add china_ip6_route 2401:a3c0::/32 -add china_ip6_route 2401:a4c0::/32 -add china_ip6_route 2401:a540::/32 -add china_ip6_route 2401:a5c0::/32 -add china_ip6_route 2401:a640::/32 -add china_ip6_route 2401:a940::/32 -add china_ip6_route 2401:a980::/32 -add china_ip6_route 2401:aa00::/32 -add china_ip6_route 2401:aa40::/32 -add china_ip6_route 2401:acc0::/32 -add china_ip6_route 2401:ad40::/32 -add china_ip6_route 2401:adc0::/32 -add china_ip6_route 2401:b040::/32 -add china_ip6_route 2401:b180::/32 -add china_ip6_route 2401:b340::/32 -add china_ip6_route 2401:b400::/32 -add china_ip6_route 2401:b480::/32 -add china_ip6_route 2401:b4c0::/32 -add china_ip6_route 2401:b540::/32 -add china_ip6_route 2401:b580::/32 -add china_ip6_route 2401:b600::/32 -add china_ip6_route 2401:b680::/32 -add china_ip6_route 2401:b6c0::/32 -add china_ip6_route 2401:b7c0::/32 -add china_ip6_route 2401:b940::/32 -add china_ip6_route 2401:ba00::/32 -add china_ip6_route 2401:ba40::/32 -add china_ip6_route 2401:bb80::/32 -add china_ip6_route 2401:be00::/32 -add china_ip6_route 2401:c200::/32 -add china_ip6_route 2401:c540::/32 -add china_ip6_route 2401:c600::/32 -add china_ip6_route 2401:c640::/32 -add china_ip6_route 2401:c6c0::/32 -add china_ip6_route 2401:c840::/32 -add china_ip6_route 2401:c8c0::/32 -add china_ip6_route 2401:ca00::/32 -add china_ip6_route 2401:cb80::/32 -add china_ip6_route 2401:cc00::/32 -add china_ip6_route 2401:ce00::/32 -add china_ip6_route 2401:cf40::/32 -add china_ip6_route 2401:cfc0::/32 -add china_ip6_route 2401:d0c0::/32 -add china_ip6_route 2401:d140::/32 -add china_ip6_route 2401:d180::/32 -add china_ip6_route 2401:d2c0::/32 -add china_ip6_route 2401:d340::/32 -add china_ip6_route 2401:d780::/32 -add china_ip6_route 2401:da00::/32 -add china_ip6_route 2401:de00::/32 -add china_ip6_route 2401:e080::/32 -add china_ip6_route 2401:e0c0::/32 -add china_ip6_route 2401:e140::/32 -add china_ip6_route 2401:e240::/32 -add china_ip6_route 2401:e2c0::/32 -add china_ip6_route 2401:e340::/32 -add china_ip6_route 2401:e6c0::/32 -add china_ip6_route 2401:e840::/32 -add china_ip6_route 2401:e8c0::/32 -add china_ip6_route 2401:e940::/32 -add china_ip6_route 2401:e9c0::/32 -add china_ip6_route 2401:ec00::/32 -add china_ip6_route 2401:ec40::/32 -add china_ip6_route 2401:f300::/32 -add china_ip6_route 2401:f7c0::/32 -add china_ip6_route 2401:fa80::/32 -add china_ip6_route 2401:fb80::/32 -add china_ip6_route 2401:fc80::/32 -add china_ip6_route 2401:fe80::/32 -add china_ip6_route 2401:ffc0::/32 -add china_ip6_route 2402:440::/32 -add china_ip6_route 2402:5c0::/32 -add china_ip6_route 2402:840::/32 -add china_ip6_route 2402:ac0::/32 -add china_ip6_route 2402:e00::/32 -add china_ip6_route 2402:fc0::/32 -add china_ip6_route 2402:1000::/32 -add china_ip6_route 2402:1440::/32 -add china_ip6_route 2402:14c0::/32 -add china_ip6_route 2402:1540::/32 -add china_ip6_route 2402:1600::/32 -add china_ip6_route 2402:1740::/32 -add china_ip6_route 2402:19c0::/32 -add china_ip6_route 2402:1ec0::/32 -add china_ip6_route 2402:1f40::/32 -add china_ip6_route 2402:1f80::/32 -add china_ip6_route 2402:2000::/32 -add china_ip6_route 2402:2280::/32 -add china_ip6_route 2402:22c0::/32 -add china_ip6_route 2402:2440::/32 -add china_ip6_route 2402:24c0::/32 -add china_ip6_route 2402:2540::/32 -add china_ip6_route 2402:2640::/32 -add china_ip6_route 2402:27c0::/32 -add china_ip6_route 2402:2a00::/32 -add china_ip6_route 2402:2b80::/32 -add china_ip6_route 2402:2bc0::/32 -add china_ip6_route 2402:2d00::/32 -add china_ip6_route 2402:2d80::/32 -add china_ip6_route 2402:2e80::/32 -add china_ip6_route 2402:2f40::/32 -add china_ip6_route 2402:3040::/32 -add china_ip6_route 2402:3080::/32 -add china_ip6_route 2402:3140::/32 -add china_ip6_route 2402:3180::/32 -add china_ip6_route 2402:31c0::/32 -add china_ip6_route 2402:3240::/32 -add china_ip6_route 2402:33c0::/32 -add china_ip6_route 2402:39c0::/32 -add china_ip6_route 2402:3a40::/32 -add china_ip6_route 2402:3ac0::/32 -add china_ip6_route 2402:3c00::/32 -add china_ip6_route 2402:3e00::/32 -add china_ip6_route 2402:3ec0::/32 -add china_ip6_route 2402:3f80::/32 -add china_ip6_route 2402:4140::/32 -add china_ip6_route 2402:42c0::/32 -add china_ip6_route 2402:4340::/32 -add china_ip6_route 2402:43c0::/32 -add china_ip6_route 2402:4440::/32 -add china_ip6_route 2402:4500::/32 -add china_ip6_route 2402:4540::/32 -add china_ip6_route 2402:4a00::/32 -add china_ip6_route 2402:4a40::/32 -add china_ip6_route 2402:4a80::/32 -add china_ip6_route 2402:4ac0::/32 -add china_ip6_route 2402:4b80::/32 -add china_ip6_route 2402:4bc0::/32 -add china_ip6_route 2402:4c40::/32 -add china_ip6_route 2402:4d80::/32 -add china_ip6_route 2402:4e00::/32 -add china_ip6_route 2402:4ec0::/32 -add china_ip6_route 2402:4f80::/32 -add china_ip6_route 2402:50c0::/32 -add china_ip6_route 2402:5140::/32 -add china_ip6_route 2402:5180::/32 -add china_ip6_route 2402:51c0::/32 -add china_ip6_route 2402:5240::/32 -add china_ip6_route 2402:52c0::/32 -add china_ip6_route 2402:5340::/32 -add china_ip6_route 2402:5880::/32 -add china_ip6_route 2402:5940::/32 -add china_ip6_route 2402:59c0::/32 -add china_ip6_route 2402:5a40::/32 -add china_ip6_route 2402:5b40::/32 -add china_ip6_route 2402:5bc0::/32 -add china_ip6_route 2402:5d00::/32 -add china_ip6_route 2402:5e00::/32 -add china_ip6_route 2402:5e40::/32 -add china_ip6_route 2402:5ec0::/32 -add china_ip6_route 2402:5f40::/32 -add china_ip6_route 2402:6280::/32 -add china_ip6_route 2402:62c0::/32 -add china_ip6_route 2402:64c0::/32 -add china_ip6_route 2402:66c0::/32 -add china_ip6_route 2402:6740::/32 -add china_ip6_route 2402:67c0::/32 -add china_ip6_route 2402:6a00::/32 -add china_ip6_route 2402:6b40::/32 -add china_ip6_route 2402:6bc0::/32 -add china_ip6_route 2402:6e00::/32 -add china_ip6_route 2402:6e80::/32 -add china_ip6_route 2402:6ec0::/32 -add china_ip6_route 2402:6f40::/32 -add china_ip6_route 2402:6fc0::/32 -add china_ip6_route 2402:7040::/32 -add china_ip6_route 2402:7080::/32 -add china_ip6_route 2402:70c0::/32 -add china_ip6_route 2402:7140::/32 -add china_ip6_route 2402:71c0::/32 -add china_ip6_route 2402:7240::/32 -add china_ip6_route 2402:72c0::/32 -add china_ip6_route 2402:7540::/32 -add china_ip6_route 2402:75c0::/32 -add china_ip6_route 2402:7740::/32 -add china_ip6_route 2402:7d00::/32 -add china_ip6_route 2402:7d80::/32 -add china_ip6_route 2402:8180::/32 -add china_ip6_route 2402:8300::/32 -add china_ip6_route 2402:8380::/32 -add china_ip6_route 2402:85c0::/32 -add china_ip6_route 2402:8800::/32 -add china_ip6_route 2402:8840::/32 -add china_ip6_route 2402:8900::/32 -add china_ip6_route 2402:8940::/32 -add china_ip6_route 2402:89c0::/32 -add china_ip6_route 2402:8b40::/32 -add china_ip6_route 2402:8bc0::/32 -add china_ip6_route 2402:8cc0::/32 -add china_ip6_route 2402:8d40::/32 -add china_ip6_route 2402:8f40::/32 -add china_ip6_route 2402:8f80::/32 -add china_ip6_route 2402:9240::/32 -add china_ip6_route 2402:92c0::/32 -add china_ip6_route 2402:93c0::/32 -add china_ip6_route 2402:9440::/32 -add china_ip6_route 2402:9480::/32 -add china_ip6_route 2402:94c0::/32 -add china_ip6_route 2402:9580::/32 -add china_ip6_route 2402:95c0::/32 -add china_ip6_route 2402:9680::/32 -add china_ip6_route 2402:96c0::/32 -add china_ip6_route 2402:9840::/32 -add china_ip6_route 2402:98c0::/32 -add china_ip6_route 2402:9940::/32 -add china_ip6_route 2402:9a80::/32 -add china_ip6_route 2402:9b80::/32 -add china_ip6_route 2402:9f80::/32 -add china_ip6_route 2402:9fc0::/32 -add china_ip6_route 2402:a080::/32 -add china_ip6_route 2402:a180::/32 -add china_ip6_route 2402:a200::/32 -add china_ip6_route 2402:a240::/32 -add china_ip6_route 2402:a280::/32 -add china_ip6_route 2402:a380::/32 -add china_ip6_route 2402:a3c0::/32 -add china_ip6_route 2402:a640::/32 -add china_ip6_route 2402:a680::/32 -add china_ip6_route 2402:a6c0::/32 -add china_ip6_route 2402:a840::/32 -add china_ip6_route 2402:a880::/32 -add china_ip6_route 2402:a9c0::/32 -add china_ip6_route 2402:aa80::/32 -add china_ip6_route 2402:ab80::/32 -add china_ip6_route 2402:ae00::/32 -add china_ip6_route 2402:ae40::/32 -add china_ip6_route 2402:aec0::/32 -add china_ip6_route 2402:af80::/32 -add china_ip6_route 2402:afc0::/32 -add china_ip6_route 2402:b080::/32 -add china_ip6_route 2402:b200::/32 -add china_ip6_route 2402:b380::/32 -add china_ip6_route 2402:b3c0::/32 -add china_ip6_route 2402:b440::/32 -add china_ip6_route 2402:b6c0::/32 -add china_ip6_route 2402:b880::/32 -add china_ip6_route 2402:b8c0::/32 -add china_ip6_route 2402:b940::/32 -add china_ip6_route 2402:b980::/32 -add china_ip6_route 2402:ba80::/32 -add china_ip6_route 2402:bac0::/32 -add china_ip6_route 2402:bbc0::/32 -add china_ip6_route 2402:bf80::/32 -add china_ip6_route 2402:c280::/32 -add china_ip6_route 2402:c3c0::/32 -add china_ip6_route 2402:c5c0::/32 -add china_ip6_route 2402:c9c0::/32 -add china_ip6_route 2402:cbc0::/32 -add china_ip6_route 2402:cc40::/32 -add china_ip6_route 2402:cc80::/32 -add china_ip6_route 2402:cf00::/32 -add china_ip6_route 2402:cf40::/32 -add china_ip6_route 2402:d040::/32 -add china_ip6_route 2402:d140::/32 -add china_ip6_route 2402:d2c0::/32 -add china_ip6_route 2402:d300::/32 -add china_ip6_route 2402:d340::/32 -add china_ip6_route 2402:d380::/32 -add china_ip6_route 2402:d5c0::/32 -add china_ip6_route 2402:d6c0::/32 -add china_ip6_route 2402:d740::/32 -add china_ip6_route 2402:d780::/32 -add china_ip6_route 2402:d880::/32 -add china_ip6_route 2402:d980::/32 -add china_ip6_route 2402:da40::/32 -add china_ip6_route 2402:db40::/32 -add china_ip6_route 2402:dcc0::/32 -add china_ip6_route 2402:de40::/32 -add china_ip6_route 2402:dec0::/32 -add china_ip6_route 2402:df40::/32 -add china_ip6_route 2402:dfc0::/32 -add china_ip6_route 2402:e040::/32 -add china_ip6_route 2402:e0c0::/32 -add china_ip6_route 2402:e140::/32 -add china_ip6_route 2402:e2c0::/32 -add china_ip6_route 2402:e3c0::/32 -add china_ip6_route 2402:e480::/32 -add china_ip6_route 2402:e540::/32 -add china_ip6_route 2402:e680::/32 -add china_ip6_route 2402:e740::/32 -add china_ip6_route 2402:e780::/32 -add china_ip6_route 2402:e7c0::/32 -add china_ip6_route 2402:e880::/32 -add china_ip6_route 2402:e980::/32 -add china_ip6_route 2402:eb80::/32 -add china_ip6_route 2402:ec80::/32 -add china_ip6_route 2402:ed80::/32 -add china_ip6_route 2402:ef40::/32 -add china_ip6_route 2402:ef80::/32 -add china_ip6_route 2402:f000::/32 -add china_ip6_route 2402:f140::/32 -add china_ip6_route 2402:f340::/32 -add china_ip6_route 2402:f3c0::/32 -add china_ip6_route 2402:f480::/32 -add china_ip6_route 2402:f540::/32 -add china_ip6_route 2402:f580::/32 -add china_ip6_route 2402:f740::/32 -add china_ip6_route 2402:f780::/32 -add china_ip6_route 2402:f8c0::/32 -add china_ip6_route 2402:f980::/32 -add china_ip6_route 2402:f9c0::/32 -add china_ip6_route 2402:fac0::/32 -add china_ip6_route 2402:fcc0::/32 -add china_ip6_route 2402:ff40::/32 -add china_ip6_route 2402:ffc0::/32 -add china_ip6_route 2403:600::/32 -add china_ip6_route 2403:700::/32 -add china_ip6_route 2403:7c0::/32 -add china_ip6_route 2403:800::/31 -add china_ip6_route 2403:980::/32 -add china_ip6_route 2403:a80::/32 -add china_ip6_route 2403:b80::/32 -add china_ip6_route 2403:c80::/32 -add china_ip6_route 2403:d40::/32 -add china_ip6_route 2403:d80::/32 -add china_ip6_route 2403:e80::/32 -add china_ip6_route 2403:f00::/32 -add china_ip6_route 2403:f40::/32 -add china_ip6_route 2403:f80::/32 -add china_ip6_route 2403:fc0::/32 -add china_ip6_route 2403:1180::/32 -add china_ip6_route 2403:1340::/32 -add china_ip6_route 2403:1440::/32 -add china_ip6_route 2403:1580::/32 -add china_ip6_route 2403:16c0::/32 -add china_ip6_route 2403:17c0::/32 -add china_ip6_route 2403:1980::/32 -add china_ip6_route 2403:1a40::/32 -add china_ip6_route 2403:1b80::/32 -add china_ip6_route 2403:1c80::/32 -add china_ip6_route 2403:1d80::/32 -add china_ip6_route 2403:1dc0::/32 -add china_ip6_route 2403:1e80::/32 -add china_ip6_route 2403:1ec0::/32 -add china_ip6_route 2403:1f80::/32 -add china_ip6_route 2403:2040::/32 -add china_ip6_route 2403:2080::/32 -add china_ip6_route 2403:2180::/32 -add china_ip6_route 2403:2240::/32 -add china_ip6_route 2403:2280::/32 -add china_ip6_route 2403:2380::/32 -add china_ip6_route 2403:2440::/32 -add china_ip6_route 2403:24c0::/32 -add china_ip6_route 2403:2580::/32 -add china_ip6_route 2403:25c0::/32 -add china_ip6_route 2403:2680::/32 -add china_ip6_route 2403:26c0::/32 -add china_ip6_route 2403:2740::/32 -add china_ip6_route 2403:2780::/32 -add china_ip6_route 2403:28c0::/32 -add china_ip6_route 2403:2940::/32 -add china_ip6_route 2403:2a00::/32 -add china_ip6_route 2403:2a40::/32 -add china_ip6_route 2403:2ac0::/32 -add china_ip6_route 2403:2b40::/32 -add china_ip6_route 2403:2bc0::/32 -add china_ip6_route 2403:2cc0::/32 -add china_ip6_route 2403:2f40::/32 -add china_ip6_route 2403:2fc0::/32 -add china_ip6_route 2403:3040::/32 -add china_ip6_route 2403:30c0::/32 -add china_ip6_route 2403:3140::/32 -add china_ip6_route 2403:3280::/32 -add china_ip6_route 2403:32c0::/32 -add china_ip6_route 2403:3380::/32 -add china_ip6_route 2403:3480::/32 -add china_ip6_route 2403:3580::/32 -add china_ip6_route 2403:3640::/32 -add china_ip6_route 2403:3680::/32 -add china_ip6_route 2403:36c0::/32 -add china_ip6_route 2403:3740::/32 -add china_ip6_route 2403:3780::/32 -add china_ip6_route 2403:37c0::/32 -add china_ip6_route 2403:3840::/32 -add china_ip6_route 2403:3880::/32 -add china_ip6_route 2403:38c0::/32 -add china_ip6_route 2403:3940::/32 -add china_ip6_route 2403:3980::/32 -add china_ip6_route 2403:39c0::/32 -add china_ip6_route 2403:3a40::/32 -add china_ip6_route 2403:3b40::/32 -add china_ip6_route 2403:3b80::/32 -add china_ip6_route 2403:3bc0::/32 -add china_ip6_route 2403:3c40::/32 -add china_ip6_route 2403:3c80::/32 -add china_ip6_route 2403:3cc0::/32 -add china_ip6_route 2403:3d40::/32 -add china_ip6_route 2403:3d80::/32 -add china_ip6_route 2403:3dc0::/32 -add china_ip6_route 2403:3e80::/32 -add china_ip6_route 2403:3ec0::/32 -add china_ip6_route 2403:3f40::/32 -add china_ip6_route 2403:3f80::/32 -add china_ip6_route 2403:4080::/32 -add china_ip6_route 2403:4180::/32 -add china_ip6_route 2403:4240::/32 -add china_ip6_route 2403:4280::/32 -add china_ip6_route 2403:4300::/32 -add china_ip6_route 2403:4380::/32 -add china_ip6_route 2403:4580::/32 -add china_ip6_route 2403:4680::/32 -add china_ip6_route 2403:4780::/32 -add china_ip6_route 2403:4840::/32 -add china_ip6_route 2403:4880::/32 -add china_ip6_route 2403:4980::/32 -add china_ip6_route 2403:4a40::/32 -add china_ip6_route 2403:4a80::/32 -add china_ip6_route 2403:4b40::/32 -add china_ip6_route 2403:4b80::/32 -add china_ip6_route 2403:4c80::/32 -add china_ip6_route 2403:4cc0::/32 -add china_ip6_route 2403:4d40::/32 -add china_ip6_route 2403:4d80::/32 -add china_ip6_route 2403:4ec0::/32 -add china_ip6_route 2403:5040::/32 -add china_ip6_route 2403:5080::/32 -add china_ip6_route 2403:50c0::/32 -add china_ip6_route 2403:5280::/32 -add china_ip6_route 2403:5380::/32 -add china_ip6_route 2403:54c0::/32 -add china_ip6_route 2403:5540::/32 -add china_ip6_route 2403:5580::/32 -add china_ip6_route 2403:5640::/32 -add china_ip6_route 2403:5780::/32 -add china_ip6_route 2403:58c0::/32 -add china_ip6_route 2403:5980::/32 -add china_ip6_route 2403:5a80::/32 -add china_ip6_route 2403:5b40::/32 -add china_ip6_route 2403:5b80::/32 -add china_ip6_route 2403:5c80::/32 -add china_ip6_route 2403:5d80::/32 -add china_ip6_route 2403:5e40::/32 -add china_ip6_route 2403:5e80::/32 -add china_ip6_route 2403:5ec0::/32 -add china_ip6_route 2403:5f80::/32 -add china_ip6_route 2403:5fc0::/32 -add china_ip6_route 2403:6080::/32 -add china_ip6_route 2403:6180::/32 -add china_ip6_route 2403:6280::/32 -add china_ip6_route 2403:62c0::/32 -add china_ip6_route 2403:6380::/32 -add china_ip6_route 2403:6580::/32 -add china_ip6_route 2403:6680::/32 -add china_ip6_route 2403:6740::/32 -add china_ip6_route 2403:6780::/32 -add china_ip6_route 2403:6880::/32 -add china_ip6_route 2403:6980::/32 -add china_ip6_route 2403:6a00::/32 -add china_ip6_route 2403:6c80::/32 -add china_ip6_route 2403:6d40::/32 -add china_ip6_route 2403:6d80::/32 -add china_ip6_route 2403:6e80::/32 -add china_ip6_route 2403:6f40::/32 -add china_ip6_route 2403:6fc0::/32 -add china_ip6_route 2403:7040::/32 -add china_ip6_route 2403:7080::/32 -add china_ip6_route 2403:7180::/32 -add china_ip6_route 2403:7280::/32 -add china_ip6_route 2403:7380::/32 -add china_ip6_route 2403:7480::/32 -add china_ip6_route 2403:7540::/32 -add china_ip6_route 2403:7580::/32 -add china_ip6_route 2403:76c0::/32 -add china_ip6_route 2403:7700::/32 -add china_ip6_route 2403:7840::/32 -add china_ip6_route 2403:78c0::/32 -add china_ip6_route 2403:7a80::/32 -add china_ip6_route 2403:7b00::/32 -add china_ip6_route 2403:7d80::/32 -add china_ip6_route 2403:7e80::/32 -add china_ip6_route 2403:7f80::/32 -add china_ip6_route 2403:8080::/32 -add china_ip6_route 2403:8180::/32 -add china_ip6_route 2403:8280::/32 -add china_ip6_route 2403:8380::/32 -add china_ip6_route 2403:83c0::/32 -add china_ip6_route 2403:8480::/32 -add china_ip6_route 2403:8580::/32 -add china_ip6_route 2403:8880::/32 -add china_ip6_route 2403:8900::/32 -add china_ip6_route 2403:8980::/32 -add china_ip6_route 2403:8a40::/32 -add china_ip6_route 2403:8a80::/32 -add china_ip6_route 2403:8b00::/32 -add china_ip6_route 2403:8b80::/32 -add china_ip6_route 2403:8c00::/32 -add china_ip6_route 2403:8c80::/32 -add china_ip6_route 2403:8d00::/32 -add china_ip6_route 2403:8d80::/32 -add china_ip6_route 2403:8f80::/32 -add china_ip6_route 2403:9080::/32 -add china_ip6_route 2403:9180::/32 -add china_ip6_route 2403:9280::/32 -add china_ip6_route 2403:9380::/32 -add china_ip6_route 2403:9480::/32 -add china_ip6_route 2403:9580::/32 -add china_ip6_route 2403:9680::/32 -add china_ip6_route 2403:9780::/32 -add china_ip6_route 2403:9880::/32 -add china_ip6_route 2403:9a80::/32 -add china_ip6_route 2403:9ac0::/32 -add china_ip6_route 2403:9b00::/32 -add china_ip6_route 2403:9b40::/32 -add china_ip6_route 2403:9b80::/32 -add china_ip6_route 2403:9c80::/32 -add china_ip6_route 2403:9d00::/32 -add china_ip6_route 2403:9d80::/32 -add china_ip6_route 2403:9e40::/32 -add china_ip6_route 2403:9e80::/32 -add china_ip6_route 2403:9ec0::/32 -add china_ip6_route 2403:9f80::/32 -add china_ip6_route 2403:a100::/32 -add china_ip6_route 2403:a140::/32 -add china_ip6_route 2403:a200::/32 -add china_ip6_route 2403:a300::/32 -add china_ip6_route 2403:a480::/32 -add china_ip6_route 2403:a580::/32 -add china_ip6_route 2403:a680::/32 -add china_ip6_route 2403:a6c0::/32 -add china_ip6_route 2403:a780::/32 -add china_ip6_route 2403:a880::/32 -add china_ip6_route 2403:a940::/32 -add china_ip6_route 2403:a980::/32 -add china_ip6_route 2403:a9c0::/32 -add china_ip6_route 2403:aa40::/32 -add china_ip6_route 2403:aa80::/32 -add china_ip6_route 2403:ab80::/32 -add china_ip6_route 2403:ac00::/32 -add china_ip6_route 2403:af80::/32 -add china_ip6_route 2403:b080::/32 -add china_ip6_route 2403:b180::/32 -add china_ip6_route 2403:b280::/32 -add china_ip6_route 2403:b380::/32 -add china_ip6_route 2403:b400::/32 -add china_ip6_route 2403:b480::/32 -add china_ip6_route 2403:b580::/32 -add china_ip6_route 2403:b680::/32 -add china_ip6_route 2403:b780::/32 -add china_ip6_route 2403:b880::/32 -add china_ip6_route 2403:b980::/32 -add china_ip6_route 2403:ba40::/32 -add china_ip6_route 2403:c040::/32 -add china_ip6_route 2403:c080::/32 -add china_ip6_route 2403:c100::/32 -add china_ip6_route 2403:c140::/32 -add china_ip6_route 2403:c180::/32 -add china_ip6_route 2403:c3c0::/32 -add china_ip6_route 2403:c440::/32 -add china_ip6_route 2403:c480::/32 -add china_ip6_route 2403:c4c0::/32 -add china_ip6_route 2403:c980::/32 -add china_ip6_route 2403:cdc0::/32 -add china_ip6_route 2403:cec0::/32 -add china_ip6_route 2403:cf80::/32 -add china_ip6_route 2403:d080::/32 -add china_ip6_route 2403:d180::/32 -add china_ip6_route 2403:d280::/32 -add china_ip6_route 2403:d2c0::/32 -add china_ip6_route 2403:d380::/32 -add china_ip6_route 2403:d400::/32 -add china_ip6_route 2403:d440::/32 -add china_ip6_route 2403:d480::/32 -add china_ip6_route 2403:d580::/32 -add china_ip6_route 2403:d680::/32 -add china_ip6_route 2403:d780::/32 -add china_ip6_route 2403:d7c0::/32 -add china_ip6_route 2403:d880::/32 -add china_ip6_route 2403:d980::/32 -add china_ip6_route 2403:d9c0::/32 -add china_ip6_route 2403:da80::/32 -add china_ip6_route 2403:dac0::/32 -add china_ip6_route 2403:db00::/32 -add china_ip6_route 2403:db80::/32 -add china_ip6_route 2403:dc80::/32 -add china_ip6_route 2403:dd80::/32 -add china_ip6_route 2403:de80::/32 -add china_ip6_route 2403:df80::/32 -add china_ip6_route 2403:e080::/32 -add china_ip6_route 2403:e180::/32 -add china_ip6_route 2403:e280::/32 -add china_ip6_route 2403:e300::/32 -add china_ip6_route 2403:e480::/32 -add china_ip6_route 2403:e500::/32 -add china_ip6_route 2403:e580::/32 -add china_ip6_route 2403:e640::/32 -add china_ip6_route 2403:e680::/32 -add china_ip6_route 2403:e700::/32 -add china_ip6_route 2403:e780::/32 -add china_ip6_route 2403:e7c0::/32 -add china_ip6_route 2403:e880::/32 -add china_ip6_route 2403:e980::/32 -add china_ip6_route 2403:ea80::/32 -add china_ip6_route 2403:eac0::/32 -add china_ip6_route 2403:eb80::/32 -add china_ip6_route 2403:ec80::/32 -add china_ip6_route 2403:ed00::/32 -add china_ip6_route 2403:ed40::/32 -add china_ip6_route 2403:ed80::/32 -add china_ip6_route 2403:ee80::/32 -add china_ip6_route 2403:ef80::/32 -add china_ip6_route 2403:f080::/32 -add china_ip6_route 2403:f100::/32 -add china_ip6_route 2403:f180::/32 -add china_ip6_route 2403:f240::/32 -add china_ip6_route 2403:f280::/32 -add china_ip6_route 2403:f300::/32 -add china_ip6_route 2403:f380::/32 -add china_ip6_route 2403:f4c0::/32 -add china_ip6_route 2403:f580::/32 -add china_ip6_route 2403:f740::/32 -add china_ip6_route 2403:f8c0::/32 -add china_ip6_route 2403:f980::/32 -add china_ip6_route 2403:fb00::/32 -add china_ip6_route 2403:fb80::/32 -add china_ip6_route 2403:fc40::/32 -add china_ip6_route 2403:fe40::/32 -add china_ip6_route 2403:fe80::/32 -add china_ip6_route 2403:fec0::/32 -add china_ip6_route 2403:ff80::/32 -add china_ip6_route 2403:ffc0::/32 -add china_ip6_route 2404:100::/32 -add china_ip6_route 2404:158::/32 -add china_ip6_route 2404:240::/32 -add china_ip6_route 2404:280::/32 -add china_ip6_route 2404:440::/32 -add china_ip6_route 2404:480::/32 -add china_ip6_route 2404:680::/32 -add china_ip6_route 2404:a80::/32 -add china_ip6_route 2404:b80::/32 -add china_ip6_route 2404:bc0::/32 -add china_ip6_route 2404:c40::/32 -add china_ip6_route 2404:d80::/32 -add china_ip6_route 2404:f00::/32 -add china_ip6_route 2404:f80::/32 -add china_ip6_route 2404:1080::/32 -add china_ip6_route 2404:10c0::/32 -add china_ip6_route 2404:1180::/32 -add china_ip6_route 2404:14c0::/32 -add china_ip6_route 2404:1880::/32 -add china_ip6_route 2404:1c80::/32 -add china_ip6_route 2404:1cc0::/32 -add china_ip6_route 2404:1d80::/32 -add china_ip6_route 2404:1e80::/32 -add china_ip6_route 2404:1f40::/32 -add china_ip6_route 2404:21c0::/32 -add china_ip6_route 2404:30c0::/32 -add china_ip6_route 2404:3140::/32 -add china_ip6_route 2404:31c0::/32 -add china_ip6_route 2404:3240::/32 -add china_ip6_route 2404:32c0::/32 -add china_ip6_route 2404:3300::/32 -add china_ip6_route 2404:3340::/32 -add china_ip6_route 2404:3480::/32 -add china_ip6_route 2404:35c0::/32 -add china_ip6_route 2404:3640::/32 -add china_ip6_route 2404:36c0::/32 -add china_ip6_route 2404:3700::/32 -add china_ip6_route 2404:3740::/32 -add china_ip6_route 2404:37c0::/32 -add china_ip6_route 2404:3840::/32 -add china_ip6_route 2404:3940::/32 -add china_ip6_route 2404:3b00::/32 -add china_ip6_route 2404:3bc0::/32 -add china_ip6_route 2404:3c40::/32 -add china_ip6_route 2404:3f40::/32 -add china_ip6_route 2404:4080::/32 -add china_ip6_route 2404:41c0::/32 -add china_ip6_route 2404:4540::/32 -add china_ip6_route 2404:4740::/32 -add china_ip6_route 2404:4bc0::/32 -add china_ip6_route 2404:4d00::/32 -add china_ip6_route 2404:4dc0::/32 -add china_ip6_route 2404:51c0::/32 -add china_ip6_route 2404:5640::/32 -add china_ip6_route 2404:5a80::/32 -add china_ip6_route 2404:5b00::/32 -add china_ip6_route 2404:5d00::/32 -add china_ip6_route 2404:5e80::/32 -add china_ip6_route 2404:6000::/32 -add china_ip6_route 2404:6100::/32 -add china_ip6_route 2404:6380::/32 -add china_ip6_route 2404:6500::/32 -add china_ip6_route 2404:65c0::/32 -add china_ip6_route 2404:6a40::/32 -add china_ip6_route 2404:6f80::/32 -add china_ip6_route 2404:7100::/32 -add china_ip6_route 2404:7180::/32 -add china_ip6_route 2404:71c0::/32 -add china_ip6_route 2404:7240::/32 -add china_ip6_route 2404:74c0::/32 -add china_ip6_route 2404:7600::/32 -add china_ip6_route 2404:7740::/32 -add china_ip6_route 2404:7940::/32 -add china_ip6_route 2404:7d00::/32 -add china_ip6_route 2404:8040::/32 -add china_ip6_route 2404:80c0::/32 -add china_ip6_route 2404:8140::/32 -add china_ip6_route 2404:81c0::/32 -add china_ip6_route 2404:8480::/32 -add china_ip6_route 2404:8580::/32 -add china_ip6_route 2404:8700::/32 -add china_ip6_route 2404:8880::/32 -add china_ip6_route 2404:8a80::/32 -add china_ip6_route 2404:8b00::/32 -add china_ip6_route 2404:8dc0::/32 -add china_ip6_route 2404:9340::/32 -add china_ip6_route 2404:9b80::/32 -add china_ip6_route 2404:9c80::/32 -add china_ip6_route 2404:a000::/32 -add china_ip6_route 2404:a080::/32 -add china_ip6_route 2404:a0c0::/32 -add china_ip6_route 2404:a180::/32 -add china_ip6_route 2404:a240::/32 -add china_ip6_route 2404:a740::/32 -add china_ip6_route 2404:b100::/32 -add china_ip6_route 2404:b340::/32 -add china_ip6_route 2404:b3c0::/32 -add china_ip6_route 2404:b440::/32 -add china_ip6_route 2404:b4c0::/32 -add china_ip6_route 2404:b900::/32 -add china_ip6_route 2404:bbc0::/32 -add china_ip6_route 2404:bc40::/32 -add china_ip6_route 2404:c1c0::/32 -add china_ip6_route 2404:c240::/32 -add china_ip6_route 2404:c2c0::/32 -add china_ip6_route 2404:c300::/32 -add china_ip6_route 2404:c3c0::/32 -add china_ip6_route 2404:c440::/32 -add china_ip6_route 2404:c4c0::/32 -add china_ip6_route 2404:c540::/32 -add china_ip6_route 2404:c5c0::/32 -add china_ip6_route 2404:c640::/32 -add china_ip6_route 2404:c940::/32 -add china_ip6_route 2404:c9c0::/32 -add china_ip6_route 2404:cd00::/32 -add china_ip6_route 2404:d040::/32 -add china_ip6_route 2404:d080::/32 -add china_ip6_route 2404:d140::/32 -add china_ip6_route 2404:d280::/32 -add china_ip6_route 2404:d3c0::/32 -add china_ip6_route 2404:d480::/32 -add china_ip6_route 2404:d640::/32 -add china_ip6_route 2404:d6c0::/32 -add china_ip6_route 2404:d7c0::/32 -add china_ip6_route 2404:d840::/32 -add china_ip6_route 2404:dd80::/32 -add china_ip6_route 2404:df00::/32 -add china_ip6_route 2404:e280::/32 -add china_ip6_route 2404:e540::/32 -add china_ip6_route 2404:e5c0::/32 -add china_ip6_route 2404:e780::/32 -add china_ip6_route 2404:e880::/32 -add china_ip6_route 2404:e8c0::/32 -add china_ip6_route 2404:eb80::/32 -add china_ip6_route 2404:ec40::/32 -add china_ip6_route 2404:ecc0::/32 -add china_ip6_route 2404:edc0::/32 -add china_ip6_route 2404:f040::/32 -add china_ip6_route 2404:f4c0::/32 -add china_ip6_route 2404:f7c0::/32 -add china_ip6_route 2405:80::/32 -add china_ip6_route 2405:480::/32 -add china_ip6_route 2405:580::/32 -add china_ip6_route 2405:680::/32 -add china_ip6_route 2405:6c0::/32 -add china_ip6_route 2405:780::/32 -add china_ip6_route 2405:880::/32 -add china_ip6_route 2405:940::/32 -add china_ip6_route 2405:980::/32 -add china_ip6_route 2405:9c0::/32 -add china_ip6_route 2405:a80::/32 -add china_ip6_route 2405:b80::/32 -add china_ip6_route 2405:c80::/32 -add china_ip6_route 2405:d80::/32 -add china_ip6_route 2405:e80::/32 -add china_ip6_route 2405:f80::/32 -add china_ip6_route 2405:1080::/32 -add china_ip6_route 2405:1180::/32 -add china_ip6_route 2405:1280::/32 -add china_ip6_route 2405:1380::/32 -add china_ip6_route 2405:1480::/32 -add china_ip6_route 2405:1580::/32 -add china_ip6_route 2405:1680::/32 -add china_ip6_route 2405:18c0::/32 -add china_ip6_route 2405:1c80::/32 -add china_ip6_route 2405:1d80::/32 -add china_ip6_route 2405:1e80::/32 -add china_ip6_route 2405:1f80::/32 -add china_ip6_route 2405:1fc0::/32 -add china_ip6_route 2405:2080::/32 -add china_ip6_route 2405:2180::/32 -add china_ip6_route 2405:2280::/32 -add china_ip6_route 2405:2340::/32 -add china_ip6_route 2405:2380::/32 -add china_ip6_route 2405:2480::/32 -add china_ip6_route 2405:24c0::/32 -add china_ip6_route 2405:2580::/32 -add china_ip6_route 2405:2680::/32 -add china_ip6_route 2405:2780::/32 -add china_ip6_route 2405:2880::/32 -add china_ip6_route 2405:2980::/32 -add china_ip6_route 2405:2a80::/32 -add china_ip6_route 2405:2b80::/32 -add china_ip6_route 2405:2bc0::/32 -add china_ip6_route 2405:2c80::/32 -add china_ip6_route 2405:2d80::/32 -add china_ip6_route 2405:2e80::/32 -add china_ip6_route 2405:2ec0::/32 -add china_ip6_route 2405:2f40::/32 -add china_ip6_route 2405:2f80::/32 -add china_ip6_route 2405:3140::/32 -add china_ip6_route 2405:31c0::/32 -add china_ip6_route 2405:37c0::/32 -add china_ip6_route 2405:3880::/32 -add china_ip6_route 2405:3980::/32 -add china_ip6_route 2405:39c0::/32 -add china_ip6_route 2405:3a80::/32 -add china_ip6_route 2405:3ac0::/32 -add china_ip6_route 2405:3b00::/32 -add china_ip6_route 2405:3b80::/32 -add china_ip6_route 2405:3bc0::/32 -add china_ip6_route 2405:3c40::/32 -add china_ip6_route 2405:3c80::/32 -add china_ip6_route 2405:3d80::/32 -add china_ip6_route 2405:3e80::/32 -add china_ip6_route 2405:3f40::/32 -add china_ip6_route 2405:3f80::/32 -add china_ip6_route 2405:4080::/32 -add china_ip6_route 2405:4140::/32 -add china_ip6_route 2405:4180::/32 -add china_ip6_route 2405:41c0::/32 -add china_ip6_route 2405:4280::/32 -add china_ip6_route 2405:4380::/32 -add china_ip6_route 2405:4480::/32 -add china_ip6_route 2405:44c0::/32 -add china_ip6_route 2405:4540::/32 -add china_ip6_route 2405:4580::/32 -add china_ip6_route 2405:4680::/32 -add china_ip6_route 2405:4780::/32 -add china_ip6_route 2405:4880::/32 -add china_ip6_route 2405:4980::/32 -add china_ip6_route 2405:4a80::/32 -add china_ip6_route 2405:4b80::/32 -add china_ip6_route 2405:4d40::/32 -add china_ip6_route 2405:4e80::/32 -add china_ip6_route 2405:4f80::/32 -add china_ip6_route 2405:5080::/32 -add china_ip6_route 2405:5180::/32 -add china_ip6_route 2405:5240::/32 -add china_ip6_route 2405:5280::/32 -add china_ip6_route 2405:52c0::/32 -add china_ip6_route 2405:5380::/32 -add china_ip6_route 2405:5480::/32 -add china_ip6_route 2405:5580::/32 -add china_ip6_route 2405:5680::/32 -add china_ip6_route 2405:5780::/32 -add china_ip6_route 2405:57c0::/32 -add china_ip6_route 2405:5880::/32 -add china_ip6_route 2405:5980::/32 -add china_ip6_route 2405:5a80::/32 -add china_ip6_route 2405:5b00::/32 -add china_ip6_route 2405:5b80::/32 -add china_ip6_route 2405:5c80::/32 -add china_ip6_route 2405:5cc0::/32 -add china_ip6_route 2405:5d40::/32 -add china_ip6_route 2405:5d80::/32 -add china_ip6_route 2405:5dc0::/32 -add china_ip6_route 2405:5e80::/32 -add china_ip6_route 2405:5f80::/32 -add china_ip6_route 2405:6080::/32 -add china_ip6_route 2405:6180::/32 -add china_ip6_route 2405:6200::/32 -add china_ip6_route 2405:66c0::/32 -add china_ip6_route 2405:6880::/32 -add china_ip6_route 2405:68c0::/32 -add china_ip6_route 2405:6940::/32 -add china_ip6_route 2405:69c0::/32 -add china_ip6_route 2405:6a80::/32 -add china_ip6_route 2405:6b80::/32 -add china_ip6_route 2405:6c80::/32 -add china_ip6_route 2405:6d80::/32 -add china_ip6_route 2405:6e80::/32 -add china_ip6_route 2405:6f00::/32 -add china_ip6_route 2405:6f80::/32 -add china_ip6_route 2405:7040::/32 -add china_ip6_route 2405:7080::/32 -add china_ip6_route 2405:7180::/32 -add china_ip6_route 2405:7240::/32 -add china_ip6_route 2405:7280::/32 -add china_ip6_route 2405:7380::/32 -add china_ip6_route 2405:7480::/32 -add china_ip6_route 2405:7580::/32 -add china_ip6_route 2405:7680::/32 -add china_ip6_route 2405:7780::/32 -add china_ip6_route 2405:7880::/32 -add china_ip6_route 2405:78c0::/32 -add china_ip6_route 2405:7980::/32 -add china_ip6_route 2405:79c0::/32 -add china_ip6_route 2405:7a80::/32 -add china_ip6_route 2405:7b80::/32 -add china_ip6_route 2405:7c80::/32 -add china_ip6_route 2405:7d40::/32 -add china_ip6_route 2405:7f40::/32 -add china_ip6_route 2405:7fc0::/32 -add china_ip6_route 2405:8280::/32 -add china_ip6_route 2405:8480::/32 -add china_ip6_route 2405:84c0::/32 -add china_ip6_route 2405:8580::/32 -add china_ip6_route 2405:8680::/32 -add china_ip6_route 2405:8780::/32 -add china_ip6_route 2405:8880::/32 -add china_ip6_route 2405:8980::/32 -add china_ip6_route 2405:8a40::/32 -add china_ip6_route 2405:8a80::/32 -add china_ip6_route 2405:8ac0::/32 -add china_ip6_route 2405:8b80::/32 -add china_ip6_route 2405:8c80::/32 -add china_ip6_route 2405:8d80::/32 -add china_ip6_route 2405:8e80::/32 -add china_ip6_route 2405:8f40::/32 -add china_ip6_route 2405:8f80::/32 -add china_ip6_route 2405:9080::/32 -add china_ip6_route 2405:9180::/32 -add china_ip6_route 2405:9280::/32 -add china_ip6_route 2405:9300::/32 -add china_ip6_route 2405:9340::/32 -add china_ip6_route 2405:9380::/32 -add china_ip6_route 2405:93c0::/32 -add china_ip6_route 2405:9480::/32 -add china_ip6_route 2405:94c0::/32 -add china_ip6_route 2405:9580::/32 -add china_ip6_route 2405:9680::/32 -add china_ip6_route 2405:9700::/32 -add china_ip6_route 2405:9780::/32 -add china_ip6_route 2405:97c0::/32 -add china_ip6_route 2405:9880::/32 -add china_ip6_route 2405:9900::/32 -add china_ip6_route 2405:9980::/32 -add china_ip6_route 2405:99c0::/32 -add china_ip6_route 2405:9a80::/32 -add china_ip6_route 2405:9b00::/32 -add china_ip6_route 2405:9b80::/32 -add china_ip6_route 2405:9bc0::/32 -add china_ip6_route 2405:9e00::/32 -add china_ip6_route 2405:a240::/32 -add china_ip6_route 2405:a3c0::/32 -add china_ip6_route 2405:a500::/32 -add china_ip6_route 2405:a680::/32 -add china_ip6_route 2405:a900::/32 -add china_ip6_route 2405:a980::/32 -add china_ip6_route 2405:aa80::/32 -add china_ip6_route 2405:ab00::/32 -add china_ip6_route 2405:ad00::/32 -add china_ip6_route 2405:af00::/32 -add china_ip6_route 2405:b100::/32 -add china_ip6_route 2405:b300::/32 -add china_ip6_route 2405:b7c0::/32 -add china_ip6_route 2405:b880::/32 -add china_ip6_route 2405:b980::/32 -add china_ip6_route 2405:bb00::/32 -add china_ip6_route 2405:bd00::/32 -add china_ip6_route 2405:bd80::/32 -add china_ip6_route 2405:bdc0::/32 -add china_ip6_route 2405:be80::/32 -add china_ip6_route 2405:bf00::/32 -add china_ip6_route 2405:c040::/32 -add china_ip6_route 2405:c280::/32 -add china_ip6_route 2405:c380::/32 -add china_ip6_route 2405:c480::/32 -add china_ip6_route 2405:c500::/32 -add china_ip6_route 2405:c580::/32 -add china_ip6_route 2405:c680::/32 -add china_ip6_route 2405:c780::/32 -add china_ip6_route 2405:c880::/32 -add china_ip6_route 2405:c980::/32 -add china_ip6_route 2405:ca80::/32 -add china_ip6_route 2405:cb80::/32 -add china_ip6_route 2405:cc80::/32 -add china_ip6_route 2405:cd80::/32 -add china_ip6_route 2405:ce80::/32 -add china_ip6_route 2405:d280::/32 -add china_ip6_route 2405:d4c0::/32 -add china_ip6_route 2405:d700::/32 -add china_ip6_route 2405:d740::/32 -add china_ip6_route 2405:d900::/32 -add china_ip6_route 2405:df40::/32 -add china_ip6_route 2405:e000::/32 -add china_ip6_route 2405:e040::/32 -add china_ip6_route 2405:e1c0::/32 -add china_ip6_route 2405:e600::/32 -add china_ip6_route 2405:ed40::/32 -add china_ip6_route 2405:ee80::/32 -add china_ip6_route 2405:ef40::/30 -add china_ip6_route 2405:f340::/32 -add china_ip6_route 2405:f380::/32 -add china_ip6_route 2405:f3c0::/32 -add china_ip6_route 2405:f580::/32 -add china_ip6_route 2405:f6c0::/32 -add china_ip6_route 2405:f940::/32 -add china_ip6_route 2405:fdc0::/32 -add china_ip6_route 2405:fe80::/32 -add china_ip6_route 2405:fec0::/32 -add china_ip6_route 2405:ff80::/32 -add china_ip6_route 2406:40::/32 -add china_ip6_route 2406:80::/32 -add china_ip6_route 2406:c0::/32 -add china_ip6_route 2406:140::/32 -add china_ip6_route 2406:280::/32 -add china_ip6_route 2406:440::/32 -add china_ip6_route 2406:4c0::/32 -add china_ip6_route 2406:7c0::/32 -add china_ip6_route 2406:840::/32 -add china_ip6_route 2406:880::/32 -add china_ip6_route 2406:8c0::/32 -add china_ip6_route 2406:9c0::/32 -add china_ip6_route 2406:d80::/32 -add china_ip6_route 2406:e80::/32 -add china_ip6_route 2406:f80::/32 -add china_ip6_route 2406:1080::/32 -add china_ip6_route 2406:1100::/32 -add china_ip6_route 2406:1180::/32 -add china_ip6_route 2406:1280::/32 -add china_ip6_route 2406:1380::/32 -add china_ip6_route 2406:1480::/32 -add china_ip6_route 2406:1580::/32 -add china_ip6_route 2406:15c0::/32 -add china_ip6_route 2406:1680::/32 -add china_ip6_route 2406:1780::/32 -add china_ip6_route 2406:1880::/32 -add china_ip6_route 2406:1980::/32 -add china_ip6_route 2406:1a80::/32 -add china_ip6_route 2406:1b80::/32 -add china_ip6_route 2406:1c80::/32 -add china_ip6_route 2406:1d80::/32 -add china_ip6_route 2406:1e40::/32 -add china_ip6_route 2406:1e80::/32 -add china_ip6_route 2406:1f80::/32 -add china_ip6_route 2406:2080::/32 -add china_ip6_route 2406:2640::/32 -add china_ip6_route 2406:2700::/32 -add china_ip6_route 2406:2780::/32 -add china_ip6_route 2406:2880::/32 -add china_ip6_route 2406:2980::/32 -add china_ip6_route 2406:2a80::/32 -add china_ip6_route 2406:2b80::/32 -add china_ip6_route 2406:2c40::/32 -add china_ip6_route 2406:2c80::/32 -add china_ip6_route 2406:2d80::/32 -add china_ip6_route 2406:2e80::/32 -add china_ip6_route 2406:2f80::/32 -add china_ip6_route 2406:3080::/32 -add china_ip6_route 2406:3180::/32 -add china_ip6_route 2406:31c0::/32 -add china_ip6_route 2406:3280::/32 -add china_ip6_route 2406:3300::/32 -add china_ip6_route 2406:3340::/32 -add china_ip6_route 2406:3380::/32 -add china_ip6_route 2406:3440::/32 -add china_ip6_route 2406:3480::/32 -add china_ip6_route 2406:34c0::/32 -add china_ip6_route 2406:3580::/32 -add china_ip6_route 2406:3640::/32 -add china_ip6_route 2406:3680::/32 -add china_ip6_route 2406:3700::/32 -add china_ip6_route 2406:3780::/32 -add china_ip6_route 2406:3880::/32 -add china_ip6_route 2406:3980::/32 -add china_ip6_route 2406:39c0::/32 -add china_ip6_route 2406:3ac0::/32 -add china_ip6_route 2406:3d80::/32 -add china_ip6_route 2406:3e80::/32 -add china_ip6_route 2406:3f80::/32 -add china_ip6_route 2406:4080::/32 -add china_ip6_route 2406:40c0::/32 -add china_ip6_route 2406:4180::/32 -add china_ip6_route 2406:4280::/32 -add china_ip6_route 2406:42c0::/32 -add china_ip6_route 2406:4340::/32 -add china_ip6_route 2406:4380::/32 -add china_ip6_route 2406:43c0::/32 -add china_ip6_route 2406:4480::/32 -add china_ip6_route 2406:4500::/32 -add china_ip6_route 2406:4680::/32 -add china_ip6_route 2406:4980::/32 -add china_ip6_route 2406:4b80::/32 -add china_ip6_route 2406:4c80::/32 -add china_ip6_route 2406:4d00::/32 -add china_ip6_route 2406:4d80::/32 -add china_ip6_route 2406:4e80::/32 -add china_ip6_route 2406:4f00::/32 -add china_ip6_route 2406:4f80::/32 -add china_ip6_route 2406:5080::/32 -add china_ip6_route 2406:50c0::/32 -add china_ip6_route 2406:5180::/32 -add china_ip6_route 2406:5280::/32 -add china_ip6_route 2406:52c0::/32 -add china_ip6_route 2406:5340::/32 -add china_ip6_route 2406:5380::/32 -add china_ip6_route 2406:5480::/32 -add china_ip6_route 2406:5580::/32 -add china_ip6_route 2406:5680::/32 -add china_ip6_route 2406:5780::/32 -add china_ip6_route 2406:5840::/32 -add china_ip6_route 2406:5880::/32 -add china_ip6_route 2406:5940::/32 -add china_ip6_route 2406:5980::/32 -add china_ip6_route 2406:5a40::/32 -add china_ip6_route 2406:5ac0::/32 -add china_ip6_route 2406:5b40::/32 -add china_ip6_route 2406:5d80::/32 -add china_ip6_route 2406:5e80::/32 -add china_ip6_route 2406:5f80::/32 -add china_ip6_route 2406:6080::/32 -add china_ip6_route 2406:6100::/32 -add china_ip6_route 2406:6180::/32 -add china_ip6_route 2406:61c0::/30 -add china_ip6_route 2406:61c4::/30 -add china_ip6_route 2406:6280::/32 -add china_ip6_route 2406:6300::/32 -add china_ip6_route 2406:6340::/32 -add china_ip6_route 2406:6380::/32 -add china_ip6_route 2406:6480::/32 -add china_ip6_route 2406:6500::/32 -add china_ip6_route 2406:6580::/32 -add china_ip6_route 2406:65c0::/32 -add china_ip6_route 2406:6640::/32 -add china_ip6_route 2406:6680::/32 -add china_ip6_route 2406:6780::/32 -add china_ip6_route 2406:6880::/32 -add china_ip6_route 2406:6980::/32 -add china_ip6_route 2406:6a80::/32 -add china_ip6_route 2406:6b80::/32 -add china_ip6_route 2406:6bc0::/32 -add china_ip6_route 2406:6c80::/32 -add china_ip6_route 2406:6d80::/32 -add china_ip6_route 2406:6e80::/32 -add china_ip6_route 2406:6f80::/32 -add china_ip6_route 2406:7080::/32 -add china_ip6_route 2406:7280::/32 -add china_ip6_route 2406:7380::/32 -add china_ip6_route 2406:7480::/32 -add china_ip6_route 2406:7580::/32 -add china_ip6_route 2406:7680::/32 -add china_ip6_route 2406:7780::/32 -add china_ip6_route 2406:7880::/32 -add china_ip6_route 2406:7980::/32 -add china_ip6_route 2406:7a80::/32 -add china_ip6_route 2406:7b80::/32 -add china_ip6_route 2406:7c80::/32 -add china_ip6_route 2406:7cc0::/32 -add china_ip6_route 2406:7d00::/32 -add china_ip6_route 2406:7d80::/32 -add china_ip6_route 2406:7e80::/32 -add china_ip6_route 2406:7f80::/32 -add china_ip6_route 2406:7fc0::/32 -add china_ip6_route 2406:8080::/32 -add china_ip6_route 2406:8180::/32 -add china_ip6_route 2406:8280::/32 -add china_ip6_route 2406:8380::/32 -add china_ip6_route 2406:8480::/32 -add china_ip6_route 2406:8500::/32 -add china_ip6_route 2406:8580::/32 -add china_ip6_route 2406:8780::/32 -add china_ip6_route 2406:8880::/32 -add china_ip6_route 2406:8980::/32 -add china_ip6_route 2406:8a80::/32 -add china_ip6_route 2406:8b80::/32 -add china_ip6_route 2406:8c80::/32 -add china_ip6_route 2406:8d80::/32 -add china_ip6_route 2406:8e80::/32 -add china_ip6_route 2406:8f40::/32 -add china_ip6_route 2406:8f80::/32 -add china_ip6_route 2406:9180::/32 -add china_ip6_route 2406:9200::/32 -add china_ip6_route 2406:9280::/32 -add china_ip6_route 2406:9380::/32 -add china_ip6_route 2406:9480::/32 -add china_ip6_route 2406:94c0::/32 -add china_ip6_route 2406:9780::/32 -add china_ip6_route 2406:9d80::/32 -add china_ip6_route 2406:9e40::/32 -add china_ip6_route 2406:9e80::/32 -add china_ip6_route 2406:9f80::/32 -add china_ip6_route 2406:a080::/32 -add china_ip6_route 2406:a180::/32 -add china_ip6_route 2406:a280::/32 -add china_ip6_route 2406:a380::/32 -add china_ip6_route 2406:a480::/32 -add china_ip6_route 2406:a580::/32 -add china_ip6_route 2406:a680::/32 -add china_ip6_route 2406:a780::/32 -add china_ip6_route 2406:a7c0::/32 -add china_ip6_route 2406:a880::/32 -add china_ip6_route 2406:a8c0::/32 -add china_ip6_route 2406:a980::/32 -add china_ip6_route 2406:aa80::/32 -add china_ip6_route 2406:aac0::/32 -add china_ip6_route 2406:ab80::/32 -add china_ip6_route 2406:abc0::/32 -add china_ip6_route 2406:ac80::/32 -add china_ip6_route 2406:acc0::/32 -add china_ip6_route 2406:ad40::/32 -add china_ip6_route 2406:ad80::/32 -add china_ip6_route 2406:ae80::/32 -add china_ip6_route 2406:af80::/32 -add china_ip6_route 2406:b080::/32 -add china_ip6_route 2406:b640::/32 -add china_ip6_route 2406:b880::/32 -add china_ip6_route 2406:b980::/32 -add china_ip6_route 2406:ba80::/32 -add china_ip6_route 2406:bb80::/32 -add china_ip6_route 2406:bc80::/32 -add china_ip6_route 2406:bd40::/32 -add china_ip6_route 2406:bd80::/32 -add china_ip6_route 2406:bdc0::/32 -add china_ip6_route 2406:be80::/32 -add china_ip6_route 2406:bf80::/32 -add china_ip6_route 2406:c080::/32 -add china_ip6_route 2406:c180::/32 -add china_ip6_route 2406:c280::/32 -add china_ip6_route 2406:c340::/32 -add china_ip6_route 2406:c480::/32 -add china_ip6_route 2406:c580::/32 -add china_ip6_route 2406:c680::/32 -add china_ip6_route 2406:c780::/32 -add china_ip6_route 2406:c880::/32 -add china_ip6_route 2406:c900::/32 -add china_ip6_route 2406:c980::/32 -add china_ip6_route 2406:ca80::/32 -add china_ip6_route 2406:cac0::/32 -add china_ip6_route 2406:cb80::/32 -add china_ip6_route 2406:cc80::/32 -add china_ip6_route 2406:cd80::/32 -add china_ip6_route 2406:ce80::/32 -add china_ip6_route 2406:cf00::/32 -add china_ip6_route 2406:cf01::/32 -add china_ip6_route 2406:cf02::/31 -add china_ip6_route 2406:cf80::/32 -add china_ip6_route 2406:d080::/32 -add china_ip6_route 2406:d140::/32 -add china_ip6_route 2406:d180::/32 -add china_ip6_route 2406:d280::/32 -add china_ip6_route 2406:d2c0::/32 -add china_ip6_route 2406:d380::/32 -add china_ip6_route 2406:d440::/32 -add china_ip6_route 2406:d480::/32 -add china_ip6_route 2406:d580::/32 -add china_ip6_route 2406:d680::/32 -add china_ip6_route 2406:d780::/32 -add china_ip6_route 2406:d880::/32 -add china_ip6_route 2406:d980::/32 -add china_ip6_route 2406:db80::/32 -add china_ip6_route 2406:dc80::/32 -add china_ip6_route 2406:dd00::/32 -add china_ip6_route 2406:dd80::/32 -add china_ip6_route 2406:de80::/32 -add china_ip6_route 2406:df80::/32 -add china_ip6_route 2406:e080::/32 -add china_ip6_route 2406:e180::/32 -add china_ip6_route 2406:e2c0::/32 -add china_ip6_route 2406:e380::/32 -add china_ip6_route 2406:e3c0::/32 -add china_ip6_route 2406:e500::/32 -add china_ip6_route 2406:e580::/32 -add china_ip6_route 2406:e680::/32 -add china_ip6_route 2406:e780::/32 -add china_ip6_route 2406:e8c0::/32 -add china_ip6_route 2406:ea40::/28 -add china_ip6_route 2406:f280::/32 -add china_ip6_route 2406:f300::/32 -add china_ip6_route 2406:f4c0::/32 -add china_ip6_route 2406:f7c0::/32 -add china_ip6_route 2406:f980::/32 -add china_ip6_route 2406:fc80::/32 -add china_ip6_route 2406:fd80::/32 -add china_ip6_route 2406:fe80::/32 -add china_ip6_route 2406:ff00::/32 -add china_ip6_route 2407:480::/32 -add china_ip6_route 2407:580::/32 -add china_ip6_route 2407:cc0::/32 -add china_ip6_route 2407:f40::/32 -add china_ip6_route 2407:1180::/32 -add china_ip6_route 2407:17c0::/32 -add china_ip6_route 2407:1900::/32 -add china_ip6_route 2407:1d00::/32 -add china_ip6_route 2407:1e80::/32 -add china_ip6_route 2407:2280::/32 -add china_ip6_route 2407:2380::/32 -add china_ip6_route 2407:23c0::/32 -add china_ip6_route 2407:2440::/32 -add china_ip6_route 2407:2780::/32 -add china_ip6_route 2407:2840::/32 -add china_ip6_route 2407:2ac0::/32 -add china_ip6_route 2407:31c0::/32 -add china_ip6_route 2407:3340::/32 -add china_ip6_route 2407:3540::/32 -add china_ip6_route 2407:3700::/32 -add china_ip6_route 2407:3740::/32 -add china_ip6_route 2407:37c0::/32 -add china_ip6_route 2407:3900::/32 -add china_ip6_route 2407:3f40::/32 -add china_ip6_route 2407:43c0::/32 -add china_ip6_route 2407:4440::/32 -add china_ip6_route 2407:4580::/32 -add china_ip6_route 2407:4680::/32 -add china_ip6_route 2407:4740::/32 -add china_ip6_route 2407:4880::/32 -add china_ip6_route 2407:4980::/32 -add china_ip6_route 2407:4a80::/32 -add china_ip6_route 2407:4c80::/32 -add china_ip6_route 2407:4d80::/32 -add china_ip6_route 2407:4e80::/32 -add china_ip6_route 2407:4f00::/32 -add china_ip6_route 2407:5380::/32 -add china_ip6_route 2407:53c0::/32 -add china_ip6_route 2407:5500::/32 -add china_ip6_route 2407:5780::/32 -add china_ip6_route 2407:5840::/32 -add china_ip6_route 2407:6040::/32 -add china_ip6_route 2407:6580::/32 -add china_ip6_route 2407:6c40::/32 -add china_ip6_route 2407:7680::/32 -add china_ip6_route 2407:7780::/32 -add china_ip6_route 2407:7880::/32 -add china_ip6_route 2407:7980::/32 -add china_ip6_route 2407:7c80::/32 -add china_ip6_route 2407:7d00::/32 -add china_ip6_route 2407:7d80::/32 -add china_ip6_route 2407:7e80::/32 -add china_ip6_route 2407:8880::/32 -add china_ip6_route 2407:8b80::/32 -add china_ip6_route 2407:8f40::/32 -add china_ip6_route 2407:9080::/32 -add china_ip6_route 2407:9180::/32 -add china_ip6_route 2407:94c0::/32 -add china_ip6_route 2407:9680::/32 -add china_ip6_route 2407:9980::/32 -add china_ip6_route 2407:9b40::/32 -add china_ip6_route 2407:9bc0::/32 -add china_ip6_route 2407:9f00::/32 -add china_ip6_route 2407:9f80::/32 -add china_ip6_route 2407:a040::/32 -add china_ip6_route 2407:a480::/32 -add china_ip6_route 2407:a640::/32 -add china_ip6_route 2407:a7c0::/32 -add china_ip6_route 2407:a880::/32 -add china_ip6_route 2407:a940::/32 -add china_ip6_route 2407:ad80::/32 -add china_ip6_route 2407:ae80::/32 -add china_ip6_route 2407:af80::/32 -add china_ip6_route 2407:b080::/32 -add china_ip6_route 2407:b180::/32 -add china_ip6_route 2407:b280::/32 -add china_ip6_route 2407:b380::/32 -add china_ip6_route 2407:b580::/32 -add china_ip6_route 2407:b680::/32 -add china_ip6_route 2407:b780::/32 -add china_ip6_route 2407:b880::/32 -add china_ip6_route 2407:b980::/32 -add china_ip6_route 2407:ba00::/32 -add china_ip6_route 2407:ba80::/32 -add china_ip6_route 2407:bb80::/32 -add china_ip6_route 2407:bc00::/32 -add china_ip6_route 2407:bc80::/32 -add china_ip6_route 2407:bd80::/32 -add china_ip6_route 2407:bdc0::/32 -add china_ip6_route 2407:be80::/32 -add china_ip6_route 2407:bf80::/32 -add china_ip6_route 2407:c080::/32 -add china_ip6_route 2407:c380::/32 -add china_ip6_route 2407:c400::/32 -add china_ip6_route 2407:c480::/32 -add china_ip6_route 2407:c580::/32 -add china_ip6_route 2407:c680::/32 -add china_ip6_route 2407:c780::/32 -add china_ip6_route 2407:c880::/32 -add china_ip6_route 2407:c900::/32 -add china_ip6_route 2407:c980::/32 -add china_ip6_route 2407:cb80::/32 -add china_ip6_route 2407:cc80::/32 -add china_ip6_route 2407:cd80::/32 -add china_ip6_route 2407:ce80::/32 -add china_ip6_route 2407:cf00::/32 -add china_ip6_route 2407:cf80::/32 -add china_ip6_route 2407:d480::/32 -add china_ip6_route 2407:d580::/32 -add china_ip6_route 2407:d680::/32 -add china_ip6_route 2407:d780::/32 -add china_ip6_route 2407:d7c0::/32 -add china_ip6_route 2407:d880::/32 -add china_ip6_route 2407:d8c0::/32 -add china_ip6_route 2407:d980::/32 -add china_ip6_route 2407:d9c0::/32 -add china_ip6_route 2407:da80::/32 -add china_ip6_route 2407:db80::/32 -add china_ip6_route 2407:dc80::/32 -add china_ip6_route 2407:dd80::/32 -add china_ip6_route 2407:de80::/32 -add china_ip6_route 2407:df80::/32 -add china_ip6_route 2407:dfc0::/32 -add china_ip6_route 2407:e080::/32 -add china_ip6_route 2407:e180::/32 -add china_ip6_route 2407:e280::/32 -add china_ip6_route 2407:e380::/32 -add china_ip6_route 2407:e480::/32 -add china_ip6_route 2407:e580::/32 -add china_ip6_route 2407:e680::/32 -add china_ip6_route 2407:e780::/32 -add china_ip6_route 2407:e800::/32 -add china_ip6_route 2407:ea80::/32 -add china_ip6_route 2407:eb80::/32 -add china_ip6_route 2407:ec40::/32 -add china_ip6_route 2407:ec80::/32 -add china_ip6_route 2407:ecc0::/32 -add china_ip6_route 2407:ed80::/32 -add china_ip6_route 2407:ee80::/32 -add china_ip6_route 2407:ef80::/32 -add china_ip6_route 2407:f080::/32 -add china_ip6_route 2407:f180::/32 -add china_ip6_route 2407:f280::/32 -add china_ip6_route 2407:f380::/32 -add china_ip6_route 2407:f480::/32 -add china_ip6_route 2407:f580::/32 -add china_ip6_route 2407:f680::/32 -add china_ip6_route 2407:f780::/32 -add china_ip6_route 2407:f880::/32 -add china_ip6_route 2407:f980::/32 -add china_ip6_route 2407:fa80::/32 -add china_ip6_route 2407:fb80::/32 -add china_ip6_route 2407:fc80::/32 -add china_ip6_route 2407:fd80::/32 -add china_ip6_route 2408:4000::/22 -add china_ip6_route 2408:6000::/24 -add china_ip6_route 2408:8000::/22 -add china_ip6_route 2408:8400::/22 -add china_ip6_route 2408:8800::/21 -add china_ip6_route 2409:2000::/21 -add china_ip6_route 2409:6000::/20 -add china_ip6_route 2409:8000::/20 -add china_ip6_route 240a:2000::/24 -add china_ip6_route 240a:4000::/21 -add china_ip6_route 240a:6000::/24 -add china_ip6_route 240a:8000::/21 -add china_ip6_route 240a:a000::/20 -add china_ip6_route 240a:c000::/20 -add china_ip6_route 240b:2000::/22 -add china_ip6_route 240b:8000::/21 -add china_ip6_route 240c::/28 -add china_ip6_route 240c:4000::/22 -add china_ip6_route 240c:8000::/21 -add china_ip6_route 240c:c000::/20 -add china_ip6_route 240d:4000::/21 -add china_ip6_route 240d:8000::/24 -add china_ip6_route 240e::/24 -add china_ip6_route 240e:100::/24 -add china_ip6_route 240e:200::/23 -add china_ip6_route 240e:400::/22 -add china_ip6_route 240e:800::/21 -add china_ip6_route 240e:1000::/20 -add china_ip6_route 240e:2000::/19 -add china_ip6_route 240f:4000::/24 -add china_ip6_route 240f:8000::/24 -add china_ip6_route 240f:c000::/24 diff --git a/luci-app-openclash/root/etc/openclash/china_ip_route.ipset b/luci-app-openclash/root/etc/openclash/china_ip_route.ipset deleted file mode 100644 index 03a44202..00000000 --- a/luci-app-openclash/root/etc/openclash/china_ip_route.ipset +++ /dev/null @@ -1,8617 +0,0 @@ -create china_ip_route hash:net family inet hashsize 1024 maxelem 1000000 -add china_ip_route 1.0.1.0/24 -add china_ip_route 1.0.2.0/23 -add china_ip_route 1.0.8.0/21 -add china_ip_route 1.0.32.0/19 -add china_ip_route 1.1.0.0/24 -add china_ip_route 1.1.2.0/23 -add china_ip_route 1.1.4.0/22 -add china_ip_route 1.1.8.0/24 -add china_ip_route 1.1.9.0/24 -add china_ip_route 1.1.10.0/23 -add china_ip_route 1.1.12.0/22 -add china_ip_route 1.1.16.0/20 -add china_ip_route 1.1.32.0/19 -add china_ip_route 1.2.0.0/23 -add china_ip_route 1.2.2.0/24 -add china_ip_route 1.2.4.0/24 -add china_ip_route 1.2.5.0/24 -add china_ip_route 1.2.6.0/23 -add china_ip_route 1.2.8.0/24 -add china_ip_route 1.2.9.0/24 -add china_ip_route 1.2.10.0/23 -add china_ip_route 1.2.12.0/22 -add china_ip_route 1.2.16.0/20 -add china_ip_route 1.2.32.0/19 -add china_ip_route 1.2.64.0/18 -add china_ip_route 1.3.0.0/16 -add china_ip_route 1.4.1.0/24 -add china_ip_route 1.4.2.0/23 -add china_ip_route 1.4.4.0/24 -add china_ip_route 1.4.5.0/24 -add china_ip_route 1.4.6.0/23 -add china_ip_route 1.4.8.0/21 -add china_ip_route 1.4.16.0/20 -add china_ip_route 1.4.32.0/19 -add china_ip_route 1.4.64.0/18 -add china_ip_route 1.8.0.0/16 -add china_ip_route 1.10.0.0/21 -add china_ip_route 1.10.8.0/23 -add china_ip_route 1.10.11.0/24 -add china_ip_route 1.10.12.0/22 -add china_ip_route 1.10.16.0/20 -add china_ip_route 1.10.32.0/19 -add china_ip_route 1.10.64.0/18 -add china_ip_route 1.12.0.0/14 -add china_ip_route 1.24.0.0/13 -add china_ip_route 1.45.0.0/16 -add china_ip_route 1.48.0.0/15 -add china_ip_route 1.50.0.0/16 -add china_ip_route 1.51.0.0/16 -add china_ip_route 1.56.0.0/13 -add china_ip_route 1.68.0.0/14 -add china_ip_route 1.80.0.0/13 -add china_ip_route 1.88.0.0/14 -add china_ip_route 1.92.0.0/15 -add china_ip_route 1.94.0.0/15 -add china_ip_route 1.116.0.0/15 -add china_ip_route 1.118.0.0/16 -add china_ip_route 1.119.0.0/17 -add china_ip_route 1.119.128.0/17 -add china_ip_route 1.180.0.0/14 -add china_ip_route 1.184.0.0/15 -add china_ip_route 1.188.0.0/14 -add china_ip_route 1.192.0.0/13 -add china_ip_route 1.202.0.0/15 -add china_ip_route 1.204.0.0/14 -add china_ip_route 14.0.0.0/21 -add china_ip_route 14.0.12.0/22 -add china_ip_route 14.1.0.0/22 -add china_ip_route 14.1.24.0/22 -add china_ip_route 14.1.96.0/22 -add china_ip_route 14.1.108.0/22 -add china_ip_route 14.16.0.0/12 -add china_ip_route 14.102.128.0/22 -add china_ip_route 14.102.156.0/22 -add china_ip_route 14.102.180.0/22 -add china_ip_route 14.103.0.0/16 -add china_ip_route 14.104.0.0/13 -add china_ip_route 14.112.0.0/12 -add china_ip_route 14.130.0.0/15 -add china_ip_route 14.134.0.0/15 -add china_ip_route 14.144.0.0/12 -add china_ip_route 14.192.60.0/22 -add china_ip_route 14.192.76.0/22 -add china_ip_route 14.196.0.0/15 -add china_ip_route 14.204.0.0/15 -add china_ip_route 14.208.0.0/12 -add china_ip_route 27.0.128.0/22 -add china_ip_route 27.0.132.0/22 -add china_ip_route 27.0.160.0/22 -add china_ip_route 27.0.164.0/22 -add china_ip_route 27.0.188.0/22 -add china_ip_route 27.0.204.0/22 -add china_ip_route 27.0.208.0/22 -add china_ip_route 27.0.212.0/22 -add china_ip_route 27.8.0.0/13 -add china_ip_route 27.16.0.0/12 -add china_ip_route 27.34.232.0/21 -add china_ip_route 27.36.0.0/14 -add china_ip_route 27.40.0.0/13 -add china_ip_route 27.50.40.0/21 -add china_ip_route 27.50.128.0/17 -add china_ip_route 27.54.72.0/21 -add china_ip_route 27.54.152.0/21 -add china_ip_route 27.54.192.0/18 -add china_ip_route 27.98.208.0/20 -add china_ip_route 27.98.224.0/19 -add china_ip_route 27.99.128.0/17 -add china_ip_route 27.103.0.0/16 -add china_ip_route 27.106.128.0/18 -add china_ip_route 27.106.204.0/22 -add china_ip_route 27.109.32.0/19 -add china_ip_route 27.109.124.0/22 -add china_ip_route 27.112.0.0/18 -add china_ip_route 27.112.80.0/20 -add china_ip_route 27.112.112.0/22 -add china_ip_route 27.112.116.0/22 -add china_ip_route 27.113.128.0/18 -add china_ip_route 27.115.0.0/17 -add china_ip_route 27.116.44.0/22 -add china_ip_route 27.121.72.0/21 -add china_ip_route 27.121.120.0/21 -add china_ip_route 27.128.0.0/15 -add china_ip_route 27.131.220.0/22 -add china_ip_route 27.144.0.0/16 -add china_ip_route 27.148.0.0/14 -add china_ip_route 27.152.0.0/13 -add china_ip_route 27.184.0.0/13 -add china_ip_route 27.192.0.0/11 -add china_ip_route 27.224.0.0/14 -add china_ip_route 36.0.0.0/22 -add china_ip_route 36.0.8.0/21 -add china_ip_route 36.0.16.0/20 -add china_ip_route 36.0.32.0/19 -add china_ip_route 36.0.64.0/18 -add china_ip_route 36.0.128.0/17 -add china_ip_route 36.1.0.0/16 -add china_ip_route 36.4.0.0/14 -add china_ip_route 36.16.0.0/12 -add china_ip_route 36.32.0.0/14 -add china_ip_route 36.36.0.0/16 -add china_ip_route 36.37.0.0/19 -add china_ip_route 36.37.36.0/23 -add china_ip_route 36.37.39.0/24 -add china_ip_route 36.37.40.0/21 -add china_ip_route 36.37.48.0/20 -add china_ip_route 36.40.0.0/13 -add china_ip_route 36.48.0.0/15 -add china_ip_route 36.51.0.0/16 -add china_ip_route 36.56.0.0/13 -add china_ip_route 36.96.0.0/11 -add china_ip_route 36.128.0.0/10 -add china_ip_route 36.192.0.0/11 -add china_ip_route 36.248.0.0/14 -add china_ip_route 36.254.0.0/16 -add china_ip_route 36.255.116.0/22 -add china_ip_route 36.255.128.0/22 -add china_ip_route 36.255.164.0/22 -add china_ip_route 36.255.172.0/22 -add china_ip_route 36.255.176.0/22 -add china_ip_route 39.0.0.0/24 -add china_ip_route 39.0.2.0/23 -add china_ip_route 39.0.4.0/22 -add china_ip_route 39.0.8.0/21 -add china_ip_route 39.0.16.0/20 -add china_ip_route 39.0.32.0/19 -add china_ip_route 39.0.64.0/18 -add china_ip_route 39.0.128.0/17 -add china_ip_route 39.64.0.0/11 -add china_ip_route 39.96.0.0/13 -add china_ip_route 39.104.0.0/14 -add china_ip_route 39.108.0.0/16 -add china_ip_route 39.128.0.0/10 -add china_ip_route 40.72.0.0/15 -add china_ip_route 40.125.128.0/17 -add china_ip_route 40.126.64.0/18 -add china_ip_route 42.0.0.0/22 -add china_ip_route 42.0.8.0/21 -add china_ip_route 42.0.16.0/21 -add china_ip_route 42.0.24.0/22 -add china_ip_route 42.0.32.0/19 -add china_ip_route 42.0.128.0/17 -add china_ip_route 42.1.0.0/19 -add china_ip_route 42.1.32.0/20 -add china_ip_route 42.1.48.0/21 -add china_ip_route 42.1.56.0/22 -add china_ip_route 42.1.128.0/17 -add china_ip_route 42.4.0.0/14 -add china_ip_route 42.48.0.0/15 -add china_ip_route 42.50.0.0/16 -add china_ip_route 42.51.0.0/16 -add china_ip_route 42.52.0.0/14 -add china_ip_route 42.56.0.0/14 -add china_ip_route 42.62.0.0/17 -add china_ip_route 42.62.128.0/19 -add china_ip_route 42.62.160.0/20 -add china_ip_route 42.62.180.0/22 -add china_ip_route 42.62.184.0/21 -add china_ip_route 42.63.0.0/16 -add china_ip_route 42.80.0.0/15 -add china_ip_route 42.83.64.0/20 -add china_ip_route 42.83.80.0/22 -add china_ip_route 42.83.88.0/21 -add china_ip_route 42.83.96.0/19 -add china_ip_route 42.83.128.0/17 -add china_ip_route 42.84.0.0/14 -add china_ip_route 42.88.0.0/13 -add china_ip_route 42.96.64.0/19 -add china_ip_route 42.96.96.0/21 -add china_ip_route 42.96.108.0/22 -add china_ip_route 42.96.112.0/20 -add china_ip_route 42.96.128.0/17 -add china_ip_route 42.97.0.0/16 -add china_ip_route 42.99.0.0/18 -add china_ip_route 42.99.64.0/19 -add china_ip_route 42.99.96.0/20 -add china_ip_route 42.99.112.0/22 -add china_ip_route 42.99.120.0/21 -add china_ip_route 42.100.0.0/14 -add china_ip_route 42.120.0.0/15 -add china_ip_route 42.122.0.0/16 -add china_ip_route 42.123.0.0/19 -add china_ip_route 42.123.36.0/22 -add china_ip_route 42.123.40.0/21 -add china_ip_route 42.123.48.0/20 -add china_ip_route 42.123.64.0/18 -add china_ip_route 42.123.128.0/17 -add china_ip_route 42.128.0.0/12 -add china_ip_route 42.156.0.0/19 -add china_ip_route 42.156.36.0/22 -add china_ip_route 42.156.40.0/21 -add china_ip_route 42.156.48.0/20 -add china_ip_route 42.156.64.0/18 -add china_ip_route 42.156.128.0/17 -add china_ip_route 42.157.0.0/16 -add china_ip_route 42.158.0.0/16 -add china_ip_route 42.159.0.0/16 -add china_ip_route 42.160.0.0/12 -add china_ip_route 42.176.0.0/13 -add china_ip_route 42.184.0.0/15 -add china_ip_route 42.186.0.0/16 -add china_ip_route 42.187.0.0/18 -add china_ip_route 42.187.64.0/19 -add china_ip_route 42.187.96.0/20 -add china_ip_route 42.187.112.0/21 -add china_ip_route 42.187.120.0/22 -add china_ip_route 42.187.128.0/17 -add china_ip_route 42.192.0.0/15 -add china_ip_route 42.194.0.0/21 -add china_ip_route 42.194.8.0/22 -add china_ip_route 42.194.12.0/22 -add china_ip_route 42.194.16.0/20 -add china_ip_route 42.194.32.0/19 -add china_ip_route 42.194.64.0/18 -add china_ip_route 42.194.128.0/17 -add china_ip_route 42.195.0.0/16 -add china_ip_route 42.196.0.0/14 -add china_ip_route 42.201.0.0/17 -add china_ip_route 42.202.0.0/15 -add china_ip_route 42.204.0.0/14 -add china_ip_route 42.208.0.0/12 -add china_ip_route 42.224.0.0/12 -add china_ip_route 42.240.0.0/17 -add china_ip_route 42.240.128.0/17 -add china_ip_route 42.242.0.0/15 -add china_ip_route 42.244.0.0/14 -add china_ip_route 42.248.0.0/13 -add china_ip_route 43.136.0.0/13 -add china_ip_route 43.144.0.0/13 -add china_ip_route 43.160.0.0/11 -add china_ip_route 43.224.12.0/22 -add china_ip_route 43.224.24.0/22 -add china_ip_route 43.224.44.0/22 -add china_ip_route 43.224.52.0/22 -add china_ip_route 43.224.56.0/22 -add china_ip_route 43.224.64.0/22 -add china_ip_route 43.224.68.0/22 -add china_ip_route 43.224.72.0/22 -add china_ip_route 43.224.80.0/22 -add china_ip_route 43.224.100.0/22 -add china_ip_route 43.224.144.0/22 -add china_ip_route 43.224.160.0/22 -add china_ip_route 43.224.176.0/22 -add china_ip_route 43.224.184.0/22 -add china_ip_route 43.224.200.0/22 -add china_ip_route 43.224.204.0/22 -add china_ip_route 43.224.208.0/22 -add china_ip_route 43.224.212.0/22 -add china_ip_route 43.224.216.0/22 -add china_ip_route 43.224.240.0/22 -add china_ip_route 43.225.76.0/22 -add china_ip_route 43.225.84.0/22 -add china_ip_route 43.225.120.0/22 -add china_ip_route 43.225.124.0/22 -add china_ip_route 43.225.172.0/22 -add china_ip_route 43.225.180.0/22 -add china_ip_route 43.225.208.0/22 -add china_ip_route 43.225.216.0/22 -add china_ip_route 43.225.220.0/22 -add china_ip_route 43.225.224.0/22 -add china_ip_route 43.225.228.0/22 -add china_ip_route 43.225.232.0/22 -add china_ip_route 43.225.236.0/22 -add china_ip_route 43.225.240.0/22 -add china_ip_route 43.225.244.0/22 -add china_ip_route 43.225.252.0/22 -add china_ip_route 43.226.32.0/22 -add china_ip_route 43.226.36.0/22 -add china_ip_route 43.226.40.0/22 -add china_ip_route 43.226.44.0/22 -add china_ip_route 43.226.48.0/22 -add china_ip_route 43.226.52.0/22 -add china_ip_route 43.226.56.0/22 -add china_ip_route 43.226.60.0/22 -add china_ip_route 43.226.64.0/22 -add china_ip_route 43.226.68.0/22 -add china_ip_route 43.226.72.0/22 -add china_ip_route 43.226.76.0/22 -add china_ip_route 43.226.80.0/22 -add china_ip_route 43.226.84.0/22 -add china_ip_route 43.226.88.0/22 -add china_ip_route 43.226.92.0/22 -add china_ip_route 43.226.96.0/22 -add china_ip_route 43.226.100.0/22 -add china_ip_route 43.226.104.0/22 -add china_ip_route 43.226.108.0/22 -add china_ip_route 43.226.112.0/22 -add china_ip_route 43.226.116.0/22 -add china_ip_route 43.226.120.0/22 -add china_ip_route 43.226.128.0/22 -add china_ip_route 43.226.132.0/22 -add china_ip_route 43.226.136.0/22 -add china_ip_route 43.226.140.0/22 -add china_ip_route 43.226.144.0/22 -add china_ip_route 43.226.148.0/22 -add china_ip_route 43.226.152.0/22 -add china_ip_route 43.226.156.0/22 -add china_ip_route 43.226.160.0/22 -add china_ip_route 43.226.164.0/22 -add china_ip_route 43.226.168.0/22 -add china_ip_route 43.226.172.0/22 -add china_ip_route 43.226.176.0/22 -add china_ip_route 43.226.180.0/22 -add china_ip_route 43.226.184.0/22 -add china_ip_route 43.226.188.0/22 -add china_ip_route 43.226.192.0/22 -add china_ip_route 43.226.196.0/22 -add china_ip_route 43.226.200.0/22 -add china_ip_route 43.226.204.0/22 -add china_ip_route 43.226.208.0/22 -add china_ip_route 43.226.212.0/22 -add china_ip_route 43.226.236.0/22 -add china_ip_route 43.226.240.0/22 -add china_ip_route 43.226.244.0/22 -add china_ip_route 43.226.248.0/22 -add china_ip_route 43.226.252.0/22 -add china_ip_route 43.227.0.0/22 -add china_ip_route 43.227.4.0/22 -add china_ip_route 43.227.8.0/22 -add china_ip_route 43.227.32.0/22 -add china_ip_route 43.227.36.0/22 -add china_ip_route 43.227.40.0/22 -add china_ip_route 43.227.44.0/22 -add china_ip_route 43.227.48.0/22 -add china_ip_route 43.227.52.0/22 -add china_ip_route 43.227.56.0/22 -add china_ip_route 43.227.60.0/22 -add china_ip_route 43.227.64.0/22 -add china_ip_route 43.227.68.0/22 -add china_ip_route 43.227.72.0/22 -add china_ip_route 43.227.76.0/22 -add china_ip_route 43.227.80.0/22 -add china_ip_route 43.227.84.0/22 -add china_ip_route 43.227.88.0/22 -add china_ip_route 43.227.92.0/22 -add china_ip_route 43.227.96.0/22 -add china_ip_route 43.227.100.0/22 -add china_ip_route 43.227.104.0/22 -add china_ip_route 43.227.136.0/22 -add china_ip_route 43.227.140.0/22 -add china_ip_route 43.227.144.0/22 -add china_ip_route 43.227.152.0/22 -add china_ip_route 43.227.156.0/22 -add china_ip_route 43.227.160.0/22 -add china_ip_route 43.227.164.0/22 -add china_ip_route 43.227.168.0/22 -add china_ip_route 43.227.172.0/22 -add china_ip_route 43.227.176.0/22 -add china_ip_route 43.227.180.0/22 -add china_ip_route 43.227.188.0/22 -add china_ip_route 43.227.192.0/22 -add china_ip_route 43.227.196.0/22 -add china_ip_route 43.227.200.0/22 -add china_ip_route 43.227.204.0/22 -add china_ip_route 43.227.208.0/22 -add china_ip_route 43.227.212.0/22 -add china_ip_route 43.227.216.0/22 -add china_ip_route 43.227.220.0/22 -add china_ip_route 43.227.232.0/22 -add china_ip_route 43.227.248.0/22 -add china_ip_route 43.227.252.0/22 -add china_ip_route 43.228.0.0/22 -add china_ip_route 43.228.4.0/22 -add china_ip_route 43.228.8.0/22 -add china_ip_route 43.228.12.0/22 -add china_ip_route 43.228.16.0/22 -add china_ip_route 43.228.20.0/22 -add china_ip_route 43.228.24.0/22 -add china_ip_route 43.228.28.0/22 -add china_ip_route 43.228.32.0/22 -add china_ip_route 43.228.36.0/22 -add china_ip_route 43.228.40.0/22 -add china_ip_route 43.228.44.0/22 -add china_ip_route 43.228.48.0/22 -add china_ip_route 43.228.52.0/22 -add china_ip_route 43.228.56.0/22 -add china_ip_route 43.228.60.0/22 -add china_ip_route 43.228.64.0/22 -add china_ip_route 43.228.68.0/22 -add china_ip_route 43.228.76.0/22 -add china_ip_route 43.228.100.0/22 -add china_ip_route 43.228.116.0/22 -add china_ip_route 43.228.120.0/22 -add china_ip_route 43.228.132.0/22 -add china_ip_route 43.228.136.0/22 -add china_ip_route 43.228.148.0/22 -add china_ip_route 43.228.152.0/22 -add china_ip_route 43.228.188.0/22 -add china_ip_route 43.228.204.0/22 -add china_ip_route 43.228.240.0/22 -add china_ip_route 43.229.40.0/22 -add china_ip_route 43.229.48.0/22 -add china_ip_route 43.229.56.0/22 -add china_ip_route 43.229.96.0/22 -add china_ip_route 43.229.120.0/22 -add china_ip_route 43.229.136.0/22 -add china_ip_route 43.229.140.0/22 -add china_ip_route 43.229.144.0/22 -add china_ip_route 43.229.168.0/22 -add china_ip_route 43.229.172.0/22 -add china_ip_route 43.229.176.0/22 -add china_ip_route 43.229.180.0/22 -add china_ip_route 43.229.184.0/22 -add china_ip_route 43.229.188.0/22 -add china_ip_route 43.229.192.0/22 -add china_ip_route 43.229.196.0/22 -add china_ip_route 43.229.216.0/22 -add china_ip_route 43.229.220.0/22 -add china_ip_route 43.229.232.0/22 -add china_ip_route 43.229.236.0/22 -add china_ip_route 43.230.20.0/22 -add china_ip_route 43.230.32.0/22 -add china_ip_route 43.230.68.0/22 -add china_ip_route 43.230.72.0/22 -add china_ip_route 43.230.84.0/22 -add china_ip_route 43.230.124.0/22 -add china_ip_route 43.230.136.0/22 -add china_ip_route 43.230.220.0/22 -add china_ip_route 43.230.224.0/22 -add china_ip_route 43.230.228.0/22 -add china_ip_route 43.230.232.0/22 -add china_ip_route 43.230.236.0/22 -add china_ip_route 43.230.240.0/22 -add china_ip_route 43.230.244.0/22 -add china_ip_route 43.230.248.0/22 -add china_ip_route 43.230.252.0/22 -add china_ip_route 43.231.32.0/22 -add china_ip_route 43.231.36.0/22 -add china_ip_route 43.231.40.0/22 -add china_ip_route 43.231.44.0/22 -add china_ip_route 43.231.80.0/22 -add china_ip_route 43.231.84.0/22 -add china_ip_route 43.231.88.0/22 -add china_ip_route 43.231.92.0/22 -add china_ip_route 43.231.96.0/22 -add china_ip_route 43.231.100.0/22 -add china_ip_route 43.231.104.0/22 -add china_ip_route 43.231.108.0/22 -add china_ip_route 43.231.136.0/22 -add china_ip_route 43.231.140.0/22 -add china_ip_route 43.231.144.0/22 -add china_ip_route 43.231.148.0/22 -add china_ip_route 43.231.152.0/22 -add china_ip_route 43.231.156.0/22 -add china_ip_route 43.231.160.0/22 -add china_ip_route 43.231.164.0/22 -add china_ip_route 43.231.168.0/22 -add china_ip_route 43.231.172.0/22 -add china_ip_route 43.231.176.0/22 -add china_ip_route 43.231.180.0/22 -add china_ip_route 43.236.0.0/22 -add china_ip_route 43.236.4.0/22 -add china_ip_route 43.236.8.0/22 -add china_ip_route 43.236.12.0/22 -add china_ip_route 43.236.16.0/22 -add china_ip_route 43.236.20.0/22 -add china_ip_route 43.236.24.0/22 -add china_ip_route 43.236.28.0/22 -add china_ip_route 43.236.32.0/22 -add china_ip_route 43.236.36.0/22 -add china_ip_route 43.236.40.0/22 -add china_ip_route 43.236.44.0/22 -add china_ip_route 43.236.48.0/22 -add china_ip_route 43.236.52.0/22 -add china_ip_route 43.236.56.0/22 -add china_ip_route 43.236.60.0/22 -add china_ip_route 43.236.64.0/22 -add china_ip_route 43.236.68.0/22 -add china_ip_route 43.236.72.0/22 -add china_ip_route 43.236.76.0/22 -add china_ip_route 43.236.80.0/22 -add china_ip_route 43.236.84.0/22 -add china_ip_route 43.236.88.0/22 -add china_ip_route 43.236.92.0/22 -add china_ip_route 43.236.96.0/22 -add china_ip_route 43.236.100.0/22 -add china_ip_route 43.236.104.0/22 -add china_ip_route 43.236.108.0/22 -add china_ip_route 43.236.112.0/22 -add china_ip_route 43.236.116.0/22 -add china_ip_route 43.236.120.0/22 -add china_ip_route 43.236.124.0/22 -add china_ip_route 43.236.128.0/22 -add china_ip_route 43.236.132.0/22 -add china_ip_route 43.236.136.0/22 -add china_ip_route 43.236.140.0/22 -add china_ip_route 43.236.144.0/22 -add china_ip_route 43.236.148.0/22 -add china_ip_route 43.236.152.0/22 -add china_ip_route 43.236.156.0/22 -add china_ip_route 43.236.160.0/22 -add china_ip_route 43.236.164.0/22 -add china_ip_route 43.236.168.0/22 -add china_ip_route 43.236.172.0/22 -add china_ip_route 43.236.176.0/22 -add china_ip_route 43.236.180.0/22 -add china_ip_route 43.236.184.0/22 -add china_ip_route 43.236.188.0/22 -add china_ip_route 43.236.192.0/22 -add china_ip_route 43.236.196.0/22 -add china_ip_route 43.236.200.0/22 -add china_ip_route 43.236.204.0/22 -add china_ip_route 43.236.208.0/22 -add china_ip_route 43.236.212.0/22 -add china_ip_route 43.236.216.0/22 -add china_ip_route 43.236.220.0/22 -add china_ip_route 43.236.224.0/22 -add china_ip_route 43.236.228.0/22 -add china_ip_route 43.236.232.0/22 -add china_ip_route 43.236.236.0/22 -add china_ip_route 43.236.240.0/22 -add china_ip_route 43.236.244.0/22 -add china_ip_route 43.236.248.0/22 -add china_ip_route 43.236.252.0/22 -add china_ip_route 43.237.0.0/22 -add china_ip_route 43.237.4.0/22 -add china_ip_route 43.237.8.0/22 -add china_ip_route 43.237.12.0/22 -add china_ip_route 43.237.16.0/22 -add china_ip_route 43.237.20.0/22 -add china_ip_route 43.237.24.0/22 -add china_ip_route 43.237.28.0/22 -add china_ip_route 43.237.32.0/22 -add china_ip_route 43.237.36.0/22 -add china_ip_route 43.237.40.0/22 -add china_ip_route 43.237.44.0/22 -add china_ip_route 43.237.48.0/22 -add china_ip_route 43.237.52.0/22 -add china_ip_route 43.237.56.0/22 -add china_ip_route 43.237.60.0/22 -add china_ip_route 43.237.64.0/22 -add china_ip_route 43.237.68.0/22 -add china_ip_route 43.237.72.0/22 -add china_ip_route 43.237.76.0/22 -add china_ip_route 43.237.80.0/22 -add china_ip_route 43.237.84.0/22 -add china_ip_route 43.237.88.0/22 -add china_ip_route 43.237.92.0/22 -add china_ip_route 43.237.96.0/22 -add china_ip_route 43.237.100.0/22 -add china_ip_route 43.237.104.0/22 -add china_ip_route 43.237.108.0/22 -add china_ip_route 43.237.112.0/22 -add china_ip_route 43.237.116.0/22 -add china_ip_route 43.237.120.0/22 -add china_ip_route 43.237.124.0/22 -add china_ip_route 43.237.128.0/22 -add china_ip_route 43.237.132.0/22 -add china_ip_route 43.237.136.0/22 -add china_ip_route 43.237.140.0/22 -add china_ip_route 43.237.144.0/22 -add china_ip_route 43.237.148.0/22 -add china_ip_route 43.237.152.0/22 -add china_ip_route 43.237.156.0/22 -add china_ip_route 43.237.160.0/22 -add china_ip_route 43.237.164.0/22 -add china_ip_route 43.237.168.0/22 -add china_ip_route 43.237.172.0/22 -add china_ip_route 43.237.176.0/22 -add china_ip_route 43.237.180.0/22 -add china_ip_route 43.237.184.0/22 -add china_ip_route 43.237.188.0/22 -add china_ip_route 43.237.192.0/22 -add china_ip_route 43.237.200.0/22 -add china_ip_route 43.237.204.0/22 -add china_ip_route 43.237.208.0/22 -add china_ip_route 43.237.212.0/22 -add china_ip_route 43.237.216.0/22 -add china_ip_route 43.237.220.0/22 -add china_ip_route 43.237.224.0/22 -add china_ip_route 43.237.228.0/22 -add china_ip_route 43.237.232.0/22 -add china_ip_route 43.237.236.0/22 -add china_ip_route 43.237.240.0/22 -add china_ip_route 43.237.244.0/22 -add china_ip_route 43.237.248.0/22 -add china_ip_route 43.237.252.0/22 -add china_ip_route 43.238.0.0/22 -add china_ip_route 43.238.4.0/22 -add china_ip_route 43.238.8.0/22 -add china_ip_route 43.238.12.0/22 -add china_ip_route 43.238.16.0/22 -add china_ip_route 43.238.20.0/22 -add china_ip_route 43.238.24.0/22 -add china_ip_route 43.238.28.0/22 -add china_ip_route 43.238.32.0/22 -add china_ip_route 43.238.36.0/22 -add china_ip_route 43.238.40.0/22 -add china_ip_route 43.238.44.0/22 -add china_ip_route 43.238.48.0/22 -add china_ip_route 43.238.52.0/22 -add china_ip_route 43.238.56.0/22 -add china_ip_route 43.238.60.0/22 -add china_ip_route 43.238.64.0/22 -add china_ip_route 43.238.68.0/22 -add china_ip_route 43.238.72.0/22 -add china_ip_route 43.238.76.0/22 -add china_ip_route 43.238.80.0/22 -add china_ip_route 43.238.84.0/22 -add china_ip_route 43.238.88.0/22 -add china_ip_route 43.238.92.0/22 -add china_ip_route 43.238.96.0/22 -add china_ip_route 43.238.100.0/22 -add china_ip_route 43.238.104.0/22 -add china_ip_route 43.238.108.0/22 -add china_ip_route 43.238.112.0/22 -add china_ip_route 43.238.116.0/22 -add china_ip_route 43.238.120.0/22 -add china_ip_route 43.238.124.0/22 -add china_ip_route 43.238.128.0/22 -add china_ip_route 43.238.132.0/22 -add china_ip_route 43.238.136.0/22 -add china_ip_route 43.238.140.0/22 -add china_ip_route 43.238.144.0/22 -add china_ip_route 43.238.148.0/22 -add china_ip_route 43.238.152.0/22 -add china_ip_route 43.238.156.0/22 -add china_ip_route 43.238.160.0/22 -add china_ip_route 43.238.164.0/22 -add china_ip_route 43.238.168.0/22 -add china_ip_route 43.238.172.0/22 -add china_ip_route 43.238.176.0/22 -add china_ip_route 43.238.180.0/22 -add china_ip_route 43.238.184.0/22 -add china_ip_route 43.238.188.0/22 -add china_ip_route 43.238.192.0/22 -add china_ip_route 43.238.196.0/22 -add china_ip_route 43.238.200.0/22 -add china_ip_route 43.238.204.0/22 -add china_ip_route 43.238.208.0/22 -add china_ip_route 43.238.212.0/22 -add china_ip_route 43.238.216.0/22 -add china_ip_route 43.238.220.0/22 -add china_ip_route 43.238.224.0/22 -add china_ip_route 43.238.228.0/22 -add china_ip_route 43.238.232.0/22 -add china_ip_route 43.238.236.0/22 -add china_ip_route 43.238.240.0/22 -add china_ip_route 43.238.244.0/22 -add china_ip_route 43.238.248.0/22 -add china_ip_route 43.238.252.0/22 -add china_ip_route 43.239.0.0/22 -add china_ip_route 43.239.4.0/22 -add china_ip_route 43.239.8.0/21 -add china_ip_route 43.239.16.0/22 -add china_ip_route 43.239.20.0/22 -add china_ip_route 43.239.24.0/22 -add china_ip_route 43.239.28.0/22 -add china_ip_route 43.239.32.0/22 -add china_ip_route 43.239.36.0/22 -add china_ip_route 43.239.40.0/22 -add china_ip_route 43.239.44.0/22 -add china_ip_route 43.239.48.0/22 -add china_ip_route 43.239.116.0/22 -add china_ip_route 43.239.120.0/22 -add china_ip_route 43.239.172.0/22 -add china_ip_route 43.239.176.0/22 -add china_ip_route 43.240.0.0/22 -add china_ip_route 43.240.56.0/22 -add china_ip_route 43.240.60.0/22 -add china_ip_route 43.240.68.0/22 -add china_ip_route 43.240.72.0/22 -add china_ip_route 43.240.76.0/22 -add china_ip_route 43.240.84.0/22 -add china_ip_route 43.240.124.0/22 -add china_ip_route 43.240.128.0/22 -add china_ip_route 43.240.132.0/22 -add china_ip_route 43.240.136.0/22 -add china_ip_route 43.240.144.0/22 -add china_ip_route 43.240.156.0/22 -add china_ip_route 43.240.160.0/22 -add china_ip_route 43.240.164.0/22 -add china_ip_route 43.240.168.0/22 -add china_ip_route 43.240.172.0/22 -add china_ip_route 43.240.176.0/22 -add china_ip_route 43.240.180.0/22 -add china_ip_route 43.240.184.0/22 -add china_ip_route 43.240.188.0/22 -add china_ip_route 43.240.192.0/22 -add china_ip_route 43.240.196.0/22 -add china_ip_route 43.240.200.0/22 -add china_ip_route 43.240.204.0/22 -add china_ip_route 43.240.208.0/22 -add china_ip_route 43.240.212.0/22 -add china_ip_route 43.240.216.0/22 -add china_ip_route 43.240.220.0/22 -add china_ip_route 43.240.240.0/22 -add china_ip_route 43.240.244.0/22 -add china_ip_route 43.240.248.0/22 -add china_ip_route 43.240.252.0/22 -add china_ip_route 43.241.0.0/22 -add china_ip_route 43.241.4.0/22 -add china_ip_route 43.241.8.0/22 -add china_ip_route 43.241.12.0/22 -add china_ip_route 43.241.16.0/22 -add china_ip_route 43.241.20.0/22 -add china_ip_route 43.241.48.0/22 -add china_ip_route 43.241.76.0/22 -add china_ip_route 43.241.80.0/22 -add china_ip_route 43.241.84.0/22 -add china_ip_route 43.241.88.0/22 -add china_ip_route 43.241.92.0/22 -add china_ip_route 43.241.112.0/22 -add china_ip_route 43.241.168.0/22 -add china_ip_route 43.241.172.0/22 -add china_ip_route 43.241.176.0/22 -add china_ip_route 43.241.180.0/22 -add china_ip_route 43.241.184.0/22 -add china_ip_route 43.241.208.0/22 -add china_ip_route 43.241.212.0/22 -add china_ip_route 43.241.216.0/22 -add china_ip_route 43.241.220.0/22 -add china_ip_route 43.241.224.0/22 -add china_ip_route 43.241.228.0/22 -add china_ip_route 43.241.232.0/22 -add china_ip_route 43.241.236.0/22 -add china_ip_route 43.241.240.0/22 -add china_ip_route 43.241.248.0/22 -add china_ip_route 43.241.252.0/22 -add china_ip_route 43.242.8.0/22 -add china_ip_route 43.242.12.0/22 -add china_ip_route 43.242.16.0/22 -add china_ip_route 43.242.20.0/22 -add china_ip_route 43.242.24.0/22 -add china_ip_route 43.242.28.0/22 -add china_ip_route 43.242.44.0/22 -add china_ip_route 43.242.48.0/22 -add china_ip_route 43.242.52.0/22 -add china_ip_route 43.242.56.0/22 -add china_ip_route 43.242.60.0/22 -add china_ip_route 43.242.64.0/22 -add china_ip_route 43.242.72.0/22 -add china_ip_route 43.242.76.0/22 -add china_ip_route 43.242.80.0/22 -add china_ip_route 43.242.84.0/22 -add china_ip_route 43.242.88.0/22 -add china_ip_route 43.242.92.0/22 -add china_ip_route 43.242.96.0/22 -add china_ip_route 43.242.144.0/22 -add china_ip_route 43.242.148.0/22 -add china_ip_route 43.242.152.0/22 -add china_ip_route 43.242.156.0/22 -add china_ip_route 43.242.160.0/22 -add china_ip_route 43.242.164.0/22 -add china_ip_route 43.242.168.0/22 -add china_ip_route 43.242.180.0/22 -add china_ip_route 43.242.188.0/22 -add china_ip_route 43.242.192.0/22 -add china_ip_route 43.242.196.0/22 -add china_ip_route 43.242.204.0/22 -add china_ip_route 43.242.216.0/22 -add china_ip_route 43.242.220.0/22 -add china_ip_route 43.242.252.0/22 -add china_ip_route 43.243.4.0/22 -add china_ip_route 43.243.8.0/22 -add china_ip_route 43.243.12.0/22 -add china_ip_route 43.243.16.0/22 -add china_ip_route 43.243.24.0/22 -add china_ip_route 43.243.88.0/22 -add china_ip_route 43.243.128.0/22 -add china_ip_route 43.243.136.0/22 -add china_ip_route 43.243.144.0/22 -add china_ip_route 43.243.148.0/22 -add china_ip_route 43.243.156.0/22 -add china_ip_route 43.243.180.0/22 -add china_ip_route 43.243.228.0/22 -add china_ip_route 43.243.232.0/22 -add china_ip_route 43.243.244.0/22 -add china_ip_route 43.246.0.0/22 -add china_ip_route 43.246.4.0/22 -add china_ip_route 43.246.8.0/22 -add china_ip_route 43.246.12.0/22 -add china_ip_route 43.246.16.0/22 -add china_ip_route 43.246.20.0/22 -add china_ip_route 43.246.24.0/22 -add china_ip_route 43.246.28.0/22 -add china_ip_route 43.246.32.0/22 -add china_ip_route 43.246.36.0/22 -add china_ip_route 43.246.40.0/22 -add china_ip_route 43.246.44.0/22 -add china_ip_route 43.246.48.0/22 -add china_ip_route 43.246.52.0/22 -add china_ip_route 43.246.56.0/22 -add china_ip_route 43.246.60.0/22 -add china_ip_route 43.246.64.0/22 -add china_ip_route 43.246.68.0/22 -add china_ip_route 43.246.72.0/22 -add china_ip_route 43.246.76.0/22 -add china_ip_route 43.246.80.0/22 -add china_ip_route 43.246.84.0/22 -add china_ip_route 43.246.88.0/22 -add china_ip_route 43.246.92.0/22 -add china_ip_route 43.246.96.0/22 -add china_ip_route 43.246.112.0/22 -add china_ip_route 43.246.212.0/22 -add china_ip_route 43.246.228.0/22 -add china_ip_route 43.247.4.0/22 -add china_ip_route 43.247.8.0/22 -add china_ip_route 43.247.44.0/22 -add china_ip_route 43.247.48.0/22 -add china_ip_route 43.247.68.0/22 -add china_ip_route 43.247.76.0/22 -add china_ip_route 43.247.84.0/22 -add china_ip_route 43.247.88.0/22 -add china_ip_route 43.247.92.0/22 -add china_ip_route 43.247.96.0/22 -add china_ip_route 43.247.100.0/22 -add china_ip_route 43.247.108.0/22 -add china_ip_route 43.247.112.0/22 -add china_ip_route 43.247.148.0/22 -add china_ip_route 43.247.152.0/22 -add china_ip_route 43.247.176.0/22 -add china_ip_route 43.247.180.0/22 -add china_ip_route 43.247.184.0/22 -add china_ip_route 43.247.188.0/22 -add china_ip_route 43.247.196.0/22 -add china_ip_route 43.247.200.0/22 -add china_ip_route 43.247.204.0/22 -add china_ip_route 43.247.208.0/22 -add china_ip_route 43.247.212.0/22 -add china_ip_route 43.247.216.0/22 -add china_ip_route 43.247.220.0/22 -add china_ip_route 43.247.224.0/22 -add china_ip_route 43.247.228.0/22 -add china_ip_route 43.247.232.0/22 -add china_ip_route 43.247.236.0/22 -add china_ip_route 43.247.240.0/22 -add china_ip_route 43.247.244.0/22 -add china_ip_route 43.247.248.0/22 -add china_ip_route 43.247.252.0/22 -add china_ip_route 43.248.0.0/22 -add china_ip_route 43.248.4.0/22 -add china_ip_route 43.248.20.0/22 -add china_ip_route 43.248.28.0/22 -add china_ip_route 43.248.48.0/22 -add china_ip_route 43.248.76.0/22 -add china_ip_route 43.248.80.0/22 -add china_ip_route 43.248.84.0/22 -add china_ip_route 43.248.88.0/22 -add china_ip_route 43.248.92.0/22 -add china_ip_route 43.248.96.0/22 -add china_ip_route 43.248.100.0/22 -add china_ip_route 43.248.104.0/22 -add china_ip_route 43.248.108.0/22 -add china_ip_route 43.248.112.0/22 -add china_ip_route 43.248.116.0/22 -add china_ip_route 43.248.120.0/22 -add china_ip_route 43.248.124.0/22 -add china_ip_route 43.248.128.0/22 -add china_ip_route 43.248.132.0/22 -add china_ip_route 43.248.136.0/22 -add china_ip_route 43.248.140.0/22 -add china_ip_route 43.248.144.0/22 -add china_ip_route 43.248.148.0/22 -add china_ip_route 43.248.176.0/22 -add china_ip_route 43.248.180.0/22 -add china_ip_route 43.248.184.0/22 -add china_ip_route 43.248.188.0/22 -add china_ip_route 43.248.192.0/22 -add china_ip_route 43.248.196.0/22 -add china_ip_route 43.248.200.0/22 -add china_ip_route 43.248.204.0/22 -add china_ip_route 43.248.208.0/22 -add china_ip_route 43.248.228.0/22 -add china_ip_route 43.248.232.0/22 -add china_ip_route 43.248.244.0/22 -add china_ip_route 43.249.4.0/22 -add china_ip_route 43.249.8.0/22 -add china_ip_route 43.249.120.0/22 -add china_ip_route 43.249.132.0/22 -add china_ip_route 43.249.136.0/22 -add china_ip_route 43.249.144.0/22 -add china_ip_route 43.249.148.0/22 -add china_ip_route 43.249.152.0/22 -add china_ip_route 43.249.156.0/22 -add china_ip_route 43.249.160.0/22 -add china_ip_route 43.249.164.0/22 -add china_ip_route 43.249.168.0/22 -add china_ip_route 43.249.192.0/22 -add china_ip_route 43.249.236.0/22 -add china_ip_route 43.250.4.0/22 -add china_ip_route 43.250.12.0/22 -add china_ip_route 43.250.16.0/22 -add china_ip_route 43.250.20.0/22 -add china_ip_route 43.250.28.0/22 -add china_ip_route 43.250.32.0/22 -add china_ip_route 43.250.36.0/22 -add china_ip_route 43.250.72.0/22 -add china_ip_route 43.250.96.0/22 -add china_ip_route 43.250.100.0/22 -add china_ip_route 43.250.104.0/22 -add china_ip_route 43.250.108.0/22 -add china_ip_route 43.250.112.0/22 -add china_ip_route 43.250.116.0/22 -add china_ip_route 43.250.128.0/22 -add china_ip_route 43.250.144.0/22 -add china_ip_route 43.250.148.0/22 -add china_ip_route 43.250.160.0/22 -add china_ip_route 43.250.168.0/22 -add china_ip_route 43.250.172.0/22 -add china_ip_route 43.250.176.0/22 -add china_ip_route 43.250.200.0/22 -add china_ip_route 43.250.212.0/22 -add china_ip_route 43.250.216.0/22 -add china_ip_route 43.250.220.0/22 -add china_ip_route 43.250.236.0/22 -add china_ip_route 43.250.244.0/22 -add china_ip_route 43.251.4.0/22 -add china_ip_route 43.251.8.0/22 -add china_ip_route 43.251.36.0/22 -add china_ip_route 43.251.100.0/22 -add china_ip_route 43.251.116.0/22 -add china_ip_route 43.251.192.0/22 -add china_ip_route 43.251.232.0/22 -add china_ip_route 43.251.236.0/22 -add china_ip_route 43.251.244.0/22 -add china_ip_route 43.252.48.0/22 -add china_ip_route 43.252.56.0/22 -add china_ip_route 43.252.224.0/22 -add china_ip_route 43.254.0.0/22 -add china_ip_route 43.254.4.0/22 -add china_ip_route 43.254.8.0/22 -add china_ip_route 43.254.24.0/22 -add china_ip_route 43.254.36.0/22 -add china_ip_route 43.254.44.0/22 -add china_ip_route 43.254.52.0/22 -add china_ip_route 43.254.64.0/22 -add china_ip_route 43.254.72.0/22 -add china_ip_route 43.254.84.0/22 -add china_ip_route 43.254.88.0/22 -add china_ip_route 43.254.92.0/22 -add china_ip_route 43.254.100.0/22 -add china_ip_route 43.254.104.0/22 -add china_ip_route 43.254.112.0/22 -add china_ip_route 43.254.116.0/22 -add china_ip_route 43.254.128.0/22 -add china_ip_route 43.254.136.0/22 -add china_ip_route 43.254.140.0/22 -add china_ip_route 43.254.144.0/22 -add china_ip_route 43.254.148.0/22 -add china_ip_route 43.254.152.0/22 -add china_ip_route 43.254.156.0/22 -add china_ip_route 43.254.168.0/22 -add china_ip_route 43.254.172.0/22 -add china_ip_route 43.254.180.0/22 -add china_ip_route 43.254.184.0/22 -add china_ip_route 43.254.188.0/22 -add china_ip_route 43.254.192.0/22 -add china_ip_route 43.254.196.0/22 -add china_ip_route 43.254.200.0/22 -add china_ip_route 43.254.208.0/22 -add china_ip_route 43.254.220.0/22 -add china_ip_route 43.254.224.0/22 -add china_ip_route 43.254.228.0/22 -add china_ip_route 43.254.232.0/22 -add china_ip_route 43.254.236.0/22 -add china_ip_route 43.254.240.0/22 -add china_ip_route 43.254.248.0/22 -add china_ip_route 43.254.252.0/22 -add china_ip_route 43.255.0.0/22 -add china_ip_route 43.255.4.0/22 -add china_ip_route 43.255.8.0/22 -add china_ip_route 43.255.16.0/22 -add china_ip_route 43.255.48.0/22 -add china_ip_route 43.255.64.0/22 -add china_ip_route 43.255.68.0/22 -add china_ip_route 43.255.72.0/22 -add china_ip_route 43.255.76.0/22 -add china_ip_route 43.255.84.0/22 -add china_ip_route 43.255.96.0/22 -add china_ip_route 43.255.108.0/22 -add china_ip_route 43.255.144.0/22 -add china_ip_route 43.255.168.0/22 -add china_ip_route 43.255.176.0/22 -add china_ip_route 43.255.184.0/22 -add china_ip_route 43.255.192.0/22 -add china_ip_route 43.255.200.0/22 -add china_ip_route 43.255.204.0/22 -add china_ip_route 43.255.208.0/22 -add china_ip_route 43.255.212.0/22 -add china_ip_route 43.255.224.0/22 -add china_ip_route 43.255.228.0/22 -add china_ip_route 43.255.232.0/22 -add china_ip_route 43.255.244.0/22 -add china_ip_route 45.40.192.0/18 -add china_ip_route 45.65.16.0/22 -add china_ip_route 45.65.20.0/22 -add china_ip_route 45.65.24.0/22 -add china_ip_route 45.65.28.0/22 -add china_ip_route 45.112.132.0/22 -add china_ip_route 45.112.188.0/22 -add china_ip_route 45.112.208.0/22 -add china_ip_route 45.112.212.0/22 -add china_ip_route 45.112.216.0/22 -add china_ip_route 45.112.220.0/22 -add china_ip_route 45.112.228.0/22 -add china_ip_route 45.112.232.0/22 -add china_ip_route 45.112.236.0/22 -add china_ip_route 45.113.12.0/22 -add china_ip_route 45.113.16.0/22 -add china_ip_route 45.113.20.0/22 -add china_ip_route 45.113.24.0/22 -add china_ip_route 45.113.28.0/22 -add china_ip_route 45.113.40.0/22 -add china_ip_route 45.113.52.0/22 -add china_ip_route 45.113.56.0/22 -add china_ip_route 45.113.72.0/22 -add china_ip_route 45.113.144.0/22 -add china_ip_route 45.113.148.0/22 -add china_ip_route 45.113.168.0/22 -add china_ip_route 45.113.176.0/22 -add china_ip_route 45.113.184.0/22 -add china_ip_route 45.113.200.0/22 -add china_ip_route 45.113.204.0/22 -add china_ip_route 45.113.208.0/22 -add china_ip_route 45.113.212.0/22 -add china_ip_route 45.113.216.0/22 -add china_ip_route 45.113.220.0/22 -add china_ip_route 45.113.240.0/22 -add china_ip_route 45.113.252.0/22 -add china_ip_route 45.114.0.0/22 -add china_ip_route 45.114.12.0/22 -add china_ip_route 45.114.32.0/22 -add china_ip_route 45.114.40.0/22 -add china_ip_route 45.114.52.0/22 -add china_ip_route 45.114.96.0/22 -add china_ip_route 45.114.124.0/22 -add china_ip_route 45.114.136.0/22 -add china_ip_route 45.114.196.0/22 -add china_ip_route 45.114.200.0/22 -add china_ip_route 45.114.228.0/22 -add china_ip_route 45.114.252.0/22 -add china_ip_route 45.115.44.0/22 -add china_ip_route 45.115.100.0/22 -add china_ip_route 45.115.120.0/22 -add china_ip_route 45.115.132.0/22 -add china_ip_route 45.115.144.0/22 -add china_ip_route 45.115.156.0/22 -add china_ip_route 45.115.164.0/22 -add china_ip_route 45.115.200.0/22 -add china_ip_route 45.115.212.0/22 -add china_ip_route 45.115.228.0/22 -add china_ip_route 45.115.236.0/22 -add china_ip_route 45.115.244.0/22 -add china_ip_route 45.115.248.0/22 -add china_ip_route 45.116.16.0/22 -add china_ip_route 45.116.24.0/22 -add china_ip_route 45.116.32.0/22 -add china_ip_route 45.116.36.0/22 -add china_ip_route 45.116.52.0/22 -add china_ip_route 45.116.96.0/22 -add china_ip_route 45.116.100.0/22 -add china_ip_route 45.116.140.0/22 -add china_ip_route 45.116.152.0/22 -add china_ip_route 45.116.208.0/22 -add china_ip_route 45.117.8.0/22 -add china_ip_route 45.117.20.0/22 -add china_ip_route 45.117.68.0/22 -add china_ip_route 45.117.124.0/22 -add china_ip_route 45.117.252.0/22 -add china_ip_route 45.119.52.0/22 -add china_ip_route 45.119.60.0/22 -add china_ip_route 45.119.64.0/22 -add china_ip_route 45.119.68.0/22 -add china_ip_route 45.119.72.0/22 -add china_ip_route 45.119.104.0/22 -add china_ip_route 45.119.116.0/22 -add china_ip_route 45.119.232.0/22 -add china_ip_route 45.120.100.0/22 -add china_ip_route 45.120.140.0/22 -add china_ip_route 45.120.164.0/22 -add china_ip_route 45.120.240.0/22 -add china_ip_route 45.121.52.0/22 -add china_ip_route 45.121.64.0/22 -add china_ip_route 45.121.68.0/22 -add china_ip_route 45.121.72.0/22 -add china_ip_route 45.121.92.0/22 -add china_ip_route 45.121.96.0/22 -add china_ip_route 45.121.172.0/22 -add china_ip_route 45.121.176.0/22 -add china_ip_route 45.121.212.0/22 -add china_ip_route 45.121.240.0/22 -add china_ip_route 45.121.244.0/22 -add china_ip_route 45.121.248.0/22 -add china_ip_route 45.121.252.0/22 -add china_ip_route 45.122.0.0/22 -add china_ip_route 45.122.4.0/22 -add china_ip_route 45.122.8.0/22 -add china_ip_route 45.122.12.0/22 -add china_ip_route 45.122.16.0/22 -add china_ip_route 45.122.20.0/22 -add china_ip_route 45.122.24.0/22 -add china_ip_route 45.122.28.0/22 -add china_ip_route 45.122.32.0/22 -add china_ip_route 45.122.36.0/22 -add china_ip_route 45.122.40.0/22 -add china_ip_route 45.122.60.0/22 -add china_ip_route 45.122.64.0/22 -add china_ip_route 45.122.68.0/22 -add china_ip_route 45.122.72.0/22 -add china_ip_route 45.122.76.0/22 -add china_ip_route 45.122.80.0/22 -add china_ip_route 45.122.84.0/22 -add china_ip_route 45.122.88.0/22 -add china_ip_route 45.122.92.0/22 -add china_ip_route 45.122.96.0/21 -add china_ip_route 45.122.104.0/22 -add china_ip_route 45.122.108.0/22 -add china_ip_route 45.122.112.0/22 -add china_ip_route 45.122.116.0/22 -add china_ip_route 45.122.160.0/22 -add china_ip_route 45.122.164.0/22 -add china_ip_route 45.122.168.0/22 -add china_ip_route 45.122.172.0/22 -add china_ip_route 45.122.176.0/22 -add china_ip_route 45.122.180.0/22 -add china_ip_route 45.122.184.0/22 -add china_ip_route 45.122.188.0/22 -add china_ip_route 45.122.192.0/22 -add china_ip_route 45.122.196.0/22 -add china_ip_route 45.122.200.0/22 -add china_ip_route 45.122.204.0/22 -add china_ip_route 45.122.208.0/22 -add china_ip_route 45.122.212.0/22 -add china_ip_route 45.122.216.0/22 -add china_ip_route 45.123.28.0/22 -add china_ip_route 45.123.32.0/22 -add china_ip_route 45.123.36.0/22 -add china_ip_route 45.123.44.0/22 -add china_ip_route 45.123.48.0/22 -add china_ip_route 45.123.52.0/22 -add china_ip_route 45.123.56.0/22 -add china_ip_route 45.123.60.0/22 -add china_ip_route 45.123.64.0/22 -add china_ip_route 45.123.68.0/22 -add china_ip_route 45.123.72.0/22 -add china_ip_route 45.123.76.0/22 -add china_ip_route 45.123.80.0/22 -add china_ip_route 45.123.84.0/22 -add china_ip_route 45.123.88.0/22 -add china_ip_route 45.123.120.0/22 -add china_ip_route 45.123.128.0/22 -add china_ip_route 45.123.132.0/22 -add china_ip_route 45.123.136.0/22 -add china_ip_route 45.123.148.0/22 -add china_ip_route 45.123.152.0/22 -add china_ip_route 45.123.156.0/22 -add china_ip_route 45.123.164.0/22 -add china_ip_route 45.123.168.0/22 -add china_ip_route 45.123.172.0/22 -add china_ip_route 45.123.176.0/22 -add china_ip_route 45.123.180.0/22 -add china_ip_route 45.123.184.0/22 -add china_ip_route 45.123.204.0/22 -add china_ip_route 45.123.212.0/22 -add china_ip_route 45.123.224.0/22 -add china_ip_route 45.123.228.0/22 -add china_ip_route 45.123.232.0/22 -add china_ip_route 45.123.236.0/22 -add china_ip_route 45.123.240.0/22 -add china_ip_route 45.123.244.0/22 -add china_ip_route 45.123.248.0/22 -add china_ip_route 45.123.252.0/22 -add china_ip_route 45.124.0.0/22 -add china_ip_route 45.124.20.0/22 -add china_ip_route 45.124.28.0/22 -add china_ip_route 45.124.32.0/22 -add china_ip_route 45.124.36.0/22 -add china_ip_route 45.124.44.0/22 -add china_ip_route 45.124.68.0/22 -add china_ip_route 45.124.76.0/22 -add china_ip_route 45.124.80.0/22 -add china_ip_route 45.124.100.0/22 -add china_ip_route 45.124.124.0/22 -add china_ip_route 45.124.172.0/22 -add china_ip_route 45.124.176.0/22 -add china_ip_route 45.124.208.0/22 -add china_ip_route 45.124.248.0/22 -add china_ip_route 45.125.12.0/22 -add china_ip_route 45.125.16.0/22 -add china_ip_route 45.125.24.0/22 -add china_ip_route 45.125.44.0/22 -add china_ip_route 45.125.52.0/22 -add china_ip_route 45.125.56.0/22 -add china_ip_route 45.125.76.0/22 -add china_ip_route 45.125.80.0/22 -add china_ip_route 45.125.84.0/22 -add china_ip_route 45.125.88.0/22 -add china_ip_route 45.125.92.0/22 -add china_ip_route 45.125.96.0/22 -add china_ip_route 45.125.100.0/22 -add china_ip_route 45.125.104.0/22 -add china_ip_route 45.125.136.0/22 -add china_ip_route 45.126.48.0/22 -add china_ip_route 45.126.52.0/22 -add china_ip_route 45.126.100.0/22 -add china_ip_route 45.126.108.0/22 -add china_ip_route 45.126.112.0/22 -add china_ip_route 45.126.116.0/22 -add china_ip_route 45.126.120.0/22 -add china_ip_route 45.126.212.0/22 -add china_ip_route 45.126.220.0/22 -add china_ip_route 45.127.8.0/22 -add china_ip_route 45.127.12.0/22 -add china_ip_route 45.127.96.0/22 -add china_ip_route 45.127.128.0/22 -add china_ip_route 45.127.144.0/22 -add china_ip_route 45.127.148.0/22 -add china_ip_route 45.127.156.0/22 -add china_ip_route 45.127.216.0/22 -add china_ip_route 45.248.8.0/22 -add china_ip_route 45.248.80.0/22 -add china_ip_route 45.248.84.0/22 -add china_ip_route 45.248.88.0/22 -add china_ip_route 45.248.96.0/22 -add china_ip_route 45.248.100.0/22 -add china_ip_route 45.248.104.0/22 -add china_ip_route 45.248.108.0/22 -add china_ip_route 45.248.128.0/22 -add china_ip_route 45.248.132.0/22 -add china_ip_route 45.248.204.0/22 -add china_ip_route 45.248.208.0/22 -add china_ip_route 45.248.212.0/22 -add china_ip_route 45.248.216.0/22 -add china_ip_route 45.248.220.0/22 -add china_ip_route 45.248.224.0/22 -add china_ip_route 45.248.228.0/22 -add china_ip_route 45.248.232.0/22 -add china_ip_route 45.248.236.0/22 -add china_ip_route 45.248.240.0/22 -add china_ip_route 45.248.244.0/22 -add china_ip_route 45.248.248.0/22 -add china_ip_route 45.248.252.0/22 -add china_ip_route 45.249.0.0/22 -add china_ip_route 45.249.4.0/22 -add china_ip_route 45.249.12.0/22 -add china_ip_route 45.249.16.0/22 -add china_ip_route 45.249.20.0/22 -add china_ip_route 45.249.24.0/22 -add china_ip_route 45.249.28.0/22 -add china_ip_route 45.249.32.0/22 -add china_ip_route 45.249.36.0/22 -add china_ip_route 45.249.112.0/22 -add china_ip_route 45.249.188.0/22 -add china_ip_route 45.249.192.0/22 -add china_ip_route 45.249.196.0/22 -add china_ip_route 45.249.200.0/22 -add china_ip_route 45.249.204.0/22 -add china_ip_route 45.249.208.0/22 -add china_ip_route 45.249.212.0/22 -add china_ip_route 45.250.12.0/22 -add china_ip_route 45.250.16.0/22 -add china_ip_route 45.250.28.0/22 -add china_ip_route 45.250.32.0/22 -add china_ip_route 45.250.36.0/22 -add china_ip_route 45.250.40.0/22 -add china_ip_route 45.250.76.0/22 -add china_ip_route 45.250.80.0/22 -add china_ip_route 45.250.84.0/22 -add china_ip_route 45.250.88.0/22 -add china_ip_route 45.250.92.0/22 -add china_ip_route 45.250.96.0/22 -add china_ip_route 45.250.104.0/22 -add china_ip_route 45.250.108.0/22 -add china_ip_route 45.250.112.0/22 -add china_ip_route 45.250.116.0/22 -add china_ip_route 45.250.120.0/22 -add china_ip_route 45.250.124.0/22 -add china_ip_route 45.250.128.0/22 -add china_ip_route 45.250.132.0/22 -add china_ip_route 45.250.136.0/22 -add china_ip_route 45.250.140.0/22 -add china_ip_route 45.250.144.0/22 -add china_ip_route 45.250.148.0/22 -add china_ip_route 45.250.152.0/22 -add china_ip_route 45.250.164.0/22 -add china_ip_route 45.250.180.0/22 -add china_ip_route 45.250.184.0/22 -add china_ip_route 45.250.188.0/22 -add china_ip_route 45.250.192.0/22 -add china_ip_route 45.251.0.0/22 -add china_ip_route 45.251.8.0/22 -add china_ip_route 45.251.16.0/22 -add china_ip_route 45.251.20.0/22 -add china_ip_route 45.251.52.0/22 -add china_ip_route 45.251.84.0/22 -add china_ip_route 45.251.88.0/22 -add china_ip_route 45.251.92.0/22 -add china_ip_route 45.251.96.0/22 -add china_ip_route 45.251.100.0/22 -add china_ip_route 45.251.120.0/22 -add china_ip_route 45.251.124.0/22 -add china_ip_route 45.251.136.0/22 -add china_ip_route 45.251.140.0/22 -add china_ip_route 45.251.144.0/22 -add china_ip_route 45.251.148.0/22 -add china_ip_route 45.251.152.0/22 -add china_ip_route 45.251.156.0/22 -add china_ip_route 45.251.160.0/22 -add china_ip_route 45.251.164.0/22 -add china_ip_route 45.251.168.0/22 -add china_ip_route 45.251.172.0/22 -add china_ip_route 45.251.176.0/22 -add china_ip_route 45.251.180.0/22 -add china_ip_route 45.251.184.0/22 -add china_ip_route 45.251.188.0/22 -add china_ip_route 45.251.192.0/22 -add china_ip_route 45.251.196.0/22 -add china_ip_route 45.251.200.0/22 -add china_ip_route 45.251.204.0/22 -add china_ip_route 45.251.208.0/22 -add china_ip_route 45.251.212.0/22 -add china_ip_route 45.251.216.0/22 -add china_ip_route 45.251.220.0/22 -add china_ip_route 45.251.224.0/22 -add china_ip_route 45.251.240.0/22 -add china_ip_route 45.252.0.0/22 -add china_ip_route 45.252.4.0/22 -add china_ip_route 45.252.8.0/22 -add china_ip_route 45.252.12.0/22 -add china_ip_route 45.252.16.0/22 -add china_ip_route 45.252.20.0/22 -add china_ip_route 45.252.24.0/22 -add china_ip_route 45.252.28.0/22 -add china_ip_route 45.252.32.0/22 -add china_ip_route 45.252.36.0/22 -add china_ip_route 45.252.40.0/22 -add china_ip_route 45.252.44.0/22 -add china_ip_route 45.252.48.0/22 -add china_ip_route 45.252.60.0/22 -add china_ip_route 45.252.84.0/22 -add china_ip_route 45.252.88.0/22 -add china_ip_route 45.252.92.0/22 -add china_ip_route 45.252.96.0/22 -add china_ip_route 45.252.100.0/22 -add china_ip_route 45.252.104.0/22 -add china_ip_route 45.252.108.0/22 -add china_ip_route 45.252.112.0/22 -add china_ip_route 45.252.116.0/22 -add china_ip_route 45.252.120.0/22 -add china_ip_route 45.252.124.0/22 -add china_ip_route 45.252.128.0/22 -add china_ip_route 45.252.132.0/22 -add china_ip_route 45.252.136.0/22 -add china_ip_route 45.252.140.0/22 -add china_ip_route 45.252.144.0/22 -add china_ip_route 45.252.148.0/22 -add china_ip_route 45.252.152.0/22 -add china_ip_route 45.252.156.0/22 -add china_ip_route 45.252.160.0/22 -add china_ip_route 45.252.164.0/22 -add china_ip_route 45.252.168.0/22 -add china_ip_route 45.252.172.0/22 -add china_ip_route 45.252.176.0/22 -add china_ip_route 45.252.192.0/22 -add china_ip_route 45.252.196.0/22 -add china_ip_route 45.252.200.0/22 -add china_ip_route 45.252.204.0/22 -add china_ip_route 45.252.208.0/22 -add china_ip_route 45.252.212.0/22 -add china_ip_route 45.252.216.0/22 -add china_ip_route 45.252.220.0/22 -add china_ip_route 45.252.224.0/22 -add china_ip_route 45.252.228.0/22 -add china_ip_route 45.252.232.0/22 -add china_ip_route 45.253.0.0/22 -add china_ip_route 45.253.4.0/22 -add china_ip_route 45.253.8.0/22 -add china_ip_route 45.253.12.0/22 -add china_ip_route 45.253.16.0/22 -add china_ip_route 45.253.20.0/22 -add china_ip_route 45.253.24.0/22 -add china_ip_route 45.253.28.0/22 -add china_ip_route 45.253.32.0/22 -add china_ip_route 45.253.36.0/22 -add china_ip_route 45.253.40.0/22 -add china_ip_route 45.253.44.0/22 -add china_ip_route 45.253.48.0/22 -add china_ip_route 45.253.52.0/22 -add china_ip_route 45.253.56.0/22 -add china_ip_route 45.253.60.0/22 -add china_ip_route 45.253.64.0/22 -add china_ip_route 45.253.68.0/22 -add china_ip_route 45.253.72.0/22 -add china_ip_route 45.253.76.0/22 -add china_ip_route 45.253.80.0/22 -add china_ip_route 45.253.84.0/22 -add china_ip_route 45.253.92.0/22 -add china_ip_route 45.253.96.0/22 -add china_ip_route 45.253.100.0/22 -add china_ip_route 45.253.104.0/22 -add china_ip_route 45.253.108.0/22 -add china_ip_route 45.253.112.0/22 -add china_ip_route 45.253.116.0/22 -add china_ip_route 45.253.120.0/22 -add china_ip_route 45.253.132.0/22 -add china_ip_route 45.253.136.0/22 -add china_ip_route 45.253.140.0/22 -add china_ip_route 45.253.144.0/22 -add china_ip_route 45.253.148.0/22 -add china_ip_route 45.253.152.0/22 -add china_ip_route 45.253.156.0/22 -add china_ip_route 45.253.160.0/22 -add china_ip_route 45.253.164.0/22 -add china_ip_route 45.253.168.0/22 -add china_ip_route 45.253.172.0/22 -add china_ip_route 45.253.176.0/22 -add china_ip_route 45.253.180.0/22 -add china_ip_route 45.253.184.0/22 -add china_ip_route 45.253.188.0/22 -add china_ip_route 45.253.192.0/22 -add china_ip_route 45.253.196.0/22 -add china_ip_route 45.253.200.0/22 -add china_ip_route 45.253.204.0/22 -add china_ip_route 45.253.208.0/22 -add china_ip_route 45.253.212.0/22 -add china_ip_route 45.253.216.0/22 -add china_ip_route 45.253.220.0/22 -add china_ip_route 45.253.224.0/22 -add china_ip_route 45.253.228.0/22 -add china_ip_route 45.253.232.0/22 -add china_ip_route 45.253.236.0/22 -add china_ip_route 45.253.240.0/22 -add china_ip_route 45.253.244.0/22 -add china_ip_route 45.254.0.0/22 -add china_ip_route 45.254.4.0/22 -add china_ip_route 45.254.8.0/22 -add china_ip_route 45.254.12.0/22 -add china_ip_route 45.254.16.0/22 -add china_ip_route 45.254.20.0/22 -add china_ip_route 45.254.24.0/22 -add china_ip_route 45.254.28.0/22 -add china_ip_route 45.254.40.0/22 -add china_ip_route 45.254.48.0/22 -add china_ip_route 45.254.52.0/22 -add china_ip_route 45.254.56.0/22 -add china_ip_route 45.254.60.0/22 -add china_ip_route 45.254.64.0/22 -add china_ip_route 45.254.68.0/22 -add china_ip_route 45.254.72.0/22 -add china_ip_route 45.254.76.0/22 -add china_ip_route 45.254.80.0/22 -add china_ip_route 45.254.84.0/22 -add china_ip_route 45.254.88.0/22 -add china_ip_route 45.254.92.0/22 -add china_ip_route 45.254.96.0/22 -add china_ip_route 45.254.100.0/22 -add china_ip_route 45.254.104.0/22 -add china_ip_route 45.254.108.0/22 -add china_ip_route 45.254.112.0/22 -add china_ip_route 45.254.116.0/22 -add china_ip_route 45.254.120.0/22 -add china_ip_route 45.254.124.0/22 -add china_ip_route 45.254.128.0/22 -add china_ip_route 45.254.132.0/22 -add china_ip_route 45.254.136.0/22 -add china_ip_route 45.254.140.0/22 -add china_ip_route 45.254.144.0/22 -add china_ip_route 45.254.148.0/22 -add china_ip_route 45.254.152.0/22 -add china_ip_route 45.254.156.0/22 -add china_ip_route 45.254.160.0/22 -add china_ip_route 45.254.164.0/22 -add china_ip_route 45.254.168.0/22 -add china_ip_route 45.254.172.0/22 -add china_ip_route 45.254.176.0/22 -add china_ip_route 45.254.180.0/22 -add china_ip_route 45.254.184.0/22 -add china_ip_route 45.254.188.0/22 -add china_ip_route 45.254.192.0/22 -add china_ip_route 45.254.196.0/22 -add china_ip_route 45.254.200.0/22 -add china_ip_route 45.254.204.0/22 -add china_ip_route 45.254.208.0/22 -add china_ip_route 45.254.212.0/22 -add china_ip_route 45.254.216.0/22 -add china_ip_route 45.254.220.0/22 -add china_ip_route 45.254.224.0/22 -add china_ip_route 45.254.228.0/22 -add china_ip_route 45.254.236.0/22 -add china_ip_route 45.254.240.0/22 -add china_ip_route 45.254.248.0/22 -add china_ip_route 45.255.0.0/22 -add china_ip_route 45.255.4.0/22 -add china_ip_route 45.255.8.0/22 -add china_ip_route 45.255.12.0/22 -add china_ip_route 45.255.16.0/22 -add china_ip_route 45.255.20.0/22 -add china_ip_route 45.255.24.0/22 -add china_ip_route 45.255.28.0/22 -add china_ip_route 45.255.32.0/22 -add china_ip_route 45.255.36.0/22 -add china_ip_route 45.255.40.0/22 -add china_ip_route 45.255.44.0/22 -add china_ip_route 45.255.48.0/22 -add china_ip_route 45.255.52.0/22 -add china_ip_route 45.255.56.0/22 -add china_ip_route 45.255.60.0/22 -add china_ip_route 45.255.64.0/22 -add china_ip_route 45.255.68.0/22 -add china_ip_route 45.255.72.0/22 -add china_ip_route 45.255.76.0/22 -add china_ip_route 45.255.80.0/22 -add china_ip_route 45.255.84.0/22 -add china_ip_route 45.255.88.0/22 -add china_ip_route 45.255.92.0/22 -add china_ip_route 45.255.96.0/22 -add china_ip_route 45.255.100.0/22 -add china_ip_route 45.255.104.0/22 -add china_ip_route 45.255.108.0/22 -add china_ip_route 45.255.112.0/22 -add china_ip_route 45.255.116.0/22 -add china_ip_route 45.255.120.0/22 -add china_ip_route 45.255.124.0/22 -add china_ip_route 45.255.132.0/22 -add china_ip_route 45.255.136.0/22 -add china_ip_route 45.255.140.0/22 -add china_ip_route 45.255.144.0/22 -add china_ip_route 45.255.148.0/22 -add china_ip_route 45.255.152.0/22 -add china_ip_route 45.255.156.0/22 -add china_ip_route 45.255.160.0/22 -add china_ip_route 45.255.164.0/22 -add china_ip_route 45.255.168.0/22 -add china_ip_route 45.255.172.0/22 -add china_ip_route 45.255.176.0/22 -add china_ip_route 45.255.180.0/22 -add china_ip_route 45.255.184.0/22 -add china_ip_route 45.255.188.0/22 -add china_ip_route 45.255.192.0/22 -add china_ip_route 45.255.196.0/22 -add china_ip_route 45.255.200.0/22 -add china_ip_route 45.255.204.0/22 -add china_ip_route 45.255.208.0/22 -add china_ip_route 45.255.212.0/22 -add china_ip_route 45.255.216.0/22 -add china_ip_route 45.255.220.0/22 -add china_ip_route 45.255.224.0/22 -add china_ip_route 45.255.228.0/22 -add china_ip_route 45.255.232.0/22 -add china_ip_route 45.255.236.0/22 -add china_ip_route 45.255.240.0/22 -add china_ip_route 45.255.244.0/22 -add china_ip_route 45.255.248.0/22 -add china_ip_route 47.92.0.0/14 -add china_ip_route 47.96.0.0/11 -add china_ip_route 49.4.0.0/14 -add china_ip_route 49.51.0.0/16 -add china_ip_route 49.52.0.0/14 -add china_ip_route 49.64.0.0/11 -add china_ip_route 49.112.0.0/13 -add china_ip_route 49.120.0.0/14 -add china_ip_route 49.128.0.0/24 -add china_ip_route 49.128.2.0/23 -add china_ip_route 49.128.4.0/22 -add china_ip_route 49.140.0.0/15 -add china_ip_route 49.152.0.0/14 -add china_ip_route 49.208.0.0/15 -add china_ip_route 49.210.0.0/15 -add china_ip_route 49.220.0.0/14 -add china_ip_route 49.232.0.0/14 -add china_ip_route 49.239.0.0/18 -add china_ip_route 49.239.192.0/18 -add china_ip_route 49.246.224.0/19 -add china_ip_route 52.80.0.0/15 -add china_ip_route 52.82.0.0/15 -add china_ip_route 52.130.0.0/15 -add china_ip_route 54.222.0.0/15 -add china_ip_route 58.14.0.0/15 -add china_ip_route 58.16.0.0/16 -add china_ip_route 58.17.0.0/17 -add china_ip_route 58.17.128.0/17 -add china_ip_route 58.18.0.0/16 -add china_ip_route 58.19.0.0/16 -add china_ip_route 58.20.0.0/16 -add china_ip_route 58.21.0.0/16 -add china_ip_route 58.22.0.0/15 -add china_ip_route 58.24.0.0/15 -add china_ip_route 58.30.0.0/15 -add china_ip_route 58.32.0.0/13 -add china_ip_route 58.40.0.0/15 -add china_ip_route 58.42.0.0/16 -add china_ip_route 58.43.0.0/16 -add china_ip_route 58.44.0.0/14 -add china_ip_route 58.48.0.0/13 -add china_ip_route 58.56.0.0/15 -add china_ip_route 58.58.0.0/16 -add china_ip_route 58.59.0.0/17 -add china_ip_route 58.59.128.0/17 -add china_ip_route 58.60.0.0/14 -add china_ip_route 58.65.232.0/21 -add china_ip_route 58.66.0.0/15 -add china_ip_route 58.68.128.0/17 -add china_ip_route 58.82.0.0/17 -add china_ip_route 58.83.0.0/17 -add china_ip_route 58.83.128.0/17 -add china_ip_route 58.87.64.0/18 -add china_ip_route 58.99.128.0/17 -add china_ip_route 58.100.0.0/15 -add china_ip_route 58.116.0.0/14 -add china_ip_route 58.128.0.0/13 -add china_ip_route 58.144.0.0/16 -add china_ip_route 58.154.0.0/15 -add china_ip_route 58.192.0.0/15 -add china_ip_route 58.194.0.0/15 -add china_ip_route 58.196.0.0/15 -add china_ip_route 58.198.0.0/15 -add china_ip_route 58.200.0.0/13 -add china_ip_route 58.208.0.0/12 -add china_ip_route 58.240.0.0/15 -add china_ip_route 58.242.0.0/15 -add china_ip_route 58.244.0.0/15 -add china_ip_route 58.246.0.0/15 -add china_ip_route 58.248.0.0/13 -add china_ip_route 59.32.0.0/13 -add china_ip_route 59.40.0.0/15 -add china_ip_route 59.42.0.0/16 -add china_ip_route 59.43.0.0/16 -add china_ip_route 59.44.0.0/14 -add china_ip_route 59.48.0.0/16 -add china_ip_route 59.49.0.0/17 -add china_ip_route 59.49.128.0/17 -add china_ip_route 59.50.0.0/16 -add china_ip_route 59.51.0.0/17 -add china_ip_route 59.51.128.0/17 -add china_ip_route 59.52.0.0/14 -add china_ip_route 59.56.0.0/14 -add china_ip_route 59.60.0.0/15 -add china_ip_route 59.62.0.0/15 -add china_ip_route 59.64.0.0/14 -add china_ip_route 59.68.0.0/14 -add china_ip_route 59.72.0.0/15 -add china_ip_route 59.74.0.0/15 -add china_ip_route 59.76.0.0/16 -add china_ip_route 59.77.0.0/16 -add china_ip_route 59.78.0.0/15 -add china_ip_route 59.80.0.0/15 -add china_ip_route 59.82.0.0/15 -add china_ip_route 59.107.0.0/17 -add china_ip_route 59.107.128.0/17 -add china_ip_route 59.108.0.0/15 -add china_ip_route 59.110.0.0/15 -add china_ip_route 59.151.0.0/17 -add china_ip_route 59.152.16.0/22 -add china_ip_route 59.152.20.0/22 -add china_ip_route 59.152.24.0/22 -add china_ip_route 59.152.28.0/22 -add china_ip_route 59.152.32.0/22 -add china_ip_route 59.152.36.0/22 -add china_ip_route 59.152.64.0/22 -add china_ip_route 59.152.68.0/22 -add china_ip_route 59.152.72.0/22 -add china_ip_route 59.152.76.0/22 -add china_ip_route 59.152.112.0/22 -add china_ip_route 59.152.116.0/22 -add china_ip_route 59.153.4.0/22 -add china_ip_route 59.153.32.0/22 -add china_ip_route 59.153.60.0/22 -add china_ip_route 59.153.64.0/22 -add china_ip_route 59.153.68.0/22 -add china_ip_route 59.153.72.0/22 -add china_ip_route 59.153.92.0/22 -add china_ip_route 59.153.116.0/22 -add china_ip_route 59.153.136.0/22 -add china_ip_route 59.153.152.0/22 -add china_ip_route 59.153.164.0/22 -add china_ip_route 59.153.168.0/22 -add china_ip_route 59.153.172.0/22 -add china_ip_route 59.153.176.0/22 -add china_ip_route 59.153.180.0/22 -add china_ip_route 59.153.184.0/22 -add china_ip_route 59.153.188.0/22 -add china_ip_route 59.153.192.0/22 -add china_ip_route 59.155.0.0/16 -add china_ip_route 59.172.0.0/15 -add china_ip_route 59.174.0.0/15 -add china_ip_route 59.191.0.0/17 -add china_ip_route 59.192.0.0/10 -add china_ip_route 60.0.0.0/13 -add china_ip_route 60.8.0.0/15 -add china_ip_route 60.10.0.0/16 -add china_ip_route 60.11.0.0/16 -add china_ip_route 60.12.0.0/16 -add china_ip_route 60.13.0.0/18 -add china_ip_route 60.13.64.0/18 -add china_ip_route 60.13.128.0/17 -add china_ip_route 60.14.0.0/15 -add china_ip_route 60.16.0.0/13 -add china_ip_route 60.24.0.0/14 -add china_ip_route 60.28.0.0/15 -add china_ip_route 60.30.0.0/16 -add china_ip_route 60.31.0.0/16 -add china_ip_route 60.55.0.0/16 -add china_ip_route 60.63.0.0/16 -add china_ip_route 60.160.0.0/15 -add china_ip_route 60.162.0.0/15 -add china_ip_route 60.164.0.0/15 -add china_ip_route 60.166.0.0/15 -add china_ip_route 60.168.0.0/13 -add china_ip_route 60.176.0.0/12 -add china_ip_route 60.194.0.0/15 -add china_ip_route 60.200.0.0/14 -add china_ip_route 60.204.0.0/16 -add china_ip_route 60.205.0.0/16 -add china_ip_route 60.206.0.0/15 -add china_ip_route 60.208.0.0/13 -add china_ip_route 60.216.0.0/15 -add china_ip_route 60.218.0.0/15 -add china_ip_route 60.220.0.0/14 -add china_ip_route 60.232.0.0/15 -add china_ip_route 60.235.0.0/16 -add china_ip_route 60.245.128.0/17 -add china_ip_route 60.247.0.0/16 -add china_ip_route 60.252.0.0/16 -add china_ip_route 60.253.128.0/17 -add china_ip_route 60.255.0.0/16 -add china_ip_route 61.4.80.0/22 -add china_ip_route 61.4.84.0/22 -add china_ip_route 61.4.88.0/21 -add china_ip_route 61.4.176.0/20 -add china_ip_route 61.8.160.0/20 -add china_ip_route 61.14.212.0/22 -add china_ip_route 61.14.216.0/22 -add china_ip_route 61.14.220.0/22 -add china_ip_route 61.14.240.0/22 -add china_ip_route 61.14.244.0/22 -add china_ip_route 61.28.0.0/20 -add china_ip_route 61.28.16.0/20 -add china_ip_route 61.28.32.0/19 -add china_ip_route 61.28.64.0/18 -add china_ip_route 61.29.128.0/18 -add china_ip_route 61.29.192.0/19 -add china_ip_route 61.29.224.0/20 -add china_ip_route 61.29.240.0/21 -add china_ip_route 61.29.248.0/22 -add china_ip_route 61.29.254.0/23 -add china_ip_route 61.45.128.0/18 -add china_ip_route 61.45.224.0/20 -add china_ip_route 61.47.128.0/18 -add china_ip_route 61.48.0.0/14 -add china_ip_route 61.52.0.0/15 -add china_ip_route 61.54.0.0/16 -add china_ip_route 61.55.0.0/16 -add china_ip_route 61.87.192.0/18 -add china_ip_route 61.128.0.0/15 -add china_ip_route 61.130.0.0/15 -add china_ip_route 61.132.0.0/16 -add china_ip_route 61.133.0.0/17 -add china_ip_route 61.133.128.0/17 -add china_ip_route 61.134.0.0/18 -add china_ip_route 61.134.64.0/19 -add china_ip_route 61.134.96.0/19 -add china_ip_route 61.134.128.0/18 -add china_ip_route 61.134.192.0/18 -add china_ip_route 61.135.0.0/16 -add china_ip_route 61.136.0.0/18 -add china_ip_route 61.136.64.0/18 -add china_ip_route 61.136.128.0/17 -add china_ip_route 61.137.0.0/17 -add china_ip_route 61.137.128.0/17 -add china_ip_route 61.138.0.0/18 -add china_ip_route 61.138.64.0/18 -add china_ip_route 61.138.128.0/18 -add china_ip_route 61.138.192.0/18 -add china_ip_route 61.139.0.0/17 -add china_ip_route 61.139.128.0/18 -add china_ip_route 61.139.192.0/18 -add china_ip_route 61.140.0.0/14 -add china_ip_route 61.144.0.0/14 -add china_ip_route 61.148.0.0/15 -add china_ip_route 61.150.0.0/15 -add china_ip_route 61.152.0.0/16 -add china_ip_route 61.153.0.0/16 -add china_ip_route 61.154.0.0/15 -add china_ip_route 61.156.0.0/16 -add china_ip_route 61.157.0.0/16 -add china_ip_route 61.158.0.0/17 -add china_ip_route 61.158.128.0/17 -add china_ip_route 61.159.0.0/18 -add china_ip_route 61.159.64.0/18 -add china_ip_route 61.159.128.0/17 -add china_ip_route 61.160.0.0/16 -add china_ip_route 61.161.0.0/18 -add china_ip_route 61.161.64.0/18 -add china_ip_route 61.161.128.0/17 -add china_ip_route 61.162.0.0/16 -add china_ip_route 61.163.0.0/16 -add china_ip_route 61.164.0.0/16 -add china_ip_route 61.165.0.0/16 -add china_ip_route 61.166.0.0/16 -add china_ip_route 61.167.0.0/16 -add china_ip_route 61.168.0.0/16 -add china_ip_route 61.169.0.0/16 -add china_ip_route 61.170.0.0/15 -add china_ip_route 61.172.0.0/14 -add china_ip_route 61.176.0.0/16 -add china_ip_route 61.177.0.0/16 -add china_ip_route 61.178.0.0/16 -add china_ip_route 61.179.0.0/16 -add china_ip_route 61.180.0.0/17 -add china_ip_route 61.180.128.0/17 -add china_ip_route 61.181.0.0/16 -add china_ip_route 61.182.0.0/16 -add china_ip_route 61.183.0.0/16 -add china_ip_route 61.184.0.0/14 -add china_ip_route 61.188.0.0/16 -add china_ip_route 61.189.0.0/17 -add china_ip_route 61.189.128.0/17 -add china_ip_route 61.190.0.0/15 -add china_ip_route 61.232.0.0/14 -add china_ip_route 61.236.0.0/15 -add china_ip_route 61.240.0.0/14 -add china_ip_route 62.234.0.0/16 -add china_ip_route 68.79.0.0/18 -add china_ip_route 69.230.192.0/18 -add china_ip_route 69.231.128.0/18 -add china_ip_route 69.234.192.0/18 -add china_ip_route 69.235.128.0/18 -add china_ip_route 71.131.192.0/18 -add china_ip_route 71.132.0.0/18 -add china_ip_route 71.136.64.0/18 -add china_ip_route 71.137.0.0/18 -add china_ip_route 81.68.0.0/14 -add china_ip_route 82.156.0.0/15 -add china_ip_route 94.191.0.0/17 -add china_ip_route 101.0.0.0/22 -add china_ip_route 101.1.0.0/22 -add china_ip_route 101.2.172.0/22 -add china_ip_route 101.4.0.0/14 -add china_ip_route 101.16.0.0/12 -add china_ip_route 101.33.128.0/17 -add china_ip_route 101.34.0.0/15 -add china_ip_route 101.36.0.0/18 -add china_ip_route 101.36.64.0/19 -add china_ip_route 101.36.128.0/17 -add china_ip_route 101.37.0.0/16 -add china_ip_route 101.38.0.0/15 -add china_ip_route 101.40.0.0/15 -add china_ip_route 101.42.0.0/15 -add china_ip_route 101.45.0.0/16 -add china_ip_route 101.46.0.0/15 -add china_ip_route 101.48.0.0/15 -add china_ip_route 101.50.8.0/22 -add china_ip_route 101.50.12.0/22 -add china_ip_route 101.50.56.0/22 -add china_ip_route 101.52.0.0/16 -add china_ip_route 101.53.100.0/22 -add china_ip_route 101.54.0.0/16 -add china_ip_route 101.55.224.0/21 -add china_ip_route 101.64.0.0/13 -add china_ip_route 101.72.0.0/14 -add china_ip_route 101.76.0.0/15 -add china_ip_route 101.78.0.0/22 -add china_ip_route 101.78.32.0/19 -add china_ip_route 101.80.0.0/12 -add china_ip_route 101.96.0.0/21 -add china_ip_route 101.96.8.0/22 -add china_ip_route 101.96.16.0/20 -add china_ip_route 101.96.128.0/17 -add china_ip_route 101.99.96.0/19 -add china_ip_route 101.101.64.0/19 -add china_ip_route 101.101.100.0/24 -add china_ip_route 101.101.102.0/23 -add china_ip_route 101.101.104.0/21 -add china_ip_route 101.101.112.0/20 -add china_ip_route 101.102.64.0/19 -add china_ip_route 101.102.100.0/23 -add china_ip_route 101.102.102.0/24 -add china_ip_route 101.102.104.0/21 -add china_ip_route 101.102.112.0/20 -add china_ip_route 101.104.0.0/14 -add china_ip_route 101.110.64.0/19 -add china_ip_route 101.110.96.0/20 -add china_ip_route 101.110.116.0/22 -add china_ip_route 101.110.120.0/21 -add china_ip_route 101.120.0.0/14 -add china_ip_route 101.124.0.0/15 -add china_ip_route 101.126.0.0/16 -add china_ip_route 101.128.0.0/22 -add china_ip_route 101.128.8.0/21 -add china_ip_route 101.128.16.0/20 -add china_ip_route 101.128.32.0/19 -add china_ip_route 101.129.0.0/16 -add china_ip_route 101.130.0.0/15 -add china_ip_route 101.132.0.0/14 -add china_ip_route 101.144.0.0/12 -add china_ip_route 101.192.0.0/14 -add china_ip_route 101.196.0.0/16 -add china_ip_route 101.197.0.0/16 -add china_ip_route 101.198.0.0/15 -add china_ip_route 101.200.0.0/15 -add china_ip_route 101.203.128.0/19 -add china_ip_route 101.203.160.0/21 -add china_ip_route 101.203.172.0/22 -add china_ip_route 101.203.176.0/20 -add china_ip_route 101.204.0.0/14 -add china_ip_route 101.224.0.0/13 -add china_ip_route 101.232.0.0/15 -add china_ip_route 101.234.64.0/21 -add china_ip_route 101.234.76.0/22 -add china_ip_route 101.234.80.0/20 -add china_ip_route 101.234.96.0/19 -add china_ip_route 101.236.0.0/14 -add china_ip_route 101.240.0.0/14 -add china_ip_route 101.244.0.0/16 -add china_ip_route 101.245.0.0/16 -add china_ip_route 101.246.0.0/15 -add china_ip_route 101.248.0.0/15 -add china_ip_route 101.251.0.0/22 -add china_ip_route 101.251.8.0/21 -add china_ip_route 101.251.16.0/20 -add china_ip_route 101.251.32.0/19 -add china_ip_route 101.251.64.0/18 -add china_ip_route 101.251.128.0/17 -add china_ip_route 101.252.0.0/15 -add china_ip_route 101.254.0.0/16 -add china_ip_route 103.1.8.0/22 -add china_ip_route 103.1.20.0/22 -add china_ip_route 103.1.24.0/22 -add china_ip_route 103.1.72.0/22 -add china_ip_route 103.1.88.0/22 -add china_ip_route 103.1.168.0/22 -add china_ip_route 103.2.108.0/22 -add china_ip_route 103.2.156.0/22 -add china_ip_route 103.2.164.0/22 -add china_ip_route 103.2.200.0/22 -add china_ip_route 103.2.204.0/22 -add china_ip_route 103.2.208.0/22 -add china_ip_route 103.2.212.0/22 -add china_ip_route 103.3.84.0/22 -add china_ip_route 103.3.88.0/22 -add china_ip_route 103.3.92.0/22 -add china_ip_route 103.3.96.0/22 -add china_ip_route 103.3.100.0/22 -add china_ip_route 103.3.104.0/22 -add china_ip_route 103.3.108.0/22 -add china_ip_route 103.3.112.0/22 -add china_ip_route 103.3.116.0/22 -add china_ip_route 103.3.120.0/22 -add china_ip_route 103.3.124.0/22 -add china_ip_route 103.3.128.0/22 -add china_ip_route 103.3.132.0/22 -add china_ip_route 103.3.136.0/22 -add china_ip_route 103.3.140.0/22 -add china_ip_route 103.3.148.0/22 -add china_ip_route 103.3.152.0/22 -add china_ip_route 103.3.156.0/22 -add china_ip_route 103.4.56.0/22 -add china_ip_route 103.4.168.0/22 -add china_ip_route 103.4.184.0/22 -add china_ip_route 103.4.224.0/22 -add china_ip_route 103.5.36.0/22 -add china_ip_route 103.5.52.0/22 -add china_ip_route 103.5.56.0/22 -add china_ip_route 103.5.152.0/22 -add china_ip_route 103.5.168.0/22 -add china_ip_route 103.5.192.0/22 -add china_ip_route 103.5.252.0/22 -add china_ip_route 103.6.76.0/22 -add china_ip_route 103.6.108.0/22 -add china_ip_route 103.6.220.0/22 -add china_ip_route 103.6.228.0/22 -add china_ip_route 103.7.28.0/22 -add china_ip_route 103.7.140.0/22 -add china_ip_route 103.7.212.0/22 -add china_ip_route 103.7.216.0/22 -add china_ip_route 103.7.220.0/22 -add china_ip_route 103.8.0.0/22 -add china_ip_route 103.8.4.0/22 -add china_ip_route 103.8.8.0/22 -add china_ip_route 103.8.32.0/22 -add china_ip_route 103.8.52.0/22 -add china_ip_route 103.8.68.0/22 -add china_ip_route 103.8.108.0/22 -add china_ip_route 103.8.156.0/22 -add china_ip_route 103.8.200.0/22 -add china_ip_route 103.8.204.0/22 -add china_ip_route 103.8.220.0/22 -add china_ip_route 103.9.8.0/22 -add china_ip_route 103.9.24.0/22 -add china_ip_route 103.9.108.0/22 -add china_ip_route 103.9.152.0/22 -add china_ip_route 103.9.192.0/22 -add china_ip_route 103.9.248.0/22 -add china_ip_route 103.9.252.0/22 -add china_ip_route 103.10.0.0/22 -add china_ip_route 103.10.16.0/22 -add china_ip_route 103.10.84.0/22 -add china_ip_route 103.10.140.0/22 -add china_ip_route 103.11.16.0/22 -add china_ip_route 103.11.168.0/22 -add china_ip_route 103.11.180.0/22 -add china_ip_route 103.12.32.0/22 -add china_ip_route 103.12.68.0/22 -add china_ip_route 103.12.92.0/22 -add china_ip_route 103.12.136.0/22 -add china_ip_route 103.12.184.0/22 -add china_ip_route 103.12.232.0/22 -add china_ip_route 103.13.12.0/22 -add china_ip_route 103.13.124.0/22 -add china_ip_route 103.13.144.0/22 -add china_ip_route 103.13.196.0/22 -add china_ip_route 103.13.220.0/22 -add china_ip_route 103.13.244.0/22 -add china_ip_route 103.14.84.0/22 -add china_ip_route 103.14.100.0/22 -add china_ip_route 103.14.132.0/22 -add china_ip_route 103.14.136.0/22 -add china_ip_route 103.14.156.0/22 -add china_ip_route 103.14.240.0/22 -add china_ip_route 103.15.4.0/22 -add china_ip_route 103.15.8.0/22 -add china_ip_route 103.15.16.0/22 -add china_ip_route 103.15.96.0/22 -add china_ip_route 103.15.200.0/22 -add china_ip_route 103.16.52.0/22 -add china_ip_route 103.16.80.0/22 -add china_ip_route 103.16.84.0/22 -add china_ip_route 103.16.88.0/22 -add china_ip_route 103.16.108.0/22 -add china_ip_route 103.16.124.0/22 -add china_ip_route 103.17.40.0/22 -add china_ip_route 103.17.64.0/22 -add china_ip_route 103.17.120.0/22 -add china_ip_route 103.17.136.0/22 -add china_ip_route 103.17.160.0/22 -add china_ip_route 103.17.204.0/22 -add china_ip_route 103.17.228.0/22 -add china_ip_route 103.18.192.0/22 -add china_ip_route 103.18.208.0/22 -add china_ip_route 103.18.212.0/22 -add china_ip_route 103.18.224.0/22 -add china_ip_route 103.19.12.0/22 -add china_ip_route 103.19.40.0/22 -add china_ip_route 103.19.44.0/22 -add china_ip_route 103.19.64.0/22 -add china_ip_route 103.19.68.0/22 -add china_ip_route 103.19.72.0/22 -add china_ip_route 103.19.232.0/22 -add china_ip_route 103.20.12.0/22 -add china_ip_route 103.20.32.0/22 -add china_ip_route 103.20.44.0/22 -add china_ip_route 103.20.68.0/22 -add china_ip_route 103.20.112.0/22 -add china_ip_route 103.20.128.0/22 -add china_ip_route 103.20.160.0/22 -add china_ip_route 103.20.248.0/22 -add china_ip_route 103.21.112.0/22 -add china_ip_route 103.21.116.0/22 -add china_ip_route 103.21.136.0/22 -add china_ip_route 103.21.140.0/22 -add china_ip_route 103.21.176.0/22 -add china_ip_route 103.21.208.0/22 -add china_ip_route 103.21.240.0/22 -add china_ip_route 103.22.0.0/22 -add china_ip_route 103.22.4.0/22 -add china_ip_route 103.22.8.0/22 -add china_ip_route 103.22.12.0/22 -add china_ip_route 103.22.16.0/22 -add china_ip_route 103.22.20.0/22 -add china_ip_route 103.22.24.0/22 -add china_ip_route 103.22.28.0/22 -add china_ip_route 103.22.32.0/22 -add china_ip_route 103.22.36.0/22 -add china_ip_route 103.22.40.0/22 -add china_ip_route 103.22.44.0/22 -add china_ip_route 103.22.48.0/22 -add china_ip_route 103.22.52.0/22 -add china_ip_route 103.22.56.0/22 -add china_ip_route 103.22.60.0/22 -add china_ip_route 103.22.64.0/22 -add china_ip_route 103.22.68.0/22 -add china_ip_route 103.22.72.0/22 -add china_ip_route 103.22.76.0/22 -add china_ip_route 103.22.80.0/22 -add china_ip_route 103.22.84.0/22 -add china_ip_route 103.22.88.0/22 -add china_ip_route 103.22.92.0/22 -add china_ip_route 103.22.100.0/22 -add china_ip_route 103.22.104.0/22 -add china_ip_route 103.22.108.0/22 -add china_ip_route 103.22.112.0/22 -add china_ip_route 103.22.116.0/22 -add china_ip_route 103.22.120.0/22 -add china_ip_route 103.22.124.0/22 -add china_ip_route 103.22.188.0/22 -add china_ip_route 103.22.228.0/22 -add china_ip_route 103.22.252.0/22 -add china_ip_route 103.23.8.0/22 -add china_ip_route 103.23.56.0/22 -add china_ip_route 103.23.160.0/22 -add china_ip_route 103.23.164.0/22 -add china_ip_route 103.23.176.0/22 -add china_ip_route 103.23.228.0/22 -add china_ip_route 103.24.24.0/22 -add china_ip_route 103.24.116.0/22 -add china_ip_route 103.24.128.0/22 -add china_ip_route 103.24.144.0/22 -add china_ip_route 103.24.176.0/22 -add china_ip_route 103.24.184.0/22 -add china_ip_route 103.24.220.0/22 -add china_ip_route 103.24.228.0/22 -add china_ip_route 103.24.248.0/22 -add china_ip_route 103.24.252.0/22 -add china_ip_route 103.25.8.0/23 -add china_ip_route 103.25.20.0/22 -add china_ip_route 103.25.24.0/22 -add china_ip_route 103.25.28.0/22 -add china_ip_route 103.25.32.0/22 -add china_ip_route 103.25.36.0/22 -add china_ip_route 103.25.40.0/22 -add china_ip_route 103.25.48.0/22 -add china_ip_route 103.25.64.0/22 -add china_ip_route 103.25.68.0/22 -add china_ip_route 103.25.148.0/22 -add china_ip_route 103.25.156.0/22 -add china_ip_route 103.25.216.0/22 -add china_ip_route 103.26.0.0/22 -add china_ip_route 103.26.64.0/22 -add china_ip_route 103.26.76.0/22 -add china_ip_route 103.26.132.0/22 -add china_ip_route 103.26.156.0/22 -add china_ip_route 103.26.160.0/22 -add china_ip_route 103.26.228.0/22 -add china_ip_route 103.26.240.0/22 -add china_ip_route 103.27.4.0/22 -add china_ip_route 103.27.12.0/22 -add china_ip_route 103.27.24.0/22 -add china_ip_route 103.27.56.0/22 -add china_ip_route 103.27.96.0/22 -add china_ip_route 103.27.184.0/22 -add china_ip_route 103.27.208.0/22 -add china_ip_route 103.27.212.0/22 -add china_ip_route 103.27.240.0/22 -add china_ip_route 103.28.4.0/22 -add china_ip_route 103.28.8.0/22 -add china_ip_route 103.28.184.0/22 -add china_ip_route 103.28.204.0/22 -add china_ip_route 103.28.212.0/22 -add china_ip_route 103.29.16.0/22 -add china_ip_route 103.29.128.0/22 -add china_ip_route 103.29.132.0/22 -add china_ip_route 103.29.136.0/22 -add china_ip_route 103.30.20.0/22 -add china_ip_route 103.30.96.0/22 -add china_ip_route 103.30.148.0/22 -add china_ip_route 103.30.200.0/22 -add china_ip_route 103.30.228.0/22 -add china_ip_route 103.30.236.0/22 -add china_ip_route 103.31.0.0/22 -add china_ip_route 103.31.48.0/22 -add china_ip_route 103.31.52.0/22 -add china_ip_route 103.31.56.0/22 -add china_ip_route 103.31.60.0/22 -add china_ip_route 103.31.64.0/22 -add china_ip_route 103.31.68.0/22 -add china_ip_route 103.31.148.0/22 -add china_ip_route 103.31.160.0/22 -add china_ip_route 103.31.168.0/22 -add china_ip_route 103.31.200.0/22 -add china_ip_route 103.31.236.0/22 -add china_ip_route 103.32.0.0/22 -add china_ip_route 103.32.4.0/22 -add china_ip_route 103.32.8.0/22 -add china_ip_route 103.32.12.0/22 -add china_ip_route 103.32.16.0/22 -add china_ip_route 103.32.20.0/22 -add china_ip_route 103.32.24.0/22 -add china_ip_route 103.32.28.0/22 -add china_ip_route 103.32.32.0/22 -add china_ip_route 103.32.36.0/22 -add china_ip_route 103.32.40.0/22 -add china_ip_route 103.32.44.0/22 -add china_ip_route 103.32.48.0/22 -add china_ip_route 103.32.52.0/22 -add china_ip_route 103.32.56.0/22 -add china_ip_route 103.32.60.0/22 -add china_ip_route 103.32.64.0/22 -add china_ip_route 103.32.68.0/22 -add china_ip_route 103.32.72.0/22 -add china_ip_route 103.32.76.0/22 -add china_ip_route 103.32.80.0/22 -add china_ip_route 103.32.84.0/22 -add china_ip_route 103.32.88.0/22 -add china_ip_route 103.32.92.0/22 -add china_ip_route 103.32.96.0/22 -add china_ip_route 103.32.100.0/22 -add china_ip_route 103.32.104.0/22 -add china_ip_route 103.32.108.0/22 -add china_ip_route 103.32.112.0/22 -add china_ip_route 103.32.116.0/22 -add china_ip_route 103.32.120.0/22 -add china_ip_route 103.32.124.0/22 -add china_ip_route 103.32.128.0/22 -add china_ip_route 103.32.132.0/22 -add china_ip_route 103.32.136.0/22 -add china_ip_route 103.32.140.0/22 -add china_ip_route 103.32.144.0/22 -add china_ip_route 103.32.148.0/22 -add china_ip_route 103.32.152.0/22 -add china_ip_route 103.32.156.0/22 -add china_ip_route 103.32.160.0/22 -add china_ip_route 103.32.164.0/22 -add china_ip_route 103.32.168.0/22 -add china_ip_route 103.32.172.0/22 -add china_ip_route 103.32.176.0/22 -add china_ip_route 103.32.180.0/22 -add china_ip_route 103.32.184.0/22 -add china_ip_route 103.32.188.0/22 -add china_ip_route 103.32.192.0/22 -add china_ip_route 103.32.196.0/22 -add china_ip_route 103.32.200.0/22 -add china_ip_route 103.32.204.0/22 -add china_ip_route 103.32.208.0/22 -add china_ip_route 103.32.212.0/22 -add china_ip_route 103.32.216.0/22 -add china_ip_route 103.32.220.0/22 -add china_ip_route 103.32.224.0/22 -add china_ip_route 103.32.228.0/22 -add china_ip_route 103.32.232.0/22 -add china_ip_route 103.32.236.0/22 -add china_ip_route 103.32.240.0/22 -add china_ip_route 103.32.244.0/22 -add china_ip_route 103.32.248.0/22 -add china_ip_route 103.32.252.0/22 -add china_ip_route 103.33.0.0/22 -add china_ip_route 103.33.4.0/22 -add china_ip_route 103.33.8.0/22 -add china_ip_route 103.33.12.0/22 -add china_ip_route 103.33.16.0/22 -add china_ip_route 103.33.20.0/22 -add china_ip_route 103.33.24.0/22 -add china_ip_route 103.33.28.0/22 -add china_ip_route 103.33.32.0/22 -add china_ip_route 103.33.36.0/22 -add china_ip_route 103.33.40.0/22 -add china_ip_route 103.33.44.0/22 -add china_ip_route 103.33.48.0/22 -add china_ip_route 103.33.52.0/22 -add china_ip_route 103.33.56.0/22 -add china_ip_route 103.33.60.0/22 -add china_ip_route 103.33.64.0/22 -add china_ip_route 103.33.68.0/22 -add china_ip_route 103.33.72.0/22 -add china_ip_route 103.33.76.0/22 -add china_ip_route 103.33.80.0/22 -add china_ip_route 103.33.84.0/22 -add china_ip_route 103.33.88.0/22 -add china_ip_route 103.33.92.0/22 -add china_ip_route 103.33.96.0/22 -add china_ip_route 103.33.100.0/22 -add china_ip_route 103.33.104.0/22 -add china_ip_route 103.33.108.0/22 -add china_ip_route 103.33.112.0/22 -add china_ip_route 103.33.116.0/22 -add china_ip_route 103.33.120.0/22 -add china_ip_route 103.33.124.0/22 -add china_ip_route 103.33.128.0/22 -add china_ip_route 103.33.132.0/22 -add china_ip_route 103.33.136.0/22 -add china_ip_route 103.33.140.0/22 -add china_ip_route 103.33.144.0/22 -add china_ip_route 103.33.148.0/22 -add china_ip_route 103.33.152.0/22 -add china_ip_route 103.33.156.0/22 -add china_ip_route 103.33.160.0/22 -add china_ip_route 103.33.164.0/22 -add china_ip_route 103.33.168.0/22 -add china_ip_route 103.33.172.0/22 -add china_ip_route 103.33.176.0/22 -add china_ip_route 103.33.180.0/22 -add china_ip_route 103.33.184.0/22 -add china_ip_route 103.33.188.0/22 -add china_ip_route 103.33.192.0/22 -add china_ip_route 103.33.196.0/22 -add china_ip_route 103.33.200.0/22 -add china_ip_route 103.33.204.0/22 -add china_ip_route 103.33.208.0/22 -add china_ip_route 103.33.212.0/22 -add china_ip_route 103.33.216.0/22 -add china_ip_route 103.33.220.0/22 -add china_ip_route 103.33.224.0/22 -add china_ip_route 103.33.228.0/22 -add china_ip_route 103.33.232.0/22 -add china_ip_route 103.33.236.0/22 -add china_ip_route 103.33.240.0/22 -add china_ip_route 103.33.244.0/22 -add china_ip_route 103.33.248.0/22 -add china_ip_route 103.33.252.0/22 -add china_ip_route 103.34.0.0/22 -add china_ip_route 103.34.4.0/22 -add china_ip_route 103.34.8.0/22 -add china_ip_route 103.34.12.0/22 -add china_ip_route 103.34.16.0/22 -add china_ip_route 103.34.20.0/22 -add china_ip_route 103.34.24.0/22 -add china_ip_route 103.34.28.0/22 -add china_ip_route 103.34.32.0/22 -add china_ip_route 103.34.36.0/22 -add china_ip_route 103.34.40.0/22 -add china_ip_route 103.34.44.0/22 -add china_ip_route 103.34.48.0/22 -add china_ip_route 103.34.52.0/22 -add china_ip_route 103.34.56.0/22 -add china_ip_route 103.34.60.0/22 -add china_ip_route 103.34.64.0/22 -add china_ip_route 103.34.68.0/22 -add china_ip_route 103.34.72.0/22 -add china_ip_route 103.34.76.0/22 -add china_ip_route 103.34.80.0/22 -add china_ip_route 103.34.84.0/22 -add china_ip_route 103.34.88.0/22 -add china_ip_route 103.34.92.0/22 -add china_ip_route 103.34.96.0/22 -add china_ip_route 103.34.100.0/22 -add china_ip_route 103.34.104.0/22 -add china_ip_route 103.34.108.0/22 -add china_ip_route 103.34.112.0/22 -add china_ip_route 103.34.116.0/22 -add china_ip_route 103.34.120.0/22 -add china_ip_route 103.34.124.0/22 -add china_ip_route 103.34.128.0/22 -add china_ip_route 103.34.132.0/22 -add china_ip_route 103.34.136.0/22 -add china_ip_route 103.34.140.0/22 -add china_ip_route 103.34.144.0/22 -add china_ip_route 103.34.148.0/22 -add china_ip_route 103.34.152.0/22 -add china_ip_route 103.34.156.0/22 -add china_ip_route 103.34.160.0/22 -add china_ip_route 103.34.164.0/22 -add china_ip_route 103.34.168.0/22 -add china_ip_route 103.34.172.0/22 -add china_ip_route 103.34.176.0/22 -add china_ip_route 103.34.180.0/22 -add china_ip_route 103.34.184.0/22 -add china_ip_route 103.34.188.0/22 -add china_ip_route 103.34.192.0/22 -add china_ip_route 103.34.196.0/22 -add china_ip_route 103.34.200.0/22 -add china_ip_route 103.34.204.0/22 -add china_ip_route 103.34.208.0/22 -add china_ip_route 103.34.212.0/22 -add china_ip_route 103.34.216.0/22 -add china_ip_route 103.34.220.0/22 -add china_ip_route 103.34.224.0/22 -add china_ip_route 103.34.228.0/22 -add china_ip_route 103.34.232.0/22 -add china_ip_route 103.34.236.0/22 -add china_ip_route 103.34.240.0/22 -add china_ip_route 103.34.244.0/22 -add china_ip_route 103.34.248.0/22 -add china_ip_route 103.34.252.0/22 -add china_ip_route 103.35.0.0/22 -add china_ip_route 103.35.4.0/22 -add china_ip_route 103.35.8.0/22 -add china_ip_route 103.35.12.0/22 -add china_ip_route 103.35.16.0/22 -add china_ip_route 103.35.20.0/22 -add china_ip_route 103.35.24.0/22 -add china_ip_route 103.35.28.0/22 -add china_ip_route 103.35.32.0/22 -add china_ip_route 103.35.36.0/22 -add china_ip_route 103.35.40.0/22 -add china_ip_route 103.35.44.0/22 -add china_ip_route 103.35.48.0/22 -add china_ip_route 103.35.104.0/22 -add china_ip_route 103.35.116.0/22 -add china_ip_route 103.35.180.0/22 -add china_ip_route 103.35.200.0/22 -add china_ip_route 103.35.220.0/22 -add china_ip_route 103.36.28.0/22 -add china_ip_route 103.36.36.0/22 -add china_ip_route 103.36.56.0/22 -add china_ip_route 103.36.60.0/22 -add china_ip_route 103.36.64.0/22 -add china_ip_route 103.36.72.0/22 -add china_ip_route 103.36.96.0/22 -add china_ip_route 103.36.132.0/22 -add china_ip_route 103.36.136.0/22 -add china_ip_route 103.36.160.0/22 -add china_ip_route 103.36.164.0/22 -add china_ip_route 103.36.168.0/22 -add china_ip_route 103.36.172.0/22 -add china_ip_route 103.36.176.0/22 -add china_ip_route 103.36.180.0/22 -add china_ip_route 103.36.184.0/22 -add china_ip_route 103.36.188.0/22 -add china_ip_route 103.36.192.0/22 -add china_ip_route 103.36.196.0/22 -add china_ip_route 103.36.200.0/22 -add china_ip_route 103.36.204.0/22 -add china_ip_route 103.36.208.0/22 -add china_ip_route 103.36.212.0/22 -add china_ip_route 103.36.216.0/22 -add china_ip_route 103.36.220.0/22 -add china_ip_route 103.36.224.0/22 -add china_ip_route 103.36.228.0/22 -add china_ip_route 103.36.232.0/22 -add china_ip_route 103.36.236.0/22 -add china_ip_route 103.36.240.0/22 -add china_ip_route 103.36.244.0/22 -add china_ip_route 103.37.12.0/22 -add china_ip_route 103.37.16.0/22 -add china_ip_route 103.37.24.0/22 -add china_ip_route 103.37.44.0/22 -add china_ip_route 103.37.52.0/22 -add china_ip_route 103.37.56.0/22 -add china_ip_route 103.37.72.0/22 -add china_ip_route 103.37.100.0/22 -add china_ip_route 103.37.104.0/22 -add china_ip_route 103.37.136.0/22 -add china_ip_route 103.37.140.0/22 -add china_ip_route 103.37.144.0/22 -add china_ip_route 103.37.148.0/22 -add china_ip_route 103.37.152.0/22 -add china_ip_route 103.37.156.0/22 -add china_ip_route 103.37.160.0/22 -add china_ip_route 103.37.164.0/22 -add china_ip_route 103.37.172.0/22 -add china_ip_route 103.37.176.0/22 -add china_ip_route 103.37.188.0/22 -add china_ip_route 103.37.208.0/22 -add china_ip_route 103.37.212.0/22 -add china_ip_route 103.37.216.0/22 -add china_ip_route 103.37.220.0/22 -add china_ip_route 103.37.248.0/22 -add china_ip_route 103.37.252.0/22 -add china_ip_route 103.38.0.0/22 -add china_ip_route 103.38.32.0/22 -add china_ip_route 103.38.40.0/22 -add china_ip_route 103.38.44.0/22 -add china_ip_route 103.38.56.0/22 -add china_ip_route 103.38.76.0/22 -add china_ip_route 103.38.84.0/22 -add china_ip_route 103.38.92.0/22 -add china_ip_route 103.38.96.0/22 -add china_ip_route 103.38.116.0/22 -add china_ip_route 103.38.132.0/22 -add china_ip_route 103.38.140.0/22 -add china_ip_route 103.38.224.0/22 -add china_ip_route 103.38.228.0/22 -add china_ip_route 103.38.232.0/22 -add china_ip_route 103.39.64.0/22 -add china_ip_route 103.39.88.0/22 -add china_ip_route 103.39.100.0/22 -add china_ip_route 103.39.104.0/22 -add china_ip_route 103.39.108.0/22 -add china_ip_route 103.39.160.0/22 -add china_ip_route 103.39.164.0/22 -add china_ip_route 103.39.168.0/22 -add china_ip_route 103.39.172.0/22 -add china_ip_route 103.39.176.0/22 -add china_ip_route 103.39.180.0/22 -add china_ip_route 103.39.184.0/22 -add china_ip_route 103.39.188.0/22 -add china_ip_route 103.39.200.0/22 -add china_ip_route 103.39.204.0/22 -add china_ip_route 103.39.208.0/22 -add china_ip_route 103.39.212.0/22 -add china_ip_route 103.39.216.0/22 -add china_ip_route 103.39.220.0/22 -add china_ip_route 103.39.224.0/22 -add china_ip_route 103.39.228.0/22 -add china_ip_route 103.39.232.0/22 -add china_ip_route 103.40.12.0/22 -add china_ip_route 103.40.16.0/22 -add china_ip_route 103.40.20.0/22 -add china_ip_route 103.40.24.0/22 -add china_ip_route 103.40.28.0/22 -add china_ip_route 103.40.32.0/22 -add china_ip_route 103.40.36.0/22 -add china_ip_route 103.40.40.0/22 -add china_ip_route 103.40.44.0/22 -add china_ip_route 103.40.88.0/22 -add china_ip_route 103.40.100.0/22 -add china_ip_route 103.40.192.0/22 -add china_ip_route 103.40.212.0/22 -add china_ip_route 103.40.220.0/22 -add china_ip_route 103.40.228.0/22 -add china_ip_route 103.40.232.0/22 -add china_ip_route 103.40.236.0/22 -add china_ip_route 103.40.240.0/22 -add china_ip_route 103.40.244.0/22 -add china_ip_route 103.40.248.0/22 -add china_ip_route 103.40.252.0/22 -add china_ip_route 103.41.0.0/22 -add china_ip_route 103.41.16.0/22 -add china_ip_route 103.41.52.0/22 -add china_ip_route 103.41.116.0/22 -add china_ip_route 103.41.140.0/22 -add china_ip_route 103.41.148.0/22 -add china_ip_route 103.41.152.0/22 -add china_ip_route 103.41.160.0/22 -add china_ip_route 103.41.164.0/22 -add china_ip_route 103.41.220.0/22 -add china_ip_route 103.41.224.0/22 -add china_ip_route 103.41.228.0/22 -add china_ip_route 103.41.232.0/22 -add china_ip_route 103.42.8.0/22 -add china_ip_route 103.42.24.0/22 -add china_ip_route 103.42.28.0/22 -add china_ip_route 103.42.32.0/22 -add china_ip_route 103.42.64.0/22 -add china_ip_route 103.42.68.0/22 -add china_ip_route 103.42.76.0/22 -add china_ip_route 103.42.104.0/22 -add china_ip_route 103.42.180.0/22 -add china_ip_route 103.42.232.0/22 -add china_ip_route 103.43.16.0/22 -add china_ip_route 103.43.84.0/22 -add china_ip_route 103.43.96.0/22 -add china_ip_route 103.43.100.0/22 -add china_ip_route 103.43.104.0/22 -add china_ip_route 103.43.124.0/22 -add china_ip_route 103.43.184.0/22 -add china_ip_route 103.43.192.0/22 -add china_ip_route 103.43.196.0/22 -add china_ip_route 103.43.208.0/22 -add china_ip_route 103.43.220.0/22 -add china_ip_route 103.43.224.0/22 -add china_ip_route 103.43.240.0/22 -add china_ip_route 103.44.56.0/22 -add china_ip_route 103.44.80.0/22 -add china_ip_route 103.44.88.0/22 -add china_ip_route 103.44.120.0/22 -add china_ip_route 103.44.124.0/22 -add china_ip_route 103.44.132.0/22 -add china_ip_route 103.44.144.0/22 -add china_ip_route 103.44.168.0/22 -add china_ip_route 103.44.176.0/22 -add china_ip_route 103.44.180.0/22 -add china_ip_route 103.44.184.0/22 -add china_ip_route 103.44.188.0/22 -add china_ip_route 103.44.192.0/22 -add china_ip_route 103.44.196.0/22 -add china_ip_route 103.44.200.0/22 -add china_ip_route 103.44.204.0/22 -add china_ip_route 103.44.224.0/22 -add china_ip_route 103.44.236.0/22 -add china_ip_route 103.44.240.0/22 -add china_ip_route 103.44.244.0/22 -add china_ip_route 103.44.248.0/22 -add china_ip_route 103.44.252.0/22 -add china_ip_route 103.45.0.0/22 -add china_ip_route 103.45.4.0/22 -add china_ip_route 103.45.8.0/22 -add china_ip_route 103.45.12.0/22 -add china_ip_route 103.45.16.0/22 -add china_ip_route 103.45.20.0/22 -add china_ip_route 103.45.24.0/22 -add china_ip_route 103.45.28.0/22 -add china_ip_route 103.45.32.0/22 -add china_ip_route 103.45.36.0/22 -add china_ip_route 103.45.40.0/22 -add china_ip_route 103.45.44.0/22 -add china_ip_route 103.45.48.0/22 -add china_ip_route 103.45.52.0/22 -add china_ip_route 103.45.56.0/22 -add china_ip_route 103.45.60.0/22 -add china_ip_route 103.45.72.0/22 -add china_ip_route 103.45.76.0/22 -add china_ip_route 103.45.80.0/22 -add china_ip_route 103.45.84.0/22 -add china_ip_route 103.45.88.0/22 -add china_ip_route 103.45.92.0/22 -add china_ip_route 103.45.96.0/22 -add china_ip_route 103.45.100.0/22 -add china_ip_route 103.45.104.0/22 -add china_ip_route 103.45.108.0/22 -add china_ip_route 103.45.112.0/22 -add china_ip_route 103.45.116.0/22 -add china_ip_route 103.45.120.0/22 -add china_ip_route 103.45.124.0/22 -add china_ip_route 103.45.128.0/22 -add china_ip_route 103.45.132.0/22 -add china_ip_route 103.45.136.0/22 -add china_ip_route 103.45.140.0/22 -add china_ip_route 103.45.144.0/22 -add china_ip_route 103.45.148.0/22 -add china_ip_route 103.45.152.0/22 -add china_ip_route 103.45.156.0/22 -add china_ip_route 103.45.160.0/22 -add china_ip_route 103.45.164.0/22 -add china_ip_route 103.45.168.0/22 -add china_ip_route 103.45.172.0/22 -add china_ip_route 103.45.176.0/22 -add china_ip_route 103.45.180.0/22 -add china_ip_route 103.45.184.0/22 -add china_ip_route 103.45.188.0/22 -add china_ip_route 103.45.192.0/22 -add china_ip_route 103.45.196.0/22 -add china_ip_route 103.45.200.0/22 -add china_ip_route 103.45.204.0/22 -add china_ip_route 103.45.208.0/22 -add china_ip_route 103.45.212.0/22 -add china_ip_route 103.45.216.0/22 -add china_ip_route 103.45.220.0/22 -add china_ip_route 103.45.224.0/22 -add china_ip_route 103.45.248.0/22 -add china_ip_route 103.46.0.0/22 -add china_ip_route 103.46.12.0/22 -add china_ip_route 103.46.16.0/22 -add china_ip_route 103.46.20.0/22 -add china_ip_route 103.46.24.0/22 -add china_ip_route 103.46.28.0/22 -add china_ip_route 103.46.32.0/22 -add china_ip_route 103.46.36.0/22 -add china_ip_route 103.46.40.0/22 -add china_ip_route 103.46.44.0/22 -add china_ip_route 103.46.48.0/22 -add china_ip_route 103.46.52.0/22 -add china_ip_route 103.46.56.0/22 -add china_ip_route 103.46.60.0/22 -add china_ip_route 103.46.64.0/22 -add china_ip_route 103.46.68.0/22 -add china_ip_route 103.46.72.0/22 -add china_ip_route 103.46.76.0/22 -add china_ip_route 103.46.80.0/22 -add china_ip_route 103.46.84.0/22 -add china_ip_route 103.46.88.0/22 -add china_ip_route 103.46.92.0/22 -add china_ip_route 103.46.96.0/22 -add china_ip_route 103.46.100.0/22 -add china_ip_route 103.46.104.0/22 -add china_ip_route 103.46.108.0/22 -add china_ip_route 103.46.112.0/22 -add china_ip_route 103.46.116.0/22 -add china_ip_route 103.46.120.0/22 -add china_ip_route 103.46.124.0/22 -add china_ip_route 103.46.128.0/22 -add china_ip_route 103.46.132.0/22 -add china_ip_route 103.46.136.0/22 -add china_ip_route 103.46.152.0/22 -add china_ip_route 103.46.156.0/22 -add china_ip_route 103.46.160.0/22 -add china_ip_route 103.46.164.0/22 -add china_ip_route 103.46.168.0/22 -add china_ip_route 103.46.172.0/22 -add china_ip_route 103.46.176.0/22 -add china_ip_route 103.46.180.0/22 -add china_ip_route 103.46.244.0/22 -add china_ip_route 103.46.248.0/22 -add china_ip_route 103.47.4.0/22 -add china_ip_route 103.47.20.0/22 -add china_ip_route 103.47.36.0/22 -add china_ip_route 103.47.40.0/22 -add china_ip_route 103.47.48.0/22 -add china_ip_route 103.47.80.0/22 -add china_ip_route 103.47.96.0/22 -add china_ip_route 103.47.108.0/22 -add china_ip_route 103.47.116.0/22 -add china_ip_route 103.47.120.0/22 -add china_ip_route 103.47.136.0/22 -add china_ip_route 103.47.140.0/22 -add china_ip_route 103.47.212.0/22 -add china_ip_route 103.48.52.0/22 -add china_ip_route 103.48.92.0/22 -add china_ip_route 103.48.144.0/22 -add china_ip_route 103.48.148.0/22 -add china_ip_route 103.48.152.0/22 -add china_ip_route 103.48.156.0/22 -add china_ip_route 103.48.202.0/23 -add china_ip_route 103.48.216.0/22 -add china_ip_route 103.48.220.0/22 -add china_ip_route 103.48.224.0/22 -add china_ip_route 103.48.228.0/22 -add china_ip_route 103.48.232.0/22 -add china_ip_route 103.48.236.0/22 -add china_ip_route 103.48.240.0/22 -add china_ip_route 103.48.244.0/22 -add china_ip_route 103.49.12.0/22 -add china_ip_route 103.49.20.0/22 -add china_ip_route 103.49.72.0/22 -add china_ip_route 103.49.76.0/22 -add china_ip_route 103.49.92.0/22 -add china_ip_route 103.49.96.0/22 -add china_ip_route 103.49.108.0/22 -add china_ip_route 103.49.128.0/22 -add china_ip_route 103.49.176.0/22 -add china_ip_route 103.49.180.0/22 -add china_ip_route 103.49.196.0/22 -add china_ip_route 103.50.36.0/22 -add china_ip_route 103.50.44.0/22 -add china_ip_route 103.50.48.0/22 -add china_ip_route 103.50.52.0/22 -add china_ip_route 103.50.56.0/22 -add china_ip_route 103.50.60.0/22 -add china_ip_route 103.50.64.0/22 -add china_ip_route 103.50.68.0/22 -add china_ip_route 103.50.72.0/22 -add china_ip_route 103.50.108.0/22 -add china_ip_route 103.50.112.0/22 -add china_ip_route 103.50.116.0/22 -add china_ip_route 103.50.120.0/22 -add china_ip_route 103.50.124.0/22 -add china_ip_route 103.50.132.0/22 -add china_ip_route 103.50.136.0/22 -add china_ip_route 103.50.140.0/22 -add china_ip_route 103.50.172.0/22 -add china_ip_route 103.50.176.0/22 -add china_ip_route 103.50.180.0/22 -add china_ip_route 103.50.184.0/22 -add china_ip_route 103.50.188.0/22 -add china_ip_route 103.50.192.0/22 -add china_ip_route 103.50.196.0/22 -add china_ip_route 103.50.200.0/22 -add china_ip_route 103.50.220.0/22 -add china_ip_route 103.50.224.0/22 -add china_ip_route 103.50.228.0/22 -add china_ip_route 103.50.232.0/22 -add china_ip_route 103.50.236.0/22 -add china_ip_route 103.50.240.0/22 -add china_ip_route 103.50.244.0/22 -add china_ip_route 103.50.248.0/22 -add china_ip_route 103.52.40.0/22 -add china_ip_route 103.52.72.0/22 -add china_ip_route 103.52.76.0/22 -add china_ip_route 103.52.80.0/22 -add china_ip_route 103.52.84.0/22 -add china_ip_route 103.52.96.0/22 -add china_ip_route 103.52.100.0/22 -add china_ip_route 103.52.104.0/22 -add china_ip_route 103.52.160.0/22 -add china_ip_route 103.52.164.0/22 -add china_ip_route 103.52.172.0/22 -add china_ip_route 103.52.176.0/22 -add china_ip_route 103.52.184.0/22 -add china_ip_route 103.52.196.0/22 -add china_ip_route 103.53.64.0/22 -add china_ip_route 103.53.68.0/22 -add china_ip_route 103.53.92.0/22 -add china_ip_route 103.53.100.0/22 -add china_ip_route 103.53.124.0/22 -add china_ip_route 103.53.128.0/22 -add china_ip_route 103.53.132.0/22 -add china_ip_route 103.53.136.0/22 -add china_ip_route 103.53.140.0/22 -add china_ip_route 103.53.144.0/22 -add china_ip_route 103.53.180.0/22 -add china_ip_route 103.53.204.0/22 -add china_ip_route 103.53.208.0/22 -add china_ip_route 103.53.212.0/22 -add china_ip_route 103.53.216.0/22 -add china_ip_route 103.53.236.0/22 -add china_ip_route 103.53.248.0/22 -add china_ip_route 103.54.8.0/22 -add china_ip_route 103.54.48.0/22 -add china_ip_route 103.54.160.0/22 -add china_ip_route 103.54.164.0/22 -add china_ip_route 103.54.212.0/22 -add china_ip_route 103.54.240.0/22 -add china_ip_route 103.55.24.0/22 -add china_ip_route 103.55.80.0/22 -add china_ip_route 103.55.120.0/22 -add china_ip_route 103.55.152.0/22 -add china_ip_route 103.55.172.0/22 -add china_ip_route 103.55.204.0/22 -add china_ip_route 103.55.208.0/22 -add china_ip_route 103.55.228.0/22 -add china_ip_route 103.55.236.0/22 -add china_ip_route 103.56.8.0/22 -add china_ip_route 103.56.16.0/22 -add china_ip_route 103.56.20.0/22 -add china_ip_route 103.56.32.0/22 -add china_ip_route 103.56.56.0/22 -add china_ip_route 103.56.60.0/22 -add china_ip_route 103.56.72.0/22 -add china_ip_route 103.56.76.0/22 -add china_ip_route 103.56.100.0/22 -add china_ip_route 103.56.104.0/22 -add china_ip_route 103.56.140.0/22 -add china_ip_route 103.56.152.0/22 -add china_ip_route 103.56.184.0/22 -add china_ip_route 103.56.200.0/22 -add china_ip_route 103.57.12.0/22 -add china_ip_route 103.57.52.0/22 -add china_ip_route 103.57.56.0/22 -add china_ip_route 103.57.76.0/22 -add china_ip_route 103.57.136.0/22 -add china_ip_route 103.57.196.0/22 -add china_ip_route 103.58.24.0/22 -add china_ip_route 103.59.76.0/22 -add china_ip_route 103.59.100.0/22 -add china_ip_route 103.59.112.0/22 -add china_ip_route 103.59.116.0/22 -add china_ip_route 103.59.120.0/22 -add china_ip_route 103.59.124.0/22 -add china_ip_route 103.59.128.0/22 -add china_ip_route 103.59.148.0/22 -add china_ip_route 103.59.164.0/22 -add china_ip_route 103.60.32.0/22 -add china_ip_route 103.60.44.0/22 -add china_ip_route 103.60.164.0/22 -add china_ip_route 103.60.228.0/22 -add china_ip_route 103.60.236.0/22 -add china_ip_route 103.61.60.0/22 -add china_ip_route 103.61.104.0/22 -add china_ip_route 103.61.140.0/22 -add china_ip_route 103.61.152.0/22 -add china_ip_route 103.61.156.0/22 -add china_ip_route 103.61.160.0/22 -add china_ip_route 103.61.172.0/22 -add china_ip_route 103.61.176.0/22 -add china_ip_route 103.61.188.0/22 -add china_ip_route 103.62.24.0/22 -add china_ip_route 103.62.52.0/22 -add china_ip_route 103.62.72.0/22 -add china_ip_route 103.62.76.0/22 -add china_ip_route 103.62.80.0/22 -add china_ip_route 103.62.84.0/22 -add china_ip_route 103.62.88.0/22 -add china_ip_route 103.62.96.0/22 -add china_ip_route 103.62.100.0/22 -add china_ip_route 103.62.104.0/22 -add china_ip_route 103.62.108.0/22 -add china_ip_route 103.62.112.0/22 -add china_ip_route 103.62.116.0/22 -add china_ip_route 103.62.120.0/22 -add china_ip_route 103.62.124.0/22 -add china_ip_route 103.62.128.0/22 -add china_ip_route 103.62.132.0/22 -add china_ip_route 103.62.156.0/22 -add china_ip_route 103.62.160.0/22 -add china_ip_route 103.62.164.0/22 -add china_ip_route 103.62.168.0/22 -add china_ip_route 103.62.172.0/22 -add china_ip_route 103.62.176.0/22 -add china_ip_route 103.62.180.0/22 -add china_ip_route 103.62.184.0/22 -add china_ip_route 103.62.188.0/22 -add china_ip_route 103.62.192.0/22 -add china_ip_route 103.62.204.0/22 -add china_ip_route 103.62.208.0/22 -add china_ip_route 103.62.212.0/22 -add china_ip_route 103.62.216.0/22 -add china_ip_route 103.62.220.0/22 -add china_ip_route 103.62.224.0/22 -add china_ip_route 103.63.32.0/22 -add china_ip_route 103.63.36.0/22 -add china_ip_route 103.63.40.0/22 -add china_ip_route 103.63.44.0/22 -add china_ip_route 103.63.48.0/22 -add china_ip_route 103.63.52.0/22 -add china_ip_route 103.63.56.0/22 -add china_ip_route 103.63.60.0/22 -add china_ip_route 103.63.64.0/22 -add china_ip_route 103.63.68.0/22 -add china_ip_route 103.63.72.0/22 -add china_ip_route 103.63.76.0/22 -add china_ip_route 103.63.80.0/22 -add china_ip_route 103.63.84.0/22 -add china_ip_route 103.63.88.0/22 -add china_ip_route 103.63.140.0/22 -add china_ip_route 103.63.144.0/22 -add china_ip_route 103.63.152.0/22 -add china_ip_route 103.63.160.0/22 -add china_ip_route 103.63.164.0/22 -add china_ip_route 103.63.168.0/22 -add china_ip_route 103.63.172.0/22 -add china_ip_route 103.63.176.0/22 -add china_ip_route 103.63.180.0/22 -add china_ip_route 103.63.184.0/22 -add china_ip_route 103.63.192.0/22 -add china_ip_route 103.63.196.0/22 -add china_ip_route 103.63.200.0/22 -add china_ip_route 103.63.204.0/22 -add china_ip_route 103.63.208.0/22 -add china_ip_route 103.63.240.0/22 -add china_ip_route 103.63.244.0/22 -add china_ip_route 103.63.248.0/22 -add china_ip_route 103.63.252.0/22 -add china_ip_route 103.64.0.0/22 -add china_ip_route 103.64.4.0/22 -add china_ip_route 103.64.24.0/22 -add china_ip_route 103.64.28.0/22 -add china_ip_route 103.64.32.0/22 -add china_ip_route 103.64.36.0/22 -add china_ip_route 103.64.40.0/22 -add china_ip_route 103.64.44.0/22 -add china_ip_route 103.64.48.0/22 -add china_ip_route 103.64.52.0/22 -add china_ip_route 103.64.56.0/22 -add china_ip_route 103.64.60.0/22 -add china_ip_route 103.64.64.0/22 -add china_ip_route 103.64.68.0/22 -add china_ip_route 103.64.72.0/22 -add china_ip_route 103.64.76.0/22 -add china_ip_route 103.64.80.0/22 -add china_ip_route 103.64.84.0/22 -add china_ip_route 103.64.88.0/22 -add china_ip_route 103.64.92.0/22 -add china_ip_route 103.64.96.0/22 -add china_ip_route 103.64.100.0/22 -add china_ip_route 103.64.104.0/22 -add china_ip_route 103.64.108.0/22 -add china_ip_route 103.64.112.0/22 -add china_ip_route 103.64.116.0/22 -add china_ip_route 103.64.120.0/22 -add china_ip_route 103.64.124.0/22 -add china_ip_route 103.64.140.0/22 -add china_ip_route 103.64.144.0/22 -add china_ip_route 103.64.152.0/22 -add china_ip_route 103.64.156.0/22 -add china_ip_route 103.64.160.0/22 -add china_ip_route 103.64.164.0/22 -add china_ip_route 103.64.168.0/22 -add china_ip_route 103.64.172.0/22 -add china_ip_route 103.64.176.0/22 -add china_ip_route 103.64.180.0/22 -add china_ip_route 103.64.184.0/22 -add china_ip_route 103.64.188.0/22 -add china_ip_route 103.64.192.0/22 -add china_ip_route 103.64.196.0/22 -add china_ip_route 103.64.200.0/22 -add china_ip_route 103.64.204.0/22 -add china_ip_route 103.64.208.0/22 -add china_ip_route 103.64.212.0/22 -add china_ip_route 103.64.216.0/22 -add china_ip_route 103.64.220.0/22 -add china_ip_route 103.64.224.0/22 -add china_ip_route 103.64.228.0/22 -add china_ip_route 103.64.232.0/22 -add china_ip_route 103.64.236.0/22 -add china_ip_route 103.64.240.0/22 -add china_ip_route 103.64.244.0/22 -add china_ip_route 103.64.248.0/22 -add china_ip_route 103.64.252.0/22 -add china_ip_route 103.65.0.0/22 -add china_ip_route 103.65.4.0/22 -add china_ip_route 103.65.8.0/22 -add china_ip_route 103.65.12.0/22 -add china_ip_route 103.65.16.0/22 -add china_ip_route 103.65.36.0/22 -add china_ip_route 103.65.40.0/22 -add china_ip_route 103.65.48.0/22 -add china_ip_route 103.65.52.0/22 -add china_ip_route 103.65.56.0/22 -add china_ip_route 103.65.60.0/22 -add china_ip_route 103.65.64.0/22 -add china_ip_route 103.65.68.0/22 -add china_ip_route 103.65.72.0/22 -add china_ip_route 103.65.76.0/22 -add china_ip_route 103.65.80.0/22 -add china_ip_route 103.65.84.0/22 -add china_ip_route 103.65.88.0/22 -add china_ip_route 103.65.92.0/22 -add china_ip_route 103.65.100.0/22 -add china_ip_route 103.65.104.0/22 -add china_ip_route 103.65.108.0/22 -add china_ip_route 103.65.112.0/22 -add china_ip_route 103.65.144.0/22 -add china_ip_route 103.65.148.0/22 -add china_ip_route 103.65.152.0/22 -add china_ip_route 103.65.156.0/22 -add china_ip_route 103.65.160.0/22 -add china_ip_route 103.65.164.0/22 -add china_ip_route 103.65.168.0/22 -add china_ip_route 103.65.172.0/22 -add china_ip_route 103.66.32.0/22 -add china_ip_route 103.66.40.0/22 -add china_ip_route 103.66.92.0/22 -add china_ip_route 103.66.108.0/22 -add china_ip_route 103.66.200.0/22 -add china_ip_route 103.66.216.0/22 -add china_ip_route 103.66.240.0/22 -add china_ip_route 103.66.244.0/22 -add china_ip_route 103.66.248.0/22 -add china_ip_route 103.66.252.0/22 -add china_ip_route 103.67.0.0/22 -add china_ip_route 103.67.4.0/22 -add china_ip_route 103.67.8.0/22 -add china_ip_route 103.67.100.0/22 -add china_ip_route 103.67.104.0/22 -add china_ip_route 103.67.108.0/22 -add china_ip_route 103.67.112.0/22 -add china_ip_route 103.67.116.0/22 -add china_ip_route 103.67.120.0/22 -add china_ip_route 103.67.124.0/22 -add china_ip_route 103.67.128.0/22 -add china_ip_route 103.67.132.0/22 -add china_ip_route 103.67.136.0/22 -add china_ip_route 103.67.140.0/22 -add china_ip_route 103.67.144.0/22 -add china_ip_route 103.67.148.0/22 -add china_ip_route 103.67.172.0/22 -add china_ip_route 103.67.192.0/22 -add china_ip_route 103.67.212.0/22 -add china_ip_route 103.67.252.0/22 -add china_ip_route 103.68.64.0/22 -add china_ip_route 103.68.88.0/22 -add china_ip_route 103.68.100.0/22 -add china_ip_route 103.68.128.0/22 -add china_ip_route 103.68.192.0/22 -add china_ip_route 103.69.16.0/22 -add china_ip_route 103.69.116.0/22 -add china_ip_route 103.69.132.0/22 -add china_ip_route 103.69.152.0/22 -add china_ip_route 103.70.8.0/22 -add china_ip_route 103.70.148.0/22 -add china_ip_route 103.70.220.0/22 -add china_ip_route 103.70.224.0/22 -add china_ip_route 103.70.236.0/22 -add china_ip_route 103.70.252.0/22 -add china_ip_route 103.71.0.0/22 -add china_ip_route 103.71.32.0/22 -add china_ip_route 103.71.48.0/22 -add china_ip_route 103.71.68.0/22 -add china_ip_route 103.71.72.0/22 -add china_ip_route 103.71.80.0/22 -add china_ip_route 103.71.84.0/22 -add china_ip_route 103.71.88.0/22 -add china_ip_route 103.71.120.0/22 -add china_ip_route 103.71.124.0/22 -add china_ip_route 103.71.128.0/22 -add china_ip_route 103.71.144.0/22 -add china_ip_route 103.71.196.0/22 -add china_ip_route 103.71.200.0/22 -add china_ip_route 103.71.232.0/22 -add china_ip_route 103.72.12.0/22 -add china_ip_route 103.72.16.0/22 -add china_ip_route 103.72.20.0/22 -add china_ip_route 103.72.24.0/22 -add china_ip_route 103.72.28.0/22 -add china_ip_route 103.72.32.0/22 -add china_ip_route 103.72.36.0/22 -add china_ip_route 103.72.40.0/22 -add china_ip_route 103.72.44.0/22 -add china_ip_route 103.72.48.0/22 -add china_ip_route 103.72.52.0/22 -add china_ip_route 103.72.112.0/22 -add china_ip_route 103.72.116.0/22 -add china_ip_route 103.72.120.0/22 -add china_ip_route 103.72.124.0/22 -add china_ip_route 103.72.128.0/22 -add china_ip_route 103.72.132.0/22 -add china_ip_route 103.72.148.0/22 -add china_ip_route 103.72.172.0/22 -add china_ip_route 103.72.180.0/22 -add china_ip_route 103.72.224.0/22 -add china_ip_route 103.72.228.0/22 -add china_ip_route 103.72.232.0/22 -add china_ip_route 103.72.236.0/22 -add china_ip_route 103.72.240.0/22 -add china_ip_route 103.72.244.0/22 -add china_ip_route 103.72.248.0/22 -add china_ip_route 103.72.252.0/22 -add china_ip_route 103.73.0.0/22 -add china_ip_route 103.73.4.0/22 -add china_ip_route 103.73.8.0/22 -add china_ip_route 103.73.12.0/22 -add china_ip_route 103.73.16.0/22 -add china_ip_route 103.73.20.0/22 -add china_ip_route 103.73.24.0/22 -add china_ip_route 103.73.28.0/22 -add china_ip_route 103.73.48.0/22 -add china_ip_route 103.73.96.0/22 -add china_ip_route 103.73.116.0/22 -add china_ip_route 103.73.120.0/22 -add china_ip_route 103.73.128.0/22 -add china_ip_route 103.73.132.0/22 -add china_ip_route 103.73.136.0/22 -add china_ip_route 103.73.140.0/22 -add china_ip_route 103.73.144.0/22 -add china_ip_route 103.73.168.0/22 -add china_ip_route 103.73.176.0/22 -add china_ip_route 103.73.204.0/22 -add china_ip_route 103.73.208.0/22 -add china_ip_route 103.73.240.0/22 -add china_ip_route 103.73.244.0/22 -add china_ip_route 103.73.248.0/22 -add china_ip_route 103.74.24.0/22 -add china_ip_route 103.74.28.0/22 -add china_ip_route 103.74.32.0/22 -add china_ip_route 103.74.36.0/22 -add china_ip_route 103.74.40.0/22 -add china_ip_route 103.74.44.0/22 -add china_ip_route 103.74.48.0/22 -add china_ip_route 103.74.56.0/22 -add china_ip_route 103.74.60.0/22 -add china_ip_route 103.74.80.0/22 -add china_ip_route 103.74.124.0/22 -add china_ip_route 103.74.148.0/22 -add china_ip_route 103.74.152.0/22 -add china_ip_route 103.74.156.0/22 -add china_ip_route 103.74.204.0/22 -add china_ip_route 103.74.232.0/22 -add china_ip_route 103.75.16.0/22 -add china_ip_route 103.75.88.0/22 -add china_ip_route 103.75.92.0/22 -add china_ip_route 103.75.104.0/22 -add china_ip_route 103.75.108.0/22 -add china_ip_route 103.75.112.0/22 -add china_ip_route 103.75.120.0/22 -add china_ip_route 103.75.128.0/22 -add china_ip_route 103.75.144.0/22 -add china_ip_route 103.75.152.0/22 -add china_ip_route 103.75.236.0/24 -add china_ip_route 103.76.60.0/22 -add china_ip_route 103.76.64.0/22 -add china_ip_route 103.76.68.0/22 -add china_ip_route 103.76.72.0/22 -add china_ip_route 103.76.84.0/22 -add china_ip_route 103.76.92.0/22 -add china_ip_route 103.76.216.0/22 -add china_ip_route 103.76.220.0/22 -add china_ip_route 103.76.224.0/22 -add china_ip_route 103.77.28.0/22 -add china_ip_route 103.77.52.0/22 -add china_ip_route 103.77.56.0/22 -add china_ip_route 103.77.72.0/22 -add china_ip_route 103.77.88.0/22 -add china_ip_route 103.77.92.0/22 -add china_ip_route 103.77.132.0/22 -add china_ip_route 103.77.148.0/22 -add china_ip_route 103.77.220.0/22 -add china_ip_route 103.78.56.0/22 -add china_ip_route 103.78.60.0/22 -add china_ip_route 103.78.64.0/22 -add china_ip_route 103.78.68.0/22 -add china_ip_route 103.78.124.0/22 -add china_ip_route 103.78.172.0/22 -add china_ip_route 103.78.176.0/22 -add china_ip_route 103.78.196.0/22 -add china_ip_route 103.78.228.0/22 -add china_ip_route 103.79.24.0/22 -add china_ip_route 103.79.28.0/22 -add china_ip_route 103.79.36.0/22 -add china_ip_route 103.79.40.0/22 -add china_ip_route 103.79.44.0/22 -add china_ip_route 103.79.52.0/22 -add china_ip_route 103.79.56.0/22 -add china_ip_route 103.79.60.0/22 -add china_ip_route 103.79.64.0/22 -add china_ip_route 103.79.68.0/22 -add china_ip_route 103.79.80.0/22 -add china_ip_route 103.79.84.0/22 -add china_ip_route 103.79.120.0/22 -add china_ip_route 103.79.136.0/22 -add china_ip_route 103.79.188.0/22 -add china_ip_route 103.79.192.0/22 -add china_ip_route 103.79.196.0/22 -add china_ip_route 103.79.200.0/22 -add china_ip_route 103.79.204.0/22 -add china_ip_route 103.79.208.0/22 -add china_ip_route 103.79.212.0/22 -add china_ip_route 103.79.240.0/22 -add china_ip_route 103.80.24.0/22 -add china_ip_route 103.80.28.0/22 -add china_ip_route 103.80.44.0/22 -add china_ip_route 103.80.72.0/22 -add china_ip_route 103.80.176.0/22 -add china_ip_route 103.80.180.0/22 -add china_ip_route 103.80.184.0/22 -add china_ip_route 103.80.192.0/22 -add china_ip_route 103.80.200.0/22 -add china_ip_route 103.80.232.0/22 -add china_ip_route 103.81.4.0/22 -add china_ip_route 103.81.8.0/22 -add china_ip_route 103.81.16.0/22 -add china_ip_route 103.81.20.0/22 -add china_ip_route 103.81.44.0/22 -add china_ip_route 103.81.48.0/22 -add china_ip_route 103.81.96.0/22 -add china_ip_route 103.81.120.0/22 -add china_ip_route 103.81.148.0/22 -add china_ip_route 103.81.164.0/22 -add china_ip_route 103.81.168.0/22 -add china_ip_route 103.81.183.0/24 -add china_ip_route 103.81.184.0/22 -add china_ip_route 103.81.200.0/22 -add china_ip_route 103.81.232.0/22 -add china_ip_route 103.82.52.0/22 -add china_ip_route 103.82.60.0/22 -add china_ip_route 103.82.68.0/22 -add china_ip_route 103.82.84.0/22 -add china_ip_route 103.82.104.0/22 -add china_ip_route 103.82.224.0/22 -add china_ip_route 103.82.236.0/22 -add china_ip_route 103.83.44.0/22 -add china_ip_route 103.83.52.0/22 -add china_ip_route 103.83.60.0/22 -add china_ip_route 103.83.64.0/22 -add china_ip_route 103.83.72.0/22 -add china_ip_route 103.83.112.0/22 -add china_ip_route 103.83.120.0/22 -add china_ip_route 103.83.180.0/22 -add china_ip_route 103.84.0.0/22 -add china_ip_route 103.84.12.0/22 -add china_ip_route 103.84.16.0/22 -add china_ip_route 103.84.20.0/22 -add china_ip_route 103.84.24.0/22 -add china_ip_route 103.84.28.0/22 -add china_ip_route 103.84.48.0/22 -add china_ip_route 103.84.64.0/22 -add china_ip_route 103.84.72.0/22 -add china_ip_route 103.84.92.0/22 -add china_ip_route 103.84.108.0/22 -add china_ip_route 103.84.136.0/22 -add china_ip_route 103.85.20.0/22 -add china_ip_route 103.85.24.0/22 -add china_ip_route 103.85.44.0/22 -add china_ip_route 103.85.48.0/22 -add china_ip_route 103.85.84.0/22 -add china_ip_route 103.85.136.0/22 -add china_ip_route 103.85.144.0/22 -add china_ip_route 103.85.164.0/22 -add china_ip_route 103.85.168.0/22 -add china_ip_route 103.85.172.0/22 -add china_ip_route 103.85.176.0/22 -add china_ip_route 103.85.224.0/22 -add china_ip_route 103.86.28.0/22 -add china_ip_route 103.86.32.0/22 -add china_ip_route 103.86.44.0/22 -add china_ip_route 103.86.60.0/22 -add china_ip_route 103.86.80.0/22 -add china_ip_route 103.86.84.0/22 -add china_ip_route 103.86.204.0/22 -add china_ip_route 103.86.208.0/22 -add china_ip_route 103.86.212.0/22 -add china_ip_route 103.86.216.0/22 -add china_ip_route 103.86.220.0/22 -add china_ip_route 103.86.224.0/22 -add china_ip_route 103.86.228.0/22 -add china_ip_route 103.86.232.0/22 -add china_ip_route 103.86.236.0/22 -add china_ip_route 103.86.240.0/22 -add china_ip_route 103.86.244.0/22 -add china_ip_route 103.86.248.0/22 -add china_ip_route 103.86.252.0/22 -add china_ip_route 103.87.0.0/22 -add china_ip_route 103.87.4.0/22 -add china_ip_route 103.87.20.0/22 -add china_ip_route 103.87.32.0/22 -add china_ip_route 103.87.72.0/22 -add china_ip_route 103.87.96.0/22 -add china_ip_route 103.87.132.0/22 -add china_ip_route 103.87.180.0/22 -add china_ip_route 103.87.224.0/22 -add china_ip_route 103.88.4.0/22 -add china_ip_route 103.88.8.0/22 -add china_ip_route 103.88.12.0/22 -add china_ip_route 103.88.16.0/22 -add china_ip_route 103.88.20.0/22 -add china_ip_route 103.88.32.0/22 -add china_ip_route 103.88.36.0/22 -add china_ip_route 103.88.60.0/22 -add china_ip_route 103.88.64.0/22 -add china_ip_route 103.88.72.0/22 -add china_ip_route 103.88.96.0/22 -add china_ip_route 103.88.164.0/22 -add china_ip_route 103.88.176.0/22 -add china_ip_route 103.88.184.0/22 -add china_ip_route 103.88.188.0/22 -add china_ip_route 103.88.212.0/22 -add china_ip_route 103.89.28.0/22 -add china_ip_route 103.89.96.0/22 -add china_ip_route 103.89.100.0/22 -add china_ip_route 103.89.104.0/22 -add china_ip_route 103.89.108.0/22 -add china_ip_route 103.89.112.0/22 -add china_ip_route 103.89.116.0/22 -add china_ip_route 103.89.148.0/22 -add china_ip_route 103.89.172.0/22 -add china_ip_route 103.89.184.0/22 -add china_ip_route 103.89.188.0/22 -add china_ip_route 103.89.192.0/22 -add china_ip_route 103.89.196.0/22 -add china_ip_route 103.89.200.0/22 -add china_ip_route 103.89.204.0/22 -add china_ip_route 103.89.208.0/22 -add china_ip_route 103.89.212.0/22 -add china_ip_route 103.89.216.0/22 -add china_ip_route 103.89.220.0/22 -add china_ip_route 103.89.224.0/22 -add china_ip_route 103.89.228.0/22 -add china_ip_route 103.90.52.0/22 -add china_ip_route 103.90.92.0/22 -add china_ip_route 103.90.100.0/22 -add china_ip_route 103.90.104.0/22 -add china_ip_route 103.90.108.0/22 -add china_ip_route 103.90.112.0/22 -add china_ip_route 103.90.116.0/22 -add china_ip_route 103.90.120.0/22 -add china_ip_route 103.90.124.0/22 -add china_ip_route 103.90.128.0/22 -add china_ip_route 103.90.132.0/22 -add china_ip_route 103.90.152.0/22 -add china_ip_route 103.90.168.0/22 -add china_ip_route 103.90.173.0/24 -add china_ip_route 103.90.176.0/22 -add china_ip_route 103.90.188.0/22 -add china_ip_route 103.90.192.0/22 -add china_ip_route 103.91.36.0/22 -add china_ip_route 103.91.40.0/22 -add china_ip_route 103.91.108.0/22 -add china_ip_route 103.91.152.0/22 -add china_ip_route 103.91.176.0/22 -add china_ip_route 103.91.200.0/22 -add china_ip_route 103.91.208.0/22 -add china_ip_route 103.91.212.0/22 -add china_ip_route 103.91.219.0/24 -add china_ip_route 103.91.236.0/22 -add china_ip_route 103.91.252.0/22 -add china_ip_route 103.92.0.0/22 -add china_ip_route 103.92.4.0/22 -add china_ip_route 103.92.8.0/22 -add china_ip_route 103.92.12.0/22 -add china_ip_route 103.92.48.0/22 -add china_ip_route 103.92.52.0/22 -add china_ip_route 103.92.56.0/22 -add china_ip_route 103.92.60.0/22 -add china_ip_route 103.92.64.0/22 -add china_ip_route 103.92.68.0/22 -add china_ip_route 103.92.72.0/22 -add china_ip_route 103.92.76.0/22 -add china_ip_route 103.92.80.0/22 -add china_ip_route 103.92.86.0/24 -add china_ip_route 103.92.88.0/22 -add china_ip_route 103.92.108.0/22 -add china_ip_route 103.92.124.0/22 -add china_ip_route 103.92.128.0/24 -add china_ip_route 103.92.132.0/22 -add china_ip_route 103.92.156.0/22 -add china_ip_route 103.92.164.0/22 -add china_ip_route 103.92.168.0/22 -add china_ip_route 103.92.172.0/22 -add china_ip_route 103.92.176.0/22 -add china_ip_route 103.92.180.0/22 -add china_ip_route 103.92.184.0/22 -add china_ip_route 103.92.188.0/22 -add china_ip_route 103.92.192.0/22 -add china_ip_route 103.92.236.0/22 -add china_ip_route 103.92.240.0/22 -add china_ip_route 103.92.244.0/22 -add china_ip_route 103.92.248.0/22 -add china_ip_route 103.92.252.0/22 -add china_ip_route 103.93.0.0/22 -add china_ip_route 103.93.4.0/22 -add china_ip_route 103.93.28.0/22 -add china_ip_route 103.93.76.0/22 -add china_ip_route 103.93.84.0/22 -add china_ip_route 103.93.152.0/22 -add china_ip_route 103.93.180.0/22 -add china_ip_route 103.93.204.0/22 -add china_ip_route 103.94.12.0/22 -add china_ip_route 103.94.20.0/22 -add china_ip_route 103.94.28.0/22 -add china_ip_route 103.94.32.0/22 -add china_ip_route 103.94.36.0/22 -add china_ip_route 103.94.40.0/22 -add china_ip_route 103.94.44.0/22 -add china_ip_route 103.94.72.0/22 -add china_ip_route 103.94.88.0/22 -add china_ip_route 103.94.116.0/22 -add china_ip_route 103.94.160.0/22 -add china_ip_route 103.94.180.0/22 -add china_ip_route 103.94.200.0/22 -add china_ip_route 103.95.28.0/22 -add china_ip_route 103.95.52.0/22 -add china_ip_route 103.95.64.0/22 -add china_ip_route 103.95.68.0/22 -add china_ip_route 103.95.88.0/22 -add china_ip_route 103.95.92.0/22 -add china_ip_route 103.95.116.0/22 -add china_ip_route 103.95.128.0/22 -add china_ip_route 103.95.136.0/22 -add china_ip_route 103.95.140.0/22 -add china_ip_route 103.95.144.0/22 -add china_ip_route 103.95.152.0/22 -add china_ip_route 103.95.207.0/24 -add china_ip_route 103.95.216.0/22 -add china_ip_route 103.95.220.0/22 -add china_ip_route 103.95.224.0/22 -add china_ip_route 103.95.236.0/22 -add china_ip_route 103.95.240.0/22 -add china_ip_route 103.95.244.0/22 -add china_ip_route 103.95.248.0/22 -add china_ip_route 103.95.252.0/22 -add china_ip_route 103.96.0.0/22 -add china_ip_route 103.96.8.0/22 -add china_ip_route 103.96.80.0/22 -add china_ip_route 103.96.124.0/22 -add china_ip_route 103.96.136.0/22 -add china_ip_route 103.96.140.0/24 -add china_ip_route 103.96.148.0/22 -add china_ip_route 103.96.152.0/22 -add china_ip_route 103.96.156.0/22 -add china_ip_route 103.96.160.0/22 -add china_ip_route 103.96.164.0/22 -add china_ip_route 103.96.168.0/22 -add china_ip_route 103.96.172.0/22 -add china_ip_route 103.96.176.0/22 -add china_ip_route 103.96.180.0/22 -add china_ip_route 103.96.184.0/22 -add china_ip_route 103.96.188.0/22 -add china_ip_route 103.96.192.0/22 -add china_ip_route 103.96.196.0/22 -add china_ip_route 103.96.200.0/22 -add china_ip_route 103.96.204.0/22 -add china_ip_route 103.96.208.0/22 -add china_ip_route 103.96.212.0/22 -add china_ip_route 103.96.216.0/22 -add china_ip_route 103.97.8.0/22 -add china_ip_route 103.97.12.0/22 -add china_ip_route 103.97.16.0/22 -add china_ip_route 103.97.20.0/22 -add china_ip_route 103.97.24.0/22 -add china_ip_route 103.97.28.0/22 -add china_ip_route 103.97.32.0/22 -add china_ip_route 103.97.36.0/22 -add china_ip_route 103.97.40.0/22 -add china_ip_route 103.97.56.0/22 -add china_ip_route 103.97.60.0/22 -add china_ip_route 103.97.64.0/22 -add china_ip_route 103.97.68.0/22 -add china_ip_route 103.97.72.0/22 -add china_ip_route 103.97.80.0/22 -add china_ip_route 103.97.112.0/22 -add china_ip_route 103.97.116.0/22 -add china_ip_route 103.97.128.0/22 -add china_ip_route 103.97.144.0/22 -add china_ip_route 103.97.148.0/22 -add china_ip_route 103.97.188.0/22 -add china_ip_route 103.97.192.0/22 -add china_ip_route 103.97.228.0/23 -add china_ip_route 103.98.28.0/23 -add china_ip_route 103.98.40.0/22 -add china_ip_route 103.98.44.0/22 -add china_ip_route 103.98.48.0/22 -add china_ip_route 103.98.56.0/22 -add china_ip_route 103.98.80.0/22 -add china_ip_route 103.98.88.0/22 -add china_ip_route 103.98.92.0/22 -add china_ip_route 103.98.96.0/22 -add china_ip_route 103.98.100.0/22 -add china_ip_route 103.98.124.0/22 -add china_ip_route 103.98.136.0/22 -add china_ip_route 103.98.140.0/22 -add china_ip_route 103.98.144.0/22 -add china_ip_route 103.98.164.0/22 -add china_ip_route 103.98.168.0/22 -add china_ip_route 103.98.180.0/22 -add china_ip_route 103.98.196.0/22 -add china_ip_route 103.98.216.0/22 -add china_ip_route 103.98.220.0/22 -add china_ip_route 103.98.224.0/22 -add china_ip_route 103.98.228.0/22 -add china_ip_route 103.98.232.0/22 -add china_ip_route 103.98.240.0/22 -add china_ip_route 103.98.244.0/22 -add china_ip_route 103.98.248.0/22 -add china_ip_route 103.98.252.0/22 -add china_ip_route 103.99.40.0/23 -add china_ip_route 103.99.52.0/22 -add china_ip_route 103.99.56.0/22 -add china_ip_route 103.99.60.0/22 -add china_ip_route 103.99.76.0/22 -add china_ip_route 103.99.104.0/22 -add china_ip_route 103.99.116.0/22 -add china_ip_route 103.99.120.0/22 -add china_ip_route 103.99.152.0/22 -add china_ip_route 103.99.220.0/22 -add china_ip_route 103.99.232.0/22 -add china_ip_route 103.99.236.0/22 -add china_ip_route 103.100.0.0/22 -add china_ip_route 103.100.32.0/22 -add china_ip_route 103.100.40.0/22 -add china_ip_route 103.100.48.0/22 -add china_ip_route 103.100.52.0/22 -add china_ip_route 103.100.56.0/22 -add china_ip_route 103.100.60.0/22 -add china_ip_route 103.100.64.0/22 -add china_ip_route 103.100.68.0/22 -add china_ip_route 103.100.88.0/22 -add china_ip_route 103.100.116.0/22 -add china_ip_route 103.100.140.0/22 -add china_ip_route 103.100.144.0/22 -add china_ip_route 103.100.236.0/22 -add china_ip_route 103.100.240.0/22 -add china_ip_route 103.100.248.0/22 -add china_ip_route 103.100.252.0/22 -add china_ip_route 103.101.4.0/22 -add china_ip_route 103.101.8.0/22 -add china_ip_route 103.101.12.0/22 -add china_ip_route 103.101.28.0/22 -add china_ip_route 103.101.60.0/22 -add china_ip_route 103.101.120.0/22 -add china_ip_route 103.101.124.0/22 -add china_ip_route 103.101.144.0/22 -add china_ip_route 103.101.148.0/22 -add china_ip_route 103.101.153.0/24 -add china_ip_route 103.101.180.0/22 -add china_ip_route 103.101.184.0/22 -add china_ip_route 103.102.76.0/22 -add china_ip_route 103.102.80.0/22 -add china_ip_route 103.102.168.0/22 -add china_ip_route 103.102.172.0/22 -add china_ip_route 103.102.180.0/22 -add china_ip_route 103.102.184.0/22 -add china_ip_route 103.102.188.0/22 -add china_ip_route 103.102.192.0/22 -add china_ip_route 103.102.196.0/22 -add china_ip_route 103.102.200.0/22 -add china_ip_route 103.102.208.0/22 -add china_ip_route 103.102.212.0/22 -add china_ip_route 103.103.12.0/22 -add china_ip_route 103.103.16.0/22 -add china_ip_route 103.103.36.0/22 -add china_ip_route 103.103.68.0/22 -add china_ip_route 103.103.72.0/22 -add china_ip_route 103.103.176.0/22 -add china_ip_route 103.103.188.0/22 -add china_ip_route 103.103.200.0/22 -add china_ip_route 103.103.204.0/22 -add china_ip_route 103.103.220.0/22 -add china_ip_route 103.103.224.0/22 -add china_ip_route 103.103.228.0/22 -add china_ip_route 103.103.232.0/22 -add china_ip_route 103.103.248.0/22 -add china_ip_route 103.103.252.0/22 -add china_ip_route 103.104.0.0/22 -add china_ip_route 103.104.4.0/22 -add china_ip_route 103.104.36.0/22 -add china_ip_route 103.104.40.0/22 -add china_ip_route 103.104.64.0/22 -add china_ip_route 103.104.104.0/22 -add china_ip_route 103.104.152.0/22 -add china_ip_route 103.104.168.0/22 -add china_ip_route 103.104.172.0/22 -add china_ip_route 103.104.188.0/22 -add china_ip_route 103.104.198.0/23 -add china_ip_route 103.104.252.0/22 -add china_ip_route 103.105.0.0/22 -add china_ip_route 103.105.4.0/22 -add china_ip_route 103.105.12.0/22 -add china_ip_route 103.105.16.0/22 -add china_ip_route 103.105.23.0/24 -add china_ip_route 103.105.60.0/22 -add china_ip_route 103.105.116.0/22 -add china_ip_route 103.105.132.0/22 -add china_ip_route 103.105.180.0/22 -add china_ip_route 103.105.184.0/22 -add china_ip_route 103.105.200.0/22 -add china_ip_route 103.105.204.0/22 -add china_ip_route 103.105.220.0/22 -add china_ip_route 103.106.36.0/22 -add china_ip_route 103.106.40.0/22 -add china_ip_route 103.106.44.0/22 -add china_ip_route 103.106.60.0/22 -add china_ip_route 103.106.68.0/22 -add china_ip_route 103.106.96.0/22 -add china_ip_route 103.106.120.0/22 -add china_ip_route 103.106.128.0/22 -add china_ip_route 103.106.132.0/22 -add china_ip_route 103.106.160.0/22 -add china_ip_route 103.106.188.0/22 -add china_ip_route 103.106.196.0/22 -add china_ip_route 103.106.202.0/23 -add china_ip_route 103.106.212.0/22 -add china_ip_route 103.106.244.0/22 -add china_ip_route 103.106.252.0/22 -add china_ip_route 103.107.0.0/22 -add china_ip_route 103.107.8.0/24 -add china_ip_route 103.107.28.0/22 -add china_ip_route 103.107.32.0/22 -add china_ip_route 103.107.44.0/22 -add china_ip_route 103.107.72.0/22 -add china_ip_route 103.107.108.0/22 -add china_ip_route 103.107.164.0/22 -add china_ip_route 103.107.168.0/22 -add china_ip_route 103.107.188.0/22 -add china_ip_route 103.107.192.0/22 -add china_ip_route 103.107.208.0/22 -add china_ip_route 103.107.212.0/22 -add china_ip_route 103.107.216.0/22 -add china_ip_route 103.107.220.0/22 -add china_ip_route 103.108.52.0/22 -add china_ip_route 103.108.160.0/22 -add china_ip_route 103.108.164.0/22 -add china_ip_route 103.108.184.0/23 -add china_ip_route 103.108.188.0/23 -add china_ip_route 103.108.192.0/22 -add china_ip_route 103.108.196.0/22 -add china_ip_route 103.108.208.0/22 -add china_ip_route 103.108.212.0/22 -add china_ip_route 103.108.224.0/22 -add china_ip_route 103.108.244.0/22 -add china_ip_route 103.108.251.0/24 -add china_ip_route 103.109.20.0/22 -add china_ip_route 103.109.48.0/22 -add china_ip_route 103.109.88.0/22 -add china_ip_route 103.109.106.0/23 -add china_ip_route 103.109.248.0/22 -add china_ip_route 103.110.80.0/23 -add china_ip_route 103.110.92.0/22 -add china_ip_route 103.110.116.0/22 -add china_ip_route 103.110.127.0/24 -add china_ip_route 103.110.128.0/23 -add china_ip_route 103.110.132.0/22 -add china_ip_route 103.110.136.0/22 -add china_ip_route 103.110.152.0/22 -add china_ip_route 103.110.156.0/22 -add china_ip_route 103.110.188.0/22 -add china_ip_route 103.110.204.0/22 -add china_ip_route 103.111.64.0/22 -add china_ip_route 103.111.172.0/22 -add china_ip_route 103.111.252.0/22 -add china_ip_route 103.112.28.0/22 -add china_ip_route 103.112.68.0/22 -add china_ip_route 103.112.72.0/22 -add china_ip_route 103.112.88.0/22 -add china_ip_route 103.112.92.0/22 -add china_ip_route 103.112.96.0/22 -add china_ip_route 103.112.108.0/22 -add china_ip_route 103.112.112.0/22 -add china_ip_route 103.112.116.0/22 -add china_ip_route 103.112.140.0/22 -add china_ip_route 103.112.172.0/22 -add china_ip_route 103.112.184.0/22 -add china_ip_route 103.112.208.0/22 -add china_ip_route 103.113.4.0/22 -add china_ip_route 103.113.92.0/22 -add china_ip_route 103.113.144.0/22 -add china_ip_route 103.113.220.0/22 -add china_ip_route 103.113.232.0/22 -add china_ip_route 103.113.236.0/22 -add china_ip_route 103.114.4.0/22 -add china_ip_route 103.114.28.0/22 -add china_ip_route 103.114.68.0/22 -add china_ip_route 103.114.72.0/22 -add china_ip_route 103.114.100.0/22 -add china_ip_route 103.114.132.0/22 -add china_ip_route 103.114.148.0/22 -add china_ip_route 103.114.156.0/22 -add china_ip_route 103.114.176.0/22 -add china_ip_route 103.114.212.0/22 -add china_ip_route 103.114.236.0/22 -add china_ip_route 103.114.240.0/22 -add china_ip_route 103.115.16.0/22 -add china_ip_route 103.115.40.0/22 -add china_ip_route 103.115.44.0/22 -add china_ip_route 103.115.48.0/22 -add china_ip_route 103.115.52.0/22 -add china_ip_route 103.115.56.0/22 -add china_ip_route 103.115.60.0/22 -add china_ip_route 103.115.64.0/22 -add china_ip_route 103.115.68.0/22 -add china_ip_route 103.115.92.0/22 -add china_ip_route 103.115.120.0/22 -add china_ip_route 103.115.148.0/22 -add china_ip_route 103.115.204.0/23 -add china_ip_route 103.115.248.0/22 -add china_ip_route 103.116.20.0/22 -add china_ip_route 103.116.40.0/22 -add china_ip_route 103.116.64.0/22 -add china_ip_route 103.116.72.0/22 -add china_ip_route 103.116.76.0/22 -add china_ip_route 103.116.92.0/22 -add china_ip_route 103.116.120.0/22 -add china_ip_route 103.116.128.0/22 -add china_ip_route 103.116.132.0/23 -add china_ip_route 103.116.148.0/22 -add china_ip_route 103.116.184.0/22 -add china_ip_route 103.116.206.0/23 -add china_ip_route 103.116.220.0/22 -add china_ip_route 103.116.224.0/22 -add china_ip_route 103.116.228.0/22 -add china_ip_route 103.117.16.0/22 -add china_ip_route 103.117.72.0/22 -add china_ip_route 103.117.88.0/22 -add china_ip_route 103.117.132.0/22 -add china_ip_route 103.117.136.0/22 -add china_ip_route 103.117.188.0/22 -add china_ip_route 103.117.220.0/22 -add china_ip_route 103.118.36.0/22 -add china_ip_route 103.118.52.0/22 -add china_ip_route 103.118.56.0/22 -add china_ip_route 103.118.60.0/22 -add china_ip_route 103.118.64.0/22 -add china_ip_route 103.118.68.0/22 -add china_ip_route 103.118.72.0/22 -add china_ip_route 103.118.88.0/22 -add china_ip_route 103.118.173.0/24 -add china_ip_route 103.118.192.0/22 -add china_ip_route 103.118.196.0/22 -add china_ip_route 103.118.200.0/22 -add china_ip_route 103.118.204.0/22 -add china_ip_route 103.118.208.0/22 -add china_ip_route 103.118.212.0/22 -add china_ip_route 103.118.216.0/22 -add china_ip_route 103.118.220.0/22 -add china_ip_route 103.118.240.0/22 -add china_ip_route 103.118.244.0/22 -add china_ip_route 103.118.248.0/22 -add china_ip_route 103.118.252.0/22 -add china_ip_route 103.119.0.0/22 -add china_ip_route 103.119.12.0/22 -add china_ip_route 103.119.16.0/22 -add china_ip_route 103.119.28.0/22 -add china_ip_route 103.119.44.0/22 -add china_ip_route 103.119.104.0/22 -add china_ip_route 103.119.115.0/24 -add china_ip_route 103.119.156.0/22 -add china_ip_route 103.119.180.0/22 -add china_ip_route 103.119.200.0/22 -add china_ip_route 103.119.224.0/22 -add china_ip_route 103.120.52.0/22 -add china_ip_route 103.120.72.0/22 -add china_ip_route 103.120.88.0/22 -add china_ip_route 103.120.96.0/22 -add china_ip_route 103.120.100.0/22 -add china_ip_route 103.120.140.0/22 -add china_ip_route 103.120.196.0/22 -add china_ip_route 103.120.224.0/22 -add china_ip_route 103.121.52.0/22 -add china_ip_route 103.121.92.0/22 -add china_ip_route 103.121.160.0/22 -add china_ip_route 103.121.164.0/22 -add china_ip_route 103.121.250.0/24 -add china_ip_route 103.121.252.0/22 -add china_ip_route 103.122.48.0/22 -add china_ip_route 103.122.176.0/22 -add china_ip_route 103.122.192.0/22 -add china_ip_route 103.122.240.0/22 -add china_ip_route 103.123.4.0/22 -add china_ip_route 103.123.56.0/22 -add china_ip_route 103.123.88.0/22 -add china_ip_route 103.123.92.0/22 -add china_ip_route 103.123.116.0/22 -add china_ip_route 103.123.160.0/22 -add china_ip_route 103.123.176.0/22 -add china_ip_route 103.123.200.0/22 -add china_ip_route 103.123.204.0/22 -add china_ip_route 103.123.208.0/22 -add china_ip_route 103.123.212.0/22 -add china_ip_route 103.124.24.0/22 -add china_ip_route 103.124.48.0/22 -add china_ip_route 103.124.64.0/22 -add china_ip_route 103.124.212.0/22 -add china_ip_route 103.124.216.0/22 -add china_ip_route 103.125.20.0/22 -add china_ip_route 103.125.44.0/22 -add china_ip_route 103.125.132.0/22 -add china_ip_route 103.125.164.0/22 -add china_ip_route 103.125.196.0/22 -add china_ip_route 103.125.236.0/22 -add china_ip_route 103.125.248.0/22 -add china_ip_route 103.126.0.0/22 -add china_ip_route 103.126.16.0/22 -add china_ip_route 103.126.44.0/22 -add china_ip_route 103.126.100.0/22 -add china_ip_route 103.126.124.0/22 -add china_ip_route 103.126.128.0/22 -add china_ip_route 103.126.132.0/22 -add china_ip_route 103.126.208.0/22 -add china_ip_route 103.129.52.0/22 -add china_ip_route 103.130.132.0/22 -add china_ip_route 103.130.152.0/24 -add china_ip_route 103.130.160.0/22 -add china_ip_route 103.130.228.0/22 -add china_ip_route 103.131.20.0/22 -add china_ip_route 103.131.36.0/22 -add china_ip_route 103.131.152.0/22 -add china_ip_route 103.131.168.0/22 -add china_ip_route 103.131.176.0/22 -add china_ip_route 103.131.224.0/22 -add china_ip_route 103.131.228.0/22 -add china_ip_route 103.131.240.0/22 -add china_ip_route 103.132.60.0/22 -add china_ip_route 103.132.64.0/22 -add china_ip_route 103.132.68.0/22 -add china_ip_route 103.132.72.0/22 -add china_ip_route 103.132.76.0/22 -add china_ip_route 103.132.80.0/22 -add china_ip_route 103.132.104.0/22 -add china_ip_route 103.132.108.0/22 -add china_ip_route 103.132.112.0/22 -add china_ip_route 103.132.116.0/22 -add china_ip_route 103.132.120.0/22 -add china_ip_route 103.132.160.0/22 -add china_ip_route 103.132.164.0/22 -add china_ip_route 103.132.188.0/22 -add china_ip_route 103.132.208.0/22 -add china_ip_route 103.132.212.0/22 -add china_ip_route 103.132.234.0/23 -add china_ip_route 103.133.12.0/22 -add china_ip_route 103.133.40.0/22 -add china_ip_route 103.133.128.0/22 -add china_ip_route 103.133.136.0/22 -add china_ip_route 103.133.176.0/22 -add china_ip_route 103.133.232.0/22 -add china_ip_route 103.134.12.0/24 -add china_ip_route 103.134.196.0/22 -add china_ip_route 103.135.80.0/22 -add china_ip_route 103.135.124.0/22 -add china_ip_route 103.135.148.0/22 -add china_ip_route 103.135.156.0/22 -add china_ip_route 103.135.160.0/22 -add china_ip_route 103.135.164.0/22 -add china_ip_route 103.135.176.0/22 -add china_ip_route 103.135.184.0/22 -add china_ip_route 103.135.192.0/22 -add china_ip_route 103.135.196.0/22 -add china_ip_route 103.135.236.0/22 -add china_ip_route 103.136.128.0/22 -add china_ip_route 103.136.232.0/22 -add china_ip_route 103.137.58.0/23 -add china_ip_route 103.137.60.0/24 -add china_ip_route 103.137.76.0/22 -add china_ip_route 103.137.136.0/23 -add china_ip_route 103.137.149.0/24 -add china_ip_route 103.137.180.0/22 -add china_ip_route 103.137.236.0/22 -add china_ip_route 103.138.2.0/23 -add china_ip_route 103.138.12.0/23 -add china_ip_route 103.138.80.0/22 -add china_ip_route 103.138.134.0/23 -add china_ip_route 103.138.156.0/23 -add china_ip_route 103.138.208.0/23 -add china_ip_route 103.138.220.0/23 -add china_ip_route 103.138.246.0/23 -add china_ip_route 103.138.248.0/23 -add china_ip_route 103.139.0.0/23 -add china_ip_route 103.139.2.0/23 -add china_ip_route 103.139.22.0/23 -add china_ip_route 103.139.113.0/24 -add china_ip_route 103.139.134.0/23 -add china_ip_route 103.139.136.0/23 -add china_ip_route 103.139.172.0/23 -add china_ip_route 103.139.204.0/23 -add china_ip_route 103.139.212.0/23 -add china_ip_route 103.140.8.0/23 -add china_ip_route 103.140.14.0/23 -add china_ip_route 103.140.70.0/23 -add china_ip_route 103.140.126.0/23 -add china_ip_route 103.140.140.0/23 -add china_ip_route 103.140.144.0/23 -add china_ip_route 103.140.152.0/23 -add china_ip_route 103.140.192.0/23 -add china_ip_route 103.140.228.0/23 -add china_ip_route 103.141.10.0/23 -add china_ip_route 103.141.58.0/23 -add china_ip_route 103.141.128.0/23 -add china_ip_route 103.141.186.0/23 -add china_ip_route 103.141.242.0/23 -add china_ip_route 103.142.28.0/23 -add china_ip_route 103.142.58.0/23 -add china_ip_route 103.142.82.0/23 -add china_ip_route 103.142.96.0/23 -add china_ip_route 103.142.102.0/23 -add china_ip_route 103.142.122.0/23 -add china_ip_route 103.142.128.0/23 -add china_ip_route 103.142.140.0/23 -add china_ip_route 103.142.154.0/23 -add china_ip_route 103.142.156.0/23 -add china_ip_route 103.142.172.0/23 -add china_ip_route 103.142.180.0/23 -add china_ip_route 103.142.186.0/23 -add china_ip_route 103.142.190.0/23 -add china_ip_route 103.142.220.0/23 -add china_ip_route 103.142.230.0/24 -add china_ip_route 103.142.234.0/23 -add china_ip_route 103.142.238.0/23 -add china_ip_route 103.142.248.0/23 -add china_ip_route 103.143.16.0/23 -add china_ip_route 103.143.18.0/23 -add china_ip_route 103.143.31.0/24 -add china_ip_route 103.143.74.0/23 -add china_ip_route 103.143.120.0/23 -add china_ip_route 103.143.124.0/23 -add china_ip_route 103.143.132.0/23 -add china_ip_route 103.143.134.0/23 -add china_ip_route 103.143.174.0/23 -add china_ip_route 103.143.228.0/23 -add china_ip_route 103.144.40.0/23 -add china_ip_route 103.144.52.0/23 -add china_ip_route 103.144.66.0/23 -add china_ip_route 103.144.70.0/23 -add china_ip_route 103.144.72.0/23 -add china_ip_route 103.144.108.0/23 -add china_ip_route 103.144.136.0/23 -add china_ip_route 103.144.148.0/23 -add china_ip_route 103.144.158.0/23 -add china_ip_route 103.144.240.0/23 -add china_ip_route 103.145.38.0/23 -add china_ip_route 103.145.40.0/23 -add china_ip_route 103.145.42.0/23 -add china_ip_route 103.145.60.0/23 -add china_ip_route 103.145.72.0/23 -add china_ip_route 103.145.80.0/23 -add china_ip_route 103.145.86.0/23 -add china_ip_route 103.145.92.0/23 -add china_ip_route 103.145.94.0/23 -add china_ip_route 103.145.98.0/23 -add china_ip_route 103.145.106.0/23 -add china_ip_route 103.145.122.0/23 -add china_ip_route 103.145.188.0/23 -add china_ip_route 103.145.190.0/23 -add china_ip_route 103.146.6.0/23 -add china_ip_route 103.146.72.0/23 -add china_ip_route 103.146.88.0/23 -add china_ip_route 103.146.90.0/23 -add china_ip_route 103.146.124.0/23 -add china_ip_route 103.146.126.0/23 -add china_ip_route 103.146.138.0/23 -add china_ip_route 103.146.230.0/23 -add china_ip_route 103.146.236.0/23 -add china_ip_route 103.146.252.0/23 -add china_ip_route 103.147.12.0/23 -add china_ip_route 103.147.124.0/23 -add china_ip_route 103.147.198.0/23 -add china_ip_route 103.147.206.0/23 -add china_ip_route 103.148.174.0/23 -add china_ip_route 103.149.6.0/23 -add china_ip_route 103.149.17.0/24 -add china_ip_route 103.149.44.0/23 -add china_ip_route 103.149.110.0/23 -add china_ip_route 103.149.132.0/23 -add china_ip_route 103.149.144.0/23 -add china_ip_route 103.149.156.0/23 -add china_ip_route 103.149.181.0/24 -add china_ip_route 103.149.210.0/23 -add china_ip_route 103.149.214.0/23 -add china_ip_route 103.149.220.0/23 -add china_ip_route 103.149.242.0/23 -add china_ip_route 103.149.244.0/23 -add china_ip_route 103.149.246.0/23 -add china_ip_route 103.149.248.0/23 -add china_ip_route 103.150.24.0/23 -add china_ip_route 103.150.66.0/23 -add china_ip_route 103.150.72.0/23 -add china_ip_route 103.150.122.0/23 -add china_ip_route 103.150.126.0/23 -add china_ip_route 103.150.128.0/23 -add china_ip_route 103.150.130.0/23 -add china_ip_route 103.150.146.0/23 -add china_ip_route 103.150.164.0/23 -add china_ip_route 103.150.172.0/23 -add china_ip_route 103.150.180.0/23 -add china_ip_route 103.150.200.0/23 -add china_ip_route 103.150.210.0/23 -add china_ip_route 103.150.214.0/23 -add china_ip_route 103.150.216.0/23 -add china_ip_route 103.150.244.0/23 -add china_ip_route 103.151.4.0/23 -add china_ip_route 103.151.44.0/23 -add china_ip_route 103.151.138.0/23 -add china_ip_route 103.151.142.0/23 -add china_ip_route 103.151.148.0/23 -add china_ip_route 103.151.150.0/23 -add china_ip_route 103.151.158.0/23 -add china_ip_route 103.151.178.0/23 -add china_ip_route 103.151.206.0/23 -add china_ip_route 103.151.216.0/23 -add china_ip_route 103.151.228.0/23 -add china_ip_route 103.152.14.0/23 -add china_ip_route 103.152.24.0/23 -add china_ip_route 103.152.28.0/23 -add china_ip_route 103.152.30.0/23 -add china_ip_route 103.152.56.0/23 -add china_ip_route 103.152.76.0/23 -add china_ip_route 103.152.98.0/23 -add china_ip_route 103.152.112.0/23 -add china_ip_route 103.152.120.0/23 -add china_ip_route 103.152.122.0/23 -add china_ip_route 103.152.132.0/23 -add china_ip_route 103.152.152.0/23 -add china_ip_route 103.152.168.0/23 -add china_ip_route 103.152.170.0/23 -add china_ip_route 103.152.186.0/23 -add china_ip_route 103.152.190.0/23 -add china_ip_route 103.152.192.0/23 -add china_ip_route 103.152.200.0/23 -add china_ip_route 103.152.208.0/23 -add china_ip_route 103.152.224.0/23 -add china_ip_route 103.152.226.0/23 -add china_ip_route 103.152.246.0/23 -add china_ip_route 103.152.250.0/23 -add china_ip_route 103.153.4.0/23 -add china_ip_route 103.153.36.0/23 -add china_ip_route 103.153.98.0/23 -add china_ip_route 103.153.100.0/23 -add china_ip_route 103.153.114.0/23 -add china_ip_route 103.153.122.0/23 -add china_ip_route 103.153.128.0/23 -add china_ip_route 103.153.132.0/23 -add china_ip_route 103.153.138.0/23 -add china_ip_route 103.153.146.0/23 -add china_ip_route 103.153.160.0/23 -add china_ip_route 103.154.18.0/23 -add china_ip_route 103.154.30.0/23 -add china_ip_route 103.154.32.0/23 -add china_ip_route 103.154.40.0/23 -add china_ip_route 103.154.66.0/23 -add china_ip_route 103.154.162.0/23 -add china_ip_route 103.154.164.0/23 -add china_ip_route 103.154.168.0/23 -add china_ip_route 103.154.242.0/23 -add china_ip_route 103.155.14.0/23 -add china_ip_route 103.155.16.0/23 -add china_ip_route 103.155.34.0/23 -add china_ip_route 103.155.48.0/23 -add china_ip_route 103.155.76.0/23 -add china_ip_route 103.155.100.0/23 -add china_ip_route 103.155.110.0/23 -add china_ip_route 103.155.120.0/23 -add china_ip_route 103.155.214.0/23 -add china_ip_route 103.155.248.0/23 -add china_ip_route 103.156.24.0/23 -add china_ip_route 103.156.28.0/23 -add china_ip_route 103.156.68.0/23 -add china_ip_route 103.156.78.0/23 -add china_ip_route 103.156.104.0/23 -add china_ip_route 103.156.158.0/23 -add china_ip_route 103.156.174.0/23 -add china_ip_route 103.156.186.0/23 -add china_ip_route 103.156.228.0/23 -add china_ip_route 103.157.30.0/23 -add china_ip_route 103.157.138.0/23 -add china_ip_route 103.157.174.0/23 -add china_ip_route 103.157.212.0/23 -add china_ip_route 103.157.234.0/23 -add china_ip_route 103.157.254.0/23 -add china_ip_route 103.158.0.0/23 -add china_ip_route 103.158.8.0/23 -add china_ip_route 103.158.13.0/24 -add china_ip_route 103.158.16.0/23 -add china_ip_route 103.158.190.0/23 -add china_ip_route 103.158.200.0/23 -add china_ip_route 103.158.224.0/23 -add china_ip_route 103.159.80.0/23 -add china_ip_route 103.159.122.0/23 -add china_ip_route 103.159.124.0/23 -add china_ip_route 103.159.134.0/23 -add china_ip_route 103.159.142.0/23 -add china_ip_route 103.160.32.0/23 -add china_ip_route 103.160.34.0/23 -add china_ip_route 103.160.112.0/23 -add china_ip_route 103.160.114.0/23 -add china_ip_route 103.160.244.0/23 -add china_ip_route 103.160.254.0/23 -add china_ip_route 103.161.14.0/23 -add china_ip_route 103.161.102.0/23 -add china_ip_route 103.161.138.0/23 -add china_ip_route 103.161.208.0/23 -add china_ip_route 103.161.220.0/23 -add china_ip_route 103.161.254.0/23 -add china_ip_route 103.162.10.0/23 -add china_ip_route 103.162.32.0/23 -add china_ip_route 103.162.38.0/23 -add china_ip_route 103.162.116.0/23 -add china_ip_route 103.163.28.0/23 -add china_ip_route 103.163.32.0/23 -add china_ip_route 103.163.46.0/23 -add china_ip_route 103.163.74.0/23 -add china_ip_route 103.163.180.0/23 -add china_ip_route 103.164.4.0/23 -add china_ip_route 103.164.32.0/23 -add china_ip_route 103.164.40.0/23 -add china_ip_route 103.164.42.0/23 -add china_ip_route 103.164.64.0/23 -add china_ip_route 103.164.76.0/23 -add china_ip_route 103.164.178.0/23 -add china_ip_route 103.164.226.0/23 -add china_ip_route 103.165.44.0/23 -add china_ip_route 103.165.52.0/23 -add china_ip_route 103.165.82.0/23 -add china_ip_route 103.165.110.0/23 -add china_ip_route 103.166.20.0/23 -add china_ip_route 103.166.50.0/23 -add china_ip_route 103.166.52.0/23 -add china_ip_route 103.166.54.0/23 -add china_ip_route 103.166.84.0/23 -add china_ip_route 103.166.138.0/23 -add china_ip_route 103.166.242.0/23 -add china_ip_route 103.166.246.0/23 -add china_ip_route 103.167.0.0/23 -add china_ip_route 103.167.36.0/23 -add china_ip_route 103.168.98.0/23 -add china_ip_route 103.168.170.0/23 -add china_ip_route 103.169.50.0/23 -add china_ip_route 103.169.62.0/23 -add china_ip_route 103.169.108.0/23 -add china_ip_route 103.169.162.0/23 -add china_ip_route 103.169.202.0/23 -add china_ip_route 103.169.216.0/23 -add china_ip_route 103.170.4.0/23 -add china_ip_route 103.170.72.0/23 -add china_ip_route 103.170.134.0/23 -add china_ip_route 103.170.210.0/23 -add china_ip_route 103.170.212.0/23 -add china_ip_route 103.171.32.0/23 -add china_ip_route 103.171.166.0/23 -add china_ip_route 103.171.214.0/23 -add china_ip_route 103.172.32.0/23 -add china_ip_route 103.172.160.0/23 -add china_ip_route 103.172.191.0/24 -add china_ip_route 103.173.102.0/23 -add china_ip_route 103.173.182.0/23 -add china_ip_route 103.173.184.0/23 -add china_ip_route 103.174.94.0/23 -add china_ip_route 103.175.14.0/23 -add china_ip_route 103.175.98.0/23 -add china_ip_route 103.175.114.0/23 -add china_ip_route 103.175.118.0/23 -add china_ip_route 103.176.52.0/23 -add china_ip_route 103.176.222.0/23 -add china_ip_route 103.176.244.0/23 -add china_ip_route 103.177.28.0/23 -add china_ip_route 103.177.44.0/23 -add china_ip_route 103.177.70.0/23 -add china_ip_route 103.177.136.0/23 -add china_ip_route 103.177.162.0/23 -add china_ip_route 103.178.56.0/23 -add china_ip_route 103.192.0.0/22 -add china_ip_route 103.192.4.0/22 -add china_ip_route 103.192.8.0/22 -add china_ip_route 103.192.12.0/22 -add china_ip_route 103.192.16.0/22 -add china_ip_route 103.192.20.0/22 -add china_ip_route 103.192.24.0/22 -add china_ip_route 103.192.28.0/22 -add china_ip_route 103.192.48.0/22 -add china_ip_route 103.192.52.0/22 -add china_ip_route 103.192.56.0/22 -add china_ip_route 103.192.84.0/22 -add china_ip_route 103.192.88.0/22 -add china_ip_route 103.192.92.0/22 -add china_ip_route 103.192.96.0/22 -add china_ip_route 103.192.100.0/22 -add china_ip_route 103.192.104.0/22 -add china_ip_route 103.192.108.0/22 -add china_ip_route 103.192.112.0/22 -add china_ip_route 103.192.128.0/22 -add china_ip_route 103.192.132.0/22 -add china_ip_route 103.192.136.0/22 -add china_ip_route 103.192.140.0/22 -add china_ip_route 103.192.144.0/22 -add china_ip_route 103.192.164.0/22 -add china_ip_route 103.192.188.0/22 -add china_ip_route 103.192.208.0/22 -add china_ip_route 103.192.212.0/22 -add china_ip_route 103.192.216.0/22 -add china_ip_route 103.192.252.0/22 -add china_ip_route 103.193.40.0/22 -add china_ip_route 103.193.44.0/22 -add china_ip_route 103.193.120.0/22 -add china_ip_route 103.193.140.0/22 -add china_ip_route 103.193.160.0/22 -add china_ip_route 103.193.188.0/22 -add china_ip_route 103.193.192.0/22 -add china_ip_route 103.193.212.0/22 -add china_ip_route 103.193.216.0/22 -add china_ip_route 103.193.220.0/22 -add china_ip_route 103.193.224.0/22 -add china_ip_route 103.193.228.0/22 -add china_ip_route 103.193.232.0/22 -add china_ip_route 103.193.236.0/22 -add china_ip_route 103.193.240.0/22 -add china_ip_route 103.194.16.0/22 -add china_ip_route 103.195.104.0/22 -add china_ip_route 103.195.112.0/22 -add china_ip_route 103.195.148.0/22 -add china_ip_route 103.195.152.0/22 -add china_ip_route 103.195.160.0/22 -add china_ip_route 103.196.64.0/22 -add china_ip_route 103.196.72.0/22 -add china_ip_route 103.196.88.0/22 -add china_ip_route 103.196.92.0/22 -add china_ip_route 103.196.96.0/22 -add china_ip_route 103.196.168.0/22 -add china_ip_route 103.196.204.0/22 -add china_ip_route 103.197.180.0/22 -add china_ip_route 103.197.228.0/22 -add china_ip_route 103.198.20.0/22 -add china_ip_route 103.198.60.0/22 -add china_ip_route 103.198.64.0/22 -add china_ip_route 103.198.72.0/22 -add china_ip_route 103.198.124.0/22 -add china_ip_route 103.198.156.0/22 -add china_ip_route 103.198.180.0/22 -add china_ip_route 103.198.196.0/22 -add china_ip_route 103.198.216.0/22 -add china_ip_route 103.198.220.0/22 -add china_ip_route 103.198.224.0/22 -add china_ip_route 103.198.228.0/22 -add china_ip_route 103.198.232.0/22 -add china_ip_route 103.198.236.0/22 -add china_ip_route 103.198.240.0/22 -add china_ip_route 103.198.244.0/22 -add china_ip_route 103.199.164.0/22 -add china_ip_route 103.199.196.0/22 -add china_ip_route 103.199.228.0/22 -add china_ip_route 103.199.248.0/22 -add china_ip_route 103.199.252.0/22 -add china_ip_route 103.200.28.0/22 -add china_ip_route 103.200.52.0/22 -add china_ip_route 103.200.64.0/22 -add china_ip_route 103.200.68.0/22 -add china_ip_route 103.200.136.0/22 -add china_ip_route 103.200.140.0/22 -add china_ip_route 103.200.144.0/22 -add china_ip_route 103.200.148.0/22 -add china_ip_route 103.200.152.0/22 -add china_ip_route 103.200.156.0/22 -add china_ip_route 103.200.160.0/22 -add china_ip_route 103.200.164.0/22 -add china_ip_route 103.200.168.0/22 -add china_ip_route 103.200.172.0/22 -add china_ip_route 103.200.176.0/22 -add china_ip_route 103.200.180.0/22 -add china_ip_route 103.200.184.0/22 -add china_ip_route 103.200.188.0/22 -add china_ip_route 103.200.192.0/22 -add china_ip_route 103.200.220.0/22 -add china_ip_route 103.200.224.0/22 -add china_ip_route 103.200.228.0/22 -add china_ip_route 103.200.232.0/22 -add china_ip_route 103.200.236.0/22 -add china_ip_route 103.200.240.0/22 -add china_ip_route 103.200.244.0/22 -add china_ip_route 103.200.248.0/22 -add china_ip_route 103.200.252.0/22 -add china_ip_route 103.201.0.0/22 -add china_ip_route 103.201.4.0/22 -add china_ip_route 103.201.8.0/22 -add china_ip_route 103.201.12.0/22 -add china_ip_route 103.201.16.0/22 -add china_ip_route 103.201.20.0/22 -add china_ip_route 103.201.28.0/22 -add china_ip_route 103.201.32.0/22 -add china_ip_route 103.201.36.0/22 -add china_ip_route 103.201.40.0/22 -add china_ip_route 103.201.44.0/22 -add china_ip_route 103.201.48.0/22 -add china_ip_route 103.201.52.0/22 -add china_ip_route 103.201.56.0/22 -add china_ip_route 103.201.60.0/22 -add china_ip_route 103.201.64.0/22 -add china_ip_route 103.201.76.0/22 -add china_ip_route 103.201.80.0/22 -add china_ip_route 103.201.84.0/22 -add china_ip_route 103.201.88.0/22 -add china_ip_route 103.201.92.0/22 -add china_ip_route 103.201.96.0/22 -add china_ip_route 103.201.100.0/22 -add china_ip_route 103.201.104.0/22 -add china_ip_route 103.201.108.0/22 -add china_ip_route 103.201.112.0/22 -add china_ip_route 103.201.116.0/22 -add china_ip_route 103.201.120.0/22 -add china_ip_route 103.201.152.0/22 -add china_ip_route 103.201.156.0/22 -add china_ip_route 103.201.160.0/22 -add china_ip_route 103.201.164.0/22 -add china_ip_route 103.201.168.0/22 -add china_ip_route 103.201.172.0/22 -add china_ip_route 103.201.176.0/22 -add china_ip_route 103.201.180.0/22 -add china_ip_route 103.201.184.0/22 -add china_ip_route 103.201.188.0/22 -add china_ip_route 103.201.192.0/22 -add china_ip_route 103.201.196.0/22 -add china_ip_route 103.201.200.0/22 -add china_ip_route 103.201.204.0/22 -add china_ip_route 103.201.208.0/22 -add china_ip_route 103.201.212.0/22 -add china_ip_route 103.201.216.0/22 -add china_ip_route 103.201.220.0/22 -add china_ip_route 103.201.224.0/22 -add china_ip_route 103.201.228.0/22 -add china_ip_route 103.201.232.0/22 -add china_ip_route 103.201.236.0/22 -add china_ip_route 103.201.240.0/22 -add china_ip_route 103.201.244.0/22 -add china_ip_route 103.201.248.0/22 -add china_ip_route 103.201.252.0/22 -add china_ip_route 103.202.0.0/22 -add china_ip_route 103.202.4.0/22 -add china_ip_route 103.202.8.0/22 -add china_ip_route 103.202.12.0/22 -add china_ip_route 103.202.16.0/22 -add china_ip_route 103.202.20.0/22 -add china_ip_route 103.202.24.0/22 -add china_ip_route 103.202.28.0/22 -add china_ip_route 103.202.32.0/22 -add china_ip_route 103.202.36.0/22 -add china_ip_route 103.202.40.0/22 -add china_ip_route 103.202.44.0/22 -add china_ip_route 103.202.56.0/22 -add china_ip_route 103.202.60.0/22 -add china_ip_route 103.202.64.0/22 -add china_ip_route 103.202.68.0/22 -add china_ip_route 103.202.72.0/22 -add china_ip_route 103.202.76.0/22 -add china_ip_route 103.202.80.0/22 -add china_ip_route 103.202.84.0/22 -add china_ip_route 103.202.88.0/22 -add china_ip_route 103.202.92.0/22 -add china_ip_route 103.202.96.0/22 -add china_ip_route 103.202.100.0/22 -add china_ip_route 103.202.104.0/22 -add china_ip_route 103.202.108.0/22 -add china_ip_route 103.202.112.0/22 -add china_ip_route 103.202.116.0/22 -add china_ip_route 103.202.120.0/22 -add china_ip_route 103.202.124.0/22 -add china_ip_route 103.202.128.0/22 -add china_ip_route 103.202.132.0/22 -add china_ip_route 103.202.136.0/22 -add china_ip_route 103.202.140.0/22 -add china_ip_route 103.202.144.0/22 -add china_ip_route 103.202.152.0/22 -add china_ip_route 103.202.156.0/22 -add china_ip_route 103.202.160.0/22 -add china_ip_route 103.202.164.0/22 -add china_ip_route 103.202.168.0/22 -add china_ip_route 103.202.172.0/22 -add china_ip_route 103.202.176.0/22 -add china_ip_route 103.202.180.0/22 -add china_ip_route 103.202.184.0/22 -add china_ip_route 103.202.188.0/22 -add china_ip_route 103.202.192.0/22 -add china_ip_route 103.202.196.0/22 -add china_ip_route 103.202.200.0/21 -add china_ip_route 103.202.212.0/22 -add china_ip_route 103.202.228.0/22 -add china_ip_route 103.202.236.0/22 -add china_ip_route 103.202.240.0/22 -add china_ip_route 103.202.244.0/22 -add china_ip_route 103.202.248.0/22 -add china_ip_route 103.202.252.0/22 -add china_ip_route 103.203.0.0/22 -add china_ip_route 103.203.4.0/22 -add china_ip_route 103.203.8.0/22 -add china_ip_route 103.203.12.0/22 -add china_ip_route 103.203.16.0/22 -add china_ip_route 103.203.20.0/22 -add china_ip_route 103.203.24.0/22 -add china_ip_route 103.203.28.0/22 -add china_ip_route 103.203.32.0/22 -add china_ip_route 103.203.56.0/22 -add china_ip_route 103.203.96.0/22 -add china_ip_route 103.203.100.0/22 -add china_ip_route 103.203.104.0/22 -add china_ip_route 103.203.108.0/22 -add china_ip_route 103.203.112.0/22 -add china_ip_route 103.203.116.0/22 -add china_ip_route 103.203.120.0/22 -add china_ip_route 103.203.124.0/22 -add china_ip_route 103.203.128.0/22 -add china_ip_route 103.203.140.0/22 -add china_ip_route 103.203.164.0/22 -add china_ip_route 103.203.168.0/22 -add china_ip_route 103.203.192.0/22 -add china_ip_route 103.203.200.0/22 -add china_ip_route 103.203.212.0/22 -add china_ip_route 103.203.216.0/22 -add china_ip_route 103.204.24.0/22 -add china_ip_route 103.204.72.0/22 -add china_ip_route 103.204.88.0/22 -add china_ip_route 103.204.112.0/22 -add china_ip_route 103.204.136.0/22 -add china_ip_route 103.204.140.0/22 -add china_ip_route 103.204.144.0/22 -add china_ip_route 103.204.148.0/22 -add china_ip_route 103.204.152.0/22 -add china_ip_route 103.204.196.0/22 -add china_ip_route 103.204.232.0/22 -add china_ip_route 103.204.236.0/22 -add china_ip_route 103.205.4.0/22 -add china_ip_route 103.205.8.0/22 -add china_ip_route 103.205.40.0/22 -add china_ip_route 103.205.44.0/22 -add china_ip_route 103.205.52.0/22 -add china_ip_route 103.205.108.0/22 -add china_ip_route 103.205.116.0/22 -add china_ip_route 103.205.120.0/22 -add china_ip_route 103.205.136.0/22 -add china_ip_route 103.205.162.0/24 -add china_ip_route 103.205.188.0/22 -add china_ip_route 103.205.192.0/22 -add china_ip_route 103.205.196.0/22 -add china_ip_route 103.205.200.0/22 -add china_ip_route 103.205.236.0/22 -add china_ip_route 103.205.248.0/22 -add china_ip_route 103.205.252.0/22 -add china_ip_route 103.206.0.0/22 -add china_ip_route 103.206.44.0/22 -add china_ip_route 103.206.148.0/22 -add china_ip_route 103.207.48.0/22 -add china_ip_route 103.207.104.0/22 -add china_ip_route 103.207.164.0/22 -add china_ip_route 103.207.184.0/22 -add china_ip_route 103.207.188.0/22 -add china_ip_route 103.207.192.0/22 -add china_ip_route 103.207.196.0/22 -add china_ip_route 103.207.200.0/22 -add china_ip_route 103.207.204.0/22 -add china_ip_route 103.207.208.0/22 -add china_ip_route 103.207.212.0/22 -add china_ip_route 103.207.220.0/22 -add china_ip_route 103.207.228.0/22 -add china_ip_route 103.207.232.0/22 -add china_ip_route 103.208.12.0/22 -add china_ip_route 103.208.16.0/22 -add china_ip_route 103.208.28.0/22 -add china_ip_route 103.208.40.0/22 -add china_ip_route 103.208.44.0/22 -add china_ip_route 103.208.48.0/22 -add china_ip_route 103.209.112.0/22 -add china_ip_route 103.209.136.0/22 -add china_ip_route 103.209.200.0/22 -add china_ip_route 103.209.208.0/22 -add china_ip_route 103.209.216.0/22 -add china_ip_route 103.210.0.0/22 -add china_ip_route 103.210.96.0/22 -add china_ip_route 103.210.156.0/22 -add china_ip_route 103.210.160.0/22 -add china_ip_route 103.210.164.0/22 -add china_ip_route 103.210.168.0/22 -add china_ip_route 103.210.172.0/22 -add china_ip_route 103.210.176.0/22 -add china_ip_route 103.210.180.0/22 -add china_ip_route 103.210.184.0/22 -add china_ip_route 103.210.188.0/22 -add china_ip_route 103.210.216.0/22 -add china_ip_route 103.211.44.0/22 -add china_ip_route 103.211.96.0/22 -add china_ip_route 103.211.100.0/22 -add china_ip_route 103.211.156.0/22 -add china_ip_route 103.211.164.0/22 -add china_ip_route 103.211.192.0/22 -add china_ip_route 103.211.220.0/22 -add china_ip_route 103.211.224.0/22 -add china_ip_route 103.211.248.0/22 -add china_ip_route 103.212.0.0/22 -add china_ip_route 103.212.4.0/22 -add china_ip_route 103.212.8.0/22 -add china_ip_route 103.212.12.0/22 -add china_ip_route 103.212.32.0/22 -add china_ip_route 103.212.44.0/22 -add china_ip_route 103.212.48.0/22 -add china_ip_route 103.212.84.0/22 -add china_ip_route 103.212.100.0/22 -add china_ip_route 103.212.104.0/22 -add china_ip_route 103.212.108.0/22 -add china_ip_route 103.212.148.0/22 -add china_ip_route 103.212.164.0/22 -add china_ip_route 103.212.196.0/22 -add china_ip_route 103.212.200.0/22 -add china_ip_route 103.212.228.0/22 -add china_ip_route 103.212.252.0/22 -add china_ip_route 103.213.40.0/22 -add china_ip_route 103.213.44.0/22 -add china_ip_route 103.213.48.0/22 -add china_ip_route 103.213.52.0/22 -add china_ip_route 103.213.56.0/22 -add china_ip_route 103.213.60.0/22 -add china_ip_route 103.213.64.0/22 -add china_ip_route 103.213.68.0/22 -add china_ip_route 103.213.72.0/22 -add china_ip_route 103.213.76.0/22 -add china_ip_route 103.213.80.0/22 -add china_ip_route 103.213.84.0/22 -add china_ip_route 103.213.88.0/22 -add china_ip_route 103.213.92.0/22 -add china_ip_route 103.213.96.0/22 -add china_ip_route 103.213.132.0/22 -add china_ip_route 103.213.136.0/22 -add china_ip_route 103.213.140.0/22 -add china_ip_route 103.213.144.0/22 -add china_ip_route 103.213.148.0/22 -add china_ip_route 103.213.152.0/22 -add china_ip_route 103.213.156.0/22 -add china_ip_route 103.213.160.0/22 -add china_ip_route 103.213.164.0/22 -add china_ip_route 103.213.168.0/22 -add china_ip_route 103.213.172.0/22 -add china_ip_route 103.213.176.0/22 -add china_ip_route 103.213.180.0/22 -add china_ip_route 103.213.184.0/22 -add china_ip_route 103.213.188.0/22 -add china_ip_route 103.213.248.0/22 -add china_ip_route 103.214.48.0/22 -add china_ip_route 103.214.84.0/22 -add china_ip_route 103.214.168.0/22 -add china_ip_route 103.214.212.0/22 -add china_ip_route 103.214.240.0/22 -add china_ip_route 103.214.244.0/22 -add china_ip_route 103.215.28.0/22 -add china_ip_route 103.215.32.0/22 -add china_ip_route 103.215.36.0/22 -add china_ip_route 103.215.44.0/22 -add china_ip_route 103.215.48.0/22 -add china_ip_route 103.215.100.0/22 -add china_ip_route 103.215.104.0/22 -add china_ip_route 103.215.108.0/22 -add china_ip_route 103.215.116.0/22 -add china_ip_route 103.215.120.0/22 -add china_ip_route 103.215.140.0/22 -add china_ip_route 103.216.4.0/22 -add china_ip_route 103.216.8.0/22 -add china_ip_route 103.216.12.0/22 -add china_ip_route 103.216.16.0/22 -add china_ip_route 103.216.20.0/22 -add china_ip_route 103.216.24.0/22 -add china_ip_route 103.216.28.0/22 -add china_ip_route 103.216.32.0/22 -add china_ip_route 103.216.36.0/22 -add china_ip_route 103.216.40.0/22 -add china_ip_route 103.216.44.0/22 -add china_ip_route 103.216.64.0/22 -add china_ip_route 103.216.108.0/22 -add china_ip_route 103.216.136.0/22 -add china_ip_route 103.216.152.0/22 -add china_ip_route 103.216.224.0/22 -add china_ip_route 103.216.228.0/22 -add china_ip_route 103.216.240.0/22 -add china_ip_route 103.216.244.0/22 -add china_ip_route 103.216.248.0/22 -add china_ip_route 103.216.252.0/22 -add china_ip_route 103.217.0.0/22 -add china_ip_route 103.217.4.0/22 -add china_ip_route 103.217.8.0/22 -add china_ip_route 103.217.12.0/22 -add china_ip_route 103.217.16.0/22 -add china_ip_route 103.217.20.0/22 -add china_ip_route 103.217.24.0/22 -add china_ip_route 103.217.28.0/22 -add china_ip_route 103.217.32.0/22 -add china_ip_route 103.217.36.0/22 -add china_ip_route 103.217.40.0/22 -add china_ip_route 103.217.44.0/22 -add china_ip_route 103.217.48.0/22 -add china_ip_route 103.217.52.0/22 -add china_ip_route 103.217.56.0/22 -add china_ip_route 103.217.60.0/22 -add china_ip_route 103.217.168.0/22 -add china_ip_route 103.217.180.0/22 -add china_ip_route 103.217.184.0/22 -add china_ip_route 103.217.188.0/22 -add china_ip_route 103.217.192.0/22 -add china_ip_route 103.217.196.0/22 -add china_ip_route 103.217.200.0/22 -add china_ip_route 103.217.204.0/22 -add china_ip_route 103.218.8.0/22 -add china_ip_route 103.218.12.0/22 -add china_ip_route 103.218.16.0/22 -add china_ip_route 103.218.20.0/22 -add china_ip_route 103.218.28.0/22 -add china_ip_route 103.218.32.0/22 -add china_ip_route 103.218.36.0/22 -add china_ip_route 103.218.40.0/22 -add china_ip_route 103.218.44.0/22 -add china_ip_route 103.218.48.0/22 -add china_ip_route 103.218.52.0/22 -add china_ip_route 103.218.56.0/22 -add china_ip_route 103.218.60.0/22 -add china_ip_route 103.218.64.0/22 -add china_ip_route 103.218.68.0/22 -add china_ip_route 103.218.72.0/22 -add china_ip_route 103.218.76.0/22 -add china_ip_route 103.218.80.0/22 -add china_ip_route 103.218.84.0/22 -add china_ip_route 103.218.88.0/22 -add china_ip_route 103.218.92.0/22 -add china_ip_route 103.218.192.0/22 -add china_ip_route 103.218.196.0/22 -add china_ip_route 103.218.200.0/22 -add china_ip_route 103.218.204.0/22 -add china_ip_route 103.218.208.0/22 -add china_ip_route 103.218.212.0/22 -add china_ip_route 103.218.216.0/22 -add china_ip_route 103.219.24.0/22 -add china_ip_route 103.219.28.0/22 -add china_ip_route 103.219.32.0/22 -add china_ip_route 103.219.36.0/22 -add china_ip_route 103.219.64.0/22 -add china_ip_route 103.219.84.0/22 -add china_ip_route 103.219.88.0/22 -add china_ip_route 103.219.92.0/22 -add china_ip_route 103.219.96.0/22 -add china_ip_route 103.219.100.0/22 -add china_ip_route 103.219.176.0/22 -add china_ip_route 103.219.184.0/22 -add china_ip_route 103.220.48.0/22 -add china_ip_route 103.220.52.0/22 -add china_ip_route 103.220.56.0/22 -add china_ip_route 103.220.60.0/22 -add china_ip_route 103.220.64.0/22 -add china_ip_route 103.220.92.0/22 -add china_ip_route 103.220.96.0/22 -add china_ip_route 103.220.100.0/22 -add china_ip_route 103.220.104.0/22 -add china_ip_route 103.220.108.0/22 -add china_ip_route 103.220.116.0/22 -add china_ip_route 103.220.120.0/22 -add china_ip_route 103.220.124.0/22 -add china_ip_route 103.220.128.0/22 -add china_ip_route 103.220.132.0/22 -add china_ip_route 103.220.136.0/22 -add china_ip_route 103.220.140.0/22 -add china_ip_route 103.220.144.0/22 -add china_ip_route 103.220.148.0/22 -add china_ip_route 103.220.152.0/22 -add china_ip_route 103.220.160.0/22 -add china_ip_route 103.220.164.0/22 -add china_ip_route 103.220.168.0/22 -add china_ip_route 103.220.172.0/22 -add china_ip_route 103.220.176.0/22 -add china_ip_route 103.220.180.0/22 -add china_ip_route 103.220.184.0/22 -add china_ip_route 103.220.188.0/22 -add china_ip_route 103.220.192.0/22 -add china_ip_route 103.220.196.0/22 -add china_ip_route 103.220.200.0/22 -add china_ip_route 103.220.240.0/22 -add china_ip_route 103.220.244.0/22 -add china_ip_route 103.220.248.0/22 -add china_ip_route 103.220.252.0/22 -add china_ip_route 103.221.0.0/22 -add china_ip_route 103.221.4.0/22 -add china_ip_route 103.221.8.0/22 -add china_ip_route 103.221.12.0/22 -add china_ip_route 103.221.16.0/22 -add china_ip_route 103.221.20.0/22 -add china_ip_route 103.221.24.0/22 -add china_ip_route 103.221.28.0/22 -add china_ip_route 103.221.32.0/22 -add china_ip_route 103.221.36.0/22 -add china_ip_route 103.221.40.0/22 -add china_ip_route 103.221.44.0/22 -add china_ip_route 103.221.48.0/22 -add china_ip_route 103.221.88.0/22 -add china_ip_route 103.221.92.0/22 -add china_ip_route 103.221.96.0/22 -add china_ip_route 103.221.100.0/22 -add china_ip_route 103.221.104.0/22 -add china_ip_route 103.221.108.0/22 -add china_ip_route 103.221.112.0/22 -add china_ip_route 103.221.116.0/22 -add china_ip_route 103.221.120.0/22 -add china_ip_route 103.221.124.0/22 -add china_ip_route 103.221.128.0/22 -add china_ip_route 103.221.132.0/22 -add china_ip_route 103.221.136.0/22 -add china_ip_route 103.221.140.0/22 -add china_ip_route 103.221.144.0/22 -add china_ip_route 103.221.148.0/22 -add china_ip_route 103.221.152.0/22 -add china_ip_route 103.221.156.0/22 -add china_ip_route 103.221.160.0/22 -add china_ip_route 103.221.164.0/22 -add china_ip_route 103.221.168.0/22 -add china_ip_route 103.221.172.0/22 -add china_ip_route 103.221.176.0/22 -add china_ip_route 103.221.180.0/22 -add china_ip_route 103.221.184.0/22 -add china_ip_route 103.221.188.0/22 -add china_ip_route 103.221.192.0/22 -add china_ip_route 103.221.196.0/22 -add china_ip_route 103.221.200.0/22 -add china_ip_route 103.221.204.0/22 -add china_ip_route 103.222.0.0/22 -add china_ip_route 103.222.4.0/22 -add china_ip_route 103.222.8.0/22 -add china_ip_route 103.222.12.0/22 -add china_ip_route 103.222.16.0/22 -add china_ip_route 103.222.24.0/22 -add china_ip_route 103.222.28.0/22 -add china_ip_route 103.222.32.0/22 -add china_ip_route 103.222.36.0/22 -add china_ip_route 103.222.40.0/22 -add china_ip_route 103.222.44.0/22 -add china_ip_route 103.222.48.0/22 -add china_ip_route 103.222.52.0/22 -add china_ip_route 103.222.56.0/22 -add china_ip_route 103.222.60.0/22 -add china_ip_route 103.222.64.0/22 -add china_ip_route 103.222.68.0/22 -add china_ip_route 103.222.72.0/22 -add china_ip_route 103.222.76.0/22 -add china_ip_route 103.222.80.0/22 -add china_ip_route 103.222.84.0/22 -add china_ip_route 103.222.88.0/22 -add china_ip_route 103.222.92.0/22 -add china_ip_route 103.222.96.0/22 -add china_ip_route 103.222.100.0/22 -add china_ip_route 103.222.104.0/22 -add china_ip_route 103.222.108.0/22 -add china_ip_route 103.222.112.0/22 -add china_ip_route 103.222.116.0/22 -add china_ip_route 103.222.120.0/22 -add china_ip_route 103.222.124.0/22 -add china_ip_route 103.222.128.0/22 -add china_ip_route 103.222.132.0/22 -add china_ip_route 103.222.136.0/22 -add china_ip_route 103.222.140.0/22 -add china_ip_route 103.222.144.0/22 -add china_ip_route 103.222.148.0/22 -add china_ip_route 103.222.152.0/22 -add china_ip_route 103.222.156.0/22 -add china_ip_route 103.222.160.0/22 -add china_ip_route 103.222.164.0/22 -add china_ip_route 103.222.168.0/22 -add china_ip_route 103.222.172.0/22 -add china_ip_route 103.222.176.0/22 -add china_ip_route 103.222.180.0/22 -add china_ip_route 103.222.184.0/22 -add china_ip_route 103.222.188.0/22 -add china_ip_route 103.222.192.0/22 -add china_ip_route 103.222.196.0/22 -add china_ip_route 103.222.200.0/22 -add china_ip_route 103.222.204.0/22 -add china_ip_route 103.222.208.0/22 -add china_ip_route 103.222.212.0/22 -add china_ip_route 103.222.216.0/22 -add china_ip_route 103.222.220.0/22 -add china_ip_route 103.222.224.0/22 -add china_ip_route 103.222.228.0/22 -add china_ip_route 103.222.232.0/22 -add china_ip_route 103.222.240.0/22 -add china_ip_route 103.222.244.0/22 -add china_ip_route 103.223.16.0/22 -add china_ip_route 103.223.20.0/22 -add china_ip_route 103.223.24.0/22 -add china_ip_route 103.223.28.0/22 -add china_ip_route 103.223.32.0/22 -add china_ip_route 103.223.36.0/22 -add china_ip_route 103.223.40.0/22 -add china_ip_route 103.223.44.0/22 -add china_ip_route 103.223.48.0/22 -add china_ip_route 103.223.52.0/22 -add china_ip_route 103.223.56.0/22 -add china_ip_route 103.223.60.0/22 -add china_ip_route 103.223.64.0/22 -add china_ip_route 103.223.68.0/22 -add china_ip_route 103.223.72.0/22 -add china_ip_route 103.223.76.0/22 -add china_ip_route 103.223.80.0/22 -add china_ip_route 103.223.84.0/22 -add china_ip_route 103.223.88.0/22 -add china_ip_route 103.223.92.0/22 -add china_ip_route 103.223.96.0/22 -add china_ip_route 103.223.100.0/22 -add china_ip_route 103.223.104.0/22 -add china_ip_route 103.223.108.0/22 -add china_ip_route 103.223.112.0/22 -add china_ip_route 103.223.116.0/22 -add china_ip_route 103.223.120.0/22 -add china_ip_route 103.223.124.0/22 -add china_ip_route 103.223.128.0/22 -add china_ip_route 103.223.132.0/22 -add china_ip_route 103.223.140.0/22 -add china_ip_route 103.223.144.0/22 -add china_ip_route 103.223.148.0/22 -add china_ip_route 103.223.152.0/22 -add china_ip_route 103.223.156.0/22 -add china_ip_route 103.223.160.0/22 -add china_ip_route 103.223.164.0/22 -add china_ip_route 103.223.168.0/22 -add china_ip_route 103.223.172.0/22 -add china_ip_route 103.223.176.0/22 -add china_ip_route 103.223.180.0/22 -add china_ip_route 103.223.188.0/22 -add china_ip_route 103.223.192.0/22 -add china_ip_route 103.223.196.0/22 -add china_ip_route 103.223.200.0/22 -add china_ip_route 103.223.204.0/22 -add china_ip_route 103.223.208.0/22 -add china_ip_route 103.223.212.0/22 -add china_ip_route 103.223.216.0/22 -add china_ip_route 103.223.220.0/22 -add china_ip_route 103.223.224.0/22 -add china_ip_route 103.223.228.0/22 -add china_ip_route 103.223.232.0/22 -add china_ip_route 103.223.236.0/22 -add china_ip_route 103.223.240.0/22 -add china_ip_route 103.223.244.0/22 -add china_ip_route 103.223.248.0/22 -add china_ip_route 103.223.252.0/22 -add china_ip_route 103.224.0.0/22 -add china_ip_route 103.224.40.0/22 -add china_ip_route 103.224.44.0/22 -add china_ip_route 103.224.60.0/22 -add china_ip_route 103.224.80.0/22 -add china_ip_route 103.224.220.0/22 -add china_ip_route 103.224.224.0/22 -add china_ip_route 103.224.228.0/22 -add china_ip_route 103.224.232.0/22 -add china_ip_route 103.225.84.0/22 -add china_ip_route 103.226.16.0/22 -add china_ip_route 103.226.40.0/22 -add china_ip_route 103.226.56.0/22 -add china_ip_route 103.226.60.0/22 -add china_ip_route 103.226.80.0/22 -add china_ip_route 103.226.132.0/22 -add china_ip_route 103.226.156.0/22 -add china_ip_route 103.226.180.0/22 -add china_ip_route 103.226.196.0/22 -add china_ip_route 103.227.48.0/22 -add china_ip_route 103.227.72.0/22 -add china_ip_route 103.227.76.0/22 -add china_ip_route 103.227.80.0/22 -add china_ip_route 103.227.100.0/22 -add china_ip_route 103.227.120.0/22 -add china_ip_route 103.227.132.0/22 -add china_ip_route 103.227.136.0/22 -add china_ip_route 103.227.196.0/22 -add china_ip_route 103.227.204.0/22 -add china_ip_route 103.227.212.0/22 -add china_ip_route 103.227.228.0/22 -add china_ip_route 103.228.12.0/22 -add china_ip_route 103.228.88.0/22 -add china_ip_route 103.228.136.0/22 -add china_ip_route 103.228.160.0/22 -add china_ip_route 103.228.176.0/22 -add china_ip_route 103.228.204.0/22 -add china_ip_route 103.228.208.0/22 -add china_ip_route 103.228.228.0/22 -add china_ip_route 103.228.232.0/22 -add china_ip_route 103.229.20.0/22 -add china_ip_route 103.229.60.0/22 -add china_ip_route 103.229.136.0/22 -add china_ip_route 103.229.148.0/22 -add china_ip_route 103.229.172.0/22 -add china_ip_route 103.229.212.0/22 -add china_ip_route 103.229.216.0/22 -add china_ip_route 103.229.220.0/22 -add china_ip_route 103.229.228.0/22 -add china_ip_route 103.229.236.0/22 -add china_ip_route 103.229.240.0/22 -add china_ip_route 103.230.0.0/22 -add china_ip_route 103.230.28.0/22 -add china_ip_route 103.230.44.0/22 -add china_ip_route 103.230.96.0/22 -add china_ip_route 103.230.196.0/22 -add china_ip_route 103.230.200.0/22 -add china_ip_route 103.230.204.0/22 -add china_ip_route 103.230.212.0/22 -add china_ip_route 103.230.236.0/22 -add china_ip_route 103.231.16.0/22 -add china_ip_route 103.231.20.0/22 -add china_ip_route 103.231.64.0/22 -add china_ip_route 103.231.68.0/22 -add china_ip_route 103.231.180.0/22 -add china_ip_route 103.231.184.0/22 -add china_ip_route 103.231.244.0/22 -add china_ip_route 103.232.4.0/22 -add china_ip_route 103.232.144.0/22 -add china_ip_route 103.232.188.0/22 -add china_ip_route 103.232.212.0/22 -add china_ip_route 103.233.4.0/22 -add china_ip_route 103.233.44.0/22 -add china_ip_route 103.233.52.0/22 -add china_ip_route 103.233.104.0/22 -add china_ip_route 103.233.128.0/22 -add china_ip_route 103.233.136.0/22 -add china_ip_route 103.233.228.0/22 -add china_ip_route 103.234.0.0/22 -add china_ip_route 103.234.20.0/22 -add china_ip_route 103.234.56.0/22 -add china_ip_route 103.234.128.0/22 -add china_ip_route 103.234.172.0/22 -add china_ip_route 103.234.180.0/22 -add china_ip_route 103.234.244.0/22 -add china_ip_route 103.235.16.0/22 -add china_ip_route 103.235.48.0/22 -add china_ip_route 103.235.56.0/22 -add china_ip_route 103.235.60.0/22 -add china_ip_route 103.235.80.0/22 -add china_ip_route 103.235.84.0/22 -add china_ip_route 103.235.128.0/22 -add china_ip_route 103.235.132.0/22 -add china_ip_route 103.235.136.0/22 -add china_ip_route 103.235.140.0/22 -add china_ip_route 103.235.144.0/22 -add china_ip_route 103.235.148.0/22 -add china_ip_route 103.235.184.0/22 -add china_ip_route 103.235.192.0/22 -add china_ip_route 103.235.200.0/22 -add china_ip_route 103.235.220.0/22 -add china_ip_route 103.235.224.0/22 -add china_ip_route 103.235.228.0/22 -add china_ip_route 103.235.232.0/22 -add china_ip_route 103.235.236.0/22 -add china_ip_route 103.235.240.0/22 -add china_ip_route 103.235.244.0/22 -add china_ip_route 103.235.248.0/22 -add china_ip_route 103.235.252.0/22 -add china_ip_route 103.236.0.0/22 -add china_ip_route 103.236.4.0/22 -add china_ip_route 103.236.8.0/22 -add china_ip_route 103.236.12.0/22 -add china_ip_route 103.236.16.0/22 -add china_ip_route 103.236.20.0/22 -add china_ip_route 103.236.24.0/22 -add china_ip_route 103.236.28.0/22 -add china_ip_route 103.236.32.0/22 -add china_ip_route 103.236.36.0/22 -add china_ip_route 103.236.40.0/22 -add china_ip_route 103.236.44.0/22 -add china_ip_route 103.236.48.0/22 -add china_ip_route 103.236.52.0/22 -add china_ip_route 103.236.56.0/22 -add china_ip_route 103.236.60.0/22 -add china_ip_route 103.236.64.0/22 -add china_ip_route 103.236.68.0/22 -add china_ip_route 103.236.72.0/22 -add china_ip_route 103.236.76.0/22 -add china_ip_route 103.236.80.0/22 -add china_ip_route 103.236.84.0/22 -add china_ip_route 103.236.88.0/22 -add china_ip_route 103.236.92.0/22 -add china_ip_route 103.236.96.0/22 -add china_ip_route 103.236.120.0/22 -add china_ip_route 103.236.184.0/22 -add china_ip_route 103.236.220.0/22 -add china_ip_route 103.236.232.0/22 -add china_ip_route 103.236.240.0/22 -add china_ip_route 103.236.244.0/22 -add china_ip_route 103.236.248.0/22 -add china_ip_route 103.236.252.0/22 -add china_ip_route 103.237.0.0/22 -add china_ip_route 103.237.4.0/22 -add china_ip_route 103.237.8.0/22 -add china_ip_route 103.237.12.0/22 -add china_ip_route 103.237.24.0/22 -add china_ip_route 103.237.28.0/22 -add china_ip_route 103.237.68.0/22 -add china_ip_route 103.237.88.0/22 -add china_ip_route 103.237.152.0/22 -add china_ip_route 103.237.176.0/22 -add china_ip_route 103.237.180.0/22 -add china_ip_route 103.237.184.0/22 -add china_ip_route 103.237.188.0/22 -add china_ip_route 103.237.192.0/22 -add china_ip_route 103.237.196.0/22 -add china_ip_route 103.237.200.0/22 -add china_ip_route 103.237.204.0/22 -add china_ip_route 103.237.208.0/22 -add china_ip_route 103.237.212.0/22 -add china_ip_route 103.237.216.0/22 -add china_ip_route 103.237.220.0/22 -add china_ip_route 103.237.224.0/22 -add china_ip_route 103.237.228.0/22 -add china_ip_route 103.237.232.0/22 -add china_ip_route 103.237.236.0/22 -add china_ip_route 103.237.240.0/22 -add china_ip_route 103.237.244.0/22 -add china_ip_route 103.237.248.0/22 -add china_ip_route 103.237.252.0/22 -add china_ip_route 103.238.0.0/22 -add china_ip_route 103.238.4.0/22 -add china_ip_route 103.238.16.0/22 -add china_ip_route 103.238.20.0/22 -add china_ip_route 103.238.24.0/22 -add china_ip_route 103.238.28.0/22 -add china_ip_route 103.238.32.0/22 -add china_ip_route 103.238.36.0/22 -add china_ip_route 103.238.40.0/22 -add china_ip_route 103.238.44.0/22 -add china_ip_route 103.238.48.0/22 -add china_ip_route 103.238.52.0/22 -add china_ip_route 103.238.56.0/22 -add china_ip_route 103.238.88.0/22 -add china_ip_route 103.238.92.0/22 -add china_ip_route 103.238.96.0/22 -add china_ip_route 103.238.132.0/22 -add china_ip_route 103.238.140.0/22 -add china_ip_route 103.238.144.0/22 -add china_ip_route 103.238.160.0/22 -add china_ip_route 103.238.164.0/22 -add china_ip_route 103.238.168.0/22 -add china_ip_route 103.238.172.0/22 -add china_ip_route 103.238.176.0/22 -add china_ip_route 103.238.180.0/22 -add china_ip_route 103.238.184.0/22 -add china_ip_route 103.238.188.0/22 -add china_ip_route 103.238.196.0/22 -add china_ip_route 103.238.204.0/22 -add china_ip_route 103.238.252.0/22 -add china_ip_route 103.239.0.0/22 -add china_ip_route 103.239.44.0/22 -add china_ip_route 103.239.68.0/22 -add china_ip_route 103.239.96.0/22 -add china_ip_route 103.239.152.0/22 -add china_ip_route 103.239.156.0/22 -add china_ip_route 103.239.176.0/22 -add china_ip_route 103.239.180.0/22 -add china_ip_route 103.239.184.0/22 -add china_ip_route 103.239.192.0/22 -add china_ip_route 103.239.196.0/22 -add china_ip_route 103.239.204.0/22 -add china_ip_route 103.239.208.0/22 -add china_ip_route 103.239.224.0/22 -add china_ip_route 103.239.244.0/22 -add china_ip_route 103.240.16.0/22 -add china_ip_route 103.240.36.0/22 -add china_ip_route 103.240.72.0/22 -add china_ip_route 103.240.84.0/22 -add china_ip_route 103.240.124.0/22 -add china_ip_route 103.240.172.0/22 -add china_ip_route 103.240.188.0/22 -add china_ip_route 103.240.244.0/22 -add china_ip_route 103.241.12.0/22 -add china_ip_route 103.241.72.0/22 -add china_ip_route 103.241.92.0/22 -add china_ip_route 103.241.96.0/22 -add china_ip_route 103.241.160.0/22 -add china_ip_route 103.241.184.0/22 -add china_ip_route 103.241.188.0/22 -add china_ip_route 103.241.220.0/22 -add china_ip_route 103.242.64.0/22 -add china_ip_route 103.242.128.0/22 -add china_ip_route 103.242.132.0/22 -add china_ip_route 103.242.160.0/22 -add china_ip_route 103.242.168.0/22 -add china_ip_route 103.242.172.0/22 -add china_ip_route 103.242.176.0/22 -add china_ip_route 103.242.200.0/22 -add china_ip_route 103.242.212.0/22 -add china_ip_route 103.242.220.0/22 -add china_ip_route 103.242.240.0/22 -add china_ip_route 103.243.136.0/22 -add china_ip_route 103.243.252.0/22 -add china_ip_route 103.244.16.0/22 -add china_ip_route 103.244.58.0/23 -add china_ip_route 103.244.60.0/22 -add china_ip_route 103.244.64.0/22 -add china_ip_route 103.244.68.0/22 -add china_ip_route 103.244.72.0/22 -add china_ip_route 103.244.76.0/22 -add china_ip_route 103.244.80.0/22 -add china_ip_route 103.244.84.0/22 -add china_ip_route 103.244.116.0/22 -add china_ip_route 103.244.164.0/22 -add china_ip_route 103.244.232.0/22 -add china_ip_route 103.244.252.0/22 -add china_ip_route 103.245.23.0/24 -add china_ip_route 103.245.52.0/22 -add china_ip_route 103.245.60.0/22 -add china_ip_route 103.245.80.0/22 -add china_ip_route 103.245.124.0/22 -add china_ip_route 103.245.128.0/22 -add china_ip_route 103.246.8.0/22 -add china_ip_route 103.246.12.0/22 -add china_ip_route 103.246.120.0/22 -add china_ip_route 103.246.124.0/22 -add china_ip_route 103.246.132.0/22 -add china_ip_route 103.246.152.0/22 -add china_ip_route 103.246.156.0/22 -add china_ip_route 103.247.168.0/22 -add china_ip_route 103.247.172.0/22 -add china_ip_route 103.247.176.0/22 -add china_ip_route 103.247.200.0/22 -add china_ip_route 103.247.212.0/22 -add china_ip_route 103.248.0.0/23 -add china_ip_route 103.248.64.0/22 -add china_ip_route 103.248.100.0/22 -add china_ip_route 103.248.124.0/22 -add china_ip_route 103.248.152.0/22 -add china_ip_route 103.248.168.0/22 -add china_ip_route 103.248.192.0/22 -add china_ip_route 103.248.212.0/22 -add china_ip_route 103.248.224.0/22 -add china_ip_route 103.249.8.0/22 -add china_ip_route 103.249.12.0/22 -add china_ip_route 103.249.52.0/22 -add china_ip_route 103.249.104.0/22 -add china_ip_route 103.249.128.0/22 -add china_ip_route 103.249.136.0/22 -add china_ip_route 103.249.144.0/22 -add china_ip_route 103.249.164.0/22 -add china_ip_route 103.249.168.0/22 -add china_ip_route 103.249.172.0/22 -add china_ip_route 103.249.176.0/22 -add china_ip_route 103.249.188.0/22 -add china_ip_route 103.249.192.0/22 -add china_ip_route 103.249.244.0/22 -add china_ip_route 103.249.252.0/22 -add china_ip_route 103.250.32.0/22 -add china_ip_route 103.250.104.0/22 -add china_ip_route 103.250.124.0/22 -add china_ip_route 103.250.180.0/22 -add china_ip_route 103.250.192.0/22 -add china_ip_route 103.250.216.0/22 -add china_ip_route 103.250.224.0/22 -add china_ip_route 103.250.236.0/22 -add china_ip_route 103.250.248.0/22 -add china_ip_route 103.250.252.0/22 -add china_ip_route 103.251.32.0/22 -add china_ip_route 103.251.84.0/22 -add china_ip_route 103.251.96.0/22 -add china_ip_route 103.251.124.0/22 -add china_ip_route 103.251.128.0/22 -add china_ip_route 103.251.160.0/22 -add china_ip_route 103.251.192.0/22 -add china_ip_route 103.251.204.0/22 -add china_ip_route 103.251.240.0/22 -add china_ip_route 103.252.28.0/22 -add china_ip_route 103.252.36.0/22 -add china_ip_route 103.252.64.0/22 -add china_ip_route 103.252.96.0/22 -add china_ip_route 103.252.104.0/22 -add china_ip_route 103.252.172.0/22 -add china_ip_route 103.252.204.0/22 -add china_ip_route 103.252.208.0/22 -add china_ip_route 103.252.232.0/22 -add china_ip_route 103.252.248.0/22 -add china_ip_route 103.253.4.0/22 -add china_ip_route 103.253.60.0/22 -add china_ip_route 103.253.204.0/22 -add china_ip_route 103.253.220.0/22 -add china_ip_route 103.253.224.0/22 -add china_ip_route 103.253.232.0/22 -add china_ip_route 103.254.8.0/22 -add china_ip_route 103.254.20.0/22 -add china_ip_route 103.254.64.0/22 -add china_ip_route 103.254.68.0/22 -add china_ip_route 103.254.72.0/22 -add china_ip_route 103.254.76.0/22 -add china_ip_route 103.254.112.0/22 -add china_ip_route 103.254.176.0/22 -add china_ip_route 103.254.188.0/22 -add china_ip_route 103.254.196.0/24 -add china_ip_route 103.254.220.0/22 -add china_ip_route 103.255.56.0/22 -add china_ip_route 103.255.68.0/22 -add china_ip_route 103.255.88.0/22 -add china_ip_route 103.255.92.0/22 -add china_ip_route 103.255.136.0/22 -add china_ip_route 103.255.140.0/22 -add china_ip_route 103.255.184.0/22 -add china_ip_route 103.255.200.0/22 -add china_ip_route 103.255.212.0/22 -add china_ip_route 103.255.228.0/22 -add china_ip_route 106.0.0.0/24 -add china_ip_route 106.0.2.0/23 -add china_ip_route 106.0.4.0/22 -add china_ip_route 106.0.8.0/21 -add china_ip_route 106.0.16.0/20 -add china_ip_route 106.0.44.0/22 -add china_ip_route 106.0.64.0/18 -add china_ip_route 106.2.0.0/15 -add china_ip_route 106.4.0.0/14 -add china_ip_route 106.8.0.0/15 -add china_ip_route 106.11.0.0/16 -add china_ip_route 106.12.0.0/14 -add china_ip_route 106.16.0.0/12 -add china_ip_route 106.32.0.0/12 -add china_ip_route 106.48.0.0/15 -add china_ip_route 106.50.0.0/16 -add china_ip_route 106.52.0.0/14 -add china_ip_route 106.56.0.0/13 -add china_ip_route 106.74.0.0/16 -add china_ip_route 106.75.0.0/16 -add china_ip_route 106.80.0.0/12 -add china_ip_route 106.108.0.0/14 -add china_ip_route 106.112.0.0/13 -add china_ip_route 106.120.0.0/13 -add china_ip_route 106.224.0.0/12 -add china_ip_route 109.244.0.0/16 -add china_ip_route 110.6.0.0/15 -add china_ip_route 110.16.0.0/14 -add china_ip_route 110.34.40.0/22 -add china_ip_route 110.34.44.0/22 -add china_ip_route 110.40.0.0/14 -add china_ip_route 110.44.12.0/22 -add china_ip_route 110.44.144.0/20 -add china_ip_route 110.48.0.0/16 -add china_ip_route 110.51.0.0/16 -add china_ip_route 110.52.0.0/15 -add china_ip_route 110.56.0.0/13 -add china_ip_route 110.64.0.0/15 -add china_ip_route 110.72.0.0/15 -add china_ip_route 110.75.0.0/17 -add china_ip_route 110.75.128.0/19 -add china_ip_route 110.75.160.0/19 -add china_ip_route 110.75.192.0/18 -add china_ip_route 110.76.0.0/19 -add china_ip_route 110.76.32.0/19 -add china_ip_route 110.76.132.0/22 -add china_ip_route 110.76.156.0/22 -add china_ip_route 110.76.184.0/22 -add china_ip_route 110.76.192.0/18 -add china_ip_route 110.77.0.0/17 -add china_ip_route 110.80.0.0/13 -add china_ip_route 110.88.0.0/14 -add china_ip_route 110.92.68.0/22 -add china_ip_route 110.93.32.0/19 -add china_ip_route 110.94.0.0/15 -add china_ip_route 110.96.0.0/11 -add china_ip_route 110.152.0.0/14 -add china_ip_route 110.156.0.0/15 -add china_ip_route 110.165.32.0/19 -add china_ip_route 110.166.0.0/15 -add china_ip_route 110.172.192.0/18 -add china_ip_route 110.173.0.0/19 -add china_ip_route 110.173.32.0/20 -add china_ip_route 110.173.64.0/19 -add china_ip_route 110.173.96.0/19 -add china_ip_route 110.173.192.0/19 -add china_ip_route 110.176.0.0/13 -add china_ip_route 110.184.0.0/13 -add china_ip_route 110.192.0.0/11 -add china_ip_route 110.228.0.0/14 -add china_ip_route 110.232.32.0/19 -add china_ip_route 110.236.0.0/15 -add china_ip_route 110.240.0.0/12 -add china_ip_route 111.0.0.0/10 -add china_ip_route 111.66.0.0/16 -add china_ip_route 111.67.192.0/20 -add china_ip_route 111.68.64.0/19 -add china_ip_route 111.72.0.0/13 -add china_ip_route 111.85.0.0/16 -add china_ip_route 111.91.192.0/19 -add china_ip_route 111.92.248.0/22 -add china_ip_route 111.92.252.0/22 -add china_ip_route 111.112.0.0/15 -add china_ip_route 111.114.0.0/15 -add china_ip_route 111.116.0.0/15 -add china_ip_route 111.118.200.0/21 -add china_ip_route 111.119.64.0/18 -add china_ip_route 111.119.128.0/19 -add china_ip_route 111.120.0.0/14 -add china_ip_route 111.124.0.0/16 -add china_ip_route 111.126.0.0/15 -add china_ip_route 111.128.0.0/11 -add china_ip_route 111.160.0.0/13 -add china_ip_route 111.170.0.0/16 -add china_ip_route 111.172.0.0/14 -add china_ip_route 111.176.0.0/13 -add china_ip_route 111.186.0.0/15 -add china_ip_route 111.192.0.0/12 -add china_ip_route 111.208.0.0/14 -add china_ip_route 111.212.0.0/14 -add china_ip_route 111.221.28.0/24 -add china_ip_route 111.221.128.0/17 -add china_ip_route 111.222.0.0/16 -add china_ip_route 111.223.4.0/22 -add china_ip_route 111.223.8.0/22 -add china_ip_route 111.223.12.0/22 -add china_ip_route 111.223.16.0/22 -add china_ip_route 111.223.240.0/22 -add china_ip_route 111.223.248.0/22 -add china_ip_route 111.224.0.0/14 -add china_ip_route 111.228.0.0/14 -add china_ip_route 111.235.96.0/19 -add china_ip_route 111.235.156.0/22 -add china_ip_route 111.235.160.0/19 -add china_ip_route 112.0.0.0/10 -add china_ip_route 112.64.0.0/15 -add china_ip_route 112.66.0.0/15 -add china_ip_route 112.73.0.0/16 -add china_ip_route 112.74.0.0/15 -add china_ip_route 112.80.0.0/13 -add china_ip_route 112.88.0.0/13 -add china_ip_route 112.96.0.0/15 -add china_ip_route 112.98.0.0/15 -add china_ip_route 112.100.0.0/14 -add china_ip_route 112.109.128.0/17 -add china_ip_route 112.111.0.0/16 -add china_ip_route 112.112.0.0/14 -add china_ip_route 112.116.0.0/15 -add china_ip_route 112.122.0.0/15 -add china_ip_route 112.124.0.0/14 -add china_ip_route 112.128.0.0/14 -add china_ip_route 112.132.0.0/16 -add china_ip_route 112.137.48.0/21 -add china_ip_route 112.192.0.0/14 -add china_ip_route 112.224.0.0/11 -add china_ip_route 113.0.0.0/13 -add china_ip_route 113.8.0.0/15 -add china_ip_route 113.11.192.0/19 -add china_ip_route 113.12.0.0/14 -add china_ip_route 113.16.0.0/15 -add china_ip_route 113.18.0.0/16 -add china_ip_route 113.21.232.0/22 -add china_ip_route 113.21.236.0/22 -add china_ip_route 113.24.0.0/14 -add china_ip_route 113.31.0.0/16 -add china_ip_route 113.44.0.0/14 -add china_ip_route 113.48.0.0/14 -add china_ip_route 113.52.160.0/19 -add china_ip_route 113.52.228.0/22 -add china_ip_route 113.54.0.0/15 -add china_ip_route 113.56.0.0/15 -add china_ip_route 113.58.0.0/16 -add china_ip_route 113.59.0.0/17 -add china_ip_route 113.59.224.0/22 -add china_ip_route 113.62.0.0/15 -add china_ip_route 113.64.0.0/11 -add china_ip_route 113.96.0.0/12 -add china_ip_route 113.112.0.0/13 -add china_ip_route 113.120.0.0/13 -add china_ip_route 113.128.0.0/15 -add china_ip_route 113.130.96.0/20 -add china_ip_route 113.130.112.0/21 -add china_ip_route 113.132.0.0/14 -add china_ip_route 113.136.0.0/13 -add china_ip_route 113.194.0.0/15 -add china_ip_route 113.197.100.0/22 -add china_ip_route 113.200.0.0/15 -add china_ip_route 113.202.0.0/16 -add china_ip_route 113.204.0.0/14 -add china_ip_route 113.208.96.0/19 -add china_ip_route 113.208.128.0/17 -add china_ip_route 113.209.0.0/16 -add china_ip_route 113.212.0.0/18 -add china_ip_route 113.212.88.0/22 -add china_ip_route 113.212.100.0/22 -add china_ip_route 113.212.184.0/21 -add china_ip_route 113.213.0.0/17 -add china_ip_route 113.214.0.0/15 -add china_ip_route 113.218.0.0/15 -add china_ip_route 113.220.0.0/14 -add china_ip_route 113.224.0.0/12 -add china_ip_route 113.240.0.0/13 -add china_ip_route 113.248.0.0/14 -add china_ip_route 114.28.0.0/16 -add china_ip_route 114.31.64.0/22 -add china_ip_route 114.31.68.0/22 -add china_ip_route 114.54.0.0/15 -add china_ip_route 114.60.0.0/14 -add china_ip_route 114.64.0.0/14 -add china_ip_route 114.68.0.0/16 -add china_ip_route 114.79.64.0/18 -add china_ip_route 114.80.0.0/12 -add china_ip_route 114.96.0.0/13 -add china_ip_route 114.104.0.0/14 -add china_ip_route 114.110.0.0/20 -add china_ip_route 114.110.64.0/18 -add china_ip_route 114.111.0.0/19 -add china_ip_route 114.111.160.0/19 -add china_ip_route 114.112.0.0/14 -add china_ip_route 114.116.0.0/16 -add china_ip_route 114.117.0.0/17 -add china_ip_route 114.117.128.0/17 -add china_ip_route 114.118.0.0/16 -add china_ip_route 114.119.0.0/17 -add china_ip_route 114.119.192.0/21 -add china_ip_route 114.119.200.0/22 -add china_ip_route 114.119.204.0/22 -add china_ip_route 114.119.208.0/20 -add china_ip_route 114.119.224.0/19 -add china_ip_route 114.132.0.0/16 -add china_ip_route 114.135.0.0/16 -add china_ip_route 114.138.0.0/15 -add china_ip_route 114.141.64.0/21 -add china_ip_route 114.141.80.0/22 -add china_ip_route 114.141.84.0/22 -add china_ip_route 114.141.128.0/18 -add china_ip_route 114.196.0.0/15 -add china_ip_route 114.198.248.0/21 -add china_ip_route 114.208.0.0/14 -add china_ip_route 114.212.0.0/15 -add china_ip_route 114.214.0.0/16 -add china_ip_route 114.215.0.0/16 -add china_ip_route 114.216.0.0/13 -add china_ip_route 114.224.0.0/12 -add china_ip_route 114.240.0.0/12 -add china_ip_route 115.24.0.0/14 -add china_ip_route 115.28.0.0/15 -add china_ip_route 115.31.64.0/22 -add china_ip_route 115.31.68.0/22 -add china_ip_route 115.31.72.0/22 -add china_ip_route 115.31.76.0/22 -add china_ip_route 115.32.0.0/14 -add china_ip_route 115.42.56.0/22 -add china_ip_route 115.44.0.0/15 -add china_ip_route 115.46.0.0/16 -add china_ip_route 115.47.0.0/16 -add china_ip_route 115.48.0.0/12 -add china_ip_route 115.69.64.0/20 -add china_ip_route 115.84.0.0/18 -add china_ip_route 115.84.192.0/19 -add china_ip_route 115.85.192.0/18 -add china_ip_route 115.100.0.0/14 -add china_ip_route 115.104.0.0/14 -add china_ip_route 115.120.0.0/14 -add china_ip_route 115.124.16.0/20 -add china_ip_route 115.148.0.0/14 -add china_ip_route 115.152.0.0/15 -add china_ip_route 115.154.0.0/15 -add china_ip_route 115.156.0.0/15 -add china_ip_route 115.158.0.0/16 -add china_ip_route 115.159.0.0/16 -add china_ip_route 115.166.64.0/19 -add china_ip_route 115.168.0.0/14 -add china_ip_route 115.172.0.0/14 -add china_ip_route 115.180.0.0/15 -add china_ip_route 115.182.0.0/16 -add china_ip_route 115.183.0.0/16 -add china_ip_route 115.187.0.0/22 -add china_ip_route 115.187.4.0/22 -add china_ip_route 115.187.8.0/22 -add china_ip_route 115.187.12.0/22 -add china_ip_route 115.190.0.0/15 -add china_ip_route 115.192.0.0/11 -add china_ip_route 115.224.0.0/12 -add china_ip_route 116.0.8.0/21 -add china_ip_route 116.0.24.0/21 -add china_ip_route 116.1.0.0/16 -add china_ip_route 116.2.0.0/15 -add china_ip_route 116.4.0.0/14 -add china_ip_route 116.8.0.0/14 -add china_ip_route 116.13.0.0/16 -add china_ip_route 116.16.0.0/12 -add china_ip_route 116.50.0.0/20 -add china_ip_route 116.52.0.0/14 -add china_ip_route 116.56.0.0/15 -add china_ip_route 116.58.128.0/20 -add china_ip_route 116.58.208.0/20 -add china_ip_route 116.60.0.0/14 -add china_ip_route 116.66.0.0/17 -add china_ip_route 116.66.176.0/22 -add china_ip_route 116.68.136.0/22 -add china_ip_route 116.68.140.0/22 -add china_ip_route 116.68.176.0/22 -add china_ip_route 116.68.180.0/22 -add china_ip_route 116.69.0.0/16 -add china_ip_route 116.70.0.0/17 -add china_ip_route 116.76.0.0/15 -add china_ip_route 116.78.0.0/15 -add china_ip_route 116.85.0.0/16 -add china_ip_route 116.89.144.0/20 -add china_ip_route 116.89.240.0/22 -add china_ip_route 116.90.80.0/20 -add china_ip_route 116.90.184.0/21 -add china_ip_route 116.95.0.0/16 -add china_ip_route 116.112.0.0/14 -add china_ip_route 116.116.0.0/15 -add china_ip_route 116.128.0.0/10 -add china_ip_route 116.192.0.0/16 -add china_ip_route 116.193.16.0/20 -add china_ip_route 116.193.32.0/19 -add china_ip_route 116.193.152.0/22 -add china_ip_route 116.193.164.0/22 -add china_ip_route 116.193.176.0/21 -add china_ip_route 116.194.0.0/15 -add china_ip_route 116.196.0.0/17 -add china_ip_route 116.196.128.0/18 -add china_ip_route 116.196.192.0/18 -add china_ip_route 116.197.160.0/22 -add china_ip_route 116.197.164.0/22 -add china_ip_route 116.198.0.0/16 -add china_ip_route 116.199.0.0/17 -add china_ip_route 116.199.128.0/19 -add china_ip_route 116.204.0.0/17 -add china_ip_route 116.204.132.0/22 -add china_ip_route 116.204.168.0/22 -add china_ip_route 116.204.216.0/22 -add china_ip_route 116.204.232.0/22 -add china_ip_route 116.205.0.0/16 -add china_ip_route 116.206.92.0/22 -add china_ip_route 116.206.176.0/22 -add china_ip_route 116.207.0.0/16 -add china_ip_route 116.208.0.0/14 -add china_ip_route 116.212.160.0/20 -add china_ip_route 116.213.44.0/22 -add china_ip_route 116.213.64.0/18 -add china_ip_route 116.213.128.0/17 -add china_ip_route 116.214.32.0/19 -add china_ip_route 116.214.64.0/20 -add china_ip_route 116.214.128.0/17 -add china_ip_route 116.215.0.0/16 -add china_ip_route 116.216.0.0/14 -add china_ip_route 116.224.0.0/12 -add china_ip_route 116.242.0.0/15 -add china_ip_route 116.244.0.0/15 -add china_ip_route 116.246.0.0/15 -add china_ip_route 116.248.0.0/15 -add china_ip_route 116.251.64.0/18 -add china_ip_route 116.252.0.0/15 -add china_ip_route 116.254.104.0/22 -add china_ip_route 116.254.108.0/22 -add china_ip_route 116.254.128.0/17 -add china_ip_route 116.255.128.0/17 -add china_ip_route 117.8.0.0/13 -add china_ip_route 117.21.0.0/16 -add china_ip_route 117.22.0.0/15 -add china_ip_route 117.24.0.0/13 -add china_ip_route 117.32.0.0/13 -add china_ip_route 117.40.0.0/14 -add china_ip_route 117.44.0.0/15 -add china_ip_route 117.48.0.0/14 -add china_ip_route 117.53.48.0/20 -add china_ip_route 117.53.176.0/20 -add china_ip_route 117.57.0.0/16 -add china_ip_route 117.58.0.0/17 -add china_ip_route 117.59.0.0/16 -add china_ip_route 117.60.0.0/14 -add china_ip_route 117.64.0.0/13 -add china_ip_route 117.72.0.0/15 -add china_ip_route 117.74.64.0/20 -add china_ip_route 117.74.80.0/20 -add china_ip_route 117.74.128.0/17 -add china_ip_route 117.75.0.0/16 -add china_ip_route 117.76.0.0/14 -add china_ip_route 117.80.0.0/12 -add china_ip_route 117.100.0.0/15 -add china_ip_route 117.103.16.0/20 -add china_ip_route 117.103.40.0/21 -add china_ip_route 117.103.72.0/21 -add china_ip_route 117.103.128.0/20 -add china_ip_route 117.104.168.0/21 -add china_ip_route 117.106.0.0/15 -add china_ip_route 117.112.0.0/13 -add china_ip_route 117.120.64.0/18 -add china_ip_route 117.120.128.0/17 -add china_ip_route 117.121.0.0/17 -add china_ip_route 117.121.128.0/18 -add china_ip_route 117.121.192.0/21 -add china_ip_route 117.122.128.0/17 -add china_ip_route 117.124.0.0/14 -add china_ip_route 117.128.0.0/10 -add china_ip_route 118.24.0.0/15 -add china_ip_route 118.26.0.0/19 -add china_ip_route 118.26.32.0/22 -add china_ip_route 118.26.40.0/21 -add china_ip_route 118.26.48.0/21 -add china_ip_route 118.26.56.0/21 -add china_ip_route 118.26.64.0/19 -add china_ip_route 118.26.96.0/21 -add china_ip_route 118.26.112.0/21 -add china_ip_route 118.26.120.0/21 -add china_ip_route 118.26.128.0/20 -add china_ip_route 118.26.160.0/20 -add china_ip_route 118.26.188.0/22 -add china_ip_route 118.26.192.0/18 -add china_ip_route 118.28.0.0/15 -add china_ip_route 118.30.0.0/16 -add china_ip_route 118.31.0.0/16 -add china_ip_route 118.64.0.0/15 -add china_ip_route 118.66.0.0/16 -add china_ip_route 118.67.112.0/20 -add china_ip_route 118.72.0.0/13 -add china_ip_route 118.80.0.0/15 -add china_ip_route 118.84.0.0/15 -add china_ip_route 118.88.32.0/19 -add china_ip_route 118.88.64.0/18 -add china_ip_route 118.88.128.0/17 -add china_ip_route 118.89.0.0/16 -add china_ip_route 118.91.240.0/20 -add china_ip_route 118.102.16.0/20 -add china_ip_route 118.102.32.0/21 -add china_ip_route 118.103.164.0/22 -add china_ip_route 118.103.168.0/22 -add china_ip_route 118.103.172.0/22 -add china_ip_route 118.103.176.0/22 -add china_ip_route 118.107.180.0/22 -add china_ip_route 118.112.0.0/13 -add china_ip_route 118.120.0.0/14 -add china_ip_route 118.124.0.0/15 -add china_ip_route 118.126.0.0/16 -add china_ip_route 118.127.128.0/19 -add china_ip_route 118.132.0.0/14 -add china_ip_route 118.144.0.0/14 -add china_ip_route 118.178.0.0/16 -add china_ip_route 118.180.0.0/14 -add china_ip_route 118.184.0.0/17 -add china_ip_route 118.184.128.0/17 -add china_ip_route 118.186.0.0/15 -add china_ip_route 118.188.0.0/16 -add china_ip_route 118.190.0.0/16 -add china_ip_route 118.191.0.0/21 -add china_ip_route 118.191.8.0/22 -add china_ip_route 118.191.12.0/24 -add china_ip_route 118.191.16.0/21 -add china_ip_route 118.191.64.0/20 -add china_ip_route 118.191.80.0/22 -add china_ip_route 118.191.128.0/19 -add china_ip_route 118.191.176.0/20 -add china_ip_route 118.191.192.0/20 -add china_ip_route 118.191.208.0/24 -add china_ip_route 118.191.216.0/22 -add china_ip_route 118.191.223.0/24 -add china_ip_route 118.191.224.0/24 -add china_ip_route 118.191.240.0/20 -add china_ip_route 118.192.0.0/16 -add china_ip_route 118.193.0.0/21 -add china_ip_route 118.193.8.0/21 -add china_ip_route 118.193.48.0/21 -add china_ip_route 118.193.96.0/19 -add china_ip_route 118.193.128.0/17 -add china_ip_route 118.194.0.0/17 -add china_ip_route 118.194.128.0/18 -add china_ip_route 118.194.192.0/19 -add china_ip_route 118.194.224.0/22 -add china_ip_route 118.194.240.0/21 -add china_ip_route 118.195.0.0/17 -add china_ip_route 118.195.128.0/17 -add china_ip_route 118.196.0.0/14 -add china_ip_route 118.202.0.0/15 -add china_ip_route 118.204.0.0/14 -add china_ip_route 118.212.0.0/16 -add china_ip_route 118.213.0.0/16 -add china_ip_route 118.215.192.0/18 -add china_ip_route 118.224.0.0/14 -add china_ip_route 118.228.0.0/15 -add china_ip_route 118.230.0.0/16 -add china_ip_route 118.239.0.0/16 -add china_ip_route 118.242.0.0/16 -add china_ip_route 118.244.0.0/14 -add china_ip_route 118.248.0.0/13 -add china_ip_route 119.0.0.0/15 -add china_ip_route 119.2.0.0/19 -add china_ip_route 119.2.128.0/17 -add china_ip_route 119.3.0.0/16 -add china_ip_route 119.4.0.0/14 -add china_ip_route 119.10.0.0/17 -add china_ip_route 119.15.136.0/21 -add china_ip_route 119.16.0.0/16 -add china_ip_route 119.18.192.0/20 -add china_ip_route 119.18.208.0/21 -add china_ip_route 119.18.224.0/20 -add china_ip_route 119.18.240.0/20 -add china_ip_route 119.19.0.0/16 -add china_ip_route 119.20.0.0/14 -add china_ip_route 119.27.64.0/18 -add china_ip_route 119.27.128.0/19 -add china_ip_route 119.27.160.0/19 -add china_ip_route 119.27.192.0/18 -add china_ip_route 119.28.0.0/15 -add china_ip_route 119.30.48.0/20 -add china_ip_route 119.31.192.0/19 -add china_ip_route 119.32.0.0/14 -add china_ip_route 119.36.0.0/16 -add china_ip_route 119.37.0.0/17 -add china_ip_route 119.37.128.0/18 -add china_ip_route 119.37.192.0/18 -add china_ip_route 119.38.0.0/17 -add china_ip_route 119.38.128.0/18 -add china_ip_route 119.38.192.0/20 -add china_ip_route 119.38.208.0/20 -add china_ip_route 119.38.224.0/19 -add china_ip_route 119.39.0.0/16 -add china_ip_route 119.40.0.0/18 -add china_ip_route 119.40.64.0/20 -add china_ip_route 119.40.128.0/17 -add china_ip_route 119.41.0.0/16 -add china_ip_route 119.42.0.0/19 -add china_ip_route 119.42.128.0/21 -add china_ip_route 119.42.136.0/21 -add china_ip_route 119.42.224.0/19 -add china_ip_route 119.44.0.0/15 -add china_ip_route 119.48.0.0/13 -add china_ip_route 119.57.0.0/16 -add china_ip_route 119.58.0.0/16 -add china_ip_route 119.59.128.0/17 -add china_ip_route 119.60.0.0/16 -add china_ip_route 119.61.0.0/16 -add china_ip_route 119.62.0.0/16 -add china_ip_route 119.63.32.0/19 -add china_ip_route 119.75.208.0/20 -add china_ip_route 119.78.0.0/15 -add china_ip_route 119.80.0.0/16 -add china_ip_route 119.82.208.0/20 -add china_ip_route 119.84.0.0/14 -add china_ip_route 119.88.0.0/14 -add china_ip_route 119.96.0.0/13 -add china_ip_route 119.108.0.0/15 -add china_ip_route 119.112.0.0/13 -add china_ip_route 119.120.0.0/13 -add china_ip_route 119.128.0.0/12 -add china_ip_route 119.144.0.0/14 -add china_ip_route 119.148.160.0/20 -add china_ip_route 119.148.176.0/20 -add china_ip_route 119.151.192.0/18 -add china_ip_route 119.160.200.0/21 -add china_ip_route 119.161.120.0/22 -add china_ip_route 119.161.124.0/22 -add china_ip_route 119.161.128.0/17 -add china_ip_route 119.162.0.0/15 -add china_ip_route 119.164.0.0/14 -add china_ip_route 119.176.0.0/12 -add china_ip_route 119.232.0.0/15 -add china_ip_route 119.235.128.0/18 -add china_ip_route 119.248.0.0/14 -add china_ip_route 119.252.96.0/21 -add china_ip_route 119.252.240.0/20 -add china_ip_route 119.253.0.0/16 -add china_ip_route 119.254.0.0/15 -add china_ip_route 120.0.0.0/12 -add china_ip_route 120.24.0.0/14 -add china_ip_route 120.30.0.0/16 -add china_ip_route 120.31.0.0/16 -add china_ip_route 120.32.0.0/13 -add china_ip_route 120.40.0.0/14 -add china_ip_route 120.44.0.0/15 -add china_ip_route 120.46.0.0/16 -add china_ip_route 120.47.0.0/16 -add china_ip_route 120.48.0.0/15 -add china_ip_route 120.52.0.0/16 -add china_ip_route 120.53.0.0/16 -add china_ip_route 120.54.0.0/15 -add china_ip_route 120.64.0.0/14 -add china_ip_route 120.68.0.0/14 -add china_ip_route 120.72.32.0/19 -add china_ip_route 120.72.128.0/17 -add china_ip_route 120.76.0.0/14 -add china_ip_route 120.80.0.0/13 -add china_ip_route 120.88.8.0/21 -add china_ip_route 120.90.0.0/15 -add china_ip_route 120.92.0.0/16 -add china_ip_route 120.94.0.0/16 -add china_ip_route 120.95.0.0/16 -add china_ip_route 120.128.0.0/14 -add china_ip_route 120.132.0.0/17 -add china_ip_route 120.132.128.0/17 -add china_ip_route 120.133.0.0/16 -add china_ip_route 120.134.0.0/15 -add china_ip_route 120.136.16.0/22 -add china_ip_route 120.136.20.0/22 -add china_ip_route 120.136.128.0/18 -add china_ip_route 120.137.0.0/17 -add china_ip_route 120.143.128.0/19 -add china_ip_route 120.192.0.0/10 -add china_ip_route 121.0.8.0/21 -add china_ip_route 121.0.16.0/20 -add china_ip_route 121.4.0.0/15 -add china_ip_route 121.8.0.0/13 -add china_ip_route 121.16.0.0/13 -add china_ip_route 121.24.0.0/14 -add china_ip_route 121.28.0.0/15 -add china_ip_route 121.30.0.0/16 -add china_ip_route 121.31.0.0/16 -add china_ip_route 121.32.0.0/14 -add china_ip_route 121.36.0.0/16 -add china_ip_route 121.37.0.0/16 -add china_ip_route 121.38.0.0/15 -add china_ip_route 121.40.0.0/14 -add china_ip_route 121.46.0.0/18 -add china_ip_route 121.46.76.0/22 -add china_ip_route 121.46.128.0/17 -add china_ip_route 121.47.0.0/16 -add china_ip_route 121.48.0.0/15 -add china_ip_route 121.50.8.0/21 -add china_ip_route 121.51.0.0/16 -add china_ip_route 121.52.160.0/19 -add china_ip_route 121.52.208.0/20 -add china_ip_route 121.52.224.0/19 -add china_ip_route 121.54.176.0/21 -add china_ip_route 121.54.188.0/22 -add china_ip_route 121.55.0.0/18 -add china_ip_route 121.56.0.0/15 -add china_ip_route 121.58.0.0/17 -add china_ip_route 121.58.136.0/21 -add china_ip_route 121.58.144.0/20 -add china_ip_route 121.58.160.0/21 -add china_ip_route 121.59.0.0/16 -add china_ip_route 121.60.0.0/14 -add china_ip_route 121.68.0.0/14 -add china_ip_route 121.76.0.0/15 -add china_ip_route 121.79.128.0/18 -add china_ip_route 121.89.0.0/16 -add china_ip_route 121.91.104.0/21 -add china_ip_route 121.100.128.0/17 -add china_ip_route 121.101.0.0/18 -add china_ip_route 121.101.208.0/20 -add china_ip_route 121.192.0.0/16 -add china_ip_route 121.193.0.0/16 -add china_ip_route 121.194.0.0/15 -add china_ip_route 121.196.0.0/14 -add china_ip_route 121.200.192.0/21 -add china_ip_route 121.201.0.0/16 -add china_ip_route 121.204.0.0/14 -add china_ip_route 121.224.0.0/12 -add china_ip_route 121.248.0.0/14 -add china_ip_route 121.255.0.0/16 -add china_ip_route 122.0.64.0/18 -add china_ip_route 122.0.128.0/17 -add china_ip_route 122.4.0.0/14 -add china_ip_route 122.8.0.0/17 -add china_ip_route 122.8.192.0/18 -add china_ip_route 122.9.0.0/16 -add china_ip_route 122.10.128.0/22 -add china_ip_route 122.10.132.0/23 -add china_ip_route 122.10.136.0/23 -add china_ip_route 122.10.164.0/22 -add china_ip_route 122.10.168.0/21 -add china_ip_route 122.10.176.0/20 -add china_ip_route 122.10.192.0/22 -add china_ip_route 122.10.200.0/21 -add china_ip_route 122.10.208.0/21 -add china_ip_route 122.10.216.0/22 -add china_ip_route 122.10.228.0/22 -add china_ip_route 122.10.232.0/21 -add china_ip_route 122.10.240.0/22 -add china_ip_route 122.11.0.0/17 -add china_ip_route 122.12.0.0/16 -add china_ip_route 122.13.0.0/16 -add china_ip_route 122.14.0.0/17 -add china_ip_route 122.14.128.0/18 -add china_ip_route 122.14.192.0/18 -add china_ip_route 122.48.0.0/16 -add china_ip_route 122.49.0.0/18 -add china_ip_route 122.51.0.0/16 -add china_ip_route 122.64.0.0/11 -add china_ip_route 122.96.0.0/15 -add china_ip_route 122.102.0.0/20 -add china_ip_route 122.102.64.0/20 -add china_ip_route 122.102.80.0/20 -add china_ip_route 122.112.0.0/18 -add china_ip_route 122.112.64.0/18 -add china_ip_route 122.112.128.0/17 -add china_ip_route 122.113.0.0/16 -add china_ip_route 122.114.0.0/16 -add china_ip_route 122.115.0.0/17 -add china_ip_route 122.115.128.0/19 -add china_ip_route 122.115.160.0/19 -add china_ip_route 122.115.192.0/19 -add china_ip_route 122.115.224.0/19 -add china_ip_route 122.119.0.0/16 -add china_ip_route 122.128.100.0/22 -add china_ip_route 122.128.120.0/21 -add china_ip_route 122.136.0.0/13 -add china_ip_route 122.144.128.0/17 -add china_ip_route 122.152.192.0/18 -add china_ip_route 122.156.0.0/14 -add china_ip_route 122.188.0.0/14 -add china_ip_route 122.192.0.0/14 -add china_ip_route 122.198.0.0/16 -add china_ip_route 122.200.40.0/22 -add china_ip_route 122.200.44.0/22 -add china_ip_route 122.200.64.0/18 -add china_ip_route 122.201.48.0/20 -add china_ip_route 122.204.0.0/14 -add china_ip_route 122.224.0.0/12 -add china_ip_route 122.240.0.0/13 -add china_ip_route 122.248.24.0/21 -add china_ip_route 122.248.48.0/20 -add china_ip_route 122.255.64.0/21 -add china_ip_route 123.0.128.0/18 -add china_ip_route 123.4.0.0/14 -add china_ip_route 123.8.0.0/13 -add china_ip_route 123.49.128.0/17 -add china_ip_route 123.50.160.0/19 -add china_ip_route 123.52.0.0/14 -add china_ip_route 123.56.0.0/15 -add china_ip_route 123.58.0.0/20 -add china_ip_route 123.58.16.0/20 -add china_ip_route 123.58.32.0/19 -add china_ip_route 123.58.64.0/19 -add china_ip_route 123.58.96.0/19 -add china_ip_route 123.58.128.0/18 -add china_ip_route 123.58.224.0/20 -add china_ip_route 123.58.240.0/20 -add china_ip_route 123.59.0.0/16 -add china_ip_route 123.60.0.0/16 -add china_ip_route 123.61.0.0/16 -add china_ip_route 123.62.0.0/16 -add china_ip_route 123.64.0.0/11 -add china_ip_route 123.96.0.0/15 -add china_ip_route 123.98.0.0/17 -add china_ip_route 123.99.128.0/17 -add china_ip_route 123.100.0.0/19 -add china_ip_route 123.101.0.0/16 -add china_ip_route 123.103.0.0/17 -add china_ip_route 123.108.128.0/20 -add china_ip_route 123.108.208.0/20 -add china_ip_route 123.112.0.0/12 -add china_ip_route 123.128.0.0/13 -add china_ip_route 123.136.80.0/20 -add china_ip_route 123.137.0.0/16 -add china_ip_route 123.138.0.0/15 -add china_ip_route 123.144.0.0/14 -add china_ip_route 123.148.0.0/16 -add china_ip_route 123.149.0.0/16 -add china_ip_route 123.150.0.0/15 -add china_ip_route 123.152.0.0/13 -add china_ip_route 123.160.0.0/14 -add china_ip_route 123.164.0.0/14 -add china_ip_route 123.168.0.0/14 -add china_ip_route 123.172.0.0/15 -add china_ip_route 123.174.0.0/15 -add china_ip_route 123.176.60.0/22 -add china_ip_route 123.176.80.0/20 -add china_ip_route 123.177.0.0/16 -add china_ip_route 123.178.0.0/15 -add china_ip_route 123.180.0.0/14 -add china_ip_route 123.184.0.0/14 -add china_ip_route 123.188.0.0/14 -add china_ip_route 123.196.0.0/15 -add china_ip_route 123.199.128.0/17 -add china_ip_route 123.206.0.0/15 -add china_ip_route 123.232.0.0/14 -add china_ip_route 123.242.0.0/17 -add china_ip_route 123.242.192.0/22 -add china_ip_route 123.242.196.0/22 -add china_ip_route 123.244.0.0/14 -add china_ip_route 123.249.0.0/16 -add china_ip_route 123.253.108.0/22 -add china_ip_route 123.253.240.0/22 -add china_ip_route 123.254.96.0/22 -add china_ip_route 123.254.100.0/22 -add china_ip_route 124.6.64.0/18 -add china_ip_route 124.14.0.0/15 -add china_ip_route 124.16.0.0/15 -add china_ip_route 124.20.0.0/16 -add china_ip_route 124.21.0.0/20 -add china_ip_route 124.21.16.0/20 -add china_ip_route 124.21.32.0/19 -add china_ip_route 124.21.64.0/18 -add china_ip_route 124.21.128.0/17 -add china_ip_route 124.22.0.0/15 -add china_ip_route 124.28.192.0/18 -add china_ip_route 124.29.0.0/17 -add china_ip_route 124.31.0.0/16 -add china_ip_route 124.40.112.0/20 -add china_ip_route 124.40.128.0/18 -add china_ip_route 124.40.192.0/19 -add china_ip_route 124.40.240.0/22 -add china_ip_route 124.42.0.0/17 -add china_ip_route 124.42.128.0/17 -add china_ip_route 124.47.0.0/18 -add china_ip_route 124.64.0.0/15 -add china_ip_route 124.66.0.0/17 -add china_ip_route 124.67.0.0/16 -add china_ip_route 124.68.0.0/15 -add china_ip_route 124.70.0.0/15 -add china_ip_route 124.72.0.0/16 -add china_ip_route 124.73.0.0/16 -add china_ip_route 124.74.0.0/15 -add china_ip_route 124.76.0.0/14 -add china_ip_route 124.88.0.0/16 -add china_ip_route 124.89.0.0/17 -add china_ip_route 124.89.128.0/17 -add china_ip_route 124.90.0.0/15 -add china_ip_route 124.92.0.0/14 -add china_ip_route 124.108.8.0/21 -add china_ip_route 124.108.40.0/21 -add china_ip_route 124.109.96.0/21 -add china_ip_route 124.112.0.0/15 -add china_ip_route 124.114.0.0/15 -add china_ip_route 124.116.0.0/16 -add china_ip_route 124.117.0.0/16 -add china_ip_route 124.118.0.0/15 -add china_ip_route 124.126.0.0/15 -add china_ip_route 124.128.0.0/13 -add china_ip_route 124.147.128.0/17 -add china_ip_route 124.150.137.0/24 -add china_ip_route 124.151.0.0/16 -add china_ip_route 124.152.0.0/16 -add china_ip_route 124.160.0.0/16 -add china_ip_route 124.161.0.0/16 -add china_ip_route 124.162.0.0/16 -add china_ip_route 124.163.0.0/16 -add china_ip_route 124.164.0.0/14 -add china_ip_route 124.172.0.0/15 -add china_ip_route 124.174.0.0/15 -add china_ip_route 124.192.0.0/15 -add china_ip_route 124.196.0.0/16 -add china_ip_route 124.200.0.0/13 -add china_ip_route 124.220.0.0/14 -add china_ip_route 124.224.0.0/16 -add china_ip_route 124.225.0.0/16 -add china_ip_route 124.226.0.0/15 -add china_ip_route 124.228.0.0/14 -add china_ip_route 124.232.0.0/15 -add china_ip_route 124.234.0.0/15 -add china_ip_route 124.236.0.0/14 -add china_ip_route 124.240.0.0/17 -add china_ip_route 124.240.128.0/18 -add china_ip_route 124.242.0.0/16 -add china_ip_route 124.243.192.0/18 -add china_ip_route 124.248.0.0/17 -add china_ip_route 124.249.0.0/16 -add china_ip_route 124.250.0.0/15 -add china_ip_route 124.254.0.0/18 -add china_ip_route 125.31.192.0/18 -add china_ip_route 125.32.0.0/16 -add china_ip_route 125.33.0.0/16 -add china_ip_route 125.34.0.0/16 -add china_ip_route 125.35.0.0/17 -add china_ip_route 125.35.128.0/17 -add china_ip_route 125.36.0.0/14 -add china_ip_route 125.40.0.0/13 -add china_ip_route 125.58.128.0/17 -add china_ip_route 125.61.128.0/17 -add china_ip_route 125.62.0.0/18 -add china_ip_route 125.64.0.0/13 -add china_ip_route 125.72.0.0/16 -add china_ip_route 125.73.0.0/16 -add china_ip_route 125.74.0.0/15 -add china_ip_route 125.76.0.0/17 -add china_ip_route 125.76.128.0/17 -add china_ip_route 125.77.0.0/16 -add china_ip_route 125.78.0.0/15 -add china_ip_route 125.80.0.0/13 -add china_ip_route 125.88.0.0/13 -add china_ip_route 125.96.0.0/15 -add china_ip_route 125.98.0.0/16 -add china_ip_route 125.104.0.0/13 -add china_ip_route 125.112.0.0/12 -add china_ip_route 125.169.0.0/16 -add china_ip_route 125.171.0.0/16 -add china_ip_route 125.208.0.0/18 -add china_ip_route 125.210.0.0/16 -add china_ip_route 125.211.0.0/16 -add china_ip_route 125.213.0.0/17 -add china_ip_route 125.214.96.0/19 -add china_ip_route 125.215.0.0/18 -add china_ip_route 125.216.0.0/15 -add china_ip_route 125.218.0.0/16 -add china_ip_route 125.219.0.0/16 -add china_ip_route 125.220.0.0/15 -add china_ip_route 125.222.0.0/15 -add china_ip_route 125.254.128.0/18 -add china_ip_route 125.254.192.0/18 -add china_ip_route 128.108.0.0/16 -add china_ip_route 129.28.0.0/16 -add china_ip_route 129.204.0.0/16 -add china_ip_route 129.211.0.0/16 -add china_ip_route 132.232.0.0/16 -add china_ip_route 134.175.0.0/16 -add china_ip_route 137.59.59.0/24 -add china_ip_route 137.59.88.0/22 -add china_ip_route 139.5.56.0/22 -add china_ip_route 139.5.60.0/22 -add china_ip_route 139.5.80.0/22 -add china_ip_route 139.5.92.0/22 -add china_ip_route 139.5.108.0/22 -add china_ip_route 139.5.128.0/22 -add china_ip_route 139.5.160.0/22 -add china_ip_route 139.5.192.0/22 -add china_ip_route 139.5.204.0/22 -add china_ip_route 139.5.208.0/22 -add china_ip_route 139.5.212.0/22 -add china_ip_route 139.5.244.0/22 -add china_ip_route 139.9.0.0/16 -add china_ip_route 139.129.0.0/16 -add china_ip_route 139.148.0.0/16 -add china_ip_route 139.155.0.0/16 -add china_ip_route 139.159.0.0/16 -add china_ip_route 139.170.0.0/16 -add china_ip_route 139.176.0.0/16 -add china_ip_route 139.183.0.0/16 -add china_ip_route 139.186.0.0/16 -add china_ip_route 139.189.0.0/16 -add china_ip_route 139.196.0.0/14 -add china_ip_route 139.200.0.0/13 -add china_ip_route 139.208.0.0/13 -add china_ip_route 139.217.0.0/16 -add china_ip_route 139.219.0.0/16 -add china_ip_route 139.220.0.0/15 -add china_ip_route 139.224.0.0/16 -add china_ip_route 139.226.0.0/15 -add china_ip_route 140.75.0.0/16 -add china_ip_route 140.143.0.0/16 -add china_ip_route 140.179.0.0/16 -add china_ip_route 140.205.0.0/16 -add china_ip_route 140.206.0.0/15 -add china_ip_route 140.210.0.0/17 -add china_ip_route 140.210.128.0/17 -add china_ip_route 140.224.0.0/16 -add china_ip_route 140.237.0.0/16 -add china_ip_route 140.240.0.0/16 -add china_ip_route 140.243.0.0/16 -add china_ip_route 140.246.0.0/16 -add china_ip_route 140.249.0.0/16 -add china_ip_route 140.250.0.0/16 -add china_ip_route 140.255.0.0/16 -add china_ip_route 142.70.0.0/16 -add china_ip_route 142.86.0.0/16 -add china_ip_route 144.0.0.0/16 -add china_ip_route 144.7.0.0/16 -add china_ip_route 144.12.0.0/16 -add china_ip_route 144.48.8.0/22 -add china_ip_route 144.48.64.0/22 -add china_ip_route 144.48.88.0/22 -add china_ip_route 144.48.156.0/22 -add china_ip_route 144.48.180.0/22 -add china_ip_route 144.48.184.0/22 -add china_ip_route 144.48.204.0/22 -add china_ip_route 144.48.208.0/22 -add china_ip_route 144.48.212.0/22 -add china_ip_route 144.48.220.0/22 -add china_ip_route 144.48.252.0/22 -add china_ip_route 144.52.0.0/16 -add china_ip_route 144.123.0.0/16 -add china_ip_route 144.255.0.0/16 -add china_ip_route 146.56.192.0/18 -add china_ip_route 146.196.56.0/22 -add china_ip_route 146.196.68.0/22 -add china_ip_route 146.196.72.0/22 -add china_ip_route 146.196.92.0/22 -add china_ip_route 146.196.112.0/22 -add china_ip_route 146.196.116.0/22 -add china_ip_route 146.196.124.0/22 -add china_ip_route 148.70.0.0/16 -add china_ip_route 149.41.0.0/16 -add china_ip_route 150.0.0.0/16 -add china_ip_route 150.115.0.0/16 -add china_ip_route 150.121.0.0/16 -add china_ip_route 150.122.0.0/16 -add china_ip_route 150.129.136.0/22 -add china_ip_route 150.129.192.0/22 -add china_ip_route 150.129.216.0/22 -add china_ip_route 150.129.252.0/22 -add china_ip_route 150.138.0.0/15 -add china_ip_route 150.158.0.0/16 -add china_ip_route 150.223.0.0/16 -add china_ip_route 150.242.0.0/22 -add china_ip_route 150.242.4.0/22 -add china_ip_route 150.242.8.0/22 -add china_ip_route 150.242.28.0/22 -add china_ip_route 150.242.44.0/22 -add china_ip_route 150.242.48.0/22 -add china_ip_route 150.242.52.0/22 -add china_ip_route 150.242.56.0/22 -add china_ip_route 150.242.76.0/22 -add china_ip_route 150.242.80.0/22 -add china_ip_route 150.242.92.0/22 -add china_ip_route 150.242.96.0/22 -add china_ip_route 150.242.112.0/22 -add china_ip_route 150.242.116.0/22 -add china_ip_route 150.242.120.0/22 -add china_ip_route 150.242.152.0/22 -add china_ip_route 150.242.156.0/22 -add china_ip_route 150.242.160.0/22 -add china_ip_route 150.242.164.0/22 -add china_ip_route 150.242.168.0/22 -add china_ip_route 150.242.184.0/22 -add china_ip_route 150.242.188.0/22 -add china_ip_route 150.242.192.0/22 -add china_ip_route 150.242.212.0/22 -add china_ip_route 150.242.224.0/22 -add china_ip_route 150.242.232.0/22 -add china_ip_route 150.242.236.0/22 -add china_ip_route 150.242.240.0/22 -add china_ip_route 150.242.244.0/22 -add china_ip_route 150.242.248.0/22 -add china_ip_route 150.248.0.0/16 -add china_ip_route 150.255.0.0/16 -add china_ip_route 152.104.128.0/17 -add china_ip_route 152.136.0.0/16 -add china_ip_route 153.0.0.0/16 -add china_ip_route 153.3.0.0/16 -add china_ip_route 153.34.0.0/15 -add china_ip_route 153.36.0.0/15 -add china_ip_route 153.99.0.0/16 -add china_ip_route 153.101.0.0/16 -add china_ip_route 153.118.0.0/15 -add china_ip_route 154.8.128.0/17 -add china_ip_route 157.0.0.0/16 -add china_ip_route 157.18.0.0/16 -add china_ip_route 157.61.0.0/16 -add china_ip_route 157.119.0.0/22 -add china_ip_route 157.119.8.0/22 -add china_ip_route 157.119.12.0/22 -add china_ip_route 157.119.16.0/22 -add china_ip_route 157.119.28.0/22 -add china_ip_route 157.119.132.0/22 -add china_ip_route 157.119.136.0/22 -add china_ip_route 157.119.140.0/22 -add china_ip_route 157.119.144.0/22 -add china_ip_route 157.119.148.0/22 -add china_ip_route 157.119.152.0/22 -add china_ip_route 157.119.156.0/22 -add china_ip_route 157.119.160.0/22 -add china_ip_route 157.119.164.0/22 -add china_ip_route 157.119.172.0/22 -add china_ip_route 157.119.192.0/22 -add china_ip_route 157.119.196.0/22 -add china_ip_route 157.119.240.0/22 -add china_ip_route 157.119.252.0/22 -add china_ip_route 157.122.0.0/16 -add china_ip_route 157.148.0.0/16 -add china_ip_route 157.156.0.0/16 -add china_ip_route 157.255.0.0/16 -add china_ip_route 158.60.0.0/16 -add china_ip_route 158.79.0.0/16 -add china_ip_route 159.27.0.0/16 -add china_ip_route 159.75.0.0/16 -add china_ip_route 159.226.0.0/16 -add china_ip_route 160.19.208.0/22 -add china_ip_route 160.19.212.0/22 -add china_ip_route 160.19.216.0/22 -add china_ip_route 160.20.48.0/22 -add china_ip_route 160.202.60.0/22 -add china_ip_route 160.202.148.0/22 -add china_ip_route 160.202.152.0/22 -add china_ip_route 160.202.168.0/22 -add china_ip_route 160.202.212.0/22 -add china_ip_route 160.202.216.0/22 -add china_ip_route 160.202.220.0/22 -add china_ip_route 160.202.224.0/22 -add china_ip_route 160.202.228.0/22 -add china_ip_route 160.202.232.0/22 -add china_ip_route 160.202.236.0/22 -add china_ip_route 160.202.240.0/22 -add china_ip_route 160.202.244.0/22 -add china_ip_route 160.202.248.0/22 -add china_ip_route 160.202.252.0/22 -add china_ip_route 160.238.64.0/22 -add china_ip_route 161.120.0.0/16 -add china_ip_route 161.189.0.0/16 -add china_ip_route 161.207.0.0/16 -add china_ip_route 162.14.0.0/16 -add china_ip_route 162.105.0.0/16 -add china_ip_route 163.0.0.0/16 -add china_ip_route 163.47.4.0/22 -add china_ip_route 163.53.0.0/22 -add china_ip_route 163.53.4.0/22 -add china_ip_route 163.53.8.0/22 -add china_ip_route 163.53.12.0/22 -add china_ip_route 163.53.36.0/22 -add china_ip_route 163.53.40.0/22 -add china_ip_route 163.53.44.0/22 -add china_ip_route 163.53.48.0/22 -add china_ip_route 163.53.52.0/22 -add china_ip_route 163.53.56.0/22 -add china_ip_route 163.53.60.0/22 -add china_ip_route 163.53.64.0/22 -add china_ip_route 163.53.88.0/22 -add china_ip_route 163.53.92.0/22 -add china_ip_route 163.53.96.0/22 -add china_ip_route 163.53.100.0/22 -add china_ip_route 163.53.104.0/22 -add china_ip_route 163.53.108.0/22 -add china_ip_route 163.53.112.0/22 -add china_ip_route 163.53.116.0/22 -add china_ip_route 163.53.120.0/22 -add china_ip_route 163.53.124.0/22 -add china_ip_route 163.53.128.0/22 -add china_ip_route 163.53.132.0/22 -add china_ip_route 163.53.136.0/22 -add china_ip_route 163.53.160.0/22 -add china_ip_route 163.53.164.0/22 -add china_ip_route 163.53.168.0/22 -add china_ip_route 163.53.172.0/22 -add china_ip_route 163.53.188.0/22 -add china_ip_route 163.53.220.0/22 -add china_ip_route 163.53.240.0/22 -add china_ip_route 163.125.0.0/16 -add china_ip_route 163.142.0.0/16 -add china_ip_route 163.177.0.0/16 -add china_ip_route 163.179.0.0/16 -add china_ip_route 163.204.0.0/16 -add china_ip_route 163.228.0.0/16 -add china_ip_route 164.52.0.0/17 -add china_ip_route 166.111.0.0/16 -add china_ip_route 167.139.0.0/16 -add china_ip_route 167.189.0.0/16 -add china_ip_route 167.220.244.0/22 -add china_ip_route 168.160.0.0/16 -add china_ip_route 170.179.0.0/16 -add china_ip_route 171.8.0.0/13 -add china_ip_route 171.34.0.0/15 -add china_ip_route 171.36.0.0/14 -add china_ip_route 171.40.0.0/13 -add china_ip_route 171.80.0.0/14 -add china_ip_route 171.84.0.0/14 -add china_ip_route 171.88.0.0/13 -add china_ip_route 171.104.0.0/13 -add china_ip_route 171.112.0.0/14 -add china_ip_route 171.116.0.0/14 -add china_ip_route 171.120.0.0/13 -add china_ip_route 171.208.0.0/12 -add china_ip_route 172.81.192.0/18 -add china_ip_route 175.0.0.0/12 -add china_ip_route 175.16.0.0/13 -add china_ip_route 175.24.0.0/16 -add china_ip_route 175.25.0.0/16 -add china_ip_route 175.26.0.0/16 -add china_ip_route 175.27.0.0/16 -add china_ip_route 175.30.0.0/15 -add china_ip_route 175.42.0.0/15 -add china_ip_route 175.44.0.0/16 -add china_ip_route 175.46.0.0/15 -add china_ip_route 175.48.0.0/12 -add china_ip_route 175.64.0.0/11 -add china_ip_route 175.102.0.0/16 -add china_ip_route 175.106.128.0/17 -add china_ip_route 175.111.144.0/22 -add china_ip_route 175.111.148.0/22 -add china_ip_route 175.111.152.0/22 -add china_ip_route 175.111.156.0/22 -add china_ip_route 175.111.160.0/22 -add china_ip_route 175.111.164.0/22 -add china_ip_route 175.111.168.0/22 -add china_ip_route 175.111.172.0/22 -add china_ip_route 175.111.184.0/22 -add china_ip_route 175.146.0.0/15 -add china_ip_route 175.148.0.0/14 -add china_ip_route 175.152.0.0/14 -add china_ip_route 175.158.96.0/22 -add china_ip_route 175.160.0.0/12 -add china_ip_route 175.176.156.0/22 -add china_ip_route 175.176.176.0/22 -add china_ip_route 175.176.188.0/22 -add china_ip_route 175.176.192.0/22 -add china_ip_route 175.178.0.0/16 -add china_ip_route 175.184.128.0/18 -add china_ip_route 175.185.0.0/16 -add china_ip_route 175.186.0.0/15 -add china_ip_route 175.188.0.0/14 -add china_ip_route 180.76.0.0/16 -add china_ip_route 180.77.0.0/16 -add china_ip_route 180.78.0.0/15 -add china_ip_route 180.84.0.0/15 -add china_ip_route 180.86.0.0/16 -add china_ip_route 180.88.0.0/14 -add china_ip_route 180.94.56.0/21 -add china_ip_route 180.94.96.0/20 -add china_ip_route 180.94.120.0/22 -add china_ip_route 180.94.124.0/22 -add china_ip_route 180.95.128.0/17 -add china_ip_route 180.96.0.0/11 -add china_ip_route 180.129.128.0/17 -add china_ip_route 180.130.0.0/16 -add china_ip_route 180.136.0.0/13 -add china_ip_route 180.148.16.0/21 -add china_ip_route 180.148.152.0/21 -add china_ip_route 180.148.216.0/21 -add china_ip_route 180.148.224.0/19 -add china_ip_route 180.149.128.0/19 -add china_ip_route 180.149.236.0/22 -add china_ip_route 180.150.160.0/19 -add china_ip_route 180.152.0.0/13 -add china_ip_route 180.160.0.0/12 -add china_ip_route 180.178.112.0/22 -add china_ip_route 180.178.116.0/22 -add china_ip_route 180.178.192.0/18 -add china_ip_route 180.184.0.0/15 -add china_ip_route 180.186.0.0/16 -add china_ip_route 180.187.0.0/16 -add china_ip_route 180.188.0.0/17 -add china_ip_route 180.189.148.0/22 -add china_ip_route 180.200.252.0/22 -add china_ip_route 180.201.0.0/16 -add china_ip_route 180.202.0.0/15 -add china_ip_route 180.208.0.0/15 -add china_ip_route 180.210.212.0/22 -add china_ip_route 180.210.224.0/19 -add china_ip_route 180.212.0.0/15 -add china_ip_route 180.222.224.0/19 -add china_ip_route 180.223.0.0/16 -add china_ip_route 180.233.0.0/18 -add china_ip_route 180.233.64.0/19 -add china_ip_route 180.233.144.0/22 -add china_ip_route 180.235.64.0/19 -add china_ip_route 180.235.112.0/22 -add china_ip_route 182.16.144.0/22 -add china_ip_route 182.16.148.0/22 -add china_ip_route 182.16.192.0/19 -add china_ip_route 182.18.0.0/17 -add china_ip_route 182.23.184.0/21 -add china_ip_route 182.23.200.0/21 -add china_ip_route 182.32.0.0/12 -add china_ip_route 182.48.96.0/19 -add china_ip_route 182.49.0.0/16 -add china_ip_route 182.50.0.0/20 -add china_ip_route 182.50.112.0/20 -add china_ip_route 182.51.0.0/16 -add china_ip_route 182.54.0.0/17 -add china_ip_route 182.54.244.0/22 -add china_ip_route 182.61.0.0/16 -add china_ip_route 182.80.0.0/14 -add china_ip_route 182.84.0.0/14 -add china_ip_route 182.88.0.0/14 -add china_ip_route 182.92.0.0/16 -add china_ip_route 182.96.0.0/12 -add china_ip_route 182.112.0.0/12 -add china_ip_route 182.128.0.0/12 -add china_ip_route 182.144.0.0/13 -add china_ip_route 182.157.0.0/16 -add china_ip_route 182.160.64.0/19 -add china_ip_route 182.174.0.0/15 -add china_ip_route 182.200.0.0/13 -add china_ip_route 182.236.128.0/17 -add china_ip_route 182.237.24.0/22 -add china_ip_route 182.237.28.0/22 -add china_ip_route 182.238.0.0/16 -add china_ip_route 182.239.0.0/19 -add china_ip_route 182.240.0.0/13 -add china_ip_route 182.254.0.0/16 -add china_ip_route 182.255.32.0/22 -add china_ip_route 182.255.60.0/22 -add china_ip_route 183.0.0.0/10 -add china_ip_route 183.64.0.0/13 -add china_ip_route 183.78.160.0/22 -add china_ip_route 183.78.164.0/22 -add china_ip_route 183.78.180.0/22 -add china_ip_route 183.81.172.0/22 -add china_ip_route 183.81.180.0/22 -add china_ip_route 183.84.0.0/15 -add china_ip_route 183.91.128.0/22 -add china_ip_route 183.91.136.0/21 -add china_ip_route 183.91.144.0/20 -add china_ip_route 183.92.0.0/14 -add china_ip_route 183.128.0.0/11 -add china_ip_route 183.160.0.0/13 -add china_ip_route 183.168.0.0/15 -add china_ip_route 183.170.0.0/16 -add china_ip_route 183.172.0.0/14 -add china_ip_route 183.182.0.0/19 -add china_ip_route 183.184.0.0/13 -add china_ip_route 183.192.0.0/10 -add china_ip_route 185.203.36.0/22 -add china_ip_route 188.131.128.0/17 -add china_ip_route 192.51.188.0/24 -add china_ip_route 192.55.46.0/24 -add china_ip_route 192.55.68.0/22 -add china_ip_route 192.102.204.0/23 -add china_ip_route 192.124.154.0/24 -add china_ip_route 192.140.128.0/22 -add china_ip_route 192.140.132.0/22 -add china_ip_route 192.140.136.0/22 -add china_ip_route 192.140.156.0/22 -add china_ip_route 192.140.160.0/22 -add china_ip_route 192.140.164.0/22 -add china_ip_route 192.140.168.0/22 -add china_ip_route 192.140.172.0/22 -add china_ip_route 192.140.176.0/22 -add china_ip_route 192.140.180.0/22 -add china_ip_route 192.140.184.0/22 -add china_ip_route 192.140.188.0/22 -add china_ip_route 192.140.192.0/22 -add china_ip_route 192.140.196.0/22 -add china_ip_route 192.140.200.0/22 -add china_ip_route 192.140.204.0/22 -add china_ip_route 192.140.208.0/22 -add china_ip_route 192.140.212.0/22 -add china_ip_route 192.144.128.0/17 -add china_ip_route 192.197.113.0/24 -add china_ip_route 193.112.0.0/16 -add china_ip_route 198.175.100.0/22 -add china_ip_route 199.212.57.0/24 -add china_ip_route 202.0.100.0/23 -add china_ip_route 202.0.122.0/23 -add china_ip_route 202.0.176.0/22 -add china_ip_route 202.3.128.0/23 -add china_ip_route 202.3.134.0/24 -add china_ip_route 202.4.128.0/19 -add china_ip_route 202.4.252.0/22 -add china_ip_route 202.5.208.0/22 -add china_ip_route 202.5.212.0/22 -add china_ip_route 202.5.216.0/22 -add china_ip_route 202.6.6.0/23 -add china_ip_route 202.6.66.0/23 -add china_ip_route 202.6.72.0/23 -add china_ip_route 202.6.87.0/24 -add china_ip_route 202.6.88.0/23 -add china_ip_route 202.6.92.0/23 -add china_ip_route 202.6.103.0/24 -add china_ip_route 202.6.108.0/24 -add china_ip_route 202.6.110.0/23 -add china_ip_route 202.6.114.0/24 -add china_ip_route 202.6.176.0/20 -add china_ip_route 202.8.0.0/24 -add china_ip_route 202.8.2.0/23 -add china_ip_route 202.8.4.0/23 -add china_ip_route 202.8.12.0/24 -add china_ip_route 202.8.24.0/24 -add china_ip_route 202.8.77.0/24 -add china_ip_route 202.8.120.0/22 -add china_ip_route 202.8.128.0/19 -add china_ip_route 202.8.192.0/20 -add china_ip_route 202.9.32.0/24 -add china_ip_route 202.9.34.0/23 -add china_ip_route 202.9.48.0/23 -add china_ip_route 202.9.51.0/24 -add china_ip_route 202.9.52.0/23 -add china_ip_route 202.9.54.0/24 -add china_ip_route 202.9.57.0/24 -add china_ip_route 202.9.58.0/23 -add china_ip_route 202.10.64.0/20 -add china_ip_route 202.10.112.0/22 -add china_ip_route 202.10.116.0/22 -add china_ip_route 202.10.120.0/22 -add china_ip_route 202.10.124.0/22 -add china_ip_route 202.12.1.0/24 -add china_ip_route 202.12.2.0/24 -add china_ip_route 202.12.17.0/24 -add china_ip_route 202.12.18.0/24 -add china_ip_route 202.12.19.0/24 -add china_ip_route 202.12.72.0/24 -add china_ip_route 202.12.84.0/23 -add china_ip_route 202.12.96.0/24 -add china_ip_route 202.12.98.0/23 -add china_ip_route 202.12.106.0/24 -add china_ip_route 202.12.111.0/24 -add china_ip_route 202.12.116.0/24 -add china_ip_route 202.14.64.0/23 -add china_ip_route 202.14.69.0/24 -add china_ip_route 202.14.73.0/24 -add china_ip_route 202.14.74.0/23 -add china_ip_route 202.14.76.0/24 -add china_ip_route 202.14.78.0/23 -add china_ip_route 202.14.88.0/24 -add china_ip_route 202.14.97.0/24 -add china_ip_route 202.14.104.0/23 -add china_ip_route 202.14.108.0/23 -add china_ip_route 202.14.111.0/24 -add china_ip_route 202.14.114.0/23 -add china_ip_route 202.14.118.0/23 -add china_ip_route 202.14.124.0/23 -add china_ip_route 202.14.127.0/24 -add china_ip_route 202.14.129.0/24 -add china_ip_route 202.14.135.0/24 -add china_ip_route 202.14.136.0/24 -add china_ip_route 202.14.149.0/24 -add china_ip_route 202.14.151.0/24 -add china_ip_route 202.14.157.0/24 -add china_ip_route 202.14.158.0/23 -add china_ip_route 202.14.169.0/24 -add china_ip_route 202.14.170.0/23 -add china_ip_route 202.14.172.0/22 -add china_ip_route 202.14.176.0/24 -add china_ip_route 202.14.184.0/23 -add china_ip_route 202.14.208.0/23 -add china_ip_route 202.14.213.0/24 -add china_ip_route 202.14.219.0/24 -add china_ip_route 202.14.220.0/24 -add china_ip_route 202.14.222.0/23 -add china_ip_route 202.14.225.0/24 -add china_ip_route 202.14.226.0/23 -add china_ip_route 202.14.231.0/24 -add china_ip_route 202.14.235.0/24 -add china_ip_route 202.14.236.0/23 -add china_ip_route 202.14.238.0/24 -add china_ip_route 202.14.239.0/24 -add china_ip_route 202.14.246.0/24 -add china_ip_route 202.14.251.0/24 -add china_ip_route 202.20.66.0/24 -add china_ip_route 202.20.79.0/24 -add china_ip_route 202.20.87.0/24 -add china_ip_route 202.20.88.0/23 -add china_ip_route 202.20.90.0/24 -add china_ip_route 202.20.94.0/23 -add china_ip_route 202.20.114.0/24 -add china_ip_route 202.20.117.0/24 -add china_ip_route 202.20.120.0/24 -add china_ip_route 202.20.125.0/24 -add china_ip_route 202.20.126.0/24 -add china_ip_route 202.20.127.0/24 -add china_ip_route 202.21.48.0/22 -add china_ip_route 202.21.52.0/22 -add china_ip_route 202.21.56.0/22 -add china_ip_route 202.21.60.0/22 -add china_ip_route 202.21.131.0/24 -add china_ip_route 202.21.132.0/24 -add china_ip_route 202.21.141.0/24 -add china_ip_route 202.21.142.0/24 -add china_ip_route 202.21.147.0/24 -add china_ip_route 202.21.148.0/24 -add china_ip_route 202.21.150.0/23 -add china_ip_route 202.21.152.0/23 -add china_ip_route 202.21.154.0/24 -add china_ip_route 202.21.156.0/24 -add china_ip_route 202.22.248.0/22 -add china_ip_route 202.22.252.0/22 -add china_ip_route 202.27.12.0/24 -add china_ip_route 202.27.14.0/24 -add china_ip_route 202.27.136.0/23 -add china_ip_route 202.36.226.0/24 -add china_ip_route 202.38.0.0/23 -add china_ip_route 202.38.2.0/23 -add china_ip_route 202.38.8.0/21 -add china_ip_route 202.38.48.0/20 -add china_ip_route 202.38.64.0/19 -add china_ip_route 202.38.96.0/19 -add china_ip_route 202.38.128.0/23 -add china_ip_route 202.38.130.0/23 -add china_ip_route 202.38.132.0/23 -add china_ip_route 202.38.134.0/24 -add china_ip_route 202.38.135.0/24 -add china_ip_route 202.38.136.0/23 -add china_ip_route 202.38.138.0/24 -add china_ip_route 202.38.140.0/23 -add china_ip_route 202.38.142.0/23 -add china_ip_route 202.38.146.0/23 -add china_ip_route 202.38.149.0/24 -add china_ip_route 202.38.150.0/23 -add china_ip_route 202.38.152.0/23 -add china_ip_route 202.38.154.0/23 -add china_ip_route 202.38.156.0/24 -add china_ip_route 202.38.158.0/23 -add china_ip_route 202.38.160.0/23 -add china_ip_route 202.38.164.0/22 -add china_ip_route 202.38.168.0/23 -add china_ip_route 202.38.170.0/24 -add china_ip_route 202.38.171.0/24 -add china_ip_route 202.38.176.0/23 -add china_ip_route 202.38.184.0/21 -add china_ip_route 202.38.192.0/18 -add china_ip_route 202.40.4.0/23 -add china_ip_route 202.40.7.0/24 -add china_ip_route 202.40.15.0/24 -add china_ip_route 202.40.135.0/24 -add china_ip_route 202.40.136.0/24 -add china_ip_route 202.40.140.0/24 -add china_ip_route 202.40.143.0/24 -add china_ip_route 202.40.144.0/23 -add china_ip_route 202.40.150.0/24 -add china_ip_route 202.40.155.0/24 -add china_ip_route 202.40.156.0/24 -add china_ip_route 202.40.158.0/23 -add china_ip_route 202.40.162.0/24 -add china_ip_route 202.41.8.0/23 -add china_ip_route 202.41.11.0/24 -add china_ip_route 202.41.12.0/23 -add china_ip_route 202.41.128.0/24 -add china_ip_route 202.41.130.0/23 -add china_ip_route 202.41.152.0/21 -add china_ip_route 202.41.192.0/24 -add china_ip_route 202.41.196.0/22 -add china_ip_route 202.41.200.0/22 -add china_ip_route 202.41.240.0/20 -add china_ip_route 202.43.76.0/22 -add china_ip_route 202.43.144.0/20 -add china_ip_route 202.44.16.0/20 -add china_ip_route 202.44.48.0/22 -add china_ip_route 202.44.67.0/24 -add china_ip_route 202.44.74.0/24 -add china_ip_route 202.44.97.0/24 -add china_ip_route 202.44.129.0/24 -add china_ip_route 202.44.132.0/23 -add china_ip_route 202.44.146.0/23 -add china_ip_route 202.45.0.0/23 -add china_ip_route 202.45.2.0/24 -add china_ip_route 202.45.15.0/24 -add china_ip_route 202.45.16.0/20 -add china_ip_route 202.46.16.0/23 -add china_ip_route 202.46.18.0/24 -add china_ip_route 202.46.20.0/23 -add china_ip_route 202.46.32.0/19 -add china_ip_route 202.46.128.0/24 -add china_ip_route 202.46.224.0/20 -add china_ip_route 202.47.82.0/23 -add china_ip_route 202.47.96.0/22 -add china_ip_route 202.47.100.0/22 -add china_ip_route 202.47.104.0/22 -add china_ip_route 202.47.108.0/22 -add china_ip_route 202.47.126.0/24 -add china_ip_route 202.47.128.0/24 -add china_ip_route 202.47.130.0/23 -add china_ip_route 202.52.33.0/24 -add china_ip_route 202.52.34.0/24 -add china_ip_route 202.52.47.0/24 -add china_ip_route 202.52.143.0/24 -add china_ip_route 202.52.144.0/24 -add china_ip_route 202.53.140.0/24 -add china_ip_route 202.53.143.0/24 -add china_ip_route 202.57.192.0/22 -add china_ip_route 202.57.196.0/22 -add china_ip_route 202.57.200.0/22 -add china_ip_route 202.57.204.0/22 -add china_ip_route 202.57.212.0/22 -add china_ip_route 202.57.216.0/22 -add china_ip_route 202.57.240.0/20 -add china_ip_route 202.58.0.0/24 -add china_ip_route 202.58.101.0/24 -add china_ip_route 202.58.104.0/22 -add china_ip_route 202.58.112.0/22 -add china_ip_route 202.59.0.0/24 -add china_ip_route 202.59.1.0/24 -add china_ip_route 202.59.212.0/22 -add china_ip_route 202.59.236.0/24 -add china_ip_route 202.59.240.0/24 -add china_ip_route 202.60.48.0/21 -add china_ip_route 202.60.96.0/21 -add china_ip_route 202.60.112.0/20 -add china_ip_route 202.60.132.0/22 -add china_ip_route 202.60.136.0/21 -add china_ip_route 202.60.144.0/20 -add china_ip_route 202.61.68.0/22 -add china_ip_route 202.61.76.0/22 -add china_ip_route 202.61.88.0/22 -add china_ip_route 202.61.123.0/24 -add china_ip_route 202.61.127.0/24 -add china_ip_route 202.62.112.0/22 -add china_ip_route 202.62.248.0/22 -add china_ip_route 202.62.252.0/24 -add china_ip_route 202.62.255.0/24 -add china_ip_route 202.63.80.0/24 -add china_ip_route 202.63.81.0/24 -add china_ip_route 202.63.82.0/23 -add china_ip_route 202.63.84.0/22 -add china_ip_route 202.63.88.0/21 -add china_ip_route 202.63.160.0/19 -add china_ip_route 202.63.248.0/22 -add china_ip_route 202.63.253.0/24 -add china_ip_route 202.65.0.0/21 -add china_ip_route 202.65.8.0/23 -add china_ip_route 202.65.96.0/22 -add china_ip_route 202.65.100.0/22 -add china_ip_route 202.65.104.0/22 -add china_ip_route 202.65.108.0/22 -add china_ip_route 202.66.168.0/22 -add china_ip_route 202.67.0.0/22 -add china_ip_route 202.69.4.0/22 -add china_ip_route 202.69.16.0/20 -add china_ip_route 202.70.0.0/19 -add china_ip_route 202.70.96.0/20 -add china_ip_route 202.70.192.0/20 -add china_ip_route 202.71.32.0/22 -add china_ip_route 202.71.36.0/22 -add china_ip_route 202.71.40.0/22 -add china_ip_route 202.71.44.0/22 -add china_ip_route 202.72.40.0/21 -add china_ip_route 202.72.80.0/20 -add china_ip_route 202.72.112.0/22 -add china_ip_route 202.72.116.0/22 -add china_ip_route 202.72.120.0/22 -add china_ip_route 202.72.124.0/22 -add china_ip_route 202.73.128.0/22 -add china_ip_route 202.73.240.0/22 -add china_ip_route 202.73.244.0/22 -add china_ip_route 202.73.248.0/22 -add china_ip_route 202.73.252.0/22 -add china_ip_route 202.74.8.0/21 -add china_ip_route 202.74.36.0/24 -add china_ip_route 202.74.42.0/24 -add china_ip_route 202.74.52.0/24 -add china_ip_route 202.74.80.0/20 -add china_ip_route 202.74.254.0/23 -add china_ip_route 202.75.208.0/20 -add china_ip_route 202.75.252.0/22 -add china_ip_route 202.76.252.0/22 -add china_ip_route 202.77.80.0/21 -add china_ip_route 202.77.92.0/22 -add china_ip_route 202.78.8.0/21 -add china_ip_route 202.79.224.0/21 -add china_ip_route 202.79.248.0/22 -add china_ip_route 202.80.192.0/21 -add china_ip_route 202.80.200.0/21 -add china_ip_route 202.81.0.0/22 -add china_ip_route 202.81.176.0/22 -add china_ip_route 202.81.180.0/22 -add china_ip_route 202.81.184.0/22 -add china_ip_route 202.81.188.0/22 -add china_ip_route 202.83.252.0/22 -add china_ip_route 202.84.0.0/22 -add china_ip_route 202.84.4.0/22 -add china_ip_route 202.84.8.0/21 -add china_ip_route 202.84.16.0/23 -add china_ip_route 202.84.22.0/24 -add china_ip_route 202.84.24.0/21 -add china_ip_route 202.85.208.0/20 -add china_ip_route 202.86.249.0/24 -add china_ip_route 202.86.252.0/22 -add china_ip_route 202.87.80.0/20 -add china_ip_route 202.88.32.0/22 -add china_ip_route 202.89.8.0/21 -add china_ip_route 202.89.96.0/22 -add china_ip_route 202.89.108.0/22 -add china_ip_route 202.89.119.0/24 -add china_ip_route 202.89.232.0/21 -add china_ip_route 202.90.0.0/22 -add china_ip_route 202.90.16.0/22 -add china_ip_route 202.90.20.0/22 -add china_ip_route 202.90.24.0/22 -add china_ip_route 202.90.28.0/22 -add china_ip_route 202.90.37.0/24 -add china_ip_route 202.90.96.0/22 -add china_ip_route 202.90.100.0/22 -add china_ip_route 202.90.104.0/22 -add china_ip_route 202.90.108.0/22 -add china_ip_route 202.90.112.0/20 -add china_ip_route 202.90.193.0/24 -add china_ip_route 202.90.196.0/24 -add china_ip_route 202.90.205.0/24 -add china_ip_route 202.90.224.0/20 -add china_ip_route 202.91.0.0/22 -add china_ip_route 202.91.36.0/22 -add china_ip_route 202.91.96.0/20 -add china_ip_route 202.91.128.0/22 -add china_ip_route 202.91.176.0/20 -add china_ip_route 202.91.224.0/19 -add china_ip_route 202.92.0.0/22 -add china_ip_route 202.92.8.0/21 -add china_ip_route 202.92.48.0/20 -add china_ip_route 202.92.252.0/22 -add china_ip_route 202.93.0.0/22 -add china_ip_route 202.93.252.0/22 -add china_ip_route 202.94.68.0/24 -add china_ip_route 202.94.74.0/24 -add china_ip_route 202.94.81.0/24 -add china_ip_route 202.94.92.0/22 -add china_ip_route 202.95.240.0/21 -add china_ip_route 202.95.252.0/22 -add china_ip_route 202.96.0.0/18 -add china_ip_route 202.96.64.0/21 -add china_ip_route 202.96.72.0/21 -add china_ip_route 202.96.80.0/20 -add china_ip_route 202.96.96.0/21 -add china_ip_route 202.96.104.0/21 -add china_ip_route 202.96.112.0/20 -add china_ip_route 202.96.128.0/21 -add china_ip_route 202.96.136.0/21 -add china_ip_route 202.96.144.0/20 -add china_ip_route 202.96.160.0/21 -add china_ip_route 202.96.168.0/21 -add china_ip_route 202.96.176.0/20 -add china_ip_route 202.96.192.0/21 -add china_ip_route 202.96.200.0/21 -add china_ip_route 202.96.208.0/20 -add china_ip_route 202.96.224.0/21 -add china_ip_route 202.96.232.0/21 -add china_ip_route 202.96.240.0/20 -add china_ip_route 202.97.0.0/21 -add china_ip_route 202.97.8.0/21 -add china_ip_route 202.97.16.0/20 -add china_ip_route 202.97.32.0/19 -add china_ip_route 202.97.64.0/19 -add china_ip_route 202.97.96.0/20 -add china_ip_route 202.97.112.0/20 -add china_ip_route 202.97.128.0/18 -add china_ip_route 202.97.192.0/19 -add china_ip_route 202.97.224.0/21 -add china_ip_route 202.97.232.0/21 -add china_ip_route 202.97.240.0/20 -add china_ip_route 202.98.0.0/21 -add china_ip_route 202.98.8.0/21 -add china_ip_route 202.98.16.0/20 -add china_ip_route 202.98.32.0/21 -add china_ip_route 202.98.40.0/21 -add china_ip_route 202.98.48.0/20 -add china_ip_route 202.98.64.0/19 -add china_ip_route 202.98.96.0/21 -add china_ip_route 202.98.104.0/21 -add china_ip_route 202.98.112.0/20 -add china_ip_route 202.98.128.0/19 -add china_ip_route 202.98.160.0/21 -add china_ip_route 202.98.168.0/21 -add china_ip_route 202.98.176.0/20 -add china_ip_route 202.98.192.0/21 -add china_ip_route 202.98.200.0/21 -add china_ip_route 202.98.208.0/20 -add china_ip_route 202.98.224.0/21 -add china_ip_route 202.98.232.0/21 -add china_ip_route 202.98.240.0/20 -add china_ip_route 202.99.0.0/18 -add china_ip_route 202.99.64.0/19 -add china_ip_route 202.99.96.0/21 -add china_ip_route 202.99.104.0/21 -add china_ip_route 202.99.112.0/20 -add china_ip_route 202.99.128.0/19 -add china_ip_route 202.99.160.0/21 -add china_ip_route 202.99.168.0/21 -add china_ip_route 202.99.176.0/20 -add china_ip_route 202.99.192.0/21 -add china_ip_route 202.99.200.0/21 -add china_ip_route 202.99.208.0/20 -add china_ip_route 202.99.224.0/21 -add china_ip_route 202.99.232.0/21 -add china_ip_route 202.99.240.0/20 -add china_ip_route 202.100.0.0/21 -add china_ip_route 202.100.8.0/21 -add china_ip_route 202.100.16.0/20 -add china_ip_route 202.100.32.0/19 -add china_ip_route 202.100.64.0/21 -add china_ip_route 202.100.72.0/21 -add china_ip_route 202.100.80.0/20 -add china_ip_route 202.100.96.0/21 -add china_ip_route 202.100.104.0/21 -add china_ip_route 202.100.112.0/20 -add china_ip_route 202.100.128.0/21 -add china_ip_route 202.100.136.0/21 -add china_ip_route 202.100.144.0/20 -add china_ip_route 202.100.160.0/21 -add china_ip_route 202.100.168.0/21 -add china_ip_route 202.100.176.0/20 -add china_ip_route 202.100.192.0/21 -add china_ip_route 202.100.200.0/21 -add china_ip_route 202.100.208.0/20 -add china_ip_route 202.100.224.0/19 -add china_ip_route 202.101.0.0/18 -add china_ip_route 202.101.64.0/19 -add china_ip_route 202.101.96.0/19 -add china_ip_route 202.101.128.0/18 -add china_ip_route 202.101.192.0/19 -add china_ip_route 202.101.224.0/21 -add china_ip_route 202.101.232.0/21 -add china_ip_route 202.101.240.0/20 -add china_ip_route 202.102.0.0/19 -add china_ip_route 202.102.32.0/19 -add china_ip_route 202.102.64.0/18 -add china_ip_route 202.102.128.0/21 -add china_ip_route 202.102.136.0/21 -add china_ip_route 202.102.144.0/20 -add china_ip_route 202.102.160.0/19 -add china_ip_route 202.102.192.0/21 -add china_ip_route 202.102.200.0/21 -add china_ip_route 202.102.208.0/20 -add china_ip_route 202.102.224.0/21 -add china_ip_route 202.102.232.0/21 -add china_ip_route 202.102.240.0/20 -add china_ip_route 202.103.0.0/21 -add china_ip_route 202.103.8.0/21 -add china_ip_route 202.103.16.0/20 -add china_ip_route 202.103.32.0/19 -add china_ip_route 202.103.64.0/19 -add china_ip_route 202.103.96.0/21 -add china_ip_route 202.103.104.0/21 -add china_ip_route 202.103.112.0/20 -add china_ip_route 202.103.128.0/18 -add china_ip_route 202.103.192.0/19 -add china_ip_route 202.103.224.0/21 -add china_ip_route 202.103.232.0/21 -add china_ip_route 202.103.240.0/20 -add china_ip_route 202.104.0.0/15 -add china_ip_route 202.106.0.0/16 -add china_ip_route 202.107.0.0/17 -add china_ip_route 202.107.128.0/17 -add china_ip_route 202.108.0.0/16 -add china_ip_route 202.109.0.0/16 -add china_ip_route 202.110.0.0/18 -add china_ip_route 202.110.64.0/18 -add china_ip_route 202.110.128.0/18 -add china_ip_route 202.110.192.0/18 -add china_ip_route 202.111.0.0/17 -add china_ip_route 202.111.128.0/19 -add china_ip_route 202.111.160.0/19 -add china_ip_route 202.111.192.0/18 -add china_ip_route 202.112.0.0/16 -add china_ip_route 202.113.0.0/20 -add china_ip_route 202.113.16.0/20 -add china_ip_route 202.113.32.0/19 -add china_ip_route 202.113.64.0/18 -add china_ip_route 202.113.128.0/18 -add china_ip_route 202.113.192.0/19 -add china_ip_route 202.113.224.0/20 -add china_ip_route 202.113.240.0/20 -add china_ip_route 202.114.0.0/19 -add china_ip_route 202.114.32.0/19 -add china_ip_route 202.114.64.0/18 -add china_ip_route 202.114.128.0/17 -add china_ip_route 202.115.0.0/19 -add china_ip_route 202.115.32.0/19 -add china_ip_route 202.115.64.0/18 -add china_ip_route 202.115.128.0/17 -add china_ip_route 202.116.0.0/19 -add china_ip_route 202.116.32.0/20 -add china_ip_route 202.116.48.0/20 -add china_ip_route 202.116.64.0/19 -add china_ip_route 202.116.96.0/19 -add china_ip_route 202.116.128.0/17 -add china_ip_route 202.117.0.0/18 -add china_ip_route 202.117.64.0/18 -add china_ip_route 202.117.128.0/17 -add china_ip_route 202.118.0.0/19 -add china_ip_route 202.118.32.0/19 -add china_ip_route 202.118.64.0/18 -add china_ip_route 202.118.128.0/17 -add china_ip_route 202.119.0.0/19 -add china_ip_route 202.119.32.0/19 -add china_ip_route 202.119.64.0/20 -add china_ip_route 202.119.80.0/20 -add china_ip_route 202.119.96.0/19 -add china_ip_route 202.119.128.0/17 -add china_ip_route 202.120.0.0/18 -add china_ip_route 202.120.64.0/18 -add china_ip_route 202.120.128.0/17 -add china_ip_route 202.121.0.0/16 -add china_ip_route 202.122.0.0/21 -add china_ip_route 202.122.32.0/21 -add china_ip_route 202.122.64.0/19 -add china_ip_route 202.122.112.0/21 -add china_ip_route 202.122.120.0/21 -add china_ip_route 202.122.128.0/24 -add china_ip_route 202.122.132.0/24 -add china_ip_route 202.123.96.0/20 -add china_ip_route 202.123.116.0/22 -add china_ip_route 202.123.120.0/22 -add china_ip_route 202.124.16.0/21 -add china_ip_route 202.124.24.0/22 -add china_ip_route 202.125.107.0/24 -add china_ip_route 202.125.109.0/24 -add china_ip_route 202.125.112.0/20 -add china_ip_route 202.125.176.0/20 -add china_ip_route 202.127.0.0/23 -add china_ip_route 202.127.2.0/24 -add china_ip_route 202.127.3.0/24 -add china_ip_route 202.127.4.0/24 -add china_ip_route 202.127.5.0/24 -add china_ip_route 202.127.6.0/23 -add china_ip_route 202.127.12.0/22 -add china_ip_route 202.127.16.0/20 -add china_ip_route 202.127.40.0/21 -add china_ip_route 202.127.48.0/20 -add china_ip_route 202.127.112.0/20 -add china_ip_route 202.127.128.0/20 -add china_ip_route 202.127.144.0/20 -add china_ip_route 202.127.160.0/21 -add china_ip_route 202.127.192.0/23 -add china_ip_route 202.127.194.0/23 -add china_ip_route 202.127.196.0/22 -add china_ip_route 202.127.200.0/21 -add china_ip_route 202.127.208.0/24 -add china_ip_route 202.127.209.0/24 -add china_ip_route 202.127.212.0/22 -add china_ip_route 202.127.216.0/21 -add china_ip_route 202.127.224.0/19 -add china_ip_route 202.129.208.0/24 -add china_ip_route 202.130.0.0/19 -add china_ip_route 202.130.39.0/24 -add china_ip_route 202.130.224.0/19 -add china_ip_route 202.131.16.0/21 -add china_ip_route 202.131.48.0/20 -add china_ip_route 202.131.208.0/20 -add china_ip_route 202.133.32.0/20 -add china_ip_route 202.134.58.0/24 -add china_ip_route 202.134.128.0/20 -add china_ip_route 202.134.208.0/22 -add china_ip_route 202.134.212.0/22 -add china_ip_route 202.134.216.0/22 -add china_ip_route 202.134.220.0/22 -add china_ip_route 202.136.48.0/20 -add china_ip_route 202.136.208.0/20 -add china_ip_route 202.136.224.0/20 -add china_ip_route 202.136.248.0/22 -add china_ip_route 202.137.231.0/24 -add china_ip_route 202.140.140.0/22 -add china_ip_route 202.140.144.0/22 -add china_ip_route 202.140.148.0/22 -add china_ip_route 202.140.152.0/22 -add china_ip_route 202.140.156.0/22 -add china_ip_route 202.141.160.0/19 -add china_ip_route 202.142.16.0/20 -add china_ip_route 202.143.4.0/22 -add china_ip_route 202.143.16.0/20 -add china_ip_route 202.143.32.0/20 -add china_ip_route 202.143.56.0/21 -add china_ip_route 202.143.100.0/22 -add china_ip_route 202.143.104.0/22 -add china_ip_route 202.144.196.0/22 -add china_ip_route 202.146.160.0/20 -add china_ip_route 202.146.186.0/24 -add china_ip_route 202.146.188.0/22 -add china_ip_route 202.146.196.0/22 -add china_ip_route 202.146.200.0/21 -add china_ip_route 202.147.144.0/20 -add china_ip_route 202.148.32.0/20 -add china_ip_route 202.148.64.0/19 -add china_ip_route 202.148.96.0/19 -add china_ip_route 202.149.32.0/19 -add china_ip_route 202.149.160.0/19 -add china_ip_route 202.149.224.0/19 -add china_ip_route 202.150.16.0/20 -add china_ip_route 202.150.32.0/20 -add china_ip_route 202.150.56.0/22 -add china_ip_route 202.150.192.0/20 -add china_ip_route 202.150.224.0/19 -add china_ip_route 202.151.0.0/22 -add china_ip_route 202.151.33.0/24 -add china_ip_route 202.151.128.0/19 -add china_ip_route 202.152.176.0/20 -add china_ip_route 202.153.0.0/22 -add china_ip_route 202.153.7.0/24 -add china_ip_route 202.153.48.0/20 -add china_ip_route 202.157.192.0/19 -add china_ip_route 202.158.160.0/19 -add china_ip_route 202.158.242.0/24 -add china_ip_route 202.160.140.0/22 -add china_ip_route 202.160.156.0/22 -add china_ip_route 202.160.176.0/20 -add china_ip_route 202.162.67.0/24 -add china_ip_route 202.162.75.0/24 -add china_ip_route 202.164.0.0/20 -add china_ip_route 202.164.96.0/19 -add china_ip_route 202.165.176.0/20 -add china_ip_route 202.165.208.0/20 -add china_ip_route 202.165.239.0/24 -add china_ip_route 202.165.240.0/23 -add china_ip_route 202.165.243.0/24 -add china_ip_route 202.165.245.0/24 -add china_ip_route 202.165.251.0/24 -add china_ip_route 202.165.252.0/22 -add china_ip_route 202.166.224.0/19 -add china_ip_route 202.168.80.0/22 -add china_ip_route 202.168.128.0/22 -add china_ip_route 202.168.132.0/22 -add china_ip_route 202.168.136.0/22 -add china_ip_route 202.168.140.0/22 -add china_ip_route 202.168.160.0/20 -add china_ip_route 202.168.176.0/20 -add china_ip_route 202.170.128.0/19 -add china_ip_route 202.170.216.0/21 -add china_ip_route 202.170.224.0/19 -add china_ip_route 202.171.216.0/21 -add china_ip_route 202.171.232.0/24 -add china_ip_route 202.171.235.0/24 -add china_ip_route 202.172.0.0/22 -add china_ip_route 202.172.7.0/24 -add china_ip_route 202.173.0.0/22 -add china_ip_route 202.173.6.0/24 -add china_ip_route 202.173.8.0/21 -add china_ip_route 202.173.112.0/22 -add china_ip_route 202.173.224.0/19 -add china_ip_route 202.174.64.0/20 -add china_ip_route 202.174.124.0/22 -add china_ip_route 202.176.224.0/19 -add china_ip_route 202.179.160.0/22 -add china_ip_route 202.179.164.0/22 -add china_ip_route 202.179.168.0/22 -add china_ip_route 202.179.172.0/22 -add china_ip_route 202.179.240.0/20 -add china_ip_route 202.180.128.0/19 -add china_ip_route 202.180.208.0/21 -add china_ip_route 202.181.8.0/22 -add china_ip_route 202.181.28.0/22 -add china_ip_route 202.181.112.0/20 -add china_ip_route 202.182.32.0/20 -add china_ip_route 202.182.192.0/19 -add china_ip_route 202.189.0.0/18 -add china_ip_route 202.189.80.0/20 -add china_ip_route 202.189.184.0/21 -add china_ip_route 202.191.0.0/24 -add china_ip_route 202.191.68.0/22 -add china_ip_route 202.191.72.0/21 -add china_ip_route 202.191.80.0/20 -add china_ip_route 202.192.0.0/13 -add china_ip_route 202.200.0.0/14 -add china_ip_route 202.204.0.0/14 -add china_ip_route 203.0.4.0/22 -add china_ip_route 203.0.10.0/23 -add china_ip_route 203.0.18.0/24 -add china_ip_route 203.0.24.0/24 -add china_ip_route 203.0.42.0/23 -add china_ip_route 203.0.45.0/24 -add china_ip_route 203.0.46.0/23 -add china_ip_route 203.0.81.0/24 -add china_ip_route 203.0.82.0/23 -add china_ip_route 203.0.90.0/23 -add china_ip_route 203.0.96.0/23 -add china_ip_route 203.0.104.0/21 -add china_ip_route 203.0.114.0/23 -add china_ip_route 203.0.122.0/24 -add china_ip_route 203.0.128.0/24 -add china_ip_route 203.0.130.0/23 -add china_ip_route 203.0.132.0/22 -add china_ip_route 203.0.137.0/24 -add china_ip_route 203.0.142.0/24 -add china_ip_route 203.0.144.0/24 -add china_ip_route 203.0.146.0/24 -add china_ip_route 203.0.148.0/24 -add china_ip_route 203.0.150.0/23 -add china_ip_route 203.0.152.0/24 -add china_ip_route 203.0.177.0/24 -add china_ip_route 203.0.224.0/24 -add china_ip_route 203.1.4.0/22 -add china_ip_route 203.1.18.0/24 -add china_ip_route 203.1.26.0/23 -add china_ip_route 203.1.65.0/24 -add china_ip_route 203.1.66.0/23 -add china_ip_route 203.1.70.0/23 -add china_ip_route 203.1.76.0/23 -add china_ip_route 203.1.90.0/24 -add china_ip_route 203.1.97.0/24 -add china_ip_route 203.1.98.0/23 -add china_ip_route 203.1.100.0/22 -add china_ip_route 203.1.108.0/24 -add china_ip_route 203.1.253.0/24 -add china_ip_route 203.1.254.0/24 -add china_ip_route 203.2.64.0/21 -add china_ip_route 203.2.73.0/24 -add china_ip_route 203.2.112.0/21 -add china_ip_route 203.2.126.0/23 -add china_ip_route 203.2.140.0/24 -add china_ip_route 203.2.150.0/24 -add china_ip_route 203.2.152.0/22 -add china_ip_route 203.2.156.0/23 -add china_ip_route 203.2.160.0/21 -add china_ip_route 203.2.180.0/23 -add china_ip_route 203.2.196.0/23 -add china_ip_route 203.2.209.0/24 -add china_ip_route 203.2.214.0/23 -add china_ip_route 203.2.226.0/23 -add china_ip_route 203.2.229.0/24 -add china_ip_route 203.2.236.0/23 -add china_ip_route 203.3.68.0/24 -add china_ip_route 203.3.72.0/23 -add china_ip_route 203.3.75.0/24 -add china_ip_route 203.3.80.0/21 -add china_ip_route 203.3.96.0/22 -add china_ip_route 203.3.105.0/24 -add china_ip_route 203.3.112.0/21 -add china_ip_route 203.3.120.0/24 -add china_ip_route 203.3.123.0/24 -add china_ip_route 203.3.135.0/24 -add china_ip_route 203.3.139.0/24 -add china_ip_route 203.3.143.0/24 -add china_ip_route 203.4.132.0/23 -add china_ip_route 203.4.134.0/24 -add china_ip_route 203.4.151.0/24 -add china_ip_route 203.4.152.0/22 -add china_ip_route 203.4.174.0/23 -add china_ip_route 203.4.180.0/24 -add china_ip_route 203.4.186.0/24 -add china_ip_route 203.4.205.0/24 -add china_ip_route 203.4.208.0/22 -add china_ip_route 203.4.227.0/24 -add china_ip_route 203.4.230.0/23 -add china_ip_route 203.5.4.0/23 -add china_ip_route 203.5.7.0/24 -add china_ip_route 203.5.8.0/23 -add china_ip_route 203.5.11.0/24 -add china_ip_route 203.5.21.0/24 -add china_ip_route 203.5.22.0/24 -add china_ip_route 203.5.44.0/24 -add china_ip_route 203.5.46.0/23 -add china_ip_route 203.5.52.0/22 -add china_ip_route 203.5.56.0/23 -add china_ip_route 203.5.60.0/23 -add china_ip_route 203.5.114.0/23 -add china_ip_route 203.5.118.0/24 -add china_ip_route 203.5.120.0/24 -add china_ip_route 203.5.172.0/24 -add china_ip_route 203.5.180.0/23 -add china_ip_route 203.5.182.0/24 -add china_ip_route 203.5.185.0/24 -add china_ip_route 203.5.186.0/24 -add china_ip_route 203.5.188.0/23 -add china_ip_route 203.5.190.0/24 -add china_ip_route 203.5.195.0/24 -add china_ip_route 203.5.214.0/23 -add china_ip_route 203.5.218.0/23 -add china_ip_route 203.6.131.0/24 -add china_ip_route 203.6.136.0/24 -add china_ip_route 203.6.138.0/23 -add china_ip_route 203.6.142.0/24 -add china_ip_route 203.6.150.0/23 -add china_ip_route 203.6.157.0/24 -add china_ip_route 203.6.159.0/24 -add china_ip_route 203.6.224.0/20 -add china_ip_route 203.6.248.0/23 -add china_ip_route 203.7.129.0/24 -add china_ip_route 203.7.138.0/23 -add china_ip_route 203.7.147.0/24 -add china_ip_route 203.7.150.0/23 -add china_ip_route 203.7.158.0/24 -add china_ip_route 203.7.192.0/23 -add china_ip_route 203.7.200.0/24 -add china_ip_route 203.8.0.0/24 -add china_ip_route 203.8.8.0/24 -add china_ip_route 203.8.23.0/24 -add china_ip_route 203.8.70.0/24 -add china_ip_route 203.8.82.0/24 -add china_ip_route 203.8.86.0/23 -add china_ip_route 203.8.91.0/24 -add china_ip_route 203.8.110.0/23 -add china_ip_route 203.8.115.0/24 -add china_ip_route 203.8.166.0/23 -add china_ip_route 203.8.169.0/24 -add china_ip_route 203.8.173.0/24 -add china_ip_route 203.8.184.0/24 -add china_ip_route 203.8.186.0/23 -add china_ip_route 203.8.190.0/23 -add china_ip_route 203.8.192.0/24 -add china_ip_route 203.8.197.0/24 -add china_ip_route 203.8.198.0/23 -add china_ip_route 203.8.203.0/24 -add china_ip_route 203.8.209.0/24 -add china_ip_route 203.8.210.0/23 -add china_ip_route 203.8.212.0/22 -add china_ip_route 203.8.217.0/24 -add china_ip_route 203.8.220.0/24 -add china_ip_route 203.9.32.0/24 -add china_ip_route 203.9.36.0/23 -add china_ip_route 203.9.57.0/24 -add china_ip_route 203.9.63.0/24 -add china_ip_route 203.9.65.0/24 -add china_ip_route 203.9.70.0/23 -add china_ip_route 203.9.72.0/24 -add china_ip_route 203.9.75.0/24 -add china_ip_route 203.9.76.0/23 -add china_ip_route 203.9.96.0/22 -add china_ip_route 203.9.100.0/23 -add china_ip_route 203.9.108.0/24 -add china_ip_route 203.9.158.0/24 -add china_ip_route 203.10.34.0/24 -add china_ip_route 203.10.56.0/24 -add china_ip_route 203.10.74.0/23 -add china_ip_route 203.10.84.0/22 -add china_ip_route 203.10.88.0/24 -add china_ip_route 203.10.95.0/24 -add china_ip_route 203.10.125.0/24 -add china_ip_route 203.11.70.0/24 -add china_ip_route 203.11.76.0/22 -add china_ip_route 203.11.82.0/24 -add china_ip_route 203.11.84.0/22 -add china_ip_route 203.11.100.0/22 -add china_ip_route 203.11.109.0/24 -add china_ip_route 203.11.117.0/24 -add china_ip_route 203.11.122.0/24 -add china_ip_route 203.11.126.0/24 -add china_ip_route 203.11.136.0/22 -add china_ip_route 203.11.141.0/24 -add china_ip_route 203.11.142.0/23 -add china_ip_route 203.11.180.0/22 -add china_ip_route 203.11.208.0/22 -add china_ip_route 203.12.16.0/24 -add china_ip_route 203.12.19.0/24 -add china_ip_route 203.12.24.0/24 -add china_ip_route 203.12.57.0/24 -add china_ip_route 203.12.65.0/24 -add china_ip_route 203.12.66.0/24 -add china_ip_route 203.12.70.0/23 -add china_ip_route 203.12.87.0/24 -add china_ip_route 203.12.100.0/23 -add china_ip_route 203.12.103.0/24 -add china_ip_route 203.12.114.0/24 -add china_ip_route 203.12.118.0/24 -add china_ip_route 203.12.130.0/24 -add china_ip_route 203.12.137.0/24 -add china_ip_route 203.12.196.0/22 -add china_ip_route 203.12.211.0/24 -add china_ip_route 203.12.219.0/24 -add china_ip_route 203.12.226.0/24 -add china_ip_route 203.12.240.0/22 -add china_ip_route 203.13.18.0/24 -add china_ip_route 203.13.24.0/24 -add china_ip_route 203.13.44.0/23 -add china_ip_route 203.13.88.0/23 -add china_ip_route 203.13.92.0/22 -add china_ip_route 203.13.173.0/24 -add china_ip_route 203.13.224.0/23 -add china_ip_route 203.13.227.0/24 -add china_ip_route 203.13.233.0/24 -add china_ip_route 203.14.24.0/22 -add china_ip_route 203.14.33.0/24 -add china_ip_route 203.14.56.0/24 -add china_ip_route 203.14.61.0/24 -add china_ip_route 203.14.62.0/24 -add china_ip_route 203.14.104.0/24 -add china_ip_route 203.14.114.0/23 -add china_ip_route 203.14.118.0/24 -add china_ip_route 203.14.162.0/24 -add china_ip_route 203.14.192.0/24 -add china_ip_route 203.14.194.0/23 -add china_ip_route 203.14.214.0/24 -add china_ip_route 203.14.231.0/24 -add china_ip_route 203.14.246.0/24 -add china_ip_route 203.15.0.0/20 -add china_ip_route 203.15.20.0/23 -add china_ip_route 203.15.22.0/24 -add china_ip_route 203.15.87.0/24 -add china_ip_route 203.15.88.0/23 -add china_ip_route 203.15.105.0/24 -add china_ip_route 203.15.112.0/21 -add china_ip_route 203.15.130.0/23 -add china_ip_route 203.15.149.0/24 -add china_ip_route 203.15.151.0/24 -add china_ip_route 203.15.156.0/22 -add china_ip_route 203.15.174.0/24 -add china_ip_route 203.15.227.0/24 -add china_ip_route 203.15.232.0/21 -add china_ip_route 203.15.240.0/23 -add china_ip_route 203.15.246.0/24 -add china_ip_route 203.16.10.0/24 -add china_ip_route 203.16.12.0/23 -add china_ip_route 203.16.16.0/21 -add china_ip_route 203.16.27.0/24 -add china_ip_route 203.16.38.0/24 -add china_ip_route 203.16.49.0/24 -add china_ip_route 203.16.50.0/23 -add china_ip_route 203.16.58.0/24 -add china_ip_route 203.16.63.0/24 -add china_ip_route 203.16.133.0/24 -add china_ip_route 203.16.161.0/24 -add china_ip_route 203.16.162.0/24 -add china_ip_route 203.16.186.0/23 -add china_ip_route 203.16.228.0/24 -add china_ip_route 203.16.238.0/24 -add china_ip_route 203.16.240.0/24 -add china_ip_route 203.16.245.0/24 -add china_ip_route 203.17.2.0/24 -add china_ip_route 203.17.18.0/24 -add china_ip_route 203.17.28.0/24 -add china_ip_route 203.17.39.0/24 -add china_ip_route 203.17.56.0/24 -add china_ip_route 203.17.74.0/23 -add china_ip_route 203.17.88.0/23 -add china_ip_route 203.17.136.0/24 -add china_ip_route 203.17.164.0/24 -add china_ip_route 203.17.187.0/24 -add china_ip_route 203.17.190.0/23 -add china_ip_route 203.17.231.0/24 -add china_ip_route 203.17.233.0/24 -add china_ip_route 203.17.248.0/24 -add china_ip_route 203.17.249.0/24 -add china_ip_route 203.17.255.0/24 -add china_ip_route 203.18.2.0/23 -add china_ip_route 203.18.4.0/24 -add china_ip_route 203.18.7.0/24 -add china_ip_route 203.18.31.0/24 -add china_ip_route 203.18.37.0/24 -add china_ip_route 203.18.48.0/23 -add china_ip_route 203.18.52.0/24 -add china_ip_route 203.18.72.0/22 -add china_ip_route 203.18.80.0/23 -add china_ip_route 203.18.87.0/24 -add china_ip_route 203.18.100.0/23 -add china_ip_route 203.18.105.0/24 -add china_ip_route 203.18.107.0/24 -add china_ip_route 203.18.110.0/24 -add china_ip_route 203.18.129.0/24 -add china_ip_route 203.18.131.0/24 -add china_ip_route 203.18.132.0/23 -add china_ip_route 203.18.144.0/24 -add china_ip_route 203.18.153.0/24 -add china_ip_route 203.18.199.0/24 -add china_ip_route 203.18.208.0/24 -add china_ip_route 203.18.211.0/24 -add china_ip_route 203.18.215.0/24 -add china_ip_route 203.19.1.0/24 -add china_ip_route 203.19.18.0/24 -add china_ip_route 203.19.24.0/24 -add china_ip_route 203.19.30.0/24 -add china_ip_route 203.19.32.0/21 -add china_ip_route 203.19.41.0/24 -add china_ip_route 203.19.44.0/23 -add china_ip_route 203.19.46.0/24 -add china_ip_route 203.19.58.0/24 -add china_ip_route 203.19.60.0/23 -add china_ip_route 203.19.64.0/24 -add china_ip_route 203.19.68.0/24 -add china_ip_route 203.19.72.0/24 -add china_ip_route 203.19.101.0/24 -add china_ip_route 203.19.111.0/24 -add china_ip_route 203.19.131.0/24 -add china_ip_route 203.19.133.0/24 -add china_ip_route 203.19.144.0/24 -add china_ip_route 203.19.147.0/24 -add china_ip_route 203.19.149.0/24 -add china_ip_route 203.19.156.0/24 -add china_ip_route 203.19.176.0/24 -add china_ip_route 203.19.178.0/23 -add china_ip_route 203.19.208.0/24 -add china_ip_route 203.19.228.0/22 -add china_ip_route 203.19.233.0/24 -add china_ip_route 203.19.242.0/24 -add china_ip_route 203.19.248.0/23 -add china_ip_route 203.19.255.0/24 -add china_ip_route 203.20.17.0/24 -add china_ip_route 203.20.40.0/23 -add china_ip_route 203.20.44.0/24 -add china_ip_route 203.20.48.0/24 -add china_ip_route 203.20.61.0/24 -add china_ip_route 203.20.65.0/24 -add china_ip_route 203.20.84.0/23 -add china_ip_route 203.20.89.0/24 -add china_ip_route 203.20.106.0/23 -add china_ip_route 203.20.115.0/24 -add china_ip_route 203.20.117.0/24 -add china_ip_route 203.20.118.0/23 -add china_ip_route 203.20.122.0/24 -add china_ip_route 203.20.126.0/23 -add china_ip_route 203.20.135.0/24 -add china_ip_route 203.20.136.0/21 -add china_ip_route 203.20.150.0/24 -add china_ip_route 203.20.230.0/24 -add china_ip_route 203.20.232.0/24 -add china_ip_route 203.20.236.0/24 -add china_ip_route 203.21.0.0/23 -add china_ip_route 203.21.2.0/24 -add china_ip_route 203.21.8.0/24 -add china_ip_route 203.21.10.0/24 -add china_ip_route 203.21.18.0/24 -add china_ip_route 203.21.33.0/24 -add china_ip_route 203.21.34.0/24 -add china_ip_route 203.21.41.0/24 -add china_ip_route 203.21.44.0/24 -add china_ip_route 203.21.68.0/24 -add china_ip_route 203.21.82.0/24 -add china_ip_route 203.21.96.0/22 -add china_ip_route 203.21.124.0/24 -add china_ip_route 203.21.136.0/23 -add china_ip_route 203.21.145.0/24 -add china_ip_route 203.21.206.0/24 -add china_ip_route 203.22.24.0/24 -add china_ip_route 203.22.28.0/23 -add china_ip_route 203.22.31.0/24 -add china_ip_route 203.22.68.0/24 -add china_ip_route 203.22.76.0/24 -add china_ip_route 203.22.78.0/24 -add china_ip_route 203.22.84.0/24 -add china_ip_route 203.22.87.0/24 -add china_ip_route 203.22.92.0/22 -add china_ip_route 203.22.99.0/24 -add china_ip_route 203.22.106.0/24 -add china_ip_route 203.22.122.0/23 -add china_ip_route 203.22.131.0/24 -add china_ip_route 203.22.163.0/24 -add china_ip_route 203.22.166.0/24 -add china_ip_route 203.22.170.0/24 -add china_ip_route 203.22.176.0/21 -add china_ip_route 203.22.194.0/24 -add china_ip_route 203.22.242.0/23 -add china_ip_route 203.22.245.0/24 -add china_ip_route 203.22.246.0/24 -add china_ip_route 203.22.252.0/23 -add china_ip_route 203.23.0.0/24 -add china_ip_route 203.23.47.0/24 -add china_ip_route 203.23.61.0/24 -add china_ip_route 203.23.62.0/23 -add china_ip_route 203.23.73.0/24 -add china_ip_route 203.23.85.0/24 -add china_ip_route 203.23.92.0/22 -add china_ip_route 203.23.98.0/24 -add china_ip_route 203.23.107.0/24 -add china_ip_route 203.23.112.0/24 -add china_ip_route 203.23.130.0/24 -add china_ip_route 203.23.140.0/23 -add china_ip_route 203.23.172.0/24 -add china_ip_route 203.23.182.0/24 -add china_ip_route 203.23.186.0/23 -add china_ip_route 203.23.192.0/24 -add china_ip_route 203.23.197.0/24 -add china_ip_route 203.23.198.0/24 -add china_ip_route 203.23.204.0/22 -add china_ip_route 203.23.224.0/24 -add china_ip_route 203.23.226.0/23 -add china_ip_route 203.23.228.0/22 -add china_ip_route 203.23.249.0/24 -add china_ip_route 203.23.251.0/24 -add china_ip_route 203.24.13.0/24 -add china_ip_route 203.24.18.0/24 -add china_ip_route 203.24.27.0/24 -add china_ip_route 203.24.43.0/24 -add china_ip_route 203.24.56.0/24 -add china_ip_route 203.24.58.0/24 -add china_ip_route 203.24.67.0/24 -add china_ip_route 203.24.74.0/24 -add china_ip_route 203.24.79.0/24 -add china_ip_route 203.24.80.0/23 -add china_ip_route 203.24.84.0/23 -add china_ip_route 203.24.86.0/24 -add china_ip_route 203.24.90.0/24 -add china_ip_route 203.24.111.0/24 -add china_ip_route 203.24.112.0/24 -add china_ip_route 203.24.116.0/24 -add china_ip_route 203.24.122.0/23 -add china_ip_route 203.24.145.0/24 -add china_ip_route 203.24.152.0/23 -add china_ip_route 203.24.157.0/24 -add china_ip_route 203.24.161.0/24 -add china_ip_route 203.24.167.0/24 -add china_ip_route 203.24.186.0/23 -add china_ip_route 203.24.199.0/24 -add china_ip_route 203.24.202.0/24 -add china_ip_route 203.24.212.0/23 -add china_ip_route 203.24.217.0/24 -add china_ip_route 203.24.219.0/24 -add china_ip_route 203.24.244.0/24 -add china_ip_route 203.25.19.0/24 -add china_ip_route 203.25.20.0/23 -add china_ip_route 203.25.46.0/24 -add china_ip_route 203.25.48.0/21 -add china_ip_route 203.25.64.0/23 -add china_ip_route 203.25.91.0/24 -add china_ip_route 203.25.99.0/24 -add china_ip_route 203.25.100.0/24 -add china_ip_route 203.25.106.0/24 -add china_ip_route 203.25.131.0/24 -add china_ip_route 203.25.135.0/24 -add china_ip_route 203.25.138.0/24 -add china_ip_route 203.25.147.0/24 -add china_ip_route 203.25.153.0/24 -add china_ip_route 203.25.154.0/23 -add china_ip_route 203.25.164.0/24 -add china_ip_route 203.25.166.0/24 -add china_ip_route 203.25.174.0/23 -add china_ip_route 203.25.180.0/24 -add china_ip_route 203.25.182.0/24 -add china_ip_route 203.25.191.0/24 -add china_ip_route 203.25.199.0/24 -add china_ip_route 203.25.200.0/24 -add china_ip_route 203.25.202.0/23 -add china_ip_route 203.25.208.0/20 -add china_ip_route 203.25.229.0/24 -add china_ip_route 203.25.235.0/24 -add china_ip_route 203.25.236.0/24 -add china_ip_route 203.25.242.0/24 -add china_ip_route 203.26.12.0/24 -add china_ip_route 203.26.34.0/24 -add china_ip_route 203.26.49.0/24 -add china_ip_route 203.26.50.0/24 -add china_ip_route 203.26.55.0/24 -add china_ip_route 203.26.56.0/23 -add china_ip_route 203.26.60.0/24 -add china_ip_route 203.26.65.0/24 -add china_ip_route 203.26.68.0/24 -add china_ip_route 203.26.76.0/24 -add china_ip_route 203.26.80.0/24 -add china_ip_route 203.26.84.0/24 -add china_ip_route 203.26.97.0/24 -add china_ip_route 203.26.102.0/23 -add china_ip_route 203.26.115.0/24 -add china_ip_route 203.26.116.0/24 -add china_ip_route 203.26.129.0/24 -add china_ip_route 203.26.143.0/24 -add china_ip_route 203.26.144.0/24 -add china_ip_route 203.26.148.0/23 -add china_ip_route 203.26.154.0/24 -add china_ip_route 203.26.158.0/23 -add china_ip_route 203.26.170.0/24 -add china_ip_route 203.26.173.0/24 -add china_ip_route 203.26.176.0/24 -add china_ip_route 203.26.185.0/24 -add china_ip_route 203.26.202.0/23 -add china_ip_route 203.26.210.0/24 -add china_ip_route 203.26.214.0/24 -add china_ip_route 203.26.222.0/24 -add china_ip_route 203.26.224.0/24 -add china_ip_route 203.26.228.0/24 -add china_ip_route 203.26.232.0/24 -add china_ip_route 203.27.0.0/24 -add china_ip_route 203.27.10.0/24 -add china_ip_route 203.27.15.0/24 -add china_ip_route 203.27.16.0/24 -add china_ip_route 203.27.20.0/24 -add china_ip_route 203.27.22.0/23 -add china_ip_route 203.27.40.0/24 -add china_ip_route 203.27.45.0/24 -add china_ip_route 203.27.53.0/24 -add china_ip_route 203.27.65.0/24 -add china_ip_route 203.27.66.0/24 -add china_ip_route 203.27.81.0/24 -add china_ip_route 203.27.88.0/24 -add china_ip_route 203.27.102.0/24 -add china_ip_route 203.27.109.0/24 -add china_ip_route 203.27.117.0/24 -add china_ip_route 203.27.121.0/24 -add china_ip_route 203.27.122.0/23 -add china_ip_route 203.27.125.0/24 -add china_ip_route 203.27.200.0/24 -add china_ip_route 203.27.202.0/24 -add china_ip_route 203.27.233.0/24 -add china_ip_route 203.27.241.0/24 -add china_ip_route 203.27.250.0/24 -add china_ip_route 203.28.10.0/24 -add china_ip_route 203.28.12.0/24 -add china_ip_route 203.28.33.0/24 -add china_ip_route 203.28.34.0/23 -add china_ip_route 203.28.43.0/24 -add china_ip_route 203.28.44.0/24 -add china_ip_route 203.28.54.0/24 -add china_ip_route 203.28.56.0/24 -add china_ip_route 203.28.73.0/24 -add china_ip_route 203.28.74.0/24 -add china_ip_route 203.28.76.0/24 -add china_ip_route 203.28.86.0/24 -add china_ip_route 203.28.88.0/24 -add china_ip_route 203.28.112.0/24 -add china_ip_route 203.28.131.0/24 -add china_ip_route 203.28.136.0/24 -add china_ip_route 203.28.140.0/24 -add china_ip_route 203.28.145.0/24 -add china_ip_route 203.28.165.0/24 -add china_ip_route 203.28.169.0/24 -add china_ip_route 203.28.170.0/24 -add china_ip_route 203.28.178.0/23 -add china_ip_route 203.28.185.0/24 -add china_ip_route 203.28.187.0/24 -add china_ip_route 203.28.196.0/24 -add china_ip_route 203.28.226.0/23 -add china_ip_route 203.28.239.0/24 -add china_ip_route 203.29.2.0/24 -add china_ip_route 203.29.8.0/23 -add china_ip_route 203.29.13.0/24 -add china_ip_route 203.29.14.0/24 -add china_ip_route 203.29.28.0/24 -add china_ip_route 203.29.46.0/24 -add china_ip_route 203.29.57.0/24 -add china_ip_route 203.29.61.0/24 -add china_ip_route 203.29.63.0/24 -add china_ip_route 203.29.69.0/24 -add china_ip_route 203.29.73.0/24 -add china_ip_route 203.29.81.0/24 -add china_ip_route 203.29.90.0/24 -add china_ip_route 203.29.95.0/24 -add china_ip_route 203.29.100.0/24 -add china_ip_route 203.29.103.0/24 -add china_ip_route 203.29.112.0/24 -add china_ip_route 203.29.120.0/22 -add china_ip_route 203.29.182.0/23 -add china_ip_route 203.29.187.0/24 -add china_ip_route 203.29.189.0/24 -add china_ip_route 203.29.190.0/24 -add china_ip_route 203.29.205.0/24 -add china_ip_route 203.29.210.0/24 -add china_ip_route 203.29.217.0/24 -add china_ip_route 203.29.227.0/24 -add china_ip_route 203.29.231.0/24 -add china_ip_route 203.29.233.0/24 -add china_ip_route 203.29.234.0/24 -add china_ip_route 203.29.248.0/24 -add china_ip_route 203.29.254.0/23 -add china_ip_route 203.30.16.0/23 -add china_ip_route 203.30.25.0/24 -add china_ip_route 203.30.27.0/24 -add china_ip_route 203.30.29.0/24 -add china_ip_route 203.30.66.0/24 -add china_ip_route 203.30.81.0/24 -add china_ip_route 203.30.87.0/24 -add china_ip_route 203.30.111.0/24 -add china_ip_route 203.30.121.0/24 -add china_ip_route 203.30.123.0/24 -add china_ip_route 203.30.152.0/24 -add china_ip_route 203.30.156.0/24 -add china_ip_route 203.30.162.0/24 -add china_ip_route 203.30.173.0/24 -add china_ip_route 203.30.175.0/24 -add china_ip_route 203.30.187.0/24 -add china_ip_route 203.30.194.0/24 -add china_ip_route 203.30.217.0/24 -add china_ip_route 203.30.220.0/24 -add china_ip_route 203.30.222.0/24 -add china_ip_route 203.30.232.0/23 -add china_ip_route 203.30.235.0/24 -add china_ip_route 203.30.240.0/23 -add china_ip_route 203.30.246.0/24 -add china_ip_route 203.30.250.0/23 -add china_ip_route 203.31.45.0/24 -add china_ip_route 203.31.46.0/24 -add china_ip_route 203.31.49.0/24 -add china_ip_route 203.31.51.0/24 -add china_ip_route 203.31.54.0/23 -add china_ip_route 203.31.69.0/24 -add china_ip_route 203.31.72.0/24 -add china_ip_route 203.31.80.0/24 -add china_ip_route 203.31.85.0/24 -add china_ip_route 203.31.97.0/24 -add china_ip_route 203.31.105.0/24 -add china_ip_route 203.31.106.0/24 -add china_ip_route 203.31.108.0/23 -add china_ip_route 203.31.124.0/24 -add china_ip_route 203.31.162.0/24 -add china_ip_route 203.31.174.0/24 -add china_ip_route 203.31.177.0/24 -add china_ip_route 203.31.181.0/24 -add china_ip_route 203.31.187.0/24 -add china_ip_route 203.31.189.0/24 -add china_ip_route 203.31.204.0/24 -add china_ip_route 203.31.220.0/24 -add china_ip_route 203.31.222.0/23 -add china_ip_route 203.31.225.0/24 -add china_ip_route 203.31.229.0/24 -add china_ip_route 203.31.248.0/23 -add china_ip_route 203.31.253.0/24 -add china_ip_route 203.32.20.0/24 -add china_ip_route 203.32.48.0/23 -add china_ip_route 203.32.56.0/24 -add china_ip_route 203.32.60.0/24 -add china_ip_route 203.32.62.0/24 -add china_ip_route 203.32.68.0/23 -add china_ip_route 203.32.76.0/24 -add china_ip_route 203.32.81.0/24 -add china_ip_route 203.32.84.0/23 -add china_ip_route 203.32.95.0/24 -add china_ip_route 203.32.102.0/24 -add china_ip_route 203.32.105.0/24 -add china_ip_route 203.32.130.0/24 -add china_ip_route 203.32.133.0/24 -add china_ip_route 203.32.140.0/24 -add china_ip_route 203.32.152.0/24 -add china_ip_route 203.32.186.0/23 -add china_ip_route 203.32.192.0/24 -add china_ip_route 203.32.196.0/24 -add china_ip_route 203.32.203.0/24 -add china_ip_route 203.32.204.0/23 -add china_ip_route 203.32.212.0/24 -add china_ip_route 203.33.4.0/24 -add china_ip_route 203.33.7.0/24 -add china_ip_route 203.33.8.0/21 -add china_ip_route 203.33.21.0/24 -add china_ip_route 203.33.26.0/24 -add china_ip_route 203.33.32.0/24 -add china_ip_route 203.33.63.0/24 -add china_ip_route 203.33.64.0/24 -add china_ip_route 203.33.67.0/24 -add china_ip_route 203.33.68.0/24 -add china_ip_route 203.33.73.0/24 -add china_ip_route 203.33.79.0/24 -add china_ip_route 203.33.100.0/24 -add china_ip_route 203.33.122.0/24 -add china_ip_route 203.33.129.0/24 -add china_ip_route 203.33.131.0/24 -add china_ip_route 203.33.145.0/24 -add china_ip_route 203.33.156.0/24 -add china_ip_route 203.33.158.0/23 -add china_ip_route 203.33.174.0/24 -add china_ip_route 203.33.185.0/24 -add china_ip_route 203.33.200.0/24 -add china_ip_route 203.33.202.0/23 -add china_ip_route 203.33.204.0/24 -add china_ip_route 203.33.206.0/23 -add china_ip_route 203.33.214.0/23 -add china_ip_route 203.33.224.0/23 -add china_ip_route 203.33.226.0/24 -add china_ip_route 203.33.233.0/24 -add china_ip_route 203.33.243.0/24 -add china_ip_route 203.33.250.0/24 -add china_ip_route 203.34.4.0/24 -add china_ip_route 203.34.21.0/24 -add china_ip_route 203.34.27.0/24 -add china_ip_route 203.34.39.0/24 -add china_ip_route 203.34.48.0/23 -add china_ip_route 203.34.54.0/24 -add china_ip_route 203.34.56.0/23 -add china_ip_route 203.34.67.0/24 -add china_ip_route 203.34.69.0/24 -add china_ip_route 203.34.76.0/24 -add china_ip_route 203.34.92.0/24 -add china_ip_route 203.34.106.0/24 -add china_ip_route 203.34.113.0/24 -add china_ip_route 203.34.147.0/24 -add china_ip_route 203.34.150.0/24 -add china_ip_route 203.34.152.0/23 -add china_ip_route 203.34.161.0/24 -add china_ip_route 203.34.162.0/24 -add china_ip_route 203.34.187.0/24 -add china_ip_route 203.34.192.0/21 -add china_ip_route 203.34.204.0/22 -add china_ip_route 203.34.232.0/24 -add china_ip_route 203.34.240.0/24 -add china_ip_route 203.34.242.0/24 -add china_ip_route 203.34.245.0/24 -add china_ip_route 203.34.251.0/24 -add china_ip_route 203.55.2.0/23 -add china_ip_route 203.55.4.0/24 -add china_ip_route 203.55.10.0/24 -add china_ip_route 203.55.13.0/24 -add china_ip_route 203.55.22.0/24 -add china_ip_route 203.55.30.0/24 -add china_ip_route 203.55.93.0/24 -add china_ip_route 203.55.101.0/24 -add china_ip_route 203.55.109.0/24 -add china_ip_route 203.55.110.0/24 -add china_ip_route 203.55.116.0/23 -add china_ip_route 203.55.119.0/24 -add china_ip_route 203.55.128.0/23 -add china_ip_route 203.55.146.0/23 -add china_ip_route 203.55.192.0/24 -add china_ip_route 203.55.196.0/24 -add china_ip_route 203.55.218.0/23 -add china_ip_route 203.55.221.0/24 -add china_ip_route 203.55.224.0/24 -add china_ip_route 203.56.1.0/24 -add china_ip_route 203.56.4.0/24 -add china_ip_route 203.56.12.0/24 -add china_ip_route 203.56.24.0/24 -add china_ip_route 203.56.38.0/24 -add china_ip_route 203.56.40.0/24 -add china_ip_route 203.56.46.0/24 -add china_ip_route 203.56.48.0/21 -add china_ip_route 203.56.68.0/23 -add china_ip_route 203.56.82.0/23 -add china_ip_route 203.56.84.0/23 -add china_ip_route 203.56.95.0/24 -add china_ip_route 203.56.110.0/24 -add china_ip_route 203.56.121.0/24 -add china_ip_route 203.56.161.0/24 -add china_ip_route 203.56.169.0/24 -add china_ip_route 203.56.172.0/23 -add china_ip_route 203.56.175.0/24 -add china_ip_route 203.56.183.0/24 -add china_ip_route 203.56.185.0/24 -add china_ip_route 203.56.187.0/24 -add china_ip_route 203.56.192.0/24 -add china_ip_route 203.56.198.0/24 -add china_ip_route 203.56.201.0/24 -add china_ip_route 203.56.208.0/23 -add china_ip_route 203.56.210.0/24 -add china_ip_route 203.56.214.0/24 -add china_ip_route 203.56.216.0/24 -add china_ip_route 203.56.227.0/24 -add china_ip_route 203.56.228.0/24 -add china_ip_route 203.56.231.0/24 -add china_ip_route 203.56.232.0/24 -add china_ip_route 203.56.240.0/24 -add china_ip_route 203.56.252.0/24 -add china_ip_route 203.56.254.0/24 -add china_ip_route 203.57.5.0/24 -add china_ip_route 203.57.6.0/24 -add china_ip_route 203.57.12.0/23 -add china_ip_route 203.57.28.0/24 -add china_ip_route 203.57.39.0/24 -add china_ip_route 203.57.46.0/24 -add china_ip_route 203.57.58.0/24 -add china_ip_route 203.57.61.0/24 -add china_ip_route 203.57.66.0/24 -add china_ip_route 203.57.69.0/24 -add china_ip_route 203.57.70.0/23 -add china_ip_route 203.57.73.0/24 -add china_ip_route 203.57.90.0/24 -add china_ip_route 203.57.101.0/24 -add china_ip_route 203.57.109.0/24 -add china_ip_route 203.57.123.0/24 -add china_ip_route 203.57.157.0/24 -add china_ip_route 203.57.200.0/24 -add china_ip_route 203.57.202.0/24 -add china_ip_route 203.57.206.0/24 -add china_ip_route 203.57.222.0/24 -add china_ip_route 203.57.224.0/20 -add china_ip_route 203.57.246.0/23 -add china_ip_route 203.57.249.0/24 -add china_ip_route 203.57.253.0/24 -add china_ip_route 203.57.254.0/23 -add china_ip_route 203.62.2.0/24 -add china_ip_route 203.62.131.0/24 -add china_ip_route 203.62.139.0/24 -add china_ip_route 203.62.161.0/24 -add china_ip_route 203.62.197.0/24 -add china_ip_route 203.62.228.0/22 -add china_ip_route 203.62.234.0/24 -add china_ip_route 203.62.246.0/24 -add china_ip_route 203.76.160.0/22 -add china_ip_route 203.76.168.0/22 -add china_ip_route 203.76.208.0/22 -add china_ip_route 203.76.212.0/22 -add china_ip_route 203.76.216.0/22 -add china_ip_route 203.76.240.0/22 -add china_ip_route 203.76.244.0/22 -add china_ip_route 203.77.180.0/22 -add china_ip_route 203.78.48.0/20 -add china_ip_route 203.78.156.0/22 -add china_ip_route 203.79.0.0/20 -add china_ip_route 203.79.32.0/20 -add china_ip_route 203.80.4.0/23 -add china_ip_route 203.80.32.0/20 -add china_ip_route 203.80.57.0/24 -add china_ip_route 203.80.129.0/24 -add china_ip_route 203.80.132.0/22 -add china_ip_route 203.80.136.0/21 -add china_ip_route 203.80.144.0/20 -add china_ip_route 203.81.0.0/21 -add china_ip_route 203.81.16.0/20 -add china_ip_route 203.81.244.0/22 -add china_ip_route 203.82.0.0/23 -add china_ip_route 203.82.16.0/21 -add china_ip_route 203.82.112.0/22 -add china_ip_route 203.82.116.0/22 -add china_ip_route 203.82.120.0/22 -add china_ip_route 203.82.124.0/22 -add china_ip_route 203.82.224.0/22 -add china_ip_route 203.82.228.0/22 -add china_ip_route 203.82.232.0/22 -add china_ip_route 203.82.236.0/22 -add china_ip_route 203.83.0.0/22 -add china_ip_route 203.83.8.0/22 -add china_ip_route 203.83.12.0/22 -add china_ip_route 203.83.56.0/21 -add china_ip_route 203.83.224.0/20 -add china_ip_route 203.86.0.0/19 -add china_ip_route 203.86.32.0/19 -add china_ip_route 203.86.64.0/20 -add china_ip_route 203.86.80.0/20 -add china_ip_route 203.86.96.0/19 -add china_ip_route 203.86.250.0/24 -add china_ip_route 203.86.254.0/23 -add china_ip_route 203.88.32.0/19 -add china_ip_route 203.88.192.0/19 -add china_ip_route 203.89.0.0/22 -add china_ip_route 203.89.8.0/21 -add china_ip_route 203.89.100.0/22 -add china_ip_route 203.89.133.0/24 -add china_ip_route 203.89.136.0/22 -add china_ip_route 203.89.144.0/24 -add china_ip_route 203.90.0.0/22 -add china_ip_route 203.90.8.0/22 -add china_ip_route 203.90.12.0/22 -add china_ip_route 203.90.128.0/19 -add china_ip_route 203.90.160.0/19 -add china_ip_route 203.90.192.0/19 -add china_ip_route 203.91.32.0/19 -add china_ip_route 203.91.96.0/20 -add china_ip_route 203.91.120.0/21 -add china_ip_route 203.92.0.0/22 -add china_ip_route 203.92.6.0/24 -add china_ip_route 203.92.160.0/19 -add china_ip_route 203.93.0.0/22 -add china_ip_route 203.93.4.0/22 -add china_ip_route 203.93.8.0/24 -add china_ip_route 203.93.9.0/24 -add china_ip_route 203.93.10.0/23 -add china_ip_route 203.93.12.0/22 -add china_ip_route 203.93.16.0/20 -add china_ip_route 203.93.32.0/19 -add china_ip_route 203.93.64.0/18 -add china_ip_route 203.93.128.0/21 -add china_ip_route 203.93.136.0/22 -add china_ip_route 203.93.140.0/24 -add china_ip_route 203.93.141.0/24 -add china_ip_route 203.93.142.0/23 -add china_ip_route 203.93.144.0/20 -add china_ip_route 203.93.160.0/19 -add china_ip_route 203.93.192.0/18 -add china_ip_route 203.94.0.0/22 -add china_ip_route 203.94.4.0/22 -add china_ip_route 203.94.8.0/21 -add china_ip_route 203.94.16.0/20 -add china_ip_route 203.95.0.0/21 -add china_ip_route 203.95.96.0/20 -add china_ip_route 203.95.112.0/20 -add china_ip_route 203.95.128.0/18 -add china_ip_route 203.95.200.0/22 -add china_ip_route 203.95.204.0/22 -add china_ip_route 203.95.208.0/22 -add china_ip_route 203.95.224.0/19 -add china_ip_route 203.99.8.0/21 -add china_ip_route 203.99.16.0/20 -add china_ip_route 203.99.80.0/20 -add china_ip_route 203.100.32.0/20 -add china_ip_route 203.100.48.0/21 -add china_ip_route 203.100.58.0/24 -add china_ip_route 203.100.60.0/24 -add china_ip_route 203.100.63.0/24 -add china_ip_route 203.100.80.0/20 -add china_ip_route 203.100.96.0/19 -add china_ip_route 203.100.192.0/20 -add china_ip_route 203.104.32.0/20 -add china_ip_route 203.105.96.0/19 -add china_ip_route 203.105.128.0/19 -add china_ip_route 203.107.0.0/17 -add china_ip_route 203.110.160.0/19 -add china_ip_route 203.110.208.0/20 -add china_ip_route 203.110.232.0/23 -add china_ip_route 203.110.234.0/24 -add china_ip_route 203.114.80.0/22 -add china_ip_route 203.114.84.0/22 -add china_ip_route 203.114.88.0/22 -add china_ip_route 203.114.92.0/22 -add china_ip_route 203.114.244.0/22 -add china_ip_route 203.118.192.0/19 -add china_ip_route 203.118.241.0/24 -add china_ip_route 203.118.248.0/22 -add china_ip_route 203.119.24.0/21 -add china_ip_route 203.119.32.0/22 -add china_ip_route 203.119.80.0/22 -add china_ip_route 203.119.85.0/24 -add china_ip_route 203.119.113.0/24 -add china_ip_route 203.119.114.0/23 -add china_ip_route 203.119.116.0/22 -add china_ip_route 203.119.120.0/21 -add china_ip_route 203.119.128.0/17 -add china_ip_route 203.123.58.0/24 -add china_ip_route 203.128.32.0/19 -add china_ip_route 203.128.96.0/19 -add china_ip_route 203.128.224.0/21 -add china_ip_route 203.129.8.0/21 -add china_ip_route 203.130.32.0/19 -add china_ip_route 203.132.32.0/19 -add china_ip_route 203.134.240.0/21 -add china_ip_route 203.135.96.0/20 -add china_ip_route 203.135.112.0/20 -add china_ip_route 203.135.160.0/20 -add china_ip_route 203.142.219.0/24 -add china_ip_route 203.142.224.0/19 -add china_ip_route 203.144.96.0/19 -add china_ip_route 203.145.0.0/19 -add china_ip_route 203.148.0.0/18 -add china_ip_route 203.148.64.0/20 -add china_ip_route 203.148.80.0/22 -add china_ip_route 203.148.86.0/23 -add china_ip_route 203.149.92.0/22 -add china_ip_route 203.152.64.0/19 -add china_ip_route 203.152.128.0/19 -add china_ip_route 203.153.0.0/22 -add china_ip_route 203.156.192.0/18 -add china_ip_route 203.158.16.0/21 -add china_ip_route 203.160.52.0/22 -add china_ip_route 203.160.104.0/21 -add china_ip_route 203.160.129.0/24 -add china_ip_route 203.160.192.0/19 -add china_ip_route 203.161.0.0/22 -add china_ip_route 203.161.180.0/24 -add china_ip_route 203.161.183.0/24 -add china_ip_route 203.161.192.0/19 -add china_ip_route 203.166.160.0/19 -add china_ip_route 203.167.28.0/22 -add china_ip_route 203.168.0.0/19 -add china_ip_route 203.170.58.0/23 -add china_ip_route 203.171.0.0/22 -add china_ip_route 203.171.208.0/24 -add china_ip_route 203.171.224.0/20 -add china_ip_route 203.174.4.0/24 -add china_ip_route 203.174.6.0/24 -add china_ip_route 203.174.7.0/24 -add china_ip_route 203.174.96.0/19 -add china_ip_route 203.175.128.0/19 -add china_ip_route 203.175.192.0/18 -add china_ip_route 203.176.0.0/18 -add china_ip_route 203.176.64.0/19 -add china_ip_route 203.176.168.0/21 -add china_ip_route 203.184.80.0/20 -add china_ip_route 203.185.189.0/24 -add china_ip_route 203.187.160.0/19 -add china_ip_route 203.189.0.0/23 -add china_ip_route 203.189.6.0/23 -add china_ip_route 203.189.112.0/22 -add china_ip_route 203.189.192.0/19 -add china_ip_route 203.189.232.0/22 -add china_ip_route 203.189.240.0/22 -add china_ip_route 203.190.96.0/20 -add china_ip_route 203.190.249.0/24 -add china_ip_route 203.191.0.0/23 -add china_ip_route 203.191.2.0/24 -add china_ip_route 203.191.5.0/24 -add china_ip_route 203.191.7.0/24 -add china_ip_route 203.191.16.0/20 -add china_ip_route 203.191.64.0/18 -add china_ip_route 203.191.133.0/24 -add china_ip_route 203.191.144.0/21 -add china_ip_route 203.191.152.0/21 -add china_ip_route 203.192.0.0/19 -add china_ip_route 203.193.224.0/19 -add china_ip_route 203.194.120.0/21 -add china_ip_route 203.195.64.0/19 -add china_ip_route 203.195.112.0/21 -add china_ip_route 203.195.128.0/17 -add china_ip_route 203.196.0.0/21 -add china_ip_route 203.196.8.0/21 -add china_ip_route 203.196.28.0/22 -add china_ip_route 203.201.181.0/24 -add china_ip_route 203.201.182.0/24 -add china_ip_route 203.202.236.0/22 -add china_ip_route 203.205.64.0/19 -add china_ip_route 203.205.128.0/17 -add china_ip_route 203.207.64.0/20 -add china_ip_route 203.207.80.0/21 -add china_ip_route 203.207.88.0/22 -add china_ip_route 203.207.92.0/22 -add china_ip_route 203.207.96.0/20 -add china_ip_route 203.207.112.0/20 -add china_ip_route 203.207.128.0/18 -add china_ip_route 203.207.192.0/21 -add china_ip_route 203.207.200.0/21 -add china_ip_route 203.207.208.0/20 -add china_ip_route 203.207.224.0/19 -add china_ip_route 203.208.0.0/20 -add china_ip_route 203.208.16.0/22 -add china_ip_route 203.208.32.0/19 -add china_ip_route 203.209.224.0/19 -add china_ip_route 203.212.0.0/20 -add china_ip_route 203.212.80.0/20 -add china_ip_route 203.215.232.0/21 -add china_ip_route 203.217.164.0/22 -add china_ip_route 203.223.0.0/20 -add china_ip_route 203.223.16.0/21 -add china_ip_route 204.52.191.0/24 -add china_ip_route 210.2.0.0/20 -add china_ip_route 210.2.16.0/20 -add china_ip_route 210.5.0.0/19 -add china_ip_route 210.5.56.0/21 -add china_ip_route 210.5.128.0/20 -add china_ip_route 210.5.144.0/20 -add china_ip_route 210.7.56.0/22 -add china_ip_route 210.7.60.0/22 -add china_ip_route 210.12.0.0/18 -add china_ip_route 210.12.64.0/18 -add china_ip_route 210.12.128.0/18 -add china_ip_route 210.12.192.0/18 -add china_ip_route 210.13.0.0/18 -add china_ip_route 210.13.64.0/18 -add china_ip_route 210.13.128.0/17 -add china_ip_route 210.14.64.0/19 -add china_ip_route 210.14.112.0/20 -add china_ip_route 210.14.128.0/19 -add china_ip_route 210.14.160.0/19 -add china_ip_route 210.14.192.0/19 -add china_ip_route 210.14.224.0/19 -add china_ip_route 210.15.0.0/19 -add china_ip_route 210.15.32.0/19 -add china_ip_route 210.15.64.0/19 -add china_ip_route 210.15.96.0/19 -add china_ip_route 210.15.128.0/18 -add china_ip_route 210.16.104.0/22 -add china_ip_route 210.16.128.0/18 -add china_ip_route 210.21.0.0/17 -add china_ip_route 210.21.128.0/17 -add china_ip_route 210.22.0.0/16 -add china_ip_route 210.23.32.0/19 -add china_ip_route 210.25.0.0/16 -add china_ip_route 210.26.0.0/15 -add china_ip_route 210.28.0.0/14 -add china_ip_route 210.32.0.0/14 -add china_ip_route 210.36.0.0/14 -add china_ip_route 210.40.0.0/13 -add china_ip_route 210.51.0.0/16 -add china_ip_route 210.52.0.0/18 -add china_ip_route 210.52.64.0/18 -add china_ip_route 210.52.128.0/17 -add china_ip_route 210.53.0.0/17 -add china_ip_route 210.53.128.0/17 -add china_ip_route 210.56.192.0/19 -add china_ip_route 210.72.0.0/17 -add china_ip_route 210.72.128.0/19 -add china_ip_route 210.72.160.0/19 -add china_ip_route 210.72.192.0/18 -add china_ip_route 210.73.0.0/19 -add china_ip_route 210.73.32.0/19 -add china_ip_route 210.73.64.0/18 -add china_ip_route 210.73.128.0/17 -add china_ip_route 210.74.0.0/19 -add china_ip_route 210.74.32.0/19 -add china_ip_route 210.74.64.0/19 -add china_ip_route 210.74.96.0/19 -add china_ip_route 210.74.128.0/19 -add china_ip_route 210.74.160.0/19 -add china_ip_route 210.74.192.0/18 -add china_ip_route 210.75.0.0/16 -add china_ip_route 210.76.0.0/19 -add china_ip_route 210.76.32.0/19 -add china_ip_route 210.76.64.0/18 -add china_ip_route 210.76.128.0/17 -add china_ip_route 210.77.0.0/16 -add china_ip_route 210.78.0.0/19 -add china_ip_route 210.78.32.0/19 -add china_ip_route 210.78.64.0/18 -add china_ip_route 210.78.128.0/19 -add china_ip_route 210.78.160.0/19 -add china_ip_route 210.78.192.0/18 -add china_ip_route 210.79.64.0/18 -add china_ip_route 210.79.224.0/19 -add china_ip_route 210.82.0.0/15 -add china_ip_route 210.87.128.0/20 -add china_ip_route 210.87.144.0/20 -add china_ip_route 210.87.160.0/19 -add china_ip_route 210.185.192.0/18 -add china_ip_route 210.192.96.0/19 -add china_ip_route 211.64.0.0/14 -add china_ip_route 211.68.0.0/15 -add china_ip_route 211.70.0.0/15 -add china_ip_route 211.80.0.0/16 -add china_ip_route 211.81.0.0/16 -add china_ip_route 211.82.0.0/16 -add china_ip_route 211.83.0.0/16 -add china_ip_route 211.84.0.0/15 -add china_ip_route 211.86.0.0/15 -add china_ip_route 211.88.0.0/16 -add china_ip_route 211.89.0.0/16 -add china_ip_route 211.90.0.0/15 -add china_ip_route 211.92.0.0/15 -add china_ip_route 211.94.0.0/15 -add china_ip_route 211.96.0.0/15 -add china_ip_route 211.98.0.0/16 -add china_ip_route 211.99.0.0/18 -add china_ip_route 211.99.64.0/19 -add china_ip_route 211.99.96.0/19 -add china_ip_route 211.99.128.0/17 -add china_ip_route 211.100.0.0/16 -add china_ip_route 211.101.0.0/18 -add china_ip_route 211.101.64.0/18 -add china_ip_route 211.101.128.0/17 -add china_ip_route 211.102.0.0/16 -add china_ip_route 211.103.0.0/17 -add china_ip_route 211.103.128.0/17 -add china_ip_route 211.136.0.0/14 -add china_ip_route 211.140.0.0/15 -add china_ip_route 211.142.0.0/17 -add china_ip_route 211.142.128.0/17 -add china_ip_route 211.143.0.0/16 -add china_ip_route 211.144.0.0/15 -add china_ip_route 211.146.0.0/16 -add china_ip_route 211.147.0.0/16 -add china_ip_route 211.148.0.0/14 -add china_ip_route 211.152.0.0/15 -add china_ip_route 211.154.0.0/16 -add china_ip_route 211.155.0.0/18 -add china_ip_route 211.155.64.0/19 -add china_ip_route 211.155.96.0/19 -add china_ip_route 211.155.128.0/17 -add china_ip_route 211.156.0.0/14 -add china_ip_route 211.160.0.0/14 -add china_ip_route 211.164.0.0/14 -add china_ip_route 212.64.0.0/17 -add china_ip_route 212.129.128.0/17 -add china_ip_route 218.0.0.0/16 -add china_ip_route 218.1.0.0/16 -add china_ip_route 218.2.0.0/15 -add china_ip_route 218.4.0.0/15 -add china_ip_route 218.6.0.0/16 -add china_ip_route 218.7.0.0/16 -add china_ip_route 218.8.0.0/15 -add china_ip_route 218.10.0.0/16 -add china_ip_route 218.11.0.0/16 -add china_ip_route 218.12.0.0/16 -add china_ip_route 218.13.0.0/16 -add china_ip_route 218.14.0.0/15 -add china_ip_route 218.16.0.0/14 -add china_ip_route 218.20.0.0/16 -add china_ip_route 218.21.0.0/17 -add china_ip_route 218.21.128.0/17 -add china_ip_route 218.22.0.0/15 -add china_ip_route 218.24.0.0/15 -add china_ip_route 218.26.0.0/16 -add china_ip_route 218.27.0.0/16 -add china_ip_route 218.28.0.0/15 -add china_ip_route 218.30.0.0/15 -add china_ip_route 218.56.0.0/14 -add china_ip_route 218.60.0.0/15 -add china_ip_route 218.62.0.0/17 -add china_ip_route 218.62.128.0/17 -add china_ip_route 218.63.0.0/16 -add china_ip_route 218.64.0.0/15 -add china_ip_route 218.66.0.0/16 -add china_ip_route 218.67.0.0/17 -add china_ip_route 218.67.128.0/17 -add china_ip_route 218.68.0.0/15 -add china_ip_route 218.70.0.0/15 -add china_ip_route 218.72.0.0/14 -add china_ip_route 218.76.0.0/15 -add china_ip_route 218.78.0.0/15 -add china_ip_route 218.80.0.0/14 -add china_ip_route 218.84.0.0/14 -add china_ip_route 218.88.0.0/13 -add china_ip_route 218.96.0.0/15 -add china_ip_route 218.98.0.0/17 -add china_ip_route 218.98.128.0/18 -add china_ip_route 218.98.192.0/19 -add china_ip_route 218.98.224.0/19 -add china_ip_route 218.99.0.0/16 -add china_ip_route 218.100.88.0/21 -add china_ip_route 218.100.96.0/19 -add china_ip_route 218.100.128.0/17 -add china_ip_route 218.104.0.0/17 -add china_ip_route 218.104.128.0/19 -add china_ip_route 218.104.160.0/19 -add china_ip_route 218.104.192.0/21 -add china_ip_route 218.104.200.0/21 -add china_ip_route 218.104.208.0/20 -add china_ip_route 218.104.224.0/19 -add china_ip_route 218.105.0.0/16 -add china_ip_route 218.106.0.0/15 -add china_ip_route 218.108.0.0/16 -add china_ip_route 218.109.0.0/16 -add china_ip_route 218.185.192.0/19 -add china_ip_route 218.185.240.0/21 -add china_ip_route 218.192.0.0/16 -add china_ip_route 218.193.0.0/16 -add china_ip_route 218.194.0.0/16 -add china_ip_route 218.195.0.0/16 -add china_ip_route 218.196.0.0/14 -add china_ip_route 218.200.0.0/14 -add china_ip_route 218.204.0.0/15 -add china_ip_route 218.206.0.0/15 -add china_ip_route 218.240.0.0/14 -add china_ip_route 218.244.0.0/15 -add china_ip_route 218.246.0.0/15 -add china_ip_route 218.249.0.0/16 -add china_ip_route 219.72.0.0/16 -add china_ip_route 219.82.0.0/16 -add china_ip_route 219.83.128.0/17 -add china_ip_route 219.90.68.0/22 -add china_ip_route 219.90.72.0/22 -add china_ip_route 219.90.76.0/22 -add china_ip_route 219.128.0.0/12 -add china_ip_route 219.144.0.0/14 -add china_ip_route 219.148.0.0/16 -add china_ip_route 219.149.0.0/17 -add china_ip_route 219.149.128.0/18 -add china_ip_route 219.149.192.0/18 -add china_ip_route 219.150.0.0/19 -add china_ip_route 219.150.32.0/19 -add china_ip_route 219.150.64.0/19 -add china_ip_route 219.150.96.0/20 -add china_ip_route 219.150.112.0/20 -add china_ip_route 219.150.128.0/17 -add china_ip_route 219.151.0.0/19 -add china_ip_route 219.151.32.0/19 -add china_ip_route 219.151.64.0/18 -add china_ip_route 219.151.128.0/17 -add china_ip_route 219.152.0.0/15 -add china_ip_route 219.154.0.0/15 -add china_ip_route 219.156.0.0/15 -add china_ip_route 219.158.0.0/17 -add china_ip_route 219.158.128.0/17 -add china_ip_route 219.159.0.0/18 -add china_ip_route 219.159.64.0/18 -add china_ip_route 219.159.128.0/17 -add china_ip_route 219.216.0.0/15 -add china_ip_route 219.218.0.0/15 -add china_ip_route 219.220.0.0/16 -add china_ip_route 219.221.0.0/16 -add china_ip_route 219.222.0.0/15 -add china_ip_route 219.224.0.0/15 -add china_ip_route 219.226.0.0/16 -add china_ip_route 219.227.0.0/16 -add china_ip_route 219.228.0.0/15 -add china_ip_route 219.230.0.0/15 -add china_ip_route 219.232.0.0/14 -add china_ip_route 219.236.0.0/15 -add china_ip_route 219.238.0.0/15 -add china_ip_route 219.242.0.0/15 -add china_ip_route 219.244.0.0/14 -add china_ip_route 220.101.192.0/18 -add china_ip_route 220.112.0.0/14 -add china_ip_route 220.152.128.0/17 -add china_ip_route 220.154.0.0/15 -add china_ip_route 220.158.240.0/22 -add china_ip_route 220.160.0.0/11 -add china_ip_route 220.192.0.0/15 -add china_ip_route 220.194.0.0/15 -add china_ip_route 220.196.0.0/14 -add china_ip_route 220.200.0.0/13 -add china_ip_route 220.231.0.0/18 -add china_ip_route 220.231.128.0/17 -add china_ip_route 220.232.64.0/18 -add china_ip_route 220.234.0.0/16 -add china_ip_route 220.242.0.0/15 -add china_ip_route 220.247.136.0/21 -add china_ip_route 220.248.0.0/14 -add china_ip_route 220.252.0.0/16 -add china_ip_route 221.0.0.0/15 -add china_ip_route 221.2.0.0/16 -add china_ip_route 221.3.0.0/17 -add china_ip_route 221.3.128.0/17 -add china_ip_route 221.4.0.0/16 -add china_ip_route 221.5.0.0/17 -add china_ip_route 221.5.128.0/17 -add china_ip_route 221.6.0.0/16 -add china_ip_route 221.7.0.0/19 -add china_ip_route 221.7.32.0/19 -add china_ip_route 221.7.64.0/19 -add china_ip_route 221.7.96.0/19 -add china_ip_route 221.7.128.0/17 -add china_ip_route 221.8.0.0/15 -add china_ip_route 221.10.0.0/16 -add china_ip_route 221.11.0.0/17 -add china_ip_route 221.11.128.0/18 -add china_ip_route 221.11.192.0/19 -add china_ip_route 221.11.224.0/19 -add china_ip_route 221.12.0.0/17 -add china_ip_route 221.12.128.0/18 -add china_ip_route 221.13.0.0/18 -add china_ip_route 221.13.64.0/19 -add china_ip_route 221.13.96.0/19 -add china_ip_route 221.13.128.0/17 -add china_ip_route 221.14.0.0/15 -add china_ip_route 221.122.0.0/15 -add china_ip_route 221.128.128.0/17 -add china_ip_route 221.129.0.0/16 -add china_ip_route 221.130.0.0/15 -add china_ip_route 221.133.224.0/19 -add china_ip_route 221.136.0.0/16 -add china_ip_route 221.137.0.0/16 -add china_ip_route 221.172.0.0/14 -add china_ip_route 221.176.0.0/13 -add china_ip_route 221.192.0.0/15 -add china_ip_route 221.194.0.0/16 -add china_ip_route 221.195.0.0/16 -add china_ip_route 221.196.0.0/15 -add china_ip_route 221.198.0.0/16 -add china_ip_route 221.199.0.0/19 -add china_ip_route 221.199.32.0/20 -add china_ip_route 221.199.48.0/20 -add china_ip_route 221.199.64.0/18 -add china_ip_route 221.199.128.0/18 -add china_ip_route 221.199.192.0/20 -add china_ip_route 221.199.224.0/19 -add china_ip_route 221.200.0.0/14 -add china_ip_route 221.204.0.0/15 -add china_ip_route 221.206.0.0/16 -add china_ip_route 221.207.0.0/18 -add china_ip_route 221.207.64.0/18 -add china_ip_route 221.207.128.0/17 -add china_ip_route 221.208.0.0/14 -add china_ip_route 221.212.0.0/16 -add china_ip_route 221.213.0.0/16 -add china_ip_route 221.214.0.0/15 -add china_ip_route 221.216.0.0/13 -add china_ip_route 221.224.0.0/13 -add china_ip_route 221.232.0.0/14 -add china_ip_route 221.236.0.0/15 -add china_ip_route 221.238.0.0/16 -add china_ip_route 221.239.0.0/17 -add china_ip_route 221.239.128.0/17 -add china_ip_route 222.16.0.0/15 -add china_ip_route 222.18.0.0/15 -add china_ip_route 222.20.0.0/15 -add china_ip_route 222.22.0.0/16 -add china_ip_route 222.23.0.0/16 -add china_ip_route 222.24.0.0/15 -add china_ip_route 222.26.0.0/15 -add china_ip_route 222.28.0.0/14 -add china_ip_route 222.32.0.0/11 -add china_ip_route 222.64.0.0/13 -add china_ip_route 222.72.0.0/15 -add china_ip_route 222.74.0.0/16 -add china_ip_route 222.75.0.0/16 -add china_ip_route 222.76.0.0/14 -add china_ip_route 222.80.0.0/15 -add china_ip_route 222.82.0.0/16 -add china_ip_route 222.83.0.0/17 -add china_ip_route 222.83.128.0/17 -add china_ip_route 222.84.0.0/16 -add china_ip_route 222.85.0.0/17 -add china_ip_route 222.85.128.0/17 -add china_ip_route 222.86.0.0/15 -add china_ip_route 222.88.0.0/15 -add china_ip_route 222.90.0.0/15 -add china_ip_route 222.92.0.0/14 -add china_ip_route 222.125.0.0/16 -add china_ip_route 222.126.128.0/17 -add china_ip_route 222.128.0.0/14 -add china_ip_route 222.132.0.0/14 -add china_ip_route 222.136.0.0/13 -add china_ip_route 222.160.0.0/15 -add china_ip_route 222.162.0.0/16 -add china_ip_route 222.163.0.0/19 -add china_ip_route 222.163.32.0/19 -add china_ip_route 222.163.64.0/18 -add china_ip_route 222.163.128.0/17 -add china_ip_route 222.168.0.0/15 -add china_ip_route 222.170.0.0/15 -add china_ip_route 222.172.0.0/17 -add china_ip_route 222.172.128.0/17 -add china_ip_route 222.173.0.0/16 -add china_ip_route 222.174.0.0/15 -add china_ip_route 222.176.0.0/13 -add china_ip_route 222.184.0.0/13 -add china_ip_route 222.192.0.0/14 -add china_ip_route 222.196.0.0/15 -add china_ip_route 222.198.0.0/16 -add china_ip_route 222.199.0.0/16 -add china_ip_route 222.200.0.0/14 -add china_ip_route 222.204.0.0/15 -add china_ip_route 222.206.0.0/15 -add china_ip_route 222.208.0.0/13 -add china_ip_route 222.216.0.0/15 -add china_ip_route 222.218.0.0/16 -add china_ip_route 222.219.0.0/16 -add china_ip_route 222.220.0.0/15 -add china_ip_route 222.222.0.0/15 -add china_ip_route 222.240.0.0/13 -add china_ip_route 222.248.0.0/16 -add china_ip_route 222.249.0.0/17 -add china_ip_route 222.249.128.0/19 -add china_ip_route 222.249.160.0/20 -add china_ip_route 222.249.176.0/20 -add china_ip_route 222.249.192.0/18 -add china_ip_route 223.0.0.0/15 -add china_ip_route 223.2.0.0/15 -add china_ip_route 223.4.0.0/14 -add china_ip_route 223.8.0.0/13 -add china_ip_route 223.20.0.0/15 -add china_ip_route 223.27.184.0/22 -add china_ip_route 223.29.208.0/22 -add china_ip_route 223.29.252.0/22 -add china_ip_route 223.64.0.0/11 -add china_ip_route 223.96.0.0/12 -add china_ip_route 223.112.0.0/14 -add china_ip_route 223.116.0.0/15 -add china_ip_route 223.120.128.0/17 -add china_ip_route 223.121.128.0/17 -add china_ip_route 223.122.0.0/15 -add china_ip_route 223.124.0.0/14 -add china_ip_route 223.128.0.0/15 -add china_ip_route 223.144.0.0/12 -add china_ip_route 223.160.0.0/14 -add china_ip_route 223.166.0.0/15 -add china_ip_route 223.192.0.0/15 -add china_ip_route 223.198.0.0/15 -add china_ip_route 223.201.0.0/16 -add china_ip_route 223.202.0.0/15 -add china_ip_route 223.208.0.0/14 -add china_ip_route 223.212.0.0/15 -add china_ip_route 223.214.0.0/15 -add china_ip_route 223.220.0.0/15 -add china_ip_route 223.223.176.0/20 -add china_ip_route 223.223.192.0/20 -add china_ip_route 223.240.0.0/13 -add china_ip_route 223.248.0.0/14 -add china_ip_route 223.252.128.0/17 -add china_ip_route 223.254.0.0/16 -add china_ip_route 223.255.0.0/17 -add china_ip_route 223.255.236.0/22 -add china_ip_route 223.255.252.0/23 diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns.list deleted file mode 100644 index 6e1fa82b..00000000 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns.list +++ /dev/null @@ -1 +0,0 @@ -#baidu.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list deleted file mode 100644 index 07166aaa..00000000 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list +++ /dev/null @@ -1,2 +0,0 @@ -#'www.baidu.com': '114.114.114.114' -#'+.internal.crop.com': '10.0.0.1' \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fake_filter.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fake_filter.list deleted file mode 100644 index ddb6b3bb..00000000 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fake_filter.list +++ /dev/null @@ -1,121 +0,0 @@ -#LAN -*.lan -*.localdomain -*.example -*.invalid -*.localhost -*.test -*.local -*.home.arpa -#放行NTP服务 -time.*.com -time.*.gov -time.*.edu.cn -time.*.apple.com -time1.*.com -time2.*.com -time3.*.com -time4.*.com -time5.*.com -time6.*.com -time7.*.com -ntp.*.com -ntp1.*.com -ntp2.*.com -ntp3.*.com -ntp4.*.com -ntp5.*.com -ntp6.*.com -ntp7.*.com -*.time.edu.cn -*.ntp.org.cn -+.pool.ntp.org -time1.cloud.tencent.com -#放行网易云音乐 -music.163.com -*.music.163.com -*.126.net -#百度音乐 -musicapi.taihe.com -music.taihe.com -#酷狗音乐 -songsearch.kugou.com -trackercdn.kugou.com -#酷我音乐 -*.kuwo.cn -#JOOX音乐 -api-jooxtt.sanook.com -api.joox.com -joox.com -#QQ音乐 -y.qq.com -*.y.qq.com -streamoc.music.tc.qq.com -mobileoc.music.tc.qq.com -isure.stream.qqmusic.qq.com -dl.stream.qqmusic.qq.com -aqqmusic.tc.qq.com -amobile.music.tc.qq.com -#虾米音乐 -*.xiami.com -#咪咕音乐 -*.music.migu.cn -music.migu.cn -#win10本地连接检测 -+.msftconnecttest.com -+.msftncsi.com -msftconnecttest.com -msftncsi.com -#QQ快捷登录 -localhost.ptlogin2.qq.com -localhost.sec.qq.com -#Game -#Nintendo Switch -+.srv.nintendo.net -#Sony PlayStation -+.stun.playstation.net -#Microsoft Xbox -xbox.*.microsoft.com -xnotify.xboxlive.com -#Wotgame -+.battlenet.com.cn -+.wotgame.cn -+.wggames.cn -+.wowsgame.cn -+.wargaming.net -#Golang -proxy.golang.org -#STUN -stun.*.* -stun.*.*.* -+.stun.*.* -+.stun.*.*.* -+.stun.*.*.*.* -#Linksys Router -heartbeat.belkin.com -*.linksys.com -*.linksyssmartwifi.com -#ASUS Router -*.router.asus.com -#Apple Software Update Service -mesu.apple.com -swscan.apple.com -swquery.apple.com -swdownload.apple.com -swcdn.apple.com -swdist.apple.com -#Google -lens.l.google.com -stun.l.google.com -#Netflix -+.nflxvideo.net -#FinalFantasy XIV Worldwide Server & CN Server -*.square-enix.com -*.finalfantasyxiv.com -*.ffxiv.com -*.ff14.sdo.com -ff.dorado.sdo.com -#Bilibili -*.mcdn.bilivideo.cn -#Disney Plus -+.media.dssott.com diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fallback_filter.yaml b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fallback_filter.yaml deleted file mode 100644 index 17f93cfe..00000000 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fallback_filter.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# If IP addresses resolved with servers in `nameservers` are in the specified -# subnets below, they are considered invalid and results from `fallback` -# servers are used instead. -# -# IP address resolved with servers in `nameserver` is used when -# `fallback-filter.geoip` is true and when GEOIP of the IP address is `CN`. -# -# If `fallback-filter.geoip` is false, results from `nameserver` nameservers -# are always used if not match `fallback-filter.ipcidr`. -# -# This is a countermeasure against DNS pollution attacks. - -fallback-filter: - geoip: true - geoip-code: CN - ipcidr: - - 0.0.0.0/8 - - 10.0.0.0/8 - - 100.64.0.0/10 - - 127.0.0.0/8 - - 169.254.0.0/16 - - 172.16.0.0/12 - - 192.0.0.0/24 - - 192.0.2.0/24 - - 192.88.99.0/24 - - 192.168.0.0/16 - - 198.18.0.0/15 - - 198.51.100.0/24 - - 203.0.113.0/24 - - 224.0.0.0/4 - - 240.0.0.0/4 - - 255.255.255.255/32 - domain: - - "+.google.com" - - "+.facebook.com" - - "+.youtube.com" - - "+.githubusercontent.com" - - "+.googlevideo.com" \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_hosts.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_hosts.list deleted file mode 100644 index 1180bb5f..00000000 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_hosts.list +++ /dev/null @@ -1,6 +0,0 @@ -# experimental hosts, support wildcard (e.g. *.clash.dev Even *.foo.*.example.com) -# static domain has a higher priority than wildcard domain (foo.example.com > *.example.com) -# NOTE: hosts don't work with `fake-ip` - -# '*.clash.dev': 127.0.0.1 -# 'alpha.clash.dev': '::1' diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_netflix_domains.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_netflix_domains.list deleted file mode 100644 index a2cd06b3..00000000 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_netflix_domains.list +++ /dev/null @@ -1,11 +0,0 @@ -ipv4-c041-hkg001-ix.1.oca.nflxvideo.net -ipv4-c016-jnb001-ix.1.oca.nflxvideo.net -ipv4-c007-sin001-ix.1.oca.nflxvideo.net -ipv4-c010-jnb001-ix.1.oca.nflxvideo.net -ipv4-c047-sin001-ix.1.oca.nflxvideo.net -ipv6-c041-hkg001-ix.1.oca.nflxvideo.net -ipv4-c056-sin001-ix.1.oca.nflxvideo.net -ipv4-c030-sin001-ix.1.oca.nflxvideo.net -ipv4-c025-jnb001-ix.1.oca.nflxvideo.net -ipv4-c027-jnb001-ix.1.oca.nflxvideo.net -ipv4-c046-hkg001-ix.1.oca.nflxvideo.net diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list deleted file mode 100644 index 28c1236c..00000000 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list +++ /dev/null @@ -1,56 +0,0 @@ -script: -## shortcuts: -## quic: network == 'udp' and dst_port == 443 and (geoip(resolve_ip(host)) != 'CN' or geoip(dst_ip) != 'CN') -## time-limit: in_cidr(src_ip,'192.168.1.2/32') and time.now().hour < 20 or time.now().hour > 21 -## time-limit: src_ip == '192.168.1.2' and time.now().hour < 20 or time.now().hour > 21 - -rules: -##- SCRIPT,quic,REJECT #shortcuts rule -##- SCRIPT,time-limit,REJECT #shortcuts rule - -##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组) -##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组) -##- DOMAIN,google.com,Proxy #匹配域名(交由Proxy代理服务器组) -##- DOMAIN-SUFFIX,ad.com,REJECT #匹配域名后缀(拒绝) -##- IP-CIDR,127.0.0.0/8,DIRECT #匹配数据目标IP(直连) -##- SRC-IP-CIDR,192.168.1.201/32,DIRECT #匹配数据发起IP(直连) -##- DST-PORT,80,DIRECT #匹配数据目标端口(直连) -##- SRC-PORT,7777,DIRECT #匹配数据源端口(直连) - -##排序在上的规则优先生效,如添加(去除规则前的#号): -##IP段:192.168.1.2-192.168.1.200 直连 -##- SRC-IP-CIDR,192.168.1.2/31,DIRECT -##- SRC-IP-CIDR,192.168.1.4/30,DIRECT -##- SRC-IP-CIDR,192.168.1.8/29,DIRECT -##- SRC-IP-CIDR,192.168.1.16/28,DIRECT -##- SRC-IP-CIDR,192.168.1.32/27,DIRECT -##- SRC-IP-CIDR,192.168.1.64/26,DIRECT -##- SRC-IP-CIDR,192.168.1.128/26,DIRECT -##- SRC-IP-CIDR,192.168.1.192/29,DIRECT -##- SRC-IP-CIDR,192.168.1.200/32,DIRECT - -##IP段:192.168.1.202-192.168.1.255 直连 -##- SRC-IP-CIDR,192.168.1.202/31,DIRECT -##- SRC-IP-CIDR,192.168.1.204/30,DIRECT -##- SRC-IP-CIDR,192.168.1.208/28,DIRECT -##- SRC-IP-CIDR,192.168.1.224/27,DIRECT - -##此时IP为192.168.1.1和192.168.1.201的客户端流量走代理(策略),其余客户端不走代理 -##因为Fake-IP模式下,IP地址为192.168.1.1的路由器自身流量可走代理(策略),所以需要排除 - -##仅设置路由器自身直连: -##- SRC-IP-CIDR,192.168.1.1/32,DIRECT -##- SRC-IP-CIDR,198.18.0.1/32,DIRECT - -##DDNS -##- DOMAIN-SUFFIX,checkip.dyndns.org,DIRECT -##- DOMAIN-SUFFIX,checkipv6.dyndns.org,DIRECT -##- DOMAIN-SUFFIX,checkip.synology.com,DIRECT -##- DOMAIN-SUFFIX,ifconfig.co,DIRECT -##- DOMAIN-SUFFIX,api.myip.com,DIRECT -##- DOMAIN-SUFFIX,ip-api.com,DIRECT -##- DOMAIN-SUFFIX,ipapi.co,DIRECT -##- DOMAIN-SUFFIX,ip6.seeip.org,DIRECT -##- DOMAIN-SUFFIX,members.3322.org,DIRECT - -##在线IP段转CIDR地址:http://ip2cidr.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list deleted file mode 100644 index 32fe9c30..00000000 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list +++ /dev/null @@ -1,15 +0,0 @@ -script: -## shortcuts: -## common_port: dst_port not in [21, 22, 23, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 998, 2052, 2053, 2082, 2083, 2086, 2095, 2096, 5222, 5228, 5229, 5230, 8080, 8443, 8880, 8888, 8889] - -rules: -##- SCRIPT,common_port,DIRECT #shortcuts rule - -##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组) -##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组) -##- DOMAIN,google.com,Proxy #匹配域名(交由Proxy代理服务器组) -##- DOMAIN-SUFFIX,ad.com,REJECT #匹配域名后缀(拒绝) -##- IP-CIDR,127.0.0.0/8,DIRECT #匹配数据目标IP(直连) -##- SRC-IP-CIDR,192.168.1.201/32,DIRECT #匹配数据发起IP(直连) -##- DST-PORT,80,DIRECT #匹配数据目标端口(直连) -##- SRC-PORT,7777,DIRECT #匹配数据源端口(直连) diff --git a/luci-app-openclash/root/etc/openclash/game_rules/CS-GO.rules b/luci-app-openclash/root/etc/openclash/game_rules/CS-GO.rules deleted file mode 100644 index a16a9942..00000000 --- a/luci-app-openclash/root/etc/openclash/game_rules/CS-GO.rules +++ /dev/null @@ -1,618 +0,0 @@ -payload: - - 1.165.84.0/24 - - 1.165.85.0/24 - - 1.165.90.0/24 - - 5.8.200.0/24 - - 5.9.123.0/24 - - 13.73.0.0/16 - - 13.73.1.0/24 - - 13.75.114.0/24 - - 13.126.76.0/24 - - 14.18.251.72/32 - - 18.214.26.0/24 - - 24.105.28.0/24 - - 27.64.93.0/24 - - 34.235.169.0/24 - - 35.185.157.0/24 - - 35.198.200.0/24 - - 36.232.23.0/24 - - 36.232.28.0/24 - - 36.232.29.0/24 - - 37.21.10.0/24 - - 37.230.228.0/24 - - 42.113.94.0/24 - - 42.114.229.0/24 - - 43.225.199.0/24 - - 43.239.136.0/24 - - 43.241.50.0/24 - - 43.249.36.0/24 - - 45.113.137.0/24 - - 45.113.191.0/24 - - 45.119.240.0/24 - - 45.121.184.0/24 - - 45.121.185.0/24 - - 45.121.186.0/24 - - 45.121.187.0/24 - - 47.52.16.0/24 - - 47.52.17.0/24 - - 47.52.18.0/24 - - 47.52.19.0/24 - - 47.52.20.0/24 - - 47.52.21.0/24 - - 47.52.22.0/24 - - 47.52.23.0/24 - - 47.52.24.0/24 - - 47.52.25.0/24 - - 47.52.26.0/24 - - 47.52.27.0/24 - - 47.52.28.0/24 - - 47.52.29.0/24 - - 47.52.30.0/24 - - 47.52.31.0/24 - - 47.52.40.0/24 - - 47.52.41.0/24 - - 47.52.42.0/24 - - 47.52.43.0/24 - - 47.52.44.0/24 - - 47.52.45.0/24 - - 47.52.46.0/24 - - 47.52.47.0/24 - - 47.52.56.0/24 - - 47.52.57.0/24 - - 47.52.58.0/24 - - 47.52.59.0/24 - - 47.52.60.0/24 - - 47.52.61.0/24 - - 47.52.62.0/24 - - 47.52.63.0/24 - - 47.52.64.0/24 - - 47.52.65.0/24 - - 47.52.66.0/24 - - 47.52.67.0/24 - - 47.52.68.0/24 - - 47.52.69.0/24 - - 47.52.70.0/24 - - 47.52.71.0/24 - - 47.52.72.0/24 - - 47.52.73.0/24 - - 47.52.74.0/24 - - 47.52.75.0/24 - - 47.52.76.0/24 - - 47.52.77.0/24 - - 47.52.78.0/24 - - 47.52.79.0/24 - - 47.52.88.0/24 - - 47.52.89.0/24 - - 47.52.90.0/24 - - 47.52.91.0/24 - - 47.52.92.0/24 - - 47.52.93.0/24 - - 47.52.94.0/24 - - 47.52.95.0/24 - - 47.52.96.0/24 - - 47.52.97.0/24 - - 47.52.98.0/24 - - 47.52.99.0/24 - - 47.52.100.0/24 - - 47.52.101.0/24 - - 47.52.102.0/24 - - 47.52.103.0/24 - - 47.52.104.0/24 - - 47.52.105.0/24 - - 47.52.106.0/24 - - 47.52.107.0/24 - - 47.52.108.0/24 - - 47.52.109.0/24 - - 47.52.110.0/24 - - 47.52.111.0/24 - - 47.52.112.0/24 - - 47.52.113.0/24 - - 47.52.114.0/24 - - 47.52.115.0/24 - - 47.52.116.0/24 - - 47.52.117.0/24 - - 47.52.118.0/24 - - 47.52.119.0/24 - - 47.52.128.0/24 - - 47.52.129.0/24 - - 47.52.130.0/24 - - 47.52.131.0/24 - - 47.52.132.0/24 - - 47.52.133.0/24 - - 47.52.134.0/24 - - 47.52.135.0/24 - - 47.52.136.0/24 - - 47.52.137.0/24 - - 47.52.138.0/24 - - 47.52.139.0/24 - - 47.52.140.0/24 - - 47.52.141.0/24 - - 47.52.142.0/24 - - 47.52.143.0/24 - - 47.52.144.0/24 - - 47.52.145.0/24 - - 47.52.146.0/24 - - 47.52.147.0/24 - - 47.52.148.0/24 - - 47.52.149.0/24 - - 47.52.150.0/24 - - 47.52.151.0/24 - - 47.52.152.0/24 - - 47.52.153.0/24 - - 47.52.154.0/24 - - 47.52.155.0/24 - - 47.52.156.0/24 - - 47.52.157.0/24 - - 47.52.158.0/24 - - 47.52.159.0/24 - - 47.52.160.0/24 - - 47.52.161.0/24 - - 47.52.162.0/24 - - 47.52.163.0/24 - - 47.52.164.0/24 - - 47.52.165.0/24 - - 47.52.166.0/24 - - 47.52.167.0/24 - - 47.52.168.0/24 - - 47.52.169.0/24 - - 47.52.170.0/24 - - 47.52.171.0/24 - - 47.52.172.0/24 - - 47.52.173.0/24 - - 47.52.174.0/24 - - 47.52.175.0/24 - - 47.52.188.0/24 - - 47.52.190.0/24 - - 47.52.191.0/24 - - 47.52.192.0/24 - - 47.52.193.0/24 - - 47.52.194.0/24 - - 47.52.195.0/24 - - 47.52.196.0/24 - - 47.52.197.0/24 - - 47.52.198.0/24 - - 47.52.199.0/24 - - 47.52.200.0/24 - - 47.52.201.0/24 - - 47.52.202.0/24 - - 47.52.203.0/24 - - 47.52.204.0/24 - - 47.52.205.0/24 - - 47.52.206.0/24 - - 47.52.207.0/24 - - 47.52.208.0/24 - - 47.52.209.0/24 - - 47.52.224.0/24 - - 47.52.225.0/24 - - 47.52.226.0/24 - - 47.52.228.0/24 - - 47.52.230.0/24 - - 47.52.231.0/24 - - 47.52.232.0/24 - - 47.52.234.0/24 - - 47.52.235.0/24 - - 47.52.236.0/24 - - 47.52.241.0/24 - - 47.52.242.0/24 - - 47.52.244.0/24 - - 47.52.246.0/24 - - 47.52.247.0/24 - - 47.52.248.0/24 - - 47.52.249.0/24 - - 47.52.250.0/24 - - 47.52.251.0/24 - - 47.52.252.0/24 - - 47.52.253.0/24 - - 47.52.254.0/24 - - 47.52.255.0/24 - - 47.74.1.0/24 - - 47.75.3.0/24 - - 47.75.5.0/24 - - 47.75.94.0/24 - - 47.75.98.0/24 - - 47.75.143.0/24 - - 47.75.194.0/24 - - 47.75.207.0/24 - - 47.75.219.0/24 - - 47.89.8.0/24 - - 47.89.9.0/24 - - 47.89.10.0/24 - - 47.89.11.0/24 - - 47.89.12.0/24 - - 47.89.13.0/24 - - 47.89.14.0/24 - - 47.89.15.0/24 - - 47.89.16.0/24 - - 47.89.17.0/24 - - 47.89.18.0/24 - - 47.89.19.0/24 - - 47.89.20.0/24 - - 47.89.21.0/24 - - 47.89.22.0/24 - - 47.89.23.0/24 - - 47.90.8.0/24 - - 47.90.90.0/24 - - 47.90.96.0/24 - - 47.90.97.0/24 - - 47.90.98.0/24 - - 47.90.99.0/24 - - 47.90.100.0/24 - - 47.90.101.0/24 - - 47.90.102.0/24 - - 47.90.103.0/24 - - 47.90.120.0/24 - - 47.90.121.0/24 - - 47.90.122.0/24 - - 47.90.123.0/24 - - 47.90.124.0/24 - - 47.90.125.0/24 - - 47.90.126.0/24 - - 47.90.127.0/24 - - 47.90.214.0/24 - - 47.91.152.0/24 - - 47.91.153.0/24 - - 47.91.154.0/24 - - 47.91.155.0/24 - - 47.91.156.0/24 - - 47.91.157.0/24 - - 47.91.158.0/24 - - 47.91.159.0/24 - - 47.91.207.0/24 - - 47.91.208.0/24 - - 47.91.209.0/24 - - 47.91.210.0/24 - - 47.91.211.0/24 - - 47.91.212.0/24 - - 47.91.213.0/24 - - 47.91.214.0/24 - - 47.91.215.0/24 - - 47.91.216.0/24 - - 47.91.217.0/24 - - 47.91.218.0/24 - - 47.91.219.0/24 - - 47.91.220.0/24 - - 47.91.221.0/24 - - 47.91.224.0/24 - - 47.91.225.0/24 - - 47.91.226.0/24 - - 47.91.227.0/24 - - 47.91.228.0/24 - - 47.91.229.0/24 - - 47.91.230.0/24 - - 47.91.231.0/24 - - 47.91.232.0/24 - - 47.91.233.0/24 - - 47.91.234.0/24 - - 47.91.235.0/24 - - 47.91.236.0/24 - - 47.91.237.0/24 - - 47.91.238.0/24 - - 47.91.239.0/24 - - 47.91.240.0/24 - - 47.91.241.0/24 - - 47.91.242.0/24 - - 47.91.243.0/24 - - 47.91.244.0/24 - - 47.91.245.0/24 - - 47.91.246.0/24 - - 47.91.247.0/24 - - 47.91.248.0/24 - - 47.91.249.0/24 - - 47.91.250.0/24 - - 47.91.251.0/24 - - 47.91.252.0/24 - - 47.91.253.0/24 - - 47.91.254.0/24 - - 47.91.255.0/24 - - 47.96.0.0/16 - - 47.96.2.0/24 - - 47.96.3.0/24 - - 47.96.5.0/24 - - 47.96.6.0/24 - - 47.96.7.0/24 - - 47.96.8.0/24 - - 47.96.9.0/24 - - 47.96.10.0/24 - - 47.96.12.0/24 - - 47.96.13.0/24 - - 47.96.14.0/24 - - 47.99.33.0/24 - - 47.99.38.0/24 - - 47.99.44.0/24 - - 47.99.62.0/24 - - 47.99.73.0/24 - - 47.99.75.0/24 - - 47.99.76.0/24 - - 47.99.81.0/24 - - 47.99.84.0/24 - - 47.99.89.0/24 - - 47.99.90.0/24 - - 47.99.93.0/24 - - 47.99.95.0/24 - - 47.99.98.0/24 - - 47.99.99.0/24 - - 47.99.101.0/24 - - 47.99.103.0/24 - - 47.99.104.0/24 - - 47.99.107.0/24 - - 47.99.111.0/24 - - 47.99.120.0/24 - - 47.99.128.0/24 - - 47.99.159.0/24 - - 47.99.161.0/24 - - 47.99.164.0/24 - - 47.99.166.0/24 - - 47.99.169.0/24 - - 47.110.42.0/24 - - 47.244.1.0/24 - - 47.244.2.0/24 - - 47.244.3.0/24 - - 47.244.5.0/24 - - 47.244.7.0/24 - - 47.244.10.0/24 - - 47.244.11.0/24 - - 47.244.12.0/24 - - 47.244.13.0/24 - - 47.244.14.0/24 - - 47.244.15.0/24 - - 47.244.16.0/24 - - 47.244.17.0/24 - - 47.244.18.0/24 - - 47.244.19.0/24 - - 47.244.21.0/24 - - 47.244.22.0/24 - - 47.244.24.0/24 - - 47.244.25.0/24 - - 47.244.26.0/24 - - 47.244.33.0/24 - - 47.244.35.0/24 - - 47.244.36.0/24 - - 47.244.37.0/24 - - 47.244.43.0/24 - - 47.244.44.0/24 - - 47.244.48.0/24 - - 47.244.51.0/24 - - 47.244.56.0/24 - - 52.53.89.0/24 - - 52.63.114.0/24 - - 52.64.199.0/24 - - 52.90.185.0/24 - - 52.175.16.0/24 - - 52.175.31.0/24 - - 52.207.236.0/24 - - 52.229.154.0/24 - - 52.229.160.0/24 - - 52.229.161.0/24 - - 54.66.223.0/24 - - 54.158.198.0/24 - - 54.164.19.0/24 - - 54.169.27.0/24 - - 54.209.147.0/24 - - 58.153.0.0/16 - - 58.153.19.0/24 - - 58.153.171.0/24 - - 58.153.208.0/24 - - 58.153.209.0/24 - - 58.153.221.0/24 - - 58.176.80.0/24 - - 58.177.181.0/24 - - 58.215.54.0/24 - - 58.221.252.0/24 - - 59.16.249.0/24 - - 59.127.115.0/24 - - 59.149.239.0/24 - - 60.248.89.0/24 - - 61.80.89.0/24 - - 61.84.148.0/24 - - 61.155.210.0/24 - - 61.216.2.0/24 - - 61.216.34.0/24 - - 61.216.146.0/24 - - 61.238.35.0/24 - - 61.239.213.0/24 - - 61.239.223.0/24 - - 74.91.112.0/24 - - 74.201.99.0/24 - - 87.98.228.0/24 - - 88.82.185.0/24 - - 90.188.238.0/24 - - 94.245.155.0/24 - - 95.154.88.0/24 - - 95.154.113.0/24 - - 95.172.92.0/24 - - 95.183.13.0/24 - - 103.9.89.0/24 - - 103.10.124.0/24 - - 103.10.125.0/24 - - 103.16.27.0/24 - - 103.28.54.0/24 - - 103.28.55.0/24 - - 103.36.208.0/24 - - 103.44.160.0/24 - - 103.57.72.0/24 - - 103.58.149.0/24 - - 103.60.126.0/24 - - 103.62.48.0/24 - - 103.89.90.0/24 - - 103.207.36.0/24 - - 103.222.20.0/24 - - 103.231.163.0/24 - - 103.232.85.0/24 - - 103.241.165.0/24 - - 103.244.2.0/24 - - 103.254.153.0/24 - - 104.199.166.0/24 - - 104.236.115.0/24 - - 107.21.14.0/24 - - 110.42.10.0/24 - - 110.173.58.0/24 - - 111.91.236.0/24 - - 111.231.11.0/24 - - 111.253.47.0/24 - - 111.253.49.0/24 - - 111.253.50.0/24 - - 111.253.52.0/24 - - 111.253.55.0/24 - - 112.118.44.0/24 - - 112.118.193.0/24 - - 113.160.204.0/24 - - 113.190.242.0/24 - - 114.46.16.0/24 - - 114.46.20.0/24 - - 114.46.21.0/24 - - 114.46.22.0/24 - - 114.46.24.0/24 - - 114.46.30.0/24 - - 114.167.236.0/24 - - 115.230.127.0/24 - - 115.231.221.0/24 - - 115.231.223.0/24 - - 116.31.123.0/24 - - 116.49.214.0/24 - - 116.122.109.0/24 - - 116.251.223.0/24 - - 118.107.76.0/24 - - 119.28.222.0/24 - - 119.197.57.0/24 - - 119.236.132.0/24 - - 119.237.11.0/24 - - 120.72.85.0/24 - - 123.31.20.0/24 - - 123.194.52.0/24 - - 124.158.10.0/24 - - 124.228.91.0/24 - - 125.212.211.0/24 - - 125.212.226.0/24 - - 125.226.128.0/24 - - 125.253.124.0/24 - - 128.199.81.0/24 - - 132.232.7.0/24 - - 132.232.9.0/24 - - 132.232.12.0/24 - - 132.232.29.0/24 - - 132.232.51.0/24 - - 132.232.55.0/24 - - 132.232.57.0/24 - - 132.232.61.0/24 - - 132.232.62.0/24 - - 132.232.75.0/24 - - 132.232.91.0/24 - - 132.232.94.0/24 - - 132.232.99.0/24 - - 132.232.104.0/24 - - 133.130.123.0/24 - - 138.19.63.0/24 - - 139.99.9.0/24 - - 139.99.104.0/24 - - 139.99.119.0/24 - - 139.162.55.0/24 - - 146.66.152.0/24 - - 146.66.153.0/24 - - 146.66.154.0/24 - - 146.66.155.0/24 - - 146.66.156.0/24 - - 146.66.157.0/24 - - 146.66.158.0/24 - - 146.66.159.0/24 - - 150.109.40.0/24 - - 151.80.60.0/24 - - 151.80.145.0/24 - - 152.111.192.0/24 - - 153.160.25.0/24 - - 153.254.86.0/24 - - 155.133.227.0/24 - - 155.133.230.0/24 - - 155.133.232.0/24 - - 155.133.233.0/24 - - 155.133.235.0/24 - - 155.133.238.0/24 - - 155.133.239.0/24 - - 155.133.242.0/24 - - 155.133.244.0/24 - - 155.133.245.0/24 - - 155.133.246.0/24 - - 155.133.247.0/24 - - 155.133.248.0/24 - - 155.133.249.0/24 - - 155.133.252.0/24 - - 155.133.253.0/24 - - 155.133.254.0/24 - - 159.28.159.0/24 - - 161.202.44.0/24 - - 162.254.192.0/24 - - 162.254.193.0/24 - - 162.254.194.0/24 - - 162.254.195.0/24 - - 162.254.196.0/24 - - 162.254.197.0/24 - - 162.254.198.0/24 - - 162.254.199.0/24 - - 163.53.149.0/24 - - 169.254.0.0/16 - - 169.254.125.95/32 - - 169.254.10.218/32 - - 175.210.83.0/24 - - 176.215.255.0/24 - - 180.149.95.0/24 - - 180.177.178.0/24 - - 182.171.230.0/24 - - 182.176.65.0/24 - - 183.60.111.0/24 - - 183.179.66.0/24 - - 185.25.60.0/24 - - 185.25.180.0/24 - - 185.25.181.0/24 - - 185.25.182.0/24 - - 185.25.183.0/24 - - 185.37.216.0/24 - - 185.62.205.0/24 - - 185.113.141.0/24 - - 190.217.33.0/24 - - 192.69.96.0/24 - - 192.69.97.0/24 - - 193.33.176.0/24 - - 195.14.118.0/24 - - 195.201.246.0/24 - - 196.38.180.0/24 - - 197.80.200.0/24 - - 198.27.83.0/24 - - 202.21.115.0/24 - - 203.175.163.0/24 - - 203.175.164.0/24 - - 203.175.165.0/24 - - 203.175.166.0/24 - - 203.218.101.0/24 - - 205.185.194.0/24 - - 205.196.6.0/24 - - 208.64.200.0/24 - - 208.64.203.0/24 - - 208.78.164.0/24 - - 208.78.165.0/24 - - 208.78.166.0/24 - - 209.58.164.0/24 - - 209.58.168.0/24 - - 209.58.178.0/24 - - 209.58.188.0/24 - - 210.211.124.0/24 - - 211.21.37.0/24 - - 211.48.69.0/24 - - 211.75.181.0/24 - - 212.64.32.0/24 - - 216.52.148.0/24 - - 217.150.77.0/24 - - 218.250.12.0/24 - - 218.250.15.0/24 - - 218.250.113.0/24 - - 218.255.3.0/24 - - 220.80.129.0/24 - - 220.134.154.0/24 - - 220.135.180.0/24 - - 220.169.242.0/24 - - 220.170.89.0/24 - - 221.6.100.0/24 - - 222.102.95.0/24 - - 222.112.242.0/24 - - 222.186.50.0/24 - - 222.187.224.0/24 - - 224.0.0.0/4 - - 240.0.0.0/4 diff --git a/luci-app-openclash/root/etc/openclash/game_rules/Monster-Hunter-World.rules b/luci-app-openclash/root/etc/openclash/game_rules/Monster-Hunter-World.rules deleted file mode 100644 index fecb0290..00000000 --- a/luci-app-openclash/root/etc/openclash/game_rules/Monster-Hunter-World.rules +++ /dev/null @@ -1,294 +0,0 @@ -payload: - - 2.16.0.0/16 - - 2.17.0.0/16 - - 2.18.0.0/16 - - 2.19.0.0/16 - - 2.20.0.0/16 - - 2.21.0.0/16 - - 2.22.0.0/16 - - 2.23.0.0/16 - - 8.7.0.0/16 - - 14.21.0.0/16 - - 23.0.0.0/4 - - 23.1.0.0/16 - - 23.2.0.0/16 - - 23.3.0.0/16 - - 23.4.0.0/16 - - 23.5.0.0/16 - - 23.7.0.0/16 - - 23.8.0.0/16 - - 23.9.0.0/16 - - 23.11.0.0/16 - - 23.12.0.0/16 - - 23.13.0.0/16 - - 23.14.0.0/16 - - 23.15.0.0/16 - - 23.32.0.0/16 - - 23.33.0.0/16 - - 23.34.0.0/16 - - 23.35.0.0/16 - - 23.36.0.0/16 - - 23.37.0.0/16 - - 23.38.0.0/16 - - 23.39.0.0/16 - - 23.40.0.0/16 - - 23.41.0.0/16 - - 23.42.0.0/16 - - 23.44.0.0/16 - - 23.45.0.0/16 - - 23.46.0.0/16 - - 23.48.0.0/16 - - 23.49.0.0/16 - - 23.50.0.0/16 - - 23.51.0.0/16 - - 23.52.0.0/16 - - 23.53.0.0/16 - - 23.54.0.0/16 - - 23.55.0.0/16 - - 23.56.0.0/16 - - 23.57.0.0/16 - - 23.58.0.0/16 - - 23.59.0.0/16 - - 23.60.0.0/16 - - 23.61.0.0/16 - - 23.62.0.0/16 - - 23.63.0.0/16 - - 23.64.0.0/16 - - 23.65.0.0/16 - - 23.67.0.0/16 - - 23.72.0.0/16 - - 23.73.0.0/16 - - 23.74.0.0/16 - - 23.75.0.0/16 - - 23.76.0.0/16 - - 23.77.0.0/16 - - 23.78.0.0/16 - - 23.79.0.0/16 - - 23.192.0.0/16 - - 23.193.0.0/16 - - 23.194.0.0/16 - - 23.196.0.0/16 - - 23.197.0.0/16 - - 23.198.0.0/16 - - 23.199.0.0/16 - - 23.200.0.0/16 - - 23.201.0.0/16 - - 23.202.0.0/16 - - 23.203.0.0/16 - - 23.204.0.0/16 - - 23.205.0.0/16 - - 23.206.0.0/16 - - 23.207.0.0/16 - - 23.208.0.0/16 - - 23.209.0.0/16 - - 23.210.0.0/16 - - 23.211.0.0/16 - - 23.212.0.0/16 - - 23.213.0.0/16 - - 23.214.0.0/16 - - 23.215.0.0/16 - - 23.216.0.0/16 - - 23.217.0.0/16 - - 23.218.0.0/16 - - 23.219.0.0/16 - - 23.220.0.0/16 - - 23.221.0.0/16 - - 23.222.0.0/16 - - 23.223.0.0/16 - - 31.0.0.0/4 - - 31.13.0.0/16 - - 37.10.0.0/16 - - 45.121.0.0/16 - - 45.121.184.0/24 - - 45.121.186.0/24 - - 46.0.0.0/4 - - 59.0.0.0/4 - - 60.254.0.0/16 - - 61.213.0.0/16 - - 63.146.0.0/16 - - 63.219.0.0/16 - - 63.243.0.0/16 - - 64.0.0.0/4 - - 64.124.0.0/16 - - 65.152.0.0/16 - - 65.158.0.0/16 - - 66.0.0.0/4 - - 67.0.0.0/4 - - 67.131.0.0/16 - - 69.0.0.0/4 - - 69.16.0.0/16 - - 69.63.0.0/16 - - 69.171.0.0/16 - - 69.192.0.0/16 - - 72.165.0.0/16 - - 72.246.0.0/16 - - 72.247.0.0/16 - - 74.0.0.0/4 - - 74.86.0.0/16 - - 74.201.0.0/16 - - 75.0.0.0/4 - - 75.126.0.0/16 - - 78.16.0.0/16 - - 84.53.0.0/16 - - 85.190.0.0/16 - - 88.0.0.0/4 - - 88.221.0.0/16 - - 92.122.0.0/16 - - 92.123.0.0/16 - - 95.100.0.0/16 - - 95.101.0.0/16 - - 96.0.0.0/4 - - 96.6.0.0/16 - - 96.16.0.0/16 - - 96.17.0.0/16 - - 103.10.124.0/24 - - 103.28.0.0/16 - - 103.28.54.0/24 - - 103.74.0.0/16 - - 104.0.0.0/4 - - 104.65.0.0/16 - - 104.66.0.0/16 - - 104.67.0.0/16 - - 104.68.0.0/16 - - 104.70.0.0/16 - - 104.71.0.0/16 - - 104.72.0.0/16 - - 104.73.0.0/16 - - 104.75.0.0/16 - - 104.76.0.0/16 - - 104.77.0.0/16 - - 104.79.0.0/16 - - 104.80.0.0/16 - - 104.81.0.0/16 - - 104.82.0.0/16 - - 104.83.0.0/16 - - 104.84.0.0/16 - - 104.85.0.0/16 - - 104.86.0.0/16 - - 104.87.0.0/16 - - 104.89.0.0/16 - - 104.90.0.0/16 - - 104.91.0.0/16 - - 104.92.0.0/16 - - 104.94.0.0/16 - - 104.95.0.0/16 - - 104.97.0.0/16 - - 104.98.0.0/16 - - 104.100.0.0/16 - - 104.101.0.0/16 - - 104.102.0.0/16 - - 104.103.0.0/16 - - 104.104.0.0/16 - - 104.105.0.0/16 - - 104.106.0.0/16 - - 104.107.0.0/16 - - 104.108.0.0/16 - - 104.109.0.0/16 - - 104.110.0.0/16 - - 104.111.0.0/16 - - 104.112.0.0/16 - - 104.113.0.0/16 - - 104.115.0.0/16 - - 104.116.0.0/16 - - 104.117.0.0/16 - - 104.118.0.0/16 - - 104.119.0.0/16 - - 104.120.0.0/16 - - 104.121.0.0/16 - - 104.122.0.0/16 - - 104.123.0.0/16 - - 104.124.0.0/16 - - 104.126.0.0/16 - - 104.127.0.0/16 - - 106.15.0.0/16 - - 110.45.0.0/16 - - 115.223.0.0/16 - - 117.103.0.0/16 - - 118.155.0.0/16 - - 118.214.0.0/16 - - 118.215.0.0/16 - - 120.24.184.25/32 - - 121.156.0.0/16 - - 122.252.0.0/16 - - 125.56.0.0/16 - - 125.252.0.0/16 - - 128.241.0.0/16 - - 139.175.0.0/16 - - 141.0.0.0/4 - - 146.66.0.0/16 - - 152.199.0.0/16 - - 153.254.0.0/16 - - 153.254.86.0/24 - - 155.133.0.0/16 - - 155.133.232.0/24 - - 155.133.233.0/24 - - 155.133.234.0/24 - - 155.133.235.0/24 - - 155.133.239.0/24 - - 155.133.244.0/24 - - 155.133.253.0/24 - - 155.133.254.0/24 - - 162.254.0.0/16 - - 162.254.192.0/24 - - 162.254.193.0/24 - - 162.254.194.0/24 - - 162.254.199.0/24 - - 165.254.0.0/16 - - 172.0.0.0/4 - - 172.224.0.0/16 - - 172.226.0.0/16 - - 172.227.0.0/16 - - 172.228.0.0/16 - - 172.229.0.0/16 - - 172.230.0.0/16 - - 172.231.0.0/16 - - 173.0.0.0/4 - - 173.197.0.0/16 - - 173.205.0.0/16 - - 173.222.0.0/16 - - 173.223.0.0/16 - - 173.252.0.0/16 - - 174.36.0.0/16 - - 175.99.0.0/16 - - 175.139.0.0/16 - - 180.101.192.0/24 - - 182.162.0.0/16 - - 184.0.0.0/4 - - 184.24.0.0/16 - - 184.25.0.0/16 - - 184.26.0.0/16 - - 184.29.0.0/16 - - 184.30.0.0/16 - - 184.31.0.0/16 - - 184.50.0.0/16 - - 184.51.0.0/16 - - 184.84.0.0/16 - - 184.85.0.0/16 - - 184.87.0.0/16 - - 185.25.0.0/16 - - 185.27.0.0/16 - - 185.88.0.0/16 - - 192.69.96.0/24 - - 192.81.0.0/16 - - 198.87.0.0/16 - - 198.172.0.0/16 - - 199.0.0.0/4 - - 199.239.0.0/16 - - 203.69.0.0/16 - - 203.80.149.0/24 - - 205.186.0.0/16 - - 205.196.6.0/24 - - 205.197.0.0/16 - - 208.0.0.0/4 - - 208.64.0.0/16 - - 208.64.200.0/24 - - 208.78.0.0/16 - - 208.78.164.0/24 - - 208.78.166.0/24 - - 208.78.167.0/24 - - 209.170.0.0/16 - - 210.61.0.0/16 - - 210.201.0.0/16 - - 216.3.0.0/16 - - 216.156.0.0/16 - - 223.119.0.0/16 diff --git a/luci-app-openclash/root/etc/openclash/game_rules/Steam.rules b/luci-app-openclash/root/etc/openclash/game_rules/Steam.rules deleted file mode 100644 index 40a0e11b..00000000 --- a/luci-app-openclash/root/etc/openclash/game_rules/Steam.rules +++ /dev/null @@ -1,133 +0,0 @@ -payload: - - 96.7.54.0/24 - - 96.17.68.0/24 - - 95.101.58.0/24 - - 92.123.234.0/24 - - 72.249.197.0/24 - - 72.247.118.0/24 - - 75.126.208.0/20 - - 69.192.4.0/24 - - 61.213.189.0/24 - - 61.213.168.0/24 - - 23.9.186.0/24 - - 23.9.179.0/24 - - 23.9.117.0/24 - - 23.77.27.0/24 - - 23.77.18.0/24 - - 23.76.210.0/24 - - 23.75.104.0/24 - - 23.67.53.0/24 - - 23.67.189.0/24 - - 23.66.135.0/24 - - 23.62.226.0/24 - - 23.61.244.0/24 - - 23.61.195.0/24 - - 23.57.66.0/24 - - 23.56.108.0/24 - - 23.55.56.0/24 - - 23.55.47.0/24 - - 23.55.37.0/24 - - 23.52.74.0/24 - - 23.52.171.0/24 - - 23.50.232.0/24 - - 23.5.229.0/24 - - 23.48.201.0/24 - - 23.47.143.0/24 - - 23.46.16.0/24 - - 23.46.147.0/24 - - 23.45.51.0/24 - - 23.45.127.0/24 - - 23.44.51.0/24 - - 23.44.172.0/24 - - 23.44.17.0/24 - - 23.43.49.0/24 - - 23.42.74.0/24 - - 23.37.126.0/24 - - 23.36.111.0/24 - - 23.34.96.0/24 - - 23.33.178.0/24 - - 23.33.151.0/24 - - 23.32.255.0/24 - - 23.32.248.0/24 - - 23.32.241.0/24 - - 23.219.172.0/24 - - 23.218.94.0/24 - - 23.218.5.0/24 - - 23.218.24.0/24 - - 23.215.188.0/24 - - 23.211.136.0/24 - - 23.211.117.0/24 - - 23.211.108.0/24 - - 23.210.215.0/24 - - 23.204.57.0/24 - - 23.204.147.0/24 - - 23.200.74.0/24 - - 23.2.16.0/24 - - 23.199.34.0/24 - - 23.198.137.0/24 - - 23.198.136.0/24 - - 23.198.103.0/24 - - 23.192.168.0/24 - - 23.192.119.0/24 - - 23.15.4.0/24 - - 23.12.40.0/24 - - 23.1.237.0/24 - - 23.1.236.0/24 - - 23.1.234.0/24 - - 23.7.208.0/20 - - 223.119.50.0/24 - - 223.119.248.0/24 - - 220.90.198.0/24 - - 219.76.10.0/24 - - 203.74.140.0/24 - - 203.69.141.0/24 - - 202.4.185.0/24 - - 2.21.98.0/24 - - 2.20.27.0/24 - - 189.6.45.0/24 - - 184.87.133.0/24 - - 184.86.250.0/24 - - 184.51.198.0/24 - - 184.51.183.0/24 - - 184.50.26.0/24 - - 184.31.165.0/24 - - 184.28.223.0/24 - - 184.28.218.0/24 - - 184.27.20.0/24 - - 184.26.194.0/24 - - 184.24.58.0/24 - - 184.150.58.0/24 - - 184.150.154.0/24 - - 175.207.14.0/24 - - 172.217.0.0/16 - - 172.232.19.0/24 - - 139.175.236.0/24 - - 125.56.201.0/24 - - 125.252.224.0/24 - - 119.56.4.0/24 - - 119.207.66.0/24 - - 119.207.64.0/24 - - 104.88.23.0/24 - - 104.84.150.0/24 - - 104.84.160.0/19 - - 104.81.21.0/24 - - 104.76.86.0/24 - - 104.76.172.0/24 - - 104.75.169.0/24 - - 104.74.47.0/24 - - 104.74.30.0/24 - - 104.74.214.0/24 - - 104.74.209.0/24 - - 104.71.139.0/24 - - 104.64.155.0/24 - - 104.250.32.0/23 - - 104.254.123.0/24 - - 104.127.4.0/24 - - 104.124.248.0/24 - - 104.124.233.0/24 - - 104.124.232.0/24 - - 104.122.6.0/24 - - 104.120.11.0/24 - - 104.116.243.0/24 - - 104.110.72.0/24 - - 153.254.86.0/24 diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/ABC b/luci-app-openclash/root/etc/openclash/rule_provider/ABC deleted file mode 100644 index c8b2885a..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/ABC +++ /dev/null @@ -1,4 +0,0 @@ -payload: - # > ABC - - DOMAIN-SUFFIX,edgedatg.com - - DOMAIN-SUFFIX,go.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Abema_TV b/luci-app-openclash/root/etc/openclash/rule_provider/Abema_TV deleted file mode 100644 index 2b245881..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Abema_TV +++ /dev/null @@ -1,10 +0,0 @@ -payload: - # > AbemaTV - # - USER-AGENT,AbemaTV* - - PROCESS-NAME,tv.abema - - DOMAIN-SUFFIX,abema.io - - DOMAIN-SUFFIX,abema.tv - - DOMAIN-SUFFIX,akamaized.net - - DOMAIN-SUFFIX,ameba.jp - - DOMAIN-SUFFIX,hayabusa.io - - DOMAIN-KEYWORD,abematv.akamaized.net diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Amazon b/luci-app-openclash/root/etc/openclash/rule_provider/Amazon deleted file mode 100644 index 5cb52537..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Amazon +++ /dev/null @@ -1,25 +0,0 @@ -payload: - # > Amazon Prime Video - # - USER-AGENT,InstantVideo.US* - # - USER-AGENT,Prime%20Video* - - DOMAIN-KEYWORD,avoddashs - - DOMAIN-SUFFIX,amazonvideo.com - - DOMAIN-SUFFIX,media-amazon.com - - DOMAIN-SUFFIX,pv-cdn.net - - DOMAIN-SUFFIX,aiv-cdn.net - - DOMAIN-SUFFIX,aiv-delivery.net - # - DOMAIN,www.amazon.com - - DOMAIN,atv-ps.amazon.com - - DOMAIN,avodmp4s3ww-a.akamaihd.net - - DOMAIN,d1v5ir2lpwr8os.cloudfront.net - - DOMAIN,d1xfray82862hr.cloudfront.net - - DOMAIN,d22qjgkvxw22r6.cloudfront.net - - DOMAIN,d25xi40x97liuc.cloudfront.net - - DOMAIN,d27xxe7juh1us6.cloudfront.net - - DOMAIN,d3196yreox78o9.cloudfront.net - - DOMAIN,dmqdd6hw24ucf.cloudfront.net - - DOMAIN,ktpx.amazon.com - - # 美区网页版需二选一走代理,如 URL-REGEX 则需 MITM www.amazon.com - # - DOMAIN,www.amazon.com - # - URL-REGEX,^https?:\/\/www\.amazon\.com\/(Amazon-Video|gp\/video)\/ \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Apple b/luci-app-openclash/root/etc/openclash/rule_provider/Apple deleted file mode 100644 index 65f25de9..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Apple +++ /dev/null @@ -1,30 +0,0 @@ -payload: - # > Apple API - - DOMAIN-SUFFIX,aaplimg.com - - DOMAIN-SUFFIX,apple.co - - DOMAIN-SUFFIX,apple.com - - DOMAIN-SUFFIX,apple-cloudkit.com - - DOMAIN-SUFFIX,apple-mapkit.com - - DOMAIN-SUFFIX,appsto.re - - DOMAIN-SUFFIX,cdn-apple.com - - DOMAIN-SUFFIX,icloud.com - - DOMAIN-SUFFIX,icloud-content.com - - DOMAIN-SUFFIX,itunes.com - - DOMAIN-SUFFIX,me.com - - DOMAIN-SUFFIX,mzstatic.com - - IP-CIDR,17.0.0.0/8,no-resolve - - IP-CIDR,63.92.224.0/19,no-resolve - - IP-CIDR,65.199.22.0/23,no-resolve - - IP-CIDR,139.178.128.0/18,no-resolve - - IP-CIDR,144.178.0.0/19,no-resolve - - IP-CIDR,144.178.36.0/22,no-resolve - - IP-CIDR,144.178.48.0/20,no-resolve - - IP-CIDR,192.35.50.0/24,no-resolve - - IP-CIDR,198.183.17.0/24,no-resolve - - IP-CIDR,205.180.175.0/24,no-resolve - - # > Apple News - - DOMAIN-SUFFIX,apple.news - - # > Apple Maps - - PROCESS-NAME,com.apple.geod diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Apple_News b/luci-app-openclash/root/etc/openclash/rule_provider/Apple_News deleted file mode 100644 index 3e1e3ae3..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Apple_News +++ /dev/null @@ -1,12 +0,0 @@ -payload: - # > Apple News and Apple Map TOMTOM Version - # - USER-AGENT,AppleNews* - # - USER-AGENT,com.apple.news* - - DOMAIN,gspe1-ssl.ls.apple.com - # - USER-AGENT,News* - # - DOMAIN,apple.comscoreresearch.com - # - DOMAIN,gateway.icloud.com - # - DOMAIN,news-client.apple.com - # - DOMAIN,news-edge.apple.com - # - DOMAIN,news-events.apple.com - # - DOMAIN-SUFFIX,apple.news diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Apple_TV b/luci-app-openclash/root/etc/openclash/rule_provider/Apple_TV deleted file mode 100644 index 081aabab..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Apple_TV +++ /dev/null @@ -1,5 +0,0 @@ -payload: - # > Apple TV - - DOMAIN,np-edge.itunes.apple.com - - DOMAIN,play-edge.itunes.apple.com - - DOMAIN-SUFFIX,tv.apple.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/BBC_iPlayer b/luci-app-openclash/root/etc/openclash/rule_provider/BBC_iPlayer deleted file mode 100644 index 80e74aa1..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/BBC_iPlayer +++ /dev/null @@ -1,15 +0,0 @@ -payload: - # > BBC iPlayer - - PROCESS-NAME,bbc.iplayer.android - - DOMAIN-KEYWORD,bbcfmt - - DOMAIN,aod-dash-uk-live.akamaized.net - - DOMAIN,aod-hls-uk-live.akamaized.net - - DOMAIN,vod-dash-uk-live.akamaized.net - - DOMAIN,vod-thumb-uk-live.akamaized.net - - DOMAIN-SUFFIX,bbc.co - - DOMAIN-SUFFIX,bbc.co.uk - - DOMAIN-SUFFIX,bbc.com - - DOMAIN-SUFFIX,bbcfmt.hs.llnwd.net - - DOMAIN-SUFFIX,bbci.co - - DOMAIN-SUFFIX,bbci.co.uk - - DOMAIN-SUFFIX,bidi.net.uk diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Bahamut b/luci-app-openclash/root/etc/openclash/rule_provider/Bahamut deleted file mode 100644 index 22105277..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Bahamut +++ /dev/null @@ -1,8 +0,0 @@ -payload: - # > Bahamut - # - USER-AGENT,Anime* - - PROCESS-NAME,tw.com.gamer.android.animad - - DOMAIN-SUFFIX,bahamut.com.tw - - DOMAIN-SUFFIX,gamer.com.tw - - DOMAIN,gamer-cds.cdn.hinet.net - - DOMAIN,gamer2-cds.cdn.hinet.net \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Bilibili b/luci-app-openclash/root/etc/openclash/rule_provider/Bilibili deleted file mode 100644 index 24e30079..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Bilibili +++ /dev/null @@ -1,16 +0,0 @@ -payload: - # > Bilibili - # - USER-AGENT,bili* - - DOMAIN-SUFFIX,acg.tv - - DOMAIN-SUFFIX,acgvideo.com - - DOMAIN-SUFFIX,b23.tv - - DOMAIN-SUFFIX,bilibili.com - - DOMAIN-SUFFIX,bilibili.tv - - DOMAIN-SUFFIX,biliapi.net - - DOMAIN-SUFFIX,biliapi.com - - DOMAIN-SUFFIX,bilivideo.com - - DOMAIN-SUFFIX,hdslb.com - - DOMAIN,upos-hz-mirrorakam.akamaized.net - # Hong Kong, Macau, Taiwan - # - USER-AGENT,bili-inter* - - DOMAIN,apiintl.biliapi.net \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/China.yaml b/luci-app-openclash/root/etc/openclash/rule_provider/China.yaml deleted file mode 100644 index 3aba2d1f..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/China.yaml +++ /dev/null @@ -1,366 +0,0 @@ -payload: - # China Area Network - # > 360 - - DOMAIN-SUFFIX,qhres.com - - DOMAIN-SUFFIX,qhimg.com - # > Alibaba - # USER-AGENT,%E4%BC%98%E9%85%B7* - - DOMAIN-SUFFIX,alibaba.com - - DOMAIN-SUFFIX,alibabausercontent.com - - DOMAIN-SUFFIX,alicdn.com - - DOMAIN-SUFFIX,alikunlun.com - - DOMAIN-SUFFIX,alipay.com - - DOMAIN-SUFFIX,amap.com - - DOMAIN-SUFFIX,autonavi.com - - DOMAIN-SUFFIX,dingtalk.com - - DOMAIN-SUFFIX,mxhichina.com - - DOMAIN-SUFFIX,soku.com - - DOMAIN-SUFFIX,taobao.com - - DOMAIN-SUFFIX,tmall.com - - DOMAIN-SUFFIX,tmall.hk - - DOMAIN-SUFFIX,ykimg.com - - DOMAIN-SUFFIX,youku.com - - DOMAIN-SUFFIX,xiami.com - - DOMAIN-SUFFIX,xiami.net - # > Apple - - DOMAIN-SUFFIX,aaplimg.com - - DOMAIN-SUFFIX,apple.co - - DOMAIN-SUFFIX,apple.com - - DOMAIN-SUFFIX,apple-cloudkit.com - - DOMAIN-SUFFIX,appstore.com - - DOMAIN-SUFFIX,cdn-apple.com - - DOMAIN-SUFFIX,icloud.com - - DOMAIN-SUFFIX,icloud-content.com - - DOMAIN-SUFFIX,me.com - - DOMAIN-SUFFIX,mzstatic.com - # - DOMAIN-KEYWORD,apple.com.akadns.net - # - DOMAIN-KEYWORD,icloud.com.akadns.net - # > Baidu - - DOMAIN-SUFFIX,baidu.com - - DOMAIN-SUFFIX,baidubcr.com - - DOMAIN-SUFFIX,baidupan.com - - DOMAIN-SUFFIX,baidupcs.com - - DOMAIN-SUFFIX,bdimg.com - - DOMAIN-SUFFIX,bdstatic.com - - DOMAIN-SUFFIX,yunjiasu-cdn.net - # > Battle - - DOMAIN-SUFFIX,battle.net - - DOMAIN-SUFFIX,blizzard.com - # > bilibili - - DOMAIN-SUFFIX,acgvideo.com - - DOMAIN-SUFFIX,biliapi.com - - DOMAIN-SUFFIX,biliapi.net - - DOMAIN-SUFFIX,bilibili.com - - DOMAIN-SUFFIX,bilibili.tv - - DOMAIN-SUFFIX,hdslb.com - # > ByteDance - - DOMAIN-SUFFIX,feiliao.com - - DOMAIN-SUFFIX,pstatp.com - - DOMAIN-SUFFIX,snssdk.com - - DOMAIN-SUFFIX,iesdouyin.com - - DOMAIN-SUFFIX,toutiao.com - # > CCTV - - DOMAIN-SUFFIX,cctv.com - - DOMAIN-SUFFIX,cctvpic.com - - DOMAIN-SUFFIX,livechina.com - # > ChinaTelecom - - DOMAIN-SUFFIX,21cn.com - # > DiDi - - DOMAIN-SUFFIX,didialift.com - - DOMAIN-SUFFIX,didiglobal.com - - DOMAIN-SUFFIX,udache.com - # > HunanTV - - DOMAIN-SUFFIX,hitv.com - - DOMAIN-SUFFIX,mgtv.com - # > iQiyi - - DOMAIN-SUFFIX,iqiyi.com - - DOMAIN-SUFFIX,iqiyipic.com - - DOMAIN-SUFFIX,71.am - # > JD - - DOMAIN-SUFFIX,jd.com - - DOMAIN-SUFFIX,jd.hk - - DOMAIN-SUFFIX,jdpay.com - - DOMAIN-SUFFIX,360buyimg.com - # > Kingsoft - - DOMAIN-SUFFIX,iciba.com - - DOMAIN-SUFFIX,ksosoft.com - # > Meitu - - DOMAIN-SUFFIX,meitu.com - - DOMAIN-SUFFIX,meitudata.com - - DOMAIN-SUFFIX,meitustat.com - - DOMAIN-SUFFIX,meipai.com - # > Meituan - - DOMAIN-SUFFIX,dianping.com - - DOMAIN-SUFFIX,dpfile.com - - DOMAIN-SUFFIX,meituan.com - - DOMAIN-SUFFIX,meituan.net - # > MI - - DOMAIN-SUFFIX,duokan.com - - DOMAIN-SUFFIX,mi.com - - DOMAIN-SUFFIX,mi-img.com - - DOMAIN-SUFFIX,miui.com - - DOMAIN-SUFFIX,miwifi.com - - DOMAIN-SUFFIX,xiaomi.com - - DOMAIN-SUFFIX,xiaomi.net - # > Microsoft - # - DOMAIN-SUFFIX,microsoft.com - # - DOMAIN-SUFFIX,msecnd.net - # - DOMAIN-SUFFIX,office.com - # - DOMAIN-SUFFIX,office365.com - # - DOMAIN-SUFFIX,s-microsoft.com - # - DOMAIN-SUFFIX,windows.com - - DOMAIN-SUFFIX,visualstudio.com - # >> Microsoft Software Download - # - DOMAIN,software-download.microsoft.com - # - DOMAIN-KEYWORD,-microsoft-com.akamaized.net - # >> OneDrive - # - DOMAIN-SUFFIX,1drv.com - # - DOMAIN-SUFFIX,storage.live.com - # >> Outlook - - DOMAIN-SUFFIX,hotmail.com - - DOMAIN-SUFFIX,outlook.com - - DOMAIN,outlook.office365.com - - DOMAIN,smtp.office365.com - # >> Windows Server Update Services - - DOMAIN-SUFFIX,dl.delivery.mp.microsoft.com - - DOMAIN-SUFFIX,update.microsoft.com - - DOMAIN-SUFFIX,windowsupdate.com - - DOMAIN-SUFFIX,windowsupdate.microsoft.com - - DOMAIN,download.microsoft.com - - DOMAIN,wustat.windows.com - - DOMAIN,ntservicepack.microsoft.com - # > NetEase - # USER-AGENT,NeteaseMusic* - # USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90* - - DOMAIN-SUFFIX,163.com - - DOMAIN-SUFFIX,126.com - - DOMAIN-SUFFIX,126.net - - DOMAIN-SUFFIX,127.net - - DOMAIN-SUFFIX,163yun.com - - DOMAIN-SUFFIX,lofter.com - - DOMAIN-SUFFIX,netease.com - - DOMAIN-SUFFIX,ydstatic.com - - DOMAIN-SUFFIX,youdao.com - # > PayPal - # USER-AGENT,PayPal* - - DOMAIN-SUFFIX,paypal.com - - DOMAIN-SUFFIX,paypal.me - - DOMAIN-SUFFIX,paypalobjects.com - # > Sina - - DOMAIN-SUFFIX,sina.com - - DOMAIN-SUFFIX,weibo.com - - DOMAIN-SUFFIX,weibocdn.com - # > Sohu - - DOMAIN-SUFFIX,sohu.com - - DOMAIN-SUFFIX,sohucs.com - - DOMAIN-SUFFIX,sohu-inc.com - - DOMAIN-SUFFIX,v-56.com - # > Sogo - - DOMAIN-SUFFIX,sogo.com - - DOMAIN-SUFFIX,sogou.com - - DOMAIN-SUFFIX,sogoucdn.com - # > Steam - - DOMAIN-SUFFIX,steamcontent.com - - DOMAIN-SUFFIX,steampowered.com - - DOMAIN-SUFFIX,steamstatic.com - # > Tencent - # USER-AGENT,MicroMessenger* - # USER-AGENT,WeChat* - # USER-AGENT,%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1* - - DOMAIN-SUFFIX,gtimg.com - - DOMAIN-SUFFIX,idqqimg.com - - DOMAIN-SUFFIX,igamecj.com - - DOMAIN-SUFFIX,myapp.com - - DOMAIN-SUFFIX,myqcloud.com - - DOMAIN-SUFFIX,qq.com - - DOMAIN-SUFFIX,qqmail.com - - DOMAIN-SUFFIX,servicewechat.com - - DOMAIN-SUFFIX,tencent.com - - DOMAIN-SUFFIX,tencent-cloud.com - - DOMAIN-SUFFIX,tencent-cloud.net - - DOMAIN-SUFFIX,tenpay.com - - DOMAIN-SUFFIX,wechat.com - - DOMAIN,file-igamecj.akamaized.net - - IP-CIDR,182.254.116.0/24,no-resolve - - IP-CIDR,203.205.254.0/23,no-resolve - # > Content Delivery Network - - DOMAIN-SUFFIX,ccgslb.com - - DOMAIN-SUFFIX,ccgslb.net - - DOMAIN-SUFFIX,chinanetcenter.com - - DOMAIN-SUFFIX,meixincdn.com - - DOMAIN-SUFFIX,ourdvs.com - - DOMAIN-SUFFIX,staticdn.net - - DOMAIN-SUFFIX,wangsu.com - # > IP Query - - DOMAIN-SUFFIX,ipip.net - - DOMAIN-SUFFIX,ip.la - - DOMAIN-SUFFIX,ip.sb - - DOMAIN-SUFFIX,ip-cdn.com - - DOMAIN-SUFFIX,ipv6-test.com - - DOMAIN-SUFFIX,myip.la - - DOMAIN-SUFFIX,test-ipv6.com - - DOMAIN-SUFFIX,whatismyip.com - - DOMAIN,ip.istatmenus.app - - DOMAIN,sms.imagetasks.com - # > Speed Test - # - DOMAIN-SUFFIX,speedtest.net - - DOMAIN-SUFFIX,netspeedtestmaster.com - - DOMAIN,speedtest.macpaw.com - # > Private Tracker - - DOMAIN-SUFFIX,acg.rip - - DOMAIN-SUFFIX,animebytes.tv - - DOMAIN-SUFFIX,awesome-hd.me - - DOMAIN-SUFFIX,broadcasthe.net - - DOMAIN-SUFFIX,chdbits.co - - DOMAIN-SUFFIX,classix-unlimited.co.uk - - DOMAIN-SUFFIX,comicat.org - - DOMAIN-SUFFIX,empornium.me - - DOMAIN-SUFFIX,gazellegames.net - - DOMAIN-SUFFIX,hdbits.org - - DOMAIN-SUFFIX,hdchina.org - - DOMAIN-SUFFIX,hddolby.com - - DOMAIN-SUFFIX,hdhome.org - - DOMAIN-SUFFIX,hdsky.me - - DOMAIN-SUFFIX,icetorrent.org - - DOMAIN-SUFFIX,jpopsuki.eu - - DOMAIN-SUFFIX,keepfrds.com - - DOMAIN-SUFFIX,madsrevolution.net - - DOMAIN-SUFFIX,morethan.tv - - DOMAIN-SUFFIX,m-team.cc - - DOMAIN-SUFFIX,myanonamouse.net - - DOMAIN-SUFFIX,nanyangpt.com - - DOMAIN-SUFFIX,ncore.cc - - DOMAIN-SUFFIX,open.cd - - DOMAIN-SUFFIX,ourbits.club - - DOMAIN-SUFFIX,passthepopcorn.me - - DOMAIN-SUFFIX,privatehd.to - - DOMAIN-SUFFIX,pterclub.com - - DOMAIN-SUFFIX,redacted.ch - - DOMAIN-SUFFIX,springsunday.net - - DOMAIN-SUFFIX,tjupt.org - - DOMAIN-SUFFIX,totheglory.im - # > Other - - DOMAIN-SUFFIX,cn - - DOMAIN-SUFFIX,115.com - - DOMAIN-SUFFIX,360in.com - - DOMAIN-SUFFIX,51ym.me - - DOMAIN-SUFFIX,8686c.com - - DOMAIN-SUFFIX,99.com - - DOMAIN-SUFFIX,abchina.com - - DOMAIN-SUFFIX,accuweather.com - - DOMAIN-SUFFIX,agora.io - - DOMAIN-SUFFIX,aicoinstorge.com - - DOMAIN-SUFFIX,air-matters.com - - DOMAIN-SUFFIX,air-matters.io - - DOMAIN-SUFFIX,aixifan.com - - DOMAIN-SUFFIX,amd.com - - DOMAIN-SUFFIX,b612.net - - DOMAIN-SUFFIX,bdatu.com - - DOMAIN-SUFFIX,beitaichufang.com - - DOMAIN-SUFFIX,booking.com - - DOMAIN-SUFFIX,bstatic.com - - DOMAIN-SUFFIX,cailianpress.com - - DOMAIN-SUFFIX,camera360.com - - DOMAIN-SUFFIX,chaoxing.com - - DOMAIN-SUFFIX,chaoxing.com - - DOMAIN-SUFFIX,chinaso.com - - DOMAIN-SUFFIX,chuimg.com - - DOMAIN-SUFFIX,chunyu.mobi - - DOMAIN-SUFFIX,cibntv.net - - DOMAIN-SUFFIX,cmbchina.com - - DOMAIN-SUFFIX,cmbimg.com - - DOMAIN-SUFFIX,coolapk.com - - DOMAIN-SUFFIX,ctrip.com - - DOMAIN-SUFFIX,dfcfw.com - - DOMAIN-SUFFIX,dji.net - - DOMAIN-SUFFIX,docschina.org - - DOMAIN-SUFFIX,douban.com - - DOMAIN-SUFFIX,doubanio.com - - DOMAIN-SUFFIX,douyu.com - - DOMAIN-SUFFIX,dxycdn.com - - DOMAIN-SUFFIX,dytt8.net - - DOMAIN-SUFFIX,eastmoney.com - - DOMAIN-SUFFIX,eudic.net - - DOMAIN-SUFFIX,feng.com - - DOMAIN-SUFFIX,fengkongcloud.com - - DOMAIN-SUFFIX,frdic.com - - DOMAIN-SUFFIX,futu5.com - - DOMAIN-SUFFIX,futunn.com - - DOMAIN-SUFFIX,gandi.net - - DOMAIN-SUFFIX,gcores.com - - DOMAIN-SUFFIX,geilicdn.com - - DOMAIN-SUFFIX,getpricetag.com - - DOMAIN-SUFFIX,gifshow.com - - DOMAIN-SUFFIX,godic.net - - DOMAIN-SUFFIX,heweather.net - - DOMAIN-SUFFIX,hicloud.com - - DOMAIN-SUFFIX,hongxiu.com - - DOMAIN-SUFFIX,hostbuf.com - - DOMAIN-SUFFIX,huxiucdn.com - - DOMAIN-SUFFIX,huya.com - - DOMAIN-SUFFIX,ibm.com - - DOMAIN-SUFFIX,infinitynewtab.com - - DOMAIN-SUFFIX,ithome.com - - DOMAIN-SUFFIX,java.com - - DOMAIN-SUFFIX,jianguoyun.com - - DOMAIN-SUFFIX,jianshu.com - - DOMAIN-SUFFIX,jianshu.io - - DOMAIN-SUFFIX,jidian.im - - DOMAIN-SUFFIX,kaiyanapp.com - - DOMAIN-SUFFIX,kaspersky-labs.com - - DOMAIN-SUFFIX,keepcdn.com - - DOMAIN-SUFFIX,kkmh.com - - DOMAIN-SUFFIX,lanzous.com - - DOMAIN-SUFFIX,luojilab.com - - DOMAIN-SUFFIX,maoyan.com - - DOMAIN-SUFFIX,maoyun.tv - - DOMAIN-SUFFIX,mls-cdn.com - - DOMAIN-SUFFIX,mobike.com - - DOMAIN-SUFFIX,moke.com - - DOMAIN-SUFFIX,mubu.com - - DOMAIN-SUFFIX,myzaker.com - - DOMAIN-SUFFIX,nim-lang-cn.org - - DOMAIN-SUFFIX,ntp.org - - DOMAIN-SUFFIX,nvidia.com - - DOMAIN-SUFFIX,oracle.com - - DOMAIN-SUFFIX,plex.tv - - DOMAIN-SUFFIX,qidian.com - - DOMAIN-SUFFIX,qweather.com - - DOMAIN-SUFFIX,qyer.com - - DOMAIN-SUFFIX,qyerstatic.com - - DOMAIN-SUFFIX,raychase.net - - DOMAIN-SUFFIX,ronghub.com - - DOMAIN-SUFFIX,ruguoapp.com - - DOMAIN-SUFFIX,sankuai.com - - DOMAIN-SUFFIX,scomper.me - - DOMAIN-SUFFIX,shouqianba.com - - DOMAIN-SUFFIX,sm.ms - - DOMAIN-SUFFIX,smzdm.com - - DOMAIN-SUFFIX,snapdrop.net - - DOMAIN-SUFFIX,snwx.com - - DOMAIN-SUFFIX,s-reader.com - - DOMAIN-SUFFIX,sspai.com - - DOMAIN-SUFFIX,subhd.tv - - DOMAIN-SUFFIX,takungpao.com - - DOMAIN-SUFFIX,teamviewer.com - - DOMAIN-SUFFIX,tianyancha.com - - DOMAIN-SUFFIX,tophub.today - - DOMAIN-SUFFIX,uning.com - - DOMAIN-SUFFIX,weather.com - - DOMAIN-SUFFIX,weico.cc - - DOMAIN-SUFFIX,weidian.com - - DOMAIN-SUFFIX,xiachufang.com - - DOMAIN-SUFFIX,xiaoka.tv - - DOMAIN-SUFFIX,ximalaya.com - - DOMAIN-SUFFIX,xinhuanet.com - - DOMAIN-SUFFIX,xmcdn.com - - DOMAIN-SUFFIX,yangkeduo.com - - DOMAIN-SUFFIX,yizhibo.com - - DOMAIN-SUFFIX,zhangzishi.cc - - DOMAIN-SUFFIX,zhihu.com - - DOMAIN-SUFFIX,zhihuishu.com - - DOMAIN-SUFFIX,zhimg.com - - DOMAIN-SUFFIX,zhuihd.com - - - DOMAIN,download.jetbrains.com - - DOMAIN,images-cn.ssl-images-amazon.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/ChinaIP.yaml b/luci-app-openclash/root/etc/openclash/rule_provider/ChinaIP.yaml deleted file mode 100644 index 214ecc84..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/ChinaIP.yaml +++ /dev/null @@ -1,6126 +0,0 @@ -payload: - - '1.0.1.0/24' - - '1.0.2.0/23' - - '1.0.8.0/21' - - '1.0.32.0/19' - - '1.1.0.0/24' - - '1.1.2.0/23' - - '1.1.4.0/22' - - '1.1.8.0/21' - - '1.1.16.0/20' - - '1.1.32.0/19' - - '1.2.0.0/23' - - '1.2.2.0/24' - - '1.2.4.0/22' - - '1.2.8.0/21' - - '1.2.16.0/20' - - '1.2.32.0/19' - - '1.2.64.0/18' - - '1.3.0.0/16' - - '1.4.1.0/24' - - '1.4.2.0/23' - - '1.4.4.0/22' - - '1.4.8.0/21' - - '1.4.16.0/20' - - '1.4.32.0/19' - - '1.4.64.0/18' - - '1.8.0.0/16' - - '1.10.0.0/21' - - '1.10.8.0/23' - - '1.10.11.0/24' - - '1.10.12.0/22' - - '1.10.16.0/20' - - '1.10.32.0/19' - - '1.10.64.0/18' - - '1.12.16.0/20' - - '1.12.32.0/23' - - '1.12.36.0/22' - - '1.12.40.0/21' - - '1.12.48.0/20' - - '1.12.64.0/18' - - '1.12.128.0/17' - - '1.13.0.0/16' - - '1.14.0.0/15' - - '1.18.128.0/24' - - '1.24.0.0/13' - - '1.45.0.0/16' - - '1.48.0.0/14' - - '1.56.0.0/13' - - '1.68.0.0/14' - - '1.80.0.0/12' - - '1.116.0.0/15' - - '1.118.1.0/24' - - '1.118.2.0/23' - - '1.118.4.0/22' - - '1.118.8.0/21' - - '1.118.16.0/20' - - '1.118.33.0/24' - - '1.118.34.0/23' - - '1.118.36.0/22' - - '1.118.40.0/21' - - '1.118.48.0/20' - - '1.118.64.0/18' - - '1.118.128.0/17' - - '1.119.0.0/16' - - '1.180.0.0/14' - - '1.184.0.0/15' - - '1.188.0.0/14' - - '1.192.0.0/13' - - '1.202.0.0/15' - - '1.204.0.0/14' - - '3.5.214.0/23' - - '8.128.0.0/10' - - '13.104.184.80/28' - - '14.0.0.0/21' - - '14.0.12.0/22' - - '14.1.0.0/22' - - '14.1.24.0/22' - - '14.1.108.0/22' - - '14.16.0.0/12' - - '14.102.128.0/22' - - '14.102.180.0/22' - - '14.103.0.0/16' - - '14.104.0.0/13' - - '14.112.0.0/12' - - '14.130.0.0/15' - - '14.134.0.0/15' - - '14.144.0.0/12' - - '14.192.61.0/24' - - '14.192.62.0/23' - - '14.192.76.0/22' - - '14.196.0.0/15' - - '14.204.0.0/15' - - '14.208.0.0/12' - - '15.230.41.0/24' - - '15.230.49.0/24' - - '15.230.141.0/24' - - '17.127.128.0/23' - - '20.139.160.0/20' - - '20.249.255.0/24' - - '20.251.0.0/22' - - '20.253.4.0/24' - - '20.253.89.0/24' - - '20.255.255.0/24' - - '27.0.128.0/22' - - '27.0.132.0/24' - - '27.0.134.0/23' - - '27.0.160.0/21' - - '27.0.188.0/22' - - '27.0.204.0/22' - - '27.0.208.0/21' - - '27.8.0.0/13' - - '27.16.0.0/12' - - '27.34.232.0/21' - - '27.36.0.0/14' - - '27.40.0.0/13' - - '27.50.40.0/21' - - '27.50.128.0/17' - - '27.54.72.0/21' - - '27.54.152.0/21' - - '27.54.192.0/18' - - '27.98.208.0/20' - - '27.98.224.0/19' - - '27.99.128.0/17' - - '27.103.0.0/16' - - '27.106.128.0/18' - - '27.106.204.0/22' - - '27.109.32.0/19' - - '27.109.124.0/22' - - '27.112.0.0/18' - - '27.112.80.0/20' - - '27.112.112.0/21' - - '27.113.128.0/18' - - '27.115.0.0/17' - - '27.116.44.0/22' - - '27.121.72.0/21' - - '27.121.120.0/21' - - '27.128.0.0/15' - - '27.131.220.0/22' - - '27.144.0.0/16' - - '27.148.0.0/14' - - '27.152.0.0/13' - - '27.184.0.0/13' - - '27.192.0.0/11' - - '27.224.0.0/14' - - '36.0.0.0/22' - - '36.0.16.0/20' - - '36.0.32.0/19' - - '36.0.64.0/18' - - '36.0.128.0/17' - - '36.1.0.0/16' - - '36.4.0.0/14' - - '36.16.0.0/12' - - '36.32.0.0/14' - - '36.36.0.0/16' - - '36.37.0.0/19' - - '36.37.36.0/23' - - '36.37.39.0/24' - - '36.37.40.0/21' - - '36.37.48.0/20' - - '36.40.0.0/13' - - '36.48.0.0/15' - - '36.51.0.0/17' - - '36.51.128.0/18' - - '36.51.192.0/19' - - '36.51.224.0/20' - - '36.51.240.0/21' - - '36.51.250.0/23' - - '36.51.252.0/23' - - '36.56.0.0/13' - - '36.96.0.0/11' - - '36.128.0.0/10' - - '36.192.0.0/11' - - '36.248.0.0/14' - - '36.254.0.0/16' - - '36.255.116.0/22' - - '36.255.128.0/22' - - '36.255.164.0/22' - - '36.255.173.0/24' - - '36.255.174.0/23' - - '36.255.176.0/22' - - '39.0.0.0/24' - - '39.0.2.0/23' - - '39.0.4.0/22' - - '39.0.8.0/21' - - '39.0.16.0/20' - - '39.0.32.0/19' - - '39.0.64.0/18' - - '39.0.128.0/17' - - '39.64.0.0/11' - - '39.96.0.0/16' - - '39.97.0.0/17' - - '39.97.128.0/18' - - '39.97.192.0/21' - - '39.97.200.0/22' - - '39.97.208.0/20' - - '39.97.224.0/19' - - '39.98.0.0/15' - - '39.100.0.0/14' - - '39.104.0.0/14' - - '39.108.0.0/16' - - '39.109.120.0/23' - - '39.128.0.0/10' - - '40.0.176.0/20' - - '40.0.248.0/21' - - '40.72.0.0/15' - - '40.77.136.112/28' - - '40.77.236.224/27' - - '40.77.254.64/27' - - '40.125.128.0/17' - - '40.126.64.0/18' - - '40.198.10.0/24' - - '40.198.16.0/21' - - '40.198.24.0/23' - - '40.251.225.0/24' - - '40.251.227.0/24' - - '42.0.0.0/22' - - '42.0.8.0/21' - - '42.0.16.0/21' - - '42.0.24.0/22' - - '42.0.32.0/19' - - '42.0.128.0/17' - - '42.1.0.0/19' - - '42.1.32.0/20' - - '42.1.48.0/21' - - '42.1.56.0/22' - - '42.4.0.0/14' - - '42.48.0.0/13' - - '42.56.0.0/14' - - '42.62.0.0/17' - - '42.62.128.0/19' - - '42.62.160.0/20' - - '42.62.180.0/22' - - '42.62.184.0/21' - - '42.63.0.0/16' - - '42.80.0.0/15' - - '42.83.64.0/20' - - '42.83.80.0/22' - - '42.83.88.0/21' - - '42.83.96.0/19' - - '42.83.128.0/23' - - '42.83.134.0/24' - - '42.83.138.0/23' - - '42.83.140.0/22' - - '42.83.144.0/20' - - '42.83.160.0/19' - - '42.83.192.0/18' - - '42.84.0.0/14' - - '42.88.0.0/13' - - '42.96.64.0/19' - - '42.96.96.0/21' - - '42.96.108.0/22' - - '42.96.112.0/20' - - '42.96.128.0/17' - - '42.97.0.0/16' - - '42.99.0.0/18' - - '42.99.64.0/19' - - '42.99.96.0/20' - - '42.99.112.0/22' - - '42.99.120.0/21' - - '42.100.0.0/14' - - '42.120.0.0/15' - - '42.122.0.0/16' - - '42.123.0.0/19' - - '42.123.36.0/22' - - '42.123.40.0/21' - - '42.123.48.0/20' - - '42.123.64.0/18' - - '42.123.128.0/17' - - '42.128.0.0/12' - - '42.156.0.0/19' - - '42.156.36.0/22' - - '42.156.40.0/21' - - '42.156.48.0/20' - - '42.156.64.0/18' - - '42.156.128.0/17' - - '42.157.0.0/21' - - '42.157.8.0/22' - - '42.157.14.0/23' - - '42.157.16.0/20' - - '42.157.32.0/19' - - '42.157.64.0/18' - - '42.157.128.0/17' - - '42.158.0.0/15' - - '42.160.0.0/12' - - '42.176.0.0/13' - - '42.184.0.0/15' - - '42.186.0.0/16' - - '42.187.0.0/18' - - '42.187.64.0/19' - - '42.187.96.0/20' - - '42.187.112.0/21' - - '42.187.120.0/22' - - '42.187.128.0/17' - - '42.192.0.0/13' - - '42.201.0.0/17' - - '42.202.0.0/15' - - '42.204.0.0/14' - - '42.208.0.0/12' - - '42.224.0.0/12' - - '42.240.0.0/16' - - '42.242.0.0/15' - - '42.244.0.0/15' - - '42.246.0.0/16' - - '42.247.0.0/22' - - '42.247.4.0/24' - - '42.247.5.0/25' - - '42.247.5.128/26' - - '42.247.5.204/30' - - '42.247.5.208/28' - - '42.247.5.224/27' - - '42.247.6.0/23' - - '42.247.8.0/21' - - '42.247.16.0/20' - - '42.247.32.0/19' - - '42.247.64.0/18' - - '42.247.128.0/17' - - '42.248.0.0/13' - - '43.0.0.0/10' - - '43.64.0.0/12' - - '43.80.0.0/13' - - '43.88.128.0/17' - - '43.89.0.0/16' - - '43.90.0.0/15' - - '43.95.64.0/19' - - '43.95.96.0/20' - - '43.95.112.0/21' - - '43.96.0.0/11' - - '43.130.128.0/18' - - '43.131.128.0/18' - - '43.132.8.0/24' - - '43.132.10.0/23' - - '43.132.12.0/22' - - '43.132.16.0/20' - - '43.132.32.0/19' - - '43.132.75.0/24' - - '43.132.78.0/23' - - '43.132.87.0/24' - - '43.132.92.0/24' - - '43.135.224.0/19' - - '43.136.0.0/13' - - '43.144.0.0/13' - - '43.152.4.0/22' - - '43.152.8.0/23' - - '43.152.11.0/24' - - '43.152.12.0/22' - - '43.152.16.0/20' - - '43.152.32.0/20' - - '43.152.48.0/22' - - '43.152.52.0/23' - - '43.152.55.0/24' - - '43.152.57.0/24' - - '43.152.60.0/22' - - '43.152.64.0/18' - - '43.152.128.0/17' - - '43.153.64.0/18' - - '43.156.0.0/16' - - '43.157.192.0/18' - - '43.158.0.0/15' - - '43.160.0.0/11' - - '43.192.0.0/14' - - '43.196.0.0/15' - - '43.224.12.0/22' - - '43.224.24.0/22' - - '43.224.44.0/22' - - '43.224.52.0/22' - - '43.224.56.0/22' - - '43.224.68.0/22' - - '43.224.72.0/22' - - '43.224.80.0/22' - - '43.224.100.0/22' - - '43.224.144.0/22' - - '43.224.161.0/24' - - '43.224.176.0/22' - - '43.224.184.0/22' - - '43.224.200.0/21' - - '43.224.208.0/21' - - '43.224.216.0/22' - - '43.224.240.0/22' - - '43.225.76.0/22' - - '43.225.86.0/24' - - '43.225.120.0/22' - - '43.225.180.0/22' - - '43.225.208.0/22' - - '43.225.216.0/21' - - '43.225.224.0/20' - - '43.225.240.0/21' - - '43.225.252.0/22' - - '43.226.32.0/19' - - '43.226.64.0/19' - - '43.226.96.0/20' - - '43.226.112.0/21' - - '43.226.120.0/22' - - '43.226.128.0/19' - - '43.226.160.0/21' - - '43.226.236.0/22' - - '43.226.240.0/20' - - '43.227.0.0/21' - - '43.227.8.0/22' - - '43.227.32.0/19' - - '43.227.64.0/19' - - '43.227.104.0/22' - - '43.227.136.0/21' - - '43.227.144.0/22' - - '43.227.152.0/21' - - '43.227.160.0/20' - - '43.227.176.0/21' - - '43.227.188.0/22' - - '43.227.192.0/19' - - '43.227.232.0/22' - - '43.227.248.0/21' - - '43.228.0.0/18' - - '43.228.64.0/21' - - '43.228.76.0/22' - - '43.228.100.0/22' - - '43.228.116.0/22' - - '43.228.132.0/22' - - '43.228.136.0/22' - - '43.228.148.0/22' - - '43.228.152.0/22' - - '43.228.188.0/22' - - '43.228.204.0/22' - - '43.228.240.0/22' - - '43.229.40.0/22' - - '43.229.48.0/22' - - '43.229.56.0/22' - - '43.229.96.0/22' - - '43.229.136.0/21' - - '43.229.168.0/21' - - '43.229.176.0/20' - - '43.229.192.0/21' - - '43.229.216.0/21' - - '43.229.232.0/21' - - '43.230.20.0/22' - - '43.230.32.0/22' - - '43.230.68.0/22' - - '43.230.72.0/22' - - '43.230.124.0/22' - - '43.230.220.0/22' - - '43.230.224.0/19' - - '43.231.32.0/20' - - '43.231.80.0/20' - - '43.231.96.0/20' - - '43.231.136.0/21' - - '43.231.144.0/20' - - '43.231.160.0/20' - - '43.231.176.0/21' - - '43.236.0.0/16' - - '43.237.0.0/17' - - '43.237.128.0/18' - - '43.237.192.0/22' - - '43.237.197.0/24' - - '43.237.198.0/23' - - '43.237.200.0/21' - - '43.237.208.0/20' - - '43.237.224.0/19' - - '43.238.0.0/16' - - '43.239.0.0/19' - - '43.239.32.0/20' - - '43.239.48.0/22' - - '43.239.116.0/22' - - '43.239.120.0/22' - - '43.239.172.0/22' - - '43.240.0.0/22' - - '43.240.56.0/21' - - '43.240.68.0/22' - - '43.240.72.0/21' - - '43.240.84.0/22' - - '43.240.124.0/22' - - '43.240.128.0/21' - - '43.240.136.0/22' - - '43.240.156.0/22' - - '43.240.160.0/19' - - '43.240.192.0/19' - - '43.240.240.0/20' - - '43.241.0.0/20' - - '43.241.16.0/21' - - '43.241.48.0/22' - - '43.241.76.0/22' - - '43.241.80.0/20' - - '43.241.112.0/22' - - '43.241.168.0/21' - - '43.241.176.0/21' - - '43.241.184.0/22' - - '43.241.208.0/20' - - '43.241.224.0/20' - - '43.241.240.0/22' - - '43.241.248.0/22' - - '43.242.8.0/21' - - '43.242.16.0/20' - - '43.242.48.0/22' - - '43.242.53.0/24' - - '43.242.54.0/24' - - '43.242.56.0/21' - - '43.242.64.0/22' - - '43.242.72.0/21' - - '43.242.80.0/20' - - '43.242.96.0/22' - - '43.242.144.0/20' - - '43.242.160.0/21' - - '43.242.180.0/22' - - '43.242.188.0/22' - - '43.242.192.0/21' - - '43.242.204.0/22' - - '43.242.216.0/21' - - '43.242.252.0/22' - - '43.243.4.0/22' - - '43.243.8.0/21' - - '43.243.16.0/22' - - '43.243.88.0/22' - - '43.243.128.0/22' - - '43.243.136.0/22' - - '43.243.144.0/21' - - '43.243.156.0/22' - - '43.243.180.0/22' - - '43.243.228.0/22' - - '43.243.232.0/22' - - '43.243.244.0/22' - - '43.246.0.0/18' - - '43.246.64.0/19' - - '43.246.96.0/22' - - '43.246.112.0/24' - - '43.246.148.0/24' - - '43.246.150.0/24' - - '43.246.228.0/22' - - '43.247.4.0/22' - - '43.247.8.0/22' - - '43.247.44.0/22' - - '43.247.48.0/22' - - '43.247.68.0/22' - - '43.247.76.0/22' - - '43.247.84.0/22' - - '43.247.88.0/21' - - '43.247.96.0/21' - - '43.247.108.0/22' - - '43.247.112.0/22' - - '43.247.148.0/22' - - '43.247.152.0/22' - - '43.247.176.0/20' - - '43.247.196.0/22' - - '43.247.200.0/21' - - '43.247.208.0/20' - - '43.247.224.0/19' - - '43.248.0.0/21' - - '43.248.20.0/22' - - '43.248.28.0/22' - - '43.248.48.0/22' - - '43.248.76.0/22' - - '43.248.80.0/20' - - '43.248.96.0/19' - - '43.248.128.0/20' - - '43.248.144.0/21' - - '43.248.176.0/20' - - '43.248.192.0/20' - - '43.248.208.0/22' - - '43.248.228.0/22' - - '43.248.232.0/22' - - '43.248.244.0/22' - - '43.249.4.0/22' - - '43.249.120.0/22' - - '43.249.132.0/22' - - '43.249.136.0/22' - - '43.249.144.0/20' - - '43.249.160.0/21' - - '43.249.168.0/22' - - '43.249.192.0/22' - - '43.249.236.0/22' - - '43.250.4.0/22' - - '43.250.12.0/22' - - '43.250.16.0/21' - - '43.250.28.0/22' - - '43.250.32.0/22' - - '43.250.96.0/21' - - '43.250.108.0/22' - - '43.250.112.0/22' - - '43.250.118.0/23' - - '43.250.128.0/22' - - '43.250.144.0/21' - - '43.250.160.0/22' - - '43.250.168.0/22' - - '43.250.176.0/22' - - '43.250.200.0/22' - - '43.250.212.0/22' - - '43.250.216.0/21' - - '43.250.236.0/22' - - '43.250.244.0/22' - - '43.251.4.0/22' - - '43.251.36.0/22' - - '43.251.192.0/22' - - '43.251.232.0/22' - - '43.251.244.0/22' - - '43.252.48.0/22' - - '43.252.56.0/22' - - '43.252.224.0/22' - - '43.254.0.0/21' - - '43.254.8.0/22' - - '43.254.24.0/22' - - '43.254.36.0/22' - - '43.254.44.0/22' - - '43.254.52.0/22' - - '43.254.64.0/22' - - '43.254.72.0/22' - - '43.254.84.0/22' - - '43.254.88.0/21' - - '43.254.100.0/22' - - '43.254.104.0/22' - - '43.254.112.0/21' - - '43.254.128.0/22' - - '43.254.136.0/21' - - '43.254.144.0/20' - - '43.254.168.0/21' - - '43.254.180.0/22' - - '43.254.184.0/21' - - '43.254.192.0/22' - - '43.254.200.0/22' - - '43.254.208.0/22' - - '43.254.220.0/22' - - '43.254.224.0/20' - - '43.254.240.0/22' - - '43.254.248.0/21' - - '43.255.0.0/21' - - '43.255.8.0/22' - - '43.255.16.0/22' - - '43.255.48.0/22' - - '43.255.64.0/20' - - '43.255.84.0/22' - - '43.255.96.0/22' - - '43.255.144.0/22' - - '43.255.176.0/22' - - '43.255.184.0/22' - - '43.255.192.0/22' - - '43.255.200.0/21' - - '43.255.208.0/21' - - '43.255.224.0/21' - - '43.255.232.0/22' - - '43.255.244.0/22' - - '45.40.192.0/20' - - '45.40.208.0/21' - - '45.40.224.0/19' - - '45.65.16.0/20' - - '45.87.53.0/24' - - '45.87.54.0/24' - - '45.112.132.0/22' - - '45.112.188.0/22' - - '45.112.208.0/20' - - '45.112.228.0/22' - - '45.112.232.0/21' - - '45.113.12.0/22' - - '45.113.16.0/20' - - '45.113.40.0/22' - - '45.113.52.0/22' - - '45.113.72.0/22' - - '45.113.144.0/21' - - '45.113.168.0/22' - - '45.113.184.0/22' - - '45.113.200.0/21' - - '45.113.208.0/20' - - '45.113.240.0/22' - - '45.113.252.0/22' - - '45.114.0.0/22' - - '45.114.32.0/22' - - '45.114.52.0/22' - - '45.114.96.0/22' - - '45.114.136.0/22' - - '45.114.196.0/22' - - '45.114.200.0/22' - - '45.114.228.0/22' - - '45.114.252.0/22' - - '45.115.44.0/22' - - '45.115.100.0/22' - - '45.115.120.0/22' - - '45.115.132.0/22' - - '45.115.144.0/22' - - '45.115.156.0/22' - - '45.115.164.0/22' - - '45.115.200.0/22' - - '45.115.212.0/22' - - '45.115.244.0/22' - - '45.115.248.0/22' - - '45.116.16.0/22' - - '45.116.24.0/22' - - '45.116.32.0/21' - - '45.116.52.0/22' - - '45.116.96.0/21' - - '45.116.140.0/22' - - '45.116.152.0/22' - - '45.116.208.0/22' - - '45.117.8.0/22' - - '45.117.20.0/22' - - '45.117.68.0/22' - - '45.117.124.0/22' - - '45.117.252.0/22' - - '45.119.60.0/22' - - '45.119.64.0/21' - - '45.119.72.0/22' - - '45.119.104.0/22' - - '45.119.232.0/22' - - '45.120.100.0/22' - - '45.120.140.0/22' - - '45.120.164.0/22' - - '45.120.180.128/27' - - '45.120.240.0/24' - - '45.120.242.0/23' - - '45.121.52.0/22' - - '45.121.64.0/21' - - '45.121.72.0/22' - - '45.121.92.0/22' - - '45.121.96.0/22' - - '45.121.172.0/22' - - '45.121.176.0/22' - - '45.121.240.0/20' - - '45.122.0.0/19' - - '45.122.32.0/21' - - '45.122.40.0/22' - - '45.122.60.0/22' - - '45.122.64.0/19' - - '45.122.96.0/20' - - '45.122.112.0/21' - - '45.122.160.0/19' - - '45.122.192.0/20' - - '45.122.208.0/21' - - '45.122.216.0/22' - - '45.123.28.0/22' - - '45.123.32.0/21' - - '45.123.44.0/22' - - '45.123.48.0/20' - - '45.123.64.0/20' - - '45.123.80.0/21' - - '45.123.120.0/22' - - '45.123.128.0/21' - - '45.123.136.0/22' - - '45.123.148.0/22' - - '45.123.152.0/21' - - '45.123.164.0/22' - - '45.123.168.0/21' - - '45.123.176.0/21' - - '45.123.184.0/22' - - '45.123.204.0/22' - - '45.123.212.0/22' - - '45.123.224.0/19' - - '45.124.0.0/22' - - '45.124.20.0/22' - - '45.124.28.0/22' - - '45.124.32.0/21' - - '45.124.44.0/22' - - '45.124.68.0/22' - - '45.124.76.0/22' - - '45.124.80.0/22' - - '45.124.100.0/22' - - '45.124.124.0/22' - - '45.124.172.0/22' - - '45.124.176.0/22' - - '45.124.208.0/22' - - '45.124.248.0/22' - - '45.125.24.0/22' - - '45.125.44.0/22' - - '45.125.52.0/22' - - '45.125.56.0/22' - - '45.125.76.0/22' - - '45.125.80.0/20' - - '45.125.96.0/21' - - '45.125.136.0/23' - - '45.125.138.0/24' - - '45.126.48.0/21' - - '45.126.108.0/22' - - '45.126.112.0/21' - - '45.126.120.0/22' - - '45.126.220.0/22' - - '45.127.8.0/21' - - '45.127.128.0/22' - - '45.127.144.0/21' - - '45.127.156.0/22' - - '45.248.8.0/22' - - '45.248.80.0/22' - - '45.248.88.0/22' - - '45.248.96.0/20' - - '45.248.128.0/21' - - '45.248.204.0/22' - - '45.248.208.0/20' - - '45.248.224.0/19' - - '45.249.0.0/21' - - '45.249.12.0/22' - - '45.249.16.0/20' - - '45.249.32.0/21' - - '45.249.112.0/22' - - '45.249.188.0/22' - - '45.249.192.0/20' - - '45.249.208.0/21' - - '45.250.12.0/22' - - '45.250.16.0/22' - - '45.250.28.0/22' - - '45.250.32.0/21' - - '45.250.40.0/22' - - '45.250.76.0/22' - - '45.250.80.0/20' - - '45.250.96.0/22' - - '45.250.104.0/21' - - '45.250.112.0/20' - - '45.250.128.0/20' - - '45.250.144.0/21' - - '45.250.152.0/22' - - '45.250.164.0/22' - - '45.250.180.0/22' - - '45.250.184.0/21' - - '45.250.192.0/22' - - '45.251.0.0/22' - - '45.251.8.0/22' - - '45.251.16.0/21' - - '45.251.52.0/22' - - '45.251.84.0/22' - - '45.251.88.0/21' - - '45.251.96.0/21' - - '45.251.120.0/21' - - '45.251.138.0/23' - - '45.251.140.0/22' - - '45.251.144.0/20' - - '45.251.160.0/19' - - '45.251.192.0/19' - - '45.251.224.0/22' - - '45.252.0.0/19' - - '45.252.32.0/20' - - '45.252.48.0/22' - - '45.252.84.0/22' - - '45.252.88.0/21' - - '45.252.96.0/19' - - '45.252.128.0/19' - - '45.252.160.0/20' - - '45.252.176.0/22' - - '45.252.192.0/19' - - '45.252.224.0/21' - - '45.252.232.0/22' - - '45.253.0.0/18' - - '45.253.64.0/20' - - '45.253.80.0/21' - - '45.253.92.0/22' - - '45.253.96.0/20' - - '45.253.112.0/21' - - '45.253.120.0/22' - - '45.253.132.0/22' - - '45.253.136.0/21' - - '45.253.144.0/20' - - '45.253.160.0/19' - - '45.253.192.0/19' - - '45.253.224.0/20' - - '45.253.240.0/22' - - '45.254.0.0/20' - - '45.254.16.0/21' - - '45.254.28.0/22' - - '45.254.40.0/22' - - '45.254.48.0/20' - - '45.254.64.0/18' - - '45.254.128.0/18' - - '45.254.192.0/19' - - '45.254.224.0/21' - - '45.254.236.0/22' - - '45.254.248.0/22' - - '45.255.0.0/18' - - '45.255.64.0/19' - - '45.255.96.0/20' - - '45.255.112.0/21' - - '45.255.120.0/22' - - '45.255.136.0/21' - - '45.255.144.0/20' - - '45.255.160.0/19' - - '45.255.192.0/19' - - '45.255.224.0/20' - - '45.255.240.0/21' - - '45.255.248.0/22' - - '46.248.24.0/23' - - '47.92.0.0/14' - - '47.96.0.0/11' - - '49.4.0.0/14' - - '49.51.57.0/24' - - '49.51.58.0/23' - - '49.51.60.0/23' - - '49.51.110.0/23' - - '49.51.112.0/20' - - '49.52.0.0/14' - - '49.64.0.0/11' - - '49.112.0.0/13' - - '49.120.0.0/14' - - '49.128.0.0/24' - - '49.128.2.0/23' - - '49.140.0.0/15' - - '49.152.0.0/14' - - '49.208.0.0/14' - - '49.220.0.0/14' - - '49.232.0.0/14' - - '49.239.0.0/18' - - '49.239.192.0/18' - - '52.80.0.0/14' - - '52.93.242.120/29' - - '52.93.242.128/25' - - '52.94.249.0/27' - - '52.130.0.0/15' - - '54.222.0.0/15' - - '54.240.224.0/24' - - '58.14.0.0/15' - - '58.16.0.0/13' - - '58.24.0.0/15' - - '58.30.0.0/15' - - '58.32.0.0/11' - - '58.65.232.0/21' - - '58.66.0.0/15' - - '58.68.128.0/19' - - '58.68.160.0/21' - - '58.68.200.0/21' - - '58.68.208.0/20' - - '58.68.224.0/19' - - '58.82.0.0/17' - - '58.83.0.0/16' - - '58.87.64.0/18' - - '58.99.128.0/17' - - '58.100.0.0/15' - - '58.116.0.0/14' - - '58.128.0.0/13' - - '58.144.0.0/16' - - '58.154.0.0/15' - - '58.192.0.0/11' - - '58.240.0.0/12' - - '59.32.0.0/11' - - '59.64.0.0/12' - - '59.80.0.0/15' - - '59.82.0.0/16' - - '59.83.0.0/18' - - '59.83.144.0/20' - - '59.83.160.0/20' - - '59.83.180.0/22' - - '59.83.184.0/21' - - '59.83.192.0/19' - - '59.83.224.0/21' - - '59.83.232.0/22' - - '59.107.0.0/16' - - '59.108.0.0/14' - - '59.151.0.0/17' - - '59.152.16.0/20' - - '59.152.36.0/22' - - '59.152.64.0/20' - - '59.152.112.0/21' - - '59.153.4.0/22' - - '59.153.32.0/22' - - '59.153.64.0/21' - - '59.153.72.0/22' - - '59.153.92.0/22' - - '59.153.136.0/22' - - '59.153.152.0/22' - - '59.153.159.0/24' - - '59.153.164.0/22' - - '59.153.168.0/21' - - '59.153.176.0/20' - - '59.153.192.0/22' - - '59.155.0.0/16' - - '59.172.0.0/14' - - '59.191.0.0/17' - - '59.192.0.0/10' - - '60.0.0.0/11' - - '60.55.0.0/16' - - '60.63.0.0/16' - - '60.160.0.0/11' - - '60.194.0.0/15' - - '60.200.0.0/13' - - '60.208.0.0/12' - - '60.232.0.0/15' - - '60.235.0.0/16' - - '60.245.128.0/17' - - '60.247.0.0/16' - - '60.252.0.0/16' - - '60.253.128.0/17' - - '60.255.0.0/16' - - '61.4.81.0/24' - - '61.4.82.0/23' - - '61.4.84.0/22' - - '61.4.88.0/21' - - '61.4.176.0/20' - - '61.8.160.0/20' - - '61.14.212.0/22' - - '61.14.216.0/21' - - '61.14.240.0/21' - - '61.28.0.0/17' - - '61.29.128.0/18' - - '61.29.194.0/23' - - '61.29.196.0/22' - - '61.29.200.0/21' - - '61.29.208.0/20' - - '61.29.224.0/20' - - '61.45.128.0/18' - - '61.45.224.0/20' - - '61.47.128.0/18' - - '61.48.0.0/13' - - '61.87.192.0/18' - - '61.128.0.0/10' - - '61.232.0.0/14' - - '61.236.0.0/15' - - '61.240.0.0/14' - - '62.3.6.0/24' - - '62.234.0.0/16' - - '64.188.38.0/23' - - '64.188.40.0/22' - - '64.188.44.0/23' - - '68.79.0.0/18' - - '69.230.192.0/18' - - '69.231.128.0/18' - - '69.234.192.0/18' - - '69.235.128.0/18' - - '71.131.192.0/18' - - '71.132.0.0/18' - - '71.136.64.0/18' - - '71.137.0.0/18' - - '72.163.240.0/23' - - '72.163.248.0/22' - - '81.68.0.0/14' - - '82.156.0.0/15' - - '87.254.207.0/24' - - '93.183.14.0/24' - - '93.183.18.0/24' - - '94.191.0.0/17' - - '101.0.0.0/22' - - '101.1.0.0/22' - - '101.2.172.0/22' - - '101.4.0.0/14' - - '101.16.0.0/12' - - '101.33.128.0/17' - - '101.34.0.0/15' - - '101.36.0.0/18' - - '101.36.64.0/20' - - '101.36.88.0/21' - - '101.36.128.0/17' - - '101.37.0.0/16' - - '101.38.0.0/15' - - '101.40.0.0/14' - - '101.45.0.0/16' - - '101.46.0.0/15' - - '101.48.0.0/15' - - '101.50.8.0/21' - - '101.50.56.0/22' - - '101.52.0.0/16' - - '101.53.100.0/22' - - '101.54.0.0/16' - - '101.55.224.0/21' - - '101.64.0.0/13' - - '101.72.0.0/14' - - '101.76.0.0/15' - - '101.78.0.0/22' - - '101.78.32.0/19' - - '101.80.0.0/12' - - '101.96.0.0/21' - - '101.96.8.0/22' - - '101.96.16.0/20' - - '101.96.128.0/17' - - '101.99.96.0/19' - - '101.101.64.0/19' - - '101.101.100.0/24' - - '101.101.102.0/23' - - '101.101.104.0/21' - - '101.101.112.0/20' - - '101.102.64.0/19' - - '101.102.100.0/23' - - '101.102.102.0/24' - - '101.102.104.0/21' - - '101.102.112.0/20' - - '101.104.0.0/14' - - '101.110.64.0/19' - - '101.110.96.0/20' - - '101.110.116.0/22' - - '101.110.120.0/21' - - '101.120.0.0/14' - - '101.124.0.0/15' - - '101.126.0.0/16' - - '101.128.0.0/22' - - '101.128.8.0/21' - - '101.128.16.0/20' - - '101.128.32.0/19' - - '101.129.0.0/16' - - '101.130.0.0/15' - - '101.132.0.0/15' - - '101.134.0.0/17' - - '101.134.128.0/19' - - '101.134.160.0/20' - - '101.134.176.0/21' - - '101.134.184.0/22' - - '101.134.189.0/24' - - '101.134.190.0/23' - - '101.134.192.0/18' - - '101.135.0.0/16' - - '101.144.0.0/12' - - '101.192.0.0/14' - - '101.196.0.0/16' - - '101.198.0.0/22' - - '101.198.128.0/24' - - '101.198.170.0/23' - - '101.198.172.0/22' - - '101.198.176.0/21' - - '101.198.184.0/22' - - '101.198.189.0/24' - - '101.198.190.0/23' - - '101.198.194.0/24' - - '101.198.196.0/22' - - '101.198.200.0/22' - - '101.198.224.0/19' - - '101.199.0.0/19' - - '101.199.48.0/20' - - '101.199.64.0/18' - - '101.199.128.0/17' - - '101.200.0.0/15' - - '101.203.128.0/19' - - '101.203.160.0/21' - - '101.203.172.0/22' - - '101.203.176.0/20' - - '101.204.0.0/14' - - '101.224.0.0/13' - - '101.232.0.0/15' - - '101.234.64.0/21' - - '101.234.76.0/22' - - '101.234.80.0/20' - - '101.234.96.0/19' - - '101.236.0.0/14' - - '101.240.0.0/13' - - '101.248.0.0/15' - - '101.251.0.0/22' - - '101.251.8.0/21' - - '101.251.16.0/20' - - '101.251.32.0/19' - - '101.251.64.0/18' - - '101.251.128.0/17' - - '101.252.0.0/15' - - '101.254.0.0/16' - - '103.1.8.0/22' - - '103.1.20.0/22' - - '103.1.24.0/22' - - '103.1.88.0/22' - - '103.1.168.0/22' - - '103.2.108.0/22' - - '103.2.156.0/22' - - '103.2.164.0/22' - - '103.2.200.0/21' - - '103.2.208.0/21' - - '103.3.84.0/22' - - '103.3.88.0/21' - - '103.3.96.0/19' - - '103.3.128.0/20' - - '103.3.148.0/22' - - '103.3.152.0/21' - - '103.4.56.0/22' - - '103.4.168.0/22' - - '103.4.184.0/22' - - '103.5.36.0/22' - - '103.5.52.0/24' - - '103.5.56.0/22' - - '103.5.152.0/22' - - '103.5.168.0/22' - - '103.5.192.0/22' - - '103.5.252.0/22' - - '103.6.76.0/22' - - '103.6.108.0/22' - - '103.6.120.0/22' - - '103.6.220.0/22' - - '103.7.140.0/22' - - '103.7.212.0/22' - - '103.7.216.0/21' - - '103.8.0.0/21' - - '103.8.8.0/22' - - '103.8.32.0/22' - - '103.8.52.0/22' - - '103.8.68.0/22' - - '103.8.108.0/22' - - '103.8.156.0/22' - - '103.8.200.0/21' - - '103.8.220.0/22' - - '103.9.8.0/22' - - '103.9.24.0/22' - - '103.9.108.0/22' - - '103.9.152.0/22' - - '103.9.248.0/21' - - '103.10.0.0/22' - - '103.10.16.0/22' - - '103.10.84.0/22' - - '103.10.140.0/22' - - '103.11.16.0/22' - - '103.11.168.0/22' - - '103.11.180.0/22' - - '103.12.32.0/22' - - '103.12.136.0/22' - - '103.12.184.0/22' - - '103.12.232.0/22' - - '103.13.12.0/22' - - '103.13.124.0/22' - - '103.13.145.0/24' - - '103.13.147.0/24' - - '103.13.196.0/22' - - '103.13.244.0/22' - - '103.14.84.0/22' - - '103.14.132.0/22' - - '103.14.136.0/22' - - '103.14.156.0/22' - - '103.14.240.0/22' - - '103.15.4.0/22' - - '103.15.8.0/22' - - '103.15.16.0/22' - - '103.15.96.0/22' - - '103.15.200.0/22' - - '103.16.52.0/22' - - '103.16.80.0/21' - - '103.16.88.0/22' - - '103.16.108.0/22' - - '103.16.124.0/22' - - '103.17.40.0/22' - - '103.17.64.0/22' - - '103.17.120.0/23' - - '103.17.136.0/22' - - '103.17.160.0/22' - - '103.17.204.0/22' - - '103.17.228.0/22' - - '103.18.192.0/22' - - '103.18.208.0/21' - - '103.18.224.0/22' - - '103.19.12.0/22' - - '103.19.40.0/21' - - '103.19.64.0/21' - - '103.19.72.0/22' - - '103.19.232.0/22' - - '103.20.12.0/22' - - '103.20.32.0/23' - - '103.20.34.0/24' - - '103.20.68.0/22' - - '103.20.112.0/22' - - '103.20.128.0/22' - - '103.20.160.0/22' - - '103.20.248.0/22' - - '103.21.112.0/21' - - '103.21.140.0/22' - - '103.21.176.0/22' - - '103.21.240.0/24' - - '103.21.242.0/23' - - '103.22.0.0/18' - - '103.22.64.0/19' - - '103.22.100.0/22' - - '103.22.104.0/21' - - '103.22.112.0/20' - - '103.22.188.0/22' - - '103.22.228.0/22' - - '103.22.252.0/22' - - '103.23.8.0/22' - - '103.23.56.0/22' - - '103.23.160.0/22' - - '103.23.164.0/23' - - '103.23.166.0/24' - - '103.23.176.0/22' - - '103.23.228.0/22' - - '103.24.24.0/22' - - '103.24.116.0/22' - - '103.24.128.0/22' - - '103.24.144.0/22' - - '103.24.176.0/22' - - '103.24.184.0/22' - - '103.24.228.0/22' - - '103.24.252.0/22' - - '103.25.20.0/22' - - '103.25.24.0/21' - - '103.25.32.0/21' - - '103.25.40.0/22' - - '103.25.48.0/22' - - '103.25.64.0/21' - - '103.25.148.0/22' - - '103.25.156.0/22' - - '103.25.216.0/22' - - '103.26.0.0/22' - - '103.26.64.0/22' - - '103.26.76.0/22' - - '103.26.116.0/22' - - '103.26.156.0/22' - - '103.26.160.0/22' - - '103.26.228.0/22' - - '103.26.240.0/22' - - '103.27.4.0/22' - - '103.27.12.0/22' - - '103.27.24.0/22' - - '103.27.56.0/22' - - '103.27.96.0/22' - - '103.27.240.0/22' - - '103.28.4.0/22' - - '103.28.8.0/22' - - '103.28.184.0/22' - - '103.28.204.0/22' - - '103.28.212.0/22' - - '103.29.16.0/22' - - '103.29.128.0/21' - - '103.29.136.0/22' - - '103.30.20.0/22' - - '103.30.96.0/22' - - '103.30.148.0/22' - - '103.30.228.0/22' - - '103.30.236.0/22' - - '103.31.0.0/22' - - '103.31.48.0/21' - - '103.31.60.0/22' - - '103.31.64.0/21' - - '103.31.72.0/24' - - '103.31.148.0/22' - - '103.31.160.0/22' - - '103.31.168.0/22' - - '103.31.200.0/22' - - '103.32.0.0/15' - - '103.34.0.0/16' - - '103.35.0.0/19' - - '103.35.32.0/20' - - '103.35.48.0/22' - - '103.35.104.0/22' - - '103.35.180.0/23' - - '103.35.220.0/22' - - '103.36.28.0/22' - - '103.36.36.0/22' - - '103.36.56.0/21' - - '103.36.64.0/22' - - '103.36.72.0/22' - - '103.36.96.0/22' - - '103.36.132.0/22' - - '103.36.136.0/22' - - '103.36.160.0/19' - - '103.36.192.0/19' - - '103.36.224.0/20' - - '103.36.240.0/21' - - '103.37.12.0/22' - - '103.37.16.0/22' - - '103.37.24.0/22' - - '103.37.44.0/22' - - '103.37.52.0/22' - - '103.37.56.0/22' - - '103.37.72.0/22' - - '103.37.100.0/22' - - '103.37.104.0/22' - - '103.37.136.0/21' - - '103.37.144.0/20' - - '103.37.160.0/21' - - '103.37.172.0/22' - - '103.37.176.0/22' - - '103.37.188.0/22' - - '103.37.208.0/20' - - '103.37.252.0/22' - - '103.38.0.0/22' - - '103.38.32.0/22' - - '103.38.40.0/21' - - '103.38.76.0/22' - - '103.38.84.0/22' - - '103.38.92.0/22' - - '103.38.96.0/22' - - '103.38.116.0/22' - - '103.38.132.0/22' - - '103.38.140.0/22' - - '103.38.220.0/22' - - '103.38.224.0/21' - - '103.38.232.0/22' - - '103.38.252.0/23' - - '103.39.64.0/22' - - '103.39.88.0/22' - - '103.39.100.0/22' - - '103.39.104.0/22' - - '103.39.160.0/19' - - '103.39.200.0/21' - - '103.39.208.0/20' - - '103.39.224.0/21' - - '103.39.232.0/22' - - '103.40.12.0/22' - - '103.40.16.0/20' - - '103.40.32.0/20' - - '103.40.88.0/22' - - '103.40.192.0/22' - - '103.40.212.0/22' - - '103.40.220.0/22' - - '103.40.228.0/22' - - '103.40.232.0/21' - - '103.40.240.0/20' - - '103.41.0.0/22' - - '103.41.52.0/22' - - '103.41.116.0/22' - - '103.41.140.0/22' - - '103.41.148.0/22' - - '103.41.152.0/22' - - '103.41.160.0/21' - - '103.41.220.0/22' - - '103.41.224.0/21' - - '103.42.8.0/22' - - '103.42.24.0/22' - - '103.42.32.0/22' - - '103.42.64.0/21' - - '103.42.76.0/22' - - '103.42.232.0/22' - - '103.43.26.0/23' - - '103.43.96.0/21' - - '103.43.104.0/22' - - '103.43.124.0/22' - - '103.43.184.0/22' - - '103.43.192.0/21' - - '103.43.208.0/22' - - '103.43.220.0/22' - - '103.43.224.0/22' - - '103.43.240.0/22' - - '103.44.58.0/23' - - '103.44.80.0/22' - - '103.44.120.0/21' - - '103.44.144.0/22' - - '103.44.152.0/22' - - '103.44.168.0/22' - - '103.44.176.0/20' - - '103.44.192.0/20' - - '103.44.224.0/22' - - '103.44.236.0/22' - - '103.44.240.0/20' - - '103.45.0.0/18' - - '103.45.72.0/21' - - '103.45.80.0/20' - - '103.45.96.0/19' - - '103.45.128.0/18' - - '103.45.192.0/19' - - '103.45.224.0/22' - - '103.45.248.0/22' - - '103.46.0.0/22' - - '103.46.12.0/22' - - '103.46.16.0/20' - - '103.46.32.0/19' - - '103.46.64.0/18' - - '103.46.128.0/21' - - '103.46.136.0/22' - - '103.46.152.0/21' - - '103.46.160.0/20' - - '103.46.176.0/21' - - '103.46.244.0/22' - - '103.46.248.0/22' - - '103.47.4.0/22' - - '103.47.20.0/22' - - '103.47.36.0/22' - - '103.47.40.0/22' - - '103.47.48.0/22' - - '103.47.80.0/22' - - '103.47.96.0/22' - - '103.47.116.0/22' - - '103.47.120.0/22' - - '103.47.136.0/21' - - '103.47.212.0/22' - - '103.48.52.0/22' - - '103.48.92.0/22' - - '103.48.148.0/22' - - '103.48.152.0/22' - - '103.48.202.0/23' - - '103.48.216.0/21' - - '103.48.224.0/20' - - '103.48.240.0/21' - - '103.49.12.0/22' - - '103.49.20.0/22' - - '103.49.72.0/21' - - '103.49.96.0/22' - - '103.49.108.0/22' - - '103.49.176.0/21' - - '103.50.36.0/22' - - '103.50.44.0/22' - - '103.50.48.0/20' - - '103.50.64.0/21' - - '103.50.72.0/22' - - '103.50.108.0/22' - - '103.50.112.0/20' - - '103.50.132.0/22' - - '103.50.136.0/21' - - '103.50.172.0/22' - - '103.50.176.0/20' - - '103.50.192.0/21' - - '103.50.200.0/22' - - '103.50.220.0/22' - - '103.50.224.0/20' - - '103.50.240.0/21' - - '103.50.248.0/22' - - '103.52.40.0/22' - - '103.52.72.0/21' - - '103.52.80.0/21' - - '103.52.96.0/21' - - '103.52.104.0/22' - - '103.52.160.0/21' - - '103.52.172.0/22' - - '103.52.176.0/22' - - '103.52.184.0/22' - - '103.52.196.0/22' - - '103.53.64.0/21' - - '103.53.92.0/22' - - '103.53.124.0/22' - - '103.53.128.0/20' - - '103.53.144.0/22' - - '103.53.160.0/22' - - '103.53.180.0/22' - - '103.53.204.0/22' - - '103.53.208.0/21' - - '103.53.236.0/22' - - '103.53.248.0/22' - - '103.54.8.0/22' - - '103.54.48.0/22' - - '103.54.160.0/21' - - '103.54.212.0/22' - - '103.54.228.0/22' - - '103.54.240.0/22' - - '103.55.80.0/22' - - '103.55.120.0/22' - - '103.55.152.0/22' - - '103.55.172.0/22' - - '103.55.204.0/22' - - '103.55.208.0/22' - - '103.55.228.0/22' - - '103.55.236.0/22' - - '103.55.240.0/22' - - '103.56.20.0/22' - - '103.56.32.0/22' - - '103.56.56.0/21' - - '103.56.72.0/21' - - '103.56.100.0/22' - - '103.56.104.0/22' - - '103.56.140.0/22' - - '103.56.152.0/22' - - '103.56.184.0/22' - - '103.56.200.0/22' - - '103.57.12.0/22' - - '103.57.52.0/22' - - '103.57.56.0/22' - - '103.57.76.0/22' - - '103.57.136.0/22' - - '103.57.196.0/22' - - '103.58.24.0/22' - - '103.59.76.0/22' - - '103.59.112.0/21' - - '103.59.120.0/24' - - '103.59.123.0/24' - - '103.59.124.0/22' - - '103.59.128.0/22' - - '103.59.148.0/22' - - '103.60.32.0/22' - - '103.60.44.0/22' - - '103.60.164.0/22' - - '103.60.228.0/22' - - '103.60.236.0/22' - - '103.61.60.0/24' - - '103.61.104.0/22' - - '103.61.140.0/22' - - '103.61.152.0/21' - - '103.61.160.0/22' - - '103.61.172.0/22' - - '103.61.176.0/22' - - '103.62.24.0/22' - - '103.62.72.0/21' - - '103.62.80.0/21' - - '103.62.88.0/22' - - '103.62.96.0/19' - - '103.62.128.0/21' - - '103.62.156.0/22' - - '103.62.160.0/19' - - '103.62.192.0/22' - - '103.62.204.0/22' - - '103.62.208.0/20' - - '103.62.224.0/22' - - '103.63.32.0/19' - - '103.63.64.0/20' - - '103.63.80.0/21' - - '103.63.88.0/22' - - '103.63.140.0/22' - - '103.63.144.0/22' - - '103.63.152.0/22' - - '103.63.160.0/20' - - '103.63.176.0/21' - - '103.63.184.0/22' - - '103.63.192.0/20' - - '103.63.208.0/22' - - '103.63.240.0/20' - - '103.64.0.0/21' - - '103.64.24.0/21' - - '103.64.32.0/19' - - '103.64.64.0/18' - - '103.64.140.0/22' - - '103.64.144.0/22' - - '103.64.152.0/21' - - '103.64.160.0/19' - - '103.64.192.0/18' - - '103.65.0.0/20' - - '103.65.16.0/22' - - '103.65.48.0/20' - - '103.65.64.0/19' - - '103.65.100.0/22' - - '103.65.104.0/21' - - '103.65.112.0/20' - - '103.65.128.0/21' - - '103.65.136.0/22' - - '103.65.144.0/20' - - '103.65.160.0/20' - - '103.66.32.0/22' - - '103.66.40.0/22' - - '103.66.108.0/22' - - '103.66.200.0/22' - - '103.66.240.0/20' - - '103.67.0.0/21' - - '103.67.8.0/22' - - '103.67.40.0/21' - - '103.67.48.0/20' - - '103.67.64.0/18' - - '103.67.128.0/20' - - '103.67.144.0/21' - - '103.67.172.0/24' - - '103.67.175.0/24' - - '103.67.192.0/22' - - '103.67.212.0/22' - - '103.68.88.0/22' - - '103.68.100.0/22' - - '103.68.128.0/22' - - '103.69.16.0/22' - - '103.70.8.0/22' - - '103.70.148.0/22' - - '103.70.236.0/22' - - '103.70.252.0/22' - - '103.71.0.0/22' - - '103.71.68.0/22' - - '103.71.72.0/22' - - '103.71.80.0/21' - - '103.71.88.0/22' - - '103.71.120.0/21' - - '103.71.128.0/22' - - '103.71.196.0/22' - - '103.71.200.0/22' - - '103.71.232.0/22' - - '103.72.12.0/22' - - '103.72.16.0/20' - - '103.72.32.0/20' - - '103.72.48.0/21' - - '103.72.112.0/21' - - '103.72.124.0/22' - - '103.72.128.0/21' - - '103.72.149.0/24' - - '103.72.150.0/23' - - '103.72.172.0/22' - - '103.72.180.0/22' - - '103.72.224.0/19' - - '103.73.0.0/19' - - '103.73.48.0/22' - - '103.73.116.0/22' - - '103.73.120.0/22' - - '103.73.128.0/20' - - '103.73.168.0/22' - - '103.73.176.0/22' - - '103.73.204.0/22' - - '103.73.208.0/22' - - '103.73.240.0/23' - - '103.73.244.0/22' - - '103.73.248.0/22' - - '103.74.24.0/21' - - '103.74.32.0/20' - - '103.74.48.0/22' - - '103.74.56.0/21' - - '103.74.80.0/22' - - '103.74.124.0/22' - - '103.74.148.0/22' - - '103.74.152.0/21' - - '103.74.204.0/22' - - '103.74.232.0/22' - - '103.75.87.0/24' - - '103.75.88.0/21' - - '103.75.104.0/21' - - '103.75.112.0/22' - - '103.75.120.0/22' - - '103.75.128.0/22' - - '103.75.144.0/23' - - '103.75.146.0/24' - - '103.75.152.0/22' - - '103.76.60.0/22' - - '103.76.64.0/21' - - '103.76.72.0/22' - - '103.76.92.0/22' - - '103.76.216.0/21' - - '103.76.224.0/22' - - '103.77.28.0/22' - - '103.77.52.0/22' - - '103.77.56.0/22' - - '103.77.88.0/22' - - '103.77.132.0/22' - - '103.77.148.0/22' - - '103.77.220.0/22' - - '103.78.56.0/21' - - '103.78.64.0/22' - - '103.78.124.0/22' - - '103.78.172.0/22' - - '103.78.176.0/22' - - '103.78.196.0/22' - - '103.78.228.0/22' - - '103.79.24.0/21' - - '103.79.36.0/22' - - '103.79.40.0/21' - - '103.79.56.0/21' - - '103.79.64.0/21' - - '103.79.80.0/21' - - '103.79.136.0/22' - - '103.79.188.0/22' - - '103.79.192.0/20' - - '103.79.208.0/21' - - '103.80.44.0/22' - - '103.80.72.0/22' - - '103.80.176.0/21' - - '103.80.184.0/22' - - '103.80.192.0/22' - - '103.80.200.0/22' - - '103.80.232.0/22' - - '103.81.4.0/22' - - '103.81.44.0/22' - - '103.81.48.0/22' - - '103.81.96.0/22' - - '103.81.120.0/22' - - '103.81.148.0/22' - - '103.81.164.0/22' - - '103.81.200.0/22' - - '103.81.232.0/22' - - '103.82.60.0/22' - - '103.82.68.0/22' - - '103.82.84.0/22' - - '103.82.104.0/22' - - '103.82.224.0/22' - - '103.82.236.0/22' - - '103.83.44.0/22' - - '103.83.52.0/22' - - '103.83.60.0/22' - - '103.83.72.0/22' - - '103.83.112.0/22' - - '103.83.132.0/22' - - '103.83.180.0/22' - - '103.84.0.0/22' - - '103.84.12.0/22' - - '103.84.20.0/22' - - '103.84.24.0/21' - - '103.84.48.0/22' - - '103.84.56.0/22' - - '103.84.64.0/22' - - '103.84.72.0/22' - - '103.85.44.0/22' - - '103.85.48.0/21' - - '103.85.56.0/22' - - '103.85.84.0/22' - - '103.85.136.0/22' - - '103.85.144.0/22' - - '103.85.164.0/22' - - '103.85.168.0/21' - - '103.85.176.0/22' - - '103.86.28.0/22' - - '103.86.32.0/22' - - '103.86.60.0/22' - - '103.86.129.0/24' - - '103.86.204.0/22' - - '103.86.208.0/20' - - '103.86.224.0/19' - - '103.87.0.0/21' - - '103.87.20.0/22' - - '103.87.32.0/22' - - '103.87.96.0/22' - - '103.87.132.0/22' - - '103.87.180.0/22' - - '103.87.224.0/22' - - '103.88.4.0/22' - - '103.88.8.0/21' - - '103.88.16.0/21' - - '103.88.32.0/21' - - '103.88.60.0/22' - - '103.88.64.0/22' - - '103.88.72.0/22' - - '103.88.96.0/22' - - '103.88.152.0/23' - - '103.88.164.0/22' - - '103.88.212.0/22' - - '103.89.28.0/22' - - '103.89.96.0/20' - - '103.89.112.0/22' - - '103.89.148.0/22' - - '103.89.172.0/22' - - '103.89.184.0/21' - - '103.89.192.0/19' - - '103.89.224.0/21' - - '103.90.52.0/22' - - '103.90.92.0/22' - - '103.90.100.0/22' - - '103.90.104.0/21' - - '103.90.112.0/20' - - '103.90.128.0/21' - - '103.90.152.0/22' - - '103.90.168.0/22' - - '103.90.173.0/24' - - '103.90.176.0/22' - - '103.90.188.0/22' - - '103.90.192.0/22' - - '103.91.36.0/22' - - '103.91.40.0/22' - - '103.91.108.0/22' - - '103.91.152.0/22' - - '103.91.176.0/22' - - '103.91.200.0/22' - - '103.91.208.0/21' - - '103.91.236.0/22' - - '103.92.48.0/20' - - '103.92.64.0/20' - - '103.92.80.0/22' - - '103.92.88.0/22' - - '103.92.108.0/22' - - '103.92.124.0/22' - - '103.92.132.0/22' - - '103.92.156.0/22' - - '103.92.164.0/22' - - '103.92.168.0/21' - - '103.92.176.0/20' - - '103.92.192.0/22' - - '103.92.236.0/22' - - '103.92.240.0/20' - - '103.93.0.0/21' - - '103.93.28.0/22' - - '103.93.84.0/22' - - '103.93.152.0/22' - - '103.93.180.0/22' - - '103.93.204.0/22' - - '103.94.12.0/22' - - '103.94.20.0/22' - - '103.94.30.0/23' - - '103.94.32.0/20' - - '103.94.72.0/22' - - '103.94.88.0/22' - - '103.94.116.0/22' - - '103.94.160.0/22' - - '103.94.200.0/22' - - '103.95.52.0/22' - - '103.95.68.0/22' - - '103.95.88.0/21' - - '103.95.136.0/21' - - '103.95.144.0/22' - - '103.95.152.0/22' - - '103.95.216.0/21' - - '103.95.224.0/22' - - '103.95.236.0/22' - - '103.95.240.0/20' - - '103.96.8.0/22' - - '103.96.124.0/22' - - '103.96.136.0/22' - - '103.96.152.0/21' - - '103.96.160.0/19' - - '103.96.192.0/20' - - '103.96.208.0/21' - - '103.96.216.0/22' - - '103.97.40.0/22' - - '103.97.60.0/23' - - '103.97.112.0/21' - - '103.97.148.0/22' - - '103.97.188.0/22' - - '103.97.192.0/22' - - '103.98.40.0/21' - - '103.98.48.0/22' - - '103.98.56.0/22' - - '103.98.80.0/22' - - '103.98.88.0/22' - - '103.98.100.0/22' - - '103.98.124.0/24' - - '103.98.126.0/24' - - '103.98.136.0/21' - - '103.98.144.0/22' - - '103.98.164.0/22' - - '103.98.168.0/22' - - '103.98.180.0/22' - - '103.98.196.0/22' - - '103.98.216.0/21' - - '103.98.224.0/21' - - '103.98.232.0/22' - - '103.98.240.0/21' - - '103.98.250.0/24' - - '103.98.252.0/22' - - '103.99.55.0/24' - - '103.99.56.0/22' - - '103.99.104.0/22' - - '103.99.116.0/22' - - '103.99.120.0/22' - - '103.99.132.0/22' - - '103.99.136.0/21' - - '103.99.144.0/22' - - '103.99.152.0/22' - - '103.99.220.0/22' - - '103.99.232.0/21' - - '103.100.0.0/22' - - '103.100.32.0/22' - - '103.100.40.0/22' - - '103.100.48.0/22' - - '103.100.56.0/22' - - '103.100.64.0/22' - - '103.100.88.0/22' - - '103.100.116.0/22' - - '103.100.144.0/22' - - '103.100.240.0/22' - - '103.100.248.0/21' - - '103.101.4.0/22' - - '103.101.8.0/21' - - '103.101.60.0/22' - - '103.101.121.0/24' - - '103.101.122.0/23' - - '103.101.124.0/24' - - '103.101.126.0/23' - - '103.101.144.0/21' - - '103.101.180.0/22' - - '103.101.184.0/22' - - '103.102.76.0/22' - - '103.102.80.0/22' - - '103.102.168.0/21' - - '103.102.180.0/22' - - '103.102.184.0/21' - - '103.102.192.0/22' - - '103.102.196.0/24' - - '103.102.200.0/22' - - '103.102.208.0/21' - - '103.103.12.0/22' - - '103.103.16.0/22' - - '103.103.36.0/22' - - '103.103.72.0/22' - - '103.103.188.0/22' - - '103.103.204.0/22' - - '103.104.36.0/22' - - '103.104.40.0/22' - - '103.104.64.0/22' - - '103.104.152.0/22' - - '103.104.252.0/22' - - '103.105.0.0/21' - - '103.105.12.0/22' - - '103.105.16.0/22' - - '103.105.60.0/22' - - '103.105.116.0/22' - - '103.105.180.0/22' - - '103.105.184.0/22' - - '103.105.200.0/21' - - '103.105.220.0/22' - - '103.106.36.0/22' - - '103.106.40.0/21' - - '103.106.60.0/22' - - '103.106.68.0/22' - - '103.106.96.0/22' - - '103.106.120.0/22' - - '103.106.128.0/21' - - '103.106.190.0/23' - - '103.106.196.0/22' - - '103.106.212.0/22' - - '103.106.252.0/22' - - '103.107.0.0/22' - - '103.107.28.0/22' - - '103.107.32.0/22' - - '103.107.44.0/22' - - '103.107.72.0/22' - - '103.107.164.0/22' - - '103.107.168.0/22' - - '103.107.188.0/22' - - '103.107.192.0/22' - - '103.107.208.0/20' - - '103.108.52.0/22' - - '103.108.160.0/22' - - '103.108.196.0/22' - - '103.108.208.0/21' - - '103.108.224.0/22' - - '103.108.244.0/22' - - '103.108.251.0/24' - - '103.109.20.0/22' - - '103.109.48.0/22' - - '103.109.88.0/22' - - '103.109.248.0/22' - - '103.110.32.0/22' - - '103.110.92.0/22' - - '103.110.119.0/24' - - '103.110.127.0/24' - - '103.110.128.0/23' - - '103.110.131.0/24' - - '103.110.132.0/22' - - '103.110.136.0/22' - - '103.110.156.0/22' - - '103.110.188.0/22' - - '103.110.204.0/22' - - '103.111.64.0/22' - - '103.111.172.0/22' - - '103.111.252.0/22' - - '103.112.72.0/22' - - '103.112.88.0/21' - - '103.112.108.0/22' - - '103.112.112.0/22' - - '103.112.140.0/22' - - '103.113.4.0/22' - - '103.113.144.0/22' - - '103.113.220.0/22' - - '103.113.232.0/21' - - '103.114.4.0/22' - - '103.114.68.0/22' - - '103.114.100.0/22' - - '103.114.148.0/22' - - '103.114.156.0/23' - - '103.114.176.0/22' - - '103.114.212.0/22' - - '103.114.236.0/22' - - '103.114.240.0/22' - - '103.115.52.0/22' - - '103.115.68.0/22' - - '103.115.92.0/22' - - '103.115.120.0/22' - - '103.115.148.0/22' - - '103.115.248.0/22' - - '103.116.76.0/22' - - '103.116.92.0/22' - - '103.116.120.0/22' - - '103.116.128.0/22' - - '103.116.184.0/22' - - '103.116.220.0/22' - - '103.116.224.0/21' - - '103.117.16.0/22' - - '103.117.88.0/22' - - '103.117.188.0/22' - - '103.117.220.0/22' - - '103.118.19.0/24' - - '103.118.52.0/22' - - '103.118.56.0/21' - - '103.118.64.0/21' - - '103.118.72.0/22' - - '103.118.88.0/22' - - '103.118.173.0/24' - - '103.119.115.0/24' - - '103.119.156.0/22' - - '103.119.180.0/22' - - '103.119.200.0/22' - - '103.119.224.0/23' - - '103.119.227.0/24' - - '103.120.52.0/22' - - '103.120.72.0/22' - - '103.120.76.0/24' - - '103.120.88.0/22' - - '103.120.96.0/22' - - '103.120.140.0/22' - - '103.120.196.0/22' - - '103.120.224.0/22' - - '103.121.52.0/22' - - '103.121.160.0/21' - - '103.121.250.0/24' - - '103.121.252.0/22' - - '103.122.48.0/22' - - '103.122.179.0/24' - - '103.122.192.0/22' - - '103.122.240.0/23' - - '103.122.242.0/24' - - '103.123.4.0/22' - - '103.123.56.0/22' - - '103.123.88.0/21' - - '103.123.116.0/22' - - '103.123.176.0/22' - - '103.123.200.0/21' - - '103.123.208.0/21' - - '103.124.24.0/22' - - '103.124.48.0/22' - - '103.124.64.0/22' - - '103.124.212.0/22' - - '103.124.216.0/22' - - '103.125.20.0/22' - - '103.125.44.0/22' - - '103.125.132.0/22' - - '103.125.164.0/22' - - '103.125.196.0/22' - - '103.125.236.0/22' - - '103.126.0.0/22' - - '103.126.16.0/23' - - '103.126.44.0/22' - - '103.126.124.0/22' - - '103.126.128.0/22' - - '103.129.53.0/24' - - '103.129.54.0/23' - - '103.129.148.0/22' - - '103.130.132.0/22' - - '103.130.160.0/22' - - '103.130.228.0/22' - - '103.131.20.0/22' - - '103.131.36.0/22' - - '103.131.152.0/22' - - '103.131.168.0/22' - - '103.131.224.0/21' - - '103.131.240.0/22' - - '103.132.60.0/22' - - '103.132.64.0/20' - - '103.132.80.0/22' - - '103.132.104.0/21' - - '103.132.112.0/21' - - '103.132.120.0/22' - - '103.132.188.0/22' - - '103.132.208.0/21' - - '103.133.12.0/22' - - '103.133.40.0/22' - - '103.133.128.0/22' - - '103.133.232.0/22' - - '103.134.196.0/22' - - '103.135.80.0/22' - - '103.135.124.0/22' - - '103.135.148.0/22' - - '103.135.156.0/22' - - '103.135.160.0/21' - - '103.135.176.0/22' - - '103.135.184.0/22' - - '103.135.192.0/21' - - '103.135.236.0/22' - - '103.136.128.0/22' - - '103.136.232.0/22' - - '103.137.58.0/23' - - '103.137.60.0/24' - - '103.137.136.0/23' - - '103.137.149.0/24' - - '103.137.180.0/22' - - '103.137.236.0/22' - - '103.138.2.0/23' - - '103.138.135.0/24' - - '103.138.208.0/23' - - '103.138.220.0/23' - - '103.138.248.0/23' - - '103.139.22.0/23' - - '103.139.134.0/23' - - '103.139.172.0/23' - - '103.139.204.0/23' - - '103.139.212.0/23' - - '103.140.14.0/23' - - '103.140.46.0/23' - - '103.140.140.0/23' - - '103.140.144.0/23' - - '103.140.192.0/23' - - '103.141.10.0/23' - - '103.141.58.0/23' - - '103.141.128.0/23' - - '103.141.186.0/23' - - '103.141.242.0/23' - - '103.142.0.0/23' - - '103.142.28.0/23' - - '103.142.58.0/23' - - '103.142.82.0/23' - - '103.142.96.0/23' - - '103.142.122.0/23' - - '103.142.128.0/23' - - '103.142.154.0/23' - - '103.142.156.0/23' - - '103.142.180.0/23' - - '103.142.186.0/23' - - '103.142.234.0/23' - - '103.142.238.0/23' - - '103.143.16.0/22' - - '103.143.31.0/24' - - '103.143.74.0/23' - - '103.143.124.0/23' - - '103.143.132.0/22' - - '103.143.174.0/23' - - '103.143.228.0/23' - - '103.144.66.0/23' - - '103.144.70.0/23' - - '103.144.72.0/23' - - '103.144.88.0/24' - - '103.144.136.0/23' - - '103.144.158.0/23' - - '103.145.42.0/23' - - '103.145.94.0/23' - - '103.145.98.0/23' - - '103.145.188.0/23' - - '103.146.6.0/23' - - '103.146.72.0/23' - - '103.146.126.0/23' - - '103.146.138.0/23' - - '103.146.236.0/23' - - '103.146.252.0/23' - - '103.147.124.0/23' - - '103.147.206.0/23' - - '103.148.174.0/23' - - '103.149.6.0/23' - - '103.149.17.0/24' - - '103.149.44.0/23' - - '103.149.210.0/23' - - '103.149.214.0/23' - - '103.149.220.0/23' - - '103.149.242.0/23' - - '103.149.244.0/22' - - '103.150.24.0/23' - - '103.150.66.0/23' - - '103.150.72.0/23' - - '103.150.122.0/23' - - '103.150.126.0/23' - - '103.150.128.0/23' - - '103.150.146.0/23' - - '103.150.164.0/23' - - '103.150.200.0/23' - - '103.150.216.0/23' - - '103.150.244.0/23' - - '103.151.142.0/23' - - '103.151.148.0/23' - - '103.151.158.0/23' - - '103.152.28.0/22' - - '103.152.56.0/23' - - '103.152.76.0/23' - - '103.152.80.0/23' - - '103.152.120.0/22' - - '103.152.152.0/23' - - '103.152.168.0/23' - - '103.152.186.0/23' - - '103.152.190.0/23' - - '103.152.192.0/23' - - '103.152.200.0/23' - - '103.152.208.0/23' - - '103.152.224.0/23' - - '103.152.250.0/23' - - '103.153.99.0/24' - - '103.153.114.0/23' - - '103.153.122.0/23' - - '103.153.132.0/23' - - '103.153.146.0/23' - - '103.153.160.0/23' - - '103.154.18.0/23' - - '103.154.30.0/23' - - '103.154.32.0/23' - - '103.154.40.0/23' - - '103.154.66.0/23' - - '103.154.162.0/23' - - '103.154.164.0/23' - - '103.154.168.0/23' - - '103.155.14.0/23' - - '103.155.17.0/24' - - '103.155.34.0/23' - - '103.155.48.0/23' - - '103.155.76.0/23' - - '103.155.101.0/24' - - '103.155.248.0/23' - - '103.156.28.0/23' - - '103.156.68.0/23' - - '103.156.78.0/23' - - '103.156.104.0/23' - - '103.156.158.0/23' - - '103.156.166.0/23' - - '103.156.174.0/23' - - '103.156.186.0/23' - - '103.156.228.0/23' - - '103.157.30.0/23' - - '103.157.174.0/23' - - '103.157.212.0/23' - - '103.157.234.0/23' - - '103.157.254.0/23' - - '103.158.0.0/23' - - '103.158.8.0/23' - - '103.158.16.0/23' - - '103.158.200.0/23' - - '103.158.224.0/23' - - '103.159.80.0/23' - - '103.159.122.0/23' - - '103.159.124.0/23' - - '103.159.134.0/23' - - '103.159.142.0/23' - - '103.160.32.0/22' - - '103.160.112.0/22' - - '103.160.244.0/23' - - '103.160.254.0/23' - - '103.161.14.0/23' - - '103.161.102.0/23' - - '103.161.139.0/24' - - '103.161.208.0/23' - - '103.161.220.0/23' - - '103.161.254.0/23' - - '103.162.10.0/23' - - '103.162.32.0/23' - - '103.162.116.0/23' - - '103.163.28.0/23' - - '103.163.32.0/23' - - '103.163.46.0/23' - - '103.163.74.0/23' - - '103.163.180.0/23' - - '103.164.4.0/23' - - '103.164.32.0/23' - - '103.164.40.0/22' - - '103.164.64.0/23' - - '103.164.76.0/23' - - '103.164.178.0/23' - - '103.164.226.0/23' - - '103.165.44.0/23' - - '103.165.52.0/23' - - '103.165.82.0/23' - - '103.165.110.0/23' - - '103.166.50.0/23' - - '103.166.52.0/22' - - '103.166.84.0/23' - - '103.166.138.0/23' - - '103.166.242.0/23' - - '103.167.0.0/23' - - '103.167.36.0/23' - - '103.168.98.0/23' - - '103.168.170.0/23' - - '103.169.50.0/23' - - '103.169.62.0/23' - - '103.169.108.0/23' - - '103.169.162.0/23' - - '103.169.202.0/23' - - '103.169.216.0/23' - - '103.170.4.0/23' - - '103.170.134.0/23' - - '103.170.212.0/23' - - '103.171.32.0/23' - - '103.171.214.0/23' - - '103.172.32.0/23' - - '103.172.160.0/23' - - '103.172.191.0/24' - - '103.173.102.0/23' - - '103.173.182.0/23' - - '103.173.184.0/23' - - '103.174.94.0/23' - - '103.175.14.0/23' - - '103.175.114.0/23' - - '103.175.118.0/23' - - '103.176.52.0/23' - - '103.176.222.0/23' - - '103.176.244.0/23' - - '103.177.28.0/23' - - '103.177.70.0/23' - - '103.192.0.0/19' - - '103.192.48.0/21' - - '103.192.56.0/22' - - '103.192.84.0/22' - - '103.192.88.0/21' - - '103.192.96.0/20' - - '103.192.112.0/22' - - '103.192.128.0/21' - - '103.192.137.0/24' - - '103.192.138.0/23' - - '103.192.140.0/22' - - '103.192.144.0/22' - - '103.192.164.0/22' - - '103.192.188.0/22' - - '103.192.208.0/21' - - '103.192.216.0/22' - - '103.192.252.0/22' - - '103.193.40.0/21' - - '103.193.120.0/22' - - '103.193.140.0/22' - - '103.193.160.0/22' - - '103.193.188.0/22' - - '103.193.192.0/22' - - '103.193.212.0/22' - - '103.193.216.0/21' - - '103.193.224.0/20' - - '103.194.16.0/22' - - '103.195.112.0/22' - - '103.195.152.0/22' - - '103.195.160.0/22' - - '103.196.64.0/22' - - '103.196.72.0/22' - - '103.196.88.0/21' - - '103.196.96.0/22' - - '103.196.168.0/22' - - '103.196.185.0/24' - - '103.196.186.0/23' - - '103.197.180.0/22' - - '103.197.228.0/22' - - '103.197.253.0/24' - - '103.197.254.0/23' - - '103.198.20.0/22' - - '103.198.60.0/22' - - '103.198.64.0/22' - - '103.198.72.0/22' - - '103.198.124.0/22' - - '103.198.156.0/22' - - '103.198.180.0/22' - - '103.198.196.0/22' - - '103.199.164.0/22' - - '103.199.196.0/22' - - '103.199.228.0/22' - - '103.199.252.0/22' - - '103.200.52.0/22' - - '103.200.64.0/21' - - '103.200.136.0/21' - - '103.200.144.0/20' - - '103.200.160.0/19' - - '103.200.192.0/22' - - '103.200.220.0/22' - - '103.200.224.0/19' - - '103.201.0.0/20' - - '103.201.16.0/21' - - '103.201.28.0/22' - - '103.201.32.0/19' - - '103.201.64.0/22' - - '103.201.76.0/22' - - '103.201.80.0/20' - - '103.201.96.0/20' - - '103.201.112.0/21' - - '103.201.120.0/22' - - '103.201.152.0/21' - - '103.201.160.0/19' - - '103.201.192.0/18' - - '103.202.0.0/19' - - '103.202.32.0/20' - - '103.202.56.0/21' - - '103.202.64.0/18' - - '103.202.128.0/20' - - '103.202.144.0/22' - - '103.202.152.0/21' - - '103.202.160.0/19' - - '103.202.192.0/20' - - '103.202.212.0/22' - - '103.202.228.0/22' - - '103.202.236.0/22' - - '103.202.240.0/20' - - '103.203.0.0/19' - - '103.203.32.0/22' - - '103.203.96.0/19' - - '103.203.128.0/22' - - '103.203.140.0/22' - - '103.203.164.0/22' - - '103.203.168.0/22' - - '103.203.192.0/22' - - '103.203.200.0/22' - - '103.203.212.0/22' - - '103.203.216.0/22' - - '103.204.24.0/22' - - '103.204.72.0/22' - - '103.204.88.0/22' - - '103.204.112.0/22' - - '103.204.136.0/21' - - '103.204.144.0/21' - - '103.204.152.0/22' - - '103.204.196.0/22' - - '103.204.232.0/21' - - '103.205.4.0/22' - - '103.205.40.0/21' - - '103.205.52.0/22' - - '103.205.108.0/22' - - '103.205.116.0/22' - - '103.205.136.0/22' - - '103.205.162.0/24' - - '103.205.188.0/22' - - '103.205.192.0/21' - - '103.205.200.0/22' - - '103.205.236.0/22' - - '103.205.248.0/21' - - '103.206.0.0/22' - - '103.206.44.0/22' - - '103.206.148.0/22' - - '103.207.104.0/22' - - '103.207.184.0/21' - - '103.207.192.0/20' - - '103.207.208.0/21' - - '103.207.220.0/22' - - '103.207.228.0/22' - - '103.207.232.0/22' - - '103.208.12.0/22' - - '103.208.16.0/22' - - '103.208.28.0/22' - - '103.208.48.0/22' - - '103.209.112.0/22' - - '103.209.136.0/22' - - '103.209.201.0/24' - - '103.209.202.0/23' - - '103.209.208.0/22' - - '103.209.216.0/22' - - '103.210.0.0/22' - - '103.210.96.0/22' - - '103.210.156.0/22' - - '103.210.164.0/22' - - '103.210.168.0/21' - - '103.210.176.0/20' - - '103.210.217.0/24' - - '103.210.218.0/23' - - '103.211.44.0/22' - - '103.211.96.0/23' - - '103.211.98.0/24' - - '103.211.102.0/23' - - '103.211.156.0/22' - - '103.211.165.0/24' - - '103.211.168.0/22' - - '103.211.220.0/22' - - '103.211.248.0/22' - - '103.212.0.0/20' - - '103.212.44.0/22' - - '103.212.48.0/22' - - '103.212.84.0/22' - - '103.212.100.0/22' - - '103.212.148.0/22' - - '103.212.164.0/22' - - '103.212.196.0/22' - - '103.212.200.0/22' - - '103.212.252.0/22' - - '103.213.40.0/21' - - '103.213.48.0/20' - - '103.213.64.0/19' - - '103.213.96.0/22' - - '103.213.132.0/22' - - '103.213.136.0/21' - - '103.213.144.0/20' - - '103.213.160.0/19' - - '103.213.252.0/22' - - '103.214.48.0/22' - - '103.214.84.0/22' - - '103.214.212.0/22' - - '103.214.240.0/21' - - '103.215.28.0/22' - - '103.215.32.0/21' - - '103.215.44.0/22' - - '103.215.100.0/23' - - '103.215.104.0/21' - - '103.215.116.0/22' - - '103.215.120.0/22' - - '103.215.140.0/22' - - '103.216.4.0/22' - - '103.216.8.0/21' - - '103.216.16.0/20' - - '103.216.32.0/20' - - '103.216.64.0/22' - - '103.216.108.0/22' - - '103.216.136.0/22' - - '103.216.152.0/22' - - '103.216.224.0/21' - - '103.216.240.0/20' - - '103.217.0.0/18' - - '103.217.168.0/22' - - '103.217.180.0/22' - - '103.217.184.0/21' - - '103.217.192.0/20' - - '103.218.8.0/21' - - '103.218.16.0/21' - - '103.218.28.0/22' - - '103.218.32.0/19' - - '103.218.64.0/19' - - '103.218.192.0/20' - - '103.218.208.0/21' - - '103.218.216.0/22' - - '103.219.24.0/21' - - '103.219.32.0/21' - - '103.219.64.0/22' - - '103.219.84.0/22' - - '103.219.88.0/21' - - '103.219.96.0/21' - - '103.219.176.0/22' - - '103.219.184.0/22' - - '103.220.48.0/20' - - '103.220.64.0/22' - - '103.220.92.0/22' - - '103.220.96.0/22' - - '103.220.104.0/21' - - '103.220.116.0/22' - - '103.220.120.0/21' - - '103.220.128.0/20' - - '103.220.144.0/21' - - '103.220.152.0/22' - - '103.220.160.0/19' - - '103.220.192.0/21' - - '103.220.200.0/22' - - '103.220.240.0/21' - - '103.221.88.0/22' - - '103.221.96.0/19' - - '103.221.128.0/18' - - '103.221.192.0/20' - - '103.222.0.0/20' - - '103.222.16.0/22' - - '103.222.24.0/21' - - '103.222.33.0/24' - - '103.222.34.0/23' - - '103.222.36.0/22' - - '103.222.40.0/21' - - '103.222.48.0/20' - - '103.222.64.0/18' - - '103.222.128.0/18' - - '103.222.192.0/19' - - '103.222.224.0/21' - - '103.222.232.0/22' - - '103.222.240.0/21' - - '103.223.16.0/20' - - '103.223.32.0/19' - - '103.223.64.0/19' - - '103.223.96.0/20' - - '103.223.112.0/21' - - '103.223.124.0/22' - - '103.223.128.0/21' - - '103.223.140.0/22' - - '103.223.144.0/20' - - '103.223.160.0/20' - - '103.223.176.0/21' - - '103.223.188.0/22' - - '103.223.192.0/18' - - '103.224.0.0/22' - - '103.224.40.0/21' - - '103.224.60.0/22' - - '103.224.220.0/22' - - '103.224.224.0/21' - - '103.224.232.0/22' - - '103.226.40.0/22' - - '103.226.56.0/21' - - '103.226.80.0/22' - - '103.226.116.0/22' - - '103.226.132.0/22' - - '103.226.156.0/22' - - '103.226.180.0/22' - - '103.226.196.0/22' - - '103.227.48.0/22' - - '103.227.72.0/21' - - '103.227.80.0/22' - - '103.227.100.0/22' - - '103.227.120.0/22' - - '103.227.132.0/22' - - '103.227.136.0/22' - - '103.227.196.0/22' - - '103.227.204.0/23' - - '103.227.206.0/24' - - '103.227.212.0/22' - - '103.227.228.0/22' - - '103.228.12.0/22' - - '103.228.88.0/22' - - '103.228.136.0/22' - - '103.228.160.0/22' - - '103.228.176.0/22' - - '103.228.204.0/22' - - '103.228.208.0/22' - - '103.228.228.0/22' - - '103.228.232.0/22' - - '103.229.20.0/22' - - '103.229.136.0/22' - - '103.229.148.0/22' - - '103.229.172.0/22' - - '103.229.212.0/22' - - '103.229.216.0/21' - - '103.229.228.0/22' - - '103.229.236.0/22' - - '103.229.240.0/22' - - '103.230.0.0/22' - - '103.230.28.0/22' - - '103.230.40.0/21' - - '103.230.96.0/22' - - '103.230.196.0/22' - - '103.230.200.0/21' - - '103.230.212.0/22' - - '103.230.236.0/22' - - '103.231.16.0/21' - - '103.231.64.0/21' - - '103.231.144.0/22' - - '103.231.180.0/22' - - '103.231.244.0/22' - - '103.232.4.0/22' - - '103.232.17.168/29' - - '103.232.144.0/22' - - '103.233.4.0/22' - - '103.233.44.0/22' - - '103.233.52.0/22' - - '103.233.104.0/22' - - '103.233.128.0/22' - - '103.233.136.0/22' - - '103.233.228.0/22' - - '103.234.0.0/22' - - '103.234.20.0/22' - - '103.234.56.0/22' - - '103.234.124.0/22' - - '103.234.128.0/22' - - '103.234.172.0/22' - - '103.234.180.0/22' - - '103.234.244.0/22' - - '103.235.56.0/21' - - '103.235.80.0/22' - - '103.235.85.0/24' - - '103.235.87.0/24' - - '103.235.128.0/20' - - '103.235.144.0/21' - - '103.235.184.0/22' - - '103.235.192.0/22' - - '103.235.200.0/22' - - '103.235.220.0/22' - - '103.235.224.0/19' - - '103.236.0.0/18' - - '103.236.64.0/19' - - '103.236.96.0/22' - - '103.236.120.0/22' - - '103.236.184.0/22' - - '103.236.240.0/20' - - '103.237.0.0/20' - - '103.237.24.0/21' - - '103.237.68.0/22' - - '103.237.88.0/22' - - '103.237.152.0/22' - - '103.237.176.0/20' - - '103.237.192.0/18' - - '103.238.0.0/21' - - '103.238.18.0/23' - - '103.238.20.0/22' - - '103.238.24.0/21' - - '103.238.32.0/20' - - '103.238.48.0/21' - - '103.238.56.0/22' - - '103.238.88.0/21' - - '103.238.96.0/22' - - '103.238.132.0/22' - - '103.238.140.0/22' - - '103.238.144.0/22' - - '103.238.160.0/22' - - '103.238.165.0/24' - - '103.238.166.0/23' - - '103.238.168.0/21' - - '103.238.176.0/20' - - '103.238.196.0/22' - - '103.238.204.0/22' - - '103.238.252.0/22' - - '103.239.0.0/22' - - '103.239.44.0/22' - - '103.239.68.0/22' - - '103.239.152.0/21' - - '103.239.180.0/22' - - '103.239.184.0/22' - - '103.239.192.0/21' - - '103.239.204.0/22' - - '103.239.208.0/22' - - '103.239.224.0/22' - - '103.239.244.0/22' - - '103.240.16.0/22' - - '103.240.36.0/22' - - '103.240.72.0/22' - - '103.240.84.0/22' - - '103.240.124.0/22' - - '103.240.172.0/22' - - '103.240.188.0/22' - - '103.240.244.0/22' - - '103.241.12.0/22' - - '103.241.92.0/22' - - '103.241.96.0/22' - - '103.241.160.0/22' - - '103.241.184.0/21' - - '103.241.220.0/22' - - '103.242.64.0/23' - - '103.242.128.0/24' - - '103.242.160.0/22' - - '103.242.168.0/21' - - '103.242.176.0/22' - - '103.242.200.0/22' - - '103.242.212.0/22' - - '103.242.220.0/22' - - '103.242.240.0/22' - - '103.243.136.0/22' - - '103.243.252.0/22' - - '103.244.16.0/22' - - '103.244.58.0/23' - - '103.244.60.0/22' - - '103.244.64.0/20' - - '103.244.80.0/21' - - '103.244.164.0/22' - - '103.244.232.0/22' - - '103.244.252.0/22' - - '103.245.23.0/24' - - '103.245.52.0/22' - - '103.245.60.0/22' - - '103.245.80.0/22' - - '103.245.124.0/22' - - '103.245.128.0/22' - - '103.246.8.0/21' - - '103.246.120.0/21' - - '103.246.132.0/22' - - '103.246.152.0/22' - - '103.247.168.0/21' - - '103.247.176.0/22' - - '103.247.200.0/22' - - '103.247.212.0/22' - - '103.248.64.0/23' - - '103.248.100.0/22' - - '103.248.124.0/22' - - '103.248.152.0/22' - - '103.248.168.0/22' - - '103.248.192.0/22' - - '103.248.212.0/22' - - '103.248.224.0/21' - - '103.249.8.0/21' - - '103.249.52.0/22' - - '103.249.128.0/22' - - '103.249.136.0/22' - - '103.249.144.0/22' - - '103.249.164.0/22' - - '103.249.168.0/21' - - '103.249.176.0/22' - - '103.249.188.0/22' - - '103.249.192.0/22' - - '103.249.244.0/22' - - '103.249.252.0/22' - - '103.250.32.0/22' - - '103.250.104.0/22' - - '103.250.124.0/22' - - '103.250.180.0/22' - - '103.250.192.0/22' - - '103.250.216.0/22' - - '103.250.224.0/22' - - '103.250.236.0/22' - - '103.250.248.0/21' - - '103.251.32.0/22' - - '103.251.84.0/22' - - '103.251.96.0/22' - - '103.251.124.0/22' - - '103.251.160.0/22' - - '103.251.192.0/22' - - '103.251.204.0/22' - - '103.251.240.0/22' - - '103.252.28.0/22' - - '103.252.36.0/22' - - '103.252.64.0/22' - - '103.252.96.0/22' - - '103.252.104.0/22' - - '103.252.172.0/22' - - '103.252.204.0/22' - - '103.252.208.0/22' - - '103.252.232.0/22' - - '103.252.248.0/22' - - '103.253.4.0/22' - - '103.253.60.0/22' - - '103.253.204.0/22' - - '103.253.220.0/22' - - '103.253.224.0/22' - - '103.253.232.0/22' - - '103.254.8.0/22' - - '103.254.20.0/22' - - '103.254.64.0/21' - - '103.254.76.0/22' - - '103.254.112.0/22' - - '103.254.176.0/22' - - '103.254.188.0/22' - - '103.255.68.0/22' - - '103.255.88.0/21' - - '103.255.136.0/21' - - '103.255.184.0/22' - - '103.255.200.0/22' - - '103.255.208.0/22' - - '103.255.228.0/22' - - '106.0.0.0/24' - - '106.0.2.0/23' - - '106.0.4.0/22' - - '106.0.8.0/21' - - '106.0.16.0/20' - - '106.0.44.0/22' - - '106.0.64.0/18' - - '106.2.0.0/17' - - '106.2.128.0/20' - - '106.2.144.0/21' - - '106.2.152.0/22' - - '106.2.156.0/23' - - '106.2.160.0/19' - - '106.2.192.0/18' - - '106.3.16.0/20' - - '106.3.32.0/19' - - '106.3.64.0/20' - - '106.3.80.0/22' - - '106.3.88.0/21' - - '106.3.96.0/19' - - '106.3.128.0/19' - - '106.3.164.0/22' - - '106.3.168.0/21' - - '106.3.176.0/20' - - '106.3.192.0/18' - - '106.4.0.0/14' - - '106.8.0.0/15' - - '106.11.0.0/16' - - '106.12.0.0/14' - - '106.16.0.0/12' - - '106.32.0.0/12' - - '106.48.0.0/21' - - '106.48.8.0/22' - - '106.48.16.0/20' - - '106.48.32.0/20' - - '106.48.57.0/24' - - '106.48.60.0/24' - - '106.48.63.0/24' - - '106.48.64.0/18' - - '106.48.128.0/17' - - '106.49.1.0/24' - - '106.49.2.0/23' - - '106.49.4.0/22' - - '106.49.8.0/21' - - '106.49.16.0/20' - - '106.49.32.0/19' - - '106.49.64.0/19' - - '106.49.96.0/24' - - '106.49.98.0/23' - - '106.49.100.0/22' - - '106.49.104.0/21' - - '106.49.112.0/20' - - '106.49.128.0/17' - - '106.50.0.0/16' - - '106.52.0.0/14' - - '106.56.0.0/13' - - '106.74.0.0/16' - - '106.75.0.0/17' - - '106.75.128.0/18' - - '106.75.201.0/24' - - '106.75.204.0/22' - - '106.75.208.0/20' - - '106.75.224.0/19' - - '106.80.0.0/12' - - '106.108.0.0/14' - - '106.112.0.0/12' - - '106.224.0.0/12' - - '107.176.0.0/15' - - '109.71.4.0/24' - - '109.244.0.0/16' - - '110.6.0.0/15' - - '110.16.0.0/14' - - '110.34.40.0/21' - - '110.40.0.0/14' - - '110.44.12.0/22' - - '110.44.144.0/20' - - '110.48.0.0/16' - - '110.51.0.0/16' - - '110.52.0.0/15' - - '110.56.0.0/13' - - '110.64.0.0/15' - - '110.72.0.0/15' - - '110.75.0.0/16' - - '110.76.0.0/20' - - '110.76.16.0/22' - - '110.76.20.0/24' - - '110.76.22.0/24' - - '110.76.24.0/21' - - '110.76.32.0/19' - - '110.76.132.0/22' - - '110.76.156.0/22' - - '110.76.184.0/22' - - '110.76.192.0/18' - - '110.77.0.0/17' - - '110.80.0.0/13' - - '110.88.0.0/14' - - '110.92.68.0/22' - - '110.93.32.0/19' - - '110.94.0.0/15' - - '110.96.0.0/11' - - '110.152.0.0/14' - - '110.156.0.0/15' - - '110.166.0.0/15' - - '110.172.192.0/18' - - '110.173.0.0/19' - - '110.173.32.0/20' - - '110.173.64.0/19' - - '110.173.192.0/19' - - '110.176.0.0/12' - - '110.192.0.0/11' - - '110.228.0.0/14' - - '110.232.32.0/19' - - '110.236.0.0/15' - - '110.240.0.0/12' - - '111.0.0.0/10' - - '111.66.0.0/17' - - '111.66.128.0/19' - - '111.66.160.0/20' - - '111.66.176.0/23' - - '111.66.178.0/24' - - '111.66.180.0/22' - - '111.66.184.0/21' - - '111.66.192.0/18' - - '111.67.192.0/20' - - '111.68.64.0/19' - - '111.72.0.0/13' - - '111.85.0.0/16' - - '111.91.192.0/19' - - '111.92.248.0/21' - - '111.112.0.0/14' - - '111.116.0.0/15' - - '111.118.200.0/21' - - '111.119.64.0/18' - - '111.119.128.0/19' - - '111.120.0.0/14' - - '111.124.0.0/16' - - '111.126.0.0/15' - - '111.128.0.0/11' - - '111.160.0.0/13' - - '111.170.0.0/16' - - '111.172.0.0/14' - - '111.176.0.0/13' - - '111.186.0.0/15' - - '111.192.0.0/12' - - '111.208.0.0/13' - - '111.221.28.0/24' - - '111.221.128.0/17' - - '111.222.0.0/16' - - '111.223.4.0/22' - - '111.223.8.0/21' - - '111.223.16.0/22' - - '111.223.240.0/22' - - '111.223.249.0/24' - - '111.223.250.0/23' - - '111.224.0.0/13' - - '111.235.96.0/19' - - '111.235.156.0/22' - - '111.235.160.0/21' - - '111.235.170.0/23' - - '111.235.172.0/22' - - '111.235.176.0/20' - - '112.0.0.0/10' - - '112.64.0.0/14' - - '112.73.64.0/18' - - '112.74.0.0/15' - - '112.80.0.0/12' - - '112.96.0.0/13' - - '112.109.128.0/17' - - '112.111.0.0/16' - - '112.112.0.0/14' - - '112.116.0.0/15' - - '112.122.0.0/15' - - '112.124.0.0/14' - - '112.128.0.0/14' - - '112.132.0.0/16' - - '112.137.48.0/21' - - '112.192.0.0/14' - - '112.224.0.0/11' - - '113.0.0.0/13' - - '113.8.0.0/15' - - '113.11.192.0/19' - - '113.12.0.0/14' - - '113.16.0.0/15' - - '113.18.0.0/16' - - '113.21.232.0/24' - - '113.21.236.0/22' - - '113.24.0.0/14' - - '113.31.0.0/16' - - '113.44.0.0/14' - - '113.48.0.0/14' - - '113.52.160.0/19' - - '113.52.228.0/22' - - '113.54.0.0/15' - - '113.56.0.0/15' - - '113.58.0.0/16' - - '113.59.0.0/17' - - '113.59.224.0/22' - - '113.62.0.0/15' - - '113.64.0.0/10' - - '113.128.0.0/15' - - '113.130.96.0/20' - - '113.130.112.0/21' - - '113.132.0.0/14' - - '113.136.0.0/13' - - '113.194.0.0/15' - - '113.197.100.0/23' - - '113.197.102.0/24' - - '113.197.104.0/22' - - '113.200.0.0/15' - - '113.202.0.0/16' - - '113.204.0.0/14' - - '113.208.96.0/19' - - '113.208.128.0/17' - - '113.209.0.0/16' - - '113.212.0.0/18' - - '113.212.100.0/22' - - '113.212.184.0/21' - - '113.213.0.0/17' - - '113.214.0.0/15' - - '113.218.0.0/15' - - '113.220.0.0/14' - - '113.224.0.0/12' - - '113.240.0.0/13' - - '113.248.0.0/14' - - '114.28.0.0/17' - - '114.28.128.0/18' - - '114.28.194.0/23' - - '114.28.196.0/22' - - '114.28.200.0/21' - - '114.28.208.0/20' - - '114.28.232.0/22' - - '114.28.240.0/20' - - '114.31.64.0/21' - - '114.54.0.0/15' - - '114.60.0.0/14' - - '114.64.0.0/15' - - '114.66.0.0/17' - - '114.66.160.0/19' - - '114.66.192.0/18' - - '114.67.0.0/16' - - '114.68.0.0/18' - - '114.68.64.0/19' - - '114.68.96.0/22' - - '114.68.101.0/24' - - '114.68.102.0/23' - - '114.68.104.0/21' - - '114.68.112.0/20' - - '114.68.128.0/17' - - '114.79.64.0/18' - - '114.80.0.0/12' - - '114.96.0.0/13' - - '114.104.0.0/14' - - '114.110.0.0/20' - - '114.110.64.0/18' - - '114.111.0.0/19' - - '114.111.160.0/19' - - '114.112.4.0/22' - - '114.112.8.0/22' - - '114.112.24.0/21' - - '114.112.32.0/19' - - '114.112.64.0/19' - - '114.112.96.0/20' - - '114.112.116.0/22' - - '114.112.120.0/21' - - '114.112.129.0/24' - - '114.112.136.0/21' - - '114.112.144.0/20' - - '114.112.160.0/19' - - '114.112.192.0/19' - - '114.113.0.0/17' - - '114.113.128.0/21' - - '114.113.140.0/22' - - '114.113.144.0/20' - - '114.113.160.0/19' - - '114.113.196.0/22' - - '114.113.200.0/21' - - '114.113.208.0/20' - - '114.113.224.0/20' - - '114.114.0.0/15' - - '114.116.0.0/15' - - '114.118.0.0/16' - - '114.119.0.0/17' - - '114.119.192.0/18' - - '114.132.0.0/16' - - '114.135.0.0/16' - - '114.138.0.0/15' - - '114.141.64.0/21' - - '114.141.80.0/21' - - '114.141.128.0/18' - - '114.196.0.0/15' - - '114.198.248.0/21' - - '114.208.0.0/12' - - '114.224.0.0/11' - - '115.24.0.0/14' - - '115.28.0.0/15' - - '115.31.64.0/20' - - '115.32.0.0/14' - - '115.42.56.0/22' - - '115.44.0.0/14' - - '115.48.0.0/12' - - '115.69.64.0/20' - - '115.84.0.0/18' - - '115.84.192.0/19' - - '115.85.192.0/18' - - '115.100.0.0/14' - - '115.104.0.0/14' - - '115.120.0.0/14' - - '115.124.16.0/20' - - '115.148.0.0/14' - - '115.152.0.0/13' - - '115.166.64.0/19' - - '115.168.0.0/16' - - '115.169.0.0/23' - - '115.169.3.0/24' - - '115.169.6.0/24' - - '115.169.9.0/24' - - '115.169.14.0/23' - - '115.169.16.0/20' - - '115.169.39.0/24' - - '115.169.40.0/24' - - '115.169.42.0/23' - - '115.169.44.0/22' - - '115.169.48.0/20' - - '115.169.64.0/18' - - '115.169.128.0/17' - - '115.170.0.0/15' - - '115.172.0.0/14' - - '115.180.0.0/14' - - '115.187.0.0/20' - - '115.190.0.0/15' - - '115.192.0.0/11' - - '115.224.0.0/12' - - '116.0.8.0/21' - - '116.0.24.0/21' - - '116.1.0.0/16' - - '116.2.0.0/15' - - '116.4.0.0/14' - - '116.8.0.0/14' - - '116.13.0.0/16' - - '116.16.0.0/12' - - '116.50.0.0/20' - - '116.52.0.0/14' - - '116.56.0.0/15' - - '116.58.128.0/20' - - '116.58.208.0/20' - - '116.60.0.0/14' - - '116.66.0.0/18' - - '116.66.64.0/19' - - '116.66.96.0/20' - - '116.66.120.0/22' - - '116.68.136.0/21' - - '116.68.176.0/21' - - '116.69.0.0/16' - - '116.70.0.0/17' - - '116.76.0.0/14' - - '116.85.0.0/17' - - '116.85.128.0/18' - - '116.85.192.0/19' - - '116.85.224.0/20' - - '116.85.240.0/21' - - '116.85.248.0/23' - - '116.85.250.0/24' - - '116.85.252.0/22' - - '116.89.144.0/20' - - '116.90.80.0/20' - - '116.90.184.0/21' - - '116.95.0.0/16' - - '116.112.0.0/14' - - '116.116.0.0/15' - - '116.128.0.0/10' - - '116.192.0.0/16' - - '116.193.16.0/20' - - '116.193.32.0/19' - - '116.193.176.0/21' - - '116.194.0.0/15' - - '116.196.0.0/21' - - '116.196.8.0/22' - - '116.196.12.0/23' - - '116.196.16.0/20' - - '116.196.32.0/19' - - '116.196.64.0/18' - - '116.196.128.0/18' - - '116.196.192.0/21' - - '116.196.201.0/24' - - '116.196.203.0/24' - - '116.196.204.0/22' - - '116.196.208.0/20' - - '116.196.224.0/19' - - '116.197.160.0/21' - - '116.197.180.0/23' - - '116.198.0.0/16' - - '116.199.0.0/17' - - '116.199.128.0/19' - - '116.204.0.0/17' - - '116.204.232.0/22' - - '116.205.0.0/16' - - '116.207.0.0/16' - - '116.208.0.0/14' - - '116.212.160.0/20' - - '116.213.64.0/18' - - '116.213.128.0/17' - - '116.214.32.0/19' - - '116.214.64.0/20' - - '116.214.128.0/17' - - '116.215.0.0/16' - - '116.216.0.0/14' - - '116.224.0.0/12' - - '116.242.0.0/15' - - '116.244.0.0/14' - - '116.248.0.0/15' - - '116.252.0.0/15' - - '116.254.104.0/21' - - '116.254.129.0/24' - - '116.254.130.0/23' - - '116.254.132.0/22' - - '116.254.136.0/21' - - '116.254.144.0/20' - - '116.254.160.0/19' - - '116.254.192.0/18' - - '116.255.128.0/17' - - '117.8.0.0/13' - - '117.21.0.0/16' - - '117.22.0.0/15' - - '117.24.0.0/13' - - '117.32.0.0/13' - - '117.40.0.0/14' - - '117.44.0.0/15' - - '117.48.0.0/15' - - '117.50.0.0/16' - - '117.51.128.0/23' - - '117.51.131.0/24' - - '117.51.132.0/22' - - '117.51.136.0/21' - - '117.51.144.0/20' - - '117.51.160.0/19' - - '117.51.192.0/18' - - '117.53.48.0/20' - - '117.53.176.0/20' - - '117.57.0.0/16' - - '117.58.0.0/17' - - '117.59.0.0/16' - - '117.60.0.0/14' - - '117.64.0.0/13' - - '117.72.0.0/15' - - '117.74.64.0/19' - - '117.74.128.0/17' - - '117.75.0.0/16' - - '117.76.0.0/14' - - '117.80.0.0/12' - - '117.100.0.0/15' - - '117.103.16.0/20' - - '117.103.40.0/21' - - '117.103.72.0/21' - - '117.103.128.0/20' - - '117.104.168.0/21' - - '117.106.0.0/15' - - '117.112.0.0/13' - - '117.120.64.0/18' - - '117.120.128.0/17' - - '117.121.0.0/17' - - '117.121.128.0/20' - - '117.121.148.0/22' - - '117.121.152.0/21' - - '117.121.160.0/19' - - '117.121.192.0/21' - - '117.122.128.0/17' - - '117.124.0.0/14' - - '117.128.0.0/10' - - '118.24.0.0/15' - - '118.26.0.0/19' - - '118.26.40.0/21' - - '118.26.48.0/20' - - '118.26.64.0/19' - - '118.26.96.0/22' - - '118.26.103.0/24' - - '118.26.112.0/21' - - '118.26.121.0/24' - - '118.26.122.0/23' - - '118.26.124.0/23' - - '118.26.128.0/20' - - '118.26.144.0/22' - - '118.26.149.0/24' - - '118.26.150.0/23' - - '118.26.156.0/22' - - '118.26.160.0/19' - - '118.26.192.0/18' - - '118.28.0.0/15' - - '118.30.0.0/20' - - '118.30.16.0/21' - - '118.30.24.0/22' - - '118.30.32.0/19' - - '118.30.64.0/18' - - '118.30.128.0/17' - - '118.31.0.0/16' - - '118.64.0.0/15' - - '118.66.0.0/16' - - '118.67.112.0/20' - - '118.72.0.0/13' - - '118.80.0.0/15' - - '118.84.0.0/15' - - '118.88.32.0/19' - - '118.88.64.0/18' - - '118.88.128.0/17' - - '118.89.0.0/16' - - '118.102.16.0/20' - - '118.102.32.0/21' - - '118.103.164.0/22' - - '118.103.168.0/21' - - '118.103.176.0/22' - - '118.112.0.0/13' - - '118.120.0.0/14' - - '118.124.0.0/15' - - '118.126.1.0/24' - - '118.126.2.0/23' - - '118.126.4.0/22' - - '118.126.8.0/21' - - '118.126.16.0/23' - - '118.126.18.0/24' - - '118.126.32.0/19' - - '118.126.64.0/18' - - '118.126.128.0/17' - - '118.127.128.0/19' - - '118.132.0.0/14' - - '118.144.0.0/14' - - '118.178.0.0/16' - - '118.180.0.0/14' - - '118.184.5.0/24' - - '118.184.128.0/18' - - '118.184.192.0/19' - - '118.184.240.0/20' - - '118.186.0.0/15' - - '118.188.0.0/22' - - '118.188.8.0/21' - - '118.188.16.0/20' - - '118.188.32.0/19' - - '118.188.64.0/18' - - '118.188.128.0/17' - - '118.190.0.0/16' - - '118.191.0.0/20' - - '118.191.32.0/19' - - '118.191.64.0/18' - - '118.191.144.0/21' - - '118.191.153.0/24' - - '118.191.154.0/23' - - '118.191.156.0/22' - - '118.191.160.0/19' - - '118.191.192.0/20' - - '118.191.209.0/24' - - '118.191.210.0/23' - - '118.191.212.0/22' - - '118.191.248.0/21' - - '118.192.0.0/16' - - '118.193.0.0/22' - - '118.193.96.0/19' - - '118.194.0.0/17' - - '118.194.128.0/18' - - '118.194.192.0/19' - - '118.194.240.0/21' - - '118.195.0.0/16' - - '118.196.0.0/14' - - '118.202.0.0/15' - - '118.204.0.0/14' - - '118.212.0.0/15' - - '118.215.192.0/18' - - '118.224.0.0/14' - - '118.228.0.0/17' - - '118.228.128.0/20' - - '118.228.144.0/21' - - '118.228.156.0/22' - - '118.228.160.0/19' - - '118.228.192.0/18' - - '118.229.0.0/16' - - '118.230.0.0/16' - - '118.239.0.0/16' - - '118.242.0.0/16' - - '118.244.0.0/14' - - '118.248.0.0/13' - - '119.0.0.0/15' - - '119.2.0.0/19' - - '119.2.128.0/17' - - '119.3.0.0/16' - - '119.4.0.0/14' - - '119.10.0.0/17' - - '119.15.136.0/21' - - '119.16.0.0/16' - - '119.18.192.0/20' - - '119.18.208.0/21' - - '119.18.224.0/19' - - '119.19.0.0/16' - - '119.20.0.0/14' - - '119.27.64.0/18' - - '119.27.128.0/17' - - '119.28.28.0/24' - - '119.29.0.0/16' - - '119.30.48.0/20' - - '119.31.192.0/19' - - '119.32.0.0/14' - - '119.36.0.0/15' - - '119.38.0.0/17' - - '119.38.128.0/18' - - '119.38.192.0/20' - - '119.38.208.0/22' - - '119.38.212.0/23' - - '119.38.214.0/27' - - '119.38.214.56/29' - - '119.38.214.64/26' - - '119.38.214.128/25' - - '119.38.215.0/24' - - '119.38.216.0/21' - - '119.39.0.0/16' - - '119.40.0.0/18' - - '119.40.64.0/20' - - '119.40.128.0/17' - - '119.41.0.0/16' - - '119.42.0.0/19' - - '119.42.128.0/20' - - '119.42.224.0/19' - - '119.44.0.0/15' - - '119.48.0.0/13' - - '119.57.0.0/16' - - '119.58.0.0/16' - - '119.59.128.0/17' - - '119.60.0.0/15' - - '119.62.0.0/16' - - '119.63.32.0/19' - - '119.75.208.0/20' - - '119.78.0.0/15' - - '119.80.0.0/16' - - '119.82.208.0/20' - - '119.84.0.0/14' - - '119.88.0.0/16' - - '119.89.0.0/17' - - '119.89.128.0/21' - - '119.89.136.0/23' - - '119.89.139.0/24' - - '119.89.140.0/22' - - '119.89.144.0/20' - - '119.89.160.0/20' - - '119.89.176.0/22' - - '119.89.180.0/23' - - '119.89.183.0/24' - - '119.89.184.0/21' - - '119.89.192.0/23' - - '119.89.194.0/24' - - '119.89.196.0/22' - - '119.89.200.0/21' - - '119.89.208.0/21' - - '119.89.217.0/24' - - '119.89.218.0/23' - - '119.89.220.0/22' - - '119.89.224.0/19' - - '119.90.0.0/15' - - '119.96.0.0/13' - - '119.108.0.0/15' - - '119.112.0.0/12' - - '119.128.0.0/12' - - '119.144.0.0/14' - - '119.148.160.0/19' - - '119.151.192.0/18' - - '119.160.200.0/21' - - '119.161.120.0/21' - - '119.161.128.0/21' - - '119.161.160.0/19' - - '119.161.192.0/18' - - '119.162.0.0/15' - - '119.164.0.0/14' - - '119.176.0.0/12' - - '119.232.0.0/15' - - '119.235.128.0/19' - - '119.235.160.0/20' - - '119.235.184.0/22' - - '119.248.0.0/14' - - '119.252.96.0/21' - - '119.252.240.0/21' - - '119.252.249.0/24' - - '119.252.252.0/23' - - '119.253.0.0/16' - - '119.254.0.0/15' - - '120.0.0.0/12' - - '120.24.0.0/14' - - '120.30.0.0/15' - - '120.32.0.0/12' - - '120.48.0.0/15' - - '120.52.0.0/16' - - '120.53.0.0/19' - - '120.53.32.0/20' - - '120.53.48.0/22' - - '120.53.54.0/23' - - '120.53.56.0/21' - - '120.53.64.0/18' - - '120.53.128.0/17' - - '120.54.0.0/15' - - '120.64.0.0/13' - - '120.72.32.0/19' - - '120.72.128.0/17' - - '120.76.0.0/14' - - '120.80.0.0/13' - - '120.88.8.0/21' - - '120.90.0.0/15' - - '120.92.0.0/17' - - '120.92.128.0/18' - - '120.92.192.0/22' - - '120.92.198.0/23' - - '120.92.200.0/21' - - '120.92.208.0/20' - - '120.92.224.0/19' - - '120.94.0.0/15' - - '120.128.0.0/13' - - '120.136.16.0/21' - - '120.136.128.0/18' - - '120.137.0.0/17' - - '120.143.128.0/19' - - '120.192.0.0/10' - - '121.0.8.0/21' - - '121.0.16.0/20' - - '121.4.0.0/22' - - '121.4.8.0/21' - - '121.4.16.0/20' - - '121.4.32.0/19' - - '121.4.64.0/18' - - '121.4.128.0/17' - - '121.5.0.0/16' - - '121.8.0.0/13' - - '121.16.0.0/12' - - '121.32.0.0/13' - - '121.40.0.0/14' - - '121.46.0.0/18' - - '121.46.76.0/22' - - '121.46.128.0/17' - - '121.47.0.0/16' - - '121.48.0.0/15' - - '121.50.8.0/21' - - '121.51.0.0/16' - - '121.52.160.0/19' - - '121.52.208.0/20' - - '121.52.224.0/19' - - '121.54.176.0/21' - - '121.55.0.0/18' - - '121.56.0.0/15' - - '121.58.0.0/17' - - '121.58.136.0/21' - - '121.58.144.0/20' - - '121.58.160.0/21' - - '121.59.0.0/20' - - '121.59.16.0/21' - - '121.59.24.0/22' - - '121.59.28.0/24' - - '121.59.31.0/24' - - '121.59.33.0/24' - - '121.59.36.0/22' - - '121.59.40.0/21' - - '121.59.48.0/20' - - '121.59.64.0/19' - - '121.59.96.0/22' - - '121.59.101.0/24' - - '121.59.102.0/23' - - '121.59.104.0/23' - - '121.59.108.0/22' - - '121.59.112.0/21' - - '121.59.121.0/24' - - '121.59.122.0/23' - - '121.59.124.0/22' - - '121.59.128.0/21' - - '121.59.136.0/22' - - '121.59.141.0/24' - - '121.59.142.0/23' - - '121.59.145.0/24' - - '121.59.146.0/23' - - '121.59.148.0/22' - - '121.59.152.0/24' - - '121.59.154.0/23' - - '121.59.156.0/22' - - '121.59.160.0/19' - - '121.59.192.0/18' - - '121.60.0.0/14' - - '121.68.0.0/14' - - '121.76.0.0/15' - - '121.79.128.0/18' - - '121.89.0.0/16' - - '121.91.104.0/21' - - '121.100.128.0/18' - - '121.101.0.0/18' - - '121.101.208.0/20' - - '121.192.0.0/13' - - '121.200.192.0/23' - - '121.200.194.0/24' - - '121.200.196.0/22' - - '121.201.0.0/16' - - '121.204.0.0/14' - - '121.224.0.0/12' - - '121.248.0.0/14' - - '121.255.0.0/16' - - '122.0.64.0/18' - - '122.0.128.0/17' - - '122.4.0.0/14' - - '122.8.79.0/24' - - '122.8.80.0/22' - - '122.8.86.0/23' - - '122.8.88.0/24' - - '122.8.91.0/24' - - '122.8.92.0/22' - - '122.8.128.0/17' - - '122.9.0.0/16' - - '122.10.132.0/23' - - '122.10.136.0/23' - - '122.10.216.0/22' - - '122.10.228.0/22' - - '122.10.232.0/21' - - '122.10.240.0/22' - - '122.11.0.0/17' - - '122.12.0.0/15' - - '122.14.0.0/17' - - '122.14.192.0/18' - - '122.48.0.0/16' - - '122.49.0.0/18' - - '122.51.0.0/16' - - '122.64.0.0/11' - - '122.96.0.0/15' - - '122.98.144.0/20' - - '122.98.160.0/21' - - '122.98.172.0/22' - - '122.98.176.0/20' - - '122.98.192.0/21' - - '122.98.232.0/21' - - '122.98.240.0/20' - - '122.102.0.0/20' - - '122.102.64.0/19' - - '122.112.0.0/18' - - '122.112.64.0/19' - - '122.112.96.0/22' - - '122.112.118.0/24' - - '122.112.122.0/24' - - '122.112.125.0/24' - - '122.112.128.0/17' - - '122.113.0.0/16' - - '122.114.0.0/16' - - '122.115.0.0/18' - - '122.115.80.0/20' - - '122.115.96.0/19' - - '122.115.128.0/17' - - '122.119.0.0/16' - - '122.128.100.0/22' - - '122.128.120.0/21' - - '122.136.0.0/13' - - '122.144.128.0/17' - - '122.152.192.0/18' - - '122.156.0.0/14' - - '122.188.0.0/14' - - '122.192.0.0/14' - - '122.198.0.0/16' - - '122.200.40.0/21' - - '122.200.64.0/18' - - '122.201.48.0/20' - - '122.204.0.0/14' - - '122.224.0.0/12' - - '122.240.0.0/13' - - '122.248.24.0/21' - - '122.248.48.0/20' - - '122.255.64.0/21' - - '123.0.128.0/21' - - '123.0.136.0/23' - - '123.0.139.0/24' - - '123.0.140.0/22' - - '123.0.144.0/20' - - '123.0.160.0/19' - - '123.4.0.0/14' - - '123.8.0.0/13' - - '123.49.130.0/23' - - '123.49.132.0/22' - - '123.49.136.0/22' - - '123.49.152.0/21' - - '123.49.160.0/19' - - '123.49.192.0/18' - - '123.50.160.0/19' - - '123.52.0.0/14' - - '123.56.0.0/15' - - '123.58.0.0/18' - - '123.58.64.0/20' - - '123.58.80.0/21' - - '123.58.88.0/22' - - '123.58.96.0/19' - - '123.58.128.0/18' - - '123.58.224.0/19' - - '123.59.0.0/16' - - '123.60.0.0/15' - - '123.62.0.0/16' - - '123.64.0.0/11' - - '123.96.0.0/15' - - '123.98.0.0/17' - - '123.99.128.0/19' - - '123.99.160.0/20' - - '123.99.176.0/21' - - '123.99.184.0/22' - - '123.99.188.0/24' - - '123.99.190.0/23' - - '123.99.192.0/18' - - '123.100.0.0/19' - - '123.100.232.0/24' - - '123.101.0.0/16' - - '123.103.0.0/20' - - '123.103.16.0/21' - - '123.103.24.0/22' - - '123.103.28.0/23' - - '123.103.30.0/24' - - '123.103.32.0/19' - - '123.103.64.0/18' - - '123.108.134.0/24' - - '123.108.138.0/23' - - '123.108.140.0/24' - - '123.108.142.0/24' - - '123.108.208.0/20' - - '123.112.0.0/12' - - '123.128.0.0/13' - - '123.137.0.0/16' - - '123.138.0.0/15' - - '123.144.0.0/12' - - '123.160.0.0/12' - - '123.176.60.0/22' - - '123.176.80.0/20' - - '123.177.0.0/16' - - '123.178.0.0/15' - - '123.180.0.0/14' - - '123.184.0.0/13' - - '123.196.0.0/15' - - '123.199.128.0/17' - - '123.206.0.0/15' - - '123.232.0.0/14' - - '123.242.0.0/17' - - '123.242.192.0/21' - - '123.244.0.0/14' - - '123.249.0.0/17' - - '123.253.240.0/22' - - '123.254.96.0/21' - - '124.6.64.0/18' - - '124.14.0.0/15' - - '124.16.0.0/15' - - '124.20.0.0/14' - - '124.28.192.0/18' - - '124.29.0.0/17' - - '124.31.0.0/16' - - '124.40.112.0/20' - - '124.40.128.0/18' - - '124.40.192.0/19' - - '124.40.240.0/22' - - '124.42.0.0/16' - - '124.47.0.0/18' - - '124.64.0.0/15' - - '124.66.0.0/17' - - '124.67.0.0/16' - - '124.68.0.0/19' - - '124.68.32.0/20' - - '124.68.48.0/21' - - '124.68.56.0/22' - - '124.68.60.0/23' - - '124.68.63.0/24' - - '124.68.64.0/18' - - '124.68.128.0/18' - - '124.68.192.0/19' - - '124.68.224.0/23' - - '124.68.226.0/24' - - '124.68.228.0/22' - - '124.68.232.0/21' - - '124.68.240.0/23' - - '124.68.242.0/24' - - '124.68.244.0/23' - - '124.68.254.0/24' - - '124.69.0.0/16' - - '124.70.0.0/16' - - '124.71.0.0/17' - - '124.71.128.0/18' - - '124.71.192.0/19' - - '124.71.224.0/20' - - '124.71.240.0/21' - - '124.71.250.0/24' - - '124.71.252.0/22' - - '124.72.0.0/13' - - '124.88.0.0/13' - - '124.108.8.0/21' - - '124.108.40.0/21' - - '124.109.96.0/21' - - '124.112.0.0/13' - - '124.126.0.0/15' - - '124.128.0.0/13' - - '124.147.128.0/17' - - '124.150.137.0/24' - - '124.151.0.0/16' - - '124.152.0.0/16' - - '124.160.0.0/13' - - '124.172.0.0/16' - - '124.173.32.0/19' - - '124.173.64.0/18' - - '124.173.128.0/17' - - '124.174.0.0/15' - - '124.192.0.0/15' - - '124.196.0.0/16' - - '124.200.0.0/13' - - '124.220.0.0/14' - - '124.224.0.0/12' - - '124.240.0.0/17' - - '124.240.128.0/18' - - '124.242.0.0/16' - - '124.243.192.0/18' - - '124.248.0.0/17' - - '124.249.0.0/16' - - '124.250.0.0/15' - - '124.254.0.0/18' - - '125.31.192.0/18' - - '125.32.0.0/12' - - '125.58.128.0/17' - - '125.61.128.0/17' - - '125.62.0.0/18' - - '125.64.0.0/11' - - '125.96.0.0/15' - - '125.98.0.0/16' - - '125.104.0.0/13' - - '125.112.0.0/12' - - '125.169.0.0/16' - - '125.171.0.0/16' - - '125.208.0.0/19' - - '125.208.37.0/24' - - '125.208.40.0/24' - - '125.208.45.0/24' - - '125.208.46.0/23' - - '125.208.48.0/20' - - '125.210.0.0/15' - - '125.213.0.0/17' - - '125.214.96.0/19' - - '125.215.0.0/18' - - '125.216.0.0/13' - - '125.254.128.0/17' - - '128.108.0.0/16' - - '129.28.0.0/16' - - '129.204.0.0/16' - - '129.211.0.0/16' - - '129.223.254.0/24' - - '130.36.146.0/23' - - '130.214.218.0/23' - - '131.228.96.0/24' - - '131.253.12.0/29' - - '131.253.12.80/28' - - '131.253.12.240/29' - - '132.232.0.0/16' - - '132.237.134.0/24' - - '134.175.0.0/16' - - '135.84.255.0/24' - - '135.159.208.0/20' - - '135.244.80.0/20' - - '137.59.59.0/24' - - '137.59.88.0/22' - - '138.32.244.0/24' - - '139.5.56.0/21' - - '139.5.80.0/22' - - '139.5.92.0/22' - - '139.5.128.0/22' - - '139.5.160.0/22' - - '139.5.192.0/22' - - '139.5.204.0/22' - - '139.5.244.0/22' - - '139.9.0.0/18' - - '139.9.64.0/19' - - '139.9.96.0/23' - - '139.9.98.0/24' - - '139.9.100.0/22' - - '139.9.104.0/21' - - '139.9.112.0/20' - - '139.9.128.0/17' - - '139.129.0.0/16' - - '139.138.238.0/28' - - '139.148.0.0/16' - - '139.155.0.0/16' - - '139.159.0.0/19' - - '139.159.32.0/21' - - '139.159.40.0/22' - - '139.159.52.0/22' - - '139.159.56.0/21' - - '139.159.64.0/19' - - '139.159.96.0/20' - - '139.159.112.0/24' - - '139.159.113.24/29' - - '139.159.113.32/27' - - '139.159.113.64/26' - - '139.159.113.128/25' - - '139.159.114.0/23' - - '139.159.116.0/23' - - '139.159.120.0/21' - - '139.159.128.0/17' - - '139.170.0.0/16' - - '139.176.0.0/16' - - '139.183.0.0/16' - - '139.186.0.0/16' - - '139.189.0.0/16' - - '139.196.0.0/15' - - '139.198.0.0/18' - - '139.198.66.0/23' - - '139.198.68.0/22' - - '139.198.72.0/21' - - '139.198.80.0/20' - - '139.198.96.0/20' - - '139.198.114.0/23' - - '139.198.116.0/22' - - '139.198.122.0/23' - - '139.198.124.0/22' - - '139.198.128.0/17' - - '139.199.0.0/16' - - '139.200.0.0/13' - - '139.208.0.0/13' - - '139.217.0.0/16' - - '139.219.0.0/16' - - '139.220.0.0/17' - - '139.220.128.0/18' - - '139.220.192.0/22' - - '139.220.196.0/23' - - '139.220.200.0/21' - - '139.220.208.0/23' - - '139.220.212.0/22' - - '139.220.216.0/21' - - '139.220.224.0/19' - - '139.221.0.0/16' - - '139.224.0.0/16' - - '139.226.0.0/15' - - '140.75.0.0/16' - - '140.101.208.0/24' - - '140.143.0.0/16' - - '140.179.0.0/16' - - '140.205.0.0/16' - - '140.206.0.0/15' - - '140.210.0.0/16' - - '140.224.0.0/16' - - '140.237.0.0/16' - - '140.240.0.0/16' - - '140.242.223.0/24' - - '140.242.224.0/24' - - '140.243.0.0/16' - - '140.246.0.0/16' - - '140.249.0.0/16' - - '140.250.0.0/16' - - '140.255.0.0/16' - - '142.70.0.0/16' - - '142.86.0.0/16' - - '144.0.0.0/16' - - '144.7.0.0/16' - - '144.12.0.0/16' - - '144.36.146.0/23' - - '144.48.64.0/22' - - '144.48.88.0/22' - - '144.48.156.0/22' - - '144.48.180.0/22' - - '144.48.184.0/22' - - '144.48.204.0/22' - - '144.48.208.0/21' - - '144.52.0.0/16' - - '144.123.0.0/16' - - '144.211.80.0/24' - - '144.211.138.0/24' - - '144.255.0.0/16' - - '146.56.192.0/18' - - '146.196.56.0/22' - - '146.196.68.0/22' - - '146.196.92.0/22' - - '146.196.112.0/21' - - '146.196.124.0/22' - - '146.217.137.0/24' - - '146.222.79.0/24' - - '146.222.81.0/24' - - '146.222.94.0/24' - - '147.243.13.32/27' - - '147.243.13.64/27' - - '147.243.14.32/27' - - '147.243.103.0/25' - - '148.70.0.0/16' - - '150.0.0.0/16' - - '150.115.0.0/16' - - '150.121.0.0/16' - - '150.122.0.0/16' - - '150.129.136.0/22' - - '150.129.192.0/22' - - '150.129.252.0/22' - - '150.138.0.0/15' - - '150.158.0.0/16' - - '150.222.88.0/23' - - '150.223.0.0/16' - - '150.242.0.0/21' - - '150.242.8.0/22' - - '150.242.28.0/22' - - '150.242.44.0/22' - - '150.242.48.0/21' - - '150.242.56.0/22' - - '150.242.76.0/22' - - '150.242.80.0/22' - - '150.242.92.0/22' - - '150.242.96.0/22' - - '150.242.112.0/21' - - '150.242.120.0/22' - - '150.242.152.0/22' - - '150.242.160.0/21' - - '150.242.168.0/22' - - '150.242.184.0/21' - - '150.242.192.0/22' - - '150.242.226.0/23' - - '150.242.232.0/21' - - '150.242.240.0/21' - - '150.242.248.0/22' - - '150.248.0.0/16' - - '150.255.0.0/16' - - '152.104.128.0/17' - - '152.136.0.0/16' - - '153.0.0.0/16' - - '153.3.0.0/16' - - '153.34.0.0/15' - - '153.36.0.0/15' - - '153.99.0.0/16' - - '153.101.0.0/16' - - '153.118.0.0/15' - - '154.8.128.0/17' - - '154.209.251.0/24' - - '155.126.176.0/23' - - '156.107.160.0/24' - - '156.107.170.0/24' - - '156.107.179.0/24' - - '156.107.181.0/24' - - '156.154.62.0/23' - - '157.0.0.0/16' - - '157.18.0.0/16' - - '157.61.0.0/16' - - '157.119.0.0/22' - - '157.119.8.0/21' - - '157.119.16.0/22' - - '157.119.28.0/22' - - '157.119.132.0/22' - - '157.119.136.0/21' - - '157.119.144.0/20' - - '157.119.160.0/21' - - '157.119.172.0/22' - - '157.119.192.0/21' - - '157.119.240.0/22' - - '157.119.252.0/22' - - '157.122.0.0/16' - - '157.133.186.0/23' - - '157.133.192.0/21' - - '157.133.212.0/24' - - '157.133.236.0/24' - - '157.148.0.0/16' - - '157.156.0.0/16' - - '157.255.0.0/16' - - '158.60.0.0/16' - - '158.79.0.0/24' - - '158.79.2.0/23' - - '158.79.4.0/22' - - '158.79.8.0/21' - - '158.79.16.0/20' - - '158.79.32.0/19' - - '158.79.64.0/18' - - '158.79.128.0/17' - - '159.27.0.0/16' - - '159.75.0.0/16' - - '159.221.232.0/22' - - '159.226.0.0/16' - - '160.19.208.0/21' - - '160.19.216.0/22' - - '160.20.48.0/22' - - '160.62.10.0/24' - - '160.83.109.0/24' - - '160.83.110.0/23' - - '160.202.60.0/23' - - '160.202.62.0/24' - - '160.202.148.0/22' - - '160.202.152.0/22' - - '160.202.212.0/22' - - '160.202.216.0/21' - - '160.202.224.0/19' - - '160.238.64.0/22' - - '161.49.5.7/32' - - '161.120.0.0/16' - - '161.163.0.0/21' - - '161.163.28.0/23' - - '161.189.0.0/16' - - '161.207.0.0/16' - - '162.14.0.0/21' - - '162.14.12.0/22' - - '162.14.16.0/21' - - '162.14.26.0/23' - - '162.14.28.0/22' - - '162.14.32.0/19' - - '162.14.64.0/18' - - '162.14.128.0/17' - - '162.105.0.0/16' - - '163.0.0.0/16' - - '163.47.4.0/22' - - '163.53.0.0/20' - - '163.53.36.0/22' - - '163.53.40.0/22' - - '163.53.48.0/20' - - '163.53.64.0/22' - - '163.53.88.0/21' - - '163.53.96.0/19' - - '163.53.128.0/21' - - '163.53.136.0/22' - - '163.53.160.0/20' - - '163.53.188.0/22' - - '163.53.220.0/22' - - '163.53.240.0/22' - - '163.125.0.0/16' - - '163.142.0.0/16' - - '163.177.0.0/16' - - '163.179.0.0/16' - - '163.204.0.0/16' - - '163.228.0.0/16' - - '163.244.246.0/24' - - '164.52.80.0/24' - - '165.154.100.0/22' - - '165.154.104.0/21' - - '165.154.112.0/20' - - '165.154.128.0/18' - - '165.154.192.0/19' - - '165.156.30.0/24' - - '166.111.0.0/16' - - '167.139.0.0/16' - - '167.189.0.0/16' - - '167.220.244.0/22' - - '168.159.144.0/21' - - '168.159.152.0/22' - - '168.159.156.0/23' - - '168.159.158.0/24' - - '168.160.0.0/16' - - '168.230.0.0/24' - - '170.179.0.0/16' - - '170.225.224.0/23' - - '170.252.152.0/21' - - '171.8.0.0/13' - - '171.34.0.0/15' - - '171.36.0.0/14' - - '171.40.0.0/13' - - '171.80.0.0/12' - - '171.104.0.0/13' - - '171.112.0.0/12' - - '171.208.0.0/12' - - '172.81.192.0/18' - - '173.39.200.0/23' - - '175.0.0.0/12' - - '175.16.0.0/13' - - '175.24.0.0/14' - - '175.30.0.0/15' - - '175.42.0.0/15' - - '175.44.0.0/16' - - '175.46.0.0/15' - - '175.48.0.0/12' - - '175.64.0.0/11' - - '175.102.0.0/16' - - '175.106.128.0/17' - - '175.111.144.0/20' - - '175.111.160.0/20' - - '175.111.184.0/22' - - '175.146.0.0/15' - - '175.148.0.0/14' - - '175.152.0.0/14' - - '175.158.96.0/22' - - '175.160.0.0/12' - - '175.176.156.0/22' - - '175.176.188.0/22' - - '175.178.0.0/16' - - '175.184.128.0/18' - - '175.185.0.0/16' - - '175.186.0.0/15' - - '175.188.0.0/14' - - '180.76.16.0/20' - - '180.76.32.0/19' - - '180.76.64.0/18' - - '180.76.128.0/17' - - '180.77.0.0/16' - - '180.78.0.0/15' - - '180.84.0.0/15' - - '180.86.0.0/16' - - '180.88.0.0/14' - - '180.92.176.0/23' - - '180.94.56.0/21' - - '180.94.96.0/23' - - '180.94.98.0/24' - - '180.94.100.0/22' - - '180.94.104.0/21' - - '180.94.120.0/21' - - '180.95.128.0/17' - - '180.96.0.0/11' - - '180.129.128.0/17' - - '180.130.0.0/16' - - '180.136.0.0/13' - - '180.148.16.0/21' - - '180.148.152.0/21' - - '180.148.216.0/21' - - '180.148.224.0/19' - - '180.149.128.0/19' - - '180.150.160.0/21' - - '180.150.176.0/20' - - '180.152.0.0/13' - - '180.160.0.0/12' - - '180.178.112.0/21' - - '180.178.192.0/18' - - '180.184.0.0/14' - - '180.188.0.0/17' - - '180.189.148.0/22' - - '180.200.252.0/22' - - '180.201.0.0/16' - - '180.202.0.0/15' - - '180.208.0.0/15' - - '180.210.212.0/22' - - '180.210.233.0/24' - - '180.210.236.0/22' - - '180.212.0.0/15' - - '180.222.224.0/19' - - '180.223.0.0/18' - - '180.223.83.0/24' - - '180.223.84.0/22' - - '180.223.88.0/21' - - '180.223.96.0/19' - - '180.233.0.0/18' - - '180.233.64.0/19' - - '180.233.144.0/22' - - '180.235.64.0/19' - - '180.235.112.0/22' - - '182.16.144.0/21' - - '182.16.192.0/19' - - '182.18.0.0/17' - - '182.23.184.0/21' - - '182.23.200.0/21' - - '182.32.0.0/12' - - '182.48.96.0/19' - - '182.49.0.0/16' - - '182.50.0.0/22' - - '182.50.8.0/21' - - '182.50.112.0/20' - - '182.51.0.0/16' - - '182.54.0.0/17' - - '182.61.0.0/18' - - '182.61.128.0/19' - - '182.61.192.0/18' - - '182.80.0.0/13' - - '182.88.0.0/14' - - '182.92.0.0/16' - - '182.96.0.0/11' - - '182.128.0.0/12' - - '182.144.0.0/13' - - '182.157.0.0/16' - - '182.160.52.0/22' - - '182.160.56.0/22' - - '182.160.60.0/23' - - '182.160.62.0/24' - - '182.160.64.0/19' - - '182.174.0.0/15' - - '182.200.0.0/13' - - '182.236.128.0/17' - - '182.237.24.0/21' - - '182.238.0.0/16' - - '182.239.0.0/19' - - '182.240.0.0/13' - - '182.254.0.0/18' - - '182.254.64.0/19' - - '182.254.96.0/20' - - '182.254.112.0/22' - - '182.254.117.0/24' - - '182.254.119.0/24' - - '182.254.120.0/21' - - '182.254.128.0/17' - - '183.0.0.0/10' - - '183.64.0.0/13' - - '183.78.160.0/21' - - '183.78.180.0/22' - - '183.81.180.0/22' - - '183.84.0.0/15' - - '183.91.128.0/22' - - '183.91.136.0/21' - - '183.91.144.0/20' - - '183.92.0.0/14' - - '183.128.0.0/11' - - '183.160.0.0/13' - - '183.168.0.0/15' - - '183.170.0.0/16' - - '183.172.0.0/14' - - '183.184.0.0/13' - - '183.192.0.0/10' - - '185.109.236.0/24' - - '188.131.128.0/17' - - '192.11.23.0/24' - - '192.11.26.0/24' - - '192.11.39.0/24' - - '192.11.236.0/24' - - '192.23.191.0/24' - - '192.55.10.0/23' - - '192.55.40.0/24' - - '192.55.46.0/24' - - '192.55.68.0/22' - - '192.102.204.0/22' - - '192.124.154.0/24' - - '192.137.31.0/24' - - '192.140.128.0/21' - - '192.140.136.0/22' - - '192.140.156.0/22' - - '192.140.160.0/19' - - '192.140.192.0/20' - - '192.140.208.0/21' - - '192.144.128.0/17' - - '192.163.11.0/24' - - '192.232.97.0/24' - - '193.17.120.0/22' - - '193.20.64.0/22' - - '193.112.0.0/16' - - '193.200.222.160/28' - - '194.138.136.0/24' - - '194.138.202.0/23' - - '194.138.245.0/24' - - '198.175.100.0/22' - - '198.208.17.0/24' - - '198.208.19.0/24' - - '199.7.72.0/24' - - '199.65.192.0/21' - - '199.244.144.0/24' - - '202.0.100.0/23' - - '202.0.122.0/23' - - '202.1.64.0/23' - - '202.1.68.0/23' - - '202.1.72.0/21' - - '202.1.80.0/20' - - '202.1.96.0/23' - - '202.1.100.0/22' - - '202.1.104.0/22' - - '202.1.110.0/23' - - '202.1.112.0/23' - - '202.3.128.0/23' - - '202.4.128.0/19' - - '202.4.252.0/22' - - '202.5.208.0/21' - - '202.5.216.0/22' - - '202.6.6.0/23' - - '202.6.66.0/23' - - '202.6.72.0/23' - - '202.6.87.0/24' - - '202.6.88.0/23' - - '202.6.92.0/23' - - '202.6.103.0/24' - - '202.6.108.0/24' - - '202.6.110.0/23' - - '202.6.114.0/24' - - '202.6.176.0/20' - - '202.8.0.0/24' - - '202.8.2.0/23' - - '202.8.4.0/23' - - '202.8.12.0/24' - - '202.8.24.0/24' - - '202.8.77.0/24' - - '202.8.128.0/19' - - '202.8.192.0/20' - - '202.9.32.0/24' - - '202.9.34.0/23' - - '202.9.48.0/23' - - '202.9.51.0/24' - - '202.9.52.0/23' - - '202.9.54.0/24' - - '202.9.57.0/24' - - '202.9.58.0/23' - - '202.10.64.0/21' - - '202.10.74.0/23' - - '202.10.76.0/22' - - '202.10.112.0/20' - - '202.12.1.0/24' - - '202.12.2.0/24' - - '202.12.17.0/24' - - '202.12.18.0/23' - - '202.12.72.0/24' - - '202.12.84.0/23' - - '202.12.96.0/24' - - '202.12.98.0/23' - - '202.12.106.0/24' - - '202.12.111.0/24' - - '202.12.116.0/24' - - '202.14.64.0/23' - - '202.14.69.0/24' - - '202.14.73.0/24' - - '202.14.74.0/23' - - '202.14.76.0/24' - - '202.14.78.0/23' - - '202.14.88.0/24' - - '202.14.97.0/24' - - '202.14.104.0/23' - - '202.14.108.0/23' - - '202.14.111.0/24' - - '202.14.114.0/23' - - '202.14.118.0/23' - - '202.14.124.0/23' - - '202.14.127.0/24' - - '202.14.129.0/24' - - '202.14.135.0/24' - - '202.14.136.0/24' - - '202.14.149.0/24' - - '202.14.151.0/24' - - '202.14.157.0/24' - - '202.14.158.0/23' - - '202.14.169.0/24' - - '202.14.170.0/23' - - '202.14.172.0/22' - - '202.14.176.0/24' - - '202.14.184.0/23' - - '202.14.208.0/23' - - '202.14.213.0/24' - - '202.14.219.0/24' - - '202.14.220.0/24' - - '202.14.222.0/23' - - '202.14.225.0/24' - - '202.14.226.0/23' - - '202.14.231.0/24' - - '202.14.235.0/24' - - '202.14.236.0/22' - - '202.14.246.0/24' - - '202.14.251.0/24' - - '202.20.66.0/24' - - '202.20.79.0/24' - - '202.20.87.0/24' - - '202.20.88.0/23' - - '202.20.90.0/24' - - '202.20.94.0/23' - - '202.20.114.0/24' - - '202.20.117.0/24' - - '202.20.120.0/24' - - '202.20.125.0/24' - - '202.20.126.0/23' - - '202.21.48.0/20' - - '202.21.131.0/24' - - '202.21.132.0/24' - - '202.21.141.0/24' - - '202.21.142.0/24' - - '202.21.147.0/24' - - '202.21.148.0/24' - - '202.21.150.0/23' - - '202.21.152.0/23' - - '202.21.154.0/24' - - '202.21.156.0/24' - - '202.21.208.0/24' - - '202.22.248.0/21' - - '202.27.12.0/24' - - '202.27.14.0/24' - - '202.27.136.0/23' - - '202.36.226.0/24' - - '202.38.0.0/22' - - '202.38.8.0/21' - - '202.38.48.0/20' - - '202.38.64.0/18' - - '202.38.128.0/21' - - '202.38.136.0/23' - - '202.38.138.0/24' - - '202.38.140.0/22' - - '202.38.146.0/23' - - '202.38.149.0/24' - - '202.38.150.0/23' - - '202.38.152.0/22' - - '202.38.156.0/24' - - '202.38.158.0/23' - - '202.38.160.0/23' - - '202.38.164.0/22' - - '202.38.168.0/22' - - '202.38.176.0/23' - - '202.38.184.0/21' - - '202.38.192.0/18' - - '202.40.4.0/23' - - '202.40.7.0/24' - - '202.40.15.0/24' - - '202.40.135.0/24' - - '202.40.136.0/24' - - '202.40.140.0/24' - - '202.40.143.0/24' - - '202.40.144.0/23' - - '202.40.150.0/24' - - '202.40.155.0/24' - - '202.40.156.0/24' - - '202.40.158.0/23' - - '202.40.162.0/24' - - '202.41.8.0/23' - - '202.41.11.0/24' - - '202.41.12.0/23' - - '202.41.128.0/24' - - '202.41.130.0/23' - - '202.41.142.0/24' - - '202.41.152.0/21' - - '202.41.192.0/24' - - '202.41.196.0/22' - - '202.41.200.0/22' - - '202.41.240.0/20' - - '202.43.76.0/22' - - '202.43.144.0/20' - - '202.44.16.0/20' - - '202.44.48.0/22' - - '202.44.67.0/24' - - '202.44.74.0/24' - - '202.44.97.0/24' - - '202.44.129.0/24' - - '202.44.132.0/23' - - '202.44.146.0/23' - - '202.45.0.0/23' - - '202.45.2.0/24' - - '202.45.15.0/24' - - '202.45.16.0/20' - - '202.46.16.0/23' - - '202.46.18.0/24' - - '202.46.20.0/23' - - '202.46.128.0/24' - - '202.46.224.0/20' - - '202.47.82.0/23' - - '202.47.96.0/20' - - '202.47.126.0/24' - - '202.47.128.0/24' - - '202.47.130.0/23' - - '202.52.34.0/24' - - '202.52.143.0/24' - - '202.53.140.0/24' - - '202.53.143.0/24' - - '202.57.212.0/22' - - '202.57.216.0/22' - - '202.57.240.0/20' - - '202.58.0.0/24' - - '202.58.112.0/22' - - '202.59.0.0/23' - - '202.59.212.0/22' - - '202.59.236.0/24' - - '202.59.240.0/24' - - '202.60.48.0/21' - - '202.60.96.0/21' - - '202.60.112.0/20' - - '202.60.132.0/22' - - '202.60.136.0/21' - - '202.60.144.0/20' - - '202.61.68.0/22' - - '202.61.76.0/22' - - '202.61.88.0/22' - - '202.61.123.0/24' - - '202.61.127.0/24' - - '202.62.112.0/22' - - '202.62.248.0/22' - - '202.62.252.0/24' - - '202.62.255.0/24' - - '202.63.80.0/20' - - '202.63.160.0/19' - - '202.63.248.0/22' - - '202.63.253.0/24' - - '202.65.0.0/21' - - '202.65.8.0/23' - - '202.67.0.0/22' - - '202.69.4.0/23' - - '202.69.16.0/20' - - '202.70.0.0/19' - - '202.70.96.0/20' - - '202.70.192.0/20' - - '202.71.32.0/20' - - '202.72.40.0/21' - - '202.72.80.0/20' - - '202.72.112.0/20' - - '202.73.128.0/22' - - '202.73.240.0/20' - - '202.74.8.0/21' - - '202.74.36.0/24' - - '202.74.42.0/24' - - '202.74.52.0/24' - - '202.74.80.0/20' - - '202.74.254.0/23' - - '202.75.208.0/20' - - '202.75.252.0/22' - - '202.76.247.0/24' - - '202.76.252.0/22' - - '202.77.80.0/21' - - '202.77.92.0/22' - - '202.78.8.0/21' - - '202.79.224.0/21' - - '202.79.248.0/22' - - '202.80.192.0/20' - - '202.81.0.0/22' - - '202.81.176.0/20' - - '202.83.252.0/22' - - '202.84.4.0/22' - - '202.84.8.0/21' - - '202.84.16.0/23' - - '202.84.22.0/24' - - '202.84.24.0/21' - - '202.85.208.0/20' - - '202.86.249.0/24' - - '202.87.80.0/20' - - '202.88.32.0/22' - - '202.89.8.0/21' - - '202.89.96.0/22' - - '202.89.108.0/22' - - '202.89.119.0/24' - - '202.89.232.0/21' - - '202.90.0.0/22' - - '202.90.16.0/20' - - '202.90.37.0/24' - - '202.90.96.0/19' - - '202.90.193.0/24' - - '202.90.196.0/24' - - '202.90.205.0/24' - - '202.90.224.0/20' - - '202.91.0.0/22' - - '202.91.96.0/20' - - '202.91.128.0/22' - - '202.91.176.0/20' - - '202.91.224.0/19' - - '202.92.0.0/22' - - '202.92.8.0/21' - - '202.92.48.0/20' - - '202.92.252.0/22' - - '202.93.0.0/22' - - '202.93.252.0/22' - - '202.94.0.0/19' - - '202.94.74.0/24' - - '202.94.81.0/24' - - '202.94.92.0/22' - - '202.95.240.0/21' - - '202.95.252.0/22' - - '202.96.0.0/12' - - '202.112.0.0/13' - - '202.120.0.0/15' - - '202.122.0.0/21' - - '202.122.32.0/21' - - '202.122.64.0/19' - - '202.122.112.0/20' - - '202.122.128.0/24' - - '202.122.132.0/24' - - '202.123.96.0/20' - - '202.123.116.0/22' - - '202.123.120.0/22' - - '202.124.16.0/21' - - '202.124.24.0/22' - - '202.125.107.0/24' - - '202.125.109.0/24' - - '202.125.112.0/20' - - '202.125.176.0/20' - - '202.127.0.0/21' - - '202.127.12.0/22' - - '202.127.16.0/20' - - '202.127.40.0/21' - - '202.127.48.0/20' - - '202.127.112.0/20' - - '202.127.128.0/19' - - '202.127.160.0/21' - - '202.127.192.0/20' - - '202.127.208.0/23' - - '202.127.212.0/22' - - '202.127.216.0/21' - - '202.127.224.0/19' - - '202.129.208.0/24' - - '202.130.0.0/19' - - '202.130.39.0/24' - - '202.130.224.0/19' - - '202.131.16.0/21' - - '202.131.59.0/24' - - '202.131.208.0/20' - - '202.133.32.0/20' - - '202.134.58.0/24' - - '202.134.128.0/20' - - '202.134.208.0/20' - - '202.136.48.0/20' - - '202.136.208.0/20' - - '202.136.224.0/20' - - '202.136.248.0/22' - - '202.136.254.0/23' - - '202.137.231.0/24' - - '202.140.140.0/22' - - '202.140.144.0/20' - - '202.141.160.0/19' - - '202.142.16.0/20' - - '202.143.4.0/22' - - '202.143.16.0/20' - - '202.143.32.0/20' - - '202.143.56.0/21' - - '202.143.100.0/22' - - '202.143.104.0/22' - - '202.146.160.0/20' - - '202.146.186.0/24' - - '202.146.188.0/22' - - '202.146.196.0/22' - - '202.146.200.0/21' - - '202.147.144.0/20' - - '202.148.32.0/20' - - '202.148.64.0/18' - - '202.149.32.0/19' - - '202.149.160.0/19' - - '202.149.224.0/19' - - '202.150.16.0/20' - - '202.150.32.0/20' - - '202.150.56.0/22' - - '202.150.192.0/20' - - '202.150.224.0/19' - - '202.151.0.0/22' - - '202.151.128.0/19' - - '202.152.176.0/20' - - '202.153.0.0/22' - - '202.153.7.0/24' - - '202.153.48.0/20' - - '202.157.192.0/19' - - '202.158.160.0/19' - - '202.158.242.0/24' - - '202.160.140.0/22' - - '202.160.156.0/22' - - '202.160.176.64/29' - - '202.160.176.72/30' - - '202.160.176.76/32' - - '202.160.176.78/31' - - '202.160.176.80/28' - - '202.160.176.96/27' - - '202.160.176.128/25' - - '202.160.177.0/24' - - '202.160.178.0/23' - - '202.160.180.0/22' - - '202.160.184.0/21' - - '202.162.67.0/24' - - '202.162.75.0/24' - - '202.164.0.0/20' - - '202.164.96.0/19' - - '202.165.176.0/20' - - '202.165.208.0/20' - - '202.165.239.0/24' - - '202.165.240.0/23' - - '202.165.243.0/24' - - '202.165.245.0/24' - - '202.165.251.0/24' - - '202.165.252.0/22' - - '202.166.224.0/19' - - '202.168.80.0/22' - - '202.168.128.0/20' - - '202.168.160.0/19' - - '202.170.128.0/19' - - '202.170.216.0/21' - - '202.170.224.0/19' - - '202.171.216.0/21' - - '202.171.232.0/24' - - '202.171.235.0/24' - - '202.172.0.0/22' - - '202.172.7.0/24' - - '202.173.0.0/22' - - '202.173.6.0/24' - - '202.173.8.0/21' - - '202.173.112.0/22' - - '202.173.224.0/19' - - '202.174.64.0/20' - - '202.174.124.0/22' - - '202.176.224.0/19' - - '202.179.160.0/20' - - '202.179.240.0/20' - - '202.180.128.0/19' - - '202.180.208.0/21' - - '202.181.8.0/22' - - '202.181.28.0/22' - - '202.181.112.0/20' - - '202.182.32.0/20' - - '202.182.192.0/19' - - '202.189.0.0/18' - - '202.189.80.0/20' - - '202.189.184.0/21' - - '202.191.0.0/24' - - '202.191.68.0/22' - - '202.191.72.0/21' - - '202.191.80.0/20' - - '202.192.0.0/12' - - '203.0.4.0/22' - - '203.0.10.0/23' - - '203.0.18.0/24' - - '203.0.24.0/24' - - '203.0.42.0/23' - - '203.0.45.0/24' - - '203.0.46.0/23' - - '203.0.81.0/24' - - '203.0.82.0/23' - - '203.0.90.0/23' - - '203.0.96.0/23' - - '203.0.104.0/21' - - '203.0.114.0/23' - - '203.0.122.0/24' - - '203.0.128.0/24' - - '203.0.130.0/23' - - '203.0.132.0/22' - - '203.0.137.0/24' - - '203.0.142.0/24' - - '203.0.144.0/24' - - '203.0.146.0/24' - - '203.0.148.0/24' - - '203.0.150.0/23' - - '203.0.152.0/24' - - '203.0.177.0/24' - - '203.0.224.0/24' - - '203.1.4.0/22' - - '203.1.18.0/24' - - '203.1.26.0/23' - - '203.1.65.0/24' - - '203.1.66.0/23' - - '203.1.70.0/23' - - '203.1.76.0/23' - - '203.1.90.0/24' - - '203.1.97.0/24' - - '203.1.98.0/23' - - '203.1.100.0/22' - - '203.1.108.0/24' - - '203.1.253.0/24' - - '203.1.254.0/24' - - '203.2.64.0/21' - - '203.2.73.0/24' - - '203.2.112.0/21' - - '203.2.126.0/23' - - '203.2.140.0/24' - - '203.2.150.0/24' - - '203.2.152.0/22' - - '203.2.156.0/23' - - '203.2.160.0/21' - - '203.2.180.0/23' - - '203.2.196.0/23' - - '203.2.209.0/24' - - '203.2.214.0/23' - - '203.2.226.0/23' - - '203.2.229.0/24' - - '203.2.236.0/23' - - '203.3.68.0/24' - - '203.3.72.0/23' - - '203.3.75.0/24' - - '203.3.80.0/21' - - '203.3.96.0/22' - - '203.3.105.0/24' - - '203.3.112.0/21' - - '203.3.120.0/24' - - '203.3.123.0/24' - - '203.3.135.0/24' - - '203.3.139.0/24' - - '203.3.143.0/24' - - '203.4.132.0/23' - - '203.4.134.0/24' - - '203.4.151.0/24' - - '203.4.152.0/22' - - '203.4.174.0/23' - - '203.4.180.0/24' - - '203.4.186.0/24' - - '203.4.205.0/24' - - '203.4.208.0/22' - - '203.4.227.0/24' - - '203.4.230.0/23' - - '203.5.4.0/23' - - '203.5.7.0/24' - - '203.5.8.0/23' - - '203.5.11.0/24' - - '203.5.21.0/24' - - '203.5.22.0/24' - - '203.5.44.0/24' - - '203.5.46.0/23' - - '203.5.52.0/22' - - '203.5.56.0/23' - - '203.5.60.0/23' - - '203.5.114.0/23' - - '203.5.118.0/24' - - '203.5.120.0/24' - - '203.5.172.0/24' - - '203.5.180.0/23' - - '203.5.182.0/24' - - '203.5.185.0/24' - - '203.5.186.0/24' - - '203.5.188.0/23' - - '203.5.190.0/24' - - '203.5.195.0/24' - - '203.5.214.0/23' - - '203.5.218.0/23' - - '203.6.131.0/24' - - '203.6.136.0/24' - - '203.6.138.0/23' - - '203.6.142.0/24' - - '203.6.150.0/23' - - '203.6.157.0/24' - - '203.6.159.0/24' - - '203.6.224.0/20' - - '203.6.248.0/23' - - '203.7.129.0/24' - - '203.7.138.0/23' - - '203.7.147.0/24' - - '203.7.150.0/23' - - '203.7.158.0/24' - - '203.7.192.0/23' - - '203.7.200.0/24' - - '203.8.0.0/24' - - '203.8.8.0/24' - - '203.8.23.0/24' - - '203.8.70.0/24' - - '203.8.82.0/24' - - '203.8.86.0/23' - - '203.8.91.0/24' - - '203.8.110.0/23' - - '203.8.115.0/24' - - '203.8.166.0/23' - - '203.8.169.0/24' - - '203.8.173.0/24' - - '203.8.184.0/24' - - '203.8.186.0/23' - - '203.8.190.0/23' - - '203.8.192.0/24' - - '203.8.197.0/24' - - '203.8.198.0/23' - - '203.8.203.0/24' - - '203.8.209.0/24' - - '203.8.210.0/23' - - '203.8.212.0/22' - - '203.8.217.0/24' - - '203.8.220.0/24' - - '203.9.32.0/24' - - '203.9.36.0/23' - - '203.9.57.0/24' - - '203.9.63.0/24' - - '203.9.65.0/24' - - '203.9.70.0/23' - - '203.9.72.0/24' - - '203.9.75.0/24' - - '203.9.76.0/23' - - '203.9.96.0/22' - - '203.9.100.0/23' - - '203.9.108.0/24' - - '203.9.158.0/24' - - '203.10.34.0/24' - - '203.10.56.0/24' - - '203.10.74.0/23' - - '203.10.84.0/22' - - '203.10.88.0/24' - - '203.10.95.0/24' - - '203.10.125.0/24' - - '203.11.70.0/24' - - '203.11.76.0/22' - - '203.11.82.0/24' - - '203.11.84.0/22' - - '203.11.100.0/22' - - '203.11.109.0/24' - - '203.11.117.0/24' - - '203.11.122.0/24' - - '203.11.126.0/24' - - '203.11.136.0/22' - - '203.11.141.0/24' - - '203.11.142.0/23' - - '203.11.180.0/22' - - '203.11.208.0/22' - - '203.12.16.0/24' - - '203.12.19.0/24' - - '203.12.24.0/24' - - '203.12.57.0/24' - - '203.12.65.0/24' - - '203.12.66.0/24' - - '203.12.70.0/23' - - '203.12.87.0/24' - - '203.12.100.0/23' - - '203.12.103.0/24' - - '203.12.114.0/24' - - '203.12.118.0/24' - - '203.12.130.0/24' - - '203.12.137.0/24' - - '203.12.196.0/22' - - '203.12.211.0/24' - - '203.12.219.0/24' - - '203.12.226.0/24' - - '203.12.240.0/22' - - '203.13.18.0/24' - - '203.13.24.0/24' - - '203.13.44.0/23' - - '203.13.88.0/23' - - '203.13.92.0/22' - - '203.13.173.0/24' - - '203.13.224.0/23' - - '203.13.227.0/24' - - '203.13.233.0/24' - - '203.14.24.0/22' - - '203.14.33.0/24' - - '203.14.56.0/24' - - '203.14.61.0/24' - - '203.14.62.0/24' - - '203.14.104.0/24' - - '203.14.114.0/23' - - '203.14.118.0/24' - - '203.14.162.0/24' - - '203.14.184.0/21' - - '203.14.192.0/24' - - '203.14.194.0/23' - - '203.14.214.0/24' - - '203.14.231.0/24' - - '203.14.246.0/24' - - '203.15.0.0/20' - - '203.15.20.0/23' - - '203.15.22.0/24' - - '203.15.87.0/24' - - '203.15.88.0/23' - - '203.15.105.0/24' - - '203.15.112.0/21' - - '203.15.130.0/23' - - '203.15.149.0/24' - - '203.15.151.0/24' - - '203.15.156.0/22' - - '203.15.174.0/24' - - '203.15.227.0/24' - - '203.15.232.0/22' - - '203.15.238.0/23' - - '203.15.240.0/23' - - '203.15.246.0/24' - - '203.16.10.0/24' - - '203.16.12.0/23' - - '203.16.16.0/21' - - '203.16.27.0/24' - - '203.16.38.0/24' - - '203.16.49.0/24' - - '203.16.50.0/23' - - '203.16.58.0/24' - - '203.16.63.0/24' - - '203.16.133.0/24' - - '203.16.161.0/24' - - '203.16.162.0/24' - - '203.16.186.0/23' - - '203.16.228.0/24' - - '203.16.238.0/24' - - '203.16.240.0/24' - - '203.16.245.0/24' - - '203.17.2.0/24' - - '203.17.18.0/24' - - '203.17.28.0/24' - - '203.17.39.0/24' - - '203.17.56.0/24' - - '203.17.74.0/23' - - '203.17.88.0/23' - - '203.17.136.0/24' - - '203.17.164.0/24' - - '203.17.187.0/24' - - '203.17.190.0/23' - - '203.17.231.0/24' - - '203.17.233.0/24' - - '203.17.248.0/23' - - '203.17.255.0/24' - - '203.18.2.0/23' - - '203.18.4.0/24' - - '203.18.7.0/24' - - '203.18.31.0/24' - - '203.18.37.0/24' - - '203.18.48.0/23' - - '203.18.52.0/24' - - '203.18.72.0/22' - - '203.18.80.0/23' - - '203.18.87.0/24' - - '203.18.100.0/23' - - '203.18.105.0/24' - - '203.18.107.0/24' - - '203.18.110.0/24' - - '203.18.129.0/24' - - '203.18.131.0/24' - - '203.18.132.0/23' - - '203.18.144.0/24' - - '203.18.153.0/24' - - '203.18.199.0/24' - - '203.18.208.0/24' - - '203.18.211.0/24' - - '203.18.215.0/24' - - '203.19.1.0/24' - - '203.19.18.0/24' - - '203.19.24.0/24' - - '203.19.30.0/24' - - '203.19.41.0/24' - - '203.19.44.0/23' - - '203.19.46.0/24' - - '203.19.58.0/24' - - '203.19.60.0/23' - - '203.19.64.0/24' - - '203.19.68.0/24' - - '203.19.72.0/24' - - '203.19.101.0/24' - - '203.19.111.0/24' - - '203.19.131.0/24' - - '203.19.133.0/24' - - '203.19.144.0/24' - - '203.19.147.0/24' - - '203.19.149.0/24' - - '203.19.156.0/24' - - '203.19.176.0/24' - - '203.19.178.0/23' - - '203.19.208.0/24' - - '203.19.228.0/22' - - '203.19.233.0/24' - - '203.19.242.0/24' - - '203.19.248.0/23' - - '203.19.255.0/24' - - '203.20.17.0/24' - - '203.20.40.0/23' - - '203.20.44.0/24' - - '203.20.48.0/24' - - '203.20.61.0/24' - - '203.20.65.0/24' - - '203.20.84.0/23' - - '203.20.89.0/24' - - '203.20.106.0/23' - - '203.20.115.0/24' - - '203.20.117.0/24' - - '203.20.118.0/23' - - '203.20.122.0/24' - - '203.20.126.0/23' - - '203.20.135.0/24' - - '203.20.140.0/22' - - '203.20.150.0/24' - - '203.20.230.0/24' - - '203.20.232.0/24' - - '203.20.236.0/24' - - '203.21.0.0/23' - - '203.21.2.0/24' - - '203.21.8.0/24' - - '203.21.10.0/24' - - '203.21.18.0/24' - - '203.21.33.0/24' - - '203.21.34.0/24' - - '203.21.41.0/24' - - '203.21.44.0/24' - - '203.21.68.0/24' - - '203.21.82.0/24' - - '203.21.96.0/22' - - '203.21.124.0/24' - - '203.21.136.0/23' - - '203.21.145.0/24' - - '203.21.206.0/24' - - '203.22.24.0/24' - - '203.22.28.0/23' - - '203.22.31.0/24' - - '203.22.68.0/24' - - '203.22.76.0/24' - - '203.22.78.0/24' - - '203.22.84.0/24' - - '203.22.87.0/24' - - '203.22.92.0/22' - - '203.22.99.0/24' - - '203.22.106.0/24' - - '203.22.122.0/23' - - '203.22.131.0/24' - - '203.22.163.0/24' - - '203.22.166.0/24' - - '203.22.170.0/24' - - '203.22.194.0/24' - - '203.22.242.0/23' - - '203.22.245.0/24' - - '203.22.246.0/24' - - '203.22.252.0/23' - - '203.23.0.0/24' - - '203.23.47.0/24' - - '203.23.61.0/24' - - '203.23.62.0/23' - - '203.23.73.0/24' - - '203.23.85.0/24' - - '203.23.92.0/22' - - '203.23.98.0/24' - - '203.23.107.0/24' - - '203.23.112.0/24' - - '203.23.130.0/24' - - '203.23.140.0/23' - - '203.23.172.0/24' - - '203.23.182.0/24' - - '203.23.186.0/23' - - '203.23.192.0/24' - - '203.23.197.0/24' - - '203.23.198.0/24' - - '203.23.204.0/22' - - '203.23.224.0/24' - - '203.23.226.0/23' - - '203.23.228.0/22' - - '203.23.249.0/24' - - '203.23.251.0/24' - - '203.24.13.0/24' - - '203.24.18.0/24' - - '203.24.27.0/24' - - '203.24.43.0/24' - - '203.24.56.0/24' - - '203.24.58.0/24' - - '203.24.67.0/24' - - '203.24.74.0/24' - - '203.24.79.0/24' - - '203.24.80.0/23' - - '203.24.84.0/23' - - '203.24.86.0/24' - - '203.24.90.0/24' - - '203.24.111.0/24' - - '203.24.112.0/24' - - '203.24.116.0/24' - - '203.24.122.0/23' - - '203.24.145.0/24' - - '203.24.152.0/23' - - '203.24.157.0/24' - - '203.24.161.0/24' - - '203.24.167.0/24' - - '203.24.186.0/23' - - '203.24.199.0/24' - - '203.24.202.0/24' - - '203.24.212.0/23' - - '203.24.217.0/24' - - '203.24.219.0/24' - - '203.24.244.0/24' - - '203.25.19.0/24' - - '203.25.20.0/23' - - '203.25.46.0/24' - - '203.25.64.0/23' - - '203.25.91.0/24' - - '203.25.99.0/24' - - '203.25.100.0/24' - - '203.25.106.0/24' - - '203.25.131.0/24' - - '203.25.135.0/24' - - '203.25.138.0/24' - - '203.25.147.0/24' - - '203.25.153.0/24' - - '203.25.154.0/23' - - '203.25.164.0/24' - - '203.25.166.0/24' - - '203.25.174.0/23' - - '203.25.180.0/24' - - '203.25.182.0/24' - - '203.25.191.0/24' - - '203.25.199.0/24' - - '203.25.200.0/24' - - '203.25.202.0/23' - - '203.25.208.0/20' - - '203.25.229.0/24' - - '203.25.235.0/24' - - '203.25.236.0/24' - - '203.25.242.0/24' - - '203.26.12.0/24' - - '203.26.34.0/24' - - '203.26.49.0/24' - - '203.26.50.0/24' - - '203.26.55.0/24' - - '203.26.56.0/23' - - '203.26.60.0/24' - - '203.26.65.0/24' - - '203.26.68.0/24' - - '203.26.76.0/24' - - '203.26.80.0/24' - - '203.26.84.0/24' - - '203.26.97.0/24' - - '203.26.102.0/23' - - '203.26.115.0/24' - - '203.26.116.0/24' - - '203.26.129.0/24' - - '203.26.143.0/24' - - '203.26.144.0/24' - - '203.26.148.0/23' - - '203.26.154.0/24' - - '203.26.158.0/23' - - '203.26.170.0/24' - - '203.26.173.0/24' - - '203.26.176.0/24' - - '203.26.185.0/24' - - '203.26.202.0/23' - - '203.26.210.0/24' - - '203.26.214.0/24' - - '203.26.222.0/24' - - '203.26.224.0/24' - - '203.26.228.0/24' - - '203.26.232.0/24' - - '203.27.0.0/24' - - '203.27.10.0/24' - - '203.27.15.0/24' - - '203.27.16.0/24' - - '203.27.20.0/24' - - '203.27.22.0/23' - - '203.27.40.0/24' - - '203.27.45.0/24' - - '203.27.53.0/24' - - '203.27.65.0/24' - - '203.27.66.0/24' - - '203.27.81.0/24' - - '203.27.88.0/24' - - '203.27.102.0/24' - - '203.27.109.0/24' - - '203.27.117.0/24' - - '203.27.121.0/24' - - '203.27.122.0/23' - - '203.27.125.0/24' - - '203.27.200.0/24' - - '203.27.202.0/24' - - '203.27.233.0/24' - - '203.27.241.0/24' - - '203.27.250.0/24' - - '203.28.10.0/24' - - '203.28.12.0/24' - - '203.28.33.0/24' - - '203.28.34.0/23' - - '203.28.43.0/24' - - '203.28.44.0/24' - - '203.28.54.0/24' - - '203.28.56.0/24' - - '203.28.73.0/24' - - '203.28.74.0/24' - - '203.28.76.0/24' - - '203.28.86.0/24' - - '203.28.88.0/24' - - '203.28.112.0/24' - - '203.28.131.0/24' - - '203.28.136.0/24' - - '203.28.140.0/24' - - '203.28.145.0/24' - - '203.28.165.0/24' - - '203.28.169.0/24' - - '203.28.170.0/24' - - '203.28.178.0/23' - - '203.28.185.0/24' - - '203.28.187.0/24' - - '203.28.196.0/24' - - '203.28.226.0/23' - - '203.28.239.0/24' - - '203.29.2.0/24' - - '203.29.8.0/23' - - '203.29.13.0/24' - - '203.29.14.0/24' - - '203.29.28.0/24' - - '203.29.46.0/24' - - '203.29.57.0/24' - - '203.29.61.0/24' - - '203.29.63.0/24' - - '203.29.69.0/24' - - '203.29.73.0/24' - - '203.29.81.0/24' - - '203.29.90.0/24' - - '203.29.95.0/24' - - '203.29.100.0/24' - - '203.29.103.0/24' - - '203.29.112.0/24' - - '203.29.120.0/22' - - '203.29.182.0/23' - - '203.29.187.0/24' - - '203.29.189.0/24' - - '203.29.190.0/24' - - '203.29.205.0/24' - - '203.29.210.0/24' - - '203.29.217.0/24' - - '203.29.227.0/24' - - '203.29.231.0/24' - - '203.29.233.0/24' - - '203.29.234.0/24' - - '203.29.248.0/24' - - '203.29.254.0/23' - - '203.30.16.0/23' - - '203.30.25.0/24' - - '203.30.27.0/24' - - '203.30.29.0/24' - - '203.30.66.0/24' - - '203.30.81.0/24' - - '203.30.87.0/24' - - '203.30.111.0/24' - - '203.30.121.0/24' - - '203.30.123.0/24' - - '203.30.152.0/24' - - '203.30.156.0/24' - - '203.30.162.0/24' - - '203.30.173.0/24' - - '203.30.175.0/24' - - '203.30.187.0/24' - - '203.30.194.0/24' - - '203.30.217.0/24' - - '203.30.220.0/24' - - '203.30.222.0/24' - - '203.30.232.0/23' - - '203.30.235.0/24' - - '203.30.240.0/23' - - '203.30.246.0/24' - - '203.30.250.0/23' - - '203.31.45.0/24' - - '203.31.46.0/24' - - '203.31.49.0/24' - - '203.31.51.0/24' - - '203.31.54.0/23' - - '203.31.69.0/24' - - '203.31.72.0/24' - - '203.31.80.0/24' - - '203.31.85.0/24' - - '203.31.97.0/24' - - '203.31.105.0/24' - - '203.31.106.0/24' - - '203.31.108.0/23' - - '203.31.124.0/24' - - '203.31.162.0/24' - - '203.31.174.0/24' - - '203.31.177.0/24' - - '203.31.181.0/24' - - '203.31.187.0/24' - - '203.31.189.0/24' - - '203.31.204.0/24' - - '203.31.220.0/24' - - '203.31.222.0/23' - - '203.31.225.0/24' - - '203.31.229.0/24' - - '203.31.248.0/23' - - '203.31.253.0/24' - - '203.32.20.0/24' - - '203.32.48.0/23' - - '203.32.56.0/24' - - '203.32.60.0/24' - - '203.32.62.0/24' - - '203.32.68.0/23' - - '203.32.76.0/24' - - '203.32.81.0/24' - - '203.32.84.0/23' - - '203.32.95.0/24' - - '203.32.102.0/24' - - '203.32.105.0/24' - - '203.32.130.0/24' - - '203.32.133.0/24' - - '203.32.140.0/24' - - '203.32.152.0/24' - - '203.32.186.0/23' - - '203.32.192.0/24' - - '203.32.196.0/24' - - '203.32.203.0/24' - - '203.32.204.0/23' - - '203.32.212.0/24' - - '203.33.4.0/24' - - '203.33.7.0/24' - - '203.33.12.0/23' - - '203.33.21.0/24' - - '203.33.26.0/24' - - '203.33.32.0/24' - - '203.33.63.0/24' - - '203.33.64.0/24' - - '203.33.67.0/24' - - '203.33.68.0/24' - - '203.33.73.0/24' - - '203.33.79.0/24' - - '203.33.100.0/24' - - '203.33.122.0/24' - - '203.33.129.0/24' - - '203.33.131.0/24' - - '203.33.145.0/24' - - '203.33.156.0/24' - - '203.33.158.0/23' - - '203.33.174.0/24' - - '203.33.185.0/24' - - '203.33.200.0/24' - - '203.33.202.0/23' - - '203.33.204.0/24' - - '203.33.206.0/23' - - '203.33.214.0/23' - - '203.33.224.0/23' - - '203.33.226.0/24' - - '203.33.233.0/24' - - '203.33.243.0/24' - - '203.33.250.0/24' - - '203.34.4.0/24' - - '203.34.21.0/24' - - '203.34.27.0/24' - - '203.34.39.0/24' - - '203.34.48.0/23' - - '203.34.54.0/24' - - '203.34.56.0/23' - - '203.34.67.0/24' - - '203.34.69.0/24' - - '203.34.76.0/24' - - '203.34.92.0/24' - - '203.34.106.0/24' - - '203.34.113.0/24' - - '203.34.147.0/24' - - '203.34.150.0/24' - - '203.34.152.0/23' - - '203.34.161.0/24' - - '203.34.162.0/24' - - '203.34.187.0/24' - - '203.34.198.0/24' - - '203.34.204.0/22' - - '203.34.232.0/24' - - '203.34.240.0/24' - - '203.34.242.0/24' - - '203.34.245.0/24' - - '203.34.251.0/24' - - '203.55.2.0/23' - - '203.55.4.0/24' - - '203.55.10.0/24' - - '203.55.13.0/24' - - '203.55.22.0/24' - - '203.55.30.0/24' - - '203.55.93.0/24' - - '203.55.101.0/24' - - '203.55.109.0/24' - - '203.55.110.0/24' - - '203.55.116.0/23' - - '203.55.119.0/24' - - '203.55.128.0/23' - - '203.55.146.0/23' - - '203.55.192.0/24' - - '203.55.196.0/24' - - '203.55.218.0/23' - - '203.55.221.0/24' - - '203.55.224.0/24' - - '203.56.1.0/24' - - '203.56.4.0/24' - - '203.56.12.0/24' - - '203.56.24.0/24' - - '203.56.38.0/24' - - '203.56.40.0/24' - - '203.56.46.0/24' - - '203.56.68.0/23' - - '203.56.82.0/23' - - '203.56.84.0/23' - - '203.56.95.0/24' - - '203.56.110.0/24' - - '203.56.121.0/24' - - '203.56.161.0/24' - - '203.56.169.0/24' - - '203.56.172.0/23' - - '203.56.175.0/24' - - '203.56.183.0/24' - - '203.56.185.0/24' - - '203.56.187.0/24' - - '203.56.192.0/24' - - '203.56.198.0/24' - - '203.56.201.0/24' - - '203.56.208.0/23' - - '203.56.210.0/24' - - '203.56.214.0/24' - - '203.56.216.0/24' - - '203.56.227.0/24' - - '203.56.228.0/24' - - '203.56.232.0/24' - - '203.56.240.0/24' - - '203.56.252.0/24' - - '203.56.254.0/24' - - '203.57.5.0/24' - - '203.57.6.0/24' - - '203.57.12.0/23' - - '203.57.28.0/24' - - '203.57.39.0/24' - - '203.57.46.0/24' - - '203.57.58.0/24' - - '203.57.61.0/24' - - '203.57.66.0/24' - - '203.57.69.0/24' - - '203.57.70.0/23' - - '203.57.73.0/24' - - '203.57.90.0/24' - - '203.57.101.0/24' - - '203.57.109.0/24' - - '203.57.123.0/24' - - '203.57.157.0/24' - - '203.57.200.0/24' - - '203.57.202.0/24' - - '203.57.206.0/24' - - '203.57.222.0/24' - - '203.57.224.0/20' - - '203.57.246.0/23' - - '203.57.249.0/24' - - '203.57.253.0/24' - - '203.57.254.0/23' - - '203.62.2.0/24' - - '203.62.131.0/24' - - '203.62.139.0/24' - - '203.62.161.0/24' - - '203.62.197.0/24' - - '203.62.228.0/22' - - '203.62.234.0/24' - - '203.62.246.0/24' - - '203.65.240.0/22' - - '203.76.160.0/22' - - '203.76.168.0/22' - - '203.76.208.0/21' - - '203.76.216.0/22' - - '203.76.240.0/22' - - '203.77.180.0/22' - - '203.78.48.0/20' - - '203.78.156.0/22' - - '203.79.0.0/20' - - '203.80.4.0/23' - - '203.80.32.0/20' - - '203.80.57.0/24' - - '203.80.129.0/24' - - '203.80.132.0/22' - - '203.80.144.0/20' - - '203.81.16.0/20' - - '203.81.244.0/22' - - '203.82.0.0/23' - - '203.82.112.0/20' - - '203.82.224.0/20' - - '203.83.0.0/22' - - '203.83.12.0/22' - - '203.83.56.0/21' - - '203.83.224.0/20' - - '203.86.0.0/17' - - '203.86.250.0/24' - - '203.86.254.0/23' - - '203.88.32.0/19' - - '203.88.192.0/19' - - '203.89.0.0/22' - - '203.89.136.0/22' - - '203.89.144.0/24' - - '203.90.0.0/22' - - '203.90.8.0/21' - - '203.90.128.0/18' - - '203.90.192.0/19' - - '203.91.32.0/19' - - '203.91.96.0/20' - - '203.91.120.0/21' - - '203.92.0.0/22' - - '203.92.6.0/24' - - '203.92.160.0/19' - - '203.93.0.0/16' - - '203.94.0.0/19' - - '203.95.0.0/21' - - '203.95.96.0/19' - - '203.95.129.0/24' - - '203.95.130.0/23' - - '203.95.132.0/22' - - '203.95.136.0/21' - - '203.95.144.0/20' - - '203.95.160.0/19' - - '203.95.200.0/21' - - '203.95.208.0/22' - - '203.95.224.0/19' - - '203.99.16.0/22' - - '203.99.30.0/23' - - '203.99.80.0/20' - - '203.100.32.0/20' - - '203.100.58.0/24' - - '203.100.60.0/24' - - '203.100.63.0/24' - - '203.100.80.0/20' - - '203.100.96.0/19' - - '203.100.192.0/20' - - '203.104.32.0/20' - - '203.105.96.0/19' - - '203.105.128.0/19' - - '203.107.0.0/19' - - '203.107.32.0/20' - - '203.107.52.0/22' - - '203.107.56.0/21' - - '203.107.69.0/24' - - '203.107.70.0/23' - - '203.107.72.0/21' - - '203.107.80.0/20' - - '203.107.96.0/19' - - '203.110.160.0/19' - - '203.110.208.0/20' - - '203.110.232.0/23' - - '203.110.234.0/24' - - '203.114.80.0/20' - - '203.114.244.0/22' - - '203.118.192.0/19' - - '203.118.241.0/24' - - '203.118.248.0/22' - - '203.119.24.0/22' - - '203.119.28.0/23' - - '203.119.30.0/24' - - '203.119.32.0/24' - - '203.119.34.0/23' - - '203.119.80.0/22' - - '203.119.85.0/24' - - '203.119.113.0/24' - - '203.119.114.0/23' - - '203.119.116.0/22' - - '203.119.128.0/17' - - '203.123.58.0/24' - - '203.128.32.0/19' - - '203.128.96.0/19' - - '203.128.128.0/24' - - '203.130.32.0/20' - - '203.130.49.0/24' - - '203.130.51.0/24' - - '203.130.53.0/24' - - '203.130.54.0/23' - - '203.130.56.0/22' - - '203.130.60.0/23' - - '203.132.32.0/19' - - '203.134.240.0/21' - - '203.135.96.0/19' - - '203.135.160.0/20' - - '203.142.12.0/23' - - '203.142.219.0/24' - - '203.142.224.0/19' - - '203.144.96.0/19' - - '203.145.0.0/19' - - '203.148.0.0/18' - - '203.148.64.0/20' - - '203.148.80.0/22' - - '203.148.86.0/23' - - '203.149.92.0/22' - - '203.152.64.0/19' - - '203.152.128.0/19' - - '203.153.0.0/22' - - '203.156.192.0/18' - - '203.158.16.0/21' - - '203.160.129.0/24' - - '203.160.192.0/19' - - '203.161.0.0/22' - - '203.161.180.0/24' - - '203.161.183.0/24' - - '203.161.192.0/19' - - '203.166.160.0/19' - - '203.167.28.0/22' - - '203.168.0.0/19' - - '203.170.58.0/23' - - '203.171.0.0/22' - - '203.171.208.0/24' - - '203.171.224.0/20' - - '203.174.4.0/24' - - '203.174.6.0/24' - - '203.174.96.0/20' - - '203.175.128.0/19' - - '203.175.192.0/18' - - '203.176.0.0/18' - - '203.176.64.0/19' - - '203.176.168.0/21' - - '203.184.80.0/20' - - '203.187.160.0/19' - - '203.189.0.0/23' - - '203.189.6.0/23' - - '203.189.112.0/22' - - '203.189.192.0/19' - - '203.189.240.0/22' - - '203.190.96.0/20' - - '203.190.249.0/24' - - '203.191.0.0/23' - - '203.191.2.0/24' - - '203.191.5.0/24' - - '203.191.7.0/24' - - '203.191.29.0/24' - - '203.191.31.0/24' - - '203.191.64.0/18' - - '203.191.133.0/24' - - '203.191.144.0/20' - - '203.192.0.0/19' - - '203.193.224.0/19' - - '203.195.64.0/19' - - '203.195.128.0/17' - - '203.196.0.0/21' - - '203.196.28.0/22' - - '203.201.181.0/24' - - '203.201.182.0/24' - - '203.202.236.0/22' - - '203.205.64.0/19' - - '203.207.64.0/18' - - '203.207.128.0/17' - - '203.208.0.0/20' - - '203.208.16.0/22' - - '203.208.32.0/19' - - '203.209.224.0/19' - - '203.212.0.0/20' - - '203.212.80.0/20' - - '203.217.164.0/22' - - '203.223.0.0/20' - - '204.55.160.0/24' - - '204.74.96.0/24' - - '204.114.176.0/23' - - '210.2.0.0/23' - - '210.2.2.0/24' - - '210.2.5.0/24' - - '210.2.6.0/23' - - '210.2.8.0/21' - - '210.2.24.0/21' - - '210.5.0.0/19' - - '210.5.60.0/24' - - '210.5.128.0/19' - - '210.7.56.0/21' - - '210.12.0.0/15' - - '210.14.64.0/19' - - '210.14.112.0/20' - - '210.14.128.0/17' - - '210.15.0.0/17' - - '210.15.128.0/18' - - '210.16.128.0/21' - - '210.16.136.0/22' - - '210.16.156.0/22' - - '210.16.160.0/24' - - '210.16.162.0/23' - - '210.16.164.0/22' - - '210.16.168.0/21' - - '210.16.176.0/20' - - '210.21.0.0/16' - - '210.22.0.0/16' - - '210.23.32.0/19' - - '210.25.0.0/17' - - '210.25.128.0/19' - - '210.25.160.0/20' - - '210.25.176.0/21' - - '210.25.184.0/23' - - '210.25.186.0/26' - - '210.25.186.128/25' - - '210.25.187.0/24' - - '210.25.188.0/22' - - '210.25.192.0/18' - - '210.26.0.0/15' - - '210.28.0.0/14' - - '210.32.0.0/12' - - '210.51.0.0/16' - - '210.52.0.0/18' - - '210.52.64.0/23' - - '210.52.66.0/24' - - '210.52.69.0/24' - - '210.52.70.0/23' - - '210.52.72.0/21' - - '210.52.80.0/20' - - '210.52.96.0/21' - - '210.52.104.0/22' - - '210.52.108.0/24' - - '210.52.110.0/23' - - '210.52.112.0/20' - - '210.52.128.0/17' - - '210.53.0.0/16' - - '210.56.192.0/19' - - '210.72.0.0/14' - - '210.76.0.0/15' - - '210.78.0.0/16' - - '210.79.64.0/18' - - '210.79.224.0/19' - - '210.82.0.0/15' - - '210.87.128.0/18' - - '210.185.192.0/18' - - '210.192.96.0/19' - - '211.64.0.0/13' - - '211.80.0.0/12' - - '211.96.0.0/14' - - '211.100.0.0/17' - - '211.100.128.0/19' - - '211.100.160.0/20' - - '211.100.184.0/21' - - '211.100.192.0/18' - - '211.101.0.0/16' - - '211.102.0.0/15' - - '211.136.0.0/13' - - '211.144.0.0/13' - - '211.152.0.0/17' - - '211.152.134.0/23' - - '211.152.140.0/22' - - '211.152.150.0/23' - - '211.152.157.0/24' - - '211.152.160.0/19' - - '211.152.192.0/18' - - '211.153.0.0/16' - - '211.154.0.0/19' - - '211.154.32.0/20' - - '211.154.48.0/21' - - '211.154.64.0/18' - - '211.154.128.0/17' - - '211.155.0.0/18' - - '211.155.67.0/24' - - '211.155.68.0/24' - - '211.155.72.0/21' - - '211.155.80.0/20' - - '211.155.96.0/20' - - '211.155.112.0/23' - - '211.155.114.0/24' - - '211.155.116.0/22' - - '211.155.120.0/21' - - '211.155.128.0/17' - - '211.156.0.0/18' - - '211.156.64.0/19' - - '211.156.96.0/21' - - '211.156.104.0/22' - - '211.156.108.0/23' - - '211.156.112.0/20' - - '211.156.128.0/17' - - '211.157.0.0/16' - - '211.158.0.0/15' - - '211.160.0.0/13' - - '212.64.0.0/17' - - '212.129.128.0/17' - - '213.199.169.0/24' - - '213.255.231.0/24' - - '218.0.0.0/12' - - '218.16.0.0/13' - - '218.24.0.0/14' - - '218.28.0.0/15' - - '218.30.0.0/19' - - '218.30.64.0/18' - - '218.30.128.0/17' - - '218.31.0.0/16' - - '218.56.0.0/13' - - '218.64.0.0/11' - - '218.96.0.0/15' - - '218.98.0.0/18' - - '218.98.77.0/24' - - '218.98.78.0/23' - - '218.98.80.0/24' - - '218.98.92.0/22' - - '218.98.96.0/22' - - '218.98.100.0/24' - - '218.98.102.0/23' - - '218.98.104.0/21' - - '218.98.112.0/20' - - '218.98.128.0/19' - - '218.98.192.0/18' - - '218.99.0.0/16' - - '218.100.96.0/19' - - '218.100.128.0/17' - - '218.104.0.0/14' - - '218.108.0.0/15' - - '218.185.192.0/19' - - '218.192.0.0/12' - - '218.240.0.0/14' - - '218.244.0.0/15' - - '218.246.0.0/19' - - '218.246.32.0/20' - - '218.246.48.0/21' - - '218.246.56.0/23' - - '218.246.58.0/24' - - '218.246.60.0/22' - - '218.246.64.0/18' - - '218.246.129.0/24' - - '218.246.131.0/24' - - '218.246.132.0/23' - - '218.246.134.0/24' - - '218.246.139.0/24' - - '218.246.144.0/20' - - '218.246.160.0/19' - - '218.246.192.0/18' - - '218.247.0.0/18' - - '218.247.96.0/19' - - '218.247.128.0/17' - - '218.249.0.0/16' - - '219.72.0.0/16' - - '219.82.0.0/16' - - '219.83.128.0/17' - - '219.90.68.0/22' - - '219.90.72.0/21' - - '219.128.0.0/11' - - '219.216.0.0/13' - - '219.224.0.0/13' - - '219.232.0.0/15' - - '219.234.0.0/21' - - '219.234.10.0/23' - - '219.234.12.0/22' - - '219.234.32.0/19' - - '219.234.64.0/18' - - '219.234.128.0/17' - - '219.235.0.0/16' - - '219.236.0.0/14' - - '219.242.0.0/15' - - '219.244.0.0/14' - - '220.101.192.0/18' - - '220.112.0.0/14' - - '220.152.128.0/17' - - '220.154.0.0/16' - - '220.155.0.0/21' - - '220.155.9.0/24' - - '220.155.10.0/23' - - '220.155.12.0/22' - - '220.155.16.0/21' - - '220.155.24.0/22' - - '220.155.28.0/23' - - '220.155.31.0/24' - - '220.155.32.0/19' - - '220.155.64.0/18' - - '220.155.128.0/17' - - '220.158.240.0/22' - - '220.160.0.0/11' - - '220.192.0.0/12' - - '220.231.0.0/18' - - '220.231.128.0/17' - - '220.232.64.0/18' - - '220.234.0.0/16' - - '220.242.0.0/23' - - '220.242.6.0/24' - - '220.242.8.0/24' - - '220.242.12.0/23' - - '220.242.14.0/24' - - '220.242.17.0/24' - - '220.242.18.0/23' - - '220.242.20.0/24' - - '220.242.32.0/20' - - '220.242.48.0/23' - - '220.242.53.0/24' - - '220.242.55.0/24' - - '220.242.56.0/22' - - '220.242.60.0/23' - - '220.242.62.0/24' - - '220.242.64.0/19' - - '220.242.96.0/20' - - '220.242.112.0/21' - - '220.242.120.0/22' - - '220.242.124.0/23' - - '220.242.126.0/24' - - '220.242.134.0/23' - - '220.242.173.0/24' - - '220.242.183.0/24' - - '220.242.185.0/24' - - '220.242.186.0/24' - - '220.242.188.0/23' - - '220.242.190.0/24' - - '220.242.192.0/24' - - '220.242.196.0/22' - - '220.242.200.0/24' - - '220.242.202.0/23' - - '220.242.204.0/22' - - '220.242.209.0/24' - - '220.242.210.0/23' - - '220.242.214.0/24' - - '220.242.216.0/21' - - '220.242.224.0/19' - - '220.243.0.0/17' - - '220.243.128.0/18' - - '220.243.192.0/23' - - '220.243.196.0/24' - - '220.243.198.0/23' - - '220.243.201.0/24' - - '220.243.204.0/24' - - '220.243.214.0/24' - - '220.243.216.0/23' - - '220.243.218.0/24' - - '220.243.220.0/23' - - '220.243.223.0/24' - - '220.243.225.0/24' - - '220.243.226.0/23' - - '220.243.229.0/24' - - '220.243.230.0/24' - - '220.243.234.0/23' - - '220.243.237.0/24' - - '220.243.238.0/23' - - '220.243.243.0/24' - - '220.243.244.0/24' - - '220.243.246.0/24' - - '220.243.249.0/24' - - '220.243.250.0/24' - - '220.243.252.0/24' - - '220.243.254.0/23' - - '220.247.136.0/21' - - '220.248.0.0/14' - - '220.252.0.0/16' - - '221.0.0.0/13' - - '221.8.0.0/14' - - '221.12.0.0/17' - - '221.12.128.0/18' - - '221.13.0.0/16' - - '221.14.0.0/15' - - '221.122.0.0/15' - - '221.128.128.0/17' - - '221.129.0.0/16' - - '221.130.0.0/15' - - '221.133.224.0/19' - - '221.136.0.0/15' - - '221.172.0.0/14' - - '221.176.0.0/19' - - '221.176.32.0/20' - - '221.176.48.0/21' - - '221.176.56.0/24' - - '221.176.58.0/23' - - '221.176.60.0/22' - - '221.176.64.0/18' - - '221.176.128.0/17' - - '221.177.0.0/16' - - '221.178.0.0/15' - - '221.180.0.0/14' - - '221.192.0.0/14' - - '221.196.0.0/15' - - '221.198.0.0/16' - - '221.199.0.0/17' - - '221.199.128.0/18' - - '221.199.192.0/20' - - '221.199.224.0/19' - - '221.200.0.0/13' - - '221.208.0.0/12' - - '221.224.0.0/12' - - '222.16.0.0/12' - - '222.32.0.0/11' - - '222.64.0.0/11' - - '222.125.0.0/16' - - '222.126.128.0/19' - - '222.126.160.0/21' - - '222.126.168.0/22' - - '222.126.172.0/23' - - '222.126.174.40/29' - - '222.126.174.76/30' - - '222.126.174.88/29' - - '222.126.174.144/28' - - '222.126.176.0/29' - - '222.126.178.0/23' - - '222.126.180.0/22' - - '222.126.184.0/21' - - '222.126.192.0/21' - - '222.126.200.104/29' - - '222.126.206.0/23' - - '222.126.208.0/22' - - '222.126.212.0/26' - - '222.126.212.64/27' - - '222.126.212.96/28' - - '222.126.212.112/29' - - '222.126.212.128/25' - - '222.126.213.0/24' - - '222.126.214.0/23' - - '222.126.216.0/21' - - '222.126.224.0/19' - - '222.128.0.0/12' - - '222.160.0.0/14' - - '222.168.0.0/13' - - '222.176.0.0/12' - - '222.192.0.0/11' - - '222.240.0.0/13' - - '222.248.0.0/15' - - '223.0.0.0/12' - - '223.20.0.0/15' - - '223.27.184.0/22' - - '223.29.208.0/22' - - '223.64.0.0/11' - - '223.96.0.0/12' - - '223.112.0.0/14' - - '223.116.0.0/15' - - '223.120.0.0/13' - - '223.128.0.0/15' - - '223.144.0.0/12' - - '223.160.0.0/14' - - '223.166.0.0/15' - - '223.192.0.0/15' - - '223.198.0.0/15' - - '223.201.0.0/22' - - '223.201.8.0/21' - - '223.201.16.0/20' - - '223.201.32.0/19' - - '223.201.64.0/18' - - '223.201.128.0/17' - - '223.202.0.0/15' - - '223.208.0.0/13' - - '223.220.0.0/15' - - '223.223.176.0/20' - - '223.223.192.0/20' - - '223.240.0.0/13' - - '223.248.0.0/14' - - '223.252.128.0/19' - - '223.252.192.0/18' - - '223.254.0.0/16' - - '223.255.0.0/17' - - '223.255.236.0/22' - - '223.255.252.0/23' \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/DAZN b/luci-app-openclash/root/etc/openclash/rule_provider/DAZN deleted file mode 100644 index 47b7576b..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/DAZN +++ /dev/null @@ -1,12 +0,0 @@ -payload: - # > DAZN - - PROCESS-NAME,com.dazn - - # - USER-AGENT,DAZN* - - DOMAIN-KEYWORD,voddazn - - DOMAIN-SUFFIX,dazn-api.com - - DOMAIN-SUFFIX,dazn.com - - DOMAIN-SUFFIX,dazndn.com - - DOMAIN-SUFFIX,indazn.com - - DOMAIN-SUFFIX,indaznlab.com - - DOMAIN,d151l6v8er5bdm.cloudfront.net \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Discovery_Plus b/luci-app-openclash/root/etc/openclash/rule_provider/Discovery_Plus deleted file mode 100644 index 0e8a41b6..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Discovery_Plus +++ /dev/null @@ -1,11 +0,0 @@ -payload: - # > Discovery Plus - - PROCESS-NAME,com.discovery.discoveryplus.mobile - - DOMAIN-SUFFIX,content-ause1-ur-discovery1.uplynk.com - - DOMAIN-SUFFIX,disco-api.com - - DOMAIN-SUFFIX,discoveryplus.com - - DOMAIN-SUFFIX,fwmrm.net - - DOMAIN-SUFFIX,getblueshift.com - - DOMAIN-SUFFIX,litix.io - - DOMAIN-SUFFIX,mobile-collector.newrelic.com - - DOMAIN-SUFFIX,uplynk.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Disney_Plus b/luci-app-openclash/root/etc/openclash/rule_provider/Disney_Plus deleted file mode 100644 index 63e097e3..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Disney_Plus +++ /dev/null @@ -1,21 +0,0 @@ -payload: - # > Disney Plus - - PROCESS-NAME,com.disney.disneyplus - - DOMAIN-SUFFIX,adobedtm.com - - DOMAIN-SUFFIX,bam.nr-date.net - - DOMAIN-SUFFIX,bamgrid.com - - DOMAIN-SUFFIX,braze.com - - DOMAIN-SUFFIX,cdn.optimizely.com - - DOMAIN-SUFFIX,cdn.registerdisney.go.com - - DOMAIN-SUFFIX,cws.conviva.com - - DOMAIN-SUFFIX,d9.flashtalking.com - - DOMAIN-SUFFIX,disney.demdex.net - - DOMAIN-SUFFIX,disney.my.sentry.io - - DOMAIN-SUFFIX,disneyplus.bn5x.net - - DOMAIN-SUFFIX,disneyplus.com - - DOMAIN-SUFFIX,disneyplus.com.ssl.sc.omtrdc.net - - DOMAIN-SUFFIX,disney-plus.net - - DOMAIN-SUFFIX,disney-portal.my.onetrust.com - - DOMAIN-SUFFIX,dssott.com - - DOMAIN-SUFFIX,execute-api.us-east-1.amazonaws.com - - DOMAIN-SUFFIX,js-agent.newrelic.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Domestic b/luci-app-openclash/root/etc/openclash/rule_provider/Domestic deleted file mode 100644 index b60c0a77..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Domestic +++ /dev/null @@ -1,294 +0,0 @@ -payload: - # > Beplay - - DOMAIN-KEYWORD,beplay - - # > Blizzard - # - USER-AGENT,hearthstone* - - DOMAIN,cdp.cloud.unity3d.com - - DOMAIN-SUFFIX,battle.net - - DOMAIN-SUFFIX,battlenet.com - - DOMAIN-SUFFIX,blizzard.com - - # > Prior - - DOMAIN,client.amplifi.com - - DOMAIN,ip.bjango.com - - DOMAIN-SUFFIX,alphassl.com - - DOMAIN-SUFFIX,edu.cn - - # > RRYS - - DOMAIN-SUFFIX,p4pfile.com - - DOMAIN-SUFFIX,zmzfile.com - - # > Sony - # - USER-AGENT,RemotePlay* - - DOMAIN-SUFFIX,playstation.com - - DOMAIN-SUFFIX,playstation.net - - DOMAIN-SUFFIX,playstationnetwork.com - - DOMAIN-SUFFIX,sony.com - - DOMAIN-SUFFIX,sonyentertainmentnetwork.com - - # > TeamViewer - - IP-CIDR,185.188.32.0/24,no-resolve - - IP-CIDR,185.188.33.0/24,no-resolve - - IP-CIDR,185.188.34.0/24,no-resolve - - IP-CIDR,185.188.35.0/24,no-resolve - - IP-CIDR,2a0b:b580::/48,no-resolve - - IP-CIDR,2a0b:b581::/48,no-resolve - - IP-CIDR,2a0b:b582::/48,no-resolve - - IP-CIDR,2a0b:b583::/48,no-resolve - - # > Tencent - - IP-CIDR,182.254.116.0/24,no-resolve - - # > Tencent WeChat (International) - - IP-CIDR,101.32.104.0/21,DIRECT,no-resolve - - IP-CIDR,101.32.118.0/23,DIRECT,no-resolve - - IP-CIDR,101.32.96.0/20,DIRECT,no-resolve - - IP-CIDR,129.226.0.0/16,DIRECT,no-resolve - - IP-CIDR,183.128.0.0/11,DIRECT,no-resolve - - IP-CIDR,183.131.48.0/20,DIRECT,no-resolve - - - DOMAIN-SUFFIX,12306.cn - - DOMAIN-SUFFIX,12306.com - - DOMAIN-SUFFIX,126.net - - DOMAIN-SUFFIX,163.com - - DOMAIN-SUFFIX,360.cn - - DOMAIN-SUFFIX,360.com - - DOMAIN-SUFFIX,360buy.com - - DOMAIN-SUFFIX,360buyimg.com - - DOMAIN-SUFFIX,36kr.com - - DOMAIN-SUFFIX,51ym.me - - DOMAIN-SUFFIX,58.com - - DOMAIN-SUFFIX,8686c.com - - DOMAIN-SUFFIX,abercrombie.com - - DOMAIN-SUFFIX,acfun.tv - - DOMAIN-SUFFIX,adobesc.com - - DOMAIN-SUFFIX,air-matters.com - - DOMAIN-SUFFIX,air-matters.io - - DOMAIN-SUFFIX,aixifan.com - - DOMAIN-SUFFIX,akadns.net - - DOMAIN-SUFFIX,alibabacloud.com - - DOMAIN-SUFFIX,alicdn.com - - DOMAIN-SUFFIX,alipay.com - - DOMAIN-SUFFIX,alipayobjects.com - - DOMAIN-SUFFIX,aliyun.com - - DOMAIN-SUFFIX,aliyuncs.com - - DOMAIN-SUFFIX,amap.com - - DOMAIN-SUFFIX,appshike.com - - DOMAIN-SUFFIX,appstore.com - - DOMAIN-SUFFIX,autonavi.com - - DOMAIN-SUFFIX,aweme.snssdk.com - - DOMAIN-SUFFIX,bababian.com - - DOMAIN-SUFFIX,baidu.com - - DOMAIN-SUFFIX,baidupcs.com - - DOMAIN-SUFFIX,bdimg.com - - DOMAIN-SUFFIX,bdstatic.com - - DOMAIN-SUFFIX,beatsbydre.com - - DOMAIN-SUFFIX,bet365.com - - DOMAIN-SUFFIX,broadcasthe.net - - DOMAIN-SUFFIX,caiyunapp.com - - DOMAIN-SUFFIX,ccgslb.com - - DOMAIN-SUFFIX,ccgslb.net - - DOMAIN-SUFFIX,chinacache.net - - DOMAIN-SUFFIX,chunbo.com - - DOMAIN-SUFFIX,chunboimg.com - - DOMAIN-SUFFIX,clashroyaleapp.com - - DOMAIN-SUFFIX,clouddn.com - - DOMAIN-SUFFIX,cloudsigma.com - - DOMAIN-SUFFIX,cloudxns.net - - DOMAIN-SUFFIX,cmct.tv - - DOMAIN-SUFFIX,cmfu.com - - DOMAIN-SUFFIX,cnbeta.com - - DOMAIN-SUFFIX,cnbetacdn.com - - DOMAIN-SUFFIX,chdbits.co - - DOMAIN-SUFFIX,cnlang.org - - DOMAIN-SUFFIX,cn88.net - - DOMAIN-SUFFIX,dct-cloud.com - - DOMAIN-SUFFIX,didialift.com - - DOMAIN-SUFFIX,digicert.com - - DOMAIN-SUFFIX,douban.com - - DOMAIN-SUFFIX,doubanio.com - - DOMAIN-SUFFIX,douyin.com - - DOMAIN-SUFFIX,douyu.com - - DOMAIN-SUFFIX,douyu.tv - - DOMAIN-SUFFIX,douyutv.com - - DOMAIN-SUFFIX,duokan.com - - DOMAIN-SUFFIX,duoshuo.com - - DOMAIN-SUFFIX,dytt8.net - - DOMAIN-SUFFIX,easou.com - - DOMAIN-SUFFIX,ecitic.com - - DOMAIN-SUFFIX,ecitic.net - - DOMAIN-SUFFIX,eudic.net - - DOMAIN-SUFFIX,ewqcxz.com - - DOMAIN-SUFFIX,feng.com - - DOMAIN-SUFFIX,fir.im - - DOMAIN-SUFFIX,firefox.com - - DOMAIN-SUFFIX,frdic.com - - DOMAIN-SUFFIX,fresh-ideas.cc - - DOMAIN-SUFFIX,gameloft.com - - DOMAIN-SUFFIX,geetest.com - - DOMAIN-SUFFIX,godic.net - - DOMAIN-SUFFIX,goodread.com - - DOMAIN-SUFFIX,gtimg.com - - DOMAIN-SUFFIX,haibian.com - - DOMAIN-SUFFIX,hao123.com - - DOMAIN-SUFFIX,haosou.com - - DOMAIN-SUFFIX,hdchina.org - - DOMAIN-SUFFIX,hdcmct.org - - DOMAIN-SUFFIX,hkserversolution.com - - DOMAIN-SUFFIX,hollisterco.com - - DOMAIN-SUFFIX,hongxiu.com - - DOMAIN-SUFFIX,hxcdn.net - - DOMAIN-SUFFIX,icedropper.com - - DOMAIN-SUFFIX,iciba.com - - DOMAIN-SUFFIX,ifeng.com - - DOMAIN-SUFFIX,ifengimg.com - - DOMAIN-SUFFIX,images-amazon.com - - DOMAIN-SUFFIX,img4me.com - - DOMAIN-SUFFIX,ithome.com - - DOMAIN-SUFFIX,ixdzs.com - - DOMAIN-SUFFIX,jd.com - - DOMAIN-SUFFIX,jd.hk - - DOMAIN-SUFFIX,jianshu.com - - DOMAIN-SUFFIX,jianshu.io - - DOMAIN-SUFFIX,jianshuapi.com - - DOMAIN-SUFFIX,jiathis.com - - DOMAIN-SUFFIX,jomodns.com - - DOMAIN-SUFFIX,jsboxbbs.com - - DOMAIN-SUFFIX,knewone.com - - DOMAIN-SUFFIX,kuaidi100.com - - DOMAIN-SUFFIX,kugou.com - - DOMAIN-SUFFIX,lecloud.com - - DOMAIN-SUFFIX,lemicp.com - - DOMAIN-SUFFIX,letv.com - - DOMAIN-SUFFIX,letvcloud.com - - DOMAIN-SUFFIX,liyuans.com - - DOMAIN-SUFFIX,lizhi.io - - DOMAIN-SUFFIX,localizecdn.com - - DOMAIN-SUFFIX,lucifr.com - - DOMAIN-SUFFIX,luoo.net - - DOMAIN-SUFFIX,lxdns.com - - DOMAIN-SUFFIX,mai.tn - - DOMAIN-SUFFIX,meizu.com - - DOMAIN-SUFFIX,metatrader4.com - - DOMAIN-SUFFIX,metatrader5.com - - DOMAIN-SUFFIX,mi.com - - DOMAIN-SUFFIX,miaopai.com - - DOMAIN-SUFFIX,miui.com - - DOMAIN-SUFFIX,miwifi.com - - DOMAIN-SUFFIX,mob.com - - DOMAIN-SUFFIX,moji.com - - DOMAIN-SUFFIX,moke.com - - DOMAIN-SUFFIX,mxhichina.com - - DOMAIN-SUFFIX,myqcloud.com - - DOMAIN-SUFFIX,myunlu.com - - DOMAIN-SUFFIX,ngabbs.com - - DOMAIN-SUFFIX,netease.com - - DOMAIN-SUFFIX,nfoservers.com - - DOMAIN-SUFFIX,nssurge.com - - DOMAIN-SUFFIX,nuomi.com - - DOMAIN-SUFFIX,ourbits.club - - DOMAIN-SUFFIX,ourdvs.com - - DOMAIN-SUFFIX,passthepopcorn.me - - DOMAIN-SUFFIX,pgyer.com - - DOMAIN-SUFFIX,pniao.com - - DOMAIN-SUFFIX,privatehd.to - - DOMAIN-SUFFIX,pstatp.com - - DOMAIN-SUFFIX,qbox.me - - DOMAIN-SUFFIX,qcloud.com - - DOMAIN-SUFFIX,qdaily.com - - DOMAIN-SUFFIX,qdmm.com - - DOMAIN-SUFFIX,qhimg.com - - DOMAIN-SUFFIX,qidian.com - - DOMAIN-SUFFIX,qihucdn.com - - DOMAIN-SUFFIX,qin.io - - DOMAIN-SUFFIX,qingmang.me - - DOMAIN-SUFFIX,qingmang.mobi - - DOMAIN-SUFFIX,qiniucdn.com - - DOMAIN-SUFFIX,qiniudn.com - - DOMAIN-SUFFIX,qq.com - - DOMAIN-SUFFIX,qqurl.com - - DOMAIN-SUFFIX,rarbg.to - - DOMAIN-SUFFIX,redacted.ch - - DOMAIN-SUFFIX,rrmj.tv - - DOMAIN-SUFFIX,ruguoapp.com - - DOMAIN-SUFFIX,sandai.net - - DOMAIN-SUFFIX,sf-express.com - - DOMAIN-SUFFIX,sinaapp.com - - DOMAIN-SUFFIX,sinaimg.cn - - DOMAIN-SUFFIX,sinaimg.com - - DOMAIN-SUFFIX,sm.ms - - DOMAIN-SUFFIX,smzdm.com - - DOMAIN-SUFFIX,snssdk.com - - DOMAIN-SUFFIX,snwx.com - - DOMAIN-SUFFIX,so.com - - DOMAIN-SUFFIX,sogou.com - - DOMAIN-SUFFIX,sogoucdn.com - - DOMAIN-SUFFIX,sohu.com - - DOMAIN-SUFFIX,soku.com - - DOMAIN-SUFFIX,soso.com - - DOMAIN-SUFFIX,sspai.com - - DOMAIN-SUFFIX,startssl.com - - DOMAIN-SUFFIX,suning.com - - DOMAIN-SUFFIX,symcd.com - - DOMAIN-SUFFIX,taobao.com - - DOMAIN-SUFFIX,tawk.link - - DOMAIN-SUFFIX,tawk.to - - DOMAIN-SUFFIX,tenpay.com - - DOMAIN-SUFFIX,tietuku.com - - DOMAIN-SUFFIX,tmall.com - - DOMAIN-SUFFIX,tmzvps.com - - DOMAIN-SUFFIX,trello.com - - DOMAIN-SUFFIX,trellocdn.com - - DOMAIN-SUFFIX,totheglory.im - - DOMAIN-SUFFIX,ttmeiju.com - - DOMAIN-SUFFIX,tudou.com - - DOMAIN-SUFFIX,udache.com - - DOMAIN-SUFFIX,umengcloud.com - - DOMAIN-SUFFIX,upaiyun.com - - DOMAIN-SUFFIX,upyun.com - - DOMAIN-SUFFIX,uxengine.net - - DOMAIN-SUFFIX,wandoujia.com - - DOMAIN-SUFFIX,weather.bjango.com - - DOMAIN-SUFFIX,weather.com - - DOMAIN-SUFFIX,webqxs.com - - DOMAIN-SUFFIX,weibo.cn - - DOMAIN-SUFFIX,weibo.com - - DOMAIN-SUFFIX,weico.cc - - DOMAIN-SUFFIX,weiphone.com - - DOMAIN-SUFFIX,weiphone.net - - DOMAIN-SUFFIX,wenku8.net - - DOMAIN-SUFFIX,werewolf.53site.com - - DOMAIN-SUFFIX,wkcdn.com - - DOMAIN-SUFFIX,xdrig.com - - DOMAIN-SUFFIX,xhostfire.com - - DOMAIN-SUFFIX,xiami.com - - DOMAIN-SUFFIX,xiami.net - - DOMAIN-SUFFIX,xiaojukeji.com - - DOMAIN-SUFFIX,xiaomi.com - - DOMAIN-SUFFIX,xiaomi.net - - DOMAIN-SUFFIX,xiaomicp.com - - DOMAIN-SUFFIX,ximalaya.com - - DOMAIN-SUFFIX,xitek.com - - DOMAIN-SUFFIX,xmcdn.com - - DOMAIN-SUFFIX,xslb.net - - DOMAIN-SUFFIX,yach.me - - DOMAIN-SUFFIX,yeepay.com - - DOMAIN-SUFFIX,yhd.com - - DOMAIN-SUFFIX,yinxiang.com - - DOMAIN-SUFFIX,yixia.com - - DOMAIN-SUFFIX,ykimg.com - - DOMAIN-SUFFIX,youdao.com - - DOMAIN-SUFFIX,youku.com - - DOMAIN-SUFFIX,yunjiasu-cdn.net - - DOMAIN-SUFFIX,zealer.com - - DOMAIN-SUFFIX,zgslb.net - - DOMAIN-SUFFIX,zhihu.com - - DOMAIN-SUFFIX,zhimg.com - - DOMAIN-SUFFIX,zimuzu.tv - - DOMAIN-SUFFIX,zmz002.com - - - IP-CIDR,1.255.62.0/24,no-resolve - - # > CN - - DOMAIN-SUFFIX,cn diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Domestic_IPs b/luci-app-openclash/root/etc/openclash/rule_provider/Domestic_IPs deleted file mode 100644 index 1192c7ae..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Domestic_IPs +++ /dev/null @@ -1,6608 +0,0 @@ -payload: - - 1.0.1.0/24 - - 1.0.2.0/23 - - 1.0.8.0/21 - - 1.0.32.0/19 - - 1.1.0.0/24 - - 1.1.2.0/23 - - 1.1.4.0/22 - - 1.1.8.0/21 - - 1.1.16.0/20 - - 1.1.32.0/19 - - 1.2.0.0/23 - - 1.2.2.0/24 - - 1.2.5.0/24 - - 1.2.6.0/23 - - 1.2.8.0/21 - - 1.2.16.0/20 - - 1.2.32.0/19 - - 1.2.64.0/18 - - 1.3.0.0/16 - - 1.4.1.0/24 - - 1.4.2.0/23 - - 1.4.4.0/22 - - 1.4.8.0/21 - - 1.4.16.0/20 - - 1.4.32.0/19 - - 1.4.64.0/18 - - 1.8.0.0/18 - - 1.8.64.0/19 - - 1.8.96.0/22 - - 1.8.100.0/23 - - 1.8.112.0/20 - - 1.8.128.0/20 - - 1.8.144.0/22 - - 1.8.148.0/23 - - 1.8.154.0/23 - - 1.8.156.0/22 - - 1.8.160.0/19 - - 1.8.192.0/19 - - 1.8.224.0/20 - - 1.8.244.0/22 - - 1.8.248.0/21 - - 1.10.0.0/21 - - 1.10.8.0/23 - - 1.10.11.0/24 - - 1.10.12.0/22 - - 1.10.16.0/20 - - 1.10.32.0/19 - - 1.10.64.0/18 - - 1.12.0.0/14 - - 1.18.128.0/24 - - 1.24.0.0/13 - - 1.45.0.0/16 - - 1.48.0.0/14 - - 1.56.0.0/13 - - 1.68.0.0/14 - - 1.80.0.0/12 - - 1.116.0.0/15 - - 1.118.1.0/24 - - 1.118.2.0/23 - - 1.118.4.0/22 - - 1.118.8.0/21 - - 1.118.16.0/20 - - 1.118.32.0/19 - - 1.118.64.0/18 - - 1.118.128.0/17 - - 1.119.0.0/16 - - 1.180.0.0/14 - - 1.184.0.0/15 - - 1.188.0.0/14 - - 1.192.0.0/13 - - 1.202.0.0/15 - - 1.204.0.0/14 - - 8.128.0.0/10 - - 8.209.36.0/22 - - 8.209.40.0/21 - - 8.209.48.0/20 - - 8.209.128.0/17 - - 8.210.0.0/15 - - 8.212.0.0/14 - - 8.216.0.0/13 - - 12.118.130.6/32 - - 12.118.130.86/32 - - 14.0.0.0/21 - - 14.0.12.0/22 - - 14.1.0.0/22 - - 14.1.24.0/22 - - 14.1.108.0/22 - - 14.16.0.0/12 - - 14.102.128.0/22 - - 14.102.180.0/22 - - 14.103.0.0/16 - - 14.104.0.0/13 - - 14.112.0.0/12 - - 14.130.0.0/15 - - 14.134.0.0/15 - - 14.144.0.0/12 - - 14.192.60.0/22 - - 14.192.76.0/22 - - 14.196.0.0/15 - - 14.204.0.0/15 - - 14.208.0.0/12 - - 20.134.160.0/20 - - 20.139.160.0/20 - - 20.249.255.0/24 - - 20.251.0.0/22 - - 23.236.64.0/25 - - 23.236.64.128/26 - - 23.236.64.192/27 - - 27.0.128.0/21 - - 27.0.160.0/21 - - 27.0.188.0/22 - - 27.0.204.0/22 - - 27.0.208.0/21 - - 27.8.0.0/13 - - 27.16.0.0/12 - - 27.34.232.0/21 - - 27.36.0.0/14 - - 27.40.0.0/13 - - 27.50.40.0/21 - - 27.50.128.0/17 - - 27.54.72.0/21 - - 27.54.152.0/21 - - 27.54.192.0/18 - - 27.98.208.0/20 - - 27.98.224.0/19 - - 27.99.128.0/17 - - 27.103.0.0/16 - - 27.106.128.0/18 - - 27.106.204.0/22 - - 27.109.32.0/19 - - 27.109.124.0/22 - - 27.112.0.0/18 - - 27.112.80.0/20 - - 27.112.112.0/21 - - 27.113.128.0/18 - - 27.115.0.0/17 - - 27.116.44.0/22 - - 27.121.72.0/21 - - 27.121.120.0/21 - - 27.128.0.0/15 - - 27.131.220.0/22 - - 27.144.0.0/16 - - 27.148.0.0/14 - - 27.152.0.0/13 - - 27.184.0.0/13 - - 27.192.0.0/11 - - 27.224.0.0/14 - - 36.0.0.0/22 - - 36.0.16.0/20 - - 36.0.32.0/19 - - 36.0.64.0/18 - - 36.0.128.0/17 - - 36.1.0.0/16 - - 36.4.0.0/14 - - 36.16.0.0/12 - - 36.32.0.0/14 - - 36.36.0.0/16 - - 36.37.0.0/19 - - 36.37.36.0/23 - - 36.37.39.0/24 - - 36.37.40.0/21 - - 36.37.48.0/20 - - 36.40.0.0/13 - - 36.48.0.0/15 - - 36.51.0.0/17 - - 36.51.128.0/18 - - 36.51.192.0/19 - - 36.51.224.0/20 - - 36.51.240.0/21 - - 36.51.248.0/22 - - 36.51.252.0/23 - - 36.56.0.0/13 - - 36.96.0.0/11 - - 36.128.0.0/10 - - 36.192.0.0/11 - - 36.248.0.0/14 - - 36.254.0.0/16 - - 36.255.116.0/22 - - 36.255.128.0/22 - - 36.255.164.0/22 - - 36.255.172.0/22 - - 36.255.176.0/22 - - 38.142.239.114/32 - - 39.0.0.0/24 - - 39.0.2.0/23 - - 39.0.4.0/22 - - 39.0.8.0/21 - - 39.0.16.0/20 - - 39.0.32.0/19 - - 39.0.64.0/18 - - 39.0.128.0/17 - - 39.64.0.0/11 - - 39.96.0.0/13 - - 39.104.0.0/14 - - 39.108.0.0/16 - - 39.109.120.0/23 - - 39.128.0.0/10 - - 40.0.176.0/20 - - 40.0.247.0/24 - - 40.0.248.0/22 - - 40.0.252.0/23 - - 40.0.255.0/24 - - 40.72.0.0/15 - - 40.77.136.112/28 - - 40.77.236.224/27 - - 40.77.254.64/27 - - 40.125.128.0/17 - - 40.126.64.0/18 - - 40.198.10.0/24 - - 40.198.16.0/21 - - 40.198.24.0/23 - - 40.251.225.0/24 - - 40.251.227.0/24 - - 42.0.0.0/22 - - 42.0.8.0/21 - - 42.0.16.0/21 - - 42.0.24.0/22 - - 42.0.32.0/19 - - 42.0.128.0/17 - - 42.1.0.0/19 - - 42.1.32.0/20 - - 42.1.48.0/21 - - 42.1.56.0/22 - - 42.4.0.0/14 - - 42.48.0.0/13 - - 42.56.0.0/14 - - 42.62.0.0/17 - - 42.62.128.0/19 - - 42.62.160.0/20 - - 42.62.180.0/22 - - 42.62.184.0/21 - - 42.63.0.0/16 - - 42.80.0.0/15 - - 42.83.64.0/20 - - 42.83.80.0/22 - - 42.83.88.0/21 - - 42.83.96.0/19 - - 42.83.128.0/23 - - 42.83.134.0/24 - - 42.83.139.0/24 - - 42.83.140.0/22 - - 42.83.144.0/20 - - 42.83.160.0/19 - - 42.83.192.0/18 - - 42.84.0.0/14 - - 42.88.0.0/13 - - 42.96.64.0/19 - - 42.96.96.0/21 - - 42.96.108.0/22 - - 42.96.112.0/20 - - 42.96.128.0/17 - - 42.97.0.0/16 - - 42.99.0.0/18 - - 42.99.64.0/19 - - 42.99.96.0/20 - - 42.99.112.0/22 - - 42.99.120.0/21 - - 42.100.0.0/14 - - 42.120.0.0/15 - - 42.122.0.0/16 - - 42.123.0.0/19 - - 42.123.36.0/22 - - 42.123.40.0/21 - - 42.123.48.0/20 - - 42.123.64.0/18 - - 42.123.128.0/17 - - 42.128.0.0/12 - - 42.156.0.0/19 - - 42.156.36.0/22 - - 42.156.40.0/21 - - 42.156.48.0/20 - - 42.156.64.0/18 - - 42.156.128.0/17 - - 42.157.0.0/21 - - 42.157.8.0/22 - - 42.157.14.0/23 - - 42.157.16.0/20 - - 42.157.32.0/19 - - 42.157.64.0/18 - - 42.157.128.0/17 - - 42.158.0.0/15 - - 42.160.0.0/12 - - 42.176.0.0/13 - - 42.184.0.0/15 - - 42.186.0.0/16 - - 42.187.0.0/18 - - 42.187.64.0/19 - - 42.187.96.0/20 - - 42.187.112.0/21 - - 42.187.120.0/22 - - 42.187.128.0/17 - - 42.192.0.0/13 - - 42.201.0.0/17 - - 42.202.0.0/15 - - 42.204.0.0/14 - - 42.208.0.0/12 - - 42.224.0.0/12 - - 42.240.0.0/16 - - 42.242.0.0/15 - - 42.244.0.0/15 - - 42.246.0.0/16 - - 42.247.0.0/22 - - 42.247.4.0/24 - - 42.247.5.0/25 - - 42.247.5.128/26 - - 42.247.5.204/30 - - 42.247.5.208/28 - - 42.247.5.224/27 - - 42.247.6.0/23 - - 42.247.8.0/21 - - 42.247.16.0/20 - - 42.247.32.0/19 - - 42.247.64.0/18 - - 42.247.128.0/17 - - 42.248.0.0/13 - - 43.224.12.0/22 - - 43.224.24.0/22 - - 43.224.44.0/22 - - 43.224.52.0/22 - - 43.224.56.0/22 - - 43.224.68.0/22 - - 43.224.72.0/22 - - 43.224.80.0/22 - - 43.224.100.0/22 - - 43.224.144.0/22 - - 43.224.160.0/22 - - 43.224.176.0/22 - - 43.224.184.0/22 - - 43.224.200.0/21 - - 43.224.208.0/21 - - 43.224.216.0/22 - - 43.224.240.0/22 - - 43.225.76.0/22 - - 43.225.86.0/24 - - 43.225.120.0/22 - - 43.225.180.0/22 - - 43.225.208.0/22 - - 43.225.216.0/21 - - 43.225.224.0/20 - - 43.225.240.0/21 - - 43.225.252.0/22 - - 43.226.32.0/19 - - 43.226.64.0/19 - - 43.226.96.0/20 - - 43.226.112.0/21 - - 43.226.120.0/22 - - 43.226.128.0/19 - - 43.226.160.0/21 - - 43.226.236.0/22 - - 43.226.240.0/20 - - 43.227.0.0/21 - - 43.227.8.0/22 - - 43.227.32.0/19 - - 43.227.64.0/19 - - 43.227.104.0/22 - - 43.227.136.0/21 - - 43.227.144.0/22 - - 43.227.152.0/21 - - 43.227.160.0/20 - - 43.227.176.0/21 - - 43.227.188.0/22 - - 43.227.192.0/19 - - 43.227.232.0/22 - - 43.227.248.0/21 - - 43.228.0.0/18 - - 43.228.64.0/21 - - 43.228.76.0/22 - - 43.228.100.0/22 - - 43.228.116.0/24 - - 43.228.118.0/23 - - 43.228.132.0/22 - - 43.228.136.0/22 - - 43.228.148.0/22 - - 43.228.152.0/22 - - 43.228.188.0/22 - - 43.229.40.0/22 - - 43.229.48.0/22 - - 43.229.56.0/22 - - 43.229.96.0/22 - - 43.229.136.0/21 - - 43.229.168.0/21 - - 43.229.176.0/20 - - 43.229.192.0/21 - - 43.229.216.0/21 - - 43.229.232.0/21 - - 43.230.20.0/22 - - 43.230.32.0/22 - - 43.230.68.0/22 - - 43.230.72.0/22 - - 43.230.84.0/22 - - 43.230.124.0/22 - - 43.230.220.0/22 - - 43.230.224.0/19 - - 43.231.12.0/22 - - 43.231.32.0/20 - - 43.231.80.0/20 - - 43.231.96.0/20 - - 43.231.136.0/21 - - 43.231.144.0/20 - - 43.231.160.0/20 - - 43.231.176.0/21 - - 43.236.0.0/15 - - 43.238.0.0/16 - - 43.239.0.0/19 - - 43.239.32.0/20 - - 43.239.48.0/22 - - 43.239.116.0/22 - - 43.239.120.0/22 - - 43.239.172.0/22 - - 43.240.0.0/22 - - 43.240.56.0/21 - - 43.240.68.0/22 - - 43.240.72.0/21 - - 43.240.84.0/22 - - 43.240.124.0/22 - - 43.240.128.0/21 - - 43.240.136.0/22 - - 43.240.156.0/22 - - 43.240.160.0/19 - - 43.240.192.0/19 - - 43.240.240.0/20 - - 43.241.0.0/20 - - 43.241.16.0/21 - - 43.241.48.0/22 - - 43.241.76.0/22 - - 43.241.80.0/20 - - 43.241.112.0/22 - - 43.241.168.0/21 - - 43.241.176.0/21 - - 43.241.184.0/22 - - 43.241.208.0/20 - - 43.241.224.0/20 - - 43.241.240.0/22 - - 43.241.248.0/22 - - 43.242.8.0/21 - - 43.242.16.0/20 - - 43.242.48.0/22 - - 43.242.53.0/24 - - 43.242.54.0/23 - - 43.242.56.0/21 - - 43.242.64.0/22 - - 43.242.72.0/21 - - 43.242.80.0/20 - - 43.242.96.0/22 - - 43.242.144.0/20 - - 43.242.160.0/21 - - 43.242.180.0/22 - - 43.242.188.0/22 - - 43.242.192.0/21 - - 43.242.204.0/22 - - 43.242.216.0/21 - - 43.242.252.0/22 - - 43.243.4.0/22 - - 43.243.8.0/21 - - 43.243.16.0/22 - - 43.243.88.0/22 - - 43.243.128.0/22 - - 43.243.136.0/22 - - 43.243.144.0/21 - - 43.243.156.0/22 - - 43.243.180.0/22 - - 43.243.228.0/22 - - 43.243.232.0/22 - - 43.243.244.0/22 - - 43.246.0.0/18 - - 43.246.64.0/19 - - 43.246.96.0/22 - - 43.246.228.0/22 - - 43.247.4.0/22 - - 43.247.8.0/22 - - 43.247.44.0/22 - - 43.247.48.0/22 - - 43.247.68.0/22 - - 43.247.76.0/22 - - 43.247.84.0/22 - - 43.247.88.0/21 - - 43.247.96.0/21 - - 43.247.108.0/22 - - 43.247.112.0/22 - - 43.247.148.0/22 - - 43.247.152.0/22 - - 43.247.176.0/20 - - 43.247.196.0/22 - - 43.247.200.0/21 - - 43.247.208.0/20 - - 43.247.224.0/19 - - 43.248.0.0/21 - - 43.248.20.0/22 - - 43.248.28.0/22 - - 43.248.48.0/22 - - 43.248.76.0/22 - - 43.248.80.0/20 - - 43.248.96.0/19 - - 43.248.128.0/20 - - 43.248.144.0/21 - - 43.248.176.0/20 - - 43.248.192.0/20 - - 43.248.208.0/22 - - 43.248.228.0/22 - - 43.248.232.0/22 - - 43.248.244.0/22 - - 43.249.4.0/22 - - 43.249.120.0/22 - - 43.249.132.0/22 - - 43.249.136.0/22 - - 43.249.144.0/20 - - 43.249.160.0/21 - - 43.249.168.0/22 - - 43.249.192.0/22 - - 43.249.236.0/22 - - 43.250.4.0/22 - - 43.250.12.0/22 - - 43.250.16.0/21 - - 43.250.28.0/22 - - 43.250.32.0/22 - - 43.250.96.0/21 - - 43.250.108.0/22 - - 43.250.112.0/21 - - 43.250.128.0/22 - - 43.250.144.0/21 - - 43.250.160.0/22 - - 43.250.168.0/22 - - 43.250.176.0/22 - - 43.250.200.0/22 - - 43.250.212.0/22 - - 43.250.216.0/21 - - 43.250.236.0/22 - - 43.250.244.0/22 - - 43.251.4.0/22 - - 43.251.36.0/22 - - 43.251.192.0/22 - - 43.251.232.0/22 - - 43.251.244.0/22 - - 43.252.48.0/22 - - 43.252.56.0/22 - - 43.252.224.0/22 - - 43.254.0.0/21 - - 43.254.8.0/22 - - 43.254.24.0/22 - - 43.254.36.0/22 - - 43.254.44.0/22 - - 43.254.52.0/22 - - 43.254.64.0/22 - - 43.254.72.0/22 - - 43.254.84.0/22 - - 43.254.88.0/21 - - 43.254.100.0/22 - - 43.254.104.0/22 - - 43.254.112.0/21 - - 43.254.128.0/22 - - 43.254.136.0/21 - - 43.254.144.0/20 - - 43.254.168.0/21 - - 43.254.180.0/22 - - 43.254.184.0/21 - - 43.254.192.0/22 - - 43.254.200.0/22 - - 43.254.208.0/22 - - 43.254.220.0/22 - - 43.254.224.0/20 - - 43.254.240.0/22 - - 43.254.248.0/21 - - 43.255.0.0/21 - - 43.255.8.0/22 - - 43.255.16.0/22 - - 43.255.48.0/22 - - 43.255.64.0/20 - - 43.255.84.0/22 - - 43.255.96.0/22 - - 43.255.144.0/22 - - 43.255.176.0/22 - - 43.255.184.0/22 - - 43.255.192.0/22 - - 43.255.200.0/21 - - 43.255.208.0/21 - - 43.255.224.0/21 - - 43.255.232.0/22 - - 43.255.244.0/22 - - 45.40.192.0/20 - - 45.40.208.0/21 - - 45.40.224.0/19 - - 45.65.16.0/20 - - 45.112.132.0/22 - - 45.112.188.0/22 - - 45.112.208.0/22 - - 45.112.216.0/21 - - 45.112.228.0/22 - - 45.112.232.0/21 - - 45.113.12.0/22 - - 45.113.16.0/20 - - 45.113.40.0/22 - - 45.113.52.0/22 - - 45.113.72.0/22 - - 45.113.144.0/21 - - 45.113.168.0/22 - - 45.113.184.0/22 - - 45.113.200.0/21 - - 45.113.208.0/20 - - 45.113.240.0/22 - - 45.113.252.0/22 - - 45.114.0.0/22 - - 45.114.32.0/22 - - 45.114.52.0/22 - - 45.114.96.0/22 - - 45.114.136.0/22 - - 45.114.196.0/22 - - 45.114.200.0/22 - - 45.114.228.0/22 - - 45.114.237.0/24 - - 45.114.238.0/23 - - 45.114.252.0/22 - - 45.115.44.0/22 - - 45.115.100.0/22 - - 45.115.120.0/22 - - 45.115.132.0/22 - - 45.115.144.0/22 - - 45.115.156.0/22 - - 45.115.164.0/22 - - 45.115.200.0/22 - - 45.115.212.0/22 - - 45.115.244.0/22 - - 45.115.248.0/22 - - 45.116.16.0/22 - - 45.116.24.0/22 - - 45.116.32.0/21 - - 45.116.52.0/22 - - 45.116.96.0/21 - - 45.116.140.0/22 - - 45.116.152.0/22 - - 45.116.208.0/22 - - 45.117.8.0/22 - - 45.117.20.0/22 - - 45.117.68.0/22 - - 45.117.124.0/22 - - 45.117.252.0/22 - - 45.119.60.0/22 - - 45.119.64.0/21 - - 45.119.72.0/22 - - 45.119.104.0/22 - - 45.119.232.0/22 - - 45.120.100.0/22 - - 45.120.140.0/22 - - 45.120.164.0/22 - - 45.120.180.128/27 - - 45.120.240.0/22 - - 45.121.52.0/22 - - 45.121.64.0/21 - - 45.121.72.0/22 - - 45.121.92.0/22 - - 45.121.96.0/22 - - 45.121.172.0/22 - - 45.121.176.0/22 - - 45.121.240.0/20 - - 45.122.0.0/19 - - 45.122.32.0/21 - - 45.122.40.0/22 - - 45.122.60.0/22 - - 45.122.64.0/19 - - 45.122.96.0/20 - - 45.122.112.0/21 - - 45.122.160.0/19 - - 45.122.192.0/20 - - 45.122.208.0/21 - - 45.122.216.0/22 - - 45.123.28.0/22 - - 45.123.32.0/21 - - 45.123.44.0/22 - - 45.123.48.0/20 - - 45.123.64.0/20 - - 45.123.80.0/21 - - 45.123.120.0/22 - - 45.123.128.0/21 - - 45.123.136.0/22 - - 45.123.148.0/22 - - 45.123.152.0/21 - - 45.123.164.0/22 - - 45.123.168.0/21 - - 45.123.176.0/21 - - 45.123.184.0/22 - - 45.123.204.0/22 - - 45.123.212.0/22 - - 45.123.224.0/19 - - 45.124.0.0/22 - - 45.124.20.0/22 - - 45.124.28.0/22 - - 45.124.32.0/21 - - 45.124.44.0/22 - - 45.124.68.0/22 - - 45.124.76.0/22 - - 45.124.80.0/22 - - 45.124.100.0/22 - - 45.124.124.0/22 - - 45.124.172.0/22 - - 45.124.176.0/22 - - 45.124.208.0/22 - - 45.124.248.0/22 - - 45.125.24.0/22 - - 45.125.44.0/22 - - 45.125.52.0/22 - - 45.125.56.0/22 - - 45.125.76.0/22 - - 45.125.80.0/20 - - 45.125.96.0/21 - - 45.125.136.0/22 - - 45.126.48.0/21 - - 45.126.108.0/22 - - 45.126.112.0/21 - - 45.126.120.0/22 - - 45.126.220.0/22 - - 45.127.8.0/21 - - 45.127.128.0/22 - - 45.127.144.0/21 - - 45.127.156.0/22 - - 45.248.8.0/22 - - 45.248.80.0/22 - - 45.248.88.0/22 - - 45.248.96.0/20 - - 45.248.128.0/21 - - 45.248.204.0/22 - - 45.248.208.0/20 - - 45.248.224.0/19 - - 45.249.0.0/21 - - 45.249.12.0/22 - - 45.249.16.0/20 - - 45.249.32.0/21 - - 45.249.112.0/22 - - 45.249.188.0/22 - - 45.249.192.0/20 - - 45.249.208.0/21 - - 45.250.12.0/22 - - 45.250.16.0/22 - - 45.250.28.0/22 - - 45.250.32.0/21 - - 45.250.40.0/22 - - 45.250.76.0/22 - - 45.250.80.0/20 - - 45.250.96.0/22 - - 45.250.104.0/21 - - 45.250.112.0/20 - - 45.250.128.0/20 - - 45.250.144.0/21 - - 45.250.152.0/22 - - 45.250.164.0/22 - - 45.250.180.0/22 - - 45.250.184.0/21 - - 45.250.192.0/22 - - 45.251.0.0/22 - - 45.251.8.0/22 - - 45.251.16.0/21 - - 45.251.52.0/22 - - 45.251.84.0/22 - - 45.251.88.0/21 - - 45.251.96.0/21 - - 45.251.120.0/21 - - 45.251.137.0/24 - - 45.251.138.0/23 - - 45.251.140.0/22 - - 45.251.144.0/20 - - 45.251.160.0/19 - - 45.251.192.0/19 - - 45.251.224.0/22 - - 45.252.0.0/19 - - 45.252.32.0/20 - - 45.252.48.0/22 - - 45.252.84.0/22 - - 45.252.88.0/21 - - 45.252.96.0/19 - - 45.252.128.0/19 - - 45.252.160.0/20 - - 45.252.176.0/22 - - 45.252.192.0/19 - - 45.252.224.0/21 - - 45.252.232.0/22 - - 45.253.0.0/18 - - 45.253.64.0/20 - - 45.253.80.0/21 - - 45.253.92.0/22 - - 45.253.96.0/20 - - 45.253.112.0/21 - - 45.253.120.0/22 - - 45.253.130.0/23 - - 45.253.132.0/22 - - 45.253.136.0/21 - - 45.253.144.0/20 - - 45.253.160.0/19 - - 45.253.192.0/19 - - 45.253.224.0/20 - - 45.253.240.0/22 - - 45.254.0.0/20 - - 45.254.16.0/21 - - 45.254.28.0/22 - - 45.254.40.0/22 - - 45.254.48.0/20 - - 45.254.64.0/18 - - 45.254.128.0/18 - - 45.254.192.0/19 - - 45.254.224.0/21 - - 45.254.236.0/22 - - 45.254.240.0/22 - - 45.254.248.0/22 - - 45.255.0.0/18 - - 45.255.64.0/19 - - 45.255.96.0/20 - - 45.255.112.0/21 - - 45.255.120.0/22 - - 45.255.136.0/21 - - 45.255.144.0/20 - - 45.255.160.0/19 - - 45.255.192.0/19 - - 45.255.224.0/20 - - 45.255.240.0/21 - - 45.255.248.0/22 - - 46.248.24.0/23 - - 47.92.0.0/14 - - 47.96.0.0/11 - - 49.4.0.0/14 - - 49.51.56.0/22 - - 49.51.60.0/23 - - 49.51.110.0/23 - - 49.51.112.0/20 - - 49.52.0.0/14 - - 49.64.0.0/11 - - 49.112.0.0/13 - - 49.120.0.0/14 - - 49.128.0.0/24 - - 49.128.2.0/23 - - 49.128.4.0/22 - - 49.140.0.0/15 - - 49.152.0.0/14 - - 49.208.0.0/14 - - 49.220.0.0/14 - - 49.232.0.0/14 - - 49.239.0.0/18 - - 49.239.192.0/18 - - 52.80.0.0/14 - - 52.94.249.0/27 - - 52.95.255.144/28 - - 52.130.0.0/15 - - 54.222.0.0/15 - - 54.231.208.0/20 - - 54.240.224.0/24 - - 57.92.96.0/20 - - 58.14.0.0/15 - - 58.16.0.0/13 - - 58.24.0.0/15 - - 58.30.0.0/15 - - 58.32.0.0/11 - - 58.65.232.0/21 - - 58.66.0.0/15 - - 58.68.128.0/19 - - 58.68.160.0/23 - - 58.68.163.0/24 - - 58.68.164.0/22 - - 58.68.179.0/24 - - 58.68.180.0/24 - - 58.68.200.0/21 - - 58.68.208.0/20 - - 58.68.224.0/19 - - 58.82.0.0/17 - - 58.83.0.0/16 - - 58.87.64.0/18 - - 58.99.128.0/17 - - 58.100.0.0/15 - - 58.116.0.0/14 - - 58.128.0.0/13 - - 58.144.0.0/16 - - 58.154.0.0/15 - - 58.192.0.0/11 - - 58.229.92.158/31 - - 58.240.0.0/12 - - 59.32.0.0/11 - - 59.64.0.0/12 - - 59.80.0.0/15 - - 59.82.0.0/16 - - 59.83.0.0/18 - - 59.83.132.0/22 - - 59.83.136.0/21 - - 59.83.144.0/20 - - 59.83.160.0/19 - - 59.83.192.0/19 - - 59.83.224.0/20 - - 59.83.240.0/21 - - 59.83.248.0/22 - - 59.83.252.0/23 - - 59.83.254.0/24 - - 59.107.0.0/16 - - 59.108.0.0/14 - - 59.151.0.0/17 - - 59.152.16.0/20 - - 59.152.36.0/22 - - 59.152.64.0/20 - - 59.152.112.0/21 - - 59.153.4.0/22 - - 59.153.32.0/22 - - 59.153.64.0/21 - - 59.153.72.0/22 - - 59.153.92.0/22 - - 59.153.136.0/22 - - 59.153.152.0/21 - - 59.153.164.0/22 - - 59.153.168.0/21 - - 59.153.176.0/20 - - 59.153.192.0/22 - - 59.155.0.0/16 - - 59.172.0.0/14 - - 59.191.0.0/17 - - 59.192.0.0/10 - - 60.0.0.0/11 - - 60.55.0.0/16 - - 60.63.0.0/16 - - 60.160.0.0/11 - - 60.194.0.0/15 - - 60.200.0.0/13 - - 60.208.0.0/12 - - 60.232.0.0/15 - - 60.235.0.0/16 - - 60.245.128.0/17 - - 60.247.0.0/16 - - 60.252.0.0/16 - - 60.253.128.0/17 - - 60.255.0.0/16 - - 61.4.81.0/24 - - 61.4.82.0/23 - - 61.4.84.0/22 - - 61.4.88.0/21 - - 61.4.176.0/20 - - 61.8.160.0/20 - - 61.14.212.0/22 - - 61.14.216.0/21 - - 61.14.240.0/21 - - 61.28.0.0/17 - - 61.29.128.0/18 - - 61.29.192.0/19 - - 61.29.224.0/20 - - 61.45.128.0/18 - - 61.45.224.0/20 - - 61.47.128.0/18 - - 61.48.0.0/13 - - 61.87.192.0/18 - - 61.128.0.0/10 - - 61.232.0.0/14 - - 61.236.0.0/15 - - 61.240.0.0/14 - - 62.234.0.0/16 - - 64.85.27.0/24 - - 68.79.0.0/18 - - 69.230.192.0/18 - - 69.231.128.0/18 - - 69.234.192.0/18 - - 69.235.128.0/18 - - 71.131.192.0/18 - - 71.132.0.0/18 - - 71.136.64.0/18 - - 71.137.0.0/18 - - 72.21.221.238/32 - - 72.21.221.240/30 - - 72.163.240.0/23 - - 72.163.248.0/22 - - 81.68.0.0/14 - - 82.156.0.0/15 - - 87.254.207.0/24 - - 93.183.14.0/24 - - 93.183.18.0/24 - - 94.191.0.0/17 - - 101.0.0.0/22 - - 101.1.0.0/22 - - 101.2.172.0/22 - - 101.4.0.0/14 - - 101.16.0.0/12 - - 101.32.0.0/14 - - 101.36.0.0/18 - - 101.36.64.0/20 - - 101.36.88.0/21 - - 101.36.96.0/19 - - 101.36.128.0/17 - - 101.37.0.0/16 - - 101.38.0.0/15 - - 101.40.0.0/13 - - 101.48.0.0/15 - - 101.50.8.0/21 - - 101.50.56.0/22 - - 101.52.0.0/16 - - 101.53.100.0/22 - - 101.54.0.0/16 - - 101.55.224.0/21 - - 101.64.0.0/13 - - 101.72.0.0/14 - - 101.76.0.0/15 - - 101.78.0.0/22 - - 101.78.32.0/19 - - 101.80.0.0/12 - - 101.96.0.0/21 - - 101.96.8.0/22 - - 101.96.16.0/20 - - 101.96.128.0/17 - - 101.99.96.0/19 - - 101.101.64.0/19 - - 101.101.100.0/24 - - 101.101.102.0/23 - - 101.101.104.0/21 - - 101.101.112.0/20 - - 101.102.64.0/19 - - 101.102.100.0/23 - - 101.102.102.0/24 - - 101.102.104.0/21 - - 101.102.112.0/20 - - 101.104.0.0/14 - - 101.110.64.0/19 - - 101.110.96.0/20 - - 101.110.116.0/22 - - 101.110.120.0/21 - - 101.120.0.0/14 - - 101.124.0.0/15 - - 101.126.0.0/16 - - 101.128.0.0/22 - - 101.128.8.0/21 - - 101.128.16.0/20 - - 101.128.32.0/19 - - 101.129.0.0/16 - - 101.130.0.0/15 - - 101.132.0.0/15 - - 101.134.0.0/17 - - 101.134.128.0/19 - - 101.134.160.0/20 - - 101.134.176.0/21 - - 101.134.184.0/22 - - 101.134.189.0/24 - - 101.134.190.0/23 - - 101.134.192.0/18 - - 101.135.0.0/16 - - 101.144.0.0/12 - - 101.192.0.0/14 - - 101.196.0.0/16 - - 101.198.128.0/18 - - 101.198.194.0/24 - - 101.198.196.0/23 - - 101.198.200.0/22 - - 101.198.224.0/19 - - 101.199.0.0/19 - - 101.199.48.0/20 - - 101.199.64.0/18 - - 101.199.128.0/17 - - 101.200.0.0/15 - - 101.203.128.0/19 - - 101.203.160.0/21 - - 101.203.172.0/22 - - 101.203.176.0/20 - - 101.204.0.0/14 - - 101.224.0.0/13 - - 101.232.0.0/15 - - 101.234.64.0/21 - - 101.234.76.0/22 - - 101.234.80.0/20 - - 101.234.96.0/19 - - 101.236.0.0/14 - - 101.240.0.0/13 - - 101.248.0.0/15 - - 101.251.0.0/22 - - 101.251.8.0/21 - - 101.251.16.0/20 - - 101.251.32.0/19 - - 101.251.64.0/18 - - 101.251.128.0/17 - - 101.252.0.0/15 - - 101.254.0.0/16 - - 102.176.130.0/24 - - 103.1.8.0/22 - - 103.1.20.0/22 - - 103.1.24.0/22 - - 103.1.88.0/22 - - 103.1.168.0/22 - - 103.2.108.0/22 - - 103.2.156.0/22 - - 103.2.164.0/22 - - 103.2.200.0/21 - - 103.2.208.0/21 - - 103.3.84.0/22 - - 103.3.88.0/21 - - 103.3.96.0/19 - - 103.3.128.0/20 - - 103.3.148.0/22 - - 103.3.152.0/21 - - 103.4.56.0/22 - - 103.4.168.0/22 - - 103.4.184.0/22 - - 103.5.36.0/22 - - 103.5.52.0/23 - - 103.5.56.0/22 - - 103.5.152.0/22 - - 103.5.168.0/22 - - 103.5.192.0/22 - - 103.5.252.0/22 - - 103.6.76.0/22 - - 103.6.108.0/22 - - 103.6.120.0/22 - - 103.6.220.0/22 - - 103.6.228.0/22 - - 103.7.140.0/22 - - 103.7.212.0/22 - - 103.7.216.0/21 - - 103.8.0.0/21 - - 103.8.8.0/22 - - 103.8.32.0/22 - - 103.8.52.0/22 - - 103.8.68.0/22 - - 103.8.108.0/22 - - 103.8.156.0/22 - - 103.8.200.0/21 - - 103.8.220.0/22 - - 103.9.8.0/22 - - 103.9.24.0/22 - - 103.9.108.0/22 - - 103.9.152.0/22 - - 103.9.248.0/21 - - 103.10.0.0/22 - - 103.10.16.0/22 - - 103.10.84.0/22 - - 103.10.111.0/24 - - 103.10.140.0/22 - - 103.11.16.0/22 - - 103.11.168.0/22 - - 103.11.180.0/22 - - 103.12.32.0/22 - - 103.12.136.0/22 - - 103.12.184.0/22 - - 103.12.232.0/22 - - 103.13.12.0/22 - - 103.13.124.0/22 - - 103.13.144.0/22 - - 103.13.196.0/22 - - 103.13.244.0/22 - - 103.14.84.0/22 - - 103.14.132.0/22 - - 103.14.136.0/22 - - 103.14.156.0/22 - - 103.14.240.0/22 - - 103.15.4.0/22 - - 103.15.8.0/22 - - 103.15.16.0/22 - - 103.15.96.0/22 - - 103.15.200.0/22 - - 103.16.52.0/22 - - 103.16.80.0/21 - - 103.16.88.0/22 - - 103.16.108.0/22 - - 103.16.124.0/22 - - 103.17.40.0/22 - - 103.17.64.0/22 - - 103.17.120.0/23 - - 103.17.136.0/22 - - 103.17.160.0/22 - - 103.17.204.0/22 - - 103.17.228.0/22 - - 103.18.192.0/22 - - 103.18.208.0/21 - - 103.18.224.0/22 - - 103.19.12.0/22 - - 103.19.40.0/21 - - 103.19.64.0/21 - - 103.19.72.0/22 - - 103.19.232.0/22 - - 103.20.12.0/22 - - 103.20.32.0/23 - - 103.20.34.0/24 - - 103.20.68.0/22 - - 103.20.112.0/22 - - 103.20.128.0/22 - - 103.20.160.0/22 - - 103.20.248.0/22 - - 103.21.112.0/21 - - 103.21.140.0/22 - - 103.21.176.0/22 - - 103.21.240.0/22 - - 103.22.0.0/18 - - 103.22.64.0/19 - - 103.22.100.0/22 - - 103.22.104.0/21 - - 103.22.112.0/20 - - 103.22.188.0/22 - - 103.22.228.0/22 - - 103.22.252.0/22 - - 103.23.8.0/22 - - 103.23.56.0/22 - - 103.23.160.0/21 - - 103.23.176.0/22 - - 103.23.228.0/22 - - 103.24.24.0/22 - - 103.24.116.0/22 - - 103.24.128.0/22 - - 103.24.144.0/22 - - 103.24.176.0/22 - - 103.24.184.0/22 - - 103.24.228.0/22 - - 103.24.252.0/22 - - 103.25.20.0/22 - - 103.25.24.0/21 - - 103.25.32.0/21 - - 103.25.40.0/22 - - 103.25.48.0/22 - - 103.25.64.0/21 - - 103.25.148.0/22 - - 103.25.156.0/22 - - 103.25.216.0/22 - - 103.26.0.0/22 - - 103.26.64.0/26 - - 103.26.64.64/27 - - 103.26.64.96/29 - - 103.26.64.106/31 - - 103.26.64.108/30 - - 103.26.64.112/28 - - 103.26.64.128/25 - - 103.26.65.0/24 - - 103.26.66.0/23 - - 103.26.76.0/22 - - 103.26.116.0/22 - - 103.26.156.0/22 - - 103.26.160.0/22 - - 103.26.228.0/22 - - 103.26.240.0/22 - - 103.27.4.0/22 - - 103.27.12.0/22 - - 103.27.24.0/22 - - 103.27.56.0/22 - - 103.27.96.0/22 - - 103.27.240.0/22 - - 103.28.4.0/22 - - 103.28.8.0/22 - - 103.28.144.0/22 - - 103.28.184.0/22 - - 103.28.204.0/22 - - 103.28.212.0/22 - - 103.29.16.0/22 - - 103.29.128.0/21 - - 103.29.136.0/22 - - 103.30.20.0/22 - - 103.30.48.0/22 - - 103.30.96.0/22 - - 103.30.148.0/22 - - 103.30.202.0/23 - - 103.30.228.0/22 - - 103.30.236.0/22 - - 103.31.0.0/22 - - 103.31.48.0/21 - - 103.31.60.0/22 - - 103.31.64.0/21 - - 103.31.72.0/24 - - 103.31.148.0/22 - - 103.31.160.0/22 - - 103.31.168.0/22 - - 103.31.200.0/22 - - 103.31.236.0/22 - - 103.32.0.0/15 - - 103.34.0.0/16 - - 103.35.0.0/19 - - 103.35.32.0/20 - - 103.35.48.0/22 - - 103.35.104.0/22 - - 103.35.220.0/22 - - 103.36.28.0/22 - - 103.36.36.0/22 - - 103.36.56.0/21 - - 103.36.64.0/22 - - 103.36.72.0/22 - - 103.36.96.0/22 - - 103.36.132.0/22 - - 103.36.136.0/22 - - 103.36.160.0/19 - - 103.36.192.0/19 - - 103.36.224.0/20 - - 103.36.240.0/21 - - 103.37.12.0/22 - - 103.37.16.0/22 - - 103.37.24.0/22 - - 103.37.44.0/22 - - 103.37.52.0/22 - - 103.37.56.0/22 - - 103.37.72.0/22 - - 103.37.100.0/22 - - 103.37.104.0/22 - - 103.37.136.0/21 - - 103.37.144.0/20 - - 103.37.160.0/21 - - 103.37.172.0/22 - - 103.37.176.0/22 - - 103.37.188.0/22 - - 103.37.208.0/20 - - 103.37.252.0/22 - - 103.38.0.0/22 - - 103.38.32.0/22 - - 103.38.40.0/21 - - 103.38.76.0/22 - - 103.38.84.0/22 - - 103.38.92.0/22 - - 103.38.96.0/22 - - 103.38.116.0/22 - - 103.38.132.0/22 - - 103.38.140.0/22 - - 103.38.220.0/22 - - 103.38.224.0/21 - - 103.38.232.0/22 - - 103.38.252.0/23 - - 103.39.64.0/22 - - 103.39.88.0/22 - - 103.39.100.0/22 - - 103.39.104.0/22 - - 103.39.160.0/19 - - 103.39.200.0/21 - - 103.39.208.0/20 - - 103.39.224.0/21 - - 103.39.232.0/22 - - 103.40.12.0/22 - - 103.40.16.0/20 - - 103.40.32.0/20 - - 103.40.88.0/22 - - 103.40.192.0/22 - - 103.40.212.0/22 - - 103.40.220.0/22 - - 103.40.228.0/22 - - 103.40.232.0/21 - - 103.40.240.0/20 - - 103.41.0.0/22 - - 103.41.52.0/22 - - 103.41.140.0/25 - - 103.41.140.128/28 - - 103.41.140.144/29 - - 103.41.140.154/31 - - 103.41.140.158/31 - - 103.41.140.162/31 - - 103.41.140.166/31 - - 103.41.140.168/29 - - 103.41.140.176/28 - - 103.41.140.192/26 - - 103.41.141.0/24 - - 103.41.142.0/23 - - 103.41.148.0/22 - - 103.41.152.0/22 - - 103.41.160.0/21 - - 103.41.220.0/22 - - 103.41.224.0/21 - - 103.41.232.0/22 - - 103.42.8.0/22 - - 103.42.24.0/22 - - 103.42.32.0/22 - - 103.42.64.0/21 - - 103.42.76.0/22 - - 103.42.232.0/22 - - 103.43.26.0/23 - - 103.43.96.0/21 - - 103.43.104.0/22 - - 103.43.124.0/22 - - 103.43.184.0/22 - - 103.43.192.0/21 - - 103.43.208.0/22 - - 103.43.220.0/22 - - 103.43.224.0/22 - - 103.43.240.0/22 - - 103.44.58.0/23 - - 103.44.80.0/22 - - 103.44.120.0/21 - - 103.44.144.0/22 - - 103.44.152.0/22 - - 103.44.168.0/22 - - 103.44.176.0/20 - - 103.44.192.0/20 - - 103.44.224.0/22 - - 103.44.236.0/22 - - 103.44.240.0/20 - - 103.45.0.0/26 - - 103.45.0.64/29 - - 103.45.0.76/30 - - 103.45.0.80/28 - - 103.45.0.96/27 - - 103.45.0.128/25 - - 103.45.1.0/24 - - 103.45.2.0/23 - - 103.45.4.0/22 - - 103.45.8.0/21 - - 103.45.16.0/20 - - 103.45.32.0/19 - - 103.45.72.0/21 - - 103.45.80.0/20 - - 103.45.96.0/19 - - 103.45.128.0/18 - - 103.45.192.0/19 - - 103.45.224.0/22 - - 103.45.248.0/22 - - 103.46.0.0/22 - - 103.46.12.0/22 - - 103.46.16.0/20 - - 103.46.32.0/19 - - 103.46.64.0/18 - - 103.46.128.0/21 - - 103.46.136.0/22 - - 103.46.152.0/21 - - 103.46.160.0/20 - - 103.46.176.0/21 - - 103.46.244.0/22 - - 103.46.248.0/22 - - 103.47.4.0/22 - - 103.47.20.0/22 - - 103.47.36.0/22 - - 103.47.40.0/22 - - 103.47.48.0/22 - - 103.47.80.0/22 - - 103.47.96.0/22 - - 103.47.116.0/22 - - 103.47.120.0/22 - - 103.47.136.0/21 - - 103.47.212.0/22 - - 103.48.52.0/22 - - 103.48.92.0/22 - - 103.48.148.0/22 - - 103.48.152.0/22 - - 103.48.202.0/23 - - 103.48.216.0/21 - - 103.48.224.0/20 - - 103.48.240.0/21 - - 103.49.12.0/22 - - 103.49.20.0/22 - - 103.49.72.0/21 - - 103.49.96.0/22 - - 103.49.108.0/22 - - 103.49.128.0/22 - - 103.49.176.0/21 - - 103.50.36.0/22 - - 103.50.44.0/22 - - 103.50.48.0/20 - - 103.50.64.0/21 - - 103.50.72.0/22 - - 103.50.92.0/22 - - 103.50.108.0/22 - - 103.50.112.0/20 - - 103.50.132.0/22 - - 103.50.136.0/21 - - 103.50.172.0/22 - - 103.50.176.0/20 - - 103.50.192.0/21 - - 103.50.200.0/22 - - 103.50.220.0/22 - - 103.50.224.0/20 - - 103.50.240.0/21 - - 103.50.248.0/22 - - 103.52.40.0/22 - - 103.52.72.0/23 - - 103.52.74.0/25 - - 103.52.74.128/26 - - 103.52.74.192/27 - - 103.52.74.224/28 - - 103.52.74.240/30 - - 103.52.74.252/30 - - 103.52.75.0/24 - - 103.52.76.0/22 - - 103.52.80.0/21 - - 103.52.96.0/21 - - 103.52.104.0/22 - - 103.52.160.0/21 - - 103.52.172.0/22 - - 103.52.176.0/22 - - 103.52.184.0/22 - - 103.52.196.0/22 - - 103.53.64.0/21 - - 103.53.92.0/22 - - 103.53.124.0/22 - - 103.53.128.0/20 - - 103.53.144.0/22 - - 103.53.160.0/22 - - 103.53.180.0/22 - - 103.53.204.0/22 - - 103.53.208.0/21 - - 103.53.236.0/22 - - 103.53.248.0/22 - - 103.54.8.0/22 - - 103.54.48.0/22 - - 103.54.160.0/21 - - 103.54.212.0/22 - - 103.54.228.0/22 - - 103.54.240.0/22 - - 103.55.80.0/22 - - 103.55.120.0/22 - - 103.55.152.0/22 - - 103.55.172.0/22 - - 103.55.204.0/22 - - 103.55.208.0/22 - - 103.55.228.0/22 - - 103.55.236.0/22 - - 103.55.240.0/22 - - 103.56.20.0/22 - - 103.56.32.0/22 - - 103.56.56.0/21 - - 103.56.72.0/21 - - 103.56.140.0/22 - - 103.56.152.0/22 - - 103.56.184.0/22 - - 103.56.200.0/22 - - 103.57.12.0/22 - - 103.57.52.0/22 - - 103.57.56.0/22 - - 103.57.76.0/22 - - 103.57.136.0/22 - - 103.57.196.0/22 - - 103.58.24.0/22 - - 103.59.76.0/22 - - 103.59.112.0/21 - - 103.59.120.0/24 - - 103.59.123.0/24 - - 103.59.124.0/22 - - 103.59.128.0/22 - - 103.59.148.0/22 - - 103.60.32.0/22 - - 103.60.44.0/22 - - 103.60.164.0/22 - - 103.60.228.0/22 - - 103.60.236.0/22 - - 103.61.60.0/24 - - 103.61.104.0/22 - - 103.61.140.0/22 - - 103.61.152.0/21 - - 103.61.160.0/22 - - 103.61.172.0/22 - - 103.61.176.0/22 - - 103.62.24.0/22 - - 103.62.72.0/21 - - 103.62.80.0/21 - - 103.62.88.0/22 - - 103.62.96.0/19 - - 103.62.128.0/21 - - 103.62.156.0/22 - - 103.62.160.0/19 - - 103.62.192.0/22 - - 103.62.204.0/22 - - 103.62.208.0/20 - - 103.62.224.0/22 - - 103.63.32.0/19 - - 103.63.64.0/20 - - 103.63.80.0/21 - - 103.63.88.0/22 - - 103.63.140.0/22 - - 103.63.144.0/22 - - 103.63.152.0/22 - - 103.63.160.0/20 - - 103.63.176.0/21 - - 103.63.184.0/22 - - 103.63.192.0/20 - - 103.63.208.0/22 - - 103.63.240.0/20 - - 103.64.0.0/21 - - 103.64.24.0/21 - - 103.64.32.0/19 - - 103.64.64.0/18 - - 103.64.140.0/22 - - 103.64.144.0/22 - - 103.64.152.0/21 - - 103.64.160.0/19 - - 103.64.192.0/18 - - 103.65.0.0/21 - - 103.65.12.0/22 - - 103.65.16.0/22 - - 103.65.48.0/20 - - 103.65.64.0/19 - - 103.65.100.0/22 - - 103.65.104.0/21 - - 103.65.112.0/20 - - 103.65.128.0/21 - - 103.65.136.0/22 - - 103.65.144.0/20 - - 103.65.160.0/20 - - 103.66.32.0/22 - - 103.66.40.0/22 - - 103.66.108.0/22 - - 103.66.200.0/22 - - 103.66.240.0/20 - - 103.67.0.0/21 - - 103.67.8.0/22 - - 103.67.40.0/21 - - 103.67.48.0/20 - - 103.67.64.0/18 - - 103.67.128.0/20 - - 103.67.144.0/21 - - 103.67.172.0/24 - - 103.67.175.0/24 - - 103.67.192.0/22 - - 103.67.212.0/22 - - 103.68.88.0/22 - - 103.68.100.0/22 - - 103.68.128.0/22 - - 103.69.16.0/22 - - 103.69.212.0/23 - - 103.70.8.0/22 - - 103.70.148.0/22 - - 103.70.236.0/22 - - 103.70.252.0/22 - - 103.71.0.0/22 - - 103.71.68.0/22 - - 103.71.72.0/22 - - 103.71.80.0/21 - - 103.71.88.0/22 - - 103.71.120.0/21 - - 103.71.128.0/22 - - 103.71.196.0/22 - - 103.71.200.0/22 - - 103.71.232.0/22 - - 103.72.12.0/22 - - 103.72.16.0/20 - - 103.72.32.0/20 - - 103.72.48.0/21 - - 103.72.112.0/21 - - 103.72.124.0/22 - - 103.72.128.0/21 - - 103.72.149.0/24 - - 103.72.150.0/23 - - 103.72.172.0/22 - - 103.72.180.0/22 - - 103.72.224.0/19 - - 103.73.0.0/19 - - 103.73.48.0/22 - - 103.73.116.0/22 - - 103.73.120.0/22 - - 103.73.128.0/20 - - 103.73.168.0/22 - - 103.73.176.0/22 - - 103.73.204.0/22 - - 103.73.208.0/22 - - 103.73.240.0/23 - - 103.73.244.0/22 - - 103.73.248.0/22 - - 103.74.24.0/21 - - 103.74.32.0/20 - - 103.74.48.0/22 - - 103.74.56.0/21 - - 103.74.80.0/22 - - 103.74.124.0/22 - - 103.74.148.0/22 - - 103.74.152.0/21 - - 103.74.204.0/22 - - 103.74.232.0/22 - - 103.75.87.0/24 - - 103.75.88.0/21 - - 103.75.104.0/21 - - 103.75.112.0/22 - - 103.75.120.0/22 - - 103.75.128.0/22 - - 103.75.144.0/22 - - 103.75.152.0/22 - - 103.76.60.0/22 - - 103.76.64.0/21 - - 103.76.72.0/22 - - 103.76.92.0/22 - - 103.76.216.0/21 - - 103.76.224.0/22 - - 103.77.28.0/22 - - 103.77.52.0/22 - - 103.77.56.0/22 - - 103.77.88.0/22 - - 103.77.132.0/22 - - 103.77.148.0/22 - - 103.77.220.0/22 - - 103.78.56.0/21 - - 103.78.64.0/22 - - 103.78.124.0/22 - - 103.78.172.0/22 - - 103.78.176.0/22 - - 103.78.196.0/22 - - 103.78.228.0/22 - - 103.79.24.0/21 - - 103.79.36.0/22 - - 103.79.40.0/21 - - 103.79.56.0/21 - - 103.79.64.0/21 - - 103.79.80.0/21 - - 103.79.136.0/22 - - 103.79.188.0/22 - - 103.79.192.0/20 - - 103.79.208.0/21 - - 103.79.243.0/24 - - 103.80.44.0/22 - - 103.80.72.0/22 - - 103.80.176.0/21 - - 103.80.184.0/22 - - 103.80.192.0/22 - - 103.80.200.0/22 - - 103.80.232.0/22 - - 103.81.4.0/22 - - 103.81.44.0/22 - - 103.81.48.0/22 - - 103.81.96.0/22 - - 103.81.120.0/22 - - 103.81.148.0/22 - - 103.81.164.0/22 - - 103.81.200.0/22 - - 103.81.232.0/22 - - 103.82.60.0/22 - - 103.82.68.0/22 - - 103.82.84.0/22 - - 103.82.104.0/22 - - 103.82.224.0/22 - - 103.82.236.0/22 - - 103.83.44.0/22 - - 103.83.52.0/22 - - 103.83.60.0/22 - - 103.83.72.0/22 - - 103.83.112.0/22 - - 103.83.132.0/22 - - 103.83.180.0/22 - - 103.84.0.0/22 - - 103.84.12.0/22 - - 103.84.20.0/22 - - 103.84.24.0/21 - - 103.84.48.0/22 - - 103.84.56.0/22 - - 103.84.64.0/22 - - 103.84.72.0/22 - - 103.85.44.0/22 - - 103.85.48.0/21 - - 103.85.56.0/22 - - 103.85.84.0/22 - - 103.85.136.0/22 - - 103.85.144.0/22 - - 103.85.164.0/22 - - 103.85.168.0/21 - - 103.85.176.0/22 - - 103.86.28.0/22 - - 103.86.32.0/22 - - 103.86.60.0/22 - - 103.86.129.0/24 - - 103.86.204.0/22 - - 103.86.208.0/20 - - 103.86.224.0/19 - - 103.87.0.0/21 - - 103.87.20.0/22 - - 103.87.32.0/22 - - 103.87.96.0/22 - - 103.87.132.0/22 - - 103.87.180.0/22 - - 103.87.224.0/22 - - 103.88.4.0/22 - - 103.88.8.0/21 - - 103.88.16.0/21 - - 103.88.32.0/21 - - 103.88.60.0/22 - - 103.88.64.0/22 - - 103.88.72.0/22 - - 103.88.96.0/21 - - 103.88.152.0/23 - - 103.88.164.0/22 - - 103.88.212.0/22 - - 103.89.28.0/22 - - 103.89.96.0/20 - - 103.89.112.0/22 - - 103.89.148.0/22 - - 103.89.172.0/22 - - 103.89.184.0/21 - - 103.89.192.0/19 - - 103.89.224.0/21 - - 103.90.52.0/22 - - 103.90.92.0/22 - - 103.90.100.0/22 - - 103.90.104.0/21 - - 103.90.112.0/20 - - 103.90.128.0/21 - - 103.90.152.0/22 - - 103.90.168.0/22 - - 103.90.173.0/24 - - 103.90.176.0/22 - - 103.90.188.0/22 - - 103.90.192.0/22 - - 103.91.36.0/22 - - 103.91.40.0/22 - - 103.91.108.0/22 - - 103.91.152.0/22 - - 103.91.176.0/22 - - 103.91.200.0/22 - - 103.91.208.0/21 - - 103.91.236.0/22 - - 103.92.48.0/20 - - 103.92.64.0/20 - - 103.92.80.0/22 - - 103.92.88.0/22 - - 103.92.108.0/22 - - 103.92.124.0/22 - - 103.92.132.0/22 - - 103.92.156.0/22 - - 103.92.164.0/22 - - 103.92.168.0/21 - - 103.92.176.0/20 - - 103.92.192.0/22 - - 103.92.236.0/22 - - 103.92.240.0/20 - - 103.93.0.0/21 - - 103.93.28.0/22 - - 103.93.84.0/22 - - 103.93.152.0/22 - - 103.93.180.0/22 - - 103.93.204.0/22 - - 103.94.12.0/22 - - 103.94.20.0/22 - - 103.94.28.0/22 - - 103.94.32.0/20 - - 103.94.72.0/22 - - 103.94.88.0/22 - - 103.94.116.0/22 - - 103.94.160.0/22 - - 103.94.182.0/24 - - 103.94.200.0/22 - - 103.95.31.0/24 - - 103.95.52.0/22 - - 103.95.70.0/23 - - 103.95.88.0/21 - - 103.95.136.0/21 - - 103.95.144.0/22 - - 103.95.152.0/22 - - 103.95.216.0/21 - - 103.95.224.0/22 - - 103.95.236.0/22 - - 103.95.240.0/20 - - 103.96.8.0/22 - - 103.96.124.0/22 - - 103.96.136.0/22 - - 103.96.152.0/21 - - 103.96.160.0/19 - - 103.96.192.0/20 - - 103.96.208.0/21 - - 103.96.216.0/22 - - 103.97.40.0/22 - - 103.97.60.0/23 - - 103.97.112.0/21 - - 103.97.148.0/22 - - 103.97.188.0/22 - - 103.97.192.0/22 - - 103.98.40.0/21 - - 103.98.48.0/22 - - 103.98.56.0/22 - - 103.98.80.0/22 - - 103.98.88.0/22 - - 103.98.100.0/22 - - 103.98.124.0/24 - - 103.98.126.0/23 - - 103.98.136.0/21 - - 103.98.144.0/22 - - 103.98.164.0/22 - - 103.98.168.0/22 - - 103.98.180.0/22 - - 103.98.196.0/22 - - 103.98.216.0/21 - - 103.98.224.0/21 - - 103.98.232.0/22 - - 103.98.240.0/21 - - 103.98.248.0/23 - - 103.98.250.0/24 - - 103.98.252.0/22 - - 103.99.56.0/22 - - 103.99.104.0/22 - - 103.99.116.0/22 - - 103.99.120.0/22 - - 103.99.132.0/22 - - 103.99.136.0/21 - - 103.99.144.0/22 - - 103.99.152.0/22 - - 103.99.220.0/22 - - 103.99.232.0/21 - - 103.100.0.0/22 - - 103.100.32.0/22 - - 103.100.40.0/22 - - 103.100.48.0/22 - - 103.100.56.0/22 - - 103.100.64.0/22 - - 103.100.88.0/22 - - 103.100.116.0/22 - - 103.100.144.0/22 - - 103.100.240.0/22 - - 103.100.248.0/21 - - 103.101.4.0/22 - - 103.101.8.0/21 - - 103.101.60.0/22 - - 103.101.121.0/24 - - 103.101.122.0/23 - - 103.101.124.0/24 - - 103.101.126.0/23 - - 103.101.144.0/21 - - 103.101.180.0/22 - - 103.101.184.0/22 - - 103.102.76.0/22 - - 103.102.80.0/22 - - 103.102.168.0/21 - - 103.102.180.0/22 - - 103.102.184.0/21 - - 103.102.192.0/22 - - 103.102.196.0/24 - - 103.102.200.0/22 - - 103.102.208.0/21 - - 103.103.12.0/22 - - 103.103.16.0/22 - - 103.103.36.0/22 - - 103.103.72.0/22 - - 103.103.188.0/22 - - 103.103.204.0/22 - - 103.104.36.0/22 - - 103.104.40.0/22 - - 103.104.64.0/22 - - 103.104.152.0/22 - - 103.104.252.0/22 - - 103.105.0.0/21 - - 103.105.12.0/22 - - 103.105.16.0/22 - - 103.105.60.0/22 - - 103.105.116.0/22 - - 103.105.180.0/22 - - 103.105.184.0/22 - - 103.105.200.0/21 - - 103.105.220.0/22 - - 103.106.36.0/22 - - 103.106.40.0/21 - - 103.106.60.0/22 - - 103.106.68.0/22 - - 103.106.96.0/22 - - 103.106.120.0/22 - - 103.106.128.0/21 - - 103.106.190.0/23 - - 103.106.196.0/22 - - 103.106.212.0/22 - - 103.106.252.0/22 - - 103.107.0.0/22 - - 103.107.28.0/22 - - 103.107.32.0/22 - - 103.107.44.0/22 - - 103.107.72.0/22 - - 103.107.164.0/22 - - 103.107.168.0/22 - - 103.107.188.0/22 - - 103.107.192.0/22 - - 103.107.208.0/20 - - 103.108.52.0/22 - - 103.108.160.0/21 - - 103.108.194.0/24 - - 103.108.196.0/22 - - 103.108.208.0/21 - - 103.108.224.0/22 - - 103.108.244.0/22 - - 103.108.251.0/24 - - 103.109.20.0/22 - - 103.109.48.0/22 - - 103.109.88.0/22 - - 103.109.106.0/23 - - 103.109.248.0/22 - - 103.110.32.0/22 - - 103.110.92.0/22 - - 103.110.119.0/24 - - 103.110.127.0/24 - - 103.110.128.0/23 - - 103.110.131.0/24 - - 103.110.132.0/22 - - 103.110.136.0/22 - - 103.110.156.0/22 - - 103.110.188.0/22 - - 103.110.204.0/22 - - 103.111.64.0/22 - - 103.111.172.0/22 - - 103.111.252.0/22 - - 103.112.72.0/22 - - 103.112.88.0/21 - - 103.112.108.0/22 - - 103.112.112.0/22 - - 103.112.140.0/22 - - 103.113.4.0/22 - - 103.113.144.0/22 - - 103.113.220.0/22 - - 103.113.232.0/21 - - 103.114.4.0/22 - - 103.114.68.0/22 - - 103.114.100.0/22 - - 103.114.148.0/22 - - 103.114.156.0/22 - - 103.114.212.0/22 - - 103.114.236.0/22 - - 103.114.240.0/22 - - 103.115.52.0/22 - - 103.115.68.0/22 - - 103.115.92.0/22 - - 103.115.120.0/22 - - 103.115.148.0/22 - - 103.115.248.0/22 - - 103.116.76.0/22 - - 103.116.92.0/22 - - 103.116.120.0/22 - - 103.116.128.0/22 - - 103.116.150.0/23 - - 103.116.184.0/22 - - 103.116.220.0/22 - - 103.116.224.0/21 - - 103.117.16.0/22 - - 103.117.88.0/22 - - 103.117.188.0/22 - - 103.117.220.0/22 - - 103.118.19.0/24 - - 103.118.52.0/22 - - 103.118.56.0/21 - - 103.118.64.0/21 - - 103.118.72.0/22 - - 103.118.88.0/22 - - 103.118.173.0/24 - - 103.119.115.0/24 - - 103.119.156.0/22 - - 103.119.180.0/22 - - 103.119.200.0/22 - - 103.119.226.0/23 - - 103.120.52.0/22 - - 103.120.72.0/22 - - 103.120.76.0/24 - - 103.120.88.0/22 - - 103.120.96.0/22 - - 103.120.140.0/22 - - 103.120.196.0/22 - - 103.120.224.0/22 - - 103.121.52.0/22 - - 103.121.160.0/21 - - 103.121.250.0/24 - - 103.121.252.0/22 - - 103.122.48.0/22 - - 103.122.178.0/23 - - 103.122.192.0/22 - - 103.122.240.0/23 - - 103.122.242.0/24 - - 103.123.4.0/22 - - 103.123.56.0/22 - - 103.123.88.0/21 - - 103.123.116.0/22 - - 103.123.176.0/22 - - 103.123.200.0/21 - - 103.123.208.0/21 - - 103.124.24.0/22 - - 103.124.48.0/22 - - 103.124.64.0/22 - - 103.124.212.0/22 - - 103.124.216.0/22 - - 103.125.20.0/22 - - 103.125.44.0/22 - - 103.125.132.0/22 - - 103.125.164.0/22 - - 103.125.196.0/22 - - 103.125.236.0/22 - - 103.126.0.0/22 - - 103.126.16.0/23 - - 103.126.44.0/22 - - 103.126.124.0/22 - - 103.126.128.0/22 - - 103.129.53.0/24 - - 103.129.54.0/23 - - 103.129.148.0/22 - - 103.130.132.0/22 - - 103.130.160.0/22 - - 103.130.228.0/22 - - 103.131.20.0/22 - - 103.131.36.0/22 - - 103.131.152.0/22 - - 103.131.168.0/22 - - 103.131.224.0/21 - - 103.131.240.0/22 - - 103.132.60.0/22 - - 103.132.64.0/20 - - 103.132.80.0/22 - - 103.132.104.0/21 - - 103.132.112.0/21 - - 103.132.120.0/22 - - 103.132.188.0/22 - - 103.132.208.0/21 - - 103.133.12.0/22 - - 103.133.40.0/22 - - 103.133.128.0/22 - - 103.133.232.0/22 - - 103.134.196.0/22 - - 103.135.80.0/22 - - 103.135.124.0/22 - - 103.135.148.0/22 - - 103.135.156.0/22 - - 103.135.160.0/21 - - 103.135.176.0/22 - - 103.135.184.0/22 - - 103.135.192.0/21 - - 103.135.236.0/22 - - 103.136.128.0/22 - - 103.136.232.0/22 - - 103.137.58.0/23 - - 103.137.60.0/24 - - 103.137.136.0/23 - - 103.137.149.0/24 - - 103.137.180.0/22 - - 103.137.236.0/22 - - 103.138.2.0/23 - - 103.138.134.0/23 - - 103.138.208.0/23 - - 103.138.220.0/23 - - 103.138.248.0/23 - - 103.139.22.0/23 - - 103.139.134.0/23 - - 103.139.136.0/23 - - 103.139.172.0/23 - - 103.139.204.0/23 - - 103.139.212.0/23 - - 103.140.14.0/23 - - 103.140.46.0/23 - - 103.140.70.0/23 - - 103.140.140.0/23 - - 103.140.144.0/23 - - 103.140.192.0/23 - - 103.141.10.0/23 - - 103.141.58.0/23 - - 103.141.128.0/23 - - 103.141.186.0/23 - - 103.141.242.0/23 - - 103.142.0.0/23 - - 103.142.28.0/23 - - 103.142.58.0/23 - - 103.142.82.0/23 - - 103.142.96.0/23 - - 103.142.122.0/23 - - 103.142.128.0/23 - - 103.142.154.0/23 - - 103.142.156.0/23 - - 103.142.180.0/23 - - 103.142.186.0/23 - - 103.142.220.0/23 - - 103.142.230.0/24 - - 103.142.234.0/23 - - 103.142.238.0/23 - - 103.143.16.0/22 - - 103.143.31.0/24 - - 103.143.74.0/23 - - 103.143.124.0/23 - - 103.143.132.0/22 - - 103.143.174.0/23 - - 103.143.228.0/23 - - 103.144.40.0/23 - - 103.144.66.0/23 - - 103.144.70.0/23 - - 103.144.72.0/23 - - 103.144.136.0/23 - - 103.144.158.0/23 - - 103.145.40.0/22 - - 103.145.73.0/24 - - 103.145.80.0/23 - - 103.145.86.0/23 - - 103.145.90.0/23 - - 103.145.92.0/22 - - 103.145.98.0/23 - - 103.145.107.0/24 - - 103.145.188.0/23 - - 103.146.6.0/23 - - 103.146.72.0/23 - - 103.146.88.0/22 - - 103.146.126.0/23 - - 103.146.138.0/23 - - 103.146.230.0/23 - - 103.146.236.0/23 - - 103.146.252.0/23 - - 103.147.12.0/23 - - 103.147.124.0/23 - - 103.192.0.0/19 - - 103.192.48.0/21 - - 103.192.56.0/22 - - 103.192.84.0/22 - - 103.192.88.0/21 - - 103.192.96.0/20 - - 103.192.112.0/22 - - 103.192.128.0/20 - - 103.192.144.0/22 - - 103.192.164.0/22 - - 103.192.188.0/22 - - 103.192.208.0/21 - - 103.192.216.0/22 - - 103.192.252.0/22 - - 103.193.40.0/21 - - 103.193.120.0/22 - - 103.193.140.0/22 - - 103.193.160.0/22 - - 103.193.188.0/22 - - 103.193.192.0/22 - - 103.193.212.0/22 - - 103.193.216.0/21 - - 103.193.224.0/20 - - 103.194.16.0/22 - - 103.194.230.0/23 - - 103.195.112.0/22 - - 103.195.152.0/22 - - 103.195.160.0/22 - - 103.196.64.0/22 - - 103.196.72.0/22 - - 103.196.88.0/21 - - 103.196.96.0/22 - - 103.196.168.0/22 - - 103.196.185.0/24 - - 103.196.186.0/23 - - 103.197.181.0/24 - - 103.197.183.0/24 - - 103.197.228.0/22 - - 103.197.253.0/24 - - 103.197.254.0/23 - - 103.198.20.0/22 - - 103.198.60.0/22 - - 103.198.64.0/22 - - 103.198.72.0/22 - - 103.198.124.0/22 - - 103.198.156.0/22 - - 103.198.180.0/22 - - 103.198.196.0/22 - - 103.198.200.0/22 - - 103.198.216.0/21 - - 103.198.224.0/20 - - 103.198.240.0/21 - - 103.199.164.0/22 - - 103.199.196.0/22 - - 103.199.228.0/22 - - 103.199.252.0/22 - - 103.200.52.0/22 - - 103.200.64.0/21 - - 103.200.136.0/21 - - 103.200.144.0/20 - - 103.200.160.0/19 - - 103.200.192.0/22 - - 103.200.220.0/22 - - 103.200.224.0/19 - - 103.201.0.0/20 - - 103.201.16.0/21 - - 103.201.28.0/22 - - 103.201.32.0/19 - - 103.201.64.0/22 - - 103.201.76.0/22 - - 103.201.80.0/20 - - 103.201.96.0/20 - - 103.201.112.0/21 - - 103.201.120.0/22 - - 103.201.152.0/21 - - 103.201.160.0/19 - - 103.201.192.0/18 - - 103.202.0.0/19 - - 103.202.32.0/20 - - 103.202.56.0/21 - - 103.202.64.0/18 - - 103.202.128.0/20 - - 103.202.144.0/22 - - 103.202.152.0/21 - - 103.202.160.0/19 - - 103.202.192.0/20 - - 103.202.212.0/22 - - 103.202.228.0/22 - - 103.202.236.0/22 - - 103.202.240.0/20 - - 103.203.0.0/19 - - 103.203.32.0/22 - - 103.203.96.0/19 - - 103.203.128.0/22 - - 103.203.140.0/22 - - 103.203.164.0/22 - - 103.203.168.0/22 - - 103.203.192.0/22 - - 103.203.200.0/22 - - 103.203.212.0/22 - - 103.203.216.0/22 - - 103.204.24.0/22 - - 103.204.88.0/22 - - 103.204.112.0/22 - - 103.204.136.0/21 - - 103.204.144.0/21 - - 103.204.152.0/22 - - 103.204.196.0/22 - - 103.204.232.0/21 - - 103.205.4.0/22 - - 103.205.40.0/21 - - 103.205.52.0/22 - - 103.205.108.0/22 - - 103.205.116.0/22 - - 103.205.120.0/24 - - 103.205.136.0/22 - - 103.205.162.0/24 - - 103.205.188.0/22 - - 103.205.192.0/21 - - 103.205.200.0/22 - - 103.205.236.0/22 - - 103.205.248.0/21 - - 103.206.0.0/22 - - 103.206.44.0/22 - - 103.206.148.0/22 - - 103.207.104.0/22 - - 103.207.184.0/21 - - 103.207.192.0/20 - - 103.207.208.0/21 - - 103.207.220.0/22 - - 103.207.228.0/22 - - 103.207.232.0/22 - - 103.208.12.0/22 - - 103.208.16.0/22 - - 103.208.28.0/22 - - 103.208.48.0/22 - - 103.208.148.0/22 - - 103.209.112.0/22 - - 103.209.136.0/22 - - 103.209.200.0/22 - - 103.209.208.0/22 - - 103.209.216.0/22 - - 103.210.0.0/22 - - 103.210.96.0/22 - - 103.210.156.0/22 - - 103.210.160.0/19 - - 103.210.217.0/24 - - 103.210.218.0/23 - - 103.211.44.0/22 - - 103.211.96.0/23 - - 103.211.98.0/24 - - 103.211.100.0/22 - - 103.211.156.0/22 - - 103.211.165.0/24 - - 103.211.168.0/22 - - 103.211.220.0/22 - - 103.211.248.0/22 - - 103.212.0.0/20 - - 103.212.44.0/22 - - 103.212.48.0/22 - - 103.212.84.0/22 - - 103.212.100.0/22 - - 103.212.148.0/22 - - 103.212.164.0/22 - - 103.212.196.0/22 - - 103.212.200.0/22 - - 103.212.252.0/22 - - 103.213.40.0/21 - - 103.213.48.0/20 - - 103.213.64.0/19 - - 103.213.96.0/22 - - 103.213.132.0/22 - - 103.213.136.0/21 - - 103.213.144.0/20 - - 103.213.160.0/19 - - 103.213.252.0/22 - - 103.214.48.0/22 - - 103.214.84.0/22 - - 103.214.212.0/22 - - 103.214.240.0/21 - - 103.215.28.0/22 - - 103.215.32.0/21 - - 103.215.44.0/22 - - 103.215.100.0/23 - - 103.215.108.0/22 - - 103.215.116.0/22 - - 103.215.120.0/22 - - 103.215.140.0/22 - - 103.216.4.0/22 - - 103.216.8.0/21 - - 103.216.16.0/20 - - 103.216.32.0/20 - - 103.216.64.0/22 - - 103.216.108.0/22 - - 103.216.136.0/22 - - 103.216.152.0/22 - - 103.216.224.0/21 - - 103.216.240.0/20 - - 103.217.0.0/18 - - 103.217.168.0/22 - - 103.217.180.0/22 - - 103.217.184.0/21 - - 103.217.192.0/20 - - 103.218.8.0/21 - - 103.218.16.0/21 - - 103.218.29.0/24 - - 103.218.30.0/23 - - 103.218.32.0/19 - - 103.218.64.0/19 - - 103.218.192.0/20 - - 103.218.208.0/21 - - 103.218.216.0/22 - - 103.219.24.0/21 - - 103.219.32.0/21 - - 103.219.64.0/22 - - 103.219.84.0/22 - - 103.219.88.0/21 - - 103.219.96.0/21 - - 103.219.176.0/22 - - 103.219.184.0/22 - - 103.220.48.0/20 - - 103.220.64.0/22 - - 103.220.92.0/22 - - 103.220.96.0/22 - - 103.220.104.0/21 - - 103.220.116.0/22 - - 103.220.120.0/21 - - 103.220.128.0/20 - - 103.220.144.0/21 - - 103.220.152.0/22 - - 103.220.160.0/19 - - 103.220.192.0/21 - - 103.220.200.0/22 - - 103.220.240.0/20 - - 103.221.0.0/19 - - 103.221.32.0/21 - - 103.221.88.0/21 - - 103.221.96.0/19 - - 103.221.128.0/18 - - 103.221.192.0/20 - - 103.222.0.0/20 - - 103.222.16.0/22 - - 103.222.24.0/21 - - 103.222.33.0/24 - - 103.222.34.0/23 - - 103.222.36.0/22 - - 103.222.40.0/21 - - 103.222.48.0/20 - - 103.222.64.0/18 - - 103.222.128.0/18 - - 103.222.192.0/19 - - 103.222.224.0/21 - - 103.222.232.0/22 - - 103.222.240.0/21 - - 103.223.16.0/20 - - 103.223.32.0/19 - - 103.223.64.0/19 - - 103.223.96.0/20 - - 103.223.112.0/21 - - 103.223.124.0/22 - - 103.223.128.0/21 - - 103.223.140.0/22 - - 103.223.144.0/20 - - 103.223.160.0/20 - - 103.223.176.0/21 - - 103.223.188.0/22 - - 103.223.192.0/18 - - 103.224.0.0/22 - - 103.224.40.0/21 - - 103.224.60.0/22 - - 103.224.220.0/22 - - 103.224.224.0/21 - - 103.224.232.0/22 - - 103.226.40.0/22 - - 103.226.56.0/21 - - 103.226.80.0/22 - - 103.226.116.0/22 - - 103.226.132.0/22 - - 103.226.156.0/22 - - 103.226.180.0/22 - - 103.226.196.0/22 - - 103.227.48.0/22 - - 103.227.72.0/21 - - 103.227.80.0/22 - - 103.227.100.0/22 - - 103.227.120.0/22 - - 103.227.132.0/22 - - 103.227.136.0/22 - - 103.227.196.0/22 - - 103.227.204.0/23 - - 103.227.206.0/24 - - 103.227.212.0/22 - - 103.227.228.0/22 - - 103.228.12.0/22 - - 103.228.88.0/22 - - 103.228.136.0/22 - - 103.228.160.0/22 - - 103.228.176.0/22 - - 103.228.204.0/22 - - 103.228.208.0/22 - - 103.228.228.0/22 - - 103.228.232.0/22 - - 103.229.20.0/22 - - 103.229.136.0/22 - - 103.229.148.0/22 - - 103.229.172.0/22 - - 103.229.212.0/22 - - 103.229.216.0/21 - - 103.229.228.0/22 - - 103.229.236.0/22 - - 103.229.240.0/22 - - 103.230.0.0/22 - - 103.230.28.0/22 - - 103.230.40.0/21 - - 103.230.96.0/22 - - 103.230.196.0/22 - - 103.230.200.0/21 - - 103.230.212.0/22 - - 103.230.236.0/22 - - 103.231.16.0/21 - - 103.231.64.0/21 - - 103.231.144.0/22 - - 103.231.180.0/22 - - 103.231.244.0/22 - - 103.232.4.0/22 - - 103.232.17.168/29 - - 103.232.144.0/22 - - 103.233.4.0/22 - - 103.233.44.0/22 - - 103.233.52.0/22 - - 103.233.104.0/22 - - 103.233.128.0/22 - - 103.233.136.0/22 - - 103.233.228.0/22 - - 103.234.0.0/22 - - 103.234.20.0/22 - - 103.234.56.0/22 - - 103.234.124.0/22 - - 103.234.128.0/22 - - 103.234.172.0/22 - - 103.234.180.0/22 - - 103.235.56.0/21 - - 103.235.80.0/22 - - 103.235.85.0/24 - - 103.235.86.0/23 - - 103.235.128.0/20 - - 103.235.144.0/21 - - 103.235.184.0/22 - - 103.235.192.0/22 - - 103.235.200.0/22 - - 103.235.220.0/22 - - 103.235.224.0/19 - - 103.236.0.0/18 - - 103.236.64.0/19 - - 103.236.96.0/22 - - 103.236.120.0/22 - - 103.236.184.0/22 - - 103.236.240.0/20 - - 103.237.0.0/20 - - 103.237.24.0/21 - - 103.237.68.0/22 - - 103.237.88.0/22 - - 103.237.152.0/22 - - 103.237.176.0/20 - - 103.237.192.0/18 - - 103.238.0.0/21 - - 103.238.18.0/23 - - 103.238.20.0/22 - - 103.238.24.0/21 - - 103.238.32.0/20 - - 103.238.48.0/21 - - 103.238.56.0/22 - - 103.238.88.0/21 - - 103.238.96.0/22 - - 103.238.132.0/22 - - 103.238.140.0/22 - - 103.238.144.0/22 - - 103.238.160.0/22 - - 103.238.165.0/24 - - 103.238.166.0/23 - - 103.238.168.0/21 - - 103.238.176.0/20 - - 103.238.196.0/22 - - 103.238.204.0/22 - - 103.238.252.0/22 - - 103.239.0.0/22 - - 103.239.44.0/22 - - 103.239.68.0/22 - - 103.239.152.0/21 - - 103.239.180.0/22 - - 103.239.184.0/22 - - 103.239.192.0/21 - - 103.239.204.0/22 - - 103.239.208.0/22 - - 103.239.224.0/22 - - 103.239.244.0/22 - - 103.240.16.0/22 - - 103.240.36.0/22 - - 103.240.72.0/22 - - 103.240.84.0/22 - - 103.240.124.0/22 - - 103.240.172.0/22 - - 103.240.188.0/22 - - 103.240.244.0/22 - - 103.241.12.0/22 - - 103.241.92.0/22 - - 103.241.96.0/22 - - 103.241.160.0/22 - - 103.241.184.0/21 - - 103.241.220.0/22 - - 103.242.64.0/23 - - 103.242.128.0/23 - - 103.242.130.0/24 - - 103.242.160.0/22 - - 103.242.168.0/21 - - 103.242.176.0/22 - - 103.242.200.0/22 - - 103.242.212.0/22 - - 103.242.220.0/22 - - 103.242.240.0/22 - - 103.243.136.0/22 - - 103.243.252.0/22 - - 103.244.16.0/22 - - 103.244.58.0/23 - - 103.244.60.0/22 - - 103.244.64.0/20 - - 103.244.80.0/21 - - 103.244.116.0/22 - - 103.244.164.0/22 - - 103.244.232.0/22 - - 103.244.252.0/22 - - 103.245.23.0/24 - - 103.245.52.0/22 - - 103.245.60.0/22 - - 103.245.80.0/22 - - 103.245.124.0/22 - - 103.245.128.0/22 - - 103.246.8.0/21 - - 103.246.120.0/21 - - 103.246.132.0/22 - - 103.246.152.0/22 - - 103.247.168.0/21 - - 103.247.176.0/22 - - 103.247.200.0/22 - - 103.247.212.0/22 - - 103.248.64.0/23 - - 103.248.100.0/22 - - 103.248.124.0/22 - - 103.248.152.0/22 - - 103.248.168.0/22 - - 103.248.192.0/22 - - 103.248.212.0/22 - - 103.248.224.0/21 - - 103.249.8.0/21 - - 103.249.52.0/22 - - 103.249.128.0/22 - - 103.249.136.0/22 - - 103.249.144.0/22 - - 103.249.164.0/22 - - 103.249.168.0/21 - - 103.249.176.0/22 - - 103.249.188.0/22 - - 103.249.192.0/22 - - 103.249.244.0/22 - - 103.249.252.0/22 - - 103.250.32.0/22 - - 103.250.104.0/22 - - 103.250.124.0/22 - - 103.250.180.0/22 - - 103.250.192.0/22 - - 103.250.216.0/22 - - 103.250.224.0/22 - - 103.250.236.0/22 - - 103.250.248.0/21 - - 103.251.32.0/22 - - 103.251.84.0/22 - - 103.251.96.0/22 - - 103.251.124.0/22 - - 103.251.160.0/22 - - 103.251.192.0/22 - - 103.251.204.0/22 - - 103.251.240.0/22 - - 103.252.28.0/22 - - 103.252.36.0/22 - - 103.252.64.0/22 - - 103.252.96.0/22 - - 103.252.104.0/22 - - 103.252.172.0/22 - - 103.252.204.0/22 - - 103.252.208.0/22 - - 103.252.232.0/22 - - 103.252.248.0/22 - - 103.253.4.0/22 - - 103.253.60.0/22 - - 103.253.204.0/22 - - 103.253.220.0/22 - - 103.253.224.0/22 - - 103.253.232.0/22 - - 103.254.8.0/22 - - 103.254.20.0/22 - - 103.254.64.0/21 - - 103.254.76.0/22 - - 103.254.112.0/22 - - 103.254.176.0/22 - - 103.254.188.0/22 - - 103.255.68.0/22 - - 103.255.88.0/21 - - 103.255.136.0/21 - - 103.255.184.0/22 - - 103.255.200.0/22 - - 103.255.208.0/22 - - 103.255.228.0/22 - - 104.222.196.0/24 - - 106.0.0.0/24 - - 106.0.2.0/23 - - 106.0.4.0/22 - - 106.0.8.0/21 - - 106.0.16.0/20 - - 106.0.44.0/22 - - 106.0.64.0/18 - - 106.2.0.0/23 - - 106.2.3.0/24 - - 106.2.4.0/22 - - 106.2.8.0/21 - - 106.2.16.0/20 - - 106.2.32.0/19 - - 106.2.64.0/18 - - 106.2.128.0/20 - - 106.2.144.0/21 - - 106.2.152.0/22 - - 106.2.156.0/23 - - 106.2.160.0/19 - - 106.2.192.0/18 - - 106.3.16.0/20 - - 106.3.32.0/19 - - 106.3.64.0/20 - - 106.3.80.0/22 - - 106.3.88.0/21 - - 106.3.96.0/19 - - 106.3.128.0/19 - - 106.3.164.0/22 - - 106.3.168.0/21 - - 106.3.176.0/20 - - 106.3.192.0/18 - - 106.4.0.0/14 - - 106.8.0.0/15 - - 106.11.0.0/18 - - 106.11.64.0/21 - - 106.11.72.0/25 - - 106.11.72.128/29 - - 106.11.72.136/32 - - 106.11.72.141/32 - - 106.11.72.142/31 - - 106.11.72.144/28 - - 106.11.72.160/27 - - 106.11.72.192/26 - - 106.11.73.0/24 - - 106.11.74.0/23 - - 106.11.76.0/22 - - 106.11.80.0/20 - - 106.11.96.0/19 - - 106.11.128.0/17 - - 106.12.0.0/14 - - 106.16.0.0/12 - - 106.32.0.0/12 - - 106.48.0.0/21 - - 106.48.8.0/22 - - 106.48.16.0/20 - - 106.48.32.0/20 - - 106.48.57.0/24 - - 106.48.60.0/24 - - 106.48.63.0/24 - - 106.48.64.0/18 - - 106.48.128.0/17 - - 106.49.1.0/24 - - 106.49.2.0/23 - - 106.49.4.0/22 - - 106.49.8.0/21 - - 106.49.16.0/20 - - 106.49.32.0/19 - - 106.49.64.0/19 - - 106.49.96.0/24 - - 106.49.98.0/23 - - 106.49.100.0/22 - - 106.49.104.0/21 - - 106.49.112.0/20 - - 106.49.128.0/17 - - 106.50.0.0/16 - - 106.52.0.0/14 - - 106.56.0.0/13 - - 106.74.0.0/16 - - 106.75.0.0/17 - - 106.75.128.0/18 - - 106.75.201.0/24 - - 106.75.204.0/22 - - 106.75.208.0/20 - - 106.75.224.0/19 - - 106.80.0.0/12 - - 106.108.0.0/14 - - 106.112.0.0/12 - - 106.224.0.0/12 - - 109.71.4.0/24 - - 109.244.0.0/16 - - 110.6.0.0/15 - - 110.16.0.0/14 - - 110.34.40.0/21 - - 110.40.0.0/15 - - 110.42.0.0/16 - - 110.43.0.0/18 - - 110.43.64.0/21 - - 110.43.72.0/22 - - 110.43.76.0/23 - - 110.43.80.0/20 - - 110.43.96.0/19 - - 110.43.128.0/17 - - 110.44.12.0/22 - - 110.44.144.0/20 - - 110.48.0.0/16 - - 110.51.0.0/16 - - 110.52.0.0/15 - - 110.56.0.0/13 - - 110.64.0.0/15 - - 110.72.0.0/15 - - 110.75.0.0/16 - - 110.76.0.0/20 - - 110.76.16.0/22 - - 110.76.20.0/24 - - 110.76.22.0/24 - - 110.76.24.0/21 - - 110.76.32.0/19 - - 110.76.132.0/22 - - 110.76.156.0/22 - - 110.76.184.0/22 - - 110.76.192.0/18 - - 110.77.0.0/17 - - 110.80.0.0/13 - - 110.88.0.0/14 - - 110.92.68.0/22 - - 110.93.32.0/19 - - 110.94.0.0/15 - - 110.96.0.0/11 - - 110.152.0.0/14 - - 110.156.0.0/15 - - 110.166.0.0/15 - - 110.172.192.0/18 - - 110.173.0.0/19 - - 110.173.32.0/20 - - 110.173.64.0/19 - - 110.173.192.0/19 - - 110.176.0.0/12 - - 110.192.0.0/11 - - 110.228.0.0/14 - - 110.232.32.0/19 - - 110.236.0.0/15 - - 110.240.0.0/12 - - 111.0.0.0/10 - - 111.66.0.0/16 - - 111.67.192.0/20 - - 111.68.64.0/19 - - 111.72.0.0/13 - - 111.85.0.0/16 - - 111.91.192.0/19 - - 111.92.248.0/21 - - 111.112.0.0/14 - - 111.116.0.0/15 - - 111.118.200.0/21 - - 111.119.64.0/18 - - 111.119.128.0/19 - - 111.120.0.0/14 - - 111.124.0.0/16 - - 111.126.0.0/15 - - 111.128.0.0/11 - - 111.160.0.0/13 - - 111.170.0.0/16 - - 111.172.0.0/14 - - 111.176.0.0/13 - - 111.186.0.0/15 - - 111.192.0.0/12 - - 111.208.0.0/13 - - 111.221.28.0/24 - - 111.221.128.0/17 - - 111.222.0.0/16 - - 111.223.4.0/22 - - 111.223.8.0/21 - - 111.223.16.0/22 - - 111.223.240.0/22 - - 111.223.249.0/24 - - 111.223.250.0/23 - - 111.224.0.0/13 - - 111.235.96.0/19 - - 111.235.156.0/22 - - 111.235.160.0/21 - - 111.235.170.0/23 - - 111.235.172.0/22 - - 111.235.176.0/20 - - 112.0.0.0/10 - - 112.64.0.0/14 - - 112.73.64.0/18 - - 112.74.0.0/16 - - 112.80.0.0/12 - - 112.96.0.0/13 - - 112.109.128.0/17 - - 112.111.0.0/16 - - 112.112.0.0/14 - - 112.116.0.0/15 - - 112.122.0.0/15 - - 112.124.0.0/14 - - 112.128.0.0/14 - - 112.132.0.0/16 - - 112.137.48.0/21 - - 112.192.0.0/14 - - 112.224.0.0/11 - - 113.0.0.0/13 - - 113.8.0.0/15 - - 113.11.192.0/19 - - 113.12.0.0/14 - - 113.16.0.0/15 - - 113.18.0.0/16 - - 113.21.232.0/21 - - 113.24.0.0/14 - - 113.31.0.0/16 - - 113.44.0.0/14 - - 113.48.0.0/14 - - 113.52.160.0/19 - - 113.52.228.0/22 - - 113.54.0.0/15 - - 113.56.0.0/15 - - 113.58.0.0/16 - - 113.59.0.0/17 - - 113.59.224.0/22 - - 113.62.0.0/15 - - 113.64.0.0/10 - - 113.128.0.0/15 - - 113.130.96.0/20 - - 113.130.112.0/21 - - 113.132.0.0/14 - - 113.136.0.0/13 - - 113.194.0.0/15 - - 113.197.100.0/23 - - 113.197.102.0/24 - - 113.197.104.0/22 - - 113.200.0.0/15 - - 113.202.0.0/16 - - 113.204.0.0/14 - - 113.208.96.0/19 - - 113.208.128.0/17 - - 113.209.0.0/16 - - 113.212.0.0/18 - - 113.212.100.0/22 - - 113.212.184.0/21 - - 113.213.0.0/17 - - 113.214.0.0/15 - - 113.218.0.0/15 - - 113.220.0.0/14 - - 113.224.0.0/12 - - 113.240.0.0/13 - - 113.248.0.0/14 - - 114.28.0.0/17 - - 114.28.128.0/18 - - 114.28.192.0/19 - - 114.28.232.0/22 - - 114.28.236.0/23 - - 114.28.240.0/20 - - 114.31.64.0/21 - - 114.54.0.0/15 - - 114.60.0.0/14 - - 114.64.0.0/14 - - 114.68.0.0/16 - - 114.79.64.0/18 - - 114.80.0.0/12 - - 114.96.0.0/13 - - 114.104.0.0/14 - - 114.110.0.0/20 - - 114.110.64.0/18 - - 114.111.0.0/19 - - 114.111.160.0/19 - - 114.112.4.0/22 - - 114.112.8.0/22 - - 114.112.24.0/21 - - 114.112.32.0/19 - - 114.112.64.0/19 - - 114.112.96.0/20 - - 114.112.116.0/22 - - 114.112.120.0/21 - - 114.112.136.0/21 - - 114.112.144.0/20 - - 114.112.160.0/19 - - 114.112.192.0/19 - - 114.113.0.0/17 - - 114.113.128.0/21 - - 114.113.140.0/22 - - 114.113.144.0/20 - - 114.113.160.0/19 - - 114.113.196.0/22 - - 114.113.200.0/21 - - 114.113.208.0/20 - - 114.113.224.0/20 - - 114.114.0.0/18 - - 114.114.64.0/19 - - 114.114.96.0/20 - - 114.114.120.0/21 - - 114.114.128.0/17 - - 114.115.0.0/16 - - 114.116.0.0/15 - - 114.118.0.0/16 - - 114.119.0.0/17 - - 114.119.192.0/18 - - 114.132.0.0/16 - - 114.135.0.0/16 - - 114.138.0.0/15 - - 114.141.64.0/21 - - 114.141.80.0/21 - - 114.141.128.0/18 - - 114.196.0.0/15 - - 114.198.248.0/21 - - 114.208.0.0/12 - - 114.224.0.0/11 - - 115.24.0.0/14 - - 115.28.0.0/15 - - 115.31.64.0/20 - - 115.32.0.0/14 - - 115.42.56.0/22 - - 115.44.0.0/14 - - 115.48.0.0/12 - - 115.69.64.0/20 - - 115.84.0.0/18 - - 115.84.192.0/19 - - 115.85.192.0/18 - - 115.100.0.0/14 - - 115.104.0.0/14 - - 115.120.0.0/14 - - 115.124.16.0/20 - - 115.148.0.0/14 - - 115.152.0.0/13 - - 115.166.64.0/19 - - 115.168.0.0/13 - - 115.180.0.0/14 - - 115.187.0.0/20 - - 115.190.0.0/15 - - 115.192.0.0/11 - - 115.224.0.0/12 - - 116.0.8.0/21 - - 116.0.24.0/21 - - 116.1.0.0/16 - - 116.2.0.0/15 - - 116.4.0.0/14 - - 116.8.0.0/14 - - 116.13.0.0/16 - - 116.16.0.0/12 - - 116.50.0.0/20 - - 116.52.0.0/14 - - 116.56.0.0/15 - - 116.58.128.0/20 - - 116.58.208.0/20 - - 116.60.0.0/14 - - 116.66.0.0/18 - - 116.66.64.0/19 - - 116.66.96.0/20 - - 116.66.120.0/22 - - 116.68.136.0/21 - - 116.68.176.0/21 - - 116.69.0.0/16 - - 116.70.0.0/17 - - 116.76.0.0/14 - - 116.85.0.0/17 - - 116.85.128.0/18 - - 116.85.192.0/19 - - 116.85.224.0/20 - - 116.85.240.0/21 - - 116.85.248.0/23 - - 116.85.250.0/24 - - 116.85.252.0/22 - - 116.89.144.0/20 - - 116.90.80.0/20 - - 116.90.184.0/21 - - 116.95.0.0/16 - - 116.112.0.0/14 - - 116.116.0.0/15 - - 116.128.0.0/10 - - 116.192.0.0/16 - - 116.193.16.0/20 - - 116.193.32.0/19 - - 116.193.176.0/21 - - 116.194.0.0/15 - - 116.196.0.0/21 - - 116.196.8.0/22 - - 116.196.12.0/23 - - 116.196.16.0/20 - - 116.196.32.0/19 - - 116.196.64.0/18 - - 116.196.128.0/18 - - 116.196.192.0/21 - - 116.196.200.0/23 - - 116.196.203.0/24 - - 116.196.204.0/22 - - 116.196.208.0/20 - - 116.196.224.0/19 - - 116.197.160.0/21 - - 116.197.180.0/23 - - 116.198.0.0/16 - - 116.199.0.0/17 - - 116.199.128.0/19 - - 116.204.0.0/17 - - 116.204.232.0/22 - - 116.205.0.0/16 - - 116.207.0.0/16 - - 116.208.0.0/14 - - 116.212.160.0/20 - - 116.213.64.0/18 - - 116.213.128.0/17 - - 116.214.32.0/19 - - 116.214.64.0/20 - - 116.214.128.0/17 - - 116.215.0.0/16 - - 116.216.0.0/14 - - 116.224.0.0/12 - - 116.242.0.0/15 - - 116.244.0.0/14 - - 116.248.0.0/15 - - 116.251.65.140/30 - - 116.251.66.42/31 - - 116.251.84.168/30 - - 116.251.84.216/29 - - 116.251.84.226/31 - - 116.251.84.228/31 - - 116.251.84.232/31 - - 116.251.84.236/31 - - 116.251.84.240/31 - - 116.251.84.244/31 - - 116.251.84.248/31 - - 116.251.88.38/31 - - 116.251.88.40/29 - - 116.251.88.48/29 - - 116.251.88.58/31 - - 116.251.88.60/30 - - 116.251.88.64/30 - - 116.251.88.70/31 - - 116.251.88.72/29 - - 116.251.88.80/29 - - 116.251.88.88/31 - - 116.251.88.92/31 - - 116.251.88.96/28 - - 116.251.88.112/29 - - 116.251.88.122/31 - - 116.251.88.126/31 - - 116.251.88.128/27 - - 116.251.88.164/31 - - 116.251.88.174/31 - - 116.251.88.176/31 - - 116.251.88.180/31 - - 116.251.88.188/30 - - 116.251.88.192/31 - - 116.251.88.198/31 - - 116.251.88.200/30 - - 116.251.88.204/31 - - 116.251.88.208/30 - - 116.251.88.212/31 - - 116.251.88.224/30 - - 116.251.88.230/31 - - 116.251.88.234/31 - - 116.251.88.240/31 - - 116.251.88.244/30 - - 116.251.88.248/31 - - 116.251.88.252/30 - - 116.251.89.0/31 - - 116.251.89.4/30 - - 116.251.89.8/30 - - 116.251.89.12/31 - - 116.251.89.16/30 - - 116.251.89.22/31 - - 116.251.89.36/30 - - 116.251.89.40/31 - - 116.251.89.44/30 - - 116.251.89.48/29 - - 116.251.89.56/31 - - 116.251.89.60/31 - - 116.251.89.64/31 - - 116.251.89.68/30 - - 116.251.89.72/31 - - 116.251.89.76/31 - - 116.251.89.80/31 - - 116.251.89.84/30 - - 116.251.89.88/29 - - 116.251.89.96/27 - - 116.251.89.128/27 - - 116.251.89.160/28 - - 116.251.89.176/31 - - 116.251.89.180/30 - - 116.251.89.184/29 - - 116.251.89.192/29 - - 116.251.89.202/31 - - 116.251.89.204/30 - - 116.251.89.208/28 - - 116.251.89.224/31 - - 116.251.89.228/31 - - 116.251.89.232/30 - - 116.251.89.236/31 - - 116.251.89.240/31 - - 116.251.89.244/31 - - 116.251.89.248/31 - - 116.251.90.4/30 - - 116.251.90.8/30 - - 116.251.90.14/31 - - 116.251.90.16/28 - - 116.251.90.32/29 - - 116.251.90.40/30 - - 116.251.90.48/29 - - 116.251.90.60/30 - - 116.251.90.66/31 - - 116.251.90.72/31 - - 116.251.90.80/31 - - 116.251.90.84/30 - - 116.251.90.88/29 - - 116.251.90.96/27 - - 116.251.90.128/28 - - 116.251.90.144/30 - - 116.251.90.168/29 - - 116.251.90.176/28 - - 116.251.90.192/27 - - 116.251.90.224/28 - - 116.251.91.16/28 - - 116.251.91.32/28 - - 116.251.91.56/29 - - 116.251.91.64/26 - - 116.251.91.128/28 - - 116.251.91.144/29 - - 116.251.91.156/31 - - 116.251.91.166/31 - - 116.251.91.170/31 - - 116.251.91.182/31 - - 116.251.91.186/31 - - 116.251.91.198/31 - - 116.251.91.202/31 - - 116.251.91.206/31 - - 116.251.91.210/31 - - 116.251.91.212/30 - - 116.251.91.216/29 - - 116.251.91.224/28 - - 116.251.91.240/29 - - 116.251.91.248/30 - - 116.251.93.10/31 - - 116.251.93.30/31 - - 116.251.93.34/31 - - 116.251.93.38/31 - - 116.251.93.72/30 - - 116.251.93.88/30 - - 116.251.93.104/29 - - 116.251.93.112/28 - - 116.251.93.128/29 - - 116.251.93.136/30 - - 116.251.93.152/29 - - 116.251.93.160/29 - - 116.251.93.168/30 - - 116.251.93.176/29 - - 116.251.93.200/29 - - 116.251.93.208/28 - - 116.251.94.4/30 - - 116.251.94.8/29 - - 116.251.94.16/28 - - 116.251.94.32/27 - - 116.251.94.64/26 - - 116.251.94.128/27 - - 116.251.94.160/28 - - 116.251.94.176/29 - - 116.251.94.188/30 - - 116.251.94.192/27 - - 116.251.94.224/28 - - 116.251.94.252/30 - - 116.251.95.0/27 - - 116.251.95.32/31 - - 116.251.95.36/31 - - 116.251.95.40/31 - - 116.251.95.96/31 - - 116.251.95.100/31 - - 116.251.95.108/31 - - 116.251.95.116/30 - - 116.251.95.120/29 - - 116.251.95.128/26 - - 116.251.95.194/31 - - 116.251.95.196/30 - - 116.251.95.208/28 - - 116.251.95.224/28 - - 116.251.102.0/31 - - 116.251.104.4/30 - - 116.251.104.8/30 - - 116.251.104.22/31 - - 116.251.104.28/30 - - 116.251.104.32/28 - - 116.251.104.48/30 - - 116.251.104.60/30 - - 116.251.104.64/29 - - 116.251.104.72/30 - - 116.251.104.108/30 - - 116.251.104.112/30 - - 116.251.104.120/29 - - 116.251.104.128/26 - - 116.251.104.192/28 - - 116.251.104.208/29 - - 116.251.105.68/30 - - 116.251.105.72/29 - - 116.251.105.80/28 - - 116.251.105.96/28 - - 116.251.105.112/30 - - 116.251.105.122/31 - - 116.251.105.124/30 - - 116.251.105.128/30 - - 116.251.105.132/31 - - 116.251.105.136/31 - - 116.251.105.140/31 - - 116.251.105.144/30 - - 116.251.105.148/31 - - 116.251.105.152/31 - - 116.251.105.164/30 - - 116.251.105.168/29 - - 116.251.105.176/30 - - 116.251.105.204/30 - - 116.251.105.208/28 - - 116.251.105.224/27 - - 116.251.106.0/25 - - 116.251.106.128/27 - - 116.251.106.160/30 - - 116.251.106.166/31 - - 116.251.106.170/31 - - 116.251.106.174/31 - - 116.251.106.176/28 - - 116.251.106.192/26 - - 116.251.107.0/28 - - 116.251.107.16/30 - - 116.251.107.22/31 - - 116.251.107.26/31 - - 116.251.107.28/30 - - 116.251.107.34/31 - - 116.251.107.36/30 - - 116.251.107.40/29 - - 116.251.107.48/28 - - 116.251.107.64/28 - - 116.251.107.80/30 - - 116.251.107.92/30 - - 116.251.107.96/29 - - 116.251.107.104/30 - - 116.251.107.116/30 - - 116.251.107.120/29 - - 116.251.107.128/26 - - 116.251.107.192/27 - - 116.251.107.224/28 - - 116.251.107.240/29 - - 116.251.107.248/30 - - 116.251.108.0/27 - - 116.251.108.32/29 - - 116.251.108.48/28 - - 116.251.108.64/28 - - 116.251.108.96/30 - - 116.251.108.104/29 - - 116.251.108.112/30 - - 116.251.108.144/29 - - 116.251.108.156/30 - - 116.251.108.160/28 - - 116.251.108.180/30 - - 116.251.108.188/30 - - 116.251.108.194/31 - - 116.251.108.198/31 - - 116.251.108.200/29 - - 116.251.109.36/30 - - 116.251.109.40/31 - - 116.251.109.42/32 - - 116.251.109.64/31 - - 116.251.109.66/32 - - 116.251.109.96/30 - - 116.251.109.108/30 - - 116.251.109.120/30 - - 116.251.109.160/30 - - 116.251.112.4/30 - - 116.251.112.8/31 - - 116.251.112.20/31 - - 116.251.112.24/30 - - 116.251.112.34/31 - - 116.251.112.40/30 - - 116.251.112.58/31 - - 116.251.112.60/31 - - 116.251.112.64/31 - - 116.251.112.76/30 - - 116.251.112.84/30 - - 116.251.112.88/29 - - 116.251.112.100/30 - - 116.251.112.120/29 - - 116.251.112.128/25 - - 116.251.113.0/26 - - 116.251.113.64/28 - - 116.251.113.92/30 - - 116.251.113.104/30 - - 116.251.113.120/30 - - 116.251.113.132/30 - - 116.251.113.136/29 - - 116.251.113.144/28 - - 116.251.113.160/27 - - 116.251.113.192/27 - - 116.251.113.224/28 - - 116.251.113.240/29 - - 116.251.114.16/28 - - 116.251.114.32/27 - - 116.251.114.88/29 - - 116.251.114.96/27 - - 116.251.114.128/29 - - 116.251.114.140/30 - - 116.251.114.164/30 - - 116.251.114.168/29 - - 116.251.114.176/28 - - 116.251.114.192/27 - - 116.251.114.224/30 - - 116.251.114.240/31 - - 116.251.114.244/30 - - 116.251.114.248/30 - - 116.251.114.252/31 - - 116.251.115.0/30 - - 116.251.115.6/31 - - 116.251.115.8/30 - - 116.251.115.20/31 - - 116.251.115.24/30 - - 116.251.115.28/31 - - 116.251.115.32/31 - - 116.251.115.36/30 - - 116.251.115.40/31 - - 116.251.115.44/31 - - 116.251.115.50/31 - - 116.251.115.52/30 - - 116.251.115.56/31 - - 116.251.115.62/31 - - 116.251.115.64/29 - - 116.251.115.74/31 - - 116.251.115.78/31 - - 116.251.115.80/30 - - 116.251.115.86/31 - - 116.251.115.92/30 - - 116.251.115.100/30 - - 116.251.115.104/29 - - 116.251.115.112/28 - - 116.251.115.128/28 - - 116.251.115.144/29 - - 116.251.115.152/30 - - 116.251.115.172/30 - - 116.251.115.176/28 - - 116.251.115.192/27 - - 116.251.115.224/28 - - 116.251.115.240/29 - - 116.251.115.248/30 - - 116.251.116.28/30 - - 116.251.116.32/29 - - 116.251.116.40/30 - - 116.251.116.48/28 - - 116.251.116.68/30 - - 116.251.116.72/29 - - 116.251.116.80/28 - - 116.251.116.96/29 - - 116.251.116.106/31 - - 116.251.116.108/30 - - 116.251.116.114/31 - - 116.251.116.116/30 - - 116.251.116.120/29 - - 116.251.116.128/26 - - 116.251.116.192/28 - - 116.251.116.208/30 - - 116.251.116.248/29 - - 116.251.117.0/24 - - 116.251.118.0/26 - - 116.251.118.64/28 - - 116.251.118.80/29 - - 116.251.118.88/30 - - 116.251.118.120/29 - - 116.251.118.128/28 - - 116.251.118.144/29 - - 116.251.118.212/30 - - 116.251.118.216/29 - - 116.251.118.224/29 - - 116.251.118.232/31 - - 116.251.118.252/30 - - 116.251.119.24/30 - - 116.251.119.46/31 - - 116.251.119.66/31 - - 116.251.119.76/30 - - 116.251.119.80/28 - - 116.251.119.96/28 - - 116.251.119.112/30 - - 116.251.119.128/26 - - 116.251.119.192/27 - - 116.251.124.4/30 - - 116.251.124.12/30 - - 116.251.124.24/30 - - 116.251.124.36/30 - - 116.251.124.80/28 - - 116.251.124.96/27 - - 116.251.124.128/29 - - 116.251.124.138/31 - - 116.251.124.142/31 - - 116.251.124.144/30 - - 116.251.124.150/31 - - 116.251.124.154/31 - - 116.251.124.158/31 - - 116.251.124.162/31 - - 116.251.124.166/31 - - 116.251.124.168/30 - - 116.251.124.174/31 - - 116.251.124.178/31 - - 116.251.124.182/31 - - 116.251.124.186/31 - - 116.251.124.190/31 - - 116.251.124.192/29 - - 116.251.124.208/30 - - 116.251.124.216/30 - - 116.251.125.24/30 - - 116.251.125.32/30 - - 116.251.125.96/27 - - 116.251.125.128/28 - - 116.251.125.144/30 - - 116.251.125.154/31 - - 116.251.125.156/30 - - 116.251.125.182/31 - - 116.251.125.188/30 - - 116.251.125.198/31 - - 116.251.125.204/30 - - 116.251.125.222/31 - - 116.251.125.228/31 - - 116.251.125.236/30 - - 116.251.126.54/31 - - 116.251.126.70/31 - - 116.251.126.78/31 - - 116.251.126.86/31 - - 116.251.126.156/31 - - 116.251.126.164/31 - - 116.251.126.188/30 - - 116.251.127.22/31 - - 116.251.127.28/30 - - 116.251.127.166/31 - - 116.251.127.192/30 - - 116.251.127.196/31 - - 116.251.127.202/31 - - 116.251.127.206/31 - - 116.251.127.208/29 - - 116.251.127.216/31 - - 116.251.127.220/30 - - 116.251.127.234/31 - - 116.251.127.238/31 - - 116.251.127.242/31 - - 116.251.127.250/31 - - 116.252.0.0/15 - - 116.254.104.0/21 - - 116.254.129.0/24 - - 116.254.130.0/23 - - 116.254.132.0/22 - - 116.254.136.0/21 - - 116.254.144.0/20 - - 116.254.160.0/19 - - 116.254.192.0/18 - - 116.255.128.0/17 - - 117.8.0.0/13 - - 117.21.0.0/16 - - 117.22.0.0/15 - - 117.24.0.0/13 - - 117.32.0.0/13 - - 117.40.0.0/14 - - 117.44.0.0/15 - - 117.48.0.0/15 - - 117.50.0.0/16 - - 117.51.128.0/23 - - 117.51.131.0/24 - - 117.51.132.0/22 - - 117.51.136.0/21 - - 117.51.144.0/20 - - 117.51.160.0/19 - - 117.51.192.0/18 - - 117.53.48.0/20 - - 117.53.176.0/20 - - 117.57.0.0/16 - - 117.58.0.0/18 - - 117.59.0.0/16 - - 117.60.0.0/14 - - 117.64.0.0/13 - - 117.72.0.0/15 - - 117.74.64.0/19 - - 117.74.128.0/17 - - 117.75.0.0/16 - - 117.76.0.0/14 - - 117.80.0.0/12 - - 117.100.0.0/15 - - 117.103.16.0/20 - - 117.103.40.0/21 - - 117.103.72.0/21 - - 117.103.128.0/20 - - 117.104.168.0/21 - - 117.106.0.0/15 - - 117.112.0.0/13 - - 117.120.64.0/18 - - 117.120.128.0/17 - - 117.121.0.0/19 - - 117.121.32.0/21 - - 117.121.40.0/22 - - 117.121.44.0/23 - - 117.121.46.0/24 - - 117.121.48.0/20 - - 117.121.64.0/18 - - 117.121.128.0/20 - - 117.121.148.0/22 - - 117.121.152.0/21 - - 117.121.160.0/19 - - 117.121.192.0/21 - - 117.122.128.0/17 - - 117.124.0.0/14 - - 117.128.0.0/10 - - 118.24.0.0/15 - - 118.26.0.0/19 - - 118.26.36.0/22 - - 118.26.40.0/21 - - 118.26.48.0/20 - - 118.26.64.0/19 - - 118.26.104.0/21 - - 118.26.112.0/20 - - 118.26.128.0/17 - - 118.28.0.0/15 - - 118.30.0.0/20 - - 118.30.16.0/21 - - 118.30.24.0/22 - - 118.30.32.0/19 - - 118.30.64.0/18 - - 118.30.128.0/17 - - 118.31.0.0/16 - - 118.64.0.0/15 - - 118.66.0.0/16 - - 118.67.112.0/20 - - 118.72.0.0/13 - - 118.80.0.0/15 - - 118.84.0.0/15 - - 118.88.32.0/19 - - 118.88.64.0/18 - - 118.88.128.0/17 - - 118.89.0.0/16 - - 118.102.16.0/20 - - 118.102.32.0/21 - - 118.103.164.0/22 - - 118.103.168.0/21 - - 118.103.176.0/22 - - 118.103.245.0/24 - - 118.103.246.0/23 - - 118.112.0.0/13 - - 118.120.0.0/14 - - 118.124.0.0/15 - - 118.126.1.0/24 - - 118.126.2.0/23 - - 118.126.4.0/22 - - 118.126.8.0/21 - - 118.126.16.0/23 - - 118.126.18.0/24 - - 118.126.32.0/19 - - 118.126.64.0/18 - - 118.126.128.0/17 - - 118.127.128.0/19 - - 118.132.0.0/14 - - 118.144.0.0/14 - - 118.178.0.0/16 - - 118.180.0.0/14 - - 118.184.5.0/24 - - 118.184.10.0/24 - - 118.184.115.0/24 - - 118.184.116.0/22 - - 118.184.120.0/23 - - 118.184.122.0/24 - - 118.184.128.0/18 - - 118.184.192.0/19 - - 118.184.240.0/20 - - 118.186.0.0/15 - - 118.188.0.0/16 - - 118.190.0.0/16 - - 118.191.0.0/20 - - 118.191.24.0/21 - - 118.191.32.0/19 - - 118.191.64.0/18 - - 118.191.144.0/21 - - 118.191.153.0/24 - - 118.191.154.0/23 - - 118.191.156.0/22 - - 118.191.160.0/19 - - 118.191.192.0/20 - - 118.191.209.0/24 - - 118.191.210.0/23 - - 118.191.212.0/22 - - 118.191.248.0/21 - - 118.192.0.0/16 - - 118.193.0.0/22 - - 118.193.32.0/20 - - 118.193.56.0/21 - - 118.193.68.0/22 - - 118.193.72.0/24 - - 118.193.77.0/24 - - 118.193.96.0/19 - - 118.194.0.0/17 - - 118.194.128.0/18 - - 118.194.192.0/19 - - 118.194.232.0/21 - - 118.194.240.0/20 - - 118.195.0.0/16 - - 118.196.0.0/14 - - 118.202.0.0/15 - - 118.204.0.0/14 - - 118.212.0.0/15 - - 118.215.192.0/18 - - 118.224.0.0/14 - - 118.228.0.0/17 - - 118.228.128.0/20 - - 118.228.144.0/21 - - 118.228.152.0/25 - - 118.228.152.128/26 - - 118.228.152.192/27 - - 118.228.152.224/29 - - 118.228.152.234/31 - - 118.228.152.236/30 - - 118.228.152.240/28 - - 118.228.153.0/24 - - 118.228.154.0/23 - - 118.228.156.0/22 - - 118.228.160.0/19 - - 118.228.192.0/18 - - 118.229.0.0/16 - - 118.230.0.0/16 - - 118.239.0.0/16 - - 118.242.0.0/16 - - 118.244.0.0/14 - - 118.248.0.0/13 - - 119.0.0.0/15 - - 119.2.0.0/19 - - 119.2.128.0/17 - - 119.3.0.0/16 - - 119.4.0.0/14 - - 119.10.0.0/17 - - 119.15.136.0/21 - - 119.16.0.0/16 - - 119.18.192.0/20 - - 119.18.208.0/21 - - 119.18.224.0/19 - - 119.19.0.0/16 - - 119.20.0.0/14 - - 119.27.64.0/18 - - 119.27.128.0/17 - - 119.29.0.0/20 - - 119.29.16.0/21 - - 119.29.24.0/22 - - 119.29.28.0/24 - - 119.29.30.0/23 - - 119.29.32.0/19 - - 119.29.64.0/18 - - 119.29.128.0/17 - - 119.30.48.0/20 - - 119.31.192.0/19 - - 119.32.0.0/14 - - 119.36.0.0/15 - - 119.38.0.0/17 - - 119.38.128.0/18 - - 119.38.192.0/20 - - 119.38.208.0/22 - - 119.38.212.0/23 - - 119.38.214.0/27 - - 119.38.214.56/29 - - 119.38.214.64/26 - - 119.38.214.128/25 - - 119.38.215.0/27 - - 119.38.215.32/28 - - 119.38.215.48/29 - - 119.38.215.56/30 - - 119.38.215.76/30 - - 119.38.215.80/28 - - 119.38.215.96/27 - - 119.38.215.128/25 - - 119.38.216.0/21 - - 119.39.0.0/16 - - 119.40.0.0/18 - - 119.40.64.0/20 - - 119.40.128.0/17 - - 119.41.0.0/16 - - 119.42.0.0/19 - - 119.42.52.0/22 - - 119.42.128.0/20 - - 119.42.224.0/19 - - 119.44.0.0/15 - - 119.48.0.0/13 - - 119.57.0.0/16 - - 119.58.0.0/16 - - 119.59.128.0/17 - - 119.60.0.0/15 - - 119.62.0.0/16 - - 119.63.32.0/19 - - 119.75.208.0/20 - - 119.78.0.0/15 - - 119.80.0.0/16 - - 119.82.208.0/20 - - 119.84.0.0/14 - - 119.88.0.0/16 - - 119.89.0.0/17 - - 119.89.128.0/21 - - 119.89.136.0/23 - - 119.89.139.0/24 - - 119.89.140.0/22 - - 119.89.144.0/20 - - 119.89.160.0/20 - - 119.89.176.0/22 - - 119.89.180.0/23 - - 119.89.183.0/24 - - 119.89.184.0/21 - - 119.89.192.0/23 - - 119.89.194.0/24 - - 119.89.196.0/22 - - 119.89.200.0/21 - - 119.89.208.0/21 - - 119.89.217.0/24 - - 119.89.218.0/23 - - 119.89.220.0/22 - - 119.89.224.0/19 - - 119.90.0.0/15 - - 119.96.0.0/13 - - 119.108.0.0/15 - - 119.112.0.0/12 - - 119.128.0.0/12 - - 119.144.0.0/14 - - 119.148.160.0/19 - - 119.151.192.0/18 - - 119.160.200.0/21 - - 119.161.120.0/21 - - 119.161.128.0/21 - - 119.161.160.0/19 - - 119.161.192.0/18 - - 119.162.0.0/15 - - 119.164.0.0/14 - - 119.176.0.0/12 - - 119.232.0.0/15 - - 119.235.128.0/19 - - 119.235.160.0/20 - - 119.235.184.0/22 - - 119.248.0.0/14 - - 119.252.96.0/21 - - 119.252.240.0/21 - - 119.252.249.0/24 - - 119.252.252.0/23 - - 119.253.0.0/16 - - 119.254.0.0/15 - - 120.0.0.0/12 - - 120.24.0.0/14 - - 120.30.0.0/15 - - 120.32.0.0/12 - - 120.48.0.0/15 - - 120.52.0.0/14 - - 120.64.0.0/13 - - 120.72.32.0/19 - - 120.72.128.0/17 - - 120.76.0.0/14 - - 120.80.0.0/13 - - 120.88.8.0/21 - - 120.90.0.0/15 - - 120.92.0.0/17 - - 120.92.128.0/18 - - 120.92.192.0/22 - - 120.92.198.0/23 - - 120.92.200.0/21 - - 120.92.208.0/20 - - 120.92.224.0/19 - - 120.94.0.0/15 - - 120.128.0.0/13 - - 120.136.16.0/21 - - 120.136.128.0/18 - - 120.137.0.0/17 - - 120.138.32.224/29 - - 120.143.128.0/19 - - 120.192.0.0/10 - - 121.0.8.0/21 - - 121.0.16.0/20 - - 121.4.0.0/15 - - 121.8.0.0/13 - - 121.16.0.0/12 - - 121.32.0.0/13 - - 121.40.0.0/14 - - 121.46.0.0/18 - - 121.46.76.0/22 - - 121.46.128.0/17 - - 121.47.0.0/16 - - 121.48.0.0/15 - - 121.50.8.0/21 - - 121.51.0.0/16 - - 121.52.160.0/19 - - 121.52.208.0/20 - - 121.52.224.0/19 - - 121.54.176.0/21 - - 121.55.0.0/18 - - 121.56.0.0/15 - - 121.58.0.0/17 - - 121.58.136.0/21 - - 121.58.144.0/20 - - 121.58.160.0/21 - - 121.59.0.36/30 - - 121.59.0.40/29 - - 121.59.0.48/28 - - 121.59.0.64/26 - - 121.59.0.128/25 - - 121.59.1.0/24 - - 121.59.5.128/25 - - 121.59.6.0/23 - - 121.59.8.0/30 - - 121.59.8.8/29 - - 121.59.8.16/28 - - 121.59.8.32/27 - - 121.59.8.64/27 - - 121.59.8.96/29 - - 121.59.8.108/30 - - 121.59.8.112/31 - - 121.59.8.116/30 - - 121.59.8.120/29 - - 121.59.8.128/29 - - 121.59.8.138/31 - - 121.59.8.140/30 - - 121.59.8.144/28 - - 121.59.8.160/27 - - 121.59.8.192/29 - - 121.59.8.200/30 - - 121.59.8.208/29 - - 121.59.8.216/30 - - 121.59.8.220/31 - - 121.59.8.224/27 - - 121.59.9.0/26 - - 121.59.9.64/29 - - 121.59.9.72/30 - - 121.59.9.80/28 - - 121.59.9.96/27 - - 121.59.9.128/25 - - 121.59.10.0/31 - - 121.59.10.4/30 - - 121.59.10.8/29 - - 121.59.10.16/28 - - 121.59.10.32/27 - - 121.59.10.64/26 - - 121.59.10.128/25 - - 121.59.11.0/24 - - 121.59.12.0/22 - - 121.59.16.0/24 - - 121.59.18.0/23 - - 121.59.20.0/22 - - 121.59.24.0/21 - - 121.59.32.0/19 - - 121.59.64.0/18 - - 121.59.128.0/17 - - 121.60.0.0/14 - - 121.68.0.0/14 - - 121.76.0.0/15 - - 121.79.128.0/18 - - 121.89.0.0/16 - - 121.100.128.0/17 - - 121.101.0.0/18 - - 121.101.208.0/20 - - 121.189.1.118/32 - - 121.189.3.102/31 - - 121.192.0.0/13 - - 121.200.192.0/21 - - 121.201.0.0/16 - - 121.204.0.0/14 - - 121.224.0.0/12 - - 121.248.0.0/14 - - 121.255.0.0/16 - - 122.0.64.0/18 - - 122.0.128.0/17 - - 122.4.0.0/14 - - 122.10.132.0/23 - - 122.10.136.0/23 - - 122.10.196.0/23 - - 122.10.216.0/22 - - 122.10.228.0/22 - - 122.10.232.0/21 - - 122.10.240.0/21 - - 122.10.248.0/22 - - 122.11.0.0/17 - - 122.12.0.0/15 - - 122.14.0.0/17 - - 122.14.192.0/18 - - 122.48.0.0/16 - - 122.49.0.0/18 - - 122.51.0.0/16 - - 122.64.0.0/11 - - 122.96.0.0/15 - - 122.98.144.0/20 - - 122.98.160.0/21 - - 122.98.172.0/22 - - 122.98.176.0/20 - - 122.98.192.0/21 - - 122.98.232.0/21 - - 122.98.240.0/20 - - 122.102.0.0/20 - - 122.102.64.0/19 - - 122.112.0.0/18 - - 122.112.64.0/19 - - 122.112.96.0/22 - - 122.112.107.0/24 - - 122.112.118.0/24 - - 122.112.122.0/24 - - 122.112.125.0/24 - - 122.112.128.0/17 - - 122.113.0.0/16 - - 122.114.0.0/16 - - 122.115.0.0/18 - - 122.115.80.0/20 - - 122.115.96.0/19 - - 122.115.128.0/17 - - 122.119.0.0/16 - - 122.128.100.0/22 - - 122.128.120.0/21 - - 122.136.0.0/13 - - 122.144.128.0/17 - - 122.152.192.0/18 - - 122.156.0.0/14 - - 122.188.0.0/14 - - 122.192.0.0/14 - - 122.198.0.0/16 - - 122.200.40.0/21 - - 122.200.64.0/18 - - 122.201.48.0/20 - - 122.204.0.0/14 - - 122.224.0.0/12 - - 122.240.0.0/13 - - 122.248.24.0/21 - - 122.248.48.0/20 - - 122.255.64.0/21 - - 123.0.128.0/21 - - 123.0.136.0/23 - - 123.0.139.0/24 - - 123.0.140.0/22 - - 123.0.144.0/20 - - 123.0.160.0/19 - - 123.4.0.0/14 - - 123.8.0.0/13 - - 123.49.130.0/23 - - 123.49.132.0/22 - - 123.49.136.0/22 - - 123.49.152.0/21 - - 123.49.160.0/19 - - 123.49.192.0/18 - - 123.50.160.0/19 - - 123.52.0.0/14 - - 123.56.0.0/15 - - 123.58.0.0/18 - - 123.58.64.0/20 - - 123.58.80.0/21 - - 123.58.88.0/22 - - 123.58.96.0/19 - - 123.58.128.0/17 - - 123.59.0.0/16 - - 123.61.0.0/16 - - 123.62.0.0/16 - - 123.64.0.0/11 - - 123.96.0.0/15 - - 123.98.0.0/17 - - 123.99.128.0/17 - - 123.100.0.0/19 - - 123.100.232.0/24 - - 123.101.0.0/16 - - 123.103.0.0/20 - - 123.103.16.0/21 - - 123.103.24.0/22 - - 123.103.28.0/23 - - 123.103.30.0/24 - - 123.103.32.0/19 - - 123.103.64.0/18 - - 123.108.134.0/24 - - 123.108.138.0/23 - - 123.108.140.0/24 - - 123.108.142.0/24 - - 123.108.208.0/20 - - 123.112.0.0/12 - - 123.128.0.0/13 - - 123.137.0.0/16 - - 123.138.0.0/15 - - 123.144.0.0/12 - - 123.160.0.0/12 - - 123.176.60.0/22 - - 123.176.80.0/20 - - 123.177.0.0/16 - - 123.178.0.0/15 - - 123.180.0.0/14 - - 123.184.0.0/13 - - 123.196.0.0/15 - - 123.199.128.0/17 - - 123.206.0.0/15 - - 123.232.0.0/14 - - 123.242.0.0/17 - - 123.242.192.0/21 - - 123.244.0.0/14 - - 123.249.0.0/16 - - 123.253.109.0/24 - - 123.253.110.0/24 - - 123.253.240.0/22 - - 123.254.96.0/21 - - 124.6.64.0/18 - - 124.14.0.0/15 - - 124.16.0.0/15 - - 124.20.0.0/14 - - 124.28.192.0/18 - - 124.29.0.0/17 - - 124.31.0.0/16 - - 124.40.112.0/20 - - 124.40.128.0/18 - - 124.40.192.0/19 - - 124.40.240.0/22 - - 124.42.0.0/16 - - 124.47.0.0/18 - - 124.64.0.0/15 - - 124.66.0.0/17 - - 124.67.0.0/16 - - 124.68.0.0/17 - - 124.68.128.0/18 - - 124.68.192.0/19 - - 124.68.224.0/20 - - 124.68.240.0/23 - - 124.68.242.0/24 - - 124.68.244.0/23 - - 124.68.254.0/23 - - 124.69.0.0/16 - - 124.70.0.0/22 - - 124.72.0.0/13 - - 124.88.0.0/13 - - 124.108.8.0/21 - - 124.108.40.0/21 - - 124.109.96.0/21 - - 124.112.0.0/14 - - 124.116.0.0/15 - - 124.118.0.0/16 - - 124.119.0.0/17 - - 124.119.128.0/18 - - 124.119.192.0/19 - - 124.119.224.0/20 - - 124.119.240.0/22 - - 124.119.244.0/23 - - 124.119.246.0/25 - - 124.119.246.128/26 - - 124.119.246.192/27 - - 124.119.246.224/28 - - 124.119.246.240/29 - - 124.119.246.248/30 - - 124.119.246.254/31 - - 124.119.247.0/24 - - 124.119.248.0/21 - - 124.126.0.0/15 - - 124.128.0.0/13 - - 124.147.128.0/17 - - 124.150.137.0/24 - - 124.151.0.0/16 - - 124.152.0.0/16 - - 124.160.0.0/13 - - 124.172.0.0/14 - - 124.192.0.0/15 - - 124.196.0.0/16 - - 124.200.0.0/13 - - 124.220.0.0/14 - - 124.224.0.0/12 - - 124.240.0.0/17 - - 124.240.128.0/18 - - 124.242.0.0/16 - - 124.243.192.0/18 - - 124.248.0.0/17 - - 124.249.0.0/16 - - 124.250.0.0/17 - - 124.250.128.0/18 - - 124.250.192.0/19 - - 124.250.224.0/20 - - 124.250.240.0/21 - - 124.250.248.0/24 - - 124.250.249.0/32 - - 124.250.249.2/31 - - 124.250.249.4/30 - - 124.250.249.8/29 - - 124.250.249.16/28 - - 124.250.249.32/27 - - 124.250.249.64/26 - - 124.250.249.128/27 - - 124.250.249.160/30 - - 124.250.249.172/31 - - 124.250.249.175/32 - - 124.250.249.176/30 - - 124.250.249.184/29 - - 124.250.249.192/28 - - 124.250.249.208/30 - - 124.250.249.216/32 - - 124.250.249.218/31 - - 124.250.249.220/32 - - 124.250.249.222/31 - - 124.250.249.224/30 - - 124.250.249.232/29 - - 124.250.249.240/31 - - 124.250.249.243/32 - - 124.250.249.244/31 - - 124.250.249.247/32 - - 124.250.249.248/29 - - 124.250.250.0/23 - - 124.250.252.0/22 - - 124.251.0.0/16 - - 124.254.0.0/18 - - 125.31.192.0/18 - - 125.32.0.0/12 - - 125.58.128.0/17 - - 125.61.128.0/17 - - 125.62.0.0/18 - - 125.64.0.0/11 - - 125.96.0.0/15 - - 125.98.0.0/16 - - 125.104.0.0/13 - - 125.112.0.0/12 - - 125.169.0.0/16 - - 125.171.0.0/16 - - 125.208.0.0/19 - - 125.208.37.0/24 - - 125.208.40.0/24 - - 125.208.45.0/24 - - 125.208.46.0/23 - - 125.208.48.0/20 - - 125.210.0.0/15 - - 125.213.0.0/17 - - 125.214.96.0/19 - - 125.215.0.0/18 - - 125.216.0.0/13 - - 125.254.128.0/17 - - 128.108.0.0/16 - - 129.28.0.0/16 - - 129.204.0.0/16 - - 129.211.0.0/16 - - 129.223.254.0/24 - - 129.227.99.0/24 - - 130.214.218.0/23 - - 131.228.96.0/24 - - 131.253.12.0/29 - - 131.253.12.80/28 - - 131.253.12.240/29 - - 132.232.0.0/16 - - 132.237.134.0/24 - - 132.237.150.0/24 - - 134.175.0.0/16 - - 135.159.208.0/20 - - 135.244.80.0/20 - - 137.59.59.0/24 - - 137.59.88.0/22 - - 138.32.244.0/22 - - 139.5.56.0/21 - - 139.5.80.0/22 - - 139.5.92.0/22 - - 139.5.128.0/22 - - 139.5.160.0/22 - - 139.5.192.0/22 - - 139.5.204.0/22 - - 139.5.244.0/22 - - 139.9.0.0/16 - - 139.129.0.0/16 - - 139.148.0.0/16 - - 139.155.0.0/16 - - 139.159.0.0/19 - - 139.159.32.0/21 - - 139.159.40.0/22 - - 139.159.52.0/22 - - 139.159.56.0/21 - - 139.159.64.0/19 - - 139.159.96.0/20 - - 139.159.112.0/22 - - 139.159.116.0/23 - - 139.159.120.0/21 - - 139.159.128.0/17 - - 139.170.0.0/16 - - 139.176.0.0/16 - - 139.183.0.0/16 - - 139.186.0.0/16 - - 139.189.0.0/16 - - 139.196.0.0/15 - - 139.198.0.0/21 - - 139.198.8.0/23 - - 139.198.11.0/24 - - 139.198.12.0/22 - - 139.198.16.0/20 - - 139.198.32.0/19 - - 139.198.66.0/23 - - 139.198.68.0/22 - - 139.198.72.0/21 - - 139.198.80.0/20 - - 139.198.96.0/20 - - 139.198.113.0/24 - - 139.198.114.0/23 - - 139.198.116.0/22 - - 139.198.122.0/23 - - 139.198.124.0/22 - - 139.198.128.0/17 - - 139.199.0.0/16 - - 139.200.0.0/13 - - 139.208.0.0/13 - - 139.217.0.0/16 - - 139.219.0.0/16 - - 139.220.0.0/17 - - 139.220.128.0/18 - - 139.220.192.0/22 - - 139.220.196.0/23 - - 139.220.200.0/21 - - 139.220.208.0/23 - - 139.220.212.0/22 - - 139.220.216.0/21 - - 139.220.224.0/19 - - 139.221.0.0/16 - - 139.224.0.0/16 - - 139.226.0.0/15 - - 140.75.0.0/16 - - 140.101.208.0/24 - - 140.143.0.0/16 - - 140.179.0.0/16 - - 140.205.0.0/24 - - 140.205.2.0/23 - - 140.205.4.0/22 - - 140.205.8.0/21 - - 140.205.16.0/20 - - 140.205.32.0/19 - - 140.205.64.0/19 - - 140.205.96.0/20 - - 140.205.112.0/21 - - 140.205.120.0/23 - - 140.205.123.0/24 - - 140.205.124.0/22 - - 140.205.128.0/17 - - 140.206.0.0/15 - - 140.210.0.0/16 - - 140.224.0.0/16 - - 140.237.0.0/16 - - 140.240.0.0/16 - - 140.242.223.0/24 - - 140.242.224.0/24 - - 140.243.0.0/16 - - 140.246.0.0/16 - - 140.249.0.0/16 - - 140.250.0.0/16 - - 140.255.0.0/16 - - 144.0.0.0/16 - - 144.7.0.0/16 - - 144.12.0.0/16 - - 144.36.146.0/23 - - 144.48.64.0/22 - - 144.48.88.0/22 - - 144.48.156.0/22 - - 144.48.180.0/22 - - 144.48.184.0/22 - - 144.48.204.0/22 - - 144.48.208.0/21 - - 144.52.0.0/16 - - 144.123.0.0/16 - - 144.211.80.0/24 - - 144.211.138.0/24 - - 144.255.0.0/16 - - 146.56.192.0/18 - - 146.196.56.0/22 - - 146.196.68.0/22 - - 146.196.92.0/22 - - 146.196.112.0/21 - - 146.196.124.0/22 - - 146.217.137.0/24 - - 146.222.79.0/24 - - 146.222.81.0/24 - - 146.222.94.0/24 - - 147.243.13.32/27 - - 147.243.13.64/27 - - 147.243.14.32/27 - - 148.70.0.0/16 - - 150.0.0.0/16 - - 150.115.0.0/16 - - 150.121.0.0/16 - - 150.122.0.0/16 - - 150.129.136.0/22 - - 150.129.192.0/22 - - 150.129.252.0/22 - - 150.138.0.0/15 - - 150.158.0.0/16 - - 150.222.88.0/23 - - 150.223.0.0/16 - - 150.242.0.0/21 - - 150.242.8.0/22 - - 150.242.28.0/22 - - 150.242.44.0/22 - - 150.242.48.0/21 - - 150.242.56.0/22 - - 150.242.76.0/22 - - 150.242.80.0/22 - - 150.242.92.0/22 - - 150.242.96.0/22 - - 150.242.112.0/21 - - 150.242.120.0/22 - - 150.242.152.0/22 - - 150.242.158.0/24 - - 150.242.160.0/21 - - 150.242.168.0/22 - - 150.242.184.0/21 - - 150.242.192.0/22 - - 150.242.224.0/22 - - 150.242.232.0/21 - - 150.242.240.0/21 - - 150.242.248.0/22 - - 150.255.0.0/16 - - 152.32.178.0/23 - - 152.32.249.0/24 - - 152.32.255.0/24 - - 152.104.128.0/18 - - 152.104.192.0/24 - - 152.104.193.0/28 - - 152.104.193.20/30 - - 152.104.193.24/29 - - 152.104.193.32/27 - - 152.104.193.64/26 - - 152.104.193.128/25 - - 152.104.194.0/23 - - 152.104.196.0/22 - - 152.104.200.0/21 - - 152.104.208.0/20 - - 152.104.224.0/19 - - 152.136.0.0/16 - - 153.0.0.0/16 - - 153.3.0.0/16 - - 153.34.0.0/15 - - 153.36.0.0/15 - - 153.99.0.0/16 - - 153.101.0.0/16 - - 153.118.0.0/15 - - 154.8.128.0/17 - - 155.126.176.0/23 - - 156.107.160.0/24 - - 156.107.170.0/24 - - 156.107.178.0/23 - - 156.107.180.0/23 - - 156.154.62.0/23 - - 157.0.0.0/16 - - 157.18.0.0/16 - - 157.61.0.0/16 - - 157.119.8.0/21 - - 157.119.16.0/22 - - 157.119.28.0/22 - - 157.119.132.0/22 - - 157.119.136.0/21 - - 157.119.144.0/20 - - 157.119.160.0/21 - - 157.119.172.0/22 - - 157.119.192.0/21 - - 157.119.240.0/22 - - 157.119.252.0/22 - - 157.122.0.0/16 - - 157.133.186.0/23 - - 157.133.192.0/21 - - 157.133.212.0/24 - - 157.133.236.0/24 - - 157.148.0.0/16 - - 157.156.0.0/16 - - 157.255.0.0/16 - - 159.75.0.0/16 - - 159.221.232.0/22 - - 159.226.0.0/21 - - 159.226.8.0/25 - - 159.226.8.128/26 - - 159.226.8.192/30 - - 159.226.8.200/29 - - 159.226.8.208/28 - - 159.226.8.224/27 - - 159.226.9.0/24 - - 159.226.10.0/23 - - 159.226.12.0/22 - - 159.226.16.0/20 - - 159.226.32.0/21 - - 159.226.40.0/22 - - 159.226.44.0/23 - - 159.226.46.0/25 - - 159.226.46.128/26 - - 159.226.46.192/27 - - 159.226.46.224/28 - - 159.226.46.240/29 - - 159.226.47.0/24 - - 159.226.48.0/20 - - 159.226.64.0/18 - - 159.226.128.0/18 - - 159.226.192.0/19 - - 159.226.224.0/20 - - 159.226.240.0/21 - - 159.226.248.0/22 - - 159.226.252.0/23 - - 159.226.254.0/30 - - 159.226.254.4/31 - - 159.226.254.8/29 - - 159.226.254.16/28 - - 159.226.254.32/27 - - 159.226.254.64/26 - - 159.226.254.128/26 - - 159.226.254.192/28 - - 159.226.254.208/30 - - 159.226.254.214/31 - - 159.226.254.216/29 - - 159.226.254.224/28 - - 159.226.254.240/29 - - 159.226.254.248/31 - - 159.226.254.252/31 - - 159.226.255.0/24 - - 160.19.208.0/21 - - 160.19.216.0/22 - - 160.20.48.0/22 - - 160.62.10.0/24 - - 160.83.109.0/24 - - 160.83.110.0/23 - - 160.202.60.0/23 - - 160.202.62.0/24 - - 160.202.148.0/22 - - 160.202.152.0/22 - - 160.202.212.0/22 - - 160.202.216.0/21 - - 160.202.224.0/19 - - 160.238.64.0/22 - - 161.163.0.0/21 - - 161.163.28.0/23 - - 161.163.176.0/24 - - 161.163.178.0/23 - - 161.163.180.0/22 - - 161.189.0.0/16 - - 161.207.0.0/16 - - 162.14.24.0/21 - - 162.14.32.0/19 - - 162.14.64.0/18 - - 162.14.128.0/17 - - 162.105.0.0/16 - - 163.0.0.0/16 - - 163.47.4.0/22 - - 163.53.0.0/20 - - 163.53.36.0/22 - - 163.53.40.0/22 - - 163.53.48.0/20 - - 163.53.64.0/22 - - 163.53.88.0/21 - - 163.53.96.0/19 - - 163.53.128.0/21 - - 163.53.136.0/22 - - 163.53.160.0/20 - - 163.53.188.0/22 - - 163.53.220.0/22 - - 163.53.236.0/22 - - 163.53.240.0/22 - - 163.116.202.0/23 - - 163.125.0.0/16 - - 163.142.0.0/16 - - 163.177.0.0/16 - - 163.179.0.0/16 - - 163.204.0.0/16 - - 163.244.246.0/24 - - 164.52.80.0/24 - - 165.156.30.0/24 - - 166.111.0.0/16 - - 167.139.0.0/16 - - 167.189.0.0/16 - - 167.220.244.0/22 - - 168.159.144.0/21 - - 168.159.152.0/22 - - 168.159.156.0/23 - - 168.159.158.0/24 - - 168.160.0.0/16 - - 168.230.0.0/24 - - 170.179.0.0/16 - - 170.225.224.0/23 - - 170.252.152.0/21 - - 171.8.0.0/13 - - 171.22.147.0/24 - - 171.34.0.0/15 - - 171.36.0.0/14 - - 171.40.0.0/13 - - 171.80.0.0/12 - - 171.104.0.0/13 - - 171.112.0.0/12 - - 171.208.0.0/12 - - 172.81.192.0/18 - - 173.39.200.0/23 - - 175.0.0.0/12 - - 175.16.0.0/13 - - 175.24.0.0/14 - - 175.30.0.0/15 - - 175.42.0.0/15 - - 175.44.0.0/16 - - 175.46.0.0/15 - - 175.48.0.0/12 - - 175.64.0.0/11 - - 175.102.0.0/16 - - 175.106.128.0/17 - - 175.111.144.0/20 - - 175.111.160.0/20 - - 175.111.184.0/22 - - 175.146.0.0/15 - - 175.148.0.0/14 - - 175.152.0.0/14 - - 175.158.96.0/22 - - 175.160.0.0/12 - - 175.176.156.0/22 - - 175.176.188.0/22 - - 175.178.0.0/16 - - 175.184.128.0/18 - - 175.185.0.0/16 - - 175.186.0.0/15 - - 175.188.0.0/14 - - 180.76.16.0/20 - - 180.76.32.0/19 - - 180.76.64.0/21 - - 180.76.72.0/22 - - 180.76.77.0/24 - - 180.76.78.0/23 - - 180.76.80.0/20 - - 180.76.96.0/19 - - 180.76.128.0/18 - - 180.76.192.0/19 - - 180.76.224.0/20 - - 180.76.240.0/24 - - 180.76.242.0/23 - - 180.76.244.0/22 - - 180.76.248.0/22 - - 180.76.252.0/23 - - 180.76.255.0/24 - - 180.77.0.0/16 - - 180.78.0.0/15 - - 180.84.0.0/15 - - 180.86.0.0/16 - - 180.88.0.0/14 - - 180.94.56.0/21 - - 180.94.96.0/20 - - 180.94.120.0/21 - - 180.95.128.0/17 - - 180.96.0.0/11 - - 180.129.128.0/17 - - 180.130.0.0/16 - - 180.136.0.0/13 - - 180.148.16.0/21 - - 180.148.152.0/21 - - 180.148.216.0/21 - - 180.148.224.0/19 - - 180.149.128.0/19 - - 180.150.160.0/21 - - 180.150.176.0/20 - - 180.152.0.0/13 - - 180.160.0.0/12 - - 180.178.112.0/21 - - 180.178.192.0/18 - - 180.184.0.0/14 - - 180.188.0.0/17 - - 180.189.148.0/22 - - 180.200.252.0/22 - - 180.201.0.0/16 - - 180.202.0.0/15 - - 180.208.0.0/15 - - 180.210.212.0/22 - - 180.210.233.0/24 - - 180.210.236.0/22 - - 180.212.0.0/15 - - 180.222.224.0/19 - - 180.223.0.0/19 - - 180.223.32.0/20 - - 180.223.48.0/21 - - 180.223.57.0/24 - - 180.223.58.0/23 - - 180.223.60.0/22 - - 180.223.80.0/20 - - 180.223.96.0/19 - - 180.223.128.0/17 - - 180.233.0.0/18 - - 180.233.64.0/19 - - 180.233.144.0/22 - - 180.235.64.0/19 - - 180.235.112.0/22 - - 182.16.144.0/21 - - 182.16.192.0/19 - - 182.18.0.0/17 - - 182.23.184.0/21 - - 182.23.200.0/21 - - 182.32.0.0/12 - - 182.48.96.0/19 - - 182.49.0.0/16 - - 182.50.0.0/22 - - 182.50.8.0/21 - - 182.50.112.0/20 - - 182.51.0.0/16 - - 182.54.0.0/17 - - 182.61.0.0/18 - - 182.61.128.0/19 - - 182.61.192.0/18 - - 182.80.0.0/13 - - 182.88.0.0/14 - - 182.92.0.0/16 - - 182.96.0.0/11 - - 182.128.0.0/12 - - 182.144.0.0/13 - - 182.157.0.0/16 - - 182.160.64.0/19 - - 182.174.0.0/15 - - 182.200.0.0/13 - - 182.236.128.0/17 - - 182.237.24.0/21 - - 182.238.0.0/16 - - 182.239.0.0/19 - - 182.240.0.0/13 - - 182.254.0.0/18 - - 182.254.64.0/19 - - 182.254.96.0/20 - - 182.254.112.0/22 - - 182.254.117.0/24 - - 182.254.119.0/24 - - 182.254.120.0/21 - - 182.254.128.0/18 - - 182.254.192.0/19 - - 182.254.224.0/20 - - 182.254.240.0/21 - - 182.254.248.0/23 - - 182.254.251.0/24 - - 182.254.252.0/22 - - 183.0.0.0/10 - - 183.64.0.0/13 - - 183.78.160.0/21 - - 183.78.180.0/22 - - 183.81.180.0/22 - - 183.84.0.0/15 - - 183.91.128.0/22 - - 183.91.136.0/21 - - 183.91.144.0/20 - - 183.92.0.0/14 - - 183.128.0.0/11 - - 183.160.0.0/13 - - 183.168.0.0/15 - - 183.170.0.0/16 - - 183.172.0.0/14 - - 183.184.0.0/13 - - 183.192.0.0/10 - - 185.109.236.0/24 - - 185.216.118.0/24 - - 185.224.116.0/22 - - 188.43.11.45/32 - - 188.128.15.214/31 - - 188.131.128.0/17 - - 188.254.55.229/32 - - 192.11.23.0/24 - - 192.11.26.0/24 - - 192.11.39.0/24 - - 192.11.236.0/24 - - 192.23.191.0/24 - - 192.55.10.0/23 - - 192.55.40.0/24 - - 192.55.46.0/24 - - 192.55.68.0/22 - - 192.102.204.0/22 - - 192.124.154.0/24 - - 192.137.31.0/24 - - 192.139.136.0/24 - - 192.140.128.0/21 - - 192.140.136.0/22 - - 192.140.156.0/22 - - 192.140.160.0/19 - - 192.140.192.0/20 - - 192.140.208.0/21 - - 192.144.128.0/17 - - 192.163.11.0/24 - - 192.232.97.0/24 - - 193.17.120.0/22 - - 193.20.64.0/22 - - 193.112.0.0/16 - - 193.200.196.0/24 - - 193.200.222.160/28 - - 194.138.136.0/24 - - 194.138.202.0/23 - - 194.138.245.0/24 - - 198.175.100.0/22 - - 198.208.17.0/24 - - 198.208.19.0/24 - - 199.7.72.0/24 - - 199.65.192.0/21 - - 199.244.144.0/24 - - 202.0.100.0/23 - - 202.0.122.0/23 - - 202.1.105.0/24 - - 202.1.106.0/24 - - 202.3.128.0/23 - - 202.4.128.0/19 - - 202.4.252.0/22 - - 202.5.208.0/21 - - 202.5.216.0/22 - - 202.6.6.0/23 - - 202.6.66.0/23 - - 202.6.72.0/23 - - 202.6.87.0/24 - - 202.6.88.0/23 - - 202.6.92.0/23 - - 202.6.103.0/24 - - 202.6.108.0/24 - - 202.6.110.0/23 - - 202.6.114.0/24 - - 202.6.176.0/20 - - 202.8.0.0/24 - - 202.8.2.0/23 - - 202.8.4.0/23 - - 202.8.12.0/24 - - 202.8.24.0/24 - - 202.8.77.0/24 - - 202.8.128.0/19 - - 202.8.192.0/20 - - 202.9.32.0/24 - - 202.9.34.0/23 - - 202.9.48.0/23 - - 202.9.51.0/24 - - 202.9.52.0/23 - - 202.9.54.0/24 - - 202.9.57.0/24 - - 202.9.58.0/23 - - 202.10.64.0/21 - - 202.10.74.0/23 - - 202.10.76.0/22 - - 202.10.112.0/20 - - 202.12.1.0/24 - - 202.12.2.0/24 - - 202.12.17.0/24 - - 202.12.18.0/23 - - 202.12.72.0/24 - - 202.12.84.0/23 - - 202.12.96.0/24 - - 202.12.98.0/23 - - 202.12.106.0/24 - - 202.12.111.0/24 - - 202.12.116.0/24 - - 202.14.64.0/23 - - 202.14.69.0/24 - - 202.14.73.0/24 - - 202.14.74.0/23 - - 202.14.76.0/24 - - 202.14.78.0/23 - - 202.14.88.0/24 - - 202.14.97.0/24 - - 202.14.104.0/23 - - 202.14.108.0/23 - - 202.14.111.0/24 - - 202.14.114.0/23 - - 202.14.118.0/23 - - 202.14.124.0/23 - - 202.14.127.0/24 - - 202.14.129.0/24 - - 202.14.135.0/24 - - 202.14.136.0/24 - - 202.14.149.0/24 - - 202.14.151.0/24 - - 202.14.157.0/24 - - 202.14.158.0/23 - - 202.14.169.0/24 - - 202.14.170.0/23 - - 202.14.172.0/22 - - 202.14.176.0/24 - - 202.14.184.0/23 - - 202.14.208.0/23 - - 202.14.213.0/24 - - 202.14.219.0/24 - - 202.14.220.0/24 - - 202.14.222.0/23 - - 202.14.225.0/24 - - 202.14.226.0/23 - - 202.14.231.0/24 - - 202.14.235.0/24 - - 202.14.236.0/22 - - 202.14.246.0/24 - - 202.14.251.0/24 - - 202.20.66.0/24 - - 202.20.79.0/24 - - 202.20.87.0/24 - - 202.20.88.0/23 - - 202.20.90.0/24 - - 202.20.94.0/23 - - 202.20.114.0/24 - - 202.20.117.0/24 - - 202.20.120.0/24 - - 202.20.125.0/24 - - 202.20.126.0/23 - - 202.21.48.0/20 - - 202.21.131.0/24 - - 202.21.132.0/24 - - 202.21.141.0/24 - - 202.21.142.0/24 - - 202.21.147.0/24 - - 202.21.148.0/24 - - 202.21.150.0/23 - - 202.21.152.0/23 - - 202.21.154.0/24 - - 202.21.156.0/24 - - 202.21.208.0/24 - - 202.22.248.0/21 - - 202.27.12.0/24 - - 202.27.14.0/24 - - 202.27.136.0/23 - - 202.30.124.0/24 - - 202.36.226.0/24 - - 202.38.0.0/22 - - 202.38.8.0/21 - - 202.38.48.0/20 - - 202.38.64.0/18 - - 202.38.128.0/21 - - 202.38.136.0/23 - - 202.38.138.0/24 - - 202.38.140.0/22 - - 202.38.146.0/23 - - 202.38.149.0/24 - - 202.38.150.0/23 - - 202.38.152.0/22 - - 202.38.156.0/24 - - 202.38.158.0/23 - - 202.38.160.0/23 - - 202.38.164.0/22 - - 202.38.168.0/22 - - 202.38.176.0/23 - - 202.38.184.0/21 - - 202.38.192.0/18 - - 202.40.4.0/23 - - 202.40.7.0/24 - - 202.40.15.0/24 - - 202.40.135.0/24 - - 202.40.136.0/24 - - 202.40.140.0/24 - - 202.40.143.0/24 - - 202.40.144.0/23 - - 202.40.150.0/24 - - 202.40.155.0/24 - - 202.40.156.0/24 - - 202.40.158.0/23 - - 202.40.162.0/24 - - 202.41.8.0/23 - - 202.41.11.0/24 - - 202.41.12.0/23 - - 202.41.128.0/24 - - 202.41.130.0/23 - - 202.41.142.0/24 - - 202.41.152.0/21 - - 202.41.192.0/24 - - 202.41.196.0/22 - - 202.41.200.0/22 - - 202.41.240.0/20 - - 202.43.76.0/22 - - 202.43.144.0/20 - - 202.44.16.0/20 - - 202.44.48.0/22 - - 202.44.67.0/24 - - 202.44.74.0/24 - - 202.44.97.0/24 - - 202.44.129.0/24 - - 202.44.132.0/23 - - 202.44.146.0/23 - - 202.45.0.0/23 - - 202.45.2.0/24 - - 202.45.15.0/24 - - 202.45.16.0/20 - - 202.46.16.0/23 - - 202.46.18.0/24 - - 202.46.20.0/23 - - 202.46.128.0/24 - - 202.46.224.0/20 - - 202.47.82.0/23 - - 202.47.96.0/20 - - 202.47.126.0/24 - - 202.47.128.0/24 - - 202.47.130.0/23 - - 202.52.34.0/24 - - 202.52.143.0/24 - - 202.53.140.0/24 - - 202.53.143.0/24 - - 202.53.202.0/24 - - 202.57.212.0/22 - - 202.57.216.0/22 - - 202.57.240.0/20 - - 202.58.0.0/24 - - 202.58.112.0/22 - - 202.59.0.0/23 - - 202.59.212.0/22 - - 202.59.236.0/24 - - 202.59.240.0/24 - - 202.60.48.0/21 - - 202.60.96.0/21 - - 202.60.112.0/20 - - 202.60.132.0/22 - - 202.60.136.0/21 - - 202.60.144.0/20 - - 202.61.68.0/22 - - 202.61.76.0/22 - - 202.61.88.0/22 - - 202.61.123.0/24 - - 202.61.127.0/24 - - 202.62.112.0/22 - - 202.62.248.0/22 - - 202.62.252.0/24 - - 202.62.255.0/24 - - 202.63.80.0/20 - - 202.63.160.0/19 - - 202.63.248.0/22 - - 202.63.253.0/24 - - 202.65.0.0/21 - - 202.65.8.0/23 - - 202.67.0.0/22 - - 202.69.4.0/23 - - 202.69.16.0/20 - - 202.70.0.0/19 - - 202.70.96.0/20 - - 202.70.192.0/20 - - 202.71.32.0/20 - - 202.72.40.0/21 - - 202.72.80.0/20 - - 202.72.112.0/20 - - 202.73.128.0/22 - - 202.73.240.0/20 - - 202.74.8.0/21 - - 202.74.36.0/24 - - 202.74.42.0/24 - - 202.74.52.0/24 - - 202.74.80.0/20 - - 202.74.254.0/23 - - 202.75.208.0/20 - - 202.75.252.0/22 - - 202.76.247.0/24 - - 202.76.252.0/22 - - 202.77.80.0/21 - - 202.77.92.0/22 - - 202.78.8.0/21 - - 202.79.224.0/21 - - 202.79.248.0/22 - - 202.80.192.0/20 - - 202.81.0.0/22 - - 202.81.176.0/20 - - 202.83.252.0/22 - - 202.84.0.0/20 - - 202.84.16.0/23 - - 202.84.22.0/24 - - 202.84.24.0/21 - - 202.85.208.0/20 - - 202.86.249.0/24 - - 202.87.80.0/20 - - 202.88.32.0/22 - - 202.89.8.0/21 - - 202.89.96.0/22 - - 202.89.108.0/22 - - 202.89.119.0/24 - - 202.89.232.0/21 - - 202.90.0.0/22 - - 202.90.16.0/20 - - 202.90.37.0/24 - - 202.90.96.0/19 - - 202.90.193.0/24 - - 202.90.196.0/24 - - 202.90.205.0/24 - - 202.90.224.0/20 - - 202.91.0.0/22 - - 202.91.96.0/20 - - 202.91.128.0/22 - - 202.91.176.0/20 - - 202.91.224.0/19 - - 202.92.0.0/22 - - 202.92.8.0/21 - - 202.92.48.0/20 - - 202.92.252.0/22 - - 202.93.0.0/22 - - 202.93.252.0/22 - - 202.94.0.0/19 - - 202.94.74.0/24 - - 202.94.81.0/24 - - 202.94.92.0/22 - - 202.95.240.0/21 - - 202.95.252.0/22 - - 202.96.0.0/12 - - 202.112.0.0/13 - - 202.120.0.0/15 - - 202.122.0.0/21 - - 202.122.32.0/21 - - 202.122.64.0/19 - - 202.122.112.0/20 - - 202.122.128.0/24 - - 202.122.132.0/24 - - 202.123.96.0/20 - - 202.123.116.0/22 - - 202.123.120.0/22 - - 202.124.16.0/21 - - 202.124.24.0/22 - - 202.125.107.0/24 - - 202.125.109.0/24 - - 202.125.112.0/20 - - 202.125.176.0/20 - - 202.127.0.0/21 - - 202.127.12.0/22 - - 202.127.16.0/20 - - 202.127.40.0/21 - - 202.127.48.0/20 - - 202.127.112.0/20 - - 202.127.128.0/19 - - 202.127.160.0/21 - - 202.127.192.0/20 - - 202.127.208.0/23 - - 202.127.212.0/22 - - 202.127.216.0/21 - - 202.127.224.0/19 - - 202.129.208.0/24 - - 202.130.0.0/19 - - 202.130.39.0/24 - - 202.130.224.0/19 - - 202.131.16.0/21 - - 202.131.59.0/24 - - 202.131.208.0/20 - - 202.133.32.0/20 - - 202.134.58.0/24 - - 202.134.128.0/20 - - 202.134.208.0/20 - - 202.136.48.0/20 - - 202.136.208.0/20 - - 202.136.224.0/20 - - 202.136.248.0/22 - - 202.136.254.0/23 - - 202.137.231.0/24 - - 202.140.140.0/22 - - 202.140.144.0/20 - - 202.141.160.0/19 - - 202.142.16.0/20 - - 202.143.4.0/22 - - 202.143.16.0/20 - - 202.143.32.0/20 - - 202.143.56.0/21 - - 202.143.100.0/22 - - 202.143.104.0/22 - - 202.146.160.0/20 - - 202.146.186.0/24 - - 202.146.188.0/22 - - 202.146.196.0/22 - - 202.146.200.0/21 - - 202.147.144.0/20 - - 202.148.32.0/20 - - 202.148.64.0/18 - - 202.149.32.0/19 - - 202.149.160.0/19 - - 202.149.224.0/19 - - 202.150.16.0/20 - - 202.150.32.0/20 - - 202.150.56.0/22 - - 202.150.192.0/20 - - 202.150.224.0/19 - - 202.151.0.0/22 - - 202.151.128.0/19 - - 202.152.176.0/20 - - 202.153.0.0/22 - - 202.153.7.0/24 - - 202.153.48.0/20 - - 202.157.192.0/19 - - 202.158.160.0/19 - - 202.158.242.0/24 - - 202.160.140.0/22 - - 202.160.156.0/22 - - 202.160.176.0/20 - - 202.162.67.0/24 - - 202.162.75.0/24 - - 202.164.0.0/20 - - 202.164.96.0/19 - - 202.165.176.0/20 - - 202.165.208.0/20 - - 202.165.239.0/24 - - 202.165.240.0/23 - - 202.165.243.0/24 - - 202.165.245.0/24 - - 202.165.251.0/24 - - 202.165.252.0/22 - - 202.166.224.0/19 - - 202.168.80.0/22 - - 202.168.128.0/20 - - 202.168.160.0/19 - - 202.170.128.0/19 - - 202.170.216.0/21 - - 202.170.224.0/19 - - 202.171.216.0/21 - - 202.171.232.0/24 - - 202.171.235.0/24 - - 202.172.0.0/22 - - 202.172.7.0/24 - - 202.173.0.0/22 - - 202.173.6.0/24 - - 202.173.8.0/21 - - 202.173.112.0/22 - - 202.173.224.0/19 - - 202.174.64.0/20 - - 202.174.124.0/22 - - 202.176.224.0/19 - - 202.179.160.0/20 - - 202.179.240.0/20 - - 202.180.128.0/19 - - 202.180.208.0/21 - - 202.181.8.0/22 - - 202.181.28.0/22 - - 202.181.112.0/20 - - 202.182.32.0/20 - - 202.182.192.0/19 - - 202.189.0.0/18 - - 202.189.80.0/20 - - 202.189.184.0/21 - - 202.191.0.0/24 - - 202.191.68.0/22 - - 202.191.72.0/21 - - 202.191.80.0/20 - - 202.192.0.0/12 - - 203.0.4.0/22 - - 203.0.10.0/23 - - 203.0.18.0/24 - - 203.0.24.0/24 - - 203.0.42.0/23 - - 203.0.45.0/24 - - 203.0.46.0/23 - - 203.0.81.0/24 - - 203.0.82.0/23 - - 203.0.90.0/23 - - 203.0.96.0/23 - - 203.0.104.0/21 - - 203.0.114.0/23 - - 203.0.122.0/24 - - 203.0.128.0/24 - - 203.0.130.0/23 - - 203.0.132.0/22 - - 203.0.137.0/24 - - 203.0.142.0/24 - - 203.0.144.0/24 - - 203.0.146.0/24 - - 203.0.148.0/24 - - 203.0.150.0/23 - - 203.0.152.0/24 - - 203.0.177.0/24 - - 203.0.224.0/24 - - 203.1.4.0/22 - - 203.1.18.0/24 - - 203.1.26.0/23 - - 203.1.65.0/24 - - 203.1.66.0/23 - - 203.1.70.0/23 - - 203.1.76.0/23 - - 203.1.90.0/24 - - 203.1.97.0/24 - - 203.1.98.0/23 - - 203.1.100.0/22 - - 203.1.108.0/24 - - 203.1.253.0/24 - - 203.1.254.0/24 - - 203.2.64.0/21 - - 203.2.73.0/24 - - 203.2.112.0/21 - - 203.2.126.0/23 - - 203.2.140.0/24 - - 203.2.150.0/24 - - 203.2.152.0/22 - - 203.2.156.0/23 - - 203.2.160.0/21 - - 203.2.180.0/23 - - 203.2.196.0/23 - - 203.2.209.0/24 - - 203.2.214.0/23 - - 203.2.226.0/23 - - 203.2.229.0/24 - - 203.2.236.0/23 - - 203.3.68.0/24 - - 203.3.72.0/23 - - 203.3.75.0/24 - - 203.3.80.0/21 - - 203.3.96.0/22 - - 203.3.105.0/24 - - 203.3.112.0/21 - - 203.3.120.0/24 - - 203.3.123.0/24 - - 203.3.135.0/24 - - 203.3.139.0/24 - - 203.3.143.0/24 - - 203.4.132.0/23 - - 203.4.134.0/24 - - 203.4.151.0/24 - - 203.4.152.0/22 - - 203.4.174.0/23 - - 203.4.180.0/24 - - 203.4.186.0/24 - - 203.4.205.0/24 - - 203.4.208.0/22 - - 203.4.227.0/24 - - 203.4.230.0/23 - - 203.5.4.0/23 - - 203.5.7.0/24 - - 203.5.8.0/23 - - 203.5.11.0/24 - - 203.5.21.0/24 - - 203.5.22.0/24 - - 203.5.44.0/24 - - 203.5.46.0/23 - - 203.5.52.0/22 - - 203.5.56.0/23 - - 203.5.60.0/23 - - 203.5.114.0/23 - - 203.5.118.0/24 - - 203.5.120.0/24 - - 203.5.172.0/24 - - 203.5.180.0/23 - - 203.5.182.0/24 - - 203.5.185.0/24 - - 203.5.186.0/24 - - 203.5.188.0/23 - - 203.5.190.0/24 - - 203.5.195.0/24 - - 203.5.214.0/23 - - 203.5.218.0/23 - - 203.6.131.0/24 - - 203.6.136.0/24 - - 203.6.138.0/23 - - 203.6.142.0/24 - - 203.6.150.0/23 - - 203.6.157.0/24 - - 203.6.159.0/24 - - 203.6.224.0/20 - - 203.6.248.0/23 - - 203.7.129.0/24 - - 203.7.138.0/23 - - 203.7.147.0/24 - - 203.7.150.0/23 - - 203.7.158.0/24 - - 203.7.192.0/23 - - 203.7.200.0/24 - - 203.8.0.0/24 - - 203.8.8.0/24 - - 203.8.23.0/24 - - 203.8.70.0/24 - - 203.8.82.0/24 - - 203.8.86.0/23 - - 203.8.91.0/24 - - 203.8.110.0/23 - - 203.8.115.0/24 - - 203.8.166.0/23 - - 203.8.169.0/24 - - 203.8.173.0/24 - - 203.8.184.0/24 - - 203.8.186.0/23 - - 203.8.190.0/23 - - 203.8.192.0/24 - - 203.8.197.0/24 - - 203.8.198.0/23 - - 203.8.203.0/24 - - 203.8.209.0/24 - - 203.8.210.0/23 - - 203.8.212.0/22 - - 203.8.217.0/24 - - 203.8.220.0/24 - - 203.9.32.0/24 - - 203.9.36.0/23 - - 203.9.57.0/24 - - 203.9.63.0/24 - - 203.9.65.0/24 - - 203.9.70.0/23 - - 203.9.72.0/24 - - 203.9.75.0/24 - - 203.9.76.0/23 - - 203.9.96.0/22 - - 203.9.100.0/23 - - 203.9.108.0/24 - - 203.9.158.0/24 - - 203.10.34.0/24 - - 203.10.56.0/24 - - 203.10.74.0/23 - - 203.10.84.0/22 - - 203.10.88.0/24 - - 203.10.95.0/24 - - 203.10.125.0/24 - - 203.11.70.0/24 - - 203.11.76.0/22 - - 203.11.82.0/24 - - 203.11.84.0/22 - - 203.11.100.0/22 - - 203.11.109.0/24 - - 203.11.117.0/24 - - 203.11.122.0/24 - - 203.11.126.0/24 - - 203.11.136.0/22 - - 203.11.141.0/24 - - 203.11.142.0/23 - - 203.11.180.0/22 - - 203.11.208.0/22 - - 203.12.16.0/24 - - 203.12.19.0/24 - - 203.12.24.0/24 - - 203.12.57.0/24 - - 203.12.65.0/24 - - 203.12.66.0/24 - - 203.12.70.0/23 - - 203.12.87.0/24 - - 203.12.90.0/24 - - 203.12.92.0/22 - - 203.12.100.0/23 - - 203.12.103.0/24 - - 203.12.114.0/24 - - 203.12.118.0/24 - - 203.12.130.0/24 - - 203.12.137.0/24 - - 203.12.196.0/22 - - 203.12.211.0/24 - - 203.12.219.0/24 - - 203.12.226.0/24 - - 203.12.240.0/22 - - 203.13.18.0/24 - - 203.13.24.0/24 - - 203.13.44.0/23 - - 203.13.88.0/23 - - 203.13.92.0/22 - - 203.13.145.0/24 - - 203.13.173.0/24 - - 203.13.224.0/23 - - 203.13.227.0/24 - - 203.13.233.0/24 - - 203.14.24.0/22 - - 203.14.33.0/24 - - 203.14.56.0/24 - - 203.14.61.0/24 - - 203.14.62.0/24 - - 203.14.104.0/24 - - 203.14.114.0/23 - - 203.14.118.0/24 - - 203.14.162.0/24 - - 203.14.184.0/21 - - 203.14.192.0/24 - - 203.14.194.0/23 - - 203.14.214.0/24 - - 203.14.231.0/24 - - 203.14.246.0/24 - - 203.15.0.0/20 - - 203.15.20.0/23 - - 203.15.22.0/24 - - 203.15.87.0/24 - - 203.15.88.0/23 - - 203.15.105.0/24 - - 203.15.112.0/21 - - 203.15.130.0/23 - - 203.15.149.0/24 - - 203.15.151.0/24 - - 203.15.156.0/22 - - 203.15.174.0/24 - - 203.15.227.0/24 - - 203.15.232.0/21 - - 203.15.240.0/23 - - 203.15.246.0/24 - - 203.16.10.0/24 - - 203.16.12.0/23 - - 203.16.16.0/21 - - 203.16.27.0/24 - - 203.16.38.0/24 - - 203.16.49.0/24 - - 203.16.50.0/23 - - 203.16.58.0/24 - - 203.16.63.0/24 - - 203.16.133.0/24 - - 203.16.161.0/24 - - 203.16.162.0/24 - - 203.16.186.0/23 - - 203.16.228.0/24 - - 203.16.238.0/24 - - 203.16.240.0/24 - - 203.16.245.0/24 - - 203.17.2.0/24 - - 203.17.18.0/24 - - 203.17.28.0/24 - - 203.17.39.0/24 - - 203.17.56.0/24 - - 203.17.74.0/23 - - 203.17.88.0/23 - - 203.17.136.0/24 - - 203.17.164.0/24 - - 203.17.187.0/24 - - 203.17.190.0/23 - - 203.17.231.0/24 - - 203.17.233.0/24 - - 203.17.248.0/23 - - 203.17.255.0/24 - - 203.18.2.0/23 - - 203.18.4.0/24 - - 203.18.7.0/24 - - 203.18.31.0/24 - - 203.18.37.0/24 - - 203.18.48.0/23 - - 203.18.52.0/24 - - 203.18.72.0/22 - - 203.18.80.0/23 - - 203.18.87.0/24 - - 203.18.100.0/23 - - 203.18.105.0/24 - - 203.18.107.0/24 - - 203.18.110.0/24 - - 203.18.129.0/24 - - 203.18.131.0/24 - - 203.18.132.0/23 - - 203.18.144.0/24 - - 203.18.153.0/24 - - 203.18.199.0/24 - - 203.18.208.0/24 - - 203.18.211.0/24 - - 203.18.215.0/24 - - 203.19.1.0/24 - - 203.19.18.0/24 - - 203.19.24.0/24 - - 203.19.30.0/24 - - 203.19.41.0/24 - - 203.19.44.0/23 - - 203.19.46.0/24 - - 203.19.58.0/24 - - 203.19.60.0/23 - - 203.19.64.0/24 - - 203.19.68.0/24 - - 203.19.72.0/24 - - 203.19.101.0/24 - - 203.19.111.0/24 - - 203.19.131.0/24 - - 203.19.133.0/24 - - 203.19.144.0/24 - - 203.19.147.0/24 - - 203.19.149.0/24 - - 203.19.156.0/24 - - 203.19.176.0/24 - - 203.19.178.0/23 - - 203.19.208.0/24 - - 203.19.228.0/22 - - 203.19.233.0/24 - - 203.19.242.0/24 - - 203.19.248.0/23 - - 203.19.255.0/24 - - 203.20.17.0/24 - - 203.20.40.0/23 - - 203.20.44.0/24 - - 203.20.48.0/24 - - 203.20.61.0/24 - - 203.20.65.0/24 - - 203.20.84.0/23 - - 203.20.89.0/24 - - 203.20.106.0/23 - - 203.20.115.0/24 - - 203.20.117.0/24 - - 203.20.118.0/23 - - 203.20.122.0/24 - - 203.20.126.0/23 - - 203.20.135.0/24 - - 203.20.138.0/23 - - 203.20.140.0/22 - - 203.20.150.0/24 - - 203.20.230.0/24 - - 203.20.232.0/24 - - 203.20.236.0/24 - - 203.21.0.0/23 - - 203.21.2.0/24 - - 203.21.8.0/24 - - 203.21.10.0/24 - - 203.21.18.0/24 - - 203.21.33.0/24 - - 203.21.34.0/24 - - 203.21.41.0/24 - - 203.21.44.0/24 - - 203.21.68.0/24 - - 203.21.82.0/24 - - 203.21.96.0/22 - - 203.21.124.0/24 - - 203.21.136.0/23 - - 203.21.145.0/24 - - 203.21.206.0/24 - - 203.22.24.0/24 - - 203.22.28.0/23 - - 203.22.31.0/24 - - 203.22.68.0/24 - - 203.22.76.0/24 - - 203.22.84.0/24 - - 203.22.87.0/24 - - 203.22.92.0/22 - - 203.22.99.0/24 - - 203.22.106.0/24 - - 203.22.122.0/23 - - 203.22.131.0/24 - - 203.22.163.0/24 - - 203.22.166.0/24 - - 203.22.170.0/24 - - 203.22.176.0/21 - - 203.22.194.0/24 - - 203.22.242.0/23 - - 203.22.245.0/24 - - 203.22.246.0/24 - - 203.22.252.0/23 - - 203.23.0.0/24 - - 203.23.47.0/24 - - 203.23.61.0/24 - - 203.23.62.0/23 - - 203.23.73.0/24 - - 203.23.85.0/24 - - 203.23.92.0/22 - - 203.23.98.0/24 - - 203.23.107.0/24 - - 203.23.112.0/24 - - 203.23.130.0/24 - - 203.23.140.0/23 - - 203.23.172.0/24 - - 203.23.182.0/24 - - 203.23.186.0/23 - - 203.23.192.0/24 - - 203.23.197.0/24 - - 203.23.198.0/24 - - 203.23.204.0/22 - - 203.23.224.0/24 - - 203.23.226.0/23 - - 203.23.228.0/22 - - 203.23.249.0/24 - - 203.23.251.0/24 - - 203.24.13.0/24 - - 203.24.18.0/24 - - 203.24.27.0/24 - - 203.24.43.0/24 - - 203.24.56.0/24 - - 203.24.58.0/24 - - 203.24.67.0/24 - - 203.24.74.0/24 - - 203.24.79.0/24 - - 203.24.80.0/23 - - 203.24.84.0/23 - - 203.24.86.0/24 - - 203.24.90.0/24 - - 203.24.111.0/24 - - 203.24.112.0/24 - - 203.24.116.0/24 - - 203.24.122.0/23 - - 203.24.145.0/24 - - 203.24.152.0/23 - - 203.24.157.0/24 - - 203.24.161.0/24 - - 203.24.167.0/24 - - 203.24.186.0/23 - - 203.24.199.0/24 - - 203.24.202.0/24 - - 203.24.212.0/23 - - 203.24.217.0/24 - - 203.24.219.0/24 - - 203.24.244.0/24 - - 203.25.19.0/24 - - 203.25.20.0/23 - - 203.25.46.0/24 - - 203.25.64.0/23 - - 203.25.91.0/24 - - 203.25.99.0/24 - - 203.25.100.0/24 - - 203.25.106.0/24 - - 203.25.131.0/24 - - 203.25.135.0/24 - - 203.25.138.0/24 - - 203.25.147.0/24 - - 203.25.153.0/24 - - 203.25.154.0/23 - - 203.25.164.0/24 - - 203.25.166.0/24 - - 203.25.174.0/23 - - 203.25.180.0/24 - - 203.25.182.0/24 - - 203.25.191.0/24 - - 203.25.199.0/24 - - 203.25.200.0/24 - - 203.25.202.0/23 - - 203.25.208.0/20 - - 203.25.229.0/24 - - 203.25.235.0/24 - - 203.25.236.0/24 - - 203.25.242.0/24 - - 203.26.12.0/24 - - 203.26.34.0/24 - - 203.26.49.0/24 - - 203.26.50.0/24 - - 203.26.55.0/24 - - 203.26.56.0/23 - - 203.26.60.0/24 - - 203.26.65.0/24 - - 203.26.68.0/24 - - 203.26.76.0/24 - - 203.26.80.0/24 - - 203.26.84.0/24 - - 203.26.97.0/24 - - 203.26.102.0/23 - - 203.26.115.0/24 - - 203.26.116.0/24 - - 203.26.129.0/24 - - 203.26.143.0/24 - - 203.26.144.0/24 - - 203.26.148.0/23 - - 203.26.154.0/24 - - 203.26.158.0/23 - - 203.26.161.0/24 - - 203.26.170.0/24 - - 203.26.173.0/24 - - 203.26.176.0/24 - - 203.26.185.0/24 - - 203.26.202.0/23 - - 203.26.210.0/24 - - 203.26.214.0/24 - - 203.26.222.0/24 - - 203.26.224.0/24 - - 203.26.228.0/24 - - 203.26.232.0/24 - - 203.27.0.0/24 - - 203.27.10.0/24 - - 203.27.15.0/24 - - 203.27.16.0/24 - - 203.27.20.0/24 - - 203.27.22.0/23 - - 203.27.40.0/24 - - 203.27.45.0/24 - - 203.27.53.0/24 - - 203.27.65.0/24 - - 203.27.66.0/24 - - 203.27.81.0/24 - - 203.27.88.0/24 - - 203.27.102.0/24 - - 203.27.109.0/24 - - 203.27.117.0/24 - - 203.27.121.0/24 - - 203.27.122.0/23 - - 203.27.125.0/24 - - 203.27.200.0/24 - - 203.27.202.0/24 - - 203.27.233.0/24 - - 203.27.241.0/24 - - 203.27.250.0/24 - - 203.28.10.0/24 - - 203.28.12.0/24 - - 203.28.33.0/24 - - 203.28.34.0/23 - - 203.28.43.0/24 - - 203.28.44.0/24 - - 203.28.54.0/24 - - 203.28.56.0/24 - - 203.28.73.0/24 - - 203.28.74.0/24 - - 203.28.76.0/24 - - 203.28.86.0/24 - - 203.28.88.0/24 - - 203.28.112.0/24 - - 203.28.131.0/24 - - 203.28.136.0/24 - - 203.28.140.0/24 - - 203.28.145.0/24 - - 203.28.165.0/24 - - 203.28.169.0/24 - - 203.28.170.0/24 - - 203.28.178.0/23 - - 203.28.185.0/24 - - 203.28.187.0/24 - - 203.28.196.0/24 - - 203.28.226.0/23 - - 203.28.239.0/24 - - 203.29.2.0/24 - - 203.29.8.0/23 - - 203.29.13.0/24 - - 203.29.14.0/24 - - 203.29.28.0/24 - - 203.29.46.0/24 - - 203.29.57.0/24 - - 203.29.61.0/24 - - 203.29.63.0/24 - - 203.29.69.0/24 - - 203.29.73.0/24 - - 203.29.81.0/24 - - 203.29.90.0/24 - - 203.29.95.0/24 - - 203.29.100.0/24 - - 203.29.103.0/24 - - 203.29.112.0/24 - - 203.29.120.0/22 - - 203.29.182.0/23 - - 203.29.187.0/24 - - 203.29.189.0/24 - - 203.29.190.0/24 - - 203.29.205.0/24 - - 203.29.210.0/24 - - 203.29.217.0/24 - - 203.29.227.0/24 - - 203.29.231.0/24 - - 203.29.233.0/24 - - 203.29.234.0/24 - - 203.29.248.0/24 - - 203.29.254.0/23 - - 203.30.16.0/23 - - 203.30.25.0/24 - - 203.30.29.0/24 - - 203.30.66.0/24 - - 203.30.81.0/24 - - 203.30.87.0/24 - - 203.30.111.0/24 - - 203.30.121.0/24 - - 203.30.123.0/24 - - 203.30.152.0/24 - - 203.30.156.0/24 - - 203.30.162.0/24 - - 203.30.173.0/24 - - 203.30.175.0/24 - - 203.30.187.0/24 - - 203.30.194.0/24 - - 203.30.217.0/24 - - 203.30.220.0/24 - - 203.30.222.0/24 - - 203.30.232.0/23 - - 203.30.235.0/24 - - 203.30.240.0/23 - - 203.30.246.0/24 - - 203.30.250.0/23 - - 203.31.45.0/24 - - 203.31.46.0/24 - - 203.31.49.0/24 - - 203.31.51.0/24 - - 203.31.54.0/23 - - 203.31.69.0/24 - - 203.31.72.0/24 - - 203.31.80.0/24 - - 203.31.85.0/24 - - 203.31.97.0/24 - - 203.31.105.0/24 - - 203.31.106.0/24 - - 203.31.108.0/23 - - 203.31.124.0/24 - - 203.31.162.0/24 - - 203.31.174.0/24 - - 203.31.177.0/24 - - 203.31.181.0/24 - - 203.31.187.0/24 - - 203.31.189.0/24 - - 203.31.204.0/24 - - 203.31.220.0/24 - - 203.31.222.0/23 - - 203.31.225.0/24 - - 203.31.229.0/24 - - 203.31.248.0/23 - - 203.31.253.0/24 - - 203.32.20.0/24 - - 203.32.48.0/23 - - 203.32.56.0/24 - - 203.32.60.0/24 - - 203.32.62.0/24 - - 203.32.68.0/23 - - 203.32.76.0/24 - - 203.32.81.0/24 - - 203.32.84.0/23 - - 203.32.95.0/24 - - 203.32.102.0/24 - - 203.32.105.0/24 - - 203.32.130.0/24 - - 203.32.133.0/24 - - 203.32.140.0/24 - - 203.32.152.0/24 - - 203.32.186.0/23 - - 203.32.192.0/24 - - 203.32.196.0/24 - - 203.32.203.0/24 - - 203.32.204.0/23 - - 203.32.212.0/24 - - 203.33.4.0/24 - - 203.33.7.0/24 - - 203.33.12.0/23 - - 203.33.21.0/24 - - 203.33.26.0/24 - - 203.33.32.0/24 - - 203.33.63.0/24 - - 203.33.64.0/24 - - 203.33.67.0/24 - - 203.33.68.0/24 - - 203.33.73.0/24 - - 203.33.79.0/24 - - 203.33.100.0/24 - - 203.33.122.0/24 - - 203.33.129.0/24 - - 203.33.131.0/24 - - 203.33.145.0/24 - - 203.33.156.0/24 - - 203.33.158.0/23 - - 203.33.174.0/24 - - 203.33.185.0/24 - - 203.33.200.0/24 - - 203.33.202.0/23 - - 203.33.204.0/24 - - 203.33.206.0/23 - - 203.33.214.0/23 - - 203.33.224.0/23 - - 203.33.226.0/24 - - 203.33.233.0/24 - - 203.33.243.0/24 - - 203.33.250.0/24 - - 203.34.4.0/24 - - 203.34.21.0/24 - - 203.34.27.0/24 - - 203.34.39.0/24 - - 203.34.48.0/23 - - 203.34.54.0/24 - - 203.34.56.0/23 - - 203.34.67.0/24 - - 203.34.69.0/24 - - 203.34.76.0/24 - - 203.34.92.0/24 - - 203.34.106.0/24 - - 203.34.113.0/24 - - 203.34.147.0/24 - - 203.34.150.0/24 - - 203.34.152.0/23 - - 203.34.161.0/24 - - 203.34.162.0/24 - - 203.34.187.0/24 - - 203.34.192.0/21 - - 203.34.204.0/22 - - 203.34.232.0/24 - - 203.34.240.0/24 - - 203.34.242.0/24 - - 203.34.245.0/24 - - 203.34.251.0/24 - - 203.55.2.0/23 - - 203.55.4.0/24 - - 203.55.10.0/24 - - 203.55.13.0/24 - - 203.55.22.0/24 - - 203.55.30.0/24 - - 203.55.93.0/24 - - 203.55.101.0/24 - - 203.55.109.0/24 - - 203.55.110.0/24 - - 203.55.116.0/23 - - 203.55.119.0/24 - - 203.55.128.0/23 - - 203.55.146.0/23 - - 203.55.192.0/24 - - 203.55.196.0/24 - - 203.55.218.0/23 - - 203.55.221.0/24 - - 203.55.224.0/24 - - 203.56.1.0/24 - - 203.56.4.0/24 - - 203.56.12.0/24 - - 203.56.24.0/24 - - 203.56.38.0/24 - - 203.56.40.0/24 - - 203.56.46.0/24 - - 203.56.50.0/23 - - 203.56.52.0/22 - - 203.56.68.0/23 - - 203.56.82.0/23 - - 203.56.84.0/23 - - 203.56.95.0/24 - - 203.56.110.0/24 - - 203.56.121.0/24 - - 203.56.161.0/24 - - 203.56.169.0/24 - - 203.56.172.0/23 - - 203.56.175.0/24 - - 203.56.183.0/24 - - 203.56.185.0/24 - - 203.56.187.0/24 - - 203.56.192.0/24 - - 203.56.198.0/24 - - 203.56.201.0/24 - - 203.56.208.0/23 - - 203.56.210.0/24 - - 203.56.214.0/24 - - 203.56.216.0/24 - - 203.56.227.0/24 - - 203.56.228.0/24 - - 203.56.232.0/24 - - 203.56.240.0/24 - - 203.56.252.0/24 - - 203.56.254.0/24 - - 203.57.5.0/24 - - 203.57.6.0/24 - - 203.57.12.0/23 - - 203.57.28.0/24 - - 203.57.39.0/24 - - 203.57.46.0/24 - - 203.57.58.0/24 - - 203.57.61.0/24 - - 203.57.66.0/24 - - 203.57.69.0/24 - - 203.57.70.0/23 - - 203.57.73.0/24 - - 203.57.90.0/24 - - 203.57.101.0/24 - - 203.57.109.0/24 - - 203.57.123.0/24 - - 203.57.157.0/24 - - 203.57.200.0/24 - - 203.57.202.0/24 - - 203.57.206.0/24 - - 203.57.222.0/24 - - 203.57.224.0/20 - - 203.57.246.0/23 - - 203.57.249.0/24 - - 203.57.253.0/24 - - 203.57.254.0/23 - - 203.62.2.0/24 - - 203.62.131.0/24 - - 203.62.139.0/24 - - 203.62.161.0/24 - - 203.62.197.0/24 - - 203.62.228.0/22 - - 203.62.234.0/24 - - 203.62.246.0/24 - - 203.65.240.0/22 - - 203.76.160.0/22 - - 203.76.168.0/22 - - 203.76.208.0/21 - - 203.76.216.0/22 - - 203.76.240.0/22 - - 203.77.180.0/22 - - 203.78.48.0/20 - - 203.78.156.0/22 - - 203.79.0.0/20 - - 203.80.4.0/23 - - 203.80.32.0/20 - - 203.80.57.0/24 - - 203.80.129.0/24 - - 203.80.132.0/22 - - 203.80.140.0/22 - - 203.80.144.0/20 - - 203.81.0.0/21 - - 203.81.16.0/20 - - 203.81.244.0/22 - - 203.82.0.0/23 - - 203.82.16.0/21 - - 203.82.112.0/20 - - 203.82.224.0/20 - - 203.83.0.0/22 - - 203.83.12.0/22 - - 203.83.56.0/21 - - 203.83.224.0/20 - - 203.86.0.0/18 - - 203.86.64.0/19 - - 203.86.250.0/24 - - 203.86.254.0/23 - - 203.88.32.0/19 - - 203.88.100.0/22 - - 203.88.192.0/19 - - 203.89.0.0/22 - - 203.89.100.0/22 - - 203.89.136.0/22 - - 203.89.144.0/24 - - 203.90.0.0/22 - - 203.90.8.0/21 - - 203.90.128.0/18 - - 203.90.192.0/19 - - 203.91.32.0/19 - - 203.91.96.0/20 - - 203.91.120.0/21 - - 203.92.0.0/22 - - 203.92.6.0/24 - - 203.92.160.0/19 - - 203.93.0.0/16 - - 203.94.0.0/19 - - 203.95.0.0/21 - - 203.95.96.0/19 - - 203.95.128.0/18 - - 203.95.200.0/21 - - 203.95.208.0/22 - - 203.95.224.0/19 - - 203.99.8.0/21 - - 203.99.16.0/22 - - 203.99.30.0/23 - - 203.99.80.0/20 - - 203.100.32.0/20 - - 203.100.58.0/24 - - 203.100.60.0/24 - - 203.100.63.0/24 - - 203.100.80.0/20 - - 203.100.96.0/19 - - 203.100.192.0/20 - - 203.104.32.0/20 - - 203.105.96.0/19 - - 203.105.128.0/19 - - 203.107.0.0/19 - - 203.107.32.0/20 - - 203.107.52.0/22 - - 203.107.56.0/21 - - 203.107.69.0/24 - - 203.107.70.0/23 - - 203.107.72.0/21 - - 203.107.80.0/20 - - 203.107.96.0/19 - - 203.110.160.0/19 - - 203.110.208.0/20 - - 203.110.232.0/23 - - 203.110.234.0/24 - - 203.114.80.0/20 - - 203.114.244.0/22 - - 203.118.192.0/19 - - 203.118.241.0/24 - - 203.118.248.0/22 - - 203.119.24.0/23 - - 203.119.32.0/24 - - 203.119.34.0/23 - - 203.119.80.0/22 - - 203.119.85.0/24 - - 203.119.113.0/24 - - 203.119.114.0/23 - - 203.119.116.0/22 - - 203.119.120.0/21 - - 203.119.128.0/17 - - 203.123.58.0/24 - - 203.128.32.0/19 - - 203.128.96.0/19 - - 203.128.128.0/24 - - 203.128.224.0/21 - - 203.130.32.0/20 - - 203.132.32.0/19 - - 203.134.240.0/22 - - 203.134.246.0/23 - - 203.135.96.0/19 - - 203.135.160.0/20 - - 203.142.12.0/23 - - 203.142.219.0/24 - - 203.142.224.0/19 - - 203.145.0.0/19 - - 203.148.0.0/18 - - 203.148.64.0/20 - - 203.148.80.0/22 - - 203.148.86.0/23 - - 203.149.92.0/22 - - 203.152.64.0/19 - - 203.152.128.0/19 - - 203.153.0.0/22 - - 203.156.192.0/18 - - 203.158.16.0/21 - - 203.160.129.0/24 - - 203.160.192.0/19 - - 203.160.225.14/31 - - 203.160.225.206/31 - - 203.161.0.0/22 - - 203.161.180.0/24 - - 203.161.183.0/24 - - 203.161.192.0/19 - - 203.166.160.0/19 - - 203.167.28.0/22 - - 203.168.0.0/19 - - 203.170.58.0/23 - - 203.171.0.0/22 - - 203.171.208.0/24 - - 203.171.224.0/20 - - 203.174.4.0/24 - - 203.174.6.0/24 - - 203.174.96.0/20 - - 203.175.128.0/19 - - 203.175.192.0/18 - - 203.176.0.0/18 - - 203.176.64.0/19 - - 203.176.168.0/21 - - 203.181.102.42/32 - - 203.181.102.58/32 - - 203.184.80.0/20 - - 203.187.160.0/19 - - 203.189.0.0/23 - - 203.189.6.0/23 - - 203.189.112.0/22 - - 203.189.192.0/19 - - 203.189.240.0/22 - - 203.190.96.0/20 - - 203.190.249.0/24 - - 203.191.0.0/23 - - 203.191.2.0/24 - - 203.191.5.0/24 - - 203.191.7.0/24 - - 203.191.29.0/24 - - 203.191.31.0/24 - - 203.191.64.0/18 - - 203.191.133.0/24 - - 203.191.144.0/20 - - 203.192.0.0/19 - - 203.193.224.0/19 - - 203.195.64.0/19 - - 203.195.128.0/17 - - 203.196.0.0/20 - - 203.196.28.0/22 - - 203.201.181.0/24 - - 203.201.182.0/24 - - 203.202.236.0/22 - - 203.205.64.0/19 - - 203.207.64.0/18 - - 203.207.128.0/17 - - 203.208.0.0/20 - - 203.208.16.0/22 - - 203.208.32.0/19 - - 203.208.146.0/31 - - 203.208.146.76/31 - - 203.208.151.106/31 - - 203.208.171.60/31 - - 203.208.171.80/31 - - 203.209.224.0/19 - - 203.212.0.0/20 - - 203.212.80.0/20 - - 203.215.146.0/24 - - 203.217.164.0/22 - - 203.223.0.0/20 - - 203.223.16.0/24 - - 203.223.22.0/24 - - 203.234.255.174/32 - - 203.234.255.178/32 - - 204.55.160.0/24 - - 204.74.96.0/24 - - 204.114.176.0/23 - - 206.219.44.0/23 - - 206.219.50.0/23 - - 206.219.52.0/23 - - 207.68.174.8/29 - - 207.89.20.0/24 - - 210.2.0.0/23 - - 210.2.2.0/24 - - 210.2.5.0/24 - - 210.2.6.0/23 - - 210.2.8.0/21 - - 210.2.24.0/21 - - 210.5.0.0/19 - - 210.5.56.0/29 - - 210.5.56.8/30 - - 210.5.56.12/32 - - 210.5.56.15/32 - - 210.5.56.64/27 - - 210.5.60.0/24 - - 210.5.128.0/19 - - 210.7.56.0/21 - - 210.12.0.0/15 - - 210.14.64.0/19 - - 210.14.112.0/20 - - 210.14.128.0/17 - - 210.15.0.0/17 - - 210.15.128.0/18 - - 210.16.128.0/21 - - 210.16.136.0/22 - - 210.16.156.0/22 - - 210.16.160.0/19 - - 210.21.0.0/16 - - 210.22.0.0/16 - - 210.23.32.0/19 - - 210.25.0.0/16 - - 210.26.0.0/15 - - 210.28.0.0/14 - - 210.32.0.0/12 - - 210.51.0.0/16 - - 210.52.0.0/18 - - 210.52.64.0/23 - - 210.52.66.0/24 - - 210.52.68.0/22 - - 210.52.72.0/21 - - 210.52.80.0/20 - - 210.52.96.0/21 - - 210.52.104.0/22 - - 210.52.108.0/24 - - 210.52.110.0/23 - - 210.52.112.0/20 - - 210.52.128.0/22 - - 210.52.132.0/25 - - 210.52.132.128/26 - - 210.52.132.192/27 - - 210.52.132.224/30 - - 210.52.132.228/31 - - 210.52.132.231/32 - - 210.52.132.232/31 - - 210.52.132.235/32 - - 210.52.132.236/30 - - 210.52.132.240/28 - - 210.52.133.0/24 - - 210.52.134.0/23 - - 210.52.136.0/21 - - 210.52.144.0/20 - - 210.52.160.0/19 - - 210.52.192.0/18 - - 210.53.0.0/18 - - 210.53.64.0/19 - - 210.53.96.0/20 - - 210.53.112.0/21 - - 210.53.120.0/22 - - 210.53.124.0/23 - - 210.53.126.0/25 - - 210.53.126.128/28 - - 210.53.126.144/29 - - 210.53.126.156/30 - - 210.53.126.160/27 - - 210.53.126.192/27 - - 210.53.126.224/28 - - 210.53.126.244/30 - - 210.53.126.252/30 - - 210.53.127.4/30 - - 210.53.127.8/29 - - 210.53.127.16/30 - - 210.53.127.24/29 - - 210.53.127.32/27 - - 210.53.127.64/26 - - 210.53.127.128/25 - - 210.53.128.0/17 - - 210.56.192.0/19 - - 210.72.0.0/14 - - 210.76.0.0/15 - - 210.78.0.0/16 - - 210.79.64.0/18 - - 210.79.224.0/19 - - 210.82.0.0/15 - - 210.87.128.0/18 - - 210.185.192.0/18 - - 210.192.96.0/19 - - 211.22.33.60/31 - - 211.22.33.112/31 - - 211.22.33.224/31 - - 211.40.6.110/31 - - 211.40.6.158/32 - - 211.64.0.0/13 - - 211.72.233.104/31 - - 211.72.233.108/31 - - 211.72.233.112/31 - - 211.72.233.116/31 - - 211.72.233.120/31 - - 211.72.233.124/31 - - 211.72.233.136/31 - - 211.72.233.140/31 - - 211.72.233.176/31 - - 211.72.233.180/31 - - 211.72.233.184/31 - - 211.72.233.188/31 - - 211.72.233.192/31 - - 211.72.233.196/31 - - 211.72.233.200/31 - - 211.72.233.204/31 - - 211.72.233.208/31 - - 211.72.233.212/31 - - 211.72.233.216/31 - - 211.72.233.220/31 - - 211.72.233.224/31 - - 211.72.233.228/31 - - 211.72.233.236/31 - - 211.72.233.240/31 - - 211.80.0.0/12 - - 211.96.0.0/14 - - 211.100.0.0/17 - - 211.100.128.0/19 - - 211.100.160.0/20 - - 211.100.184.0/21 - - 211.100.192.0/18 - - 211.101.0.0/16 - - 211.102.0.0/15 - - 211.136.0.0/13 - - 211.144.0.0/13 - - 211.152.0.0/17 - - 211.152.134.0/23 - - 211.152.138.0/23 - - 211.152.140.0/22 - - 211.152.150.0/23 - - 211.152.157.0/24 - - 211.152.158.0/23 - - 211.152.160.0/19 - - 211.152.192.0/18 - - 211.153.0.0/16 - - 211.154.0.0/19 - - 211.154.32.0/20 - - 211.154.48.0/21 - - 211.154.64.0/18 - - 211.154.128.0/17 - - 211.155.0.0/18 - - 211.155.67.0/24 - - 211.155.68.0/24 - - 211.155.72.0/21 - - 211.155.80.0/20 - - 211.155.97.0/24 - - 211.155.98.0/23 - - 211.155.100.0/22 - - 211.155.104.0/21 - - 211.155.113.0/24 - - 211.155.117.0/24 - - 211.155.118.0/23 - - 211.155.120.0/21 - - 211.155.128.0/17 - - 211.156.0.0/18 - - 211.156.64.0/19 - - 211.156.96.0/21 - - 211.156.104.0/22 - - 211.156.108.0/23 - - 211.156.112.0/20 - - 211.156.128.0/17 - - 211.157.0.0/16 - - 211.158.0.0/15 - - 211.160.0.0/13 - - 212.64.0.0/17 - - 212.129.128.0/17 - - 218.0.0.0/12 - - 218.16.0.0/13 - - 218.24.0.0/14 - - 218.28.0.0/15 - - 218.30.0.0/19 - - 218.30.64.0/18 - - 218.30.128.0/18 - - 218.30.192.0/19 - - 218.30.224.0/20 - - 218.30.240.0/21 - - 218.30.248.0/22 - - 218.30.252.0/25 - - 218.30.252.128/26 - - 218.30.252.194/31 - - 218.30.252.196/30 - - 218.30.252.200/29 - - 218.30.252.208/28 - - 218.30.252.224/27 - - 218.30.253.0/24 - - 218.30.254.0/23 - - 218.31.0.0/16 - - 218.56.0.0/13 - - 218.64.0.0/11 - - 218.96.0.0/15 - - 218.98.0.0/18 - - 218.98.96.0/21 - - 218.98.104.0/22 - - 218.98.108.0/23 - - 218.98.110.0/24 - - 218.98.112.0/20 - - 218.98.128.0/19 - - 218.98.192.0/18 - - 218.99.0.0/16 - - 218.100.96.0/19 - - 218.100.128.0/17 - - 218.104.0.0/16 - - 218.105.0.0/17 - - 218.105.128.0/26 - - 218.105.128.64/31 - - 218.105.128.67/32 - - 218.105.128.68/31 - - 218.105.128.71/32 - - 218.105.128.72/29 - - 218.105.128.80/28 - - 218.105.128.96/27 - - 218.105.128.128/25 - - 218.105.129.0/24 - - 218.105.130.0/23 - - 218.105.132.0/22 - - 218.105.136.0/21 - - 218.105.144.0/20 - - 218.105.160.0/19 - - 218.105.192.0/18 - - 218.106.0.0/15 - - 218.108.0.0/15 - - 218.185.192.0/19 - - 218.192.0.0/12 - - 218.240.0.0/14 - - 218.244.0.0/15 - - 218.246.0.0/17 - - 218.246.129.0/24 - - 218.246.131.0/24 - - 218.246.132.0/23 - - 218.246.134.0/24 - - 218.246.139.0/24 - - 218.246.144.0/20 - - 218.246.160.0/19 - - 218.246.192.0/18 - - 218.247.0.0/18 - - 218.247.96.0/19 - - 218.247.128.0/17 - - 218.249.0.0/16 - - 219.72.0.0/16 - - 219.82.0.0/16 - - 219.83.128.0/17 - - 219.90.68.0/22 - - 219.90.72.0/21 - - 219.128.0.0/11 - - 219.216.0.0/13 - - 219.224.0.0/13 - - 219.232.0.0/15 - - 219.234.0.0/21 - - 219.234.9.0/24 - - 219.234.10.0/23 - - 219.234.12.0/22 - - 219.234.32.0/19 - - 219.234.64.0/18 - - 219.234.128.0/17 - - 219.235.0.0/16 - - 219.236.0.0/14 - - 219.242.0.0/15 - - 219.244.0.0/14 - - 220.101.192.0/18 - - 220.112.0.0/14 - - 220.152.128.0/17 - - 220.154.0.0/15 - - 220.158.241.0/24 - - 220.158.243.0/24 - - 220.160.0.0/11 - - 220.192.0.0/12 - - 220.231.0.0/18 - - 220.231.128.0/17 - - 220.232.64.0/18 - - 220.234.0.0/16 - - 220.242.0.0/24 - - 220.242.12.0/23 - - 220.242.14.0/24 - - 220.242.17.0/24 - - 220.242.18.0/23 - - 220.242.20.0/24 - - 220.242.32.0/20 - - 220.242.48.0/23 - - 220.242.53.0/24 - - 220.242.55.0/24 - - 220.242.56.0/22 - - 220.242.60.0/23 - - 220.242.62.0/24 - - 220.242.64.0/19 - - 220.242.96.0/20 - - 220.242.112.0/21 - - 220.242.120.0/22 - - 220.242.124.0/23 - - 220.242.126.0/24 - - 220.242.173.0/24 - - 220.242.197.0/24 - - 220.242.205.0/24 - - 220.242.206.0/23 - - 220.242.214.0/23 - - 220.242.216.0/21 - - 220.242.224.0/19 - - 220.243.0.0/17 - - 220.243.128.0/18 - - 220.243.204.0/24 - - 220.243.214.0/24 - - 220.243.217.0/24 - - 220.243.218.0/24 - - 220.243.238.0/24 - - 220.247.136.0/21 - - 220.248.0.0/14 - - 220.252.0.0/16 - - 221.0.0.0/13 - - 221.8.0.0/14 - - 221.12.0.0/17 - - 221.12.128.0/18 - - 221.13.0.0/16 - - 221.14.0.0/15 - - 221.122.0.0/15 - - 221.128.128.0/17 - - 221.129.0.0/16 - - 221.130.0.0/15 - - 221.133.224.0/19 - - 221.136.0.0/15 - - 221.172.0.0/14 - - 221.176.0.0/19 - - 221.176.32.0/20 - - 221.176.48.0/21 - - 221.176.56.0/24 - - 221.176.58.0/23 - - 221.176.60.0/22 - - 221.176.64.0/18 - - 221.176.128.0/17 - - 221.177.0.0/16 - - 221.178.0.0/15 - - 221.180.0.0/14 - - 221.192.0.0/14 - - 221.196.0.0/15 - - 221.198.0.0/16 - - 221.199.0.0/17 - - 221.199.128.0/18 - - 221.199.192.0/20 - - 221.199.224.0/19 - - 221.200.0.0/13 - - 221.208.0.0/12 - - 221.224.0.0/12 - - 222.16.0.0/12 - - 222.32.0.0/11 - - 222.64.0.0/11 - - 222.125.0.0/16 - - 222.126.128.0/25 - - 222.126.128.128/27 - - 222.126.128.160/30 - - 222.126.128.164/31 - - 222.126.128.178/31 - - 222.126.128.180/30 - - 222.126.128.184/29 - - 222.126.128.192/26 - - 222.126.129.0/24 - - 222.126.130.0/24 - - 222.126.131.0/28 - - 222.126.131.16/30 - - 222.126.131.20/31 - - 222.126.131.22/32 - - 222.126.131.24/29 - - 222.126.131.32/27 - - 222.126.131.64/26 - - 222.126.131.128/25 - - 222.126.132.0/22 - - 222.126.136.0/21 - - 222.126.144.0/20 - - 222.126.160.0/21 - - 222.126.168.0/22 - - 222.126.172.0/23 - - 222.126.174.40/29 - - 222.126.174.76/30 - - 222.126.174.88/29 - - 222.126.174.144/28 - - 222.126.178.0/23 - - 222.126.180.0/22 - - 222.126.184.0/21 - - 222.126.192.0/21 - - 222.126.200.104/29 - - 222.126.206.0/23 - - 222.126.208.0/22 - - 222.126.212.0/26 - - 222.126.212.64/27 - - 222.126.212.96/28 - - 222.126.212.112/29 - - 222.126.212.128/25 - - 222.126.213.0/24 - - 222.126.214.0/23 - - 222.126.216.0/21 - - 222.126.224.0/19 - - 222.128.0.0/12 - - 222.160.0.0/14 - - 222.168.0.0/13 - - 222.176.0.0/12 - - 222.192.0.0/11 - - 222.240.0.0/13 - - 222.248.0.0/15 - - 223.0.0.0/14 - - 223.4.0.0/16 - - 223.5.0.0/22 - - 223.5.4.0/24 - - 223.5.6.0/23 - - 223.5.8.0/21 - - 223.5.16.0/20 - - 223.5.32.0/19 - - 223.5.64.0/18 - - 223.5.128.0/17 - - 223.6.0.0/22 - - 223.6.4.0/23 - - 223.6.7.0/24 - - 223.6.8.0/21 - - 223.6.16.0/20 - - 223.6.32.0/19 - - 223.6.64.0/18 - - 223.6.128.0/17 - - 223.7.0.0/16 - - 223.8.0.0/13 - - 223.20.0.0/15 - - 223.27.184.0/22 - - 223.29.208.0/22 - - 223.29.252.0/22 - - 223.64.0.0/11 - - 223.96.0.0/12 - - 223.112.0.0/14 - - 223.116.0.0/15 - - 223.120.0.0/13 - - 223.128.0.0/15 - - 223.144.0.0/12 - - 223.160.0.0/14 - - 223.166.0.0/15 - - 223.192.0.0/15 - - 223.198.0.0/15 - - 223.201.4.0/22 - - 223.201.8.0/21 - - 223.201.16.0/20 - - 223.201.32.0/19 - - 223.201.64.0/18 - - 223.201.128.0/17 - - 223.202.0.0/15 - - 223.208.0.0/13 - - 223.220.0.0/15 - - 223.223.176.0/20 - - 223.223.192.0/20 - - 223.240.0.0/13 - - 223.248.0.0/14 - - 223.252.128.0/19 - - 223.252.192.0/18 - - 223.254.0.0/16 - - 223.255.0.0/17 - - 223.255.236.0/22 - - 223.255.252.0/23 \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/FCM b/luci-app-openclash/root/etc/openclash/rule_provider/FCM deleted file mode 100644 index 1b60530e..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/FCM +++ /dev/null @@ -1,37 +0,0 @@ -payload: - # > Google FCM - - DOMAIN,alt1-mtalk.google.com - - DOMAIN,alt2-mtalk.google.com - - DOMAIN,alt3-mtalk.google.com - - DOMAIN,alt4-mtalk.google.com - - DOMAIN,alt5-mtalk.google.com - - DOMAIN,alt6-mtalk.google.com - - DOMAIN,alt7-mtalk.google.com - - DOMAIN,alt8-mtalk.google.com - - DOMAIN,mtalk.google.com - - IP-CIDR,64.233.177.188/32,no-resolve - - IP-CIDR,64.233.186.188/32,no-resolve - - IP-CIDR,64.233.187.188/32,no-resolve - - IP-CIDR,64.233.188.188/32,no-resolve - - IP-CIDR,64.233.189.188/32,no-resolve - - IP-CIDR,74.125.23.188/32,no-resolve - - IP-CIDR,74.125.24.188/32,no-resolve - - IP-CIDR,74.125.28.188/32,no-resolve - - IP-CIDR,74.125.127.188/32,no-resolve - - IP-CIDR,74.125.137.188/32,no-resolve - - IP-CIDR,74.125.203.188/32,no-resolve - - IP-CIDR,74.125.204.188/32,no-resolve - - IP-CIDR,74.125.206.188/32,no-resolve - - IP-CIDR,108.177.125.188/32,no-resolve - - IP-CIDR,142.250.4.188/32,no-resolve - - IP-CIDR,142.250.10.188/32,no-resolve - - IP-CIDR,142.250.31.188/32,no-resolve - - IP-CIDR,142.250.96.188/32,no-resolve - - IP-CIDR,172.217.194.188/32,no-resolve - - IP-CIDR,172.217.218.188/32,no-resolve - - IP-CIDR,172.217.219.188/32,no-resolve - - IP-CIDR,172.253.63.188/32,no-resolve - - IP-CIDR,172.253.122.188/32,no-resolve - - IP-CIDR,173.194.175.188/32,no-resolve - - IP-CIDR,173.194.218.188/32,no-resolve - - IP-CIDR,209.85.233.188/32,no-resolve \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Fox+ b/luci-app-openclash/root/etc/openclash/rule_provider/Fox+ deleted file mode 100644 index f69c4a98..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Fox+ +++ /dev/null @@ -1,6 +0,0 @@ -payload: - # > Fox+ (HK|TW|SG) - # - USER-AGENT,FOXPlus* - - DOMAIN-SUFFIX,akamaized.net - - DOMAIN-SUFFIX,foxplus.com - - DOMAIN-SUFFIX,theplatform.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Fox_Now b/luci-app-openclash/root/etc/openclash/rule_provider/Fox_Now deleted file mode 100644 index a8857a7b..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Fox_Now +++ /dev/null @@ -1,6 +0,0 @@ -payload: - # > Fox Now - # - USER-AGENT,FOX%20NOW* - - DOMAIN-SUFFIX,fox.com - - DOMAIN-SUFFIX,foxdcg.com - - DOMAIN-SUFFIX,uplynk.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Global.yaml b/luci-app-openclash/root/etc/openclash/rule_provider/Global.yaml deleted file mode 100644 index 24de29e8..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Global.yaml +++ /dev/null @@ -1,622 +0,0 @@ -payload: - # (DNS Cache Pollution) - # > Amazon - - DOMAIN-SUFFIX,amazon.co.jp - - DOMAIN,d3c33hcgiwev3.cloudfront.net - - DOMAIN,payments-jp.amazon.com - - DOMAIN,s3-ap-northeast-1.amazonaws.com - - DOMAIN,s3-ap-southeast-2.amazonaws.com - # > Akamai - - DOMAIN,a248.e.akamai.net - - DOMAIN,a771.dscq.akamai.net - # > Apple - - DOMAIN,testflight.apple.com - # > Crypto - - DOMAIN-SUFFIX,aex.com - - DOMAIN-SUFFIX,bibox.com - - DOMAIN-SUFFIX,binance.cc - - DOMAIN-SUFFIX,binance.com - - DOMAIN-SUFFIX,binance.us - - DOMAIN-SUFFIX,bitcointalk.org - - DOMAIN-SUFFIX,bitfinex.com - - DOMAIN-SUFFIX,bithumb.com - - DOMAIN-SUFFIX,bitmex.com - - DOMAIN-SUFFIX,bitstamp.net - - DOMAIN-SUFFIX,bittrex.com - - DOMAIN-SUFFIX,bybit.com - - DOMAIN-SUFFIX,coinbase.com - - DOMAIN-SUFFIX,coincheck.com - - DOMAIN-SUFFIX,coingecko.com - - DOMAIN-SUFFIX,coinmarketcap.com - - DOMAIN-SUFFIX,coinone.co.kr - - DOMAIN-SUFFIX,ftx.com - - DOMAIN-SUFFIX,gate.io - - DOMAIN-SUFFIX,gemini.com - - DOMAIN-SUFFIX,huobi.com - - DOMAIN-SUFFIX,korbit.co.kr - - DOMAIN-SUFFIX,kraken.com - - DOMAIN-SUFFIX,kucoin.com - - DOMAIN-SUFFIX,liquid.com - - DOMAIN-SUFFIX,okex.com - - DOMAIN-SUFFIX,poloniex.com - - DOMAIN-SUFFIX,uniswap.org - - DOMAIN-SUFFIX,zb.com - # > Discord - - DOMAIN-SUFFIX,discord.com - - DOMAIN-SUFFIX,discordapp.com - - DOMAIN-SUFFIX,discordapp.net - # > Dropbox - - DOMAIN-SUFFIX,dropbox.com - - DOMAIN-SUFFIX,dropboxapi.com - - DOMAIN-SUFFIX,dropboxusercontent.com - # > Facebook - - DOMAIN-SUFFIX,cdninstagram.com - - DOMAIN-SUFFIX,facebook.com - - DOMAIN-SUFFIX,facebook.net - - DOMAIN-SUFFIX,fb.com - - DOMAIN-SUFFIX,fb.me - - DOMAIN-SUFFIX,fbaddins.com - - DOMAIN-SUFFIX,fbcdn.net - - DOMAIN-SUFFIX,fbsbx.com - - DOMAIN-SUFFIX,fbworkmail.com - - DOMAIN-SUFFIX,instagram.com - - DOMAIN-SUFFIX,m.me - - DOMAIN-SUFFIX,messenger.com - - DOMAIN-SUFFIX,oculus.com - - DOMAIN-SUFFIX,oculuscdn.com - - DOMAIN-SUFFIX,rocksdb.org - - DOMAIN-SUFFIX,whatsapp.com - - DOMAIN-SUFFIX,whatsapp.net - # > Github - - DOMAIN-SUFFIX,github.com - - DOMAIN-SUFFIX,github.io - - DOMAIN-SUFFIX,githubusercontent.com - # > Google - - DOMAIN-SUFFIX,appspot.com - - DOMAIN-SUFFIX,blogger.com - - DOMAIN-SUFFIX,getoutline.org - - DOMAIN-SUFFIX,gvt0.com - - DOMAIN-SUFFIX,gvt1.com - - DOMAIN-SUFFIX,gvt3.com - - DOMAIN-SUFFIX,xn--ngstr-lra8j.com - - DOMAIN-SUFFIX,ytimg.com - - DOMAIN-KEYWORD,google - - DOMAIN-KEYWORD,.blogspot. - # > Line - - DOMAIN-SUFFIX,line.me - - DOMAIN-SUFFIX,line-apps.com - - DOMAIN-SUFFIX,line-scdn.net - - DOMAIN-SUFFIX,naver.jp - - IP-CIDR,103.2.30.0/23,no-resolve - - IP-CIDR,125.209.208.0/20,no-resolve - - IP-CIDR,147.92.128.0/17,no-resolve - - IP-CIDR,203.104.144.0/21,no-resolve - # > Microsoft - - DOMAIN-SUFFIX,aka.ms - - DOMAIN-SUFFIX,onedrive.live.com - - DOMAIN-SUFFIX,streaming.mediaservices.windows.net - - DOMAIN,assets1.xboxlive.com - - DOMAIN,assets2.xboxlive.com - - DOMAIN,az416426.vo.msecnd.net - - DOMAIN,az668014.vo.msecnd.net - # > The New York Times - - DOMAIN-SUFFIX,nyt.com - - DOMAIN-SUFFIX,nytchina.com - - DOMAIN-SUFFIX,nytcn.me - - DOMAIN-SUFFIX,nytco.com - - DOMAIN-SUFFIX,nytimes.com - - DOMAIN-SUFFIX,nytimg.com - - DOMAIN-SUFFIX,nytlog.com - - DOMAIN-SUFFIX,nytstyle.com - # > Pinterest - - DOMAIN-SUFFIX,pinterest.at - - DOMAIN-SUFFIX,pinterest.ca - - DOMAIN-SUFFIX,pinterest.co.uk - - DOMAIN-SUFFIX,pinterest.com - - DOMAIN-SUFFIX,pinterest.de - - DOMAIN-SUFFIX,pinterest.fr - - DOMAIN-SUFFIX,pinterest.jp - - DOMAIN-SUFFIX,pinterest.se - # > pixiv - - DOMAIN-SUFFIX,pixiv.net - - DOMAIN-SUFFIX,pixiv.org - - DOMAIN-SUFFIX,pximg.net - # > Reddit - - DOMAIN-SUFFIX,redd.it - - DOMAIN-SUFFIX,reddit.com - - DOMAIN-SUFFIX,redditmedia.com - # > Telegram - - DOMAIN-SUFFIX,telegra.ph - - DOMAIN-SUFFIX,telegram.org - - IP-CIDR,91.108.4.0/22,no-resolve - - IP-CIDR,91.108.8.0/22,no-resolve - - IP-CIDR,91.108.12.0/22,no-resolve - - IP-CIDR,91.108.16.0/22,no-resolve - - IP-CIDR,91.108.20.0/22,no-resolve - - IP-CIDR,91.108.56.0/22,no-resolve - - IP-CIDR,91.105.192.0/23,no-resolve - - IP-CIDR,149.154.160.0/20,no-resolve - - IP-CIDR,185.76.151.0/24,no-resolve - - IP-CIDR,2001:b28:f23d::/48,no-resolve - - IP-CIDR,2001:b28:f23f::/48,no-resolve - - IP-CIDR,2001:67c:4e8::/48,no-resolve - - IP-CIDR,2001:b28:f23c::/48,no-resolve - - IP-CIDR,2a0a:f280::/32,no-resolve - # > Twitter - - DOMAIN-SUFFIX,pscp.tv - - DOMAIN-SUFFIX,periscope.tv - - DOMAIN-SUFFIX,t.co - - DOMAIN-SUFFIX,twimg.co - - DOMAIN-SUFFIX,twimg.com - - DOMAIN-SUFFIX,twitpic.com - - DOMAIN-SUFFIX,twitter.com - - DOMAIN-SUFFIX,vine.co - # > Wikimedia Foundation - - DOMAIN-SUFFIX,wikileaks.org - - DOMAIN-SUFFIX,wikimapia.org - - DOMAIN-SUFFIX,wikimedia.org - - DOMAIN-SUFFIX,wikinews.org - - DOMAIN-SUFFIX,wikipedia.org - - DOMAIN-SUFFIX,wikiquote.org - # > Others - - DOMAIN-SUFFIX,4shared.com - - DOMAIN-SUFFIX,9cache.com - - DOMAIN-SUFFIX,9gag.com - - DOMAIN-SUFFIX,abc.com - - DOMAIN-SUFFIX,abc.net.au - - DOMAIN-SUFFIX,abebooks.com - - DOMAIN-SUFFIX,ao3.org - - DOMAIN-SUFFIX,apigee.com - - DOMAIN-SUFFIX,apkcombo.com - - DOMAIN-SUFFIX,apk-dl.com - - DOMAIN-SUFFIX,apkfind.com - - DOMAIN-SUFFIX,apkmirror.com - - DOMAIN-SUFFIX,apkmonk.com - - DOMAIN-SUFFIX,apkpure.com - - DOMAIN-SUFFIX,aptoide.com - - DOMAIN-SUFFIX,archive.is - - DOMAIN-SUFFIX,archive.org - - DOMAIN-SUFFIX,archiveofourown.com - - DOMAIN-SUFFIX,archiveofourown.org - - DOMAIN-SUFFIX,arte.tv - - DOMAIN-SUFFIX,artstation.com - - DOMAIN-SUFFIX,arukas.io - - DOMAIN-SUFFIX,ask.com - - DOMAIN-SUFFIX,avg.com - - DOMAIN-SUFFIX,avgle.com - - DOMAIN-SUFFIX,badoo.com - - DOMAIN-SUFFIX,bandcamp.com - - DOMAIN-SUFFIX,bandwagonhost.com - - DOMAIN-SUFFIX,bangkokpost.com - - DOMAIN-SUFFIX,bbc.com - - DOMAIN-SUFFIX,behance.net - - DOMAIN-SUFFIX,biggo.com.tw - - DOMAIN-SUFFIX,bit.ly - - DOMAIN-SUFFIX,bloglovin.com - - DOMAIN-SUFFIX,bloomberg.cn - - DOMAIN-SUFFIX,bloomberg.com - - DOMAIN-SUFFIX,blubrry.com - - DOMAIN-SUFFIX,book.com.tw - - DOMAIN-SUFFIX,booklive.jp - - DOMAIN-SUFFIX,books.com.tw - - DOMAIN-SUFFIX,boslife.net - - DOMAIN-SUFFIX,box.com - - DOMAIN-SUFFIX,brave.com - - DOMAIN-SUFFIX,businessinsider.com - - DOMAIN-SUFFIX,buzzfeed.com - - DOMAIN-SUFFIX,bwh1.net - - DOMAIN-SUFFIX,castbox.fm - - DOMAIN-SUFFIX,cbc.ca - - DOMAIN-SUFFIX,cdw.com - - DOMAIN-SUFFIX,change.org - - DOMAIN-SUFFIX,channelnewsasia.com - - DOMAIN-SUFFIX,ck101.com - - DOMAIN-SUFFIX,clarionproject.org - - DOMAIN-SUFFIX,cloudcone.com - - DOMAIN-SUFFIX,clubhouseapi.com - - DOMAIN-SUFFIX,clyp.it - - DOMAIN-SUFFIX,cna.com.tw - - DOMAIN-SUFFIX,comparitech.com - - DOMAIN-SUFFIX,conoha.jp - - DOMAIN-SUFFIX,crucial.com - - DOMAIN-SUFFIX,cts.com.tw - - DOMAIN-SUFFIX,cw.com.tw - - DOMAIN-SUFFIX,cyberctm.com - - DOMAIN-SUFFIX,cyclingnews.com - - DOMAIN-SUFFIX,dailymotion.com - - DOMAIN-SUFFIX,dailyview.tw - - DOMAIN-SUFFIX,dandanzan.com - - DOMAIN-SUFFIX,daum.net - - DOMAIN-SUFFIX,daumcdn.net - - DOMAIN-SUFFIX,dcard.tw - - DOMAIN-SUFFIX,deadline.com - - DOMAIN-SUFFIX,deepdiscount.com - - DOMAIN-SUFFIX,depositphotos.com - - DOMAIN-SUFFIX,deviantart.com - - DOMAIN-SUFFIX,disconnect.me - - DOMAIN-SUFFIX,disqus.com - - DOMAIN-SUFFIX,dlercloud.com - - DOMAIN-SUFFIX,dmhy.org - - DOMAIN-SUFFIX,dns2go.com - - DOMAIN-SUFFIX,dowjones.com - - DOMAIN-SUFFIX,duckduckgo.com - - DOMAIN-SUFFIX,duyaoss.com - - DOMAIN-SUFFIX,dw.com - - DOMAIN-SUFFIX,dynu.com - - DOMAIN-SUFFIX,earthcam.com - - DOMAIN-SUFFIX,ebookservice.tw - - DOMAIN-SUFFIX,economist.com - - DOMAIN-SUFFIX,edgecastcdn.net - - DOMAIN-SUFFIX,edx-cdn.org - - DOMAIN-SUFFIX,elpais.com - - DOMAIN-SUFFIX,enanyang.my - - DOMAIN-SUFFIX,encyclopedia.com - - DOMAIN-SUFFIX,esoir.be - - DOMAIN-SUFFIX,etherscan.io - - DOMAIN-SUFFIX,euronews.com - - DOMAIN-SUFFIX,evozi.com - - DOMAIN-SUFFIX,exblog.jp - - DOMAIN-SUFFIX,feeder.co - - DOMAIN-SUFFIX,feedly.com - - DOMAIN-SUFFIX,feedx.net - - DOMAIN-SUFFIX,firech.at - - DOMAIN-SUFFIX,flickr.com - - DOMAIN-SUFFIX,flipboard.com - - DOMAIN-SUFFIX,flitto.com - - DOMAIN-SUFFIX,foreignpolicy.com - - DOMAIN-SUFFIX,fortawesome.com - - DOMAIN-SUFFIX,freetls.fastly.net - - DOMAIN-SUFFIX,friday.tw - - DOMAIN-SUFFIX,ft.com - - DOMAIN-SUFFIX,ftchinese.com - - DOMAIN-SUFFIX,ftimg.net - - DOMAIN-SUFFIX,genius.com - - DOMAIN-SUFFIX,getlantern.org - - DOMAIN-SUFFIX,getsync.com - - DOMAIN-SUFFIX,globalvoices.org - - DOMAIN-SUFFIX,goo.ne.jp - - DOMAIN-SUFFIX,goodreads.com - - DOMAIN-SUFFIX,gov.tw - - DOMAIN-SUFFIX,gravatar.com - - DOMAIN-SUFFIX,greatfire.org - - DOMAIN-SUFFIX,gumroad.com - - DOMAIN-SUFFIX,heroku.com - - DOMAIN-SUFFIX,hightail.com - - DOMAIN-SUFFIX,hk01.com - - DOMAIN-SUFFIX,hkbf.org - - DOMAIN-SUFFIX,hkbookcity.com - - DOMAIN-SUFFIX,hkej.com - - DOMAIN-SUFFIX,hket.com - - DOMAIN-SUFFIX,hootsuite.com - - DOMAIN-SUFFIX,hudson.org - - DOMAIN-SUFFIX,huffpost.com - - DOMAIN-SUFFIX,hyread.com.tw - - DOMAIN-SUFFIX,ibtimes.com - - DOMAIN-SUFFIX,i-cable.com - - DOMAIN-SUFFIX,icij.org - - DOMAIN-SUFFIX,icoco.com - - DOMAIN-SUFFIX,imgur.com - - DOMAIN-SUFFIX,independent.co.uk - - DOMAIN-SUFFIX,initiummall.com - - DOMAIN-SUFFIX,inoreader.com - - DOMAIN-SUFFIX,insecam.org - - DOMAIN-SUFFIX,ipfs.io - - DOMAIN-SUFFIX,issuu.com - - DOMAIN-SUFFIX,istockphoto.com - - DOMAIN-SUFFIX,japantimes.co.jp - - DOMAIN-SUFFIX,jiji.com - - DOMAIN-SUFFIX,jinx.com - - DOMAIN-SUFFIX,jkforum.net - - DOMAIN-SUFFIX,joinclubhouse.com - - DOMAIN-SUFFIX,joinmastodon.org - - DOMAIN-SUFFIX,justmysocks.net - - DOMAIN-SUFFIX,justpaste.it - - DOMAIN-SUFFIX,kadokawa.co.jp - - DOMAIN-SUFFIX,kakao.com - - DOMAIN-SUFFIX,kakaocorp.com - - DOMAIN-SUFFIX,kik.com - - DOMAIN-SUFFIX,kingkong.com.tw - - DOMAIN-SUFFIX,knowyourmeme.com - - DOMAIN-SUFFIX,kobo.com - - DOMAIN-SUFFIX,kobobooks.com - - DOMAIN-SUFFIX,kodingen.com - - DOMAIN-SUFFIX,lemonde.fr - - DOMAIN-SUFFIX,lepoint.fr - - DOMAIN-SUFFIX,lihkg.com - - DOMAIN-SUFFIX,limbopro.xyz - - DOMAIN-SUFFIX,listennotes.com - - DOMAIN-SUFFIX,livestream.com - - DOMAIN-SUFFIX,logimg.jp - - DOMAIN-SUFFIX,logmein.com - - DOMAIN-SUFFIX,mail.ru - - DOMAIN-SUFFIX,mailchimp.com - - DOMAIN-SUFFIX,marc.info - - DOMAIN-SUFFIX,matters.news - - DOMAIN-SUFFIX,maying.co - - DOMAIN-SUFFIX,medium.com - - DOMAIN-SUFFIX,mega.nz - - DOMAIN-SUFFIX,mergersandinquisitions.com - - DOMAIN-SUFFIX,mingpao.com - - DOMAIN-SUFFIX,mixi.jp - - DOMAIN-SUFFIX,mixlr.com - - DOMAIN-SUFFIX,mobile01.com - - DOMAIN-SUFFIX,mubi.com - - DOMAIN-SUFFIX,myspace.com - - DOMAIN-SUFFIX,myspacecdn.com - - DOMAIN-SUFFIX,nanyang.com - - DOMAIN-SUFFIX,nationalinterest.org - - DOMAIN-SUFFIX,naver.com - - DOMAIN-SUFFIX,nbcnews.com - - DOMAIN-SUFFIX,ndr.de - - DOMAIN-SUFFIX,neowin.net - - DOMAIN-SUFFIX,newstapa.org - - DOMAIN-SUFFIX,nexitally.com - - DOMAIN-SUFFIX,nhk.or.jp - - DOMAIN-SUFFIX,nii.ac.jp - - DOMAIN-SUFFIX,nikkei.com - - DOMAIN-SUFFIX,nitter.net - - DOMAIN-SUFFIX,nofile.io - - DOMAIN-SUFFIX,notion.so - - DOMAIN-SUFFIX,now.com - - DOMAIN-SUFFIX,nrk.no - - DOMAIN-SUFFIX,nuget.org - - DOMAIN-SUFFIX,nyaa.si - - DOMAIN-SUFFIX,ok.ru - - DOMAIN-SUFFIX,on.cc - - DOMAIN-SUFFIX,orientaldaily.com.my - - DOMAIN-SUFFIX,overcast.fm - - DOMAIN-SUFFIX,paltalk.com - - DOMAIN-SUFFIX,parsevideo.com - - DOMAIN-SUFFIX,pawoo.net - - DOMAIN-SUFFIX,pbxes.com - - DOMAIN-SUFFIX,pcdvd.com.tw - - DOMAIN-SUFFIX,pchome.com.tw - - DOMAIN-SUFFIX,pcloud.com - - DOMAIN-SUFFIX,peing.net - - DOMAIN-SUFFIX,picacomic.com - - DOMAIN-SUFFIX,pinimg.com - - DOMAIN-SUFFIX,player.fm - - DOMAIN-SUFFIX,plurk.com - - DOMAIN-SUFFIX,po18.tw - - DOMAIN-SUFFIX,potato.im - - DOMAIN-SUFFIX,potatso.com - - DOMAIN-SUFFIX,prism-break.org - - DOMAIN-SUFFIX,proxifier.com - - DOMAIN-SUFFIX,pt.im - - DOMAIN-SUFFIX,pts.org.tw - - DOMAIN-SUFFIX,pubu.com.tw - - DOMAIN-SUFFIX,pubu.tw - - DOMAIN-SUFFIX,pureapk.com - - DOMAIN-SUFFIX,quora.com - - DOMAIN-SUFFIX,quoracdn.net - - DOMAIN-SUFFIX,qz.com - - DOMAIN-SUFFIX,radio.garden - - DOMAIN-SUFFIX,rakuten.co.jp - - DOMAIN-SUFFIX,rarbgprx.org - - DOMAIN-SUFFIX,reabble.com - - DOMAIN-SUFFIX,readingtimes.com.tw - - DOMAIN-SUFFIX,readmoo.com - - DOMAIN-SUFFIX,redbubble.com - - DOMAIN-SUFFIX,resilio.com - - DOMAIN-SUFFIX,reuters.com - - DOMAIN-SUFFIX,reutersmedia.net - - DOMAIN-SUFFIX,rfi.fr - - DOMAIN-SUFFIX,roadshow.hk - - DOMAIN-SUFFIX,rsshub.app - - DOMAIN-SUFFIX,scmp.com - - DOMAIN-SUFFIX,scribd.com - - DOMAIN-SUFFIX,seatguru.com - - DOMAIN-SUFFIX,shadowsocks.org - - DOMAIN-SUFFIX,shindanmaker.com - - DOMAIN-SUFFIX,shopee.tw - - DOMAIN-SUFFIX,signal.org - - DOMAIN-SUFFIX,sina.com.hk - - DOMAIN-SUFFIX,slideshare.net - - DOMAIN-SUFFIX,softfamous.com - - DOMAIN-SUFFIX,spiegel.de - - DOMAIN-SUFFIX,startpage.com - - DOMAIN-SUFFIX,steamcommunity.com - - DOMAIN-SUFFIX,steemit.com - - DOMAIN-SUFFIX,steemitwallet.com - - DOMAIN-SUFFIX,straitstimes.com - - DOMAIN-SUFFIX,streamable.com - - DOMAIN-SUFFIX,streema.com - - DOMAIN-SUFFIX,substack.com - - DOMAIN-SUFFIX,t66y.com - - DOMAIN-SUFFIX,tapatalk.com - - DOMAIN-SUFFIX,teco-hk.org - - DOMAIN-SUFFIX,teco-mo.org - - DOMAIN-SUFFIX,teddysun.com - - DOMAIN-SUFFIX,textnow.me - - DOMAIN-SUFFIX,theguardian.com - - DOMAIN-SUFFIX,theinitium.com - - DOMAIN-SUFFIX,themoviedb.org - - DOMAIN-SUFFIX,thetvdb.com - - DOMAIN-SUFFIX,time.com - - DOMAIN-SUFFIX,tineye.com - - DOMAIN-SUFFIX,tiny.cc - - DOMAIN-SUFFIX,tinyurl.com - - DOMAIN-SUFFIX,torproject.org - - DOMAIN-SUFFIX,tradingview.com - - DOMAIN-SUFFIX,tumblr.com - - DOMAIN-SUFFIX,turbobit.net - - DOMAIN-SUFFIX,tutanota.com - - DOMAIN-SUFFIX,tvboxnow.com - - DOMAIN-SUFFIX,udn.com - - DOMAIN-SUFFIX,unseen.is - - DOMAIN-SUFFIX,upmedia.mg - - DOMAIN-SUFFIX,uptodown.com - - DOMAIN-SUFFIX,urbandictionary.com - - DOMAIN-SUFFIX,ustream.tv - - DOMAIN-SUFFIX,uwants.com - - DOMAIN-SUFFIX,v2ex.com - - DOMAIN-SUFFIX,v2fly.org - - DOMAIN-SUFFIX,v2ray.com - - DOMAIN-SUFFIX,viber.com - - DOMAIN-SUFFIX,videopress.com - - DOMAIN-SUFFIX,vimeo.com - - DOMAIN-SUFFIX,voachinese.com - - DOMAIN-SUFFIX,voanews.com - - DOMAIN-SUFFIX,voxer.com - - DOMAIN-SUFFIX,vzw.com - - DOMAIN-SUFFIX,w3schools.com - - DOMAIN-SUFFIX,washingtonpost.com - - DOMAIN-SUFFIX,wattpad.com - - DOMAIN-SUFFIX,whoer.net - - DOMAIN-SUFFIX,wikiwand.com - - DOMAIN-SUFFIX,winudf.com - - DOMAIN-SUFFIX,wire.com - - DOMAIN-SUFFIX,wn.com - - DOMAIN-SUFFIX,wordpress.com - - DOMAIN-SUFFIX,worldcat.org - - DOMAIN-SUFFIX,wsj.com - - DOMAIN-SUFFIX,wsj.net - - DOMAIN-SUFFIX,xhamster.com - - DOMAIN-SUFFIX,xn--90wwvt03e.com - - DOMAIN-SUFFIX,xn--i2ru8q2qg.com - - DOMAIN-SUFFIX,xnxx.com - - DOMAIN-SUFFIX,xvideos.com - - DOMAIN-SUFFIX,yadi.sk - - DOMAIN-SUFFIX,yahoo.com - - DOMAIN-SUFFIX,yandex.ru - - DOMAIN-SUFFIX,ycombinator.com - - DOMAIN-SUFFIX,yesasia.com - - DOMAIN-SUFFIX,yes-news.com - - DOMAIN-SUFFIX,yomiuri.co.jp - - DOMAIN-SUFFIX,you-get.org - - DOMAIN-SUFFIX,zaobao.com - - DOMAIN-SUFFIX,zello.com - - DOMAIN-SUFFIX,zeronet.io - - DOMAIN-SUFFIX,z-lib.org - - DOMAIN-SUFFIX,zoom.us - - - DOMAIN,cc.tvbs.com.tw - - DOMAIN,clubhouse.pubnubapi.com - - DOMAIN,ocsp.int-x3.letsencrypt.org - - DOMAIN,us.weibo.com - - - DOMAIN-SUFFIX,edu - - DOMAIN-SUFFIX,gov - - DOMAIN-SUFFIX,mil - - # (IP Blackhole) - # > Google - - DOMAIN-SUFFIX,abc.xyz - - DOMAIN-SUFFIX,advertisercommunity.com - - DOMAIN-SUFFIX,ampproject.org - - DOMAIN-SUFFIX,android.com - - DOMAIN-SUFFIX,androidify.com - - DOMAIN-SUFFIX,autodraw.com - - DOMAIN-SUFFIX,capitalg.com - - DOMAIN-SUFFIX,certificate-transparency.org - - DOMAIN-SUFFIX,chrome.com - - DOMAIN-SUFFIX,chromeexperiments.com - - DOMAIN-SUFFIX,chromestatus.com - - DOMAIN-SUFFIX,chromium.org - - DOMAIN-SUFFIX,creativelab5.com - - DOMAIN-SUFFIX,debug.com - - DOMAIN-SUFFIX,deepmind.com - - DOMAIN-SUFFIX,dialogflow.com - - DOMAIN-SUFFIX,firebaseio.com - - DOMAIN-SUFFIX,getmdl.io - - DOMAIN-SUFFIX,ggpht.com - - DOMAIN-SUFFIX,gmail.com - - DOMAIN-SUFFIX,gmodules.com - - DOMAIN-SUFFIX,godoc.org - - DOMAIN-SUFFIX,gstatic.com - - DOMAIN-SUFFIX,gv.com - - DOMAIN-SUFFIX,gwtproject.org - - DOMAIN-SUFFIX,itasoftware.com - - DOMAIN-SUFFIX,madewithcode.com - - DOMAIN-SUFFIX,material.io - - DOMAIN-SUFFIX,page.link - - DOMAIN-SUFFIX,polymer-project.org - - DOMAIN-SUFFIX,recaptcha.net - - DOMAIN-SUFFIX,shattered.io - - DOMAIN-SUFFIX,synergyse.com - - DOMAIN-SUFFIX,telephony.goog - - DOMAIN-SUFFIX,tensorflow.org - - DOMAIN-SUFFIX,tfhub.dev - - DOMAIN-SUFFIX,tiltbrush.com - - DOMAIN-SUFFIX,waveprotocol.org - - DOMAIN-SUFFIX,waymo.com - - DOMAIN-SUFFIX,webmproject.org - - DOMAIN-SUFFIX,webrtc.org - - DOMAIN-SUFFIX,whatbrowser.org - - DOMAIN-SUFFIX,widevine.com - - DOMAIN-SUFFIX,x.company - - DOMAIN-SUFFIX,youtu.be - - DOMAIN-SUFFIX,yt.be - - DOMAIN-SUFFIX,ytimg.com - # > Telegram - - DOMAIN-SUFFIX,t.me - - DOMAIN-SUFFIX,tdesktop.com - - DOMAIN-SUFFIX,telegram.me - - DOMAIN-SUFFIX,telesco.pe - # > Facebook - - DOMAIN-KEYWORD,.facebook. - - DOMAIN-SUFFIX,facebookmail.com - # > Others - - DOMAIN-SUFFIX,noxinfluencer.com - - DOMAIN-SUFFIX,smartmailcloud.com - - DOMAIN-SUFFIX,weebly.com - - DOMAIN-SUFFIX,twitter.jp - - # (Region-Restricted Access Denied) - # ---(Apple)--- - - DOMAIN-SUFFIX,appsto.re - - DOMAIN,books.itunes.apple.com - - DOMAIN-SUFFIX,smoot.apple.com - - DOMAIN,beta.music.apple.com - - DOMAIN,lookup-api.apple.com - # > Web Preview - - DOMAIN,apps.apple.com - - DOMAIN,books.apple.com - - DOMAIN,itunes.apple.com - - DOMAIN,tv.apple.com - # > Podcasts - - DOMAIN,amp-api.podcasts.apple.com - - DOMAIN,bookkeeper.itunes.apple.com - # > News - - DOMAIN,gateway.icloud.com - - DOMAIN-SUFFIX,apple.news - - DOMAIN,news-assets.apple.com - - DOMAIN,news-client.apple.com - - DOMAIN,news-client-search.apple.com - - DOMAIN,news-edge.apple.com - - DOMAIN,news-events.apple.com - - DOMAIN,apple.comscoreresearch.com - # ------ - # Google - - DOMAIN-SUFFIX,go.dev - - DOMAIN-SUFFIX,golang.org - # > Others - - DOMAIN-SUFFIX,aicoin.com - - DOMAIN-SUFFIX,aimoon.com - - DOMAIN-SUFFIX,bing.com - - DOMAIN-SUFFIX,cccat.io - - DOMAIN-SUFFIX,dubox.com - - DOMAIN-SUFFIX,duboxcdn.com - - DOMAIN-SUFFIX,ifixit.com - - DOMAIN-SUFFIX,mangakakalot.com - - DOMAIN-SUFFIX,shopeemobile.com - - DOMAIN-SUFFIX,sushi.com - - # (Network Jitter) - # > Apple - - DOMAIN,appleid.apple.com - - DOMAIN,developer.apple.com - - DOMAIN,www.icloud.com - - DOMAIN,ocsp.apple.com - # > DigiCert - - DOMAIN,cacerts.digicert.com - - DOMAIN,crl3.digicert.com - - DOMAIN,crl4.digicert.com - - DOMAIN,ocsp.digicert.com - # > Others - - DOMAIN-SUFFIX,cloudcone.com.cn - - DOMAIN-SUFFIX,inkbunny.net - - DOMAIN-SUFFIX,metapix.net - - DOMAIN-SUFFIX,s3.amazonaws.com - - DOMAIN-SUFFIX,zaobao.com.sg - - DOMAIN,international-gfe.download.nvidia.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Google FCM b/luci-app-openclash/root/etc/openclash/rule_provider/Google FCM deleted file mode 100644 index 1b60530e..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Google FCM +++ /dev/null @@ -1,37 +0,0 @@ -payload: - # > Google FCM - - DOMAIN,alt1-mtalk.google.com - - DOMAIN,alt2-mtalk.google.com - - DOMAIN,alt3-mtalk.google.com - - DOMAIN,alt4-mtalk.google.com - - DOMAIN,alt5-mtalk.google.com - - DOMAIN,alt6-mtalk.google.com - - DOMAIN,alt7-mtalk.google.com - - DOMAIN,alt8-mtalk.google.com - - DOMAIN,mtalk.google.com - - IP-CIDR,64.233.177.188/32,no-resolve - - IP-CIDR,64.233.186.188/32,no-resolve - - IP-CIDR,64.233.187.188/32,no-resolve - - IP-CIDR,64.233.188.188/32,no-resolve - - IP-CIDR,64.233.189.188/32,no-resolve - - IP-CIDR,74.125.23.188/32,no-resolve - - IP-CIDR,74.125.24.188/32,no-resolve - - IP-CIDR,74.125.28.188/32,no-resolve - - IP-CIDR,74.125.127.188/32,no-resolve - - IP-CIDR,74.125.137.188/32,no-resolve - - IP-CIDR,74.125.203.188/32,no-resolve - - IP-CIDR,74.125.204.188/32,no-resolve - - IP-CIDR,74.125.206.188/32,no-resolve - - IP-CIDR,108.177.125.188/32,no-resolve - - IP-CIDR,142.250.4.188/32,no-resolve - - IP-CIDR,142.250.10.188/32,no-resolve - - IP-CIDR,142.250.31.188/32,no-resolve - - IP-CIDR,142.250.96.188/32,no-resolve - - IP-CIDR,172.217.194.188/32,no-resolve - - IP-CIDR,172.217.218.188/32,no-resolve - - IP-CIDR,172.217.219.188/32,no-resolve - - IP-CIDR,172.253.63.188/32,no-resolve - - IP-CIDR,172.253.122.188/32,no-resolve - - IP-CIDR,173.194.175.188/32,no-resolve - - IP-CIDR,173.194.218.188/32,no-resolve - - IP-CIDR,209.85.233.188/32,no-resolve \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/HBO b/luci-app-openclash/root/etc/openclash/rule_provider/HBO deleted file mode 100644 index df7c3622..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/HBO +++ /dev/null @@ -1,23 +0,0 @@ -payload: - # > HBO Max - - PROCESS-NAME,com.hbo.hbonow - - DOMAIN-SUFFIX,hbo.com - - DOMAIN-SUFFIX,hbogo.com - - DOMAIN-SUFFIX,hbonow.com - - DOMAIN-SUFFIX,hbomax.com - - DOMAIN-SUFFIX,hbomaxcdn.com - - # > HBO GO - - DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com - - DOMAIN,bcbolthboa-a.akamaihd.net - - DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net - - DOMAIN,dai3fd1oh325y.cloudfront.net - - DOMAIN,hboasia1-i.akamaihd.net - - DOMAIN,hboasia2-i.akamaihd.net - - DOMAIN,hboasia3-i.akamaihd.net - - DOMAIN,hboasia4-i.akamaihd.net - - DOMAIN,hboasia5-i.akamaihd.net - - DOMAIN,players.brightcove.net - - DOMAIN,s3-ap-southeast-1.amazonaws.com - - DOMAIN-SUFFIX,hbogoasia.com - - DOMAIN-SUFFIX,hbogoasia.hk diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/HBO_Go b/luci-app-openclash/root/etc/openclash/rule_provider/HBO_Go deleted file mode 100644 index a8f21086..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/HBO_Go +++ /dev/null @@ -1,13 +0,0 @@ -payload: - # > HBO Max - # - USER-AGENT,HBO%20GO%20PROD* - # - DOMAIN-KEYWORD,hboasia - - DOMAIN-KEYWORD,hbogoasia - - DOMAIN-SUFFIX,hboasia.com - - DOMAIN-SUFFIX,hbogoasia.com - - DOMAIN,hbolb.onwardsmg.com - - DOMAIN,hbounify-prod.evergent.com - # - DOMAIN,bcbolthboa-a.akamaihd.net - - DOMAIN,dai3fd1oh325y.cloudfront.net - # - DOMAIN,hboasialive.akamaized.net - # - DOMAIN,hbogoprod-vod.akamaized.net \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/HBO_Max b/luci-app-openclash/root/etc/openclash/rule_provider/HBO_Max deleted file mode 100644 index d13c6676..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/HBO_Max +++ /dev/null @@ -1,8 +0,0 @@ -payload: - # > HBO Max - # - USER-AGENT,HBOMAX* - - DOMAIN-SUFFIX,hbo.com - # - DOMAIN-SUFFIX,hbogo.com - - DOMAIN-SUFFIX,hbonow.com - - DOMAIN-SUFFIX,hbomax.com - - DOMAIN-SUFFIX,hbomaxcdn.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Hulu b/luci-app-openclash/root/etc/openclash/rule_provider/Hulu deleted file mode 100644 index 2b982cf1..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Hulu +++ /dev/null @@ -1,10 +0,0 @@ -payload: - # > Hulu - - PROCESS-NAME,com.hulu.plus - - DOMAIN-SUFFIX,cws-hulu.conviva.com - - DOMAIN-SUFFIX,hulu.com - - DOMAIN-SUFFIX,hulu.hb.omtrdc.net - - DOMAIN-SUFFIX,hulu.sc.omtrdc.net - - DOMAIN-SUFFIX,huluad.com - - DOMAIN-SUFFIX,huluim.com - - DOMAIN-SUFFIX,hulustream.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Hulu_Japan b/luci-app-openclash/root/etc/openclash/rule_provider/Hulu_Japan deleted file mode 100644 index 7c4509eb..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Hulu_Japan +++ /dev/null @@ -1,8 +0,0 @@ -payload: - # > Hulu(フールー) - - PROCESS-NAME,jp.happyon.android - - DOMAIN-SUFFIX,happyon.jp - - DOMAIN-SUFFIX,hulu.jp - - DOMAIN-SUFFIX,prod.hjholdings.tv - - DOMAIN-SUFFIX,streaks.jp - - DOMAIN-SUFFIX,yb.uncn.jp \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/IQI b/luci-app-openclash/root/etc/openclash/rule_provider/IQI deleted file mode 100644 index 07e1b26f..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/IQI +++ /dev/null @@ -1,31 +0,0 @@ -payload: - # > iQIYI Intl - # - USER-AGENT,iQIYI* - # - USER-AGENT,QIYIVideo* - # - USER-AGENT,QYPlayer* - # - USER-AGENT,QTP* - - PROCESS-NAME,com.iqiyi.i18n - - PROCESS-NAME,com.iqiyi.i18n.tv - - DOMAIN-SUFFIX,inter.iqiyi.com - - DOMAIN-SUFFIX,iq.com - # 首页 - - DOMAIN-SUFFIX,intl.iqiyi.com - # 历史 - - DOMAIN,intl-rcd.iqiyi.com - # 收藏 - - DOMAIN,intl-subscription.iqiyi.com - # 播放 - - IP-CIDR,104.85.165.17/32,no-resolve - - IP-CIDR,110.238.107.47/32,no-resolve - - IP-CIDR,118.26.32.162/32,no-resolve - - IP-CIDR,159.138.102.146/32,no-resolve - - IP-CIDR,184.51.102.0/24,no-resolve - - IP-CIDR,203.74.95.130/28,no-resolve - - IP-CIDR,203.80.97.203/32,no-resolve - - IP-CIDR,210.71.227.202/32,no-resolve - - IP-CIDR,23.200.145.146/32,no-resolve - - IP-CIDR,23.210.215.186/32,no-resolve - - IP-CIDR,23.211.15.0/24,no-resolve - - IP-CIDR,23.219.172.0/24,no-resolve - - IP-CIDR,23.40.242.10/32,no-resolve - - IP-CIDR,23.59.252.0/24,no-resolve \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/IQYI b/luci-app-openclash/root/etc/openclash/rule_provider/IQYI deleted file mode 100644 index 4af44426..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/IQYI +++ /dev/null @@ -1,12 +0,0 @@ -payload: - # > iQiyi - # USER-AGENT,*QIYI* - # USER-AGENT,iQiYi* - - DOMAIN-KEYWORD,qiyi - - DOMAIN-SUFFIX,iqiyi.com - - DOMAIN-SUFFIX,iqiyipic.com - - DOMAIN-SUFFIX,iq.com - - DOMAIN-SUFFIX,qy.net - - DOMAIN-SUFFIX,gitv.tv - - DOMAIN-SUFFIX,71.am - - DOMAIN,cache.video.iqiyi.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/JOOX b/luci-app-openclash/root/etc/openclash/rule_provider/JOOX deleted file mode 100644 index 334c4d77..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/JOOX +++ /dev/null @@ -1,6 +0,0 @@ -payload: - # > JOOX - - PROCESS-NAME,com.tencent.ibg.joox - - PROCESS-NAME,com.tencent.ibg.jooxtv - - DOMAIN-SUFFIX,joox.com - - DOMAIN-KEYWORD,jooxweb-api diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Japonx b/luci-app-openclash/root/etc/openclash/rule_provider/Japonx deleted file mode 100644 index 01ac9722..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Japonx +++ /dev/null @@ -1,12 +0,0 @@ -payload: - # > Japonx - - DOMAIN-KEYWORD,japonx - - DOMAIN-KEYWORD,japronx - - DOMAIN-SUFFIX,japonx.com - - DOMAIN-SUFFIX,japonx.tv - - DOMAIN-SUFFIX,japonx.net - - DOMAIN-SUFFIX,japonx.vip - - DOMAIN-SUFFIX,japronx.com - - DOMAIN-SUFFIX,japronx.tv - - DOMAIN-SUFFIX,japronx.net - - DOMAIN-SUFFIX,japronx.vip \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/KKBOX b/luci-app-openclash/root/etc/openclash/rule_provider/KKBOX deleted file mode 100644 index 8305d0c7..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/KKBOX +++ /dev/null @@ -1,5 +0,0 @@ -payload: - # > KKBOX - - DOMAIN-SUFFIX,kkbox.com - - DOMAIN-SUFFIX,kkbox.com.tw - - DOMAIN-SUFFIX,kfs.io \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/KKTV b/luci-app-openclash/root/etc/openclash/rule_provider/KKTV deleted file mode 100644 index b7a47805..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/KKTV +++ /dev/null @@ -1,6 +0,0 @@ -payload: - # > KKTV - - PROCESS-NAME,com.kktv.kktv - - DOMAIN-SUFFIX,kktv.me - - DOMAIN-SUFFIX,kktv.com.tw - - DOMAIN,kktv-theater.kk.stream diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/LAN b/luci-app-openclash/root/etc/openclash/rule_provider/LAN deleted file mode 100644 index 5e362d94..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/LAN +++ /dev/null @@ -1,9 +0,0 @@ -payload: - - DOMAIN-SUFFIX,local - - IP-CIDR,127.0.0.0/8 - - IP-CIDR,172.16.0.0/12 - - IP-CIDR,192.168.0.0/16 - - IP-CIDR,10.0.0.0/8 - - IP-CIDR,17.0.0.0/8 - - IP-CIDR,100.64.0.0/10 - - IP-CIDR6,fe80::/10 diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Letv b/luci-app-openclash/root/etc/openclash/rule_provider/Letv deleted file mode 100644 index c59633f9..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Letv +++ /dev/null @@ -1,3 +0,0 @@ -payload: - # > letv - - DOMAIN-SUFFIX,api.mob.app.letv.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Line_TV b/luci-app-openclash/root/etc/openclash/rule_provider/Line_TV deleted file mode 100644 index 628b395e..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Line_TV +++ /dev/null @@ -1,6 +0,0 @@ -payload: - # > Line TV - # - USER-AGENT,LINE* - - DOMAIN-SUFFIX,d3c7rimkq79yfu.cloudfront.net - - DOMAIN-SUFFIX,linetv.tw - - DOMAIN-SUFFIX,profile.line-scdn.net diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Microsoft b/luci-app-openclash/root/etc/openclash/rule_provider/Microsoft deleted file mode 100644 index fbc69603..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Microsoft +++ /dev/null @@ -1,26 +0,0 @@ -payload: - # > Microsoft - - PROCESS-NAME,OneDrive - - DOMAIN-KEYWORD,onedrive - - DOMAIN-SUFFIX,azure.com - - DOMAIN-SUFFIX,fabric.io - - DOMAIN-SUFFIX,files.1drv.com - - DOMAIN-SUFFIX,hotmail.com - - DOMAIN-SUFFIX,live.com - - DOMAIN-SUFFIX,live.net - - DOMAIN-SUFFIX,livefilestore.com - - DOMAIN-SUFFIX,mesh.com - - DOMAIN-SUFFIX,microsoft.com - - DOMAIN-SUFFIX,microsoftonline.com - - DOMAIN-SUFFIX,microsoft-tst.com - - DOMAIN-SUFFIX,msn.com - - DOMAIN-SUFFIX,office.com - - DOMAIN-SUFFIX,office.net - - DOMAIN-SUFFIX,onedrive.com - - DOMAIN-SUFFIX,outlook.com - - DOMAIN-SUFFIX,p.sfx.ms - - DOMAIN-SUFFIX,s-microsoft.com - - DOMAIN-SUFFIX,sharepoint.com - - DOMAIN-SUFFIX,skype.com - - DOMAIN-SUFFIX,spoprod-a.akamaihd.net - - DOMAIN-SUFFIX,storage.msn.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Netease_Music b/luci-app-openclash/root/etc/openclash/rule_provider/Netease_Music deleted file mode 100644 index ed762cb9..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Netease_Music +++ /dev/null @@ -1,26 +0,0 @@ -payload: - # > Netease Music - - DOMAIN-SUFFIX,163yun.com - - DOMAIN-SUFFIX,api.iplay.163.com - - DOMAIN-SUFFIX,hz.netease.com - - DOMAIN-SUFFIX,mam.netease.com - - DOMAIN-SUFFIX,music.163.com - - IP-CIDR,101.71.154.241/32,no-resolve - - IP-CIDR,103.126.92.132/32,no-resolve - - IP-CIDR,103.126.92.133/32,no-resolve - - IP-CIDR,112.13.119.17/32,no-resolve - - IP-CIDR,112.13.122.1/32,no-resolve - - IP-CIDR,115.236.118.33/32,no-resolve - - IP-CIDR,115.236.121.1/32,no-resolve - - IP-CIDR,118.24.63.156/32,no-resolve - - IP-CIDR,193.112.159.225/32,no-resolve - - IP-CIDR,223.252.199.66/32,no-resolve - - IP-CIDR,223.252.199.67/32,no-resolve - - IP-CIDR,39.105.63.80/32,no-resolve - - IP-CIDR,45.254.48.1/32,no-resolve - - IP-CIDR,47.100.127.239/32,no-resolve - - IP-CIDR,59.111.160.195/32,no-resolve - - IP-CIDR,59.111.160.197/32,no-resolve - - IP-CIDR,59.111.181.35/32,no-resolve - - IP-CIDR,59.111.181.38/32,no-resolve - - IP-CIDR,59.111.181.60/32,no-resolve diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Netflix b/luci-app-openclash/root/etc/openclash/rule_provider/Netflix deleted file mode 100644 index d7e6468d..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Netflix +++ /dev/null @@ -1,105 +0,0 @@ -payload: - # > Netflix - - PROCESS-NAME,com.netflix.mediaclient - - - DOMAIN-KEYWORD,netflix - - DOMAIN-KEYWORD,dualstack.apiproxy- - - DOMAIN-KEYWORD,dualstack.ichnaea-web- - - - DOMAIN,netflix.api.fast.com - - DOMAIN,netflix.com.edgesuite.net - - DOMAIN-SUFFIX,netflix.com - - DOMAIN-SUFFIX,netflix.net - - DOMAIN-SUFFIX,netflixdnstest0.com - - DOMAIN-SUFFIX,netflixdnstest1.com - - DOMAIN-SUFFIX,netflixdnstest2.com - - DOMAIN-SUFFIX,netflixdnstest3.com - - DOMAIN-SUFFIX,netflixdnstest4.com - - DOMAIN-SUFFIX,netflixdnstest5.com - - DOMAIN-SUFFIX,netflixdnstest6.com - - DOMAIN-SUFFIX,netflixdnstest7.com - - DOMAIN-SUFFIX,netflixdnstest8.com - - DOMAIN-SUFFIX,netflixdnstest9.com - - DOMAIN-SUFFIX,nflxext.com - - DOMAIN-SUFFIX,nflximg.com - - DOMAIN-SUFFIX,nflximg.net - - DOMAIN-SUFFIX,nflxso.net - - DOMAIN-SUFFIX,nflxvideo.net - - # > BGP AS Search - - IP-CIDR,103.87.204.0/22,no-resolve - - IP-CIDR,108.175.32.0/20,no-resolve - - IP-CIDR,185.2.0.0/16,no-resolve - - IP-CIDR,185.9.0.0/16,no-resolve - - IP-CIDR,192.173.64.0/18,no-resolve - - IP-CIDR,198.38.96.0/19,no-resolve - - IP-CIDR,198.45.48.0/20,no-resolve - - IP-CIDR,207.45.72.0/22,no-resolve - - IP-CIDR,208.75.76.0/22,no-resolve - - IP-CIDR,23.246.0.0/18,no-resolve - - IP-CIDR,45.57.0.0/17,no-resolve - - IP-CIDR,52.89.124.203/32,no-resolve - - IP-CIDR,54.148.37.5/32,no-resolve - - IP-CIDR,64.120.128.0/17,no-resolve - - IP-CIDR,66.197.128.0/17,no-resolve - - IP-CIDR,69.53.224.0/19,no-resolve - - # > BGP AS 2906 - - IP-CIDR,103.148.240.0/24,no-resolve - - IP-CIDR,103.164.7.0/24,no-resolve - - IP-CIDR,159.221.224.0/22,no-resolve - - IP-CIDR,159.221.244.0/22,no-resolve - - IP-CIDR,185.159.140.0/24,no-resolve - - IP-CIDR,185.16.228.0/22,no-resolve - - IP-CIDR,195.177.72.0/22,no-resolve - - IP-CIDR,195.47.253.0/24,no-resolve - - IP-CIDR,31.223.224.0/21,no-resolve - - # > BGP AS 40027 - - IP-CIDR,103.149.180.0/24,no-resolve - - # > 实际捕捉 - - IP-CIDR,203.116.0.0/16,no-resolve - - IP-CIDR,203.198.0.0/20,no-resolve - - IP-CIDR,203.198.80.0/21,no-resolve - - IP-CIDR,203.75.84.0/24,no-resolve - - IP-CIDR,203.83.220.0/22,no-resolve - - # > 待定 - - IP-CIDR,207.45.73.0/24,no-resolve - - IP-CIDR,218.102.32.0/19,no-resolve - - IP-CIDR,219.76.0.0/17,no-resolve - - IP-CIDR,23.78.0.0/16,no-resolve - - IP-CIDR,34.192.0.0/16,no-resolve - - IP-CIDR,34.208.0.0/12,no-resolve - - IP-CIDR,34.248.0.0/13,no-resolve - - IP-CIDR,35.160.0.0/13,no-resolve - - IP-CIDR,37.77.0.0/16,no-resolve - - IP-CIDR,37.77.184.0/21,no-resolve - - IP-CIDR,38.72.126.0/24,no-resolve - - IP-CIDR,44.224.0.0/16,no-resolve - - IP-CIDR,44.230.0.0/16,no-resolve - - IP-CIDR,52.0.0.0/15,no-resolve - - IP-CIDR,52.10.0.0/15,no-resolve - - IP-CIDR,52.12.0.0/15,no-resolve - - IP-CIDR,52.22.0.0/16,no-resolve - - IP-CIDR,52.24.0.0/14,no-resolve - - IP-CIDR,52.32.0.0/14,no-resolve - - IP-CIDR,52.40.0.0/14,no-resolve - - IP-CIDR,52.5.0.0/16,no-resolve - - IP-CIDR,52.54.0.0/16,no-resolve - - IP-CIDR,52.7.0.0/16,no-resolve - - IP-CIDR,52.71.40.0/16,no-resolve - - IP-CIDR,52.72.0.0/16,no-resolve - - IP-CIDR,52.88.0.0/15,no-resolve - - IP-CIDR,54.0.0.0/16,no-resolve - - IP-CIDR,54.148.0.0/15,no-resolve - - IP-CIDR,54.175.0.0/16,no-resolve - - IP-CIDR,54.186.0.0/15,no-resolve - - IP-CIDR,54.188.0.0/15,no-resolve - - IP-CIDR,54.213.0.0/16,no-resolve - - IP-CIDR,54.214.128.0/17,no-resolve - - IP-CIDR,54.68.0.0/15,no-resolve - - IP-CIDR,54.85.0.0/16,no-resolve - - IP-CIDR,54.86.0.0/16,no-resolve - - IP-CIDR,8.41.4.0/24,no-resolve \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/PBS b/luci-app-openclash/root/etc/openclash/rule_provider/PBS deleted file mode 100644 index 624c6e31..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/PBS +++ /dev/null @@ -1,4 +0,0 @@ -payload: - # > PBS - # - USER-AGENT,PBS* - - DOMAIN-SUFFIX,pbs.org diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Pandora b/luci-app-openclash/root/etc/openclash/rule_provider/Pandora deleted file mode 100644 index a20a314e..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Pandora +++ /dev/null @@ -1,4 +0,0 @@ -payload: - # > Pandora - - PROCESS-NAME,com.pandora.android - - DOMAIN-SUFFIX,pandora.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/PayPal b/luci-app-openclash/root/etc/openclash/rule_provider/PayPal deleted file mode 100644 index c784542f..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/PayPal +++ /dev/null @@ -1,6 +0,0 @@ -payload: - # > PayPal - # - USER-AGENT,PayPal* - - DOMAIN-KEYWORD,paypal - - DOMAIN-SUFFIX,paypal.com - - DOMAIN-SUFFIX,paypalobjects.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Pornhub b/luci-app-openclash/root/etc/openclash/rule_provider/Pornhub deleted file mode 100644 index 6f0c33da..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Pornhub +++ /dev/null @@ -1,6 +0,0 @@ -payload: - # > Pornhub - - DOMAIN-SUFFIX,phncdn.com - - DOMAIN-SUFFIX,phprcdn.com - - DOMAIN-SUFFIX,pornhub.com - - DOMAIN-SUFFIX,pornhubpremium.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Proxy b/luci-app-openclash/root/etc/openclash/rule_provider/Proxy deleted file mode 100644 index 41639043..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Proxy +++ /dev/null @@ -1,759 +0,0 @@ -payload: - # > Line - - DOMAIN-SUFFIX,lin.ee - - DOMAIN-SUFFIX,line.me - - DOMAIN-SUFFIX,line.naver.jp - - DOMAIN-SUFFIX,line-apps.com - - DOMAIN-SUFFIX,line-cdn.net - - DOMAIN-SUFFIX,line-scdn.net - - DOMAIN-SUFFIX,nhncorp.jp - - # > Riot Games - - DOMAIN-SUFFIX,riotcdn.net - - DOMAIN-SUFFIX,wr.pvp.net - - DOMAIN-SUFFIX,riotgames.com - - # > Spark - - DOMAIN-SUFFIX,api.amplitude.com - - DOMAIN-SUFFIX,app.smartmailcloud.com - - DOMAIN-SUFFIX,gate.hockeyapp.net - - DOMAIN-SUFFIX,smartmailcloud.com - - # > Tesla - - DOMAIN-KEYWORD,tesla - - # > Zooba - # - USER-AGENT,battleroyale* - - # > Top blocked sites - - DOMAIN-SUFFIX,2o7.net - - DOMAIN-SUFFIX,4everProxy.com - - DOMAIN-SUFFIX,4shared.com - - DOMAIN-SUFFIX,4sqi.net - - DOMAIN-SUFFIX,9to5mac.com - - DOMAIN-SUFFIX,abpchina.org - - DOMAIN-SUFFIX,accountkit.com - - DOMAIN-SUFFIX,adblockplus.org - - DOMAIN-SUFFIX,adobe.com - - DOMAIN-SUFFIX,adobedtm.com - - DOMAIN-SUFFIX,aerisapi.com - - DOMAIN-SUFFIX,akamaihd.net - - DOMAIN-SUFFIX,airtable.com - - DOMAIN-SUFFIX,alfredapp.com - - DOMAIN-SUFFIX,allconnected.co - - DOMAIN-SUFFIX,amazon.co - - DOMAIN-SUFFIX,amazon.co.jp - - DOMAIN-SUFFIX,amazon.com - - DOMAIN-SUFFIX,amazonaws.com - - DOMAIN-SUFFIX,ampproject.com - - DOMAIN-SUFFIX,ampproject.net - - DOMAIN-SUFFIX,ampproject.org - - DOMAIN-SUFFIX,anaconda.com - - DOMAIN-SUFFIX,ancsconf.org - - DOMAIN-SUFFIX,android.com - - DOMAIN-SUFFIX,androidify.com - - DOMAIN-SUFFIX,android-x86.org - - DOMAIN-SUFFIX,angularjs.org - - DOMAIN-SUFFIX,anthonycalzadilla.com - - DOMAIN-SUFFIX,aol.com - - DOMAIN-SUFFIX,aolcdn.com - - DOMAIN-SUFFIX,apache.org - - DOMAIN-SUFFIX,api.mixpanel.com - - DOMAIN-SUFFIX,api.termius.com - - DOMAIN-SUFFIX,api.tiktokv.com - - DOMAIN-SUFFIX,api.urbandictionary.com - - DOMAIN-SUFFIX,apigee.com - - DOMAIN-SUFFIX,apk-dl.com - - DOMAIN-SUFFIX,apkpure.com - - DOMAIN-SUFFIX,appdownloader.net - - DOMAIN-SUFFIX,apple-dns.net - - DOMAIN-SUFFIX,app-measurement.com - - DOMAIN-SUFFIX,appshopper.com - - DOMAIN-SUFFIX,arcgis.com - - DOMAIN-SUFFIX,archive.is - - DOMAIN-SUFFIX,archive.org - - DOMAIN-SUFFIX,archives.gov - - DOMAIN-SUFFIX,armorgames.com - - DOMAIN-SUFFIX,aspnetcdn.com - - DOMAIN-SUFFIX,async.be - - DOMAIN-SUFFIX,att.com - - DOMAIN-SUFFIX,avgle.com - - DOMAIN-SUFFIX,awsstatic.com - - DOMAIN-SUFFIX,azure.com - - DOMAIN-SUFFIX,azureedge.net - - DOMAIN-SUFFIX,azurewebsites.net - - DOMAIN-SUFFIX,badoo.com - - DOMAIN-SUFFIX,bandisoft.com - - DOMAIN-SUFFIX,bbtoystore.com - - DOMAIN-SUFFIX,betvictor.com - - DOMAIN-SUFFIX,bigsound.org - - DOMAIN-SUFFIX,bing.com - - DOMAIN-SUFFIX,bing.net - - DOMAIN-SUFFIX,bintray.com - - DOMAIN-SUFFIX,bit.com - - DOMAIN-SUFFIX,bit.do - - DOMAIN-SUFFIX,bit.ly - - DOMAIN-SUFFIX,bitbucket.org - - DOMAIN-SUFFIX,bitcointalk.org - - DOMAIN-SUFFIX,bitshare.com - - DOMAIN-SUFFIX,bkrtx.com - - DOMAIN-SUFFIX,blog.com - - DOMAIN-SUFFIX,blogcdn.com - - DOMAIN-SUFFIX,blogger.com - - DOMAIN-SUFFIX,bloglovin.com - - DOMAIN-SUFFIX,blogsmithmedia.com - - DOMAIN-SUFFIX,blogspot.hk - - DOMAIN-SUFFIX,bloomberg.cn - - DOMAIN-SUFFIX,bloomberg.com - - DOMAIN-SUFFIX,books.com.tw - - DOMAIN-SUFFIX,boomtrain.com - - DOMAIN-SUFFIX,botanwang.com - - DOMAIN-SUFFIX,box.com - - DOMAIN-SUFFIX,box.net - - DOMAIN-SUFFIX,boxun.com - - DOMAIN-SUFFIX,cachefly.net - - DOMAIN-SUFFIX,cbc.ca - - DOMAIN-SUFFIX,cdn.angruo.com - - DOMAIN-SUFFIX,cdn.segment.com - - DOMAIN-SUFFIX,cdnst.net - - DOMAIN-SUFFIX,celestrak.com - - DOMAIN-SUFFIX,census.gov - - DOMAIN-SUFFIX,certificate-transparency.org - - DOMAIN-SUFFIX,chinadigitaltimes.net - - DOMAIN-SUFFIX,chinatimes.com - - DOMAIN-SUFFIX,chrome.com - - DOMAIN-SUFFIX,chromecast.com - - DOMAIN-SUFFIX,chromercise.com - - DOMAIN-SUFFIX,chromestatus.com - - DOMAIN-SUFFIX,chromium.org - - DOMAIN-SUFFIX,cl.ly - - DOMAIN-SUFFIX,clien.net - - DOMAIN-SUFFIX,cloudflare.com - - DOMAIN-SUFFIX,cloudfront.net - - DOMAIN-SUFFIX,cloudgarage.jp - - DOMAIN-SUFFIX,cloudmagic.com - - DOMAIN-SUFFIX,cmail19.com - - DOMAIN-SUFFIX,cnet.com - - DOMAIN-SUFFIX,cnn.com - - DOMAIN-SUFFIX,cocoapods.org - - DOMAIN-SUFFIX,comodoca.com - - DOMAIN-SUFFIX,content.office.net - - DOMAIN-SUFFIX,crisp.chat - - DOMAIN-SUFFIX,culturedcode.com - - DOMAIN-SUFFIX,cygames.jp - - DOMAIN-SUFFIX,d.pr - - DOMAIN-SUFFIX,danilo.to - - DOMAIN-SUFFIX,daolan.net - - DOMAIN-SUFFIX,data-vocabulary.org - - DOMAIN-SUFFIX,dayone.me - - DOMAIN-SUFFIX,db.tt - - DOMAIN-SUFFIX,dcmilitary.com - - DOMAIN-SUFFIX,deja.com - - DOMAIN-SUFFIX,demdex.net - - DOMAIN-SUFFIX,deskconnect.com - - DOMAIN-SUFFIX,digisfera.com - - DOMAIN-SUFFIX,digitaltrends.com - - DOMAIN-SUFFIX,disconnect.me - - DOMAIN-SUFFIX,disq.us - - DOMAIN-SUFFIX,disqus.com - - DOMAIN-SUFFIX,disquscdn.com - - DOMAIN-SUFFIX,dmm.co.jp - - DOMAIN-SUFFIX,dnsimple.com - - DOMAIN-SUFFIX,docker.com - - DOMAIN-SUFFIX,doub.io - - DOMAIN-SUFFIX,dowjones.com - - DOMAIN-SUFFIX,dribbble.com - - DOMAIN-SUFFIX,droplr.com - - DOMAIN-SUFFIX,duckduckgo.com - - DOMAIN-SUFFIX,dueapp.com - - DOMAIN-SUFFIX,dw.com - - DOMAIN-SUFFIX,easybib.com - - DOMAIN-SUFFIX,economist.com - - DOMAIN-SUFFIX,edgecastcdn.net - - DOMAIN-SUFFIX,edgekey.net - - DOMAIN-SUFFIX,edgesuite.net - - DOMAIN-SUFFIX,engadget.com - - DOMAIN-SUFFIX,entrust.net - - DOMAIN-SUFFIX,eurekavpt.com - - DOMAIN-SUFFIX,evernote.com - - DOMAIN-SUFFIX,extmatrix.com - - DOMAIN-SUFFIX,eyny.com - - DOMAIN-SUFFIX,fabric.io - - DOMAIN-SUFFIX,fastly.net - - DOMAIN-SUFFIX,fastmail.com - - DOMAIN-SUFFIX,fc2.com - - DOMAIN-SUFFIX,feedburner.com - - DOMAIN-SUFFIX,feedly.com - - DOMAIN-SUFFIX,feedsportal.com - - DOMAIN-SUFFIX,fiftythree.com - - DOMAIN-SUFFIX,firebaseio.com - - DOMAIN-SUFFIX,flexibits.com - - DOMAIN-SUFFIX,flickr.com - - DOMAIN-SUFFIX,flipboard.com - - DOMAIN-SUFFIX,flipkart.com - - DOMAIN-SUFFIX,flitto.com - - DOMAIN-SUFFIX,flurry.com - - DOMAIN-SUFFIX,freeopenProxy.com - - DOMAIN-SUFFIX,fubo.tv - - DOMAIN-SUFFIX,fullstory.com - - DOMAIN-SUFFIX,fzlm.net - - DOMAIN-SUFFIX,g.co - - DOMAIN-SUFFIX,gabia.net - - DOMAIN-SUFFIX,garena.com - - DOMAIN-SUFFIX,geni.us - - DOMAIN-SUFFIX,get.how - - DOMAIN-SUFFIX,getcloudapp.com - - DOMAIN-SUFFIX,getfoxyProxy.org - - DOMAIN-SUFFIX,getlantern.org - - DOMAIN-SUFFIX,getmdl.io - - DOMAIN-SUFFIX,getpricetag.com - - DOMAIN-SUFFIX,gfw.press - - DOMAIN-SUFFIX,gfx.ms - - DOMAIN-SUFFIX,ggpht.com - - DOMAIN-SUFFIX,ghostnoteapp.com - - DOMAIN-SUFFIX,ghcr.io - - DOMAIN-SUFFIX,git.io - - DOMAIN-SUFFIX,gitbook.com - - DOMAIN-SUFFIX,globalsign.com - - DOMAIN-SUFFIX,gmocloud.com - - DOMAIN-SUFFIX,gmodules.com - - DOMAIN-SUFFIX,go.com - - DOMAIN-SUFFIX,go.jp - - DOMAIN-SUFFIX,godaddy.com - - DOMAIN-SUFFIX,golang.org - - DOMAIN-SUFFIX,gongm.in - - DOMAIN-SUFFIX,goo.gl - - DOMAIN-SUFFIX,goodreaders.com - - DOMAIN-SUFFIX,goodreads.com - - DOMAIN-SUFFIX,gravatar.com - - DOMAIN-SUFFIX,gstatic.cn - - DOMAIN-SUFFIX,gstatic.com - - DOMAIN-SUFFIX,gunsamerica.com - - DOMAIN-SUFFIX,gvt0.com - - DOMAIN-SUFFIX,gvt1.com - - DOMAIN-SUFFIX,helpshift.com - - DOMAIN-SUFFIX,hitun.io - - DOMAIN-SUFFIX,hockeyapp.net - - DOMAIN-SUFFIX,homedepot.com - - DOMAIN-SUFFIX,hootsuite.com - - DOMAIN-SUFFIX,howtoforge.com - - DOMAIN-SUFFIX,i-cable.com - - DOMAIN-SUFFIX,iam.soy - - DOMAIN-SUFFIX,icoco.com - - DOMAIN-SUFFIX,icons8.com - - DOMAIN-SUFFIX,ift.tt - - DOMAIN-SUFFIX,ifttt.com - - DOMAIN-SUFFIX,imageshack.us - - DOMAIN-SUFFIX,img.ly - - DOMAIN-SUFFIX,imgur.com - - DOMAIN-SUFFIX,imore.com - - DOMAIN-SUFFIX,ingress.com - - DOMAIN-SUFFIX,inoreader.com - - DOMAIN-SUFFIX,insder.co - - DOMAIN-SUFFIX,instapaper.com - - DOMAIN-SUFFIX,instructables.com - - DOMAIN-SUFFIX,io.io - - DOMAIN-SUFFIX,ip.sb - - DOMAIN-SUFFIX,ipaddress.com - - DOMAIN-SUFFIX,ipn.li - - DOMAIN-SUFFIX,is.gd - - DOMAIN-SUFFIX,ishowsapp.com - - DOMAIN-SUFFIX,issuu.com - - DOMAIN-SUFFIX,itgonglun.com - - DOMAIN-SUFFIX,itun.es - - DOMAIN-SUFFIX,ixquick.com - - DOMAIN-SUFFIX,j.mp - - DOMAIN-SUFFIX,javbus.com - - DOMAIN-SUFFIX,js.revsci.net - - DOMAIN-SUFFIX,jshint.com - - DOMAIN-SUFFIX,jtvnw.net - - DOMAIN-SUFFIX,justgetflux.com - - DOMAIN-SUFFIX,kakao.co.kr - - DOMAIN-SUFFIX,kakao.com - - DOMAIN-SUFFIX,kakaocdn.net - - DOMAIN-SUFFIX,kat.cr - - DOMAIN-SUFFIX,kenengba.com - - DOMAIN-SUFFIX,kik.com - - DOMAIN-SUFFIX,klip.me - - DOMAIN-SUFFIX,leancloud.com - - DOMAIN-SUFFIX,leetcode.com - - DOMAIN-SUFFIX,lhie1.com - - DOMAIN-SUFFIX,libsyn.com - - DOMAIN-SUFFIX,licdn.com - - DOMAIN-SUFFIX,lightboxcdn.com - - DOMAIN-SUFFIX,like.com - - DOMAIN-SUFFIX,linkedin.com - - DOMAIN-SUFFIX,linode.com - - DOMAIN-SUFFIX,lithium.com - - DOMAIN-SUFFIX,littlehj.com - - DOMAIN-SUFFIX,livefilestore.com - - DOMAIN-SUFFIX,llnwd.net - - DOMAIN-SUFFIX,localnetwork.uop - - DOMAIN-SUFFIX,logmein.com - - DOMAIN-SUFFIX,macid.co - - DOMAIN-SUFFIX,macromedia.com - - DOMAIN-SUFFIX,macrumors.com - - DOMAIN-SUFFIX,mangaup.jp - - DOMAIN-SUFFIX,manhuaren.com - - DOMAIN-SUFFIX,marketwatch.com - - DOMAIN-SUFFIX,mashable.com - - DOMAIN-SUFFIX,mathjax.org - - DOMAIN-SUFFIX,maven.org - - DOMAIN-SUFFIX,medium.com - - DOMAIN-SUFFIX,mega.co.nz - - DOMAIN-SUFFIX,mega.nz - - DOMAIN-SUFFIX,megaupload.com - - DOMAIN-SUFFIX,microsofttranslator.com - - DOMAIN-SUFFIX,mindnode.com - - DOMAIN-SUFFIX,mixin.one - - DOMAIN-SUFFIX,mlssoccer.com - - DOMAIN-SUFFIX,mobile01.com - - DOMAIN-SUFFIX,modmyi.com - - DOMAIN-SUFFIX,moves-export.com - - DOMAIN-SUFFIX,mp3buscador.com - - DOMAIN-SUFFIX,msedge.net - - DOMAIN-SUFFIX,mycnnews.com - - DOMAIN-SUFFIX,myfontastic.com - - DOMAIN-SUFFIX,name.com - - DOMAIN-SUFFIX,nasa.gov - - DOMAIN-SUFFIX,ndr.de - - DOMAIN-SUFFIX,netdna-cdn.com - - DOMAIN-SUFFIX,newipnow.com - - DOMAIN-SUFFIX,nextmedia.com - - DOMAIN-SUFFIX,nicovideo.jp - - DOMAIN-SUFFIX,nih.gov - - DOMAIN-SUFFIX,nimg.jp - - DOMAIN-SUFFIX,nintendo.com - - DOMAIN-SUFFIX,nintendo.net - - DOMAIN-SUFFIX,notion.so - - DOMAIN-SUFFIX,novafile.com - - DOMAIN-SUFFIX,nrk.no - - DOMAIN-SUFFIX,nsstatic.net - - DOMAIN-SUFFIX,nssurge.com - - DOMAIN-SUFFIX,nyt.com - - DOMAIN-SUFFIX,nytimes.com - - DOMAIN-SUFFIX,nytimg.com - - DOMAIN-SUFFIX,nytstyle.com - - DOMAIN-SUFFIX,office365.com - - DOMAIN-SUFFIX,omnigroup.com - - DOMAIN-SUFFIX,onenote.com - - DOMAIN-SUFFIX,ooyala.com - - DOMAIN-SUFFIX,openvpn.net - - DOMAIN-SUFFIX,openwrt.org - - DOMAIN-SUFFIX,optimizely.com - - DOMAIN-SUFFIX,orkut.com - - DOMAIN-SUFFIX,osha.gov - - DOMAIN-SUFFIX,osxdaily.com - - DOMAIN-SUFFIX,overcast.fm - - DOMAIN-SUFFIX,ow.ly - - DOMAIN-SUFFIX,paddle.com - - DOMAIN-SUFFIX,paddleapi.com - - DOMAIN-SUFFIX,panoramio.com - - DOMAIN-SUFFIX,parallels.com - - DOMAIN-SUFFIX,parse.com - - DOMAIN-SUFFIX,pdfexpert.com - - DOMAIN-SUFFIX,periscope.tv - - DOMAIN-SUFFIX,piaotian.net - - DOMAIN-SUFFIX,picacomic.com - - DOMAIN-SUFFIX,picasaweb.com - - DOMAIN-SUFFIX,pinboard.in - - DOMAIN-SUFFIX,ping.pe - - DOMAIN-SUFFIX,pinterest.com - - DOMAIN-SUFFIX,pixelmator.com - - DOMAIN-SUFFIX,pixiv.net - - DOMAIN-SUFFIX,pixnet.net - - DOMAIN-SUFFIX,playpcesor.com - - DOMAIN-SUFFIX,pokemon.com - - DOMAIN-SUFFIX,polymer-project.org - - DOMAIN-SUFFIX,popo.tw - - DOMAIN-SUFFIX,potato.im - - DOMAIN-SUFFIX,redd.it - - DOMAIN-SUFFIX,rthk.hk - - DOMAIN-SUFFIX,prfct.co - - DOMAIN-SUFFIX,proxfree.com - - DOMAIN-SUFFIX,psiphon3.com - - DOMAIN-SUFFIX,ptt.cc - - DOMAIN-SUFFIX,pubu.com.tw - - DOMAIN-SUFFIX,puffinbrowser.com - - DOMAIN-SUFFIX,pushbullet.com - - DOMAIN-SUFFIX,pushwoosh.com - - DOMAIN-SUFFIX,pximg.net - - DOMAIN-SUFFIX,quora.com - - DOMAIN-SUFFIX,quoracdn.net - - DOMAIN-SUFFIX,readingtimes.com.tw - - DOMAIN-SUFFIX,readmoo.com - - DOMAIN-SUFFIX,recaptcha.net - - DOMAIN-SUFFIX,reddit.com - - DOMAIN-SUFFIX,redditmedia.com - - DOMAIN-SUFFIX,reuters.com - - DOMAIN-SUFFIX,rfi.fr - - DOMAIN-SUFFIX,rileyguide.com - - DOMAIN-SUFFIX,rime.im - - DOMAIN-SUFFIX,rsf.org - - DOMAIN-SUFFIX,sciencedaily.com - - DOMAIN-SUFFIX,sciencemag.org - - DOMAIN-SUFFIX,scribd.com - - DOMAIN-SUFFIX,search.com - - DOMAIN-SUFFIX,servebom.com - - DOMAIN-SUFFIX,sexinsex.net - - DOMAIN-SUFFIX,sfx.ms - - DOMAIN-SUFFIX,shadowsocks.org - - DOMAIN-SUFFIX,shadowverse.jp - - DOMAIN-SUFFIX,sharethis.com - - DOMAIN-SUFFIX,shazam.com - - DOMAIN-SUFFIX,shutterstock.com - - DOMAIN-SUFFIX,sidelinesnews.com - - DOMAIN-SUFFIX,simp.ly - - DOMAIN-SUFFIX,simplenote.com - - DOMAIN-SUFFIX,sketchappsources.com - - DOMAIN-SUFFIX,slack.com - - DOMAIN-SUFFIX,slack-edge.com - - DOMAIN-SUFFIX,slack-msgs.com - - DOMAIN-SUFFIX,slideshare.net - - DOMAIN-SUFFIX,smartdnsproxy.com - - DOMAIN-SUFFIX,smh.com.au - - DOMAIN-SUFFIX,snapchat.com - - DOMAIN-SUFFIX,sndcdn.com - - DOMAIN-SUFFIX,sockslist.net - - DOMAIN-SUFFIX,soundcloud.com - - DOMAIN-SUFFIX,sourceforge.net - - DOMAIN-SUFFIX,sowers.org.hk - - DOMAIN-SUFFIX,speedsmart.net - - DOMAIN-SUFFIX,spike.com - - DOMAIN-SUFFIX,squarespace.com - - DOMAIN-SUFFIX,ssa.gov - - DOMAIN-SUFFIX,sstatic.net - - DOMAIN-SUFFIX,st.luluku.pw - - DOMAIN-SUFFIX,stackoverflow.com - - DOMAIN-SUFFIX,starp2p.com - - DOMAIN-SUFFIX,startpage.com - - DOMAIN-SUFFIX,state.gov - - DOMAIN-SUFFIX,staticflickr.com - - DOMAIN-SUFFIX,storify.com - - DOMAIN-SUFFIX,stumbleupon.com - - DOMAIN-SUFFIX,sugarsync.com - - DOMAIN-SUFFIX,supermariorun.com - - DOMAIN-SUFFIX,surfeasy.com.au - - DOMAIN-SUFFIX,surge.run - - DOMAIN-SUFFIX,surrenderat20.net - - DOMAIN-SUFFIX,sydneytoday.com - - DOMAIN-SUFFIX,symauth.com - - DOMAIN-SUFFIX,symcb.com - - DOMAIN-SUFFIX,symcd.com - - DOMAIN-SUFFIX,t66y.com - - DOMAIN-SUFFIX,tablesgenerator.com - - DOMAIN-SUFFIX,tabtter.jp - - DOMAIN-SUFFIX,talk853.com - - DOMAIN-SUFFIX,talkboxapp.com - - DOMAIN-SUFFIX,talkonly.net - - DOMAIN-SUFFIX,tapbots.com - - DOMAIN-SUFFIX,tapbots.net - - DOMAIN-SUFFIX,teamviewer.com - - DOMAIN-SUFFIX,techcrunch.com - - DOMAIN-SUFFIX,technorati.com - - DOMAIN-SUFFIX,techsmith.com - - DOMAIN-SUFFIX,teddysun.com - - DOMAIN-SUFFIX,textnow.me - - DOMAIN-SUFFIX,thebobs.com - - DOMAIN-SUFFIX,theinitium.com - - DOMAIN-SUFFIX,thepiratebay.org - - DOMAIN-SUFFIX,theverge.com - - DOMAIN-SUFFIX,thewgo.org - - DOMAIN-SUFFIX,tiltbrush.com - - DOMAIN-SUFFIX,time.com - - DOMAIN-SUFFIX,timeinc.net - - DOMAIN-SUFFIX,tinder.com - - DOMAIN-SUFFIX,tiny.cc - - DOMAIN-SUFFIX,tinychat.com - - DOMAIN-SUFFIX,tinypic.com - - DOMAIN-SUFFIX,tmblr.co - - DOMAIN-SUFFIX,todoist.com - - DOMAIN-SUFFIX,togetter.com - - DOMAIN-SUFFIX,tokyocn.com - - DOMAIN-SUFFIX,tomshardware.com - - DOMAIN-SUFFIX,torcn.com - - DOMAIN-SUFFIX,torrentprivacy.com - - DOMAIN-SUFFIX,torrentproject.se - - DOMAIN-SUFFIX,torrentz.eu - - DOMAIN-SUFFIX,tradingview.com - - DOMAIN-SUFFIX,traffichaus.com - - DOMAIN-SUFFIX,trakt.tv - - DOMAIN-SUFFIX,transparency.org - - DOMAIN-SUFFIX,trello.com - - DOMAIN-SUFFIX,trendsmap.com - - DOMAIN-SUFFIX,trulyergonomic.com - - DOMAIN-SUFFIX,trustasiassl.com - - DOMAIN-SUFFIX,tt-rss.org - - DOMAIN-SUFFIX,ttvnw.net - - DOMAIN-SUFFIX,tumblr.co - - DOMAIN-SUFFIX,tumblr.com - - DOMAIN-SUFFIX,turbobit.net - - DOMAIN-SUFFIX,tv.com - - DOMAIN-SUFFIX,tweetdeck.com - - DOMAIN-SUFFIX,tweetmarker.net - - DOMAIN-SUFFIX,twimg.co - - DOMAIN-SUFFIX,twitch.tv - - DOMAIN-SUFFIX,twitthat.com - - DOMAIN-SUFFIX,twtkr.com - - DOMAIN-SUFFIX,twttr.com - - DOMAIN-SUFFIX,txmblr.com - - DOMAIN-SUFFIX,typcn.com - - DOMAIN-SUFFIX,typekit.net - - DOMAIN-SUFFIX,typography.com - - DOMAIN-SUFFIX,ubertags.com - - DOMAIN-SUFFIX,ublock.org - - DOMAIN-SUFFIX,ubnt.com - - DOMAIN-SUFFIX,uchicago.edu - - DOMAIN-SUFFIX,udn.com - - DOMAIN-SUFFIX,ugo.com - - DOMAIN-SUFFIX,uhdwallpapers.org - - DOMAIN-SUFFIX,ulyssesapp.com - - DOMAIN-SUFFIX,unblockdmm.com - - DOMAIN-SUFFIX,unblocksites.co - - DOMAIN-SUFFIX,unpo.org - - DOMAIN-SUFFIX,unsplash.com - - DOMAIN-SUFFIX,untraceable.us - - DOMAIN-SUFFIX,uploaded.net - - DOMAIN-SUFFIX,uProxy.org - - DOMAIN-SUFFIX,upwork.com - - DOMAIN-SUFFIX,urchin.com - - DOMAIN-SUFFIX,urlparser.com - - DOMAIN-SUFFIX,us.to - - DOMAIN-SUFFIX,usertrust.com - - DOMAIN-SUFFIX,usgs.gov - - DOMAIN-SUFFIX,usma.edu - - DOMAIN-SUFFIX,uspto.gov - - DOMAIN-SUFFIX,ustream.tv - - DOMAIN-SUFFIX,v.gd - - DOMAIN-SUFFIX,v2ex.co - - DOMAIN-SUFFIX,v2ray.com - - DOMAIN-SUFFIX,van001.com - - DOMAIN-SUFFIX,vanpeople.com - - DOMAIN-SUFFIX,vansky.com - - DOMAIN-SUFFIX,vbstatic.co - - DOMAIN-SUFFIX,venchina.com - - DOMAIN-SUFFIX,venturebeat.com - - DOMAIN-SUFFIX,veoh.com - - DOMAIN-SUFFIX,verizonwireless.com - - DOMAIN-SUFFIX,viber.com - - DOMAIN-SUFFIX,vid.me - - DOMAIN-SUFFIX,videomega.tv - - DOMAIN-SUFFIX,vidinfo.org - - DOMAIN-SUFFIX,vimeo.com - - DOMAIN-SUFFIX,vimeocdn.com - - DOMAIN-SUFFIX,vimperator.org - - DOMAIN-SUFFIX,vine.co - - DOMAIN-SUFFIX,visibletweets.com - - DOMAIN-SUFFIX,viu.com - - DOMAIN-SUFFIX,vivaldi.com - - DOMAIN-SUFFIX,voachinese.com - - DOMAIN-SUFFIX,vocativ.com - - DOMAIN-SUFFIX,vox-cdn.com - - DOMAIN-SUFFIX,vpnaccount.org - - DOMAIN-SUFFIX,vpnbook.com - - DOMAIN-SUFFIX,vpngate.net - - DOMAIN-SUFFIX,vsco.co - - DOMAIN-SUFFIX,vultr.com - - DOMAIN-SUFFIX,vzw.com - - DOMAIN-SUFFIX,w.org - - DOMAIN-SUFFIX,w3schools.com - - DOMAIN-SUFFIX,wattpad.com - - DOMAIN-SUFFIX,web2project.net - - DOMAIN-SUFFIX,webfreer.com - - DOMAIN-SUFFIX,weblagu.com - - DOMAIN-SUFFIX,websnapr.com - - DOMAIN-SUFFIX,webtype.com - - DOMAIN-SUFFIX,webwarper.net - - DOMAIN-SUFFIX,wenxuecity.com - - DOMAIN-SUFFIX,westca.com - - DOMAIN-SUFFIX,westpoint.edu - - DOMAIN-SUFFIX,whatbrowser.org - - DOMAIN-SUFFIX,wikiwand.com - - DOMAIN-SUFFIX,wikileaks.info - - DOMAIN-SUFFIX,wikileaks.org - - DOMAIN-SUFFIX,wikileaks-forum.com - - DOMAIN-SUFFIX,wikimedia.org - - DOMAIN-SUFFIX,wikipedia.com - - DOMAIN-SUFFIX,wikipedia.org - - DOMAIN-SUFFIX,wn.com - - DOMAIN-SUFFIX,wordpress.com - - DOMAIN-SUFFIX,workflow.is - - DOMAIN-SUFFIX,workflowy.com - - DOMAIN-SUFFIX,worldcat.org - - DOMAIN-SUFFIX,wow.com - - DOMAIN-SUFFIX,wp.com - - DOMAIN-SUFFIX,wsj.com - - DOMAIN-SUFFIX,wsj.net - - DOMAIN-SUFFIX,wwitv.com - - DOMAIN-SUFFIX,xanga.com - - DOMAIN-SUFFIX,xclient.info - - DOMAIN-SUFFIX,xda-developers.com - - DOMAIN-SUFFIX,xeeno.com - - DOMAIN-SUFFIX,xiti.com - - DOMAIN-SUFFIX,xteko.com - - DOMAIN-SUFFIX,xuite.net - - DOMAIN-SUFFIX,xvideos.com - - DOMAIN-SUFFIX,yahoo.com - - DOMAIN-SUFFIX,yahooapis.com - - DOMAIN-SUFFIX,yasni.co.uk - - DOMAIN-SUFFIX,yastatic.net - - DOMAIN-SUFFIX,ycombinator.com - - DOMAIN-SUFFIX,yeeyi.com - - DOMAIN-SUFFIX,yesasia.com - - DOMAIN-SUFFIX,yes-news.com - - DOMAIN-SUFFIX,yidio.com - - DOMAIN-SUFFIX,yimg.com - - DOMAIN-SUFFIX,ying.com - - DOMAIN-SUFFIX,yorkbbs.ca - - DOMAIN-SUFFIX,youmaker.com - - DOMAIN-SUFFIX,yourlisten.com - - DOMAIN-SUFFIX,youtu.be - - DOMAIN-SUFFIX,yoyo.org - - DOMAIN-SUFFIX,ytimg.com - - DOMAIN-SUFFIX,zacebook.com - - DOMAIN-SUFFIX,zalmos.com - - DOMAIN-SUFFIX,zaobao.com.sg - - DOMAIN-SUFFIX,zeutch.com - - DOMAIN-SUFFIX,zynamics.com - - # > Force some domains which are fucked by GFW while resolving DNS,or do not respect the system Proxy - # - USER-AGENT,WhatsApp* - - - DOMAIN-KEYWORD,appledaily - - DOMAIN-KEYWORD,beetalk - - DOMAIN-KEYWORD,blogspot - - DOMAIN-KEYWORD,dropbox - - DOMAIN-KEYWORD,facebook - - DOMAIN-KEYWORD,github - - DOMAIN-KEYWORD,instagram - - DOMAIN-KEYWORD,twitter - - DOMAIN-KEYWORD,whatsapp - - DOMAIN-KEYWORD,google - - DOMAIN-SUFFIX,1e100.net - - DOMAIN-SUFFIX,2mdn.net - - DOMAIN-SUFFIX,abc.xyz - - DOMAIN-SUFFIX,akamai.net - - DOMAIN-SUFFIX,appspot.com - - DOMAIN-SUFFIX,autodraw.com - - DOMAIN-SUFFIX,bandwagonhost.com - - DOMAIN-SUFFIX,blogblog.com - - DOMAIN-SUFFIX,chromeexperiments.com - - DOMAIN-SUFFIX,creativelab5.com - - DOMAIN-SUFFIX,crittercism.com - - DOMAIN-SUFFIX,culturalspot.org - - DOMAIN-SUFFIX,dartlang.org - - DOMAIN-SUFFIX,fb.com - - DOMAIN-SUFFIX,fb.me - - DOMAIN-SUFFIX,fbcdn.net - - DOMAIN-SUFFIX,fbsbx.com - - DOMAIN-SUFFIX,gcr.io - - DOMAIN-SUFFIX,gmail.com - - DOMAIN-SUFFIX,gosetsuden.jp - - DOMAIN-SUFFIX,gwtproject.org - - DOMAIN-SUFFIX,hackmd.io - - DOMAIN-SUFFIX,heroku.com - - DOMAIN-SUFFIX,html5rocks.com - - DOMAIN-SUFFIX,keyhole.com - - DOMAIN-SUFFIX,kobo.com - - DOMAIN-SUFFIX,kobobooks.com - - DOMAIN-SUFFIX,madewithcode.com - - DOMAIN-SUFFIX,material.io - - DOMAIN-SUFFIX,messenger.com - - DOMAIN-SUFFIX,netmarble.com - - DOMAIN-SUFFIX,nianticlabs.com - - DOMAIN-SUFFIX,pinimg.com - - DOMAIN-SUFFIX,pubnub.com - - DOMAIN-SUFFIX,scdn.co - - DOMAIN-SUFFIX,t.co - - DOMAIN-SUFFIX,tensorflow.org - - DOMAIN-SUFFIX,toggleable.com - - DOMAIN-SUFFIX,torproject.org - - DOMAIN-SUFFIX,twimg.com - - DOMAIN-SUFFIX,twitpic.com - - DOMAIN-SUFFIX,unfiltered.news - - DOMAIN-SUFFIX,waveprotocol.org - - DOMAIN-SUFFIX,webmproject.org - - DOMAIN-SUFFIX,webrtc.org - - # > V2EX - - DOMAIN-SUFFIX,v2ex.com - - - DOMAIN-KEYWORD,dlercloud - - # > exception - - DOMAIN-SUFFIX,wheel-size.cn - - DOMAIN-SUFFIX,chalungu.cn - - # > Amazon - - IP-CIDR,13.32.0.0/16,no-resolve - - IP-CIDR,13.33.0.0/16,no-resolve - - IP-CIDR,13.35.0.0/17,no-resolve - - IP-CIDR,18.184.0.0/15,no-resolve - - IP-CIDR,18.194.0.0/15,no-resolve - - IP-CIDR,18.208.0.0/13,no-resolve - - IP-CIDR,18.232.0.0/14,no-resolve - - IP-CIDR,52.200.0.0/13,no-resolve - - IP-CIDR,52.58.0.0/15,no-resolve - - IP-CIDR,52.74.0.0/16,no-resolve - - IP-CIDR,52.77.0.0/16,no-resolve - - IP-CIDR,52.84.0.0/15,no-resolve - - IP-CIDR,54.156.0.0/14,no-resolve - - IP-CIDR,54.226.0.0/15,no-resolve - - IP-CIDR,54.230.156.0/22,no-resolve - - IP-CIDR,54.93.0.0/16,no-resolve - - # > Facebook - - IP-CIDR,103.4.96.0/22,no-resolve - - IP-CIDR,129.134.0.0/17,no-resolve - - IP-CIDR,157.240.0.0/17,no-resolve - - IP-CIDR,173.252.64.0/19,no-resolve - - IP-CIDR,173.252.96.0/19,no-resolve - - IP-CIDR,179.60.192.0/22,no-resolve - - IP-CIDR,185.60.216.0/22,no-resolve - - IP-CIDR,204.15.20.0/22,no-resolve - - IP-CIDR,31.13.24.0/21,no-resolve - - IP-CIDR,31.13.64.0/18,no-resolve - - IP-CIDR,45.64.40.0/22,no-resolve - - IP-CIDR,66.220.144.0/20,no-resolve - - IP-CIDR,69.171.224.0/19,no-resolve - - IP-CIDR,69.63.176.0/20,no-resolve - - IP-CIDR,74.119.76.0/22,no-resolve - - # > Google - - IP-CIDR,173.194.0.0/16,no-resolve - - IP-CIDR,74.125.0.0/16,no-resolve - - # > Kakao Talk - - IP-CIDR,1.201.0.0/24,no-resolve - - IP-CIDR,103.246.56.0/22,no-resolve - - IP-CIDR,103.27.148.0/22,no-resolve - - IP-CIDR,110.76.140.0/22,no-resolve - - IP-CIDR,113.61.104.0/22,no-resolve - - IP-CIDR,27.0.236.0/22,no-resolve - - # > LINE - - IP-CIDR,103.2.28.0/22,no-resolve - - IP-CIDR,119.235.224.0/21,no-resolve - - IP-CIDR,119.235.232.0/23,no-resolve - - IP-CIDR,119.235.235.0/24,no-resolve - - IP-CIDR,119.235.236.0/23,no-resolve - - IP-CIDR,125.6.146.0/24,no-resolve - - IP-CIDR,125.6.149.0/24,no-resolve - - IP-CIDR,125.6.190.0/24,no-resolve - - IP-CIDR,125.209.208.0/20,no-resolve - - IP-CIDR,203.104.103.0/24,no-resolve - - IP-CIDR,203.104.128.0/20,no-resolve - - IP-CIDR,203.174.66.64/26,no-resolve - - IP-CIDR,203.174.77.0/24,no-resolve - - # > Potato Chat - - IP-CIDR,13.251.24.157/24,no-resolve - - IP-CIDR,13.251.41.203/24,no-resolve - - IP-CIDR,17.252.156.147/24,no-resolve - - IP-CIDR,17.252.157.26/24,no-resolve - - # > SoftLayer - - IP-CIDR,74.86.0.0/16,no-resolve - - IP-CIDR,75.126.0.0/16,no-resolve - - IP-CIDR,174.37.0.0/16,no-resolve - - IP-CIDR,208.43.0.0/16,no-resolve diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Reject b/luci-app-openclash/root/etc/openclash/rule_provider/Reject deleted file mode 100644 index 81c41679..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Reject +++ /dev/null @@ -1,8325 +0,0 @@ -# Ads in Video apps -payload: - # > iqiyi & pps - - DOMAIN-SUFFIX,a.ckm.iqiyi.com - - DOMAIN-SUFFIX,ad.m.iqiyi.com - - DOMAIN-SUFFIX,afp.iqiyi.com - - DOMAIN-SUFFIX,androidgo.duapp.com - - DOMAIN-SUFFIX,api.cupid.iqiyi.com - - DOMAIN-SUFFIX,api.cupid.qiyi.com - - DOMAIN-SUFFIX,c.uaa.iqiyi.com - - DOMAIN-SUFFIX,cloudpush.iqiyi.com - - DOMAIN-SUFFIX,cm.passport.iqiyi.com - - DOMAIN-SUFFIX,count.game.pps.tv - - DOMAIN-SUFFIX,cupid.iqiyi.com - - DOMAIN-SUFFIX,emoticon.sns.iqiyi.com - - DOMAIN-SUFFIX,game.pps.tv - - DOMAIN-SUFFIX,gamecenter.iqiyi.com - - DOMAIN-SUFFIX,ifacelog.iqiyi.com - - DOMAIN-SUFFIX,mbdlog.iqiyi.com - - DOMAIN-SUFFIX,msg.71.am - - DOMAIN-SUFFIX,msg.qy.net - - DOMAIN-SUFFIX,msg.iqiyi.com - - DOMAIN-SUFFIX,msg.video.qiyi.com - - DOMAIN-SUFFIX,msg2.video.qiyi.com - - DOMAIN-SUFFIX,msga.71.am - - DOMAIN-SUFFIX,msga.cupid.iqiyi.com - - DOMAIN-SUFFIX,nl.notice.iqiyi.com - - DOMAIN-SUFFIX,nl.rcd.iqiyi.com - - DOMAIN-SUFFIX,notice.iqiyi.com - - DOMAIN-SUFFIX,noxagile.duapp.com - - DOMAIN-SUFFIX,paopao.iqiyi.com - - DOMAIN-SUFFIX,policy.video.iqiyi.com - - DOMAIN-SUFFIX,static.g.iqiyi.com - - DOMAIN-SUFFIX,static.g.ppstream.com - - DOMAIN-SUFFIX,store.iqiyi.com - - DOMAIN-SUFFIX,t7z.cupid.iqiyi.com - - DOMAIN-SUFFIX,tracker.sns.iqiyi.com - - DOMAIN-SUFFIX,yuedu.iqiyi.com - # - URL-REGEX,https?://.+/videos/other/.+ - # - URL-REGEX,https?://paopao\w?.qiyipic.com - - IP-CIDR,101.227.97.240/32 - - IP-CIDR,101.227.200.11/32 - - IP-CIDR,101.227.200.28/32 - - IP-CIDR,124.192.153.42/32 - - # > Youku & Tudou - - DOMAIN-SUFFIX,actives.youku.com - - DOMAIN-SUFFIX,ad.api.3g.tudou.com - - DOMAIN-SUFFIX,ad.api.3g.youku.com - - DOMAIN-SUFFIX,ad.api.mobile.youku.com - - DOMAIN-SUFFIX,ad.mobile.youku.com - - DOMAIN-SUFFIX,a-dxk.play.api.3g.youku.com - - DOMAIN-SUFFIX,b.smartvideo.youku.com - - DOMAIN-SUFFIX,c.yes.youku.com - - DOMAIN-SUFFIX,das.api.youku.com - - DOMAIN-SUFFIX,das.mobile.youku.com - - DOMAIN-SUFFIX,dev-push.m.youku.com - - DOMAIN-SUFFIX,dl.g.youku.com - - DOMAIN-SUFFIX,dmapp.youku.com - - DOMAIN-SUFFIX,gamex.mobile.youku.com - - DOMAIN-SUFFIX,hudong.pl.youku.com - - DOMAIN-SUFFIX,huodong.pl.youku.com - - DOMAIN-SUFFIX,huodong.vip.youku.com - - DOMAIN-SUFFIX,hz.youku.com - - DOMAIN-SUFFIX,iyes.youku.com - - DOMAIN-SUFFIX,l.ykimg.com - - DOMAIN-SUFFIX,lstat.youku.com - - DOMAIN-SUFFIX,m.yes.youku.com - - DOMAIN-SUFFIX,mobilemsg.youku.com - - DOMAIN-SUFFIX,msg.youku.com - - DOMAIN-SUFFIX,myes.youku.com - - DOMAIN-SUFFIX,p.l.youku.com - - DOMAIN-SUFFIX,passport-log.youku.com - - DOMAIN-SUFFIX,p-log.ykimg.com - - DOMAIN-SUFFIX,push.m.youku.com - - DOMAIN-SUFFIX,r.l.youku.com - - DOMAIN-SUFFIX,s.p.youku.com - - DOMAIN-SUFFIX,sdk.api.gamex.mobile.youku.com - - DOMAIN-SUFFIX,sdk.m.youku.com - - DOMAIN-SUFFIX,stat.youku.com - - DOMAIN-SUFFIX,store.tv.api.3g.youku.com - - DOMAIN-SUFFIX,store.xl.api.3g.youku.com - - DOMAIN-SUFFIX,tdrec.youku.com - - DOMAIN-SUFFIX,test.ott.youku.com - - DOMAIN-SUFFIX,urchin.lstat.youku.com - - DOMAIN-SUFFIX,v.l.youku.com - - DOMAIN-SUFFIX,val.api.youku.com - - DOMAIN-SUFFIX,wan.youku.com - - DOMAIN-SUFFIX,ykatr.youku.com - - DOMAIN-SUFFIX,ykrec.youku.com - - IP-CIDR,117.177.248.17/32 - - IP-CIDR,117.177.248.41/32 - - IP-CIDR,223.87.176.139/32 - - IP-CIDR,223.87.176.176/32 - - IP-CIDR,223.87.177.180/32 - - IP-CIDR,223.87.177.182/32 - - IP-CIDR,223.87.177.184/32 - - IP-CIDR,223.87.177.43/32 - - IP-CIDR,223.87.177.47/32 - - IP-CIDR,223.87.177.80/32 - - IP-CIDR,223.87.182.101/32 - - IP-CIDR,223.87.182.102/32 - - IP-CIDR,223.87.182.11/32 - - IP-CIDR,223.87.182.52/32 - # - URL-REGEX,https?:\/\/.+.atm.youku.com - - # > MGTV - - DOMAIN-SUFFIX,ads-api.videojj.com - - DOMAIN-SUFFIX,cdn.cmop.mgtv.com - - DOMAIN-SUFFIX,click.hunantv.com - - DOMAIN-SUFFIX,cmop.mgtv.com - - DOMAIN-SUFFIX,cytron.videojj.com - - DOMAIN-SUFFIX,cytroncdn.videojj.com - - DOMAIN-SUFFIX,da.hunantv.com - - DOMAIN-SUFFIX,da.mgtv.com - - DOMAIN-SUFFIX,imgaliyun.da.mgtv.com - - DOMAIN-SUFFIX,imgaliyun.res.mgtv.com - - DOMAIN-SUFFIX,m2.da.mgtv.com - - DOMAIN-SUFFIX,me.videojj.com - - DOMAIN-SUFFIX,mobaliyun.res.mgtv.com - - DOMAIN-SUFFIX,mobile.da.mgtv.com - - DOMAIN-SUFFIX,mobile2.da.mgtv.com - - DOMAIN-SUFFIX,mp4.res.hunantv.com - - DOMAIN-SUFFIX,pc.da.mgtv.com - - DOMAIN-SUFFIX,pc1.da.mgtv.com - - DOMAIN-SUFFIX,pcvideoaliyun.titan.mgtv.com - - DOMAIN-SUFFIX,pcvideoyd.titan.mgtv.com - - DOMAIN-SUFFIX,pcweb.v1.mgtv.com - - DOMAIN-SUFFIX,plat.videojj.com - - DOMAIN-SUFFIX,py.da.mgtv.com - - DOMAIN-SUFFIX,res.hunantv.com - - DOMAIN-SUFFIX,store.videojj.com - - DOMAIN-SUFFIX,v2.da.mgtv.com - - DOMAIN-SUFFIX,va.videojj.com - - DOMAIN-SUFFIX,videojj.com - - DOMAIN-SUFFIX,web.da.mgtv.com - - DOMAIN-SUFFIX,x.da.hunantv.com - - DOMAIN-SUFFIX,x.da.mgtv.com - - DOMAIN-SUFFIX,x1.da.hunantv.com - - DOMAIN-SUFFIX,y.da.hunantv.com - - DOMAIN-SUFFIX,y.da.mgtv.com - - # > Letv - - DOMAIN-SUFFIX,1.letvlive.com - - DOMAIN-SUFFIX,2.letvlive.com - - DOMAIN-SUFFIX,ads1.lfengmobile.com - - DOMAIN-SUFFIX,api.game.letvstore.com - - DOMAIN-SUFFIX,api.push.le.com - - DOMAIN-SUFFIX,ark.letv.com - - DOMAIN-SUFFIX,cdn.zampdsp.com - - DOMAIN-SUFFIX,cm.fancyapi.com - - DOMAIN-SUFFIX,cn.api.push.le.com - - DOMAIN-SUFFIX,dc.letv.com - - DOMAIN-SUFFIX,fz.letv.com - - DOMAIN-SUFFIX,g3.letv.com - - DOMAIN-SUFFIX,minisite.letv.com - - DOMAIN-SUFFIX,msg.m.letv.com - - DOMAIN-SUFFIX,n.mark.letv.com - - DOMAIN-SUFFIX,pro.hoye.letv.com - - DOMAIN-SUFFIX,pro.letv.com - - DOMAIN-SUFFIX,s.zampdsp.com - - DOMAIN-SUFFIX,stat.letv.com - - DOMAIN-SUFFIX,static.app.m.letv.com - - DOMAIN-SUFFIX,webp2p.letv.com - - DOMAIN-SUFFIX,zamplus.com - - # > Youtube - - DOMAIN-SUFFIX,azabu-u.ac.jp - - DOMAIN-SUFFIX,couchcoaster.jp - - DOMAIN-SUFFIX,delivery.dmkt-sp.jp - - DOMAIN-SUFFIX,ehg-youtube.hitbox.com - - DOMAIN-SUFFIX,m-78.jp - - DOMAIN-SUFFIX,nichibenren.or.jp - - DOMAIN-SUFFIX,nicorette.co.kr - - # > Sohu - - DOMAIN-SUFFIX,adnet.sohu.com - - DOMAIN-SUFFIX,aty.sohu.com - - DOMAIN-SUFFIX,data.vod.itc.cn - - DOMAIN-SUFFIX,epro.sogou.com - - DOMAIN-SUFFIX,go.sohu.com - - DOMAIN-SUFFIX,golden1.sogou.com - - DOMAIN-SUFFIX,imp.optaim.com - - DOMAIN-SUFFIX,inte.sogou.com - - DOMAIN-SUFFIX,inte.sogoucdn.com - - DOMAIN-SUFFIX,lu.sogoucdn.com - - DOMAIN-SUFFIX,theta.sogoucdn.com - - DOMAIN-SUFFIX,uranus.sogou.com - - # > PPTV - - DOMAIN-SUFFIX,afp.pplive.com - - DOMAIN-SUFFIX,app.aplus.pptv.com - - DOMAIN-SUFFIX,as.aplus.pptv.com - - DOMAIN-SUFFIX,asimgs.pplive.cn - - DOMAIN-SUFFIX,de.as.pptv.com - - DOMAIN-SUFFIX,jp.as.pptv.com - - DOMAIN-SUFFIX,pp2.pptv.com - - DOMAIN-SUFFIX,stat.pptv.com - - DOMAIN-SUFFIX,static.g.pptv.com - # - URL-REGEX,https?://img\w.g.pptv.com - - # > Site - - DOMAIN-SUFFIX,deliver.ifeng.com - - DOMAIN-SUFFIX,hxjs.tool.hexun.com - - DOMAIN-SUFFIX,hxsame.hexun.com - - DOMAIN-SUFFIX,itv.hexun.com - - DOMAIN-SUFFIX,utrack.hexun.com - # - URL-REGEX,https?://h\w{2}.hxsame.hexun.com - - # > Vod - - DOMAIN-SUFFIX,ad.cmvideo.cn - - DOMAIN-SUFFIX,atm.cp31.ott.cibntv.net - - DOMAIN-SUFFIX,aty.cp45.ott.cibntv.net - - DOMAIN-SUFFIX,cpm.cm.kankan.com - - DOMAIN-SUFFIX,float.kankan.com - - DOMAIN-SUFFIX,houyi.baofeng.net - - DOMAIN-SUFFIX,iadctest.qwapi.com - - # > Other - - DOMAIN-SUFFIX,ad.video.51togic.com - - DOMAIN-SUFFIX,biz5.kankan.com - - DOMAIN-SUFFIX,c.algovid.com - - DOMAIN-SUFFIX,cms.laifeng.com - - DOMAIN-SUFFIX,da.mmarket.com - - DOMAIN-SUFFIX,dotcounter.douyutv.com - - DOMAIN-SUFFIX,g.uusee.com - - DOMAIN-SUFFIX,gcdn.2mdn.net - - DOMAIN-SUFFIX,gentags.net - - DOMAIN-SUFFIX,gg.jtertp.com - - DOMAIN-SUFFIX,gug.ku6cdn.com - - DOMAIN-SUFFIX,hp.smiler-ad.com - - DOMAIN-SUFFIX,kooyum.com - - DOMAIN-SUFFIX,ld.kuaigames.com - - DOMAIN-SUFFIX,logstat.t.sfht.com - - DOMAIN-SUFFIX,match.rtbidder.net - - DOMAIN-SUFFIX,mixer.cupid.ptqy.gitv.tv - - DOMAIN-SUFFIX,msg.c002.ottcn.com - - DOMAIN-SUFFIX,msga.ptqy.gitv.tv - - DOMAIN-SUFFIX,njwxh.com - - DOMAIN-SUFFIX,nl.rcd.ptqy.gitv.tv - - DOMAIN-SUFFIX,n-st.vip.com - - DOMAIN-SUFFIX,pb.bi.gitv.tv - - DOMAIN-SUFFIX,pop.uusee.com - - DOMAIN-SUFFIX,rd.kuaigames.com - - DOMAIN-SUFFIX,shizen-no-megumi.com - - DOMAIN-SUFFIX,shrek.6.cn - - DOMAIN-SUFFIX,simba.6.cn - - DOMAIN-SUFFIX,st.vq.ku6.cn - - DOMAIN-SUFFIX,statcounter.com - - DOMAIN-SUFFIX,static.duoshuo.com - - DOMAIN-SUFFIX,static.ku6.com - - DOMAIN-SUFFIX,static8.pmadx.com - - DOMAIN-SUFFIX,store.ptqy.gitv.tv - - DOMAIN-SUFFIX,t7z.cupid.ptqy.gitv.tv - - DOMAIN-SUFFIX,traffic.uusee.com - - DOMAIN-SUFFIX,union.6.cn - - DOMAIN-SUFFIX,wa.gtimg.com - - DOMAIN-SUFFIX,bfshan.cn - - - - - DOMAIN-SUFFIX,0.r.msn.com - - DOMAIN-SUFFIX,000dn.com - - DOMAIN-SUFFIX,001union.com - - DOMAIN-SUFFIX,0086555.com - - DOMAIN-SUFFIX,00880808.com - - DOMAIN-SUFFIX,00oo00.com - - DOMAIN-SUFFIX,01.gxso.net - - DOMAIN-SUFFIX,010teacher.com - - DOMAIN-SUFFIX,010xk.com - - DOMAIN-SUFFIX,018520.com - - DOMAIN-SUFFIX,01daa.lubih.com - - DOMAIN-SUFFIX,01daa.lutci.com - - DOMAIN-SUFFIX,01daa.lutgh.com - - DOMAIN-SUFFIX,01daa.luvbr.com - - DOMAIN-SUFFIX,01daa.luytr.com - - DOMAIN-SUFFIX,022aifang.com - - DOMAIN-SUFFIX,023hysj.com - - DOMAIN-SUFFIX,025suyu.com - - DOMAIN-SUFFIX,0313413.com - - DOMAIN-SUFFIX,0451106.com - - DOMAIN-SUFFIX,0531kt.com - - DOMAIN-SUFFIX,0592weixin.com - - DOMAIN-SUFFIX,0594003.com - - DOMAIN-SUFFIX,06362.com - - DOMAIN-SUFFIX,0756sjlm.com.cn - - DOMAIN-SUFFIX,09_19.supfree.net - - DOMAIN-SUFFIX,0aqpqdju.me - - DOMAIN-SUFFIX,0x01e7.website - - DOMAIN-SUFFIX,0xxd.com - - DOMAIN-SUFFIX,1.1010pic.com - - DOMAIN-SUFFIX,1.201980.com - - DOMAIN-SUFFIX,1.21shebao.com - - DOMAIN-SUFFIX,1.51sxue.cn - - DOMAIN-SUFFIX,1.aili.com - - DOMAIN-SUFFIX,1.bashenghuo.com - - DOMAIN-SUFFIX,1.chcx.cn - - DOMAIN-SUFFIX,1.cjcp.cn - - DOMAIN-SUFFIX,1.codesdq.com - - DOMAIN-SUFFIX,1.feihua.com - - DOMAIN-SUFFIX,1.glook.cn - - DOMAIN-SUFFIX,1.hao123.com - - DOMAIN-SUFFIX,1.hnyouneng.com - - DOMAIN-SUFFIX,1.hslyqs.com - - DOMAIN-SUFFIX,1.i1766.com - - DOMAIN-SUFFIX,1.iqeq.com.cn - - DOMAIN-SUFFIX,1.jeasyui.net - - DOMAIN-SUFFIX,1.mgff.com - - DOMAIN-SUFFIX,1.nanrenwo.net - - DOMAIN-SUFFIX,1.panduoduo.net - - DOMAIN-SUFFIX,1.qtmojo.cn - - DOMAIN-SUFFIX,1.rengshu.com - - DOMAIN-SUFFIX,1.soufy.cn - - DOMAIN-SUFFIX,1.tulaoshi.com - - DOMAIN-SUFFIX,1.tuxi.com.cn - - DOMAIN-SUFFIX,1.win7china.com - - DOMAIN-SUFFIX,1.win7sky.com - - DOMAIN-SUFFIX,1.wps.cn - - DOMAIN-SUFFIX,1.xiaopin5.com - - DOMAIN-SUFFIX,1.xiaozhizhijia.com - - DOMAIN-SUFFIX,1.xilu.com - - DOMAIN-SUFFIX,1.zw3e.com - - DOMAIN-SUFFIX,1000dy.com - - DOMAIN-SUFFIX,10086.cn.baidu.cdn.yiwk.com - - DOMAIN-SUFFIX,100fenlm.com - - DOMAIN-SUFFIX,1017.cn - - DOMAIN-SUFFIX,10up.com - - DOMAIN-SUFFIX,11.hydcd.com - - DOMAIN-SUFFIX,111111qb.com - - DOMAIN-SUFFIX,111cn.net - - DOMAIN-SUFFIX,1133.cc - - DOMAIN-SUFFIX,114la.com - - DOMAIN-SUFFIX,1178.shucong.com - - DOMAIN-SUFFIX,11g.yiqig.cn - - DOMAIN-SUFFIX,1224.dxsbb.com - - DOMAIN-SUFFIX,123.sogou.com - - DOMAIN-SUFFIX,12306media.com - - DOMAIN-SUFFIX,1234xm.com - - DOMAIN-SUFFIX,12365chia.com - - DOMAIN-SUFFIX,123hala.com - - DOMAIN-SUFFIX,123juzi.net - - DOMAIN-SUFFIX,13023.url.7wkw.com - - DOMAIN-SUFFIX,138138138.top - - DOMAIN-SUFFIX,142904.com - - DOMAIN-SUFFIX,144.dragonparking.com - - DOMAIN-SUFFIX,1495039.com - - DOMAIN-SUFFIX,163.wrating.com - - DOMAIN-SUFFIX,163ren.com - - DOMAIN-SUFFIX,168.it168.com - - DOMAIN-SUFFIX,1680go.com - - DOMAIN-SUFFIX,168ad.cc - - DOMAIN-SUFFIX,170yy.com - - DOMAIN-SUFFIX,175bar.com - - DOMAIN-SUFFIX,176um.com - - DOMAIN-SUFFIX,178gg.com - - DOMAIN-SUFFIX,17gouwuba.com - - DOMAIN-SUFFIX,17leyi.com - - DOMAIN-SUFFIX,17un.co - - DOMAIN-SUFFIX,17un.com - - DOMAIN-SUFFIX,17zhaole.com - - DOMAIN-SUFFIX,189zj.cn - - DOMAIN-SUFFIX,18av.mm-cg.co - - DOMAIN-SUFFIX,18dusun.com - - DOMAIN-SUFFIX,18tzx.com - - DOMAIN-SUFFIX,1933000.com - - DOMAIN-SUFFIX,1d1px.net - - DOMAIN-SUFFIX,1e2hyl3b.wq42211.com - - DOMAIN-SUFFIX,1i580.com - - DOMAIN-SUFFIX,1kmb.cn - - DOMAIN-SUFFIX,1kxun.mobi - - DOMAIN-SUFFIX,1kzh.com - - DOMAIN-SUFFIX,1l1.cc - - DOMAIN-SUFFIX,1lib.cn - - DOMAIN-SUFFIX,1o26.com - - DOMAIN-SUFFIX,1qwe3r.com - - DOMAIN-SUFFIX,1tlm.cn - - DOMAIN-SUFFIX,1uandun.com - - DOMAIN-SUFFIX,1x3x.com - - DOMAIN-SUFFIX,2.1010pic.com - - DOMAIN-SUFFIX,2.21shebao.com - - DOMAIN-SUFFIX,2.5aigushi.com - - DOMAIN-SUFFIX,2.aili.com - - DOMAIN-SUFFIX,2.bashenghuo.com - - DOMAIN-SUFFIX,2.heiyange.com - - DOMAIN-SUFFIX,2.mobixs.cn - - DOMAIN-SUFFIX,2.nanrenwo.net - - DOMAIN-SUFFIX,2.rengshu.com - - DOMAIN-SUFFIX,2.tuxi.com.cn - - DOMAIN-SUFFIX,201071.com - - DOMAIN-SUFFIX,2012.8684.com - - DOMAIN-SUFFIX,2012ui.com - - DOMAIN-SUFFIX,20150930.cf - - DOMAIN-SUFFIX,2016.sina.cn - - DOMAIN-SUFFIX,2016bobo.cf - - DOMAIN-SUFFIX,2017img.myxh999.com - - DOMAIN-SUFFIX,202m.com - - DOMAIN-SUFFIX,203710.com - - DOMAIN-SUFFIX,2144.cn - - DOMAIN-SUFFIX,21union.com - - DOMAIN-SUFFIX,22.qingsongbar.com - - DOMAIN-SUFFIX,22222jsc.com - - DOMAIN-SUFFIX,222627.com - - DOMAIN-SUFFIX,22lm.cc - - DOMAIN-SUFFIX,233wo.com - - DOMAIN-SUFFIX,2345.cn - - DOMAIN-SUFFIX,2345api.dftoutiao.com - - DOMAIN-SUFFIX,2345apicode.dftoutiao.com - - DOMAIN-SUFFIX,2345at.com - - DOMAIN-SUFFIX,235123.net - - DOMAIN-SUFFIX,24haitao.net - - DOMAIN-SUFFIX,256ppp.com - - DOMAIN-SUFFIX,268mob.cn - - DOMAIN-SUFFIX,272829.cc - - DOMAIN-SUFFIX,272xb.com - - DOMAIN-SUFFIX,285680.com - - DOMAIN-SUFFIX,28acglz.com - - DOMAIN-SUFFIX,2a.com.cn - - DOMAIN-SUFFIX,2cnt.net - - DOMAIN-SUFFIX,2m2n.com - - DOMAIN-SUFFIX,2o7.net - - DOMAIN-SUFFIX,3.guidaye.com - - DOMAIN-SUFFIX,3.ssqzj.com - - DOMAIN-SUFFIX,30350f.com - - DOMAIN-SUFFIX,30407799.com - - DOMAIN-SUFFIX,30ampj.com - - DOMAIN-SUFFIX,31.media.tumblr.com - - DOMAIN-SUFFIX,312036.com - - DOMAIN-SUFFIX,3180555.com - - DOMAIN-SUFFIX,32414.com - - DOMAIN-SUFFIX,32666099.com - - DOMAIN-SUFFIX,33.autohome.com.cn - - DOMAIN-SUFFIX,33.pcpop.com - - DOMAIN-SUFFIX,33544444.com - - DOMAIN-SUFFIX,336.com - - DOMAIN-SUFFIX,3388pjdc.com - - DOMAIN-SUFFIX,339.cn - - DOMAIN-SUFFIX,3393.com - - DOMAIN-SUFFIX,33lm.cc - - DOMAIN-SUFFIX,33shangyou.com - - DOMAIN-SUFFIX,35baba.cn - - DOMAIN-SUFFIX,3600.com - - DOMAIN-SUFFIX,360640.com - - DOMAIN-SUFFIX,360baidus.com - - DOMAIN-SUFFIX,360jiaquan.com - - DOMAIN-SUFFIX,360safego.com - - DOMAIN-SUFFIX,360shopping.com.cn - - DOMAIN-SUFFIX,360vip.front99.com - - DOMAIN-SUFFIX,361315.cc - - DOMAIN-SUFFIX,365bibi.com - - DOMAIN-SUFFIX,365safego.com - - DOMAIN-SUFFIX,366safego.com - - DOMAIN-SUFFIX,36pn.com - - DOMAIN-SUFFIX,3721zh.com - - DOMAIN-SUFFIX,376zf.com - - DOMAIN-SUFFIX,37cs.com - - DOMAIN-SUFFIX,37mnm.com - - DOMAIN-SUFFIX,37pk49.com - - DOMAIN-SUFFIX,37see.com - - DOMAIN-SUFFIX,37wan.cn - - DOMAIN-SUFFIX,37wan.com - - DOMAIN-SUFFIX,3808010.com - - DOMAIN-SUFFIX,38330.bet - - DOMAIN-SUFFIX,3839168.com - - DOMAIN-SUFFIX,38499.com - - DOMAIN-SUFFIX,38c99.com - - DOMAIN-SUFFIX,39330.bet - - DOMAIN-SUFFIX,3975lm.com - - DOMAIN-SUFFIX,39xc.net - - DOMAIN-SUFFIX,3dm.huya.com - - DOMAIN-SUFFIX,3dns-2.adobe.com - - DOMAIN-SUFFIX,3dns-3.adobe.com - - DOMAIN-SUFFIX,3dwwwgame.com - - DOMAIN-SUFFIX,3g.990.net - - DOMAIN-SUFFIX,3gmimo.com - - DOMAIN-SUFFIX,3gmtr.com - - DOMAIN-SUFFIX,3htai.com - - DOMAIN-SUFFIX,3qmh.com - - DOMAIN-SUFFIX,3rd.t.sohu.com - - DOMAIN-SUFFIX,3wz6z.bchuangpi.cn - - DOMAIN-SUFFIX,3ygww.com - - DOMAIN-SUFFIX,4009997658.com - - DOMAIN-SUFFIX,404.safedog.cn - - DOMAIN-SUFFIX,4207008.com - - DOMAIN-SUFFIX,4242jj.com - - DOMAIN-SUFFIX,4242lll.com - - DOMAIN-SUFFIX,4242uuu.com - - DOMAIN-SUFFIX,4336wang.cn - - DOMAIN-SUFFIX,456juhd.com - - DOMAIN-SUFFIX,46sg.com - - DOMAIN-SUFFIX,49wanwan.com - - DOMAIN-SUFFIX,4ggww.com - - DOMAIN-SUFFIX,4paradigm.com - - DOMAIN-SUFFIX,4wad.com - - DOMAIN-SUFFIX,4xhyr.shuimujinggong.com - - DOMAIN-SUFFIX,504pk.com - - DOMAIN-SUFFIX,5066.net - - DOMAIN-SUFFIX,50bang.org - - DOMAIN-SUFFIX,51.la - - DOMAIN-SUFFIX,5125129.com - - DOMAIN-SUFFIX,513hch.com - - DOMAIN-SUFFIX,517m.cn - - DOMAIN-SUFFIX,518.sdinfo.net - - DOMAIN-SUFFIX,5188yy.com - - DOMAIN-SUFFIX,519397.com - - DOMAIN-SUFFIX,51ads.com - - DOMAIN-SUFFIX,51chumoping.com - - DOMAIN-SUFFIX,51dql.com - - DOMAIN-SUFFIX,51gxqm.com - - DOMAIN-SUFFIX,51jumintong.com - - DOMAIN-SUFFIX,51la.net - - DOMAIN-SUFFIX,51link.com - - DOMAIN-SUFFIX,51mld.cn - - DOMAIN-SUFFIX,51network.com - - DOMAIN-SUFFIX,51vipedu.com - - DOMAIN-SUFFIX,51weidashi.com - - DOMAIN-SUFFIX,51xumei.com - - DOMAIN-SUFFIX,51yes.com - - DOMAIN-SUFFIX,51zhanzhuang.cn - - DOMAIN-SUFFIX,5207470.com - - DOMAIN-SUFFIX,5269120.com - - DOMAIN-SUFFIX,526d.uunice.com - - DOMAIN-SUFFIX,526dimg.uunice.com - - DOMAIN-SUFFIX,5293.com - - DOMAIN-SUFFIX,52kmh.com - - DOMAIN-SUFFIX,52kmk.com - - DOMAIN-SUFFIX,52lubo.cn - - DOMAIN-SUFFIX,5345ll.com - - DOMAIN-SUFFIX,537901.com - - DOMAIN-SUFFIX,55.la - - DOMAIN-SUFFIX,555p555p.com - - DOMAIN-SUFFIX,559gp.com - - DOMAIN-SUFFIX,55lu.com - - DOMAIN-SUFFIX,5634.com - - DOMAIN-SUFFIX,5675146.com - - DOMAIN-SUFFIX,57.com.cn - - DOMAIN-SUFFIX,57union.com - - DOMAIN-SUFFIX,58.xgo.com.cn - - DOMAIN-SUFFIX,5814889.com - - DOMAIN-SUFFIX,5857.com - - DOMAIN-SUFFIX,588yw.com - - DOMAIN-SUFFIX,58lm.vip - - DOMAIN-SUFFIX,58mingri.cn - - DOMAIN-SUFFIX,58mingtian.cn - - DOMAIN-SUFFIX,592man.com - - DOMAIN-SUFFIX,5dg.me - - DOMAIN-SUFFIX,5dian.org - - DOMAIN-SUFFIX,5egk.com - - DOMAIN-SUFFIX,5imoney.com - - DOMAIN-SUFFIX,5jcom.com.cn - - DOMAIN-SUFFIX,5vz3cfs0yd.me - - DOMAIN-SUFFIX,5y9nfpes.52pk.com - - DOMAIN-SUFFIX,5yrra.deshuangwang.cn - - DOMAIN-SUFFIX,600ad.com - - DOMAIN-SUFFIX,601654.com - - DOMAIN-SUFFIX,60608787.com - - DOMAIN-SUFFIX,626uc.com - - DOMAIN-SUFFIX,644446.com - - DOMAIN-SUFFIX,649558.com - - DOMAIN-SUFFIX,64si.com - - DOMAIN-SUFFIX,654mmm.com - - DOMAIN-SUFFIX,6615338.cn - - DOMAIN-SUFFIX,6666349.com - - DOMAIN-SUFFIX,6669667.com - - DOMAIN-SUFFIX,66992949.com - - DOMAIN-SUFFIX,66san.com - - DOMAIN-SUFFIX,6711.com - - DOMAIN-SUFFIX,6728812.com - - DOMAIN-SUFFIX,685wo.com - - DOMAIN-SUFFIX,68665565.com - - DOMAIN-SUFFIX,69duk.com - - DOMAIN-SUFFIX,6a4cc.lubue.com - - DOMAIN-SUFFIX,6a4cc.luvbq.com - - DOMAIN-SUFFIX,6a4cc.luvbr.com - - DOMAIN-SUFFIX,6a4cc.luytr.com - - DOMAIN-SUFFIX,6boou.voluumtrk.com - - DOMAIN-SUFFIX,6d63d3.com - - DOMAIN-SUFFIX,6dad.com - - DOMAIN-SUFFIX,6dvip.com - - DOMAIN-SUFFIX,6huu.com - - DOMAIN-SUFFIX,6kwan.com - - DOMAIN-SUFFIX,6tsbe1zs.me - - DOMAIN-SUFFIX,700900.com - - DOMAIN-SUFFIX,706529.com - - DOMAIN-SUFFIX,7080555.com - - DOMAIN-SUFFIX,70e.com - - DOMAIN-SUFFIX,70lm.com - - DOMAIN-SUFFIX,711kk.com - - DOMAIN-SUFFIX,716703.com - - DOMAIN-SUFFIX,71sem.com - - DOMAIN-SUFFIX,73.sinawap.com - - DOMAIN-SUFFIX,743m1.11a12.com - - DOMAIN-SUFFIX,749558.com - - DOMAIN-SUFFIX,749808.com - - DOMAIN-SUFFIX,7540.com - - DOMAIN-SUFFIX,75to.com - - DOMAIN-SUFFIX,7631.com - - DOMAIN-SUFFIX,766ba.net - - DOMAIN-SUFFIX,76802.net - - DOMAIN-SUFFIX,77455.com - - DOMAIN-SUFFIX,778669.com - - DOMAIN-SUFFIX,7794.com - - DOMAIN-SUFFIX,77power.com - - DOMAIN-SUFFIX,77u.com - - DOMAIN-SUFFIX,77xtv.com - - DOMAIN-SUFFIX,7891655.cn - - DOMAIN-SUFFIX,7car.com.cn - - DOMAIN-SUFFIX,7clink.com - - DOMAIN-SUFFIX,7dah8.com - - DOMAIN-SUFFIX,7gg.cc - - DOMAIN-SUFFIX,7jiajiao.com - - DOMAIN-SUFFIX,7mad.7m.cn - - DOMAIN-SUFFIX,7pk.com - - DOMAIN-SUFFIX,7wen.cn - - DOMAIN-SUFFIX,7xz3.com - - DOMAIN-SUFFIX,7z66.com - - DOMAIN-SUFFIX,8.jrj.com - - DOMAIN-SUFFIX,801.tianyaui.com - - DOMAIN-SUFFIX,8066hg.com - - DOMAIN-SUFFIX,80sjw.com - - DOMAIN-SUFFIX,813690.top - - DOMAIN-SUFFIX,8184.cc - - DOMAIN-SUFFIX,818mov.com - - DOMAIN-SUFFIX,81c.cn - - DOMAIN-SUFFIX,8269996.com - - DOMAIN-SUFFIX,8368661.com - - DOMAIN-SUFFIX,846.move7.com - - DOMAIN-SUFFIX,849558.com - - DOMAIN-SUFFIX,85058s.com - - DOMAIN-SUFFIX,8521448.com - - DOMAIN-SUFFIX,85655095.com - - DOMAIN-SUFFIX,859377.com - - DOMAIN-SUFFIX,85tgw.com - - DOMAIN-SUFFIX,86.cc - - DOMAIN-SUFFIX,860010.com - - DOMAIN-SUFFIX,86kx.com - - DOMAIN-SUFFIX,878090.com - - DOMAIN-SUFFIX,8800271.com.cn - - DOMAIN-SUFFIX,88210212.com - - DOMAIN-SUFFIX,8866786.com - - DOMAIN-SUFFIX,888.izhufu.net - - DOMAIN-SUFFIX,888.jiuwanwang.com - - DOMAIN-SUFFIX,888.tv.sohu.com - - DOMAIN-SUFFIX,88818122.cn - - DOMAIN-SUFFIX,888zr022.com - - DOMAIN-SUFFIX,88cncc.com - - DOMAIN-SUFFIX,88rpg.net - - DOMAIN-SUFFIX,88shu.cn - - DOMAIN-SUFFIX,892155.com - - DOMAIN-SUFFIX,89h8.com - - DOMAIN-SUFFIX,8dulm.com - - DOMAIN-SUFFIX,8hykthze.cricket - - DOMAIN-SUFFIX,8jd2lfsq.me - - DOMAIN-SUFFIX,8jkx.com - - DOMAIN-SUFFIX,8le8le.com - - DOMAIN-SUFFIX,8mfty.com - - DOMAIN-SUFFIX,8ox.cn - - DOMAIN-SUFFIX,90053999.com - - DOMAIN-SUFFIX,910weixin.com - - DOMAIN-SUFFIX,911.cc - - DOMAIN-SUFFIX,915.com - - DOMAIN-SUFFIX,91ad.bestvogue.com - - DOMAIN-SUFFIX,91adv.com - - DOMAIN-SUFFIX,91hui.com - - DOMAIN-SUFFIX,91veg.com - - DOMAIN-SUFFIX,91xry.com - - DOMAIN-SUFFIX,91ysa.com - - DOMAIN-SUFFIX,91zgm.com - - DOMAIN-SUFFIX,92x.tumblr.com - - DOMAIN-SUFFIX,930.dragonparking.com - - DOMAIN-SUFFIX,93manhua.com - - DOMAIN-SUFFIX,94lm.com - - DOMAIN-SUFFIX,95105012.com - - DOMAIN-SUFFIX,9519.net - - DOMAIN-SUFFIX,95558000.com - - DOMAIN-SUFFIX,9565365.com - - DOMAIN-SUFFIX,9566180.com - - DOMAIN-SUFFIX,96mob.com - - DOMAIN-SUFFIX,9948000.com - - DOMAIN-SUFFIX,99909988.com - - DOMAIN-SUFFIX,99click.com - - DOMAIN-SUFFIX,99ddd.com - - DOMAIN-SUFFIX,99lolo.com - - DOMAIN-SUFFIX,9ads.net - - DOMAIN-SUFFIX,9dtiny.cn - - DOMAIN-SUFFIX,9kff.com - - DOMAIN-SUFFIX,9pkw.com - - DOMAIN-SUFFIX,9s6q.cn - - DOMAIN-SUFFIX,9tn.cc - - DOMAIN-SUFFIX,9wushuo.com - - DOMAIN-SUFFIX,a.198banjia.com - - DOMAIN-SUFFIX,a.53yao.com - - DOMAIN-SUFFIX,a.5ykj.com - - DOMAIN-SUFFIX,a.80982.org - - DOMAIN-SUFFIX,a.ads1.msn.com - - DOMAIN-SUFFIX,a.ads2.msn.com - - DOMAIN-SUFFIX,a.armystar.com - - DOMAIN-SUFFIX,a.baidu.com - - DOMAIN-SUFFIX,a.baiy.net - - DOMAIN-SUFFIX,a.baomihua.com - - DOMAIN-SUFFIX,a.beilamusi.com - - DOMAIN-SUFFIX,a.benshiw.net - - DOMAIN-SUFFIX,a.bshu.com - - DOMAIN-SUFFIX,a.cdngeek.net - - DOMAIN-SUFFIX,a.clipconverter.cc - - DOMAIN-SUFFIX,a.cn.duoyi.com - - DOMAIN-SUFFIX,a.dangdang.com - - DOMAIN-SUFFIX,a.dianjoy.com - - DOMAIN-SUFFIX,a.dounanhuahui.com - - DOMAIN-SUFFIX,a.duanmeiwen.com - - DOMAIN-SUFFIX,a.e7009.com - - DOMAIN-SUFFIX,a.ecook.cn - - DOMAIN-SUFFIX,a.epinv.com - - DOMAIN-SUFFIX,a.eporner.com - - DOMAIN-SUFFIX,a.exam58.com - - DOMAIN-SUFFIX,a.fengyx.com - - DOMAIN-SUFFIX,a.fwsir.com - - DOMAIN-SUFFIX,a.giantrealm.com - - DOMAIN-SUFFIX,a.global.msads.net - - DOMAIN-SUFFIX,a.hl.mi.com - - DOMAIN-SUFFIX,a.holagames.com - - DOMAIN-SUFFIX,a.irs01.com - - DOMAIN-SUFFIX,a.itiexue.net - - DOMAIN-SUFFIX,a.jyeoo.com - - DOMAIN-SUFFIX,a.kandiaoyu.com - - DOMAIN-SUFFIX,a.kejixun.com - - DOMAIN-SUFFIX,a.kickass.to - - DOMAIN-SUFFIX,a.koudai.com - - DOMAIN-SUFFIX,a.livesportmedia.eu - - DOMAIN-SUFFIX,a.lolwot.com - - DOMAIN-SUFFIX,a.ltdnc.com - - DOMAIN-SUFFIX,a.lwinl.com - - DOMAIN-SUFFIX,a.lz13.cn - - DOMAIN-SUFFIX,a.m.gxwztv.com - - DOMAIN-SUFFIX,a.m.shuhuangge.org - - DOMAIN-SUFFIX,a.mct01.com - - DOMAIN-SUFFIX,a.mjlnbx.cn - - DOMAIN-SUFFIX,a.nanhuwang.com - - DOMAIN-SUFFIX,a.nowscore.com - - DOMAIN-SUFFIX,a.qiao024.com - - DOMAIN-SUFFIX,a.qinghua5.com - - DOMAIN-SUFFIX,a.shangz99991.com - - DOMAIN-SUFFIX,a.shczz.com - - DOMAIN-SUFFIX,a.shenchuang.com - - DOMAIN-SUFFIX,a.shuoshuodaquan.net - - DOMAIN-SUFFIX,a.solarmovie.is - - DOMAIN-SUFFIX,a.soonyou123.com - - DOMAIN-SUFFIX,a.starstar19999.com - - DOMAIN-SUFFIX,a.startui19999.com - - DOMAIN-SUFFIX,a.thefreethoughtproject.com - - DOMAIN-SUFFIX,a.tribalfusion.com - - DOMAIN-SUFFIX,a.tujidao.com - - DOMAIN-SUFFIX,a.tuuituii2999.com - - DOMAIN-SUFFIX,a.ucoz.net - - DOMAIN-SUFFIX,a.union.mi.com - - DOMAIN-SUFFIX,a.visualrevenue.com - - DOMAIN-SUFFIX,a.vlion.cn - - DOMAIN-SUFFIX,a.waczt.cn - - DOMAIN-SUFFIX,a.wlfnb.com - - DOMAIN-SUFFIX,a.xinwenge.net - - DOMAIN-SUFFIX,a.xixiyishu.com - - DOMAIN-SUFFIX,a.xizi.com - - DOMAIN-SUFFIX,a.xywy.com - - DOMAIN-SUFFIX,a.yangshengtang123.com - - DOMAIN-SUFFIX,a.yixie8.com - - DOMAIN-SUFFIX,a.yjbys.com - - DOMAIN-SUFFIX,a.youdao.com - - DOMAIN-SUFFIX,a1.0s.net.cn - - DOMAIN-SUFFIX,a1.azg168.cn - - DOMAIN-SUFFIX,a1.gexing.me - - DOMAIN-SUFFIX,a1.huanqiumil.com - - DOMAIN-SUFFIX,a1.huiqituan.com - - DOMAIN-SUFFIX,a1.itc.cn - - DOMAIN-SUFFIX,a1.liuxue86.com - - DOMAIN-SUFFIX,a1.lmaq.cn - - DOMAIN-SUFFIX,a1.peoplecdn.cn - - DOMAIN-SUFFIX,a1.vdolady.com - - DOMAIN-SUFFIX,a1.yuuedu.com - - DOMAIN-SUFFIX,a1.zhanzhang.net - - DOMAIN-SUFFIX,a1click.cpc.sogou.com - - DOMAIN-SUFFIX,a2.b310.com - - DOMAIN-SUFFIX,a2.huanqiumil.com - - DOMAIN-SUFFIX,a2.rabbitpre.com - - DOMAIN-SUFFIX,a3.ikafan.com - - DOMAIN-SUFFIX,a3p4.net - - DOMAIN-SUFFIX,a4.b2b168.com - - DOMAIN-SUFFIX,a4.ikafan.com - - DOMAIN-SUFFIX,a4.yeshj.com - - DOMAIN-SUFFIX,a5.yeshj.com - - DOMAIN-SUFFIX,a6.bjdianyue.com - - DOMAIN-SUFFIX,a6.codejumps.com - - DOMAIN-SUFFIX,a6.taobanapp.com - - DOMAIN-SUFFIX,a6s.1cakeclub.com - - DOMAIN-SUFFIX,a6s.modoupai.com - - DOMAIN-SUFFIX,a6s.ruyiqufu.com - - DOMAIN-SUFFIX,a6s.ve001nz.com - - DOMAIN-SUFFIX,a7shun.com - - DOMAIN-SUFFIX,a907907.com - - DOMAIN-SUFFIX,a9377j.com - - DOMAIN-SUFFIX,aa.goodsblock.mgid.com - - DOMAIN-SUFFIX,aa.jiankang.com - - DOMAIN-SUFFIX,aa.tianya999.com - - DOMAIN-SUFFIX,aa.xiangxiangmf.com - - DOMAIN-SUFFIX,aa.zldh123.com - - DOMAIN-SUFFIX,aa0.pub.funshion.com - - DOMAIN-SUFFIX,aa1.pub.funshion.com - - DOMAIN-SUFFIX,aafanke.cc - - DOMAIN-SUFFIX,aa-gb.mgid.com - - DOMAIN-SUFFIX,aam.adsremote.scrippsnetworks.com - - DOMAIN-SUFFIX,ab.dydab.com - - DOMAIN-SUFFIX,ab.goodsblock.mgid.com - - DOMAIN-SUFFIX,ab.hysdknb.com - - DOMAIN-SUFFIX,ab.meishiba.com.cn - - DOMAIN-SUFFIX,ab.sc115.com - - DOMAIN-SUFFIX,abbyychina.com - - DOMAIN-SUFFIX,abc.dooccn.com - - DOMAIN-SUFFIX,abc.douguo.com - - DOMAIN-SUFFIX,abc.eastlady.cn - - DOMAIN-SUFFIX,abc.hkepc.com - - DOMAIN-SUFFIX,abc.ruiwen.com - - DOMAIN-SUFFIX,abc.xtyx918.com - - DOMAIN-SUFFIX,abc.yjbys.com - - DOMAIN-SUFFIX,abc.zhiyaspa.com - - DOMAIN-SUFFIX,abcd.zsrt88.cn - - DOMAIN-SUFFIX,abcj.dooccn.com - - DOMAIN-SUFFIX,ab-gb.mgid.com - - DOMAIN-SUFFIX,abtest.mistat.xiaomi.com - - DOMAIN-SUFFIX,ac.atpanel.com - - DOMAIN-SUFFIX,ac2.msn.com - - DOMAIN-SUFFIX,ac3.msn.com - - DOMAIN-SUFFIX,acasys88.cn - - DOMAIN-SUFFIX,access.njherald.com - - DOMAIN-SUFFIX,ac-gb.mgid.com - - DOMAIN-SUFFIX,acint.net - - DOMAIN-SUFFIX,acm.dzwww.com - - DOMAIN-SUFFIX,acs86.com - - DOMAIN-SUFFIX,acsystem.wasu.cn - - DOMAIN-SUFFIX,act2.mediafour.com - - DOMAIN-SUFFIX,activate.adobe.com - - DOMAIN-SUFFIX,activate.wip3.adobe.com - - DOMAIN-SUFFIX,activate-sea.adobe.com - - DOMAIN-SUFFIX,activate-sjc0.adobe.com - - DOMAIN-SUFFIX,activation.cyberlink.com - - DOMAIN-SUFFIX,activation.easeus.com - - DOMAIN-SUFFIX,active.baofeng.com - - DOMAIN-SUFFIX,activeqq.3g.qq.com - - DOMAIN-SUFFIX,activity.app.autohome.com.cn - - DOMAIN-SUFFIX,activity.serving-sys.com - - DOMAIN-SUFFIX,activity.tuifish.com - - DOMAIN-SUFFIX,activity.yuyiya.com - - DOMAIN-SUFFIX,actlog.dftoutiao.com - - DOMAIN-SUFFIX,actsdk.idreamsky.com - - DOMAIN-SUFFIX,acuityplatform.com - - DOMAIN-SUFFIX,acwgf.com - - DOMAIN-SUFFIX,acxiom-online.com - - DOMAIN-SUFFIX,ad.1111cpc.com - - DOMAIN-SUFFIX,ad.12306.cn - - DOMAIN-SUFFIX,ad.17173.com - - DOMAIN-SUFFIX,ad.1kxun.com - - DOMAIN-SUFFIX,ad.3.cn - - DOMAIN-SUFFIX,ad.360yield.com - - DOMAIN-SUFFIX,ad.363.in - - DOMAIN-SUFFIX,ad.3dnews.ru - - DOMAIN-SUFFIX,ad.51wnl.com - - DOMAIN-SUFFIX,ad.95306.cn - - DOMAIN-SUFFIX,ad.about.co.kr - - DOMAIN-SUFFIX,ad.accessmediaproductions.com - - DOMAIN-SUFFIX,ad.adhouyi.cn - - DOMAIN-SUFFIX,ad.aidalan.com - - DOMAIN-SUFFIX,ad.api.moji.com - - DOMAIN-SUFFIX,ad.auditude.com - - DOMAIN-SUFFIX,ad.bayescom.com - - DOMAIN-SUFFIX,ad.beihai365.com - - DOMAIN-SUFFIX,ad.bitmedia.io - - DOMAIN-SUFFIX,ad.bjmama.net - - DOMAIN-SUFFIX,ad.cacafly.com - - DOMAIN-SUFFIX,ad.cctv.com - - DOMAIN-SUFFIX,ad.cooks.com - - DOMAIN-SUFFIX,ad.crichd.in - - DOMAIN-SUFFIX,ad.csdn.net - - DOMAIN-SUFFIX,ad.dedecms.com - - DOMAIN-SUFFIX,ad.digitimes.com.tw - - DOMAIN-SUFFIX,ad.directmirror.com - - DOMAIN-SUFFIX,ad.dokrmob.com - - DOMAIN-SUFFIX,ad.doubanio.com - - DOMAIN-SUFFIX,ad.download.cnet.com - - DOMAIN-SUFFIX,ad.dqwjzm.com - - DOMAIN-SUFFIX,ad.duapps.com - - DOMAIN-SUFFIX,ad.duga.jp - - DOMAIN-SUFFIX,ad.dumedia.ru - - DOMAIN-SUFFIX,ad.duomi.com - - DOMAIN-SUFFIX,ad.dzwindows.com - - DOMAIN-SUFFIX,ad.dzwww.com - - DOMAIN-SUFFIX,ad.egou.com - - DOMAIN-SUFFIX,ad.endpo.in - - DOMAIN-SUFFIX,ad.epochtimes.com - - DOMAIN-SUFFIX,ad.eporner.com - - DOMAIN-SUFFIX,ad.evozi.com - - DOMAIN-SUFFIX,ad.flipboard.com - - DOMAIN-SUFFIX,ad.flurry.com - - DOMAIN-SUFFIX,ad.flux.com - - DOMAIN-SUFFIX,ad.fnnews.com - - DOMAIN-SUFFIX,ad.foxnetworks.com - - DOMAIN-SUFFIX,ad.funp.com - - DOMAIN-SUFFIX,ad.funshion.org.cn - - DOMAIN-SUFFIX,ad.gametower.com.tw - - DOMAIN-SUFFIX,ad.ganji.com - - DOMAIN-SUFFIX,ad.gmw.cn - - DOMAIN-SUFFIX,ad.go.com - - DOMAIN-SUFFIX,ad.greedland.net - - DOMAIN-SUFFIX,ad.gtbrowser.com - - DOMAIN-SUFFIX,ad.hefei.cc - - DOMAIN-SUFFIX,ad.hiiir.com - - DOMAIN-SUFFIX,ad.holaq.com - - DOMAIN-SUFFIX,ad.hot-mob.com - - DOMAIN-SUFFIX,ad.house365.com - - DOMAIN-SUFFIX,ad.huajiao.com - - DOMAIN-SUFFIX,ad.ibookstar.com - - DOMAIN-SUFFIX,ad.icasthq.com - - DOMAIN-SUFFIX,ad.idgtn.net - - DOMAIN-SUFFIX,ad.iloveinterracial.com - - DOMAIN-SUFFIX,ad.ipadview.com - - DOMAIN-SUFFIX,ad.jamba.net - - DOMAIN-SUFFIX,ad.jamster.co.uk - - DOMAIN-SUFFIX,ad.jamster.com - - DOMAIN-SUFFIX,ad.jiemian.com - - DOMAIN-SUFFIX,ad.jsnbrynb.com - - DOMAIN-SUFFIX,ad.jxnews.com.cn - - DOMAIN-SUFFIX,ad.kissanime.io - - DOMAIN-SUFFIX,ad.kisscartoon.io - - DOMAIN-SUFFIX,ad.leadbolt.net - - DOMAIN-SUFFIX,ad.leadboltads.net - - DOMAIN-SUFFIX,ad.leadboltapps.net - - DOMAIN-SUFFIX,ad.leadboltmobile.net - - DOMAIN-SUFFIX,ad.livere.co.kr - - DOMAIN-SUFFIX,ad.lqalm.com - - DOMAIN-SUFFIX,ad.lyricswire.com - - DOMAIN-SUFFIX,ad.madserving.com - - DOMAIN-SUFFIX,ad.mail.ru - - DOMAIN-SUFFIX,ad.mail.sohu.com - - DOMAIN-SUFFIX,ad.mangareader.net - - DOMAIN-SUFFIX,ad.mediabong.net - - DOMAIN-SUFFIX,ad.mesomorphosis.com - - DOMAIN-SUFFIX,ad.mi.com - - DOMAIN-SUFFIX,ad.mnt123.com - - DOMAIN-SUFFIX,ad.molitv.cn - - DOMAIN-SUFFIX,ad.naver.com - - DOMAIN-SUFFIX,ad.netowl.jp - - DOMAIN-SUFFIX,ad.newegg.com - - DOMAIN-SUFFIX,ad.obuy.tw - - DOMAIN-SUFFIX,ad.openmultimedia.biz - - DOMAIN-SUFFIX,ad.outsidehub.com - - DOMAIN-SUFFIX,ad.pandora.tv - - DOMAIN-SUFFIX,ad.pchome.com.tw - - DOMAIN-SUFFIX,ad.pickple.net - - DOMAIN-SUFFIX,ad.pixnet.in - - DOMAIN-SUFFIX,ad.pixnet.net - - DOMAIN-SUFFIX,ad.player.baidu.com - - DOMAIN-SUFFIX,ad.propellerads.com - - DOMAIN-SUFFIX,ad.proxy.sh - - DOMAIN-SUFFIX,ad.qingting.fm - - DOMAIN-SUFFIX,ad.qq.com - - DOMAIN-SUFFIX,ad.r.worldssl.net - - DOMAIN-SUFFIX,ad.rambler.ru - - DOMAIN-SUFFIX,ad.reachlocal.com - - DOMAIN-SUFFIX,ad.rednet.cn - - DOMAIN-SUFFIX,ad.reklamport.com - - DOMAIN-SUFFIX,ad.search.ch - - DOMAIN-SUFFIX,ad.seeyouyima.com - - DOMAIN-SUFFIX,ad.sensismediasmart.com.au - - DOMAIN-SUFFIX,ad.services.distractify.com - - DOMAIN-SUFFIX,ad.shuoshuomi.com - - DOMAIN-SUFFIX,ad.sina.com.cn - - DOMAIN-SUFFIX,ad.sinovision.net - - DOMAIN-SUFFIX,ad.slutload.com - - DOMAIN-SUFFIX,ad.smartclip.net - - DOMAIN-SUFFIX,ad.sohu.com - - DOMAIN-SUFFIX,ad.spielothek.so - - DOMAIN-SUFFIX,ad.spreaker.com - - DOMAIN-SUFFIX,ad.stsywl.com - - DOMAIN-SUFFIX,ad.tatatimes.com - - DOMAIN-SUFFIX,ad.test.ximalaya.com - - DOMAIN-SUFFIX,ad.thepaper.cn - - DOMAIN-SUFFIX,ad.thisav.com - - DOMAIN-SUFFIX,ad.thsi.cn - - DOMAIN-SUFFIX,ad.toutiao.com - - DOMAIN-SUFFIX,ad.turn.com - - DOMAIN-SUFFIX,ad.unimhk.com - - DOMAIN-SUFFIX,ad.userporn.com - - DOMAIN-SUFFIX,ad.vidaroo.com - - DOMAIN-SUFFIX,ad.vryeye.com - - DOMAIN-SUFFIX,ad.walkgame.com - - DOMAIN-SUFFIX,ad.wang502.com - - DOMAIN-SUFFIX,ad.winningpartner.com - - DOMAIN-SUFFIX,ad.winrar.com.cn - - DOMAIN-SUFFIX,ad.wretch.cc - - DOMAIN-SUFFIX,ad.xiaomi.com - - DOMAIN-SUFFIX,ad.ximalaya.com - - DOMAIN-SUFFIX,ad.xmovies8.ru - - DOMAIN-SUFFIX,ad.xxguan.cn - - DOMAIN-SUFFIX,ad.yeshitv.com - - DOMAIN-SUFFIX,ad.yieldlab.net - - DOMAIN-SUFFIX,ad.yixin.im - - DOMAIN-SUFFIX,ad.ylunion.com - - DOMAIN-SUFFIX,ad.zanox.com - - DOMAIN-SUFFIX,ad.zdworks.com - - DOMAIN-SUFFIX,ad.zhangyue.com - - DOMAIN-SUFFIX,ad.zhidian3g.cn - - DOMAIN-SUFFIX,ad.zuimeitianqi.com - - DOMAIN-SUFFIX,ad0.bigmir.net - - DOMAIN-SUFFIX,ad000000.com - - DOMAIN-SUFFIX,ad1.bigmir.net - - DOMAIN-SUFFIX,ad1.greedland.net - - DOMAIN-SUFFIX,ad1.nend.net - - DOMAIN-SUFFIX,ad1.netshelter.net - - DOMAIN-SUFFIX,ad1.p5w.net - - DOMAIN-SUFFIX,ad1.udn.com - - DOMAIN-SUFFIX,ad1.xiaomi.com - - DOMAIN-SUFFIX,ad1.yangjinyou.com - - DOMAIN-SUFFIX,ad2.nend.net - - DOMAIN-SUFFIX,ad2.udn.com - - DOMAIN-SUFFIX,ad2.yam.com - - DOMAIN-SUFFIX,ad2.yangjinyou.com - - DOMAIN-SUFFIX,ad3.udn.com - - DOMAIN-SUFFIX,ad4.bigmir.net - - DOMAIN-SUFFIX,ad4.sina.com.cn - - DOMAIN-SUFFIX,ad4.udn.com - - DOMAIN-SUFFIX,ad4game.com - - DOMAIN-SUFFIX,ad5.bigmir.net - - DOMAIN-SUFFIX,ad6.bigmir.net - - DOMAIN-SUFFIX,ad7.bigmir.net - - DOMAIN-SUFFIX,ad7.com - - DOMAIN-SUFFIX,ad7.on.cc - - DOMAIN-SUFFIX,ad7.tagphi.net - - DOMAIN-SUFFIX,ad8.adfarm1.adition.com - - DOMAIN-SUFFIX,ad9377.com - - DOMAIN-SUFFIX,adadapted.com - - DOMAIN-SUFFIX,adadmin.house365.com - - DOMAIN-SUFFIX,adadvisor.net - - DOMAIN-SUFFIX,ad-android.51wnl.com - - DOMAIN-SUFFIX,adap.tv - - DOMAIN-SUFFIX,adapi.lenovogame.com - - DOMAIN-SUFFIX,adasad.myweb.hinet.net - - DOMAIN-SUFFIX,adash.m.taobao.com - - DOMAIN-SUFFIX,adbana.com - - DOMAIN-SUFFIX,ad-beta.flipboard.com - - DOMAIN-SUFFIX,adbot.tw - - DOMAIN-SUFFIX,adbox.sina.com.cn - - DOMAIN-SUFFIX,ad-brix.com - - DOMAIN-SUFFIX,adbuyer3.lycos.com - - DOMAIN-SUFFIX,adbxb.com - - DOMAIN-SUFFIX,adcast.deviantart.com - - DOMAIN-SUFFIX,adcast.fblife.com - - DOMAIN-SUFFIX,adccoo.cn - - DOMAIN-SUFFIX,adcdn.goo.ne.jp - - DOMAIN-SUFFIX,adchina.com - - DOMAIN-SUFFIX,adcitrus.com - - DOMAIN-SUFFIX,adcl.pchome.com.tw - - DOMAIN-SUFFIX,adclick.g.doublecklick.net - - DOMAIN-SUFFIX,adclient.uimserv.net - - DOMAIN-SUFFIX,adclock.zdworks.com - - DOMAIN-SUFFIX,adcloud.jp - - DOMAIN-SUFFIX,ad-cloud.jp - - DOMAIN-SUFFIX,ad-cn.jovcloud.com - - DOMAIN-SUFFIX,adcolony.com - - DOMAIN-SUFFIX,adcome.cn - - DOMAIN-SUFFIX,adcore.lenovomm.com - - DOMAIN-SUFFIX,adcount.yoka.com - - DOMAIN-SUFFIX,adcr.naver.com - - DOMAIN-SUFFIX,adcreative.naver.com - - DOMAIN-SUFFIX,add.bugun.com.tr - - DOMAIN-SUFFIX,add.dz19.net - - DOMAIN-SUFFIX,add.freeimg8.com - - DOMAIN-SUFFIX,add.mmyuer.com - - DOMAIN-SUFFIX,addata.ku6.com - - DOMAIN-SUFFIX,ad-delivery.net - - DOMAIN-SUFFIX,addirector.vindicosuite.com - - DOMAIN-SUFFIX,addl.easetuner.com - - DOMAIN-SUFFIX,adds.weatherology.com - - DOMAIN-SUFFIX,addthis.com - - DOMAIN-SUFFIX,addthisedge.com - - DOMAIN-SUFFIX,adeaz.com - - DOMAIN-SUFFIX,ader.mobi - - DOMAIN-SUFFIX,adeventtracker.spotify.com - - DOMAIN-SUFFIX,adexprt.com - - DOMAIN-SUFFIX,adf.dahe.cn - - DOMAIN-SUFFIX,adfarm.mediaplex.com - - DOMAIN-SUFFIX,adform.net - - DOMAIN-SUFFIX,adfront.auction.co.kr - - DOMAIN-SUFFIX,adfurikun.jp - - DOMAIN-SUFFIX,adfuture.cn - - DOMAIN-SUFFIX,ad-gb.mgid.com - - DOMAIN-SUFFIX,adgeo.163.com - - DOMAIN-SUFFIX,adhai.com - - DOMAIN-SUFFIX,adhome.1fangchan.com - - DOMAIN-SUFFIX,adhouyi.com - - DOMAIN-SUFFIX,adi.bigmir.net - - DOMAIN-SUFFIX,adi.cnool.net - - DOMAIN-SUFFIX,adi2007.cnool.net - - DOMAIN-SUFFIX,adimages.go.com - - DOMAIN-SUFFIX,adimages.sina.com.hk - - DOMAIN-SUFFIX,adimg.bbcss.com - - DOMAIN-SUFFIX,adimg.cqnews.net - - DOMAIN-SUFFIX,adimg.daumcdn.net - - DOMAIN-SUFFIX,adimg.deviantart.net - - DOMAIN-SUFFIX,adimg.mobile.sina.cn - - DOMAIN-SUFFIX,adimg.qxlsjw.com - - DOMAIN-SUFFIX,adimg.uimserv.net - - DOMAIN-SUFFIX,adimg.uve.weibo.com - - DOMAIN-SUFFIX,adimg1.chosun.com - - DOMAIN-SUFFIX,adimg3.search.naver.net - - DOMAIN-SUFFIX,adimgs.xici.net - - DOMAIN-SUFFIX,adimp.excite.co.jp - - DOMAIN-SUFFIX,adinall.com - - DOMAIN-SUFFIX,adinf.cp11.ott.cibntv.net - - DOMAIN-SUFFIX,adinf.voole.com - - DOMAIN-SUFFIX,adinfo.aol.com - - DOMAIN-SUFFIX,adinfo.ra1.xlmc.sec.miui.com - - DOMAIN-SUFFIX,adinfuse.com - - DOMAIN-SUFFIX,adingo.jp.eimg.jp - - DOMAIN-SUFFIX,adirects.com - - DOMAIN-SUFFIX,adjb.5nd.com - - DOMAIN-SUFFIX,adjust.io - - DOMAIN-SUFFIX,adk.funshion.com - - DOMAIN-SUFFIX,adk2.co - - DOMAIN-SUFFIX,adk2x.com - - DOMAIN-SUFFIX,adkmob.com - - DOMAIN-SUFFIX,adkongjian.com - - DOMAIN-SUFFIX,adlabs-sync.rutarget.ru - - DOMAIN-SUFFIX,adlaunch.moji.com - - DOMAIN-SUFFIX,adlefee.com - - DOMAIN-SUFFIX,adlink.shopsafe.co.nz - - DOMAIN-SUFFIX,adlive.cn - - DOMAIN-SUFFIX,adlocus.com - - DOMAIN-SUFFIX,ad-locus.com - - DOMAIN-SUFFIX,adlog.flurry.com - - DOMAIN-SUFFIX,adm.10jqka.com.cn - - DOMAIN-SUFFIX,adm.265g.com - - DOMAIN-SUFFIX,adm.72zx.com - - DOMAIN-SUFFIX,adm.86wan.com - - DOMAIN-SUFFIX,adm.baidu.com - - DOMAIN-SUFFIX,adm.cloud.cnfol.com - - DOMAIN-SUFFIX,adm.easou.com - - DOMAIN-SUFFIX,adm.funshion.com - - DOMAIN-SUFFIX,adm.icast.cn - - DOMAIN-SUFFIX,adm.leju.com - - DOMAIN-SUFFIX,adm.leju.sina.com.cn - - DOMAIN-SUFFIX,adm.myzaker.com - - DOMAIN-SUFFIX,adm.xmfish.com - - DOMAIN-SUFFIX,adm.zbinfo.net - - DOMAIN-SUFFIX,adm.zookingsoft.com - - DOMAIN-SUFFIX,adm0.autoimg.cn - - DOMAIN-SUFFIX,adm1.autoimg.cn - - DOMAIN-SUFFIX,adm2.autoimg.cn - - DOMAIN-SUFFIX,adm3.autoimg.cn - - DOMAIN-SUFFIX,admaji.com - - DOMAIN-SUFFIX,admarket.21cn.com - - DOMAIN-SUFFIX,admarket.mobi - - DOMAIN-SUFFIX,admd.yam.com - - DOMAIN-SUFFIX,admedia.com - - DOMAIN-SUFFIX,admeta.vo.llnwd.net - - DOMAIN-SUFFIX,admgr.qingting.fm - - DOMAIN-SUFFIX,admin.cooguo.com - - DOMAIN-SUFFIX,admin.louxia.org - - DOMAIN-SUFFIX,admin.ninebox.cn - - DOMAIN-SUFFIX,admin6.com - - DOMAIN-SUFFIX,admob.com - - DOMAIN-SUFFIX,admon.cn - - DOMAIN-SUFFIX,admtpmp124.com - - DOMAIN-SUFFIX,admx.baixing.com - - DOMAIN-SUFFIX,adn.ebay.com - - DOMAIN-SUFFIX,adn.insight.ucweb.com - - DOMAIN-SUFFIX,adnetpub.yaolan.com - - DOMAIN-SUFFIX,adnew.wifi8.com - - DOMAIN-SUFFIX,adnxs.com - - DOMAIN-SUFFIX,adobe-dns.adobe.com - - DOMAIN-SUFFIX,adobe-dns-2.adobe.com - - DOMAIN-SUFFIX,adobe-dns-3.adobe.com - - DOMAIN-SUFFIX,adomv.com - - DOMAIN-SUFFIX,adp.cnool.net - - DOMAIN-SUFFIX,adp.s8bbs.com - - DOMAIN-SUFFIX,adp1.cnool.net - - DOMAIN-SUFFIX,adpai.thepaper.cn - - DOMAIN-SUFFIX,adperium.com - - DOMAIN-SUFFIX,adping.qq.com - - DOMAIN-SUFFIX,adplatform.vrtcal.com - - DOMAIN-SUFFIX,ad-plus.cn - - DOMAIN-SUFFIX,adplus.goo.mx - - DOMAIN-SUFFIX,adplxmd.com - - DOMAIN-SUFFIX,adpm.app.qq.com - - DOMAIN-SUFFIX,adpolestar.net - - DOMAIN-SUFFIX,adpro.cn - - DOMAIN-SUFFIX,adpro.pro.cn - - DOMAIN-SUFFIX,adpub.yaolan.com - - DOMAIN-SUFFIX,adpublish.ydstatic.com - - DOMAIN-SUFFIX,adpubs.yaolan.com - - DOMAIN-SUFFIX,adpush.cn - - DOMAIN-SUFFIX,adq.chinaso.com - - DOMAIN-SUFFIX,adrdir.qq.com - - DOMAIN-SUFFIX,adreal.cn - - DOMAIN-SUFFIX,adres.myaora.net - - DOMAIN-SUFFIX,adriver.ru - - DOMAIN-SUFFIX,adriver-sync.rutarget.ru - - DOMAIN-SUFFIX,adroll.com - - DOMAIN-SUFFIX,adrotator.se - - DOMAIN-SUFFIX,adrs.sdo.com - - DOMAIN-SUFFIX,adrunnr.com - - DOMAIN-SUFFIX,ads1.msads.net - - DOMAIN-SUFFIX,ads1.msn.com - - DOMAIN-SUFFIX,ads2.contentabc.com - - DOMAIN-SUFFIX,ads2.msads.net - - DOMAIN-SUFFIX,ads2.msn.com - - DOMAIN-SUFFIX,ads2.opensubtitles.org - - DOMAIN-SUFFIX,ads8.com - - DOMAIN-SUFFIX,ads80.com - - DOMAIN-SUFFIX,adsame.com - - DOMAIN-SUFFIX,adsapi.manhuaren.com - - DOMAIN-SUFFIX,adsatt.abcnews.starwave.com - - DOMAIN-SUFFIX,adsatt.disney.starwave.com - - DOMAIN-SUFFIX,adsatt.espn.go.com - - DOMAIN-SUFFIX,adsatt.espn.starwave.com - - DOMAIN-SUFFIX,adsatt.familyfun.starwave.com - - DOMAIN-SUFFIX,adsatt.go.starwave.com - - DOMAIN-SUFFIX,adsatt.movies.starwave.com - - DOMAIN-SUFFIX,adscaspion.appspot.com - - DOMAIN-SUFFIX,adscdn.baidu.com - - DOMAIN-SUFFIX,adsclick.qq.com - - DOMAIN-SUFFIX,adsclick.yx.js.cn - - DOMAIN-SUFFIX,adsco.re - - DOMAIN-SUFFIX,adscript.gmarket.co.kr - - DOMAIN-SUFFIX,adsdk.9imobi.com - - DOMAIN-SUFFIX,adsdk.dmzj.com - - DOMAIN-SUFFIX,adse.test.ximalaya.com - - DOMAIN-SUFFIX,adse.ximalaya.com - - DOMAIN-SUFFIX,adsence.sogou.com - - DOMAIN-SUFFIX,adsense.html5.qq.com - - DOMAIN-SUFFIX,adserve2.tom.com - - DOMAIN-SUFFIX,adsfactor.net - - DOMAIN-SUFFIX,adsfile.bssdlbig.kugou.com - - DOMAIN-SUFFIX,adsfile.qq.com - - DOMAIN-SUFFIX,adsfs.oppomobile.com - - DOMAIN-SUFFIX,adsgroup.qq.com - - DOMAIN-SUFFIX,adshare.freedocast.com - - DOMAIN-SUFFIX,adshmct.qq.com - - DOMAIN-SUFFIX,adshmmsg.qq.com - - DOMAIN-SUFFIX,adshost2.com - - DOMAIN-SUFFIX,adshow.58.com - - DOMAIN-SUFFIX,adshow.it168.com - - DOMAIN-SUFFIX,adshows.21cn.com - - DOMAIN-SUFFIX,adsin.zhangyoubao.com - - DOMAIN-SUFFIX,adsinstant.com - - DOMAIN-SUFFIX,adslvfile.qq.com - - DOMAIN-SUFFIX,adslvseed.qq.com - - DOMAIN-SUFFIX,adsmart.yicha.cn - - DOMAIN-SUFFIX,adsolution.imtt.qq.com - - DOMAIN-SUFFIX,adsor.openrunner.com - - DOMAIN-SUFFIX,adsp.xunlei.com - - DOMAIN-SUFFIX,ad-specs.guoshipartners.com - - DOMAIN-SUFFIX,adsqqclick.qq.com - - DOMAIN-SUFFIX,adsremote.scrippsnetworks.com - - DOMAIN-SUFFIX,adsrvr.org - - DOMAIN-SUFFIX,adss.dotdo.net - - DOMAIN-SUFFIX,adss.yahoo.com - - DOMAIN-SUFFIX,adstat.cp11.ott.cibntv.net - - DOMAIN-SUFFIX,adstextview.qq.com - - DOMAIN-SUFFIX,adstil.indiatimes.com - - DOMAIN-SUFFIX,ad-stir.com - - DOMAIN-SUFFIX,adsmind.ugdtimg.com - - DOMAIN-SUFFIX,adstream.123.sogoucdn.com - - DOMAIN-SUFFIX,ads-twitter.com - - DOMAIN-SUFFIX,ads-v-darwin.hulustream.com - - DOMAIN-SUFFIX,adsunflower.com - - DOMAIN-SUFFIX,adsunion.com - - DOMAIN-SUFFIX,ad-survey.com - - DOMAIN-SUFFIX,adsview.qq.com - - DOMAIN-SUFFIX,adsview2.qq.com - - DOMAIN-SUFFIX,adsymptotic.com - - DOMAIN-SUFFIX,adsyndication.msn.com - - DOMAIN-SUFFIX,adsys.chinacloudapp.cn - - DOMAIN-SUFFIX,adsys.sinovision.net - - DOMAIN-SUFFIX,adtaily.com - - DOMAIN-SUFFIX,ad-tech.nbcuni.co - - DOMAIN-SUFFIX,adtechjp.com - - DOMAIN-SUFFIX,adtechus.com - - DOMAIN-SUFFIX,adtest.theonion.com - - DOMAIN-SUFFIX,adthor.com - - DOMAIN-SUFFIX,adtrack.ucweb.com - - DOMAIN-SUFFIX,adtrk.me - - DOMAIN-SUFFIX,adui.tg.meitu.com - - DOMAIN-SUFFIX,adultfriendfinder.com - - DOMAIN-SUFFIX,adups.com - - DOMAIN-SUFFIX,aduu.cn - - DOMAIN-SUFFIX,adv.app.qq.com - - DOMAIN-SUFFIX,adv.ccb.com - - DOMAIN-SUFFIX,adv.fjtv.net - - DOMAIN-SUFFIX,adv.jxnews.com.cn - - DOMAIN-SUFFIX,adv.madserving.com - - DOMAIN-SUFFIX,adv.s8bbs.com - - DOMAIN-SUFFIX,adv.sec.miui.com - - DOMAIN-SUFFIX,adv2.downsave.com - - DOMAIN-SUFFIX,advapi.ahtv.cn - - DOMAIN-SUFFIX,adver.qq.com - - DOMAIN-SUFFIX,adview.cn - - DOMAIN-SUFFIX,advmob.cn - - DOMAIN-SUFFIX,advombat.ru - - DOMAIN-SUFFIX,adwasu.wasu.tv - - DOMAIN-SUFFIX,adweb.test.ximalaya.com - - DOMAIN-SUFFIX,adweb.ximalaya.com - - DOMAIN-SUFFIX,adwhirl.com - - DOMAIN-SUFFIX,adwo.com - - DOMAIN-SUFFIX,adx.adxglobal.com - - DOMAIN-SUFFIX,adx.chip.de - - DOMAIN-SUFFIX,adx.dlads.cn - - DOMAIN-SUFFIX,adx.kat.ph - - DOMAIN-SUFFIX,adx.pro.cn - - DOMAIN-SUFFIX,adx.xiaodutv.com - - DOMAIN-SUFFIX,adx3.iq39.com - - DOMAIN-SUFFIX,adxmi.com - - DOMAIN-SUFFIX,adxpansion.com - - DOMAIN-SUFFIX,adxserver.ad.cmvideo.cn - - DOMAIN-SUFFIX,adytx.com - - DOMAIN-SUFFIX,adyun.com - - DOMAIN-SUFFIX,adz.zwee.ly - - DOMAIN-SUFFIX,adzerk.net - - DOMAIN-SUFFIX,aec.shjk123.net - - DOMAIN-SUFFIX,aecpm.alicdn.com - - DOMAIN-SUFFIX,ae-gb.mgid.com - - DOMAIN-SUFFIX,aercxy.com - - DOMAIN-SUFFIX,aerserv.com - - DOMAIN-SUFFIX,aes01.com - - DOMAIN-SUFFIX,afd.baidu.com - - DOMAIN-SUFFIX,afd.l.google.com - - DOMAIN-SUFFIX,aff.eteachergroup.com - - DOMAIN-SUFFIX,aff.lmgtfy.com - - DOMAIN-SUFFIX,aff.marathonbet.com - - DOMAIN-SUFFIX,aff.svjump.com - - DOMAIN-SUFFIX,affil.mupromo.com - - DOMAIN-SUFFIX,affiliategroove.com - - DOMAIN-SUFFIX,affiliateprogram.keywordspy.com - - DOMAIN-SUFFIX,affiliates.allposters.com - - DOMAIN-SUFFIX,affiliates.goodvibes.com - - DOMAIN-SUFFIX,affiliates.thrixxx.com - - DOMAIN-SUFFIX,affiliatesmedia.sbobet.com - - DOMAIN-SUFFIX,affiliation.fotovista.com - - DOMAIN-SUFFIX,afjlb.com - - DOMAIN-SUFFIX,afp.alicdn.com - - DOMAIN-SUFFIX,afp.chinanews.com - - DOMAIN-SUFFIX,afp.csbew.com - - DOMAIN-SUFFIX,afp.m1905.com - - DOMAIN-SUFFIX,afp.wasu.cn - - DOMAIN-SUFFIX,afp.zol-img.com.cn - - DOMAIN-SUFFIX,afpcreative.wasu.cn - - DOMAIN-SUFFIX,afpimages.eastday - - DOMAIN-SUFFIX,afpimages.eastday.com - - DOMAIN-SUFFIX,afpmm.alicdn.com - - DOMAIN-SUFFIX,afptrack.csbew.com - - DOMAIN-SUFFIX,ag.nukefans.net - - DOMAIN-SUFFIX,agenda.complex.com - - DOMAIN-SUFFIX,ag-gb.marketgid.com - - DOMAIN-SUFFIX,agn.aty.cp45.ott.cibntv.net - - DOMAIN-SUFFIX,agn.aty.snmsohu.aisee.tv - - DOMAIN-SUFFIX,agoodm.m.taobao.com - - DOMAIN-SUFFIX,agr.voiceads.cn - - DOMAIN-SUFFIX,agrant.cn - - DOMAIN-SUFFIX,agrantsem.com - - DOMAIN-SUFFIX,ahhuazhen.com - - DOMAIN-SUFFIX,ahyau.com - - DOMAIN-SUFFIX,ahyuns.com - - DOMAIN-SUFFIX,ai.bioon.com - - DOMAIN-SUFFIX,ai.m.taobao.com - - DOMAIN-SUFFIX,ai.taobao.com - - DOMAIN-SUFFIX,ai.xinju.cc - - DOMAIN-SUFFIX,ai.yimg.jp - - DOMAIN-SUFFIX,aibangzs.com - - DOMAIN-SUFFIX,aiclk.com - - DOMAIN-SUFFIX,aicydb.com - - DOMAIN-SUFFIX,aid.chinayk.com - - DOMAIN-SUFFIX,aider-res.meizu.com - - DOMAIN-SUFFIX,aihaoduo.cn - - DOMAIN-SUFFIX,aikan6.com - - DOMAIN-SUFFIX,ailicee.com - - DOMAIN-SUFFIX,aim.yoyi.com.cn - - DOMAIN-SUFFIX,air.yoyi.com.cn - - DOMAIN-SUFFIX,airpush.com - - DOMAIN-SUFFIX,airpushmarketing.s3.amazonaws.com - - DOMAIN-SUFFIX,ais.abacast.com - - DOMAIN-SUFFIX,aishang.bid - - DOMAIN-SUFFIX,aishiguolong.com - - DOMAIN-SUFFIX,aishowbger.com - - DOMAIN-SUFFIX,aiwen.cc - - DOMAIN-SUFFIX,ajapk.com - - DOMAIN-SUFFIX,ajaxcdn.org - - DOMAIN-SUFFIX,aj-gb.mgid.com - - DOMAIN-SUFFIX,ajhdf.com - - DOMAIN-SUFFIX,ajialive.com - - DOMAIN-SUFFIX,ajnad.aljazeera.net - - DOMAIN-SUFFIX,ajuhd.com - - DOMAIN-SUFFIX,ak.sascdn.com - - DOMAIN-SUFFIX,ak47.cooguo.com - - DOMAIN-SUFFIX,akrwi.cn - - DOMAIN-SUFFIX,akuai.top - - DOMAIN-SUFFIX,akxsrsdbursfpx.bid - - DOMAIN-SUFFIX,al.autohome.com.cn - - DOMAIN-SUFFIX,alertserver.ushaqi.com - - DOMAIN-SUFFIX,alipay.dajiadou6.com - - DOMAIN-SUFFIX,aliqqjd.cn - - DOMAIN-SUFFIX,alisinak.com - - DOMAIN-SUFFIX,alissl.ucdl.pp.uc.cn - - DOMAIN-SUFFIX,alistatic.cn - - DOMAIN-SUFFIX,alitianxia168.com - - DOMAIN-SUFFIX,alitui.weibo.com - - DOMAIN-SUFFIX,aliunion.cn.yahoo.com - - DOMAIN-SUFFIX,aliyuncss.com - - DOMAIN-SUFFIX,aliyunxin.com - - DOMAIN-SUFFIX,all.orfr.adgtw.orangeads.fr - - DOMAIN-SUFFIX,all.rising.com.cn - - DOMAIN-SUFFIX,allnews.uodoo.com - - DOMAIN-SUFFIX,allxin.com - - DOMAIN-SUFFIX,als.baidu.com - - DOMAIN-SUFFIX,alvares.esportsheaven.com - - DOMAIN-SUFFIX,am.6park.com - - DOMAIN-SUFFIX,am.g.ireader.com - - DOMAIN-SUFFIX,am.szhome.com - - DOMAIN-SUFFIX,am.zdnet.com.cn - - DOMAIN-SUFFIX,am15.net - - DOMAIN-SUFFIX,amazingmagics.com - - DOMAIN-SUFFIX,amdc.m.taobao.com - - DOMAIN-SUFFIX,amfi.gou.sogou.com - - DOMAIN-SUFFIX,amiok.org - - DOMAIN-SUFFIX,amps.yoyi.com.cn - - DOMAIN-SUFFIX,ams.fx678.com - - DOMAIN-SUFFIX,ams.lenovomm.com - - DOMAIN-SUFFIX,a-m-s.poco.cn - - DOMAIN-SUFFIX,amz.steamprices.com - - DOMAIN-SUFFIX,an.m.liebao.cn - - DOMAIN-SUFFIX,an.wikigifth.com - - DOMAIN-SUFFIX,an.yandex.ru - - DOMAIN-SUFFIX,ana.tatahn.com - - DOMAIN-SUFFIX,analy.qq.com - - DOMAIN-SUFFIX,andmejs.com - - DOMAIN-SUFFIX,android.push.126.net - - DOMAIN-SUFFIX,android.rqd.qq.com - - DOMAIN-SUFFIX,androidlog.shouji.baofeng.com - - DOMAIN-SUFFIX,android-lrcresource.wps.cn - - DOMAIN-SUFFIX,andrqd.play.aiseet.atianqi.com - - DOMAIN-SUFFIX,anfeng.com - - DOMAIN-SUFFIX,angsrvr.com - - DOMAIN-SUFFIX,anioscp.com - - DOMAIN-SUFFIX,ann5.net - - DOMAIN-SUFFIX,anquan.baidu.com - - DOMAIN-SUFFIX,anquan.org - - DOMAIN-SUFFIX,anreson.net - - DOMAIN-SUFFIX,antivirus.baidu.com - - DOMAIN-SUFFIX,anyangruisi.com - - DOMAIN-SUFFIX,anysdk.com - - DOMAIN-SUFFIX,aodongjiaosu.com - - DOMAIN-SUFFIX,aombjl099.com - - DOMAIN-SUFFIX,aoodoo.feng.com - - DOMAIN-SUFFIX,aoodoo.weiphone.com - - DOMAIN-SUFFIX,aos.wall.youmi.net - - DOMAIN-SUFFIX,aos-creative.prf.hn - - DOMAIN-SUFFIX,apas.aipai.com - - DOMAIN-SUFFIX,api.0.0.0.0.cn - - DOMAIN-SUFFIX,api.adv.ott.cibntv.net - - DOMAIN-SUFFIX,api.ahjinshu.com - - DOMAIN-SUFFIX,api.android.dianru.com - - DOMAIN-SUFFIX,api.anti.wauee.com - - DOMAIN-SUFFIX,api.appodeal.com - - DOMAIN-SUFFIX,api.apps.sina.cn - - DOMAIN-SUFFIX,api.bailingjiankang.com - - DOMAIN-SUFFIX,api.bs.zui.com - - DOMAIN-SUFFIX,api.cmt.mob.com - - DOMAIN-SUFFIX,api.coolguang.com - - DOMAIN-SUFFIX,api.dewmobile.net - - DOMAIN-SUFFIX,api.dianru.com - - DOMAIN-SUFFIX,api.doumob.com - - DOMAIN-SUFFIX,api.dreamfull.cn - - DOMAIN-SUFFIX,api.dsp.yhd.com - - DOMAIN-SUFFIX,api.exc.mob.com - - DOMAIN-SUFFIX,api.g1.junfull.com - - DOMAIN-SUFFIX,api.g2.junfull.com - - DOMAIN-SUFFIX,api.gi.igexin.com - - DOMAIN-SUFFIX,api.goulegu.com - - DOMAIN-SUFFIX,api.growingio.com - - DOMAIN-SUFFIX,api.iapps.ifeng.com - - DOMAIN-SUFFIX,api.iimedia.cn - - DOMAIN-SUFFIX,api.ijunhai.com - - DOMAIN-SUFFIX,api.itaoxiaoshuo.com - - DOMAIN-SUFFIX,api.joybj.com - - DOMAIN-SUFFIX,api.ketedata.com - - DOMAIN-SUFFIX,api.koudaikj.com - - DOMAIN-SUFFIX,api.leadbolt.net - - DOMAIN-SUFFIX,api.mobgi.com - - DOMAIN-SUFFIX,api.mobula.sdk.duapps.com - - DOMAIN-SUFFIX,api.moogos.com - - DOMAIN-SUFFIX,api.mp.uc.cn - - DOMAIN-SUFFIX,api.newad.ifeng.com - - DOMAIN-SUFFIX,api.newbelden.com - - DOMAIN-SUFFIX,api.open.uc.cn - - DOMAIN-SUFFIX,api.pingstart.com - - DOMAIN-SUFFIX,api.ppoi.org - - DOMAIN-SUFFIX,api.primecaster.net - - DOMAIN-SUFFIX,api.push.daoyoudao.com - - DOMAIN-SUFFIX,api.ra2.xlmc.sec.miui.com - - DOMAIN-SUFFIX,api.rees46.com - - DOMAIN-SUFFIX,api.rideraid.net - - DOMAIN-SUFFIX,api.share.mob.com - - DOMAIN-SUFFIX,api.shuzilm.cn - - DOMAIN-SUFFIX,api.similarweb.com - - DOMAIN-SUFFIX,api.tr.blismedia.com - - DOMAIN-SUFFIX,api.tw06.xlmc.sec.miui.com - - DOMAIN-SUFFIX,api.ujian.cc - - DOMAIN-SUFFIX,api.union.vip.com - - DOMAIN-SUFFIX,api.uniplayad.com - - DOMAIN-SUFFIX,api.userstyles.org - - DOMAIN-SUFFIX,api.viglink.com - - DOMAIN-SUFFIX,api.waptest.taobao.com - - DOMAIN-SUFFIX,api.whizzone.com - - DOMAIN-SUFFIX,api.xk.miui.com - - DOMAIN-SUFFIX,api.y.igexin.com - - DOMAIN-SUFFIX,api.youxiaoad.com - - DOMAIN-SUFFIX,api.zol.com - - DOMAIN-SUFFIX,api2.play.cn - - DOMAIN-SUFFIX,api-flow.flyme.cn - - DOMAIN-SUFFIX,api-game.meizu.com - - DOMAIN-SUFFIX,apihk.growingio.com - - DOMAIN-SUFFIX,api-push.meizu.com - - DOMAIN-SUFFIX,api-shoulei-ssl.xunlei.com - - DOMAIN-SUFFIX,apisoft.df0535.com - - DOMAIN-SUFFIX,apk.idate520.com - - DOMAIN-SUFFIX,apk.supfast.net - - DOMAIN-SUFFIX,apkdo.com - - DOMAIN-SUFFIX,apkinfo.voole.com - - DOMAIN-SUFFIX,apklog.cp11.ott.cibntv.net - - DOMAIN-SUFFIX,apnmedia.ask.com - - DOMAIN-SUFFIX,apns.ios.ijinshan.com - - DOMAIN-SUFFIX,apoll.m.taobao.com - - DOMAIN-SUFFIX,apollo.caixin.com - - DOMAIN-SUFFIX,app.3987.com - - DOMAIN-SUFFIX,app.9yyg.cn - - DOMAIN-SUFFIX,app.abc000.today - - DOMAIN-SUFFIX,app.acm.dzwww.com - - DOMAIN-SUFFIX,app.eduancm.com - - DOMAIN-SUFFIX,app.houyi.baofeng.net - - DOMAIN-SUFFIX,app.hytdsm.com - - DOMAIN-SUFFIX,app.ibaiducdn.com - - DOMAIN-SUFFIX,app.jgyee.com - - DOMAIN-SUFFIX,app.jiuzhilan.com - - DOMAIN-SUFFIX,app.juwang.com - - DOMAIN-SUFFIX,app.lz55.cn - - DOMAIN-SUFFIX,app.moji001.com - - DOMAIN-SUFFIX,app.starschina.com - - DOMAIN-SUFFIX,app.tanwan.com - - DOMAIN-SUFFIX,app.uu.cc - - DOMAIN-SUFFIX,app.waps.cn - - DOMAIN-SUFFIX,app.wapx.cn - - DOMAIN-SUFFIX,app.wumii.com - - DOMAIN-SUFFIX,app.xizi.com - - DOMAIN-SUFFIX,app.xyjqy.com - - DOMAIN-SUFFIX,app01.nodes.gslb.mi-idc.com - - DOMAIN-SUFFIX,app02.nodes.gslb.mi-idc.com - - DOMAIN-SUFFIX,appads.com - - DOMAIN-SUFFIX,appboy.com - - DOMAIN-SUFFIX,appc.baidu.com - - DOMAIN-SUFFIX,appcdn.wapx.cn - - DOMAIN-SUFFIX,appcdn.wapx.com - - DOMAIN-SUFFIX,appcpa.net - - DOMAIN-SUFFIX,appdriver.cn - - DOMAIN-SUFFIX,appdriver.com.cn - - DOMAIN-SUFFIX,appfh.com - - DOMAIN-SUFFIX,app-g.39.net - - DOMAIN-SUFFIX,appget.cn - - DOMAIN-SUFFIX,appgift.sinaapp.com - - DOMAIN-SUFFIX,appjiagu.com - - DOMAIN-SUFFIX,applifier.com - - DOMAIN-SUFFIX,applog.uc.cn - - DOMAIN-SUFFIX,applogapi.autohome.com.cn - - DOMAIN-SUFFIX,applogios.uc.cn - - DOMAIN-SUFFIX,app-monitor.ele.me - - DOMAIN-SUFFIX,appnext.com - - DOMAIN-SUFFIX,appodealx.com - - DOMAIN-SUFFIX,apppic.yingyongbei.com - - DOMAIN-SUFFIX,apps.mobilityware.com - - DOMAIN-SUFFIX,apps.outfit7.com - - DOMAIN-SUFFIX,apps.supfast.net - - DOMAIN-SUFFIX,apps2.outfit7.com - - DOMAIN-SUFFIX,appsdk.tanv.com - - DOMAIN-SUFFIX,appservices.comcsoft.com - - DOMAIN-SUFFIX,appspromote.wostore.cn - - DOMAIN-SUFFIX,appsrv1.madserving.com - - DOMAIN-SUFFIX,appsrv4.madserving.com - - DOMAIN-SUFFIX,appsupdate.sinaapp.com - - DOMAIN-SUFFIX,appsupport.stargame.com - - DOMAIN-SUFFIX,apptentive.com - - DOMAIN-SUFFIX,appuu.cn - - DOMAIN-SUFFIX,apt.qumi.com - - DOMAIN-SUFFIX,aqgyju.cn - - DOMAIN-SUFFIX,aqqgli3vle.bid - - DOMAIN-SUFFIX,aqw.quanliyouxi.cn - - DOMAIN-SUFFIX,ar.atwola.com - - DOMAIN-SUFFIX,ar1.atwola.com - - DOMAIN-SUFFIX,ar7.atwola.com - - DOMAIN-SUFFIX,ar9.atwola.com - - DOMAIN-SUFFIX,aralego.com - - DOMAIN-SUFFIX,ard.ihookup.com - - DOMAIN-SUFFIX,ard.sweetdiscreet.com - - DOMAIN-SUFFIX,ard.yahoo.co.jp - - DOMAIN-SUFFIX,ardmall.com - - DOMAIN-SUFFIX,arealx.com - - DOMAIN-SUFFIX,aries.mzres.com - - DOMAIN-SUFFIX,ark.cocounion.com - - DOMAIN-SUFFIX,ark.cp21.ott.cibntv.net - - DOMAIN-SUFFIX,art.theta.sogoucdn.com - - DOMAIN-SUFFIX,as.bjmama.net - - DOMAIN-SUFFIX,as.casalemedia.com - - DOMAIN-SUFFIX,as.inbox.com - - DOMAIN-SUFFIX,as.kejet.com - - DOMAIN-SUFFIX,as.kejet.net - - DOMAIN-SUFFIX,as.sinahk.net - - DOMAIN-SUFFIX,as.trklinklog.com - - DOMAIN-SUFFIX,as.yuewz.com - - DOMAIN-SUFFIX,asd.projectfreetv.so - - DOMAIN-SUFFIX,asearch.alicdn.com - - DOMAIN-SUFFIX,ashiping.com - - DOMAIN-SUFFIX,ashow.pcpop.com - - DOMAIN-SUFFIX,asia.marketo.com - - DOMAIN-SUFFIX,ask.gaykes.com - - DOMAIN-SUFFIX,assets.210189.com - - DOMAIN-SUFFIX,assets.2343sdxs.com - - DOMAIN-SUFFIX,assets.258pcf.com - - DOMAIN-SUFFIX,assets.258ydh.com - - DOMAIN-SUFFIX,assets.easou.com - - DOMAIN-SUFFIX,asv.nuggad.net - - DOMAIN-SUFFIX,aswgbzsw.xingtangshuo.com - - DOMAIN-SUFFIX,aswl.d3kdh34.pw - - DOMAIN-SUFFIX,aswl.dfs3e4.pw - - DOMAIN-SUFFIX,aswl.zjhim.com - - DOMAIN-SUFFIX,aswlx.cn - - DOMAIN-SUFFIX,at.atwola.com - - DOMAIN-SUFFIX,at.mct01.com - - DOMAIN-SUFFIX,at98.com - - DOMAIN-SUFFIX,atanx.alicdn.com - - DOMAIN-SUFFIX,atanx2.alicdn.com - - DOMAIN-SUFFIX,atas.io - - DOMAIN-SUFFIX,atcryp.com - - DOMAIN-SUFFIX,atdmt.com - - DOMAIN-SUFFIX,athena.wan.sogou.com - - DOMAIN-SUFFIX,atiws.aipai.com - - DOMAIN-SUFFIX,atm.punchbox.org - - DOMAIN-SUFFIX,atm.sina.com - - DOMAIN-SUFFIX,atm.yoyi.com.cn - - DOMAIN-SUFFIX,atomicblast.lol - - DOMAIN-SUFFIX,atplay.cn - - DOMAIN-SUFFIX,att.stargame.com - - DOMAIN-SUFFIX,attach.s8bbs.com - - DOMAIN-SUFFIX,au.youmi.net - - DOMAIN-SUFFIX,audience.network - - DOMAIN-SUFFIX,authedmine.com - - DOMAIN-SUFFIX,avn.innity.com - - DOMAIN-SUFFIX,avpa.dzone.com - - DOMAIN-SUFFIX,avualrhg9p.bid - - DOMAIN-SUFFIX,aw.kejet.net - - DOMAIN-SUFFIX,award.sitekeuring.net - - DOMAIN-SUFFIX,awempire.com - - DOMAIN-SUFFIX,awkjs.com - - DOMAIN-SUFFIX,awyys.com - - DOMAIN-SUFFIX,ax.120ask.com - - DOMAIN-SUFFIX,ax.ggfeng.com - - DOMAIN-SUFFIX,axhxa.com - - DOMAIN-SUFFIX,axiba66.com - - DOMAIN-SUFFIX,axkxy.com - - DOMAIN-SUFFIX,ayabreya.xyz - - DOMAIN-SUFFIX,b.53yao.com - - DOMAIN-SUFFIX,b.77vcd.com - - DOMAIN-SUFFIX,b.9dreams.net - - DOMAIN-SUFFIX,b.ads1.msn.com - - DOMAIN-SUFFIX,b.aowugame.com - - DOMAIN-SUFFIX,b.babylon.com - - DOMAIN-SUFFIX,b.baiy.net - - DOMAIN-SUFFIX,b.bst.126.net - - DOMAIN-SUFFIX,b.clkservice.youdao.com - - DOMAIN-SUFFIX,b.code.tanwanyx.com - - DOMAIN-SUFFIX,b.cyone.com.cn - - DOMAIN-SUFFIX,b.epinv.com - - DOMAIN-SUFFIX,b.flyreading.cn - - DOMAIN-SUFFIX,b.gwylm.com - - DOMAIN-SUFFIX,b.kuangtuiguoo18888.com - - DOMAIN-SUFFIX,b.livesport.eu - - DOMAIN-SUFFIX,b.localpages.com - - DOMAIN-SUFFIX,b.nvrentao8.com - - DOMAIN-SUFFIX,b.qchannel03.cn - - DOMAIN-SUFFIX,b.rifub.com - - DOMAIN-SUFFIX,b.scorecardresearch.com - - DOMAIN-SUFFIX,b.thefile.me - - DOMAIN-SUFFIX,b.xcafe.com - - DOMAIN-SUFFIX,b0.qinsx.cn - - DOMAIN-SUFFIX,b1.51scw.net - - DOMAIN-SUFFIX,b1.91jucai.com - - DOMAIN-SUFFIX,b1.c1km4.com - - DOMAIN-SUFFIX,b17.8794.cn - - DOMAIN-SUFFIX,b17.shangc.net - - DOMAIN-SUFFIX,b17.xiumu.cn - - DOMAIN-SUFFIX,b1sync.zemanta.com - - DOMAIN-SUFFIX,b4xuj.zzhhts.com - - DOMAIN-SUFFIX,b7nkd.cn - - DOMAIN-SUFFIX,b92.putniktravel.com - - DOMAIN-SUFFIX,b9377h.com - - DOMAIN-SUFFIX,b99u.top - - DOMAIN-SUFFIX,ba.ccm2.net - - DOMAIN-SUFFIX,ba.fqzds.com - - DOMAIN-SUFFIX,ba.kioskea.net - - DOMAIN-SUFFIX,baby.yf898.com - - DOMAIN-SUFFIX,backup.lumion3d.com - - DOMAIN-SUFFIX,backup.lumion3d.net - - DOMAIN-SUFFIX,bad1.51gxqm.com - - DOMAIN-SUFFIX,badad.googleplex.com - - DOMAIN-SUFFIX,badao37.net - - DOMAIN-SUFFIX,bai3.gushiwen.org - - DOMAIN-SUFFIX,baiapk.com - - DOMAIN-SUFFIX,baichuan.baidu.com - - DOMAIN-SUFFIX,baidu.cybcyw.com - - DOMAIN-SUFFIX,baidu.dsp.tansuotv.com - - DOMAIN-SUFFIX,baidu.greenxf.cn - - DOMAIN-SUFFIX,baidu.jz5u.net - - DOMAIN-SUFFIX,baiduace.com - - DOMAIN-SUFFIX,baidujs.cnys.com - - DOMAIN-SUFFIX,baidulao.com - - DOMAIN-SUFFIX,baidustatic.com - - DOMAIN-SUFFIX,baidut.github.io - - DOMAIN-SUFFIX,baidutv.baidu.com - - DOMAIN-SUFFIX,baidu-union-js.xiachufang.com - - DOMAIN-SUFFIX,baidu-union-pos.xiachufang.com - - DOMAIN-SUFFIX,baiduyubaidu.com - - DOMAIN-SUFFIX,baiduzhidahao.cc - - DOMAIN-SUFFIX,baifen.music.baidu.com - - DOMAIN-SUFFIX,baifendian.com - - DOMAIN-SUFFIX,baigm.com - - DOMAIN-SUFFIX,baiwanchuangyi.com - - DOMAIN-SUFFIX,bam.nr-data.net - - DOMAIN-SUFFIX,banlv.baidu.com - - DOMAIN-SUFFIX,banmamedia.com - - DOMAIN-SUFFIX,bannedbook.org - - DOMAIN-SUFFIX,banner.101xp.com - - DOMAIN-SUFFIX,banner.3ddownloads.com - - DOMAIN-SUFFIX,banner.automotiveworld.com - - DOMAIN-SUFFIX,banner.cooguo.com - - DOMAIN-SUFFIX,banner.europacasino.com - - DOMAIN-SUFFIX,banner.itweb.co.za - - DOMAIN-SUFFIX,banner.telefragged.com - - DOMAIN-SUFFIX,banner.titancasino.com - - DOMAIN-SUFFIX,banner1.pornhost.com - - DOMAIN-SUFFIX,banners.beevpn.com - - DOMAIN-SUFFIX,banners.beted.com - - DOMAIN-SUFFIX,banners.cams.com - - DOMAIN-SUFFIX,banners.clubworldgroup.com - - DOMAIN-SUFFIX,banners.expressindia.com - - DOMAIN-SUFFIX,banners.itweb.co.za - - DOMAIN-SUFFIX,banners.playocio.com - - DOMAIN-SUFFIX,bannershotlink.perfectgonzo.com - - DOMAIN-SUFFIX,baoyatu.cc - - DOMAIN-SUFFIX,bar.baidu.com - - DOMAIN-SUFFIX,bartender.cc - - DOMAIN-SUFFIX,base.filedot.xyz - - DOMAIN-SUFFIX,bat.bing.com - - DOMAIN-SUFFIX,bax.xiawu.com - - DOMAIN-SUFFIX,baxf.m.shuhuangge.org - - DOMAIN-SUFFIX,bay.xiawu.com - - DOMAIN-SUFFIX,baycode.cn - - DOMAIN-SUFFIX,bayimob.com - - DOMAIN-SUFFIX,bazinga.mse.sogou.com - - DOMAIN-SUFFIX,bb.tuku.cc - - DOMAIN-SUFFIX,bb1429.com - - DOMAIN-SUFFIX,bbcc.yxlady.com - - DOMAIN-SUFFIX,bbcoe.cn - - DOMAIN-SUFFIX,bbdm.051661.com - - DOMAIN-SUFFIX,bbsimages.zkxf119.com - - DOMAIN-SUFFIX,bc.geocities.yahoo.co.jp - - DOMAIN-SUFFIX,bccyyc.com - - DOMAIN-SUFFIX,bcjjg.bugsevent.com - - DOMAIN-SUFFIX,bcjxf.bugsevent.com - - DOMAIN-SUFFIX,bd.ershenghuo.com - - DOMAIN-SUFFIX,bd.gow100.com - - DOMAIN-SUFFIX,bd.haomagujia.com - - DOMAIN-SUFFIX,bd.soarfi.cn - - DOMAIN-SUFFIX,bd.wayqq.cn - - DOMAIN-SUFFIX,bd01.daqiso.com - - DOMAIN-SUFFIX,bd1.365qilu.com - - DOMAIN-SUFFIX,bd1.52che.com - - DOMAIN-SUFFIX,bd1.fengdu100.com - - DOMAIN-SUFFIX,bd1.flfgw.cn - - DOMAIN-SUFFIX,bd1.home8080.cn - - DOMAIN-SUFFIX,bd1.jobui.com - - DOMAIN-SUFFIX,bd1.nipic.com - - DOMAIN-SUFFIX,bd1.nxing.cn - - DOMAIN-SUFFIX,bd1.pipaw.com - - DOMAIN-SUFFIX,bd1.szhk.com - - DOMAIN-SUFFIX,bd1.wowoqq.com - - DOMAIN-SUFFIX,bd1.xiangha.com - - DOMAIN-SUFFIX,bd2.52che.com - - DOMAIN-SUFFIX,bd2.flfgw.cn - - DOMAIN-SUFFIX,bd2.home8080.cn - - DOMAIN-SUFFIX,bd2.jobui.com - - DOMAIN-SUFFIX,bd2.nipic.com - - DOMAIN-SUFFIX,bd2.pipaw.com - - DOMAIN-SUFFIX,bd3.chuiyue.com - - DOMAIN-SUFFIX,bd3.jobui.com - - DOMAIN-SUFFIX,bd4.chuiyue.com - - DOMAIN-SUFFIX,bdad.hao224.com - - DOMAIN-SUFFIX,bdcode.gaosan.com - - DOMAIN-SUFFIX,bdcode.youke.com - - DOMAIN-SUFFIX,bdd.hainan.net - - DOMAIN-SUFFIX,bddm.999d.com - - DOMAIN-SUFFIX,bdfpb1.8684.com - - DOMAIN-SUFFIX,bdfpb2.8684.com - - DOMAIN-SUFFIX,bdjiaoben.wmxa.cn - - DOMAIN-SUFFIX,bdjs.120askimages.com - - DOMAIN-SUFFIX,bdjs.6237237.com - - DOMAIN-SUFFIX,bdjs.99.com.cn - - DOMAIN-SUFFIX,bdjs.999d.com - - DOMAIN-SUFFIX,bd-js.baixing.net - - DOMAIN-SUFFIX,bdjs.faxingzhan.com - - DOMAIN-SUFFIX,bdjs.itechwall.com - - DOMAIN-SUFFIX,bdjs.ixiumei.com - - DOMAIN-SUFFIX,bdjs.jb51.net - - DOMAIN-SUFFIX,bdjs.kaixin100.com - - DOMAIN-SUFFIX,bdjs.laonanren.com - - DOMAIN-SUFFIX,bdjs.ylq.com - - DOMAIN-SUFFIX,bdjs1.ixiumei.com - - DOMAIN-SUFFIX,bdlm.120askimages.com - - DOMAIN-SUFFIX,bdlm1.hc360.com - - DOMAIN-SUFFIX,bdlncs1.familydoctor.com.cn - - DOMAIN-SUFFIX,bdmjs.xywy.com - - DOMAIN-SUFFIX,bdmm.xywy.com - - DOMAIN-SUFFIX,bdplus.baidu.com - - DOMAIN-SUFFIX,bdpuaw.com - - DOMAIN-SUFFIX,bd-s.baixing.net - - DOMAIN-SUFFIX,bds.hainan.net - - DOMAIN-SUFFIX,bds.soarfi.cn - - DOMAIN-SUFFIX,bdtongfei.cn - - DOMAIN-SUFFIX,bduserlog.eastmoney.com - - DOMAIN-SUFFIX,beacon.gtimg.com - - DOMAIN-SUFFIX,beacon.krxd.net - - DOMAIN-SUFFIX,beacon.sina.com.cn - - DOMAIN-SUFFIX,beacon.tingyun.com - - DOMAIN-SUFFIX,beacon-us-sjc1.rubiconproject.com - - DOMAIN-SUFFIX,beap.adss.yahoo.com - - DOMAIN-SUFFIX,beap-bc.yahoo.com - - DOMAIN-SUFFIX,bebelait.com - - DOMAIN-SUFFIX,becode.qiushibaike.com - - DOMAIN-SUFFIX,beeho.site - - DOMAIN-SUFFIX,beerto.cn - - DOMAIN-SUFFIX,beha.ksmobile.com - - DOMAIN-SUFFIX,behe.com - - DOMAIN-SUFFIX,beilamusi.com - - DOMAIN-SUFFIX,beintoo.com - - DOMAIN-SUFFIX,benshiw.net - - DOMAIN-SUFFIX,bepolite.eu - - DOMAIN-SUFFIX,bes-progfree.com - - DOMAIN-SUFFIX,bet36500050.com - - DOMAIN-SUFFIX,beta.vpon.com - - DOMAIN-SUFFIX,betsonsport.ru - - DOMAIN-SUFFIX,betterzip.net - - DOMAIN-SUFFIX,bewaycare.com - - DOMAIN-SUFFIX,beyondcompare.cc - - DOMAIN-SUFFIX,bfdcdn.com - - DOMAIN-SUFFIX,bglog.bitauto.com - - DOMAIN-SUFFIX,bgrndi.com - - DOMAIN-SUFFIX,bh.contextweb.com - - DOMAIN-SUFFIX,bhjac.azvub.cn - - DOMAIN-SUFFIX,bianxianmao.com - - DOMAIN-SUFFIX,biddingos.com - - DOMAIN-SUFFIX,biddingx.com - - DOMAIN-SUFFIX,bidvertiser.com - - DOMAIN-SUFFIX,bigbos.top - - DOMAIN-SUFFIX,bigboy.eurogamer.net - - DOMAIN-SUFFIX,billionfocus.com - - DOMAIN-SUFFIX,binaryage-leechgate.herokuapp.com - - DOMAIN-SUFFIX,bingdianhuanyuan.cn - - DOMAIN-SUFFIX,bingyinq.com - - DOMAIN-SUFFIX,biq.keefung-zs.com - - DOMAIN-SUFFIX,bite.theta.sogoucdn.com - - DOMAIN-SUFFIX,bitsumactivationserver.com - - DOMAIN-SUFFIX,bivitr.com - - DOMAIN-SUFFIX,bixia.fymm.cn - - DOMAIN-SUFFIX,biyibia.com - - DOMAIN-SUFFIX,biz.gexing.com - - DOMAIN-SUFFIX,biz.live.xunlei.com - - DOMAIN-SUFFIX,biz.vpon.com - - DOMAIN-SUFFIX,biz.weibo.com - - DOMAIN-SUFFIX,biz37.net - - DOMAIN-SUFFIX,bizanti.youwatch.org - - DOMAIN-SUFFIX,bj.imp.voiceads.cn - - DOMAIN-SUFFIX,bj14.9669.cn - - DOMAIN-SUFFIX,bjcathay.com - - DOMAIN-SUFFIX,bjcu.u3.ucweb.com - - DOMAIN-SUFFIX,bjedpt.com - - DOMAIN-SUFFIX,bjs.9669.cn - - DOMAIN-SUFFIX,bkdg.net - - DOMAIN-SUFFIX,bl.wavecdn.de - - DOMAIN-SUFFIX,bla.gtimg.com - - DOMAIN-SUFFIX,blaaaa12.googlecode.com - - DOMAIN-SUFFIX,blb.winasdaq.com - - DOMAIN-SUFFIX,bllbaby.cn - - DOMAIN-SUFFIX,blogad01.myweb.hinet.net - - DOMAIN-SUFFIX,blogad02.myweb.hinet.net - - DOMAIN-SUFFIX,bluekai.com - - DOMAIN-SUFFIX,bluhostedbanners.blucigs.com - - DOMAIN-SUFFIX,bmg.wnbfw.com - - DOMAIN-SUFFIX,bmp.ali213.net - - DOMAIN-SUFFIX,bmp1.ali213.net - - DOMAIN-SUFFIX,bmw2ep.paomifen.cn - - DOMAIN-SUFFIX,bnrs.ilm.ee - - DOMAIN-SUFFIX,boardx.huanqiu.com - - DOMAIN-SUFFIX,bob.crazyshit.com - - DOMAIN-SUFFIX,bobo.163.com - - DOMAIN-SUFFIX,bolt.jebe.renren.com - - DOMAIN-SUFFIX,borsendental.com - - DOMAIN-SUFFIX,bosiwangzi.cn - - DOMAIN-SUFFIX,box.anchorfree.net - - DOMAIN-SUFFIX,boxercrazy.org - - DOMAIN-SUFFIX,boxshows.com - - DOMAIN-SUFFIX,boyxu.cn - - DOMAIN-SUFFIX,bp.mobad.ijinshan.com - - DOMAIN-SUFFIX,br.blackfling.com - - DOMAIN-SUFFIX,br.fling.com - - DOMAIN-SUFFIX,br.realitykings.com - - DOMAIN-SUFFIX,brakefluid.website - - DOMAIN-SUFFIX,brand.sogou.com - - DOMAIN-SUFFIX,brandshow.58.com - - DOMAIN-SUFFIX,brcache.madthumbs.com - - DOMAIN-SUFFIX,breeze.olclient.baofeng.com - - DOMAIN-SUFFIX,breezily168.com - - DOMAIN-SUFFIX,brizads.com - - DOMAIN-SUFFIX,bro.flyme.cn - - DOMAIN-SUFFIX,bryonypie.com - - DOMAIN-SUFFIX,bs.5442.com - - DOMAIN-SUFFIX,bs.serving-sys.com - - DOMAIN-SUFFIX,bs14.9669.cn - - DOMAIN-SUFFIX,bsch.serving-sys.com - - DOMAIN-SUFFIX,bsdev.cn - - DOMAIN-SUFFIX,bshare.cn - - DOMAIN-SUFFIX,bshare.optimix.asia - - DOMAIN-SUFFIX,bsiet.husky.sogou.com - - DOMAIN-SUFFIX,bss.pandora.xiaomi.com - - DOMAIN-SUFFIX,bstatic.1kejian.com - - DOMAIN-SUFFIX,bstatic.diyifanwen.com - - DOMAIN-SUFFIX,bt.xitongmonitor.com - - DOMAIN-SUFFIX,bt641499.gotoip4.com - - DOMAIN-SUFFIX,bthergyuan.com - - DOMAIN-SUFFIX,btlaunch.baidu.com - - DOMAIN-SUFFIX,btn.onlylady.com - - DOMAIN-SUFFIX,btn.pchome.net - - DOMAIN-SUFFIX,btr.domywife.com - - DOMAIN-SUFFIX,bttrack.com - - DOMAIN-SUFFIX,btyou.com - - DOMAIN-SUFFIX,bu01.zybang.com - - DOMAIN-SUFFIX,bu02.zybang.com - - DOMAIN-SUFFIX,bu1.duba.com - - DOMAIN-SUFFIX,bu2.duba.com - - DOMAIN-SUFFIX,bugtags.com - - DOMAIN-SUFFIX,business.92wy.com - - DOMAIN-SUFFIX,business.inveno.com - - DOMAIN-SUFFIX,buyimg.bianxianmao.com - - DOMAIN-SUFFIX,buysellads.com - - DOMAIN-SUFFIX,buyu8001.com - - DOMAIN-SUFFIX,bwp.theinsider.com.com - - DOMAIN-SUFFIX,bx.optimix.asia - - DOMAIN-SUFFIX,bx01.optimix.asia - - DOMAIN-SUFFIX,bxgmb.com - - DOMAIN-SUFFIX,bxjpl.cn - - DOMAIN-SUFFIX,by.dm5.com - - DOMAIN-SUFFIX,by.mbai.cn - - DOMAIN-SUFFIX,by.tel.cdndm.com - - DOMAIN-SUFFIX,by8974.com - - DOMAIN-SUFFIX,bydonline.com - - DOMAIN-SUFFIX,bypbwm.cn - - DOMAIN-SUFFIX,c.0.0.0.0.cn - - DOMAIN-SUFFIX,c.28487.net - - DOMAIN-SUFFIX,c.35kds.com - - DOMAIN-SUFFIX,c.365yigou.cn - - DOMAIN-SUFFIX,c.45io.com - - DOMAIN-SUFFIX,c.51y5.net - - DOMAIN-SUFFIX,c.adbxb.cn - - DOMAIN-SUFFIX,c.anmeilai.net - - DOMAIN-SUFFIX,c.autohome.com.cn - - DOMAIN-SUFFIX,c.baidu.com - - DOMAIN-SUFFIX,c.betrad.com - - DOMAIN-SUFFIX,c.bigmir.net - - DOMAIN-SUFFIX,c.bing.com - - DOMAIN-SUFFIX,c.bxb.oupeng.com - - DOMAIN-SUFFIX,c.codeonclick.com - - DOMAIN-SUFFIX,c.cyhx98.com - - DOMAIN-SUFFIX,c.cyto-biotherapy.com - - DOMAIN-SUFFIX,c.danangmo.cn - - DOMAIN-SUFFIX,c.data.mob.com - - DOMAIN-SUFFIX,c.dokrmob.com - - DOMAIN-SUFFIX,c.dzytjqcc.com - - DOMAIN-SUFFIX,c.effectivemeasure.net - - DOMAIN-SUFFIX,c.f1zd.com - - DOMAIN-SUFFIX,c.gj.qq.com - - DOMAIN-SUFFIX,c.guangtui1999.com - - DOMAIN-SUFFIX,c.gzsanxiaomingshi.cn - - DOMAIN-SUFFIX,c.idasui.cn - - DOMAIN-SUFFIX,c.iogous.com - - DOMAIN-SUFFIX,c.k429fma.com - - DOMAIN-SUFFIX,c.kbf365.cn - - DOMAIN-SUFFIX,c.kl6636.net - - DOMAIN-SUFFIX,c.kuwo.cn - - DOMAIN-SUFFIX,c.lianwangtech.com - - DOMAIN-SUFFIX,c.live.com - - DOMAIN-SUFFIX,c.lucktui.com - - DOMAIN-SUFFIX,c.metrigo.com - - DOMAIN-SUFFIX,c.mightiger.net - - DOMAIN-SUFFIX,c.minisplat.cn - - DOMAIN-SUFFIX,c.mkmp365.com - - DOMAIN-SUFFIX,c.mnjkw.cn - - DOMAIN-SUFFIX,c.mobishu.com - - DOMAIN-SUFFIX,c.msn.com - - DOMAIN-SUFFIX,c.msn.com.cn - - DOMAIN-SUFFIX,c.netu.tv - - DOMAIN-SUFFIX,c.ningbojipiao.com - - DOMAIN-SUFFIX,c.ns8d.com - - DOMAIN-SUFFIX,c.okmgy.cn - - DOMAIN-SUFFIX,c.panqis.cn - - DOMAIN-SUFFIX,c.panqishu.com - - DOMAIN-SUFFIX,c.piliangzhuce.cn - - DOMAIN-SUFFIX,c.ptffw.net - - DOMAIN-SUFFIX,c.queene.cn - - DOMAIN-SUFFIX,c.rexuebi.com - - DOMAIN-SUFFIX,c.rscxwmj.cn - - DOMAIN-SUFFIX,c.shunlige.com - - DOMAIN-SUFFIX,c.silvinst.com - - DOMAIN-SUFFIX,c.sss1989.com - - DOMAIN-SUFFIX,c.sssgao999.com - - DOMAIN-SUFFIX,c.start280.com - - DOMAIN-SUFFIX,c.statcounter.com - - DOMAIN-SUFFIX,c.statstat888.com - - DOMAIN-SUFFIX,c.sy123888.com - - DOMAIN-SUFFIX,c.t98u8f.com - - DOMAIN-SUFFIX,c.tctyb.cn - - DOMAIN-SUFFIX,c.v4dwkcv.com - - DOMAIN-SUFFIX,c.vip97.net - - DOMAIN-SUFFIX,c.wechat.jx.cn - - DOMAIN-SUFFIX,c.wkanx.com - - DOMAIN-SUFFIX,c.wrating.com - - DOMAIN-SUFFIX,c.xianguonongchang.org - - DOMAIN-SUFFIX,c.xznykf.org - - DOMAIN-SUFFIX,c.ylist.cn - - DOMAIN-SUFFIX,c.ynlysg.com - - DOMAIN-SUFFIX,c.youdao.com - - DOMAIN-SUFFIX,c.zgnm.cc - - DOMAIN-SUFFIX,c.zlongad.com - - DOMAIN-SUFFIX,c.zmjuan.org - - DOMAIN-SUFFIX,c.zxyywdj.org - - DOMAIN-SUFFIX,c0.ifengimg.com - - DOMAIN-SUFFIX,c03.optimix.asia - - DOMAIN-SUFFIX,c0563.com - - DOMAIN-SUFFIX,c0594.com - - DOMAIN-SUFFIX,c0i8h8ac7e.bid - - DOMAIN-SUFFIX,c1.4qx.net - - DOMAIN-SUFFIX,c1.668559.com - - DOMAIN-SUFFIX,c1.ifengimg.com - - DOMAIN-SUFFIX,c1.keyrun.cn - - DOMAIN-SUFFIX,c1.lianwangtech.com - - DOMAIN-SUFFIX,c1.minisplat.cn - - DOMAIN-SUFFIX,c1.popads.net - - DOMAIN-SUFFIX,c1.statcounter.com - - DOMAIN-SUFFIX,c1.ulink.cc - - DOMAIN-SUFFIX,c1.wkanx.com - - DOMAIN-SUFFIX,c1.xcy8.com - - DOMAIN-SUFFIX,c16cp358.com - - DOMAIN-SUFFIX,c2.58toto.net - - DOMAIN-SUFFIX,c2.popads.net - - DOMAIN-SUFFIX,c2.statcounter.com - - DOMAIN-SUFFIX,c3.gostats.cn - - DOMAIN-SUFFIX,c3.moogos.com - - DOMAIN-SUFFIX,c6.bjdianyue.com - - DOMAIN-SUFFIX,c6.lnymd.com - - DOMAIN-SUFFIX,c77777777.com - - DOMAIN-SUFFIX,c8.wangdq.com - - DOMAIN-SUFFIX,c8b.jcdb88.com - - DOMAIN-SUFFIX,ca.5173car.com - - DOMAIN-SUFFIX,ca.w8.com.cn - - DOMAIN-SUFFIX,caamei.com - - DOMAIN-SUFFIX,cacaca.0571yy.com - - DOMAIN-SUFFIX,cacaca.sp96878.com - - DOMAIN-SUFFIX,cacafly.net - - DOMAIN-SUFFIX,cache.betweendigital.com - - DOMAIN-SUFFIX,cache.soloth.com - - DOMAIN-SUFFIX,cache.xw126.com - - DOMAIN-SUFFIX,cachead.com - - DOMAIN-SUFFIX,cachenotice.cp11.ott.cibntv.net - - DOMAIN-SUFFIX,cachesit.com - - DOMAIN-SUFFIX,cache-ssl.celtra.com - - DOMAIN-SUFFIX,cad.chosun.com - - DOMAIN-SUFFIX,c-adash.m.taobao.com - - DOMAIN-SUFFIX,cadvv.heraldm.com - - DOMAIN-SUFFIX,cadvv.koreaherald.com - - DOMAIN-SUFFIX,caiyifz.com - - DOMAIN-SUFFIX,cal.meizu.com - - DOMAIN-SUFFIX,caliyuna.cn - - DOMAIN-SUFFIX,calopenupdate.comm.miui.com - - DOMAIN-SUFFIX,cams.pornrabbit.com - - DOMAIN-SUFFIX,cangnews.com - - DOMAIN-SUFFIX,canvas.thenextweb.com - - DOMAIN-SUFFIX,caob5.info - - DOMAIN-SUFFIX,caolvch.com - - DOMAIN-SUFFIX,cap.cyberlink.com - - DOMAIN-SUFFIX,cap.touclick.com - - DOMAIN-SUFFIX,car.mobadme.jp - - DOMAIN-SUFFIX,carbonads.net - - DOMAIN-SUFFIX,cas.clickability.com - - DOMAIN-SUFFIX,cas.criteo.com - - DOMAIN-SUFFIX,casalemedia.com - - DOMAIN-SUFFIX,casee.cn - - DOMAIN-SUFFIX,cash.neweramediaworks.com - - DOMAIN-SUFFIX,cast.innity.com - - DOMAIN-SUFFIX,cast.ra.icast.cn - - DOMAIN-SUFFIX,cast-bid27-j.adtdp.com - - DOMAIN-SUFFIX,castplatform.com - - DOMAIN-SUFFIX,catalog.video.msn.com - - DOMAIN-SUFFIX,catch.gift - - DOMAIN-SUFFIX,cayanfang.com - - DOMAIN-SUFFIX,cb.baidu.com - - DOMAIN-SUFFIX,cb.h5.coffeedak.cn - - DOMAIN-SUFFIX,cbjs.baidu.com - - DOMAIN-SUFFIX,cbs.wondershare.com - - DOMAIN-SUFFIX,cc.0133hao.net - - DOMAIN-SUFFIX,cc.1515788.net - - DOMAIN-SUFFIX,cc.365yigou.cn - - DOMAIN-SUFFIX,cc.700ok.net - - DOMAIN-SUFFIX,cc.dace.hupu.com - - DOMAIN-SUFFIX,cc.idasui.cn - - DOMAIN-SUFFIX,cc.moquanad.com - - DOMAIN-SUFFIX,cc.piao.jianzhigg.com - - DOMAIN-SUFFIX,cc.st123.info - - DOMAIN-SUFFIX,cc.xtgreat.com - - DOMAIN-SUFFIX,cc.yac8.com - - DOMAIN-SUFFIX,cca.mob.com - - DOMAIN-SUFFIX,ccb.uncle-ad.com - - DOMAIN-SUFFIX,ccbaihehq.com - - DOMAIN-SUFFIX,cccrir.com - - DOMAIN-SUFFIX,ccr.yxdown.com - - DOMAIN-SUFFIX,cctyly.com - - DOMAIN-SUFFIX,cd.bendibao.com - - DOMAIN-SUFFIX,cdgxq.com - - DOMAIN-SUFFIX,cdhoc.piyaji.cn - - DOMAIN-SUFFIX,cdn.0i-i0.com - - DOMAIN-SUFFIX,cdn.5bong.com - - DOMAIN-SUFFIX,cdn.adsk2.co - - DOMAIN-SUFFIX,cdn.adstract.com - - DOMAIN-SUFFIX,cdn.aegins.com - - DOMAIN-SUFFIX,cdn.aiclicash.com - - DOMAIN-SUFFIX,cdn.app.kachapt.cn - - DOMAIN-SUFFIX,cdn.app.liuxingyul.cn - - DOMAIN-SUFFIX,cdn.at.atwola.com - - DOMAIN-SUFFIX,cdn.atwola.com - - DOMAIN-SUFFIX,cdn.cooguo.com - - DOMAIN-SUFFIX,cdn.districtm.io - - DOMAIN-SUFFIX,cdn.dragonstatic.com - - DOMAIN-SUFFIX,cdn.dsp.com - - DOMAIN-SUFFIX,cdn.earnify.com - - DOMAIN-SUFFIX,cdn.fastclick.net - - DOMAIN-SUFFIX,cdn.hivps.xyz - - DOMAIN-SUFFIX,cdn.hyperpromote.com - - DOMAIN-SUFFIX,cdn.iclicash.com - - DOMAIN-SUFFIX,cdn.img.kachapt.cn - - DOMAIN-SUFFIX,cdn.img.liuxingyul.cn - - DOMAIN-SUFFIX,cdn.innity.net - - DOMAIN-SUFFIX,cdn.jesgoo.com - - DOMAIN-SUFFIX,cdn.jiuzhilan.com - - DOMAIN-SUFFIX,cdn.jllstudio.com - - DOMAIN-SUFFIX,cdn.komentary.aol.com - - DOMAIN-SUFFIX,cdn.krxd.net - - DOMAIN-SUFFIX,cdn.lu.sogoucdn.com - - DOMAIN-SUFFIX,cdn.marketgid.com - - DOMAIN-SUFFIX,cdn.mdotm.com - - DOMAIN-SUFFIX,cdn.media.innity.net - - DOMAIN-SUFFIX,cdn.millennialmedia.com - - DOMAIN-SUFFIX,cdn.mingmingtehui.com - - DOMAIN-SUFFIX,cdn.moji.com - - DOMAIN-SUFFIX,cdn.moji002.com - - DOMAIN-SUFFIX,cdn.moogos.com - - DOMAIN-SUFFIX,cdn.ndapp.com - - DOMAIN-SUFFIX,cdn.newapi.com - - DOMAIN-SUFFIX,cdn.optaim.com - - DOMAIN-SUFFIX,cdn.outfit7.com - - DOMAIN-SUFFIX,cdn.popcash.net - - DOMAIN-SUFFIX,cdn.popmyads.com - - DOMAIN-SUFFIX,cdn.puata.info - - DOMAIN-SUFFIX,cdn.scdng.com - - DOMAIN-SUFFIX,cdn.sp.rizhao9.com - - DOMAIN-SUFFIX,cdn.tianmidian.com - - DOMAIN-SUFFIX,cdn.tinglian.com - - DOMAIN-SUFFIX,cdn.vamaker.com - - DOMAIN-SUFFIX,cdn.viglink.com - - DOMAIN-SUFFIX,cdn.xianliao.me - - DOMAIN-SUFFIX,cdn.zampda.net - - DOMAIN-SUFFIX,cdn0.mobmore.com - - DOMAIN-SUFFIX,cdn1.lbesec.com - - DOMAIN-SUFFIX,cdn1.res.nx5.com - - DOMAIN-SUFFIX,cdn1.res.uzham.com - - DOMAIN-SUFFIX,cdn1.srv.revdepo.com - - DOMAIN-SUFFIX,cdn2.moji002.com - - DOMAIN-SUFFIX,cdnads.com - - DOMAIN-SUFFIX,cdn-ads.oss-cn-shanghai.aliyuncs.com - - DOMAIN-SUFFIX,cdnas.hyperpromote.com - - DOMAIN-SUFFIX,cdn-gcs.outfit7.com - - DOMAIN-SUFFIX,cdnimg.liehu.ijinshan.com - - DOMAIN-SUFFIX,cdnis.hyperpromote.com - - DOMAIN-SUFFIX,cdnmaster.com - - DOMAIN-SUFFIX,cdnny.com - - DOMAIN-SUFFIX,cdnpa.hyperpromote.com - - DOMAIN-SUFFIX,cdn-rtb.sape.ru - - DOMAIN-SUFFIX,cdn-settings.segment.com - - DOMAIN-SUFFIX,cdntest.a8tiyu.com - - DOMAIN-SUFFIX,cds.51y5.net - - DOMAIN-SUFFIX,cdyqc.com - - DOMAIN-SUFFIX,ced.sascdn.com - - DOMAIN-SUFFIX,cee1.iteye.com - - DOMAIN-SUFFIX,cee2.iteye.com - - DOMAIN-SUFFIX,cerebral.typn.com - - DOMAIN-SUFFIX,cfdanet.com - - DOMAIN-SUFFIX,cferw.com - - DOMAIN-SUFFIX,cfg-md.gridsumdissector.com - - DOMAIN-SUFFIX,cfg-vd.gridsumdissector.com - - DOMAIN-SUFFIX,cgskqg.com - - DOMAIN-SUFFIX,chadegongxiao.com - - DOMAIN-SUFFIX,chance-ad.com - - DOMAIN-SUFFIX,chanet.com.cn - - DOMAIN-SUFFIX,changan.bama555.com - - DOMAIN-SUFFIX,changhehengqi.com - - DOMAIN-SUFFIX,channel.fanxing.kugou.com - - DOMAIN-SUFFIX,channeladvisor.com - - DOMAIN-SUFFIX,chaojilamei.cn - - DOMAIN-SUFFIX,chaoliangyun.com - - DOMAIN-SUFFIX,chartbeat.com - - DOMAIN-SUFFIX,chartboost.com - - DOMAIN-SUFFIX,chebse.com - - DOMAIN-SUFFIX,chemdraw.com - - DOMAIN-SUFFIX,chemdraw.com.cn - - DOMAIN-SUFFIX,chengadx.com - - DOMAIN-SUFFIX,chenggao.cn - - DOMAIN-SUFFIX,chengzhao95511.com - - DOMAIN-SUFFIX,chenwen7788.com - - DOMAIN-SUFFIX,chicken18.com - - DOMAIN-SUFFIX,chidir.com - - DOMAIN-SUFFIX,chinacsky.com - - DOMAIN-SUFFIX,chinaheh.com - - DOMAIN-SUFFIX,chinauma.net - - DOMAIN-SUFFIX,chinaweichu.net - - DOMAIN-SUFFIX,chjxzk.1555110.cn - - DOMAIN-SUFFIX,chmae.com - - DOMAIN-SUFFIX,chnhty.com - - DOMAIN-SUFFIX,chuantu.biz - - DOMAIN-SUFFIX,chushoushijian.cn - - DOMAIN-SUFFIX,ci.csefaazc.net - - DOMAIN-SUFFIX,ciajingman.com - - DOMAIN-SUFFIX,cilidaquan.pw - - DOMAIN-SUFFIX,cindy17club.com - - DOMAIN-SUFFIX,cip6.czpush.com - - DOMAIN-SUFFIX,cishantao.com - - DOMAIN-SUFFIX,ciyitan.com - - DOMAIN-SUFFIX,cj.qidian.com - - DOMAIN-SUFFIX,cjhq.baidu.com - - DOMAIN-SUFFIX,cjmakeding.com - - DOMAIN-SUFFIX,cjmkt.com - - DOMAIN-SUFFIX,cjmooter.xcache.kinxcdn.com - - DOMAIN-SUFFIX,cjroq.bealge.sogou.com - - DOMAIN-SUFFIX,ck.houyi.baofeng.net - - DOMAIN-SUFFIX,ck.kejet.net - - DOMAIN-SUFFIX,cl.he9630.com - - DOMAIN-SUFFIX,cl.webterren.com - - DOMAIN-SUFFIX,cl.xzqxzs.com - - DOMAIN-SUFFIX,cl0.webterren.com - - DOMAIN-SUFFIX,cl2.webterren.com - - DOMAIN-SUFFIX,cl3.webterren.com - - DOMAIN-SUFFIX,cl4.webterren.com - - DOMAIN-SUFFIX,cl5.webterren.com - - DOMAIN-SUFFIX,clarity.abacast.com - - DOMAIN-SUFFIX,cleaner.baidu.com - - DOMAIN-SUFFIX,click1n.soufun.com - - DOMAIN-SUFFIX,clickadu.com - - DOMAIN-SUFFIX,click-cn.plista.com - - DOMAIN-SUFFIX,clicki.cn - - DOMAIN-SUFFIX,clicklog.moviebox.baofeng.net - - DOMAIN-SUFFIX,clickm.fang.com - - DOMAIN-SUFFIX,clickn.fang.com - - DOMAIN-SUFFIX,clicks.beap.bc.yahoo.com - - DOMAIN-SUFFIX,clicks.superpages.com - - DOMAIN-SUFFIX,clickstrip.6wav.es - - DOMAIN-SUFFIX,clicktracks.com - - DOMAIN-SUFFIX,clickzs.com - - DOMAIN-SUFFIX,client.88tours.com - - DOMAIN-SUFFIX,client.sidesearch.lycos.com - - DOMAIN-SUFFIX,client.stats.yinyuetai.com - - DOMAIN-SUFFIX,client.tenddata.com - - DOMAIN-SUFFIX,client-api.ele.me - - DOMAIN-SUFFIX,client-dmp.suishenyun.cn - - DOMAIN-SUFFIX,cliushow.com - - DOMAIN-SUFFIX,clk.dxpmedia.com - - DOMAIN-SUFFIX,clk.gentags.net - - DOMAIN-SUFFIX,clk.madserving.com - - DOMAIN-SUFFIX,clk.optaim.com - - DOMAIN-SUFFIX,clk.pdb.madserving.com - - DOMAIN-SUFFIX,clk.taptica.com - - DOMAIN-SUFFIX,clk.uunt.com - - DOMAIN-SUFFIX,clkads.com - - DOMAIN-SUFFIX,clkrev.com - - DOMAIN-SUFFIX,clkservice.mail.youdao.com - - DOMAIN-SUFFIX,clkservice.union.youdao.com - - DOMAIN-SUFFIX,clkservice.youdao.com - - DOMAIN-SUFFIX,clkservice2.dict.youdao.com - - DOMAIN-SUFFIX,cloud.codenow.cn - - DOMAIN-SUFFIX,cloud.rovio.com - - DOMAIN-SUFFIX,cloud.zyiis.net - - DOMAIN-SUFFIX,cloudad.asia - - DOMAIN-SUFFIX,cloudcdn.yousee.com - - DOMAIN-SUFFIX,cloudmobi.net - - DOMAIN-SUFFIX,cm.adgrx.com - - DOMAIN-SUFFIX,cm.baidu.com - - DOMAIN-SUFFIX,cm.ctnsnet.com - - DOMAIN-SUFFIX,cm.eyereturn.com - - DOMAIN-SUFFIX,cm.mct01.com - - DOMAIN-SUFFIX,cm.netseer.com - - DOMAIN-SUFFIX,cm.p4p.cn.yahoo.com - - DOMAIN-SUFFIX,cm8.lycos.com - - DOMAIN-SUFFIX,cmarket.kejet.net - - DOMAIN-SUFFIX,cmaxisolation.com - - DOMAIN-SUFFIX,cmcdl.cmcm.com - - DOMAIN-SUFFIX,cmcore.com - - DOMAIN-SUFFIX,cmm.xmfish.com - - DOMAIN-SUFFIX,cmp288.com - - DOMAIN-SUFFIX,cmpp.gentags.net - - DOMAIN-SUFFIX,cms.an.m.liebao.cn - - DOMAIN-SUFFIX,cms.quantserve.com - - DOMAIN-SUFFIX,cmsapi.wifi8.com - - DOMAIN-SUFFIX,cmshow.gtimg.cn - - DOMAIN-SUFFIX,cmslayue.com - - DOMAIN-SUFFIX,cmx.autohome.com.cn - - DOMAIN-SUFFIX,cn.pub.vpon.com - - DOMAIN-SUFFIX,cn.tatami-solutions.com - - DOMAIN-SUFFIX,cnbole.net - - DOMAIN-SUFFIX,cncy8.com - - DOMAIN-SUFFIX,cndjs-1251973891.coshk.myqcloud.com - - DOMAIN-SUFFIX,cnetdirectintl.com - - DOMAIN-SUFFIX,cnetwidget.creativemark.co.uk - - DOMAIN-SUFFIX,cnfanglei.com - - DOMAIN-SUFFIX,cnhbxx.com - - DOMAIN-SUFFIX,cnkok.com - - DOMAIN-SUFFIX,cnn.dyn.cnn.com - - DOMAIN-SUFFIX,cnnic.cn - - DOMAIN-SUFFIX,cnnic.net - - DOMAIN-SUFFIX,cnnic.net.cn - - DOMAIN-SUFFIX,cnpinzhuo.com - - DOMAIN-SUFFIX,cnscdj.com - - DOMAIN-SUFFIX,cnsjx.net - - DOMAIN-SUFFIX,cnxad.com - - DOMAIN-SUFFIX,cnxad.net - - DOMAIN-SUFFIX,cnzhqs.com - - DOMAIN-SUFFIX,cnzz.cn - - DOMAIN-SUFFIX,cnzz.com - - DOMAIN-SUFFIX,co.dtech.baofeng.com - - DOMAIN-SUFFIX,cocounion.com - - DOMAIN-SUFFIX,cod.southmoney.com - - DOMAIN-SUFFIX,code.3shangyou.com - - DOMAIN-SUFFIX,code.fastclick.net - - DOMAIN-SUFFIX,code.hajuwang.cn - - DOMAIN-SUFFIX,code.hot-mob.com - - DOMAIN-SUFFIX,code.kaixinjiehun.com - - DOMAIN-SUFFIX,code.kejet.com - - DOMAIN-SUFFIX,code.laojiayoufang.com - - DOMAIN-SUFFIX,code.ttpaper.com - - DOMAIN-SUFFIX,code.wantaico.com - - DOMAIN-SUFFIX,code11.onetad.com - - DOMAIN-SUFFIX,code12.onetad.com - - DOMAIN-SUFFIX,code1f.m.shushu8.com - - DOMAIN-SUFFIX,code1fa.m.shushu8.com - - DOMAIN-SUFFIX,code222.com - - DOMAIN-SUFFIX,code668.com - - DOMAIN-SUFFIX,codenow.cn - - DOMAIN-SUFFIX,codesoftchina.com - - DOMAIN-SUFFIX,coinblind.com - - DOMAIN-SUFFIX,coinerra.com - - DOMAIN-SUFFIX,coin-have.com - - DOMAIN-SUFFIX,coinhive.com - - DOMAIN-SUFFIX,coin-hive.com - - DOMAIN-SUFFIX,coinhive-manager.com - - DOMAIN-SUFFIX,coin-hive-proxy-ybydcnjgkl.now.sh - - DOMAIN-SUFFIX,coinminerz.com - - DOMAIN-SUFFIX,coinnebula.com - - DOMAIN-SUFFIX,col.hztags.net - - DOMAIN-SUFFIX,col.pagechoice.net - - DOMAIN-SUFFIX,collector.githubapp.com - - DOMAIN-SUFFIX,collector.viki.io - - DOMAIN-SUFFIX,collector.wasu.cn - - DOMAIN-SUFFIX,combine.urbanairship.com - - DOMAIN-SUFFIX,com-eonsun-owl.oss-cn-hangzhou.aliyuncs.com - - DOMAIN-SUFFIX,com-eonsun-owl-user.oss-cn-hangzhou.aliyuncs.com - - DOMAIN-SUFFIX,comesgo.com - - DOMAIN-SUFFIX,comet.yahoo.com - - DOMAIN-SUFFIX,conf.funshion.com - - DOMAIN-SUFFIX,conf.vidown.cn - - DOMAIN-SUFFIX,conf.xiniuz.com - - DOMAIN-SUFFIX,config.baofeng.net - - DOMAIN-SUFFIX,config.cocounion.com - - DOMAIN-SUFFIX,config.ioam.de - - DOMAIN-SUFFIX,config.kuyun.com - - DOMAIN-SUFFIX,config.mobisage.cn - - DOMAIN-SUFFIX,config.push.sogou.com - - DOMAIN-SUFFIX,config.unityads.unity3d.com - - DOMAIN-SUFFIX,config2.mparticle.com - - DOMAIN-SUFFIX,connect.summit.co.uk - - DOMAIN-SUFFIX,content.livesportmedia.eu - - DOMAIN-SUFFIX,content.s8bbs.com - - DOMAIN-SUFFIX,content.streamplay.to - - DOMAIN-SUFFIX,contentabc.com - - DOMAIN-SUFFIX,contentrecommend-out.mobile.sina.cn - - DOMAIN-SUFFIX,conv.youdao.com - - DOMAIN-SUFFIX,conversion.pro.cn - - DOMAIN-SUFFIX,conviva.com - - DOMAIN-SUFFIX,cooguo.com - - DOMAIN-SUFFIX,cookiemapping.wrating.com - - DOMAIN-SUFFIX,coolguang.com - - DOMAIN-SUFFIX,coolnay.com - - DOMAIN-SUFFIX,cooolyi.cn - - DOMAIN-SUFFIX,cooolyi.com - - DOMAIN-SUFFIX,coop.pop.baofeng.com - - DOMAIN-SUFFIX,cootek-dialer-download.oss-cn-hangzhou.aliyuncs.com - - DOMAIN-SUFFIX,cootek-file.cdn.cootekservice.com - - DOMAIN-SUFFIX,cop.my - - DOMAIN-SUFFIX,coreldrawchina.com - - DOMAIN-SUFFIX,coremetrics.com - - DOMAIN-SUFFIX,corner.houyi.baofeng.net - - DOMAIN-SUFFIX,coro.benbaisteel.com - - DOMAIN-SUFFIX,corocksi.com - - DOMAIN-SUFFIX,corp.meitu.com - - DOMAIN-SUFFIX,corp.sohu.com - - DOMAIN-SUFFIX,cosoyoo.com - - DOMAIN-SUFFIX,count.cpm.cm.kankan.com - - DOMAIN-SUFFIX,count.knowsky.com - - DOMAIN-SUFFIX,count.mail.163.com - - DOMAIN-SUFFIX,count.pcpop.com - - DOMAIN-SUFFIX,count.video.sina.com.cn - - DOMAIN-SUFFIX,count.wk2.com - - DOMAIN-SUFFIX,count5.pconline.com.cn - - DOMAIN-SUFFIX,count6.pconline.com.cn - - DOMAIN-SUFFIX,counter.csdn.net - - DOMAIN-SUFFIX,counter.kingsoft.com - - DOMAIN-SUFFIX,counter.m1905.com - - DOMAIN-SUFFIX,counter.marketgid.com - - DOMAIN-SUFFIX,counter.sina.com.cn - - DOMAIN-SUFFIX,counter.yadro.ru - - DOMAIN-SUFFIX,counter.yesky.com - - DOMAIN-SUFFIX,countpvn.light.fang.com - - DOMAIN-SUFFIX,countubn.light.soufun.com - - DOMAIN-SUFFIX,couqm.com.cn - - DOMAIN-SUFFIX,cp.5jjx.net - - DOMAIN-SUFFIX,cp.ggyapp.com - - DOMAIN-SUFFIX,cp.greenxf.cn - - DOMAIN-SUFFIX,cp.gs307.com - - DOMAIN-SUFFIX,cp.jfcdns.com - - DOMAIN-SUFFIX,cp.jz5u.net - - DOMAIN-SUFFIX,cpc.sogou.com - - DOMAIN-SUFFIX,cpc.sohu.com - - DOMAIN-SUFFIX,cpcv.cc - - DOMAIN-SUFFIX,cpm.amateurcommunity.com - - DOMAIN-SUFFIX,cpm.amateurcommunity.de - - DOMAIN-SUFFIX,cpm.cm.sandai.net - - DOMAIN-SUFFIX,cpmchina.co - - DOMAIN-SUFFIX,cpms.cc - - DOMAIN-SUFFIX,cpro.9xu.com - - DOMAIN-SUFFIX,cpro.baidu.cn - - DOMAIN-SUFFIX,cpro.baidu.com - - DOMAIN-SUFFIX,cpro.fangtoo.com - - DOMAIN-SUFFIX,cpro.zhidao.baidu.com - - DOMAIN-SUFFIX,cpro.zol.com.cn - - DOMAIN-SUFFIX,cpro1.edushi.com - - DOMAIN-SUFFIX,cpro2.baidu.com - - DOMAIN-SUFFIX,cps.360buy.com - - DOMAIN-SUFFIX,cpu-admin.baidu.com - - DOMAIN-SUFFIX,cpv.channelray - - DOMAIN-SUFFIX,cpv.czpush.com - - DOMAIN-SUFFIX,cpv.ty229.com - - DOMAIN-SUFFIX,cpv6.com - - DOMAIN-SUFFIX,cpva.cc - - DOMAIN-SUFFIX,cpv-adv.ggytc.com - - DOMAIN-SUFFIX,cpx24.com - - DOMAIN-SUFFIX,cqfangduan.com - - DOMAIN-SUFFIX,cqftonline.com - - DOMAIN-SUFFIX,cqhnm.com - - DOMAIN-SUFFIX,cqsta.com - - DOMAIN-SUFFIX,cqyhd.com - - DOMAIN-SUFFIX,cr.m.liebao.cn - - DOMAIN-SUFFIX,crashapi.growingio.com - - DOMAIN-SUFFIX,crashes.mo.wps.cn - - DOMAIN-SUFFIX,crasheye.cn - - DOMAIN-SUFFIX,crashlytics.163.com - - DOMAIN-SUFFIX,crashlytics.com - - DOMAIN-SUFFIX,crdrjs.info - - DOMAIN-SUFFIX,cre.dp.sina.cn - - DOMAIN-SUFFIX,cre.mix.sina.com.cn - - DOMAIN-SUFFIX,cre99.com - - DOMAIN-SUFFIX,creatim.qtmojo.cn - - DOMAIN-SUFFIX,creative.1111cpc.com - - DOMAIN-SUFFIX,creative.jdkic.com - - DOMAIN-SUFFIX,creative.ltheanine.cn - - DOMAIN-SUFFIX,creatives.cliphunter.com - - DOMAIN-SUFFIX,creatives.ftchinese.com - - DOMAIN-SUFFIX,creatives.inmotionhosting.com - - DOMAIN-SUFFIX,creatives.livejasmin.com - - DOMAIN-SUFFIX,creatives.pichunter.com - - DOMAIN-SUFFIX,creatives.summitconnect.co.uk - - DOMAIN-SUFFIX,creatives1.ftimg.net - - DOMAIN-SUFFIX,cre-dp.sina.cn - - DOMAIN-SUFFIX,criteo.com - - DOMAIN-SUFFIX,criteo.net - - DOMAIN-SUFFIX,crl.microsoft.com - - DOMAIN-SUFFIX,crm-eve.b2b.alibaba-inc.com - - DOMAIN-SUFFIX,cr-nielsen.com - - DOMAIN-SUFFIX,crosschannel.com - - DOMAIN-SUFFIX,crossoverchina.com - - DOMAIN-SUFFIX,cr-p16.ladsp.com - - DOMAIN-SUFFIX,crs.baidu.com - - DOMAIN-SUFFIX,crwdcntrl.net - - DOMAIN-SUFFIX,cs.dqwjzm.com - - DOMAIN-SUFFIX,cs.twcczhu.com - - DOMAIN-SUFFIX,csad.cc - - DOMAIN-SUFFIX,csbew.com - - DOMAIN-SUFFIX,csi.gstatic.com - - DOMAIN-SUFFIX,csqiulong.com - - DOMAIN-SUFFIX,cstoa.com - - DOMAIN-SUFFIX,csxjys.com - - DOMAIN-SUFFIX,cszlks.com - - DOMAIN-SUFFIX,ct.210189.com - - DOMAIN-SUFFIX,ct.niu.xunlei.com - - DOMAIN-SUFFIX,cti.w55c.net - - DOMAIN-SUFFIX,ctrmi.com - - DOMAIN-SUFFIX,ctsywy.com - - DOMAIN-SUFFIX,cudaojia.com - - DOMAIN-SUFFIX,cupid.jebe.renren.com - - DOMAIN-SUFFIX,current.sina.com.cn - - DOMAIN-SUFFIX,customad.cnn.com - - DOMAIN-SUFFIX,customer-security.online - - DOMAIN-SUFFIX,cut.qumi.com - - DOMAIN-SUFFIX,cvda.17173.com - - DOMAIN-SUFFIX,cvt.mydas.mobi - - DOMAIN-SUFFIX,cwpush.com - - DOMAIN-SUFFIX,cws-cctv.conviva.com - - DOMAIN-SUFFIX,cy123.cc - - DOMAIN-SUFFIX,cyacc.com - - DOMAIN-SUFFIX,cyad.cc - - DOMAIN-SUFFIX,cyad1.cyworld.com - - DOMAIN-SUFFIX,cyad1.nate.com - - DOMAIN-SUFFIX,cyad123.com - - DOMAIN-SUFFIX,cycy.kxrxh.com - - DOMAIN-SUFFIX,cylinderlongcheng.com - - DOMAIN-SUFFIX,cyylove.com - - DOMAIN-SUFFIX,cz.ifeng0.com - - DOMAIN-SUFFIX,cz01016102.cg2017.com - - DOMAIN-SUFFIX,cz01016102.ms758.com - - DOMAIN-SUFFIX,czdqhyo1.net - - DOMAIN-SUFFIX,czf.cchfjz.com - - DOMAIN-SUFFIX,czjiuding.cn - - DOMAIN-SUFFIX,czpush.com - - DOMAIN-SUFFIX,czpwm.com - - DOMAIN-SUFFIX,czxiangyue.com - - DOMAIN-SUFFIX,d.107788.com - - DOMAIN-SUFFIX,d.1391.com - - DOMAIN-SUFFIX,d.39.net - - DOMAIN-SUFFIX,d.admx.baixing.com - - DOMAIN-SUFFIX,d.agkn.com - - DOMAIN-SUFFIX,d.annarbor.com - - DOMAIN-SUFFIX,d.applovin.com - - DOMAIN-SUFFIX,d.beigedi.com - - DOMAIN-SUFFIX,d.businessinsider.com - - DOMAIN-SUFFIX,d.clkservice.youdao.com - - DOMAIN-SUFFIX,d.danangmo.cn - - DOMAIN-SUFFIX,d.elong.cn - - DOMAIN-SUFFIX,d.gossipcenter.com - - DOMAIN-SUFFIX,d.kugou.com - - DOMAIN-SUFFIX,d.ligatus.com - - DOMAIN-SUFFIX,d.mingyihui.net - - DOMAIN-SUFFIX,d.rexuebi.com - - DOMAIN-SUFFIX,d.ruiwen.com - - DOMAIN-SUFFIX,d.thelocal.com - - DOMAIN-SUFFIX,d.tjgxzs.com - - DOMAIN-SUFFIX,d.tonghua5.com - - DOMAIN-SUFFIX,d.turn.com - - DOMAIN-SUFFIX,d.union.ijinshan.com - - DOMAIN-SUFFIX,d.xinshipu.com - - DOMAIN-SUFFIX,d.yjbys.com - - DOMAIN-SUFFIX,d.yoyi.com.cn - - DOMAIN-SUFFIX,d.yoyi.tv - - DOMAIN-SUFFIX,d0.sina.com.cn - - DOMAIN-SUFFIX,d0.sinaimg.cn - - DOMAIN-SUFFIX,d0.xcar.com.cn - - DOMAIN-SUFFIX,d00.sina.com.cn - - DOMAIN-SUFFIX,d1.showself.com - - DOMAIN-SUFFIX,d1.sina.com.cn - - DOMAIN-SUFFIX,d1.sinaimg.cn - - DOMAIN-SUFFIX,d1ad.com - - DOMAIN-SUFFIX,d1grtyyel8f1mh.cloudfront.net - - DOMAIN-SUFFIX,d1zgderxoe1a.cloudfront.net - - DOMAIN-SUFFIX,d2.sina.com.cn - - DOMAIN-SUFFIX,d2.sinaimg.cn - - DOMAIN-SUFFIX,d2.yiche.com - - DOMAIN-SUFFIX,d29qt51jeyi6xb.cloudfront.net - - DOMAIN-SUFFIX,d2qkpebv23oowx.cloudfront.net - - DOMAIN-SUFFIX,d3.sina.com.cn - - DOMAIN-SUFFIX,d3.sinaimg.cn - - DOMAIN-SUFFIX,d31qbv1cthcecs.cloudfront.net - - DOMAIN-SUFFIX,d36eyd5j1kt1m6.cloudfront.net - - DOMAIN-SUFFIX,d3f.houyi.baofeng.net - - DOMAIN-SUFFIX,d3g.qq.com - - DOMAIN-SUFFIX,d3v1lb83psg9di.cloudfront.net - - DOMAIN-SUFFIX,d4.sina.com.cn - - DOMAIN-SUFFIX,d5.sina.com.cn - - DOMAIN-SUFFIX,d520m.gzcl999.cn - - DOMAIN-SUFFIX,d5nxst8fruw4z.cloudfront.net - - DOMAIN-SUFFIX,d5p.de17a.com - - DOMAIN-SUFFIX,d6.sina.com.cn - - DOMAIN-SUFFIX,d6.sinaimg.cn - - DOMAIN-SUFFIX,d7.sina.com.cn - - DOMAIN-SUFFIX,d7.sinaimg.cn - - DOMAIN-SUFFIX,d77777777.com - - DOMAIN-SUFFIX,d8.sina.com.cn - - DOMAIN-SUFFIX,d8.sinaimg.cn - - DOMAIN-SUFFIX,d8.zedo.com - - DOMAIN-SUFFIX,d8360.com - - DOMAIN-SUFFIX,d8885.com - - DOMAIN-SUFFIX,d9.sina.com.cn - - DOMAIN-SUFFIX,daa.shuzilm.cn - - DOMAIN-SUFFIX,dacash.streamplay.to - - DOMAIN-SUFFIX,dadjia.com - - DOMAIN-SUFFIX,dads.new.digg.com - - DOMAIN-SUFFIX,dafahao.com - - DOMAIN-SUFFIX,dafahao.org - - DOMAIN-SUFFIX,dafapromo.com - - DOMAIN-SUFFIX,dahanedu.com - - DOMAIN-SUFFIX,dai.shuzilm.cn - - DOMAIN-SUFFIX,dailydeals.amarillo.com - - DOMAIN-SUFFIX,dailydeals.augustachronicle.com - - DOMAIN-SUFFIX,dailydeals.brainerddispatch.com - - DOMAIN-SUFFIX,dailydeals.lubbockonline.com - - DOMAIN-SUFFIX,dailydeals.onlineathens.com - - DOMAIN-SUFFIX,dailydeals.savannahnow.com - - DOMAIN-SUFFIX,dailylog.storm.baofeng.com - - DOMAIN-SUFFIX,dailyvideo.securejoin.com - - DOMAIN-SUFFIX,daima.23yy.com - - DOMAIN-SUFFIX,daima.chazidian.com - - DOMAIN-SUFFIX,daima.diaoben.net - - DOMAIN-SUFFIX,daima.dsxdn.com - - DOMAIN-SUFFIX,daima.huoche.net - - DOMAIN-SUFFIX,daima.ijq.tv - - DOMAIN-SUFFIX,daima.mubite.cn - - DOMAIN-SUFFIX,daima.youbian.com - - DOMAIN-SUFFIX,daima123.cc - - DOMAIN-SUFFIX,dairuqi.com - - DOMAIN-SUFFIX,daitdai.com - - DOMAIN-SUFFIX,dajean.com - - DOMAIN-SUFFIX,dajiyuan.com - - DOMAIN-SUFFIX,dajiyuan.org - - DOMAIN-SUFFIX,dalianhengtai.com - - DOMAIN-SUFFIX,dandan11.top - - DOMAIN-SUFFIX,dandan13.top - - DOMAIN-SUFFIX,dandan15.top - - DOMAIN-SUFFIX,danpinwu.com - - DOMAIN-SUFFIX,dante2007.com - - DOMAIN-SUFFIX,daohang.114so.cn - - DOMAIN-SUFFIX,daoyoudao.com - - DOMAIN-SUFFIX,dap.pagechoice.net - - DOMAIN-SUFFIX,dart.clearchannel.com - - DOMAIN-SUFFIX,dashet.com - - DOMAIN-SUFFIX,data.3975.com - - DOMAIN-SUFFIX,data.ad-score.com - - DOMAIN-SUFFIX,data.apn.co.nz - - DOMAIN-SUFFIX,data.danmu.baofeng.com - - DOMAIN-SUFFIX,data.doodlemobile.com - - DOMAIN-SUFFIX,data.gosquared.com - - DOMAIN-SUFFIX,data.mistat.xiaomi.com - - DOMAIN-SUFFIX,data.neuroxmedia.com - - DOMAIN-SUFFIX,data2.doodlemobile.com - - DOMAIN-SUFFIX,data2.gosquared.com - - DOMAIN-SUFFIX,databank.air.yoyi.com.cn - - DOMAIN-SUFFIX,databank.yoyi.com.cn - - DOMAIN-SUFFIX,datacapture.serving-sys.com - - DOMAIN-SUFFIX,datafastguru.info - - DOMAIN-SUFFIX,data-news.cdn.cootekservice.com - - DOMAIN-SUFFIX,data-pic.cdn.cootekservice.com - - DOMAIN-SUFFIX,datax.baidu.com - - DOMAIN-SUFFIX,datouniao.com - - DOMAIN-SUFFIX,dawwx.com - - DOMAIN-SUFFIX,day66.com - - DOMAIN-SUFFIX,dazhantai.com - - DOMAIN-SUFFIX,dazhonghua.cn - - DOMAIN-SUFFIX,db1.fuz.cc - - DOMAIN-SUFFIX,db2.fuz.cc - - DOMAIN-SUFFIX,dbam.dashbida.com - - DOMAIN-SUFFIX,dbncp.com - - DOMAIN-SUFFIX,dbregistration.cuteftp.com - - DOMAIN-SUFFIX,dbwmjj.com - - DOMAIN-SUFFIX,dc.cp21.ott.cibntv.net - - DOMAIN-SUFFIX,dc.csdn.net - - DOMAIN-SUFFIX,dc.liuliang100.com - - DOMAIN-SUFFIX,dc.meitustat.com - - DOMAIN-SUFFIX,dc.vmoters.com - - DOMAIN-SUFFIX,dc.xhct66.com - - DOMAIN-SUFFIX,dc2.csdn.net - - DOMAIN-SUFFIX,d-cache.microad-cn.com - - DOMAIN-SUFFIX,dcad.watersoul.com - - DOMAIN-SUFFIX,dcads.sina.com.cn - - DOMAIN-SUFFIX,dcapps.disney.go.com - - DOMAIN-SUFFIX,dcjs.cig.com.cn - - DOMAIN-SUFFIX,dcw.hdswgc.com - - DOMAIN-SUFFIX,dd.70yst.com - - DOMAIN-SUFFIX,dd.dante2007.com - - DOMAIN-SUFFIX,dd.iask.cn - - DOMAIN-SUFFIX,dd.iaskgo.com - - DOMAIN-SUFFIX,dd.mangofortune.net - - DOMAIN-SUFFIX,dd.wx16999.com - - DOMAIN-SUFFIX,ddanq.com - - DOMAIN-SUFFIX,ddapp.cn - - DOMAIN-SUFFIX,ddd.haodizhi666.com - - DOMAIN-SUFFIX,ddd.yuyouge.com - - DOMAIN-SUFFIX,ddg1277.com - - DOMAIN-SUFFIX,ddhtek.com - - DOMAIN-SUFFIX,ddkkrrla.m.qxs.la - - DOMAIN-SUFFIX,ddomm.com - - DOMAIN-SUFFIX,ddpxhq.cn - - DOMAIN-SUFFIX,ddrrccck.m.qxs.la - - DOMAIN-SUFFIX,de.as.cp61.ott.cibntv.net - - DOMAIN-SUFFIX,de.dzribao.com - - DOMAIN-SUFFIX,de.ioam.de - - DOMAIN-SUFFIX,de.pandora.xiaomi.com - - DOMAIN-SUFFIX,deals.ledgertranscript.com - - DOMAIN-SUFFIX,debugreport.mobiledissector.com - - DOMAIN-SUFFIX,dejing.laobanfa.com - - DOMAIN-SUFFIX,deletemer.online - - DOMAIN-SUFFIX,deliver.kuwo.cn - - DOMAIN-SUFFIX,delivery.maihehd.com - - DOMAIN-SUFFIX,delivery.playallvideos.com - - DOMAIN-SUFFIX,delivery.porn.com - - DOMAIN-SUFFIX,delivery.wasu.cn - - DOMAIN-SUFFIX,delivery-pc.wasu.cn - - DOMAIN-SUFFIX,demo.jointreport-switch.com - - DOMAIN-SUFFIX,desk.cmix.org - - DOMAIN-SUFFIX,detuns.com - - DOMAIN-SUFFIX,dev.tg.youxi.com - - DOMAIN-SUFFIX,devs.data.mob.com - - DOMAIN-SUFFIX,dezfu.com - - DOMAIN-SUFFIX,df3n43m.com - - DOMAIN-SUFFIX,df77.com - - DOMAIN-SUFFIX,dfad.dfdaily.com - - DOMAIN-SUFFIX,dfc1.benbaisteel.com - - DOMAIN-SUFFIX,dfp.suning.com - - DOMAIN-SUFFIX,dfx.shhuixiangwuliu.com - - DOMAIN-SUFFIX,dfx.vnnv777.cn - - DOMAIN-SUFFIX,dgfggy.com - - DOMAIN-SUFFIX,dgpzx.com - - DOMAIN-SUFFIX,dh.holaworld.cn - - DOMAIN-SUFFIX,dhxyzx.cn - - DOMAIN-SUFFIX,diag-vd.gridsumdissector.com - - DOMAIN-SUFFIX,diag-wd.gridsumdissector.com - - DOMAIN-SUFFIX,dialer.cdn.cootekservice.com - - DOMAIN-SUFFIX,dianjoy.com - - DOMAIN-SUFFIX,dianru.com - - DOMAIN-SUFFIX,diaojiaoji168.com - - DOMAIN-SUFFIX,diaopic.14bobo.com - - DOMAIN-SUFFIX,diediao.com - - DOMAIN-SUFFIX,difnxm.cn - - DOMAIN-SUFFIX,digdug.divxnetworks.com - - DOMAIN-SUFFIX,dimg1.sz.net.cn - - DOMAIN-SUFFIX,dingon.com.cn - - DOMAIN-SUFFIX,dip.pyangzi.com - - DOMAIN-SUFFIX,dip.szhyzkj.com - - DOMAIN-SUFFIX,dip.wl963.com - - DOMAIN-SUFFIX,dip.zgydjr.com - - DOMAIN-SUFFIX,dipan.com - - DOMAIN-SUFFIX,directrev.com - - DOMAIN-SUFFIX,dis.crieto.com - - DOMAIN-SUFFIX,dis.criteo.com - - DOMAIN-SUFFIX,dis.us.criteo.com - - DOMAIN-SUFFIX,discuz.gtimg.cn - - DOMAIN-SUFFIX,dispenser-rtb.sape.ru - - DOMAIN-SUFFIX,display.360totalsecurity.com - - DOMAIN-SUFFIX,display.ad.daum.net - - DOMAIN-SUFFIX,display.adhudong.com - - DOMAIN-SUFFIX,display.digitalriver.com - - DOMAIN-SUFFIX,display.superbay.net - - DOMAIN-SUFFIX,disqusads.com - - DOMAIN-SUFFIX,distf.kankan.com - - DOMAIN-SUFFIX,diyxjd.com - - DOMAIN-SUFFIX,djs.baomihua.com - - DOMAIN-SUFFIX,dkdlsj.com - - DOMAIN-SUFFIX,dkeyn.com - - DOMAIN-SUFFIX,dl.2345.com - - DOMAIN-SUFFIX,dl.360safe.com - - DOMAIN-SUFFIX,dl.9xu.com - - DOMAIN-SUFFIX,dl.client.baidu.com - - DOMAIN-SUFFIX,dl.cm.ksmobile.com - - DOMAIN-SUFFIX,dl.eduancm.com - - DOMAIN-SUFFIX,dl.img80.net - - DOMAIN-SUFFIX,dl.jianshunrui.com - - DOMAIN-SUFFIX,dl.kinbest.cn - - DOMAIN-SUFFIX,dl.kjava.sina.cn - - DOMAIN-SUFFIX,dl.mbsea.com - - DOMAIN-SUFFIX,dl.nx5.com - - DOMAIN-SUFFIX,dl.ops.baidu.com - - DOMAIN-SUFFIX,dl.sybspools.com - - DOMAIN-SUFFIX,dl.union.ijinshan.com - - DOMAIN-SUFFIX,dl.uu.cc - - DOMAIN-SUFFIX,dl.wan.sogoucdn.com - - DOMAIN-SUFFIX,dl.xzqxzs.com - - DOMAIN-SUFFIX,dl.youjia2016.com - - DOMAIN-SUFFIX,dl1sw.baidu.com - - DOMAIN-SUFFIX,dl2.bav.baidu.com - - DOMAIN-SUFFIX,dleke.com - - DOMAIN-SUFFIX,dlimg.lovfp.com - - DOMAIN-SUFFIX,dload.qd.qingting.fm - - DOMAIN-SUFFIX,dlpifu.com - - DOMAIN-SUFFIX,dlrijiaele.com - - DOMAIN-SUFFIX,dlsw.baidu.com - - DOMAIN-SUFFIX,dlsw.br.baidu.com - - DOMAIN-SUFFIX,dl-vip.bav.baidu.com - - DOMAIN-SUFFIX,dl-vip.pcfaster.baidu.co.th - - DOMAIN-SUFFIX,dlzjdesign.com - - DOMAIN-SUFFIX,dm.388g.cc - - DOMAIN-SUFFIX,dm.51okc.com - - DOMAIN-SUFFIX,dm.92to.com - - DOMAIN-SUFFIX,dm.aizhan.com - - DOMAIN-SUFFIX,dm.bytedance.com - - DOMAIN-SUFFIX,dm.chalook.net - - DOMAIN-SUFFIX,dm.fsyzcs.com - - DOMAIN-SUFFIX,dm.gbeik.com - - DOMAIN-SUFFIX,dm.jb51.net - - DOMAIN-SUFFIX,dm.jinshasi.cn - - DOMAIN-SUFFIX,dm.jsyst.cn - - DOMAIN-SUFFIX,dm.jy135.com - - DOMAIN-SUFFIX,dm.ppzuowen.com - - DOMAIN-SUFFIX,dm.pstatp.com - - DOMAIN-SUFFIX,dm.pw0.cn - - DOMAIN-SUFFIX,dm.riji.cn - - DOMAIN-SUFFIX,dm.sanwen.net - - DOMAIN-SUFFIX,dm.sanwen8.com - - DOMAIN-SUFFIX,dm.sb580.com - - DOMAIN-SUFFIX,dm.toutiao.com - - DOMAIN-SUFFIX,dm.ws8.org - - DOMAIN-SUFFIX,dm.yjbys.com - - DOMAIN-SUFFIX,dm1.tom61.com - - DOMAIN-SUFFIX,dm50.jkyd.net - - DOMAIN-SUFFIX,dm50.yxlady.com - - DOMAIN-SUFFIX,dmacore.kejet.com - - DOMAIN-SUFFIX,dmacore.kejet.net - - DOMAIN-SUFFIX,dmg.digitaltarget.ru - - DOMAIN-SUFFIX,dmp.kejet.net - - DOMAIN-SUFFIX,dmp.sina.cn - - DOMAIN-SUFFIX,dmpclick.deliver.ifeng.com - - DOMAIN-SUFFIX,dmrtb.com - - DOMAIN-SUFFIX,dmt.qcrx.cn - - DOMAIN-SUFFIX,dmtrck.com - - DOMAIN-SUFFIX,dn3.ixinwei.com - - DOMAIN-SUFFIX,dn7788.com - - DOMAIN-SUFFIX,dn-growing.qbox.me - - DOMAIN-SUFFIX,dnvus.com - - DOMAIN-SUFFIX,do.lymstsc.com - - DOMAIN-SUFFIX,do69ifsly4.me - - DOMAIN-SUFFIX,doc.go.sohu.com - - DOMAIN-SUFFIX,dol.deliver.ifeng.com - - DOMAIN-SUFFIX,dolphin.deliver.ifeng.com - - DOMAIN-SUFFIX,dolphin.ftimg.net - - DOMAIN-SUFFIX,dolphin4.ftimg.net - - DOMAIN-SUFFIX,domed.shenbimall.com - - DOMAIN-SUFFIX,do-not-tracker.org - - DOMAIN-SUFFIX,dontblockme.modaco.com - - DOMAIN-SUFFIX,dopa.com - - DOMAIN-SUFFIX,dot.eporner.com - - DOMAIN-SUFFIX,dot2.eporner.com - - DOMAIN-SUFFIX,dotmore.com.tw - - DOMAIN-SUFFIX,dou777.com - - DOMAIN-SUFFIX,doubleplay-conf-yql.media.yahoo.com - - DOMAIN-SUFFIX,doubleverify.com - - DOMAIN-SUFFIX,doudao.cn - - DOMAIN-SUFFIX,doudouguo.com - - DOMAIN-SUFFIX,dougou88.com - - DOMAIN-SUFFIX,doumob.com - - DOMAIN-SUFFIX,down.360safe.com - - DOMAIN-SUFFIX,down.91wangmeng.com - - DOMAIN-SUFFIX,down.bugeyu.com - - DOMAIN-SUFFIX,down.dashendown.com - - DOMAIN-SUFFIX,down.diannaodian.com - - DOMAIN-SUFFIX,down.laomaotao.net - - DOMAIN-SUFFIX,down.winads.cn - - DOMAIN-SUFFIX,down.winbaicai.com - - DOMAIN-SUFFIX,down.xiazaidc.com - - DOMAIN-SUFFIX,down.xiazaiyuan.net - - DOMAIN-SUFFIX,downlaod.xiaocen.com - - DOMAIN-SUFFIX,download.123cw.cn - - DOMAIN-SUFFIX,download.2345.com - - DOMAIN-SUFFIX,download.350.com - - DOMAIN-SUFFIX,download.bav.baidu.com - - DOMAIN-SUFFIX,download.coolguang.com - - DOMAIN-SUFFIX,download.fuyuncc.com - - DOMAIN-SUFFIX,download.mediaget.com - - DOMAIN-SUFFIX,download.qianka.com - - DOMAIN-SUFFIX,download.sd.baidu.com - - DOMAIN-SUFFIX,download.sj.qq.com - - DOMAIN-SUFFIX,download.zhushou.sogou.com - - DOMAIN-SUFFIX,download3.123cw.cn - - DOMAIN-SUFFIX,downloada.dewmobile.net - - DOMAIN-SUFFIX,downloadb.dewmobile.net - - DOMAIN-SUFFIX,downmobile.kugou.com - - DOMAIN-SUFFIX,dp.559.cc - - DOMAIN-SUFFIX,dpm.demdex.net - - DOMAIN-SUFFIX,dps.499.cn - - DOMAIN-SUFFIX,dps.shouji56.com - - DOMAIN-SUFFIX,dps.wtdtjs.com - - DOMAIN-SUFFIX,dpvc.39.net - - DOMAIN-SUFFIX,dpvc1.qqyy.com - - DOMAIN-SUFFIX,dpvc2.qqyy.com - - DOMAIN-SUFFIX,dpvchos.qqyy.com - - DOMAIN-SUFFIX,dpvcimg.qqyy.com - - DOMAIN-SUFFIX,dqq.lnfund.org.cn - - DOMAIN-SUFFIX,dqsft.com - - DOMAIN-SUFFIX,dr.holaworld.cn - - DOMAIN-SUFFIX,dragoncent.com - - DOMAIN-SUFFIX,drd.hauchi.com.tw - - DOMAIN-SUFFIX,drdj.m.gxwztv.com - - DOMAIN-SUFFIX,drdwy.com - - DOMAIN-SUFFIX,dreamfull.cn - - DOMAIN-SUFFIX,dressimage.img-cn-beijing.aliyuncs.com - - DOMAIN-SUFFIX,drlsf.com - - DOMAIN-SUFFIX,drm.cmgame.com - - DOMAIN-SUFFIX,drmcmm.baidu.com - - DOMAIN-SUFFIX,drsw.m.yuyouge.com - - DOMAIN-SUFFIX,drvmy.ats68.cn - - DOMAIN-SUFFIX,drxrc.com - - DOMAIN-SUFFIX,ds.jlbksy.com - - DOMAIN-SUFFIX,ds.serving-sys.com - - DOMAIN-SUFFIX,dsadas.hydp188.com - - DOMAIN-SUFFIX,dsaeerf.com - - DOMAIN-SUFFIX,dshrx.com - - DOMAIN-SUFFIX,dsjsee.dqgpb.com - - DOMAIN-SUFFIX,ds-ll.serving-sys.com - - DOMAIN-SUFFIX,dsp.adfarm1.adition.com - - DOMAIN-SUFFIX,dsp.com - - DOMAIN-SUFFIX,dsp.hypers.com.cn - - DOMAIN-SUFFIX,dsp.pro.cn - - DOMAIN-SUFFIX,dsp.send.microad-cn.com - - DOMAIN-SUFFIX,dsp.simba.taobao.com - - DOMAIN-SUFFIX,dsp.toutiao.com - - DOMAIN-SUFFIX,dsp.youdao.com - - DOMAIN-SUFFIX,ds-pc.admsger.com - - DOMAIN-SUFFIX,dsp-click.youdao.com - - DOMAIN-SUFFIX,dsp-impr.youdao.com - - DOMAIN-SUFFIX,dsp-impr2.youdao.com - - DOMAIN-SUFFIX,dspmnt.autohome.com.cn - - DOMAIN-SUFFIX,dspmy.ge95.com - - DOMAIN-SUFFIX,dspserver.ad.cmvideo.cn - - DOMAIN-SUFFIX,ds-pv.iqu-operation.com - - DOMAIN-SUFFIX,dsxdn.com - - DOMAIN-SUFFIX,dt.adsafeprotected.com - - DOMAIN-SUFFIX,d-track.send.microad-cn.com - - DOMAIN-SUFFIX,dtrk.slimcdn.com - - DOMAIN-SUFFIX,dts.akamai.startappexchange.com - - DOMAIN-SUFFIX,duanat.com - - DOMAIN-SUFFIX,duapp.com - - DOMAIN-SUFFIX,duapps.com - - DOMAIN-SUFFIX,dugbvb.com - - DOMAIN-SUFFIX,dugesheying.com - - DOMAIN-SUFFIX,duiwai.baidu.com - - DOMAIN-SUFFIX,dumedia.ru - - DOMAIN-SUFFIX,duoyidd.com - - DOMAIN-SUFFIX,dushimj.com - - DOMAIN-SUFFIX,duusuu.com - - DOMAIN-SUFFIX,duyihu.net - - DOMAIN-SUFFIX,dv8c1t.cn - - DOMAIN-SUFFIX,dvb.pandora.xiaomi.com - - DOMAIN-SUFFIX,dvr8.com - - DOMAIN-SUFFIX,dvs.china.com - - DOMAIN-SUFFIX,dvsend.china.com - - DOMAIN-SUFFIX,dvser.china.com - - DOMAIN-SUFFIX,dvser02.china.com - - DOMAIN-SUFFIX,dvx-android.0.0.0.0.cn - - DOMAIN-SUFFIX,dw.koudaibl.com - - DOMAIN-SUFFIX,dw.xcar.com.cn - - DOMAIN-SUFFIX,dw998.com - - DOMAIN-SUFFIX,dwa.okwan.cn - - DOMAIN-SUFFIX,dx1200.com - - DOMAIN-SUFFIX,dxp.baidu.com - - DOMAIN-SUFFIX,dxpmedia.com - - DOMAIN-SUFFIX,dxprla.m.qxs.la - - DOMAIN-SUFFIX,dxssiyi.com - - DOMAIN-SUFFIX,dyb.jdcbuy.com - - DOMAIN-SUFFIX,dydab.com - - DOMAIN-SUFFIX,dyn.tnaflix.com - - DOMAIN-SUFFIX,dynamic.aol.com - - DOMAIN-SUFFIX,dynamic.zol.com.cn - - DOMAIN-SUFFIX,dz2017.zdzxyplyt.com - - DOMAIN-SUFFIX,dzais.com - - DOMAIN-SUFFIX,dzisou.com - - DOMAIN-SUFFIX,dzjzg.com - - DOMAIN-SUFFIX,dzl.baidu.com - - DOMAIN-SUFFIX,dzz.wankeedu.com - - DOMAIN-SUFFIX,e.0.0.0.0.cn - - DOMAIN-SUFFIX,e.0.0.0.0.com.cn - - DOMAIN-SUFFIX,e.027blzs.com - - DOMAIN-SUFFIX,e.0531mnk.net - - DOMAIN-SUFFIX,e.1919388.net - - DOMAIN-SUFFIX,e.28487.net - - DOMAIN-SUFFIX,e.51xmgys.com - - DOMAIN-SUFFIX,e.91.com - - DOMAIN-SUFFIX,e.aa985.cn - - DOMAIN-SUFFIX,e.acaog.com - - DOMAIN-SUFFIX,e.acaox.com - - DOMAIN-SUFFIX,e.admin60.com - - DOMAIN-SUFFIX,e.afvfe.cn - - DOMAIN-SUFFIX,e.anmeilai.net - - DOMAIN-SUFFIX,e.apxyz.com - - DOMAIN-SUFFIX,e.baidu.com - - DOMAIN-SUFFIX,e.bapkt.com - - DOMAIN-SUFFIX,e.bbvjs.com - - DOMAIN-SUFFIX,e.bentengcn.com - - DOMAIN-SUFFIX,e.bokanedu.net - - DOMAIN-SUFFIX,e.bsnnk.com - - DOMAIN-SUFFIX,e.bvoer.com - - DOMAIN-SUFFIX,e.cbeif.com - - DOMAIN-SUFFIX,e.ccunf.com - - DOMAIN-SUFFIX,e.cdfzcz.com - - DOMAIN-SUFFIX,e.chfuw.com - - DOMAIN-SUFFIX,e.cjieh.com - - DOMAIN-SUFFIX,e.ckikq.com - - DOMAIN-SUFFIX,e.cn-3drp.com - - DOMAIN-SUFFIX,e.codlw.com - - DOMAIN-SUFFIX,e.coenr.com - - DOMAIN-SUFFIX,e.crashlytics.com - - DOMAIN-SUFFIX,e.cuomm.com - - DOMAIN-SUFFIX,e.czggcj.com - - DOMAIN-SUFFIX,e.daishuxy.com - - DOMAIN-SUFFIX,e.danrs.com - - DOMAIN-SUFFIX,e.deimm.com - - DOMAIN-SUFFIX,e.diogv.com - - DOMAIN-SUFFIX,e.diupp.com - - DOMAIN-SUFFIX,e.dnfeu.com - - DOMAIN-SUFFIX,e.dsjre.com - - DOMAIN-SUFFIX,e.dunmm.com - - DOMAIN-SUFFIX,e.dxmci.com - - DOMAIN-SUFFIX,e.dzairen.com - - DOMAIN-SUFFIX,e.e7001.com - - DOMAIN-SUFFIX,e.e70123.com - - DOMAIN-SUFFIX,e.ehxyz.com - - DOMAIN-SUFFIX,e.emgwq.com - - DOMAIN-SUFFIX,e.enjuk.com - - DOMAIN-SUFFIX,e.ennmt.com - - DOMAIN-SUFFIX,e.fbaix.com - - DOMAIN-SUFFIX,e.fbaot.com - - DOMAIN-SUFFIX,e.fimky.com - - DOMAIN-SUFFIX,e.fkkse.com - - DOMAIN-SUFFIX,e.fkogs.com - - DOMAIN-SUFFIX,e.focuscat.com - - DOMAIN-SUFFIX,e.fstaw.com - - DOMAIN-SUFFIX,e.fwjoi.com - - DOMAIN-SUFFIX,e.fzyda.com - - DOMAIN-SUFFIX,e.gbieg.com - - DOMAIN-SUFFIX,e.gglay.com - - DOMAIN-SUFFIX,e.gxjfh.com - - DOMAIN-SUFFIX,e.gxkyl.com - - DOMAIN-SUFFIX,e.harbinbaojia.net - - DOMAIN-SUFFIX,e.hellomingpian.com - - DOMAIN-SUFFIX,e.hgrqp.com - - DOMAIN-SUFFIX,e.hissq.com - - DOMAIN-SUFFIX,e.hjryl.com - - DOMAIN-SUFFIX,e.hk7799.net - - DOMAIN-SUFFIX,e.hkmqp.com - - DOMAIN-SUFFIX,e.hmhqp.com - - DOMAIN-SUFFIX,e.hogyp.com - - DOMAIN-SUFFIX,e.hpzyl.com - - DOMAIN-SUFFIX,e.htper.com - - DOMAIN-SUFFIX,e.huaas.com - - DOMAIN-SUFFIX,e.hunpp.com - - DOMAIN-SUFFIX,e.huoas.com - - DOMAIN-SUFFIX,e.hurnt.com - - DOMAIN-SUFFIX,e.hyzui.com - - DOMAIN-SUFFIX,e.icyrd.com - - DOMAIN-SUFFIX,e.iierq.com - - DOMAIN-SUFFIX,e.infvb.com - - DOMAIN-SUFFIX,e.irauz.com - - DOMAIN-SUFFIX,e.irkuj.com - - DOMAIN-SUFFIX,e.iruad.com - - DOMAIN-SUFFIX,e.ishowms.com - - DOMAIN-SUFFIX,e.jdaot.com - - DOMAIN-SUFFIX,e.jgkto.com - - DOMAIN-SUFFIX,e.jiaas.com - - DOMAIN-SUFFIX,e.jiirz.com - - DOMAIN-SUFFIX,e.jioeg.com - - DOMAIN-SUFFIX,e.jkert.com - - DOMAIN-SUFFIX,e.jlkja.com - - DOMAIN-SUFFIX,e.jltdbyq.com - - DOMAIN-SUFFIX,e.jnsdkjzs.com - - DOMAIN-SUFFIX,e.joyxv.com - - DOMAIN-SUFFIX,e.juyzr.com - - DOMAIN-SUFFIX,e.jwiyr.com - - DOMAIN-SUFFIX,e.jxxiangchu.com - - DOMAIN-SUFFIX,e.kcooy.com - - DOMAIN-SUFFIX,e.kewro.com - - DOMAIN-SUFFIX,e.khuoy.com - - DOMAIN-SUFFIX,e.kjfhe.com - - DOMAIN-SUFFIX,e.kjhfy.com - - DOMAIN-SUFFIX,e.kl6636.net - - DOMAIN-SUFFIX,e.ksttwz.com - - DOMAIN-SUFFIX,e.kunpp.com - - DOMAIN-SUFFIX,e.kwjkd.com - - DOMAIN-SUFFIX,e.kxhie.com - - DOMAIN-SUFFIX,e.lancedu.com - - DOMAIN-SUFFIX,e.lfdydk.com - - DOMAIN-SUFFIX,e.lovezhishou.com - - DOMAIN-SUFFIX,e.lyjz001.com - - DOMAIN-SUFFIX,e.lzytt.com - - DOMAIN-SUFFIX,e.md0z4dh.com - - DOMAIN-SUFFIX,e.meizhuanghe.com - - DOMAIN-SUFFIX,e.miaoxinqipei.com - - DOMAIN-SUFFIX,e.mightiger.net - - DOMAIN-SUFFIX,e.miiuv.com - - DOMAIN-SUFFIX,e.mmkvi.com - - DOMAIN-SUFFIX,e.mozist.com - - DOMAIN-SUFFIX,e.mqgpo.com - - DOMAIN-SUFFIX,e.mrsasharingspace.com - - DOMAIN-SUFFIX,e.mrtuo.com - - DOMAIN-SUFFIX,e.mushizhubao.com - - DOMAIN-SUFFIX,e.nduop.com - - DOMAIN-SUFFIX,e.neijh.com - - DOMAIN-SUFFIX,e.nejup.com - - DOMAIN-SUFFIX,e.nernv.com - - DOMAIN-SUFFIX,e.nexac.com - - DOMAIN-SUFFIX,e.nfkos.com - - DOMAIN-SUFFIX,e.nmtouzi.com - - DOMAIN-SUFFIX,e.nnfiy.com - - DOMAIN-SUFFIX,e.nwxzs.com - - DOMAIN-SUFFIX,e.nxypz.com - - DOMAIN-SUFFIX,e.oesnw.com - - DOMAIN-SUFFIX,e.okfhn.com - - DOMAIN-SUFFIX,e.opqsr.com - - DOMAIN-SUFFIX,e.oyrim.com - - DOMAIN-SUFFIX,e.pbino.com - - DOMAIN-SUFFIX,e.picbr.com - - DOMAIN-SUFFIX,e.plerv.com - - DOMAIN-SUFFIX,e.pomkl.com - - DOMAIN-SUFFIX,e.poonscn.com - - DOMAIN-SUFFIX,e.pubbirdf.com - - DOMAIN-SUFFIX,e.puooi.com - - DOMAIN-SUFFIX,e.pwjhg.com - - DOMAIN-SUFFIX,e.pyerc.com - - DOMAIN-SUFFIX,e.qiaoyuwang.com - - DOMAIN-SUFFIX,e.qingzhencai.net - - DOMAIN-SUFFIX,e.qiyunmuye.com - - DOMAIN-SUFFIX,e.qsove.com - - DOMAIN-SUFFIX,e.qvxyz.com - - DOMAIN-SUFFIX,e.qxfly.com - - DOMAIN-SUFFIX,e.resmv.com - - DOMAIN-SUFFIX,e.ricpt.com - - DOMAIN-SUFFIX,e.rmwdn.com - - DOMAIN-SUFFIX,e.romgv.com - - DOMAIN-SUFFIX,e.sanitwealth.com - - DOMAIN-SUFFIX,e.shenyunkeji.com - - DOMAIN-SUFFIX,e.sjuqc.com - - DOMAIN-SUFFIX,e.sosjyx.com - - DOMAIN-SUFFIX,e.srrux.com - - DOMAIN-SUFFIX,e.suehy.com - - DOMAIN-SUFFIX,e.szqifu.com - - DOMAIN-SUFFIX,e.t71q.com - - DOMAIN-SUFFIX,e.tdtsd.com - - DOMAIN-SUFFIX,e.tiantianedu.net - - DOMAIN-SUFFIX,e.tick0.com - - DOMAIN-SUFFIX,e.tiojk.com - - DOMAIN-SUFFIX,e.tuoaa.com - - DOMAIN-SUFFIX,e.ueram.com - - DOMAIN-SUFFIX,e.uissm.com - - DOMAIN-SUFFIX,e.v02u9.cn - - DOMAIN-SUFFIX,e.vaxyz.com - - DOMAIN-SUFFIX,e.vbaiu.com - - DOMAIN-SUFFIX,e.vouky.com - - DOMAIN-SUFFIX,e.vvocm.com - - DOMAIN-SUFFIX,e.wcjup.com - - DOMAIN-SUFFIX,e.weixingshexiangji.net - - DOMAIN-SUFFIX,e.wikigifth.com - - DOMAIN-SUFFIX,e.wjhehaofc.com - - DOMAIN-SUFFIX,e.wkjhd.com - - DOMAIN-SUFFIX,e.wnxcg.com - - DOMAIN-SUFFIX,e.wonwg.com - - DOMAIN-SUFFIX,e.wsxxu.com - - DOMAIN-SUFFIX,e.x.cn.xtgreat.com - - DOMAIN-SUFFIX,e.xdkje.com - - DOMAIN-SUFFIX,e.xeihy.com - - DOMAIN-SUFFIX,e.xetvb.com - - DOMAIN-SUFFIX,e.xiangchim0.com - - DOMAIN-SUFFIX,e.xikdn.com - - DOMAIN-SUFFIX,e.xkqpco.com.com - - DOMAIN-SUFFIX,e.xlsschina15.net - - DOMAIN-SUFFIX,e.xmgysweb.com - - DOMAIN-SUFFIX,e.xpjis.com - - DOMAIN-SUFFIX,e.xxkio.com - - DOMAIN-SUFFIX,e.yageben.com - - DOMAIN-SUFFIX,e.yangjingbang.net - - DOMAIN-SUFFIX,e.yerpt.com - - DOMAIN-SUFFIX,e.yicang8.com - - DOMAIN-SUFFIX,e.yidulive.net - - DOMAIN-SUFFIX,e.yingchengtou.com - - DOMAIN-SUFFIX,e.ynnke.com - - DOMAIN-SUFFIX,e.yoiur.com - - DOMAIN-SUFFIX,e.youweiprint.com - - DOMAIN-SUFFIX,e.ysdangan.com - - DOMAIN-SUFFIX,e.ysdhe.com - - DOMAIN-SUFFIX,e.yuxyz.com - - DOMAIN-SUFFIX,e.ywbwsm.com - - DOMAIN-SUFFIX,e.yycqc.com - - DOMAIN-SUFFIX,e.yyeks.com - - DOMAIN-SUFFIX,e.yyjhf.com - - DOMAIN-SUFFIX,e.zabxb.com - - DOMAIN-SUFFIX,e.zhuyuanp.club - - DOMAIN-SUFFIX,e.zhuyuanp.shop - - DOMAIN-SUFFIX,e.zhuyuanp.top - - DOMAIN-SUFFIX,e.zjkdaikuan.com - - DOMAIN-SUFFIX,e.zkwsdf.com - - DOMAIN-SUFFIX,e.zunss.com - - DOMAIN-SUFFIX,e7001.com - - DOMAIN-SUFFIX,e7002.com - - DOMAIN-SUFFIX,e7009.com - - DOMAIN-SUFFIX,e701.net - - DOMAIN-SUFFIX,e70123.com - - DOMAIN-SUFFIX,e7015.com - - DOMAIN-SUFFIX,e704.net - - DOMAIN-SUFFIX,e705.net - - DOMAIN-SUFFIX,e706.net - - DOMAIN-SUFFIX,e708.net - - DOMAIN-SUFFIX,e719.net - - DOMAIN-SUFFIX,e9377f.com - - DOMAIN-SUFFIX,eacash.streamplay.to - - DOMAIN-SUFFIX,eap.big5.enorth.com.cn - - DOMAIN-SUFFIX,eap.enorth.com.cn - - DOMAIN-SUFFIX,easyrecoverychina.com - - DOMAIN-SUFFIX,ebook.res.meizu.com - - DOMAIN-SUFFIX,ebp.renren.com - - DOMAIN-SUFFIX,ec.kejet.net - - DOMAIN-SUFFIX,eclick.120ask.com - - DOMAIN-SUFFIX,eclick.360doc.com - - DOMAIN-SUFFIX,eclick.baidu.com - - DOMAIN-SUFFIX,eclkspbn.com - - DOMAIN-SUFFIX,ecma.bdimg.com - - DOMAIN-SUFFIX,ecmb.bdimg.com - - DOMAIN-SUFFIX,ecmc.bdimg.com - - DOMAIN-SUFFIX,ecuc123.net - - DOMAIN-SUFFIX,ed.aijielang.cn - - DOMAIN-SUFFIX,ed.sczhilong.cn - - DOMAIN-SUFFIX,eddong.com - - DOMAIN-SUFFIX,edesf.xyzxmark.cn - - DOMAIN-SUFFIX,edge.quantserve.com - - DOMAIN-SUFFIX,edge.sharethis.com - - DOMAIN-SUFFIX,edge.yunjiasu.com - - DOMAIN-SUFFIX,edigitalsurvey.com - - DOMAIN-SUFFIX,ediuschina.com - - DOMAIN-SUFFIX,edncui.net - - DOMAIN-SUFFIX,eduancm.com - - DOMAIN-SUFFIX,eduzzjy.com - - DOMAIN-SUFFIX,ee4kdushuba.com - - DOMAIN-SUFFIX,eee.eh39.co - - DOMAIN-SUFFIX,eee.kj78.org - - DOMAIN-SUFFIX,eee.ttyy888.co - - DOMAIN-SUFFIX,eeee500.com - - DOMAIN-SUFFIX,eezdx.erc.18183.com - - DOMAIN-SUFFIX,eff.inte.sogou.com - - DOMAIN-SUFFIX,effectivemeasure.com - - DOMAIN-SUFFIX,effectivemeasure.net - - DOMAIN-SUFFIX,ehd.baike.com - - DOMAIN-SUFFIX,ehxyz.com - - DOMAIN-SUFFIX,ein.51yingfa.com - - DOMAIN-SUFFIX,eiv.baidu.com - - DOMAIN-SUFFIX,ejzr.golden1.sogou.com - - DOMAIN-SUFFIX,ekeide.com - - DOMAIN-SUFFIX,eland.doublemax.net - - DOMAIN-SUFFIX,em.baidu.com - - DOMAIN-SUFFIX,emarbox.com - - DOMAIN-SUFFIX,emss.zjhim.com - - DOMAIN-SUFFIX,en.shenyun.com - - DOMAIN-SUFFIX,en.shenyun.org - - DOMAIN-SUFFIX,engine.lvehaisen.com - - DOMAIN-SUFFIX,engine.tuia.cn - - DOMAIN-SUFFIX,ent1.12584.cn - - DOMAIN-SUFFIX,entry.baidu.com - - DOMAIN-SUFFIX,e-p4p.163.com - - DOMAIN-SUFFIX,epernn.cn - - DOMAIN-SUFFIX,epochtimes.org - - DOMAIN-SUFFIX,epochweekly.com - - DOMAIN-SUFFIX,epowernetworktrackerimages.s3.amazonaws.com - - DOMAIN-SUFFIX,er.dlhygj.com - - DOMAIN-SUFFIX,erdoscs.com - - DOMAIN-SUFFIX,erebor.douban.com - - DOMAIN-SUFFIX,ereg.adobe.com - - DOMAIN-SUFFIX,ereg.wip3.adobe.com - - DOMAIN-SUFFIX,ers.baidu.com - - DOMAIN-SUFFIX,erwqw.zh1155.com - - DOMAIN-SUFFIX,erwr.ydjskvpd.com - - DOMAIN-SUFFIX,espn-ak.starwave.com - - DOMAIN-SUFFIX,esptj.com - - DOMAIN-SUFFIX,esrpxyahzna.bid - - DOMAIN-SUFFIX,eteun.cn - - DOMAIN-SUFFIX,ethod.gzgmjcx.com - - DOMAIN-SUFFIX,etl.xlmc.sandai.net - - DOMAIN-SUFFIX,etl.xlmc.sec.miui.com - - DOMAIN-SUFFIX,eu-gmtdmp.gd1.mookie1.com - - DOMAIN-SUFFIX,eum-appdynamics.com - - DOMAIN-SUFFIX,eus.rubiconproject.com - - DOMAIN-SUFFIX,euwidget.imshopping.com - - DOMAIN-SUFFIX,eva.ucas.com - - DOMAIN-SUFFIX,evefashion.cn - - DOMAIN-SUFFIX,event.ksosoft.com - - DOMAIN-SUFFIX,eventlog.hd.baofeng.com - - DOMAIN-SUFFIX,events.kalooga.com - - DOMAIN-SUFFIX,events.pingan.com - - DOMAIN-SUFFIX,events-api.outfit7.net - - DOMAIN-SUFFIX,eviltracker.net - - DOMAIN-SUFFIX,ew16d.package12.com - - DOMAIN-SUFFIX,ex.mobmore.com - - DOMAIN-SUFFIX,ex.puata.info - - DOMAIN-SUFFIX,exdynsrv.com - - DOMAIN-SUFFIX,exit.macandbumble.com - - DOMAIN-SUFFIX,exoclick.com - - DOMAIN-SUFFIX,exp.17wo.cn - - DOMAIN-SUFFIX,exp.3g.ifeng.com - - DOMAIN-SUFFIX,exp.qumi.com - - DOMAIN-SUFFIX,expo123.net - - DOMAIN-SUFFIX,ext.theglobalweb.com - - DOMAIN-SUFFIX,extmoney.i1608.com - - DOMAIN-SUFFIX,extstat.com - - DOMAIN-SUFFIX,eyd77s.com - - DOMAIN-SUFFIX,eye.swfchan.com - - DOMAIN-SUFFIX,eyouv.cn - - DOMAIN-SUFFIX,ez33.org.cn - - DOMAIN-SUFFIX,ezine.oupeng.com - - DOMAIN-SUFFIX,ezucods.cn - - DOMAIN-SUFFIX,f.520tingshu.com - - DOMAIN-SUFFIX,f.doodlemobile.com - - DOMAIN-SUFFIX,f.f70123.com - - DOMAIN-SUFFIX,f.fj95560.com - - DOMAIN-SUFFIX,f.haoxinjaju.com - - DOMAIN-SUFFIX,f.hongm.com - - DOMAIN-SUFFIX,f.qcwzx.net.cn - - DOMAIN-SUFFIX,f.yijikm.com - - DOMAIN-SUFFIX,f.yueyetiyu.com - - DOMAIN-SUFFIX,f1.06ps.com - - DOMAIN-SUFFIX,f1.bizhiku.net - - DOMAIN-SUFFIX,f1.luoshenbest.cn - - DOMAIN-SUFFIX,f1.meishichina.com - - DOMAIN-SUFFIX,f1.p0y.cn - - DOMAIN-SUFFIX,f1.pig66.com - - DOMAIN-SUFFIX,f1190.com - - DOMAIN-SUFFIX,f1c.i.biquge5200.com - - DOMAIN-SUFFIX,f2.p0y.cn - - DOMAIN-SUFFIX,f2zd.com - - DOMAIN-SUFFIX,f3.mi-stat.gslb.mi-idc.com - - DOMAIN-SUFFIX,f3.vedeh.com - - DOMAIN-SUFFIX,f5.dfcwg.com - - DOMAIN-SUFFIX,f5.mtqys.com - - DOMAIN-SUFFIX,f56g.me - - DOMAIN-SUFFIX,f6ce.com - - DOMAIN-SUFFIX,f70123.com - - DOMAIN-SUFFIX,f8272.com - - DOMAIN-SUFFIX,fa.163.com - - DOMAIN-SUFFIX,facebookma.cn - - DOMAIN-SUFFIX,faggrim.com - - DOMAIN-SUFFIX,fair.sogou.com - - DOMAIN-SUFFIX,falundata.com - - DOMAIN-SUFFIX,falundata.org - - DOMAIN-SUFFIX,fan.liuxiaoer.com - - DOMAIN-SUFFIX,fan.twitch.tv - - DOMAIN-SUFFIX,fancyapi.com - - DOMAIN-SUFFIX,fanqianbb.com - - DOMAIN-SUFFIX,fans.bestvogue.com - - DOMAIN-SUFFIX,fansi365.com - - DOMAIN-SUFFIX,fan-yong.com - - DOMAIN-SUFFIX,farm-cn.plista.com - - DOMAIN-SUFFIX,fastable.com - - DOMAIN-SUFFIX,fastapi.net - - DOMAIN-SUFFIX,fastcache.com.cn - - DOMAIN-SUFFIX,fast-cdn.dianjoy.com - - DOMAIN-SUFFIX,fastclick.com - - DOMAIN-SUFFIX,fastclick.net - - DOMAIN-SUFFIX,fastly.bench.cedexis.com - - DOMAIN-SUFFIX,fastpopunder.com - - DOMAIN-SUFFIX,fathionmall.com - - DOMAIN-SUFFIX,fav.simba.taobao.com - - DOMAIN-SUFFIX,fb.xk.miui.com - - DOMAIN-SUFFIX,fbc.ffychb.com - - DOMAIN-SUFFIX,fccxgjg.com - - DOMAIN-SUFFIX,fc-feed.cdn.bcebos.com - - DOMAIN-SUFFIX,fclick.baidu.com - - DOMAIN-SUFFIX,fcsass.org.cn - - DOMAIN-SUFFIX,fd.anzhi.com - - DOMAIN-SUFFIX,fd.qchannel03.cn - - DOMAIN-SUFFIX,fd7c.com - - DOMAIN-SUFFIX,fds.api.moji.com - - DOMAIN-SUFFIX,fe.lea.lycos.co.uk - - DOMAIN-SUFFIX,fe1-au.imrworldwide.com - - DOMAIN-SUFFIX,fe2-au.imrworldwide.com - - DOMAIN-SUFFIX,fe3-au.imrworldwide.com - - DOMAIN-SUFFIX,fe-au.imrworldwide.com - - DOMAIN-SUFFIX,feed.baidu.com - - DOMAIN-SUFFIX,feed.theta.sogou.com - - DOMAIN-SUFFIX,feedback.whalecloud.com - - DOMAIN-SUFFIX,feeds.logicbuy.com - - DOMAIN-SUFFIX,feeds.videosz.com - - DOMAIN-SUFFIX,fei232.bhzje7ua9.com - - DOMAIN-SUFFIX,feidalu.com - - DOMAIN-SUFFIX,feifish66.com - - DOMAIN-SUFFIX,feih.com.cn - - DOMAIN-SUFFIX,feitianma.com - - DOMAIN-SUFFIX,feixin2.com - - DOMAIN-SUFFIX,fembsflungod.com - - DOMAIN-SUFFIX,fen.dkdlsj.com - - DOMAIN-SUFFIX,fengbuy.com - - DOMAIN-SUFFIX,fenggejiaju.com - - DOMAIN-SUFFIX,fenqihome.com - - DOMAIN-SUFFIX,fenvm.com - - DOMAIN-SUFFIX,fexclick.baidu.com - - DOMAIN-SUFFIX,ff.nsg.org.ua - - DOMAIN-SUFFIX,ffb.feihuo.com - - DOMAIN-SUFFIX,fff.yuyouge.com - - DOMAIN-SUFFIX,ffhtek.com - - DOMAIN-SUFFIX,fflsn.com - - DOMAIN-SUFFIX,ffre.ffrepair.com - - DOMAIN-SUFFIX,ffychb.com - - DOMAIN-SUFFIX,fge9vbrzwt.bid - - DOMAIN-SUFFIX,fghm.ga25.com - - DOMAIN-SUFFIX,fghmc.ga25.com - - DOMAIN-SUFFIX,fghmimg.ga25.com - - DOMAIN-SUFFIX,fgmtv.org - - DOMAIN-SUFFIX,file.bmob.cn - - DOMAIN-SUFFIX,files2.sogou.com - - DOMAIN-SUFFIX,fimserve.ign.com - - DOMAIN-SUFFIX,findicons.com - - DOMAIN-SUFFIX,finding.hardwareheaven.com - - DOMAIN-SUFFIX,findnsave.idahostatesman.com - - DOMAIN-SUFFIX,finead.cn - - DOMAIN-SUFFIX,fips.uimserv.net - - DOMAIN-SUFFIX,firefang.cn - - DOMAIN-SUFFIX,fjkst.com - - DOMAIN-SUFFIX,fjlqqc.com - - DOMAIN-SUFFIX,fjmeyer.com - - DOMAIN-SUFFIX,fkku194.com - - DOMAIN-SUFFIX,flash.2144.com - - DOMAIN-SUFFIX,flashtalking.com - - DOMAIN-SUFFIX,flowcodeapp.com - - DOMAIN-SUFFIX,flstudiochina.com - - DOMAIN-SUFFIX,flurry.cachefly.net - - DOMAIN-SUFFIX,flurry.com - - DOMAIN-SUFFIX,flux.faloo.com - - DOMAIN-SUFFIX,flv.dotmore.com.tw - - DOMAIN-SUFFIX,flv.ytshuirun.com - - DOMAIN-SUFFIX,flwja.com - - DOMAIN-SUFFIX,fm.p0y.cn - - DOMAIN-SUFFIX,fmgoal.com - - DOMAIN-SUFFIX,fnkjj.com - - DOMAIN-SUFFIX,focuscat.com - - DOMAIN-SUFFIX,focusprolight.com - - DOMAIN-SUFFIX,formysql.com - - DOMAIN-SUFFIX,fota4.adups.cn - - DOMAIN-SUFFIX,fotao9.com - - DOMAIN-SUFFIX,founseezb.cn - - DOMAIN-SUFFIX,fozhu.rrsdl.com - - DOMAIN-SUFFIX,fp.fraudmetrix.cn - - DOMAIN-SUFFIX,fpb.51edu.com - - DOMAIN-SUFFIX,fpb.kuhou.com - - DOMAIN-SUFFIX,fpb.mn586.com - - DOMAIN-SUFFIX,fpbbdx1.51240.com - - DOMAIN-SUFFIX,fpbjiansuo.mn586.com - - DOMAIN-SUFFIX,fpdownload.macromedia.com - - DOMAIN-SUFFIX,fptest.fraudmetrix.cn - - DOMAIN-SUFFIX,fqtra.com - - DOMAIN-SUFFIX,frame.enet.com.cn - - DOMAIN-SUFFIX,fraudmetrix.cn - - DOMAIN-SUFFIX,frdhq.cn - - DOMAIN-SUFFIX,free.aol.com - - DOMAIN-SUFFIX,freecodecs.us.intellitxt.com - - DOMAIN-SUFFIX,freedrive.cn - - DOMAIN-SUFFIX,freexxxvideoclip.aebn.net - - DOMAIN-SUFFIX,fs.uc.nearme.com.cn - - DOMAIN-SUFFIX,fsjsp.com - - DOMAIN-SUFFIX,fsr.lenovomm.com - - DOMAIN-SUFFIX,fst360.com - - DOMAIN-SUFFIX,fs-uc-nearme-com-cn.oss-cn-hangzhou.aliyuncs.com - - DOMAIN-SUFFIX,fsyzcs.com - - DOMAIN-SUFFIX,ft.moad.cn - - DOMAIN-SUFFIX,ft.pnop.com - - DOMAIN-SUFFIX,fthcz.com - - DOMAIN-SUFFIX,fu68.com - - DOMAIN-SUFFIX,fucnm.com - - DOMAIN-SUFFIX,fujianryt.com - - DOMAIN-SUFFIX,fun.ynet.com - - DOMAIN-SUFFIX,funshion.net.cn - - DOMAIN-SUFFIX,fus.lenovomm.com - - DOMAIN-SUFFIX,fusion.qq.com - - DOMAIN-SUFFIX,fv99.com - - DOMAIN-SUFFIX,fw.adsafeprotected.com - - DOMAIN-SUFFIX,fw.vpon.com - - DOMAIN-SUFFIX,fwmrm.net - - DOMAIN-SUFFIX,fwt0.com - - DOMAIN-SUFFIX,fxc.aiquxs.com - - DOMAIN-SUFFIX,fxmacd.com - - DOMAIN-SUFFIX,fxtducb.cn - - DOMAIN-SUFFIX,fxxgw.com - - DOMAIN-SUFFIX,fych.uranus.sogou.com - - DOMAIN-SUFFIX,fydgold132.com - - DOMAIN-SUFFIX,fytza.cn - - DOMAIN-SUFFIX,fz863.com - - DOMAIN-SUFFIX,fzz.cloud.1234507.com - - DOMAIN-SUFFIX,fzz.shgqjr.com - - DOMAIN-SUFFIX,g.163.com - - DOMAIN-SUFFIX,g.51network.com - - DOMAIN-SUFFIX,g.6sfg.com - - DOMAIN-SUFFIX,g.ad8.cc - - DOMAIN-SUFFIX,g.aligames.com - - DOMAIN-SUFFIX,g.baidu.com - - DOMAIN-SUFFIX,g.bitauto.com - - DOMAIN-SUFFIX,g.brothersoft.com - - DOMAIN-SUFFIX,g.chuiyao.com - - DOMAIN-SUFFIX,g.d.yoyi.tv - - DOMAIN-SUFFIX,g.daman.cc - - DOMAIN-SUFFIX,g.f11w.com - - DOMAIN-SUFFIX,g.f5gh.com - - DOMAIN-SUFFIX,g.gridsum.com - - DOMAIN-SUFFIX,g.haluoha.com - - DOMAIN-SUFFIX,g.hsw.cn - - DOMAIN-SUFFIX,g.koowo.com - - DOMAIN-SUFFIX,g.mnw.cn - - DOMAIN-SUFFIX,g.ousns.net - - DOMAIN-SUFFIX,g.rs.yoyi.com.cn - - DOMAIN-SUFFIX,g.s8dj.com - - DOMAIN-SUFFIX,g.szdn1ms.com - - DOMAIN-SUFFIX,g.usingde.com - - DOMAIN-SUFFIX,g.w5b454.com - - DOMAIN-SUFFIX,g.wan.2345.com - - DOMAIN-SUFFIX,g.wan.douyu.com - - DOMAIN-SUFFIX,g.wrating.com - - DOMAIN-SUFFIX,g.x.cn.xtgreat.com - - DOMAIN-SUFFIX,g.x.evolife.cn - - DOMAIN-SUFFIX,g.yccdn.com - - DOMAIN-SUFFIX,g.zx-jsp.com - - DOMAIN-SUFFIX,g1.0573ren.com - - DOMAIN-SUFFIX,g1.08160.cn - - DOMAIN-SUFFIX,g1.163.com - - DOMAIN-SUFFIX,g1.taijuba.com - - DOMAIN-SUFFIX,g1c5.com - - DOMAIN-SUFFIX,g1f5.com - - DOMAIN-SUFFIX,g2.ousns.net - - DOMAIN-SUFFIX,g3.iqilu.com - - DOMAIN-SUFFIX,g4.iqilu.com - - DOMAIN-SUFFIX,g9s.sgzs999.com - - DOMAIN-SUFFIX,gad.kugou.com - - DOMAIN-SUFFIX,gadwhy.com - - DOMAIN-SUFFIX,gafxa.code.mytanwan.com - - DOMAIN-SUFFIX,galaxy.sogoucdn.com - - DOMAIN-SUFFIX,game.9xzj.com - - DOMAIN-SUFFIX,game.baichuanhd.cn - - DOMAIN-SUFFIX,game.html5.qq.com - - DOMAIN-SUFFIX,game.kugou.com - - DOMAIN-SUFFIX,game.kuwo.cn - - DOMAIN-SUFFIX,game.qidian.com - - DOMAIN-SUFFIX,game.res.meizu.com - - DOMAIN-SUFFIX,game.rising.cn - - DOMAIN-SUFFIX,game.subway.uu.cc - - DOMAIN-SUFFIX,game.weibo.cn - - DOMAIN-SUFFIX,game.weibo.com - - DOMAIN-SUFFIX,gamead.swjoy.com - - DOMAIN-SUFFIX,gameads.digyourowngrave.com - - DOMAIN-SUFFIX,gamebox.kugou.com - - DOMAIN-SUFFIX,game-res.meizu.com - - DOMAIN-SUFFIX,ganjituiguang.ganji.com - - DOMAIN-SUFFIX,gao.ynet.com - - DOMAIN-SUFFIX,gas.data.pplive.com - - DOMAIN-SUFFIX,gateway.fortunelounge.com - - DOMAIN-SUFFIX,gateways.s3.amazonaws.com - - DOMAIN-SUFFIX,gb.corp.163.com - - DOMAIN-SUFFIX,gc.keefung-zs.com - - DOMAIN-SUFFIX,gcapi.sy.kugou.com - - DOMAIN-SUFFIX,gclick.cn - - DOMAIN-SUFFIX,gcs1.cn - - DOMAIN-SUFFIX,gd.cnhange.cn - - DOMAIN-SUFFIX,gd.jqgc.com - - DOMAIN-SUFFIX,gd.vodtw.com - - DOMAIN-SUFFIX,gdbly.com - - DOMAIN-SUFFIX,gdgy56.com - - DOMAIN-SUFFIX,gdskywings.com - - DOMAIN-SUFFIX,gdsqwy.org - - DOMAIN-SUFFIX,gdyn.cnn.com - - DOMAIN-SUFFIX,ge95.com - - DOMAIN-SUFFIX,geili.co - - DOMAIN-SUFFIX,geiyujieda.com - - DOMAIN-SUFFIX,gemini.yahoo.com - - DOMAIN-SUFFIX,gen.alicdn.com - - DOMAIN-SUFFIX,gentags.com - - DOMAIN-SUFFIX,geo.cliphunter.com - - DOMAIN-SUFFIX,geo.connexionsecure.com - - DOMAIN-SUFFIX,geo.frtya.com - - DOMAIN-SUFFIX,geo.frtyd.com - - DOMAIN-SUFFIX,geo.gridsumdissector.com - - DOMAIN-SUFFIX,geo.moatads.com - - DOMAIN-SUFFIX,geo.yahoo.com - - DOMAIN-SUFFIX,geo2.adobe.com - - DOMAIN-SUFFIX,geobanner.alt.com - - DOMAIN-SUFFIX,geobanner.friendfinder.com - - DOMAIN-SUFFIX,geobanner.passion.com - - DOMAIN-SUFFIX,geobanner.socialflirt.com - - DOMAIN-SUFFIX,geoshopping.nzherald.co.nz - - DOMAIN-SUFFIX,geryi.com - - DOMAIN-SUFFIX,get.thefile.me - - DOMAIN-SUFFIX,get3.adobe.com - - DOMAIN-SUFFIX,getnormalizedurl.com - - DOMAIN-SUFFIX,gewuwen.com - - DOMAIN-SUFFIX,gf108.com - - DOMAIN-SUFFIX,gf1352.com - - DOMAIN-SUFFIX,gfd80.com - - DOMAIN-SUFFIX,gfh.ahfzly.com - - DOMAIN-SUFFIX,gfx.infomine.com - - DOMAIN-SUFFIX,gg.0598yu.com - - DOMAIN-SUFFIX,gg.5173.com - - DOMAIN-SUFFIX,gg.51cto.com - - DOMAIN-SUFFIX,gg.amblrgg.live - - DOMAIN-SUFFIX,gg.anqu.com - - DOMAIN-SUFFIX,gg.blueidea.com - - DOMAIN-SUFFIX,gg.caixin.com - - DOMAIN-SUFFIX,gg.cs090.com - - DOMAIN-SUFFIX,gg.dsxdn.com - - DOMAIN-SUFFIX,gg.gao7.com - - DOMAIN-SUFFIX,gg.haianw.com - - DOMAIN-SUFFIX,gg.huangye88.com - - DOMAIN-SUFFIX,gg.jkmeishi.com - - DOMAIN-SUFFIX,gg.kugou.com - - DOMAIN-SUFFIX,gg.meitu.com - - DOMAIN-SUFFIX,gg.ptfish.com - - DOMAIN-SUFFIX,gg.sonhoo.com - - DOMAIN-SUFFIX,gg.stargame.com - - DOMAIN-SUFFIX,gg.uuu9.com - - DOMAIN-SUFFIX,gg.vidown.cn - - DOMAIN-SUFFIX,gg.xywy.com - - DOMAIN-SUFFIX,gg.yxdown.com - - DOMAIN-SUFFIX,gg.zhongyao1.com - - DOMAIN-SUFFIX,gg0376.com - - DOMAIN-SUFFIX,gg1.yszyz.com - - DOMAIN-SUFFIX,gg2.51cto.com - - DOMAIN-SUFFIX,gg2.dss9927.com - - DOMAIN-SUFFIX,gg3.51cto.com - - DOMAIN-SUFFIX,gg570.com - - DOMAIN-SUFFIX,gg86.pinggu.org - - DOMAIN-SUFFIX,gg8888.cnfol.com - - DOMAIN-SUFFIX,ggb.douguo.com - - DOMAIN-SUFFIX,ggcode.2345.com - - DOMAIN-SUFFIX,ggdoubi.com - - DOMAIN-SUFFIX,ggg.zj.com - - DOMAIN-SUFFIX,ggle.lywf.me - - DOMAIN-SUFFIX,ggmm777.com - - DOMAIN-SUFFIX,ggmmqq.com - - DOMAIN-SUFFIX,ggr.yxdown.com - - DOMAIN-SUFFIX,ggs.myzaker.com - - DOMAIN-SUFFIX,ggw.gusuwang.com - - DOMAIN-SUFFIX,ggw.watertu.com - - DOMAIN-SUFFIX,ggxt.net - - DOMAIN-SUFFIX,gi.xi.gxabj.com - - DOMAIN-SUFFIX,gif.lu.sogoucdn.com - - DOMAIN-SUFFIX,gimg.baidu.com - - DOMAIN-SUFFIX,gimg.bitauto.com - - DOMAIN-SUFFIX,girlcc.cc - - DOMAIN-SUFFIX,gj500.com - - DOMAIN-SUFFIX,gjghy.com - - DOMAIN-SUFFIX,gjreg.code.weddingeeos.com - - DOMAIN-SUFFIX,glasszz.com - - DOMAIN-SUFFIX,gload.adhood.com - - DOMAIN-SUFFIX,global.msads.net - - DOMAIN-SUFFIX,global.ymtracking.com - - DOMAIN-SUFFIX,gm682.com - - DOMAIN-SUFFIX,gma1.com - - DOMAIN-SUFFIX,gmota.g188.net - - DOMAIN-SUFFIX,gmtdmp.mookie1.com - - DOMAIN-SUFFIX,go.gogolm.xyz - - DOMAIN-SUFFIX,go.gotourl.xyz - - DOMAIN-SUFFIX,go.gotourls.bid - - DOMAIN-SUFFIX,go.hangzhou.com.cn - - DOMAIN-SUFFIX,go.onclasrv.com - - DOMAIN-SUFFIX,go.util.zlibs.com - - DOMAIN-SUFFIX,godloveme.cn - - DOMAIN-SUFFIX,gog9.qzdfc.com - - DOMAIN-SUFFIX,go-mpulse.net - - DOMAIN-SUFFIX,good.ta80.com - - DOMAIN-SUFFIX,googlecommerce.com - - DOMAIN-SUFFIX,googlesyndication.com - - DOMAIN-SUFFIX,goolpter.com - - DOMAIN-SUFFIX,gopig.io - - DOMAIN-SUFFIX,gorgon.youdao.com - - DOMAIN-SUFFIX,gosquared.com - - DOMAIN-SUFFIX,goto.sogou.com - - DOMAIN-SUFFIX,goto.www.iciba.com - - DOMAIN-SUFFIX,gotourl.xyz - - DOMAIN-SUFFIX,goufanli100.com - - DOMAIN-SUFFIX,gouwubang.com - - DOMAIN-SUFFIX,gouzhibao.cn - - DOMAIN-SUFFIX,govgift.com - - DOMAIN-SUFFIX,govids.net - - DOMAIN-SUFFIX,gp.jstv.com - - DOMAIN-SUFFIX,gpydym.cn - - DOMAIN-SUFFIX,gqswg.com - - DOMAIN-SUFFIX,grand.ele.me - - DOMAIN-SUFFIX,green.erne.co - - DOMAIN-SUFFIX,greenhouseglobal.cn - - DOMAIN-SUFFIX,greenxfs.down.123ch.cn - - DOMAIN-SUFFIX,gridsum.com - - DOMAIN-SUFFIX,gridsumdissector.cn - - DOMAIN-SUFFIX,gridsumdissector.com - - DOMAIN-SUFFIX,groupa.onlylady.com - - DOMAIN-SUFFIX,growingio.com - - DOMAIN-SUFFIX,gs307.com - - DOMAIN-SUFFIX,gso0.com - - DOMAIN-SUFFIX,gstat.bitauto.com - - DOMAIN-SUFFIX,gt.yy.com - - DOMAIN-SUFFIX,gt4ec.net - - DOMAIN-SUFFIX,gtags.net - - DOMAIN-SUFFIX,gtmucs.cn - - DOMAIN-SUFFIX,gu.qlogo.cn - - DOMAIN-SUFFIX,guang.lesports.com - - DOMAIN-SUFFIX,guang.sdsgwy.com - - DOMAIN-SUFFIX,guangzhuiyuan.com - - DOMAIN-SUFFIX,guangzizai.com - - DOMAIN-SUFFIX,guanjia.baidu.com - - DOMAIN-SUFFIX,guduopu.com - - DOMAIN-SUFFIX,guess.h.qhimg.com - - DOMAIN-SUFFIX,guestworld.tripod.lycos.com - - DOMAIN-SUFFIX,gugulonger.cn - - DOMAIN-SUFFIX,guidashu.com - - DOMAIN-SUFFIX,guitarpro.cc - - DOMAIN-SUFFIX,gum.criteo.com - - DOMAIN-SUFFIX,guohead.com - - DOMAIN-SUFFIX,guomob.com - - DOMAIN-SUFFIX,guoshennet.com - - DOMAIN-SUFFIX,gw5.push.mcp.weibo.cn - - DOMAIN-SUFFIX,gw6.push.mcp.weibo.cn - - DOMAIN-SUFFIX,gw630.com - - DOMAIN-SUFFIX,gx38.cn - - DOMAIN-SUFFIX,gxdhgb.com - - DOMAIN-SUFFIX,gxe.husky.sogou.com - - DOMAIN-SUFFIX,gyca9f.dahuangcheng.cn - - DOMAIN-SUFFIX,gydag.com - - DOMAIN-SUFFIX,gyrtg.com - - DOMAIN-SUFFIX,gz.hxdaka.com - - DOMAIN-SUFFIX,gz00005.top - - DOMAIN-SUFFIX,gzktpf.com - - DOMAIN-SUFFIX,gzlykj.cn - - DOMAIN-SUFFIX,gzmjnx.cn - - DOMAIN-SUFFIX,gzqudou.com - - DOMAIN-SUFFIX,h.canmg.cn - - DOMAIN-SUFFIX,h.holder.com.ua - - DOMAIN-SUFFIX,h.irs01.com - - DOMAIN-SUFFIX,h.laojiayoufang.com - - DOMAIN-SUFFIX,h.msn.com - - DOMAIN-SUFFIX,h.pcd.autohome.com.cn - - DOMAIN-SUFFIX,h.sora.yoyi.com.cn - - DOMAIN-SUFFIX,h01.hotrank.com.tw - - DOMAIN-SUFFIX,h1.18sd.cn - - DOMAIN-SUFFIX,h2.18sd.cn - - DOMAIN-SUFFIX,h5.holalauncher.com - - DOMAIN-SUFFIX,h5.jiumaster.com - - DOMAIN-SUFFIX,h5.pk1179.com - - DOMAIN-SUFFIX,h5.super-dreamers.com - - DOMAIN-SUFFIX,h5.taihao.cc - - DOMAIN-SUFFIX,h8.bec.com - - DOMAIN-SUFFIX,h9377c.com - - DOMAIN-SUFFIX,haitaoad.nosdn.127.net - - DOMAIN-SUFFIX,haiwai-ic.ksosoft.com - - DOMAIN-SUFFIX,haiwengji.net - - DOMAIN-SUFFIX,haiyunpush.com - - DOMAIN-SUFFIX,hanju18.net - - DOMAIN-SUFFIX,hao.7654.com - - DOMAIN-SUFFIX,hao.qquu8.com - - DOMAIN-SUFFIX,hao.tiandi.com - - DOMAIN-SUFFIX,hao.uc.cn - - DOMAIN-SUFFIX,hao123.xywy.com - - DOMAIN-SUFFIX,hao123rt.com - - DOMAIN-SUFFIX,hao549.com - - DOMAIN-SUFFIX,hao61.net - - DOMAIN-SUFFIX,hao916.com - - DOMAIN-SUFFIX,hao934.com - - DOMAIN-SUFFIX,haoghost.com - - DOMAIN-SUFFIX,haohaowan8.com - - DOMAIN-SUFFIX,haolew.com - - DOMAIN-SUFFIX,haoshengtoys.com - - DOMAIN-SUFFIX,haostat.qihoo.com - - DOMAIN-SUFFIX,hapic1.jhkxwl.com - - DOMAIN-SUFFIX,hascosafety.com - - DOMAIN-SUFFIX,hats.haibao.cn - - DOMAIN-SUFFIX,hbalx.cn - - DOMAIN-SUFFIX,hbdt.luomi.com - - DOMAIN-SUFFIX,hblinwei.com - - DOMAIN-SUFFIX,hbngfy.com - - DOMAIN-SUFFIX,hbyyzm.com - - DOMAIN-SUFFIX,hc.baidu.com - - DOMAIN-SUFFIX,hccms.com.cn - - DOMAIN-SUFFIX,hcreditx.com - - DOMAIN-SUFFIX,hd.jiedaibao.com - - DOMAIN-SUFFIX,hd.ylddq.com - - DOMAIN-SUFFIX,hda.maxli.cn - - DOMAIN-SUFFIX,hdad.baike.com - - DOMAIN-SUFFIX,hdb.maxli.cn - - DOMAIN-SUFFIX,hdggcdn.bayimob.com - - DOMAIN-SUFFIX,hdhkwl.com - - DOMAIN-SUFFIX,hdj.baidu.com - - DOMAIN-SUFFIX,he2d.com - - DOMAIN-SUFFIX,health1.12584.cn - - DOMAIN-SUFFIX,heavenmedia.v3g4s.com - - DOMAIN-SUFFIX,hechaocheng.cn - - DOMAIN-SUFFIX,heefwozhlxgz.com - - DOMAIN-SUFFIX,hefan365.com - - DOMAIN-SUFFIX,heib10.top - - DOMAIN-SUFFIX,heib12.top - - DOMAIN-SUFFIX,heimo.rrsdl.com - - DOMAIN-SUFFIX,hejban.youwatch.org - - DOMAIN-SUFFIX,hejingroup.cn - - DOMAIN-SUFFIX,help.baotangwang.cn - - DOMAIN-SUFFIX,help.yunaq.com - - DOMAIN-SUFFIX,hesxz.com - - DOMAIN-SUFFIX,heyzap.com - - DOMAIN-SUFFIX,hfjuki.com - - DOMAIN-SUFFIX,hfsteel.net - - DOMAIN-SUFFIX,hg417.bet - - DOMAIN-SUFFIX,hg89038.com - - DOMAIN-SUFFIX,hg89068.com - - DOMAIN-SUFFIX,hg89078.com - - DOMAIN-SUFFIX,hgame.com - - DOMAIN-SUFFIX,hh6666.com - - DOMAIN-SUFFIX,hhlian.com - - DOMAIN-SUFFIX,hhly88.com - - DOMAIN-SUFFIX,hhppyt.com - - DOMAIN-SUFFIX,hhqda.pop.t5yx.cn - - DOMAIN-SUFFIX,hi686.com - - DOMAIN-SUFFIX,hi760.com - - DOMAIN-SUFFIX,hi9377.com - - DOMAIN-SUFFIX,hiad.myweb.hinet.net - - DOMAIN-SUFFIX,hiad.vmall.com - - DOMAIN-SUFFIX,higame123.com - - DOMAIN-SUFFIX,hilltopads.net - - DOMAIN-SUFFIX,himandy.com - - DOMAIN-SUFFIX,hipersushiads.com - - DOMAIN-SUFFIX,histats.com - - DOMAIN-SUFFIX,hit.webcentre.lycos.co.uk - - DOMAIN-SUFFIX,hitlog2.chosun.com - - DOMAIN-SUFFIX,hitslink.com - - DOMAIN-SUFFIX,hivecn.cn - - DOMAIN-SUFFIX,hivedata.cc - - DOMAIN-SUFFIX,hjc1990.com - - DOMAIN-SUFFIX,hk.jtsh123.com - - DOMAIN-SUFFIX,hk.napi.ucweb.com - - DOMAIN-SUFFIX,hk9600.com - - DOMAIN-SUFFIX,hk-cdn.effectivemeasure.net - - DOMAIN-SUFFIX,hkfuy.com - - DOMAIN-SUFFIX,hl.kuzu.com - - DOMAIN-SUFFIX,hl.quw18.com - - DOMAIN-SUFFIX,hl2rcv.adobe.com - - DOMAIN-SUFFIX,hldwmly.com - - DOMAIN-SUFFIX,hlrcv.stage.adobe.com - - DOMAIN-SUFFIX,hmp33.com - - DOMAIN-SUFFIX,hmttoly.com - - DOMAIN-SUFFIX,hmyangshengji.com - - DOMAIN-SUFFIX,hnasd.com - - DOMAIN-SUFFIX,hnctsm.com - - DOMAIN-SUFFIX,hndiyikj.com - - DOMAIN-SUFFIX,hnxxjn.com - - DOMAIN-SUFFIX,hnyny.com - - DOMAIN-SUFFIX,hoisin.coocaatv.com - - DOMAIN-SUFFIX,home520.com - - DOMAIN-SUFFIX,hoplink.ksosoft.com - - DOMAIN-SUFFIX,hosting.miarroba.info - - DOMAIN-SUFFIX,hot.browser.miui.com - - DOMAIN-SUFFIX,hot.m.shouji.360tpcdn.com - - DOMAIN-SUFFIX,hot-mob.com - - DOMAIN-SUFFIX,hotrank.com.tw - - DOMAIN-SUFFIX,houdaolj.com - - DOMAIN-SUFFIX,houtai.2345.com - - DOMAIN-SUFFIX,hpd.baidu.com - - DOMAIN-SUFFIX,hpqxznpb.bid - - DOMAIN-SUFFIX,hqgjcm.com - - DOMAIN-SUFFIX,hr41.cn - - DOMAIN-SUFFIX,hr44.com - - DOMAIN-SUFFIX,hs.qhupdate.com - - DOMAIN-SUFFIX,hslyqs.com - - DOMAIN-SUFFIX,ht.www.sogou.com - - DOMAIN-SUFFIX,htfmbt.com - - DOMAIN-SUFFIX,htjsk.com - - DOMAIN-SUFFIX,html.350.com - - DOMAIN-SUFFIX,html.sunday8.com - - DOMAIN-SUFFIX,html.yuntzs.com - - DOMAIN-SUFFIX,httpdns.push.oppomobile.com - - DOMAIN-SUFFIX,huahuaka.com - - DOMAIN-SUFFIX,huashengtai.net - - DOMAIN-SUFFIX,huashuowork.com - - DOMAIN-SUFFIX,huaxinxunye.cn - - DOMAIN-SUFFIX,huayi65.com - - DOMAIN-SUFFIX,hub5pn.wap.sandai.net - - DOMAIN-SUFFIX,hubojd.com - - DOMAIN-SUFFIX,huichuan.sm.cn - - DOMAIN-SUFFIX,huimee.net - - DOMAIN-SUFFIX,huishenghuiying.com - - DOMAIN-SUFFIX,huishenghuiying.com.cn - - DOMAIN-SUFFIX,humanding.com - - DOMAIN-SUFFIX,hunpingou.com - - DOMAIN-SUFFIX,huodonghezi.com - - DOMAIN-SUFFIX,huoying666.com - - DOMAIN-SUFFIX,hv.code.tanwanyx.com - - DOMAIN-SUFFIX,hw6.com - - DOMAIN-SUFFIX,hwt.player888.cn - - DOMAIN-SUFFIX,hxadt.com - - DOMAIN-SUFFIX,hxspc.com - - DOMAIN-SUFFIX,hxstfxx.cn - - DOMAIN-SUFFIX,hxueu.code.weddingeeos.com - - DOMAIN-SUFFIX,hxyifu.com - - DOMAIN-SUFFIX,hxyx360.com - - DOMAIN-SUFFIX,hyfh.benbaisteel.com - - DOMAIN-SUFFIX,hyfyuan.com - - DOMAIN-SUFFIX,hyperpromote.com - - DOMAIN-SUFFIX,hypersnap.net - - DOMAIN-SUFFIX,hys4.com - - DOMAIN-SUFFIX,hystq.com - - DOMAIN-SUFFIX,hytgj.com - - DOMAIN-SUFFIX,hyz86.com - - DOMAIN-SUFFIX,hz.miercn.com - - DOMAIN-SUFFIX,hz.shouyoutv.com - - DOMAIN-SUFFIX,hzaibi.com - - DOMAIN-SUFFIX,hzdmacore.kejet.net - - DOMAIN-SUFFIX,hzhyhm.com - - DOMAIN-SUFFIX,hzsod71wov.me - - DOMAIN-SUFFIX,hzxfmc.com - - DOMAIN-SUFFIX,hzyuw.com - - DOMAIN-SUFFIX,i.bigmir.net - - DOMAIN-SUFFIX,i.clkservice.youdao.com - - DOMAIN-SUFFIX,i.dreamfull.cn - - DOMAIN-SUFFIX,i.flow.browser.oppomobile.com - - DOMAIN-SUFFIX,i.go.sohu.com - - DOMAIN-SUFFIX,i.haloapps.com - - DOMAIN-SUFFIX,i.hao61.net - - DOMAIN-SUFFIX,i.holalauncher.com - - DOMAIN-SUFFIX,i.huilixieye.net - - DOMAIN-SUFFIX,i.jiathis.com - - DOMAIN-SUFFIX,i.jyhwt.cn - - DOMAIN-SUFFIX,i.l.cnn.net - - DOMAIN-SUFFIX,i.liadm.com - - DOMAIN-SUFFIX,i.ma.social-touch.com - - DOMAIN-SUFFIX,i.mmcdn.cn - - DOMAIN-SUFFIX,i.ssix.io - - DOMAIN-SUFFIX,i.syasn.com - - DOMAIN-SUFFIX,i.tansuotv.com - - DOMAIN-SUFFIX,i.w55c.net - - DOMAIN-SUFFIX,i.zhuoyaju.com - - DOMAIN-SUFFIX,i1236.net - - DOMAIN-SUFFIX,i2.akjunshi.com - - DOMAIN-SUFFIX,i3818.com - - DOMAIN-SUFFIX,i5.akjunshi.com - - DOMAIN-SUFFIX,i92xue.com - - DOMAIN-SUFFIX,ia.ctags.cn - - DOMAIN-SUFFIX,iad.g.163.com - - DOMAIN-SUFFIX,iadc.qwapi.com - - DOMAIN-SUFFIX,iadmatvideo.nosdn.127.net - - DOMAIN-SUFFIX,iadmusicmat.music.126.net - - DOMAIN-SUFFIX,iads.xinmin.cn - - DOMAIN-SUFFIX,iadsdk.apple.com - - DOMAIN-SUFFIX,ib.adnxs.co - - DOMAIN-SUFFIX,ibafnw.cn - - DOMAIN-SUFFIX,ibanners.empoweredcomms.com.au - - DOMAIN-SUFFIX,ic.wps.cn - - DOMAIN-SUFFIX,icast.cn - - DOMAIN-SUFFIX,icdxc.com - - DOMAIN-SUFFIX,ichaosheng.com - - DOMAIN-SUFFIX,icn.southmoney.com - - DOMAIN-SUFFIX,ico.58pic.com - - DOMAIN-SUFFIX,icon.cnmo.com - - DOMAIN-SUFFIX,icons.mydrivers.com - - DOMAIN-SUFFIX,iconworkshop.cn - - DOMAIN-SUFFIX,id.jiathis.com - - DOMAIN-SUFFIX,id528.com - - DOMAIN-SUFFIX,ida.cnool.net - - DOMAIN-SUFFIX,idasai.com - - DOMAIN-SUFFIX,idcot.com - - DOMAIN-SUFFIX,idcqi.com - - DOMAIN-SUFFIX,identified.cn - - DOMAIN-SUFFIX,idianfang.com - - DOMAIN-SUFFIX,idm-su.baidu.com - - DOMAIN-SUFFIX,ids.deliver.ifeng.com - - DOMAIN-SUFFIX,ids1.deliver.ifeng.com - - DOMAIN-SUFFIX,idx.m.hub.sandai.net - - DOMAIN-SUFFIX,ie8eamus.com - - DOMAIN-SUFFIX,iebar.baidu.com - - DOMAIN-SUFFIX,ieonline.microsoft.com - - DOMAIN-SUFFIX,if1512.com - - DOMAIN-SUFFIX,ifengad.3g.ifeng.com - - DOMAIN-SUFFIX,iflyad.bj.openstorage.cn - - DOMAIN-SUFFIX,iframe.travel.yahoo.com - - DOMAIN-SUFFIX,ig.nukefans.net - - DOMAIN-SUFFIX,igj5y.yongchanghengyuan.com - - DOMAIN-SUFFIX,ih.adscale.de - - DOMAIN-SUFFIX,ihualun.com - - DOMAIN-SUFFIX,ihuanmei.com - - DOMAIN-SUFFIX,iia1.pikacn.com - - DOMAIN-SUFFIX,iiad.com - - DOMAIN-SUFFIX,iiewl.com - - DOMAIN-SUFFIX,iii.6park.com - - DOMAIN-SUFFIX,iis1.deliver.ifeng.com - - DOMAIN-SUFFIX,iis3g.deliver.ifeng.com - - DOMAIN-SUFFIX,iisl7wpf.me - - DOMAIN-SUFFIX,ikcode.baidu.com - - DOMAIN-SUFFIX,il8r.com - - DOMAIN-SUFFIX,im.jpush.cn - - DOMAIN-SUFFIX,im.ov.yahoo.co.jp - - DOMAIN-SUFFIX,im1.56zzw.com - - DOMAIN-SUFFIX,im64.jpush.cn - - DOMAIN-SUFFIX,ima3vpaid.appspot.com - - DOMAIN-SUFFIX,imads.rediff.com - - DOMAIN-SUFFIX,image.139y.com - - DOMAIN-SUFFIX,image.9duw.com - - DOMAIN-SUFFIX,image.box.xiaomi.com - - DOMAIN-SUFFIX,image.fsyule.net - - DOMAIN-SUFFIX,image.gentags.com - - DOMAIN-SUFFIX,image.haiyunx.com - - DOMAIN-SUFFIX,image.hh010.com - - DOMAIN-SUFFIX,image.hj217.com - - DOMAIN-SUFFIX,image.p4p.sogou.com - - DOMAIN-SUFFIX,image.qj175.com - - DOMAIN-SUFFIX,image.zzd.sm.cn - - DOMAIN-SUFFIX,imagelx.yidianzixun.com - - DOMAIN-SUFFIX,images.avsmt.cn - - DOMAIN-SUFFIX,images.chinaz.com - - DOMAIN-SUFFIX,images.enet.com.cn - - DOMAIN-SUFFIX,images.fastclick.net - - DOMAIN-SUFFIX,images.gxsky.com - - DOMAIN-SUFFIX,images.intellitxt.com - - DOMAIN-SUFFIX,images.millennialmedia.com - - DOMAIN-SUFFIX,images.pagechoice.net - - DOMAIN-SUFFIX,images.sohu.com - - DOMAIN-SUFFIX,images.startappservice.com - - DOMAIN-SUFFIX,images.tyyjzs.cn - - DOMAIN-SUFFIX,images9999.com - - DOMAIN-SUFFIX,imageter.com - - DOMAIN-SUFFIX,imagzine.oppomobile.com - - DOMAIN-SUFFIX,imedia.bokecc.com - - DOMAIN-SUFFIX,imeijiajia.com - - DOMAIN-SUFFIX,imfsr.lenovomm.com - - DOMAIN-SUFFIX,img.12584.cn - - DOMAIN-SUFFIX,img.3sjt.com - - DOMAIN-SUFFIX,img.88ads.com - - DOMAIN-SUFFIX,img.9duw.com - - DOMAIN-SUFFIX,img.ad.zhangyue.com - - DOMAIN-SUFFIX,img.adbox.sina.com.cn - - DOMAIN-SUFFIX,img.adnyg.com - - DOMAIN-SUFFIX,img.amp.ad.sina.com.cn - - DOMAIN-SUFFIX,img.cmm.xmfish.com - - DOMAIN-SUFFIX,img.cxxyft.com - - DOMAIN-SUFFIX,img.dawenxue.org - - DOMAIN-SUFFIX,img.dydab.com - - DOMAIN-SUFFIX,img.ercfh.com - - DOMAIN-SUFFIX,img.fd7c.com - - DOMAIN-SUFFIX,img.feitian001.com - - DOMAIN-SUFFIX,img.gaore.com - - DOMAIN-SUFFIX,img.gz9d.com - - DOMAIN-SUFFIX,img.il8r.com - - DOMAIN-SUFFIX,img.img18.com - - DOMAIN-SUFFIX,img.jgchq.com - - DOMAIN-SUFFIX,img.jizzads.com - - DOMAIN-SUFFIX,img.kanuxian.cn - - DOMAIN-SUFFIX,img.khlxw.com - - DOMAIN-SUFFIX,img.kuwanpx.com - - DOMAIN-SUFFIX,img.libdd.com - - DOMAIN-SUFFIX,img.ma.social-touch.com - - DOMAIN-SUFFIX,img.meipic.net - - DOMAIN-SUFFIX,img.qdscgj.com - - DOMAIN-SUFFIX,img.qqgeshou.com - - DOMAIN-SUFFIX,img.s8bbs.com - - DOMAIN-SUFFIX,img.scupio.com - - DOMAIN-SUFFIX,img.sheyuansu.com - - DOMAIN-SUFFIX,img.supfast.net - - DOMAIN-SUFFIX,img.tan5858.com - - DOMAIN-SUFFIX,img.taotaosou.cn - - DOMAIN-SUFFIX,img.tcdxt.com - - DOMAIN-SUFFIX,img.toppr.com.cn - - DOMAIN-SUFFIX,img.twcczhu.com - - DOMAIN-SUFFIX,img.uyangyong.cn - - DOMAIN-SUFFIX,img.wan.sogou.com - - DOMAIN-SUFFIX,img.wuben56.com - - DOMAIN-SUFFIX,img.xa9t.com - - DOMAIN-SUFFIX,img.xcy8.com - - DOMAIN-SUFFIX,img.xiacaidd.com - - DOMAIN-SUFFIX,img.xuenb.com - - DOMAIN-SUFFIX,img.yingshidiguo.cn - - DOMAIN-SUFFIX,img.yuyue007.cn - - DOMAIN-SUFFIX,img.zsj18.com - - DOMAIN-SUFFIX,img.zuowen8.com - - DOMAIN-SUFFIX,img.zx590.com - - DOMAIN-SUFFIX,img0.egou.com - - DOMAIN-SUFFIX,img01.taotaosou.cn - - DOMAIN-SUFFIX,img1.126.net - - DOMAIN-SUFFIX,img1.18183.com - - DOMAIN-SUFFIX,img1.jintang114.org - - DOMAIN-SUFFIX,img1.km.com - - DOMAIN-SUFFIX,img1.mekbet.com - - DOMAIN-SUFFIX,img1.nend.net - - DOMAIN-SUFFIX,img1.pcfg.cache.wps.cn - - DOMAIN-SUFFIX,img1.pszyzxh.org - - DOMAIN-SUFFIX,img18.com - - DOMAIN-SUFFIX,img2.126.net - - DOMAIN-SUFFIX,img2.578965.com - - DOMAIN-SUFFIX,img2.cs153.com - - DOMAIN-SUFFIX,img2.hrccb.com - - DOMAIN-SUFFIX,img2.jiuzhilan.com - - DOMAIN-SUFFIX,img2.km.com - - DOMAIN-SUFFIX,img2.qekun.com - - DOMAIN-SUFFIX,img3.126.net - - DOMAIN-SUFFIX,img3.fy1g.com - - DOMAIN-SUFFIX,img3.km.com - - DOMAIN-SUFFIX,img6.126.net - - DOMAIN-SUFFIX,img80.net - - DOMAIN-SUFFIX,img-ad.oupeng.com - - DOMAIN-SUFFIX,imgad.thepaper.cn - - DOMAIN-SUFFIX,imgad0.3conline.com - - DOMAIN-SUFFIX,imgad0.pconline.com.cn - - DOMAIN-SUFFIX,imgadpai.thepaper.cn - - DOMAIN-SUFFIX,imgapp.yeyou.com - - DOMAIN-SUFFIX,imgc.cymzc.com - - DOMAIN-SUFFIX,imgcdn.wapx.cn - - DOMAIN-SUFFIX,img-cdn-spot.ymcdn.cn - - DOMAIN-SUFFIX,img-dsp.oss-cn-beijing.aliyuncs.com - - DOMAIN-SUFFIX,imges.wu65.com - - DOMAIN-SUFFIX,imgg.marketgid.com - - DOMAIN-SUFFIX,imgg.mgid.com - - DOMAIN-SUFFIX,imgp.cymzc.com - - DOMAIN-SUFFIX,imgsreview.dftoutiao.com - - DOMAIN-SUFFIX,imindmap.cc - - DOMAIN-SUFFIX,immob.cn - - DOMAIN-SUFFIX,imneinei.com - - DOMAIN-SUFFIX,i-mobile.co.jp - - DOMAIN-SUFFIX,imp.asahi.com - - DOMAIN-SUFFIX,imp.gentags.net - - DOMAIN-SUFFIX,imp.go.sohu.com - - DOMAIN-SUFFIX,imp.madserving.com - - DOMAIN-SUFFIX,imp.pdb.madserving.com - - DOMAIN-SUFFIX,imp.xgo.com.cn - - DOMAIN-SUFFIX,imp.zdnet.com.cn - - DOMAIN-SUFFIX,imp.zol.com.cn - - DOMAIN-SUFFIX,impression.gridsumdissector.com - - DOMAIN-SUFFIX,impservice.dictapp.youdao.com - - DOMAIN-SUFFIX,impservice.youdao.com - - DOMAIN-SUFFIX,impservice2.youdao.com - - DOMAIN-SUFFIX,impservicetest.dictapp.youdao.com - - DOMAIN-SUFFIX,impservice-test.dictapp.youdao.com - - DOMAIN-SUFFIX,imrworldwide.com - - DOMAIN-SUFFIX,in.gyeet.com - - DOMAIN-SUFFIX,in.jxhcyc.com - - DOMAIN-SUFFIX,in.mengpr.com - - DOMAIN-SUFFIX,in.mgwcn.com - - DOMAIN-SUFFIX,in.qzkxt.com - - DOMAIN-SUFFIX,in.zog.link - - DOMAIN-SUFFIX,in1.feed.uu.cc - - DOMAIN-SUFFIX,in1.secure.uu.cc - - DOMAIN-SUFFIX,inad.com - - DOMAIN-SUFFIX,inapp.1sapp.com - - DOMAIN-SUFFIX,inccnd.com - - DOMAIN-SUFFIX,inclk.com - - DOMAIN-SUFFIX,include.xs2345.com - - DOMAIN-SUFFIX,index.woai310.com - - DOMAIN-SUFFIX,indieclick.3janecdn.com - - DOMAIN-SUFFIX,info.downsave.com - - DOMAIN-SUFFIX,info.gomlab.com - - DOMAIN-SUFFIX,info.meihua.docer.com - - DOMAIN-SUFFIX,info.pinyin.sogou.com - - DOMAIN-SUFFIX,info.sec.miui.com - - DOMAIN-SUFFIX,info.stockstar.com - - DOMAIN-SUFFIX,info.yitsoftware.com - - DOMAIN-SUFFIX,infocenter.meizu.com - - DOMAIN-SUFFIX,ingameads.gameloft.com - - DOMAIN-SUFFIX,ini.litingxin.cn - - DOMAIN-SUFFIX,ini.update.360safe.com - - DOMAIN-SUFFIX,init.phpwind.com - - DOMAIN-SUFFIX,init.phpwind.net - - DOMAIN-SUFFIX,init.startappexchange.com - - DOMAIN-SUFFIX,innity.com - - DOMAIN-SUFFIX,innity.net - - DOMAIN-SUFFIX,inoprosport.su - - DOMAIN-SUFFIX,insenz.com - - DOMAIN-SUFFIX,inside.bitcomet.com - - DOMAIN-SUFFIX,inskin.vo.llnwd.net - - DOMAIN-SUFFIX,inst.360safe.com - - DOMAIN-SUFFIX,instabug.com - - DOMAIN-SUFFIX,install.kugou.com - - DOMAIN-SUFFIX,install.sidesearch.lycos.com - - DOMAIN-SUFFIX,install2.kugou.com - - DOMAIN-SUFFIX,instreet.cn - - DOMAIN-SUFFIX,int.dpool.sina.com.cn - - DOMAIN-SUFFIX,inte.theta.sogoucdn.com - - DOMAIN-SUFFIX,intellitxt.com - - DOMAIN-SUFFIX,intely.cn - - DOMAIN-SUFFIX,inter1ads.com - - DOMAIN-SUFFIX,interaction.bayimob.com - - DOMAIN-SUFFIX,interactive.huanqiu.com - - DOMAIN-SUFFIX,interest.mix.sina.com.cn - - DOMAIN-SUFFIX,ioc.mmakd.top - - DOMAIN-SUFFIX,ios.bugly.qq.com - - DOMAIN-SUFFIX,ios-dc.51y5.net - - DOMAIN-SUFFIX,ios-informationplatform.wps.cn - - DOMAIN-SUFFIX,iosipa.b0.upaiyun.com - - DOMAIN-SUFFIX,ip.hivps.xyz - - DOMAIN-SUFFIX,ip2.pxene.com - - DOMAIN-SUFFIX,ipengtai.huanqiu.com - - DOMAIN-SUFFIX,iperceptions.com - - DOMAIN-SUFFIX,iphonelog.shouji.baofeng.com - - DOMAIN-SUFFIX,ipic.staticsdo.com - - DOMAIN-SUFFIX,ipinyou.com - - DOMAIN-SUFFIX,ipm.atm.cp31.ott.cibntv.net - - DOMAIN-SUFFIX,ipm.atm.youku.com - - DOMAIN-SUFFIX,iqiyi.irs01.com - - DOMAIN-SUFFIX,ir.mail.126.com - - DOMAIN-SUFFIX,ir.mail.163.com - - DOMAIN-SUFFIX,ir.mail.yeah.net - - DOMAIN-SUFFIX,iroby.com - - DOMAIN-SUFFIX,irpmt.mail.163.com - - DOMAIN-SUFFIX,irs01.com - - DOMAIN-SUFFIX,irs01.net - - DOMAIN-SUFFIX,irs09.com - - DOMAIN-SUFFIX,ishop789.com - - DOMAIN-SUFFIX,ishowbg.com - - DOMAIN-SUFFIX,istreamsche.com - - DOMAIN-SUFFIX,itaoxiaoshuo.com - - DOMAIN-SUFFIX,item.ttkvod.com - - DOMAIN-SUFFIX,items.bingdiantao.com - - DOMAIN-SUFFIX,its.fugetech.com - - DOMAIN-SUFFIX,its-dori.tumblr.com - - DOMAIN-SUFFIX,iutr.uozwys.top - - DOMAIN-SUFFIX,iuuff.com - - DOMAIN-SUFFIX,ivy.pcauto.com.cn - - DOMAIN-SUFFIX,ivy.pcbaby.com.cn - - DOMAIN-SUFFIX,ivy.pclady.com.cn - - DOMAIN-SUFFIX,ivy.pconline.com.cn - - DOMAIN-SUFFIX,iwan.sogou.com - - DOMAIN-SUFFIX,iwanad.baidu.com - - DOMAIN-SUFFIX,ixpub.net - - DOMAIN-SUFFIX,j.6avz.com - - DOMAIN-SUFFIX,j.baminw.cn - - DOMAIN-SUFFIX,j.biquge520.cc - - DOMAIN-SUFFIX,j.br.baidu.com - - DOMAIN-SUFFIX,j.ccnovel.com - - DOMAIN-SUFFIX,j.chaorenjiaoshi.com - - DOMAIN-SUFFIX,j.dipowang.cn - - DOMAIN-SUFFIX,j.fd7c.com - - DOMAIN-SUFFIX,j.hbwcl.com - - DOMAIN-SUFFIX,j.hongyangpai.com - - DOMAIN-SUFFIX,j.jimeilm.com - - DOMAIN-SUFFIX,j.kfd3sm2c.com - - DOMAIN-SUFFIX,j.qijijs.top - - DOMAIN-SUFFIX,j.qiqivv.com - - DOMAIN-SUFFIX,j.qiqiww.com - - DOMAIN-SUFFIX,j.s11.cn - - DOMAIN-SUFFIX,j.sc1369.com - - DOMAIN-SUFFIX,j.sdqoi2d.com - - DOMAIN-SUFFIX,j.wan.liebao.cn - - DOMAIN-SUFFIX,j.wit.qq.com - - DOMAIN-SUFFIX,j.xinshipu.com - - DOMAIN-SUFFIX,j.yljiaoluo.com - - DOMAIN-SUFFIX,j.ytbt.cc - - DOMAIN-SUFFIX,j.zhdap.com - - DOMAIN-SUFFIX,j1.piaobing.com - - DOMAIN-SUFFIX,j17.shangc.net - - DOMAIN-SUFFIX,j17.xiumu.cn - - DOMAIN-SUFFIX,j520s.gzcl999.cn - - DOMAIN-SUFFIX,j7182.hfxcsl.cn - - DOMAIN-SUFFIX,ja.gamersky.com - - DOMAIN-SUFFIX,ja1.gamersky.com - - DOMAIN-SUFFIX,ja9377.com - - DOMAIN-SUFFIX,jack.okkkk.com - - DOMAIN-SUFFIX,jackaow.com - - DOMAIN-SUFFIX,jagcn.com - - DOMAIN-SUFFIX,jav23.com - - DOMAIN-SUFFIX,javhd.com - - DOMAIN-SUFFIX,jb.4hw.com.cn - - DOMAIN-SUFFIX,jb.asqql.com - - DOMAIN-SUFFIX,jb.dianshu119.com - - DOMAIN-SUFFIX,jb.eastlady.cn - - DOMAIN-SUFFIX,jb.ecar168.cn - - DOMAIN-SUFFIX,jb.mbaidu.top - - DOMAIN-SUFFIX,jb.mnkan.com - - DOMAIN-SUFFIX,jb.tupianzj.com - - DOMAIN-SUFFIX,jbcbuy.com - - DOMAIN-SUFFIX,jbflil.cn - - DOMAIN-SUFFIX,jbyy010.com - - DOMAIN-SUFFIX,jc.anhuilitian.net - - DOMAIN-SUFFIX,jc.xuqinqi.cn - - DOMAIN-SUFFIX,jc1.dayfund.cn - - DOMAIN-SUFFIX,jct.maptu.cn - - DOMAIN-SUFFIX,jczzjx.com - - DOMAIN-SUFFIX,jd.c-ptsp.com.cn - - DOMAIN-SUFFIX,jdb.jiudingcapital.cn - - DOMAIN-SUFFIX,jdb.jiudingcapital.com - - DOMAIN-SUFFIX,jddaw.com - - DOMAIN-SUFFIX,jdg.bjygfd.com - - DOMAIN-SUFFIX,jdkic.com - - DOMAIN-SUFFIX,jdlcg.cn - - DOMAIN-SUFFIX,jdlhg.com - - DOMAIN-SUFFIX,jdw.zjuwjdc.com - - DOMAIN-SUFFIX,jebe.renren.com - - DOMAIN-SUFFIX,jebe.xnimg.cn - - DOMAIN-SUFFIX,jellyfish.pandora.xiaomi.com - - DOMAIN-SUFFIX,jermr.com - - DOMAIN-SUFFIX,jesgoo.com - - DOMAIN-SUFFIX,jf.winads.cn - - DOMAIN-SUFFIX,jfhe.0769371.com - - DOMAIN-SUFFIX,jfm4.pop.baofeng.net - - DOMAIN-SUFFIX,jfqkj.com - - DOMAIN-SUFFIX,jgchq.com - - DOMAIN-SUFFIX,jghcy.com - - DOMAIN-SUFFIX,jhakie.com - - DOMAIN-SUFFIX,jhtcdj.com - - DOMAIN-SUFFIX,jhzl001.com - - DOMAIN-SUFFIX,ji.dazhantai.com - - DOMAIN-SUFFIX,jiaheyonggu.com - - DOMAIN-SUFFIX,jiajv.net - - DOMAIN-SUFFIX,jianbaimei.com - - DOMAIN-SUFFIX,jianduankm.com - - DOMAIN-SUFFIX,jianmei123.com - - DOMAIN-SUFFIX,jiansuo.dsxdn.com - - DOMAIN-SUFFIX,jiaoben.eastday.com - - DOMAIN-SUFFIX,jiaoben.ganji.cn - - DOMAIN-SUFFIX,jiaoben.jucanw.com - - DOMAIN-SUFFIX,jiaoben.junmeng.com - - DOMAIN-SUFFIX,jiaoben.xinshipu.cn - - DOMAIN-SUFFIX,jias.haotxt.com - - DOMAIN-SUFFIX,jiathis.com - - DOMAIN-SUFFIX,jiawen88.com - - DOMAIN-SUFFIX,jiayi1.oss-cn-shanghai.aliyuncs.com - - DOMAIN-SUFFIX,jiedaibao.com - - DOMAIN-SUFFIX,jiehantai.com - - DOMAIN-SUFFIX,jiehunmishu.com - - DOMAIN-SUFFIX,jifeidandar.com - - DOMAIN-SUFFIX,jifen.2345.com - - DOMAIN-SUFFIX,jihehuaban.com - - DOMAIN-SUFFIX,jihehuaban.com.cn - - DOMAIN-SUFFIX,jimdo.com - - DOMAIN-SUFFIX,jimeilm.com - - DOMAIN-SUFFIX,jindu179.com - - DOMAIN-SUFFIX,jing.58.com - - DOMAIN-SUFFIX,jingdian230.meilika.net - - DOMAIN-SUFFIX,jinghuazhijia.com - - DOMAIN-SUFFIX,jinsha11833.com - - DOMAIN-SUFFIX,jinshagt222.com - - DOMAIN-SUFFIX,jira.vpon.com - - DOMAIN-SUFFIX,jisucn.com - - DOMAIN-SUFFIX,jiu.njdkgm.com - - DOMAIN-SUFFIX,jiubuhua.com - - DOMAIN-SUFFIX,jiuku.cc - - DOMAIN-SUFFIX,jiyou2014.com - - DOMAIN-SUFFIX,jizzads.com - - DOMAIN-SUFFIX,jj123.com.cn - - DOMAIN-SUFFIX,jjhd47.115seo.com - - DOMAIN-SUFFIX,jjx.xjtxcj.com - - DOMAIN-SUFFIX,jjxgly.com - - DOMAIN-SUFFIX,jjyy.gaopengqcdz.cn - - DOMAIN-SUFFIX,jk939.com - - DOMAIN-SUFFIX,jkjjkj.top - - DOMAIN-SUFFIX,jkmxy.com - - DOMAIN-SUFFIX,jl027.com - - DOMAIN-SUFFIX,jlssbz.com - - DOMAIN-SUFFIX,jmonitor.jiuzhilan.com - - DOMAIN-SUFFIX,jmsyzj.com - - DOMAIN-SUFFIX,jmxlaser.com - - DOMAIN-SUFFIX,jndczg.com - - DOMAIN-SUFFIX,jnrsjm.com - - DOMAIN-SUFFIX,jnsdkjzs.com - - DOMAIN-SUFFIX,jnsz.net.cn - - DOMAIN-SUFFIX,jnyngg.cn - - DOMAIN-SUFFIX,johtzj.com - - DOMAIN-SUFFIX,jointreport-switch.com - - DOMAIN-SUFFIX,jossuer.net - - DOMAIN-SUFFIX,joyfuldoors.com - - DOMAIN-SUFFIX,jp88.cc - - DOMAIN-SUFFIX,jpg.cooguo.com - - DOMAIN-SUFFIX,jpg.inte.sogoucdn.com - - DOMAIN-SUFFIX,jph.itiexue.net - - DOMAIN-SUFFIX,jpush.cn - - DOMAIN-SUFFIX,jpush.html5.qq.com - - DOMAIN-SUFFIX,jqmt.qq.com - - DOMAIN-SUFFIX,jqz9.com - - DOMAIN-SUFFIX,jrdkc.com - - DOMAIN-SUFFIX,jrhaigou.com - - DOMAIN-SUFFIX,jrpt.jrptweb.org - - DOMAIN-SUFFIX,js.05sun.com - - DOMAIN-SUFFIX,js.133u.com - - DOMAIN-SUFFIX,js.139y.com - - DOMAIN-SUFFIX,js.1688988.com - - DOMAIN-SUFFIX,js.2011.8684.com - - DOMAIN-SUFFIX,js.45bubu.com - - DOMAIN-SUFFIX,js.4hw.com.cn - - DOMAIN-SUFFIX,js.5068.com - - DOMAIN-SUFFIX,js.51taifu.com - - DOMAIN-SUFFIX,js.578965.com - - DOMAIN-SUFFIX,js.5iydz.com - - DOMAIN-SUFFIX,js.9669.cn - - DOMAIN-SUFFIX,js.adxkj.com - - DOMAIN-SUFFIX,js.bju888.com - - DOMAIN-SUFFIX,js.bxwns.com - - DOMAIN-SUFFIX,js.bxwxtxt.com - - DOMAIN-SUFFIX,js.cdjqjy.com - - DOMAIN-SUFFIX,js.cncrk.com - - DOMAIN-SUFFIX,js.cnmo.com - - DOMAIN-SUFFIX,js.cnscdj.com - - DOMAIN-SUFFIX,js.ctags.cn - - DOMAIN-SUFFIX,js.daxueshengqiandai.com - - DOMAIN-SUFFIX,js.dkqapp.cn - - DOMAIN-SUFFIX,js.duotegame.com - - DOMAIN-SUFFIX,js.ea3w.com - - DOMAIN-SUFFIX,js.feitian001.com - - DOMAIN-SUFFIX,js.fengniao.com - - DOMAIN-SUFFIX,js.firefang.cn - - DOMAIN-SUFFIX,js.gewuwen.com - - DOMAIN-SUFFIX,js.hkslg520.com - - DOMAIN-SUFFIX,js.hslyqs.com - - DOMAIN-SUFFIX,js.icast.cn - - DOMAIN-SUFFIX,js.idgdmg.com.cn - - DOMAIN-SUFFIX,js.jianbaimei.com - - DOMAIN-SUFFIX,js.jxabp.com.cn - - DOMAIN-SUFFIX,js.lieqitianxia.cn - - DOMAIN-SUFFIX,js.mbaidu.top - - DOMAIN-SUFFIX,js.mingxianshanghang.cn - - DOMAIN-SUFFIX,js.mnkan.com - - DOMAIN-SUFFIX,js.moatads.com - - DOMAIN-SUFFIX,js.mumayi.net - - DOMAIN-SUFFIX,js.paochala.net - - DOMAIN-SUFFIX,js.ptmind.com - - DOMAIN-SUFFIX,js.pub.tom.com - - DOMAIN-SUFFIX,js.pyangzi.com - - DOMAIN-SUFFIX,js.revsci.net - - DOMAIN-SUFFIX,js.ruiwen.com - - DOMAIN-SUFFIX,js.saiqizhi.com - - DOMAIN-SUFFIX,js.sanwen.net - - DOMAIN-SUFFIX,js.soduso.cc - - DOMAIN-SUFFIX,js.soonyou123.com - - DOMAIN-SUFFIX,js.start1999.com - - DOMAIN-SUFFIX,js.szande.com.cn - - DOMAIN-SUFFIX,js.ubaike.cn - - DOMAIN-SUFFIX,js.um0592.com - - DOMAIN-SUFFIX,js.union-wifi.com - - DOMAIN-SUFFIX,js.wo-x.cn - - DOMAIN-SUFFIX,js.wu65.com - - DOMAIN-SUFFIX,js.xiansuper.com - - DOMAIN-SUFFIX,js.xtgreat.com - - DOMAIN-SUFFIX,js.xuexila.com - - DOMAIN-SUFFIX,js.ydeprint.com - - DOMAIN-SUFFIX,js.yixui.com - - DOMAIN-SUFFIX,js.ylunion.com - - DOMAIN-SUFFIX,js.yoyi.tv - - DOMAIN-SUFFIX,js.zol.com.cn - - DOMAIN-SUFFIX,js.zyrfanli.com - - DOMAIN-SUFFIX,js1.2abc8.com - - DOMAIN-SUFFIX,js1.nend.net - - DOMAIN-SUFFIX,js-1.pchome.net - - DOMAIN-SUFFIX,js1.xbaixing.com - - DOMAIN-SUFFIX,js1.zuocai.tv - - DOMAIN-SUFFIX,js1151.yongkang6.com - - DOMAIN-SUFFIX,js1151.zhudiaosz.com - - DOMAIN-SUFFIX,js1157.yongkang6.com - - DOMAIN-SUFFIX,js123.0937jyg.com - - DOMAIN-SUFFIX,js1516.0937jyg.com - - DOMAIN-SUFFIX,js1517.0937jyg.com - - DOMAIN-SUFFIX,js205.dupinpu.com - - DOMAIN-SUFFIX,js2254.hfxcsl.cn - - DOMAIN-SUFFIX,js2553.xjzyq.com - - DOMAIN-SUFFIX,js257.0937jyg.com - - DOMAIN-SUFFIX,js2672.xjzyq.com - - DOMAIN-SUFFIX,js3492.yongkang6.com - - DOMAIN-SUFFIX,js3743.yongkang6.com - - DOMAIN-SUFFIX,js3768.zhudiaosz.com - - DOMAIN-SUFFIX,js3810.yongkang6.com - - DOMAIN-SUFFIX,js3810.zhudiaosz.com - - DOMAIN-SUFFIX,js4.eastmoney.com - - DOMAIN-SUFFIX,js412.0937jyg.com - - DOMAIN-SUFFIX,js412.yexfes.com - - DOMAIN-SUFFIX,js412.yqjxzw.com - - DOMAIN-SUFFIX,js4163.yongkang6.com - - DOMAIN-SUFFIX,js4273.zhudiaosz.com - - DOMAIN-SUFFIX,js453.zhudiaosz.com - - DOMAIN-SUFFIX,js50.yxlady.com - - DOMAIN-SUFFIX,js5162.yongkang6.com - - DOMAIN-SUFFIX,js6882.jianbangjiaoyu.com - - DOMAIN-SUFFIX,js6882.mengchengbao.com - - DOMAIN-SUFFIX,js7004.hnfpgm.com - - DOMAIN-SUFFIX,js7129.dlkjgjmy.com - - DOMAIN-SUFFIX,js7129.shxqeps.com - - DOMAIN-SUFFIX,js7152.shxqeps.com - - DOMAIN-SUFFIX,js74.0937jyg.com - - DOMAIN-SUFFIX,js74.yexfes.com - - DOMAIN-SUFFIX,js74.yqjxzw.com - - DOMAIN-SUFFIX,js7405.mengchengbao.com - - DOMAIN-SUFFIX,js84.enyayinxiang.com - - DOMAIN-SUFFIX,js883.hnfpgm.com - - DOMAIN-SUFFIX,js883.yongkang6.com - - DOMAIN-SUFFIX,js9318.bllzgqbyp.com - - DOMAIN-SUFFIX,jsadt.com - - DOMAIN-SUFFIX,js-agent.newrelic.com - - DOMAIN-SUFFIX,js-apac-ss.ysm.yahoo.com - - DOMAIN-SUFFIX,jsb.qianzhan.com - - DOMAIN-SUFFIX,jsc.adskeeper.co.uk - - DOMAIN-SUFFIX,jsc.marketgid.com - - DOMAIN-SUFFIX,jsc.mgid.com - - DOMAIN-SUFFIX,jscdn.99pps.com - - DOMAIN-SUFFIX,jscode.jbzj.com - - DOMAIN-SUFFIX,jsjs.nthyn.com - - DOMAIN-SUFFIX,jskrnekewe.mofans.net - - DOMAIN-SUFFIX,jsm.39yst.com - - DOMAIN-SUFFIX,jsm.9939.com - - DOMAIN-SUFFIX,jsmwd.com - - DOMAIN-SUFFIX,jsnp.golden1.sogou.com - - DOMAIN-SUFFIX,jsnywl.kfi8.com - - DOMAIN-SUFFIX,json.gewuwen.com - - DOMAIN-SUFFIX,jspg.cc - - DOMAIN-SUFFIX,jsqmt.qq.com - - DOMAIN-SUFFIX,jssd.uumeitu.com - - DOMAIN-SUFFIX,jt.yunxiufang.net - - DOMAIN-SUFFIX,jtug.code.poyang.com - - DOMAIN-SUFFIX,jtxh.net - - DOMAIN-SUFFIX,jtys8.com - - DOMAIN-SUFFIX,ju33.com - - DOMAIN-SUFFIX,juicyads.com - - DOMAIN-SUFFIX,jump.luna.58.com - - DOMAIN-SUFFIX,jumpe.58xmgys.com - - DOMAIN-SUFFIX,jumpluna.58.com - - DOMAIN-SUFFIX,jumpm.58xmgys.com - - DOMAIN-SUFFIX,jundazulin.com - - DOMAIN-SUFFIX,junfull.com - - DOMAIN-SUFFIX,juren0.com - - DOMAIN-SUFFIX,jusha.com - - DOMAIN-SUFFIX,jutou5.com - - DOMAIN-SUFFIX,juzi.cn - - DOMAIN-SUFFIX,juzilm.com - - DOMAIN-SUFFIX,jwg365.cn - - DOMAIN-SUFFIX,jwpltx.com - - DOMAIN-SUFFIX,jwqj.net - - DOMAIN-SUFFIX,jwz.3conline.com - - DOMAIN-SUFFIX,jx5m.com - - DOMAIN-SUFFIX,jxad.jx163.com - - DOMAIN-SUFFIX,jxbjt.com - - DOMAIN-SUFFIX,jxfxsw.com - - DOMAIN-SUFFIX,jxjzny.com - - DOMAIN-SUFFIX,jxlog.istreamsche.com - - DOMAIN-SUFFIX,jxlqgs.com - - DOMAIN-SUFFIX,jxxiangchu.com - - DOMAIN-SUFFIX,jyc.njxczy.com - - DOMAIN-SUFFIX,jyd.fjzdmy.com - - DOMAIN-SUFFIX,jystea.com - - DOMAIN-SUFFIX,jyz.fjtzjy.com - - DOMAIN-SUFFIX,jzkapp.com - - DOMAIN-SUFFIX,jzm81.com - - DOMAIN-SUFFIX,k.85wa.cn - - DOMAIN-SUFFIX,k.ctsywy.com - - DOMAIN-SUFFIX,k1w5.me - - DOMAIN-SUFFIX,k2team.kyiv.ua - - DOMAIN-SUFFIX,k3bos.com - - DOMAIN-SUFFIX,kafka8.com - - DOMAIN-SUFFIX,kaitongyewu.com - - DOMAIN-SUFFIX,karma.mdpcdn.com - - DOMAIN-SUFFIX,kas.keydot.net - - DOMAIN-SUFFIX,kawa11.space - - DOMAIN-SUFFIX,kbnetworkz.s3.amazonaws.com - - DOMAIN-SUFFIX,kddtri.cn - - DOMAIN-SUFFIX,kejet.com - - DOMAIN-SUFFIX,kejet.net - - DOMAIN-SUFFIX,kele4.com - - DOMAIN-SUFFIX,ker.pic2pic.site - - DOMAIN-SUFFIX,kermit.macnn.com - - DOMAIN-SUFFIX,keryt.jnservo.com - - DOMAIN-SUFFIX,ketchapp.org - - DOMAIN-SUFFIX,keydot.net - - DOMAIN-SUFFIX,keyrun.cn - - DOMAIN-SUFFIX,keyrun.com - - DOMAIN-SUFFIX,keyshot.cc - - DOMAIN-SUFFIX,keystone.mwbsys.com - - DOMAIN-SUFFIX,keyyou.net - - DOMAIN-SUFFIX,kfewaz.zh1155.com - - DOMAIN-SUFFIX,kfhuihe.net - - DOMAIN-SUFFIX,kfluoa.com - - DOMAIN-SUFFIX,kgcjgsa8.net - - DOMAIN-SUFFIX,kgmobilestat.kugou.com - - DOMAIN-SUFFIX,kguke.com - - DOMAIN-SUFFIX,kho3au7l4z.me - - DOMAIN-SUFFIX,kicnse.com - - DOMAIN-SUFFIX,kingdeecn.cn - - DOMAIN-SUFFIX,kingwam.com - - DOMAIN-SUFFIX,kio.quanliyouxi.cn - - DOMAIN-SUFFIX,kiss.blockplus.cc - - DOMAIN-SUFFIX,kjgen.com - - DOMAIN-SUFFIX,kk7kk.com - - DOMAIN-SUFFIX,kkcaicai.com - - DOMAIN-SUFFIX,kkpgv.kankan.com - - DOMAIN-SUFFIX,kkpgv2.kankan.com - - DOMAIN-SUFFIX,kld666.com - - DOMAIN-SUFFIX,kldmm.com - - DOMAIN-SUFFIX,klsdmr.com - - DOMAIN-SUFFIX,kl-toys.com - - DOMAIN-SUFFIX,klz28.com - - DOMAIN-SUFFIX,km.jianduankm.com - - DOMAIN-SUFFIX,kmadou.com - - DOMAIN-SUFFIX,kmd365.com - - DOMAIN-SUFFIX,kmwqxqh.com - - DOMAIN-SUFFIX,kn.aishake.cn - - DOMAIN-SUFFIX,kn.archrug.com - - DOMAIN-SUFFIX,kn.barnfps.com - - DOMAIN-SUFFIX,kn.bjbrtc.com - - DOMAIN-SUFFIX,kn.chapnap.com - - DOMAIN-SUFFIX,kn.chgdf.cn - - DOMAIN-SUFFIX,kn.czzdf.com - - DOMAIN-SUFFIX,kn.dyscsm.cn - - DOMAIN-SUFFIX,kn.gzcce.cn - - DOMAIN-SUFFIX,kn.jzhrty.cn - - DOMAIN-SUFFIX,kn.nykps.com - - DOMAIN-SUFFIX,kn.qhdfxkj.com - - DOMAIN-SUFFIX,kn.qqqmdq.com - - DOMAIN-SUFFIX,kn.qzdaren.com - - DOMAIN-SUFFIX,kn.ynmhg.cn - - DOMAIN-SUFFIX,kn.zstjy.com - - DOMAIN-SUFFIX,kn.zzdahan.com - - DOMAIN-SUFFIX,knet.cn - - DOMAIN-SUFFIX,knnwdyou.com - - DOMAIN-SUFFIX,kob.adxkj.com - - DOMAIN-SUFFIX,kochava.com - - DOMAIN-SUFFIX,kod4pc293.com - - DOMAIN-SUFFIX,koowo.com - - DOMAIN-SUFFIX,koukou7.com - - DOMAIN-SUFFIX,kovjo.com - - DOMAIN-SUFFIX,kqy1.com - - DOMAIN-SUFFIX,kr.sybspools.com - - DOMAIN-SUFFIX,krux.net - - DOMAIN-SUFFIX,ksdsuzhou.com - - DOMAIN-SUFFIX,ksr.juuhe.com - - DOMAIN-SUFFIX,ksrsy.com - - DOMAIN-SUFFIX,kstj.baidu.com - - DOMAIN-SUFFIX,kt220.com - - DOMAIN-SUFFIX,ktivn.uranus.sogou.com - - DOMAIN-SUFFIX,ktunions.com - - DOMAIN-SUFFIX,ktv0311.com - - DOMAIN-SUFFIX,ku63.com - - DOMAIN-SUFFIX,ku9377.com - - DOMAIN-SUFFIX,kuaigao.rrsdl.com - - DOMAIN-SUFFIX,kuaikaiapp.com - - DOMAIN-SUFFIX,kuaikan.netmon.360safe.com - - DOMAIN-SUFFIX,kuaipai666.cn - - DOMAIN-SUFFIX,kuaizip.com - - DOMAIN-SUFFIX,kualianyingxiao.cn - - DOMAIN-SUFFIX,kudifish.com - - DOMAIN-SUFFIX,kuguopush.com - - DOMAIN-SUFFIX,kumihua.com - - DOMAIN-SUFFIX,kuwoyy.com - - DOMAIN-SUFFIX,kuyic.m.gxwztv.com - - DOMAIN-SUFFIX,kuzai.cooguo.com - - DOMAIN-SUFFIX,kw.ra.icast.cn - - DOMAIN-SUFFIX,kwmsg.kuwo.cn - - DOMAIN-SUFFIX,kwurl.ucweb.com - - DOMAIN-SUFFIX,kxlogo.knet.cn - - DOMAIN-SUFFIX,kxmav2.com - - DOMAIN-SUFFIX,kxrxh.com - - DOMAIN-SUFFIX,kyad88.com - - DOMAIN-SUFFIX,kyzhecmvpiaw.com - - DOMAIN-SUFFIX,l.adiers.com - - DOMAIN-SUFFIX,l.betrad.com - - DOMAIN-SUFFIX,l.minisplat.cn - - DOMAIN-SUFFIX,l.mnjkw.cn - - DOMAIN-SUFFIX,l.supfast.net - - DOMAIN-SUFFIX,l.ujian.cc - - DOMAIN-SUFFIX,l.yidianzixun.com - - DOMAIN-SUFFIX,l1.soarfi.cn - - DOMAIN-SUFFIX,l2.soarfi.cn - - DOMAIN-SUFFIX,l9bdhcgihw.neihanw.com - - DOMAIN-SUFFIX,labs.ra.icast.cn - - DOMAIN-SUFFIX,laigame7.com - - DOMAIN-SUFFIX,laiququan.com - - DOMAIN-SUFFIX,lajizhan.org - - DOMAIN-SUFFIX,lan.btwan5.com - - DOMAIN-SUFFIX,langchars.com - - DOMAIN-SUFFIX,langjiyisheng.com - - DOMAIN-SUFFIX,lansha.tv - - DOMAIN-SUFFIX,lanxiangji.com - - DOMAIN-SUFFIX,laomaotao.net - - DOMAIN-SUFFIX,laoqu123.com - - DOMAIN-SUFFIX,lashou1000.com - - DOMAIN-SUFFIX,lb.gtimg.com - - DOMAIN-SUFFIX,lb.statsevent.com - - DOMAIN-SUFFIX,lbstatic-a.akamaihd.net - - DOMAIN-SUFFIX,lbszb.tongbu.com - - DOMAIN-SUFFIX,lc.jiathis.com - - DOMAIN-SUFFIX,lcs.dev.surepush.cn - - DOMAIN-SUFFIX,ld.mediaget.com - - DOMAIN-SUFFIX,ldpgl.code.mytanwan.com - - DOMAIN-SUFFIX,lds.lenovomm.com - - DOMAIN-SUFFIX,lds.zui.com - - DOMAIN-SUFFIX,ldy.350.com - - DOMAIN-SUFFIX,ldy.adqku.cn - - DOMAIN-SUFFIX,le4le.com - - DOMAIN-SUFFIX,leadbolt.net - - DOMAIN-SUFFIX,leadboltads.net - - DOMAIN-SUFFIX,leadboltapps.net - - DOMAIN-SUFFIX,leadboltmobile.net - - DOMAIN-SUFFIX,ledou.dl.uu.cc - - DOMAIN-SUFFIX,leeyuoxs.com - - DOMAIN-SUFFIX,legozu.com - - DOMAIN-SUFFIX,lele999.com - - DOMAIN-SUFFIX,lenzmx.com - - DOMAIN-SUFFIX,lessplay.com - - DOMAIN-SUFFIX,letv.irs01.com - - DOMAIN-SUFFIX,leztc.com - - DOMAIN-SUFFIX,lflili.com - - DOMAIN-SUFFIX,lfyuanai.com - - DOMAIN-SUFFIX,lg2.jointreport-switch.com - - DOMAIN-SUFFIX,lg4.jointreport-switch.com - - DOMAIN-SUFFIX,lhafy.com - - DOMAIN-SUFFIX,lhengilin.com - - DOMAIN-SUFFIX,lhusy.com - - DOMAIN-SUFFIX,li.anyysz.com - - DOMAIN-SUFFIX,liangao.com - - DOMAIN-SUFFIX,liangziweixg.com - - DOMAIN-SUFFIX,lib.haotv8.com - - DOMAIN-SUFFIX,liba.haotv8.com - - DOMAIN-SUFFIX,libs.tvmao.cn - - DOMAIN-SUFFIX,license.lumion3d.com - - DOMAIN-SUFFIX,license.lumion3d.net - - DOMAIN-SUFFIX,licenses.ashampoo.com - - DOMAIN-SUFFIX,licensing.tableausoftware.com - - DOMAIN-SUFFIX,life.e0575.com - - DOMAIN-SUFFIX,life.imagepix.org - - DOMAIN-SUFFIX,lightson.vpsboard.com - - DOMAIN-SUFFIX,linezing.com - - DOMAIN-SUFFIX,lingdian98.com - - DOMAIN-SUFFIX,linkbide.com - - DOMAIN-SUFFIX,linkeye.ximalaya.com - - DOMAIN-SUFFIX,linkpage.cn - - DOMAIN-SUFFIX,links.services.disqus.com - - DOMAIN-SUFFIX,linktech.cn - - DOMAIN-SUFFIX,linyao.dxsdb.com - - DOMAIN-SUFFIX,lishuanghao.com - - DOMAIN-SUFFIX,listenother.com - - DOMAIN-SUFFIX,listlog.baofeng.net - - DOMAIN-SUFFIX,liuliguo.com - - DOMAIN-SUFFIX,live.tvpot.daum.net - - DOMAIN-SUFFIX,livehapp.com - - DOMAIN-SUFFIX,livep.l.ott.video.qq.com - - DOMAIN-SUFFIX,lives.l.cp81.ott.cibntv.net - - DOMAIN-SUFFIX,lives.l.ott.video.qq.com - - DOMAIN-SUFFIX,lives.l.qq.com - - DOMAIN-SUFFIX,liveupdate.mac.sandai.net - - DOMAIN-SUFFIX,lixiangmo.com - - DOMAIN-SUFFIX,ljrtb.cn - - DOMAIN-SUFFIX,lkf1.m.sanhao3.com - - DOMAIN-SUFFIX,ll.a.hulu.com - - DOMAIN-SUFFIX,ll.gxsky.com - - DOMAIN-SUFFIX,ll.hudong.com - - DOMAIN-SUFFIX,ll.songlaoban.cn - - DOMAIN-SUFFIX,ll38.com - - DOMAIN-SUFFIX,lm.dawenxue.org - - DOMAIN-SUFFIX,lm.licenses.adobe.com - - DOMAIN-SUFFIX,lm.souid.com - - DOMAIN-SUFFIX,lm.xiashu.la - - DOMAIN-SUFFIX,lml.jfjsp.com - - DOMAIN-SUFFIX,lmlicenses.wip4.adobe.com - - DOMAIN-SUFFIX,lmwap.awtks.com - - DOMAIN-SUFFIX,lndjj.com - - DOMAIN-SUFFIX,lnk0.com - - DOMAIN-SUFFIX,lnk8z.com - - DOMAIN-SUFFIX,lnr2.com - - DOMAIN-SUFFIX,load77.exelator.com - - DOMAIN-SUFFIX,loading.baofeng5.baofeng.net - - DOMAIN-SUFFIX,loadm.exelator.com - - DOMAIN-SUFFIX,loandatec.com - - DOMAIN-SUFFIX,localnetwork.uop - - DOMAIN-SUFFIX,localytics.com - - DOMAIN-SUFFIX,location.ximalaya.com - - DOMAIN-SUFFIX,locdrop.query.yahoo.com - - DOMAIN-SUFFIX,log1.17173.com - - DOMAIN-SUFFIX,log1.molitv.cn - - DOMAIN-SUFFIX,log2.air.yoyi.com.cn - - DOMAIN-SUFFIX,log2.molitv.cn - - DOMAIN-SUFFIX,log-dmp.suishenyun.cn - - DOMAIN-SUFFIX,logonext.tv.kuyun.com - - DOMAIN-SUFFIX,logoshejishi.com - - DOMAIN-SUFFIX,logstat.caixin.com - - DOMAIN-SUFFIX,logupdate.avlyun.sec.miui.com - - DOMAIN-SUFFIX,lol.pnhfc.com - - DOMAIN-SUFFIX,loldy.jiangmg.com - - DOMAIN-SUFFIX,lomark.cn - - DOMAIN-SUFFIX,londonprivaterentals.standard.co.uk - - DOMAIN-SUFFIX,looky.hyves.org - - DOMAIN-SUFFIX,lottery.kuaiya.cn - - DOMAIN-SUFFIX,lotuseed.com - - DOMAIN-SUFFIX,lovestyl.com - - DOMAIN-SUFFIX,lovfp.com - - DOMAIN-SUFFIX,lp.jiuzhilan.com - - DOMAIN-SUFFIX,lp.startapp.com - - DOMAIN-SUFFIX,lp1901.com - - DOMAIN-SUFFIX,lpsxssm.com - - DOMAIN-SUFFIX,lqmohun.com - - DOMAIN-SUFFIX,lrswl.com - - DOMAIN-SUFFIX,ls.webmd.com - - DOMAIN-SUFFIX,lsxmg.com - - DOMAIN-SUFFIX,ltcprtc.com - - DOMAIN-SUFFIX,ltheanine.cn - - DOMAIN-SUFFIX,lthxz.cn - - DOMAIN-SUFFIX,lu.sogou.com - - DOMAIN-SUFFIX,lubosheng.cn - - DOMAIN-SUFFIX,lucting.cn - - DOMAIN-SUFFIX,lufax.com - - DOMAIN-SUFFIX,luotediao.net - - DOMAIN-SUFFIX,lvjian66.com - - DOMAIN-SUFFIX,lw1.cdmediaworld.com - - DOMAIN-SUFFIX,lw2.gamecopyworld.com - - DOMAIN-SUFFIX,lwnne.cn - - DOMAIN-SUFFIX,lwq.wangketuan.com - - DOMAIN-SUFFIX,lx167.com - - DOMAIN-SUFFIX,lxcdn.dl.files.xiaomi.net - - DOMAIN-SUFFIX,lxqcgj.com - - DOMAIN-SUFFIX,lxting.com - - DOMAIN-SUFFIX,lx-upload-log.yidianzixun.com - - DOMAIN-SUFFIX,lyaeccn.com - - DOMAIN-SUFFIX,lyapi.1391.com - - DOMAIN-SUFFIX,lycos-eu.imrworldwide.com - - DOMAIN-SUFFIX,lyhdream.com - - DOMAIN-SUFFIX,lyjk.1391.com - - DOMAIN-SUFFIX,lynndollin.com - - DOMAIN-SUFFIX,lyrymy.com - - DOMAIN-SUFFIX,lytubaobao.com - - DOMAIN-SUFFIX,lyunsd.cn - - DOMAIN-SUFFIX,lyztdz.com - - DOMAIN-SUFFIX,lz.chaelc.com - - DOMAIN-SUFFIX,lz.whafwl.com - - DOMAIN-SUFFIX,lzjycy.com - - DOMAIN-SUFFIX,lzmm8.com - - DOMAIN-SUFFIX,m.027blzs.com - - DOMAIN-SUFFIX,m.0531mnk.net - - DOMAIN-SUFFIX,m.107279.com - - DOMAIN-SUFFIX,m.118ex.cn - - DOMAIN-SUFFIX,m.1768.com - - DOMAIN-SUFFIX,m.1919388.net - - DOMAIN-SUFFIX,m.28487.net - - DOMAIN-SUFFIX,m.3987.com - - DOMAIN-SUFFIX,m.495495.com - - DOMAIN-SUFFIX,m.51xmgys.com - - DOMAIN-SUFFIX,m.52tushuo.com - - DOMAIN-SUFFIX,m.551144.com - - DOMAIN-SUFFIX,m.640640.com - - DOMAIN-SUFFIX,m.649649.com - - DOMAIN-SUFFIX,m.7180443.com - - DOMAIN-SUFFIX,m.77vcd.com - - DOMAIN-SUFFIX,m.937920.com - - DOMAIN-SUFFIX,m.abfirst.cn - - DOMAIN-SUFFIX,m.acaox.com - - DOMAIN-SUFFIX,m.achig.com - - DOMAIN-SUFFIX,m.ad.zhangyue.com - - DOMAIN-SUFFIX,m.adaog.com - - DOMAIN-SUFFIX,m.adxpop.com - - DOMAIN-SUFFIX,m.afoux.com - - DOMAIN-SUFFIX,m.anmeilai.net - - DOMAIN-SUFFIX,m.anzhuotan.com - - DOMAIN-SUFFIX,m.apxyz.com - - DOMAIN-SUFFIX,m.aqiudaohang.com - - DOMAIN-SUFFIX,m.assigned.cn - - DOMAIN-SUFFIX,m.aty.cp45.ott.cibntv.net - - DOMAIN-SUFFIX,m.aty.snmsohu.aisee.tv - - DOMAIN-SUFFIX,m.axsre.com - - DOMAIN-SUFFIX,m.baidu.com.yiqisee.cn - - DOMAIN-SUFFIX,m.baidu.com.zhiduo.org - - DOMAIN-SUFFIX,m.bailingjiankang.com - - DOMAIN-SUFFIX,m.baiyangzs.com - - DOMAIN-SUFFIX,m.bapkt.com - - DOMAIN-SUFFIX,m.bbvjs.com - - DOMAIN-SUFFIX,m.bdiae.com - - DOMAIN-SUFFIX,m.beacon.sina.com.cn - - DOMAIN-SUFFIX,m.bentengcn.com - - DOMAIN-SUFFIX,m.biquge5200.cc - - DOMAIN-SUFFIX,m.bokanedu.net - - DOMAIN-SUFFIX,m.bsnnk.com - - DOMAIN-SUFFIX,m.bss.pandora.xiaomi.com - - DOMAIN-SUFFIX,m.bvoer.com - - DOMAIN-SUFFIX,m.bvosv.com - - DOMAIN-SUFFIX,m.casbanlly.com - - DOMAIN-SUFFIX,m.cbeif.com - - DOMAIN-SUFFIX,m.ccunf.com - - DOMAIN-SUFFIX,m.cdfzcz.com - - DOMAIN-SUFFIX,m.cenrs.com - - DOMAIN-SUFFIX,m.chenhuia.com - - DOMAIN-SUFFIX,m.chexiw.com - - DOMAIN-SUFFIX,m.chfuw.com - - DOMAIN-SUFFIX,m.cjieh.com - - DOMAIN-SUFFIX,m.ckikq.com - - DOMAIN-SUFFIX,m.clkservice.youdao.com - - DOMAIN-SUFFIX,m.cocounion.com - - DOMAIN-SUFFIX,m.codlw.com - - DOMAIN-SUFFIX,m.coenr.com - - DOMAIN-SUFFIX,m.couas.com - - DOMAIN-SUFFIX,m.cqytjzgc.com - - DOMAIN-SUFFIX,m.ctsywy.com - - DOMAIN-SUFFIX,m.cudaojia.com - - DOMAIN-SUFFIX,m.cuoas.com - - DOMAIN-SUFFIX,m.cuoss.com - - DOMAIN-SUFFIX,m.daishuxy.com - - DOMAIN-SUFFIX,m.dante2007.com - - DOMAIN-SUFFIX,m.data.mob.com - - DOMAIN-SUFFIX,m.dbaiz.com - - DOMAIN-SUFFIX,m.dgaoz.com - - DOMAIN-SUFFIX,m.diogv.com - - DOMAIN-SUFFIX,m.djhhy.com - - DOMAIN-SUFFIX,m.dnfeu.com - - DOMAIN-SUFFIX,m.doodlemobile.com - - DOMAIN-SUFFIX,m.dsjre.com - - DOMAIN-SUFFIX,m.du1du.org - - DOMAIN-SUFFIX,m.duias.com - - DOMAIN-SUFFIX,m.duobao999.com - - DOMAIN-SUFFIX,m.dxmci.com - - DOMAIN-SUFFIX,m.edo5.com - - DOMAIN-SUFFIX,m.ee-skin.com - - DOMAIN-SUFFIX,m.ee-vip.net - - DOMAIN-SUFFIX,m.efeiy.com - - DOMAIN-SUFFIX,m.ehxyz.com - - DOMAIN-SUFFIX,m.emgwq.com - - DOMAIN-SUFFIX,m.enjuk.com - - DOMAIN-SUFFIX,m.ennmt.com - - DOMAIN-SUFFIX,m.fbaix.com - - DOMAIN-SUFFIX,m.fbaot.com - - DOMAIN-SUFFIX,m.fcaot.com - - DOMAIN-SUFFIX,m.fcuit.com - - DOMAIN-SUFFIX,m.fecjf.cn - - DOMAIN-SUFFIX,m.feirs.com - - DOMAIN-SUFFIX,m.fengwanwl.com - - DOMAIN-SUFFIX,m.fenrs.com - - DOMAIN-SUFFIX,m.fhxsw.org - - DOMAIN-SUFFIX,m.fimky.com - - DOMAIN-SUFFIX,m.fkkse.com - - DOMAIN-SUFFIX,m.fkogs.com - - DOMAIN-SUFFIX,m.focuscat.com - - DOMAIN-SUFFIX,m.fouas.com - - DOMAIN-SUFFIX,m.foumm.com - - DOMAIN-SUFFIX,m.fstaw.com - - DOMAIN-SUFFIX,m.fwjoi.com - - DOMAIN-SUFFIX,m.fxbga.com - - DOMAIN-SUFFIX,m.fzyda.com - - DOMAIN-SUFFIX,m.gameyun907.net - - DOMAIN-SUFFIX,m.ganrs.com - - DOMAIN-SUFFIX,m.gbieg.com - - DOMAIN-SUFFIX,m.gcaij.com - - DOMAIN-SUFFIX,m.gcheg.com - - DOMAIN-SUFFIX,m.gdt.vip1790.cn - - DOMAIN-SUFFIX,m.gglay.com - - DOMAIN-SUFFIX,m.gtiou.com - - DOMAIN-SUFFIX,m.gtnde.com - - DOMAIN-SUFFIX,m.guaas.com - - DOMAIN-SUFFIX,m.guanren11.com - - DOMAIN-SUFFIX,m.guanren5.com - - DOMAIN-SUFFIX,m.guanren6.com - - DOMAIN-SUFFIX,m.guanren9.com - - DOMAIN-SUFFIX,m.guifei99.com - - DOMAIN-SUFFIX,m.gujinyue.com - - DOMAIN-SUFFIX,m.gwdqp.com - - DOMAIN-SUFFIX,m.gxkyl.com - - DOMAIN-SUFFIX,m.haowj.com.cn - - DOMAIN-SUFFIX,m.harbinbaojia.net - - DOMAIN-SUFFIX,m.hellomingpian.com - - DOMAIN-SUFFIX,m.heygugu.com - - DOMAIN-SUFFIX,m.hhllyt.com - - DOMAIN-SUFFIX,m.hissq.com - - DOMAIN-SUFFIX,m.hk7799.net - - DOMAIN-SUFFIX,m.hkmqp.com - - DOMAIN-SUFFIX,m.hmzsfmjc.com - - DOMAIN-SUFFIX,m.hogyp.com - - DOMAIN-SUFFIX,m.hot-mob.com - - DOMAIN-SUFFIX,m.hpfjy.com - - DOMAIN-SUFFIX,m.hpzyl.com - - DOMAIN-SUFFIX,m.hsbkr.com - - DOMAIN-SUFFIX,m.htper.com - - DOMAIN-SUFFIX,m.huanyuexpress.com - - DOMAIN-SUFFIX,m.huyulh.com - - DOMAIN-SUFFIX,m.hyzui.com - - DOMAIN-SUFFIX,m.icyrd.com - - DOMAIN-SUFFIX,m.ienkdaged.cn - - DOMAIN-SUFFIX,m.ienkdago.cn - - DOMAIN-SUFFIX,m.infvb.com - - DOMAIN-SUFFIX,m.irauz.com - - DOMAIN-SUFFIX,m.irkuj.com - - DOMAIN-SUFFIX,m.iruad.com - - DOMAIN-SUFFIX,m.ishowms.com - - DOMAIN-SUFFIX,m.jcwwxn.com - - DOMAIN-SUFFIX,m.jdaot.com - - DOMAIN-SUFFIX,m.jgkto.com - - DOMAIN-SUFFIX,m.jhcgood.com - - DOMAIN-SUFFIX,m.jieyixiu.com - - DOMAIN-SUFFIX,m.jiirz.com - - DOMAIN-SUFFIX,m.jinchaoyu.com - - DOMAIN-SUFFIX,m.jioeg.com - - DOMAIN-SUFFIX,m.jkert.com - - DOMAIN-SUFFIX,m.jlkja.com - - DOMAIN-SUFFIX,m.jltdbyq.com - - DOMAIN-SUFFIX,m.joyxv.com - - DOMAIN-SUFFIX,m.juyzr.com - - DOMAIN-SUFFIX,m.jwiyr.com - - DOMAIN-SUFFIX,m.jyhwt.cn - - DOMAIN-SUFFIX,m.kcooy.com - - DOMAIN-SUFFIX,m.kejet.net - - DOMAIN-SUFFIX,m.kewro.com - - DOMAIN-SUFFIX,m.khuoy.com - - DOMAIN-SUFFIX,m.kjfhe.com - - DOMAIN-SUFFIX,m.kjhfy.com - - DOMAIN-SUFFIX,m.kl6636.net - - DOMAIN-SUFFIX,m.ksttwz.com - - DOMAIN-SUFFIX,m.kubiqq.com - - DOMAIN-SUFFIX,m.kwjkd.com - - DOMAIN-SUFFIX,m.kxhie.com - - DOMAIN-SUFFIX,m.laigame7.net - - DOMAIN-SUFFIX,m.lancedu.com - - DOMAIN-SUFFIX,m.laojiayoufang.com - - DOMAIN-SUFFIX,m.laoqu123.com - - DOMAIN-SUFFIX,m.lfdydk.com - - DOMAIN-SUFFIX,m.lovezhishou.com - - DOMAIN-SUFFIX,m.lusrg.cn - - DOMAIN-SUFFIX,m.lyjz001.com - - DOMAIN-SUFFIX,m.lzida.com - - DOMAIN-SUFFIX,m.lzytt.com - - DOMAIN-SUFFIX,m.maopuzw.com - - DOMAIN-SUFFIX,m.mgogo.com - - DOMAIN-SUFFIX,m.mgsue.cn - - DOMAIN-SUFFIX,m.miaoxinqipei.com - - DOMAIN-SUFFIX,m.mightiger.net - - DOMAIN-SUFFIX,m.miiuv.com - - DOMAIN-SUFFIX,m.miupp.com - - DOMAIN-SUFFIX,m.mmkvi.com - - DOMAIN-SUFFIX,m.mouaa.com - - DOMAIN-SUFFIX,m.mqgpo.com - - DOMAIN-SUFFIX,m.mrtuo.com - - DOMAIN-SUFFIX,m.mtuoa.com - - DOMAIN-SUFFIX,m.mushizhubao.com - - DOMAIN-SUFFIX,m.mxguan.com - - DOMAIN-SUFFIX,m.nduop.com - - DOMAIN-SUFFIX,m.neijh.com - - DOMAIN-SUFFIX,m.nejup.com - - DOMAIN-SUFFIX,m.nernv.com - - DOMAIN-SUFFIX,m.nfkos.com - - DOMAIN-SUFFIX,m.niegg.com - - DOMAIN-SUFFIX,m.nmtouzi.com - - DOMAIN-SUFFIX,m.nnfiy.com - - DOMAIN-SUFFIX,m.nouaa.com - - DOMAIN-SUFFIX,m.nthtcs.com - - DOMAIN-SUFFIX,m.ntxiangtai.com - - DOMAIN-SUFFIX,m.nuxyz.cn - - DOMAIN-SUFFIX,m.nwxzs.com - - DOMAIN-SUFFIX,m.nxypz.com - - DOMAIN-SUFFIX,m.oesnw.com - - DOMAIN-SUFFIX,m.opqsr.com - - DOMAIN-SUFFIX,m.osndy.com - - DOMAIN-SUFFIX,m.ourlj.com - - DOMAIN-SUFFIX,m.oyrim.com - - DOMAIN-SUFFIX,m.panda.voiceads.cn - - DOMAIN-SUFFIX,m.pbino.com - - DOMAIN-SUFFIX,m.phonthing.com - - DOMAIN-SUFFIX,m.picbr.com - - DOMAIN-SUFFIX,m.pieaa.com - - DOMAIN-SUFFIX,m.plerv.com - - DOMAIN-SUFFIX,m.pomkl.com - - DOMAIN-SUFFIX,m.poonscn.com - - DOMAIN-SUFFIX,m.pougg.com - - DOMAIN-SUFFIX,m.prazpf.cn - - DOMAIN-SUFFIX,m.pubbirdf.com - - DOMAIN-SUFFIX,m.puooi.com - - DOMAIN-SUFFIX,m.pwjhg.com - - DOMAIN-SUFFIX,m.pyerc.com - - DOMAIN-SUFFIX,m.qcw.com - - DOMAIN-SUFFIX,m.qhuik.com - - DOMAIN-SUFFIX,m.qianka.com - - DOMAIN-SUFFIX,m.qingzhencai.net - - DOMAIN-SUFFIX,m.qiyunmuye.com - - DOMAIN-SUFFIX,m.qsove.com - - DOMAIN-SUFFIX,m.qulishi.com - - DOMAIN-SUFFIX,m.qusub.com - - DOMAIN-SUFFIX,m.qvxyz.com - - DOMAIN-SUFFIX,m.rhcapass.com - - DOMAIN-SUFFIX,m.ricpt.com - - DOMAIN-SUFFIX,m.rmuqvq.cn - - DOMAIN-SUFFIX,m.rmwdn.com - - DOMAIN-SUFFIX,m.romgv.com - - DOMAIN-SUFFIX,m.rrsdl.com - - DOMAIN-SUFFIX,m.rwganw.cn - - DOMAIN-SUFFIX,m.sanitwealth.com - - DOMAIN-SUFFIX,m.sanjiangge.com - - DOMAIN-SUFFIX,m.sbenx.com - - DOMAIN-SUFFIX,m.sbinx.com - - DOMAIN-SUFFIX,m.sewxi.com - - DOMAIN-SUFFIX,m.shenyunkeji.com - - DOMAIN-SUFFIX,m.simba.taobao.com - - DOMAIN-SUFFIX,m.sjaidu.com - - DOMAIN-SUFFIX,m.sjuqc.com - - DOMAIN-SUFFIX,m.sjzhushou.com - - DOMAIN-SUFFIX,m.smsksx.com - - DOMAIN-SUFFIX,m.sosjyx.com - - DOMAIN-SUFFIX,m.srrux.com - - DOMAIN-SUFFIX,m.suehy.com - - DOMAIN-SUFFIX,m.sxxca.com - - DOMAIN-SUFFIX,m.symaa.cn - - DOMAIN-SUFFIX,m.symab.cn - - DOMAIN-SUFFIX,m.symac.cn - - DOMAIN-SUFFIX,m.symad.cn - - DOMAIN-SUFFIX,m.symag.cn - - DOMAIN-SUFFIX,m.symaj.cn - - DOMAIN-SUFFIX,m.szqifu.com - - DOMAIN-SUFFIX,m.tansuotv.com - - DOMAIN-SUFFIX,m.tcksbz888.com - - DOMAIN-SUFFIX,m.tiantianedu.net - - DOMAIN-SUFFIX,m.tiaopimiao.net - - DOMAIN-SUFFIX,m.tick0.com - - DOMAIN-SUFFIX,m.tiojk.com - - DOMAIN-SUFFIX,m.tuopp.com - - DOMAIN-SUFFIX,m.twldmx.com - - DOMAIN-SUFFIX,m.txtxr.com - - DOMAIN-SUFFIX,m.uc123.com - - DOMAIN-SUFFIX,m.uczzd.cn - - DOMAIN-SUFFIX,m.ueram.com - - DOMAIN-SUFFIX,m.uissm.com - - DOMAIN-SUFFIX,m.vaxyz.com - - DOMAIN-SUFFIX,m.vbaou.com - - DOMAIN-SUFFIX,m.vbieu.com - - DOMAIN-SUFFIX,m.vbinu.com - - DOMAIN-SUFFIX,m.verpt.com - - DOMAIN-SUFFIX,m.vichc.com - - DOMAIN-SUFFIX,m.vouky.com - - DOMAIN-SUFFIX,m.vpon.com - - DOMAIN-SUFFIX,m.vsxet.com - - DOMAIN-SUFFIX,m.wcjup.com - - DOMAIN-SUFFIX,m.weboser.com - - DOMAIN-SUFFIX,m.weixingshexiangji.net - - DOMAIN-SUFFIX,m.wervp.com - - DOMAIN-SUFFIX,m.wgewj.cn - - DOMAIN-SUFFIX,m.wikigifth.com - - DOMAIN-SUFFIX,m.wjhehaofc.com - - DOMAIN-SUFFIX,m.wkjhd.com - - DOMAIN-SUFFIX,m.wnxcg.com - - DOMAIN-SUFFIX,m.wonwg.com - - DOMAIN-SUFFIX,m.wooboo.com.cn - - DOMAIN-SUFFIX,m.wrating.com - - DOMAIN-SUFFIX,m.wshufa.com - - DOMAIN-SUFFIX,m.wsxxu.com - - DOMAIN-SUFFIX,m.wuqutu.com - - DOMAIN-SUFFIX,m.wxhh678.com - - DOMAIN-SUFFIX,m.xcy8.com - - DOMAIN-SUFFIX,m.xdkje.com - - DOMAIN-SUFFIX,m.xeihy.com - - DOMAIN-SUFFIX,m.xetvb.com - - DOMAIN-SUFFIX,m.xhaiu.com - - DOMAIN-SUFFIX,m.xiangchim0.com - - DOMAIN-SUFFIX,m.xikdn.com - - DOMAIN-SUFFIX,m.xingxd.com - - DOMAIN-SUFFIX,m.xkqpco.com - - DOMAIN-SUFFIX,m.xkqpco.com.com - - DOMAIN-SUFFIX,m.xlsschina15.net - - DOMAIN-SUFFIX,m.xmgysweb.com - - DOMAIN-SUFFIX,m.xpjis.com - - DOMAIN-SUFFIX,m.xxkio.com - - DOMAIN-SUFFIX,m.yalayi.com - - DOMAIN-SUFFIX,m.yangjingbang.net - - DOMAIN-SUFFIX,m.yicang8.com - - DOMAIN-SUFFIX,m.yingchengtou.com - - DOMAIN-SUFFIX,m.ynnke.com - - DOMAIN-SUFFIX,m.yoiur.com - - DOMAIN-SUFFIX,m.yooli.com - - DOMAIN-SUFFIX,m.youweiprint.com - - DOMAIN-SUFFIX,m.yoyi.com.cn - - DOMAIN-SUFFIX,m.ysdhe.com - - DOMAIN-SUFFIX,m.yuandajiayuan.com - - DOMAIN-SUFFIX,m.yuxyz.com - - DOMAIN-SUFFIX,m.ywbwsm.com - - DOMAIN-SUFFIX,m.yyeks.com - - DOMAIN-SUFFIX,m.yyjhf.com - - DOMAIN-SUFFIX,m.yzjlsb.com - - DOMAIN-SUFFIX,m.zabxb.com - - DOMAIN-SUFFIX,m.zaoss.com - - DOMAIN-SUFFIX,m.zeiaa.com - - DOMAIN-SUFFIX,m.zenffs.cn - - DOMAIN-SUFFIX,m.zenwq.com - - DOMAIN-SUFFIX,m.zhuyuanp.club - - DOMAIN-SUFFIX,m.zhuyuanp.shop - - DOMAIN-SUFFIX,m.zhuyuanp.top - - DOMAIN-SUFFIX,m.zkwsdf.com - - DOMAIN-SUFFIX,m.zougg.com - - DOMAIN-SUFFIX,m.zuopp.com - - DOMAIN-SUFFIX,m1.baidu.com - - DOMAIN-SUFFIX,m1.daumcdn.net - - DOMAIN-SUFFIX,m1.mgogo.com - - DOMAIN-SUFFIX,m1.xcy8.com - - DOMAIN-SUFFIX,m2.qinsx.cn - - DOMAIN-SUFFIX,m3bnqqqw.com - - DOMAIN-SUFFIX,m5.apk.67mo.com - - DOMAIN-SUFFIX,m9.xcdf.cn - - DOMAIN-SUFFIX,m9.xcy8.com - - DOMAIN-SUFFIX,ma.baidu.com - - DOMAIN-SUFFIX,ma1.meishij.net - - DOMAIN-SUFFIX,ma2.meishij.net - - DOMAIN-SUFFIX,maccms.tan5858.com - - DOMAIN-SUFFIX,mackeeper.com - - DOMAIN-SUFFIX,macplatform.wondershare.com - - DOMAIN-SUFFIX,mad.kuuad.com - - DOMAIN-SUFFIX,mad.m.maxthon.cn - - DOMAIN-SUFFIX,m-adash.m.taobao.com - - DOMAIN-SUFFIX,madhouse.cn - - DOMAIN-SUFFIX,madmini.com - - DOMAIN-SUFFIX,mads.amazon.com - - DOMAIN-SUFFIX,mads.aol.com - - DOMAIN-SUFFIX,mads.dailymail.co.uk - - DOMAIN-SUFFIX,madserving.com - - DOMAIN-SUFFIX,magicwindow.cn - - DOMAIN-SUFFIX,magnetic.t.domdex.com - - DOMAIN-SUFFIX,maibahe300cc.com - - DOMAIN-SUFFIX,main.exdynsrv.com - - DOMAIN-SUFFIX,main.exoclick.com - - DOMAIN-SUFFIX,mainbx.com - - DOMAIN-SUFFIX,maipinshangmao.com - - DOMAIN-SUFFIX,mairuan.cn - - DOMAIN-SUFFIX,mairuan.com - - DOMAIN-SUFFIX,mairuan.com.cn - - DOMAIN-SUFFIX,mairuan.net - - DOMAIN-SUFFIX,mairuanwang.com - - DOMAIN-SUFFIX,maisoncherry.com - - DOMAIN-SUFFIX,makeding.com - - DOMAIN-SUFFIX,malacca.inveno.com - - DOMAIN-SUFFIX,manage.wdfans.cn - - DOMAIN-SUFFIX,maomaotang.com - - DOMAIN-SUFFIX,map.dxpmedia.com - - DOMAIN-SUFFIX,map.media6degrees.com - - DOMAIN-SUFFIX,mapping.yoyi.com.cn - - DOMAIN-SUFFIX,market.178.com - - DOMAIN-SUFFIX,market.21cn.com - - DOMAIN-SUFFIX,market.52pk.com - - DOMAIN-SUFFIX,market.duowan.com - - DOMAIN-SUFFIX,marketgid.com - - DOMAIN-SUFFIX,marketing.888.com - - DOMAIN-SUFFIX,marketing.etouch.cn - - DOMAIN-SUFFIX,marketingsolutions.yahoo.com - - DOMAIN-SUFFIX,marketo.com - - DOMAIN-SUFFIX,marketo.net - - DOMAIN-SUFFIX,masdk.3g.qq.com - - DOMAIN-SUFFIX,maskbaby.com.cn - - DOMAIN-SUFFIX,mass.mall044.com - - DOMAIN-SUFFIX,master.wap.dphub.sandai.net - - DOMAIN-SUFFIX,match.adsby.bidtheatre.com - - DOMAIN-SUFFIX,match.c8.net.ua - - DOMAIN-SUFFIX,match.p4p.1688.com - - DOMAIN-SUFFIX,match.prod.bidr.io - - DOMAIN-SUFFIX,match.rundsp.com - - DOMAIN-SUFFIX,matching.targeterra.com - - DOMAIN-SUFFIX,material.istreamsche.com - - DOMAIN-SUFFIX,material.mtty.xin - - DOMAIN-SUFFIX,mathtag.com - - DOMAIN-SUFFIX,mathtype.cn - - DOMAIN-SUFFIX,maw.wnbfw.com - - DOMAIN-SUFFIX,maxwebsearch.com - - DOMAIN-SUFFIX,maysunmedia.com - - DOMAIN-SUFFIX,mb.hockeybuzz.com - - DOMAIN-SUFFIX,mb.yidianzixun.com - - DOMAIN-SUFFIX,mb.zam.com - - DOMAIN-SUFFIX,mbai.cn - - DOMAIN-SUFFIX,mbd.weathercn.com - - DOMAIN-SUFFIX,mbrowser.news.haosou.com - - DOMAIN-SUFFIX,mbrowser.news.so.com - - DOMAIN-SUFFIX,mbs.weathercn.com - - DOMAIN-SUFFIX,mc.hujiang.com - - DOMAIN-SUFFIX,mc.yandex.ru - - DOMAIN-SUFFIX,mclick.simba.taobao.com - - DOMAIN-SUFFIX,mcore.vcgame.cn - - DOMAIN-SUFFIX,md.1drj.com - - DOMAIN-SUFFIX,md.he9630.com - - DOMAIN-SUFFIX,md.sh5e.com - - DOMAIN-SUFFIX,md0z4dh.com - - DOMAIN-SUFFIX,mdc.meitustat.com - - DOMAIN-SUFFIX,mdotm.com - - DOMAIN-SUFFIX,mdpjnppsbjv.bid - - DOMAIN-SUFFIX,mdrecv.app.cntvwb.cn - - DOMAIN-SUFFIX,me.afp.chinanews.com - - DOMAIN-SUFFIX,mealsandsteals.sandiego6.com - - DOMAIN-SUFFIX,me-cdn.effectivemeasure.net - - DOMAIN-SUFFIX,med.heyzap.com - - DOMAIN-SUFFIX,medal.blog.csdn.net - - DOMAIN-SUFFIX,media.2011.8684.com - - DOMAIN-SUFFIX,media.cheshi-img.com - - DOMAIN-SUFFIX,media.fastclick.net - - DOMAIN-SUFFIX,media.jointreport-switch.com - - DOMAIN-SUFFIX,media.tianjimedia.com - - DOMAIN-SUFFIX,media.trafficfactory.biz - - DOMAIN-SUFFIX,media.trafficjunky.net - - DOMAIN-SUFFIX,media8.cn - - DOMAIN-SUFFIX,mediamgr.ugo.com - - DOMAIN-SUFFIX,mediaplex.com - - DOMAIN-SUFFIX,mediapro.pro.cn - - DOMAIN-SUFFIX,media-static.jointreport-switch.com - - DOMAIN-SUFFIX,mediav.com - - DOMAIN-SUFFIX,medrx.telstra.com.au - - DOMAIN-SUFFIX,megajoy.com - - DOMAIN-SUFFIX,meimeidaren.com - - DOMAIN-SUFFIX,meiti1.net - - DOMAIN-SUFFIX,meitubeauty.meitudata.com - - DOMAIN-SUFFIX,meitumq.com - - DOMAIN-SUFFIX,menghuanzs.com - - DOMAIN-SUFFIX,mengmengdas.com - - DOMAIN-SUFFIX,mengyuanwei.com - - DOMAIN-SUFFIX,message.meitu.com - - DOMAIN-SUFFIX,metok.sys.miui.com - - DOMAIN-SUFFIX,metrics.cnn.com - - DOMAIN-SUFFIX,mfan.iclick.com.cn - - DOMAIN-SUFFIX,mfm.video.qq.com - - DOMAIN-SUFFIX,mfp.deliver.ifeng.com - - DOMAIN-SUFFIX,mfsr.lenovomm.com - - DOMAIN-SUFFIX,mg.5pk - - DOMAIN-SUFFIX,mg.games.sina.com.cn - - DOMAIN-SUFFIX,mg.yadro.ru - - DOMAIN-SUFFIX,mgid.com - - DOMAIN-SUFFIX,mgldzcls.com - - DOMAIN-SUFFIX,mgogo.com - - DOMAIN-SUFFIX,mgwcn.com - - DOMAIN-SUFFIX,mgwl668.com - - DOMAIN-SUFFIX,mhd.1391.com - - DOMAIN-SUFFIX,mhdpay.1391.com - - DOMAIN-SUFFIX,mhdtestks3.1391.com - - DOMAIN-SUFFIX,mhdufile.1391.com - - DOMAIN-SUFFIX,mhjk.1391.com - - DOMAIN-SUFFIX,mhuodong.elong.com - - DOMAIN-SUFFIX,miam4.cn - - DOMAIN-SUFFIX,miaobeichina.com - - DOMAIN-SUFFIX,miaozhen.com - - DOMAIN-SUFFIX,mibook-10006092.cos.myqcloud.com - - DOMAIN-SUFFIX,microad-cn.com - - DOMAIN-SUFFIX,mid.houyi.baofeng.net - - DOMAIN-SUFFIX,midas.rong360.com - - DOMAIN-SUFFIX,midinfo.baofeng.com - - DOMAIN-SUFFIX,mie99.net - - DOMAIN-SUFFIX,migc.g.mi.com - - DOMAIN-SUFFIX,migcreport.g.mi.com - - DOMAIN-SUFFIX,migrate.driveapi.micloud.xiaomi.net - - DOMAIN-SUFFIX,migu.kssws.ks-cdn.com - - DOMAIN-SUFFIX,mihui.com - - DOMAIN-SUFFIX,miidi.net - - DOMAIN-SUFFIX,mijifen.com - - DOMAIN-SUFFIX,milk.yesky.com.cn - - DOMAIN-SUFFIX,millennialmedia.com - - DOMAIN-SUFFIX,millwardbrownacsr.com - - DOMAIN-SUFFIX,mimg.126.net - - DOMAIN-SUFFIX,mimg.7791.com.cn - - DOMAIN-SUFFIX,mindmanager.cc - - DOMAIN-SUFFIX,mindmapper.cc - - DOMAIN-SUFFIX,minesage.com - - DOMAIN-SUFFIX,minfo.wps.cn - - DOMAIN-SUFFIX,mingxianshanghang.cn - - DOMAIN-SUFFIX,mingysh.com - - DOMAIN-SUFFIX,mini.cpc.sogou.com - - DOMAIN-SUFFIX,mini.eastday.com - - DOMAIN-SUFFIX,mini.hao123.com - - DOMAIN-SUFFIX,mini.jijiplayer.com - - DOMAIN-SUFFIX,mini2015.qq.com - - DOMAIN-SUFFIX,minidcsc.kugou.com - - DOMAIN-SUFFIX,minipage.2345.com - - DOMAIN-SUFFIX,minisite.vidown.cn - - DOMAIN-SUFFIX,minisplat.cn - - DOMAIN-SUFFIX,miniye.xjts.cn - - DOMAIN-SUFFIX,mip.yuelvxing.com - - DOMAIN-SUFFIX,mipcache.bdstatic.com - - DOMAIN-SUFFIX,mipujia.com - - DOMAIN-SUFFIX,mis.g.mi.com - - DOMAIN-SUFFIX,miui.hdfdm.com - - DOMAIN-SUFFIX,miui.hftaili.com - - DOMAIN-SUFFIX,mivideo.g.mi.com - - DOMAIN-SUFFIX,mj70.cn - - DOMAIN-SUFFIX,mjs.csyymp4.com - - DOMAIN-SUFFIX,mkitgfs.com - - DOMAIN-SUFFIX,mlb.did.ijinshan.com - - DOMAIN-SUFFIX,mlgrrqymdsyk.com - - DOMAIN-SUFFIX,mlnbike.com - - DOMAIN-SUFFIX,mlog.aipai.com - - DOMAIN-SUFFIX,mlog.hiido.com - - DOMAIN-SUFFIX,mlog.m1905.cn - - DOMAIN-SUFFIX,mlog.search.xiaomi.net - - DOMAIN-SUFFIX,mlt01.com - - DOMAIN-SUFFIX,mm.2436.cn - - DOMAIN-SUFFIX,mm.anqu.com - - DOMAIN-SUFFIX,mm.jgchq.com - - DOMAIN-SUFFIX,mm.moquanad.com - - DOMAIN-SUFFIX,mmcc.yxlady.com - - DOMAIN-SUFFIX,mmg.aty.cp45.ott.cibntv.net - - DOMAIN-SUFFIX,mmg.aty.snmsohu.aisee.tv - - DOMAIN-SUFFIX,mng-ads.com - - DOMAIN-SUFFIX,mnkan.com - - DOMAIN-SUFFIX,mnwan.com - - DOMAIN-SUFFIX,mnxtu.com - - DOMAIN-SUFFIX,mo.haloapps.cn - - DOMAIN-SUFFIX,mo.kugou.com - - DOMAIN-SUFFIX,mo.res.wpscdn.cn - - DOMAIN-SUFFIX,mo.test.haloapps.com - - DOMAIN-SUFFIX,moad.cn - - DOMAIN-SUFFIX,moatads.com - - DOMAIN-SUFFIX,mob.huimee.net - - DOMAIN-SUFFIX,mobad.ijinshan.com - - DOMAIN-SUFFIX,mobadme.jp - - DOMAIN-SUFFIX,mobclix.com - - DOMAIN-SUFFIX,mobfox.com - - DOMAIN-SUFFIX,mobgi.com - - DOMAIN-SUFFIX,mobilead.kuwo.cn - - DOMAIN-SUFFIX,mobileads.google.com - - DOMAIN-SUFFIX,mobileads.msn.com - - DOMAIN-SUFFIX,mobileapptracking.com - - DOMAIN-SUFFIX,mobiledissector.com - - DOMAIN-SUFFIX,mobilelog.kugou.com - - DOMAIN-SUFFIX,mobile-pubt.ele.me - - DOMAIN-SUFFIX,mobile-service.segment.com - - DOMAIN-SUFFIX,mobilityware.com - - DOMAIN-SUFFIX,mobiorg8.com - - DOMAIN-SUFFIX,mobisage.cn - - DOMAIN-SUFFIX,mobvista.com - - DOMAIN-SUFFIX,mohecm.com - - DOMAIN-SUFFIX,moka.inte.sogoucdn.com - - DOMAIN-SUFFIX,mon.xtgreat.com - - DOMAIN-SUFFIX,monero.how - - DOMAIN-SUFFIX,money.qz828.com - - DOMAIN-SUFFIX,monitor.uu.qq.com - - DOMAIN-SUFFIX,moodoocrv.com.cn - - DOMAIN-SUFFIX,moogos.com - - DOMAIN-SUFFIX,mookie1.com - - DOMAIN-SUFFIX,moons.66bhy.com - - DOMAIN-SUFFIX,moonwish.com.cn - - DOMAIN-SUFFIX,mopub.com - - DOMAIN-SUFFIX,moquanad.com - - DOMAIN-SUFFIX,moren-1252794300.file.myqcloud.com - - DOMAIN-SUFFIX,mosa86.com - - DOMAIN-SUFFIX,mostat.wps.cn - - DOMAIN-SUFFIX,motohelpr.com - - DOMAIN-SUFFIX,motu.p4p.sina.com.cn - - DOMAIN-SUFFIX,motu.pagechoice.net - - DOMAIN-SUFFIX,mou.niu.xunlei.com - - DOMAIN-SUFFIX,moupdate10332052.wps.cn - - DOMAIN-SUFFIX,moutaihotel.cn - - DOMAIN-SUFFIX,movie.miaiche.cn - - DOMAIN-SUFFIX,mpb1.iteye.com - - DOMAIN-SUFFIX,mpb2.iteye.com - - DOMAIN-SUFFIX,mpp.vindicosuite.com - - DOMAIN-SUFFIX,mpro.baidu.com - - DOMAIN-SUFFIX,mps.nbcuni.com - - DOMAIN-SUFFIX,mps.weekslw.com - - DOMAIN-SUFFIX,mpush.cn - - DOMAIN-SUFFIX,mpzw.com - - DOMAIN-SUFFIX,mqq.zgdmsj.cn - - DOMAIN-SUFFIX,mqqad.cs0309.html5.qq.com - - DOMAIN-SUFFIX,mqqad.html5.qq.com - - DOMAIN-SUFFIX,mqqadr.reader.qq.com - - DOMAIN-SUFFIX,mrelko.com - - DOMAIN-SUFFIX,mrksys.com - - DOMAIN-SUFFIX,ms.awqsaged.cn - - DOMAIN-SUFFIX,ms.cmcm.com - - DOMAIN-SUFFIX,ms.cnczjy.com - - DOMAIN-SUFFIX,ms.continuedsys.cn - - DOMAIN-SUFFIX,ms.ienkdaccessible.cn - - DOMAIN-SUFFIX,ms.ienkdaccessory.cn - - DOMAIN-SUFFIX,ms.jyhwt.cn - - DOMAIN-SUFFIX,ms.myyage.com - - DOMAIN-SUFFIX,ms.vipstatic.com - - DOMAIN-SUFFIX,msads.net - - DOMAIN-SUFFIX,mscimg.com - - DOMAIN-SUFFIX,msclick2.kuwo.cn - - DOMAIN-SUFFIX,msg.mobile.kugou.com - - DOMAIN-SUFFIX,msg.ptqy.gitv.tv - - DOMAIN-SUFFIX,msg.push.51y5.net - - DOMAIN-SUFFIX,mshow.fang.com - - DOMAIN-SUFFIX,msite.baidu.com - - DOMAIN-SUFFIX,msltzer.cn - - DOMAIN-SUFFIX,msn.wrating.com - - DOMAIN-SUFFIX,msnclick.wrating.com - - DOMAIN-SUFFIX,msphoneclick.kuwo.cn - - DOMAIN-SUFFIX,mssp.baidu.com - - DOMAIN-SUFFIX,mstat.zol.com.cn - - DOMAIN-SUFFIX,mstzym.com - - DOMAIN-SUFFIX,msypr.com - - DOMAIN-SUFFIX,mti.35kds.com - - DOMAIN-SUFFIX,mtj.baidu.com - - DOMAIN-SUFFIX,mtl.ttsqgs.com - - DOMAIN-SUFFIX,mtrace.qq.com - - DOMAIN-SUFFIX,mtty-cdn.mtty.xin - - DOMAIN-SUFFIX,mtxsk.com - - DOMAIN-SUFFIX,mubite.cn - - DOMAIN-SUFFIX,munchkin.marketo.net - - DOMAIN-SUFFIX,musik-mp3.info - - DOMAIN-SUFFIX,mvads.kugou.com - - DOMAIN-SUFFIX,mvip.zhuba8.com - - DOMAIN-SUFFIX,mwa.xingyimin.com - - DOMAIN-SUFFIX,mwlucuvbyrff.com - - DOMAIN-SUFFIX,mxmrt.com - - DOMAIN-SUFFIX,mxpnl.com - - DOMAIN-SUFFIX,mxvp-ad-config-prod-1.zenmxapps.com - - DOMAIN-SUFFIX,mxvp-feature-toggle-prod-1.zenmxapps.com - - DOMAIN-SUFFIX,my.mobfox.com - - DOMAIN-SUFFIX,my1fc.m.b5200.net - - DOMAIN-SUFFIX,my1fimg.m.b5200.net - - DOMAIN-SUFFIX,myad.toocle.com - - DOMAIN-SUFFIX,mycleanmymac.com - - DOMAIN-SUFFIX,mydas.mobi - - DOMAIN-SUFFIX,mydisplay.ctfile.com - - DOMAIN-SUFFIX,myjsym.zichenit.com - - DOMAIN-SUFFIX,mymm.zichenit.com - - DOMAIN-SUFFIX,mytanwan.com - - DOMAIN-SUFFIX,mytzdhz.cn - - DOMAIN-SUFFIX,myycrw.com - - DOMAIN-SUFFIX,myzk1.com - - DOMAIN-SUFFIX,myzwqwe12.com - - DOMAIN-SUFFIX,mzy2014.com - - DOMAIN-SUFFIX,n.a.mosenni.com - - DOMAIN-SUFFIX,n.ads3-adnow.com - - DOMAIN-SUFFIX,n.amoad.com - - DOMAIN-SUFFIX,n.cosbot.cn - - DOMAIN-SUFFIX,n.gemini.yahoo.com - - DOMAIN-SUFFIX,n.ma.social-touch.com - - DOMAIN-SUFFIX,n.wjr1x.cn - - DOMAIN-SUFFIX,n.yfi8.com - - DOMAIN-SUFFIX,n.zqqf0.cn - - DOMAIN-SUFFIX,na1r.services.adobe.com - - DOMAIN-SUFFIX,na2m-pr.licenses.adobe.com - - DOMAIN-SUFFIX,nai.cpxkvc.com - - DOMAIN-SUFFIX,namedq.com - - DOMAIN-SUFFIX,namemek.com - - DOMAIN-SUFFIX,naqigs.com - - DOMAIN-SUFFIX,nativeapp.toutiao.com - - DOMAIN-SUFFIX,nav.winasdaq.com - - DOMAIN-SUFFIX,navi.gd.chinamobile.com - - DOMAIN-SUFFIX,nbhxgjz.com - - DOMAIN-SUFFIX,nbjjd.com - - DOMAIN-SUFFIX,nbzq.net - - DOMAIN-SUFFIX,nc004x.corp.youdao.com - - DOMAIN-SUFFIX,nc045x.corp.youdao.com - - DOMAIN-SUFFIX,ncachear.com - - DOMAIN-SUFFIX,nch.xnghmc.com - - DOMAIN-SUFFIX,nchte.com - - DOMAIN-SUFFIX,nclog.mars.baofeng.net - - DOMAIN-SUFFIX,nclog.pad.baofeng.net - - DOMAIN-SUFFIX,ncoyqc.com - - DOMAIN-SUFFIX,ndtzx.com - - DOMAIN-SUFFIX,ndy.code.weddingeeos.com - - DOMAIN-SUFFIX,ne.1rtb.com - - DOMAIN-SUFFIX,ne9377.com - - DOMAIN-SUFFIX,neirong.baidu.com - - DOMAIN-SUFFIX,nend.net - - DOMAIN-SUFFIX,nest.youwatch.org - - DOMAIN-SUFFIX,net.rayjump.com - - DOMAIN-SUFFIX,netko0o.com - - DOMAIN-SUFFIX,netshelter.net - - DOMAIN-SUFFIX,netspidermm.indiatimes.com - - DOMAIN-SUFFIX,network.aufeminin.com - - DOMAIN-SUFFIX,network.business.com - - DOMAIN-SUFFIX,network.sofeminine.co.uk - - DOMAIN-SUFFIX,networkbench.com - - DOMAIN-SUFFIX,new.ltheanine.cn - - DOMAIN-SUFFIX,new.yokaunion.com - - DOMAIN-SUFFIX,new.zhqiu.com - - DOMAIN-SUFFIX,newapi.com - - DOMAIN-SUFFIX,newrelic.com - - DOMAIN-SUFFIX,news.51y5.net - - DOMAIN-SUFFIX,news.58.com - - DOMAIN-SUFFIX,news.cxxtv.com - - DOMAIN-SUFFIX,news.mpush.qq.com - - DOMAIN-SUFFIX,news.push.126.net - - DOMAIN-SUFFIX,news.s9377.com - - DOMAIN-SUFFIX,news.xueyanshan.com - - DOMAIN-SUFFIX,news-img.51y5.net - - DOMAIN-SUFFIX,news-l.play.aiseet.atianqi.com - - DOMAIN-SUFFIX,news-l.play.cp81.ott.cibntv.net - - DOMAIN-SUFFIX,news-l.play.ott.video.qq.com - - DOMAIN-SUFFIX,news-log.51y5.net - - DOMAIN-SUFFIX,newspage.xilu.com - - DOMAIN-SUFFIX,newspush.sinajs.cn - - DOMAIN-SUFFIX,newswifiapi.dfshurufa.com - - DOMAIN-SUFFIX,newton-api.ele.me - - DOMAIN-SUFFIX,nex.163.com - - DOMAIN-SUFFIX,nexage.com - - DOMAIN-SUFFIX,nexstep.zdworks.com - - DOMAIN-SUFFIX,nextcps.com - - DOMAIN-SUFFIX,nextlnk9.com - - DOMAIN-SUFFIX,nexus.ensighten.com - - DOMAIN-SUFFIX,nfh.cnshef.com - - DOMAIN-SUFFIX,ngads.go.com - - DOMAIN-SUFFIX,nicelabel.cc - - DOMAIN-SUFFIX,ninebox.cn - - DOMAIN-SUFFIX,ninemsn.imrworldwide.com - - DOMAIN-SUFFIX,niurenw.com - - DOMAIN-SUFFIX,niux88.com - - DOMAIN-SUFFIX,niuxgame77.com - - DOMAIN-SUFFIX,niwd.zhybw88.com - - DOMAIN-SUFFIX,njdijiani.com - - DOMAIN-SUFFIX,njfsk.com - - DOMAIN-SUFFIX,njmpacc.com - - DOMAIN-SUFFIX,njq.net - - DOMAIN-SUFFIX,njs.imagicskin.com - - DOMAIN-SUFFIX,njs.myyage.com - - DOMAIN-SUFFIX,njs.reliancevalve.com - - DOMAIN-SUFFIX,njxczy.com - - DOMAIN-SUFFIX,nkeo.top - - DOMAIN-SUFFIX,nlog.baidu.com - - DOMAIN-SUFFIX,nmbtedu.com - - DOMAIN-SUFFIX,nmkgs.cn - - DOMAIN-SUFFIX,nmpcdn.com - - DOMAIN-SUFFIX,nmqbg.com - - DOMAIN-SUFFIX,nnedbx.com - - DOMAIN-SUFFIX,nngft.com - - DOMAIN-SUFFIX,noberlmall.com - - DOMAIN-SUFFIX,nongsalei.com - - DOMAIN-SUFFIX,nop.xpanama.net - - DOMAIN-SUFFIX,notice.game.xiaomi.com - - DOMAIN-SUFFIX,notice.uchome.manyou.com - - DOMAIN-SUFFIX,notifiter.youmi.net - - DOMAIN-SUFFIX,notify.oupeng.com - - DOMAIN-SUFFIX,novelsns.html5.qq.com - - DOMAIN-SUFFIX,nowskip.com - - DOMAIN-SUFFIX,npdaqy6x1j.me - - DOMAIN-SUFFIX,nr1234.com - - DOMAIN-SUFFIX,nryiou.cn - - DOMAIN-SUFFIX,nsclickvideo.baidu.com - - DOMAIN-SUFFIX,nsnmiaomu.cn - - DOMAIN-SUFFIX,nsy.hnzyfs.com - - DOMAIN-SUFFIX,nt.phpwind.com - - DOMAIN-SUFFIX,ntalker.com - - DOMAIN-SUFFIX,nterbx.com - - DOMAIN-SUFFIX,ntfsformac.cc - - DOMAIN-SUFFIX,ntfsformac.cn - - DOMAIN-SUFFIX,nthyn.com - - DOMAIN-SUFFIX,ntx.quanliyouxi.cn - - DOMAIN-SUFFIX,nv.souid.com - - DOMAIN-SUFFIX,nvrentao8.com - - DOMAIN-SUFFIX,nvshenfan.com - - DOMAIN-SUFFIX,nwejs.alcryp.com - - DOMAIN-SUFFIX,nwejs.myzcoffice.com - - DOMAIN-SUFFIX,nwwap.com - - DOMAIN-SUFFIX,nxrhs.com - - DOMAIN-SUFFIX,nxrxt.con - - DOMAIN-SUFFIX,ny7f6goy.bid - - DOMAIN-SUFFIX,nylalobghyhirgh.com - - DOMAIN-SUFFIX,nysita.com - - DOMAIN-SUFFIX,nzezn.com - - DOMAIN-SUFFIX,o.08jm.cn - - DOMAIN-SUFFIX,o.if.qidian.com - - DOMAIN-SUFFIX,o.minisplat.cn - - DOMAIN-SUFFIX,o091i.com - - DOMAIN-SUFFIX,o2o.api.xiaomi.com - - DOMAIN-SUFFIX,o2omobi.com - - DOMAIN-SUFFIX,o7xs6runw.bkt.clouddn.com - - DOMAIN-SUFFIX,oa129.com - - DOMAIN-SUFFIX,oadz.com - - DOMAIN-SUFFIX,oa-panther.data.aliyun.com - - DOMAIN-SUFFIX,oas.autotrader.co.uk - - DOMAIN-SUFFIX,oas.luxweb.com - - DOMAIN-SUFFIX,oas.skyscanner.net - - DOMAIN-SUFFIX,oasc07.citywire.co.uk - - DOMAIN-SUFFIX,oascentral.abclocal.go.com - - DOMAIN-SUFFIX,oascentral.chron.com - - DOMAIN-SUFFIX,oascentral.hosted.ap.org - - DOMAIN-SUFFIX,oascentral.lycos.com - - DOMAIN-SUFFIX,oascentral.newsmax.com - - DOMAIN-SUFFIX,oascentral.sina.com - - DOMAIN-SUFFIX,oascentral.sina.com.hk - - DOMAIN-SUFFIX,oask.xulizui6.com - - DOMAIN-SUFFIX,obeyter.com - - DOMAIN-SUFFIX,ocbv0.baiyangzs.com - - DOMAIN-SUFFIX,odc.starwave.com - - DOMAIN-SUFFIX,odin.goo.mx - - DOMAIN-SUFFIX,officeme.cn - - DOMAIN-SUFFIX,offline-adv.oray.com - - DOMAIN-SUFFIX,oikxlcv.wang - - DOMAIN-SUFFIX,oimagea2.ydstatic.com - - DOMAIN-SUFFIX,ojngisbfwwyp.com - - DOMAIN-SUFFIX,ok.432kkk.com - - DOMAIN-SUFFIX,ok365.com - - DOMAIN-SUFFIX,okkkk.com - - DOMAIN-SUFFIX,okm918.com - - DOMAIN-SUFFIX,okokw.com - - DOMAIN-SUFFIX,olcdn.com - - DOMAIN-SUFFIX,olpv.onlylady.com - - DOMAIN-SUFFIX,olpvimg.onlylady.com - - DOMAIN-SUFFIX,olstats.onlylady.com - - DOMAIN-SUFFIX,omega7o.com - - DOMAIN-SUFFIX,omg.inte.sogoucdn.com - - DOMAIN-SUFFIX,omnikool.discovery.com - - DOMAIN-SUFFIX,omtrdc.net - - DOMAIN-SUFFIX,on.maxspeedcdn.com - - DOMAIN-SUFFIX,onclickads.net - - DOMAIN-SUFFIX,onclicktop.com - - DOMAIN-SUFFIX,onclkds.com - - DOMAIN-SUFFIX,one.520319.cn - - DOMAIN-SUFFIX,onepush.query.yahoo.com - - DOMAIN-SUFFIX,onesoft.im - - DOMAIN-SUFFIX,onetad.com - - DOMAIN-SUFFIX,onetag-sys.com - - DOMAIN-SUFFIX,onewhee.com - - DOMAIN-SUFFIX,onlifjj.net - - DOMAIN-SUFFIX,onlinetips.baofeng5.baofeng.net - - DOMAIN-SUFFIX,oomyv.com - - DOMAIN-SUFFIX,ooniu.com - - DOMAIN-SUFFIX,ooss.oss.aliyuncs.com - - DOMAIN-SUFFIX,op00w.baiyangzs.com - - DOMAIN-SUFFIX,open.play.cn - - DOMAIN-SUFFIX,openapi-news.meizu.com - - DOMAIN-SUFFIX,openrcv.baidu.com - - DOMAIN-SUFFIX,openstat.net - - DOMAIN-SUFFIX,openstorage.ad.cmvideo.cn - - DOMAIN-SUFFIX,opgirl-tmp.adbxb.cn - - DOMAIN-SUFFIX,oppo.yidianzixun.com - - DOMAIN-SUFFIX,optaim.com - - DOMAIN-SUFFIX,optimix.asia - - DOMAIN-SUFFIX,optimix.cn - - DOMAIN-SUFFIX,optimized-by.rubiconproject.com - - DOMAIN-SUFFIX,optimizelyapis.com - - DOMAIN-SUFFIX,oq68.com - - DOMAIN-SUFFIX,orchidscape.net - - DOMAIN-SUFFIX,oredero.com - - DOMAIN-SUFFIX,orz.hupu.com - - DOMAIN-SUFFIX,osc.uranus.sogou.com - - DOMAIN-SUFFIX,osfota.cdn.aliyun.com - - DOMAIN-SUFFIX,oss-asq-static.11222.cn - - DOMAIN-SUFFIX,otf.msn.com - - DOMAIN-SUFFIX,oth.eve.mdt.qq.com - - DOMAIN-SUFFIX,oth.str.mdt.qq.com - - DOMAIN-SUFFIX,oth.update.mdt.qq.com - - DOMAIN-SUFFIX,otheve.play.aiseet.atianqi.com - - DOMAIN-SUFFIX,othstr.play.aiseet.atianqi.com - - DOMAIN-SUFFIX,ou188.com - - DOMAIN-SUFFIX,output.nend.net - - DOMAIN-SUFFIX,overture.com - - DOMAIN-SUFFIX,overturechina.com - - DOMAIN-SUFFIX,ow.biqugego.com - - DOMAIN-SUFFIX,ow.s1.shuhuangge.org - - DOMAIN-SUFFIX,ow.s2.shuhuangge.org - - DOMAIN-SUFFIX,owin.biqugego.com - - DOMAIN-SUFFIX,ox.furaffinity.net - - DOMAIN-SUFFIX,oyzsverimywg.com - - DOMAIN-SUFFIX,p.7060.la - - DOMAIN-SUFFIX,p.99mssj.com - - DOMAIN-SUFFIX,p.abcache.com - - DOMAIN-SUFFIX,p.bdjiazanmiaomu.com - - DOMAIN-SUFFIX,p.bjdianyue.com - - DOMAIN-SUFFIX,p.bnuni.com - - DOMAIN-SUFFIX,p.clkservice.youdao.com - - DOMAIN-SUFFIX,p.ecwan77.net - - DOMAIN-SUFFIX,p.inte.sogou.com - - DOMAIN-SUFFIX,p.kf3msfm.com - - DOMAIN-SUFFIX,p.kjwx8.com - - DOMAIN-SUFFIX,p.kugou.com - - DOMAIN-SUFFIX,p.m5bn.com - - DOMAIN-SUFFIX,p.mendoc.cn - - DOMAIN-SUFFIX,p.niudashu.com - - DOMAIN-SUFFIX,p.qiailm.com - - DOMAIN-SUFFIX,p.qijijs.top - - DOMAIN-SUFFIX,p.raidmedia.com.cn - - DOMAIN-SUFFIX,p.rfihub.com - - DOMAIN-SUFFIX,p.saozhu1.top - - DOMAIN-SUFFIX,p.sdu8cvc.com - - DOMAIN-SUFFIX,p.shagent.com - - DOMAIN-SUFFIX,p.skimresources.com - - DOMAIN-SUFFIX,p.szonline.net - - DOMAIN-SUFFIX,p.tamenshuo.com - - DOMAIN-SUFFIX,p.tencentmind.com - - DOMAIN-SUFFIX,p.twitter.com - - DOMAIN-SUFFIX,p.vq6nsu.cn - - DOMAIN-SUFFIX,p.yizuya.com - - DOMAIN-SUFFIX,p.ynjczy.net - - DOMAIN-SUFFIX,p0y.cn - - DOMAIN-SUFFIX,p1.18zhongyao.com - - DOMAIN-SUFFIX,p1.qinsx.cn - - DOMAIN-SUFFIX,p2.hyz86.com - - DOMAIN-SUFFIX,p2.qinsx.cn - - DOMAIN-SUFFIX,p2.ykauto.cn - - DOMAIN-SUFFIX,p215223.clksite.com - - DOMAIN-SUFFIX,p215223.inclk.com - - DOMAIN-SUFFIX,p215223.mycdn2.co - - DOMAIN-SUFFIX,p2pmid.baofeng.com - - DOMAIN-SUFFIX,p3p.sogou.com - - DOMAIN-SUFFIX,p3p.yahoo.com - - DOMAIN-SUFFIX,p3tt.com - - DOMAIN-SUFFIX,p4p.sina.com.cn - - DOMAIN-SUFFIX,p4psearch.china.alibaba.com - - DOMAIN-SUFFIX,p555.cc - - DOMAIN-SUFFIX,p8u.hinet.net - - DOMAIN-SUFFIX,package01.com - - DOMAIN-SUFFIX,pad.zhywyl.cn - - DOMAIN-SUFFIX,padsdel2.cdnads.com - - DOMAIN-SUFFIX,page.acm.dzwww.com - - DOMAIN-SUFFIX,page.xywy.com - - DOMAIN-SUFFIX,pagead.google.com - - DOMAIN-SUFFIX,pagead.l.google.com - - DOMAIN-SUFFIX,pagead-tpc.l.google.com - - DOMAIN-SUFFIX,pagechoice.com - - DOMAIN-SUFFIX,pagechoice.net - - DOMAIN-SUFFIX,pagechoicemotu.gentags.net - - DOMAIN-SUFFIX,pages2.marketo.com - - DOMAIN-SUFFIX,paimgcdn.baidu.com - - DOMAIN-SUFFIX,painiuimg.com - - DOMAIN-SUFFIX,palmnews.sina.cn - - DOMAIN-SUFFIX,panda.kdnet.net - - DOMAIN-SUFFIX,pangu.cc - - DOMAIN-SUFFIX,panoramio.com - - DOMAIN-SUFFIX,papajia55.com - - DOMAIN-SUFFIX,parking.zunmi.cn - - DOMAIN-SUFFIX,parser.houyi.baofeng.net - - DOMAIN-SUFFIX,partner.bargaindomains.com - - DOMAIN-SUFFIX,partner.catchy.com - - DOMAIN-SUFFIX,partner.premiumdomains.com - - DOMAIN-SUFFIX,partner.toutiao.com - - DOMAIN-SUFFIX,partners.fshealth.com - - DOMAIN-SUFFIX,partners.keezmovies.com - - DOMAIN-SUFFIX,partners.optiontide.com - - DOMAIN-SUFFIX,partners.pornerbros.com - - DOMAIN-SUFFIX,partners.rochen.com - - DOMAIN-SUFFIX,partners.sportingbet.com.au - - DOMAIN-SUFFIX,partners.vouchedfor.co.uk - - DOMAIN-SUFFIX,partners.xpertmarket.com - - DOMAIN-SUFFIX,party-nngvitbizn.now.sh - - DOMAIN-SUFFIX,pasco.cc - - DOMAIN-SUFFIX,pass1.soogif.com - - DOMAIN-SUFFIX,pass2.soogif.com - - DOMAIN-SUFFIX,passwordrecovery.cn - - DOMAIN-SUFFIX,passwz.com - - DOMAIN-SUFFIX,pat.farvd.com - - DOMAIN-SUFFIX,patriot.cs.pp.cn - - DOMAIN-SUFFIX,pay.holaq.com - - DOMAIN-SUFFIX,pay.mobile.sina.cn - - DOMAIN-SUFFIX,pay838.com - - DOMAIN-SUFFIX,pb.funshion.net.cn - - DOMAIN-SUFFIX,pb.s3wfg.com - - DOMAIN-SUFFIX,pb.sogou.com - - DOMAIN-SUFFIX,pb.sys.pp8.com - - DOMAIN-SUFFIX,pb.wang502.com - - DOMAIN-SUFFIX,pb3.pstatp.com - - DOMAIN-SUFFIX,pbd.sogou.com - - DOMAIN-SUFFIX,pbs.lenovomm.com - - DOMAIN-SUFFIX,pc.107788.com - - DOMAIN-SUFFIX,pc.5151gj.com - - DOMAIN-SUFFIX,pc.ctsywy.com - - DOMAIN-SUFFIX,pc.quansj.cn - - DOMAIN-SUFFIX,pc.videoclick.baidu.com - - DOMAIN-SUFFIX,pcauto.irs01.com - - DOMAIN-SUFFIX,pcbrowser.dd.qq.com - - DOMAIN-SUFFIX,pcd.autohome.com.cn - - DOMAIN-SUFFIX,pcfg.wps.cn - - DOMAIN-SUFFIX,pclog.dftoutiao.com - - DOMAIN-SUFFIX,pclog.suishenyun.net - - DOMAIN-SUFFIX,pcmx.autohome.com.cn - - DOMAIN-SUFFIX,pcmzn.com - - DOMAIN-SUFFIX,pcsoftwords.dftoutiao.com - - DOMAIN-SUFFIX,pcxzo.pluto.sogou.com - - DOMAIN-SUFFIX,pd7-imp.revsci.net - - DOMAIN-SUFFIX,pdfexpert.cc - - DOMAIN-SUFFIX,pdl.gionee.com - - DOMAIN-SUFFIX,pdsjycm.com - - DOMAIN-SUFFIX,pear.dleke.com - - DOMAIN-SUFFIX,pedailyu.com - - DOMAIN-SUFFIX,pee.cn - - DOMAIN-SUFFIX,pegasus.cmcm.com - - DOMAIN-SUFFIX,pei-ads.playboy.com - - DOMAIN-SUFFIX,pf.h5game.cn - - DOMAIN-SUFFIX,pf.pchome.net - - DOMAIN-SUFFIX,pf-2.pchome.net - - DOMAIN-SUFFIX,pfp.sina.com.cn - - DOMAIN-SUFFIX,pfpip.sina.com - - DOMAIN-SUFFIX,pgdt.gtimg.cn - - DOMAIN-SUFFIX,pgdt.ugdtimg.com - - DOMAIN-SUFFIX,photo.dhford.cn - - DOMAIN-SUFFIX,photo.lyghjzs.cn - - DOMAIN-SUFFIX,photo.qianerbai.cn - - DOMAIN-SUFFIX,photo.shyexiang.cn - - DOMAIN-SUFFIX,photo.welldex.cn - - DOMAIN-SUFFIX,photo.xunhuaji.cn - - DOMAIN-SUFFIX,photo.zhanhevr.cn - - DOMAIN-SUFFIX,phpad.cqnews.net - - DOMAIN-SUFFIX,pic.0597kk.com - - DOMAIN-SUFFIX,pic.14bobo.com - - DOMAIN-SUFFIX,pic.2u.com.cn - - DOMAIN-SUFFIX,pic.adver.com.tw - - DOMAIN-SUFFIX,pic.aihaogou.com.cn - - DOMAIN-SUFFIX,pic.by175.com - - DOMAIN-SUFFIX,pic.casee.cn - - DOMAIN-SUFFIX,pic.cnmo-img.com.cn - - DOMAIN-SUFFIX,pic.dotmore.com.tw - - DOMAIN-SUFFIX,pic.ea3w.com - - DOMAIN-SUFFIX,pic.eduancm.com - - DOMAIN-SUFFIX,pic.fengniao.com - - DOMAIN-SUFFIX,pic.haowj.com.cn - - DOMAIN-SUFFIX,pic.jdbbs.com - - DOMAIN-SUFFIX,pic.jd-bbs.com - - DOMAIN-SUFFIX,pic.jdunion.com - - DOMAIN-SUFFIX,pic.moad.cn - - DOMAIN-SUFFIX,pic.neiyicun.net - - DOMAIN-SUFFIX,pic.new400.cn - - DOMAIN-SUFFIX,pic.pic-img.com - - DOMAIN-SUFFIX,pic.punchbox.org - - DOMAIN-SUFFIX,pic.pxstda.com - - DOMAIN-SUFFIX,pic.usingde.com - - DOMAIN-SUFFIX,pic.zol-img.com.cn - - DOMAIN-SUFFIX,pic1.59wd.com - - DOMAIN-SUFFIX,pic1.onetad.com - - DOMAIN-SUFFIX,pic183025.images9999.com - - DOMAIN-SUFFIX,pic2.onetad.com - - DOMAIN-SUFFIX,pic2016.5442.com - - DOMAIN-SUFFIX,pic2016.ytqmx.com - - DOMAIN-SUFFIX,pic3.onetad.com - - DOMAIN-SUFFIX,pic494036.images9999.com - - DOMAIN-SUFFIX,pic8.onetad.com - - DOMAIN-SUFFIX,pic837013.images9999.com - - DOMAIN-SUFFIX,picsinfog.com - - DOMAIN-SUFFIX,picture.duokan.com - - DOMAIN-SUFFIX,picturesquefilms.net - - DOMAIN-SUFFIX,pikacn.com - - DOMAIN-SUFFIX,pimg1.126.net - - DOMAIN-SUFFIX,ping.acc.sogou.com - - DOMAIN-SUFFIX,ping.chartbeat.net - - DOMAIN-SUFFIX,ping.pinyin.sogou.com - - DOMAIN-SUFFIX,ping.weiduofan.com - - DOMAIN-SUFFIX,pingbi.diudou.com - - DOMAIN-SUFFIX,pingdom.net - - DOMAIN-SUFFIX,pingma.qq.com - - DOMAIN-SUFFIX,pingshetrip.com - - DOMAIN-SUFFIX,pintour.com - - DOMAIN-SUFFIX,pinzhitmall.com - - DOMAIN-SUFFIX,pix.impdesk.com - - DOMAIN-SUFFIX,pix.tagcdn.com - - DOMAIN-SUFFIX,pix04.revsci.net - - DOMAIN-SUFFIX,pixel.adsafeprotected.com - - DOMAIN-SUFFIX,pixel.mathtag.com - - DOMAIN-SUFFIX,pixel.quantserve.com - - DOMAIN-SUFFIX,pixel.rubiconproject.com - - DOMAIN-SUFFIX,pixel.tapad.com - - DOMAIN-SUFFIX,pixel.vihub.ru - - DOMAIN-SUFFIX,pixel.wp.com - - DOMAIN-SUFFIX,pixel-hk.pixelinteractivemedia.com - - DOMAIN-SUFFIX,pixels.asia - - DOMAIN-SUFFIX,pixfuture.net - - DOMAIN-SUFFIX,pj3456.com - - DOMAIN-SUFFIX,pj39330.com - - DOMAIN-SUFFIX,pj50.com - - DOMAIN-SUFFIX,pj5189.com - - DOMAIN-SUFFIX,pj550077.com - - DOMAIN-SUFFIX,pjbjzf.com - - DOMAIN-SUFFIX,pjogndc8ixoidna.360doc.cn - - DOMAIN-SUFFIX,pjtymy.cn - - DOMAIN-SUFFIX,pjyu.golden1.sogou.com - - DOMAIN-SUFFIX,pk840.com - - DOMAIN-SUFFIX,p-l.play.aiseet.atianqi.com - - DOMAIN-SUFFIX,pl108258.puserving.com - - DOMAIN-SUFFIX,pl14369502.puserving.com - - DOMAIN-SUFFIX,platform.wondershare.com - - DOMAIN-SUFFIX,playad.xjmg.com - - DOMAIN-SUFFIX,player.1800coupon.com - - DOMAIN-SUFFIX,player.1stcreditrepairs.com - - DOMAIN-SUFFIX,player.800directories.com - - DOMAIN-SUFFIX,player.accoona.com - - DOMAIN-SUFFIX,player.alloutwedding.com - - DOMAIN-SUFFIX,player.insuranceandhealth.com - - DOMAIN-SUFFIX,playinfo.gomlab.com - - DOMAIN-SUFFIX,plista.com - - DOMAIN-SUFFIX,plmkolp.m.58xs.tw - - DOMAIN-SUFFIX,plt.data.pplive.com - - DOMAIN-SUFFIX,plwan.com - - DOMAIN-SUFFIX,plz.jandan.net - - DOMAIN-SUFFIX,pm.sdaiv.com - - DOMAIN-SUFFIX,pmir.3g.qq.com - - DOMAIN-SUFFIX,pmm.people.com.cn - - DOMAIN-SUFFIX,pmptrack-autohome.gentags.net - - DOMAIN-SUFFIX,pmptrack-letv.gentags.net - - DOMAIN-SUFFIX,pmptrack-yidianzixunxm.gentags.net - - DOMAIN-SUFFIX,pmptrack-youku.gentags.net - - DOMAIN-SUFFIX,png.lu.sogoucdn.com - - DOMAIN-SUFFIX,pnhfc.com - - DOMAIN-SUFFIX,pofang.com - - DOMAIN-SUFFIX,polkoa.com - - DOMAIN-SUFFIX,pomhz.com - - DOMAIN-SUFFIX,pop.91mangrandi.com - - DOMAIN-SUFFIX,pop.code.mytanwan.com - - DOMAIN-SUFFIX,pop.code.poyang.cn - - DOMAIN-SUFFIX,pop.sjk.ijinshan.com - - DOMAIN-SUFFIX,popads.net - - DOMAIN-SUFFIX,popme.163.com - - DOMAIN-SUFFIX,poppyta.com - - DOMAIN-SUFFIX,popup.jointreport-switch.com - - DOMAIN-SUFFIX,popup.msn.com - - DOMAIN-SUFFIX,popupad.cn - - DOMAIN-SUFFIX,post.ra.icast.cn - - DOMAIN-SUFFIX,poster.weather.com.cn - - DOMAIN-SUFFIX,powergg.top - - DOMAIN-SUFFIX,poyang.com - - DOMAIN-SUFFIX,pp.sxjkc.cn - - DOMAIN-SUFFIX,pp2.dhzw.org - - DOMAIN-SUFFIX,pp9899.com - - DOMAIN-SUFFIX,ppjia55.com - - DOMAIN-SUFFIX,ppoi.org - - DOMAIN-SUFFIX,ppurifier.game.xiaomi.com - - DOMAIN-SUFFIX,ppx.hgo7r.cn - - DOMAIN-SUFFIX,pr.atwola.com - - DOMAIN-SUFFIX,pr.ybp.yahoo.com - - DOMAIN-SUFFIX,pr00001.com - - DOMAIN-SUFFIX,practivate.adobe.com - - DOMAIN-SUFFIX,pr-bh.ybp.yahoo.com - - DOMAIN-SUFFIX,prc.rjje4.com - - DOMAIN-SUFFIX,prcappzone.intel.com - - DOMAIN-SUFFIX,pre.api.tw06.xlmc.sandai.net - - DOMAIN-SUFFIX,pre.ra.icast.cn - - DOMAIN-SUFFIX,prerollads.ign.com - - DOMAIN-SUFFIX,priceinfo.comuv.com - - DOMAIN-SUFFIX,pro.cn - - DOMAIN-SUFFIX,pro.heiguang.com - - DOMAIN-SUFFIX,pro.iweihai.cn - - DOMAIN-SUFFIX,probes.cedexis.com - - DOMAIN-SUFFIX,profile.ssp.rambler.ru - - DOMAIN-SUFFIX,projectwonderful.com - - DOMAIN-SUFFIX,prom.gome.com.cn - - DOMAIN-SUFFIX,promo.fileforum.com - - DOMAIN-SUFFIX,promos.fling.com - - DOMAIN-SUFFIX,promote.biz.weibo.cn - - DOMAIN-SUFFIX,promote.caixin.com - - DOMAIN-SUFFIX,promote.pair.com - - DOMAIN-SUFFIX,promotion.aliyun.com - - DOMAIN-SUFFIX,promotion.gomlab.com - - DOMAIN-SUFFIX,promotions.iasbet.com - - DOMAIN-SUFFIX,propellerads.com - - DOMAIN-SUFFIX,prophet.heise.de - - DOMAIN-SUFFIX,proton.flurry.com - - DOMAIN-SUFFIX,proxy.sec.miui.com - - DOMAIN-SUFFIX,prw.lenovomm.com - - DOMAIN-SUFFIX,ps.3fenge.com - - DOMAIN-SUFFIX,psb.lenovomm.com - - DOMAIN-SUFFIX,psfq.gou.sogou.com - - DOMAIN-SUFFIX,psma02.com - - DOMAIN-SUFFIX,ptdrw.com - - DOMAIN-SUFFIX,ptkhy.com - - DOMAIN-SUFFIX,ptw.la - - DOMAIN-SUFFIX,pub.betclick.com - - DOMAIN-SUFFIX,pub.chinadailyasia.com - - DOMAIN-SUFFIX,pub.funshion.com - - DOMAIN-SUFFIX,pub.mop.com - - DOMAIN-SUFFIX,pub1.cope.es - - DOMAIN-SUFFIX,pubbirdf.com - - DOMAIN-SUFFIX,public.app.autohome.com.cn - - DOMAIN-SUFFIX,public6.com - - DOMAIN-SUFFIX,publicidad.net - - DOMAIN-SUFFIX,publicidad.tv - - DOMAIN-SUFFIX,publish.ad.youth.cn - - DOMAIN-SUFFIX,pubmatic.com - - DOMAIN-SUFFIX,pubnative.net - - DOMAIN-SUFFIX,pubnub.com - - DOMAIN-SUFFIX,pubs.hiddennetwork.com - - DOMAIN-SUFFIX,puds.test.uae.uc.cn - - DOMAIN-SUFFIX,puds.ucweb.com - - DOMAIN-SUFFIX,pull.push.sogou.com - - DOMAIN-SUFFIX,punchbox.org - - DOMAIN-SUFFIX,punuomisi.cn - - DOMAIN-SUFFIX,pups.bdimg.com - - DOMAIN-SUFFIX,pupu.xnhh120.com - - DOMAIN-SUFFIX,push.126.net - - DOMAIN-SUFFIX,push.5z5zw.com - - DOMAIN-SUFFIX,push.air-matters.com - - DOMAIN-SUFFIX,push.app.autohome.com.cn - - DOMAIN-SUFFIX,push.com2us.net - - DOMAIN-SUFFIX,push.feng.com - - DOMAIN-SUFFIX,push.mobile.kugou.com - - DOMAIN-SUFFIX,push.res.meizu.com - - DOMAIN-SUFFIX,push.wandoujia.com - - DOMAIN-SUFFIX,push.wapx.cn - - DOMAIN-SUFFIX,push.yuedu.163.com - - DOMAIN-SUFFIX,push.zdworks.com - - DOMAIN-SUFFIX,push.zhangyue.com - - DOMAIN-SUFFIX,push.zhanzhang.baidu.com - - DOMAIN-SUFFIX,push-android.myzaker.com - - DOMAIN-SUFFIX,pushapi.lenovomm.com - - DOMAIN-SUFFIX,push-dc.51y5.net - - DOMAIN-SUFFIX,pv.alert.autohome.com.cn - - DOMAIN-SUFFIX,pv.anzhi.com - - DOMAIN-SUFFIX,pv.cheshi.com - - DOMAIN-SUFFIX,pv.enet.com.cn - - DOMAIN-SUFFIX,pv.focus.cn - - DOMAIN-SUFFIX,pv.ra.icast.cn - - DOMAIN-SUFFIX,pv.sogou.com - - DOMAIN-SUFFIX,pv.xcar.com.cn - - DOMAIN-SUFFIX,pv.zdnet.com.cn - - DOMAIN-SUFFIX,pv.zol.com.cn - - DOMAIN-SUFFIX,pvc.zol.com.cn - - DOMAIN-SUFFIX,pvdata.ku6.com - - DOMAIN-SUFFIX,pvlog.hd.baofeng.com - - DOMAIN-SUFFIX,pvlog.moviebox.baofeng.net - - DOMAIN-SUFFIX,pvm.zol.com.cn - - DOMAIN-SUFFIX,pvmsite.zol.com.cn - - DOMAIN-SUFFIX,pvsite.zol.com.cn - - DOMAIN-SUFFIX,pvstat.html5.qq.com - - DOMAIN-SUFFIX,pvtest.zol.com.cn - - DOMAIN-SUFFIX,pvx.autohome.com.cn - - DOMAIN-SUFFIX,pwj.biqugezw.com - - DOMAIN-SUFFIX,px.adhigh.net - - DOMAIN-SUFFIX,px.media-serving.com - - DOMAIN-SUFFIX,px.moatads.com - - DOMAIN-SUFFIX,px.owneriq.net - - DOMAIN-SUFFIX,px.powerlinks.com - - DOMAIN-SUFFIX,px.steelhousemedia.com - - DOMAIN-SUFFIX,pxene.com - - DOMAIN-SUFFIX,pxl.connexity.net - - DOMAIN-SUFFIX,py.qlogo.cn - - DOMAIN-SUFFIX,py.wikigifth.com - - DOMAIN-SUFFIX,py2.qlogo.cn - - DOMAIN-SUFFIX,pyerc.com - - DOMAIN-SUFFIX,pyzkk.com - - DOMAIN-SUFFIX,q.ox11.com - - DOMAIN-SUFFIX,q.s.cr-nielsen.com - - DOMAIN-SUFFIX,q1scv.vov0.com - - DOMAIN-SUFFIX,q6rwa.eschangchi.com - - DOMAIN-SUFFIX,qbyy010.com - - DOMAIN-SUFFIX,qchannel01.cn - - DOMAIN-SUFFIX,qchannel02.cn - - DOMAIN-SUFFIX,qchannel03.cn - - DOMAIN-SUFFIX,qchannel04.cn - - DOMAIN-SUFFIX,qcjslm.com - - DOMAIN-SUFFIX,qcl777.com - - DOMAIN-SUFFIX,qd.dhzw.org - - DOMAIN-SUFFIX,qd.js.sanjiangge.com - - DOMAIN-SUFFIX,qd.moutaihotel.cn - - DOMAIN-SUFFIX,qd.wanjuanba.com - - DOMAIN-SUFFIX,qd.x4399.com - - DOMAIN-SUFFIX,qdchunyu.com - - DOMAIN-SUFFIX,qeoa.hawbfa.com - - DOMAIN-SUFFIX,qgss8.com - - DOMAIN-SUFFIX,qhaif.com - - DOMAIN-SUFFIX,qhl.bealge.sogou.com - - DOMAIN-SUFFIX,qiailm.com - - DOMAIN-SUFFIX,qianclick.baidu.com - - DOMAIN-SUFFIX,qiaopiguniang.com - - DOMAIN-SUFFIX,qichexin.com - - DOMAIN-SUFFIX,qihaoqu.com - - DOMAIN-SUFFIX,qinchugudao.com - - DOMAIN-SUFFIX,qingqu.la - - DOMAIN-SUFFIX,qiqipower.com - - DOMAIN-SUFFIX,qiqivv.com - - DOMAIN-SUFFIX,qiqiww.com - - DOMAIN-SUFFIX,qiqiyii.com - - DOMAIN-SUFFIX,qiye11.ejunshi.net - - DOMAIN-SUFFIX,qiyem.ejunshi.com - - DOMAIN-SUFFIX,qiyezs.ejunshi.com - - DOMAIN-SUFFIX,qiyou.com - - DOMAIN-SUFFIX,qjfcdn1220.0101122.com - - DOMAIN-SUFFIX,qjjtc.com - - DOMAIN-SUFFIX,qlisv.siemens6es7.com - - DOMAIN-SUFFIX,qlmho.renhengshangmao.com - - DOMAIN-SUFFIX,qloer.com - - DOMAIN-SUFFIX,qlonglong.com - - DOMAIN-SUFFIX,qmkdy.com - - DOMAIN-SUFFIX,qoiusky.com - - DOMAIN-SUFFIX,qooic.com - - DOMAIN-SUFFIX,qp.yunanfuwuqi.com - - DOMAIN-SUFFIX,qq.guansenff.cn - - DOMAIN-SUFFIX,qq.irs01.com - - DOMAIN-SUFFIX,qq.tapiche.cn - - DOMAIN-SUFFIX,qq2.co - - DOMAIN-SUFFIX,qq61.com - - DOMAIN-SUFFIX,qqhuhu.com - - DOMAIN-SUFFIX,qqm98.com - - DOMAIN-SUFFIX,qqshow2-item.qq.com - - DOMAIN-SUFFIX,qqx.cqqytgpt.com - - DOMAIN-SUFFIX,qqzu.com - - DOMAIN-SUFFIX,qsbz2011.com - - DOMAIN-SUFFIX,qshxc.com - - DOMAIN-SUFFIX,qt.biqugezw.com - - DOMAIN-SUFFIX,qt002x.corp.youdao.com - - DOMAIN-SUFFIX,qtmojo.cn - - DOMAIN-SUFFIX,qtmojo.com - - DOMAIN-SUFFIX,quanliyouxi.cn - - DOMAIN-SUFFIX,quansj.cn - - DOMAIN-SUFFIX,quantcount.com - - DOMAIN-SUFFIX,quantserve.com - - DOMAIN-SUFFIX,qucaigg.com - - DOMAIN-SUFFIX,queene.cn - - DOMAIN-SUFFIX,questionmarket.com - - DOMAIN-SUFFIX,qujishu.com - - DOMAIN-SUFFIX,qumi.com - - DOMAIN-SUFFIX,qupinhj.com - - DOMAIN-SUFFIX,qutaobi.com - - DOMAIN-SUFFIX,quw18.com - - DOMAIN-SUFFIX,quyaoya.com - - DOMAIN-SUFFIX,qweqwe.mctvhp.cn - - DOMAIN-SUFFIX,qxjdlf.com - - DOMAIN-SUFFIX,qxm.pluto.sogou.com - - DOMAIN-SUFFIX,qxxys.com - - DOMAIN-SUFFIX,qyctj.com - - DOMAIN-SUFFIX,qytyf.com - - DOMAIN-SUFFIX,qzdag.com - - DOMAIN-SUFFIX,qzdfc.com - - DOMAIN-SUFFIX,qzgjprj.com - - DOMAIN-SUFFIX,qzkxt.com - - DOMAIN-SUFFIX,r.0.0.0.0.cn - - DOMAIN-SUFFIX,r.254a.com - - DOMAIN-SUFFIX,r.5207470.com - - DOMAIN-SUFFIX,r.browser.miui.com - - DOMAIN-SUFFIX,r.bxb.oupeng.com - - DOMAIN-SUFFIX,r.dmp.sina.com.cn - - DOMAIN-SUFFIX,r.mail.163.com - - DOMAIN-SUFFIX,r.msn.com - - DOMAIN-SUFFIX,r.myadx.net - - DOMAIN-SUFFIX,r.ow.0.0.0.0.cn - - DOMAIN-SUFFIX,r.pixgold.com - - DOMAIN-SUFFIX,r.radikal.ru - - DOMAIN-SUFFIX,r.xcycm.com - - DOMAIN-SUFFIX,r.youmi.net - - DOMAIN-SUFFIX,r.zlongad.com - - DOMAIN-SUFFIX,r8nu86wg.me - - DOMAIN-SUFFIX,ra.gtimg.com - - DOMAIN-SUFFIX,rabbit.meitustat.com - - DOMAIN-SUFFIX,rabbit.tg.meitu.com - - DOMAIN-SUFFIX,rack.bauermedia.co.uk - - DOMAIN-SUFFIX,rad.live.com - - DOMAIN-SUFFIX,rad.microsoft.com - - DOMAIN-SUFFIX,rad.msn.com - - DOMAIN-SUFFIX,rad.reporo.net - - DOMAIN-SUFFIX,radar.cedexis.com - - DOMAIN-SUFFIX,raeqqe.cn - - DOMAIN-SUFFIX,rank.hit.china.com - - DOMAIN-SUFFIX,rannabio.com - - DOMAIN-SUFFIX,ratings.lycos.com - - DOMAIN-SUFFIX,raw.okwan.cn - - DOMAIN-SUFFIX,rayjump.com - - DOMAIN-SUFFIX,rbp.emea.mxptint.net - - DOMAIN-SUFFIX,rbp.mxptint.net - - DOMAIN-SUFFIX,rbs.haiyunx.com - - DOMAIN-SUFFIX,rbywg.com - - DOMAIN-SUFFIX,rc.fthcz.com - - DOMAIN-SUFFIX,rc.haodongkeji.cn - - DOMAIN-SUFFIX,rc.mgwcn.com - - DOMAIN-SUFFIX,rc.xmcmn.com - - DOMAIN-SUFFIX,rc2waycm-atl.netmng.com - - DOMAIN-SUFFIX,rc-au.imrworldwide.com - - DOMAIN-SUFFIX,rcmd.pop.ijinshan.com - - DOMAIN-SUFFIX,rcp.c.appier.net - - DOMAIN-SUFFIX,rcv.iclicash.com - - DOMAIN-SUFFIX,rcv.jesgoo.com - - DOMAIN-SUFFIX,rcv.mobad.ijinshan.com - - DOMAIN-SUFFIX,rcv.moogos.com - - DOMAIN-SUFFIX,rcv.union-wifi.com - - DOMAIN-SUFFIX,rcyy3.kaopuwangjz.com - - DOMAIN-SUFFIX,rd.ane.yahoo.co.jp - - DOMAIN-SUFFIX,rd.autohome.com.cn - - DOMAIN-SUFFIX,rd.e.sogou.com - - DOMAIN-SUFFIX,rdiqt.cn - - DOMAIN-SUFFIX,rdtuijian.com - - DOMAIN-SUFFIX,rdx.autohome.com.cn - - DOMAIN-SUFFIX,re.m.taobao.com - - DOMAIN-SUFFIX,re.taobao.com - - DOMAIN-SUFFIX,re.taotaosou.com - - DOMAIN-SUFFIX,reachmax.cn - - DOMAIN-SUFFIX,reader.browser.miui.com - - DOMAIN-SUFFIX,reader.meizu.com - - DOMAIN-SUFFIX,reader.res.meizu.com - - DOMAIN-SUFFIX,realtime.monitor.ppweb.com.cn - - DOMAIN-SUFFIX,rec.g.163.com - - DOMAIN-SUFFIX,rec.moviebox.baofeng.net - - DOMAIN-SUFFIX,recreativ.ru - - DOMAIN-SUFFIX,recv-vd.gridsumdissector.cn - - DOMAIN-SUFFIX,recv-vd.gridsumdissector.com - - DOMAIN-SUFFIX,recv-wd.gridsumdissector.com - - DOMAIN-SUFFIX,red.bayimg.net - - DOMAIN-SUFFIX,redirect.simba.taobao.com - - DOMAIN-SUFFIX,redpaper-10006092.cos.myqcloud.com - - DOMAIN-SUFFIX,redvase.bravenet.com - - DOMAIN-SUFFIX,referrer.disqus.com - - DOMAIN-SUFFIX,relap.io - - DOMAIN-SUFFIX,release.baidu.com - - DOMAIN-SUFFIX,reliancevalve.com - - DOMAIN-SUFFIX,remote88.com - - DOMAIN-SUFFIX,remotedu.cn - - DOMAIN-SUFFIX,rem-track.bild.de - - DOMAIN-SUFFIX,rencai56.com - - DOMAIN-SUFFIX,renren2.maoyun.tv - - DOMAIN-SUFFIX,req.startappservice.com - - DOMAIN-SUFFIX,res.cocounion.com - - DOMAIN-SUFFIX,res.dxpmedia.com - - DOMAIN-SUFFIX,res.icast.cn - - DOMAIN-SUFFIX,res.ipingke.com - - DOMAIN-SUFFIX,res.qhupdate.com - - DOMAIN-SUFFIX,res3.feedsportal.com - - DOMAIN-SUFFIX,rescn.u3.ucweb.com - - DOMAIN-SUFFIX,resetgey.com - - DOMAIN-SUFFIX,res-ga.smzdm.com - - DOMAIN-SUFFIX,resolver.gslb.mi-idc.com - - DOMAIN-SUFFIX,resolver.msg.xiaomi.net - - DOMAIN-SUFFIX,resource.baomihua.com - - DOMAIN-SUFFIX,responsys.net - - DOMAIN-SUFFIX,ret.xinlongrubber.com - - DOMAIN-SUFFIX,rev.fapdu.com - - DOMAIN-SUFFIX,revdepo.com - - DOMAIN-SUFFIX,revealads.appspot.com - - DOMAIN-SUFFIX,revsci.net - - DOMAIN-SUFFIX,rfir2.50w.me - - DOMAIN-SUFFIX,rh.code.jjyx.com - - DOMAIN-SUFFIX,rh.greenbetterkids.com - - DOMAIN-SUFFIX,rhgyg.com - - DOMAIN-SUFFIX,rich.kuwo.cn - - DOMAIN-SUFFIX,richmedia.yimg.com - - DOMAIN-SUFFIX,riqu2015.com - - DOMAIN-SUFFIX,river.zhidao.baidu.com - - DOMAIN-SUFFIX,rj.baidu.com - - DOMAIN-SUFFIX,rjgw.theta.sogou.com - - DOMAIN-SUFFIX,rjs.niuxgame77.com - - DOMAIN-SUFFIX,rk.rongchengxxw.com - - DOMAIN-SUFFIX,rlcdn.com - - DOMAIN-SUFFIX,rlogs.youdao.com - - DOMAIN-SUFFIX,rm.ra.icast.cn - - DOMAIN-SUFFIX,rm.sina.com.cn - - DOMAIN-SUFFIX,rmads.eu.msn.com - - DOMAIN-SUFFIX,rmads.msn.com - - DOMAIN-SUFFIX,rmcxw.cn - - DOMAIN-SUFFIX,rmoeu.mercury.sogou.com - - DOMAIN-SUFFIX,rmtx.ra.icast.cn - - DOMAIN-SUFFIX,rmw.jdburl.com - - DOMAIN-SUFFIX,rnfrfxqztlno.com - - DOMAIN-SUFFIX,roia.com - - DOMAIN-SUFFIX,rosi.okkkk.com - - DOMAIN-SUFFIX,rotabanner.kulichki.net - - DOMAIN-SUFFIX,rotate.ymtracking.com - - DOMAIN-SUFFIX,rotator.tradetracker.net - - DOMAIN-SUFFIX,router.bittorrent.com - - DOMAIN-SUFFIX,rovio-news-app.angrybirdsgame.com - - DOMAIN-SUFFIX,rp.crasheye.cn - - DOMAIN-SUFFIX,rp.gwallet.com - - DOMAIN-SUFFIX,rpaulfrank.com - - DOMAIN-SUFFIX,rpc-php.trafficfactory.biz - - DOMAIN-SUFFIX,rplog.baidu.com - - DOMAIN-SUFFIX,rpnews.itaoxiaoshuo.com - - DOMAIN-SUFFIX,rpt.anchorfree.net - - DOMAIN-SUFFIX,rqgsf.com - - DOMAIN-SUFFIX,rr.knet.cn - - DOMAIN-SUFFIX,rrr.youle55.com - - DOMAIN-SUFFIX,rrsubway.com - - DOMAIN-SUFFIX,rs.sinajs.cn - - DOMAIN-SUFFIX,rs1.rensheng5.com - - DOMAIN-SUFFIX,rsas.szzek.com - - DOMAIN-SUFFIX,rsccs.com - - DOMAIN-SUFFIX,rt.funshion.net - - DOMAIN-SUFFIX,rt.gsspat.jp - - DOMAIN-SUFFIX,rtas.videocc.net - - DOMAIN-SUFFIX,rtax.criteo.com - - DOMAIN-SUFFIX,rtb.com.ru - - DOMAIN-SUFFIX,rtb.eanalyzer.de - - DOMAIN-SUFFIX,rtb.metrigo.com - - DOMAIN-SUFFIX,rtbasia.com - - DOMAIN-SUFFIX,rtb-p.kejet.net - - DOMAIN-SUFFIX,rtbstat.zcdsp.com - - DOMAIN-SUFFIX,rtlog.vidown.cn - - DOMAIN-SUFFIX,rtmonitor.kugou.com - - DOMAIN-SUFFIX,rto.steelhousemedia.com - - DOMAIN-SUFFIX,ruan88.com - - DOMAIN-SUFFIX,rubicon-match.dotomi.com - - DOMAIN-SUFFIX,rubiconproject.com - - DOMAIN-SUFFIX,rudy.adsnative.com - - DOMAIN-SUFFIX,ru-gmtdmp.mookie1.com - - DOMAIN-SUFFIX,rum-collector.pingdom.net - - DOMAIN-SUFFIX,rum-static.pingdom.net - - DOMAIN-SUFFIX,runetki.joyreactor.ru - - DOMAIN-SUFFIX,runiman.com - - DOMAIN-SUFFIX,rutrk.org - - DOMAIN-SUFFIX,ruxianke.com - - DOMAIN-SUFFIX,rvb.quanliyouxi.cn - - DOMAIN-SUFFIX,rwjfs.com - - DOMAIN-SUFFIX,rwq.youle55.com - - DOMAIN-SUFFIX,rxwan.com - - DOMAIN-SUFFIX,ry51w.cn - - DOMAIN-SUFFIX,s.0.0.0.0.cn - - DOMAIN-SUFFIX,s.051352.com - - DOMAIN-SUFFIX,s.0594529.com - - DOMAIN-SUFFIX,s.17173cdn.com - - DOMAIN-SUFFIX,s.35kds.com - - DOMAIN-SUFFIX,s.5jjx.net - - DOMAIN-SUFFIX,s.652748.com - - DOMAIN-SUFFIX,s.6travel.com - - DOMAIN-SUFFIX,s.abcache.com - - DOMAIN-SUFFIX,s.alitui.weibo.com - - DOMAIN-SUFFIX,s.baidu.com - - DOMAIN-SUFFIX,s.bmgan.com - - DOMAIN-SUFFIX,s.caduka.cn - - DOMAIN-SUFFIX,s.cdn.u17t.com - - DOMAIN-SUFFIX,s.cdxyb.cn - - DOMAIN-SUFFIX,s.clkservice.youdao.com - - DOMAIN-SUFFIX,s.com2us.net - - DOMAIN-SUFFIX,s.coveredsys.cn - - DOMAIN-SUFFIX,s.cr-nielsen.com - - DOMAIN-SUFFIX,s.csbew.com - - DOMAIN-SUFFIX,s.ddstu.com - - DOMAIN-SUFFIX,s.de123.net - - DOMAIN-SUFFIX,s.doyo.cn - - DOMAIN-SUFFIX,s.dpcq1.net - - DOMAIN-SUFFIX,s.dsjcfw.com - - DOMAIN-SUFFIX,s.effectivemeasure.net - - DOMAIN-SUFFIX,s.ekeide.com - - DOMAIN-SUFFIX,s.georgias.cn - - DOMAIN-SUFFIX,s.go.sohu.com - - DOMAIN-SUFFIX,s.haiyunx.com - - DOMAIN-SUFFIX,s.hk9600.com - - DOMAIN-SUFFIX,s.hkfuy.com - - DOMAIN-SUFFIX,s.hnhgw.cn - - DOMAIN-SUFFIX,s.hzht666.com - - DOMAIN-SUFFIX,s.img.mix.sina.com.cn - - DOMAIN-SUFFIX,s.iroby.com - - DOMAIN-SUFFIX,s.iuuff.com - - DOMAIN-SUFFIX,s.jandan.com - - DOMAIN-SUFFIX,s.jimdo.com - - DOMAIN-SUFFIX,s.jlminte.com - - DOMAIN-SUFFIX,s.jpush.cn - - DOMAIN-SUFFIX,s.jzkelida.com - - DOMAIN-SUFFIX,s.khgj.cn - - DOMAIN-SUFFIX,s.l8l9.com - - DOMAIN-SUFFIX,s.maipubao.cn - - DOMAIN-SUFFIX,s.meimeidaren.com - - DOMAIN-SUFFIX,s.mgwcn.com - - DOMAIN-SUFFIX,s.mt145.com - - DOMAIN-SUFFIX,s.okmgy.cn - - DOMAIN-SUFFIX,s.phpwind.com - - DOMAIN-SUFFIX,s.qd.qingting.fm - - DOMAIN-SUFFIX,s.qd.qingtingfm.com - - DOMAIN-SUFFIX,s.qhupdate.com - - DOMAIN-SUFFIX,s.qtad.qingting.fm - - DOMAIN-SUFFIX,s.qzkxt.com - - DOMAIN-SUFFIX,s.ryre.cn - - DOMAIN-SUFFIX,s.sh.qihoo.com - - DOMAIN-SUFFIX,s.shiftrro.com - - DOMAIN-SUFFIX,s.staqnet.com - - DOMAIN-SUFFIX,s.temaidi.com - - DOMAIN-SUFFIX,s.trafficjam.cn - - DOMAIN-SUFFIX,s.uc627.com - - DOMAIN-SUFFIX,s.uuidksinc.net - - DOMAIN-SUFFIX,s.wapadv.com - - DOMAIN-SUFFIX,s.wrating.com - - DOMAIN-SUFFIX,s.wxktv.cn - - DOMAIN-SUFFIX,s.x.cn.xtgreat.com - - DOMAIN-SUFFIX,s.xcfe.cn - - DOMAIN-SUFFIX,s.xinghao89.com - - DOMAIN-SUFFIX,s.xmcmn.com - - DOMAIN-SUFFIX,s.yanpoly.com - - DOMAIN-SUFFIX,s.yfycy.com - - DOMAIN-SUFFIX,s.yidianzixun.com - - DOMAIN-SUFFIX,s.yjkyj.cn - - DOMAIN-SUFFIX,s.youmi.net - - DOMAIN-SUFFIX,s.ysxufeng.com - - DOMAIN-SUFFIX,s.yunpifu.cn - - DOMAIN-SUFFIX,s.zgclmw.cn - - DOMAIN-SUFFIX,s.zixuntop.com - - DOMAIN-SUFFIX,s.zjhoudao.com - - DOMAIN-SUFFIX,s.zlongad.com - - DOMAIN-SUFFIX,s.zxwdw.com - - DOMAIN-SUFFIX,s0.2mdn.net - - DOMAIN-SUFFIX,s03.optimix.asia - - DOMAIN-SUFFIX,s1.2mdn.net - - DOMAIN-SUFFIX,s1.cmfu.com - - DOMAIN-SUFFIX,s1.hiapk.com - - DOMAIN-SUFFIX,s1.hnhbyxdq.com - - DOMAIN-SUFFIX,s1.huiqituan.com - - DOMAIN-SUFFIX,s1.iigushi.com - - DOMAIN-SUFFIX,s1.kutongji.com - - DOMAIN-SUFFIX,s1.mingmingtehui.com - - DOMAIN-SUFFIX,s1.qiqutt.cn - - DOMAIN-SUFFIX,s1.qiqutt.com - - DOMAIN-SUFFIX,s1.qiuyi.cn - - DOMAIN-SUFFIX,s1.s8tu.com - - DOMAIN-SUFFIX,s1.tansuotv.com - - DOMAIN-SUFFIX,s10.histats.com - - DOMAIN-SUFFIX,s2.dnaxddnc.com - - DOMAIN-SUFFIX,s2.hiapk.com - - DOMAIN-SUFFIX,s2.huoying666.com - - DOMAIN-SUFFIX,s2.kuaibaopay.com - - DOMAIN-SUFFIX,s2.mingmingtehui.com - - DOMAIN-SUFFIX,s2.yandui.com - - DOMAIN-SUFFIX,s2.zdface.com - - DOMAIN-SUFFIX,s2.zdmimg.com - - DOMAIN-SUFFIX,s3.pfp.sina.net - - DOMAIN-SUFFIX,s3.rongnews.com - - DOMAIN-SUFFIX,s3d4.cn - - DOMAIN-SUFFIX,s4.55.la - - DOMAIN-SUFFIX,s4.histats.com - - DOMAIN-SUFFIX,s400cc.com - - DOMAIN-SUFFIX,s5.keydot.net - - DOMAIN-SUFFIX,s8.001fzc.com - - DOMAIN-SUFFIX,s8.dnaxddnc.com - - DOMAIN-SUFFIX,s8x1.com - - DOMAIN-SUFFIX,s9w.cc - - DOMAIN-SUFFIX,sa909.com - - DOMAIN-SUFFIX,sad.qeo.cn - - DOMAIN-SUFFIX,safe.tsgpay.cn - - DOMAIN-SUFFIX,safe-aisle.jointreport-switch.com - - DOMAIN-SUFFIX,saferwet.com - - DOMAIN-SUFFIX,same.chinadaily.com.cn - - DOMAIN-SUFFIX,same.eastmoney.com - - DOMAIN-SUFFIX,same.jrj.com.cn - - DOMAIN-SUFFIX,same.mzy2014.com - - DOMAIN-SUFFIX,same.stockstar.com - - DOMAIN-SUFFIX,same01.jrj.com.cn - - DOMAIN-SUFFIX,same02.jrj.com.cn - - DOMAIN-SUFFIX,same03.jrj.com.cn - - DOMAIN-SUFFIX,sams.nikonimaging.com - - DOMAIN-SUFFIX,sangxi.top - - DOMAIN-SUFFIX,sanya1.com - - DOMAIN-SUFFIX,sape.ru - - DOMAIN-SUFFIX,sapi.sina.cn - - DOMAIN-SUFFIX,savebt.net - - DOMAIN-SUFFIX,saxxaz.taohuayuan8888.com - - DOMAIN-SUFFIX,sb.scorecardresearch.com - - DOMAIN-SUFFIX,sb88b.com - - DOMAIN-SUFFIX,sbeacon.sina.com.cn - - DOMAIN-SUFFIX,sbrqp.com - - DOMAIN-SUFFIX,sbw.ysjweb.com - - DOMAIN-SUFFIX,sc.58mingtian.cn - - DOMAIN-SUFFIX,sc.chinaiiss.com - - DOMAIN-SUFFIX,sc.ggdoubi.com - - DOMAIN-SUFFIX,sc.ggfeng.com - - DOMAIN-SUFFIX,sc.iasds01.com - - DOMAIN-SUFFIX,sc.sczxy.com - - DOMAIN-SUFFIX,sc.shayugg.com - - DOMAIN-SUFFIX,sc1369.com - - DOMAIN-SUFFIX,scc.0.0.0.0.cn - - DOMAIN-SUFFIX,sccdn.f2zd.com - - DOMAIN-SUFFIX,scdng.com - - DOMAIN-SUFFIX,scdown.qq.com - - DOMAIN-SUFFIX,scene.vip.xunlei.com - - DOMAIN-SUFFIX,schborg.com - - DOMAIN-SUFFIX,schemas.android.com - - DOMAIN-SUFFIX,schprompt.dangdang.com - - DOMAIN-SUFFIX,sciencelolb.com - - DOMAIN-SUFFIX,scimg.27admin.com - - DOMAIN-SUFFIX,sclick.6rooms.com - - DOMAIN-SUFFIX,sclick.baidu.com - - DOMAIN-SUFFIX,sclizhong.com - - DOMAIN-SUFFIX,sclog.moviebox.baofeng.com - - DOMAIN-SUFFIX,scorecardresearch.com - - DOMAIN-SUFFIX,scribe.twitter.com - - DOMAIN-SUFFIX,scrippsnetworks.com - - DOMAIN-SUFFIX,script.crazyegg.com - - DOMAIN-SUFFIX,script.vccoo.com - - DOMAIN-SUFFIX,script-bd.baixing.net - - DOMAIN-SUFFIX,scriptcc.cc - - DOMAIN-SUFFIX,scupio.com - - DOMAIN-SUFFIX,scw0.com - - DOMAIN-SUFFIX,sd.0.0.0.0.cn - - DOMAIN-SUFFIX,sd.kk3g.net - - DOMAIN-SUFFIX,sdac.lenovomm.com - - DOMAIN-SUFFIX,sdapprecv.app.cntvwb.cn - - DOMAIN-SUFFIX,sdb.amazonaws.com - - DOMAIN-SUFFIX,sdhzstone.net - - DOMAIN-SUFFIX,sdk.appadhoc.com - - DOMAIN-SUFFIX,sdk.cdnmaster.com - - DOMAIN-SUFFIX,sdk.cmgame.com - - DOMAIN-SUFFIX,sdk.conf.igexin.com - - DOMAIN-SUFFIX,sdk.mobad.ijinshan.com - - DOMAIN-SUFFIX,sdk.open.amp.igexin.com - - DOMAIN-SUFFIX,sdk.open.lbs.igexin.com - - DOMAIN-SUFFIX,sdk.open.phone.igexin.com - - DOMAIN-SUFFIX,sdk.open.talk.gepush.com - - DOMAIN-SUFFIX,sdk.open.talk.igexin.com - - DOMAIN-SUFFIX,sdkapp.mobile.sina.cn - - DOMAIN-SUFFIX,sdkapp.uve.weibo.com - - DOMAIN-SUFFIX,sdkclick.mobile.sina.cn - - DOMAIN-SUFFIX,sdkconfig.ad.intl.xiaomi.com - - DOMAIN-SUFFIX,sdkdm.com - - DOMAIN-SUFFIX,sdklog.cmgame.com - - DOMAIN-SUFFIX,sdklog.uu.cc - - DOMAIN-SUFFIX,sdkpay.uu.cc - - DOMAIN-SUFFIX,sdksitter.m.sjzhushou.com - - DOMAIN-SUFFIX,sdl.0.0.0.0.cn - - DOMAIN-SUFFIX,sdn.kugou.com - - DOMAIN-SUFFIX,sdn.penggua.com.cn - - DOMAIN-SUFFIX,sdownload.stargame.com - - DOMAIN-SUFFIX,sdqoi2d.com - - DOMAIN-SUFFIX,sdwfw.com - - DOMAIN-SUFFIX,sdycd.com - - DOMAIN-SUFFIX,sea.napi.ucweb.com - - DOMAIN-SUFFIX,searchignited.com - - DOMAIN-SUFFIX,searchswapper.com - - DOMAIN-SUFFIX,seavideo-ak.espn.go.com - - DOMAIN-SUFFIX,sebar.thand.info - - DOMAIN-SUFFIX,sec.resource.xiaomi.net - - DOMAIN-SUFFIX,secpay.wostore.cn - - DOMAIN-SUFFIX,secretmedia.s3.amazonaws.com - - DOMAIN-SUFFIX,secure.dsp.com - - DOMAIN-SUFFIX,secure.fastclick.net - - DOMAIN-SUFFIX,secure.img-cdn.mediaplex.com - - DOMAIN-SUFFIX,secure.quantserve.com - - DOMAIN-SUFFIX,secure.statcounter.com - - DOMAIN-SUFFIX,secure-asia.imrworldwide.com - - DOMAIN-SUFFIX,secure-assets.rubiconproject.com - - DOMAIN-SUFFIX,secure-chn.imrworldwide.com - - DOMAIN-SUFFIX,secure-ds.serving-sys.com - - DOMAIN-SUFFIX,security.browser.miui.com - - DOMAIN-SUFFIX,seen.h01ce.cn - - DOMAIN-SUFFIX,seen.hgo7r.cn - - DOMAIN-SUFFIX,seg.sharethis.com - - DOMAIN-SUFFIX,segment.com - - DOMAIN-SUFFIX,selfie.snapmobileasia.net - - DOMAIN-SUFFIX,sell1.etlong.com - - DOMAIN-SUFFIX,sensorsdata.ruguoapp.com - - DOMAIN-SUFFIX,serial.alcohol-soft.com - - DOMAIN-SUFFIX,serrano.hardwareheaven.com - - DOMAIN-SUFFIX,serve.popads.net - - DOMAIN-SUFFIX,servedby.keygamesnetwork.com - - DOMAIN-SUFFIX,server.m.pp.cn - - DOMAIN-SUFFIX,service.ad.adesk.com - - DOMAIN-SUFFIX,service.ad.duomi.com - - DOMAIN-SUFFIX,service.cocounion.com - - DOMAIN-SUFFIX,service.danmu.youku.com - - DOMAIN-SUFFIX,service.epro.sogou.com - - DOMAIN-SUFFIX,service.urchin.com - - DOMAIN-SUFFIX,servicer.adskeeper.co.uk - - DOMAIN-SUFFIX,serving-sys.com - - DOMAIN-SUFFIX,sestat.baidu.com - - DOMAIN-SUFFIX,setting.crashlytics.com - - DOMAIN-SUFFIX,setting.rayjump.com - - DOMAIN-SUFFIX,setting.snswin.qq.com - - DOMAIN-SUFFIX,settings.crashlytics.com - - DOMAIN-SUFFIX,sezvc.com - - DOMAIN-SUFFIX,sfloushi.com - - DOMAIN-SUFFIX,sg536.cn - - DOMAIN-SUFFIX,sgbfjs.info - - DOMAIN-SUFFIX,sg-cdn.effectivemeasure.net - - DOMAIN-SUFFIX,sgg.southcn.com - - DOMAIN-SUFFIX,sgvip.chinahdcm.com - - DOMAIN-SUFFIX,sh.qihoo.com - - DOMAIN-SUFFIX,sh.shuqw.com - - DOMAIN-SUFFIX,sha50.com - - DOMAIN-SUFFIX,shadu.baidu.com - - DOMAIN-SUFFIX,shaft.jebe.renren.com - - DOMAIN-SUFFIX,shama5.com - - DOMAIN-SUFFIX,shanghaironghua.com - - DOMAIN-SUFFIX,shanglinli.com - - DOMAIN-SUFFIX,shangz99991.com - - DOMAIN-SUFFIX,shankejingling.com - - DOMAIN-SUFFIX,share.gzdsw.com - - DOMAIN-SUFFIX,shared.youdao.com - - DOMAIN-SUFFIX,sharedaddomain.com - - DOMAIN-SUFFIX,sharrysweb.com - - DOMAIN-SUFFIX,shbywsd.cn - - DOMAIN-SUFFIX,shenghuo.xiaomi.com - - DOMAIN-SUFFIX,shenleyuni.com - - DOMAIN-SUFFIX,shenyian.net - - DOMAIN-SUFFIX,shenyun.com - - DOMAIN-SUFFIX,shenyun.org - - DOMAIN-SUFFIX,shenyunperformingarts.org - - DOMAIN-SUFFIX,shglegle.com - - DOMAIN-SUFFIX,shibeiou.com - - DOMAIN-SUFFIX,shiftrro.com - - DOMAIN-SUFFIX,shili.downxia.com - - DOMAIN-SUFFIX,shili.wanyx.com - - DOMAIN-SUFFIX,shiwan.dl.gxpan.cn - - DOMAIN-SUFFIX,shixunjs.th21333.com - - DOMAIN-SUFFIX,shke.kuuad.com - - DOMAIN-SUFFIX,shop.admin.yinyuetai.com - - DOMAIN-SUFFIX,shop.yinyuetai.com - - DOMAIN-SUFFIX,shop265.com - - DOMAIN-SUFFIX,shoppingpartners2.futurenet.com - - DOMAIN-SUFFIX,shouyoutan.com - - DOMAIN-SUFFIX,show.kc.taotaosou.com - - DOMAIN-SUFFIX,show.qx15.com - - DOMAIN-SUFFIX,show.xiazai16.com - - DOMAIN-SUFFIX,showcase.vpsboard.com - - DOMAIN-SUFFIX,showing.hardwareheaven.com - - DOMAIN-SUFFIX,shows.21cn.com - - DOMAIN-SUFFIX,shtt.shuqw.com - - DOMAIN-SUFFIX,shucaihangjia.com - - DOMAIN-SUFFIX,shuiguo.com - - DOMAIN-SUFFIX,shuqw.com - - DOMAIN-SUFFIX,shushijiameng123.com - - DOMAIN-SUFFIX,shuttle.bayescom.com - - DOMAIN-SUFFIX,shuzilm.cn - - DOMAIN-SUFFIX,shxinjie.cn - - DOMAIN-SUFFIX,shzyjbr.wtdtjs.rocks - - DOMAIN-SUFFIX,si9377.com - - DOMAIN-SUFFIX,sicentlife.com - - DOMAIN-SUFFIX,sifubo.cn - - DOMAIN-SUFFIX,sifuce.cn - - DOMAIN-SUFFIX,sifuda.cn - - DOMAIN-SUFFIX,sifufu.cn - - DOMAIN-SUFFIX,sifuge.cn - - DOMAIN-SUFFIX,sifugu.cn - - DOMAIN-SUFFIX,sifuhe.cn - - DOMAIN-SUFFIX,sifuhu.cn - - DOMAIN-SUFFIX,sifuji.cn - - DOMAIN-SUFFIX,sifuka.cn - - DOMAIN-SUFFIX,sigbusa.com - - DOMAIN-SUFFIX,sigo99.com - - DOMAIN-SUFFIX,simba.m.taobao.com - - DOMAIN-SUFFIX,sina.wrating.com - - DOMAIN-SUFFIX,sina.yinstar.org - - DOMAIN-SUFFIX,sinaalicdn.com - - DOMAIN-SUFFIX,sinaaliyun.cn - - DOMAIN-SUFFIX,siqwqjza.m.yikanxiaoshuo.net - - DOMAIN-SUFFIX,sis.jpush.io - - DOMAIN-SUFFIX,sit.gentags.net - - DOMAIN-SUFFIX,sit.pagechoice.net - - DOMAIN-SUFFIX,site.cdnmaster.com - - DOMAIN-SUFFIX,site.img.4tube.com - - DOMAIN-SUFFIX,sitemeter.com - - DOMAIN-SUFFIX,sitemobia.com - - DOMAIN-SUFFIX,sitescout.com - - DOMAIN-SUFFIX,sitetag.us - - DOMAIN-SUFFIX,sj.uukanshu.com - - DOMAIN-SUFFIX,sj1.3987.com - - DOMAIN-SUFFIX,sjj.jsyjwj.com - - DOMAIN-SUFFIX,skatehot.net - - DOMAIN-SUFFIX,sl.xawjwl.com - - DOMAIN-SUFFIX,slb.sxuantang.com - - DOMAIN-SUFFIX,slb.upshengyi.com - - DOMAIN-SUFFIX,slib.tvmao.cn - - DOMAIN-SUFFIX,slides.discovery.tom.com - - DOMAIN-SUFFIX,slog.sina.cn - - DOMAIN-SUFFIX,slog.sina.com.cn - - DOMAIN-SUFFIX,slot.union.ucweb.com - - DOMAIN-SUFFIX,slzs.52xiyou.com - - DOMAIN-SUFFIX,sm.0.0.0.0.cn - - DOMAIN-SUFFIX,sm1.todgo.com - - DOMAIN-SUFFIX,sm2.todgo.com - - DOMAIN-SUFFIX,smartmad.com - - DOMAIN-SUFFIX,smblock.s3.amazonaws.com - - DOMAIN-SUFFIX,smgru.net - - DOMAIN-SUFFIX,smucdn.com - - DOMAIN-SUFFIX,smxay.com - - DOMAIN-SUFFIX,smxsg.com - - DOMAIN-SUFFIX,snap.snapmobile.asia - - DOMAIN-SUFFIX,snapmobileasia.net - - DOMAIN-SUFFIX,sngmta.qq.com - - DOMAIN-SUFFIX,snnnyy.com - - DOMAIN-SUFFIX,snow001.com - - DOMAIN-SUFFIX,so9l.com - - DOMAIN-SUFFIX,soarfi.cn - - DOMAIN-SUFFIX,sobar.baidu.com - - DOMAIN-SUFFIX,sobartop.baidu.com - - DOMAIN-SUFFIX,social-touch.com - - DOMAIN-SUFFIX,sod.onelink.me - - DOMAIN-SUFFIX,soft.chaomeng8.com - - DOMAIN-SUFFIX,soft.zhidian3g.cn - - DOMAIN-SUFFIX,sohu.irs01.com - - DOMAIN-SUFFIX,sohu.wrating.com - - DOMAIN-SUFFIX,somecoding.com - - DOMAIN-SUFFIX,somennew.com - - DOMAIN-SUFFIX,song.fanxing.kugou.com - - DOMAIN-SUFFIX,song001.com - - DOMAIN-SUFFIX,sonomoyo.com - - DOMAIN-SUFFIX,sos0easy.com - - DOMAIN-SUFFIX,sou.dkdlsj.com - - DOMAIN-SUFFIX,sou.xanbhx.com - - DOMAIN-SUFFIX,souid.com - - DOMAIN-SUFFIX,source.youxiaoad.com - - DOMAIN-SUFFIX,sousuo.xm.sjzhushou.com - - DOMAIN-SUFFIX,sp.fastclick.net - - DOMAIN-SUFFIX,sp.gmossp-sp.jp - - DOMAIN-SUFFIX,sp.wndoor.com - - DOMAIN-SUFFIX,sp.yixui.com - - DOMAIN-SUFFIX,sp3.cndm.com - - DOMAIN-SUFFIX,spad.i-mobile.co.jp - - DOMAIN-SUFFIX,spade.twitch.tv - - DOMAIN-SUFFIX,spap.adingo.jp - - DOMAIN-SUFFIX,spap.adingo.jp.eimg.jp - - DOMAIN-SUFFIX,spapi.i-mobile.co.jp - - DOMAIN-SUFFIX,spb.bid.run - - DOMAIN-SUFFIX,spcdnpc.i-mobile.co.jp - - DOMAIN-SUFFIX,spcnv.i-mobile.co.jp - - DOMAIN-SUFFIX,spcode.baidu.com - - DOMAIN-SUFFIX,spdeliver.i-mobile.co.jp - - DOMAIN-SUFFIX,spdmg.i-mobile.co.jp - - DOMAIN-SUFFIX,spdmg-backend.i-mobile.co.jp - - DOMAIN-SUFFIX,sphwq.net - - DOMAIN-SUFFIX,spnet2-1.i-mobile.co.jp - - DOMAIN-SUFFIX,spnet33.i-mobile.co.jp - - DOMAIN-SUFFIX,sponsorpay.com - - DOMAIN-SUFFIX,sponsors.s2ki.com - - DOMAIN-SUFFIX,sponsors.webosroundup.com - - DOMAIN-SUFFIX,spproxy.autobytel.com - - DOMAIN-SUFFIX,spro.so.com - - DOMAIN-SUFFIX,spt.dictionary.com - - DOMAIN-SUFFIX,sqd.jstdjq.com - - DOMAIN-SUFFIX,sqext.com - - DOMAIN-SUFFIX,sqtpks3.1391.com - - DOMAIN-SUFFIX,squarespace.evyy.net - - DOMAIN-SUFFIX,src.duanxin520.com - - DOMAIN-SUFFIX,src.leju.com - - DOMAIN-SUFFIX,src.zf313.com - - DOMAIN-SUFFIX,srd.simba.taobao.com - - DOMAIN-SUFFIX,srhuafeng.com - - DOMAIN-SUFFIX,srv.carbonads.net - - DOMAIN-SUFFIX,srv.revdepo.com - - DOMAIN-SUFFIX,srv.thespacereporter.com - - DOMAIN-SUFFIX,ss.cnczjy.com - - DOMAIN-SUFFIX,ss.cnnic.cn - - DOMAIN-SUFFIX,ss.he9630.com - - DOMAIN-SUFFIX,ss.knet.cn - - DOMAIN-SUFFIX,ss.missyouxi.com - - DOMAIN-SUFFIX,ss.shicimingju.com - - DOMAIN-SUFFIX,ss.shuajuzu.com - - DOMAIN-SUFFIX,ss.subo.me - - DOMAIN-SUFFIX,ss.swagger1.com - - DOMAIN-SUFFIX,ss.sysad.cn - - DOMAIN-SUFFIX,ss.sysadult.cn - - DOMAIN-SUFFIX,ssac.suning.com - - DOMAIN-SUFFIX,sscefsol.com - - DOMAIN-SUFFIX,sscefsol.com.cn - - DOMAIN-SUFFIX,ssdaili.com - - DOMAIN-SUFFIX,ssh.hxlif.com - - DOMAIN-SUFFIX,ssh.jsyzw132.com - - DOMAIN-SUFFIX,ssh.lifu11.com - - DOMAIN-SUFFIX,ssh.szxiuchang.com - - DOMAIN-SUFFIX,ssh.yezijizhang.com - - DOMAIN-SUFFIX,ssjpx.com - - DOMAIN-SUFFIX,ssjy168.com - - DOMAIN-SUFFIX,ssl.google-analytics.com - - DOMAIN-SUFFIX,ssl.hyhzy.cn - - DOMAIN-SUFFIX,ssl.ymapp.com - - DOMAIN-SUFFIX,ssl-cdn.media.innity.net - - DOMAIN-SUFFIX,sso-cas.gridsumdissector.com - - DOMAIN-SUFFIX,ssp.08160.cn - - DOMAIN-SUFFIX,ssp.1rtb.com - - DOMAIN-SUFFIX,ssp.4hw.com.cn - - DOMAIN-SUFFIX,ssp.86str.com - - DOMAIN-SUFFIX,ssp.chaohutechan.com - - DOMAIN-SUFFIX,ssp.cibn.starschina.com - - DOMAIN-SUFFIX,ssp.daxueshengqiandai.com - - DOMAIN-SUFFIX,ssp.dmpdsp.com - - DOMAIN-SUFFIX,ssp.kjwx8.com - - DOMAIN-SUFFIX,ssp.kss.ksyun.com - - DOMAIN-SUFFIX,ssp.kssws.ks-cdn.com - - DOMAIN-SUFFIX,ssp.kxly360.com - - DOMAIN-SUFFIX,ssp.pro.cn - - DOMAIN-SUFFIX,ssp.tadseeker.com - - DOMAIN-SUFFIX,ssp.thescenseproject.com - - DOMAIN-SUFFIX,ssp.youxiaoad.com - - DOMAIN-SUFFIX,ssp.zf313.com - - DOMAIN-SUFFIX,ssp1.dmpdsp.com - - DOMAIN-SUFFIX,sspapi.youxiaoad.com - - DOMAIN-SUFFIX,ssp-bidder.i-mobile.co.jp - - DOMAIN-SUFFIX,ssp-rtb.sape.ru - - DOMAIN-SUFFIX,sss.jusha.com - - DOMAIN-SUFFIX,sss.sege.xxx - - DOMAIN-SUFFIX,sss.soarfi.cn - - DOMAIN-SUFFIX,sss.wzjmr.com - - DOMAIN-SUFFIX,sss.zbred.com - - DOMAIN-SUFFIX,sssvd.china.com - - DOMAIN-SUFFIX,sstc360.com - - DOMAIN-SUFFIX,ssum.casalemedia.com - - DOMAIN-SUFFIX,st.holalauncher.com - - DOMAIN-SUFFIX,st.holaworld.cn - - DOMAIN-SUFFIX,st.targetix.net - - DOMAIN-SUFFIX,st.yandexadexchange.net - - DOMAIN-SUFFIX,st.yengo.com - - DOMAIN-SUFFIX,sta.ganji.com - - DOMAIN-SUFFIX,sta.haloall.com - - DOMAIN-SUFFIX,sta.holagames.com - - DOMAIN-SUFFIX,sta.jcjk0451.com - - DOMAIN-SUFFIX,stadig.ifeng.com - - DOMAIN-SUFFIX,stadig0.ifeng.com - - DOMAIN-SUFFIX,staging.admin.e.mi.com - - DOMAIN-SUFFIX,staqnet.com - - DOMAIN-SUFFIX,star8.net - - DOMAIN-SUFFIX,startapp.com - - DOMAIN-SUFFIX,startappexchange.com - - DOMAIN-SUFFIX,startappservice.com - - DOMAIN-SUFFIX,startup.oupeng.com - - DOMAIN-SUFFIX,static1.kewaishu.info - - DOMAIN-SUFFIX,staticadm.leju.com - - DOMAIN-SUFFIX,staticadm.leju.sina.com.cn - - DOMAIN-SUFFIX,staticjs.cn - - DOMAIN-SUFFIX,statics.3987.com - - DOMAIN-SUFFIX,statics.9669.com - - DOMAIN-SUFFIX,statics.woozooo.com - - DOMAIN-SUFFIX,statictest.fraudmetrix.cn - - DOMAIN-SUFFIX,static-xl9-ssl.xunlei.com - - DOMAIN-SUFFIX,staticxx.facebook.com - - DOMAIN-SUFFIX,statisticsv2.yinyuetai.com - - DOMAIN-SUFFIX,stat-y.xywy.com - - DOMAIN-SUFFIX,stat-z.xywy.com - - DOMAIN-SUFFIX,steelhousemedia.com - - DOMAIN-SUFFIX,stervapoimenialena.info - - DOMAIN-SUFFIX,stg8.com - - DOMAIN-SUFFIX,stjzh.gdtarget.com - - DOMAIN-SUFFIX,st-n.ads3-adnow.com - - DOMAIN-SUFFIX,stn88.com - - DOMAIN-SUFFIX,stocksbsc.com - - DOMAIN-SUFFIX,storeconfig.mistat.xiaomi.com - - DOMAIN-SUFFIX,storewidget.pcauthority.com.au - - DOMAIN-SUFFIX,stream.heavenmedia.net - - DOMAIN-SUFFIX,stream.shuzilm.cn - - DOMAIN-SUFFIX,streaming.rtbiddingplatform.com - - DOMAIN-SUFFIX,strip.alicdn.com - - DOMAIN-SUFFIX,strip.taobaocdn.com - - DOMAIN-SUFFIX,su.8881919.cc - - DOMAIN-SUFFIX,su.bdimg.com - - DOMAIN-SUFFIX,su.bdstatic.com - - DOMAIN-SUFFIX,sub.powerapple.com - - DOMAIN-SUFFIX,sub.topber.com - - DOMAIN-SUFFIX,subswin.com - - DOMAIN-SUFFIX,sucodb.com - - DOMAIN-SUFFIX,sunjianhao.com - - DOMAIN-SUFFIX,suoooi.cn - - DOMAIN-SUFFIX,super.cat898.com - - DOMAIN-SUFFIX,super.kdnet.net - - DOMAIN-SUFFIX,supfast.net - - DOMAIN-SUFFIX,surv.xbizmedia.com - - DOMAIN-SUFFIX,susapi.dev.surepush.cn - - DOMAIN-SUFFIX,susapi.lenovomm.com - - DOMAIN-SUFFIX,suvset.sohu.com - - DOMAIN-SUFFIX,sv719.dreamdays.cn - - DOMAIN-SUFFIX,sw.cailawyer.cn - - DOMAIN-SUFFIX,sw.mobile.sogou.com - - DOMAIN-SUFFIX,swa.gtimg.com - - DOMAIN-SUFFIX,swappdl.duoyi.com - - DOMAIN-SUFFIX,switchadhub.com - - DOMAIN-SUFFIX,switching.atm.punchbox.org - - DOMAIN-SUFFIX,swpgjai.pop.weddingeeos.com - - DOMAIN-SUFFIX,swx.0.0.0.0.cn - - DOMAIN-SUFFIX,sxbhzs.net - - DOMAIN-SUFFIX,sxdyrq.com - - DOMAIN-SUFFIX,sxjxhg.com - - DOMAIN-SUFFIX,sxz67.com - - DOMAIN-SUFFIX,sy.code.mytanwan.com - - DOMAIN-SUFFIX,sy.flash.mytanwan.com - - DOMAIN-SUFFIX,sy.jlhygy.com - - DOMAIN-SUFFIX,sy.kcxsyz.com - - DOMAIN-SUFFIX,sy.shongcheng.com - - DOMAIN-SUFFIX,sy.sxjxhg.com - - DOMAIN-SUFFIX,sycbbs.com - - DOMAIN-SUFFIX,sy-cdnres.unionsy.com - - DOMAIN-SUFFIX,syilm.net - - DOMAIN-SUFFIX,sykty.com - - DOMAIN-SUFFIX,symaj.cn - - DOMAIN-SUFFIX,synacast.com - - DOMAIN-SUFFIX,sync.1dmp.io - - DOMAIN-SUFFIX,sync.1rx.io - - DOMAIN-SUFFIX,sync.adotmob.com - - DOMAIN-SUFFIX,sync.audsp.com - - DOMAIN-SUFFIX,sync.audtd.com - - DOMAIN-SUFFIX,sync.crwdcntrl.net - - DOMAIN-SUFFIX,sync.extend.tv - - DOMAIN-SUFFIX,sync.fastclick.net - - DOMAIN-SUFFIX,sync.intentiq.com - - DOMAIN-SUFFIX,sync.ipredictive.com - - DOMAIN-SUFFIX,sync.mathtag.com - - DOMAIN-SUFFIX,sync.morgdm.ru - - DOMAIN-SUFFIX,sync.rambler.ru - - DOMAIN-SUFFIX,sync.republer.com - - DOMAIN-SUFFIX,sync.teamrtb.net - - DOMAIN-SUFFIX,sync.tidaltv.com - - DOMAIN-SUFFIX,sync2.audtd.com - - DOMAIN-SUFFIX,sync-dsp.ad-m.asia - - DOMAIN-SUFFIX,sync-eu.exe.bid - - DOMAIN-SUFFIX,sync-tm.everesttech.net - - DOMAIN-SUFFIX,syndication.exdynsrv.com - - DOMAIN-SUFFIX,syndication.exoclick.com - - DOMAIN-SUFFIX,syndication.intel.com - - DOMAIN-SUFFIX,syndication.jsadapi.com - - DOMAIN-SUFFIX,syndication.twitter.com - - DOMAIN-SUFFIX,syndication1.viraladnetwork.net - - DOMAIN-SUFFIX,syndication-o.twitter.com - - DOMAIN-SUFFIX,syofew6o.net - - DOMAIN-SUFFIX,sys.zhangyue.com - - DOMAIN-SUFFIX,sysdig.com - - DOMAIN-SUFFIX,sytcyf.com - - DOMAIN-SUFFIX,sytsr.com - - DOMAIN-SUFFIX,sytz1288.com - - DOMAIN-SUFFIX,szb.aiyole.com - - DOMAIN-SUFFIX,szdzbx.com - - DOMAIN-SUFFIX,szfaq.com - - DOMAIN-SUFFIX,szggdw.com - - DOMAIN-SUFFIX,szkdst.com - - DOMAIN-SUFFIX,szrk3.com - - DOMAIN-SUFFIX,szshouzhai.com - - DOMAIN-SUFFIX,szxc868.com - - DOMAIN-SUFFIX,szxpsg.com - - DOMAIN-SUFFIX,szyr474.com - - DOMAIN-SUFFIX,t.2d-c.cn - - DOMAIN-SUFFIX,t.3apf.com - - DOMAIN-SUFFIX,t.adbxb.cn - - DOMAIN-SUFFIX,t.adcrops.net - - DOMAIN-SUFFIX,t.adxchina.cn - - DOMAIN-SUFFIX,t.atpanel.com - - DOMAIN-SUFFIX,t.cnsjx.net - - DOMAIN-SUFFIX,t.collect.yinyuetai.com - - DOMAIN-SUFFIX,t.cr-nielsen.com - - DOMAIN-SUFFIX,t.cyuew.com - - DOMAIN-SUFFIX,t.d.yoyi.tv - - DOMAIN-SUFFIX,t.dangdang.com - - DOMAIN-SUFFIX,t.dmtrck.com - - DOMAIN-SUFFIX,t.go.sohu.com - - DOMAIN-SUFFIX,t.growingio.com - - DOMAIN-SUFFIX,t.iz55.com - - DOMAIN-SUFFIX,t.oq68.com - - DOMAIN-SUFFIX,t.pingzei.com - - DOMAIN-SUFFIX,t.qiuqiuqipai.com - - DOMAIN-SUFFIX,t.sj.qq.com - - DOMAIN-SUFFIX,t.supermario.xyz - - DOMAIN-SUFFIX,t.trafmag.com - - DOMAIN-SUFFIX,t.tzcccm.com - - DOMAIN-SUFFIX,t.ujian.cc - - DOMAIN-SUFFIX,t.uvcourse.net - - DOMAIN-SUFFIX,t.youmi.net - - DOMAIN-SUFFIX,t1.58cdn.com.cn - - DOMAIN-SUFFIX,t1.jzkapp.com - - DOMAIN-SUFFIX,t1.visualrevenue.com - - DOMAIN-SUFFIX,t1.wshufa.com - - DOMAIN-SUFFIX,t188.dazhonghua.cn - - DOMAIN-SUFFIX,t2.58cdn.com.cn - - DOMAIN-SUFFIX,t2.jzkapp.com - - DOMAIN-SUFFIX,t2.vbxx.net - - DOMAIN-SUFFIX,t2.wshufa.com - - DOMAIN-SUFFIX,t3.58cdn.com.cn - - DOMAIN-SUFFIX,t70123.com - - DOMAIN-SUFFIX,t75.qyqc4s.com - - DOMAIN-SUFFIX,ta.qq.com - - DOMAIN-SUFFIX,ta80.com - - DOMAIN-SUFFIX,taat00889.com - - DOMAIN-SUFFIX,tactics.bainv.net - - DOMAIN-SUFFIX,tad.suning.com - - DOMAIN-SUFFIX,tag.cdnmaster.cn - - DOMAIN-SUFFIX,tag.digitaltarget.ru - - DOMAIN-SUFFIX,tags.growingio.com - - DOMAIN-SUFFIX,tags2.adshell.net - - DOMAIN-SUFFIX,tags4.revdepo.com - - DOMAIN-SUFFIX,tajs.qq.com - - DOMAIN-SUFFIX,tajxgs.com - - DOMAIN-SUFFIX,talk.nz.igexin.com - - DOMAIN-SUFFIX,tangoutianxia.com - - DOMAIN-SUFFIX,tansuotv.com - - DOMAIN-SUFFIX,tanwanyx.com - - DOMAIN-SUFFIX,tanx.com - - DOMAIN-SUFFIX,tanxlog.istreamsche.com - - DOMAIN-SUFFIX,tanzanite.infomine.com - - DOMAIN-SUFFIX,taobaly.cn - - DOMAIN-SUFFIX,taobaoaliyun.cn - - DOMAIN-SUFFIX,taobaobo5.com - - DOMAIN-SUFFIX,taobayun.cn - - DOMAIN-SUFFIX,taoggou.com - - DOMAIN-SUFFIX,taohanpai.com - - DOMAIN-SUFFIX,taomato.com - - DOMAIN-SUFFIX,tap.rubiconproject.com - - DOMAIN-SUFFIX,tap-cdn.rubiconproject.com - - DOMAIN-SUFFIX,tapjoy.cn - - DOMAIN-SUFFIX,tapjoy.com - - DOMAIN-SUFFIX,tapjoyads.com - - DOMAIN-SUFFIX,tap-t.rubiconproject.com - - DOMAIN-SUFFIX,targetedinfo.com - - DOMAIN-SUFFIX,targetedmedia.com.cn - - DOMAIN-SUFFIX,targetedtopic.com - - DOMAIN-SUFFIX,tatagou.com.cn - - DOMAIN-SUFFIX,tb.code.twyxi.com - - DOMAIN-SUFFIX,tb060x.corp.youdao.com - - DOMAIN-SUFFIX,tb104x.corp.youdao.com - - DOMAIN-SUFFIX,tbaocdn.com - - DOMAIN-SUFFIX,tbjfw.com - - DOMAIN-SUFFIX,tc.51la.net - - DOMAIN-SUFFIX,tc.ci123.com - - DOMAIN-SUFFIX,tc600.com - - DOMAIN-SUFFIX,tcad.wedolook.com - - DOMAIN-SUFFIX,tcjy66.cc - - DOMAIN-SUFFIX,tcss.qq.com - - DOMAIN-SUFFIX,tcxshop.com - - DOMAIN-SUFFIX,td.mpush.cn - - DOMAIN-SUFFIX,td.xue63.com - - DOMAIN-SUFFIX,tdayi.com - - DOMAIN-SUFFIX,t-e.flyme.cn - - DOMAIN-SUFFIX,teen.77rog.com - - DOMAIN-SUFFIX,telstra.imrworldwide.com - - DOMAIN-SUFFIX,temai.snssdk.com - - DOMAIN-SUFFIX,temai.taobao.com - - DOMAIN-SUFFIX,temp.163.com - - DOMAIN-SUFFIX,tencentmind.com - - DOMAIN-SUFFIX,tenddata.com - - DOMAIN-SUFFIX,test.api.xlmc.sandai.net - - DOMAIN-SUFFIX,test.eduancm.com - - DOMAIN-SUFFIX,test.surepush.cn - - DOMAIN-SUFFIX,textlink.simba.taobao.com - - DOMAIN-SUFFIX,tf.caohua.com - - DOMAIN-SUFFIX,tf.hdfdm.com - - DOMAIN-SUFFIX,tf.hftaili.com - - DOMAIN-SUFFIX,t-flow.flyme.cn - - DOMAIN-SUFFIX,tfssl.caohua.com - - DOMAIN-SUFFIX,tg.1155t.cn - - DOMAIN-SUFFIX,tg.52digua.com - - DOMAIN-SUFFIX,tg.jifen.2345.com - - DOMAIN-SUFFIX,tg.m.37.com - - DOMAIN-SUFFIX,tga.csbew.com - - DOMAIN-SUFFIX,tgb.csbew.com - - DOMAIN-SUFFIX,th21333.com - - DOMAIN-SUFFIX,th7.cn - - DOMAIN-SUFFIX,thejesperbay.com - - DOMAIN-SUFFIX,themis.yahoo.com - - DOMAIN-SUFFIX,thescenseproject.com - - DOMAIN-SUFFIX,thetestpage.39.net - - DOMAIN-SUFFIX,thoughtleadr.com - - DOMAIN-SUFFIX,thxnr.com - - DOMAIN-SUFFIX,thyvjboy.com - - DOMAIN-SUFFIX,thztv.net - - DOMAIN-SUFFIX,ti.tradetracker.net - - DOMAIN-SUFFIX,tiads.time.com - - DOMAIN-SUFFIX,tiangoutai.com - - DOMAIN-SUFFIX,tiangu99.com - - DOMAIN-SUFFIX,tianmidian.com - - DOMAIN-SUFFIX,tianqi777.com - - DOMAIN-SUFFIX,tianyanzs.com - - DOMAIN-SUFFIX,ticcdn.com - - DOMAIN-SUFFIX,timelog.moviebox.baofeng.com - - DOMAIN-SUFFIX,tiqcdn.com - - DOMAIN-SUFFIX,titan.babytree.com - - DOMAIN-SUFFIX,titan.guestworld.tripod.lycos.com - - DOMAIN-SUFFIX,titan01.babytree.com - - DOMAIN-SUFFIX,titi.qifajiang.cn - - DOMAIN-SUFFIX,tjf.lyhuayun.com - - DOMAIN-SUFFIX,tjhuajiantang.com - - DOMAIN-SUFFIX,tjlog.easou.com - - DOMAIN-SUFFIX,tjlog.ps.easou.com - - DOMAIN-SUFFIX,tjqonline.cn - - DOMAIN-SUFFIX,tjs.sjs.sinajs.cn - - DOMAIN-SUFFIX,tk.baidu.com - - DOMAIN-SUFFIX,tk.optaim.com - - DOMAIN-SUFFIX,tkd777.cn - - DOMAIN-SUFFIX,tkmdng.cn - - DOMAIN-SUFFIX,tkweb.baidu.com - - DOMAIN-SUFFIX,t-l.play.aiseet.atianqi.com - - DOMAIN-SUFFIX,tmcs.net - - DOMAIN-SUFFIX,tmisc.home.news.cn - - DOMAIN-SUFFIX,tns-counter.ru - - DOMAIN-SUFFIX,token.rubiconproject.com - - DOMAIN-SUFFIX,tongji-res1.meizu.com - - DOMAIN-SUFFIX,tongqing2015.com - - DOMAIN-SUFFIX,tool.btrabbit.la - - DOMAIN-SUFFIX,toolbar.baidu.com - - DOMAIN-SUFFIX,toolbar.msn.com - - DOMAIN-SUFFIX,toourbb.com - - DOMAIN-SUFFIX,top.h.qhimg.com - - DOMAIN-SUFFIX,top.h.qhmsg.com - - DOMAIN-SUFFIX,top267.com - - DOMAIN-SUFFIX,topitme.com - - DOMAIN-SUFFIX,total.xinmin.cn - - DOMAIN-SUFFIX,touclick.com - - DOMAIN-SUFFIX,toutiao.2haha.com - - DOMAIN-SUFFIX,toutiao.jxnews.com.cn - - DOMAIN-SUFFIX,tp.sgcn.com - - DOMAIN-SUFFIX,tpe163.com - - DOMAIN-SUFFIX,tpush.html5.qq.com - - DOMAIN-SUFFIX,tqd.ntpddq.com - - DOMAIN-SUFFIX,track-east.mobileadtrading.com - - DOMAIN-SUFFIX,trackersimulator.org - - DOMAIN-SUFFIX,tracking-server-prod-1.zenmxapps.com - - DOMAIN-SUFFIX,tradeadexchange.com - - DOMAIN-SUFFIX,tradeccl.com - - DOMAIN-SUFFIX,trafficfactory.biz - - DOMAIN-SUFFIX,trafficjam.cn - - DOMAIN-SUFFIX,trafficjunky.net - - DOMAIN-SUFFIX,trafficmp.com - - DOMAIN-SUFFIX,tralog.ganji.com - - DOMAIN-SUFFIX,tran.news.so.com - - DOMAIN-SUFFIX,tredman.com - - DOMAIN-SUFFIX,trends.mobile.sina.cn - - DOMAIN-SUFFIX,trial.alcohol-soft.com - - DOMAIN-SUFFIX,trwba.com - - DOMAIN-SUFFIX,trzina.com - - DOMAIN-SUFFIX,ts.hivecn.cn - - DOMAIN-SUFFIX,tsdlp.com - - DOMAIN-SUFFIX,tsjdgzm.m.3dllc.cc - - DOMAIN-SUFFIX,tsrc8.com - - DOMAIN-SUFFIX,tt.biquge.la - - DOMAIN-SUFFIX,tt.shxinjie.cn - - DOMAIN-SUFFIX,tt.twzui6.com - - DOMAIN-SUFFIX,tt123.eastday.com - - DOMAIN-SUFFIX,tt321.eastday.com - - DOMAIN-SUFFIX,ttcdn.cn - - DOMAIN-SUFFIX,ttlm.cc - - DOMAIN-SUFFIX,ttlowe.com - - DOMAIN-SUFFIX,ttm.htfmbt.com - - DOMAIN-SUFFIX,ttts.leztc.com - - DOMAIN-SUFFIX,ttts.miyue17.com - - DOMAIN-SUFFIX,tu.baixing.com - - DOMAIN-SUFFIX,tu.njflfd.com - - DOMAIN-SUFFIX,tu.szefe.com - - DOMAIN-SUFFIX,tuadong.com - - DOMAIN-SUFFIX,tuanxue360.net - - DOMAIN-SUFFIX,tui.gtimg.com - - DOMAIN-SUFFIX,tui1999.com - - DOMAIN-SUFFIX,tui98.cn - - DOMAIN-SUFFIX,tuia.cn - - DOMAIN-SUFFIX,tuidang.epochtimes.org - - DOMAIN-SUFFIX,tuidang.org - - DOMAIN-SUFFIX,tuigoo.com - - DOMAIN-SUFFIX,tuiguang.178.com - - DOMAIN-SUFFIX,tuiguang.meitu.com - - DOMAIN-SUFFIX,tuiguang.yicha.cn - - DOMAIN-SUFFIX,tuijian.baidu.com - - DOMAIN-SUFFIX,tuipenguin.com - - DOMAIN-SUFFIX,tuisong.baidu.com - - DOMAIN-SUFFIX,tuitiger.com - - DOMAIN-SUFFIX,tuituigui19999.com - - DOMAIN-SUFFIX,tujidao.com - - DOMAIN-SUFFIX,tukeai.com - - DOMAIN-SUFFIX,tukexiu.com - - DOMAIN-SUFFIX,tukj.net - - DOMAIN-SUFFIX,tumblrprobes.cedexis.com - - DOMAIN-SUFFIX,tumblrreports.cedexis.com - - DOMAIN-SUFFIX,tunion-api.m.taobao.com - - DOMAIN-SUFFIX,turn.com - - DOMAIN-SUFFIX,tv.code.jjyx.com - - DOMAIN-SUFFIX,tw.adon.vpon.com - - DOMAIN-SUFFIX,tw.adx.nextmedia.com - - DOMAIN-SUFFIX,tw.api.vpon.com - - DOMAIN-SUFFIX,tw.fgmtv.org - - DOMAIN-SUFFIX,tw.pub.vpon.com - - DOMAIN-SUFFIX,tw13b093.sandai.net - - DOMAIN-SUFFIX,twb98.com - - DOMAIN-SUFFIX,twcczhu.com - - DOMAIN-SUFFIX,twh5.com - - DOMAIN-SUFFIX,twinplan.com - - DOMAIN-SUFFIX,twitterzs.com - - DOMAIN-SUFFIX,twldmx.com - - DOMAIN-SUFFIX,twzui6.com - - DOMAIN-SUFFIX,tx.lwinl.com - - DOMAIN-SUFFIX,txt.go.sohu.com - - DOMAIN-SUFFIX,txtad.jijiplayer.com - - DOMAIN-SUFFIX,tylll.com - - DOMAIN-SUFFIX,tyu.quanliyouxi.cn - - DOMAIN-SUFFIX,tyx.xtzxmy.com - - DOMAIN-SUFFIX,tz.1688988.com - - DOMAIN-SUFFIX,tz.zjhoudao.com - - DOMAIN-SUFFIX,tzbtw.com - - DOMAIN-SUFFIX,tz-dsp.com - - DOMAIN-SUFFIX,u.63kc.com - - DOMAIN-SUFFIX,u.cnzol.com - - DOMAIN-SUFFIX,u.ddvip.com - - DOMAIN-SUFFIX,u.diannaodian.com - - DOMAIN-SUFFIX,u.huoying666.com - - DOMAIN-SUFFIX,u.jimdo.com - - DOMAIN-SUFFIX,u.qijipc.com - - DOMAIN-SUFFIX,u.raidmedia.com.cn - - DOMAIN-SUFFIX,u.uc123.com - - DOMAIN-SUFFIX,u.ucfly.com - - DOMAIN-SUFFIX,u.xcy8.com - - DOMAIN-SUFFIX,u.yiiwoo.com - - DOMAIN-SUFFIX,u.yizuya.com - - DOMAIN-SUFFIX,u0.s.minisplat.cn - - DOMAIN-SUFFIX,u034024.nr1234.com - - DOMAIN-SUFFIX,u1.img.mobile.sina.cn - - DOMAIN-SUFFIX,u1.s.minisplat.cn - - DOMAIN-SUFFIX,u1.shuaiku.com - - DOMAIN-SUFFIX,u2.s.minisplat.cn - - DOMAIN-SUFFIX,u291014.nr1234.com - - DOMAIN-SUFFIX,u349036.ff112222.com - - DOMAIN-SUFFIX,ua.badongo.com - - DOMAIN-SUFFIX,uapi.punchbox.org - - DOMAIN-SUFFIX,ubm.fangtoo.com - - DOMAIN-SUFFIX,uc.haoyunyuan.cc - - DOMAIN-SUFFIX,uc.xiansuper.com - - DOMAIN-SUFFIX,uc2.atobo.com.cn - - DOMAIN-SUFFIX,uc610.com - - DOMAIN-SUFFIX,uc9.ucweb.com - - DOMAIN-SUFFIX,ucaliyun.cn - - DOMAIN-SUFFIX,ucan.25pp.com - - DOMAIN-SUFFIX,ucqq.cnsptv.com.cn - - DOMAIN-SUFFIX,ucrzgcs.cn - - DOMAIN-SUFFIX,ucstat.baidu.com - - DOMAIN-SUFFIX,ucus.ucweb.com - - DOMAIN-SUFFIX,ucxxii.com - - DOMAIN-SUFFIX,uczzd.com - - DOMAIN-SUFFIX,uczzd.com.cn - - DOMAIN-SUFFIX,uczzd.net - - DOMAIN-SUFFIX,udata.mixmarket.biz - - DOMAIN-SUFFIX,udc.msn.com - - DOMAIN-SUFFIX,udm.scorecardresearch.com - - DOMAIN-SUFFIX,udrig.com - - DOMAIN-SUFFIX,udrwyjpwjfeg.com - - DOMAIN-SUFFIX,ue.ueadlian.com - - DOMAIN-SUFFIX,ue.yeyoucdn.com - - DOMAIN-SUFFIX,ueadlian.com - - DOMAIN-SUFFIX,uebawtz7.me - - DOMAIN-SUFFIX,ugc.moji001.com - - DOMAIN-SUFFIX,ugg.keefung-zs.com - - DOMAIN-SUFFIX,ugg66.com - - DOMAIN-SUFFIX,ugvip.com - - DOMAIN-SUFFIX,ui37.net - - DOMAIN-SUFFIX,uid.ksosoft.com - - DOMAIN-SUFFIX,uid.mdbchina.com - - DOMAIN-SUFFIX,uimg.27admin.com - - DOMAIN-SUFFIX,uimserv.net - - DOMAIN-SUFFIX,ujian.cc - - DOMAIN-SUFFIX,ujikdd041o.cn - - DOMAIN-SUFFIX,uk3oi.adgze.cn - - DOMAIN-SUFFIX,ukeiae.com - - DOMAIN-SUFFIX,ulic.baidu.com - - DOMAIN-SUFFIX,ulink.cc - - DOMAIN-SUFFIX,ultraiso.net - - DOMAIN-SUFFIX,um.simpli.fi - - DOMAIN-SUFFIX,um0592.com - - DOMAIN-SUFFIX,um2.eqads.com - - DOMAIN-SUFFIX,um29.com - - DOMAIN-SUFFIX,umid.orion.meizu.com - - DOMAIN-SUFFIX,umyai.com - - DOMAIN-SUFFIX,un.52rkl.cn - - DOMAIN-SUFFIX,un.soarfi.cn - - DOMAIN-SUFFIX,un.winasdaq.com - - DOMAIN-SUFFIX,un1.takefoto.cn - - DOMAIN-SUFFIX,unconf.mobad.ijinshan.com - - DOMAIN-SUFFIX,undm.qibulo.com - - DOMAIN-SUFFIX,unicast.ign.com - - DOMAIN-SUFFIX,unicast.msn.com - - DOMAIN-SUFFIX,unilog.wostore.cn - - DOMAIN-SUFFIX,unimhk.com - - DOMAIN-SUFFIX,union.baidu.com - - DOMAIN-SUFFIX,union.baidustatic.guannin.com - - DOMAIN-SUFFIX,union.china.com.cn - - DOMAIN-SUFFIX,union.dbba.cn - - DOMAIN-SUFFIX,union.maccms.com - - DOMAIN-SUFFIX,union.mop.com - - DOMAIN-SUFFIX,union.sogou.com - - DOMAIN-SUFFIX,union.star-media.cn - - DOMAIN-SUFFIX,union.youdao.com - - DOMAIN-SUFFIX,union1.xiaojianjian.net - - DOMAIN-SUFFIX,uniondm.cz88.net - - DOMAIN-SUFFIX,unionimage.baidu.com - - DOMAIN-SUFFIX,unionsy.com - - DOMAIN-SUFFIX,union-wifi.com - - DOMAIN-SUFFIX,unipaydl.wostore.cn - - DOMAIN-SUFFIX,unipayupg.wostore.cn - - DOMAIN-SUFFIX,unitacs.m.taobao.com - - DOMAIN-SUFFIX,unjs.jfcdns.com - - DOMAIN-SUFFIX,unlitui.com - - DOMAIN-SUFFIX,uns.soarfi.cn - - DOMAIN-SUFFIX,untitled.dwstatic.com - - DOMAIN-SUFFIX,uodoo.com - - DOMAIN-SUFFIX,uoyrsd.com - - DOMAIN-SUFFIX,up.cm.ksmobile.com - - DOMAIN-SUFFIX,up.hiao.com - - DOMAIN-SUFFIX,up4.ucweb.com - - DOMAIN-SUFFIX,upd.faronicslabs.com - - DOMAIN-SUFFIX,update.360safe.com - - DOMAIN-SUFFIX,update.avlyun.sec.miui.com - - DOMAIN-SUFFIX,update.bainv.net - - DOMAIN-SUFFIX,update.coolyun.com - - DOMAIN-SUFFIX,update.juw37xqo3x.com - - DOMAIN-SUFFIX,update.minipage.2345.com - - DOMAIN-SUFFIX,update.mobile.kugou.com - - DOMAIN-SUFFIX,update.sdk.jiguang.cn - - DOMAIN-SUFFIX,updatecenter.qq.com - - DOMAIN-SUFFIX,updatepage.kuwo.cn - - DOMAIN-SUFFIX,updates-s3.binaryage.com - - DOMAIN-SUFFIX,uplze.code.weddingeeos.com - - DOMAIN-SUFFIX,ups.ksmobile.net - - DOMAIN-SUFFIX,upush.res.meizu.com - - DOMAIN-SUFFIX,uqszvk.code.weddingeeos.com - - DOMAIN-SUFFIX,uqum.52shouyou.com.cn - - DOMAIN-SUFFIX,urbanairship.com - - DOMAIN-SUFFIX,urchin.5173.com - - DOMAIN-SUFFIX,urh.tylll.com - - DOMAIN-SUFFIX,urhu.cn - - DOMAIN-SUFFIX,uri6.com - - DOMAIN-SUFFIX,url.222bz.com - - DOMAIN-SUFFIX,url.tudown.com - - DOMAIN-SUFFIX,urls.api.twitter.com - - DOMAIN-SUFFIX,us.bannyat.com - - DOMAIN-SUFFIX,us.bs.serving-sys.com - - DOMAIN-SUFFIX,user.tiankongzudui.com - - DOMAIN-SUFFIX,usercollection.chinadaily.com.cn - - DOMAIN-SUFFIX,ushaqi.com - - DOMAIN-SUFFIX,usingde.com - - DOMAIN-SUFFIX,usr.mgid.com - - DOMAIN-SUFFIX,uss-pid.lenovomm.com - - DOMAIN-SUFFIX,usync.aws.rubiconproject.com - - DOMAIN-SUFFIX,ut2.shuqistat.com - - DOMAIN-SUFFIX,util.nphoto.net - - DOMAIN-SUFFIX,utility.baidu.com - - DOMAIN-SUFFIX,utility.rogersmedia.com - - DOMAIN-SUFFIX,utk.baidu.com - - DOMAIN-SUFFIX,utp.ucweb.com - - DOMAIN-SUFFIX,uu.feipukeplus.com - - DOMAIN-SUFFIX,uu.zeverdg.com - - DOMAIN-SUFFIX,uuidksinc.net - - DOMAIN-SUFFIX,uulucky.com - - DOMAIN-SUFFIX,uvclick.com - - DOMAIN-SUFFIX,uw9377.com - - DOMAIN-SUFFIX,uxip.meizu.com - - DOMAIN-SUFFIX,uyunad.com - - DOMAIN-SUFFIX,uzpmrbek.com - - DOMAIN-SUFFIX,v.dbncp.com - - DOMAIN-SUFFIX,v.e7002.com - - DOMAIN-SUFFIX,v.irs01.com - - DOMAIN-SUFFIX,v.oq68.com - - DOMAIN-SUFFIX,v.rmbn.net - - DOMAIN-SUFFIX,v.szpaopao.com - - DOMAIN-SUFFIX,v00087.com - - DOMAIN-SUFFIX,v02u9.cn - - DOMAIN-SUFFIX,v1.0594529.com - - DOMAIN-SUFFIX,v1.ujian.cc - - DOMAIN-SUFFIX,v12-r0566gbscjw.z.irs01.com - - DOMAIN-SUFFIX,v1-feed.idreamsky.com - - DOMAIN-SUFFIX,v2.fm.n.duokanbox.com - - DOMAIN-SUFFIX,v2.jiathis.com - - DOMAIN-SUFFIX,v3.jiathis.com - - DOMAIN-SUFFIX,v66v66.com - - DOMAIN-SUFFIX,v7.kawinhome.com - - DOMAIN-SUFFIX,v707070.com - - DOMAIN-SUFFIX,va.gxpan.cn - - DOMAIN-SUFFIX,vad1.jianshen8.com - - DOMAIN-SUFFIX,val.atm.cp31.ott.cibntv.net - - DOMAIN-SUFFIX,valf.atm.cp31.ott.cibntv.net - - DOMAIN-SUFFIX,vamaker.com - - DOMAIN-SUFFIX,vangmobi.com - - DOMAIN-SUFFIX,vas.funshion.com - - DOMAIN-SUFFIX,vatrack.hinet.net - - DOMAIN-SUFFIX,vcfs6ip5h6.bid - - DOMAIN-SUFFIX,vda.17173.com - - DOMAIN-SUFFIX,vdapprecv.app.cntvwb.cn - - DOMAIN-SUFFIX,vdazz.net - - DOMAIN-SUFFIX,ve.tsdlp.com - - DOMAIN-SUFFIX,vedeh.com - - DOMAIN-SUFFIX,vegaschina.cn - - DOMAIN-SUFFIX,vegent.cn - - DOMAIN-SUFFIX,vendor1.fitschigogerl.com - - DOMAIN-SUFFIX,ver.touclick.com - - DOMAIN-SUFFIX,verdict.abc.go.com - - DOMAIN-SUFFIX,vers80.com - - DOMAIN-SUFFIX,vg02h8z1ul.me - - DOMAIN-SUFFIX,vi0.mzy2014.com - - DOMAIN-SUFFIX,vi1.ku6img.net - - DOMAIN-SUFFIX,vi1.mzy2014.com - - DOMAIN-SUFFIX,vi1.souid.com - - DOMAIN-SUFFIX,vi2.ku6img.net - - DOMAIN-SUFFIX,vichc.com - - DOMAIN-SUFFIX,victorjx.com - - DOMAIN-SUFFIX,video.cooguo.com - - DOMAIN-SUFFIX,video.ureport.push.qq.com - - DOMAIN-SUFFIX,video.wap.mpush.qq.com - - DOMAIN-SUFFIX,videondun.com - - DOMAIN-SUFFIX,videopush.baidu.com - - DOMAIN-SUFFIX,viglink.com - - DOMAIN-SUFFIX,vimg.dwstatic.com - - DOMAIN-SUFFIX,vip.cainiaofx.com - - DOMAIN-SUFFIX,vip.hyz86.com - - DOMAIN-SUFFIX,vip.id528.com - - DOMAIN-SUFFIX,vip.jindu179.com - - DOMAIN-SUFFIX,vip.mall044.com - - DOMAIN-SUFFIX,vip.media8.cn - - DOMAIN-SUFFIX,vip.pinghuhome.com - - DOMAIN-SUFFIX,vip.qqxwf.com - - DOMAIN-SUFFIX,vip.zhuba8.com - - DOMAIN-SUFFIX,vipads.cn - - DOMAIN-SUFFIX,vista.tgbus.com - - DOMAIN-SUFFIX,vista.tgbusdata.cn - - DOMAIN-SUFFIX,visualscience.external.bbc.co.uk - - DOMAIN-SUFFIX,vj.x-ssp.com - - DOMAIN-SUFFIX,vj0.42422277.com - - DOMAIN-SUFFIX,vjcyehtqm9.me - - DOMAIN-SUFFIX,vl8c4g7tmo.me - - DOMAIN-SUFFIX,vlive.qqvideo.tc.qq.com - - DOMAIN-SUFFIX,vmzqwz.cn - - DOMAIN-SUFFIX,vn543.com - - DOMAIN-SUFFIX,vns800600.net - - DOMAIN-SUFFIX,vodlog.m1905.cn - - DOMAIN-SUFFIX,voiceads.cn - - DOMAIN-SUFFIX,voiceads.com - - DOMAIN-SUFFIX,voila.refr.adgtw.orangeads.fr - - DOMAIN-SUFFIX,vol.lflili.com - - DOMAIN-SUFFIX,vpon.com - - DOMAIN-SUFFIX,vps.inte.sogou.com - - DOMAIN-SUFFIX,vs.funshion.com - - DOMAIN-SUFFIX,vs19.gzcu.u3.ucweb.com - - DOMAIN-SUFFIX,vs2.gzcu.u3.ucweb.com - - DOMAIN-SUFFIX,vs7.gzcu.u3.ucweb.com - - DOMAIN-SUFFIX,vs8.gzct.u3.ucweb.com - - DOMAIN-SUFFIX,vs8.gzcu.u3.ucweb.com - - DOMAIN-SUFFIX,v-sence.gentags.net - - DOMAIN-SUFFIX,vsnoon.com - - DOMAIN-SUFFIX,vt.bjhdonline.com - - DOMAIN-SUFFIX,vtale.org - - DOMAIN-SUFFIX,vungle.cn - - DOMAIN-SUFFIX,vungle.com - - DOMAIN-SUFFIX,vupload.duowan.com - - DOMAIN-SUFFIX,vvlog.moviebox.baofeng.com - - DOMAIN-SUFFIX,vvv.ieduw.com - - DOMAIN-SUFFIX,vvvulqn7.com - - DOMAIN-SUFFIX,vwkhdi.cn - - DOMAIN-SUFFIX,vwws6.net - - DOMAIN-SUFFIX,vz-cdn.contentabc.com - - DOMAIN-SUFFIX,vz-cdn.trafficjunky.net - - DOMAIN-SUFFIX,w.bobocn.cn - - DOMAIN-SUFFIX,w.cube3d.cn - - DOMAIN-SUFFIX,w.gdown.baidu.com - - DOMAIN-SUFFIX,w.homes.yahoo.net - - DOMAIN-SUFFIX,w.jscsd.cn - - DOMAIN-SUFFIX,w.m.taobao.com - - DOMAIN-SUFFIX,w.punchbox.org - - DOMAIN-SUFFIX,w.sharethis.com - - DOMAIN-SUFFIX,w.waacorp.com - - DOMAIN-SUFFIX,w.werpig.com - - DOMAIN-SUFFIX,w.x.baidu.com - - DOMAIN-SUFFIX,w.xiaopiaoyou.com - - DOMAIN-SUFFIX,w.yamaidei.cn - - DOMAIN-SUFFIX,w.yinyuehu.cn - - DOMAIN-SUFFIX,w.ymapp.com - - DOMAIN-SUFFIX,w1.diaoyou.com - - DOMAIN-SUFFIX,w2528.com - - DOMAIN-SUFFIX,w3.yinyuehu.cn - - DOMAIN-SUFFIX,w3989.com - - DOMAIN-SUFFIX,w5sac788c1.360doc.cn - - DOMAIN-SUFFIX,w6061.move7.com - - DOMAIN-SUFFIX,w65p.com - - DOMAIN-SUFFIX,w8.com.cn - - DOMAIN-SUFFIX,w88.go.com - - DOMAIN-SUFFIX,wa.kuwo.cn - - DOMAIN-SUFFIX,wallet.advcash.com - - DOMAIN-SUFFIX,wan.2345.com - - DOMAIN-SUFFIX,wan.douyu.com - - DOMAIN-SUFFIX,wan.rising.cn - - DOMAIN-SUFFIX,wan.sogou.com - - DOMAIN-SUFFIX,wancai.com - - DOMAIN-SUFFIX,wanfeng1.com - - DOMAIN-SUFFIX,wangdaizao.com - - DOMAIN-SUFFIX,wangdq.com - - DOMAIN-SUFFIX,wangmeng.baidu.com - - DOMAIN-SUFFIX,wangmeng.sogou.com - - DOMAIN-SUFFIX,wangsufast.com - - DOMAIN-SUFFIX,wanproxy.127.net - - DOMAIN-SUFFIX,wantaico.com - - DOMAIN-SUFFIX,wantfour.com - - DOMAIN-SUFFIX,wap.114so.cn - - DOMAIN-SUFFIX,wap.138lm.com - - DOMAIN-SUFFIX,wap.bytdzsw.com - - DOMAIN-SUFFIX,wap.cmgame.com - - DOMAIN-SUFFIX,wap.moad.cn - - DOMAIN-SUFFIX,wap.mpush.qq.com - - DOMAIN-SUFFIX,wap.tanwan.com - - DOMAIN-SUFFIX,wap.txwdn.com - - DOMAIN-SUFFIX,wap.wooboo.com.cn - - DOMAIN-SUFFIX,wap001.bytravel.cn - - DOMAIN-SUFFIX,wap3.ucweb.com - - DOMAIN-SUFFIX,wapadv.com - - DOMAIN-SUFFIX,wappv.zol.com.cn - - DOMAIN-SUFFIX,waps.cn - - DOMAIN-SUFFIX,wapscdn.wapx.cn - - DOMAIN-SUFFIX,wapssl.ff113300.com - - DOMAIN-SUFFIX,wapwbclick.mobile.sina.cn - - DOMAIN-SUFFIX,wapx.cn - - DOMAIN-SUFFIX,wapx.com - - DOMAIN-SUFFIX,watson.live.com - - DOMAIN-SUFFIX,watson.microsoft.com - - DOMAIN-SUFFIX,wazero.online - - DOMAIN-SUFFIX,wb.gtimg.com - - DOMAIN-SUFFIX,wbapp.mobile.sina.cn - - DOMAIN-SUFFIX,wbclick.mobile.sina.cn - - DOMAIN-SUFFIX,wbpctips.mobile.sina.cn - - DOMAIN-SUFFIX,wbwl.houyi.baofeng.net - - DOMAIN-SUFFIX,wda.ydt.com.cn - - DOMAIN-SUFFIX,wd-edge.sharethis.com - - DOMAIN-SUFFIX,wdgsl.com - - DOMAIN-SUFFIX,wds.inte.sogoucdn.com - - DOMAIN-SUFFIX,wdzsb.com.cn - - DOMAIN-SUFFIX,we.tm - - DOMAIN-SUFFIX,weareqy.com - - DOMAIN-SUFFIX,web.900.la - - DOMAIN-SUFFIX,web.ali213.net - - DOMAIN-SUFFIX,web.data.pplive.com - - DOMAIN-SUFFIX,web.houyi.baofeng.net - - DOMAIN-SUFFIX,web.kuaisouwifi.com - - DOMAIN-SUFFIX,web.sogou.com - - DOMAIN-SUFFIX,webd.home.news.cn - - DOMAIN-SUFFIX,webdissector.com - - DOMAIN-SUFFIX,webkooo.com - - DOMAIN-SUFFIX,weblb-wg.gslb.spotify.com - - DOMAIN-SUFFIX,webmaster.extabit.com - - DOMAIN-SUFFIX,webmine.cz - - DOMAIN-SUFFIX,webstat.kuwo.cn - - DOMAIN-SUFFIX,webstat.ws.126.net - - DOMAIN-SUFFIX,webterren.com - - DOMAIN-SUFFIX,webtrends.yccdn.com - - DOMAIN-SUFFIX,weibomingzi.com - - DOMAIN-SUFFIX,weiguizhizuo.com - - DOMAIN-SUFFIX,weiqiqu.cn - - DOMAIN-SUFFIX,weishi.baidu.com - - DOMAIN-SUFFIX,weixiangzu.cn - - DOMAIN-SUFFIX,weixin.renrenying.com - - DOMAIN-SUFFIX,weixinvip.ren - - DOMAIN-SUFFIX,weld.iefsf.com - - DOMAIN-SUFFIX,weld.uunice.com - - DOMAIN-SUFFIX,weld830.uunice.com - - DOMAIN-SUFFIX,weldc1.021ye.com - - DOMAIN-SUFFIX,werpig.com - - DOMAIN-SUFFIX,weyyae.com - - DOMAIN-SUFFIX,wgie.0z5jn.cn - - DOMAIN-SUFFIX,wgnlz.com - - DOMAIN-SUFFIX,wgnmp.com - - DOMAIN-SUFFIX,whafwl.com - - DOMAIN-SUFFIX,whalecloud.com - - DOMAIN-SUFFIX,whcrdz.com - - DOMAIN-SUFFIX,whistleout.s3.amazonaws.com - - DOMAIN-SUFFIX,whn.star-media.cn - - DOMAIN-SUFFIX,whpxy.com - - DOMAIN-SUFFIX,whu.cwpush.com - - DOMAIN-SUFFIX,whytoss.com - - DOMAIN-SUFFIX,widget.criteo.com - - DOMAIN-SUFFIX,widget.crowdignite.com - - DOMAIN-SUFFIX,widget.directory.dailycommercial.com - - DOMAIN-SUFFIX,widget.kelkoo.com - - DOMAIN-SUFFIX,widget.raaze.com - - DOMAIN-SUFFIX,widget.searchschoolsnetwork.com - - DOMAIN-SUFFIX,widget.shopstyle.com.au - - DOMAIN-SUFFIX,widget.solarquotes.com.au - - DOMAIN-SUFFIX,widgets.comcontent.net - - DOMAIN-SUFFIX,widgets.realestate.com.au - - DOMAIN-SUFFIX,widnd.dajiadou6.com - - DOMAIN-SUFFIX,wifiapi01.51y5.net - - DOMAIN-SUFFIX,wifiapi02.51y5.net - - DOMAIN-SUFFIX,wifijia.net - - DOMAIN-SUFFIX,wifishow.ggsafe.com - - DOMAIN-SUFFIX,wikigifth.com - - DOMAIN-SUFFIX,winads.cn - - DOMAIN-SUFFIX,winasdaq.com - - DOMAIN-SUFFIX,winbaicai.com - - DOMAIN-SUFFIX,windcdna.com - - DOMAIN-SUFFIX,winlinebet.ru - - DOMAIN-SUFFIX,winvestern.com.cn - - DOMAIN-SUFFIX,wip3.adobe.com - - DOMAIN-SUFFIX,wisepush.video.baidu.com - - DOMAIN-SUFFIX,wiyun.com - - DOMAIN-SUFFIX,wjguc.com - - DOMAIN-SUFFIX,wka8.com - - DOMAIN-SUFFIX,wkanc.com - - DOMAIN-SUFFIX,wl.51taifu.com - - DOMAIN-SUFFIX,wl.eastlady.cn - - DOMAIN-SUFFIX,wl.houyi.baofeng.net - - DOMAIN-SUFFIX,wlkpa.cn - - DOMAIN-SUFFIX,wlneteller.adsrv.eacdn.com - - DOMAIN-SUFFIX,wlpinnaclesports.eacdn.com - - DOMAIN-SUFFIX,wm.20150.net - - DOMAIN-SUFFIX,wm.69shi.cn - - DOMAIN-SUFFIX,wm.baidu.com - - DOMAIN-SUFFIX,wm.lrswl.com - - DOMAIN-SUFFIX,wm.mipcdn.com - - DOMAIN-SUFFIX,wmcdn.qtmojo.cn - - DOMAIN-SUFFIX,wo.iuni.com.cn - - DOMAIN-SUFFIX,wo685.com - - DOMAIN-SUFFIX,woaizhongguo.cdn111222.com - - DOMAIN-SUFFIX,wodhid.com - - DOMAIN-SUFFIX,wole.us - - DOMAIN-SUFFIX,womenbaby.com - - DOMAIN-SUFFIX,womenwan.com - - DOMAIN-SUFFIX,wooboo.com.cn - - DOMAIN-SUFFIX,woocall.sina.com.cn - - DOMAIN-SUFFIX,woodpecker.uc.cn - - DOMAIN-SUFFIX,worldh5.gamehz.cn - - DOMAIN-SUFFIX,wowips.com - - DOMAIN-SUFFIX,wpc.32df9.rhocdn.net - - DOMAIN-SUFFIX,wpwdf.com - - DOMAIN-SUFFIX,wqmobile.com - - DOMAIN-SUFFIX,wqqsa.puzihua.com - - DOMAIN-SUFFIX,wqsph.net - - DOMAIN-SUFFIX,wrvdmh.cn - - DOMAIN-SUFFIX,ws.ksmobile.net - - DOMAIN-SUFFIX,ws.progrss.yahoo.com - - DOMAIN-SUFFIX,ws.sj.qq.com - - DOMAIN-SUFFIX,ws.tapjoyads.com - - DOMAIN-SUFFIX,ws.voiceads.cn - - DOMAIN-SUFFIX,ws1.datouniao.com - - DOMAIN-SUFFIX,ws2.cootekservice.com - - DOMAIN-SUFFIX,ws2.datouniao.com - - DOMAIN-SUFFIX,ws341.com - - DOMAIN-SUFFIX,ws7j.com - - DOMAIN-SUFFIX,wshufa.com - - DOMAIN-SUFFIX,wsoe.kwiago.com - - DOMAIN-SUFFIX,wsp.marketgid.com - - DOMAIN-SUFFIX,wstztt.com - - DOMAIN-SUFFIX,wtcpm.com - - DOMAIN-SUFFIX,wth.lenovomm.com - - DOMAIN-SUFFIX,wtpn.twenga.co.uk - - DOMAIN-SUFFIX,wtpn.twenga.de - - DOMAIN-SUFFIX,wtrace.cmgame.com - - DOMAIN-SUFFIX,wtradv.market.xiaomi.com - - DOMAIN-SUFFIX,wu65.com - - DOMAIN-SUFFIX,wudang05.com - - DOMAIN-SUFFIX,wuliao.epro.sogou.com - - DOMAIN-SUFFIX,wuliao.ganji.cn - - DOMAIN-SUFFIX,wuliao.juqingba.cn - - DOMAIN-SUFFIX,wumii.cn - - DOMAIN-SUFFIX,wumii.com - - DOMAIN-SUFFIX,wuqdebjfhjas.bid - - DOMAIN-SUFFIX,wuwho.cn - - DOMAIN-SUFFIX,ww.xiaopiaoyou.com - - DOMAIN-SUFFIX,ww10.onetad.com - - DOMAIN-SUFFIX,ww101.onetad.com - - DOMAIN-SUFFIX,ww11.onetad.com - - DOMAIN-SUFFIX,ww12.onetad.com - - DOMAIN-SUFFIX,ww13.onetad.com - - DOMAIN-SUFFIX,ww202.keyyou.net - - DOMAIN-SUFFIX,ww202.onetad.com - - DOMAIN-SUFFIX,ww34.onetad.com - - DOMAIN-SUFFIX,ww346.onetad.com - - DOMAIN-SUFFIX,ww360.onetad.com - - DOMAIN-SUFFIX,ww363.onetad.com - - DOMAIN-SUFFIX,ww366.onetad.com - - DOMAIN-SUFFIX,ww78.onetad.com - - DOMAIN-SUFFIX,ww8.onetad.com - - DOMAIN-SUFFIX,ww9.onetad.com - - DOMAIN-SUFFIX,wwis-dubc1-vip60.adobe.com - - DOMAIN-SUFFIX,wwv.onetad.com - - DOMAIN-SUFFIX,www2.xinmin.cn - - DOMAIN-SUFFIX,www-777563.com - - DOMAIN-SUFFIX,www8.xitek.com - - DOMAIN-SUFFIX,www9.effectivemeasure.net - - DOMAIN-SUFFIX,www9.enet.com.cn - - DOMAIN-SUFFIX,www91.intel.com - - DOMAIN-SUFFIX,wwwokzyzy.com - - DOMAIN-SUFFIX,wwww.495495.com - - DOMAIN-SUFFIX,wwww.551144.com - - DOMAIN-SUFFIX,wwww.640640.com - - DOMAIN-SUFFIX,wwww.649649.com - - DOMAIN-SUFFIX,wx.houyi.baofeng.net - - DOMAIN-SUFFIX,wx.paigu.com - - DOMAIN-SUFFIX,wx.xwjqr.com - - DOMAIN-SUFFIX,wx16999.com - - DOMAIN-SUFFIX,wxaw.tiantongmaoyi.com - - DOMAIN-SUFFIX,wxb.wxbdfm.com - - DOMAIN-SUFFIX,wxmmh.net - - DOMAIN-SUFFIX,wxsnsdy.tc.qq.com - - DOMAIN-SUFFIX,wxsnsdy.video.qq.com - - DOMAIN-SUFFIX,wxsnsdythumb.wxs.qq.com - - DOMAIN-SUFFIX,wxtz.houmags.com - - DOMAIN-SUFFIX,wxwm1.ikuailian.com - - DOMAIN-SUFFIX,wxwm2.ikuailian.com - - DOMAIN-SUFFIX,wy.ce22d.cn - - DOMAIN-SUFFIX,wyhzzy.com - - DOMAIN-SUFFIX,wysa.2wxb5.cn - - DOMAIN-SUFFIX,wyt.wwetjy.com - - DOMAIN-SUFFIX,wyttech.cn - - DOMAIN-SUFFIX,wzaigo.com - - DOMAIN-SUFFIX,wzj.ywrjgzs.com - - DOMAIN-SUFFIX,wzjijia.com - - DOMAIN-SUFFIX,x.120ask.com - - DOMAIN-SUFFIX,x.9dagui.com - - DOMAIN-SUFFIX,x.bidswitch.net - - DOMAIN-SUFFIX,x.bikaer.com - - DOMAIN-SUFFIX,x.castanet.net - - DOMAIN-SUFFIX,x.cnxad.com - - DOMAIN-SUFFIX,x.eroticity.net - - DOMAIN-SUFFIX,x.heyzap.com - - DOMAIN-SUFFIX,x.infzm.com - - DOMAIN-SUFFIX,x.ligatus.com - - DOMAIN-SUFFIX,x.vamaker.com - - DOMAIN-SUFFIX,x.vipergirls.to - - DOMAIN-SUFFIX,x.zhuyuanp.top - - DOMAIN-SUFFIX,x01.aidata.io - - DOMAIN-SUFFIX,x1.go.sohu.com - - DOMAIN-SUFFIX,x9377a.com - - DOMAIN-SUFFIX,xa9t.com - - DOMAIN-SUFFIX,xabaitai.com - - DOMAIN-SUFFIX,xabmjr.com - - DOMAIN-SUFFIX,xacqp.com - - DOMAIN-SUFFIX,xau.sxmutan.com - - DOMAIN-SUFFIX,xavingtsun.com - - DOMAIN-SUFFIX,xbp.code.weddingeeos.com - - DOMAIN-SUFFIX,xbtw.com - - DOMAIN-SUFFIX,xbzzzx.com - - DOMAIN-SUFFIX,xc.08an.com - - DOMAIN-SUFFIX,xc.macd.cn - - DOMAIN-SUFFIX,xc.mydrivers.com - - DOMAIN-SUFFIX,xcclzs.com - - DOMAIN-SUFFIX,xcdf.cn - - DOMAIN-SUFFIX,xchgx.com - - DOMAIN-SUFFIX,xcjy876.com - - DOMAIN-SUFFIX,xco.qwxcs.com - - DOMAIN-SUFFIX,xcy8.com - - DOMAIN-SUFFIX,xcyjzs.net - - DOMAIN-SUFFIX,xcyrc.com - - DOMAIN-SUFFIX,xd.code.tanwanyx.com - - DOMAIN-SUFFIX,xdadevelopers.browsi.mobi - - DOMAIN-SUFFIX,xdbwc.com - - DOMAIN-SUFFIX,xdcqcyp.com - - DOMAIN-SUFFIX,xdcs-collector.ximalaya.com - - DOMAIN-SUFFIX,xdyjt.com - - DOMAIN-SUFFIX,xe2c.com - - DOMAIN-SUFFIX,xf.yellowto.com - - DOMAIN-SUFFIX,xfo.monesyy.com - - DOMAIN-SUFFIX,xfywn.com - - DOMAIN-SUFFIX,xgcsr.com - - DOMAIN-SUFFIX,xgmc6lu8fs.me - - DOMAIN-SUFFIX,xhbqczl.com - - DOMAIN-SUFFIX,xhmrv.com - - DOMAIN-SUFFIX,xhsxgmt.cn - - DOMAIN-SUFFIX,xhsxgnt.cn - - DOMAIN-SUFFIX,xhtd.99hg.wang - - DOMAIN-SUFFIX,xhxnkyy.com - - DOMAIN-SUFFIX,xhydrs.cn - - DOMAIN-SUFFIX,xi.liuxiaoer.com - - DOMAIN-SUFFIX,xia.huishenghuiying.com - - DOMAIN-SUFFIX,xia.jihehuaban.com - - DOMAIN-SUFFIX,xiacai.com - - DOMAIN-SUFFIX,xiacaidd.com - - DOMAIN-SUFFIX,xianliao.me - - DOMAIN-SUFFIX,xiaobiaoucai.cn - - DOMAIN-SUFFIX,xiaohei.com - - DOMAIN-SUFFIX,xiaohuau.xyz - - DOMAIN-SUFFIX,xiaohui2.cn - - DOMAIN-SUFFIX,xiaomiir.yaokantv.com - - DOMAIN-SUFFIX,XiaoQiang - - DOMAIN-SUFFIX,xiaoshuo.kp53.cn - - DOMAIN-SUFFIX,xiaoshuo.zhandao.net - - DOMAIN-SUFFIX,xiaoyang.mobi - - DOMAIN-SUFFIX,xiaoyuanzuqiu.cn - - DOMAIN-SUFFIX,xiaoyutiao.com - - DOMAIN-SUFFIX,xiaozhen.com - - DOMAIN-SUFFIX,xiaozhishi852.com - - DOMAIN-SUFFIX,xiaxuanfu.com - - DOMAIN-SUFFIX,xiazai.cdren.com - - DOMAIN-SUFFIX,xiazai.downok.com - - DOMAIN-SUFFIX,xibao100.com - - DOMAIN-SUFFIX,xibei70.com - - DOMAIN-SUFFIX,xifatime.com - - DOMAIN-SUFFIX,xihashuale.com - - DOMAIN-SUFFIX,xihuashuale.com - - DOMAIN-SUFFIX,xilele.com - - DOMAIN-SUFFIX,xiliweisha.cn - - DOMAIN-SUFFIX,xin.ygqczh.com - - DOMAIN-SUFFIX,xinasiaj.com - - DOMAIN-SUFFIX,xinghao89.com - - DOMAIN-SUFFIX,xingjuhe.com - - DOMAIN-SUFFIX,xiniuz.com - - DOMAIN-SUFFIX,xinju.cc - - DOMAIN-SUFFIX,xinray.com - - DOMAIN-SUFFIX,xinsheng.net - - DOMAIN-SUFFIX,xiongdong.com - - DOMAIN-SUFFIX,xiuxiu.android.dl.meitu.com - - DOMAIN-SUFFIX,xiuxiu.mobile.meitudata.com - - DOMAIN-SUFFIX,xj40666.vip - - DOMAIN-SUFFIX,xji.qwxcs.com - - DOMAIN-SUFFIX,xjidian.com - - DOMAIN-SUFFIX,xjq.jxmqkj.com - - DOMAIN-SUFFIX,xk2012.com - - DOMAIN-SUFFIX,xkwfao.com - - DOMAIN-SUFFIX,xlmc.sandai.net - - DOMAIN-SUFFIX,xls.go.sohu.com - - DOMAIN-SUFFIX,xlwnx.com - - DOMAIN-SUFFIX,xlylqx.com - - DOMAIN-SUFFIX,xm9178.com - - DOMAIN-SUFFIX,xmcmn.com - - DOMAIN-SUFFIX,xmcxz.com - - DOMAIN-SUFFIX,xmindchina.net - - DOMAIN-SUFFIX,xmnmeu.cn - - DOMAIN-SUFFIX,xmrts.com - - DOMAIN-SUFFIX,xmshqh.com - - DOMAIN-SUFFIX,xmsqz.com - - DOMAIN-SUFFIX,xnjpg.com - - DOMAIN-SUFFIX,xoredi.com - - DOMAIN-SUFFIX,xp3366.com - - DOMAIN-SUFFIX,xpcy.m.gxwztv.com - - DOMAIN-SUFFIX,xpe.cxaerp.com - - DOMAIN-SUFFIX,xpj1.net - - DOMAIN-SUFFIX,xpj2.net - - DOMAIN-SUFFIX,xpj3.net - - DOMAIN-SUFFIX,xpj4.net - - DOMAIN-SUFFIX,xpj8088.com - - DOMAIN-SUFFIX,xpjkf888.com - - DOMAIN-SUFFIX,xpjylc9977.com - - DOMAIN-SUFFIX,xpqfc.com - - DOMAIN-SUFFIX,xq12.com - - DOMAIN-SUFFIX,xq199.com - - DOMAIN-SUFFIX,xrain.net - - DOMAIN-SUFFIX,xray.jebe.renren.com - - DOMAIN-SUFFIX,xs.1drj.com - - DOMAIN-SUFFIX,xs.he9630.com - - DOMAIN-SUFFIX,xs.houyi.baofeng.net - - DOMAIN-SUFFIX,xs.swagger1.com - - DOMAIN-SUFFIX,xshellcn.com - - DOMAIN-SUFFIX,xstar.cc - - DOMAIN-SUFFIX,xszqapp.com - - DOMAIN-SUFFIX,xtcdbb.cn - - DOMAIN-SUFFIX,xtgreat.com - - DOMAIN-SUFFIX,xtruh.uranus.sogou.com - - DOMAIN-SUFFIX,xtwjx.cn - - DOMAIN-SUFFIX,xtxa.net - - DOMAIN-SUFFIX,xtzxmy.com - - DOMAIN-SUFFIX,xuanmeiguoji.com - - DOMAIN-SUFFIX,xue.zbyw.cn - - DOMAIN-SUFFIX,xul478.com - - DOMAIN-SUFFIX,xulizui6.com - - DOMAIN-SUFFIX,xx.m.gxwztv.com - - DOMAIN-SUFFIX,xxad.cc - - DOMAIN-SUFFIX,xxeden.com - - DOMAIN-SUFFIX,xxguan.cn - - DOMAIN-SUFFIX,xxhrd.com - - DOMAIN-SUFFIX,xxkhh.com - - DOMAIN-SUFFIX,xxlargepop.com - - DOMAIN-SUFFIX,xxp.gytygc.com - - DOMAIN-SUFFIX,xxwkjl.com - - DOMAIN-SUFFIX,xxxa.aikeapp.com - - DOMAIN-SUFFIX,xxyzwtsylw.com - - DOMAIN-SUFFIX,xy.com - - DOMAIN-SUFFIX,xy.shijialianzuishuai.com - - DOMAIN-SUFFIX,xycnz.com - - DOMAIN-SUFFIX,xyd.sxmdxy.com - - DOMAIN-SUFFIX,xyimg.net - - DOMAIN-SUFFIX,xyly2016.com - - DOMAIN-SUFFIX,xyqptm.com - - DOMAIN-SUFFIX,xyqxr.com - - DOMAIN-SUFFIX,xyrhd.com - - DOMAIN-SUFFIX,xyrkl.com - - DOMAIN-SUFFIX,xyssp.com - - DOMAIN-SUFFIX,xytom.com - - DOMAIN-SUFFIX,xyxy01.com - - DOMAIN-SUFFIX,xyy.code.weddingeeos.com - - DOMAIN-SUFFIX,xz.ercfh.com - - DOMAIN-SUFFIX,xz-development.oss-cn-beijing.aliyuncs.com - - DOMAIN-SUFFIX,xzq.greenxf.net - - DOMAIN-SUFFIX,xztms.com - - DOMAIN-SUFFIX,xzyituo.com - - DOMAIN-SUFFIX,xzzyi.com - - DOMAIN-SUFFIX,y.3957957.com - - DOMAIN-SUFFIX,y.damifan.cn - - DOMAIN-SUFFIX,y.gwylm.com - - DOMAIN-SUFFIX,y.hk9600.com - - DOMAIN-SUFFIX,y.hzht666.com - - DOMAIN-SUFFIX,y.shuoshuocm.com - - DOMAIN-SUFFIX,y.xinghao89.com - - DOMAIN-SUFFIX,y.zxwdw.com - - DOMAIN-SUFFIX,y0.cn - - DOMAIN-SUFFIX,yadro.ru - - DOMAIN-SUFFIX,yads.c.yimg.jp - - DOMAIN-SUFFIX,yads.yahoo.co.jp - - DOMAIN-SUFFIX,yageben.com - - DOMAIN-SUFFIX,yam.adsbro.com - - DOMAIN-SUFFIX,yandui.com - - DOMAIN-SUFFIX,yangdasen.cn - - DOMAIN-SUFFIX,yanglaopt.net - - DOMAIN-SUFFIX,yao.zzsdjq.com - - DOMAIN-SUFFIX,yaohq.com - - DOMAIN-SUFFIX,yatemy.cn - - DOMAIN-SUFFIX,yb.torchbrowser.com - - DOMAIN-SUFFIX,ybtianxi.com - - DOMAIN-SUFFIX,yccdn.com - - DOMAIN-SUFFIX,ychml.com - - DOMAIN-SUFFIX,ychun03.com - - DOMAIN-SUFFIX,yd126.com - - DOMAIN-SUFFIX,ydjs.zol.com.cn - - DOMAIN-SUFFIX,ydlnt.com - - DOMAIN-SUFFIX,ydpushserver.youdao.com - - DOMAIN-SUFFIX,ydqzkj.com - - DOMAIN-SUFFIX,yea.uploadimagex.com - - DOMAIN-SUFFIX,yeabble.com - - DOMAIN-SUFFIX,yeas.yahoo.co.jp - - DOMAIN-SUFFIX,yee.js.cn - - DOMAIN-SUFFIX,yellowto.com - - DOMAIN-SUFFIX,yengo.com - - DOMAIN-SUFFIX,yesbeby.whies.info - - DOMAIN-SUFFIX,yess.imneinei.com - - DOMAIN-SUFFIX,yezilm.com - - DOMAIN-SUFFIX,yf898.com - - DOMAIN-SUFFIX,yfcode.m.gxwztv.com - - DOMAIN-SUFFIX,yfxpcode.m.gxwztv.com - - DOMAIN-SUFFIX,yfycy.com - - DOMAIN-SUFFIX,yhtcd.com - - DOMAIN-SUFFIX,yhzm.cc - - DOMAIN-SUFFIX,yicha.cn - - DOMAIN-SUFFIX,yidulive.net - - DOMAIN-SUFFIX,yieldmanager.com - - DOMAIN-SUFFIX,yigao.com - - DOMAIN-SUFFIX,yigyx.com - - DOMAIN-SUFFIX,yihuifu.cn - - DOMAIN-SUFFIX,yiiwoo.com - - DOMAIN-SUFFIX,yijia2009.com - - DOMAIN-SUFFIX,yijifen.com - - DOMAIN-SUFFIX,yiluup.com - - DOMAIN-SUFFIX,yin1.zgpingshu.com - - DOMAIN-SUFFIX,yingxiao.baidu.com - - DOMAIN-SUFFIX,yinhaijuan.com - - DOMAIN-SUFFIX,yinmong.com - - DOMAIN-SUFFIX,yinooo.com - - DOMAIN-SUFFIX,yinyuehu.cn - - DOMAIN-SUFFIX,yiqifa.com - - DOMAIN-SUFFIX,yiranxian.cn - - DOMAIN-SUFFIX,yitaopt.com - - DOMAIN-SUFFIX,yiwk.com - - DOMAIN-SUFFIX,yiwuds.com - - DOMAIN-SUFFIX,yixui.com - - DOMAIN-SUFFIX,yizhenya.com - - DOMAIN-SUFFIX,yjqiqi.com - - DOMAIN-SUFFIX,yk0712.com - - DOMAIN-SUFFIX,ykbei.com - - DOMAIN-SUFFIX,ykjmy.com - - DOMAIN-SUFFIX,yktj.yzz.cn - - DOMAIN-SUFFIX,ykxwn.com - - DOMAIN-SUFFIX,yl850555.com - - DOMAIN-SUFFIX,ylads.yaolan.com - - DOMAIN-SUFFIX,ylog.hiido.com - - DOMAIN-SUFFIX,ylunion.com - - DOMAIN-SUFFIX,ylwy168.com - - DOMAIN-SUFFIX,ymapp.com - - DOMAIN-SUFFIX,ymcdn.cn - - DOMAIN-SUFFIX,ymcqb.com - - DOMAIN-SUFFIX,ymrzr.com - - DOMAIN-SUFFIX,yn.001fzc.com - - DOMAIN-SUFFIX,ynbojie.com - - DOMAIN-SUFFIX,yndianju.com - - DOMAIN-SUFFIX,ynmbz.com - - DOMAIN-SUFFIX,yongkang6.com - - DOMAIN-SUFFIX,yongv.com - - DOMAIN-SUFFIX,yoo.yiiyoo.net - - DOMAIN-SUFFIX,yooli.com - - DOMAIN-SUFFIX,you1ad.com - - DOMAIN-SUFFIX,youfumei.com - - DOMAIN-SUFFIX,youjia2016.com - - DOMAIN-SUFFIX,youka.la - - DOMAIN-SUFFIX,youle.tom.com - - DOMAIN-SUFFIX,youle55.com - - DOMAIN-SUFFIX,youmi.net - - DOMAIN-SUFFIX,youmsm.com - - DOMAIN-SUFFIX,yousee.com - - DOMAIN-SUFFIX,youxi.kugou.com - - DOMAIN-SUFFIX,youxiaoad.com - - DOMAIN-SUFFIX,youxicool.net - - DOMAIN-SUFFIX,youzehui.com - - DOMAIN-SUFFIX,yoyi.com.cn - - DOMAIN-SUFFIX,yoyi.tv - - DOMAIN-SUFFIX,ypmeiwen.com - - DOMAIN-SUFFIX,ypmob.com - - DOMAIN-SUFFIX,yqjxzw.com - - DOMAIN-SUFFIX,yqw88.com - - DOMAIN-SUFFIX,yrt7dgkf.exashare.com - - DOMAIN-SUFFIX,yrxmr.com - - DOMAIN-SUFFIX,ysej.code.weddingeeos.com - - DOMAIN-SUFFIX,ysjwj.com - - DOMAIN-SUFFIX,ysm.hauchi.com.tw - - DOMAIN-SUFFIX,ysm.yahoo.com - - DOMAIN-SUFFIX,yt-adp.nosdn.127.net - - DOMAIN-SUFFIX,ytapi1.nagezan.net - - DOMAIN-SUFFIX,ytdksb.com - - DOMAIN-SUFFIX,ytguowang.com - - DOMAIN-SUFFIX,ytmx.2r3485.cn - - DOMAIN-SUFFIX,yts.ytsyyey.com - - DOMAIN-SUFFIX,ytsyyey.com - - DOMAIN-SUFFIX,yuanchengxiezuo.com - - DOMAIN-SUFFIX,yuanming.net - - DOMAIN-SUFFIX,yueyelive.com - - DOMAIN-SUFFIX,yug8.com - - DOMAIN-SUFFIX,yukhj.com - - DOMAIN-SUFFIX,yule8.net - - DOMAIN-SUFFIX,yulzs.com - - DOMAIN-SUFFIX,yumcs.xiaohuau.xyz - - DOMAIN-SUFFIX,yun.lvehaisen.com - - DOMAIN-SUFFIX,yun.rili.cn - - DOMAIN-SUFFIX,yun.sifuhe.cn - - DOMAIN-SUFFIX,yun.tuia.cn - - DOMAIN-SUFFIX,yun.tuisnake.com - - DOMAIN-SUFFIX,yun.yuyiya.com - - DOMAIN-SUFFIX,yun1.yahoo001.com - - DOMAIN-SUFFIX,yunanfuwuqi.com - - DOMAIN-SUFFIX,yunbofangbt.com - - DOMAIN-SUFFIX,yundingjiayuan.com - - DOMAIN-SUFFIX,yunjiasu.com - - DOMAIN-SUFFIX,yunshipei.com - - DOMAIN-SUFFIX,yunxuu.com - - DOMAIN-SUFFIX,yuyue008.cn - - DOMAIN-SUFFIX,ywjxsp168.cn - - DOMAIN-SUFFIX,yx.lenovomm.com - - DOMAIN-SUFFIX,yxhxs.com - - DOMAIN-SUFFIX,yxjad.com - - DOMAIN-SUFFIX,yxs.tymsyx.com - - DOMAIN-SUFFIX,yxszy.com - - DOMAIN-SUFFIX,yxxwyz.com - - DOMAIN-SUFFIX,yy58ju.com - - DOMAIN-SUFFIX,yyb.pc6.com - - DOMAIN-SUFFIX,yyffeicd.m.qxs.la - - DOMAIN-SUFFIX,yyjxgm.net - - DOMAIN-SUFFIX,yyp17.com - - DOMAIN-SUFFIX,yyt.irs01.com - - DOMAIN-SUFFIX,yzaosite.com - - DOMAIN-SUFFIX,yzh.jyjhkz.com - - DOMAIN-SUFFIX,yzh360.com - - DOMAIN-SUFFIX,yzygo.com - - DOMAIN-SUFFIX,yzytb.com - - DOMAIN-SUFFIX,z.clickvip.shop - - DOMAIN-SUFFIX,z.moatads.com - - DOMAIN-SUFFIX,z.nowscore.com - - DOMAIN-SUFFIX,z.sora.yoyi.com.cn - - DOMAIN-SUFFIX,z1.zedo.com - - DOMAIN-SUFFIX,z1hihu.xmcimg.com - - DOMAIN-SUFFIX,z2.lnymd.com - - DOMAIN-SUFFIX,zads.care2.com - - DOMAIN-SUFFIX,zae.gzzena.com - - DOMAIN-SUFFIX,zamar.cn - - DOMAIN-SUFFIX,zampdsp.com - - DOMAIN-SUFFIX,zantainet.com - - DOMAIN-SUFFIX,zapads.zapak.com - - DOMAIN-SUFFIX,zb.nxing.cn - - DOMAIN-SUFFIX,zbrushcn.com - - DOMAIN-SUFFIX,zbz.m.qxs.la - - DOMAIN-SUFFIX,zcdsp.com - - DOMAIN-SUFFIX,zcrtd.com - - DOMAIN-SUFFIX,zdjby.cn - - DOMAIN-SUFFIX,zdw.w8.com.cn - - DOMAIN-SUFFIX,ze5.com - - DOMAIN-SUFFIX,zedo.com - - DOMAIN-SUFFIX,zeus.qj.net - - DOMAIN-SUFFIX,zgc66.com - - DOMAIN-SUFFIX,zgdfz6h7po.me - - DOMAIN-SUFFIX,zgfszs.com - - DOMAIN-SUFFIX,zgjkv.com - - DOMAIN-SUFFIX,zgksb.com - - DOMAIN-SUFFIX,zgty365.com - - DOMAIN-SUFFIX,zgunion.cn - - DOMAIN-SUFFIX,zgyemy.com - - DOMAIN-SUFFIX,zhanzhang.net - - DOMAIN-SUFFIX,zhao258.com - - DOMAIN-SUFFIX,zhaoshang8.com - - DOMAIN-SUFFIX,zhaozecheng.cn - - DOMAIN-SUFFIX,zh-cn.shenyun.com - - DOMAIN-SUFFIX,zh-cn.shenyun.org - - DOMAIN-SUFFIX,zheng.cs12d.com - - DOMAIN-SUFFIX,zhengjian.org - - DOMAIN-SUFFIX,zhenxinet.com - - DOMAIN-SUFFIX,zhichi08.com - - DOMAIN-SUFFIX,zhidian3g.cn - - DOMAIN-SUFFIX,zhifenjie.com - - DOMAIN-SUFFIX,zhihei.com - - DOMAIN-SUFFIX,zhihu.xmcimg.com - - DOMAIN-SUFFIX,zhiong.net - - DOMAIN-SUFFIX,zhiyuanteam.com - - DOMAIN-SUFFIX,zhiziyun.com - - DOMAIN-SUFFIX,zhongchouyan.com - - DOMAIN-SUFFIX,zhongzicili.cc - - DOMAIN-SUFFIX,zhtjdl.com - - DOMAIN-SUFFIX,zhuanfakong.com - - DOMAIN-SUFFIX,zhuba8.com - - DOMAIN-SUFFIX,zhudiaosz.com - - DOMAIN-SUFFIX,zhuichaguoji.org - - DOMAIN-SUFFIX,zhushou.2345.com - - DOMAIN-SUFFIX,zhuuv.maoyumao.net - - DOMAIN-SUFFIX,zhwnlapi.etouch.cn - - DOMAIN-SUFFIX,zhybzp.cn - - DOMAIN-SUFFIX,zhzzx.com - - DOMAIN-SUFFIX,zisunion.com - - DOMAIN-SUFFIX,zizcy.com - - DOMAIN-SUFFIX,zjbdt.com - - DOMAIN-SUFFIX,zjhim.com - - DOMAIN-SUFFIX,zjjgtz.com - - DOMAIN-SUFFIX,zjm.zzmmkj.com - - DOMAIN-SUFFIX,zkrdy.com - - DOMAIN-SUFFIX,zlongad.com - - DOMAIN-SUFFIX,zlsw.nnjxqd.com - - DOMAIN-SUFFIX,zmj.guanqinjie.cn - - DOMAIN-SUFFIX,znsv.baidu.com - - DOMAIN-SUFFIX,zo66.com - - DOMAIN-SUFFIX,zp22938576.com - - DOMAIN-SUFFIX,zpe.klre.18183.com - - DOMAIN-SUFFIX,zq84.com - - DOMAIN-SUFFIX,zqworks.com - - DOMAIN-SUFFIX,zqzxz.com - - DOMAIN-SUFFIX,zreder.com - - DOMAIN-SUFFIX,zrpfk.com - - DOMAIN-SUFFIX,zs0613.mengchengbao.com - - DOMAIN-SUFFIX,zs1111.youzue.com - - DOMAIN-SUFFIX,zsdexun.com.cn - - DOMAIN-SUFFIX,zshacker.com - - DOMAIN-SUFFIX,zst.jzntxs.com - - DOMAIN-SUFFIX,zsxpx.com - - DOMAIN-SUFFIX,zszwcp.cn - - DOMAIN-SUFFIX,zt2088.com - - DOMAIN-SUFFIX,ztidu.com - - DOMAIN-SUFFIX,ztxbd.com - - DOMAIN-SUFFIX,zuche321.com - - DOMAIN-SUFFIX,zuiceshi.net - - DOMAIN-SUFFIX,zuimeitianqi.inveno.com - - DOMAIN-SUFFIX,zunmi.cn - - DOMAIN-SUFFIX,zws.avvo.com - - DOMAIN-SUFFIX,zx.baosmx.com - - DOMAIN-SUFFIX,zxcs.ggwan.com - - DOMAIN-SUFFIX,zxcs.linghit.com - - DOMAIN-SUFFIX,zxh.bzshzx.com - - DOMAIN-SUFFIX,zxjjzx.com - - DOMAIN-SUFFIX,zxr.fzxrjx.com - - DOMAIN-SUFFIX,zxziyuan.com - - DOMAIN-SUFFIX,zybpj.com - - DOMAIN-SUFFIX,zyf.fzdfwy.com - - DOMAIN-SUFFIX,zymo.mps.weibo.com - - DOMAIN-SUFFIX,zymro.com - - DOMAIN-SUFFIX,zytwq.net - - DOMAIN-SUFFIX,zyz.91friend.com - - DOMAIN-SUFFIX,zyz1.91friend.com - - DOMAIN-SUFFIX,zz.bdstatic.com - - DOMAIN-SUFFIX,zz123.com - - DOMAIN-SUFFIX,zzbaowen.com - - DOMAIN-SUFFIX,zzcw.office-mall.net - - DOMAIN-SUFFIX,zzd6.com - - DOMAIN-SUFFIX,zzjs2.firefang.cn - - DOMAIN-SUFFIX,zzpush.58.com - - DOMAIN-SUFFIX,zzrcz.com - - DOMAIN-SUFFIX,zzsx8.com - - DOMAIN-SUFFIX,zzy.mipujia.com - - DOMAIN-SUFFIX,zzy1.mipujia.com - - DOMAIN-SUFFIX,zzy1.quyaoya.com - - DOMAIN-SUFFIX,zzz7.52896368.com - - DOMAIN-SUFFIX,zzzzz4.52896368.com - - # > Baidu - - DOMAIN-SUFFIX,baidustatic.com - - DOMAIN,duclick.baidu.com - - DOMAIN,hm.baidu.com - - DOMAIN,hmma.baidu.com - - DOMAIN,mobads.baidu.com - - DOMAIN,mobads-logs.baidu.com - - DOMAIN,nsclick.baidu.com - - DOMAIN,wn.pos.baidu.com - - DOMAIN,ps.map.baidu.com - - DOMAIN,sv.map.baidu.com - - DOMAIN,offnavi.map.baidu.com - - DOMAIN,newvector.map.baidu.com - - DOMAIN,ulog.imap.baidu.com - - DOMAIN,newloc.map.n.shifen.com - # - URL-REGEX,^http:\/\/[\s\S]*baidu\.com/.*ad[xs]\.php - # - URL-REGEX,^http:\/\/c\.tieba\.baidu\.com\/c\/s\/splashSchedule$ - - # > Bilibili - - DOMAIN,miniapp.bilibili.com - - DOMAIN,thirdparty.biliapi.com - # - URL-REGEX,https://app.bilibili.com/x/v2/param - # - URL-REGEX,https://app.bilibili.com/x/resource/abtest - # - URL-REGEX,http://app.bilibili.com/x/v2/dataflow/report-TINYGIF - # - URL-REGEX,https://app.bilibili.com/x/v2/search/(defaultword|hot|recommend|resource) - # - URL-REGEX,https://app.bilibili.com/x/v2/rank.*rid=(168|5) - # - URL-REGEX,https://api.bilibili.com/pgc/season/rank/cn - - # > Didi - # - URL-REGEX,^https:\/\/img-ys011\.didistatic\.com\/static\/ad_oss\/image-\d{4}-\d{4}\/ - - # > ele - - DOMAIN,log.star.ele.me - - # > Netease - - DOMAIN,ad.bn.netease.com - - DOMAIN,ad.yixin.im - - DOMAIN,iadmat.nosdn.127.net - - DOMAIN,iadmusicmat.music.126.net - - DOMAIN,iadmusicmatvideo.music.126.net - - DOMAIN,impservice.dictapp.youdao.com - - DOMAIN,impservice.youdao.com - - DOMAIN,log.yex.youdao.com - - DOMAIN,log-yex.youdao.com - - DOMAIN,mr.da.netease.com - - DOMAIN,n.3g.163.com - - DOMAIN,nex.163.com - - DOMAIN,pr.da.netease.com - - DOMAIN,rd.da.netease.com - - DOMAIN,wr.da.netease.com - - DOMAIN,yt-adp.nosdn.127.net - # - URL-REGEX,^http:\/\/p\d\.music\.126\.net\/\w+==\/\d+\.jpg$ - # - URL-REGEX,^http:\/\/iad.*mat\.[a-z]*\.12[67]\.net/\w+\.(jpg|mp4)$ - - # > Zhihu - - DOMAIN,mqtt.zhihu.com - - DOMAIN,sugar.zhihu.com - - DOMAIN-SUFFIX,xdrig.com - # - URL-REGEX,https://api.zhihu.com/(fringe|zst|real_time|ad-style-service|banners|topstory/hot-lists|market/popover|mqtt|me|.*launch|.*featured-comment-ad|search/(top|tabs|preset)) - # - URL-REGEX,https://api.zhihu.com.*(launch|recommendations) - # - URL-REGEX,https://api.zhihu.com/search/(top|tabs|preset) - # - URL-REGEX,https://api.zhihu.com/answers/.*/comments/featured-comment-ad - - # - URL-REGEX,https?://(e|m).+/((uu|oo).php.+|\d+.x?html\?$) - # - URL-REGEX,https?://[^(apple|10010)]+.(com|cn)\/(a|A)d(s|v)?(/|.js) - # - URL-REGEX,https?://[^bbs].tianya\.cn - # - URL-REGEX,https?://\w.?up.qingdaonews.com - # - URL-REGEX,https?://\w{6}.com1.z0.glb.clouddn.com - # - URL-REGEX,https?://\w{8}.logic.cpm.cm.kankan.com - # - URL-REGEX,https?://\w+.cloudfront.net/banner - # - URL-REGEX,https?://\w+.gdt.qq.com - # - URL-REGEX,https?://\w+.kingsoft-office-service.com - # - URL-REGEX,https?://9377\w{2}.com - # - URL-REGEX,https?://a0b\w{2}.com - # - URL-REGEX,https?://(a?d|sax)\d.sina.com - # - URL-REGEX,https?://d\d.sinaimg.cn - # - URL-REGEX,https?://dl.app.gtja.com/.+\d+.jpg$ - # - URL-REGEX,https?://impservice.+?youdao.com - # - URL-REGEX,https?://mi.gdt.qq.com/gdt_mview.fcg - # - URL-REGEX,https?://notice.send-anywhere.com/banner - # - URL-REGEX,https?://sax\w?.sina.cn - # - URL-REGEX,https?://sax\w?.sina.com.cn - # - URL-REGEX,https?://server-\w+.imrworldwide.com - # - URL-REGEX,https?://www.bldimg.com/(background|splash)/.+.png$ - - - IP-CIDR,39.107.15.115/32 - - IP-CIDR,47.89.59.182/32 - - IP-CIDR,103.49.209.27/32 - - IP-CIDR,123.56.152.96/32 - - # > China Net - - IP-CIDR,61.160.200.223/32 - - IP-CIDR,61.160.200.242/32 - - IP-CIDR,61.160.200.252/32 - - IP-CIDR,61.174.50.214/32 - - IP-CIDR,111.175.220.163/32 - - IP-CIDR,111.175.220.164/32 - - IP-CIDR,124.232.160.178/32 - - IP-CIDR,175.6.223.15/32 - - IP-CIDR,183.59.53.237/32 - - IP-CIDR,218.93.127.37/32 - - IP-CIDR,221.228.17.152/32 - - IP-CIDR,221.231.6.79/32 - - IP-CIDR,222.186.61.91/32 - - IP-CIDR,222.186.61.95/32 - - IP-CIDR,222.186.61.96/32 - - IP-CIDR,222.186.61.97/32 - - # > China Unicom - - IP-CIDR,106.75.231.48/32 - - IP-CIDR,119.4.249.166/32 - - IP-CIDR,220.196.52.141/32 - - IP-CIDR,221.6.4.148/32 - - # > China Mobile - - IP-CIDR,114.247.28.96/32 - - IP-CIDR,221.179.131.72/32 - - IP-CIDR,221.179.140.145/32 - - # > Dr.Peng - - IP-CIDR,10.72.25.0/24 - - IP-CIDR,115.182.16.79/32 - - IP-CIDR,118.144.88.126/32 - - IP-CIDR,118.144.88.215/32 - - IP-CIDR,120.76.189.132/32 - - IP-CIDR,124.14.21.147/32 - - IP-CIDR,124.14.21.151/32 - - IP-CIDR,180.166.52.24/32 - - IP-CIDR,220.115.251.25/32 - - IP-CIDR,222.73.156.235/32 diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Scholar b/luci-app-openclash/root/etc/openclash/rule_provider/Scholar deleted file mode 100644 index 25f5d6eb..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Scholar +++ /dev/null @@ -1,79 +0,0 @@ -payload: - # > Scholar - - DOMAIN-SUFFIX,acm.org - - DOMAIN-SUFFIX,acs.org - - DOMAIN-SUFFIX,aip.org - - DOMAIN-SUFFIX,ams.org - - DOMAIN-SUFFIX,annualreviews.org - - DOMAIN-SUFFIX,aps.org - - DOMAIN-SUFFIX,ascelibrary.org - - DOMAIN-SUFFIX,asm.org - - DOMAIN-SUFFIX,asme.org - - DOMAIN-SUFFIX,astm.org - - DOMAIN-SUFFIX,blackwell-synergy.com - - DOMAIN-SUFFIX,bmj.com - - DOMAIN-SUFFIX,cabdirect.org - - DOMAIN-SUFFIX,cambridge.org - - DOMAIN-SUFFIX,cas.org - - DOMAIN-SUFFIX,cell.com - - DOMAIN-SUFFIX,clarivate.com - # - DOMAIN-SUFFIX,cnki.net - # - DOMAIN-SUFFIX,cqvip.com - - DOMAIN-SUFFIX,csiro.au - - DOMAIN-SUFFIX,deepdyve.com - - DOMAIN-SUFFIX,ebscohost.com - - DOMAIN-SUFFIX,els-cdn.com - - DOMAIN-SUFFIX,elsevier.com - - DOMAIN-SUFFIX,emerald.com - - DOMAIN-SUFFIX,endnote.com - - DOMAIN-SUFFIX,engineeringvillage.com - - DOMAIN-SUFFIX,icevirtuallibrary.com - - DOMAIN-SUFFIX,ieee.org - - DOMAIN-SUFFIX,imf.org - - DOMAIN-SUFFIX,iop.org - - DOMAIN-SUFFIX,jamanetwork.com - - DOMAIN-SUFFIX,jbc.org - - DOMAIN-SUFFIX,jhu.edu - - DOMAIN-SUFFIX,jstor.org - - DOMAIN-SUFFIX,karger.com - - DOMAIN-SUFFIX,libguides.com - - DOMAIN-SUFFIX,madsrevolution.net - - DOMAIN-SUFFIX,mdpi.com - - DOMAIN-SUFFIX,mpg.de - - DOMAIN-SUFFIX,myilibrary.com - - DOMAIN-SUFFIX,nature.com - - DOMAIN-SUFFIX,ncbi.nlm.nih.gov - - DOMAIN-SUFFIX,oecd-ilibrary.org - - DOMAIN-SUFFIX,osapublishing.org - - DOMAIN-SUFFIX,oup.com - - DOMAIN-SUFFIX,ovid.com - - DOMAIN-SUFFIX,oxfordartonline.com - - DOMAIN-SUFFIX,oxfordbibliographies.com - - DOMAIN-SUFFIX,oxfordmusiconline.com - # - DOMAIN-SUFFIX,pkulaw.com - - DOMAIN-SUFFIX,pnas.org - - DOMAIN-SUFFIX,proquest.com - - DOMAIN-SUFFIX,readcube.com - - DOMAIN-SUFFIX,researchgate.net - - DOMAIN-SUFFIX,rsc.org - - DOMAIN-SUFFIX,sagepub.com - - DOMAIN-SUFFIX,sci-hub.tw - - DOMAIN-SUFFIX,sciencedirect.com - - DOMAIN-SUFFIX,sciencemag.org - - DOMAIN-SUFFIX,scitation.org - - DOMAIN-SUFFIX,scopus.com - - DOMAIN-SUFFIX,semanticscholar.org - - DOMAIN-SUFFIX,siam.org - - DOMAIN-SUFFIX,spiedigitallibrary.org - - DOMAIN-SUFFIX,springer.com - - DOMAIN-SUFFIX,springerlink.com - - DOMAIN-SUFFIX,tandfonline.com - - DOMAIN-SUFFIX,un.org - - DOMAIN-SUFFIX,uni-bielefeld.de - # - DOMAIN-SUFFIX,wanfangdata.com - - DOMAIN-SUFFIX,webofknowledge.com - - DOMAIN-SUFFIX,westlaw.com - # - DOMAIN-SUFFIX,westlawchina.com - - DOMAIN-SUFFIX,wiley.com - - DOMAIN-SUFFIX,worldbank.org - - DOMAIN-SUFFIX,worldscientific.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Soundcloud b/luci-app-openclash/root/etc/openclash/rule_provider/Soundcloud deleted file mode 100644 index 06ef731c..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Soundcloud +++ /dev/null @@ -1,5 +0,0 @@ -payload: - # > SoundCloud - # - USER-AGENT,SoundCloud* - - DOMAIN-SUFFIX,sndcdn.com - - DOMAIN-SUFFIX,soundcloud.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Special b/luci-app-openclash/root/etc/openclash/rule_provider/Special deleted file mode 100644 index 9692619a..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Special +++ /dev/null @@ -1,144 +0,0 @@ -payload: - # > Dler Cloud - - DOMAIN-SUFFIX,dler.cloud - - # > Apple CDN - - PROCESS-NAME,storedownloadd - # - USER-AGENT,com.apple.appstored* - - DOMAIN,aod.itunes.apple.com - - DOMAIN,api.smoot.apple.cn - - DOMAIN,appldnld.apple.com - - DOMAIN,apptrailers.itunes.apple.com - - DOMAIN,gs-loc-cn.apple.com - - DOMAIN,iosapps.itunes.apple.com - - DOMAIN,music.apple.com - - DOMAIN,mvod.itunes.apple.com - - DOMAIN,osxapps.itunes.apple.com - - DOMAIN,supportdownload.apple.com - - DOMAIN,swcdn.apple.com - - DOMAIN,updates-http.cdn-apple.com - - DOMAIN-SUFFIX,ls.apple.com - - DOMAIN-SUFFIX,mzstatic.com - - # > Epic - - DOMAIN-KEYWORD,epicgames - - # > Google - - DOMAIN,safebrowsing.googleapis.com - - DOMAIN-SUFFIX,dl.google.com - - # > Microsoft - # - USER-AGENT,Microsoft%20Remote%20Desktop* - - DOMAIN-SUFFIX,msftconnecttest.com - - DOMAIN-SUFFIX,windows.com - - DOMAIN-SUFFIX,windows.net - - DOMAIN-SUFFIX,windowsupdate.com - - DOMAIN-SUFFIX,xbox.com - - DOMAIN-SUFFIX,xboxlive.com - - # > Proxy plugin - - PROCESS-NAME,v2ray - - PROCESS-NAME,ss-local - - # > Steam - # - USER-AGENT,Steam* - - DOMAIN-SUFFIX,steamcontent.com - - DOMAIN,store.steampowered.com - - - DOMAIN-SUFFIX,steamchina.com - - - DOMAIN,csgo.wmsj.cn - - DOMAIN,dota2.wmsj.cn - - DOMAIN,wmsjsteam.com - - - DOMAIN,dl.steam.clngaa.com - - DOMAIN,dl.steam.ksyna.com - - - DOMAIN,st.dl.bscstorage.net - - DOMAIN,st.dl.eccdnx.com - - DOMAIN,st.dl.pinyuncloud.com - - - DOMAIN,steampipe.steamcontent.tnkjmec.com - - - DOMAIN,steampowered.com.8686c.com - - DOMAIN,steamstatic.com.8686c.com - - - DOMAIN,steambroadcast.akamaized.net - - DOMAIN,steamcdn-a.akamaihd.net - - DOMAIN,steamcommunity-a.akamaihd.net - - DOMAIN,steamstore-a.akamaihd.net - - DOMAIN,steamusercontent-a.akamaihd.net - - DOMAIN,steamuserimages-a.akamaihd.net - - # > Tesla - - DOMAIN,tesla-cdn.thron.cn - - DOMAIN,tesla-cdn.thron.com - - DOMAIN-SUFFIX,solarcity.com - - DOMAIN-SUFFIX,tesla.cn - - DOMAIN-SUFFIX,tesla.com - - DOMAIN-SUFFIX,tesla.com.cn - - DOMAIN-SUFFIX,teslamotors.cn - - DOMAIN-SUFFIX,teslamotors.com - - DOMAIN-SUFFIX,teslamotors.com.cn - - DOMAIN-SUFFIX,ts.la - - # > UUBooster - - PROCESS-NAME,UUBooster - - # > Xunlei - # - USER-AGENT,%E8%BF%85%E9%9B%B7 - - DOMAIN-SUFFIX,xunlei.com - - # > Download - - PROCESS-NAME,aria2c.exe - - PROCESS-NAME,BitComet.exe - - PROCESS-NAME,fdm.exe - # - PROCESS-NAME,IDMan.exe - - PROCESS-NAME,NetTransport.exe - - PROCESS-NAME,qbittorrent.exe - - PROCESS-NAME,Thunder.exe - - PROCESS-NAME,transmission-daemon.exe - - PROCESS-NAME,transmission-qt.exe - - PROCESS-NAME,uTorrent.exe - - PROCESS-NAME,WebTorrent.exe - - PROCESS-NAME,aria2c - - PROCESS-NAME,fdm - - PROCESS-NAME,Folx - - PROCESS-NAME,NetTransport - - PROCESS-NAME,qbittorrent - - PROCESS-NAME,Thunder - - PROCESS-NAME,Transmission - - PROCESS-NAME,uTorrent - - PROCESS-NAME,WebTorrent - - PROCESS-NAME,WebTorrent Helper - - # > Private Tracker - - DOMAIN-SUFFIX,awesome-hd.me - - DOMAIN-SUFFIX,broadcasthe.net - - DOMAIN-SUFFIX,chdbits.co - - DOMAIN-SUFFIX,classix-unlimited.co.uk - - DOMAIN-SUFFIX,empornium.me - - DOMAIN-SUFFIX,gazellegames.net - - DOMAIN-SUFFIX,hdchina.org - - DOMAIN-SUFFIX,hdsky.me - - DOMAIN-SUFFIX,icetorrent.org - - DOMAIN-SUFFIX,jpopsuki.eu - - DOMAIN-SUFFIX,keepfrds.com - - DOMAIN-SUFFIX,madsrevolution.net - - DOMAIN-SUFFIX,m-team.cc - - DOMAIN-SUFFIX,nanyangpt.com - - DOMAIN-SUFFIX,ncore.cc - - DOMAIN-SUFFIX,open.cd - - DOMAIN-SUFFIX,ourbits.club - - DOMAIN-SUFFIX,passthepopcorn.me - - DOMAIN-SUFFIX,privatehd.to - - DOMAIN-SUFFIX,redacted.ch - - DOMAIN-SUFFIX,springsunday.net - - DOMAIN-SUFFIX,tjupt.org - - DOMAIN-SUFFIX,totheglory.im - - - DOMAIN-KEYWORD,announce - - DOMAIN-KEYWORD,torrent - - DOMAIN-SUFFIX,smtp - # - URL-REGEX,(Subject|HELO|SMTP) - diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Speedtest b/luci-app-openclash/root/etc/openclash/rule_provider/Speedtest deleted file mode 100644 index a0d78b16..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Speedtest +++ /dev/null @@ -1,11 +0,0 @@ -payload: - # > Fast - - DOMAIN-SUFFIX,fast.com - - # > Speedtest by Ookla - # - USER-AGENT,SpeedTest* - - DOMAIN-KEYWORD,speedtest - - DOMAIN-SUFFIX,ooklaserver.net - - # > Speed Test by Cloudflare - - DOMAIN-SUFFIX,speed.cloudflare.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Spotify b/luci-app-openclash/root/etc/openclash/rule_provider/Spotify deleted file mode 100644 index 3199f054..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Spotify +++ /dev/null @@ -1,8 +0,0 @@ -payload: - # > Spotify - - PROCESS-NAME,com.spotify.music - - DOMAIN-SUFFIX,pscdn.co - - DOMAIN-SUFFIX,scdn.co - - DOMAIN-SUFFIX,spoti.fi - - DOMAIN-SUFFIX,spotify.com - - DOMAIN-SUFFIX,spotifycdn.net diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Steam b/luci-app-openclash/root/etc/openclash/rule_provider/Steam deleted file mode 100644 index e467ecdc..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Steam +++ /dev/null @@ -1,14 +0,0 @@ -payload: - # > Steam - - DOMAIN-SUFFIX,fanatical.com - - DOMAIN-SUFFIX,humblebundle.com - - DOMAIN-SUFFIX,playartifact.com - - DOMAIN-SUFFIX,s.team - - DOMAIN-SUFFIX,steam-chat.com - - DOMAIN-SUFFIX,steamcommunity.com - - DOMAIN-SUFFIX,steampowered.com - - DOMAIN-SUFFIX,steamgames.com - - DOMAIN-SUFFIX,steamstatic.com - - DOMAIN-SUFFIX,steamusercontent.com - - DOMAIN-SUFFIX,underlords.com - - DOMAIN-SUFFIX,valvesoftware.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Streaming.yaml b/luci-app-openclash/root/etc/openclash/rule_provider/Streaming.yaml deleted file mode 100644 index 71f8e847..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Streaming.yaml +++ /dev/null @@ -1,262 +0,0 @@ -payload: - # Streaming Media - # (Podcast) - # > Himalaya - # USER-AGENT,Himalaya* - - DOMAIN-SUFFIX,himalaya.com - # (Music) - # > Deezer - # USER-AGENT,Deezer* - - DOMAIN-SUFFIX,deezer.com - - DOMAIN-SUFFIX,dzcdn.net - # > JOOX - # USER-AGENT,JOOX* - # USER-AGENT,WeMusic* - - DOMAIN-SUFFIX,joox.com - - DOMAIN-KEYWORD,jooxweb-api - # > KKBOX - - DOMAIN-SUFFIX,kkbox.com - - DOMAIN-SUFFIX,kkbox.com.tw - - DOMAIN-SUFFIX,kfs.io - # > Pandora - # USER-AGENT,Pandora* - - DOMAIN-SUFFIX,pandora.com - # > SoundCloud - # USER-AGENT,SoundCloud* - - DOMAIN-SUFFIX,p-cdn.us - - DOMAIN-SUFFIX,sndcdn.com - - DOMAIN-SUFFIX,soundcloud.com - # > Spotify - # USER-AGENT,Spotify* - - DOMAIN-SUFFIX,pscdn.co - - DOMAIN-SUFFIX,scdn.co - - DOMAIN-SUFFIX,spotify.com - - DOMAIN-SUFFIX,spoti.fi - - DOMAIN-KEYWORD,spotify.com - - DOMAIN-KEYWORD,-spotify-com - # > TIDAL - # USER-AGENT,TIDAL* - - DOMAIN-SUFFIX,tidal.com - # > YouTubeMusic - # USER-AGENT,com.google.ios.youtubemusic* - # USER-AGENT,YouTubeMusic* - # (Video) - # > AbemaTV - # USER-AGENT,AbemaTV* - - DOMAIN-SUFFIX,abema.io - - DOMAIN-SUFFIX,abema.tv - - DOMAIN-SUFFIX,ameba.jp - - DOMAIN-SUFFIX,hayabusa.io - - DOMAIN-KEYWORD,abematv.akamaized.net - # > All 4 - # USER-AGENT,All4* - - DOMAIN-SUFFIX,c4assets.com - - DOMAIN-SUFFIX,channel4.com - # > Amazon Prime Video - # USER-AGENT,InstantVideo.US* - # USER-AGENT,Prime%20Video* - - DOMAIN-SUFFIX,aiv-cdn.net - - DOMAIN-SUFFIX,aiv-delivery.net - - DOMAIN-SUFFIX,amazonvideo.com - - DOMAIN-SUFFIX,primevideo.com - - DOMAIN,avodmp4s3ww-a.akamaihd.net - - DOMAIN,d25xi40x97liuc.cloudfront.net - - DOMAIN,dmqdd6hw24ucf.cloudfront.net - - DOMAIN,dmqdd6hw24ucf.cloudfront.net - - DOMAIN,d22qjgkvxw22r6.cloudfront.net - - DOMAIN,d1v5ir2lpwr8os.cloudfront.net - - DOMAIN-KEYWORD,avoddashs - # > Apple TV - - DOMAIN-SUFFIX,tv.apple.com - - DOMAIN,hls.itunes.apple.com - - DOMAIN,hls-amt.itunes.apple.com - - DOMAIN,play-edge.itunes.apple.com - # > Bahamut - # USER-AGENT,Anime* - - DOMAIN-SUFFIX,bahamut.com.tw - - DOMAIN-SUFFIX,gamer.com.tw - - DOMAIN,gamer-cds.cdn.hinet.net - - DOMAIN,gamer2-cds.cdn.hinet.net - # > BBC iPlayer - # USER-AGENT,BBCiPlayer* - - DOMAIN-SUFFIX,bbc.co.uk - - DOMAIN-SUFFIX,bbci.co.uk - - DOMAIN-KEYWORD,bbcfmt - - DOMAIN-KEYWORD,uk-live - # > DAZN - # USER-AGENT,DAZN* - - DOMAIN-SUFFIX,dazn.com - - DOMAIN-SUFFIX,dazn-api.com - - DOMAIN,d151l6v8er5bdm.cloudfront.net - - DOMAIN-KEYWORD,voddazn - # > Disney+ - # USER-AGENT,Disney+* - - DOMAIN-SUFFIX,disney-plus.net - - DOMAIN-SUFFIX,disneyplus.com - - DOMAIN-SUFFIX,dssott.com - - DOMAIN,cdn.registerdisney.go.com - - DOMAIN,global.edge.bamgrid.com - # > DMM - - DOMAIN-SUFFIX,dmm.co.jp - - DOMAIN-SUFFIX,dmm.com - - DOMAIN-SUFFIX,dmm-extension.com - # > encoreTVB - # USER-AGENT,encoreTVB* - - DOMAIN-SUFFIX,encoretvb.com - - DOMAIN,edge.api.brightcove.com - - DOMAIN,bcbolt446c5271-a.akamaihd.net - # > FOX NOW - # USER-AGENT,FOX%20NOW* - - DOMAIN-SUFFIX,fox.com - - DOMAIN-SUFFIX,foxdcg.com - - DOMAIN-SUFFIX,theplatform.com - - DOMAIN-SUFFIX,uplynk.com - # > FOX+ - - DOMAIN-SUFFIX,foxplus.com - # - DOMAIN-SUFFIX,theplatform.com - - DOMAIN,cdn-fox-networks-group-green.akamaized.net - - DOMAIN,d3cv4a9a9wh0bt.cloudfront.net - - DOMAIN,foxsports01-i.akamaihd.net - - DOMAIN,foxsports02-i.akamaihd.net - - DOMAIN,foxsports03-i.akamaihd.net - - DOMAIN,staticasiafox.akamaized.net - # > HBO NOW & Max - # USER-AGENT,HBO%20NOW* - - DOMAIN-SUFFIX,hbo.com - - DOMAIN-SUFFIX,hbogo.com - - DOMAIN-SUFFIX,hbonow.com - # USER-AGENT,HBOMAX* - - DOMAIN-SUFFIX,hbomax.com - # > HBO GO HKG - # USER-AGENT,HBO%20GO%20PROD%20HKG* - - DOMAIN-SUFFIX,hbogoasia.com - - DOMAIN-SUFFIX,hbogoasia.hk - - DOMAIN,bcbolthboa-a.akamaihd.net - - DOMAIN,players.brightcove.net - - DOMAIN,s3-ap-southeast-1.amazonaws.com - - DOMAIN,dai3fd1oh325y.cloudfront.net - - DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com - - DOMAIN,hboasia1-i.akamaihd.net - - DOMAIN,hboasia2-i.akamaihd.net - - DOMAIN,hboasia3-i.akamaihd.net - - DOMAIN,hboasia4-i.akamaihd.net - - DOMAIN,hboasia5-i.akamaihd.net - - DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net - # > 华文电视 - # USER-AGENT,HWTVMobile* - - DOMAIN-SUFFIX,5itv.tv - - DOMAIN-SUFFIX,ocnttv.com - # > Hulu - - DOMAIN-SUFFIX,hulu.com - - DOMAIN-SUFFIX,huluim.com - - DOMAIN-SUFFIX,hulustream.com - # > Hulu / フールー - - DOMAIN-SUFFIX,happyon.jp - - DOMAIN-SUFFIX,hjholdings.jp - - DOMAIN-SUFFIX,hulu.jp - # > ITV - # USER-AGENT,ITV_Player* - - DOMAIN-SUFFIX,itv.com - - DOMAIN-SUFFIX,itvstatic.com - - DOMAIN,itvpnpmobile-a.akamaihd.net - # > KKTV - # USER-AGENT,KKTV* - # USER-AGENT,com.kktv.ios.kktv* - - DOMAIN-SUFFIX,kktv.com.tw - - DOMAIN-SUFFIX,kktv.me - - DOMAIN,kktv-theater.kk.stream - # > LINE TV - # USER-AGENT,LINE%20TV* - - DOMAIN-SUFFIX,linetv.tw - - DOMAIN,d3c7rimkq79yfu.cloudfront.net - # > LiTV - - DOMAIN-SUFFIX,litv.tv - - DOMAIN,litvfreemobile-hichannel.cdn.hinet.net - # > My5 - # USER-AGENT,My5* - - DOMAIN-SUFFIX,channel5.com - - DOMAIN-SUFFIX,my5.tv - - DOMAIN,d349g9zuie06uo.cloudfront.net - # > myTV SUPER - # USER-AGENT,mytv* - - DOMAIN-SUFFIX,mytvsuper.com - - DOMAIN-SUFFIX,tvb.com - # > Netflix - # USER-AGENT,Argo* - - DOMAIN-SUFFIX,netflix.com - - DOMAIN-SUFFIX,netflix.net - - DOMAIN-SUFFIX,nflxext.com - - DOMAIN-SUFFIX,nflximg.com - - DOMAIN-SUFFIX,nflximg.net - - DOMAIN-SUFFIX,nflxso.net - - DOMAIN-SUFFIX,nflxvideo.net - - DOMAIN-SUFFIX,netflixdnstest0.com - - DOMAIN-SUFFIX,netflixdnstest1.com - - DOMAIN-SUFFIX,netflixdnstest2.com - - DOMAIN-SUFFIX,netflixdnstest3.com - - DOMAIN-SUFFIX,netflixdnstest4.com - - DOMAIN-SUFFIX,netflixdnstest5.com - - DOMAIN-SUFFIX,netflixdnstest6.com - - DOMAIN-SUFFIX,netflixdnstest7.com - - DOMAIN-SUFFIX,netflixdnstest8.com - - DOMAIN-SUFFIX,netflixdnstest9.com - - IP-CIDR,23.246.0.0/18,no-resolve - - IP-CIDR,37.77.184.0/21,no-resolve - - IP-CIDR,45.57.0.0/17,no-resolve - - IP-CIDR,64.120.128.0/17,no-resolve - - IP-CIDR,66.197.128.0/17,no-resolve - - IP-CIDR,108.175.32.0/20,no-resolve - - IP-CIDR,192.173.64.0/18,no-resolve - - IP-CIDR,198.38.96.0/19,no-resolve - - IP-CIDR,198.45.48.0/20,no-resolve - # > niconico - # USER-AGENT,Niconico* - - DOMAIN-SUFFIX,dmc.nico - - DOMAIN-SUFFIX,nicovideo.jp - - DOMAIN-SUFFIX,nimg.jp - - DOMAIN-SUFFIX,socdm.com - # > Now E - - DOMAIN-SUFFIX,nowe.com - - DOMAIN-SUFFIX,nowestatic.com - # > PBS - # USER-AGENT,PBS* - - DOMAIN-SUFFIX,pbs.org - # > Pornhub - - DOMAIN-SUFFIX,phncdn.com - - DOMAIN-SUFFIX,phprcdn.com - - DOMAIN-SUFFIX,pornhub.com - - DOMAIN-SUFFIX,pornhubpremium.com - # > 台湾好 - # USER-AGENT,TaiwanGood* - - DOMAIN-SUFFIX,skyking.com.tw - - DOMAIN,hamifans.emome.net - # > TikTok - # USER-AGENT,TikTok* - - DOMAIN-SUFFIX,byteoversea.com - - DOMAIN-SUFFIX,ibytedtos.com - - DOMAIN-SUFFIX,ipstatp.com - - DOMAIN-SUFFIX,muscdn.com - - DOMAIN-SUFFIX,musical.ly - - DOMAIN-SUFFIX,tiktok.com - - DOMAIN-SUFFIX,tiktokcdn.com - - DOMAIN-SUFFIX,tiktokv.com - - DOMAIN-KEYWORD,-tiktokcdn-com - # > Twitch - - DOMAIN-SUFFIX,jtvnw.net - - DOMAIN-SUFFIX,ttvnw.net - - DOMAIN-SUFFIX,twitch.tv - - DOMAIN-SUFFIX,twitchcdn.net - # > ViuTV - # USER-AGENT,Viu* - - DOMAIN-SUFFIX,viu.com - - DOMAIN-SUFFIX,viu.tv - - DOMAIN,api.viu.now.com - - DOMAIN,d1k2us671qcoau.cloudfront.net - - DOMAIN,d2anahhhmp1ffz.cloudfront.net - - DOMAIN,dfp6rglgjqszk.cloudfront.net - # > YouTube - # USER-AGENT,com.google.ios.youtube* - # USER-AGENT,YouTube* - - DOMAIN-SUFFIX,googlevideo.com - - DOMAIN-SUFFIX,youtube.com - - DOMAIN,youtubei.googleapis.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/StreamingCN.yaml b/luci-app-openclash/root/etc/openclash/rule_provider/StreamingCN.yaml deleted file mode 100644 index efa5e75b..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/StreamingCN.yaml +++ /dev/null @@ -1,66 +0,0 @@ -payload: - # (Video) - # > Acfun - - DOMAIN-SUFFIX,acfun.cn - - DOMAIN-SUFFIX,aixifan.com - # > bilibili - - DOMAIN-SUFFIX,biliapi.net - - DOMAIN-SUFFIX,bilibili.com - - DOMAIN-SUFFIX,bilivideo.com - - DOMAIN-SUFFIX,hdslb.com - # > Tencent Video - - DOMAIN-SUFFIX,video.qq.com - - DOMAIN-SUFFIX,i.qq.com - - DOMAIN-SUFFIX,v.qq.com - # > iQiyi - - DOMAIN-SUFFIX,iqiyi.com - - DOMAIN-SUFFIX,71edge.com - # > Youku - - DOMAIN-SUFFIX,soku.com - - DOMAIN-SUFFIX,youku.com - - DOMAIN-SUFFIX,ykimg.com - # > XiGua - - DOMAIN-SUFFIX,ixigua.com - - DOMAIN-SUFFIX,snssdk.com - # > HunanTV - - DOMAIN-SUFFIX,hitv.com - - DOMAIN-SUFFIX,hunantv.com - - DOMAIN-SUFFIX,mgtv.com - # > Le - - DOMAIN-SUFFIX,le.com - # > PPLive - - DOMAIN-SUFFIX,pplive.cn - - DOMAIN-SUFFIX,pptv.com - # > Sohu Video - - DOMAIN-SUFFIX,itc.cn - - DOMAIN-SUFFIX,sohu.com - # > Migu Video - - DOMAIN-SUFFIX,cmvideo.cn - - DOMAIN-SUFFIX,miguvideo.com - - # (Music) - # > QQ Music - - DOMAIN-SUFFIX,music.qq.com - - DOMAIN-SUFFIX,music.tc.qq.com - - DOMAIN-SUFFIX,qqmusic.qq.com - - DOMAIN-SUFFIX,tencentmusic.com - - DOMAIN-SUFFIX,y.qq.com - - DOMAIN,aqqmusic.tc.qq.com - - DOMAIN,moo.qq.com - # > China Music Corp - - DOMAIN-SUFFIX,kuwo.cn - - DOMAIN-SUFFIX,kugou.com - # > Netease Cloud Music - - DOMAIN-SUFFIX,music.163.com - - DOMAIN-SUFFIX,music.126.net - - DOMAIN,mam.netease.com - - DOMAIN,api.iplay.163.com - # > Qianqian Music - - DOMAIN-SUFFIX,qianqian.com - - DOMAIN-SUFFIX,taihe.com - # > Migu Music - - DOMAIN-SUFFIX,migu.cn - # > Xiaomi - - DOMAIN-SUFFIX,ai.xiaomi.com - - DOMAIN-SUFFIX,music.xiaomi.com - - DOMAIN-SUFFIX,dmhmusic.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/StreamingSE.yaml b/luci-app-openclash/root/etc/openclash/rule_provider/StreamingSE.yaml deleted file mode 100644 index 64856aa9..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/StreamingSE.yaml +++ /dev/null @@ -1,10 +0,0 @@ -payload: - # > bilibili - - DOMAIN-SUFFIX,biliapi.net - - DOMAIN-SUFFIX,bilibili.com - - DOMAIN-KEYWORD,cn-hk-eq-bcache- - - DOMAIN,upos-hz-mirrorakam.akamaized.net - # > 愛奇藝台灣站 - - DOMAIN,cache.video.iqiyi.com - - IP-CIDR,116.211.202.206/32,no-resolve - - IP-CIDR,116.211.202.216/32,no-resolve \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Telegram b/luci-app-openclash/root/etc/openclash/rule_provider/Telegram deleted file mode 100644 index cc6ce3aa..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Telegram +++ /dev/null @@ -1,19 +0,0 @@ -payload: - # > Telegram - # - PROCESS-NAME,org.telegram.messenger - # - PROCESS-NAME,Telegram - - DOMAIN-SUFFIX,t.me - - DOMAIN-SUFFIX,tx.me - - DOMAIN-SUFFIX,tdesktop.com - - DOMAIN-SUFFIX,telegra.ph - - DOMAIN-SUFFIX,telegram.me - - DOMAIN-SUFFIX,telegram.org - - IP-CIDR,91.108.4.0/22,no-resolve - - IP-CIDR,91.108.8.0/22,no-resolve - - IP-CIDR,91.108.12.0/22,no-resolve - - IP-CIDR,91.108.16.0/22,no-resolve - - IP-CIDR,91.108.56.0/22,no-resolve - - IP-CIDR,149.154.160.0/20,no-resolve - - IP-CIDR,2001:b28:f23d::/48,no-resolve - - IP-CIDR,2001:b28:f23f::/48,no-resolve - - IP-CIDR,2001:67c:4e8::/48,no-resolve diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Tencent_Video b/luci-app-openclash/root/etc/openclash/rule_provider/Tencent_Video deleted file mode 100644 index 5d1ecbb9..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Tencent_Video +++ /dev/null @@ -1,4 +0,0 @@ -payload: - # > Tencent Video - - DOMAIN-SUFFIX,v.smtcdns.com - - DOMAIN-SUFFIX,vv.video.qq.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Unbreak.yaml b/luci-app-openclash/root/etc/openclash/rule_provider/Unbreak.yaml deleted file mode 100644 index f471f28a..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Unbreak.yaml +++ /dev/null @@ -1,44 +0,0 @@ -payload: - # Unbreak - # > General - # USER-AGENT,archero* - # USER-AGENT,coffeecorp* - # USER-AGENT,Coffee%20Corp* - # USER-AGENT,restaurant-mobile* - - DOMAIN,app.adjust.com - - DOMAIN,bdtj.tagtic.cn - # > Alibaba - - DOMAIN,log.mmstat.com - - DOMAIN,sycm.mmstat.com - # > Google - - DOMAIN-SUFFIX,blog.google - - DOMAIN-SUFFIX,googletraveladservices.com - - DOMAIN,clientservices.googleapis.com - - DOMAIN,dl.google.com - - DOMAIN,dl.l.google.com - - DOMAIN,update.googleapis.com - - DOMAIN,translate.googleapis.com - # >> Google Fonts API - - DOMAIN,fonts.googleapis.com - - DOMAIN,fonts.gstatic.com - # >> Firebase Cloud Messaging - - DOMAIN,mtalk.google.com - - DOMAIN,alt1-mtalk.google.com - - DOMAIN,alt2-mtalk.google.com - - DOMAIN,alt3-mtalk.google.com - - DOMAIN,alt4-mtalk.google.com - - DOMAIN,alt5-mtalk.google.com - - DOMAIN,alt6-mtalk.google.com - - DOMAIN,alt7-mtalk.google.com - - DOMAIN,alt8-mtalk.google.com - # >> Paramount+ - - DOMAIN,pubads.g.doubleclick.net - # > Tencent - - DOMAIN,fairplay.l.qq.com - - DOMAIN,livew.l.qq.com - - DOMAIN,vd.l.qq.com - # > Strava - - DOMAIN,analytics.strava.com - # > Umeng - - DOMAIN,msg.umeng.com - - DOMAIN,msg.umengcloud.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/ViuTV b/luci-app-openclash/root/etc/openclash/rule_provider/ViuTV deleted file mode 100644 index 8b6bb554..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/ViuTV +++ /dev/null @@ -1,15 +0,0 @@ -payload: - # > ViuTV - - PROCESS-NAME,com.hktve.viutv - - - DOMAIN-SUFFIX,bootstrapcdn.com - - DOMAIN-SUFFIX,cloudfront.net - - DOMAIN-SUFFIX,cognito-identity.us-east-1.amazonaws.com - - DOMAIN-SUFFIX,firebaseio.com - - DOMAIN-SUFFIX,jwpcdn.com - - DOMAIN-SUFFIX,jwplayer.com - - DOMAIN-SUFFIX,mobileanalytics.us-east-1.amazonaws.com - - DOMAIN-SUFFIX,nowe.com - - DOMAIN-SUFFIX,viu.com - - DOMAIN-SUFFIX,viu.tv - - DOMAIN-SUFFIX,viu.now.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/WeTV b/luci-app-openclash/root/etc/openclash/rule_provider/WeTV deleted file mode 100644 index 8d62ecaa..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/WeTV +++ /dev/null @@ -1,5 +0,0 @@ -payload: - # > WeTV - - PROCESS-NAME,com.tencent.qqlivei18n - - DOMAIN-SUFFIX,wetv.vip - - DOMAIN-SUFFIX,wetvinfo.com \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/YouTube b/luci-app-openclash/root/etc/openclash/rule_provider/YouTube deleted file mode 100644 index 13828c45..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/YouTube +++ /dev/null @@ -1,10 +0,0 @@ -payload: - # > Youtube - - PROCESS-NAME,com.google.android.youtube - - PROCESS-NAME,com.google.android.youtube.tv - - DOMAIN-KEYWORD,youtube - - DOMAIN,yt3.ggpht.com - - DOMAIN-SUFFIX,googlevideo.com - - DOMAIN-SUFFIX,gvt2.com - - DOMAIN-SUFFIX,youtu.be - - DOMAIN-SUFFIX,ytimg.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/Youku b/luci-app-openclash/root/etc/openclash/rule_provider/Youku deleted file mode 100644 index fce4eac8..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/Youku +++ /dev/null @@ -1,4 +0,0 @@ -payload: - # > Youku - - DOMAIN-SUFFIX,youku.com - - IP-CIDR,106.11.0.0/16,no-resolve \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/encoreTVB b/luci-app-openclash/root/etc/openclash/rule_provider/encoreTVB deleted file mode 100644 index 0d81772e..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/encoreTVB +++ /dev/null @@ -1,6 +0,0 @@ -payload: - # > encoreTVB - - PROCESS-NAME,com.tvbusa.encore - - DOMAIN-SUFFIX,encoretvb.com - - DOMAIN,content.jwplatform.com - - DOMAIN,videos-f.jwpsrv.com diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/iQiyi b/luci-app-openclash/root/etc/openclash/rule_provider/iQiyi deleted file mode 100644 index bd136295..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/iQiyi +++ /dev/null @@ -1,24 +0,0 @@ -payload: - # > iQiyi - - PROCESS-NAME,com.qiyi.video - - DOMAIN,intel-cache.m.iqiyi.com - - DOMAIN,intel-cache.video.iqiyi.com - - DOMAIN,intl-rcd.iqiyi.com - - DOMAIN,intl-subscription.iqiyi.com - - DOMAIN-SUFFIX,inter.iqiyi.com - - DOMAIN-SUFFIX,inter.ptqy.gitv.tv - - DOMAIN-SUFFIX,intl.iqiyi.com - - DOMAIN-SUFFIX,iq.com - - - IP-CIDR,23.211.15.99/32,no-resolve - - IP-CIDR,103.5.34.153/32,no-resolve - - IP-CIDR,104.109.129.153/32,no-resolve - - IP-CIDR,110.238.107.47/32,no-resolve - - IP-CIDR,118.26.32.178/32,no-resolve - - IP-CIDR,203.74.95.131/32,no-resolve - - IP-CIDR,203.74.95.139/32,no-resolve - - IP-CIDR,203.211.4.169/32,no-resolve - - IP-CIDR,203.211.4.193/32,no-resolve - - IP-CIDR,210.201.32.8/32,no-resolve - - IP-CIDR,210.201.32.11/32,no-resolve - diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/myTV_SUPER b/luci-app-openclash/root/etc/openclash/rule_provider/myTV_SUPER deleted file mode 100644 index 8656f051..00000000 --- a/luci-app-openclash/root/etc/openclash/rule_provider/myTV_SUPER +++ /dev/null @@ -1,7 +0,0 @@ -payload: - # > myTV_SUPER - # - USER-AGENT,mytv* - - DOMAIN-KEYWORD,nowtv100 - - DOMAIN-KEYWORD,rthklive - - DOMAIN-SUFFIX,mytvsuper.com - - DOMAIN-SUFFIX,tvb.com diff --git a/luci-app-openclash/root/etc/uci-defaults/luci-openclash b/luci-app-openclash/root/etc/uci-defaults/luci-openclash deleted file mode 100644 index bb450b72..00000000 --- a/luci-app-openclash/root/etc/uci-defaults/luci-openclash +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/sh - -uci -q delete ucitrack.@openclash[-1] -uci -q add ucitrack openclash -uci -q set ucitrack.@openclash[-1].init=openclash -uci -q commit ucitrack -uci -q delete firewall.openclash -uci -q set firewall.openclash=include -uci -q set firewall.openclash.type=script -uci -q set firewall.openclash.path=/var/etc/openclash.include -uci -q set firewall.openclash.reload=1 -uci -q commit firewall - -mkdir -p /etc/openclash/config -mkdir -p /etc/openclash/proxy_provider -mkdir -p /etc/openclash/backup -mkdir -p /etc/openclash/core -mkdir -p /etc/openclash/history -mkdir -p /usr/share/openclash/backup - -cp -f "/etc/config/openclash" "/usr/share/openclash/backup/openclash" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_rules.list" "/usr/share/openclash/backup/openclash_custom_rules.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_rules_2.list" "/usr/share/openclash/backup/openclash_custom_rules_2.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_hosts.list" "/usr/share/openclash/backup/openclash_custom_hosts.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_fake_filter.list" "/usr/share/openclash/backup/openclash_custom_fake_filter.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_domain_dns.list" "/usr/share/openclash/backup/openclash_custom_domain_dns.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_domain_dns_policy.list" "/usr/share/openclash/backup/openclash_custom_domain_dns_policy.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "/usr/share/openclash/backup/openclash_custom_fallback_filter.yaml" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_netflix_domains.list" "/usr/share/openclash/backup/openclash_custom_netflix_domains.list" >/dev/null 2>&1 - -mkdir -p /lib/upgrade/keep.d -cat > "/lib/upgrade/keep.d/luci-app-openclash" <<-EOF -/etc/openclash/ -EOF - -if [ -f "/tmp/openclash.bak" ]; then - mv -f "/tmp/openclash.bak" "/etc/config/openclash" >/dev/null 2>&1 - cp -rf "/tmp/openclash/." "/etc/openclash/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_config/." "/etc/openclash/config/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_core/." "/etc/openclash/core/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_history/." "/etc/openclash/history/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_proxy_provider/." "/etc/openclash/proxy_provider/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_rule_provider/." "/etc/openclash/rule_provider/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_game_rules/." "/etc/openclash/game_rules/" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_rules.list.bak" "/etc/openclash/custom/openclash_custom_rules.list" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_rules_2.list.bak" "/etc/openclash/custom/openclash_custom_rules_2.list" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_hosts.list.bak" "/etc/openclash/custom/openclash_custom_hosts.list" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_fake_filter.list.bak" "/etc/openclash/custom/openclash_custom_fake_filter.list" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_domain_dns.list.bak" "/etc/openclash/custom/openclash_custom_domain_dns.list" >/dev/null 2>&1 - rm -rf "/etc/openclash/openclash" - rm -rf "/etc/openclash/fake_filter.list" - rm -rf "/etc/openclash/openclash_servers_fake_filter.conf" - rm -rf /tmp/openclash* -fi - -source "/etc/openwrt_release" -case "${DISTRIB_ARCH}" in - aarch64_*) - CORE_ARCH="linux-armv8" - ;; - arm_*_neon-vfp*) - CORE_ARCH="linux-armv7" - ;; - arm_*_neon|arm_*_vfp*) - CORE_ARCH="linux-armv6" - ;; - arm*) - CORE_ARCH="linux-armv5" - ;; - i386_*) - CORE_ARCH="linux-386" - ;; - mips64_*) - CORE_ARCH="linux-mips64" - ;; - mips_*) - CORE_ARCH="linux-mips-softfloat" - ;; - mipsel_*) - CORE_ARCH="linux-mipsle-softfloat" - ;; - x86_64) - CORE_ARCH="linux-amd64" - ;; - *) - CORE_ARCH="0" - ;; -esac -uci -q set openclash.config.core_version="${CORE_ARCH}" - -if [ -n "$(uci -q get dhcp.@dnsmasq[0].resolvfile)" ]; then - uci -q set openclash.config.default_resolvfile=$(uci -q get dhcp.@dnsmasq[0].resolvfile) -fi - -uci -q set openclash.config.enable=0 -uci -q commit openclash - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/luci-app-openclash/root/usr/share/openclash/cfg_servers_address_fake_filter.sh b/luci-app-openclash/root/usr/share/openclash/cfg_servers_address_fake_filter.sh deleted file mode 100644 index ebcd72fe..00000000 --- a/luci-app-openclash/root/usr/share/openclash/cfg_servers_address_fake_filter.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -START_LOG="/tmp/openclash_start.log" -en_mode=$(uci get openclash.config.en_mode 2>/dev/null) - -if pidof clash >/dev/null && [ -z "$(echo "$en_mode" |grep "redir-host")" ]; then - rm -rf /tmp/dnsmasq.d/dnsmasq_openclash.conf >/dev/null 2>&1 - /usr/share/openclash/openclash_fake_filter.sh - if [ -s "/etc/openclash/servers_fake_filter.conf" ]; then - mkdir -p /tmp/dnsmasq.d - cp /etc/openclash/servers_fake_filter.conf /tmp/dnsmasq.d/dnsmasq_openclash.conf >/dev/null 2>&1 - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - fi - echo "" >$START_LOG -fi diff --git a/luci-app-openclash/root/usr/share/openclash/cfg_unused_servers_del.sh b/luci-app-openclash/root/usr/share/openclash/cfg_unused_servers_del.sh deleted file mode 100644 index f790857f..00000000 --- a/luci-app-openclash/root/usr/share/openclash/cfg_unused_servers_del.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -. /lib/functions.sh - -cfg_unused_servers_del() -{ - - local section="$1" - config_get_bool "enabled" "$section" "enabled" "1" - - if [ "$enabled" = "1" ]; then - return - fi - - #删除未选中节点 - uci delete openclash."$section" 2>/dev/null -} - - config_load "openclash" - config_foreach cfg_unused_servers_del "servers" - uci commit openclash - diff --git a/luci-app-openclash/root/usr/share/openclash/clash_version.sh b/luci-app-openclash/root/usr/share/openclash/clash_version.sh deleted file mode 100644 index e32047c9..00000000 --- a/luci-app-openclash/root/usr/share/openclash/clash_version.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -set_lock() { - exec 884>"/tmp/lock/openclash_clash_version.lock" 2>/dev/null - flock -x 884 2>/dev/null -} - -del_lock() { - flock -u 884 2>/dev/null - rm -rf "/tmp/lock/openclash_clash_version.lock" -} - -CKTIME=$(date "+%Y-%m-%d-%H") -LAST_OPVER="/tmp/clash_last_version" -RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master") -set_lock - -if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 5 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1 - fi - if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then - echo "CheckTime:$CKTIME" >>$LAST_OPVER - else - rm -rf $LAST_OPVER - fi -fi -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/dashboard/CNAME b/luci-app-openclash/root/usr/share/openclash/dashboard/CNAME deleted file mode 100644 index fed224ed..00000000 --- a/luci-app-openclash/root/usr/share/openclash/dashboard/CNAME +++ /dev/null @@ -1 +0,0 @@ -clash.razord.top \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.049e98b9.js b/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.049e98b9.js deleted file mode 100644 index 72a9ff6c..00000000 --- a/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.049e98b9.js +++ /dev/null @@ -1,2 +0,0 @@ -var nt=Object.defineProperty,st=Object.defineProperties;var ot=Object.getOwnPropertyDescriptors;var Fe=Object.getOwnPropertySymbols;var at=Object.prototype.hasOwnProperty,rt=Object.prototype.propertyIsEnumerable;var Ae=(t,n,s)=>n in t?nt(t,n,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[n]=s,b=(t,n)=>{for(var s in n||(n={}))at.call(n,s)&&Ae(t,s,n[s]);if(Fe)for(var s of Fe(n))rt.call(n,s)&&Ae(t,s,n[s]);return t},D=(t,n)=>st(t,ot(n));import{R as e,c as x,f as lt,r as d,a as pe,E as $e,b as le,d as ct,e as G,g as fe,u as Le,h as it,i as T,j as Ie,k as he,l as V,m as ut,n as Ee,o as mt,p as ye,q as dt,s as pt,t as ft,v as ee,w as ht,A as Et,F as yt,x as xt,N as gt,y as vt,z as Be,B as wt,H as Ct}from"./vendor.e882027f.js";const bt=function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))o(a);new MutationObserver(a=>{for(const r of a)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function s(a){const r={};return a.integrity&&(r.integrity=a.integrity),a.referrerpolicy&&(r.referrerPolicy=a.referrerpolicy),a.crossorigin==="use-credentials"?r.credentials="include":a.crossorigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(a){if(a.ep)return;a.ep=!0;const r=s(a);fetch(a.href,r)}};bt();function q(){return navigator.userAgent==="ClashX Runtime"}let P=null;class Nt{constructor(n){this.instance=null,window.WebViewJavascriptBridge!=null&&(this.instance=window.WebViewJavascriptBridge),this.initBridge(s=>{this.instance=s,n()})}initBridge(n){if(!q())return n==null?void 0:n(null);if(window.WebViewJavascriptBridge!=null)return n(window.WebViewJavascriptBridge);if(window.WVJBCallbacks!=null)return window.WVJBCallbacks.push(n);window.WVJBCallbacks=[n];const s=document.createElement("iframe");s.style.display="none",s.src="https://__bridge_loaded__",document.documentElement.appendChild(s),setTimeout(()=>document.documentElement.removeChild(s),0)}async callHandler(n,s){return await new Promise(o=>{var a;(a=this.instance)==null||a.callHandler(n,s,o)})}async ping(){return await this.callHandler("ping")}async readConfigString(){return await this.callHandler("readConfigString")}async getPasteboard(){return await this.callHandler("getPasteboard")}async getAPIInfo(){return await this.callHandler("apiInfo")}async setPasteboard(n){return await this.callHandler("setPasteboard",n)}async writeConfigWithString(n){return await this.callHandler("writeConfigWithString",n)}async setSystemProxy(n){return await this.callHandler("setSystemProxy",n)}async getStartAtLogin(){return await this.callHandler("getStartAtLogin")}async getProxyDelay(n){return await this.callHandler("speedTest",n)}async setStartAtLogin(n){return await this.callHandler("setStartAtLogin",n)}async isSystemProxySet(){return await this.callHandler("isSystemProxySet")}}function Pt(t){if(P!=null){t();return}P=new Nt(t)}function j(t){const{title:n,children:s,className:o,style:a}=t;return e.createElement("header",{className:x("header",o),style:a},e.createElement("h1",{className:"md:text-xl"},n),e.createElement("div",{className:"flex flex-auto items-center justify-end"},s))}function R(t){const{type:n,size:s=14,className:o,style:a}=t,r=x("clash-iconfont",`icon-${n}`,o),l=b({fontSize:s},a),c=D(b({},t),{className:r,style:l});return e.createElement("i",b({},c))}function U(){}function St(t,n){const s=[],o=[];for(const a of t)n(a)?s.push(a):o.push(a);return[s,o]}function O(t){var o;const n=["B","KB","MB","GB","TB"],s=Math.floor(Math.log(t||1)/Math.log(1024));return`${lt(t/Math.pow(1024,s),2).toFixed(2)} ${(o=n==null?void 0:n[s])!=null?o:""}`}function xe(t){const{className:n,checked:s=!1,disabled:o=!1,onChange:a=U}=t,r=x("switch",{checked:s,disabled:o},n);function l(){o||a(!s)}return e.createElement("div",{className:r,onClick:l},e.createElement(R,{className:"switch-icon font-bold",type:"check",size:20}))}const z=d.exports.forwardRef((t,n)=>{const{className:s,style:o,children:a}=t;return e.createElement("div",{className:x("card",s),style:o,ref:n},a)});function Te(t){const{options:n,value:s,onSelect:o}=t;return e.createElement("div",{className:"button-select"},n.map(a=>e.createElement("button",{value:a.value,key:a.value,className:x("button-select-options",{actived:s===a.value}),onClick:()=>o==null?void 0:o(a.value)},a.label)))}const kt={SideBar:{Proxies:"Proxies",Overview:"Overview",Logs:"Logs",Rules:"Rules",Settings:"Setting",Connections:"Connections",Version:"Version"},Settings:{title:"Settings",labels:{startAtLogin:"Start at login",language:"language",setAsSystemProxy:"Set as system proxy",allowConnectFromLan:"Allow connect from Lan",proxyMode:"Mode",socks5ProxyPort:"Socks5 proxy port",httpProxyPort:"HTTP proxy port",mixedProxyPort:"Mixed proxy port",externalController:"External controller"},values:{cn:"\u4E2D\u6587",en:"English",global:"Global",rules:"Rules",direct:"Direct",script:"Script"},versionString:"Current ClashX is the latest version\uFF1A{{version}}",checkUpdate:"Check Update",externalControllerSetting:{title:"External Controller",note:"Please note that modifying this configuration will only configure Dashboard. Will not modify your Clash configuration file. Please make sure that the external controller address matches the address in the Clash configuration file, otherwise, Dashboard will not be able to connect to Clash.",host:"Host",port:"Port",secret:"Secret"}},Logs:{title:"Logs"},Rules:{title:"Rules",providerTitle:"Providers",providerUpdateTime:"Last updated at",ruleCount:"Rule count"},Connections:{title:"Connections",keepClosed:"Keep closed connections",total:{text:"total",upload:"upload",download:"download"},closeAll:{title:"Warning",content:"This would close all connections"},filter:{all:"All"},columns:{host:"Host",network:"Network",type:"Type",chains:"Chains",rule:"Rule",time:"Time",speed:"Speed",upload:"Upload",download:"Download",sourceIP:"Source IP"},info:{title:"Connection",id:"ID",host:"Host",hostEmpty:"Empty",dstIP:"IP",dstIPEmpty:"Empty",srcIP:"Source",upload:"Upload",download:"Download",network:"Network",inbound:"Inbound",rule:"Rule",chains:"Chains",status:"Status",opening:"Open",closed:"Closed",closeConnection:"Close"}},Proxies:{title:"Proxies",editDialog:{title:"Edit Proxy",color:"Color",name:"Name",type:"Type",server:"Server",port:"Port",password:"Password",cipher:"Cipher",obfs:"Obfs","obfs-host":"Obfs-host",uuid:"UUID",alterId:"AlterId",tls:"TLS"},groupTitle:"Policy Group",providerTitle:"Providers",providerUpdateTime:"Last updated at",expandText:"Expand",collapseText:"Collapse",speedTestText:"Speed Test",breakConnectionsText:"Close connections which include the group"},Modal:{ok:"Ok",cancel:"Cancel"}},Dt={SideBar:{Proxies:"\u4EE3\u7406",Overview:"\u603B\u89C8",Logs:"\u65E5\u5FD7",Rules:"\u89C4\u5219",Settings:"\u8BBE\u7F6E",Connections:"\u8FDE\u63A5",Version:"\u7248\u672C"},Settings:{title:"\u8BBE\u7F6E",labels:{startAtLogin:"\u5F00\u673A\u65F6\u542F\u52A8",language:"\u8BED\u8A00",setAsSystemProxy:"\u8BBE\u7F6E\u4E3A\u7CFB\u7EDF\u4EE3\u7406",allowConnectFromLan:"\u5141\u8BB8\u6765\u81EA\u5C40\u57DF\u7F51\u7684\u8FDE\u63A5",proxyMode:"\u4EE3\u7406\u6A21\u5F0F",socks5ProxyPort:"Socks5 \u4EE3\u7406\u7AEF\u53E3",httpProxyPort:"HTTP \u4EE3\u7406\u7AEF\u53E3",mixedProxyPort:"\u6DF7\u5408\u4EE3\u7406\u7AEF\u53E3",externalController:"\u5916\u90E8\u63A7\u5236\u8BBE\u7F6E"},values:{cn:"\u4E2D\u6587",en:"English",global:"\u5168\u5C40",rules:"\u89C4\u5219",direct:"\u76F4\u8FDE",script:"\u811A\u672C"},versionString:"\u5F53\u524D ClashX \u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF1A{{version}}",checkUpdate:"\u68C0\u67E5\u66F4\u65B0",externalControllerSetting:{title:"\u7F16\u8F91\u5916\u90E8\u63A7\u5236\u8BBE\u7F6E",note:"\u8BF7\u6CE8\u610F\uFF0C\u4FEE\u6539\u8BE5\u914D\u7F6E\u9879\u5E76\u4E0D\u4F1A\u4FEE\u6539\u4F60\u7684 Clash \u914D\u7F6E\u6587\u4EF6\uFF0C\u8BF7\u786E\u8BA4\u4FEE\u6539\u540E\u7684\u5916\u90E8\u63A7\u5236\u5730\u5740\u548C Clash \u914D\u7F6E\u6587\u4EF6\u5185\u7684\u5730\u5740\u4E00\u81F4\uFF0C\u5426\u5219\u4F1A\u5BFC\u81F4 Dashboard \u65E0\u6CD5\u8FDE\u63A5\u3002",host:"Host",port:"\u7AEF\u53E3",secret:"\u5BC6\u94A5"}},Logs:{title:"\u65E5\u5FD7"},Rules:{title:"\u89C4\u5219",providerTitle:"\u89C4\u5219\u96C6",providerUpdateTime:"\u6700\u540E\u66F4\u65B0\u4E8E",ruleCount:"\u89C4\u5219\u6761\u6570"},Connections:{title:"\u8FDE\u63A5",keepClosed:"\u4FDD\u7559\u5173\u95ED\u8FDE\u63A5",total:{text:"\u603B\u91CF",upload:"\u4E0A\u4F20",download:"\u4E0B\u8F7D"},closeAll:{title:"\u8B66\u544A",content:"\u5C06\u4F1A\u5173\u95ED\u6240\u6709\u8FDE\u63A5"},filter:{all:"\u5168\u90E8"},columns:{host:"\u57DF\u540D",network:"\u7F51\u7EDC",type:"\u7C7B\u578B",chains:"\u8282\u70B9\u94FE",rule:"\u89C4\u5219",time:"\u8FDE\u63A5\u65F6\u95F4",speed:"\u901F\u7387",upload:"\u4E0A\u4F20",download:"\u4E0B\u8F7D",sourceIP:"\u6765\u6E90 IP"},info:{title:"\u8FDE\u63A5\u4FE1\u606F",id:"ID",host:"\u57DF\u540D",hostEmpty:"\u7A7A",dstIP:"IP",dstIPEmpty:"\u7A7A",srcIP:"\u6765\u6E90",upload:"\u4E0A\u4F20",download:"\u4E0B\u8F7D",network:"\u7F51\u7EDC",inbound:"\u5165\u53E3",rule:"\u89C4\u5219",chains:"\u4EE3\u7406",status:"\u72B6\u6001",opening:"\u8FDE\u63A5\u4E2D",closed:"\u5DF2\u5173\u95ED",closeConnection:"\u5173\u95ED\u8FDE\u63A5"}},Proxies:{title:"\u4EE3\u7406",editDialog:{title:"\u7F16\u8F91\u4EE3\u7406",color:"\u989C\u8272",name:"\u540D\u5B57",type:"\u7C7B\u578B",server:"\u670D\u52A1\u5668",port:"\u7AEF\u53E3",password:"\u5BC6\u7801",cipher:"\u52A0\u5BC6\u65B9\u5F0F",obfs:"Obfs","obfs-host":"Obfs-host",uuid:"UUID",alterId:"AlterId",tls:"TLS"},groupTitle:"\u7B56\u7565\u7EC4",providerTitle:"\u4EE3\u7406\u96C6",providerUpdateTime:"\u6700\u540E\u66F4\u65B0\u4E8E",expandText:"\u5C55\u5F00",collapseText:"\u6536\u8D77",speedTestText:"\u6D4B\u901F",breakConnectionsText:"\u5207\u6362\u65F6\u6253\u65AD\u5305\u542B\u7B56\u7565\u7EC4\u7684\u8FDE\u63A5"},Modal:{ok:"\u786E \u5B9A",cancel:"\u53D6 \u6D88"}},Re={en_US:kt,zh_CN:Dt},Ft=Object.keys(Re);function At(){for(const t of window.navigator.languages){if(t.includes("zh"))return"zh_CN";if(t.includes("us"))return"en_US"}return"en_US"}function ge(t){return d.exports.useMemo(()=>{function s(o,a){if(typeof o=="string")t(r=>{const l=o,c=a;r[l]=c});else if(typeof o=="function"){const r=o;t(l=>r(l))}else typeof o=="object"&&t(r=>pe(r,l=>{const c=o;for(const u of Object.keys(c)){const f=u;l[f]=c[f]}}))}return s},[t])}class Me{constructor(n){this.EE=new $e,this.innerBuffer=[],this.isClose=!1,this.config=Object.assign({bufferLength:0,retryInterval:5e3,headers:{}},n),this.config.useWebsocket?this.websocketLoop():this.loop()}websocketLoop(){var o;const n=new URL(this.config.url);n.protocol=n.protocol==="http:"?"ws:":"wss:",n.searchParams.set("token",(o=this.config.token)!=null?o:"");const s=new WebSocket(n.toString());s.addEventListener("message",a=>{const r=JSON.parse(a.data);this.EE.emit("data",[r]),this.config.bufferLength>0&&(this.innerBuffer.push(r),this.innerBuffer.length>this.config.bufferLength&&this.innerBuffer.splice(0,this.innerBuffer.length-this.config.bufferLength))}),s.addEventListener("close",()=>setTimeout(this.websocketLoop,this.config.retryInterval)),s.addEventListener("error",a=>{this.EE.emit("error",a),setTimeout(this.websocketLoop,this.config.retryInterval)})}async loop(){const n=await le.fromPromise(fetch(this.config.url,{mode:"cors",headers:this.config.token?{Authorization:`Bearer ${this.config.token}`}:{}}),a=>a);if(n.isErr()){this.retry(n.error);return}else if(n.value.body==null){this.retry(new Error("fetch body error"));return}const s=n.value.body.getReader(),o=new TextDecoder;for(;!this.isClose;){const a=await le.fromPromise(s==null?void 0:s.read(),c=>c);if(a.isErr()){this.retry(a.error);break}const l=o.decode(a.value.value).trim().split(` -`).map(c=>JSON.parse(c));this.EE.emit("data",l),this.config.bufferLength>0&&(this.innerBuffer.push(...l),this.innerBuffer.length>this.config.bufferLength&&this.innerBuffer.splice(0,this.innerBuffer.length-this.config.bufferLength))}}retry(n){this.isClose||(this.EE.emit("error",n),window.setTimeout(()=>{this.loop()},this.config.retryInterval))}subscribe(n,s){this.EE.addListener(n,s)}unsubscribe(n,s){this.EE.removeListener(n,s)}buffer(){return this.innerBuffer.slice()}destory(){this.EE.removeAllListeners(),this.isClose=!0}}class $t{constructor(n,s){this.axiosClient=ct.create({baseURL:n,headers:s?{Authorization:`Bearer ${s}`}:{}})}async getConfig(){return await this.axiosClient.get("configs")}async updateConfig(n){return await this.axiosClient.patch("configs",n)}async getRules(){return await this.axiosClient.get("rules")}async getProxyProviders(){const n=await this.axiosClient.get("providers/proxies",{validateStatus(s){return s>=200&&s<300||s===404}});return n.status===404&&(n.data={providers:{}}),n}async getRuleProviders(){return await this.axiosClient.get("providers/rules")}async updateProvider(n){return await this.axiosClient.put(`providers/proxies/${encodeURIComponent(n)}`)}async updateRuleProvider(n){return await this.axiosClient.put(`providers/rules/${encodeURIComponent(n)}`)}async healthCheckProvider(n){return await this.axiosClient.get(`providers/proxies/${encodeURIComponent(n)}/healthcheck`)}async getProxies(){return await this.axiosClient.get("proxies")}async getProxy(n){return await this.axiosClient.get(`proxies/${encodeURIComponent(n)}`)}async getVersion(){return await this.axiosClient.get("version")}async getProxyDelay(n){return await this.axiosClient.get(`proxies/${encodeURIComponent(n)}/delay`,{params:{timeout:5e3,url:"http://www.gstatic.com/generate_204"}})}async closeAllConnections(){return await this.axiosClient.delete("connections")}async closeConnection(n){return await this.axiosClient.delete(`connections/${n}`)}async getConnections(){return await this.axiosClient.get("connections")}async changeProxySelected(n,s){return await this.axiosClient.put(`proxies/${encodeURIComponent(n)}`,{name:s})}}const Lt=G(async()=>{if(!q())return null;const t=await P.getAPIInfo();return{hostname:t.host,port:t.port,secret:t.secret,protocol:"http:"}}),He=fe("externalControllers",[]);function te(){var f,i,m,h,E,w,F,A,L,k,N,I,J,X,_;const t=Le(Lt),n=it(),s=Le(He);if(t!=null)return t;let o;{const M=document.querySelector('meta[name="external-controller"]');((f=M==null?void 0:M.content)==null?void 0:f.match(/^https?:/))!=null&&(o=new URL(M.content))}const a=new URLSearchParams(n.search),r=(E=(h=(m=a.get("host"))!=null?m:(i=s==null?void 0:s[0])==null?void 0:i.hostname)!=null?h:o==null?void 0:o.hostname)!=null?E:"127.0.0.1",l=(L=(A=(F=a.get("port"))!=null?F:(w=s==null?void 0:s[0])==null?void 0:w.port)!=null?A:o==null?void 0:o.port)!=null?L:"9090",c=(J=(I=(N=a.get("secret"))!=null?N:(k=s==null?void 0:s[0])==null?void 0:k.secret)!=null?I:o==null?void 0:o.username)!=null?J:"",u=((X=a.get("protocol"))!=null?X:r==="127.0.0.1")?"http:":(_=o==null?void 0:o.protocol)!=null?_:window.location.protocol;return{hostname:r,port:l,secret:c,protocol:u}}const It=G({key:"",instance:null});function $(){const{hostname:t,port:n,secret:s,protocol:o}=te(),[a,r]=T(It),l=`${o}//${t}:${n}?secret=${s}`;if(a.key===l)return a.instance;const c=new $t(`${o}//${t}:${n}`,s);return r({key:l,instance:c}),c}const ve=G(!0),Bt=fe("language",void 0);function S(){const[t,n]=T(Bt),s=d.exports.useMemo(()=>t!=null?t:At(),[t]),o=d.exports.useCallback(function(a){function r(l){return ut(Re[s][a],l)}return{t:r}},[s]);return{lang:s,locales:Ft,setLang:n,translation:o}}const Ue=G({version:"",premium:!1});function ce(){const[t,n]=T(Ue),s=$(),o=he(ve);return V([s],async function(){const a=await le.fromPromise(s.getVersion(),r=>r);o(a.isOk()),n(a.isErr()?{version:"",premium:!1}:{version:a.value.data.version,premium:!!a.value.data.premium})}),t}function Oe(){const[{premium:t}]=T(Ue),n=$(),{data:s,mutate:o}=V(["/providers/rule",n,t],async()=>{if(!t)return[];const a=await n.getRuleProviders();return Object.keys(a.data.providers).map(r=>a.data.providers[r])});return{providers:s!=null?s:[],update:o}}const Tt=fe("profile",{breakConnections:!1});function ze(){const[t,n]=T(Tt),s=d.exports.useCallback(o=>{n(pe(t,o))},[t,n]);return{data:t,set:ge(s)}}const We=G([]);function je(){const[t,n]=T(We),s=$(),{data:o,mutate:a}=V(["/providers/proxy",s],async()=>{const r=await s.getProxyProviders();return Object.keys(r.data.providers).map(l=>r.data.providers[l]).filter(l=>l.name!=="default").filter(l=>l.vehicleType!=="Compatible")});return d.exports.useEffect(()=>{n(o!=null?o:[])},[o,n]),{providers:t,update:a}}function we(){const t=$(),{data:n,mutate:s}=V(["/config",t],async()=>{var r;const a=(await t.getConfig()).data;return{port:a.port,socksPort:a["socks-port"],mixedPort:(r=a["mixed-port"])!=null?r:0,redirPort:a["redir-port"],mode:a.mode.toLowerCase(),logLevel:a["log-level"],allowLan:a["allow-lan"]}});return{general:n!=null?n:{},update:s}}const _e=Ie({proxies:[],groups:[],global:{name:"GLOBAL",type:"Selector",now:"",history:[],all:[]}});function ie(){const[t,n]=T(_e),s=ge(n),o=$(),{mutate:a}=V(["/proxies",o],async()=>{const l=await o.getProxies(),c=l.data.proxies.GLOBAL;c.name="GLOBAL";const u=new Set(["Selector","URLTest","Fallback","LoadBalance"]),f=new Set(["DIRECT","REJECT","GLOBAL"]),i=c.all.filter(E=>!f.has(E)).map(E=>D(b({},l.data.proxies[E]),{name:E})),[m,h]=St(i,E=>!u.has(E.type));s({proxies:m,groups:h,global:c})}),r=d.exports.useCallback((l,c)=>{s(u=>{l==="GLOBAL"&&(u.global.now=c);for(const f of u.groups)f.name===l&&(f.now=c)})},[s]);return{proxies:t.proxies,groups:t.groups,global:t.global,update:a,markProxySelected:r,set:s}}const Rt=G(t=>{const n=t(_e),s=t(We),o=new Map;for(const a of n.proxies)o.set(a.name,a);for(const a of s)for(const r of a.proxies)o.set(r.name,r);return o});function Ge(){const{data:t,mutate:n}=V("/clashx",async()=>{var a,r;if(!q())return{isClashX:!1,startAtLogin:!1,systemProxy:!1};const s=(a=await(P==null?void 0:P.getStartAtLogin()))!=null?a:!1,o=(r=await(P==null?void 0:P.isSystemProxySet()))!=null?r:!1;return{startAtLogin:s,systemProxy:o,isClashX:!0}});return{data:t,update:n}}const Mt=Ie([]);function Ht(){const[t,n]=T(Mt),s=ge(n),o=$();async function a(){const r=await o.getRules();s(r.data.rules)}return{rules:t,update:a}}const Ut=G({key:"",instance:null});function Ve(){var i,m;const t=te(),{general:n}=we(),s=ce(),[o,a]=T(Ut);if(!s.version||!n.logLevel)return null;const r=!!s.version||!0,l=`${t.protocol}//${t.hostname}:${t.port}/logs?level=${(i=n.logLevel)!=null?i:""}&useWebsocket=${r}&secret=${t.secret}`;if(o.key===l)return o.instance;const c=o.instance,u=`${t.protocol}//${t.hostname}:${t.port}/logs?level=${(m=n.logLevel)!=null?m:""}`,f=new Me({url:u,bufferLength:200,token:t.secret,useWebsocket:r});return a({key:l,instance:f}),c!=null&&c.destory(),f}function Ot(){const t=te(),n=ce(),s=!!n.version||!0,o=`${t.protocol}//${t.hostname}:${t.port}/connections`;return d.exports.useMemo(()=>n.version?new Me({url:o,bufferLength:200,token:t.secret,useWebsocket:s}):null,[t.secret,o,s,n.version])}function zt(t){const{className:n,data:s,onClick:o,select:a,canClick:r,errSet:l,rowHeight:c}=t,{translation:u}=S(),{t:f}=u("Proxies"),[i,m]=d.exports.useState(!1),[h,E]=d.exports.useState(!1),w=d.exports.useRef(null);d.exports.useLayoutEffect(()=>{var N,I;E(((I=(N=w==null?void 0:w.current)==null?void 0:N.offsetHeight)!=null?I:0)>30)},[]);const F=i?"auto":c,A=r?o:U;function L(){m(!i)}const k=s.map(N=>{const I=x({"tags-selected":a===N,"cursor-pointer":r,error:l==null?void 0:l.has(N)});return e.createElement("li",{className:I,key:N,onClick:()=>A(N)},N)});return e.createElement("div",{className:x("flex items-start overflow-y-hidden",n),style:{height:F}},e.createElement("ul",{ref:w,className:x("tags",{expand:i})},k),h&&e.createElement("span",{className:"h-7 px-5 select-none cursor-pointer leading-7",onClick:L},f(i?"collapseText":"expandText")))}function K(t){const{className:n,style:s,value:o="",align:a="center",inside:r=!1,autoFocus:l=!1,type:c="text",disabled:u=!1,onChange:f=U,onBlur:i=U,onEnter:m=U}=t,h=x("input",`text-${a}`,{"focus:shadow-none":r},n);function E(w){w.code==="Enter"&&m(w)}return e.createElement("input",{disabled:u,className:h,style:s,value:o,autoFocus:l,type:c,onChange:w=>f(w.target.value,w),onBlur:i,onKeyDown:E})}function Je(t){const{show:n=!0,title:s="Modal",size:o="small",footer:a=!0,onOk:r=U,onClose:l=U,bodyClassName:c,bodyStyle:u,className:f,style:i,children:m}=t,{translation:h}=S(),{t:E}=h("Modal"),w=d.exports.useRef(document.createElement("div")),F=d.exports.useRef(null);d.exports.useLayoutEffect(()=>{const k=w.current;return document.body.appendChild(k),()=>{document.body.removeChild(k)}},[]);function A(k){k.target===F.current&&l()}const L=e.createElement("div",{className:x("modal-mask",{"modal-show":n}),ref:F,onMouseDown:A},e.createElement("div",{className:x("modal",`modal-${o}`,f),style:i},e.createElement("div",{className:"modal-title"},s),e.createElement("div",{className:x("modal-body",c),style:u},m),a&&e.createElement("div",{className:"footer"},e.createElement(Ce,{onClick:()=>l()},E("cancel")),e.createElement(Ce,{type:"primary",onClick:()=>r()},E("ok")))));return Ee.exports.createPortal(L,w.current)}const Wt={success:"check",info:"info",warning:"info",error:"close"};function jt(t){const{message:n="",type:s="info",inside:o=!1,children:a,className:r,style:l}=t,c=x("alert",`alert-${o?"note":"box"}-${s}`,r);return e.createElement("div",{className:c,style:l},e.createElement("span",{className:"alert-icon"},e.createElement(R,{type:Wt[s],size:26})),n?e.createElement("p",{className:"alert-message"},n):e.createElement("div",{className:"alert-message"},a))}function Ce(t){const{type:n="normal",onClick:s=U,children:o,className:a,style:r,disiabled:l}=t,c=x("button",`button-${n}`,a,{"button-disabled":l});return e.createElement("button",{className:c,style:r,onClick:s,disabled:l},o)}function ue(t){const[n,s]=mt(t),o=d.exports.useMemo(()=>{function a(r,l){typeof r=="string"?s(c=>{const u=r,f=l;c[u]=f}):typeof r=="function"?s(r):typeof r=="object"&&s(c=>{const u=r;for(const f of Object.keys(u)){const i=f;c[i]=u[i]}})}return a},[s]);return[n,o]}function _t(t,n=0){if(t.length<2)throw new Error("List requires at least two elements");const[s,o]=d.exports.useState(n);function a(){o((s+1)%t.length)}return{current:d.exports.useMemo(()=>t[s],[t,s]),next:a}}function be(t=!1){const[n,s]=d.exports.useState(t);function o(){s(!1)}function a(){s(!0)}return{visible:n,hide:o,show:a}}function Xe(t){const{className:n,checked:s=!1,onChange:o=U}=t,a=x("checkbox",{checked:s},n);function r(){o(!s)}return e.createElement("div",{className:a,onClick:r},e.createElement(R,{className:"checkbox-icon",type:"check",size:18}),e.createElement("div",null,t.children))}function me(t){const{color:n,className:s,style:o}=t,a=x("tag",s),r=b({color:n},o),l=D(b({},t),{className:a,style:r});return e.createElement("span",b({},l),t.children)}function Gt(t){const n=x("spinner",t.className);return e.createElement("div",{className:n},e.createElement("div",{className:"spinner-circle"},e.createElement("div",{className:"spinner-inner"})),e.createElement("div",{className:"spinner-circle"},e.createElement("div",{className:"spinner-inner"})),e.createElement("div",{className:"spinner-circle"},e.createElement("div",{className:"spinner-inner"})),e.createElement("div",{className:"spinner-circle"},e.createElement("div",{className:"spinner-inner"})),e.createElement("div",{className:"spinner-circle"},e.createElement("div",{className:"spinner-inner"})))}function Ye(t){const n=x("loading","visible",t.className);return t.visible?e.createElement("div",{className:n},e.createElement(Gt,{className:t.spinnerClassName})):null}function Vt(t){var a,r,l;const n=d.exports.useRef(document.createElement("div"));d.exports.useLayoutEffect(()=>{const c=n.current;return document.body.appendChild(c),()=>{document.body.removeChild(c)}},[]);const s="absolute h-full right-0 transition-transform transform translate-x-full duration-100 pointer-events-auto",o=e.createElement("div",{className:x(t.className,"absolute inset-0 pointer-events-none z-9999")},e.createElement(z,{className:x(s,{"translate-x-0":t.visible}),style:{width:(a=t.width)!=null?a:400}},t.children));return Ee.exports.createPortal(o,(l=(r=t.containerRef)==null?void 0:r.current)!=null?l:n.current)}ye.extend(dt);function Ne(t,n){const s=n==="en_US"?"en":"zh-cn";return ye().locale(s).from(t)}var Pe;(function(t){t.Domain="Domain",t.DomainSuffix="DomainSuffix",t.DomainKeyword="DomainKeyword",t.GeoIP="GeoIP",t.IPCIDR="IPCIDR",t.SrcIPCIDR="SrcIPCIDR",t.SrcPort="SrcPort",t.DstPort="DstPort",t.MATCH="MATCH",t.RuleSet="RuleSet"})(Pe||(Pe={}));function Jt(t){const{translation:n}=S(),s=d.exports.useMemo(()=>n("Connections").t,[n]),{className:o,style:a}=t,r=x("flex flex-wrap px-1",o);function l(c){var u;(u=t.onChange)==null||u.call(t,c)}return e.createElement("div",{className:r,style:a},e.createElement("div",{className:x("connections-devices-item pt-2 mb-2",{selected:t.selected===""}),onClick:()=>l("")},s("filter.all")),t.devices.map(c=>e.createElement("div",{key:c.label,className:x("connections-devices-item pt-2 mb-2",{selected:t.selected===c.label}),onClick:()=>l(c.label)},c.label," (",c.number,")")))}function Xt(t){var o,a,r,l,c,u,f,i,m,h,E;const{translation:n}=S(),s=d.exports.useMemo(()=>n("Connections").t,[n]);return e.createElement("div",{className:x(t.className,"text-sm flex flex-col")},e.createElement("div",{className:"flex my-3"},e.createElement("span",{className:"font-bold w-16"},s("info.id")),e.createElement("span",{className:"font-mono"},t.connection.id)),e.createElement("div",{className:"flex my-3 justify-between"},e.createElement("div",{className:"flex flex-1"},e.createElement("span",{className:"font-bold w-16"},s("info.network")),e.createElement("span",{className:"font-mono"},(o=t.connection.metadata)==null?void 0:o.network)),e.createElement("div",{className:"flex flex-1"},e.createElement("span",{className:"font-bold w-16"},s("info.inbound")),e.createElement("span",{className:"font-mono"},(a=t.connection.metadata)==null?void 0:a.type))),e.createElement("div",{className:"flex my-3"},e.createElement("span",{className:"font-bold w-16"},s("info.host")),e.createElement("span",{className:"font-mono flex-1 break-all"},((r=t.connection.metadata)==null?void 0:r.host)?`${t.connection.metadata.host}:${(l=t.connection.metadata)==null?void 0:l.destinationPort}`:s("info.hostEmpty"))),e.createElement("div",{className:"flex my-3"},e.createElement("span",{className:"font-bold w-16"},s("info.dstIP")),e.createElement("span",{className:"font-mono"},((c=t.connection.metadata)==null?void 0:c.destinationIP)?`${t.connection.metadata.destinationIP}:${(u=t.connection.metadata)==null?void 0:u.destinationPort}`:s("info.hostEmpty"))),e.createElement("div",{className:"flex my-3"},e.createElement("span",{className:"font-bold w-16"},s("info.srcIP")),e.createElement("span",{className:"font-mono"},`${(f=t.connection.metadata)==null?void 0:f.sourceIP}:${(i=t.connection.metadata)==null?void 0:i.sourcePort}`)),e.createElement("div",{className:"flex my-3"},e.createElement("span",{className:"font-bold w-16"},s("info.rule")),e.createElement("span",{className:"font-mono"},t.connection.rule&&`${t.connection.rule}${t.connection.rulePayload&&`(${t.connection.rulePayload})`}`)),e.createElement("div",{className:"flex my-3"},e.createElement("span",{className:"font-bold w-16"},s("info.chains")),e.createElement("span",{className:"font-mono flex-1 break-all"},(m=t.connection.chains)==null?void 0:m.slice().reverse().join(" / "))),e.createElement("div",{className:"flex my-3 justify-between"},e.createElement("div",{className:"flex flex-1"},e.createElement("span",{className:"font-bold w-16"},s("info.upload")),e.createElement("span",{className:"font-mono"},O((h=t.connection.upload)!=null?h:0))),e.createElement("div",{className:"flex flex-1"},e.createElement("span",{className:"font-bold w-16"},s("info.download")),e.createElement("span",{className:"font-mono"},O((E=t.connection.download)!=null?E:0)))),e.createElement("div",{className:"flex my-3"},e.createElement("span",{className:"font-bold w-16"},s("info.status")),e.createElement("span",{className:"font-mono"},t.connection.completed?e.createElement("span",{className:"text-red"},s("info.closed")):e.createElement("span",{className:"text-green"},s("info.opening")))))}class Yt{constructor(){this.connections=new Map,this.saveDisconnection=!1}appendToSet(n){var o;const s=n.reduce((a,r)=>a.set(r.id,r),new Map);for(const a of this.connections.keys())if(!s.has(a))if(!this.saveDisconnection)this.connections.delete(a);else{const r=this.connections.get(a);r!=null&&this.connections.set(a,pe(r,l=>{l.completed=!0,l.uploadSpeed=0,l.downloadSpeed=0}))}for(const a of s.keys()){if(!this.connections.has(a)){this.connections.set(a,D(b({},s.get(a)),{uploadSpeed:0,downloadSpeed:0}));continue}const r=this.connections.get(a),l=s.get(a);(o=this.connections)==null||o.set(a,D(b({},l),{uploadSpeed:l.upload-r.upload,downloadSpeed:l.download-r.download}))}}toggleSave(){var n,s;if(this.saveDisconnection){this.saveDisconnection=!1;for(const o of this.connections.keys())((s=(n=this.connections)==null?void 0:n.get(o))==null?void 0:s.completed)&&this.connections.delete(o)}else this.saveDisconnection=!0;return this.saveDisconnection}getConnections(){return[...this.connections.values()]}}function qt(){const t=d.exports.useMemo(()=>new Yt,[]),n=d.exports.useRef(!0),[s,o]=d.exports.useState([]),[a,r]=d.exports.useState(!1),l=d.exports.useCallback(function(u){t.appendToSet(u),n.current&&o(t.getConnections()),n.current=!n.current},[t]),c=d.exports.useCallback(function(){const u=t.toggleSave();r(u),u||o(t.getConnections()),n.current=!0},[t]);return{connections:s,feed:l,toggleSave:c,save:a}}var y;(function(t){t.Host="host",t.Network="network",t.Type="type",t.Chains="chains",t.Rule="rule",t.Speed="speed",t.Upload="upload",t.Download="download",t.SourceIP="sourceIP",t.Time="time"})(y||(y={}));const Kt=new Set([y.Network,y.Type,y.Rule,y.Speed,y.Upload,y.Download,y.SourceIP,y.Time]);function Qt(t,n){switch(!0){case(t===0&&n===0):return"-";case(t!==0&&n!==0):return`\u2191 ${O(t)}/s \u2193 ${O(n)}/s`;case t!==0:return`\u2191 ${O(t)}/s`;default:return`\u2193 ${O(n)}/s`}}function Zt(){const{translation:t,lang:n}=S(),s=d.exports.useMemo(()=>t("Connections").t,[t]),o=Ot(),a=$(),r=d.exports.useRef(null),[l,c]=ue({uploadTotal:0,downloadTotal:0}),{visible:u,show:f,hide:i}=be();function m(){a.closeAllConnections().finally(()=>i())}const{connections:h,feed:E,save:w,toggleSave:F}=qt(),A=d.exports.useMemo(()=>h.map(p=>({id:p.id,host:`${p.metadata.host||p.metadata.destinationIP}:${p.metadata.destinationPort}`,chains:p.chains.slice().reverse().join(" / "),rule:p.rule===Pe.RuleSet?`${p.rule}(${p.rulePayload})`:p.rule,time:new Date(p.start).getTime(),upload:p.upload,download:p.download,sourceIP:p.metadata.sourceIP,type:p.metadata.type,network:p.metadata.network.toUpperCase(),speed:{upload:p.uploadSpeed,download:p.downloadSpeed},completed:!!p.completed,original:p})),[h]),L=d.exports.useMemo(()=>{const p=pt(h,"metadata.sourceIP");return Object.keys(p).map(C=>({label:C,number:p[C].length})).sort((C,v)=>C.label.localeCompare(v.label))},[h]),k=d.exports.useRef(null),{x:N}=ft(k),I=d.exports.useMemo(()=>[{Header:s(`columns.${y.Host}`),accessor:y.Host,minWidth:260,width:260},{Header:s(`columns.${y.Network}`),accessor:y.Network,minWidth:80,width:80},{Header:s(`columns.${y.Type}`),accessor:y.Type,minWidth:120,width:120},{Header:s(`columns.${y.Chains}`),accessor:y.Chains,minWidth:200,width:200},{Header:s(`columns.${y.Rule}`),accessor:y.Rule,minWidth:140,width:140},{id:y.Speed,Header:s(`columns.${y.Speed}`),accessor(p){return[p.speed.upload,p.speed.download]},sortType(p,C){const v=p.original.speed,Z=C.original.speed;return v.download===Z.download?v.upload-Z.upload:v.download-Z.download},minWidth:200,width:200,sortDescFirst:!0},{Header:s(`columns.${y.Upload}`),accessor:y.Upload,minWidth:100,width:100,sortDescFirst:!0},{Header:s(`columns.${y.Download}`),accessor:y.Download,minWidth:100,width:100,sortDescFirst:!0},{Header:s(`columns.${y.SourceIP}`),accessor:y.SourceIP,minWidth:140,width:140,filter:"equals"},{Header:s(`columns.${y.Time}`),accessor:y.Time,minWidth:120,width:120,sortType(p,C){return C.original.time-p.original.time}}],[s]);d.exports.useLayoutEffect(()=>{function p(C){for(const v of C)c({uploadTotal:v.uploadTotal,downloadTotal:v.downloadTotal}),E(v.connections)}return o==null||o.subscribe("data",p),()=>{o==null||o.unsubscribe("data",p),o==null||o.destory()}},[o,E,c]);const{getTableProps:J,getTableBodyProps:X,headerGroups:_,rows:M,prepareRow:se,setFilter:Q}=ee.exports.useTable({columns:I,data:A,autoResetSortBy:!1,autoResetFilters:!1,initialState:{sortBy:[{id:y.Time,desc:!1}]}},ee.exports.useResizeColumns,ee.exports.useBlockLayout,ee.exports.useFilters,ee.exports.useSortBy),Y=d.exports.useMemo(()=>_[0],[_]),H=d.exports.useCallback(function(p){switch(p.column.id){case y.Speed:return Qt(p.value[0],p.value[1]);case y.Upload:case y.Download:return O(p.value);case y.Time:return Ne(new Date(p.value),n);default:return p.value}},[n]),[de,oe]=d.exports.useState("");function ae(p){oe(p),Q==null||Q(y.SourceIP,p||void 0)}const[B,g]=ue({visible:!1,selectedID:"",connection:{}});function re(){g(p=>{p.connection.completed=!0}),a.closeConnection(B.selectedID)}const W=ht(B.connection);d.exports.useEffect(()=>{var C;const p=(C=A.find(v=>v.id===B.selectedID))==null?void 0:C.original;p?g(v=>{v.connection=b({},p),B.selectedID===W.current.id&&(v.connection.completed=W.current.completed)}):Object.keys(W.current).length!==0&&!W.current.completed&&g(v=>{v.connection.completed=!0})},[A,B.selectedID,W,g]);const De=d.exports.useMemo(()=>N>0,[N]),et=d.exports.useMemo(()=>Y.headers.map((p,C)=>{const v=p,Z=v.id;return e.createElement("div",D(b({},v.getHeaderProps()),{className:x("connections-th",{resizing:v.isResizing,fixed:v.id===y.Host,shadow:De&&v.id===y.Host}),key:Z}),e.createElement("div",b({},v.getSortByToggleProps()),p.render("Header"),v.isSorted?v.isSortedDesc?" \u2193":" \u2191":null),C!==Y.headers.length-1&&e.createElement("div",D(b({},v.getResizerProps()),{className:"connections-resizer"})))}),[Y.headers,De]),tt=d.exports.useMemo(()=>M.map(p=>(se(p),e.createElement("div",D(b({},p.getRowProps()),{className:"cursor-default connections-item select-none",key:p.original.id,onClick:()=>g({visible:!0,selectedID:p.original.id})}),p.cells.map(C=>{const v=x("connections-block",{"text-center":Kt.has(C.column.id),completed:p.original.completed},{fixed:C.column.id===y.Host,shadow:N>0&&C.column.id===y.Host});return e.createElement("div",D(b({},C.getCellProps()),{className:v,key:C.column.id}),H(C))})))),[se,H,M,N,g]);return e.createElement("div",{className:"page"},e.createElement(j,{title:s("title")},e.createElement("span",{className:"cursor-default flex-1 connections-filter"},`(${s("total.text")}: ${s("total.upload")} ${O(l.uploadTotal)} ${s("total.download")} ${O(l.downloadTotal)})`),e.createElement(Xe,{className:"connections-filter",checked:w,onChange:F},s("keepClosed")),e.createElement(R,{className:"connections-filter dangerous",onClick:f,type:"close-all",size:20})),L.length>1&&e.createElement(Jt,{devices:L,selected:de,onChange:ae}),e.createElement(z,{ref:r,className:"connections-card relative"},e.createElement("div",D(b({},J()),{className:"flex flex-col flex-1 w-full overflow-auto",style:{flexBasis:0},ref:k}),e.createElement("div",D(b({},Y.getHeaderGroupProps()),{className:"connections-header"}),et),e.createElement("div",D(b({},X()),{className:"flex-1"}),tt))),e.createElement(Je,{title:s("closeAll.title"),show:u,onClose:i,onOk:m},s("closeAll.content")),e.createElement(Vt,{containerRef:r,visible:B.visible,width:450},e.createElement("div",{className:"flex h-8 justify-between items-center"},e.createElement("span",{className:"font-bold pl-3"},s("info.title")),e.createElement(R,{type:"close",size:16,className:"cursor-pointer",onClick:()=>g("visible",!1)})),e.createElement(Xt,{className:"mt-3 px-5",connection:B.connection}),e.createElement("div",{className:"flex mt-3 pr-3 justify-end"},e.createElement(Ce,{type:"danger",disiabled:B.connection.completed,onClick:()=>re()},s("info.closeConnection")))))}function en(){const{translation:t}=S(),{t:n}=t("Settings"),{hostname:s,port:o,secret:a}=te(),[r,l]=T(ve),[c,u]=ue({hostname:"",port:"",secret:""});d.exports.useEffect(()=>{u({hostname:s,port:o,secret:a})},[s,o,a,u]);const f=he(He);function i(){const{hostname:m,port:h,secret:E}=c;f([{hostname:m,port:h,secret:E}])}return e.createElement(Je,{show:!r,title:n("externalControllerSetting.title"),bodyClassName:"external-controller",onClose:()=>l(!0),onOk:i},e.createElement(jt,{type:"info",inside:!0},e.createElement("p",null,n("externalControllerSetting.note"))),e.createElement("div",{className:"flex items-center"},e.createElement("span",{className:"font-bold my-1 w-14 md:my-3"},n("externalControllerSetting.host")),e.createElement(K,{className:"flex-1 my-1 md:my-3",align:"left",inside:!0,value:c.hostname,onChange:m=>u("hostname",m),onEnter:i})),e.createElement("div",{className:"flex items-center"},e.createElement("div",{className:"font-bold my-1 w-14 md:my-3"},n("externalControllerSetting.port")),e.createElement(K,{className:"flex-1 my-1 w-14 md:my-3",align:"left",inside:!0,value:c.port,onChange:m=>u("port",m),onEnter:i})),e.createElement("div",{className:"flex items-center"},e.createElement("div",{className:"font-bold my-1 w-14 md:my-3"},n("externalControllerSetting.secret")),e.createElement(K,{className:"flex-1 my-1 w-14 md:my-3",align:"left",inside:!0,value:c.secret,onChange:m=>u("secret",m),onEnter:i})))}function tn(){var u,f;const t=d.exports.useRef(null),n=d.exports.useRef([]),[s,o]=d.exports.useState([]),{translation:a}=S(),{t:r}=a("Logs"),l=Ve(),c=d.exports.useRef((f=(u=t.current)==null?void 0:u.scrollHeight)!=null?f:0);return d.exports.useLayoutEffect(()=>{var m;const i=t.current;i!=null&&c.current===i.scrollTop+i.clientHeight&&(i.scrollTop=i.scrollHeight-i.clientHeight),c.current=(m=i==null?void 0:i.scrollHeight)!=null?m:0}),d.exports.useEffect(()=>{function i(m){n.current=n.current.slice().concat(m.map(h=>D(b({},h),{time:new Date}))),o(n.current)}return l!=null&&(l.subscribe("data",i),n.current=l.buffer(),o(n.current)),()=>l==null?void 0:l.unsubscribe("data",i)},[l]),e.createElement("div",{className:"page"},e.createElement(j,{title:r("title")}),e.createElement(z,{className:"flex flex-col flex-1 mt-2.5 md:mt-4"},e.createElement("ul",{className:"logs-panel",ref:t},s.map((i,m)=>e.createElement("li",{className:"leading-5 inline-block",key:m},e.createElement("span",{className:"mr-4 text-gray-400 text-opacity-90"},ye(i.time).format("YYYY-MM-DD HH:mm:ss")),e.createElement("span",null,"[",i.type,"] ",i.payload))))))}var ne;(function(t){t.SPEED_NOTIFY="speed-notify"})(ne||(ne={}));class nn{constructor(){this.EE=new $e}notifySpeedTest(){this.EE.emit(ne.SPEED_NOTIFY)}subscribe(n,s){this.EE.addListener(n,s)}unsubscribe(n,s){this.EE.removeListener(n,s)}}var Se=new nn;const qe={"#909399":0,"#00c520":260,"#ff9a28":600,"#ff3e5e":1/0};function Ke(t){const{config:n,className:s}=t,{set:o}=ie(),a=$(),r=d.exports.useCallback(async m=>{var E;if(q())return(E=await(P==null?void 0:P.getProxyDelay(m)))!=null?E:0;const{data:{delay:h}}=await a.getProxyDelay(m);return h},[a]),l=d.exports.useCallback(async function(){const m=await le.fromPromise(r(n.name),E=>E),h=m.isErr()?0:m.value;o(E=>{const w=E.proxies.find(F=>F.name===n.name);w!=null&&w.history.push({time:Date.now().toString(),delay:h})})},[n.name,r,o]),c=d.exports.useMemo(()=>{var m;return((m=n.history)==null?void 0:m.length)?n.history.slice(-1)[0].delay:0},[n]);d.exports.useLayoutEffect(()=>{const m=()=>{l()};return Se.subscribe(ne.SPEED_NOTIFY,m),()=>Se.unsubscribe(ne.SPEED_NOTIFY,m)},[l]);const u=d.exports.useMemo(()=>c===0,[c]),f=d.exports.useMemo(()=>Object.keys(qe).find(m=>c<=qe[m]),[c]),i=u?void 0:f;return e.createElement("div",{className:x("proxy-item",{"proxy-error":u},s)},e.createElement("span",{className:"proxy-type",style:{backgroundColor:i}},n.type),e.createElement("p",{className:"proxy-name"},n.name),e.createElement("p",{className:"proxy-delay"},c===0?"-":`${c}ms`))}function sn(t){const{markProxySelected:n}=ie(),[s]=T(Rt),{data:o}=ze(),a=$(),{config:r}=t;async function l(f){if(await a.changeProxySelected(t.config.name,f),n(t.config.name,f),o.breakConnections){const i=[],m=await a.getConnections();for(const h of m.data.connections)h.chains.includes(t.config.name)&&i.push(h.id);await Promise.all(i.map(h=>a.closeConnection(h)))}}const c=d.exports.useMemo(()=>{var i;const f=new Set;for(const m of r.all){const h=(i=s.get(m))==null?void 0:i.history;(h==null?void 0:h.length)&&h.slice(-1)[0].delay===0&&f.add(m)}return f},[r.all,s]),u=r.type==="Selector";return e.createElement("div",{className:"proxy-group"},e.createElement("div",{className:"flex h-10 mt-4 w-full items-center justify-between md:h-15 md:mt-0 md:w-auto "},e.createElement("span",{className:"h-6 px-5 w-35 overflow-hidden overflow-ellipsis whitespace-nowrap md:w-30"},r.name),e.createElement(me,{className:"mr-5 md:mr-0"},r.type)),e.createElement("div",{className:"flex-1 py-2 md:py-4"},e.createElement(zt,{className:"ml-5 md:ml-8",data:r.all,onClick:l,errSet:c,select:r.now,canClick:u,rowHeight:30})))}function on(t){const{update:n}=je(),{translation:s,lang:o}=S(),a=$(),{provider:r}=t,{t:l}=s("Proxies"),{visible:c,hide:u,show:f}=be();function i(){f(),a.healthCheckProvider(r.name).then(async()=>await n()).finally(()=>u())}function m(){f(),a.updateProvider(r.name).then(async()=>await n()).finally(()=>u())}const h=d.exports.useMemo(()=>r.proxies.slice().sort((E,w)=>-1*ke(E,w)),[r.proxies]);return e.createElement(z,{className:"proxy-provider"},e.createElement(Ye,{visible:c}),e.createElement("div",{className:"flex flex-col justify-between md:flex-row md:items-center "},e.createElement("div",{className:"flex items-center"},e.createElement("span",{className:"mr-6"},r.name),e.createElement(me,null,r.vehicleType)),e.createElement("div",{className:"flex pt-3 items-center md:pt-0"},r.updatedAt&&e.createElement("span",{className:"text-sm"},`${l("providerUpdateTime")}: ${Ne(new Date(r.updatedAt),o)}`),e.createElement(R,{className:"cursor-pointer text-red pl-5",type:"healthcheck",size:18,onClick:i}),e.createElement(R,{className:"cursor-pointer pl-5",type:"update",size:18,onClick:m}))),e.createElement("ul",{className:"proxies-list"},h.map(E=>e.createElement("li",{key:E.name},e.createElement(Ke,{className:"proxy-provider-item",config:E})))))}var Qe;(function(t){t[t.None=0]="None",t[t.Asc=1]="Asc",t[t.Desc=2]="Desc"})(Qe||(Qe={}));const an={[0]:"sort",[1]:"sort-ascending",[2]:"sort-descending"};function ke(t,n){const s=t.history.length>0?t.history.slice(-1)[0].delay:0;return((n.history.length>0?n.history.slice(-1)[0].delay:0)||Number.MAX_SAFE_INTEGER)-(s||Number.MAX_SAFE_INTEGER)}function rn(){const{groups:t,global:n}=ie(),{data:s,set:o}=ze(),{general:a}=we(),{translation:r}=S(),{t:l}=r("Proxies"),c=d.exports.useMemo(()=>a.mode==="global"?[n,...t]:t,[a,t,n]);return e.createElement(e.Fragment,null,c.length!==0&&e.createElement("div",{className:"flex flex-col"},e.createElement(j,{title:l("groupTitle")},e.createElement(Xe,{className:"cursor-pointer text-sm text-shadow-primary text-primary-600",checked:s.breakConnections,onChange:u=>o("breakConnections",u)},l("breakConnectionsText"))),e.createElement(z,{className:"my-2.5 p-0 md:my-4"},e.createElement("ul",{className:"list-none divide-y divide-gray-300"},c.map(u=>e.createElement("li",{key:u.name},e.createElement(sn,{config:u})))))))}function ln(){const{providers:t}=je(),{translation:n}=S(),{t:s}=n("Proxies");return e.createElement(e.Fragment,null,t.length!==0&&e.createElement("div",{className:"flex flex-col"},e.createElement(j,{title:s("providerTitle")}),e.createElement("ul",{className:"list-none"},t.map(o=>e.createElement("li",{className:"my-2.5 md:my-4",key:o.name},e.createElement(on,{provider:o}))))))}function cn(){const{proxies:t}=ie(),{translation:n}=S(),{t:s}=n("Proxies");function o(){Se.notifySpeedTest()}const{current:a,next:r}=_t([1,2,0]),l=d.exports.useMemo(()=>{switch(a){case 2:return t.slice().sort((u,f)=>ke(u,f));case 1:return t.slice().sort((u,f)=>-1*ke(u,f));default:return t.slice()}},[a,t]),c=r;return e.createElement(e.Fragment,null,l.length!==0&&e.createElement("div",{className:"flex flex-col"},e.createElement(j,{title:s("title")},e.createElement(R,{className:"ml-3",type:an[a],onClick:c,size:20}),e.createElement(R,{className:"ml-3",type:"speed",size:20}),e.createElement("span",{className:"proxies-speed-test",onClick:o},s("speedTestText"))),e.createElement("ul",{className:"proxies-list"},l.map(u=>e.createElement("li",{key:u.name},e.createElement(Ke,{config:u}))))))}function un(){return e.createElement("div",{className:"page"},e.createElement(rn,null),e.createElement(ln,null),e.createElement(cn,null))}function mn(t){const{update:n}=Oe(),{translation:s,lang:o}=S(),a=$(),{provider:r}=t,{t:l}=s("Rules"),{visible:c,hide:u,show:f}=be();function i(){f(),a.updateRuleProvider(r.name).then(async()=>await n()).finally(()=>u())}const m=x("rule-provider-icon",{"rule-provider-loading":c});return e.createElement("div",{className:"rule-provider"},e.createElement("div",{className:"rule-provider-header"},e.createElement("div",{className:"rule-provider-header-part"},e.createElement("span",{className:"rule-provider-name"},r.name),e.createElement(me,null,r.vehicleType),e.createElement(me,{className:"rule-provider-behavior"},r.behavior),e.createElement("span",{className:"rule-provider-update"},`${l("ruleCount")}: ${r.ruleCount}`)),e.createElement("div",{className:"rule-provider-header-part"},r.updatedAt&&e.createElement("span",{className:"rule-provider-update"},`${l("providerUpdateTime")}: ${Ne(new Date(r.updatedAt),o)}`),e.createElement(R,{className:m,type:"update",size:18,onClick:i}))))}function dn(){const{providers:t}=Oe(),{translation:n}=S(),{t:s}=n("Rules");return e.createElement(e.Fragment,null,t.length!==0&&e.createElement("div",{className:"flex flex-col"},e.createElement(j,{title:s("providerTitle")}),e.createElement(z,{className:"divide-y rounded shadow-primary mt-4 p-0"},t.map(o=>e.createElement(mn,{key:o.name,provider:o})))))}function pn(){const{rules:t,update:n}=Ht(),{translation:s}=S(),{t:o}=s("Rules");V("rules",n);function a({index:r,style:l}){const c=t[r];return e.createElement("li",{className:"rule-item",style:l},e.createElement("div",{className:"flex py-1"},e.createElement("div",{className:"text-center w-40 rule-type"},c.type),e.createElement("div",{className:"flex-1 text-center payload"},c.payload),e.createElement("div",{className:"text-center w-40 rule-proxy"},c.proxy)))}return e.createElement("div",{className:"page"},e.createElement(dn,null),e.createElement(j,{className:"not-first:mt-7.5",title:o("title")}),e.createElement(z,{className:"flex flex-col flex-1 mt-2.5 p-0 md:mt-4 focus:outline-none"},e.createElement(Et,{className:"min-h-120"},({height:r,width:l})=>e.createElement(yt,{height:r,width:l,itemCount:t.length,itemSize:50},a))))}const fn=[{label:"\u4E2D\u6587",value:"zh_CN"},{label:"English",value:"en_US"}];function hn(){var oe,ae,B;const{premium:t}=ce(),{data:n,update:s}=Ge(),{general:o,update:a}=we(),r=he(ve),l=te(),{translation:c,setLang:u,lang:f}=S(),{t:i}=c("Settings"),m=$(),[h,E]=ue({socks5ProxyPort:7891,httpProxyPort:7890,mixedProxyPort:0});d.exports.useEffect(()=>{var g,re,W;E("socks5ProxyPort",(g=o==null?void 0:o.socksPort)!=null?g:0),E("httpProxyPort",(re=o==null?void 0:o.port)!=null?re:0),E("mixedProxyPort",(W=o==null?void 0:o.mixedPort)!=null?W:0)},[o,E]);async function w(g){await m.updateConfig({mode:g}),await a()}async function F(g){await(P==null?void 0:P.setStartAtLogin(g)),await s()}async function A(g){await(P==null?void 0:P.setSystemProxy(g)),await s()}function L(g){u(g)}async function k(){await m.updateConfig({port:h.httpProxyPort}),await a()}async function N(){await m.updateConfig({"socks-port":h.socks5ProxyPort}),await a()}async function I(){await m.updateConfig({"mixed-port":h.mixedProxyPort}),await a()}async function J(g){await m.updateConfig({"allow-lan":g}),await a()}const{hostname:X,port:_}=l,{allowLan:M,mode:se}=o,Q=(oe=n==null?void 0:n.startAtLogin)!=null?oe:!1,Y=(ae=n==null?void 0:n.systemProxy)!=null?ae:!1,H=(B=n==null?void 0:n.isClashX)!=null?B:!1,de=d.exports.useMemo(()=>{const g=[{label:i("values.global"),value:"Global"},{label:i("values.rules"),value:"Rule"},{label:i("values.direct"),value:"Direct"}];return t&&g.push({label:i("values.script"),value:"Script"}),g},[i,t]);return e.createElement("div",{className:"page"},e.createElement(j,{title:i("title")}),e.createElement(z,{className:"settings-card"},e.createElement("div",{className:"flex flex-wrap"},e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.startAtLogin")),e.createElement(xe,{disabled:!(n==null?void 0:n.isClashX),checked:Q,onChange:F})),e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.language")),e.createElement(Te,{options:fn,value:f,onSelect:g=>L(g)}))),e.createElement("div",{className:"flex flex-wrap"},e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.setAsSystemProxy")),e.createElement(xe,{disabled:!H,checked:Y,onChange:A})),e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.allowConnectFromLan")),e.createElement(xe,{checked:M,onChange:J})))),e.createElement(z,{className:"settings-card"},e.createElement("div",{className:"flex flex-wrap"},e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.proxyMode")),e.createElement(Te,{options:de,value:xt(se),onSelect:w})),e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.socks5ProxyPort")),e.createElement(K,{className:"w-28",disabled:H,value:h.socks5ProxyPort,onChange:g=>E("socks5ProxyPort",+g),onBlur:N}))),e.createElement("div",{className:"flex flex-wrap"},e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.httpProxyPort")),e.createElement(K,{className:"w-28",disabled:H,value:h.httpProxyPort,onChange:g=>E("httpProxyPort",+g),onBlur:k})),e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.mixedProxyPort")),e.createElement(K,{className:"w-28",disabled:H,value:h.mixedProxyPort,onChange:g=>E("mixedProxyPort",+g),onBlur:I}))),e.createElement("div",{className:"flex flex-wrap"},e.createElement("div",{className:"flex w-full py-3 px-8 items-center justify-between md:w-1/2"},e.createElement("span",{className:"font-bold label"},i("labels.externalController")),e.createElement("span",{className:x({"modify-btn":!H},"external-controller"),onClick:()=>!H&&r(!1)},`${X}:${_}`)),e.createElement("div",{className:"px-8 w-1/2"}))))}var En="./assets/logo.b453e72f.png";function yn(t){const{routes:n}=t,{translation:s}=S(),{version:o,premium:a}=ce(),{data:r}=Ge(),{t:l}=s("SideBar"),c=n.map(({path:u,name:f,noMobile:i})=>e.createElement("li",{className:x("item",{"no-mobile":i}),key:f},e.createElement(gt,{to:u,className:({isActive:m})=>x({active:m})},l(f))));return e.createElement("div",{className:"sidebar"},e.createElement("img",{src:En,alt:"logo",className:"sidebar-logo"}),e.createElement("ul",{className:"sidebar-menu"},c),e.createElement("div",{className:"sidebar-version"},e.createElement("span",{className:"sidebar-version-label"},"Clash",(r==null?void 0:r.isClashX)&&"X"," ",l("Version")),e.createElement("span",{className:"sidebar-version-text"},o),a&&e.createElement("span",{className:"sidebar-version-label"},"Premium")))}function xn(){Ve();const t=[{path:"/proxies",name:"Proxies",element:e.createElement(un,null)},{path:"/logs",name:"Logs",element:e.createElement(tn,null)},{path:"/rules",name:"Rules",element:e.createElement(pn,null),noMobile:!0},{path:"/connections",name:"Connections",element:e.createElement(Zt,null),noMobile:!0},{path:"/settings",name:"Settings",element:e.createElement(hn,null)}];return e.createElement("div",{className:x("app",{"not-clashx":!q()})},e.createElement(yn,{routes:t}),e.createElement("div",{className:"page-container"},e.createElement(vt,null,e.createElement(Be,{path:"/",element:e.createElement(wt,{to:"/proxies",replace:!0})}),t.map(n=>e.createElement(Be,{path:n.path,key:n.path,element:n.element})))),e.createElement(en,null))}function Ze(){const t=document.getElementById("root"),n=e.createElement(Ct,null,e.createElement(d.exports.Suspense,{fallback:e.createElement(Ye,{visible:!0})},e.createElement(xn,null)));Ee.exports.render(n,t)}q()?Pt(()=>Ze()):Ze(); diff --git a/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.760643c8.css b/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.760643c8.css deleted file mode 100644 index 15121c16..00000000 --- a/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.760643c8.css +++ /dev/null @@ -1 +0,0 @@ -.header{margin:10px 0;width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;user-select:none}.header>h1{flex-shrink:0;font-size:24px;color:#2c8af8;font-weight:500;text-shadow:0 2px 6px rgba(44,138,248,.4);line-height:32px}.switch{display:inline-block;width:32px;height:16px;border-radius:8px;background-color:#d8dee2;transition:background-color .3s ease;position:relative;cursor:pointer}.switch.checked{background-color:#57befc}.switch.checked:after{transform:translate(16px)}.switch.disabled{cursor:not-allowed;background-color:#b7c5d6}.switch.disabled:after{background-color:#e4eaef;box-shadow:0 0 8px #90939980}.switch.checked.disabled{background-color:#e4eaef}.switch:after{content:"";position:absolute;top:-1px;height:18px;width:18px;border-radius:9px;background-color:#fff;box-shadow:0 0 8px #2c8af866;transition:transform .3s ease;transform:translate(-2px)}.switch-icon{position:absolute;transform:translate(-1px) scale(.4);color:#fff;line-height:16px}.card{padding:15px;box-shadow:2px 5px 20px -3px #2c8af82e;background-color:#fff;border-radius:4px}.button-select{display:flex;flex-direction:row}.button-select .button-select-options{height:30px;padding:0 15px;color:#54759a;font-size:12px;line-height:30px;background:#fff;border:1px solid #e4eaef;border-right:none;transition:all .3s ease;cursor:pointer;outline:0;display:block}.button-select .button-select-options:first-child{border-radius:3px 0 0 3px}.button-select .button-select-options:last-child{border-radius:0 3px 3px 0;border-right:1px solid #e4eaef}.button-select .button-select-options.actived{background:#57befc;color:#fff;border-color:#57befc;box-shadow:0 2px 5px #57befc80}.button-select .button-select-options.actived:active{box-shadow:none}.tags{display:flex;flex:1;align-items:center;list-style:none;flex-wrap:wrap;box-sizing:content-box}.tags li{position:relative;display:flex;align-items:center;justify-content:center;border:1px solid #2c8af8;color:#54759a;height:22px;border-radius:11px;padding:0 6px;margin:3px 4px;font-size:10px}.tags li.error{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.tags li.tags-selected.error{background:linear-gradient(135deg,#2c8af8,#f56c6c);border:none;height:24px;padding:0 7px}.tags .tags-selected{background-color:#2c8af8;color:#fff}.input{display:inline-block;height:30px;width:100%;padding:0 10px;font-size:14px;color:#54759a;border-radius:3px;border:1px solid #e4eaef;transition:all .3s;transition-property:border-color,color,box-shadow}.input:focus{outline:0;border-color:#57befc;color:#2c8af8;box-shadow:0 2px 5px #57befc80}.select{cursor:pointer;font-size:14px;line-height:30px;color:#54759a;display:flex;overflow:hidden}.select>i{margin-left:5px;color:#54759a}.select-list{position:absolute;max-width:170px;border-radius:4px;overflow:hidden;box-shadow:0 2px 5px #b7c5d680;opacity:.8;pointer-events:none;transform:scaleY(0);transform-origin:top;transition:all .2s linear}.select-list .list{max-height:300px;overflow:auto;background:#fff;padding:5px 0;transform:scaleY(2);transform-origin:top;transition:all .2s linear}.select-list .list>.option{color:#54759a;padding:10px 15px;font-size:14px;list-style:none;cursor:pointer}.select-list .list>.option:hover{background:rgba(228,234,239,.5)}.select-list .list>.selected{background:rgba(228,234,239,.5)}.select-list-show{opacity:1;pointer-events:visible;transform:scaleY(1)}.select-list-show .list{transform:scaleY(1)}.modal-mask{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.15);opacity:0;pointer-events:none;transition:all .5s ease;display:flex;justify-content:center;align-items:center;z-index:9999}.modal-mask .modal{margin-top:-50px;padding:20px 30px;background:#fff;box-shadow:0 2px 16px #54759a33;border-radius:4px;display:flex;flex-direction:column;transform:scale(0);transition:all .3s cubic-bezier(.32,.26,.71,1.29)}.modal-mask .modal .modal-title{margin:5px 0;width:100%;display:flex;align-items:center;justify-content:space-between;font-weight:700;font-size:18px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4)}.modal-mask .modal .modal-body{margin:10px 0;font-size:14px;color:#54759a}.modal-mask .modal .footer{width:100%;margin:5px 0;display:flex;align-items:center;justify-content:flex-end}.modal-mask .modal .footer .button{margin-left:10px}.modal-mask .modal-small{width:400px}.modal-mask .modal-big{width:600px}.modal-show{opacity:1;pointer-events:visible}.modal-show .modal{transform:scale(1)}@media (max-width: 768px){.modal-mask .modal{margin-top:0;padding:18px 20px}.modal-mask .modal-small{width:280px}.modal-mask .modal-big{width:480px}}.alert{padding:15px;background:#fff;border-radius:4px;box-shadow:0 2px 8px #2c8af84d;font-size:13px;line-height:1.6;text-align:justify;display:flex}.alert .alert-icon{margin-right:10px;width:20px;height:20px;border-radius:50%;flex-shrink:0;display:flex;justify-content:center;align-items:center;background:#fff}.alert .alert-icon>i{transform:scale(.5);font-weight:700}.alert .alert-message{width:100%;color:#fff}.alert-box-success{background:linear-gradient(135deg,#5dae34,#67c23a);box-shadow:0 2px 8px #5dae344d}.alert-box-success .alert-icon>i{color:#67c23a}.alert-box-info{background:linear-gradient(135deg,#3eb4fc,#57befc);box-shadow:0 2px 8px #3eb4fc4d}.alert-box-info .alert-icon>i{color:#57befc}.alert-box-warning{background:linear-gradient(135deg,#e39725,#e6a23c);box-shadow:0 2px 8px #e397254d}.alert-box-warning .alert-icon>i{color:#e6a23c}.alert-box-error{background:linear-gradient(135deg,#f35454,#f56c6c);box-shadow:0 2px 8px #f354544d}.alert-box-error .alert-icon>i{color:#f56c6c}.alert-note-success{background:rgba(103,194,58,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #67c23a;box-shadow:0 2px 8px #5dae344d}.alert-note-success .alert-icon{background:#67c23a}.alert-note-success .alert-icon>i{color:#fff}.alert-note-success .alert-message{color:#3d7323}.alert-note-info{background:rgba(87,190,252,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #57befc;box-shadow:0 2px 8px #3eb4fc4d}.alert-note-info .alert-icon{background:#57befc}.alert-note-info .alert-icon>i{color:#fff}.alert-note-info .alert-message{color:#0493e9}.alert-note-warning{background:rgba(230,162,60,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #e6a23c;box-shadow:0 2px 8px #e397254d}.alert-note-warning .alert-icon{background:#e6a23c}.alert-note-warning .alert-icon>i{color:#fff}.alert-note-warning .alert-message{color:#a76d15}.alert-note-error{background:rgba(245,108,108,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #f56c6c;box-shadow:0 2px 8px #f354544d}.alert-note-error .alert-icon{background:#f56c6c}.alert-note-error .alert-icon>i{color:#fff}.alert-note-error .alert-message{color:#eb1010}.button{outline:0;padding:0 15px;height:32px;line-height:32px;border-radius:16px;font-size:14px;cursor:pointer;transition:all .15s ease}.button:focus{outline:none}.button-primary{color:#fff;border:none;background:linear-gradient(135deg,#57befc,#2c8af8);box-shadow:0 2px 8px #2c8af880}.button-primary:hover{border:none}.button-primary:active{box-shadow:0 0 2px #2c8af880}.button-normal{color:#909399;background:#fff;border:1px solid rgba(0,0,0,.1)}.button-normal:hover{border-color:#b7c5d6;color:#54759a}.button-normal:active{background:#fafafa;color:#54759a}.button-danger{color:#fff;border:none;background:linear-gradient(135deg,#f56c6c,#f23c3c);box-shadow:0 2px 8px #f23c3c80}.button-danger:hover{border:none}.button-danger:active{box-shadow:0 0 2px #f23c3c80}.button-success{color:#fff;border:none;background:linear-gradient(135deg,#67c23a,#5dae34);box-shadow:0 2px 8px #5dae3480}.button-success:hover{border:none}.button-success:active{box-shadow:0 0 2px #5dae3480}.button-warning{color:#fff;border:none;background:linear-gradient(135deg,#e6a23c,#e39725);box-shadow:0 2px 8px #e3972580}.button-warning:hover{border:none}.button-warning:active{box-shadow:0 0 2px #e3972580}.button.button-disabled{color:#b7c5d6;background:linear-gradient(135deg,#f3f6f9,#e2e9f1);box-shadow:0 2px 8px #e2e9f180;cursor:not-allowed}.button.button-disabled:active{box-shadow:0 0 2px #e2e9f180}.message{position:fixed;top:20px;right:20px;border-radius:4px;opacity:0;background:#fff;display:flex;box-shadow:0 0 20px #2c8af833;transition:all .2s ease;transform:translate(100%)}.message .message-icon{width:36px;flex:1;border-radius:4px 0 0 4px;display:flex;justify-content:center;align-items:center}.message .message-icon>i{color:#fff}.message .message-content{padding:10px 15px;font-size:13px;color:#54759a}.message-info .message-icon{background:linear-gradient(135deg,#57befc,#2c8af8)}.message-success .message-icon{background:linear-gradient(135deg,#67c23a,#5dae34)}.message-warning .message-icon{background:linear-gradient(135deg,#e6a23c,#e39725)}.message-error .message-icon{background:linear-gradient(135deg,#f56c6c,#f23c3c)}.message-show{opacity:1;transition:all .2s ease;transform:translate(0)}.checkbox{display:flex;position:relative;padding-left:26px;cursor:pointer;line-height:18px}.checkbox:before{content:"";display:inline-block;position:absolute;left:0;top:50%;width:18px;height:18px;border-radius:3px;transition:background-color .3s ease;transform:translateY(-9px);background-color:#fff;border:1px solid #e4eaef}.checkbox.checked:before{background-color:#57befc}.checkbox-icon{position:absolute;left:0;top:50%;line-height:18px;transform:translateY(-9px) scale(.6);text-shadow:none;font-weight:700}.checkbox-icon.checkbox-icon{color:#fff}.tag{display:flex;align-items:center;justify-content:center;height:24px;font-size:12px;padding:0 12px;text-align:center;background-color:#fff;border:2px solid #2c8af8;color:#2c8af8;border-radius:12px}.spinner{position:relative;width:80px;height:80px;border-radius:100%;animation:spinner 5s infinite linear}.spinner-circle{position:absolute;width:100%;height:100%;transform-origin:48% 48%}.spinner-inner{width:100%;height:100%;border-radius:100%;border:5px solid rgba(44,138,248,.7);border-right:none;border-top:none;background-clip:padding-box;box-shadow:inset 0 0 10px #2c8af826}@keyframes spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spinner-circle:nth-of-type(0){transform:rotate(0)}.spinner-circle:nth-of-type(0) .spinner-inner{animation:spinner 2s infinite linear}.spinner-circle:nth-of-type(1){transform:rotate(70deg)}.spinner-circle:nth-of-type(1) .spinner-inner{animation:spinner 2s infinite linear}.spinner-circle:nth-of-type(2){transform:rotate(140deg)}.spinner-circle:nth-of-type(2) .spinner-inner{animation:spinner 2s infinite linear}.loading{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0;bottom:0;right:0;background-color:#ffffffe6;box-shadow:inset 0 0 80px #0000001a;z-index:1000}.connections-devices-item{margin-right:20px;font-size:14px;color:#909399;border-radius:3px;cursor:pointer;transition:color .3s ease}.connections-devices-item.selected{color:#2c8af8}.connections-card{display:flex;flex-direction:column;flex:1;margin-top:10px;padding:0;overflow:hidden}.connections-card .connections-th{position:relative;text-align:center;color:#909399;background:#f3f6f9;height:30px;line-height:30px;font-weight:500;font-size:14px;cursor:pointer;user-select:none}.connections-card .connections-th.resizing .connections-resizer{opacity:1}.connections-card .connections-th.fixed{position:sticky!important;left:0;z-index:99}.connections-card .connections-th.fixed.shadow{box-shadow:inset -9px 0 8px -14px #000}.connections-card .connections-resizer{position:absolute;opacity:0;right:-10px;top:8px;bottom:8px;width:20px;transition:opacity .3s ease;z-index:10;font-size:14px;font-weight:300;touch-action:none}.connections-card .connections-resizer:before{content:"";display:block;position:absolute;left:10px;transform:translate(-1px);width:2px;height:100%;background-color:#90939999}.connections-card .connections-header{position:sticky;top:0;z-index:999;white-space:nowrap}.connections-card .connections-header:hover .connections-resizer{opacity:1}.connections-card .connections-block{display:flex;align-items:center;font-size:14px;line-height:36px;padding:0 10px;color:#54759a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.connections-card .connections-block.completed{background-color:#e9eef4;color:#54759a80}.connections-card .connections-block.fixed{position:sticky;left:0;z-index:998;background-color:#fff}.connections-card .connections-block.fixed.shadow{box-shadow:inset -9px 0 8px -14px #000}.connections-filter{color:#2c8af8;font-size:14px;line-height:20px;margin-left:15px;text-shadow:0 0 6px rgba(44,138,248,.4);cursor:pointer}.connections-filter.dangerous{color:#f56c6c;text-shadow:0 0 6px rgba(87,190,252,.2)}.external-controller .alert{margin:10px 0}@media (max-width: 768px){.external-controller .alert{display:none}}.logs-panel{display:flex;flex-direction:column;flex-grow:1;flex-basis:0;list-style:none;padding:10px;border-radius:2px;background-color:#f3f6f9;font-size:12px;color:#73808f;overflow-y:auto;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}.proxy-item{position:relative;width:100%;height:110px;padding:10px;border-radius:4px;background:#fff;user-select:none;cursor:default;box-shadow:2px 5px 20px -3px #2c8af833;transition:all .3s ease}.proxy-item .proxy-type{padding:2px 5px;font-size:10px;color:#fff;border-radius:2px}.proxy-item .proxy-name{display:-webkit-box;margin-top:10px;color:#54759a;font-size:10px;overflow:hidden;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.proxy-item .proxy-delay{position:absolute;left:10px;bottom:13px;font-size:10px;color:#54759acc}.proxy-item .proxy-editor{position:absolute;right:10px;bottom:10px;cursor:pointer;color:#54759acc;opacity:0;pointer-events:none;transition:all .3s ease}.proxy-item:hover{box-shadow:0 14px 20px -4px #54759a66}.proxy-item:hover .proxy-editor{opacity:1;pointer-events:visible}.proxy-error{opacity:.5}.proxy-error .proxy-type{background-color:#909399}@media (max-width: 768px){.proxy-item{height:70px}.proxy-item .proxy-delay{left:unset;bottom:unset;top:0;right:20px;height:70px;line-height:70px}}.proxy-group{display:flex;align-items:flex-start;font-size:14px;color:#546b87}@media (max-width: 768px){.proxy-group{flex-direction:column}}.proxy-provider{position:relative;display:flex;flex-direction:column;font-size:16px;padding:20px;color:#546b87}.proxy-provider-item{box-shadow:0 0 24px #2c8af833}.proxy-provider-item:hover{box-shadow:0 0 24px #54759a66}.proxies-list{--item-width: calc(100% / (var(--columns) + 1));--gap: calc(var(--item-width) / var(--columns));display:flex;margin-right:calc(-1 * var(--gap));margin-top:20px;flex-wrap:wrap;align-content:flex-start;list-style:none}@media (min-width: 2001px){.proxies-list{--columns: 12}}@media (max-width: 2000px){.proxies-list{--columns: 10}}@media (max-width: 1600px){.proxies-list{--columns: 8}}@media (max-width: 1340px){.proxies-list{--columns: 7}}@media (max-width: 960px){.proxies-list{--columns: 6}}@media (max-width: 860px){.proxies-list{--columns: 5}}@media (max-width: 760px){.proxies-list{--columns: 3}}.proxies-list>li{display:inline-block;width:var(--item-width);margin-right:var(--gap);flex-shrink:0;margin-bottom:10px}.proxies-speed-test{line-height:32px;margin:0 2px 0 6px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4);cursor:pointer}@media (max-width: 768px){.proxies-list{margin-right:0;padding-bottom:20px;flex-wrap:unset;flex-direction:column}.proxies-list>li{width:100%;margin-right:0;margin-bottom:10px}}.rule-provider{position:relative;display:flex;flex-direction:column;font-size:16px;padding:20px;color:#546b87}.rule-provider-header{display:flex;align-items:center;justify-content:space-between}.rule-provider-header-part{display:flex;align-items:center}.rule-provider-name{width:120px;margin-right:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rule-provider-behavior{width:80px;margin:0 20px 0 12px;background-color:#2c8af8;color:#fff}.rule-provider-spinner{transform:scale(.4)}.rule-provider-proxies{list-style:none}.rule-provider-item{box-shadow:0 0 24px #2c8af833}.rule-provider-item:hover{box-shadow:0 0 24px #54759a66}.rule-provider-update{line-height:14px;font-size:14px}.rule-provider-icon{display:block;margin-left:20px;cursor:pointer}.rule-provider-icon.rule-provider-loading:before{color:#909399;cursor:not-allowed;animation:spinner 2s infinite linear}@media (max-width: 768px){.rule-provider-header{flex-direction:column;align-items:flex-start}.rule-provider-header-part{margin:6px 0}}.rule-item{line-height:30px;padding:5px 0;height:50px;overflow:hidden;list-style:none;user-select:none;border-bottom:1px solid rgba(228,234,239,.5)}.rule-item .drag-handler{cursor:row-resize;margin:0 10px;display:flex;justify-content:center}.rule-item .drag-handler>i{font-weight:700;color:#b7c5d6}.rule-item .rule-type{font-size:14px;color:#54759a}.rule-item .rule-type>i{margin-left:5px;color:#54759a}.rule-item .payload{font-size:14px;color:#54759a;cursor:pointer}.rule-item .rule-proxy{font-size:14px;color:#54759a}.rule-item .delete-btn{opacity:0;transition:all .3s ease}.rule-item .delete-btn span{font-size:14px;color:#f56c6c;cursor:pointer}.rule-item:last-child{border-bottom:none}.rule-item:hover .delete-btn{opacity:1}.settings-card{margin-top:10px;padding:.75rem 0}.settings-card .label{font-size:14px;color:#54759a}.settings-card .external-controller{font-size:14px;color:#54759a;display:flex;justify-content:flex-end;font-weight:400;line-height:17px}.settings-card .external-controller.modify-btn{color:#57befc;cursor:pointer}.clash-version{position:relative;margin-top:10px;padding:20px 45px;display:flex}.clash-version .check-icon{width:24px;height:24px;border-radius:50%;background:linear-gradient(135deg,#57befc,#2c8af8);display:flex;justify-content:center;align-items:center}.clash-version .check-icon>i{transform:scale(.5);color:#fff;font-weight:700}.clash-version .version-info{margin-left:10px;font-size:14px;line-height:24px;color:#54759a}.clash-version .check-update-btn{position:absolute;right:45px;font-size:14px;line-height:24px;color:#b7c5d6;cursor:pointer;transition:all .15s ease}.clash-version .check-update-btn:hover{color:#54759a}.sidebar{position:fixed;top:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:160px;user-select:none}.sidebar-logo{margin-top:50px;width:60px;height:60px}.sidebar-menu{display:flex;flex-direction:column;flex:1;margin-top:12px}.sidebar-menu .item{display:block;margin-top:18px}.sidebar-menu .item>a{display:block;width:120px;height:36px;line-height:36px;font-size:14px;border-radius:18px;text-align:center}.sidebar-menu .item>a,.sidebar-menu .item a:active,.sidebar-menu .item a:visited{color:#909399;text-decoration:none}.sidebar-menu .item>a.active{background:linear-gradient(135deg,#57befc,#2c8af8);color:#fff;box-shadow:0 2px 8px #2c8af880}.sidebar-version{display:flex;flex-direction:column;align-items:center;padding-bottom:20px}.sidebar-version-label{font-size:14px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4)}.sidebar-version-text{text-align:center;font-size:14px;margin:8px 0;padding:0 10px;color:#54759a}@media (max-width: 768px){.sidebar{width:100%;height:60px;flex-direction:row;background:#f4f5f6;z-index:10}.sidebar-logo{margin:0 15px;width:36px;height:36px}.sidebar-menu{flex:1;flex-direction:row;justify-content:center;margin-top:0;overflow-x:scroll;padding:10px}.sidebar-menu::-webkit-scrollbar{display:none}.sidebar-menu .item{margin:0 3px}.sidebar-menu .item>a{width:80px;height:32px;line-height:32px}.sidebar-menu .item.no-mobile,.sidebar-version{display:none}}html{box-sizing:border-box;background:rgba(255,255,255,.8);overflow:hidden}*,*:before,*:after{margin:0;padding:0;box-sizing:inherit}body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol}body ::-webkit-scrollbar{z-index:11;background:transparent}body ::-webkit-scrollbar-thumb{border-radius:5px;background:#2c8af8}body ::-webkit-scrollbar:vertical{width:6px}body ::-webkit-scrollbar:horizontal{height:6px}.app{min-height:100vh;padding-left:150px}.app.not-clashx{background:#f4f5f6}.page-container{width:100%;height:100vh;padding-left:10px;overflow-y:scroll}.page{padding:20px 35px 30px 20px;width:100%;min-height:100vh;margin:0 auto;display:flex;flex-direction:column}.container{margin:20px 0}input{-webkit-appearance:none}@media (max-width: 768px){.app{padding-left:0;padding-top:60px}.page-container{width:100%;padding:0 10px;height:calc(100vh - 60px);-webkit-overflow-scrolling:touch}.page-container::-webkit-scrollbar{display:none}.page{padding:0 0 20px;height:100%;min-height:unset}}@font-face{font-family:clash-iconfont;src:url(//at.alicdn.com/t/font_841708_ok9czskbhel.ttf?t=1576162884356) format("truetype")}.clash-iconfont{font-family:clash-iconfont!important;font-size:14px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c8af8}.icon-update:before{content:"\e66f"}.icon-healthcheck:before{content:"\e63c"}.icon-speed:before{content:"\e61b"}.icon-close:before{content:"\e602"}.icon-drag:before{content:"\e604"}.icon-down-arrow-o:before{content:"\e605"}.icon-check:before{content:"\e606"}.icon-plus:before{content:"\e607"}.icon-triangle-up:before{content:"\e608"}.icon-triangle-down:before{content:"\e609"}.icon-up-arrow-o:before{content:"\e60a"}.icon-info:before{content:"\e60b"}.icon-info-o:before{content:"\e60c"}.icon-setting:before{content:"\e60d"}.icon-show:before{content:"\e60e"}.icon-hide:before{content:"\e60f"}.icon-sort:before{content:"\e8b3"}.icon-sort-descending:before{content:"\e8b4"}.icon-sort-ascending:before{content:"\e8b5"}.icon-close-all:before{content:"\e71b"}*,:before,:after{-webkit-box-sizing:border-box;box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}*{--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgba(59, 130, 246, .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000}:root{-moz-tab-size:4;-o-tab-size:4;tab-size:4}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}::moz-focus-inner{border-style:none;padding:0}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}body{margin:0;font-family:inherit;line-height:inherit}button,input{font-family:inherit;font-size:100%;line-height:1.15;margin:0;padding:0;line-height:inherit;color:inherit}button{text-transform:none;background-color:transparent;background-image:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button,[role=button]{cursor:pointer}html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:1.5}h1{font-size:inherit;font-weight:inherit}img{border-style:solid;display:block;vertical-align:middle;max-width:100%;height:auto}input::placeholder{opacity:1;color:#9ca3af}input::webkit-input-placeholder{opacity:1;color:#9ca3af}input::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder{opacity:1;color:#9ca3af}input::-ms-input-placeholder{opacity:1;color:#9ca3af}p,h1{margin:0}ul{list-style:none;margin:0;padding:0}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-300>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgba(209,213,219,var(--tw-divide-opacity))}.rounded{border-radius:.25rem}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.inline-block{display:inline-block}.flex{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.table{display:table}.hidden{display:none}.flex-col{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.items-start{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start}.items-center{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.justify-end{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;-webkit-flex:1 1 0%;flex:1 1 0%}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-bold{font-weight:700}.h-full{height:100%}.h-7{height:1.75rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-6{height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.leading-7{line-height:1.75rem}.leading-5{line-height:1.25rem}.list-none{list-style-type:none}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2\.5{margin-top:.625rem;margin-bottom:.625rem}.mb-2{margin-bottom:.5rem}.mt-3{margin-top:.75rem}.mt-2\.5{margin-top:.625rem}.mr-4{margin-right:1rem}.mt-4{margin-top:1rem}.mr-5{margin-right:1.25rem}.ml-5{margin-left:1.25rem}.mr-6{margin-right:1.5rem}.ml-3{margin-left:.75rem}.not-first\:mt-7\.5:not(:first-child){margin-top:1.875rem}.min-h-120{min-height:30rem}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-hidden{overflow-y:hidden}.p-0{padding:0}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-8{padding-left:2rem;padding-right:2rem}.pt-2{padding-top:.5rem}.pl-3{padding-left:.75rem}.pr-3{padding-right:.75rem}.pt-3{padding-top:.75rem}.pl-5{padding-left:1.25rem}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0px;right:0px;bottom:0px;left:0px}.right-0{right:0px}.focus\:shadow-none:focus{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;-webkit-box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-primary{--tw-shadow: 2px 5px 20px -3px rgb(44 138 248 / 18%);--tw-shadow-colored: 2px 5px 20px -3px rgb(44 138 248 / 18%);-webkit-box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.text-center{text-align:center}.text-green{--tw-text-opacity: 1;color:rgba(103,194,58,var(--tw-text-opacity))}.text-red{--tw-text-opacity: 1;color:rgba(245,108,108,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgba(156,163,175,var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity: 1;color:rgba(44,138,248,var(--tw-text-opacity))}.text-opacity-90{--tw-text-opacity: .9}.overflow-ellipsis{-o-text-overflow:ellipsis;text-overflow:ellipsis}.text-shadow-primary{text-shadow:0 0 6px rgb(44 138 248 / 40%)}.capitalize{text-transform:capitalize}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visible{visibility:visible}.\!visible{visibility:visible!important}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.w-16{width:4rem}.w-full{width:100%}.w-14{width:3.5rem}.w-40{width:10rem}.w-28{width:7rem}.w-1\/2{width:50%}.w-35{width:8.75rem}.z-9999{z-index:9999}.transform{--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-rotate: 0;--tw-rotate-x: 0;--tw-rotate-y: 0;--tw-rotate-z: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1;-webkit-transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) translateZ(var(--tw-translate-z)) rotate(var(--tw-rotate)) rotateX(var(--tw-rotate-x)) rotateY(var(--tw-rotate-y)) rotateZ(var(--tw-rotate-z)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) scaleZ(var(--tw-scale-z));-ms-transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) translateZ(var(--tw-translate-z)) rotate(var(--tw-rotate)) rotateX(var(--tw-rotate-x)) rotateY(var(--tw-rotate-y)) rotateZ(var(--tw-rotate-z)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) scaleZ(var(--tw-scale-z));transform:translate(var(--tw-translate-x)) translateY(var(--tw-translate-y)) translateZ(var(--tw-translate-z)) rotate(var(--tw-rotate)) rotateX(var(--tw-rotate-x)) rotateY(var(--tw-rotate-y)) rotate(var(--tw-rotate-z)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) scaleZ(var(--tw-scale-z))}.translate-x-full{--tw-translate-x: 100%}.translate-x-0{--tw-translate-x: 0px}.transition-transform{-webkit-transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);-o-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s}.duration-100{-webkit-transition-duration:.1s;-o-transition-duration:.1s;transition-duration:.1s}.duration{-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s}.filter{--tw-blur: var(--tw-empty, );--tw-brightness: var(--tw-empty, );--tw-contrast: var(--tw-empty, );--tw-grayscale: var(--tw-empty, );--tw-hue-rotate: var(--tw-empty, );--tw-invert: var(--tw-empty, );--tw-saturate: var(--tw-empty, );--tw-sepia: var(--tw-empty, );--tw-drop-shadow: var(--tw-empty, );-webkit-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width: 768px){.md\:flex-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row}.md\:items-center{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.md\:h-15{height:3.75rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:my-4{margin-top:1rem;margin-bottom:1rem}.md\:mt-4{margin-top:1rem}.md\:mt-0{margin-top:0}.md\:mr-0{margin-right:0}.md\:ml-8{margin-left:2rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:pt-0{padding-top:0}.md\:w-auto{width:auto}.md\:w-1\/2{width:50%}.md\:w-30{width:7.5rem}} diff --git a/luci-app-openclash/root/usr/share/openclash/dashboard/assets/logo.b453e72f.png b/luci-app-openclash/root/usr/share/openclash/dashboard/assets/logo.b453e72f.png deleted file mode 100644 index 439a7a3b..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/dashboard/assets/logo.b453e72f.png and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.e882027f.js b/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.e882027f.js deleted file mode 100644 index 564c3877..00000000 --- a/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.e882027f.js +++ /dev/null @@ -1,83 +0,0 @@ -var vi=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},Y={exports:{}},Te={};/* -object-assign -(c) Sindre Sorhus -@license MIT -*/var yf=Object.getOwnPropertySymbols,cy=Object.prototype.hasOwnProperty,fy=Object.prototype.propertyIsEnumerable;function dy(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function py(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(r.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}var wf=py()?Object.assign:function(e,t){for(var n,r=dy(e),o,i=1;i=v},o=function(){},e.unstable_forceFrameRate=function(R){0>R||125>>1,$=R[D];if($!==void 0&&0V(ce,N))ge!==void 0&&0>V(ge,ce)?(R[D]=ge,R[_e]=N,D=_e):(R[D]=ce,R[J]=N,D=J);else if(ge!==void 0&&0>V(ge,N))R[D]=ge,R[_e]=N,D=_e;else break e}}return A}return null}function V(R,A){var N=R.sortIndex-A.sortIndex;return N!==0?N:R.id-A.id}var U=[],re=[],xe=1,ke=null,ee=3,X=!1,B=!1,oe=!1;function te(R){for(var A=I(re);A!==null;){if(A.callback===null)j(re);else if(A.startTime<=R)j(re),A.sortIndex=A.expirationTime,M(U,A);else break;A=I(re)}}function se(R){if(oe=!1,te(R),!B)if(I(U)!==null)B=!0,t(ae);else{var A=I(re);A!==null&&n(se,A.startTime-R)}}function ae(R,A){B=!1,oe&&(oe=!1,r()),X=!0;var N=ee;try{for(te(A),ke=I(U);ke!==null&&(!(ke.expirationTime>A)||R&&!e.unstable_shouldYield());){var D=ke.callback;if(typeof D=="function"){ke.callback=null,ee=ke.priorityLevel;var $=D(ke.expirationTime<=A);A=e.unstable_now(),typeof $=="function"?ke.callback=$:ke===I(U)&&j(U),te(A)}else j(U);ke=I(U)}if(ke!==null)var J=!0;else{var ce=I(re);ce!==null&&n(se,ce.startTime-A),J=!1}return J}finally{ke=null,ee=N,X=!1}}var k=o;e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(R){R.callback=null},e.unstable_continueExecution=function(){B||X||(B=!0,t(ae))},e.unstable_getCurrentPriorityLevel=function(){return ee},e.unstable_getFirstCallbackNode=function(){return I(U)},e.unstable_next=function(R){switch(ee){case 1:case 2:case 3:var A=3;break;default:A=ee}var N=ee;ee=A;try{return R()}finally{ee=N}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=k,e.unstable_runWithPriority=function(R,A){switch(R){case 1:case 2:case 3:case 4:case 5:break;default:R=3}var N=ee;ee=R;try{return A()}finally{ee=N}},e.unstable_scheduleCallback=function(R,A,N){var D=e.unstable_now();switch(typeof N=="object"&&N!==null?(N=N.delay,N=typeof N=="number"&&0D?(R.sortIndex=N,M(re,R),I(U)===null&&R===I(re)&&(oe?r():oe=!0,n(se,N-D))):(R.sortIndex=$,M(U,R),B||X||(B=!0,t(ae))),R},e.unstable_wrapCallback=function(R){var A=ee;return function(){var N=ee;ee=A;try{return R.apply(this,arguments)}finally{ee=N}}}})($f);zf.exports=$f;/** @license React v17.0.2 - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var yi=Y.exports,be=wf,Ye=zf.exports;function q(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;nt}return!1}function lt(e,t,n,r,o,i,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=u}var Xe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Xe[e]=new lt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Xe[t]=new lt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Xe[e]=new lt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Xe[e]=new lt(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Xe[e]=new lt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Xe[e]=new lt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Xe[e]=new lt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Xe[e]=new lt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Xe[e]=new lt(e,5,!1,e.toLowerCase(),null,!1,!1)});var dl=/[\-:]([a-z])/g;function pl(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(dl,pl);Xe[t]=new lt(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(dl,pl);Xe[t]=new lt(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(dl,pl);Xe[t]=new lt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Xe[e]=new lt(e,1,!1,e.toLowerCase(),null,!1,!1)});Xe.xlinkHref=new lt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Xe[e]=new lt(e,1,!1,e.toLowerCase(),null,!0,!0)});function hl(e,t,n,r){var o=Xe.hasOwnProperty(t)?Xe[t]:null,i=o!==null?o.type===0:r?!1:!(!(2a||o[u]!==i[a])return` -`+o[u].replace(" at new "," at ");while(1<=u&&0<=a);break}}}finally{Cl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?eo(e):""}function Cy(e){switch(e.tag){case 5:return eo(e.type);case 16:return eo("Lazy");case 13:return eo("Suspense");case 19:return eo("SuspenseList");case 0:case 2:case 15:return e=Ei(e.type,!1),e;case 11:return e=Ei(e.type.render,!1),e;case 22:return e=Ei(e.type._render,!1),e;case 1:return e=Ei(e.type,!0),e;default:return""}}function lr(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case ln:return"Fragment";case zn:return"Portal";case Xr:return"Profiler";case vl:return"StrictMode";case Jr:return"Suspense";case Si:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case gl:return(e.displayName||"Context")+".Consumer";case ml:return(e._context.displayName||"Context")+".Provider";case wi:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case _i:return lr(e.type);case wl:return lr(e._render);case yl:t=e._payload,e=e._init;try{return lr(e(t))}catch{}}return null}function an(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Hf(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Ry(e){var t=Hf(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n!="undefined"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(u){r=""+u,i.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function xi(e){e._valueTracker||(e._valueTracker=Ry(e))}function Wf(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Hf(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Ci(e){if(e=e||(typeof document!="undefined"?document:void 0),typeof e=="undefined")return null;try{return e.activeElement||e.body}catch{return e.body}}function Rl(e,t){var n=t.checked;return be({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n!=null?n:e._wrapperState.initialChecked})}function Vf(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=an(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Gf(e,t){t=t.checked,t!=null&&hl(e,"checked",t,!1)}function Pl(e,t){Gf(e,t);var n=an(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Ol(e,t.type,n):t.hasOwnProperty("defaultValue")&&Ol(e,t.type,an(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Yf(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Ol(e,t,n){(t!=="number"||Ci(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function Py(e){var t="";return yi.Children.forEach(e,function(n){n!=null&&(t+=n)}),t}function Tl(e,t){return e=be({children:void 0},t),(t=Py(t.children))&&(e.children=t),e}function ar(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=n.length))throw Error(q(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:an(n)}}function Kf(e,t){var n=an(t.value),r=an(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function Qf(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var Il={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Xf(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Al(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?Xf(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Ri,Jf=function(e){return typeof MSApp!="undefined"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==Il.svg||"innerHTML"in e)e.innerHTML=t;else{for(Ri=Ri||document.createElement("div"),Ri.innerHTML=""+t.valueOf().toString()+"",t=Ri.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function to(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var no={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Oy=["Webkit","ms","Moz","O"];Object.keys(no).forEach(function(e){Oy.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),no[t]=no[e]})});function Zf(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||no.hasOwnProperty(e)&&no[e]?(""+t).trim():t+"px"}function ed(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=Zf(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var Ty=be({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Ml(e,t){if(t){if(Ty[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(q(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(q(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(q(61))}if(t.style!=null&&typeof t.style!="object")throw Error(q(62))}}function Nl(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ll(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var zl=null,sr=null,cr=null;function td(e){if(e=Eo(e)){if(typeof zl!="function")throw Error(q(280));var t=e.stateNode;t&&(t=Hi(t),zl(e.stateNode,e.type,t))}}function nd(e){sr?cr?cr.push(e):cr=[e]:sr=e}function rd(){if(sr){var e=sr,t=cr;if(cr=sr=null,td(e),t)for(e=0;er?0:1<n;n++)t.push(e);return t}function Mi(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,e=e.eventTimes,t=31-dn(t),e[t]=n}var dn=Math.clz32?Math.clz32:Wy,Uy=Math.log,Hy=Math.LN2;function Wy(e){return e===0?32:31-(Uy(e)/Hy|0)|0}var Vy=Ye.unstable_UserBlockingPriority,Gy=Ye.unstable_runWithPriority,Ni=!0;function Yy(e,t,n,r){$n||bl();var o=Kl,i=$n;$n=!0;try{od(o,e,t,n,r)}finally{($n=i)||Dl()}}function qy(e,t,n,r){Gy(Vy,Kl.bind(null,e,t,n,r))}function Kl(e,t,n,r){if(Ni){var o;if((o=(t&4)==0)&&0=vo),Id=String.fromCharCode(32),Ad=!1;function Md(e,t){switch(e){case"keyup":return g0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Nd(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var vr=!1;function w0(e,t){switch(e){case"compositionend":return Nd(t);case"keypress":return t.which!==32?null:(Ad=!0,Id);case"textInput":return e=t.data,e===Id&&Ad?null:e;default:return null}}function S0(e,t){if(vr)return e==="compositionend"||!ra&&Md(e,t)?(e=Cd(),Li=Xl=pn=null,vr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=jd(n)}}function Ud(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ud(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Hd(){for(var e=window,t=Ci();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ci(e.document)}return t}function ua(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var I0=Kt&&"documentMode"in document&&11>=document.documentMode,mr=null,la=null,wo=null,aa=!1;function Wd(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;aa||mr==null||mr!==Ci(r)||(r=mr,"selectionStart"in r&&ua(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),wo&&yo(wo,r)||(wo=r,r=Di(la,"onSelect"),0_r||(e.current=va[_r],va[_r]=null,_r--)}function De(e,t){_r++,va[_r]=e.current,e.current=t}var mn={},tt=vn(mn),ft=vn(!1),Dn=mn;function Er(e,t){var n=e.type.contextTypes;if(!n)return mn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function dt(e){return e=e.childContextTypes,e!=null}function Wi(){Le(ft),Le(tt)}function up(e,t,n){if(tt.current!==mn)throw Error(q(168));De(tt,t),De(ft,n)}function lp(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in e))throw Error(q(108,lr(t)||"Unknown",o));return be({},n,r)}function Vi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||mn,Dn=tt.current,De(tt,e),De(ft,ft.current),!0}function ap(e,t,n){var r=e.stateNode;if(!r)throw Error(q(169));n?(e=lp(e,t,Dn),r.__reactInternalMemoizedMergedChildContext=e,Le(ft),Le(tt),De(tt,e)):Le(ft),De(ft,n)}var ma=null,jn=null,N0=Ye.unstable_runWithPriority,ga=Ye.unstable_scheduleCallback,ya=Ye.unstable_cancelCallback,L0=Ye.unstable_shouldYield,sp=Ye.unstable_requestPaint,wa=Ye.unstable_now,z0=Ye.unstable_getCurrentPriorityLevel,Gi=Ye.unstable_ImmediatePriority,cp=Ye.unstable_UserBlockingPriority,fp=Ye.unstable_NormalPriority,dp=Ye.unstable_LowPriority,pp=Ye.unstable_IdlePriority,Sa={},$0=sp!==void 0?sp:function(){},Qt=null,Yi=null,_a=!1,hp=wa(),nt=1e4>hp?wa:function(){return wa()-hp};function xr(){switch(z0()){case Gi:return 99;case cp:return 98;case fp:return 97;case dp:return 96;case pp:return 95;default:throw Error(q(332))}}function vp(e){switch(e){case 99:return Gi;case 98:return cp;case 97:return fp;case 96:return dp;case 95:return pp;default:throw Error(q(332))}}function Bn(e,t){return e=vp(e),N0(e,t)}function xo(e,t,n){return e=vp(e),ga(e,t,n)}function Ft(){if(Yi!==null){var e=Yi;Yi=null,ya(e)}mp()}function mp(){if(!_a&&Qt!==null){_a=!0;var e=0;try{var t=Qt;Bn(99,function(){for(;ej?(V=I,I=null):V=I.sibling;var U=S(d,I,v[j],w);if(U===null){I===null&&(I=V);break}e&&I&&U.alternate===null&&t(d,I),h=i(U,h,j),M===null?_=U:M.sibling=U,M=U,I=V}if(j===v.length)return n(d,I),_;if(I===null){for(;jj?(V=I,I=null):V=I.sibling;var re=S(d,I,U.value,w);if(re===null){I===null&&(I=V);break}e&&I&&re.alternate===null&&t(d,I),h=i(re,h,j),M===null?_=re:M.sibling=re,M=re,I=V}if(U.done)return n(d,I),_;if(I===null){for(;!U.done;j++,U=v.next())U=E(d,U.value,w),U!==null&&(h=i(U,h,j),M===null?_=U:M.sibling=U,M=U);return _}for(I=r(d,I);!U.done;j++,U=v.next())U=P(I,d,j,U.value,w),U!==null&&(e&&U.alternate!==null&&I.delete(U.key===null?j:U.key),h=i(U,h,j),M===null?_=U:M.sibling=U,M=U);return e&&I.forEach(function(xe){return t(d,xe)}),_}return function(d,h,v,w){var _=typeof v=="object"&&v!==null&&v.type===ln&&v.key===null;_&&(v=v.props.children);var M=typeof v=="object"&&v!==null;if(M)switch(v.$$typeof){case Qr:e:{for(M=v.key,_=h;_!==null;){if(_.key===M){switch(_.tag){case 7:if(v.type===ln){n(d,_.sibling),h=o(_,v.props.children),h.return=d,d=h;break e}break;default:if(_.elementType===v.type){n(d,_.sibling),h=o(_,v.props),h.ref=Ro(d,_,v),h.return=d,d=h;break e}}n(d,_);break}else t(d,_);_=_.sibling}v.type===ln?(h=Nr(v.props.children,d.mode,w,v.key),h.return=d,d=h):(w=yu(v.type,v.key,v.props,null,d.mode,w),w.ref=Ro(d,h,v),w.return=d,d=w)}return u(d);case zn:e:{for(_=v.key;h!==null;){if(h.key===_)if(h.tag===4&&h.stateNode.containerInfo===v.containerInfo&&h.stateNode.implementation===v.implementation){n(d,h.sibling),h=o(h,v.children||[]),h.return=d,d=h;break e}else{n(d,h);break}else t(d,h);h=h.sibling}h=as(v,d.mode,w),h.return=d,d=h}return u(d)}if(typeof v=="string"||typeof v=="number")return v=""+v,h!==null&&h.tag===6?(n(d,h.sibling),h=o(h,v),h.return=d,d=h):(n(d,h),h=ls(v,d.mode,w),h.return=d,d=h),u(d);if(Zi(v))return O(d,h,v,w);if(Zr(v))return T(d,h,v,w);if(M&&eu(d,v),typeof v=="undefined"&&!_)switch(d.tag){case 1:case 22:case 0:case 11:case 15:throw Error(q(152,lr(d.type)||"Component"))}return n(d,h)}}var tu=Rp(!0),Pp=Rp(!1),Po={},Dt=vn(Po),Oo=vn(Po),To=vn(Po);function Un(e){if(e===Po)throw Error(q(174));return e}function Pa(e,t){switch(De(To,t),De(Oo,e),De(Dt,Po),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Al(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Al(t,e)}Le(Dt),De(Dt,t)}function Pr(){Le(Dt),Le(Oo),Le(To)}function Op(e){Un(To.current);var t=Un(Dt.current),n=Al(t,e.type);t!==n&&(De(Oo,e),De(Dt,n))}function Oa(e){Oo.current===e&&(Le(Dt),Le(Oo))}var je=vn(0);function nu(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if((t.flags&64)!=0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Xt=null,Sn=null,jt=!1;function Tp(e,t){var n=kt(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function kp(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function Ta(e){if(jt){var t=Sn;if(t){var n=t;if(!kp(e,t)){if(t=yr(n.nextSibling),!t||!kp(e,t)){e.flags=e.flags&-1025|2,jt=!1,Xt=e;return}Tp(Xt,n)}Xt=e,Sn=yr(t.firstChild)}else e.flags=e.flags&-1025|2,jt=!1,Xt=e}}function Ip(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Xt=e}function ru(e){if(e!==Xt)return!1;if(!jt)return Ip(e),jt=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!da(t,e.memoizedProps))for(t=Sn;t;)Tp(e,t),t=yr(t.nextSibling);if(Ip(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(q(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){Sn=yr(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}Sn=null}}else Sn=Xt?yr(e.stateNode.nextSibling):null;return!0}function ka(){Sn=Xt=null,jt=!1}var Or=[];function Ia(){for(var e=0;ei))throw Error(q(301));i+=1,Je=rt=null,t.updateQueue=null,ko.current=B0,e=n(r,o)}while(Ao)}if(ko.current=au,t=rt!==null&&rt.next!==null,Io=0,Je=rt=Be=null,ou=!1,t)throw Error(q(300));return e}function Hn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Je===null?Be.memoizedState=Je=e:Je=Je.next=e,Je}function Wn(){if(rt===null){var e=Be.alternate;e=e!==null?e.memoizedState:null}else e=rt.next;var t=Je===null?Be.memoizedState:Je.next;if(t!==null)Je=t,rt=e;else{if(e===null)throw Error(q(310));rt=e,e={memoizedState:rt.memoizedState,baseState:rt.baseState,baseQueue:rt.baseQueue,queue:rt.queue,next:null},Je===null?Be.memoizedState=Je=e:Je=Je.next=e}return Je}function Bt(e,t){return typeof t=="function"?t(e):t}function Mo(e){var t=Wn(),n=t.queue;if(n===null)throw Error(q(311));n.lastRenderedReducer=e;var r=rt,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var u=o.next;o.next=i.next,i.next=u}r.baseQueue=o=i,n.pending=null}if(o!==null){o=o.next,r=r.baseState;var a=u=i=null,c=o;do{var s=c.lane;if((Io&s)===s)a!==null&&(a=a.next={lane:0,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null}),r=c.eagerReducer===e?c.eagerState:e(r,c.action);else{var m={lane:s,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null};a===null?(u=a=m,i=r):a=a.next=m,Be.lanes|=s,$o|=s}c=c.next}while(c!==null&&c!==o);a===null?i=r:a.next=u,Rt(r,t.memoizedState)||(Nt=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=a,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function No(e){var t=Wn(),n=t.queue;if(n===null)throw Error(q(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var u=o=o.next;do i=e(i,u.action),u=u.next;while(u!==o);Rt(i,t.memoizedState)||(Nt=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Ap(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===r:(e=e.mutableReadLanes,(e=(Io&e)===e)&&(t._workInProgressVersionPrimary=r,Or.push(t))),e)return n(t._source);throw Or.push(t),Error(q(350))}function Mp(e,t,n,r){var o=at;if(o===null)throw Error(q(349));var i=t._getVersion,u=i(t._source),a=ko.current,c=a.useState(function(){return Ap(o,t,n)}),s=c[1],m=c[0];c=Je;var E=e.memoizedState,S=E.refs,P=S.getSnapshot,O=E.source;E=E.subscribe;var T=Be;return e.memoizedState={refs:S,source:t,subscribe:r},a.useEffect(function(){S.getSnapshot=n,S.setSnapshot=s;var d=i(t._source);if(!Rt(u,d)){d=n(t._source),Rt(m,d)||(s(d),d=En(T),o.mutableReadLanes|=d&o.pendingLanes),d=o.mutableReadLanes,o.entangledLanes|=d;for(var h=o.entanglements,v=d;0n?98:n,function(){e(!0)}),Bn(97<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),n==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[hn]=t,e[Ui]=r,Zp(e,t,!1,!1),t.stateNode=e,u=Nl(n,r),n){case"dialog":Ne("cancel",e),Ne("close",e),o=r;break;case"iframe":case"object":case"embed":Ne("load",e),o=r;break;case"video":case"audio":for(o=0;oJa&&(t.flags|=64,i=!0,zo(r,!1),t.lanes=33554432)}else{if(!i)if(e=nu(u),e!==null){if(t.flags|=64,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),zo(r,!0),r.tail===null&&r.tailMode==="hidden"&&!u.alternate&&!jt)return t=t.lastEffect=r.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*nt()-r.renderingStartTime>Ja&&n!==1073741824&&(t.flags|=64,i=!0,zo(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(n=r.last,n!==null?n.sibling=u:t.child=u,r.last=u)}return r.tail!==null?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=nt(),n.sibling=null,t=je.current,De(je,i?t&1|2:t&1),n):null;case 23:case 24:return os(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&r.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(q(156,t.tag))}function W0(e){switch(e.tag){case 1:dt(e.type)&&Wi();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(Pr(),Le(ft),Le(tt),Ia(),t=e.flags,(t&64)!=0)throw Error(q(285));return e.flags=t&-4097|64,e;case 5:return Oa(e),null;case 13:return Le(je),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return Le(je),null;case 4:return Pr(),null;case 10:return xa(e),null;case 23:case 24:return os(),null;default:return null}}function Ua(e,t){try{var n="",r=t;do n+=Cy(r),r=r.return;while(r);var o=n}catch(i){o=` -Error generating stack: `+i.message+` -`+i.stack}return{value:e,source:t,stack:o}}function Ha(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var V0=typeof WeakMap=="function"?WeakMap:Map;function nh(e,t,n){n=yn(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){du||(du=!0,Za=r),Ha(e,t)},n}function rh(e,t,n){n=yn(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var o=t.value;n.payload=function(){return Ha(e,t),r(o)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(n.callback=function(){typeof r!="function"&&(Ut===null?Ut=new Set([this]):Ut.add(this),Ha(e,t));var u=t.stack;this.componentDidCatch(t.value,{componentStack:u!==null?u:""})}),n}var G0=typeof WeakSet=="function"?WeakSet:Set;function oh(e){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(n){Rn(e,n)}else t.current=null}function Y0(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(t.flags&256&&e!==null){var n=e.memoizedProps,r=e.memoizedState;e=t.stateNode,t=e.getSnapshotBeforeUpdate(t.elementType===t.type?n:Mt(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:t.flags&256&&pa(t.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(q(163))}function q0(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{if((e.tag&3)==3){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{var o=e;r=o.next,o=o.tag,(o&4)!=0&&(o&1)!=0&&(wh(n,e),nw(n,e)),e=r}while(e!==t)}return;case 1:e=n.stateNode,n.flags&4&&(t===null?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Mt(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),t=n.updateQueue,t!==null&&Sp(n,t,e);return;case 3:if(t=n.updateQueue,t!==null){if(e=null,n.child!==null)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}Sp(n,t,e)}return;case 5:e=n.stateNode,t===null&&n.flags&4&&tp(n.type,n.memoizedProps)&&e.focus();return;case 6:return;case 4:return;case 12:return;case 13:n.memoizedState===null&&(n=n.alternate,n!==null&&(n=n.memoizedState,n!==null&&(n=n.dehydrated,n!==null&&md(n))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(q(163))}function ih(e,t){for(var n=e;;){if(n.tag===5){var r=n.stateNode;if(t)r=r.style,typeof r.setProperty=="function"?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=o!=null&&o.hasOwnProperty("display")?o.display:null,r.style.display=Zf("display",o)}}else if(n.tag===6)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((n.tag!==23&&n.tag!==24||n.memoizedState===null||n===e)&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function uh(e,t){if(jn&&typeof jn.onCommitFiberUnmount=="function")try{jn.onCommitFiberUnmount(ma,t)}catch{}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(e=t.updateQueue,e!==null&&(e=e.lastEffect,e!==null)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,o!==void 0)if((r&4)!=0)wh(t,n);else{r=t;try{o()}catch(i){Rn(r,i)}}n=n.next}while(n!==e)}break;case 1:if(oh(t),e=t.stateNode,typeof e.componentWillUnmount=="function")try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(i){Rn(t,i)}break;case 5:oh(t);break;case 4:ch(e,t)}}function lh(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function ah(e){return e.tag===5||e.tag===3||e.tag===4}function sh(e){e:{for(var t=e.return;t!==null;){if(ah(t))break e;t=t.return}throw Error(q(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:t=t.containerInfo,r=!0;break;case 4:t=t.containerInfo,r=!0;break;default:throw Error(q(161))}n.flags&16&&(to(t,""),n.flags&=-17);e:t:for(n=e;;){for(;n.sibling===null;){if(n.return===null||ah(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.flags&2||n.child===null||n.tag===4)continue t;n.child.return=n,n=n.child}if(!(n.flags&2)){n=n.stateNode;break e}}r?Wa(e,n,t):Va(e,n,t)}function Wa(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=ji));else if(r!==4&&(e=e.child,e!==null))for(Wa(e,t,n),e=e.sibling;e!==null;)Wa(e,t,n),e=e.sibling}function Va(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Va(e,t,n),e=e.sibling;e!==null;)Va(e,t,n),e=e.sibling}function ch(e,t){for(var n=t,r=!1,o,i;;){if(!r){r=n.return;e:for(;;){if(r===null)throw Error(q(160));switch(o=r.stateNode,r.tag){case 5:i=!1;break e;case 3:o=o.containerInfo,i=!0;break e;case 4:o=o.containerInfo,i=!0;break e}r=r.return}r=!0}if(n.tag===5||n.tag===6){e:for(var u=e,a=n,c=a;;)if(uh(u,c),c.child!==null&&c.tag!==4)c.child.return=c,c=c.child;else{if(c===a)break e;for(;c.sibling===null;){if(c.return===null||c.return===a)break e;c=c.return}c.sibling.return=c.return,c=c.sibling}i?(u=o,a=n.stateNode,u.nodeType===8?u.parentNode.removeChild(a):u.removeChild(a)):o.removeChild(n.stateNode)}else if(n.tag===4){if(n.child!==null){o=n.stateNode.containerInfo,i=!0,n.child.return=n,n=n.child;continue}}else if(uh(e,n),n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return,n.tag===4&&(r=!1)}n.sibling.return=n.return,n=n.sibling}}function Ga(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do(r.tag&3)==3&&(e=r.destroy,r.destroy=void 0,e!==void 0&&e()),r=r.next;while(r!==n)}return;case 1:return;case 5:if(n=t.stateNode,n!=null){r=t.memoizedProps;var o=e!==null?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,i!==null){for(n[Ui]=r,e==="input"&&r.type==="radio"&&r.name!=null&&Gf(n,r),Nl(e,o),t=Nl(e,r),o=0;oo&&(o=u),n&=~i}if(n=o,n=nt()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Q0(n/1960))-n,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}Ze!==5&&(Ze=2),c=Ua(c,a),S=u;do{switch(S.tag){case 3:i=c,S.flags|=4096,t&=-t,S.lanes|=t;var M=nh(S,i,t);wp(S,M);break e;case 1:i=c;var I=S.type,j=S.stateNode;if((S.flags&64)==0&&(typeof I.getDerivedStateFromError=="function"||j!==null&&typeof j.componentDidCatch=="function"&&(Ut===null||!Ut.has(j)))){S.flags|=4096,t&=-t,S.lanes|=t;var V=rh(S,i,t);wp(S,V);break e}}S=S.return}while(S!==null)}yh(n)}catch(U){t=U,We===n&&n!==null&&(We=n=n.return);continue}break}while(1)}function mh(){var e=cu.current;return cu.current=au,e===null?au:e}function Bo(e,t){var n=ye;ye|=16;var r=mh();at===e&&ot===t||Mr(e,t);do try{J0();break}catch(o){vh(e,o)}while(1);if(Ea(),ye=n,cu.current=r,We!==null)throw Error(q(261));return at=null,ot=0,Ze}function J0(){for(;We!==null;)gh(We)}function Z0(){for(;We!==null&&!L0();)gh(We)}function gh(e){var t=_h(e.alternate,e,Vn);e.memoizedProps=e.pendingProps,t===null?yh(e):We=t,Ya.current=null}function yh(e){var t=e;do{var n=t.alternate;if(e=t.return,(t.flags&2048)==0){if(n=H0(n,t,Vn),n!==null){We=n;return}if(n=t,n.tag!==24&&n.tag!==23||n.memoizedState===null||(Vn&1073741824)!=0||(n.mode&4)==0){for(var r=0,o=n.child;o!==null;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}e!==null&&(e.flags&2048)==0&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1u&&(a=u,u=M,M=a),a=Bd(v,M),i=Bd(v,u),a&&i&&(_.rangeCount!==1||_.anchorNode!==a.node||_.anchorOffset!==a.offset||_.focusNode!==i.node||_.focusOffset!==i.offset)&&(w=w.createRange(),w.setStart(a.node,a.offset),_.removeAllRanges(),M>u?(_.addRange(w),_.extend(i.node,i.offset)):(w.setEnd(i.node,i.offset),_.addRange(w)))))),w=[],_=v;_=_.parentNode;)_.nodeType===1&&w.push({element:_,left:_.scrollLeft,top:_.scrollTop});for(typeof v.focus=="function"&&v.focus(),v=0;vnt()-Xa?Mr(e,0):Ka|=n),Tt(e,t)}function iw(e,t){var n=e.stateNode;n!==null&&n.delete(t),t=0,t===0&&(t=e.mode,(t&2)==0?t=1:(t&4)==0?t=xr()===99?1:2:(en===0&&(en=Tr),t=pr(62914560&~en),t===0&&(t=4194304))),n=gt(),e=mu(e,t),e!==null&&(Mi(e,t,n),Tt(e,n))}var _h;_h=function(e,t,n){var r=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||ft.current)Nt=!0;else if((n&r)!=0)Nt=(e.flags&16384)!=0;else{switch(Nt=!1,t.tag){case 3:Gp(t),ka();break;case 5:Op(t);break;case 1:dt(t.type)&&Vi(t);break;case 4:Pa(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;De(qi,o._currentValue),o._currentValue=r;break;case 13:if(t.memoizedState!==null)return(n&t.child.childLanes)!=0?Yp(e,t,n):(De(je,je.current&1),t=Jt(e,t,n),t!==null?t.sibling:null);De(je,je.current&1);break;case 19:if(r=(n&t.childLanes)!=0,(e.flags&64)!=0){if(r)return Jp(e,t,n);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),De(je,je.current),r)break;return null;case 23:case 24:return t.lanes=0,ba(e,t,n)}return Jt(e,t,n)}else Nt=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=Er(t,tt.current),Rr(t,n),o=Ma(null,t,r,e,o,n),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,dt(r)){var i=!0;Vi(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Ca(t);var u=r.getDerivedStateFromProps;typeof u=="function"&&Xi(t,r,u,e),o.updater=Ji,t.stateNode=o,o._reactInternals=t,Ra(t,r,e,n),t=Da(null,t,r,!0,i,n)}else t.tag=0,ht(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=lw(o),e=Mt(o,e),i){case 0:t=Fa(null,t,o,e,n);break e;case 1:t=Vp(null,t,o,e,n);break e;case 11:t=Bp(null,t,o,e,n);break e;case 14:t=Up(null,t,o,Mt(o.type,e),r,n);break e}throw Error(q(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Mt(r,o),Fa(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Mt(r,o),Vp(e,t,r,o,n);case 3:if(Gp(t),r=t.updateQueue,e===null||r===null)throw Error(q(282));if(r=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,yp(e,t),Co(t,r,null,n),r=t.memoizedState.element,r===o)ka(),t=Jt(e,t,n);else{if(o=t.stateNode,(i=o.hydrate)&&(Sn=yr(t.stateNode.containerInfo.firstChild),Xt=t,i=jt=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{o(t,{replace:n,state:r})}),null}function mw(e){return _w(e.context)}function gw(e){Lt(!1)}function yw(e){let{basename:t="/",children:n=null,location:r,navigationType:o=Yn.Pop,navigator:i,static:u=!1}=e;Lr()&&Lt(!1);let a=Bw(t),c=Y.exports.useMemo(()=>({basename:a,navigator:i,static:u}),[a,i,u]);typeof r=="string"&&(r=On(r));let{pathname:s="/",search:m="",hash:E="",state:S=null,key:P="default"}=r,O=Y.exports.useMemo(()=>{let T=Mh(s,a);return T==null?null:{pathname:T,search:m,hash:E,state:S,key:P}},[a,s,m,E,S,P]);return O==null?null:Y.exports.createElement(ps.Provider,{value:c},Y.exports.createElement(hs.Provider,{children:n,value:{location:O,navigationType:o}}))}function mP(e){let{children:t,location:n}=e;return Ew(ms(t),n)}function ww(e){Lr()||Lt(!1);let{basename:t,navigator:n}=Y.exports.useContext(ps),{hash:r,pathname:o,search:i}=vs(e),u=o;if(t!=="/"){let a=jw(e),c=a!=null&&a.endsWith("/");u=o==="/"?t+(c?"/":""):Tn([t,o])}return n.createHref({pathname:u,search:i,hash:r})}function Lr(){return Y.exports.useContext(hs)!=null}function Yo(){return Lr()||Lt(!1),Y.exports.useContext(hs).location}function Th(){Lr()||Lt(!1);let{basename:e,navigator:t}=Y.exports.useContext(ps),{matches:n}=Y.exports.useContext(Go),{pathname:r}=Yo(),o=JSON.stringify(n.map(a=>a.pathnameBase)),i=Y.exports.useRef(!1);return Y.exports.useEffect(()=>{i.current=!0}),Y.exports.useCallback(function(a,c){if(c===void 0&&(c={}),!i.current)return;if(typeof a=="number"){t.go(a);return}let s=Ah(a,JSON.parse(o),r);e!=="/"&&(s.pathname=Tn([e,s.pathname])),(c.replace?t.replace:t.push)(s,c.state)},[e,t,o,r])}const Sw=Y.exports.createContext(null);function _w(e){let t=Y.exports.useContext(Go).outlet;return t&&Y.exports.createElement(Sw.Provider,{value:e},t)}function vs(e){let{matches:t}=Y.exports.useContext(Go),{pathname:n}=Yo(),r=JSON.stringify(t.map(o=>o.pathnameBase));return Y.exports.useMemo(()=>Ah(e,JSON.parse(r),n),[e,r,n])}function Ew(e,t){Lr()||Lt(!1);let{matches:n}=Y.exports.useContext(Go),r=n[n.length-1],o=r?r.params:{};r&&r.pathname;let i=r?r.pathnameBase:"/";r&&r.route;let u=Yo(),a;if(t){var c;let S=typeof t=="string"?On(t):t;i==="/"||((c=S.pathname)==null?void 0:c.startsWith(i))||Lt(!1),a=S}else a=u;let s=a.pathname||"/",m=i==="/"?s:s.slice(i.length)||"/",E=xw(e,{pathname:m});return Lw(E&&E.map(S=>Object.assign({},S,{params:Object.assign({},o,S.params),pathname:Tn([i,S.pathname]),pathnameBase:S.pathnameBase==="/"?i:Tn([i,S.pathnameBase])})),n)}function ms(e){let t=[];return Y.exports.Children.forEach(e,n=>{if(!Y.exports.isValidElement(n))return;if(n.type===Y.exports.Fragment){t.push.apply(t,ms(n.props.children));return}n.type!==gw&&Lt(!1);let r={caseSensitive:n.props.caseSensitive,element:n.props.element,index:n.props.index,path:n.props.path};n.props.children&&(r.children=ms(n.props.children)),t.push(r)}),t}function xw(e,t,n){n===void 0&&(n="/");let r=typeof t=="string"?On(t):t,o=Mh(r.pathname||"/",n);if(o==null)return null;let i=kh(e);Cw(i);let u=null;for(let a=0;u==null&&a{let u={relativePath:o.path||"",caseSensitive:o.caseSensitive===!0,childrenIndex:i,route:o};u.relativePath.startsWith("/")&&(u.relativePath.startsWith(r)||Lt(!1),u.relativePath=u.relativePath.slice(r.length));let a=Tn([r,u.relativePath]),c=n.concat(u);o.children&&o.children.length>0&&(o.index===!0&&Lt(!1),kh(o.children,t,c,a)),!(o.path==null&&!o.index)&&t.push({path:a,score:Aw(a,o.index),routesMeta:c})}),t}function Cw(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:Mw(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const Rw=/^:\w+$/,Pw=3,Ow=2,Tw=1,kw=10,Iw=-2,Ih=e=>e==="*";function Aw(e,t){let n=e.split("/"),r=n.length;return n.some(Ih)&&(r+=Iw),t&&(r+=Ow),n.filter(o=>!Ih(o)).reduce((o,i)=>o+(Rw.test(i)?Pw:i===""?Tw:kw),r)}function Mw(e,t){return e.length===t.length&&e.slice(0,-1).every((r,o)=>r===t[o])?e[e.length-1]-t[t.length-1]:0}function Nw(e,t){let{routesMeta:n}=e,r={},o="/",i=[];for(let u=0;uY.exports.createElement(Go.Provider,{children:r.route.element!==void 0?r.route.element:Y.exports.createElement(mw,null),value:{outlet:n,matches:t.concat(e.slice(0,o+1))}}),null)}function zw(e,t){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=$w(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let i=o[0],u=i.replace(/(.)\/+$/,"$1"),a=o.slice(1);return{params:r.reduce((s,m,E)=>{if(m==="*"){let S=a[E]||"";u=i.slice(0,i.length-S.length).replace(/(.)\/+$/,"$1")}return s[m]=bw(a[E]||""),s},{}),pathname:i,pathnameBase:u,pattern:e}}function $w(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0);let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/:(\w+)/g,(u,a)=>(r.push(a),"([^\\/]+)"));return e.endsWith("*")?(r.push("*"),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):o+=n?"\\/*$":"(?:\\b|\\/|$)",[new RegExp(o,t?void 0:"i"),r]}function bw(e,t){try{return decodeURIComponent(e)}catch{return e}}function Fw(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:o=""}=typeof e=="string"?On(e):e;return{pathname:n?n.startsWith("/")?n:Dw(n,t):t,search:Uw(r),hash:Hw(o)}}function Dw(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function Ah(e,t,n){let r=typeof e=="string"?On(e):e,o=e===""||r.pathname===""?"/":r.pathname,i;if(o==null)i=n;else{let a=t.length-1;if(o.startsWith("..")){let c=o.split("/");for(;c[0]==="..";)c.shift(),a-=1;r.pathname=c.join("/")}i=a>=0?t[a]:"/"}let u=Fw(r,i);return o&&o!=="/"&&o.endsWith("/")&&!u.pathname.endsWith("/")&&(u.pathname+="/"),u}function jw(e){return e===""||e.pathname===""?"/":typeof e=="string"?On(e).pathname:e.pathname}function Mh(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=e.charAt(t.length);return n&&n!=="/"?null:e.slice(t.length)||"/"}const Tn=e=>e.join("/").replace(/\/\/+/g,"/"),Bw=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Uw=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Hw=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;/** - * React Router DOM v6.2.1 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Eu(){return Eu=Object.assign||function(e){for(var t=1;t=0)&&(n[o]=e[o]);return n}const Ww=["onClick","reloadDocument","replace","state","target","to"],Vw=["aria-current","caseSensitive","className","end","style","to","children"];function gP(e){let{basename:t,children:n,window:r}=e,o=Y.exports.useRef();o.current==null&&(o.current=vw({window:r}));let i=o.current,[u,a]=Y.exports.useState({action:i.action,location:i.location});return Y.exports.useLayoutEffect(()=>i.listen(a),[i]),Y.exports.createElement(yw,{basename:t,children:n,location:u.location,navigationType:u.action,navigator:i})}function Gw(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}const Yw=Y.exports.forwardRef(function(t,n){let{onClick:r,reloadDocument:o,replace:i=!1,state:u,target:a,to:c}=t,s=Nh(t,Ww),m=ww(c),E=qw(c,{replace:i,state:u,target:a});function S(P){r&&r(P),!P.defaultPrevented&&!o&&E(P)}return Y.exports.createElement("a",Eu({},s,{href:m,onClick:S,ref:n,target:a}))}),yP=Y.exports.forwardRef(function(t,n){let{"aria-current":r="page",caseSensitive:o=!1,className:i="",end:u=!1,style:a,to:c,children:s}=t,m=Nh(t,Vw),E=Yo(),S=vs(c),P=E.pathname,O=S.pathname;o||(P=P.toLowerCase(),O=O.toLowerCase());let T=P===O||!u&&P.startsWith(O)&&P.charAt(O.length)==="/",d=T?r:void 0,h;typeof i=="function"?h=i({isActive:T}):h=[i,T?"active":null].filter(Boolean).join(" ");let v=typeof a=="function"?a({isActive:T}):a;return Y.exports.createElement(Yw,Eu({},m,{"aria-current":d,className:h,ref:n,style:v,to:c}),typeof s=="function"?s({isActive:T}):s)});function qw(e,t){let{target:n,replace:r,state:o}=t===void 0?{}:t,i=Th(),u=Yo(),a=vs(e);return Y.exports.useCallback(c=>{if(c.button===0&&(!n||n==="_self")&&!Gw(c)){c.preventDefault();let s=!!r||Vo(u)===Vo(a);i(e,{replace:s,state:o})}},[u,i,a,r,o,n,e])}var Lh={exports:{}};/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/(function(e){(function(){var t={}.hasOwnProperty;function n(){for(var r=[],o=0;o-1&&e%1==0&&e-1&&e%1==0&&e<=V1}function Kh(e){return e!=null&&ws(e.length)&&!Wh(e)}var G1=Object.prototype;function Y1(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||G1;return e===n}function q1(e,t){for(var n=-1,r=Array(e);++n-1}function l_(e,t){var n=this.__data__,r=Cu(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function tn(e){var t=-1,n=e==null?0:e.length;for(this.clear();++to?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r=r?e:R_(e,t,n)}var O_="\\ud800-\\udfff",T_="\\u0300-\\u036f",k_="\\ufe20-\\ufe2f",I_="\\u20d0-\\u20ff",A_=T_+k_+I_,M_="\\ufe0e\\ufe0f",N_="\\u200d",L_=RegExp("["+N_+O_+A_+M_+"]");function av(e){return L_.test(e)}function z_(e){return e.split("")}var sv="\\ud800-\\udfff",$_="\\u0300-\\u036f",b_="\\ufe20-\\ufe2f",F_="\\u20d0-\\u20ff",D_=$_+b_+F_,j_="\\ufe0e\\ufe0f",B_="["+sv+"]",Rs="["+D_+"]",Ps="\\ud83c[\\udffb-\\udfff]",U_="(?:"+Rs+"|"+Ps+")",cv="[^"+sv+"]",fv="(?:\\ud83c[\\udde6-\\uddff]){2}",dv="[\\ud800-\\udbff][\\udc00-\\udfff]",H_="\\u200d",pv=U_+"?",hv="["+j_+"]?",W_="(?:"+H_+"(?:"+[cv,fv,dv].join("|")+")"+hv+pv+")*",V_=hv+pv+W_,G_="(?:"+[cv+Rs+"?",Rs,fv,dv,B_].join("|")+")",Y_=RegExp(Ps+"(?="+Ps+")|"+G_+V_,"g");function q_(e){return e.match(Y_)||[]}function K_(e){return av(e)?q_(e):z_(e)}function Q_(e){return function(t){t=Zo(t);var n=av(t)?K_(t):void 0,r=n?n[0]:t.charAt(0),o=n?P_(n,1).join(""):t.slice(1);return r[e]()+o}}var X_=Q_("toUpperCase"),J_=X_;function SP(e){return J_(Zo(e).toLowerCase())}var Z_=Ht.isFinite,eE=Math.min;function tE(e){var t=Math[e];return function(n,r){if(n=Uh(n),r=r==null?0:eE(_1(r),292),r&&Z_(n)){var o=(Zo(n)+"e").split("e"),i=t(o[0]+"e"+(+o[1]+r));return o=(Zo(i)+"e").split("e"),+(o[0]+"e"+(+o[1]-r))}return t(n)}}function nE(){this.__data__=new tn,this.size=0}function rE(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function oE(e){return this.__data__.get(e)}function iE(e){return this.__data__.has(e)}var uE=200;function lE(e,t){var n=this.__data__;if(n instanceof tn){var r=n.__data__;if(!Jo||r.lengtha))return!1;var s=i.get(e),m=i.get(t);if(s&&m)return s==t&&m==e;var E=-1,S=!0,P=n&AE?new Ou:void 0;for(i.set(e,t),i.set(t,e);++E1?t-1:0),r=1;r3?t.i-4:t.i:Array.isArray(e)?1:Ns(e)?2:Ls(e)?3:0}function Ms(e,t){return Fr(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Ix(e,t){return Fr(e)===2?e.get(t):e[t]}function Av(e,t,n){var r=Fr(e);r===2?e.set(t,n):r===3?(e.delete(t),e.add(n)):e[t]=n}function Ax(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function Ns(e){return zx&&e instanceof Map}function Ls(e){return $x&&e instanceof Set}function Zn(e){return e.o||e.t}function zs(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=Fx(e);delete t[yt];for(var n=Vs(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=Mx),Object.freeze(e),t&&ei(e,function(n,r){return ti(r,!0)},!0)),e}function Mx(){zt(2)}function $s(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function Vt(e){var t=Dx[e];return t||zt(18,e),t}function Mv(){return ni}function bs(e,t){t&&(Vt("Patches"),e.u=[],e.s=[],e.v=t)}function ku(e){Fs(e),e.p.forEach(Nx),e.p=null}function Fs(e){e===ni&&(ni=e.l)}function Nv(e){return ni={p:[],l:ni,h:e,m:!0,_:0}}function Nx(e){var t=e[yt];t.i===0||t.i===1?t.j():t.O=!0}function Ds(e,t){t._=t.p.length;var n=t.p[0],r=e!==void 0&&e!==n;return t.h.g||Vt("ES5").S(t,e,r),r?(n[yt].P&&(ku(t),zt(4)),Jn(e)&&(e=Iu(t,e),t.l||Au(t,e)),t.u&&Vt("Patches").M(n[yt].t,e,t.u,t.s)):e=Iu(t,n,[]),ku(t),t.u&&t.v(t.u,t.s),e!==Dv?e:void 0}function Iu(e,t,n){if($s(t))return t;var r=t[yt];if(!r)return ei(t,function(i,u){return Lv(e,r,t,i,u,n)},!0),t;if(r.A!==e)return t;if(!r.P)return Au(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var o=r.i===4||r.i===5?r.o=zs(r.k):r.o;ei(r.i===3?new Set(o):o,function(i,u){return Lv(e,r,o,i,u,n)}),Au(e,o,!1),n&&e.u&&Vt("Patches").R(r,n,e.u,e.s)}return r.o}function Lv(e,t,n,r,o,i){if(br(o)){var u=Iu(e,o,i&&t&&t.i!==3&&!Ms(t.D,r)?i.concat(r):void 0);if(Av(n,r,u),!br(u))return;e.m=!1}if(Jn(o)&&!$s(o)){if(!e.h.F&&e._<1)return;Iu(e,o),t&&t.A.l||Au(e,o)}}function Au(e,t,n){n===void 0&&(n=!1),e.h.F&&e.m&&ti(t,n)}function js(e,t){var n=e[yt];return(n?Zn(n):e)[t]}function zv(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function Bs(e){e.P||(e.P=!0,e.l&&Bs(e.l))}function Us(e){e.o||(e.o=zs(e.t))}function Hs(e,t,n){var r=Ns(t)?Vt("MapSet").N(t,n):Ls(t)?Vt("MapSet").T(t,n):e.g?function(o,i){var u=Array.isArray(o),a={i:u?1:0,A:i?i.A:Mv(),P:!1,I:!1,D:{},l:i,t:o,k:null,o:null,j:null,C:!1},c=a,s=Gs;u&&(c=[a],s=ri);var m=Proxy.revocable(c,s),E=m.revoke,S=m.proxy;return a.k=S,a.j=E,S}(t,n):Vt("ES5").J(t,n);return(n?n.A:Mv()).p.push(r),r}function Lx(e){return br(e)||zt(22,e),function t(n){if(!Jn(n))return n;var r,o=n[yt],i=Fr(n);if(o){if(!o.P&&(o.i<4||!Vt("ES5").K(o)))return o.t;o.I=!0,r=$v(n,i),o.I=!1}else r=$v(n,i);return ei(r,function(u,a){o&&Ix(o.t,u)===a||Av(r,u,t(a))}),i===3?new Set(r):r}(e)}function $v(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return zs(e)}var bv,ni,Ws=typeof Symbol!="undefined"&&typeof Symbol("x")=="symbol",zx=typeof Map!="undefined",$x=typeof Set!="undefined",Fv=typeof Proxy!="undefined"&&Proxy.revocable!==void 0&&typeof Reflect!="undefined",Dv=Ws?Symbol.for("immer-nothing"):((bv={})["immer-nothing"]=!0,bv),jv=Ws?Symbol.for("immer-draftable"):"__$immer_draftable",yt=Ws?Symbol.for("immer-state"):"__$immer_state",bx=""+Object.prototype.constructor,Vs=typeof Reflect!="undefined"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,Fx=Object.getOwnPropertyDescriptors||function(e){var t={};return Vs(e).forEach(function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)}),t},Dx={},Gs={get:function(e,t){if(t===yt)return e;var n=Zn(e);if(!Ms(n,t))return function(o,i,u){var a,c=zv(i,u);return c?"value"in c?c.value:(a=c.get)===null||a===void 0?void 0:a.call(o.k):void 0}(e,n,t);var r=n[t];return e.I||!Jn(r)?r:r===js(e.t,t)?(Us(e),e.o[t]=Hs(e.A.h,r,e)):r},has:function(e,t){return t in Zn(e)},ownKeys:function(e){return Reflect.ownKeys(Zn(e))},set:function(e,t,n){var r=zv(Zn(e),t);if(r==null?void 0:r.set)return r.set.call(e.k,n),!0;if(!e.P){var o=js(Zn(e),t),i=o==null?void 0:o[yt];if(i&&i.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(Ax(n,o)&&(n!==void 0||Ms(e.t,t)))return!0;Us(e),Bs(e)}return e.o[t]===n&&typeof n!="number"&&(n!==void 0||t in e.o)||(e.o[t]=n,e.D[t]=!0,!0)},deleteProperty:function(e,t){return js(e.t,t)!==void 0||t in e.t?(e.D[t]=!1,Us(e),Bs(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=Zn(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.i!==1||t!=="length",enumerable:r.enumerable,value:n[t]}},defineProperty:function(){zt(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){zt(12)}},ri={};ei(Gs,function(e,t){ri[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),ri.deleteProperty=function(e,t){return ri.set.call(this,e,t,void 0)},ri.set=function(e,t,n){return Gs.set.call(this,e[0],t,n,e[0])};var jx=function(){function e(n){var r=this;this.g=Fv,this.F=!0,this.produce=function(o,i,u){if(typeof o=="function"&&typeof i!="function"){var a=i;i=o;var c=r;return function(T){var d=this;T===void 0&&(T=a);for(var h=arguments.length,v=Array(h>1?h-1:0),w=1;w1?m-1:0),S=1;S=0;o--){var i=r[o];if(i.path.length===0&&i.op==="replace"){n=i.value;break}}o>-1&&(r=r.slice(o+1));var u=Vt("Patches").$;return br(n)?u(n,r):this.produce(n,function(a){return u(a,r)})},e}(),wt=new jx,Bv=wt.produce;wt.produceWithPatches.bind(wt);wt.setAutoFreeze.bind(wt);wt.setUseProxies.bind(wt);wt.applyPatches.bind(wt);wt.createDraft.bind(wt);wt.finishDraft.bind(wt);const Dr=Symbol(),Uv=e=>!!e[Dr],Bx=e=>!e[Dr].c,Mu=e=>{var t,n;(n=(t=e[Dr]).c)==null||n.call(t)},Nu=(e,t)=>{const n=e[Dr].o,r=t[Dr].o;return n===r||e===r||Uv(n)&&Nu(n,t)},Hv=e=>{const t={o:e,c:null},n=new Promise(r=>{t.c=()=>{t.c=null,r()},e.then(t.c,t.c)});return n[Dr]=t,n};var Ux=Object.defineProperty,Hx=Object.defineProperties,Wx=Object.getOwnPropertyDescriptors,Wv=Object.getOwnPropertySymbols,Vx=Object.prototype.hasOwnProperty,Gx=Object.prototype.propertyIsEnumerable,Vv=(e,t,n)=>t in e?Ux(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Yx=(e,t)=>{for(var n in t||(t={}))Vx.call(t,n)&&Vv(e,n,t[n]);if(Wv)for(var n of Wv(t))Gx.call(t,n)&&Vv(e,n,t[n]);return e},qx=(e,t)=>Hx(e,Wx(t));const Ys=e=>"init"in e,Gv="r",Yv="w",qv="c",Kv="s",Kx="h";const Qx=e=>{const t=new WeakMap,n=new WeakMap,r=new Map;let o,i;if(e)for(const[k,R]of e){const A={v:R,r:0,d:new Map};t.set(k,A)}const u=new WeakMap,a=(k,R,A)=>{let N=u.get(R);N||(N=new Map,u.set(R,N)),A.then(()=>{N.get(k)===A&&(N.delete(k),N.size||u.delete(R))}),N.set(k,A)},c=k=>{const R=new Set,A=u.get(k);return A&&(u.delete(k),A.forEach((N,D)=>{Mu(N),R.add(D)})),R},s=new WeakMap,m=k=>{let R=s.get(k);return R||(R=new Map,s.set(k,R)),R},E=(k,R)=>{if(k){const A=m(k);let N=A.get(R);return N||(N=E(k.p,R),N&&("p"in N&&N.p.then(()=>A.delete(R)),A.set(R,N))),N}return t.get(R)},S=(k,R,A)=>{if(k)m(k).set(R,A);else{const N=t.get(R);t.set(R,A),r.has(R)||r.set(R,N)}},P=(k,R=new Map,A)=>{if(!A)return R;const N=new Map;let D=!1;return A.forEach($=>{var J;const ce=((J=E(k,$))==null?void 0:J.r)||0;N.set($,ce),R.get($)!==ce&&(D=!0)}),R.size===N.size&&!D?R:N},O=(k,R,A,N,D)=>{const $=E(k,R);if($){if(D&&(!("p"in $)||!Nu($.p,D)))return $;"p"in $&&Mu($.p)}const J={v:A,r:($==null?void 0:$.r)||0,d:P(k,$==null?void 0:$.d,N)};return!$||!("v"in $)||!Object.is($.v,A)?(++J.r,J.d.has(R)&&(J.d=new Map(J.d).set(R,J.r))):J.d!==$.d&&(J.d.size!==$.d.size||!Array.from(J.d.keys()).every(ce=>$.d.has(ce)))&&Promise.resolve().then(()=>{B(k)}),S(k,R,J),J},T=(k,R,A,N,D)=>{const $=E(k,R);if($){if(D&&(!("p"in $)||!Nu($.p,D)))return $;"p"in $&&Mu($.p)}const J={e:A,r:($==null?void 0:$.r)||0,d:P(k,$==null?void 0:$.d,N)};return S(k,R,J),J},d=(k,R,A,N)=>{const D=E(k,R);if(D&&"p"in D){if(Nu(D.p,A))return D;Mu(D.p)}a(k,R,A);const $={p:A,r:(D==null?void 0:D.r)||0,d:P(k,D==null?void 0:D.d,N)};return S(k,R,$),$},h=(k,R,A,N)=>{if(A instanceof Promise){const D=Hv(A.then($=>{O(k,R,$,N,D),B(k)}).catch($=>{if($ instanceof Promise)return Uv($)?$.then(()=>{w(k,R,!0)}):$;T(k,R,$,N,D),B(k)}));return d(k,R,D,N)}return O(k,R,A,N)},v=(k,R)=>{const A=E(k,R);if(A){const N=qx(Yx({},A),{i:A.r});S(k,R,N)}},w=(k,R,A)=>{if(!A){const D=E(k,R);if(D&&(D.r!==D.i&&"p"in D&&!Bx(D.p)||(D.d.forEach(($,J)=>{if(J!==R)if(!n.has(J))w(k,J);else{const ce=E(k,J);ce&&ce.r===ce.i&&w(k,J)}}),Array.from(D.d).every(([$,J])=>{const ce=E(k,$);return ce&&"v"in ce&&ce.r===J}))))return D}const N=new Set;try{const D=R.read($=>{N.add($);const J=$===R?E(k,$):w(k,$);if(J){if("e"in J)throw J.e;if("p"in J)throw J.p;return J.v}if(Ys($))return $.init;throw new Error("no atom init")});return h(k,R,D,N)}catch(D){if(D instanceof Promise){const $=Hv(D);return d(k,R,$,N)}return T(k,R,D,N)}},_=(k,R)=>w(R,k),M=k=>{let R=n.get(k);return R||(R=ke(k)),R},I=(k,R)=>!R.l.size&&(!R.t.size||R.t.size===1&&R.t.has(k)),j=k=>{const R=n.get(k);R&&I(k,R)&&ee(k)},V=(k,R)=>{const A=n.get(R);A==null||A.t.forEach(N=>{N!==R&&(v(k,N),V(k,N))})},U=(k,R,A)=>{let N=!0;const D=(ce,_e)=>{typeof _e=="boolean"&&(console.warn("[DEPRECATED] Please use { unstable_promise: true }"),_e={unstable_promise:_e});const ge=w(k,ce);if("e"in ge)throw ge.e;if("p"in ge){if(_e==null?void 0:_e.unstable_promise)return ge.p.then(()=>D(ce,_e));throw ge.p}if("v"in ge)return ge.v;throw new Error("no value found")},$=(ce,_e)=>{let ge;if(ce===R){if(!Ys(ce))throw new Error("atom not writable");c(ce).forEach(ct=>{ct!==k&&h(ct,ce,_e)}),h(k,ce,_e),V(k,ce)}else ge=U(k,ce,_e);return N||B(k),ge},J=R.write(D,$,A);return N=!1,k=void 0,J},re=(k,R,A)=>{const N=U(A,k,R);return B(A),N},xe=k=>!!k.write,ke=(k,R)=>{const A={t:new Set(R&&[R]),l:new Set};if(n.set(k,A),w(void 0,k).d.forEach((D,$)=>{const J=n.get($);J?J.t.add(k):$!==k&&ke($,k)}),xe(k)&&k.onMount){const D=J=>re(k,J),$=k.onMount(D);$&&(A.u=$)}return A},ee=k=>{var R;const A=(R=n.get(k))==null?void 0:R.u;A&&A(),n.delete(k);const N=E(void 0,k);N&&N.d.forEach((D,$)=>{if($!==k){const J=n.get($);J&&(J.t.delete(k),I($,J)&&ee($))}})},X=(k,R,A)=>{const N=new Set(R.d.keys());A==null||A.forEach((D,$)=>{if(N.has($)){N.delete($);return}const J=n.get($);J&&(J.t.delete(k),I($,J)&&ee($))}),N.forEach(D=>{const $=n.get(D);$?$.t.add(k):n.has(k)&&ke(D,k)})},B=k=>{if(k){m(k).forEach((A,N)=>{if(A!==t.get(N)){const D=n.get(N);D==null||D.l.forEach($=>$(k))}});return}for(;r.size;){const R=Array.from(r);r.clear(),R.forEach(([A,N])=>{const D=E(void 0,A);D&&D.d!==(N==null?void 0:N.d)&&X(A,D,N==null?void 0:N.d);const $=n.get(A);$==null||$.l.forEach(J=>J())})}},oe=k=>{m(k).forEach((A,N)=>{const D=t.get(N);(A.r>((D==null?void 0:D.r)||0)||"v"in A&&A.r===(D==null?void 0:D.r)&&A.d!==(D==null?void 0:D.d))&&(t.set(N,A),A.d!==(D==null?void 0:D.d)&&X(N,A,D==null?void 0:D.d))})},te=(k,R)=>{R&&oe(R),B(void 0)},se=(k,R)=>{const N=M(k).l;return N.add(R),()=>{N.delete(R),j(k)}},ae=(k,R)=>{for(const[A,N]of k)Ys(A)&&(h(R,A,N),V(R,A));B(R)};return{[Gv]:_,[Yv]:re,[qv]:te,[Kv]:se,[Kx]:ae}},Xx=e=>({s:Qx(e)}),qs=new Map,Qv=e=>(qs.has(e)||qs.set(e,Y.exports.createContext(Xx())),qs.get(e));let Jx=0;function Ks(e,t){const n=`atom${++Jx}`,r={toString:()=>n};return typeof e=="function"?r.read=e:(r.init=e,r.read=o=>o(r),r.write=(o,i,u)=>i(r,typeof u=="function"?u(o(r)):u)),t&&(r.write=t),r}const Zx=e=>!!e.write;function eC(e,t){"scope"in e&&(console.warn("atom.scope is deprecated. Please do useAtom(atom, scope) instead."),t=e.scope);const n=Qv(t),{s:r,w:o}=Y.exports.useContext(n),i=Y.exports.useCallback(E=>{const S=r[Gv](e,E);if("e"in S)throw S.e;if("p"in S)throw S.p;if("v"in S)return S.v;throw new Error("no atom value")},[r,e]),[[u,a,c],s]=Y.exports.useReducer(Y.exports.useCallback((E,S)=>{const P=i(S);return Object.is(E[1],P)&&E[2]===e?E:[S,P,e]},[i,e]),void 0,()=>{const E=void 0,S=i(E);return[E,S,e]});c!==e&&s(void 0),Y.exports.useEffect(()=>{const E=r[Kv](e,s);return s(void 0),E},[r,e]),Y.exports.useEffect(()=>{r[qv](e,u)});const m=Y.exports.useCallback(E=>{if(Zx(e)){const S=P=>r[Yv](e,E,P);return o?o(S):S()}else throw new Error("not writable atom")},[r,o,e]);return Y.exports.useDebugValue(a),[a,m]}function xP(e){const t=Ks(e,(n,r,o)=>r(t,Bv(n(t),typeof o=="function"?o:()=>o)));return t}const tC=Symbol(),nC="w";function CP(e,t){const n=Qv(t),{s:r,w:o}=Y.exports.useContext(n);return Y.exports.useCallback(u=>{const a=c=>r[nC](e,u,c);return o?o(a):a()},[r,o,e])}function RP(e,t){return eC(e,t)[0]}function rC(e){try{e().removeItem||console.warn("Missing removeItem. In the next version, it will be required.")}catch{}return{getItem:t=>{const n=e().getItem(t);return n instanceof Promise?n.then(r=>JSON.parse(r||"")):JSON.parse(n||"")},setItem:(t,n)=>e().setItem(t,JSON.stringify(n)),removeItem:t=>{var n,r;return(r=(n=e()).removeItem)==null?void 0:r.call(n,t)}}}const oC=rC(()=>localStorage);function PP(e,t,n=oC){n.removeItem||console.warn("Missing removeItem. In the next version, it will be required.");const r=()=>{try{const u=n.getItem(e);return u instanceof Promise?u.catch(()=>t):u}catch{return t}},o=Ks(n.delayInit?t:r());return o.onMount=u=>{let a;if(n.subscribe&&(a=n.subscribe(e,u)),n.delayInit){const c=r();c instanceof Promise?c.then(u):u(c)}return a},Ks(u=>u(o),(u,a,c)=>{var s;if(c===tC)return a(o,t),(s=n.removeItem)==null?void 0:s.call(n,e);const m=typeof c=="function"?c(u(o)):c;return a(o,m),n.setItem(e,m)})}/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */function Qs(e,t,n,r){function o(i){return i instanceof n?i:new n(function(u){u(i)})}return new(n||(n=Promise))(function(i,u){function a(m){try{s(r.next(m))}catch(E){u(E)}}function c(m){try{s(r.throw(m))}catch(E){u(E)}}function s(m){m.done?i(m.value):o(m.value).then(a,c)}s((r=r.apply(e,t||[])).next())})}function Xs(e,t){var n={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},r,o,i,u;return u={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function a(s){return function(m){return c([s,m])}}function c(s){if(r)throw new TypeError("Generator is already executing.");for(;n;)try{if(r=1,o&&(i=s[0]&2?o.return:s[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;switch(o=0,i&&(s=[s[0]&2,i.value]),s[0]){case 0:case 1:i=s;break;case 4:return n.label++,{value:s[1],done:!1};case 5:n.label++,o=s[1],s=[0];continue;case 7:s=n.ops.pop(),n.trys.pop();continue;default:if(i=n.trys,!(i=i.length>0&&i[i.length-1])&&(s[0]===6||s[0]===2)){n=0;continue}if(s[0]===3&&(!i||s[1]>i[0]&&s[1]0)&&!(o=r.next()).done;)i.push(o.value)}catch(a){u={error:a}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(u)throw u.error}}return i}function uC(){for(var e=[],t=0;t0&&i[i.length-1])&&(s[0]===6||s[0]===2)){n=0;continue}if(s[0]===3&&(!i||s[1]>i[0]&&s[1]i||setTimeout(r,a,o)},fm=cm(new Map),dm=fm[0],EC=fm[1],pm=nr({onLoadingSlow:Gt,onSuccess:Gt,onError:Gt,onErrorRetry:_C,onDiscarded:Gt,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:rm?1e4:5e3,focusThrottleInterval:5*1e3,dedupingInterval:2*1e3,loadingTimeout:rm?5e3:3e3,compare:function(e,t){return ui(e)==ui(t)},isPaused:function(){return!1},cache:dm,mutate:EC,fallback:{}},gC),hm=function(e,t){var n=nr(e,t);if(t){var r=e.use,o=e.fallback,i=t.use,u=t.fallback;r&&i&&(n.use=r.concat(i)),o&&u&&(n.fallback=nr(o,u))}return n},lc=Y.exports.createContext({}),xC=function(e){var t=e.value,n=hm(Y.exports.useContext(lc),t),r=t&&t.provider,o=Y.exports.useState(function(){return r?cm(r(n.cache||dm),t):st})[0];return o&&(n.cache=o[0],n.mutate=o[1]),li(function(){return o?o[2]:st},[]),Y.exports.createElement(lc.Provider,nr(e,{value:n}))},CC=function(e,t){var n=Y.exports.useState({})[1],r=Y.exports.useRef(e),o=Y.exports.useRef({data:!1,error:!1,isValidating:!1}),i=Y.exports.useCallback(function(u){var a=!1,c=r.current;for(var s in u){var m=s;c[m]!==u[m]&&(c[m]=u[m],o.current[m]&&(a=!0))}a&&!t.current&&n({})},[]);return li(function(){r.current=e}),[r,o.current,i]},RC=function(e){return ii(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(e[1]===null?e[2]:e[1])||{}]},PC=function(){return nr(pm,Y.exports.useContext(lc))},OC=function(e){return function(){for(var t=[],n=0;n0;)s=m[E](s);return s(i,u||c.fetcher,c)}},vm=function(e,t,n){var r=t[e]||(t[e]=[]);return r.push(n),function(){var o=r.indexOf(n);o>=0&&(r[o]=r[r.length-1],r.pop())}},ac={dedupe:!0},TC=function(e,t,n){var r=n.cache,o=n.compare,i=n.fallbackData,u=n.suspense,a=n.revalidateOnMount,c=n.refreshInterval,s=n.refreshWhenHidden,m=n.refreshWhenOffline,E=rr.get(r),S=E[0],P=E[1],O=E[2],T=E[3],d=E[4],h=om(e),v=h[0],w=h[1],_=h[2],M=h[3],I=Y.exports.useRef(!1),j=Y.exports.useRef(!1),V=Y.exports.useRef(v),U=Y.exports.useRef(t),re=Y.exports.useRef(n),xe=function(){return re.current},ke=function(){return xe().isVisible()&&xe().isOnline()},ee=r.get(v),X=St(i)?n.fallback[v]:i,B=St(ee)?X:ee,oe=r.get(_),te=function(){return St(a)?xe().isPaused()?!1:u?!St(B):St(B)||n.revalidateIfStale:a},se=function(){return!v||!t?!1:r.get(M)?!0:!I.current&&te()},ae=se(),k=CC({data:B,error:oe,isValidating:ae},j),R=k[0],A=k[1],N=k[2],D=Y.exports.useCallback(function(J){return em(void 0,void 0,void 0,function(){var ce,_e,ge,Ke,ct,Qe,Ve,$t,Et,Wr,An,Vr;return tm(this,function(Mn){switch(Mn.label){case 0:if(ce=U.current,!v||!ce||j.current||xe().isPaused())return[2,!1];Ke=!0,ct=J||{},Qe=!d[v]||!ct.dedupe,Ve=function(){return!j.current&&v===V.current&&I.current},$t=function(){var si=d[v];si&&si[1]===ge&&delete d[v]},Et={isValidating:!1},Wr=function(){r.set(M,!1),Ve()&&N(Et)},r.set(M,!0),N({isValidating:!0}),Mn.label=1;case 1:return Mn.trys.push([1,3,,4]),Qe&&(Fu(r,v,R.current.data,R.current.error,!0),n.loadingTimeout&&!r.get(v)&&setTimeout(function(){Ke&&Ve()&&xe().onLoadingSlow(v,n)},n.loadingTimeout),d[v]=[ce.apply(void 0,w),uc()]),Vr=d[v],_e=Vr[0],ge=Vr[1],[4,_e];case 2:return _e=Mn.sent(),Qe&&setTimeout($t,n.dedupingInterval),!d[v]||d[v][1]!==ge?(Qe&&Ve()&&xe().onDiscarded(v),[2,!1]):(r.set(_,st),Et.error=st,!St(O[v])&&(ge<=O[v]||ge<=T[v]||T[v]===0)?(Wr(),Qe&&Ve()&&xe().onDiscarded(v),[2,!1]):(o(R.current.data,_e)?Et.data=R.current.data:Et.data=_e,o(r.get(v),_e)||r.set(v,_e),Qe&&Ve()&&xe().onSuccess(_e,v,n),[3,4]));case 3:return An=Mn.sent(),$t(),xe().isPaused()||(r.set(_,An),Et.error=An,Qe&&Ve()&&(xe().onError(An,v,n),n.shouldRetryOnError&&ke()&&xe().onErrorRetry(An,v,n,D,{retryCount:(ct.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return Ke=!1,Wr(),Ve()&&Qe&&Fu(r,v,Et.data,Et.error,!1),[2,!0]}})})},[v]),$=Y.exports.useCallback(am.bind(st,r,function(){return V.current}),[]);if(li(function(){U.current=t,re.current=n}),li(function(){if(!!v){var J=I.current,ce=D.bind(st,ac),_e=function(Ve,$t,Et){N(nr({error:$t,isValidating:Et},o(R.current.data,Ve)?st:{data:Ve}))},ge=0,Ke=function(Ve){if(Ve==im){var $t=Date.now();xe().revalidateOnFocus&&$t>ge&&ke()&&(ge=$t+xe().focusThrottleInterval,ce())}else if(Ve==um)xe().revalidateOnReconnect&&ke()&&ce();else if(Ve==lm)return D()},ct=vm(v,P,_e),Qe=vm(v,S,Ke);return j.current=!1,V.current=v,I.current=!0,J&&N({data:B,error:oe,isValidating:ae}),te()&&(St(B)||bu?ce():wC(ce)),function(){j.current=!0,ct(),Qe()}}},[v,D]),li(function(){var J;function ce(){var ge=ii(c)?c(B):c;ge&&J!==-1&&(J=setTimeout(_e,ge))}function _e(){!R.current.error&&(s||xe().isVisible())&&(m||xe().isOnline())?D(ac).then(ce):ce()}return ce(),function(){J&&(clearTimeout(J),J=-1)}},[c,s,m,D]),Y.exports.useDebugValue(B),u&&St(B)&&v)throw St(oe)?D(ac):oe;return{mutate:$,get data(){return A.data=!0,B},get error(){return A.error=!0,oe},get isValidating(){return A.isValidating=!0,ae}}};oi.defineProperty(xC,"default",{value:pm});var OP=OC(TC),mm={exports:{}};(function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1));function o(c,s,m){this.fn=c,this.context=s,this.once=m||!1}function i(c,s,m,E,S){if(typeof m!="function")throw new TypeError("The listener must be a function");var P=new o(m,E||c,S),O=n?n+s:s;return c._events[O]?c._events[O].fn?c._events[O]=[c._events[O],P]:c._events[O].push(P):(c._events[O]=P,c._eventsCount++),c}function u(c,s){--c._eventsCount==0?c._events=new r:delete c._events[s]}function a(){this._events=new r,this._eventsCount=0}a.prototype.eventNames=function(){var s=[],m,E;if(this._eventsCount===0)return s;for(E in m=this._events)t.call(m,E)&&s.push(n?E.slice(1):E);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(m)):s},a.prototype.listeners=function(s){var m=n?n+s:s,E=this._events[m];if(!E)return[];if(E.fn)return[E.fn];for(var S=0,P=E.length,O=new Array(P);S=0)return;r==="set-cookie"?n[r]=(n[r]?n[r]:[]).concat([o]):n[r]=n[r]?n[r]+", "+o:o}}),n},Rm=vt,gR=Rm.isStandardBrowserEnv()?function(){var t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a"),r;function o(i){var u=i;return t&&(n.setAttribute("href",u),u=n.href),n.setAttribute("href",u),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=o(window.location.href),function(u){var a=Rm.isString(u)?o(u):u;return a.protocol===r.protocol&&a.host===r.host}}():function(){return function(){return!0}}();function vc(e){this.message=e}vc.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")};vc.prototype.__CANCEL__=!0;var Vu=vc,Gu=vt,yR=aR,wR=sR,SR=Em,_R=hR,ER=mR,xR=gR,mc=Cm,CR=qu,RR=Vu,Pm=function(t){return new Promise(function(r,o){var i=t.data,u=t.headers,a=t.responseType,c;function s(){t.cancelToken&&t.cancelToken.unsubscribe(c),t.signal&&t.signal.removeEventListener("abort",c)}Gu.isFormData(i)&&delete u["Content-Type"];var m=new XMLHttpRequest;if(t.auth){var E=t.auth.username||"",S=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";u.Authorization="Basic "+btoa(E+":"+S)}var P=_R(t.baseURL,t.url);m.open(t.method.toUpperCase(),SR(P,t.params,t.paramsSerializer),!0),m.timeout=t.timeout;function O(){if(!!m){var d="getAllResponseHeaders"in m?ER(m.getAllResponseHeaders()):null,h=!a||a==="text"||a==="json"?m.responseText:m.response,v={data:h,status:m.status,statusText:m.statusText,headers:d,config:t,request:m};yR(function(_){r(_),s()},function(_){o(_),s()},v),m=null}}if("onloadend"in m?m.onloadend=O:m.onreadystatechange=function(){!m||m.readyState!==4||m.status===0&&!(m.responseURL&&m.responseURL.indexOf("file:")===0)||setTimeout(O)},m.onabort=function(){!m||(o(mc("Request aborted",t,"ECONNABORTED",m)),m=null)},m.onerror=function(){o(mc("Network Error",t,null,m)),m=null},m.ontimeout=function(){var h=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",v=t.transitional||CR.transitional;t.timeoutErrorMessage&&(h=t.timeoutErrorMessage),o(mc(h,t,v.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",m)),m=null},Gu.isStandardBrowserEnv()){var T=(t.withCredentials||xR(P))&&t.xsrfCookieName?wR.read(t.xsrfCookieName):void 0;T&&(u[t.xsrfHeaderName]=T)}"setRequestHeader"in m&&Gu.forEach(u,function(h,v){typeof i=="undefined"&&v.toLowerCase()==="content-type"?delete u[v]:m.setRequestHeader(v,h)}),Gu.isUndefined(t.withCredentials)||(m.withCredentials=!!t.withCredentials),a&&a!=="json"&&(m.responseType=t.responseType),typeof t.onDownloadProgress=="function"&&m.addEventListener("progress",t.onDownloadProgress),typeof t.onUploadProgress=="function"&&m.upload&&m.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(c=function(d){!m||(o(!d||d&&d.type?new RR("canceled"):d),m.abort(),m=null)},t.cancelToken&&t.cancelToken.subscribe(c),t.signal&&(t.signal.aborted?c():t.signal.addEventListener("abort",c))),i||(i=null),m.send(i)})},et=vt,Om=iR,PR=xm,OR={"Content-Type":"application/x-www-form-urlencoded"};function Tm(e,t){!et.isUndefined(e)&&et.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function TR(){var e;return(typeof XMLHttpRequest!="undefined"||typeof process!="undefined"&&Object.prototype.toString.call(process)==="[object process]")&&(e=Pm),e}function kR(e,t,n){if(et.isString(e))try{return(t||JSON.parse)(e),et.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}var Yu={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:TR(),transformRequest:[function(t,n){return Om(n,"Accept"),Om(n,"Content-Type"),et.isFormData(t)||et.isArrayBuffer(t)||et.isBuffer(t)||et.isStream(t)||et.isFile(t)||et.isBlob(t)?t:et.isArrayBufferView(t)?t.buffer:et.isURLSearchParams(t)?(Tm(n,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):et.isObject(t)||n&&n["Content-Type"]==="application/json"?(Tm(n,"application/json"),kR(t)):t}],transformResponse:[function(t){var n=this.transitional||Yu.transitional,r=n&&n.silentJSONParsing,o=n&&n.forcedJSONParsing,i=!r&&this.responseType==="json";if(i||o&&et.isString(t)&&t.length)try{return JSON.parse(t)}catch(u){if(i)throw u.name==="SyntaxError"?PR(u,this,"E_JSON_PARSE"):u}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};et.forEach(["delete","get","head"],function(t){Yu.headers[t]={}});et.forEach(["post","put","patch"],function(t){Yu.headers[t]=et.merge(OR)});var qu=Yu,IR=vt,AR=qu,MR=function(t,n,r){var o=this||AR;return IR.forEach(r,function(u){t=u.call(o,t,n)}),t},km=function(t){return!!(t&&t.__CANCEL__)},Im=vt,gc=MR,NR=km,LR=qu,zR=Vu;function yc(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new zR("canceled")}var $R=function(t){yc(t),t.headers=t.headers||{},t.data=gc.call(t,t.data,t.headers,t.transformRequest),t.headers=Im.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),Im.forEach(["delete","get","head","post","put","patch","common"],function(o){delete t.headers[o]});var n=t.adapter||LR.adapter;return n(t).then(function(o){return yc(t),o.data=gc.call(t,o.data,o.headers,t.transformResponse),o},function(o){return NR(o)||(yc(t),o&&o.response&&(o.response.data=gc.call(t,o.response.data,o.response.headers,t.transformResponse))),Promise.reject(o)})},_t=vt,Am=function(t,n){n=n||{};var r={};function o(m,E){return _t.isPlainObject(m)&&_t.isPlainObject(E)?_t.merge(m,E):_t.isPlainObject(E)?_t.merge({},E):_t.isArray(E)?E.slice():E}function i(m){if(_t.isUndefined(n[m])){if(!_t.isUndefined(t[m]))return o(void 0,t[m])}else return o(t[m],n[m])}function u(m){if(!_t.isUndefined(n[m]))return o(void 0,n[m])}function a(m){if(_t.isUndefined(n[m])){if(!_t.isUndefined(t[m]))return o(void 0,t[m])}else return o(void 0,n[m])}function c(m){if(m in n)return o(t[m],n[m]);if(m in t)return o(void 0,t[m])}var s={url:u,method:u,data:u,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c};return _t.forEach(Object.keys(t).concat(Object.keys(n)),function(E){var S=s[E]||i,P=S(E);_t.isUndefined(P)&&S!==c||(r[E]=P)}),r},Mm={version:"0.25.0"},bR=Mm.version,wc={};["object","boolean","number","function","string","symbol"].forEach(function(e,t){wc[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});var Nm={};wc.transitional=function(t,n,r){function o(i,u){return"[Axios v"+bR+"] Transitional option '"+i+"'"+u+(r?". "+r:"")}return function(i,u,a){if(t===!1)throw new Error(o(u," has been removed"+(n?" in "+n:"")));return n&&!Nm[u]&&(Nm[u]=!0,console.warn(o(u," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,u,a):!0}};function FR(e,t,n){if(typeof e!="object")throw new TypeError("options must be an object");for(var r=Object.keys(e),o=r.length;o-- >0;){var i=r[o],u=t[i];if(u){var a=e[i],c=a===void 0||u(a,i,e);if(c!==!0)throw new TypeError("option "+i+" must be "+c);continue}if(n!==!0)throw Error("Unknown option "+i)}}var DR={assertOptions:FR,validators:wc},Lm=vt,jR=Em,zm=rR,$m=$R,Ku=Am,bm=DR,Br=bm.validators;function ai(e){this.defaults=e,this.interceptors={request:new zm,response:new zm}}ai.prototype.request=function(t,n){if(typeof t=="string"?(n=n||{},n.url=t):n=t||{},!n.url)throw new Error("Provided config url is not valid");n=Ku(this.defaults,n),n.method?n.method=n.method.toLowerCase():this.defaults.method?n.method=this.defaults.method.toLowerCase():n.method="get";var r=n.transitional;r!==void 0&&bm.assertOptions(r,{silentJSONParsing:Br.transitional(Br.boolean),forcedJSONParsing:Br.transitional(Br.boolean),clarifyTimeoutError:Br.transitional(Br.boolean)},!1);var o=[],i=!0;this.interceptors.request.forEach(function(P){typeof P.runWhen=="function"&&P.runWhen(n)===!1||(i=i&&P.synchronous,o.unshift(P.fulfilled,P.rejected))});var u=[];this.interceptors.response.forEach(function(P){u.push(P.fulfilled,P.rejected)});var a;if(!i){var c=[$m,void 0];for(Array.prototype.unshift.apply(c,o),c=c.concat(u),a=Promise.resolve(n);c.length;)a=a.then(c.shift(),c.shift());return a}for(var s=n;o.length;){var m=o.shift(),E=o.shift();try{s=m(s)}catch(S){E(S);break}}try{a=$m(s)}catch(S){return Promise.reject(S)}for(;u.length;)a=a.then(u.shift(),u.shift());return a};ai.prototype.getUri=function(t){if(!t.url)throw new Error("Provided config url is not valid");return t=Ku(this.defaults,t),jR(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")};Lm.forEach(["delete","get","head","options"],function(t){ai.prototype[t]=function(n,r){return this.request(Ku(r||{},{method:t,url:n,data:(r||{}).data}))}});Lm.forEach(["post","put","patch"],function(t){ai.prototype[t]=function(n,r,o){return this.request(Ku(o||{},{method:t,url:n,data:r}))}});var BR=ai,UR=Vu;function Ur(e){if(typeof e!="function")throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(o){t=o});var n=this;this.promise.then(function(r){if(!!n._listeners){var o,i=n._listeners.length;for(o=0;o=0||(x[p]=l[p]);return x}function c(l){var f=function(p,g){if(typeof p!="object"||p===null)return p;var x=p[Symbol.toPrimitive];if(x!==void 0){var y=x.call(p,g||"default");if(typeof y!="object")return y;throw new TypeError("@@toPrimitive must return a primitive value.")}return(g==="string"?String:Number)(p)}(l,"string");return typeof f=="symbol"?f:String(f)}r=r&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r;var s={init:"init"},m=function(l){var f=l.value;return f===void 0?"":f},E=function(){return r.createElement(r.Fragment,null,"\xA0")},S={Cell:m,width:150,minWidth:0,maxWidth:Number.MAX_SAFE_INTEGER};function P(){for(var l=arguments.length,f=new Array(l),p=0;p(y=typeof y=="number"?y:1/0)){var C=x;x=y,y=C}return l.filter(function(L){return f.some(function(z){var b=L.values[z];return b>=x&&b<=y})})};jc.autoRemove=function(l){return!l||typeof l[0]!="number"&&typeof l[1]!="number"};var Gr=Object.freeze({__proto__:null,text:Ac,exactText:Mc,exactTextCase:Nc,includes:Lc,includesAll:zc,includesSome:$c,includesValue:bc,exact:Fc,equals:Dc,between:jc});s.resetFilters="resetFilters",s.setFilter="setFilter",s.setAllFilters="setAllFilters";var Bc=function(l){l.stateReducers.push(ig),l.useInstance.push(ug)};function ig(l,f,p,g){if(f.type===s.init)return u({filters:[]},l);if(f.type===s.resetFilters)return u({},l,{filters:g.initialState.filters||[]});if(f.type===s.setFilter){var x=f.columnId,y=f.filterValue,C=g.allColumns,L=g.filterTypes,z=C.find(function(Z){return Z.id===x});if(!z)throw new Error("React-Table: Could not find a column with id: "+x);var b=se(z.filter,L||{},Gr),K=l.filters.find(function(Z){return Z.id===x}),W=v(y,K&&K.value);return ae(b.autoRemove,W,z)?u({},l,{filters:l.filters.filter(function(Z){return Z.id!==x})}):u({},l,K?{filters:l.filters.map(function(Z){return Z.id===x?{id:x,value:W}:Z})}:{filters:[].concat(l.filters,[{id:x,value:W}])})}if(f.type===s.setAllFilters){var G=f.filters,F=g.allColumns,H=g.filterTypes;return u({},l,{filters:v(G,l.filters).filter(function(Z){var Q=F.find(function(le){return le.id===Z.id});return!ae(se(Q.filter,H||{},Gr).autoRemove,Z.value,Q)})})}}function ug(l){var f=l.data,p=l.rows,g=l.flatRows,x=l.rowsById,y=l.allColumns,C=l.filterTypes,L=l.manualFilters,z=l.defaultCanFilter,b=z!==void 0&&z,K=l.disableFilters,W=l.state.filters,G=l.dispatch,F=l.autoResetFilters,H=F===void 0||F,Z=r.useCallback(function(he,ve){G({type:s.setFilter,columnId:he,filterValue:ve})},[G]),Q=r.useCallback(function(he){G({type:s.setAllFilters,filters:he})},[G]);y.forEach(function(he){var ve=he.id,Ee=he.accessor,fe=he.defaultCanFilter,pe=he.disableFilters;he.canFilter=Ee?X(pe!==!0&&void 0,K!==!0&&void 0,!0):X(fe,b,!1),he.setFilter=function(me){return Z(he.id,me)};var Oe=W.find(function(me){return me.id===ve});he.filterValue=Oe&&Oe.value});var le=r.useMemo(function(){if(L||!W.length)return[p,g,x];var he=[],ve={};return[function Ee(fe,pe){pe===void 0&&(pe=0);var Oe=fe;return(Oe=W.reduce(function(me,Pe){var Re=Pe.id,Ae=Pe.value,ue=y.find(function(Fe){return Fe.id===Re});if(!ue)return me;pe===0&&(ue.preFilteredRows=me);var Ce=se(ue.filter,C||{},Gr);return Ce?(ue.filteredRows=Ce(me,[Re],Ae),ue.filteredRows):(console.warn("Could not find a valid 'column.filter' for column with the ID: "+ue.id+"."),me)},fe)).forEach(function(me){he.push(me),ve[me.id]=me,me.subRows&&(me.subRows=me.subRows&&me.subRows.length>0?Ee(me.subRows,pe+1):me.subRows)}),Oe}(p),he,ve]},[L,W,p,g,x,y,C]),Se=le[0],we=le[1],ne=le[2];r.useMemo(function(){y.filter(function(he){return!W.find(function(ve){return ve.id===he.id})}).forEach(function(he){he.preFilteredRows=Se,he.filteredRows=Se})},[Se,W,y]);var Ie=w(H);M(function(){Ie()&&G({type:s.resetFilters})},[G,L?null:f]),Object.assign(l,{preFilteredRows:p,preFilteredFlatRows:g,preFilteredRowsById:x,filteredRows:Se,filteredFlatRows:we,filteredRowsById:ne,rows:Se,flatRows:we,rowsById:ne,setFilter:Z,setAllFilters:Q})}Bc.pluginName="useFilters",s.resetGlobalFilter="resetGlobalFilter",s.setGlobalFilter="setGlobalFilter";var Uc=function(l){l.stateReducers.push(lg),l.useInstance.push(ag)};function lg(l,f,p,g){if(f.type===s.resetGlobalFilter)return u({},l,{globalFilter:g.initialState.globalFilter||void 0});if(f.type===s.setGlobalFilter){var x=f.filterValue,y=g.userFilterTypes,C=se(g.globalFilter,y||{},Gr),L=v(x,l.globalFilter);return ae(C.autoRemove,L)?(l.globalFilter,a(l,["globalFilter"])):u({},l,{globalFilter:L})}}function ag(l){var f=l.data,p=l.rows,g=l.flatRows,x=l.rowsById,y=l.allColumns,C=l.filterTypes,L=l.globalFilter,z=l.manualGlobalFilter,b=l.state.globalFilter,K=l.dispatch,W=l.autoResetGlobalFilter,G=W===void 0||W,F=l.disableGlobalFilter,H=r.useCallback(function(ne){K({type:s.setGlobalFilter,filterValue:ne})},[K]),Z=r.useMemo(function(){if(z||b===void 0)return[p,g,x];var ne=[],Ie={},he=se(L,C||{},Gr);if(!he)return console.warn("Could not find a valid 'globalFilter' option."),p;y.forEach(function(Ee){var fe=Ee.disableGlobalFilter;Ee.canFilter=X(fe!==!0&&void 0,F!==!0&&void 0,!0)});var ve=y.filter(function(Ee){return Ee.canFilter===!0});return[function Ee(fe){return(fe=he(fe,ve.map(function(pe){return pe.id}),b)).forEach(function(pe){ne.push(pe),Ie[pe.id]=pe,pe.subRows=pe.subRows&&pe.subRows.length?Ee(pe.subRows):pe.subRows}),fe}(p),ne,Ie]},[z,b,L,C,y,p,g,x,F]),Q=Z[0],le=Z[1],Se=Z[2],we=w(G);M(function(){we()&&K({type:s.resetGlobalFilter})},[K,z?null:f]),Object.assign(l,{preGlobalFilteredRows:p,preGlobalFilteredFlatRows:g,preGlobalFilteredRowsById:x,globalFilteredRows:Q,globalFilteredFlatRows:le,globalFilteredRowsById:Se,rows:Q,flatRows:le,rowsById:Se,setGlobalFilter:H,disableGlobalFilter:F})}function Hc(l,f){return f.reduce(function(p,g){return p+(typeof g=="number"?g:0)},0)}Uc.pluginName="useGlobalFilter";var Wc=Object.freeze({__proto__:null,sum:Hc,min:function(l){var f=l[0]||0;return l.forEach(function(p){typeof p=="number"&&(f=Math.min(f,p))}),f},max:function(l){var f=l[0]||0;return l.forEach(function(p){typeof p=="number"&&(f=Math.max(f,p))}),f},minMax:function(l){var f=l[0]||0,p=l[0]||0;return l.forEach(function(g){typeof g=="number"&&(f=Math.min(f,g),p=Math.max(p,g))}),f+".."+p},average:function(l){return Hc(0,l)/l.length},median:function(l){if(!l.length)return null;var f=Math.floor(l.length/2),p=[].concat(l).sort(function(g,x){return g-x});return l.length%2!=0?p[f]:(p[f-1]+p[f])/2},unique:function(l){return Array.from(new Set(l).values())},uniqueCount:function(l){return new Set(l).size},count:function(l){return l.length}}),sg=[],cg={};s.resetGroupBy="resetGroupBy",s.setGroupBy="setGroupBy",s.toggleGroupBy="toggleGroupBy";var Vc=function(l){l.getGroupByToggleProps=[fg],l.stateReducers.push(dg),l.visibleColumnsDeps.push(function(f,p){var g=p.instance;return[].concat(f,[g.state.groupBy])}),l.visibleColumns.push(pg),l.useInstance.push(vg),l.prepareRow.push(mg)};Vc.pluginName="useGroupBy";var fg=function(l,f){var p=f.header;return[l,{onClick:p.canGroupBy?function(g){g.persist(),p.toggleGroupBy()}:void 0,style:{cursor:p.canGroupBy?"pointer":void 0},title:"Toggle GroupBy"}]};function dg(l,f,p,g){if(f.type===s.init)return u({groupBy:[]},l);if(f.type===s.resetGroupBy)return u({},l,{groupBy:g.initialState.groupBy||[]});if(f.type===s.setGroupBy)return u({},l,{groupBy:f.value});if(f.type===s.toggleGroupBy){var x=f.columnId,y=f.value,C=y!==void 0?y:!l.groupBy.includes(x);return u({},l,C?{groupBy:[].concat(l.groupBy,[x])}:{groupBy:l.groupBy.filter(function(L){return L!==x})})}}function pg(l,f){var p=f.instance.state.groupBy,g=p.map(function(y){return l.find(function(C){return C.id===y})}).filter(Boolean),x=l.filter(function(y){return!p.includes(y.id)});return(l=[].concat(g,x)).forEach(function(y){y.isGrouped=p.includes(y.id),y.groupedIndex=p.indexOf(y.id)}),l}var hg={};function vg(l){var f=l.data,p=l.rows,g=l.flatRows,x=l.rowsById,y=l.allColumns,C=l.flatHeaders,L=l.groupByFn,z=L===void 0?Gc:L,b=l.manualGroupBy,K=l.aggregations,W=K===void 0?hg:K,G=l.plugins,F=l.state.groupBy,H=l.dispatch,Z=l.autoResetGroupBy,Q=Z===void 0||Z,le=l.disableGroupBy,Se=l.defaultCanGroupBy,we=l.getHooks;h(G,["useColumnOrder","useFilters"],"useGroupBy");var ne=w(l);y.forEach(function(ue){var Ce=ue.accessor,Fe=ue.defaultGroupBy,it=ue.disableGroupBy;ue.canGroupBy=Ce?X(ue.canGroupBy,it!==!0&&void 0,le!==!0&&void 0,!0):X(ue.canGroupBy,Fe,Se,!1),ue.canGroupBy&&(ue.toggleGroupBy=function(){return l.toggleGroupBy(ue.id)}),ue.Aggregated=ue.Aggregated||ue.Cell});var Ie=r.useCallback(function(ue,Ce){H({type:s.toggleGroupBy,columnId:ue,value:Ce})},[H]),he=r.useCallback(function(ue){H({type:s.setGroupBy,value:ue})},[H]);C.forEach(function(ue){ue.getGroupByToggleProps=O(we().getGroupByToggleProps,{instance:ne(),header:ue})});var ve=r.useMemo(function(){if(b||!F.length)return[p,g,x,sg,cg,g,x];var ue=F.filter(function(Ge){return y.find(function(on){return on.id===Ge})}),Ce=[],Fe={},it=[],de={},$e=[],Ue={},ut=function Ge(on,un,ff){if(un===void 0&&(un=0),un===ue.length)return on;var rl=ue[un],ry=z(on,rl);return Object.entries(ry).map(function(df,oy){var pf=df[0],fi=df[1],di=rl+":"+pf,hf=Ge(fi,un+1,di=ff?ff+">"+di:di),vf=un?oe(fi,"leafRows"):fi,iy=function(xt,ol,ly){var pi={};return y.forEach(function(He){if(ue.includes(He.id))pi[He.id]=ol[0]?ol[0].values[He.id]:null;else{var mf=typeof He.aggregate=="function"?He.aggregate:W[He.aggregate]||Wc[He.aggregate];if(mf){var ay=ol.map(function(hi){return hi.values[He.id]}),sy=xt.map(function(hi){var il=hi.values[He.id];if(!ly&&He.aggregateValue){var gf=typeof He.aggregateValue=="function"?He.aggregateValue:W[He.aggregateValue]||Wc[He.aggregateValue];if(!gf)throw console.info({column:He}),new Error("React Table: Invalid column.aggregateValue option for column listed above");il=gf(il,hi,He)}return il});pi[He.id]=mf(sy,ay)}else{if(He.aggregate)throw console.info({column:He}),new Error("React Table: Invalid column.aggregate option for column listed above");pi[He.id]=null}}}),pi}(vf,fi,un),uy={id:di,isGrouped:!0,groupByID:rl,groupByVal:pf,values:iy,subRows:hf,leafRows:vf,depth:un,index:oy};return hf.forEach(function(xt){Ce.push(xt),Fe[xt.id]=xt,xt.isGrouped?(it.push(xt),de[xt.id]=xt):($e.push(xt),Ue[xt.id]=xt)}),uy})}(p);return ut.forEach(function(Ge){Ce.push(Ge),Fe[Ge.id]=Ge,Ge.isGrouped?(it.push(Ge),de[Ge.id]=Ge):($e.push(Ge),Ue[Ge.id]=Ge)}),[ut,Ce,Fe,it,de,$e,Ue]},[b,F,p,g,x,y,W,z]),Ee=ve[0],fe=ve[1],pe=ve[2],Oe=ve[3],me=ve[4],Pe=ve[5],Re=ve[6],Ae=w(Q);M(function(){Ae()&&H({type:s.resetGroupBy})},[H,b?null:f]),Object.assign(l,{preGroupedRows:p,preGroupedFlatRow:g,preGroupedRowsById:x,groupedRows:Ee,groupedFlatRows:fe,groupedRowsById:pe,onlyGroupedFlatRows:Oe,onlyGroupedRowsById:me,nonGroupedFlatRows:Pe,nonGroupedRowsById:Re,rows:Ee,flatRows:fe,rowsById:pe,toggleGroupBy:Ie,setGroupBy:he})}function mg(l){l.allCells.forEach(function(f){var p;f.isGrouped=f.column.isGrouped&&f.column.id===l.groupByID,f.isPlaceholder=!f.isGrouped&&f.column.isGrouped,f.isAggregated=!f.isGrouped&&!f.isPlaceholder&&((p=l.subRows)==null?void 0:p.length)})}function Gc(l,f){return l.reduce(function(p,g,x){var y=""+g.values[f];return p[y]=Array.isArray(p[y])?p[y]:[],p[y].push(g),p},{})}var Yc=/([0-9]+)/gm;function Ju(l,f){return l===f?0:l>f?1:-1}function Yr(l,f,p){return[l.values[p],f.values[p]]}function qc(l){return typeof l=="number"?isNaN(l)||l===1/0||l===-1/0?"":String(l):typeof l=="string"?l:""}var gg=Object.freeze({__proto__:null,alphanumeric:function(l,f,p){var g=Yr(l,f,p),x=g[0],y=g[1];for(x=qc(x),y=qc(y),x=x.split(Yc).filter(Boolean),y=y.split(Yc).filter(Boolean);x.length&&y.length;){var C=x.shift(),L=y.shift(),z=parseInt(C,10),b=parseInt(L,10),K=[z,b].sort();if(isNaN(K[0])){if(C>L)return 1;if(L>C)return-1}else{if(isNaN(K[1]))return isNaN(z)?-1:1;if(z>b)return 1;if(b>z)return-1}}return x.length-y.length},datetime:function(l,f,p){var g=Yr(l,f,p),x=g[0],y=g[1];return Ju(x=x.getTime(),y=y.getTime())},basic:function(l,f,p){var g=Yr(l,f,p);return Ju(g[0],g[1])},string:function(l,f,p){var g=Yr(l,f,p),x=g[0],y=g[1];for(x=x.split("").filter(Boolean),y=y.split("").filter(Boolean);x.length&&y.length;){var C=x.shift(),L=y.shift(),z=C.toLowerCase(),b=L.toLowerCase();if(z>b)return 1;if(b>z)return-1;if(C>L)return 1;if(L>C)return-1}return x.length-y.length},number:function(l,f,p){var g=Yr(l,f,p),x=g[0],y=g[1],C=/[^0-9.]/gi;return Ju(x=Number(String(x).replace(C,"")),y=Number(String(y).replace(C,"")))}});s.resetSortBy="resetSortBy",s.setSortBy="setSortBy",s.toggleSortBy="toggleSortBy",s.clearSortBy="clearSortBy",S.sortType="alphanumeric",S.sortDescFirst=!1;var Kc=function(l){l.getSortByToggleProps=[yg],l.stateReducers.push(wg),l.useInstance.push(Sg)};Kc.pluginName="useSortBy";var yg=function(l,f){var p=f.instance,g=f.column,x=p.isMultiSortEvent,y=x===void 0?function(C){return C.shiftKey}:x;return[l,{onClick:g.canSort?function(C){C.persist(),g.toggleSortBy(void 0,!p.disableMultiSort&&y(C))}:void 0,style:{cursor:g.canSort?"pointer":void 0},title:g.canSort?"Toggle SortBy":void 0}]};function wg(l,f,p,g){if(f.type===s.init)return u({sortBy:[]},l);if(f.type===s.resetSortBy)return u({},l,{sortBy:g.initialState.sortBy||[]});if(f.type===s.clearSortBy)return u({},l,{sortBy:l.sortBy.filter(function(ne){return ne.id!==f.columnId})});if(f.type===s.setSortBy)return u({},l,{sortBy:f.sortBy});if(f.type===s.toggleSortBy){var x,y=f.columnId,C=f.desc,L=f.multi,z=g.allColumns,b=g.disableMultiSort,K=g.disableSortRemove,W=g.disableMultiRemove,G=g.maxMultiSortColCount,F=G===void 0?Number.MAX_SAFE_INTEGER:G,H=l.sortBy,Z=z.find(function(ne){return ne.id===y}).sortDescFirst,Q=H.find(function(ne){return ne.id===y}),le=H.findIndex(function(ne){return ne.id===y}),Se=C!=null,we=[];return(x=!b&&L?Q?"toggle":"add":le!==H.length-1||H.length!==1?"replace":Q?"toggle":"replace")!=="toggle"||K||Se||L&&W||!(Q&&Q.desc&&!Z||!Q.desc&&Z)||(x="remove"),x==="replace"?we=[{id:y,desc:Se?C:Z}]:x==="add"?(we=[].concat(H,[{id:y,desc:Se?C:Z}])).splice(0,we.length-F):x==="toggle"?we=H.map(function(ne){return ne.id===y?u({},ne,{desc:Se?C:!Q.desc}):ne}):x==="remove"&&(we=H.filter(function(ne){return ne.id!==y})),u({},l,{sortBy:we})}}function Sg(l){var f=l.data,p=l.rows,g=l.flatRows,x=l.allColumns,y=l.orderByFn,C=y===void 0?Qc:y,L=l.sortTypes,z=l.manualSortBy,b=l.defaultCanSort,K=l.disableSortBy,W=l.flatHeaders,G=l.state.sortBy,F=l.dispatch,H=l.plugins,Z=l.getHooks,Q=l.autoResetSortBy,le=Q===void 0||Q;h(H,["useFilters","useGlobalFilter","useGroupBy","usePivotColumns"],"useSortBy");var Se=r.useCallback(function(fe){F({type:s.setSortBy,sortBy:fe})},[F]),we=r.useCallback(function(fe,pe,Oe){F({type:s.toggleSortBy,columnId:fe,desc:pe,multi:Oe})},[F]),ne=w(l);W.forEach(function(fe){var pe=fe.accessor,Oe=fe.canSort,me=fe.disableSortBy,Pe=fe.id,Re=pe?X(me!==!0&&void 0,K!==!0&&void 0,!0):X(b,Oe,!1);fe.canSort=Re,fe.canSort&&(fe.toggleSortBy=function(ue,Ce){return we(fe.id,ue,Ce)},fe.clearSortBy=function(){F({type:s.clearSortBy,columnId:fe.id})}),fe.getSortByToggleProps=O(Z().getSortByToggleProps,{instance:ne(),column:fe});var Ae=G.find(function(ue){return ue.id===Pe});fe.isSorted=!!Ae,fe.sortedIndex=G.findIndex(function(ue){return ue.id===Pe}),fe.isSortedDesc=fe.isSorted?Ae.desc:void 0});var Ie=r.useMemo(function(){if(z||!G.length)return[p,g];var fe=[],pe=G.filter(function(Oe){return x.find(function(me){return me.id===Oe.id})});return[function Oe(me){var Pe=C(me,pe.map(function(Re){var Ae=x.find(function(Fe){return Fe.id===Re.id});if(!Ae)throw new Error("React-Table: Could not find a column with id: "+Re.id+" while sorting");var ue=Ae.sortType,Ce=B(ue)||(L||{})[ue]||gg[ue];if(!Ce)throw new Error("React-Table: Could not find a valid sortType of '"+ue+"' for column '"+Re.id+"'.");return function(Fe,it){return Ce(Fe,it,Re.id,Re.desc)}}),pe.map(function(Re){var Ae=x.find(function(ue){return ue.id===Re.id});return Ae&&Ae.sortInverted?Re.desc:!Re.desc}));return Pe.forEach(function(Re){fe.push(Re),Re.subRows&&Re.subRows.length!==0&&(Re.subRows=Oe(Re.subRows))}),Pe}(p),fe]},[z,G,p,g,x,C,L]),he=Ie[0],ve=Ie[1],Ee=w(le);M(function(){Ee()&&F({type:s.resetSortBy})},[z?null:f]),Object.assign(l,{preSortedRows:p,preSortedFlatRows:g,sortedRows:he,sortedFlatRows:ve,rows:he,flatRows:ve,setSortBy:Se,toggleSortBy:we})}function Qc(l,f,p){return[].concat(l).sort(function(g,x){for(var y=0;yl.pageIndex?L=x===-1?y.length>=l.pageSize:C-1),L?u({},l,{pageIndex:C}):l}if(f.type===s.setPageSize){var z=f.pageSize,b=l.pageSize*l.pageIndex;return u({},l,{pageIndex:Math.floor(b/z),pageSize:z})}}function Eg(l){var f=l.rows,p=l.autoResetPage,g=p===void 0||p,x=l.manualExpandedKey,y=x===void 0?"expanded":x,C=l.plugins,L=l.pageCount,z=l.paginateExpandedRows,b=z===void 0||z,K=l.expandSubRows,W=K===void 0||K,G=l.state,F=G.pageSize,H=G.pageIndex,Z=G.expanded,Q=G.globalFilter,le=G.filters,Se=G.groupBy,we=G.sortBy,ne=l.dispatch,Ie=l.data,he=l.manualPagination;h(C,["useGlobalFilter","useFilters","useGroupBy","useSortBy","useExpanded"],"usePagination");var ve=w(g);M(function(){ve()&&ne({type:s.resetPage})},[ne,he?null:Ie,Q,le,Se,we]);var Ee=he?L:Math.ceil(f.length/F),fe=r.useMemo(function(){return Ee>0?[].concat(new Array(Ee)).fill(null).map(function(Ce,Fe){return Fe}):[]},[Ee]),pe=r.useMemo(function(){var Ce;if(he)Ce=f;else{var Fe=F*H,it=Fe+F;Ce=f.slice(Fe,it)}return b?Ce:te(Ce,{manualExpandedKey:y,expanded:Z,expandSubRows:W})},[W,Z,y,he,H,F,b,f]),Oe=H>0,me=Ee===-1?pe.length>=F:H-1&&y.push(x.splice(z,1)[0])};x.length&&g.length;)C();return[].concat(y,x)}function Vg(l){var f=l.dispatch;l.setColumnOrder=r.useCallback(function(p){return f({type:s.setColumnOrder,columnOrder:p})},[f])}of.pluginName="useColumnOrder",S.canResize=!0,s.columnStartResizing="columnStartResizing",s.columnResizing="columnResizing",s.columnDoneResizing="columnDoneResizing",s.resetResize="resetResize";var uf=function(l){l.getResizerProps=[Gg],l.getHeaderProps.push({style:{position:"relative"}}),l.stateReducers.push(Yg),l.useInstance.push(Kg),l.useInstanceBeforeDimensions.push(qg)},Gg=function(l,f){var p=f.instance,g=f.header,x=p.dispatch,y=function(C,L){var z=!1;if(C.type==="touchstart"){if(C.touches&&C.touches.length>1)return;z=!0}var b=function(Q){var le=[];return function Se(we){we.columns&&we.columns.length&&we.columns.map(Se),le.push(we)}(Q),le}(L).map(function(Q){return[Q.id,Q.totalWidth]}),K=z?Math.round(C.touches[0].clientX):C.clientX,W=function(Q){x({type:s.columnResizing,clientX:Q})},G=function(){return x({type:s.columnDoneResizing})},F={mouse:{moveEvent:"mousemove",moveHandler:function(Q){return W(Q.clientX)},upEvent:"mouseup",upHandler:function(Q){document.removeEventListener("mousemove",F.mouse.moveHandler),document.removeEventListener("mouseup",F.mouse.upHandler),G()}},touch:{moveEvent:"touchmove",moveHandler:function(Q){return Q.cancelable&&(Q.preventDefault(),Q.stopPropagation()),W(Q.touches[0].clientX),!1},upEvent:"touchend",upHandler:function(Q){document.removeEventListener(F.touch.moveEvent,F.touch.moveHandler),document.removeEventListener(F.touch.upEvent,F.touch.moveHandler),G()}}},H=z?F.touch:F.mouse,Z=!!function(){if(typeof R=="boolean")return R;var Q=!1;try{var le={get passive(){return Q=!0,!1}};window.addEventListener("test",null,le),window.removeEventListener("test",null,le)}catch{Q=!1}return R=Q}()&&{passive:!1};document.addEventListener(H.moveEvent,H.moveHandler,Z),document.addEventListener(H.upEvent,H.upHandler,Z),x({type:s.columnStartResizing,columnId:L.id,columnWidth:L.totalWidth,headerIdWidths:b,clientX:K})};return[l,{onMouseDown:function(C){return C.persist()||y(C,g)},onTouchStart:function(C){return C.persist()||y(C,g)},style:{cursor:"col-resize"},draggable:!1,role:"separator"}]};function Yg(l,f){if(f.type===s.init)return u({columnResizing:{columnWidths:{}}},l);if(f.type===s.resetResize)return u({},l,{columnResizing:{columnWidths:{}}});if(f.type===s.columnStartResizing){var p=f.clientX,g=f.columnId,x=f.columnWidth,y=f.headerIdWidths;return u({},l,{columnResizing:u({},l.columnResizing,{startX:p,headerIdWidths:y,columnWidth:x,isResizingColumn:g})})}if(f.type===s.columnResizing){var C=f.clientX,L=l.columnResizing,z=L.startX,b=L.columnWidth,K=L.headerIdWidths,W=(C-z)/b,G={};return(K===void 0?[]:K).forEach(function(F){var H=F[0],Z=F[1];G[H]=Math.max(Z+Z*W,0)}),u({},l,{columnResizing:u({},l.columnResizing,{columnWidths:u({},l.columnResizing.columnWidths,{},G)})})}return f.type===s.columnDoneResizing?u({},l,{columnResizing:u({},l.columnResizing,{startX:null,isResizingColumn:null})}):void 0}uf.pluginName="useResizeColumns";var qg=function(l){var f=l.flatHeaders,p=l.disableResizing,g=l.getHooks,x=l.state.columnResizing,y=w(l);f.forEach(function(C){var L=X(C.disableResizing!==!0&&void 0,p!==!0&&void 0,!0);C.canResize=L,C.width=x.columnWidths[C.id]||C.originalWidth||C.width,C.isResizing=x.isResizingColumn===C.id,L&&(C.getResizerProps=O(g().getResizerProps,{instance:y(),header:C}))})};function Kg(l){var f=l.plugins,p=l.dispatch,g=l.autoResetResize,x=g===void 0||g,y=l.columns;h(f,["useAbsoluteLayout"],"useResizeColumns");var C=w(x);M(function(){C()&&p({type:s.resetResize})},[y]);var L=r.useCallback(function(){return p({type:s.resetResize})},[p]);Object.assign(l,{resetResizing:L})}var Zu={position:"absolute",top:0},lf=function(l){l.getTableBodyProps.push(ci),l.getRowProps.push(ci),l.getHeaderGroupProps.push(ci),l.getFooterGroupProps.push(ci),l.getHeaderProps.push(function(f,p){var g=p.column;return[f,{style:u({},Zu,{left:g.totalLeft+"px",width:g.totalWidth+"px"})}]}),l.getCellProps.push(function(f,p){var g=p.cell;return[f,{style:u({},Zu,{left:g.column.totalLeft+"px",width:g.column.totalWidth+"px"})}]}),l.getFooterProps.push(function(f,p){var g=p.column;return[f,{style:u({},Zu,{left:g.totalLeft+"px",width:g.totalWidth+"px"})}]})};lf.pluginName="useAbsoluteLayout";var ci=function(l,f){return[l,{style:{position:"relative",width:f.instance.totalColumnsWidth+"px"}}]},el={display:"inline-block",boxSizing:"border-box"},tl=function(l,f){return[l,{style:{display:"flex",width:f.instance.totalColumnsWidth+"px"}}]},af=function(l){l.getRowProps.push(tl),l.getHeaderGroupProps.push(tl),l.getFooterGroupProps.push(tl),l.getHeaderProps.push(function(f,p){var g=p.column;return[f,{style:u({},el,{width:g.totalWidth+"px"})}]}),l.getCellProps.push(function(f,p){var g=p.cell;return[f,{style:u({},el,{width:g.column.totalWidth+"px"})}]}),l.getFooterProps.push(function(f,p){var g=p.column;return[f,{style:u({},el,{width:g.totalWidth+"px"})}]})};function sf(l){l.getTableProps.push(Qg),l.getRowProps.push(nl),l.getHeaderGroupProps.push(nl),l.getFooterGroupProps.push(nl),l.getHeaderProps.push(Xg),l.getCellProps.push(Jg),l.getFooterProps.push(Zg)}af.pluginName="useBlockLayout",sf.pluginName="useFlexLayout";var Qg=function(l,f){return[l,{style:{minWidth:f.instance.totalColumnsMinWidth+"px"}}]},nl=function(l,f){return[l,{style:{display:"flex",flex:"1 0 auto",minWidth:f.instance.totalColumnsMinWidth+"px"}}]},Xg=function(l,f){var p=f.column;return[l,{style:{boxSizing:"border-box",flex:p.totalFlexWidth?p.totalFlexWidth+" 0 auto":void 0,minWidth:p.totalMinWidth+"px",width:p.totalWidth+"px"}}]},Jg=function(l,f){var p=f.cell;return[l,{style:{boxSizing:"border-box",flex:p.column.totalFlexWidth+" 0 auto",minWidth:p.column.totalMinWidth+"px",width:p.column.totalWidth+"px"}}]},Zg=function(l,f){var p=f.column;return[l,{style:{boxSizing:"border-box",flex:p.totalFlexWidth?p.totalFlexWidth+" 0 auto":void 0,minWidth:p.totalMinWidth+"px",width:p.totalWidth+"px"}}]};function cf(l){l.stateReducers.push(ny),l.getTableProps.push(ey),l.getHeaderProps.push(ty)}cf.pluginName="useGridLayout";var ey=function(l,f){return[l,{style:{display:"grid",gridTemplateColumns:f.instance.state.gridLayout.columnWidths.map(function(p){return p}).join(" ")}}]},ty=function(l,f){return[l,{id:"header-cell-"+f.column.id,style:{position:"sticky"}}]};function ny(l,f,p,g){if(f.type==="init")return u({gridLayout:{columnWidths:g.columns.map(function(){return"auto"})}},l);if(f.type==="columnStartResizing"){var x=f.columnId,y=g.visibleColumns.findIndex(function(F){return F.id===x}),C=function(F){var H,Z=(H=document.getElementById("header-cell-"+F))==null?void 0:H.offsetWidth;if(Z!==void 0)return Z}(x);return C!==void 0?u({},l,{gridLayout:u({},l.gridLayout,{columnId:x,columnIndex:y,startingWidth:C})}):l}if(f.type==="columnResizing"){var L=l.gridLayout,z=L.columnIndex,b=L.startingWidth,K=L.columnWidths,W=b-(l.columnResizing.startX-f.clientX),G=[].concat(K);return G[z]=W+"px",u({},l,{gridLayout:u({},l.gridLayout,{columnWidths:G})})}}n._UNSTABLE_usePivotColumns=Jc,n.actions=s,n.defaultColumn=S,n.defaultGroupByFn=Gc,n.defaultOrderByFn=Qc,n.defaultRenderer=m,n.emptyRenderer=E,n.ensurePluginOrder=h,n.flexRender=j,n.functionalUpdate=v,n.loopHooks=d,n.makePropGetter=O,n.makeRenderer=I,n.reduceHooks=T,n.safeUseLayoutEffect=_,n.useAbsoluteLayout=lf,n.useAsyncDebounce=function(l,f){f===void 0&&(f=0);var p=r.useRef({}),g=w(l),x=w(f);return r.useCallback(function(){var y=i(regeneratorRuntime.mark(function C(){var L,z,b,K=arguments;return regeneratorRuntime.wrap(function(W){for(;;)switch(W.prev=W.next){case 0:for(L=K.length,z=new Array(L),b=0;b1?f-1:0),g=1;g=X?ee:""+Array(X+1-oe.length).join(B)+ee},_={s:w,z:function(ee){var X=-ee.utcOffset(),B=Math.abs(X),oe=Math.floor(B/60),te=B%60;return(X<=0?"+":"-")+w(oe,2,"0")+":"+w(te,2,"0")},m:function ee(X,B){if(X.date()0,I<=M.r||!M.r){I<=1&&_>0&&(M=v[_-1]);var j=h[M.l];P&&(I=P(""+I)),T=typeof j=="string"?j.replace("%d",I):j(I,m,M.l,d);break}}if(m)return T;var V=d?h.future:h.past;return typeof V=="function"?V(T):V.replace("%s",T)},i.to=function(s,m){return a(s,m,this,!0)},i.from=function(s,m){return a(s,m,this)};var c=function(s){return s.$u?o.utc():o()};i.toNow=function(s){return this.to(c(this),s)},i.fromNow=function(s){return this.from(c(this),s)}}})})(jm);var zP=jm.exports,XR={exports:{}};(function(e,t){(function(n,r){e.exports=r(_c.exports)})(vi,function(n){function r(u){return u&&typeof u=="object"&&"default"in u?u:{default:u}}var o=r(n),i={name:"zh-cn",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u5468\u65E5_\u5468\u4E00_\u5468\u4E8C_\u5468\u4E09_\u5468\u56DB_\u5468\u4E94_\u5468\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:function(u,a){switch(a){case"W":return u+"\u5468";default:return u+"\u65E5"}},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5Ah\u70B9mm\u5206",LLLL:"YYYY\u5E74M\u6708D\u65E5ddddAh\u70B9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5185",past:"%s\u524D",s:"\u51E0\u79D2",m:"1 \u5206\u949F",mm:"%d \u5206\u949F",h:"1 \u5C0F\u65F6",hh:"%d \u5C0F\u65F6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4E2A\u6708",MM:"%d \u4E2A\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:function(u,a){var c=100*u+a;return c<600?"\u51CC\u6668":c<900?"\u65E9\u4E0A":c<1100?"\u4E0A\u5348":c<1300?"\u4E2D\u5348":c<1800?"\u4E0B\u5348":"\u665A\u4E0A"}};return o.default.locale(i,null,!0),i})})(XR);var JR=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},ZR=function(){function e(t,n){for(var r=0;r div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',I=_.head||_.getElementsByTagName("head")[0],j=_.createElement("style");j.id="detectElementResize",j.type="text/css",e!=null&&j.setAttribute("nonce",e),j.styleSheet?j.styleSheet.cssText=M:j.appendChild(_.createTextNode(M)),I.appendChild(j)}},h=function(_,M){if(c)_.attachEvent("onresize",M);else{if(!_.__resizeTriggers__){var I=_.ownerDocument,j=It.getComputedStyle(_);j&&j.position==="static"&&(_.style.position="relative"),d(I),_.__resizeLast__={},_.__resizeListeners__=[],(_.__resizeTriggers__=I.createElement("div")).className="resize-triggers";var V=I.createElement("div");V.className="expand-trigger",V.appendChild(I.createElement("div"));var U=I.createElement("div");U.className="contract-trigger",_.__resizeTriggers__.appendChild(V),_.__resizeTriggers__.appendChild(U),_.appendChild(_.__resizeTriggers__),u(_),_.addEventListener("scroll",a,!0),r&&(_.__resizeTriggers__.__animationListener__=function(xe){xe.animationName===n&&u(_)},_.__resizeTriggers__.addEventListener(r,_.__resizeTriggers__.__animationListener__))}_.__resizeListeners__.push(M)}},v=function(_,M){if(c)_.detachEvent("onresize",M);else if(_.__resizeListeners__.splice(_.__resizeListeners__.indexOf(M),1),!_.__resizeListeners__.length){_.removeEventListener("scroll",a,!0),_.__resizeTriggers__.__animationListener__&&(_.__resizeTriggers__.removeEventListener(r,_.__resizeTriggers__.__animationListener__),_.__resizeTriggers__.__animationListener__=null);try{_.__resizeTriggers__=!_.removeChild(_.__resizeTriggers__)}catch{}}};return{addResizeListener:h,removeResizeListener:v}}var oP=function(e){tP(t,e);function t(){var n,r,o,i;JR(this,t);for(var u=arguments.length,a=Array(u),c=0;c=t?e.call(null):o.id=requestAnimationFrame(r)}var o={id:requestAnimationFrame(r)};return o}var Hr=null;function qm(e){if(e===void 0&&(e=!1),Hr===null||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?Hr="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?Hr="negative":Hr="positive-ascending"),document.body.removeChild(t),Hr}return Hr}var cP=150,fP=function(t,n){return t};function dP(e){var t,n,r=e.getItemOffset,o=e.getEstimatedTotalSize,i=e.getItemSize,u=e.getOffsetForIndexAndAlignment,a=e.getStartIndexForOffset,c=e.getStopIndexForStartIndex,s=e.initInstanceProps,m=e.shouldResetStyleCacheOnItemSizeChange,E=e.validateProps;return n=t=function(S){iP(P,S);function P(T){var d;return d=S.call(this,T)||this,d._instanceProps=s(d.props,Xu(Xu(d))),d._outerRef=void 0,d._resetIsScrollingTimeoutId=null,d.state={instance:Xu(Xu(d)),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof d.props.initialScrollOffset=="number"?d.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},d._callOnItemsRendered=void 0,d._callOnItemsRendered=Oc(function(h,v,w,_){return d.props.onItemsRendered({overscanStartIndex:h,overscanStopIndex:v,visibleStartIndex:w,visibleStopIndex:_})}),d._callOnScroll=void 0,d._callOnScroll=Oc(function(h,v,w){return d.props.onScroll({scrollDirection:h,scrollOffset:v,scrollUpdateWasRequested:w})}),d._getItemStyle=void 0,d._getItemStyle=function(h){var v=d.props,w=v.direction,_=v.itemSize,M=v.layout,I=d._getItemStyleCache(m&&_,m&&M,m&&w),j;if(I.hasOwnProperty(h))j=I[h];else{var V=r(d.props,h,d._instanceProps),U=i(d.props,h,d._instanceProps),re=w==="horizontal"||M==="horizontal",xe=w==="rtl",ke=re?V:0;I[h]=j={position:"absolute",left:xe?void 0:ke,right:xe?ke:void 0,top:re?0:V,height:re?"100%":U,width:re?U:"100%"}}return j},d._getItemStyleCache=void 0,d._getItemStyleCache=Oc(function(h,v,w){return{}}),d._onScrollHorizontal=function(h){var v=h.currentTarget,w=v.clientWidth,_=v.scrollLeft,M=v.scrollWidth;d.setState(function(I){if(I.scrollOffset===_)return null;var j=d.props.direction,V=_;if(j==="rtl")switch(qm()){case"negative":V=-_;break;case"positive-descending":V=M-w-_;break}return V=Math.max(0,Math.min(V,M-w)),{isScrolling:!0,scrollDirection:I.scrollOffset<_?"forward":"backward",scrollOffset:V,scrollUpdateWasRequested:!1}},d._resetIsScrollingDebounced)},d._onScrollVertical=function(h){var v=h.currentTarget,w=v.clientHeight,_=v.scrollHeight,M=v.scrollTop;d.setState(function(I){if(I.scrollOffset===M)return null;var j=Math.max(0,Math.min(M,_-w));return{isScrolling:!0,scrollDirection:I.scrollOffset0)for(var $=A;$<=N;$++)D.push(Y.exports.createElement(h,{data:U,key:xe($,U),index:$,isScrolling:oe?se:void 0,style:this._getItemStyle($)}));var J=o(this.props,this._instanceProps);return Y.exports.createElement(ee||X||"div",{className:v,onScroll:k,ref:this._outerRefSetter,style:Wo({position:"relative",height:_,width:te,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:w},B)},Y.exports.createElement(I||j||"div",{children:D,ref:M,style:{height:ae?"100%":J,pointerEvents:se?"none":void 0,width:ae?J:"100%"}}))},O._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var d=this.props.itemCount;if(d>0){var h=this._getRangeToRender(),v=h[0],w=h[1],_=h[2],M=h[3];this._callOnItemsRendered(v,w,_,M)}}if(typeof this.props.onScroll=="function"){var I=this.state,j=I.scrollDirection,V=I.scrollOffset,U=I.scrollUpdateWasRequested;this._callOnScroll(j,V,U)}},O._getRangeToRender=function(){var d=this.props,h=d.itemCount,v=d.overscanCount,w=this.state,_=w.isScrolling,M=w.scrollDirection,I=w.scrollOffset;if(h===0)return[0,0,0,0];var j=a(this.props,I,this._instanceProps),V=c(this.props,j,I,this._instanceProps),U=!_||M==="backward"?Math.max(1,v):1,re=!_||M==="forward"?Math.max(1,v):1;return[Math.max(0,j-U),Math.max(0,Math.min(h-1,V+re)),j,V]},P}(Y.exports.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},n}var pP=function(t,n){t.children,t.direction,t.height,t.layout,t.innerTagName,t.outerTagName,t.width,n.instance},$P=dP({getItemOffset:function(t,n){var r=t.itemSize;return n*r},getItemSize:function(t,n){var r=t.itemSize;return r},getEstimatedTotalSize:function(t){var n=t.itemCount,r=t.itemSize;return r*n},getOffsetForIndexAndAlignment:function(t,n,r,o){var i=t.direction,u=t.height,a=t.itemCount,c=t.itemSize,s=t.layout,m=t.width,E=i==="horizontal"||s==="horizontal",S=E?m:u,P=Math.max(0,a*c-S),O=Math.min(P,n*c),T=Math.max(0,n*c-S+c);switch(r==="smart"&&(o>=T-S&&o<=O+S?r="auto":r="center"),r){case"start":return O;case"end":return T;case"center":{var d=Math.round(T+(O-T)/2);return dP+Math.floor(S/2)?P:d}case"auto":default:return o>=T&&o<=O?o:o - - - - - - - - - Clash - - - - - - -
- - - diff --git a/luci-app-openclash/root/usr/share/openclash/dashboard/manifest.webmanifest b/luci-app-openclash/root/usr/share/openclash/dashboard/manifest.webmanifest deleted file mode 100644 index c5d30fdb..00000000 --- a/luci-app-openclash/root/usr/share/openclash/dashboard/manifest.webmanifest +++ /dev/null @@ -1 +0,0 @@ -{"name":"Clash Dashboard","short_name":"Clash Dashboard","start_url":"/","display":"standalone","background_color":"#ffffff","lang":"en","scope":"./","icons":[{"src":"//cdn.jsdelivr.net/gh/Dreamacro/clash-dashboard/src/assets/Icon.png","sizes":"512x512","type":"image/png"}]} diff --git a/luci-app-openclash/root/usr/share/openclash/dashboard/sw.js b/luci-app-openclash/root/usr/share/openclash/dashboard/sw.js deleted file mode 100644 index 95c7c117..00000000 --- a/luci-app-openclash/root/usr/share/openclash/dashboard/sw.js +++ /dev/null @@ -1 +0,0 @@ -if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),d={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>d[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-b7e829be"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.049e98b9.js",revision:null},{url:"assets/index.760643c8.css",revision:null},{url:"assets/vendor.e882027f.js",revision:null},{url:"index.html",revision:"4e8629bf048d1d7a769b0e0678133f08"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))})); diff --git a/luci-app-openclash/root/usr/share/openclash/dashboard/workbox-b7e829be.js b/luci-app-openclash/root/usr/share/openclash/dashboard/workbox-b7e829be.js deleted file mode 100644 index f903a21f..00000000 --- a/luci-app-openclash/root/usr/share/openclash/dashboard/workbox-b7e829be.js +++ /dev/null @@ -1 +0,0 @@ -define(["exports"],(function(t){"use strict";try{self["workbox:core:6.4.1"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:6.4.1"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)}),e,s)}}class o{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)))}}))}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n}))),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let c;const a=()=>(c||(c=new o,c.addFetchListener(),c.addCacheListener()),c);function h(t,e,n){let o;if("string"==typeof t){const s=new URL(t,location.href);o=new i((({url:t})=>t.href===s.href),e,n)}else if(t instanceof RegExp)o=new r(t,e,n);else if("function"==typeof t)o=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});o=t}return a().registerRoute(o),o}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter((t=>t&&t.length>0)).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.4.1"]&&_()}catch(t){}function p(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class y{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class g{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let R;async function m(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===R){const t=new Response("");if("body"in t)try{new Response(t.body),R=!0}catch(t){R=!1}R=!1}return R}()?i.body:await i.blob();return new Response(c,o)}function v(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class q{constructor(){this.promise=new Promise(((t,e)=>{this.resolve=t,this.reject=e}))}}const U=new Set;try{self["workbox:strategies:6.4.1"]&&_()}catch(t){}function L(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new q,this.g=[],this.R=[...t.plugins],this.m=new Map;for(const t of this.R)this.m.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=L(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=L(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=L(t);var i;await(i=0,new Promise((t=>setTimeout(t,i))));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.v(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=v(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===v(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of U)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=L(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.m.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.g.push(t),t}async doneWaiting(){let t;for(;t=this.g.shift();)await t}destroy(){this.p.resolve(null)}async v(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class C extends class{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.q(i,s,e);return[r,this.U(r,i,s,e)]}async q(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this.L(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async U(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this._=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async L(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.C(t,e):await this.O(t,e))}async O(t,e){let n;const i=e.params||{};if(!this._)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:r||s})),s&&o&&(this.N(),await e.cachePut(t,n.clone()))}return n}async C(t,e){this.N();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}N(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await m(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.P=new Map,this.l=new C({cacheName:f(t),plugins:[...e,new g({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.T||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.T=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=p(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.P.has(t)&&this.P.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.P.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return d(t,(async()=>{const e=new y;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.P.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(t){return d(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.P.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends i{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}}),t.strategy)}}t.NavigationRoute=class extends i{constructor(t,{allowlist:e=[/./],denylist:s=[]}={}){super((t=>this.W(t)),t),this.j=e,this.M=s}W({url:t,request:e}){if(e&&"navigate"!==e.mode)return!1;const s=t.pathname+t.search;for(const t of this.M)if(t.test(s))return!1;return!!this.j.some((t=>t.test(s)))}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",(t=>{const e=f();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter((s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t));return await Promise.all(s.map((t=>self.caches.delete(t)))),s})(e).then((t=>{})))}))},t.createHandlerBoundToURL=function(t){return x().createHandlerBoundToURL(t)},t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),function(t){const e=x();h(new N(e,t))}(e)},t.registerRoute=h})); diff --git a/luci-app-openclash/root/usr/share/openclash/log.sh b/luci-app-openclash/root/usr/share/openclash/log.sh deleted file mode 100644 index 6cec7831..00000000 --- a/luci-app-openclash/root/usr/share/openclash/log.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -START_LOG="/tmp/openclash_start.log" -LOG_FILE="/tmp/openclash.log" - -LOG_OUT() -{ - if [ -n "${1}" ]; then - echo -e "${1}" > $START_LOG - echo -e "$(date "+%Y-%m-%d %H:%M:%S") ${1}" >> $LOG_FILE - fi -} - -LOG_ALERT() -{ - echo -e "$(tail -n 20 $LOG_FILE |grep 'level=fatal' |awk 'END {print}')" > $START_LOG - sleep 3 -} - -SLOG_CLEAN() -{ - echo "" > $START_LOG -} \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash.sh b/luci-app-openclash/root/usr/share/openclash/openclash.sh deleted file mode 100644 index bbfe74ec..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash.sh +++ /dev/null @@ -1,527 +0,0 @@ -#!/bin/bash -. /lib/functions.sh -. /usr/share/openclash/ruby.sh -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/log.sh - -set_lock() { - exec 889>"/tmp/lock/openclash_subs.lock" 2>/dev/null - flock -x 889 2>/dev/null -} - -del_lock() { - flock -u 889 2>/dev/null - rm -rf "/tmp/lock/openclash_subs.lock" -} - -LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) -LOG_FILE="/tmp/openclash.log" -CFG_FILE="/tmp/config.yaml" -CRON_FILE="/etc/crontabs/root" -CONFIG_PATH=$(uci -q get openclash.config.config_path) -servers_update=$(uci -q get openclash.config.servers_update) -dns_port=$(uci -q get openclash.config.dns_port) -enable_redirect_dns=$(uci -q get openclash.config.enable_redirect_dns) -disable_masq_cache=$(uci -q get openclash.config.disable_masq_cache) -default_resolvfile=$(uci -q get openclash.config.default_resolvfile) -if_restart=0 -only_download=0 -set_lock - -urlencode() { - local data - if [ "$#" -eq 1 ]; then - data=$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "$1" "") - if [ ! -z "$data" ]; then - echo "$(echo ${data##/?} |sed 's/\//%2f/g' |sed 's/:/%3a/g' |sed 's/?/%3f/g' |sed 's/(/%28/g' |sed 's/)/%29/g' |sed 's/\^/%5e/g' |sed 's/=/%3d/g' |sed 's/|/%7c/g' |sed 's/+/%20/g')" - fi - fi -} - -kill_watchdog() { - watchdog_pids=$(unify_ps_pids "openclash_watchdog.sh") - for watchdog_pid in $watchdog_pids; do - kill -9 "$watchdog_pid" >/dev/null 2>&1 - done -} - -config_download() -{ -if [ -n "$subscribe_url_param" ]; then - if [ -n "$c_address" ]; then - curl -sL --connect-timeout 10 --retry 2 -H 'User-Agent: Clash' "$c_address""$subscribe_url_param" -o "$CFG_FILE" >/dev/null 2>&1 - else - curl -sL --connect-timeout 10 --retry 2 -H 'User-Agent: Clash' https://api.dler.io/sub"$subscribe_url_param" -o "$CFG_FILE" >/dev/null 2>&1 - if [ "$?" -ne 0 ]; then - curl -sL --connect-timeout 10 --retry 2 -H 'User-Agent: Clash' https://subconverter.herokuapp.com/sub"$subscribe_url_param" -o "$CFG_FILE" >/dev/null 2>&1 - fi - fi -else - curl -sL --connect-timeout 10 --retry 2 -H 'User-Agent: Clash' "$subscribe_url" -o "$CFG_FILE" >/dev/null 2>&1 -fi -} - -config_cus_up() -{ - if [ -z "$CONFIG_PATH" ]; then - CONFIG_PATH="/etc/openclash/config/$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')" - uci -q set openclash.config.config_path="$CONFIG_PATH" - uci commit openclash - fi - if [ -z "$subscribe_url_param" ]; then - if [ -n "$key_match_param" ] || [ -n "$key_ex_match_param" ]; then - LOG_OUT "Config File【$name】is Replaced Successfully, Start Picking Nodes..." - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$CONFIG_FILE'); - if Value.has_key?('proxies') and not Value['proxies'].to_a.empty? then - Value['proxies'].reverse.each{ - |x| - if not '$key_match_param'.empty? then - if not /$key_match_param/i =~ x['name'] then - Value['proxies'].delete(x) - Value['proxy-groups'].each{ - |g| - g['proxies'].reverse.each{ - |p| - if p == x['name'] then - g['proxies'].delete(p) - end - } - } - end - end; - if not '$key_ex_match_param'.empty? then - if /$key_ex_match_param/i =~ x['name'] then - if Value['proxies'].include?(x) then - Value['proxies'].delete(x) - Value['proxy-groups'].each{ - |g| - g['proxies'].reverse.each{ - |p| - if p == x['name'] then - g['proxies'].delete(p) - end - } - } - end - end - end; - } - end; - rescue Exception => e - puts '${LOGTIME} Error: Filter Proxies Error,【' + e.message + '】' - ensure - File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)}; - end" 2>/dev/null >> $LOG_FILE - fi - if [ "$servers_update" -eq 1 ]; then - LOG_OUT "Config File【$name】is Replaced Successfully, Start to Reserving..." - uci -q set openclash.config.config_update_path="/etc/openclash/config/$name.yaml" - uci -q set openclash.config.servers_if_update=1 - uci commit openclash - /usr/share/openclash/yml_groups_get.sh - uci -q set openclash.config.servers_if_update=1 - uci commit openclash - /usr/share/openclash/yml_groups_set.sh - if [ "$CONFIG_FILE" == "$CONFIG_PATH" ]; then - if_restart=1 - fi - LOG_OUT "Config File【$name】Update Successful!" - sleep 3 - SLOG_CLEAN - elif [ "$CONFIG_FILE" == "$CONFIG_PATH" ]; then - LOG_OUT "Config File【$name】Update Successful!" - sleep 3 - if_restart=1 - else - LOG_OUT "Config File【$name】Update Successful!" - sleep 3 - SLOG_CLEAN - fi - else - if [ "$CONFIG_FILE" == "$CONFIG_PATH" ]; then - LOG_OUT "Config File【$name】Update Successful!" - sleep 3 - if_restart=1 - else - LOG_OUT "Config File【$name】Update Successful!" - sleep 3 - SLOG_CLEAN - fi - fi - - rm -rf /tmp/Proxy_Group 2>/dev/null -} - -config_su_check() -{ - LOG_OUT "Config File Download Successful, Check If There is Any Update..." - sed -i 's/! /!!str /g' "$CFG_FILE" >/dev/null 2>&1 - if [ -f "$CONFIG_FILE" ]; then - cmp -s "$BACKPACK_FILE" "$CFG_FILE" - if [ "$?" -ne 0 ]; then - LOG_OUT "Config File【$name】Are Updates, Start Replacing..." - cp "$CFG_FILE" "$BACKPACK_FILE" - #保留规则部分 - if [ "$servers_update" -eq 1 ] && [ "$only_download" -eq 0 ]; then - ruby -ryaml -E UTF-8 -e " - Value = YAML.load_file('$CONFIG_FILE'); - Value_1 = YAML.load_file('$CFG_FILE'); - if Value.key?('rules') or Value.key?('script') or Value.key?('rule-providers') then - if Value.key?('rules') then - Value_1['rules'] = Value['rules'] - end; - if Value.key?('script') then - Value_1['script'] = Value['script'] - end; - if Value.key?('rule-providers') then - Value_1['rule-providers'] = Value['rule-providers'] - end; - File.open('$CFG_FILE','w') {|f| YAML.dump(Value_1, f)}; - end; - " 2>/dev/null - fi - mv "$CFG_FILE" "$CONFIG_FILE" 2>/dev/null - if [ "$only_download" -eq 0 ]; then - config_cus_up - else - LOG_OUT "Config File【$name】Update Successful!" - sleep 3 - SLOG_CLEAN - fi - else - LOG_OUT "Config File【$name】No Change, Do Nothing!" - rm -rf "$CFG_FILE" - sleep 3 - SLOG_CLEAN - fi - else - LOG_OUT "Config File【$name】Download Successful, Start To Create..." - mv "$CFG_FILE" "$CONFIG_FILE" 2>/dev/null - cp "$CONFIG_FILE" "$BACKPACK_FILE" - if [ "$only_download" -eq 0 ]; then - config_cus_up - else - LOG_OUT "Config File【$name】Update Successful!" - sleep 3 - SLOG_CLEAN - fi - fi -} - -config_error() -{ - LOG_OUT "Error:【$name】Update Error, Please Try Again Later..." - rm -rf "$CFG_FILE" 2>/dev/null - sleep 3 - SLOG_CLEAN -} - -change_dns() -{ - if pidof clash >/dev/null; then - if [ "$enable_redirect_dns" -ne 0 ]; then - uci -q del dhcp.@dnsmasq[-1].server - uci -q add_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" - uci -q delete dhcp.@dnsmasq[0].resolvfile - uci -q set dhcp.@dnsmasq[0].noresolv=1 - [ "$disable_masq_cache" -eq 1 ] && { - uci -q set dhcp.@dnsmasq[0].cachesize=0 - } - uci commit dhcp - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - fi - iptables -t nat -D OUTPUT -j openclash_output >/dev/null 2>&1 - iptables -t mangle -D OUTPUT -j openclash_output >/dev/null 2>&1 - iptables -t nat -I OUTPUT -j openclash_output >/dev/null 2>&1 - iptables -t mangle -I OUTPUT -j openclash_output >/dev/null 2>&1 - [ "$(unify_ps_status "openclash_watchdog.sh")" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && nohup /usr/share/openclash/openclash_watchdog.sh & - fi -} - -field_name_check() -{ - #检查field名称(不兼容旧写法) - ruby -ryaml -E UTF-8 -e " - Value = YAML.load_file('$CFG_FILE'); - if Value.key?('Proxy') or Value.key?('Proxy Group') or Value.key?('Rule') or Value.key?('rule-provider') then - if Value.key?('Proxy') then - Value['proxies'] = Value['Proxy'] - Value.delete('Proxy') - puts '${LOGTIME} Warning: Proxy is no longer used. Auto replaced by proxies' - end - if Value.key?('Proxy Group') then - Value['proxy-groups'] = Value['Proxy Group'] - Value.delete('Proxy Group') - puts '${LOGTIME} Warning: Proxy Group is no longer used. Auto replaced by proxy-groups' - end - if Value.key?('Rule') then - Value['rules'] = Value['Rule'] - Value.delete('Rule') - puts '${LOGTIME} Warning: Rule is no longer used. Auto replaced by rules' - end - if Value.key?('rule-provider') then - Value['rule-providers'] = Value['rule-provider'] - Value.delete('rule-provider') - puts '${LOGTIME} Warning: rule-provider is no longer used. Auto replaced by rule-providers' - end; - File.open('$CFG_FILE','w') {|f| YAML.dump(Value, f)}; - end; - " 2>/dev/null >> $LOG_FILE -} - -config_download_direct() -{ - if pidof clash >/dev/null; then - - kill_watchdog - if [ "$enable_redirect_dns" -ne 0 ]; then - uci -q del_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" - if [ -n "$default_resolvfile" ]; then - uci -q set dhcp.@dnsmasq[0].resolvfile="$default_resolvfile" - elif [ -s "/tmp/resolv.conf.d/resolv.conf.auto" ] && [ -n "$(grep "nameserver" /tmp/resolv.conf.d/resolv.conf.auto)" ]; then - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto - elif [ -s "/tmp/resolv.conf.auto" ] && [ -n "$(grep "nameserver" /tmp/resolv.conf.auto)" ]; then - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto - else - rm -rf /tmp/resolv.conf.auto 2>/dev/null - touch /tmp/resolv.conf.auto 2>/dev/null - cat >> "/tmp/resolv.conf.auto" <<-EOF -# Interface lan -nameserver 114.114.114.114 -nameserver 119.29.29.29 -EOF - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto - fi - uci -q set dhcp.@dnsmasq[0].noresolv=0 - uci -q delete dhcp.@dnsmasq[0].cachesize - uci commit dhcp - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - fi - iptables -t nat -D OUTPUT -j openclash_output >/dev/null 2>&1 - iptables -t mangle -D OUTPUT -j openclash_output >/dev/null 2>&1 - sleep 3 - - config_download - - if [ "$?" -eq 0 ] && [ -s "$CFG_FILE" ]; then - ruby -ryaml -E UTF-8 -e " - begin - YAML.load_file('$CFG_FILE'); - rescue Exception => e - puts '${LOGTIME} Error: Unable To Parse Config File,【' + e.message + '】' - system 'rm -rf ${CFG_FILE} 2>/dev/null' - end - " 2>/dev/null >> $LOG_FILE - if [ $? -ne 0 ]; then - LOG_OUT "Error: Ruby Works Abnormally, Please Check The Ruby Library Depends!" - sleep 3 - only_download=1 - change_dns - config_su_check - elif [ ! -f "$CFG_FILE" ]; then - LOG_OUT "Config File Format Validation Failed..." - sleep 3 - change_dns - config_error - elif ! "$(ruby_read "$CFG_FILE" ".key?('proxies')")" && ! "$(ruby_read "$CFG_FILE" ".key?('proxy-providers')")" ; then - field_name_check - if ! "$(ruby_read "$CFG_FILE" ".key?('proxies')")" && ! "$(ruby_read "$CFG_FILE" ".key?('proxy-providers')")" ; then - LOG_OUT "Error: Updated Config【$name】Has No Proxy Field, Update Exit..." - sleep 3 - change_dns - config_error - else - change_dns - config_su_check - fi - else - change_dns - config_su_check - fi - else - change_dns - config_error - fi - else - config_error - fi -} - -server_key_match() -{ - local key_match key_word - - if [ -n "$(echo "$1" |grep "^ \{0,\}$")" ] || [ -n "$(echo "$1" |grep "^\t\{0,\}$")" ]; then - return - fi - - if [ -n "$(echo "$1" |grep "&")" ]; then - key_word=$(echo "$1" |sed 's/&/ /g') - for k in $key_word - do - if [ -z "$k" ]; then - continue - fi - k="(?=.*$k)" - key_match="$key_match$k" - done - key_match="^($key_match).*" - else - if [ -n "$1" ]; then - key_match="($1)" - fi - fi - - if [ "$2" = "keyword" ]; then - if [ -z "$key_match_param" ]; then - key_match_param="$key_match" - else - key_match_param="$key_match_param|$key_match" - fi - elif [ "$2" = "ex_keyword" ]; then - if [ -z "$key_ex_match_param" ]; then - key_ex_match_param="$key_match" - else - key_ex_match_param="$key_ex_match_param|$key_match" - fi - fi -} - -sub_info_get() -{ - local section="$1" subscribe_url template_path subscribe_url_param template_path_encode key_match_param key_ex_match_param c_address de_ex_keyword - config_get_bool "enabled" "$section" "enabled" "1" - config_get "name" "$section" "name" "" - config_get "sub_convert" "$section" "sub_convert" "" - config_get "address" "$section" "address" "" - config_get "keyword" "$section" "keyword" "" - config_get "ex_keyword" "$section" "ex_keyword" "" - config_get "emoji" "$section" "emoji" "" - config_get "udp" "$section" "udp" "" - config_get "skip_cert_verify" "$section" "skip_cert_verify" "" - config_get "sort" "$section" "sort" "" - config_get "convert_address" "$section" "convert_address" "" - config_get "template" "$section" "template" "" - config_get "node_type" "$section" "node_type" "" - config_get "custom_template_url" "$section" "custom_template_url" "" - config_get "de_ex_keyword" "$section" "de_ex_keyword" "" - - - - if [ "$enabled" -eq 0 ]; then - return - fi - - if [ -z "$address" ]; then - return - fi - - if [ "$udp" == "true" ]; then - udp="udp=true" - else - udp="" - fi - - if [ -z "$name" ]; then - name="config" - CONFIG_FILE="/etc/openclash/config/config.yaml" - BACKPACK_FILE="/etc/openclash/backup/config.yaml" - else - CONFIG_FILE="/etc/openclash/config/$name.yaml" - BACKPACK_FILE="/etc/openclash/backup/$name.yaml" - fi - - if [ ! -z "$keyword" ] || [ ! -z "$ex_keyword" ]; then - config_list_foreach "$section" "keyword" server_key_match "keyword" - config_list_foreach "$section" "ex_keyword" server_key_match "ex_keyword" - fi - - if [ -n "$de_ex_keyword" ]; then - for i in $de_ex_keyword; - do - if [ -z "$key_ex_match_param" ]; then - key_ex_match_param="($i)" - else - key_ex_match_param="$key_ex_match_param|($i)" - fi - done - fi - - if [ "$sub_convert" -eq 0 ]; then - subscribe_url=$address - elif [ "$sub_convert" -eq 1 ] && [ -n "$template" ]; then - subscribe_url=$(urlencode "$address") - if [ "$template" != "0" ]; then - template_path=$(grep "^$template," /usr/share/openclash/res/sub_ini.list |awk -F ',' '{print $3}' 2>/dev/null) - else - template_path=$custom_template_url - fi - if [ -n "$template_path" ]; then - template_path_encode=$(urlencode "$template_path") - [ -n "$key_match_param" ] && key_match_param="(?i)$(urlencode "$key_match_param")" - [ -n "$key_ex_match_param" ] && key_ex_match_param="(?i)$(urlencode "$key_ex_match_param")" - subscribe_url_param="?target=clash&new_name=true&url=$subscribe_url&config=$template_path_encode&include=$key_match_param&exclude=$key_ex_match_param&emoji=$emoji&list=false&sort=$sort&$udp&scv=$skip_cert_verify&append_type=$node_type&fdn=true&expand=false" - c_address="$convert_address" - else - subscribe_url=$address - fi - else - subscribe_url=$address - fi - - LOG_OUT "Start Updating Config File【$name】..." - - config_download - - if [ "$?" -eq 0 ] && [ -s "$CFG_FILE" ]; then - ruby -ryaml -E UTF-8 -e " - begin - YAML.load_file('$CFG_FILE'); - rescue Exception => e - puts '${LOGTIME} Error: Unable To Parse Config File,【' + e.message + '】' - system 'rm -rf ${CFG_FILE} 2>/dev/null' - end - " 2>/dev/null >> $LOG_FILE - if [ $? -ne 0 ]; then - LOG_OUT "Error: Ruby Works Abnormally, Please Check The Ruby Library Depends!" - sleep 3 - only_download=1 - config_su_check - elif [ ! -f "$CFG_FILE" ]; then - LOG_OUT "Config File Format Validation Failed, Trying To Download Without Agent..." - sleep 3 - config_download_direct - elif ! "$(ruby_read "$CFG_FILE" ".key?('proxies')")" && ! "$(ruby_read "$CFG_FILE" ".key?('proxy-providers')")" ; then - field_name_check - if ! "$(ruby_read "$CFG_FILE" ".key?('proxies')")" && ! "$(ruby_read "$CFG_FILE" ".key?('proxy-providers')")" ; then - LOG_OUT "Error: Updated Config【$name】Has No Proxy Field, Trying To Download Without Agent..." - sleep 3 - config_download_direct - else - config_su_check - fi - else - config_su_check - fi - else - LOG_OUT "Error: Config File【$name】Subscribed Failed, Trying to Download Without Agent..." - config_download_direct - fi -} - -#分别获取订阅信息进行处理 -config_load "openclash" -config_foreach sub_info_get "config_subscribe" -uci -q delete openclash.config.config_update_path -uci commit openclash - -if [ "$if_restart" -eq 1 ]; then - /etc/init.d/openclash restart >/dev/null 2>&1 & -else - sed -i '/openclash.sh/d' $CRON_FILE 2>/dev/null - [ "$(uci -q get openclash.config.auto_update)" -eq 1 ] && [ "$(uci -q get openclash.config.config_auto_update_mode)" -ne 1 ] && echo "0 $(uci -q get openclash.config.auto_update_time) * * $(uci -q get openclash.config.config_update_week_time) /usr/share/openclash/openclash.sh" >> $CRON_FILE - /etc/init.d/cron restart -fi -del_lock diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_chnroute.sh b/luci-app-openclash/root/usr/share/openclash/openclash_chnroute.sh deleted file mode 100644 index b54663ee..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_chnroute.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/log.sh - - set_lock() { - exec 879>"/tmp/lock/openclash_chn.lock" 2>/dev/null - flock -x 879 2>/dev/null - } - - del_lock() { - flock -u 879 2>/dev/null - rm -rf "/tmp/lock/openclash_chn.lock" - } - - china_ip_route=$(uci get openclash.config.china_ip_route 2>/dev/null) - china_ip6_route=$(uci get openclash.config.china_ip6_route 2>/dev/null) - CHNR_CUSTOM_URL=$(uci get openclash.config.chnr_custom_url 2>/dev/null) - CHNR6_CUSTOM_URL=$(uci get openclash.config.chnr6_custom_url 2>/dev/null) - disable_udp_quic=$(uci get openclash.config.disable_udp_quic 2>/dev/null) - small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null) - set_lock - - if [ "$small_flash_memory" != "1" ]; then - chnr_path="/etc/openclash/china_ip_route.ipset" - chnr6_path="/etc/openclash/china_ip6_route.ipset" - mkdir -p /etc/openclash - else - chnr_path="/tmp/etc/openclash/china_ip_route.ipset" - chnr6_path="/tmp/etc/openclash/china_ip6_route.ipset" - mkdir -p /tmp/etc/openclash - fi - - LOG_OUT "Start Downloading The Chnroute Cidr List..." - if [ -z "$CHNR_CUSTOM_URL" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://ispip.clang.cn/all_cn.txt -o /tmp/china_ip_route.txt >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://ispip.clang.cn/all_cn_cidr.txt -o /tmp/china_ip_route.txt >/dev/null 2>&1 - fi - else - curl -sL --connect-timeout 10 --retry 2 "$CHNR_CUSTOM_URL" -o /tmp/china_ip_route.txt >/dev/null 2>&1 - fi - if [ "$?" -eq "0" ] && [ -s "/tmp/china_ip_route.txt" ]; then - LOG_OUT "Chnroute Cidr List Download Success, Check Updated..." - #预处理 - echo "create china_ip_route hash:net family inet hashsize 1024 maxelem 1000000" >/tmp/china_ip_route.list - awk '!/^$/&&!/^#/{printf("add china_ip_route %s'" "'\n",$0)}' /tmp/china_ip_route.txt >>/tmp/china_ip_route.list - cmp -s /tmp/china_ip_route.list "$chnr_path" - if [ "$?" -ne "0" ]; then - LOG_OUT "Chnroute Cidr List Has Been Updated, Starting To Replace The Old Version..." - mv /tmp/china_ip_route.list "$chnr_path" >/dev/null 2>&1 - if [ "$china_ip_route" -eq 1 ] || [ "$disable_udp_quic" -eq 1 ]; then - [ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart >/dev/null 2>&1 & - fi - LOG_OUT "Chnroute Cidr List Update Successful!" - sleep 3 - else - LOG_OUT "Updated Chnroute Cidr List No Change, Do Nothing..." - sleep 3 - fi - else - LOG_OUT "Chnroute Cidr List Update Error, Please Try Again Later..." - sleep 3 - fi - - #ipv6 - LOG_OUT "Start Downloading The Chnroute6 Cidr List..." - if [ -z "$CHNR6_CUSTOM_URL" ]; then - curl -sL --connect-timeout 10 --retry 2 https://ispip.clang.cn/all_cn_ipv6.txt -o /tmp/china_ip6_route.txt >/dev/null 2>&1 - else - curl -sL --connect-timeout 10 --retry 2 "$CHNR6_CUSTOM_URL" -o /tmp/china_ip6_route.txt >/dev/null 2>&1 - fi - if [ "$?" -eq "0" ] && [ -s "/tmp/china_ip6_route.txt" ]; then - LOG_OUT "Chnroute6 Cidr List Download Success, Check Updated..." - #预处理 - echo "create china_ip6_route hash:net family inet6 hashsize 1024 maxelem 1000000" >/tmp/china_ip6_route.list - awk '!/^$/&&!/^#/{printf("add china_ip6_route %s'" "'\n",$0)}' /tmp/china_ip6_route.txt >>/tmp/china_ip6_route.list - cmp -s /tmp/china_ip6_route.list "$chnr6_path" - if [ "$?" -ne "0" ]; then - LOG_OUT "Chnroute6 Cidr List Has Been Updated, Starting To Replace The Old Version..." - mv /tmp/china_ip6_route.list "$chnr6_path" >/dev/null 2>&1 - if [ "$china_ip6_route" -eq 1 ] || [ "$disable_udp_quic" -eq 1 ]; then - [ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart >/dev/null 2>&1 & - fi - LOG_OUT "Chnroute6 Cidr List Update Successful!" - sleep 3 - else - LOG_OUT "Updated Chnroute6 Cidr List No Change, Do Nothing..." - sleep 3 - fi - else - LOG_OUT "Chnroute6 Cidr List Update Error, Please Try Again Later..." - sleep 3 - fi - rm -rf /tmp/china_ip*_route* >/dev/null 2>&1 - SLOG_CLEAN - del_lock diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_core.sh b/luci-app-openclash/root/usr/share/openclash/openclash_core.sh deleted file mode 100644 index 08585a48..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_core.sh +++ /dev/null @@ -1,177 +0,0 @@ -#!/bin/sh -. /lib/functions.sh -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/log.sh - -CORE_TYPE="$1" -C_CORE_TYPE=$(uci get openclash.config.core_type 2>/dev/null) -[ -z "$CORE_TYPE" ] || [ "$1" = "one_key_update" ] && CORE_TYPE="Dev" -small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null) -CPU_MODEL=$(uci get openclash.config.core_version 2>/dev/null) -RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master") - -[ ! -f "/tmp/clash_last_version" ] && /usr/share/openclash/clash_version.sh 2>/dev/null -if [ ! -f "/tmp/clash_last_version" ]; then - LOG_OUT "Error: 【"$CORE_TYPE"】Core Version Check Error, Please Try Again Later..." - sleep 3 - SLOG_CLEAN - exit 0 -fi - -if [ "$small_flash_memory" != "1" ]; then - dev_core_path="/etc/openclash/core/clash" - tun_core_path="/etc/openclash/core/clash_tun" - mkdir -p /etc/openclash/core -else - dev_core_path="/tmp/etc/openclash/core/clash" - tun_core_path="/tmp/etc/openclash/core/clash_tun" - mkdir -p /tmp/etc/openclash/core -fi - -case $CORE_TYPE in - "TUN") - CORE_CV=$($tun_core_path -v 2>/dev/null |awk -F ' ' '{print $2}') - CORE_LV=$(sed -n 2p /tmp/clash_last_version 2>/dev/null) - if [ -z "$CORE_LV" ]; then - LOG_OUT "Error: 【"$CORE_TYPE"】Core Version Check Error, Please Try Again Later..." - sleep 3 - SLOG_CLEAN - exit 0 - fi - ;; - *) - CORE_CV=$($dev_core_path -v 2>/dev/null |awk -F ' ' '{print $2}') - CORE_LV=$(sed -n 1p /tmp/clash_last_version 2>/dev/null) -esac - -[ "$C_CORE_TYPE" = "$CORE_TYPE" ] || [ -z "$C_CORE_TYPE" ] && if_restart=1 -[ -n "$2" ] || [ "$1" = "one_key_update" ] && if_restart=0 - -if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then - if [ "$CPU_MODEL" != 0 ]; then - if [ "$RELEASE_BRANCH" = "dev" ]; then - case $CORE_TYPE in - "TUN") - LOG_OUT "【Tun】Core Downloading, Please Try to Download and Upload Manually If Fails" - curl -sL -m 10 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1 - ;; - *) - LOG_OUT "【Dev】Core Downloading, Please Try to Download and Upload Manually If Fails" - curl -sL -m 10 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1 - esac - else - if pidof clash >/dev/null; then - case $CORE_TYPE in - "TUN") - LOG_OUT "【Tun】Core Downloading, Please Try to Download and Upload Manually If Fails" - curl -sL -m 10 --retry 2 https://github.com/vernesong/OpenClash/releases/download/TUN-Premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1 - ;; - *) - LOG_OUT "【Dev】Core Downloading, Please Try to Download and Upload Manually If Fails" - curl -sL -m 10 --retry 2 https://github.com/vernesong/OpenClash/releases/download/Clash/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1 - esac - fi - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - case $CORE_TYPE in - "TUN") - LOG_OUT "【Tun】Core Downloading, Please Try to Download and Upload Manually If Fails" - curl -sL -m 10 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1 - ;; - *) - LOG_OUT "【Dev】Core Downloading, Please Try to Download and Upload Manually If Fails" - curl -sL -m 10 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1 - esac - fi - - if [ "$?" -eq "0" ]; then - LOG_OUT "【"$CORE_TYPE"】Core Download Successful, Start Update..." - case $CORE_TYPE in - "TUN") - [ -s "/tmp/clash_tun.gz" ] && { - gzip -d /tmp/clash_tun.gz >/dev/null 2>&1 - rm -rf /tmp/clash_tun.gz >/dev/null 2>&1 - rm -rf "$tun_core_path" >/dev/null 2>&1 - chmod 4755 /tmp/clash_tun >/dev/null 2>&1 - } - ;; - *) - [ -s "/tmp/clash.tar.gz" ] && { - rm -rf "$dev_core_path" >/dev/null 2>&1 - if [ "$small_flash_memory" != "1" ]; then - tar zxvf /tmp/clash.tar.gz -C /etc/openclash/core - else - tar zxvf /tmp/clash.tar.gz -C /tmp/etc/openclash/core - fi - rm -rf /tmp/clash.tar.gz >/dev/null 2>&1 - chmod 4755 "$dev_core_path" >/dev/null 2>&1 - } - esac - if [ "$?" -ne "0" ]; then - LOG_OUT "【"$CORE_TYPE"】Core Update Failed, Please Check The Network or Try Again Later!" - case $CORE_TYPE in - "TUN") - rm -rf /tmp/clash_tun >/dev/null 2>&1 - ;; - *) - esac - sleep 3 - SLOG_CLEAN - exit 0 - fi - - if [ "$if_restart" -eq 1 ]; then - clash_pids=$(pidof clash|sed 's/$//g') - for clash_pid in $clash_pids; do - kill -9 "$clash_pid" 2>/dev/null - done - fi - - case $CORE_TYPE in - "TUN") - mv /tmp/clash_tun "$tun_core_path" >/dev/null 2>&1 - ;; - *) - esac - if [ "$?" -eq "0" ]; then - LOG_OUT "【"$CORE_TYPE"】Core Update Successful!" - sleep 3 - if [ -n "$2" ] || [ "$1" = "one_key_update" ]; then - uci set openclash.config.config_reload=0 - uci commit openclash - fi - [ "$if_restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart - SLOG_CLEAN - else - LOG_OUT "【"$CORE_TYPE"】Core Update Failed. Please Make Sure Enough Flash Memory Space And Try Again!" - case $CORE_TYPE in - "TUN") - rm -rf /tmp/clash_tun >/dev/null 2>&1 - ;; - *) - esac - sleep 3 - SLOG_CLEAN - fi - else - LOG_OUT "【"$CORE_TYPE"】Core Update Failed, Please Check The Network or Try Again Later!" - case $CORE_TYPE in - "TUN") - rm -rf /tmp/clash_tun >/dev/null 2>&1 - ;; - *) - rm -rf /tmp/clash >/dev/null 2>&1 - esac - sleep 3 - SLOG_CLEAN - fi - else - LOG_OUT "No Compiled Version Selected, Please Select In Global Settings And Try Again!" - sleep 3 - SLOG_CLEAN - fi -else - LOG_OUT "【"$CORE_TYPE"】Core Has Not Been Updated, Stop Continuing Operation!" - sleep 3 - SLOG_CLEAN -fi diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_custom_domain_dns.sh b/luci-app-openclash/root/usr/share/openclash/openclash_custom_domain_dns.sh deleted file mode 100644 index ab220fbd..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_custom_domain_dns.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/log.sh - -set_lock() { - exec 883>"/tmp/lock/openclash_cus_domian.lock" 2>/dev/null - flock -x 883 2>/dev/null -} - -del_lock() { - flock -u 883 2>/dev/null - rm -rf "/tmp/lock/openclash_cus_domian.lock" -} - -set_lock - -rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_custom_domain.conf >/dev/null 2>&1 -if [ "$(uci get openclash.config.dns_advanced_setting 2>/dev/null)" -eq 1 ]; then - LOG_OUT "Setting Secondary DNS Server List..." - - custom_domain_dns_server=$(uci get openclash.config.custom_domain_dns_server 2>/dev/null) - [ -z "$custom_domain_dns_server" ] && { - custom_domain_dns_server="114.114.114.114" - } - - if [ -s "/etc/openclash/custom/openclash_custom_domain_dns.list" ]; then - mkdir -p /tmp/dnsmasq.d - awk -v tag="$custom_domain_dns_server" '!/^$/&&!/^#/{printf("server=/%s/"'tag'"\n",$0)}' /etc/openclash/custom/openclash_custom_domain_dns.list >>/tmp/dnsmasq.d/dnsmasq_openclash_custom_domain.conf 2>/dev/null - fi -fi - -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_debug.sh b/luci-app-openclash/root/usr/share/openclash/openclash_debug.sh deleted file mode 100644 index eff891a7..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_debug.sh +++ /dev/null @@ -1,386 +0,0 @@ -#!/bin/bash -. /lib/functions.sh -. /usr/share/openclash/ruby.sh - -set_lock() { - exec 885>"/tmp/lock/openclash_debug.lock" 2>/dev/null - flock -x 885 2>/dev/null -} - -del_lock() { - flock -u 885 2>/dev/null - rm -rf "/tmp/lock/openclash_debug.lock" -} - -DEBUG_LOG="/tmp/openclash_debug.log" -LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) -uci -q commit openclash -set_lock - -enable_custom_dns=$(uci -q get openclash.config.enable_custom_dns) -rule_source=$(uci -q get openclash.config.rule_source) -enable_custom_clash_rules=$(uci -q get openclash.config.enable_custom_clash_rules) -ipv6_enable=$(uci -q get openclash.config.ipv6_enable) -ipv6_dns=$(uci -q get openclash.config.ipv6_dns) -enable_redirect_dns=$(uci -q get openclash.config.enable_redirect_dns) -disable_masq_cache=$(uci -q get openclash.config.disable_masq_cache) -proxy_mode=$(uci -q get openclash.config.proxy_mode) -intranet_allowed=$(uci -q get openclash.config.intranet_allowed) -enable_udp_proxy=$(uci -q get openclash.config.enable_udp_proxy) -enable_rule_proxy=$(uci -q get openclash.config.enable_rule_proxy) -en_mode=$(uci -q get openclash.config.en_mode) -RAW_CONFIG_FILE=$(uci -q get openclash.config.config_path) -CONFIG_FILE="/etc/openclash/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)" -core_type=$(uci -q get openclash.config.core_version) -cpu_model=$(opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null) -core_version=$(/etc/openclash/core/clash -v 2>/dev/null |awk -F ' ' '{print $2}' 2>/dev/null) -core_tun_version=$(/etc/openclash/core/clash_tun -v 2>/dev/null |awk -F ' ' '{print $2}' 2>/dev/null) -servers_update=$(uci -q get openclash.config.servers_update) -mix_proxies=$(uci -q get openclash.config.mix_proxies) -op_version=$(sed -n 1p /usr/share/openclash/res/openclash_version) -china_ip_route=$(uci -q get openclash.config.china_ip_route) -common_ports=$(uci -q get openclash.config.common_ports) -dns_remote=$(uci -q -q get openclash.config.dns_remote) - -if [ -z "$RAW_CONFIG_FILE" ] || [ ! -f "$RAW_CONFIG_FILE" ]; then - CONFIG_NAME=$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}') - if [ ! -z "$CONFIG_NAME" ]; then - RAW_CONFIG_FILE="/etc/openclash/config/$CONFIG_NAME" - CONFIG_FILE="/etc/openclash/$CONFIG_NAME" - fi -fi - -ts_cf() -{ - if [ "$1" != 1 ]; then - echo "停用" - else - echo "启用" - fi -} - -ts_re() -{ - if [ -z "$1" ]; then - echo "未安装" - else - echo "已安装" - fi -} - -echo "OpenClash 调试日志" > "$DEBUG_LOG" -cat >> "$DEBUG_LOG" <<-EOF - -生成时间: $LOGTIME -插件版本: $op_version -隐私提示: 上传此日志前请注意检查、屏蔽公网IP、节点、密码等相关敏感信息 - -\`\`\` -EOF - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 系统信息 =====================# - -主机型号: $(cat /tmp/sysinfo/model 2>/dev/null) -固件版本: $(cat /usr/lib/os-release 2>/dev/null |grep OPENWRT_RELEASE 2>/dev/null |awk -F '"' '{print $2}' 2>/dev/null) -LuCI版本: $(opkg status luci 2>/dev/null |grep 'Version' |awk -F ': ' '{print $2}' 2>/dev/null) -内核版本: $(uname -r 2>/dev/null) -处理器架构: $cpu_model - -#此项有值时,如不使用IPv6,建议到网络-接口-lan的设置中禁用IPV6的DHCP -IPV6-DHCP: $(uci -q get dhcp.lan.dhcpv6) - -#此项结果应仅有配置文件的DNS监听地址 -Dnsmasq转发设置: $(uci -q get dhcp.@dnsmasq[0].server) -EOF - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 依赖检查 =====================# - -dnsmasq-full: $(ts_re "$(opkg status dnsmasq-full 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -coreutils: $(ts_re "$(opkg status coreutils 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -coreutils-nohup: $(ts_re "$(opkg status coreutils-nohup 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -bash: $(ts_re "$(opkg status bash 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -curl: $(ts_re "$(opkg status curl 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -ca-certificates: $(ts_re "$(opkg status ca-certificates 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -ipset: $(ts_re "$(opkg status ipset 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -ip-full: $(ts_re "$(opkg status ip-full 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -iptables-mod-tproxy: $(ts_re "$(opkg status iptables-mod-tproxy 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -kmod-ipt-tproxy: $(ts_re "$(opkg status kmod-ipt-tproxy 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -iptables-mod-extra: $(ts_re "$(opkg status iptables-mod-extra 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -kmod-ipt-extra: $(ts_re "$(opkg status kmod-ipt-extra 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -libcap: $(ts_re "$(opkg status libcap 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -libcap-bin: $(ts_re "$(opkg status libcap-bin 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -ruby: $(ts_re "$(opkg status ruby 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -ruby-yaml: $(ts_re "$(opkg status ruby-yaml 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -ruby-psych: $(ts_re "$(opkg status ruby-psych 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -ruby-pstore: $(ts_re "$(opkg status ruby-pstore 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -ruby-dbm: $(ts_re "$(opkg status ruby-dbm 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -kmod-tun(TUN模式): $(ts_re "$(opkg status kmod-tun 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -luci-compat(Luci-19.07): $(ts_re "$(opkg status luci-compat 2>/dev/null |grep 'Status' |awk -F ': ' '{print $2}' 2>/dev/null)") -EOF - -#core -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 内核检查 =====================# - -EOF -if pidof clash >/dev/null; then -cat >> "$DEBUG_LOG" <<-EOF -运行状态: 运行中 -进程pid: $(pidof clash) -运行权限: `getpcaps $(pidof clash)` -运行用户: $(ps |grep "/etc/openclash/clash" |grep -v grep |awk '{print $2}' 2>/dev/null) -EOF -else -cat >> "$DEBUG_LOG" <<-EOF -运行状态: 未运行 -EOF -fi -if [ "$core_type" = "0" ]; then - core_type="未选择架构" -fi -cat >> "$DEBUG_LOG" <<-EOF -已选择的架构: $core_type - -#下方无法显示内核版本号时请确认您的内核版本是否正确或者有无权限 -EOF - -cat >> "$DEBUG_LOG" <<-EOF -Tun内核版本: $core_tun_version -EOF -if [ ! -f "/etc/openclash/core/clash_tun" ]; then -cat >> "$DEBUG_LOG" <<-EOF -Tun内核文件: 不存在 -EOF -else -cat >> "$DEBUG_LOG" <<-EOF -Tun内核文件: 存在 -EOF -fi -if [ ! -x "/etc/openclash/core/clash_tun" ]; then -cat >> "$DEBUG_LOG" <<-EOF -Tun内核运行权限: 否 -EOF -else -cat >> "$DEBUG_LOG" <<-EOF -Tun内核运行权限: 正常 -EOF -fi - -cat >> "$DEBUG_LOG" <<-EOF - -Dev内核版本: $core_version -EOF -if [ ! -f "/etc/openclash/core/clash" ]; then -cat >> "$DEBUG_LOG" <<-EOF -Dev内核文件: 不存在 -EOF -else -cat >> "$DEBUG_LOG" <<-EOF -Dev内核文件: 存在 -EOF -fi -if [ ! -x "/etc/openclash/core/clash" ]; then -cat >> "$DEBUG_LOG" <<-EOF -Dev内核运行权限: 否 -EOF -else -cat >> "$DEBUG_LOG" <<-EOF -Dev内核运行权限: 正常 -EOF -fi - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 插件设置 =====================# - -当前配置文件: $RAW_CONFIG_FILE -启动配置文件: $CONFIG_FILE -运行模式: $en_mode -默认代理模式: $proxy_mode -UDP流量转发(tproxy): $(ts_cf "$enable_udp_proxy") -DNS劫持: $(ts_cf "$enable_redirect_dns") -自定义DNS: $(ts_cf "$enable_custom_dns") -IPV6代理: $(ts_cf "$ipv6_enable") -IPV6-DNS解析: $(ts_cf "$ipv6_dns") -禁用Dnsmasq缓存: $(ts_cf "$disable_masq_cache") -自定义规则: $(ts_cf "$enable_custom_clash_rules") -仅允许内网: $(ts_cf "$intranet_allowed") -仅代理命中规则流量: $(ts_cf "$enable_rule_proxy") -仅允许常用端口流量: $(ts_cf "$common_ports") -绕过中国大陆IP: $(ts_cf "$china_ip_route") -DNS远程解析: $(ts_cf "$dns_remote") - -#启动异常时建议关闭此项后重试 -混合节点: $(ts_cf "$mix_proxies") -保留配置: $(ts_cf "$servers_update") -EOF - -cat >> "$DEBUG_LOG" <<-EOF - -#启动异常时建议关闭此项后重试 -第三方规则: $(ts_cf "$rule_source") -EOF - - -if [ "$enable_custom_clash_rules" -eq 1 ]; then -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 自定义规则 一 =====================# -EOF -cat /etc/openclash/custom/openclash_custom_rules.list >> "$DEBUG_LOG" - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 自定义规则 二 =====================# -EOF -cat /etc/openclash/custom/openclash_custom_rules_2.list >> "$DEBUG_LOG" -fi - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 配置文件 =====================# - -EOF -if [ -f "$CONFIG_FILE" ]; then - ruby_read "$CONFIG_FILE" ".select {|x| 'proxies' != x and 'proxy-providers' != x }.to_yaml" 2>/dev/null >> "$DEBUG_LOG" -else - ruby_read "$RAW_CONFIG_FILE" ".select {|x| 'proxies' != x and 'proxy-providers' != x }.to_yaml" 2>/dev/null >> "$DEBUG_LOG" -fi - -sed -i '/^ \{0,\}secret:/d' "$DEBUG_LOG" 2>/dev/null - -#firewall -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 防火墙设置 =====================# - -#IPv4 NAT chain - -EOF -iptables-save -t nat >> "$DEBUG_LOG" 2>/dev/null - -cat >> "$DEBUG_LOG" <<-EOF - -#IPv4 Mangle chain - -EOF -iptables-save -t mangle >> "$DEBUG_LOG" 2>/dev/null - -cat >> "$DEBUG_LOG" <<-EOF - -#IPv6 NAT chain - -EOF -ip6tables-save -t nat >> "$DEBUG_LOG" 2>/dev/null - -cat >> "$DEBUG_LOG" <<-EOF - -#IPv6 Mangle chain - -EOF -ip6tables-save -t mangle >> "$DEBUG_LOG" 2>/dev/null - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== IPSET状态 =====================# - -EOF -ipset list |grep "Name:" >> "$DEBUG_LOG" - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 路由表状态 =====================# - -EOF -echo "#route -n" >> "$DEBUG_LOG" -route -n >> "$DEBUG_LOG" 2>/dev/null -echo "#ip route list" >> "$DEBUG_LOG" -ip route list >> "$DEBUG_LOG" 2>/dev/null -echo "#ip rule show" >> "$DEBUG_LOG" -ip rule show >> "$DEBUG_LOG" 2>/dev/null - -if [ "$en_mode" != "fake-ip" ] && [ "$en_mode" != "redir-host" ]; then -cat >> "$DEBUG_LOG" <<-EOF - -#===================== Tun设备状态 =====================# - -EOF -ip tuntap list >> "$DEBUG_LOG" 2>/dev/null -fi - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 端口占用状态 =====================# - -EOF -netstat -nlp |grep clash >> "$DEBUG_LOG" 2>/dev/null - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 测试本机DNS查询 =====================# - -EOF -nslookup www.baidu.com >> "$DEBUG_LOG" 2>/dev/null - -if [ -s "/tmp/resolv.conf.auto" ]; then -cat >> "$DEBUG_LOG" <<-EOF - -#===================== resolv.conf.auto =====================# - -EOF -cat /tmp/resolv.conf.auto >> "$DEBUG_LOG" -fi - -if [ -s "/tmp/resolv.conf.d/resolv.conf.auto" ]; then -cat >> "$DEBUG_LOG" <<-EOF - -#===================== resolv.conf.d =====================# - -EOF -cat /tmp/resolv.conf.d/resolv.conf.auto >> "$DEBUG_LOG" -fi - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 测试本机网络连接 =====================# - -EOF -curl -I -m 5 www.baidu.com >> "$DEBUG_LOG" 2>/dev/null - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 测试本机网络下载 =====================# - -EOF -VERSION_URL="https://raw.githubusercontent.com/vernesong/OpenClash/master/version" -if pidof clash >/dev/null; then - curl -IL -m 3 --retry 2 "$VERSION_URL" >> "$DEBUG_LOG" 2>/dev/null -else - curl -IL -m 3 --retry 2 "$VERSION_URL" >> "$DEBUG_LOG" 2>/dev/null -fi - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 最近运行日志 =====================# - -EOF -tail -n 50 "/tmp/openclash.log" >> "$DEBUG_LOG" 2>/dev/null - -cat >> "$DEBUG_LOG" <<-EOF - -#===================== 活动连接信息 =====================# - -EOF -/usr/share/openclash/openclash_debug_getcon.lua - -cat >> "$DEBUG_LOG" <<-EOF - -\`\`\` -EOF - -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_debug_getcon.lua b/luci-app-openclash/root/usr/share/openclash/openclash_debug_getcon.lua deleted file mode 100644 index 008962f6..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_debug_getcon.lua +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/lua - -require "nixio" -require "luci.util" -require "luci.sys" -local uci = require("luci.model.uci").cursor() -local fs = require "luci.openclash" -local json = require "luci.jsonc" -local datatype = require "luci.cbi.datatypes" -local addr = arg[1] - -local function s(e) -local t=0 -local a={' KB',' MB',' GB',' TB'} -repeat -e=e/1024 -t=t+1 -until(e<=1024) -return string.format("%.1f",e)..a[t] -end - -local function debug_getcon() - local info, ip, host, diag_info - ip = luci.sys.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'") - if not ip or ip == "" then - ip = luci.sys.exec("ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'") - end - local port = uci:get("openclash", "config", "cn_port") - local passwd = uci:get("openclash", "config", "dashboard_password") or "" - if ip and port then - info = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/connections', passwd, ip, port)) - if info then - info = json.parse(info) - end - if info then - for i = 1, #(info.connections) do - if info.connections[i].metadata.host == "" then - host = "Empty" - else - host = info.connections[i].metadata.host - end - if not addr then - luci.sys.exec(string.format('echo "%s. SourceIP:【%s】 - Host:【%s】 - DestinationIP:【%s】 - Network:【%s】 - RulePayload:【%s】 - Lastchain:【%s】" >> /tmp/openclash_debug.log', i, (info.connections[i].metadata.sourceIP), host, (info.connections[i].metadata.destinationIP), (info.connections[i].metadata.network), (info.connections[i].rulePayload),(info.connections[i].chains[1]))) - elseif addr == "netflix-nflxvideo" then - if string.match(host, "nflxvideo.net") or string.match(host, "amazonaws.com") then - print(host) - end - else - if datatype.hostname(addr) and string.lower(addr) == host or datatype.ipaddr(addr) and addr == (info.connections[i].metadata.destinationIP) then - print("id: "..(info.connections[i].id)) - print("start: "..(info.connections[i].start)) - print("download: "..s(info.connections[i].download)) - print("upload: "..s(info.connections[i].upload)) - print("rule: "..(info.connections[i].rule)) - print("rulePayload: "..(info.connections[i].rulePayload)) - print("chains: ") - for o = 1, #(info.connections[i].chains) do - print(" "..o..": "..(info.connections[i].chains[o])) - end - print("metadata: ") - print(" sourceIP: "..(info.connections[i].metadata.sourceIP)) - print(" sourcePort: "..(info.connections[i].metadata.sourcePort)) - print(" host: "..host) - print(" destinationIP: "..(info.connections[i].metadata.destinationIP)) - print(" destinationPort: "..(info.connections[i].metadata.destinationPort)) - print(" network: "..(info.connections[i].metadata.network)) - print(" type: "..(info.connections[i].metadata.type)) - print("") - end - end - end - end - end - os.exit(0) -end - -debug_getcon() \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_dler_checkin.lua b/luci-app-openclash/root/usr/share/openclash/openclash_dler_checkin.lua deleted file mode 100644 index 8e89dbfc..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_dler_checkin.lua +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/lua - -require "nixio" -require "luci.util" -require "luci.sys" -local uci = require("luci.model.uci").cursor() -local fs = require "luci.openclash" -local json = require "luci.jsonc" - -local function dler_checkin() - local info, path, checkin - local token = uci:get("openclash", "config", "dler_token") - local email = uci:get("openclash", "config", "dler_email") - local passwd = uci:get("openclash", "config", "dler_passwd") - local enable = uci:get("openclash", "config", "dler_checkin") or 0 - local interval = uci:get("openclash", "config", "dler_checkin_interval") or 1 - local multiple = uci:get("openclash", "config", "dler_checkin_multiple") or 1 - path = "/tmp/dler_checkin" - if token and email and passwd and enable == "1" then - checkin = string.format("curl -sL -H 'Content-Type: application/json' -d '{\"email\":\"%s\", \"passwd\":\"%s\", \"multiple\":\"%s\"}' -X POST https://dler.cloud/api/v1/checkin -o %s", email, passwd, multiple, path) - if not nixio.fs.access(path) then - luci.sys.exec(checkin) - else - if fs.readfile(path) == "" or not fs.readfile(path) then - luci.sys.exec(checkin) - else - if (os.time() - fs.mtime(path) > interval*3600+1) then - luci.sys.exec(checkin) - else - os.exit(0) - end - end - end - info = fs.readfile(path) - if info then - info = json.parse(info) - end - if info and info.ret == 200 then - luci.sys.exec(string.format('echo "%s Dler Cloud Checkin Successful, Result:【%s】" >> /tmp/openclash.log', os.date("%Y-%m-%d %H:%M:%S"), info.data.checkin)) - else - if info and info.msg then - luci.sys.exec(string.format('echo "%s Dler Cloud Checkin Failed, Result:【%s】" >> /tmp/openclash.log', os.date("%Y-%m-%d %H:%M:%S"), info.msg)) - else - luci.sys.exec(string.format('echo "%s Dler Cloud Checkin Failed! Please Check And Try Again..." >> /tmp/openclash.log', os.date("%Y-%m-%d %H:%M:%S"))) - end - end - end - os.exit(0) -end - -dler_checkin() \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_download_rule_list.sh b/luci-app-openclash/root/usr/share/openclash/openclash_download_rule_list.sh deleted file mode 100644 index 0a79d136..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_download_rule_list.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/log.sh -. /lib/functions.sh - -urlencode() { - local data - if [ "$#" -eq 1 ]; then - data=$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "$1" "") - if [ ! -z "$data" ]; then - echo "$(echo ${data##/?} |sed 's/\//%2f/g' |sed 's/:/%3a/g' |sed 's/?/%3f/g' |sed 's/(/%28/g' |sed 's/)/%29/g' |sed 's/\^/%5e/g' |sed 's/=/%3d/g' |sed 's/|/%7c/g' |sed 's/+/%20/g')" - fi - fi -} - - RULE_FILE_NAME="$1" - RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master") - if [ "$1" == "netflix_domains" ]; then - DOWNLOAD_PATH="https://raw.githubusercontent.com/vernesong/OpenClash/$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list" - DOWNLOAD_PATH2="https://cdn.jsdelivr.net/gh/vernesong/OpenClash@$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list" - RULE_FILE_DIR="/usr/share/openclash/res/Netflix_Domains.list" - RULE_FILE_NAME="Netflix_Domains" - RULE_TYPE="netflix" - elif [ "$1" == "disney_domains" ]; then - DOWNLOAD_PATH="https://raw.githubusercontent.com/vernesong/OpenClash/$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list" - DOWNLOAD_PATH2="https://cdn.jsdelivr.net/gh/vernesong/OpenClash@$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list" - RULE_FILE_DIR="/usr/share/openclash/res/Disney_Plus_Domains.list" - RULE_FILE_NAME="Disney_Plus_Domains" - RULE_TYPE="disney" - elif [ -z "$(grep "$RULE_FILE_NAME" /usr/share/openclash/res/rule_providers.list 2>/dev/null)" ]; then - DOWNLOAD_PATH=$(grep -F "$RULE_FILE_NAME" /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null) - RULE_FILE_DIR="/etc/openclash/game_rules/$RULE_FILE_NAME" - RULE_TYPE="game" - else - DOWNLOAD_PATH=$(echo "$RULE_FILE_NAME" |awk -F ',' '{print $1$2}' 2>/dev/null) - RULE_FILE_NAME=$(grep -F "$RULE_FILE_NAME" /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $NF}' 2>/dev/null) - RULE_FILE_DIR="/etc/openclash/rule_provider/$RULE_FILE_NAME" - RULE_TYPE="provider" - fi - - if [ -z "$DOWNLOAD_PATH" ]; then - LOG_OUT "Rule File【$RULE_FILE_NAME】Download Error!" && SLOG_CLEAN - return 0 - fi - - TMP_RULE_DIR="/tmp/$RULE_FILE_NAME" - TMP_RULE_DIR_TMP="/tmp/$RULE_FILE_NAME.tmp" - [ "$RULE_TYPE" != "netflix" ] && [ "$RULE_TYPE" != "disney" ] && DOWNLOAD_PATH=$(urlencode "$DOWNLOAD_PATH") - - if [ "$RULE_TYPE" = "netflix" ]; then - curl -sL --connect-timeout 5 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1 - if [ "$?" -ne "0" ]; then - curl -sL --connect-timeout 5 --retry 2 "$DOWNLOAD_PATH2" -o "$TMP_RULE_DIR" >/dev/null 2>&1 - fi - elif [ "$RULE_TYPE" = "disney" ]; then - curl -sL --connect-timeout 5 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1 - if [ "$?" -ne "0" ]; then - curl -sL --connect-timeout 5 --retry 2 "$DOWNLOAD_PATH2" -o "$TMP_RULE_DIR" >/dev/null 2>&1 - fi - elif [ "$RULE_TYPE" = "game" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 5 --retry 2 https://cdn.jsdelivr.net/gh/FQrabbit/SSTap-Rule@master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1 - fi - elif [ "$RULE_TYPE" = "provider" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 5 --retry 2 https://cdn.jsdelivr.net/gh/"$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" >/dev/null 2>&1 - fi - fi - - if [ "$?" -eq "0" ] && [ -s "$TMP_RULE_DIR" ] && [ -z "$(grep "404: Not Found" "$TMP_RULE_DIR")" ] && [ -z "$(grep "Package size exceeded the configured limit" "$TMP_RULE_DIR")" ]; then - if [ "$RULE_TYPE" = "game" ]; then - cat "$TMP_RULE_DIR" |sed '/^#/d' 2>/dev/null |sed '/^ *$/d' 2>/dev/null |awk '{print " - "$0}' > "$TMP_RULE_DIR_TMP" 2>/dev/null - sed -i '1i\payload:' "$TMP_RULE_DIR_TMP" 2>/dev/null - cmp -s "$TMP_RULE_DIR_TMP" "$RULE_FILE_DIR" - else - cmp -s "$TMP_RULE_DIR" "$RULE_FILE_DIR" - fi - if [ "$?" -ne "0" ]; then - if [ "$RULE_TYPE" = "game" ]; then - mv "$TMP_RULE_DIR_TMP" "$RULE_FILE_DIR" >/dev/null 2>&1 - else - mv "$TMP_RULE_DIR" "$RULE_FILE_DIR" >/dev/null 2>&1 - fi - rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1 - LOG_OUT "Rule File【$RULE_FILE_NAME】Download Successful!" && SLOG_CLEAN - return 1 - else - LOG_OUT "Rule File【$RULE_FILE_NAME】No Change, Do Nothing!" && SLOG_CLEAN - rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1 - rm -rf "$TMP_RULE_DIR_TMP" >/dev/null 2>&1 - return 2 - fi - else - rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1 - LOG_OUT "Rule File【$RULE_FILE_NAME】Download Error!" && SLOG_CLEAN - return 0 - fi \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_fake_filter.sh b/luci-app-openclash/root/usr/share/openclash/openclash_fake_filter.sh deleted file mode 100644 index 0de00c91..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_fake_filter.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -. /lib/functions.sh -. /usr/share/openclash/log.sh - -CUSTOM_FILE="/etc/openclash/custom/openclash_custom_fake_filter.list" -FAKE_FILTER_FILE="/tmp/openclash_fake_filter.list" -SER_FAKE_FILTER_FILE="/tmp/openclash_servers_fake_filter.conf" - -LOG_OUT "Setting Fake IP Filter..." - -rm -rf "$FAKE_FILTER_FILE" 2>/dev/null -if [ -s "$CUSTOM_FILE" ]; then - cat "$CUSTOM_FILE" |while read -r line || [[ -n ${line} ]]; - do - if [ -z "$(echo $line |grep '^ \{0,\}#' 2>/dev/null)" ]; then - echo " - '$line'" >> "$FAKE_FILTER_FILE" - else - continue - fi - done 2>/dev/null - if [ -s "$FAKE_FILTER_FILE" ]; then - sed -i '1i\fake-ip-filter:' "$FAKE_FILTER_FILE" - else - rm -rf "$FAKE_FILTER_FILE" 2>/dev/null - fi -fi - -cfg_server_address() -{ - local section="$1" - config_get "server" "$section" "server" "" - - IFIP=$(echo $server |grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" 2>/dev/null) - if [ -z "$IFIP" ] && [ ! -z "$server" ] && [ -z "$(grep "/$server/" "$SER_FAKE_FILTER_FILE" 2>/dev/null)" ]; then - echo "server=/$server/$custom_domain_dns_server" >> "$SER_FAKE_FILTER_FILE" - else - return - fi -} - -#Fake下正确检测节点延迟及获取真实地址 - -rm -rf "$SER_FAKE_FILTER_FILE" 2>/dev/null -custom_domain_dns_server=$(uci get openclash.config.custom_domain_dns_server 2>/dev/null) - [ -z "$custom_domain_dns_server" ] && { - custom_domain_dns_server="114.114.114.114" - } -config_load "openclash" -config_foreach cfg_server_address "servers" \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_get_network.lua b/luci-app-openclash/root/usr/share/openclash/openclash_get_network.lua deleted file mode 100644 index 81f43e2d..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_get_network.lua +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/lua - -require "nixio" -require "luci.util" -require "luci.sys" -local ntm = require "luci.model.network".init() -local type = arg[1] -local rv = {} -local wan, wan6 - -if not type then os.exit(0) end - -if pcall(function() local x = ntm:get_wannet(); local y = ntm:get_wan6net(); end) then - wan = {} - wan6 = {} - wan[1] = ntm:get_wannet() - wan6[1] = ntm:get_wan6net() -elseif pcall(function() local x = ntm:get_wan_networks(); local y = ntm:get_wan6_networks(); end) then - wan = ntm:get_wan_networks() - wan6 = ntm:get_wan6_networks() -else - os.exit(0) -end - -if wan then - rv.wan = {} - for i = 1, #wan do - rv.wan[i] = { - ipaddr = wan[i]:ipaddr(), - gwaddr = wan[i]:gwaddr(), - netmask = wan[i]:netmask(), - dns = wan[i]:dnsaddrs(), - expires = wan[i]:expires(), - uptime = wan[i]:uptime(), - proto = wan[i]:proto(), - ifname = wan[i]:ifname() - } - end -end - -if wan6 then - rv.wan6 = {} - for i = 1, #wan6 do - rv.wan6[i] = { - ip6addr = wan6[i]:ip6addr(), - gw6addr = wan6[i]:gw6addr(), - dns = wan6[i]:dns6addrs(), - ip6prefix = wan6[i]:ip6prefix(), - uptime = wan6[i]:uptime(), - proto = wan6[i]:proto(), - ifname = wan6[i]:ifname() - } - end -end - -if type == "dns" then - if wan then - for o = 1, #(rv.wan) do - for i = 1, #(rv.wan[o].dns) do - if rv.wan[o].dns[i] ~= rv.wan[o].gwaddr and rv.wan[o].dns[i] ~= rv.wan[o].ipaddr then - print(rv.wan[o].dns[i]) - end - end - print(rv.wan[o].gwaddr) - end - end -end - -if type == "dns6" then - if wan6 then - for o = 1, #(rv.wan6) do - for i = 1, #(rv.wan6[o].dns) do - if rv.wan6[o].dns[i] ~= rv.wan6[o].gw6addr and rv.wan6[o].ip6addr then - print(rv.wan6[o].dns[i]) - end - end - print(rv.wan6[o].gw6addr) - end - end -end - -if type == "gateway" then - if wan then - for o = 1, #(rv.wan) do - print(rv.wan[o].gwaddr) - end - end -end - -if type == "gateway6" then - if wan6 then - for o = 1, #(rv.wan6) do - print(rv.wan6[o].gw6addr) - end - end -end - -if type == "dhcp" then - if wan then - for o = 1, #(rv.wan) do - if rv.wan[o].proto == "dhcp" then - print(rv.wan[o].ifname) - end - end - end - if wan6 then - for o = 1, #(rv.wan6) do - if rv.wan6[o].proto == "dhcpv6" then - print(rv.wan6[o].ifname) - end - end - end -end - -if type == "wanip" then - if wan then - for o = 1, #(rv.wan) do - if rv.wan[o].proto == "pppoe" then - print(rv.wan[o].ipaddr) - end - end - end -end - -if type == "wanip6" then - if wan6 then - for o = 1, #(rv.wan6) do - if rv.wan6[o].proto == "pppoe" then - print(rv.wan6[o].ip6addr) - end - end - end -end - -os.exit(0) \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_history_get.sh b/luci-app-openclash/root/usr/share/openclash/openclash_history_get.sh deleted file mode 100644 index c37a8495..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_history_get.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh -. /lib/functions.sh -. /usr/share/openclash/openclash_ps.sh - -set_lock() { - exec 881>"/tmp/lock/openclash_history_get.lock" 2>/dev/null - flock -x 881 2>/dev/null -} - -del_lock() { - flock -u 881 2>/dev/null - rm -rf "/tmp/lock/openclash_history_get.lock" -} - -close_all_conection() { - SECRET=$(uci -q get openclash.config.dashboard_password) - LAN_IP=$(uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null || ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1) - PORT=$(uci -q get openclash.config.cn_port) - curl -m 2 -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X DELETE http://"$LAN_IP":"$PORT"/connections >/dev/null 2>&1 -} - -if [ "$1" = "close_all_conection" ]; then - close_all_conection - exit 0 -fi - -CONFIG_FILE=$(unify_ps_cfgname) -CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $4}' 2>/dev/null) -small_flash_memory=$(uci -q get openclash.config.small_flash_memory) -HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}" -HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db" -CACHE_PATH_OLD="/etc/openclash/.cache" -if [ "$small_flash_memory" != "1" ]; then - CACHE_PATH="/etc/openclash/cache.db" -else - CACHE_PATH="/tmp/etc/openclash/cache.db" -fi -set_lock - -if [ -z "$CONFIG_FILE" ] || [ ! -f "$CONFIG_FILE" ]; then - CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null) - CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) - HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}" - HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db" -fi - -if [ -n "$(pidof clash)" ] && [ -f "$CONFIG_FILE" ]; then - if [ -f "$CACHE_PATH" ]; then - cmp -s "$CACHE_PATH" "$HISTORY_PATH" - if [ "$?" -ne "0" ]; then - cp "$CACHE_PATH" "$HISTORY_PATH" 2>/dev/null - fi - fi - if [ -f "$CACHE_PATH_OLD" ]; then - cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD" - if [ "$?" -ne "0" ]; then - cp "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD" 2>/dev/null - fi - fi -fi - -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh b/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh deleted file mode 100644 index 5a951533..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/log.sh - - set_lock() { - exec 880>"/tmp/lock/openclash_ipdb.lock" 2>/dev/null - flock -x 880 2>/dev/null - } - - del_lock() { - flock -u 880 2>/dev/null - rm -rf "/tmp/lock/openclash_ipdb.lock" - } - - small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null) - GEOIP_CUSTOM_URL=$(uci get openclash.config.geo_custom_url 2>/dev/null) - set_lock - - if [ "$small_flash_memory" != "1" ]; then - geoip_path="/etc/openclash/Country.mmdb" - mkdir -p /etc/openclash - else - geoip_path="/tmp/etc/openclash/Country.mmdb" - mkdir -p /tmp/etc/openclash - fi - LOG_OUT "Start Downloading Geoip Database..." - if [ -z "$GEOIP_CUSTOM_URL" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb -o /tmp/Country.mmdb >/dev/null 2>&1 - fi - else - curl -sL --connect-timeout 10 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/Country.mmdb >/dev/null 2>&1 - fi - if [ "$?" -eq "0" ] && [ -s "/tmp/Country.mmdb" ]; then - LOG_OUT "Geoip Database Download Success, Check Updated..." - cmp -s /tmp/Country.mmdb "$geoip_path" - if [ "$?" -ne "0" ]; then - LOG_OUT "Geoip Database Has Been Updated, Starting To Replace The Old Version..." - mv /tmp/Country.mmdb "$geoip_path" >/dev/null 2>&1 - LOG_OUT "Geoip Database Update Successful!" - sleep 3 - [ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart >/dev/null 2>&1 & - else - LOG_OUT "Updated Geoip Database No Change, Do Nothing..." - sleep 3 - fi - else - LOG_OUT "Geoip Database Update Error, Please Try Again Later..." - sleep 3 - fi - rm -rf /tmp/Country.mmdb >/dev/null 2>&1 - SLOG_CLEAN - del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_ps.sh b/luci-app-openclash/root/usr/share/openclash/openclash_ps.sh deleted file mode 100644 index cfb4a8e6..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_ps.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -unify_ps_status() { - if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ];then - echo "$(ps -efw |grep -v grep |grep -c "$1")" - else - echo "$(ps -w |grep -v grep |grep -c "$1")" - fi -} - -unify_ps_pids() { - if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ];then - echo "$(ps -efw |grep "$1" |grep -v grep |awk '{print $2}' 2>/dev/null)" - else - echo "$(ps -w |grep "$1" |grep -v grep |awk '{print $1}' 2>/dev/null)" - fi -} - -unify_ps_prevent() { - if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ];then - echo "$(ps -efw |grep -v grep |grep -c "/etc/init.d/openclash")" - else - echo "$(ps -w |grep -v grep |grep -c "/etc/init.d/openclash")" - fi -} - -unify_ps_cfgname() { - if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ];then - echo "$(ps -efw |grep /etc/openclash/clash 2>/dev/null |grep -v grep |awk -F '-f ' '{print $2}' 2>/dev/null)" - else - echo "$(ps -w |grep /etc/openclash/clash 2>/dev/null |grep -v grep |awk -F '-f ' '{print $2}' 2>/dev/null)" - fi -} \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_rule.sh b/luci-app-openclash/root/usr/share/openclash/openclash_rule.sh deleted file mode 100644 index 114f10c3..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_rule.sh +++ /dev/null @@ -1,167 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/openclash_ps.sh -. /lib/functions.sh -. /usr/share/openclash/ruby.sh -. /usr/share/openclash/log.sh - - set_lock() { - exec 877>"/tmp/lock/openclash_rule.lock" 2>/dev/null - flock -x 877 2>/dev/null - } - - del_lock() { - flock -u 877 2>/dev/null - rm -rf "/tmp/lock/openclash_rule.lock" - } - - yml_other_rules_dl() - { - local section="$1" - local enabled config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ] || [ "$config" != "$2" ]; then - return - fi - - if [ -n "$rule_name" ]; then - LOG_OUT "Warrning: Multiple Other-Rules-Configurations Enabled, Ignore..." - return - fi - - config_get "rule_name" "$section" "rule_name" "" - - LOG_OUT "Start Downloading Third Party Rules in Use..." - if [ "$rule_name" = "lhie1" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1 - fi - sed -i '1i rules:' /tmp/rules.yaml - elif [ "$rule_name" = "ConnersHua" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/DivineEngine/Profiles@master/Clash/Outbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1 - fi - sed -i "s/# - RULE-SET,ChinaIP,DIRECT/- RULE-SET,ChinaIP,DIRECT/g" /tmp/rules.yaml 2>/dev/null - sed -i "s/- GEOIP,/#- GEOIP,/g" /tmp/rules.yaml 2>/dev/null - elif [ "$rule_name" = "ConnersHua_return" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/DivineEngine/Profiles@master/Clash/Inbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1 - fi - fi - if [ "$?" -eq "0" ] && [ -s "/tmp/rules.yaml" ]; then - LOG_OUT "Download Successful, Start Preprocessing Rule File..." - ruby -ryaml -E UTF-8 -e " - begin - YAML.load_file('/tmp/rules.yaml'); - rescue Exception => e - puts '${LOGTIME} Error: Unable To Parse Updated Rules File,【${rule_name}:' + e.message + '】' - system 'rm -rf /tmp/rules.yaml 2>/dev/null' - end - " 2>/dev/null >> $LOG_FILE - if [ $? -ne 0 ]; then - LOG_OUT "Error: Ruby Works Abnormally, Please Check The Ruby Library Depends!" - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - sleep 3 - SLOG_CLEAN - del_lock - exit 0 - elif [ ! -f "/tmp/rules.yaml" ]; then - LOG_OUT "Error:【$rule_name】Rule File Format Validation Failed, Please Try Again Later..." - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - sleep 3 - SLOG_CLEAN - del_lock - exit 0 - elif ! "$(ruby_read "/tmp/rules.yaml" ".key?('rules')")" ; then - LOG_OUT "Error: Updated Others Rules【$rule_name】Has No Rules Field, Update Exit..." - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - sleep 3 - SLOG_CLEAN - del_lock - exit 0 - #校验是否含有新策略组 - elif ! "$(ruby -ryaml -E UTF-8 -e " - Value = YAML.load_file('/usr/share/openclash/res/${rule_name}.yaml'); - Value_1 = YAML.load_file('/tmp/rules.yaml'); - OLD_GROUP = Value['rules'].collect{|x| x.split(',')[2] or x.split(',')[1]}.uniq; - NEW_GROUP = Value_1['rules'].collect{|x| x.split(',')[2] or x.split(',')[1]}.uniq; - puts (OLD_GROUP | NEW_GROUP).eql?(OLD_GROUP) - ")" ; then - LOG_OUT "Error: Updated Others Rules【$rule_name】Has Incompatible Proxy-Group, Update Exit, Please Wait For OpenClash Update To Adapt..." - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - sleep 3 - SLOG_CLEAN - del_lock - exit 0 - fi - - #取出规则部分 - ruby_read "/tmp/rules.yaml" ".select {|x| 'rule-providers' == x or 'script' == x or 'rules' == x }.to_yaml" > "$OTHER_RULE_FILE" - #合并 - cat "$OTHER_RULE_FILE" > "/tmp/rules.yaml" 2>/dev/null - rm -rf /tmp/other_rule* 2>/dev/null - - LOG_OUT "Check The Downloaded Rule File For Updates..." - cmp -s /usr/share/openclash/res/"$rule_name".yaml /tmp/rules.yaml - if [ "$?" -ne "0" ]; then - LOG_OUT "Detected that The Downloaded Rule File Has Been Updated, Starting To Replace..." - mv /tmp/rules.yaml /usr/share/openclash/res/"$rule_name".yaml >/dev/null 2>&1 - LOG_OUT "Other Rules【$rule_name】Update Successful!" - ifrestart=1 - else - LOG_OUT "Updated Other Rules【$rule_name】No Change, Do Nothing!" - sleep 3 - fi - else - LOG_OUT "Other Rules【$rule_name】Update Error, Please Try Again Later..." - sleep 3 - fi - } - - LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) - LOG_FILE="/tmp/openclash.log" - RUlE_SOURCE=$(uci get openclash.config.rule_source 2>/dev/null) - set_lock - - if [ "$RUlE_SOURCE" = "0" ]; then - LOG_OUT "Other Rules Not Enable, Update Stop!" - sleep 3 - else - OTHER_RULE_FILE="/tmp/other_rule.yaml" - CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null) - CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) - ifrestart=0 - - if [ -z "$CONFIG_FILE" ]; then - CONFIG_FILE="/etc/openclash/config/$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')" - CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) - fi - - if [ -z "$CONFIG_NAME" ]; then - CONFIG_FILE="/etc/openclash/config/config.yaml" - CONFIG_NAME="config.yaml" - fi - - config_load "openclash" - config_foreach yml_other_rules_dl "other_rules" "$CONFIG_NAME" - if [ -z "$rule_name" ]; then - LOG_OUT "Get Other Rules Settings Faild, Update Stop!" - sleep 3 - fi - if [ "$ifrestart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then - /etc/init.d/openclash restart >/dev/null 2>&1 & - fi - fi - rm -rf /tmp/rules.yaml >/dev/null 2>&1 - SLOG_CLEAN - del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua b/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua deleted file mode 100644 index d88e30f6..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua +++ /dev/null @@ -1,752 +0,0 @@ -#!/usr/bin/lua - -require "nixio" -require "luci.util" -require "luci.sys" - -local uci = require("luci.model.uci").cursor() -local fs = require "luci.openclash" -local json = require "luci.jsonc" -local UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36" -local filmId = 70143836 -local type = arg[1] -local enable = tonumber(uci:get("openclash", "config", "stream_auto_select")) or 0 -local now_name, group_name, group_type, group_show, status -local groups = {} -local proxies = {} - -if enable == 0 or not type then os.exit(0) end - -function unlock_auto_select() - local key_group, region, now, proxy, group_match, proxy_default, auto_get_group, info, group_now - local port = uci:get("openclash", "config", "cn_port") - local passwd = uci:get("openclash", "config", "dashboard_password") or "" - local ip = luci.sys.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'") - local original = {} - local other_region_unlock = {} - local tested_proxy = {} - local fallback_select = {} - local gorup_i18 = "Group:" - local no_group_find = "failed to search based on keywords and automatically obtain the group, please confirm the validity of the regex!" - local full_support_no_area = "full support." - local full_support = "full support, area:" - local only_original = "only support homemade!" - local no_unlock = "not support unlock!" - local select_success = "unlock node auto selected successfully, the current selected is" - local select_faild = "unlock node auto selected failed, no node available, rolled back to the" - local test_faild = "unlock test faild!" - local test_start = "Start auto select unlock proxy..." - local original_no_select = "only support homemade! the type of group is not select, auto select could not work!" - local no_unlock_no_select = "not support unlock! the type of group is not select, auto select could not work!" - local faild_no_select = "unlock test faild! the type of group is not select, auto select could not work!" - local original_test_start = "only support homemade! start auto select unlock proxy..." - local no_unlock_test_start = "not support unlock! start auto select unlock proxy..." - local faild_test_start = "unlock test faild! start auto select unlock proxy..." - local area_i18 = ", area:" - local select_faild_other_region = "unlock node auto selected failed, no node match the regex, rolled back to other full support node" - local other_region_unlock_test = "full support but not match the regex!" - local other_region_unlock_no_select = "but not match the regex! the type of group is not select, auto select could not work!" - local other_region_unlock_test_start = "full support but not match the regex! start auto select unlock proxy..." - - if not ip or ip == "" then - ip = luci.sys.exec("ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'") - end - if not ip or not port then - os.exit(0) - end - - info = luci.sys.exec(string.format('curl -sL -m 3 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/proxies', passwd, ip, port)) - if info then - info = json.parse(info) - if not info or not info.proxies then os.exit(0) end - end - - --try to get group instead of matching the key - auto_get_group = auto_get_policy_group(passwd, ip, port) - - if not auto_get_group then - auto_get_group = auto_get_policy_group(passwd, ip, port) - end - - if not auto_get_group then - if type == "Netflix" then - key_group = uci:get("openclash", "config", "stream_auto_select_group_key_netflix") or "netflix|奈飞" - elseif type == "Disney Plus" then - key_group = uci:get("openclash", "config", "stream_auto_select_group_key_disney") or "disney|迪士尼" - elseif type == "HBO Now" then - key_group = uci:get("openclash", "config", "stream_auto_select_group_key_hbo_now") or "hbo|hbonow|hbo now" - elseif type == "HBO Max" then - key_group = uci:get("openclash", "config", "stream_auto_select_group_key_hbo_max") or "hbo|hbomax|hbo max" - elseif type == "HBO GO Asia" then - key_group = uci:get("openclash", "config", "stream_auto_select_group_key_hbo_go_asia") or "hbo|hbogo|hbo go" - elseif type == "YouTube Premium" then - key_group = uci:get("openclash", "config", "stream_auto_select_group_key_ytb") or "youtobe|油管" - elseif type == "TVB Anywhere+" then - key_group = uci:get("openclash", "config", "stream_auto_select_group_key_tvb_anywhere") or "tvb" - elseif type == "Amazon Prime Video" then - key_group = uci:get("openclash", "config", "stream_auto_select_group_key_prime_video") or "prime video|amazon" - end - if not key_group then key_group = type end - else - key_group = "^" .. auto_get_group .. "$" - end - - --save group name - for _, value in pairs(info.proxies) do - if value.all then - table.insert(groups, value.name) - end - end - - group_match = false - for _, value in pairs(info.proxies) do - --match only once - while true do - --find group - if not datamatch(value.name, key_group) then - break - else - --get groups info - get_proxy(info, value.name, value.name) - table.insert(tested_proxy, now_name) - group_match = true - --test now proxy - region = proxy_unlock_test() - if table_include(groups, now_name) then - now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..group_show.."】" - else - now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..group_show.." ➟ "..now_name.."】" - end - if status ~= 2 then - os.execute("sleep 3") - region = proxy_unlock_test() - end - if status == 2 then - if region and region ~= "" then - print(now..full_support.."【"..region.."】") - else - print(now..full_support_no_area) - end - break - elseif status == 3 then - table.insert(other_region_unlock, {get_group_now(info, value.name), group_name, now_name}) - print(now..other_region_unlock_test_start) - elseif status == 1 then - table.insert(original, {get_group_now(info, value.name), group_name, now_name}) - if type == "Netflix" then - print(now..original_test_start) - else - print(now..no_unlock_test_start) - end - else - print(now..faild_test_start) - end - - --find new unlock - if value.type == "Selector" then - --loop proxy test - for i = 1, #(value.all) do - --save group current selected - proxy_default = value.now - while true do - if value.all[i] == "REJECT" or value.all[i] == "DIRECT" then - break - else - get_proxy(info, value.all[i], value.name) - if group_type == "Selector" then - if group_name == value.all[i] then - luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, group_name, ip, port, urlencode(value.name))) - end - for p = 1, #(proxies) do - proxy = proxies[p] - if table_include(groups, proxy) then - group_now = get_group_now(info, proxy) - now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..group_show.." ➟ "..group_now.."】" - else - now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..group_show.." ➟ "..proxy.."】" - end - --skip tested proxy - while true do - if table_include(tested_proxy, proxy) then - break - else - table.insert(tested_proxy, proxy) - end - while true do - if proxy == "REJECT" or proxy == "DIRECT" then - break - else - luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy, ip, port, urlencode(group_name))) - region = proxy_unlock_test() - if status == 2 then - if region and region ~= "" then - print(now..full_support.."【"..region.."】") - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..proxy.."】"..area_i18.."【"..region.."】") - else - print(now..full_support_no_area) - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..proxy.."】") - end - elseif status == 3 then - table.insert(other_region_unlock, {value.all[i], group_name, proxy}) - print(now..other_region_unlock_test) - elseif status == 1 then - table.insert(original, {value.all[i], group_name, proxy}) - if type == "Netflix" then - print(now..only_original) - else - print(now..no_unlock) - end - else - print(now..test_faild) - end - end - break - end - if status == 2 then - break - elseif p == #(proxies) and #(proxies) ~= 1 then - luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, now_name, ip, port, urlencode(group_name))) - end - break - end - if status == 2 then break end - end - else - --only group expand - luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, value.all[i], ip, port, urlencode(group_name))) - while true do - if table_include(tested_proxy, now_name) then - break - else - table.insert(tested_proxy, now_name) - end - region = proxy_unlock_test() - if table_include(groups, now_name) then - now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..group_show.."】" - else - now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..group_show.." ➟ "..now_name.."】" - end - if status == 2 then - if region and region ~= "" then - print(now..full_support.."【"..region.."】") - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, now_name).."】"..area_i18.."【"..region.."】") - else - print(now..full_support_no_area) - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, now_name).."】") - end - elseif status == 3 then - table.insert(other_region_unlock, {value.all[i], group_name, value.all[i]}) - print(now..full_support.."【"..region.."】"..other_region_unlock_no_select) - elseif status == 1 then - table.insert(original, {value.all[i], group_name, value.all[i]}) - if type == "Netflix" then - print(now..original_no_select) - else - print(now..no_unlock_no_select) - end - else - print(now..faild_no_select) - end - break - end - end - end - break - end - if status == 2 then - break - elseif i == #(value.all) and (#original > 0 or #other_region_unlock > 0) then - if #other_region_unlock > 0 then - fallback_select = other_region_unlock - else - fallback_select = original - end - for k, v in pairs(fallback_select) do - luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[1], ip, port, urlencode(value.name))) - luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[3], ip, port, urlencode(v[2]))) - if #other_region_unlock > 0 then - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_faild_other_region.."【"..v[3].."】") - else - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_faild.."【"..v[3].."】") - end - break - end - elseif i == #(value.all) then - luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy_default, ip, port, urlencode(value.name))) - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_faild.."【"..proxy_default.."】") - end - end - else - region = proxy_unlock_test() - if status == 2 then - if region and region ~= "" then - print(now..full_support.."【"..region.."】") - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, value.name).."】"..area_i18.."【"..region.."】") - else - print(now..full_support_no_area) - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, value.name).."】") - end - break - elseif status == 3 then - print(now..full_support.."【"..region.."】"..other_region_unlock_no_select) - elseif status == 1 then - if type == "Netflix" then - print(now..original_no_select) - else - print(now..no_unlock_no_select) - end - else - print(now..faild_no_select) - end - end - end - break - end - if auto_get_group and group_match then break end - if status == 2 then break end - end - if not group_match and not auto_get_group then - print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..key_group.."】"..no_group_find) - end -end - -function proxy_unlock_test() - if type == "Netflix" then - region = netflix_unlock_test() - elseif type == "Disney Plus" then - region = disney_unlock_test() - elseif type == "HBO Now" then - region = hbo_now_unlock_test() - elseif type == "HBO Max" then - region = hbo_max_unlock_test() - elseif type == "HBO GO Asia" then - region = hbo_go_asia_unlock_test() - elseif type == "YouTube Premium" then - region = ytb_unlock_test() - elseif type == "TVB Anywhere+" then - region = tvb_anywhere_unlock_test() - elseif type == "Amazon Prime Video" then - region = prime_video_unlock_test() - end - return region -end - -function table_include(table, value) - if table == nil then - return false - end - - for k, v in pairs(table) do - if v == value then - return true - end - end - return false -end - -function auto_get_policy_group(passwd, ip, port) - local auto_get_group, con - - if type == "Netflix" then - luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.netflix.com &') - elseif type == "Disney Plus" then - luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.disneyplus.com &') - elseif type == "HBO Now" then - luci.sys.call('curl -s -m 5 --limit-rate 50B -o /dev/null https://play.hbonow.com/assets/fonts/Street2-Medium.ttf &') - elseif type == "HBO Max" then - luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.hbomax.com &') - elseif type == "HBO GO Asia" then - luci.sys.call('curl -s -m 5 --limit-rate 50B -o /dev/null https://www.hbogoasia.sg/static/media/GothamLight.8566e233.ttf &') - elseif type == "YouTube Premium" then - luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://m.youtube.com/premium &') - elseif type == "TVB Anywhere+" then - luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://uapisfm.tvbanywhere.com.sg &') - elseif type == "Amazon Prime Video" then - luci.sys.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://www.primevideo.com &') - end - os.execute("sleep 1") - con = luci.sys.exec(string.format('curl -sL -m 5 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/connections', passwd, ip, port)) - if con then - con = json.parse(con) - end - if con then - for i = 1, #(con.connections) do - if type == "Netflix" then - if string.match(con.connections[i].metadata.host, "www%.netflix%.com") then - auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] - break - end - elseif type == "Disney Plus" then - if string.match(con.connections[i].metadata.host, "www%.disneyplus%.com") then - auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] - break - end - elseif type == "HBO Now" then - if string.match(con.connections[i].metadata.host, "play%.hbonow%.com") then - auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] - break - end - elseif type == "HBO Max" then - if string.match(con.connections[i].metadata.host, "www%.hbomax%.com") then - auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] - break - end - elseif type == "HBO GO Asia" then - if string.match(con.connections[i].metadata.host, "www%.hbogoasia%.sg") then - auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] - break - end - elseif type == "YouTube Premium" then - if string.match(con.connections[i].metadata.host, "m%.youtube%.com") then - auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] - break - end - elseif type == "TVB Anywhere+" then - if string.match(con.connections[i].metadata.host, "uapisfm%.tvbanywhere%.com%.sg") then - auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] - break - end - elseif type == "Amazon Prime Video" then - if string.match(con.connections[i].metadata.host, "www%.primevideo%.com") then - auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] - break - end - end - end - end - return auto_get_group -end - -function get_group_now(info, group) - local now - local group_ = group - if table_include(groups, group_) then - while table_include(groups, group_) do - for _, value in pairs(info.proxies) do - if value.name == group_ then - now = value.now - group_ = value.now - end - end - end - end - return now or group -end - -function get_proxy(info, group, name) - --group maybe a proxy - proxies = {} - group_show = "" - local expand_group = tonumber(uci:get("openclash", "config", "stream_auto_select_expand_group")) or 0 - - if expand_group == 1 then - if table_include(groups, group) then - while table_include(groups, group) do - for _, value in pairs(info.proxies) do - if value.name == group then - if group_show ~= "" then - group_show = group_show .. " ➟ " .. group - else - if name == group then - group_show = group - else - group_show = name .. " ➟ " .. group - end - end - group_name = group - group = value.now - now_name = value.now or group_name - proxies = value.all - group_type = value.type - break - end - end - end - if group_type ~= "Selector" then - for _, value in pairs(info.proxies) do - if value.name == name then - group_name = name - proxies = {} - table.insert(proxies, group) - break - end - end - end - else - for _, value in pairs(info.proxies) do - if value.name == name then - group_show = name - group_name = name - now_name = value.now or name - table.insert(proxies, group) - group_type = value.type - break - end - end - end - else - if table_include(groups, group) then - for _, value in pairs(info.proxies) do - if value.name == name then - group_name = name - table.insert(proxies, group) - group_type = value.type - end - end - while table_include(groups, group) do - for _, value in pairs(info.proxies) do - if value.name == group then - if group_show ~= "" then - group_show = group_show .. " ➟ " .. group - else - if name == group then - group_show = group - else - group_show = name .. " ➟ " .. group - end - end - now_name = value.now or group - group = value.now - break - end - end - end - else - for _, value in pairs(info.proxies) do - if value.name == name then - table.insert(proxies, group) - now_name = value.now or name - group_show = name - group_name = name - group_type = value.type - break - end - end - end - end -end - -function urlencode(data) - local data = luci.sys.exec(string.format('curl -s -o /dev/null -w %%{url_effective} --get --data-urlencode "%s" ""', data)) - return luci.sys.exec(string.format("echo %s |sed 's/+/%%20/g'", string.match(data, "/%?(.+)"))) -end - -function datamatch(data, regex) - local result = luci.sys.exec(string.format('ruby -E UTF-8 -e "x=\'%s\'; if x =~ /%s/i then print \'true\' else print \'false\' end"', data, regex)) - if result == "true" then return true else return false end -end - -function netflix_unlock_test() - status = 0 - local url = "https://www.netflix.com/title/"..filmId - local headers = "User-Agent: "..UA - local info = luci.sys.exec(string.format('curl -sLI -m 3 --retry 2 -o /dev/null -w %%{json} -H "Content-Type: application/json" -H "%s" -XGET %s', headers, url)) - local result = {} - local region - local regex = uci:get("openclash", "config", "stream_auto_select_region_key_netflix") or "" - if info then - info = json.parse(info) - end - if info then - if info.http_code == 200 then - status = 2 - string.gsub(info.url_effective, '[^/]+', function(w) table.insert(result, w) end) - region = string.upper(string.match(result[3], "^%a+")) - if region == "TITLE" then region = "US" end - if not datamatch(region, regex) then - status = 3 - end - return region - elseif info.http_code == 404 or info.http_code == 403 then - status = 1 - end - end - return -end - -function disney_unlock_test() - status = 0 - local url = "https://global.edge.bamgrid.com/token" - local url2 = "https://www.disneyplus.com" - local headers = '-H "Accept-Language: en" -H "authorization: Bearer ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84" -H "Content-Type: application/x-www-form-urlencoded"' - local auth = '"grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange&latitude=0&longitude=0&platform=browser&subject_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJiNDAzMjU0NS0yYmE2LTRiZGMtOGFlOS04ZWI3YTY2NzBjMTIiLCJhdWQiOiJ1cm46YmFtdGVjaDpzZXJ2aWNlOnRva2VuIiwibmJmIjoxNjIyNjM3OTE2LCJpc3MiOiJ1cm46YmFtdGVjaDpzZXJ2aWNlOmRldmljZSIsImV4cCI6MjQ4NjYzNzkxNiwiaWF0IjoxNjIyNjM3OTE2LCJqdGkiOiI0ZDUzMTIxMS0zMDJmLTQyNDctOWQ0ZC1lNDQ3MTFmMzNlZjkifQ.g-QUcXNzMJ8DwC9JqZbbkYUSKkB1p4JGW77OON5IwNUcTGTNRLyVIiR8mO6HFyShovsR38HRQGVa51b15iAmXg&subject_token_type=urn%3Abamtech%3Aparams%3Aoauth%3Atoken-type%3Adevice"' - local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} %s -H 'User-Agent: %s' -d %s -XPOST %s", headers, UA, auth, url)) - local region - local regex = uci:get("openclash", "config", "stream_auto_select_region_key_disney") or "" - if tonumber(httpcode) == 200 then - status = 1 - local url_effective = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{url_effective} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url2)) - if url_effective == "https://disneyplus.disney.co.jp/" then - status = 2 - region = "JP" - if not datamatch(region, regex) then - status = 3 - end - return region - elseif string.find(url_effective,"hotstar") then - return - end - local region = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s |grep 'Region: ' |awk '{print $2}' |tr -d '\n'", UA, url2)) - if region and region ~= "" then - status = 2 - if not datamatch(region, regex) then - status = 3 - end - return region - end - end - return -end - -function hbo_now_unlock_test() - status = 0 - local url = "https://play.hbonow.com/" - local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - if data then - data = json.parse(data) - end - if data then - if data.http_code == 200 then - status = 1 - if string.find(data.url_effective,"play%.hbonow%.com") then - status = 2 - end - end - end - return -end - -function hbo_max_unlock_test() - status = 0 - local url = "https://www.hbomax.com/" - local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - local result = {} - local region = "" - local regex = uci:get("openclash", "config", "stream_auto_select_region_key_hbo_max") or "" - if data then - data = json.parse(data) - end - if data then - if data.http_code == 200 then - status = 1 - if not string.find(data.url_effective,"geo%-availability") then - status = 2 - string.gsub(data.url_effective, '[^/]+', function(w) table.insert(result, w) end) - if result[3] then - region = string.upper(string.match(result[3], "^%a+")) - end - if not datamatch(region, regex) then - status = 3 - end - return region - end - end - end - return -end - -function hbo_go_asia_unlock_test() - status = 0 - local url = "https://api2.hbogoasia.com/v1/geog?lang=undefined&version=0&bundleId=www.hbogoasia.com" - local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - local regex = uci:get("openclash", "config", "stream_auto_select_region_key_hbo_go_asia") or "" - local region = "" - if tonumber(httpcode) == 200 then - status = 1 - local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - if data then - data = json.parse(data) - end - if data then - if data.territory then - status = 2 - if data.country then - region = string.upper(data.country) - end - if not datamatch(region, regex) then - status = 3 - end - return region - end - end - end - return -end - -function ytb_unlock_test() - status = 0 - local url = "https://m.youtube.com/premium" - local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - local region = "" - local regex = uci:get("openclash", "config", "stream_auto_select_region_key_ytb") or "" - if tonumber(httpcode) == 200 then - status = 1 - local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - if string.find(data, "is not available in your country") then - return - end - region = string.sub(string.match(data, "\"GL\":\"%a+\""), 7, -2) - if region then - status = 2 - else - if not string.find(data,"www%.google%.cn") then - status = 2 - region = "US" - end - end - if not datamatch(region, regex) then - status = 3 - end - end - return region -end - -function tvb_anywhere_unlock_test() - status = 0 - local url = "https://uapisfm.tvbanywhere.com.sg/geoip/check/platform/android" - local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - local region = "" - local regex = uci:get("openclash", "config", "stream_auto_select_region_key_tvb_anywhere") or "" - if tonumber(httpcode) == 200 then - status = 1 - local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - if data then - data = json.parse(data) - end - if data and data.allow_in_this_country then - status = 2 - if data.country then - region = string.upper(data.country) - end - if not datamatch(region, regex) then - status = 3 - end - end - end - return region -end - -function prime_video_unlock_test() - status = 0 - local url = "https://www.primevideo.com" - local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - local region - local regex = uci:get("openclash", "config", "stream_auto_select_region_key_prime_video") or "" - if tonumber(httpcode) == 200 then - status = 1 - local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) - if data then - region = string.sub(string.match(data, "\"currentTerritory\":\"%a+\""), 21, -2) - if region then - status = 2 - if not datamatch(region, regex) then - status = 3 - end - return region - end - end - end - return -end - -unlock_auto_select() \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_update.sh b/luci-app-openclash/root/usr/share/openclash/openclash_update.sh deleted file mode 100644 index b2e51082..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_update.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/log.sh - -set_lock() { - exec 878>"/tmp/lock/openclash_update.lock" 2>/dev/null - flock -x 878 2>/dev/null -} - -del_lock() { - flock -u 878 2>/dev/null - rm -rf "/tmp/lock/openclash_update.lock" -} - -#一键更新 -if [ "$1" = "one_key_update" ]; then - uci set openclash.config.enable=1 - uci commit openclash - /usr/share/openclash/openclash_core.sh "$1" >/dev/null 2>&1 & - /usr/share/openclash/openclash_core.sh "TUN" "$1" >/dev/null 2>&1 & - wait -fi - -LAST_OPVER="/tmp/openclash_last_version" -LAST_VER=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |sed "s/^v//g" |tr -d "\n") -OP_CV=$(sed -n 1p /usr/share/openclash/res/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) -OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) -RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master") -set_lock - -if [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -f "$LAST_OPVER" ]; then - LOG_OUT "Start Downloading【OpenClash - v$LAST_VER】..." - if [ "$RELEASE_BRANCH" = "dev" ]; then - curl -sL -m 10 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1 - else - if pidof clash >/dev/null; then - curl -sL -m 10 --retry 2 https://github.com/vernesong/OpenClash/releases/download/v"$LAST_VER"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1 - fi - fi - - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL -m 10 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1 - fi - - if [ "$?" -eq "0" ] && [ -s "/tmp/openclash.ipk" ]; then - LOG_OUT "【OpenClash - v$LAST_VER】Download Successful, Start Pre Update Test..." - opkg install /tmp/openclash.ipk --noaction >>$LOG_FILE - if [ "$?" -ne "0" ]; then - LOG_OUT "【OpenClash - v$LAST_VER】Pre Update Test Failed, The File is Saved in /tmp/opencrash.ipk, Please Try to Update Manually!" - sleep 3 - SLOG_CLEAN - del_lock - exit 0 - fi - LOG_OUT "【OpenClash - v$LAST_VER】Pre Update Test Passed, Ready to Update and Please Do not Refresh The Page and Other Operations..." - cat > /tmp/openclash_update.sh <<"EOF" -#!/bin/sh -START_LOG="/tmp/openclash_start.log" -LOG_FILE="/tmp/openclash.log" -LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") - -LOG_OUT() -{ - if [ -n "${1}" ]; then - echo -e "${1}" > $START_LOG - echo -e "${LOGTIME} ${1}" >> $LOG_FILE - fi -} - -SLOG_CLEAN() -{ - echo "" > $START_LOG -} - -LOG_OUT "Uninstalling The Old Version, Please Do not Refresh The Page or Do Other Operations..." -uci set openclash.config.enable=0 -uci commit openclash -opkg remove --force-depends --force-remove luci-app-openclash -LOG_OUT "Installing The New Version, Please Do Not Refresh The Page or Do Other Operations..." -opkg install /tmp/openclash.ipk -if [ "$?" -eq "0" ]; then - rm -rf /tmp/openclash.ipk >/dev/null 2>&1 - LOG_OUT "OpenClash Update Successful, About To Restart!" - sleep 3 - uci set openclash.config.enable=1 - uci commit openclash - /etc/init.d/openclash restart 2>/dev/null -else - LOG_OUT "OpenClash Update Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually!" - sleep 3 - SLOG_CLEAN -fi -EOF - chmod 4755 /tmp/openclash_update.sh - nohup /tmp/openclash_update.sh & - wait - rm -rf /tmp/openclash_update.sh - else - LOG_OUT "【OpenClash - v$LAST_VER】Download Failed, Please Check The Network or Try Again Later!" - rm -rf /tmp/openclash.ipk >/dev/null 2>&1 - sleep 3 - SLOG_CLEAN - if [ "$(uci get openclash.config.config_reload 2>/dev/null)" -eq 0 ]; then - uci set openclash.config.config_reload=1 - uci commit openclash - /etc/init.d/openclash restart 2>/dev/null - fi - fi -else - if [ ! -f "$LAST_OPVER" ]; then - LOG_OUT "Failed to Get Version Information, Please Try Again Later..." - sleep 3 - SLOG_CLEAN - else - LOG_OUT "OpenClash Has not Been Updated, Stop Continuing!" - sleep 3 - SLOG_CLEAN - fi - if [ "$(uci get openclash.config.config_reload 2>/dev/null)" -eq 0 ]; then - uci set openclash.config.config_reload=1 - uci commit openclash - /etc/init.d/openclash restart 2>/dev/null - fi -fi -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_version.sh b/luci-app-openclash/root/usr/share/openclash/openclash_version.sh deleted file mode 100644 index 941c41f6..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_version.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -CKTIME=$(date "+%Y-%m-%d-%H") -LAST_OPVER="/tmp/openclash_last_version" -RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master") -OP_CV=$(sed -n 1p /usr/share/openclash/res/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) -OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) - -if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 5 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1 - fi - if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then - OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) - if [ "$(expr "$OP_CV" \>= "$OP_LV")" -eq 1 ]; then - sed -i "/^https:/i\CheckTime:${CKTIME}" "$LAST_OPVER" 2>/dev/null - sed -i '/^https:/,$d' $LAST_OPVER - elif [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -n "$OP_LV" ]; then - sed -i "/^https:/i\CheckTime:${CKTIME}" "$LAST_OPVER" 2>/dev/null - return 2 - fi - else - rm -rf "$LAST_OPVER" - fi -elif [ "$(expr "$OP_CV" \>= "$OP_LV")" -eq 1 ]; then - sed -i '/^CheckTime:/,$d' $LAST_OPVER - echo "CheckTime:$CKTIME" >> $LAST_OPVER -elif [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -n "$OP_LV" ]; then - return 2 -fi 2>/dev/null diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh deleted file mode 100644 index a1fa105d..00000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh +++ /dev/null @@ -1,209 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/log.sh - -CLASH="/etc/openclash/clash" -CLASH_CONFIG="/etc/openclash" -LOG_FILE="/tmp/openclash.log" -PROXY_FWMARK="0x162" -PROXY_ROUTE_TABLE="0x162" -enable_redirect_dns=$(uci -q get openclash.config.enable_redirect_dns) -dns_port=$(uci -q get openclash.config.dns_port) -disable_masq_cache=$(uci -q get openclash.config.disable_masq_cache) -cfg_update_interval=$(uci -q get openclash.config.config_update_interval || echo 60) -log_size=$(uci -q get openclash.config.log_size || echo 1024) -core_type=$(uci -q get openclash.config.core_type) -stream_domains_prefetch_interval=$(uci -q get openclash.config.stream_domains_prefetch_interval || echo 1440) -stream_auto_select_interval=$(uci -q get openclash.config.stream_auto_select_interval || echo 30) -NETFLIX_DOMAINS_LIST="/usr/share/openclash/res/Netflix_Domains.list" -NETFLIX_DOMAINS_CUSTOM_LIST="/etc/openclash/custom/openclash_custom_netflix_domains.list" -DISNEY_DOMAINS_LIST="/usr/share/openclash/res/Disney_Plus_Domains.list" -_koolshare=$(cat /usr/lib/os-release 2>/dev/null |grep OPENWRT_RELEASE 2>/dev/null |grep -i koolshare 2>/dev/null) -CRASH_NUM=0 -CFG_UPDATE_INT=1 -STREAM_DOMAINS_PREFETCH=1 -STREAM_AUTO_SELECT=1 -sleep 60 - -while :; -do - cfg_update=$(uci -q get openclash.config.auto_update) - cfg_update_mode=$(uci -q get openclash.config.config_auto_update_mode) - cfg_update_interval_now=$(uci -q get openclash.config.config_update_interval || echo 60) - stream_domains_prefetch=$(uci -q get openclash.config.stream_domains_prefetch || echo 0) - stream_domains_prefetch_interval_now=$(uci -q get openclash.config.stream_domains_prefetch_interval || echo 1440) - stream_auto_select=$(uci -q get openclash.config.stream_auto_select || echo 0) - stream_auto_select_interval_now=$(uci -q get openclash.config.stream_auto_select_interval || echo 30) - stream_auto_select_netflix=$(uci -q get openclash.config.stream_auto_select_netflix || echo 0) - stream_auto_select_disney=$(uci -q get openclash.config.stream_auto_select_disney || echo 0) - stream_auto_select_hbo_now=$(uci -q get openclash.config.stream_auto_select_hbo_now || echo 0) - stream_auto_select_hbo_max=$(uci -q get openclash.config.stream_auto_select_hbo_max || echo 0) - stream_auto_select_hbo_go_asia=$(uci -q get openclash.config.stream_auto_select_hbo_go_asia || echo 0) - stream_auto_select_tvb_anywhere=$(uci -q get openclash.config.stream_auto_select_tvb_anywhere || echo 0) - stream_auto_select_prime_video=$(uci -q get openclash.config.stream_auto_select_prime_video || echo 0) - stream_auto_select_ytb=$(uci -q get openclash.config.stream_auto_select_ytb || echo 0) - enable=$(uci -q get openclash.config.enable) - -if [ "$enable" -eq 1 ]; then - clash_pids=$(pidof clash |sed 's/$//g' |wc -l) - if [ "$clash_pids" -gt 1 ]; then - LOG_OUT "Watchdog: Multiple Clash Processes, Kill All..." - for clash_pid in $clash_pids; do - kill -9 "$clash_pid" 2>/dev/null - done >/dev/null 2>&1 - sleep 1 - fi 2>/dev/null - if ! pidof clash >/dev/null; then - CRASH_NUM=$(expr "$CRASH_NUM" + 1) - if [ "$CRASH_NUM" -le 3 ]; then - RAW_CONFIG_FILE=$(uci -q get openclash.config.config_path) - CONFIG_FILE="/etc/openclash/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)" - LOG_OUT "Watchdog: Clash Core Problem, Restart..." - if [ -z "$_koolshare" ]; then - touch /tmp/openclash.log 2>/dev/null - chmod o+w /etc/openclash/proxy_provider/* 2>/dev/null - chmod o+w /etc/openclash/rule_provider/* 2>/dev/null - chmod o+w /tmp/openclash.log 2>/dev/null - chown nobody:nogroup /etc/openclash/core/* 2>/dev/null - capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin" - capsh --caps="${capabilties}+eip" -- -c "capsh --user=nobody --addamb='${capabilties}' -- -c 'nohup $CLASH -d $CLASH_CONFIG -f \"$CONFIG_FILE\" >> $LOG_FILE 2>&1 &'" >> $LOG_FILE 2>&1 - else - nohup $CLASH -d $CLASH_CONFIG -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 & - fi - sleep 3 - if [ "$core_type" = "TUN" ]; then - ip route replace default dev utun table "$PROXY_ROUTE_TABLE" 2>/dev/null - ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" 2>/dev/null - fi - sleep 60 - continue - else - LOG_OUT "Watchdog: Already Restart 3 Times With Clash Core Problem, Auto-Exit..." - /etc/init.d/openclash stop - exit 0 - fi - else - CRASH_NUM=0 - fi -fi - -## Porxy history - /usr/share/openclash/openclash_history_get.sh - -## Log File Size Manage: - LOGSIZE=`ls -l /tmp/openclash.log |awk '{print int($5/1024)}'` - if [ "$LOGSIZE" -gt "$log_size" ]; then - : > /tmp/openclash.log - LOG_OUT "Watchdog: Log Size Limit, Clean Up All Log Records..." - fi - -## 端口转发重启 - last_line=$(iptables -t nat -nL PREROUTING --line-number |awk '{print $1}' 2>/dev/null |awk 'END {print}' |sed -n '$p') - op_line=$(iptables -t nat -nL PREROUTING --line-number |grep "openclash" 2>/dev/null |awk '{print $1}' 2>/dev/null |head -1) - if [ "$last_line" != "$op_line" ] && [ -n "$op_line" ]; then - pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/openclash/=' 2>/dev/null |sort -rn) - for pre_line in $pre_lines; do - iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1 - done >/dev/null 2>&1 - iptables -t nat -A PREROUTING -p tcp -j openclash - LOG_OUT "Watchdog: Reset Firewall For Enabling Redirect..." - fi - -## DNS转发劫持 - if [ "$enable_redirect_dns" -ne 0 ]; then - if [ -z "$(uci -q get dhcp.@dnsmasq[0].server |grep "$dns_port")" ] || [ ! -z "$(uci -q get dhcp.@dnsmasq[0].server |awk -F ' ' '{print $2}')" ]; then - LOG_OUT "Watchdog: Force Reset DNS Hijack..." - uci -q del dhcp.@dnsmasq[-1].server - uci -q add_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" - uci -q delete dhcp.@dnsmasq[0].resolvfile - uci -q set dhcp.@dnsmasq[0].noresolv=1 - [ "$disable_masq_cache" -eq 1 ] && { - uci -q set dhcp.@dnsmasq[0].cachesize=0 - } - uci -q commit dhcp - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - fi - fi - -## 配置文件循环更新 - if [ "$cfg_update" -eq 1 ] && [ "$cfg_update_mode" -eq 1 ]; then - [ "$cfg_update_interval" -ne "$cfg_update_interval_now" ] && CFG_UPDATE_INT=0 && cfg_update_interval="$cfg_update_interval_now" - if [ "$CFG_UPDATE_INT" -ne 0 ]; then - [ "$(expr "$CFG_UPDATE_INT" % "$cfg_update_interval_now")" -eq 0 ] && /usr/share/openclash/openclash.sh - fi - CFG_UPDATE_INT=$(expr "$CFG_UPDATE_INT" + 1) - fi - -##Dler Cloud Checkin - /usr/share/openclash/openclash_dler_checkin.lua >/dev/null 2>&1 - -##STREAMING_UNLOCK_CHECK - if [ "$stream_auto_select" -eq 1 ]; then - [ "$stream_auto_select_interval" -ne "$stream_auto_select_interval_now" ] && STREAM_AUTO_SELECT=1 && stream_auto_select_interval="$stream_auto_select_interval_now" - if [ "$STREAM_AUTO_SELECT" -ne 0 ]; then - if [ "$(expr "$STREAM_AUTO_SELECT" % "$stream_auto_select_interval_now")" -eq 0 ] || [ "$STREAM_AUTO_SELECT" -eq 1 ]; then - if [ "$stream_auto_select_netflix" -eq 1 ]; then - LOG_OUT "Tip: Start Auto Select Proxy For Netflix Unlock..." - /usr/share/openclash/openclash_streaming_unlock.lua "Netflix" >> $LOG_FILE - fi - if [ "$stream_auto_select_disney" -eq 1 ]; then - LOG_OUT "Tip: Start Auto Select Proxy For Disney Plus Unlock..." - /usr/share/openclash/openclash_streaming_unlock.lua "Disney Plus" >> $LOG_FILE - fi - if [ "$stream_auto_select_ytb" -eq 1 ]; then - LOG_OUT "Tip: Start Auto Select Proxy For YouTube Premium Unlock..." - /usr/share/openclash/openclash_streaming_unlock.lua "YouTube Premium" >> $LOG_FILE - fi - if [ "$stream_auto_select_hbo_now" -eq 1 ]; then - LOG_OUT "Tip: Start Auto Select Proxy For HBO Now Unlock..." - /usr/share/openclash/openclash_streaming_unlock.lua "HBO Now" >> $LOG_FILE - fi - if [ "$stream_auto_select_hbo_max" -eq 1 ]; then - LOG_OUT "Tip: Start Auto Select Proxy For HBO Max Unlock..." - /usr/share/openclash/openclash_streaming_unlock.lua "HBO Max" >> $LOG_FILE - fi - if [ "$stream_auto_select_hbo_go_asia" -eq 1 ]; then - LOG_OUT "Tip: Start Auto Select Proxy For HBO GO Asia Unlock..." - /usr/share/openclash/openclash_streaming_unlock.lua "HBO GO Asia" >> $LOG_FILE - fi - if [ "$stream_auto_select_tvb_anywhere" -eq 1 ]; then - LOG_OUT "Tip: Start Auto Select Proxy For TVB Anywhere+ Unlock..." - /usr/share/openclash/openclash_streaming_unlock.lua "TVB Anywhere+" >> $LOG_FILE - fi - if [ "$stream_auto_select_prime_video" -eq 1 ]; then - LOG_OUT "Tip: Start Auto Select Proxy For Amazon Prime Video Unlock..." - /usr/share/openclash/openclash_streaming_unlock.lua "Amazon Prime Video" >> $LOG_FILE - fi - fi - fi - STREAM_AUTO_SELECT=$(expr "$STREAM_AUTO_SELECT" + 1) - fi - -##STREAM_DNS_PREFETCH - if [ "$stream_domains_prefetch" -eq 1 ]; then - [ "$stream_domains_prefetch_interval" -ne "$stream_domains_prefetch_interval_now" ] && STREAM_DOMAINS_PREFETCH=1 && stream_domains_prefetch_interval="$stream_domains_prefetch_interval_now" - if [ "$STREAM_DOMAINS_PREFETCH" -ne 0 ]; then - if [ "$(expr "$STREAM_DOMAINS_PREFETCH" % "$stream_domains_prefetch_interval_now")" -eq 0 ] || [ "$STREAM_DOMAINS_PREFETCH" -eq 1 ]; then - LOG_OUT "Tip: Start Prefetch Netflix Domains..." - cat "$NETFLIX_DOMAINS_LIST" |while read -r line - do - [ -n "$line" ] && nslookup $line - done >/dev/null 2>&1 - cat "$NETFLIX_DOMAINS_CUSTOM_LIST" |while read -r line - do - [ -n "$line" ] && nslookup $line - done >/dev/null 2>&1 - LOG_OUT "Tip: Netflix Domains Prefetch Finished!" - LOG_OUT "Tip: Start Prefetch Disney Plus Domains..." - cat "$DISNEY_DOMAINS_LIST" |while read -r line - do - [ -n "$line" ] && nslookup $line - done >/dev/null 2>&1 - LOG_OUT "Tip: Disney Plus Domains Prefetch Finished!" - fi - fi - STREAM_DOMAINS_PREFETCH=$(expr "$STREAM_DOMAINS_PREFETCH" + 1) - fi - - SLOG_CLEAN - sleep 60 -done 2>/dev/null diff --git a/luci-app-openclash/root/usr/share/openclash/res/ConnersHua.yaml b/luci-app-openclash/root/usr/share/openclash/res/ConnersHua.yaml deleted file mode 100644 index 6c8f76a7..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/ConnersHua.yaml +++ /dev/null @@ -1,47 +0,0 @@ -rule-providers: - Unbreak: - type: http - behavior: classical - path: "./RuleSet/Unbreak.yaml" - url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/Unbreak.yaml - interval: 86400 - Streaming: - type: http - behavior: classical - path: "./RuleSet/StreamingMedia/Streaming.yaml" - url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Streaming.yaml - interval: 86400 - StreamingSE: - type: http - behavior: classical - path: "./RuleSet/StreamingMedia/StreamingSE.yaml" - url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/StreamingSE.yaml - interval: 86400 - Global: - type: http - behavior: classical - path: "./RuleSet/Global.yaml" - url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/Global.yaml - interval: 86400 - China: - type: http - behavior: classical - path: "./RuleSet/China.yaml" - url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/China.yaml - interval: 86400 -rules: -- RULE-SET,Unbreak,DIRECT -- RULE-SET,Streaming,Streaming -- RULE-SET,StreamingSE,StreamingSE -- RULE-SET,Global,PROXY -- RULE-SET,China,DIRECT -- IP-CIDR,192.168.0.0/16,DIRECT -- IP-CIDR,10.0.0.0/8,DIRECT -- IP-CIDR,172.16.0.0/12,DIRECT -- IP-CIDR,127.0.0.0/8,DIRECT -- IP-CIDR,100.64.0.0/10,DIRECT -- IP-CIDR,224.0.0.0/4,DIRECT -- IP-CIDR,fe80::/10,DIRECT -- IP-CIDR,119.28.28.28/32,DIRECT -- IP-CIDR,182.254.116.0/24,DIRECT -- MATCH,MATCH diff --git a/luci-app-openclash/root/usr/share/openclash/res/ConnersHua_return.yaml b/luci-app-openclash/root/usr/share/openclash/res/ConnersHua_return.yaml deleted file mode 100644 index e3eacc90..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/ConnersHua_return.yaml +++ /dev/null @@ -1,79 +0,0 @@ -rules: -##source:ConnersHua_return -# (Video) -# AcFun -# USER-AGENT,AcFun*,PROXY -- DOMAIN-SUFFIX,acfun.cn,PROXY -- DOMAIN-SUFFIX,acfun.com,PROXY -- DOMAIN-SUFFIX,aixifan.com,PROXY -# > bilibili -# USER-AGENT,bili-universal,PROXY -# USER-AGENT,Bilibili*,PROXY -- DOMAIN-SUFFIX,acgvideo.com,PROXY -- DOMAIN-SUFFIX,bilibili.com,PROXY -- DOMAIN-SUFFIX,hdslb.com,PROXY -# > HunanTV -# USER-AGENT,MGTV*,PROXY -- DOMAIN-SUFFIX,hitv.com,PROXY -- DOMAIN-SUFFIX,hunantv.com,PROXY -- DOMAIN-SUFFIX,mgtv.com,PROXY -# > Migu -# USER-AGENT,MiguVideo*,PROXY -# USER-AGENT,%E5%92%AA%E5%92%95%E8%A7%86%E9%A2%91,PROXY -- DOMAIN-SUFFIX,cmvideo.cn,PROXY -- DOMAIN-SUFFIX,migu.cn,PROXY -- DOMAIN-SUFFIX,miguvideo.com,PROXY -# > iQiyi -# USER-AGENT,iQiYiPhoneVideo,PROXY -# USER-AGENT,PPStream,PROXY -# USER-AGENT,QIYIVideo,PROXY -# USER-AGENT,QYPlayer,PROXY -- DOMAIN-SUFFIX,iqiyi.com,PROXY -- DOMAIN-SUFFIX,iqiyipic.com,PROXY -- DOMAIN-SUFFIX,qy.net,PROXY -# > Sohu -- DOMAIN-SUFFIX,sohu.com,PROXY -- DOMAIN-SUFFIX,sohu.com.cn,PROXY -- DOMAIN-SUFFIX,itc.cn,PROXY -- DOMAIN-SUFFIX,v-56.com,PROXY -# > Tencent -# USER-AGENT,live4iphone*,PROXY -# USER-AGENT,qqlive4iphone*,PROXY -# USER-AGENT,TencentMidasConnect*,PROXY -- DOMAIN-SUFFIX,video.qq.com,PROXY -# > Youku -# USER-AGENT,Youku*,PROXY -# USER-AGENT,%E4%BC%98%E9%85%B7*,PROXY -- DOMAIN-SUFFIX,soku.com,PROXY -- DOMAIN-SUFFIX,youku.com,PROXY -- DOMAIN-SUFFIX,ykimg.com,PROXY - -# (Music) -# > Alibaba -# USER-AGENT,walkman*,PROXY -# USER-AGENT,xiami*,PROXY -- DOMAIN-SUFFIX,xiami.com,PROXY -- DOMAIN-SUFFIX,xiami.net,PROXY -# > Netease -# USER-AGENT,NeteaseMusic*,PROXY -# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,PROXY -- DOMAIN-SUFFIX,music.126.net,PROXY -- DOMAIN-SUFFIX,music.163.com,PROXY -# > Tencent -# USER-AGENT,MOO%E9%9F%B3%E4%B9%90*,PROXY -# USER-AGENT,QQ%E9%9F%B3%E4%B9%90,PROXY -- DOMAIN-SUFFIX,qqmusic.qq.com,PROXY -- DOMAIN-SUFFIX,y.qq.com,PROXY -- DOMAIN,aqqmusic.tc.qq.com,PROXY -# Kugou and Kuwo -- DOMAIN-SUFFIX,kugou.com,PROXY -# USER-AGENT,%E9%85%B7%E6%88%91%E9%9F%B3%E4%B9%90*,PROXY -- DOMAIN-SUFFIX,kuwo.cn,PROXY -- DOMAIN-SUFFIX,koowo.com,PROXY -# > Baidu -# USER-AGENT,baiduyinyue,PROXY -- DOMAIN-SUFFIX,qianqian.com,PROXY - -- GEOIP,CN,PROXY - -- MATCH,DIRECT \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list b/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list deleted file mode 100644 index 3db21424..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list +++ /dev/null @@ -1,48 +0,0 @@ -vod-akc-eu-south-1.media.dssott.com -vod-vzc-eu-south-1.media.dssott.com -vod-l3c-na-central-1.media.dssott.com -vod-akc-na-central-1.media.dssott.com -vod-ftc-na-central-1.media.dssott.com -vod-vzc-na-central-1.media.dssott.com -vod-l3c-na-east-1.media.dssott.com -vod-bgc-na-east-1.media.dssott.com -vod-akc-na-east-1.media.dssott.com -vod-ftc-na-east-1.media.dssott.com -vod-vzc-na-east-1.media.dssott.com -vod-bgc-oc-east-1.media.dssott.com -vod-l3c-na-west-1.media.dssott.com -vod-akc-na-west-1.media.dssott.com -vod-ftc-na-west-1.media.dssott.com -vod-vzc-na-west-1.media.dssott.com -vod-l3c-eu-south-2.media.dssott.com -vod-ftc-eu-south-2.media.dssott.com -vod-l3c-na-east-2.media.dssott.com -vod-akc-na-east-2.media.dssott.com -vod-ftc-na-east-2.media.dssott.com -vod-vzc-na-east-2.media.dssott.com -vod-l3c-oc-east-2.media.dssott.com -vod-akc-oc-east-2.media.dssott.com -vod-ftc-oc-east-2.media.dssott.com -vod-vzc-oc-east-2.media.dssott.com -vod-l3c-na-west-2.media.dssott.com -vod-akc-na-west-2.media.dssott.com -vod-llc-na-west-2.media.dssott.com -vod-cmc-na-west-2.media.dssott.com -vod-ftc-na-west-2.media.dssott.com -vod-vzc-na-west-2.media.dssott.com -cdn.registerdisney.go.com -qa.cdn.registerdisney.go.com -stg.cdn.registerdisney.go.com -val.cdn.registerdisney.go.com -prod-ripcut-delivery.disney-plus.net -appconfigs.disney-plus.net -prod-static.disney-plus.net -global.edge.bamgrid.com -bam-sdk-configs.bamgrid.com -playback-certs.bamgrid.com -search-api-disney.bamgrid.com -content.global.edge.bamgrid.com -disney.playback.edge.bamgrid.com -disney.api.edge.bamgrid.com -disney.content.edge.bamgrid.com -disney.connections.edge.bamgrid.com \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list b/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list deleted file mode 100644 index bbcb6b97..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list +++ /dev/null @@ -1,574 +0,0 @@ -ipv4-c001-hkg001-hgc-isp.1.oca.nflxvideo.net -ipv4-c003-hkg001-hgc-isp.1.oca.nflxvideo.net -ipv4-c004-hkg001-hgc-isp.1.oca.nflxvideo.net -ipv4-c001-hkg002-hgc-isp.1.oca.nflxvideo.net -ipv4-c002-hkg002-hgc-isp.1.oca.nflxvideo.net -ipv4-c001-hkg001-cmhk-isp.1.oca.nflxvideo.net -ipv4-c002-hkg001-cmhk-isp.1.oca.nflxvideo.net -ipv4-c002-hkg001-hkbn-isp.1.oca.nflxvideo.net -ipv4-c003-hkg001-hkbn-isp.1.oca.nflxvideo.net -ipv4-c004-hkg001-hkbn-isp.1.oca.nflxvideo.net -ipv4-c005-hkg001-hkbn-isp.1.oca.nflxvideo.net -ipv4-c001-hkg002-hkbn-isp.1.oca.nflxvideo.net -ipv4-c002-hkg002-hkbn-isp.1.oca.nflxvideo.net -ipv4-c003-hkg002-hkbn-isp.1.oca.nflxvideo.net -ipv4-c004-hkg002-hkbn-isp.1.oca.nflxvideo.net -ipv4-c001-hkg001-pccw-isp.1.oca.nflxvideo.net -ipv4-c003-hkg001-pccw-isp.1.oca.nflxvideo.net -ipv4-c004-hkg001-pccw-isp.1.oca.nflxvideo.net -ipv4-c002-hkg002-pccw-isp.1.oca.nflxvideo.net -ipv4-c003-hkg002-pccw-isp.1.oca.nflxvideo.net -ipv4-c004-hkg002-pccw-isp.1.oca.nflxvideo.net -ipv4-c005-hkg002-pccw-isp.1.oca.nflxvideo.net -ipv4-c001-hkg003-pccw-isp.1.oca.nflxvideo.net -ipv4-c002-hkg003-pccw-isp.1.oca.nflxvideo.net -ipv4-c003-hkg003-pccw-isp.1.oca.nflxvideo.net -ipv4-c004-hkg003-pccw-isp.1.oca.nflxvideo.net -ipv4-c010-hkg001-ix.1.oca.nflxvideo.net -ipv6-c010-hkg001-ix.1.oca.nflxvideo.net -ipv4-c020-hkg001-ix.1.oca.nflxvideo.net -ipv6-c020-hkg001-ix.1.oca.nflxvideo.net -ipv4-c030-hkg001-ix.1.oca.nflxvideo.net -ipv6-c030-hkg001-ix.1.oca.nflxvideo.net -ipv4-c040-hkg001-ix.1.oca.nflxvideo.net -ipv6-c040-hkg001-ix.1.oca.nflxvideo.net -ipv4-c050-hkg001-ix.1.oca.nflxvideo.net -ipv4-c060-hkg001-ix.1.oca.nflxvideo.net -ipv6-c001-hkg001-ix.1.oca.nflxvideo.net -ipv4-c011-hkg001-ix.1.oca.nflxvideo.net -ipv6-c011-hkg001-ix.1.oca.nflxvideo.net -ipv4-c021-hkg001-ix.1.oca.nflxvideo.net -ipv6-c021-hkg001-ix.1.oca.nflxvideo.net -ipv4-c031-hkg001-ix.1.oca.nflxvideo.net -ipv6-c031-hkg001-ix.1.oca.nflxvideo.net -ipv4-c041-hkg001-ix.1.oca.nflxvideo.net -ipv6-c041-hkg001-ix.1.oca.nflxvideo.net -ipv4-c051-hkg001-ix.1.oca.nflxvideo.net -ipv4-c061-hkg001-ix.1.oca.nflxvideo.net -ipv4-c002-hkg001-ix.1.oca.nflxvideo.net -ipv6-c002-hkg001-ix.1.oca.nflxvideo.net -ipv4-c012-hkg001-ix.1.oca.nflxvideo.net -ipv4-c022-hkg001-ix.1.oca.nflxvideo.net -ipv6-c022-hkg001-ix.1.oca.nflxvideo.net -ipv4-c032-hkg001-ix.1.oca.nflxvideo.net -ipv6-c032-hkg001-ix.1.oca.nflxvideo.net -ipv4-c042-hkg001-ix.1.oca.nflxvideo.net -ipv6-c042-hkg001-ix.1.oca.nflxvideo.net -ipv4-c052-hkg001-ix.1.oca.nflxvideo.net -ipv4-c062-hkg001-ix.1.oca.nflxvideo.net -ipv4-c003-hkg001-ix.1.oca.nflxvideo.net -ipv6-c003-hkg001-ix.1.oca.nflxvideo.net -ipv4-c013-hkg001-ix.1.oca.nflxvideo.net -ipv6-c013-hkg001-ix.1.oca.nflxvideo.net -ipv4-c023-hkg001-ix.1.oca.nflxvideo.net -ipv6-c023-hkg001-ix.1.oca.nflxvideo.net -ipv4-c033-hkg001-ix.1.oca.nflxvideo.net -ipv6-c033-hkg001-ix.1.oca.nflxvideo.net -ipv4-c043-hkg001-ix.1.oca.nflxvideo.net -ipv6-c043-hkg001-ix.1.oca.nflxvideo.net -ipv4-c053-hkg001-ix.1.oca.nflxvideo.net -ipv4-c004-hkg001-ix.1.oca.nflxvideo.net -ipv6-c004-hkg001-ix.1.oca.nflxvideo.net -ipv4-c014-hkg001-ix.1.oca.nflxvideo.net -ipv6-c014-hkg001-ix.1.oca.nflxvideo.net -ipv4-c024-hkg001-ix.1.oca.nflxvideo.net -ipv6-c024-hkg001-ix.1.oca.nflxvideo.net -ipv4-c034-hkg001-ix.1.oca.nflxvideo.net -ipv6-c034-hkg001-ix.1.oca.nflxvideo.net -ipv4-c044-hkg001-ix.1.oca.nflxvideo.net -ipv6-c044-hkg001-ix.1.oca.nflxvideo.net -ipv4-c054-hkg001-ix.1.oca.nflxvideo.net -ipv4-c005-hkg001-ix.1.oca.nflxvideo.net -ipv6-c005-hkg001-ix.1.oca.nflxvideo.net -ipv4-c015-hkg001-ix.1.oca.nflxvideo.net -ipv6-c015-hkg001-ix.1.oca.nflxvideo.net -ipv4-c025-hkg001-ix.1.oca.nflxvideo.net -ipv6-c025-hkg001-ix.1.oca.nflxvideo.net -ipv4-c035-hkg001-ix.1.oca.nflxvideo.net -ipv6-c035-hkg001-ix.1.oca.nflxvideo.net -ipv4-c045-hkg001-ix.1.oca.nflxvideo.net -ipv4-c055-hkg001-ix.1.oca.nflxvideo.net -ipv4-c006-hkg001-ix.1.oca.nflxvideo.net -ipv6-c006-hkg001-ix.1.oca.nflxvideo.net -ipv4-c016-hkg001-ix.1.oca.nflxvideo.net -ipv6-c016-hkg001-ix.1.oca.nflxvideo.net -ipv4-c026-hkg001-ix.1.oca.nflxvideo.net -ipv6-c026-hkg001-ix.1.oca.nflxvideo.net -ipv4-c036-hkg001-ix.1.oca.nflxvideo.net -ipv6-c036-hkg001-ix.1.oca.nflxvideo.net -ipv4-c046-hkg001-ix.1.oca.nflxvideo.net -ipv4-c056-hkg001-ix.1.oca.nflxvideo.net -ipv4-c007-hkg001-ix.1.oca.nflxvideo.net -ipv6-c007-hkg001-ix.1.oca.nflxvideo.net -ipv4-c017-hkg001-ix.1.oca.nflxvideo.net -ipv6-c017-hkg001-ix.1.oca.nflxvideo.net -ipv4-c027-hkg001-ix.1.oca.nflxvideo.net -ipv6-c027-hkg001-ix.1.oca.nflxvideo.net -ipv4-c037-hkg001-ix.1.oca.nflxvideo.net -ipv6-c037-hkg001-ix.1.oca.nflxvideo.net -ipv4-c047-hkg001-ix.1.oca.nflxvideo.net -ipv4-c057-hkg001-ix.1.oca.nflxvideo.net -ipv4-c008-hkg001-ix.1.oca.nflxvideo.net -ipv6-c008-hkg001-ix.1.oca.nflxvideo.net -ipv4-c018-hkg001-ix.1.oca.nflxvideo.net -ipv6-c018-hkg001-ix.1.oca.nflxvideo.net -ipv4-c028-hkg001-ix.1.oca.nflxvideo.net -ipv6-c028-hkg001-ix.1.oca.nflxvideo.net -ipv4-c038-hkg001-ix.1.oca.nflxvideo.net -ipv6-c038-hkg001-ix.1.oca.nflxvideo.net -ipv4-c048-hkg001-ix.1.oca.nflxvideo.net -ipv4-c058-hkg001-ix.1.oca.nflxvideo.net -ipv4-c009-hkg001-ix.1.oca.nflxvideo.net -ipv6-c009-hkg001-ix.1.oca.nflxvideo.net -ipv6-c019-hkg001-ix.1.oca.nflxvideo.net -ipv4-c029-hkg001-ix.1.oca.nflxvideo.net -ipv6-c029-hkg001-ix.1.oca.nflxvideo.net -ipv4-c039-hkg001-ix.1.oca.nflxvideo.net -ipv6-c039-hkg001-ix.1.oca.nflxvideo.net -ipv4-c049-hkg001-ix.1.oca.nflxvideo.net -ipv4-c059-hkg001-ix.1.oca.nflxvideo.net -ipv4-c001-hkg001-ix.1.oca.nflxvideo.net -ipv4-c019-hkg001-ix.1.oca.nflxvideo.net -ipv4-c001-sin001-starhub-isp.1.oca.nflxvideo.net -ipv6-c001-sin001-starhub-isp.1.oca.nflxvideo.net -ipv4-c002-sin001-starhub-isp.1.oca.nflxvideo.net -ipv6-c002-sin001-starhub-isp.1.oca.nflxvideo.net -ipv4-c003-sin001-starhub-isp.1.oca.nflxvideo.net -ipv6-c003-sin001-starhub-isp.1.oca.nflxvideo.net -ipv4-c004-sin001-starhub-isp.1.oca.nflxvideo.net -ipv6-c004-sin001-starhub-isp.1.oca.nflxvideo.net -ipv4-c005-sin001-starhub-isp.1.oca.nflxvideo.net -ipv6-c005-sin001-starhub-isp.1.oca.nflxvideo.net -ipv4-c006-sin001-starhub-isp.1.oca.nflxvideo.net -ipv4-c010-sin001-ix.1.oca.nflxvideo.net -ipv6-c010-sin001-ix.1.oca.nflxvideo.net -ipv4-c020-sin001-ix.1.oca.nflxvideo.net -ipv4-c030-sin001-ix.1.oca.nflxvideo.net -ipv6-c030-sin001-ix.1.oca.nflxvideo.net -ipv4-c040-sin001-ix.1.oca.nflxvideo.net -ipv6-c040-sin001-ix.1.oca.nflxvideo.net -ipv4-c050-sin001-ix.1.oca.nflxvideo.net -ipv4-c060-sin001-ix.1.oca.nflxvideo.net -ipv4-c001-sin001-ix.1.oca.nflxvideo.net -ipv4-c011-sin001-ix.1.oca.nflxvideo.net -ipv6-c011-sin001-ix.1.oca.nflxvideo.net -ipv4-c021-sin001-ix.1.oca.nflxvideo.net -ipv4-c031-sin001-ix.1.oca.nflxvideo.net -ipv6-c031-sin001-ix.1.oca.nflxvideo.net -ipv4-c041-sin001-ix.1.oca.nflxvideo.net -ipv6-c041-sin001-ix.1.oca.nflxvideo.net -ipv4-c051-sin001-ix.1.oca.nflxvideo.net -ipv4-c061-sin001-ix.1.oca.nflxvideo.net -ipv4-c002-sin001-ix.1.oca.nflxvideo.net -ipv6-c002-sin001-ix.1.oca.nflxvideo.net -ipv4-c012-sin001-ix.1.oca.nflxvideo.net -ipv6-c012-sin001-ix.1.oca.nflxvideo.net -ipv4-c032-sin001-ix.1.oca.nflxvideo.net -ipv6-c032-sin001-ix.1.oca.nflxvideo.net -ipv4-c042-sin001-ix.1.oca.nflxvideo.net -ipv6-c042-sin001-ix.1.oca.nflxvideo.net -ipv4-c052-sin001-ix.1.oca.nflxvideo.net -ipv4-c062-sin001-ix.1.oca.nflxvideo.net -ipv4-c003-sin001-ix.1.oca.nflxvideo.net -ipv4-c013-sin001-ix.1.oca.nflxvideo.net -ipv6-c013-sin001-ix.1.oca.nflxvideo.net -ipv4-c033-sin001-ix.1.oca.nflxvideo.net -ipv4-c043-sin001-ix.1.oca.nflxvideo.net -ipv6-c043-sin001-ix.1.oca.nflxvideo.net -ipv4-c053-sin001-ix.1.oca.nflxvideo.net -ipv6-c053-sin001-ix.1.oca.nflxvideo.net -ipv4-c063-sin001-ix.1.oca.nflxvideo.net -ipv4-c004-sin001-ix.1.oca.nflxvideo.net -ipv6-c004-sin001-ix.1.oca.nflxvideo.net -ipv4-c014-sin001-ix.1.oca.nflxvideo.net -ipv6-c014-sin001-ix.1.oca.nflxvideo.net -ipv4-c034-sin001-ix.1.oca.nflxvideo.net -ipv6-c034-sin001-ix.1.oca.nflxvideo.net -ipv4-c044-sin001-ix.1.oca.nflxvideo.net -ipv6-c044-sin001-ix.1.oca.nflxvideo.net -ipv4-c054-sin001-ix.1.oca.nflxvideo.net -ipv4-c005-sin001-ix.1.oca.nflxvideo.net -ipv6-c005-sin001-ix.1.oca.nflxvideo.net -ipv4-c015-sin001-ix.1.oca.nflxvideo.net -ipv6-c015-sin001-ix.1.oca.nflxvideo.net -ipv4-c025-sin001-ix.1.oca.nflxvideo.net -ipv6-c025-sin001-ix.1.oca.nflxvideo.net -ipv4-c035-sin001-ix.1.oca.nflxvideo.net -ipv6-c035-sin001-ix.1.oca.nflxvideo.net -ipv4-c045-sin001-ix.1.oca.nflxvideo.net -ipv6-c045-sin001-ix.1.oca.nflxvideo.net -ipv4-c055-sin001-ix.1.oca.nflxvideo.net -ipv4-c006-sin001-ix.1.oca.nflxvideo.net -ipv4-c016-sin001-ix.1.oca.nflxvideo.net -ipv4-c026-sin001-ix.1.oca.nflxvideo.net -ipv4-c036-sin001-ix.1.oca.nflxvideo.net -ipv6-c036-sin001-ix.1.oca.nflxvideo.net -ipv4-c046-sin001-ix.1.oca.nflxvideo.net -ipv6-c046-sin001-ix.1.oca.nflxvideo.net -ipv4-c056-sin001-ix.1.oca.nflxvideo.net -ipv4-c007-sin001-ix.1.oca.nflxvideo.net -ipv6-c007-sin001-ix.1.oca.nflxvideo.net -ipv4-c017-sin001-ix.1.oca.nflxvideo.net -ipv6-c017-sin001-ix.1.oca.nflxvideo.net -ipv4-c027-sin001-ix.1.oca.nflxvideo.net -ipv6-c027-sin001-ix.1.oca.nflxvideo.net -ipv4-c037-sin001-ix.1.oca.nflxvideo.net -ipv6-c037-sin001-ix.1.oca.nflxvideo.net -ipv4-c047-sin001-ix.1.oca.nflxvideo.net -ipv6-c047-sin001-ix.1.oca.nflxvideo.net -ipv4-c057-sin001-ix.1.oca.nflxvideo.net -ipv4-c008-sin001-ix.1.oca.nflxvideo.net -ipv6-c008-sin001-ix.1.oca.nflxvideo.net -ipv4-c018-sin001-ix.1.oca.nflxvideo.net -ipv4-c028-sin001-ix.1.oca.nflxvideo.net -ipv6-c028-sin001-ix.1.oca.nflxvideo.net -ipv4-c038-sin001-ix.1.oca.nflxvideo.net -ipv6-c038-sin001-ix.1.oca.nflxvideo.net -ipv4-c048-sin001-ix.1.oca.nflxvideo.net -ipv6-c048-sin001-ix.1.oca.nflxvideo.net -ipv4-c058-sin001-ix.1.oca.nflxvideo.net -ipv4-c009-sin001-ix.1.oca.nflxvideo.net -ipv6-c009-sin001-ix.1.oca.nflxvideo.net -ipv4-c019-sin001-ix.1.oca.nflxvideo.net -ipv6-c019-sin001-ix.1.oca.nflxvideo.net -ipv6-c029-sin001-ix.1.oca.nflxvideo.net -ipv4-c039-sin001-ix.1.oca.nflxvideo.net -ipv6-c039-sin001-ix.1.oca.nflxvideo.net -ipv4-c049-sin001-ix.1.oca.nflxvideo.net -ipv6-c049-sin001-ix.1.oca.nflxvideo.net -ipv4-c059-sin001-ix.1.oca.nflxvideo.net -ipv6-c050-sin001-ix.1.oca.nflxvideo.net -ipv4-c029-sin001-ix.1.oca.nflxvideo.net -ipv4-c001-xsp001-m1-isp.1.oca.nflxvideo.net -ipv4-c002-xsp001-m1-isp.1.oca.nflxvideo.net -ipv4-c003-xsp001-m1-isp.1.oca.nflxvideo.net -ipv4-c001-xsp002-m1-isp.1.oca.nflxvideo.net -ipv4-c002-xsp002-m1-isp.1.oca.nflxvideo.net -ipv4-c003-xsp002-m1-isp.1.oca.nflxvideo.net -ipv4-c001-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv6-c001-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv4-c003-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv6-c003-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv4-c004-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv6-c004-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv4-c005-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv6-c005-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv4-c006-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv6-c006-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv4-c007-xsp002-starhub-isp.1.oca.nflxvideo.net -ipv4-c002-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv6-c002-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv4-c004-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv6-c004-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv4-c005-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv4-c006-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv6-c006-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv4-c007-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv4-c008-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv6-c008-xsp003-starhub-isp.1.oca.nflxvideo.net -ipv4-c100-fra002-ix.1.oca.nflxvideo.net -ipv4-c010-fra002-ix.1.oca.nflxvideo.net -ipv4-c110-fra002-ix.1.oca.nflxvideo.net -ipv4-c020-fra002-ix.1.oca.nflxvideo.net -ipv4-c120-fra002-ix.1.oca.nflxvideo.net -ipv4-c030-fra002-ix.1.oca.nflxvideo.net -ipv4-c130-fra002-ix.1.oca.nflxvideo.net -ipv4-c040-fra002-ix.1.oca.nflxvideo.net -ipv4-c140-fra002-ix.1.oca.nflxvideo.net -ipv4-c050-fra002-ix.1.oca.nflxvideo.net -ipv4-c150-fra002-ix.1.oca.nflxvideo.net -ipv4-c060-fra002-ix.1.oca.nflxvideo.net -ipv4-c070-fra002-ix.1.oca.nflxvideo.net -ipv4-c080-fra002-ix.1.oca.nflxvideo.net -ipv4-c090-fra002-ix.1.oca.nflxvideo.net -ipv4-c001-fra002-ix.1.oca.nflxvideo.net -ipv4-c101-fra002-ix.1.oca.nflxvideo.net -ipv4-c011-fra002-ix.1.oca.nflxvideo.net -ipv4-c111-fra002-ix.1.oca.nflxvideo.net -ipv4-c021-fra002-ix.1.oca.nflxvideo.net -ipv4-c121-fra002-ix.1.oca.nflxvideo.net -ipv4-c031-fra002-ix.1.oca.nflxvideo.net -ipv4-c131-fra002-ix.1.oca.nflxvideo.net -ipv4-c041-fra002-ix.1.oca.nflxvideo.net -ipv4-c141-fra002-ix.1.oca.nflxvideo.net -ipv4-c051-fra002-ix.1.oca.nflxvideo.net -ipv4-c061-fra002-ix.1.oca.nflxvideo.net -ipv4-c071-fra002-ix.1.oca.nflxvideo.net -ipv4-c081-fra002-ix.1.oca.nflxvideo.net -ipv4-c091-fra002-ix.1.oca.nflxvideo.net -ipv4-c002-fra002-ix.1.oca.nflxvideo.net -ipv4-c102-fra002-ix.1.oca.nflxvideo.net -ipv4-c012-fra002-ix.1.oca.nflxvideo.net -ipv4-c112-fra002-ix.1.oca.nflxvideo.net -ipv4-c022-fra002-ix.1.oca.nflxvideo.net -ipv4-c122-fra002-ix.1.oca.nflxvideo.net -ipv4-c132-fra002-ix.1.oca.nflxvideo.net -ipv4-c042-fra002-ix.1.oca.nflxvideo.net -ipv4-c062-fra002-ix.1.oca.nflxvideo.net -ipv4-c072-fra002-ix.1.oca.nflxvideo.net -ipv4-c082-fra002-ix.1.oca.nflxvideo.net -ipv4-c092-fra002-ix.1.oca.nflxvideo.net -ipv4-c003-fra002-ix.1.oca.nflxvideo.net -ipv4-c103-fra002-ix.1.oca.nflxvideo.net -ipv4-c013-fra002-ix.1.oca.nflxvideo.net -ipv4-c113-fra002-ix.1.oca.nflxvideo.net -ipv4-c023-fra002-ix.1.oca.nflxvideo.net -ipv4-c123-fra002-ix.1.oca.nflxvideo.net -ipv4-c033-fra002-ix.1.oca.nflxvideo.net -ipv4-c133-fra002-ix.1.oca.nflxvideo.net -ipv4-c043-fra002-ix.1.oca.nflxvideo.net -ipv4-c153-fra002-ix.1.oca.nflxvideo.net -ipv4-c063-fra002-ix.1.oca.nflxvideo.net -ipv4-c073-fra002-ix.1.oca.nflxvideo.net -ipv4-c083-fra002-ix.1.oca.nflxvideo.net -ipv4-c093-fra002-ix.1.oca.nflxvideo.net -ipv4-c004-fra002-ix.1.oca.nflxvideo.net -ipv4-c104-fra002-ix.1.oca.nflxvideo.net -ipv4-c014-fra002-ix.1.oca.nflxvideo.net -ipv4-c114-fra002-ix.1.oca.nflxvideo.net -ipv4-c024-fra002-ix.1.oca.nflxvideo.net -ipv4-c124-fra002-ix.1.oca.nflxvideo.net -ipv4-c034-fra002-ix.1.oca.nflxvideo.net -ipv4-c134-fra002-ix.1.oca.nflxvideo.net -ipv4-c044-fra002-ix.1.oca.nflxvideo.net -ipv4-c154-fra002-ix.1.oca.nflxvideo.net -ipv4-c064-fra002-ix.1.oca.nflxvideo.net -ipv4-c074-fra002-ix.1.oca.nflxvideo.net -ipv4-c084-fra002-ix.1.oca.nflxvideo.net -ipv4-c094-fra002-ix.1.oca.nflxvideo.net -ipv4-c005-fra002-ix.1.oca.nflxvideo.net -ipv4-c105-fra002-ix.1.oca.nflxvideo.net -ipv4-c015-fra002-ix.1.oca.nflxvideo.net -ipv4-c115-fra002-ix.1.oca.nflxvideo.net -ipv4-c025-fra002-ix.1.oca.nflxvideo.net -ipv4-c125-fra002-ix.1.oca.nflxvideo.net -ipv4-c035-fra002-ix.1.oca.nflxvideo.net -ipv4-c135-fra002-ix.1.oca.nflxvideo.net -ipv4-c045-fra002-ix.1.oca.nflxvideo.net -ipv4-c145-fra002-ix.1.oca.nflxvideo.net -ipv4-c065-fra002-ix.1.oca.nflxvideo.net -ipv4-c075-fra002-ix.1.oca.nflxvideo.net -ipv4-c085-fra002-ix.1.oca.nflxvideo.net -ipv4-c095-fra002-ix.1.oca.nflxvideo.net -ipv4-c006-fra002-ix.1.oca.nflxvideo.net -ipv4-c106-fra002-ix.1.oca.nflxvideo.net -ipv4-c016-fra002-ix.1.oca.nflxvideo.net -ipv4-c116-fra002-ix.1.oca.nflxvideo.net -ipv4-c026-fra002-ix.1.oca.nflxvideo.net -ipv4-c126-fra002-ix.1.oca.nflxvideo.net -ipv4-c036-fra002-ix.1.oca.nflxvideo.net -ipv4-c136-fra002-ix.1.oca.nflxvideo.net -ipv4-c046-fra002-ix.1.oca.nflxvideo.net -ipv4-c146-fra002-ix.1.oca.nflxvideo.net -ipv4-c056-fra002-ix.1.oca.nflxvideo.net -ipv4-c156-fra002-ix.1.oca.nflxvideo.net -ipv4-c066-fra002-ix.1.oca.nflxvideo.net -ipv4-c076-fra002-ix.1.oca.nflxvideo.net -ipv4-c086-fra002-ix.1.oca.nflxvideo.net -ipv4-c096-fra002-ix.1.oca.nflxvideo.net -ipv4-c007-fra002-ix.1.oca.nflxvideo.net -ipv4-c107-fra002-ix.1.oca.nflxvideo.net -ipv4-c017-fra002-ix.1.oca.nflxvideo.net -ipv4-c117-fra002-ix.1.oca.nflxvideo.net -ipv4-c027-fra002-ix.1.oca.nflxvideo.net -ipv4-c127-fra002-ix.1.oca.nflxvideo.net -ipv4-c037-fra002-ix.1.oca.nflxvideo.net -ipv4-c137-fra002-ix.1.oca.nflxvideo.net -ipv4-c047-fra002-ix.1.oca.nflxvideo.net -ipv4-c057-fra002-ix.1.oca.nflxvideo.net -ipv4-c067-fra002-ix.1.oca.nflxvideo.net -ipv4-c077-fra002-ix.1.oca.nflxvideo.net -ipv4-c087-fra002-ix.1.oca.nflxvideo.net -ipv4-c097-fra002-ix.1.oca.nflxvideo.net -ipv4-c008-fra002-ix.1.oca.nflxvideo.net -ipv4-c108-fra002-ix.1.oca.nflxvideo.net -ipv4-c018-fra002-ix.1.oca.nflxvideo.net -ipv4-c028-fra002-ix.1.oca.nflxvideo.net -ipv4-c128-fra002-ix.1.oca.nflxvideo.net -ipv4-c038-fra002-ix.1.oca.nflxvideo.net -ipv4-c138-fra002-ix.1.oca.nflxvideo.net -ipv4-c048-fra002-ix.1.oca.nflxvideo.net -ipv4-c148-fra002-ix.1.oca.nflxvideo.net -ipv4-c058-fra002-ix.1.oca.nflxvideo.net -ipv4-c158-fra002-ix.1.oca.nflxvideo.net -ipv4-c068-fra002-ix.1.oca.nflxvideo.net -ipv4-c078-fra002-ix.1.oca.nflxvideo.net -ipv4-c088-fra002-ix.1.oca.nflxvideo.net -ipv4-c098-fra002-ix.1.oca.nflxvideo.net -ipv4-c009-fra002-ix.1.oca.nflxvideo.net -ipv4-c109-fra002-ix.1.oca.nflxvideo.net -ipv4-c019-fra002-ix.1.oca.nflxvideo.net -ipv4-c119-fra002-ix.1.oca.nflxvideo.net -ipv4-c029-fra002-ix.1.oca.nflxvideo.net -ipv4-c129-fra002-ix.1.oca.nflxvideo.net -ipv4-c039-fra002-ix.1.oca.nflxvideo.net -ipv4-c139-fra002-ix.1.oca.nflxvideo.net -ipv4-c049-fra002-ix.1.oca.nflxvideo.net -ipv4-c149-fra002-ix.1.oca.nflxvideo.net -ipv4-c059-fra002-ix.1.oca.nflxvideo.net -ipv4-c069-fra002-ix.1.oca.nflxvideo.net -ipv4-c079-fra002-ix.1.oca.nflxvideo.net -ipv4-c089-fra002-ix.1.oca.nflxvideo.net -ipv4-c099-fra002-ix.1.oca.nflxvideo.net -ipv4-c010-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c001-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c011-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c002-fra002-dev-ix.1.oca.nflxvideo.net -ipv6-c002-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c012-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c003-fra002-dev-ix.1.oca.nflxvideo.net -ipv6-c003-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c004-fra002-dev-ix.1.oca.nflxvideo.net -ipv6-c004-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c005-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c006-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c007-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c008-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c009-fra002-dev-ix.1.oca.nflxvideo.net -ipv4-c151-fra002-ix.1.oca.nflxvideo.net -ipv4-c032-fra002-ix.1.oca.nflxvideo.net -ipv4-c142-fra002-ix.1.oca.nflxvideo.net -ipv4-c152-fra002-ix.1.oca.nflxvideo.net -ipv4-c143-fra002-ix.1.oca.nflxvideo.net -ipv4-c144-fra002-ix.1.oca.nflxvideo.net -ipv4-c155-fra002-ix.1.oca.nflxvideo.net -ipv4-c147-fra002-ix.1.oca.nflxvideo.net -ipv4-c157-fra002-ix.1.oca.nflxvideo.net -ipv4-c118-fra002-ix.1.oca.nflxvideo.net -ipv4-c003-mfm001-ctm-isp.1.oca.nflxvideo.net -ipv4-c001-tsa001-chieftelecom-isp.1.oca.nflxvideo.net -ipv4-c001-tsa001-cht-isp.1.oca.nflxvideo.net -ipv4-c002-tsa001-cht-isp.1.oca.nflxvideo.net -ipv4-c003-tsa001-cht-isp.1.oca.nflxvideo.net -ipv4-c004-tsa001-cht-isp.1.oca.nflxvideo.net -ipv4-c005-tsa001-cht-isp.1.oca.nflxvideo.net -ipv4-c006-tsa001-cht-isp.1.oca.nflxvideo.net -ipv4-c007-tsa001-cht-isp.1.oca.nflxvideo.net -ipv4-c008-tsa001-cht-isp.1.oca.nflxvideo.net -ipv4-c002-cjj001-lguplus-isp.1.oca.nflxvideo.net -ipv4-c006-cjj001-lguplus-isp.1.oca.nflxvideo.net -ipv4-c001-hlp001-im2-isp.1.oca.nflxvideo.net -ipv4-c001-hlp001-myrepublicid-isp.1.oca.nflxvideo.net -ipv4-c002-hlp001-myrepublicid-isp.1.oca.nflxvideo.net -ipv4-c001-hlp001-cbn-isp.1.oca.nflxvideo.net -ipv4-c002-hlp001-cbn-isp.1.oca.nflxvideo.net -ipv4-c001-hlp002-linknet-isp.1.oca.nflxvideo.net -ipv4-c002-hlp002-linknet-isp.1.oca.nflxvideo.net -ipv4-c001-hlp003-linknet-isp.1.oca.nflxvideo.net -ipv4-c002-hlp003-linknet-isp.1.oca.nflxvideo.net -ipv4-c001-hlp001-mncplay-isp.1.oca.nflxvideo.net -ipv4-c002-hlp001-mncplay-isp.1.oca.nflxvideo.net -ipv4-c001-bdo001-starnetid-isp.1.oca.nflxvideo.net -ipv4-c002-bdo001-starnetid-isp.1.oca.nflxvideo.net -ipv4-c002-cgk001-moratel-isp.1.oca.nflxvideo.net -ipv4-c001-cgk001-linknet-isp.1.oca.nflxvideo.net -ipv4-c002-cgk001-linknet-isp.1.oca.nflxvideo.net -ipv4-c003-cgk001-linknet-isp.1.oca.nflxvideo.net -ipv4-c001-cgk002-linknet-isp.1.oca.nflxvideo.net -ipv4-c002-cgk002-linknet-isp.1.oca.nflxvideo.net -ipv4-c003-cgk002-linknet-isp.1.oca.nflxvideo.net -ipv4-c003-cgk002-biznet-isp.1.oca.nflxvideo.net -ipv4-c004-cgk002-biznet-isp.1.oca.nflxvideo.net -ipv4-c001-cxp001-biznet-isp.1.oca.nflxvideo.net -ipv4-c001-sub001-biznet-isp.1.oca.nflxvideo.net -ipv4-c016-jnb001-ix.1.oca.nflxvideo.net -ipv4-c010-jnb001-ix.1.oca.nflxvideo.net -ipv4-c025-jnb001-ix.1.oca.nflxvideo.net -ipv4-c027-jnb001-ix.1.oca.nflxvideo.net -ipv6-c001-sin001-ix.1.oca.nflxvideo.net -ipv4-c002-jnb001-ix.1.oca.nflxvideo.net -ipv4-c008-jnb001-ix.1.oca.nflxvideo.net -ipv4-c004-jnb001-ix.1.oca.nflxvideo.net -ipv6-c063-sin001-ix.1.oca.nflxvideo.net -ipv6-c117-fra002-ix.1.oca.nflxvideo.net -ipv4-c037-jnb001-ix.1.oca.nflxvideo.net -ipv4-c026-jnb001-ix.1.oca.nflxvideo.net -ipv6-c124-fra002-ix.1.oca.nflxvideo.net -ipv6-c062-hkg001-ix.1.oca.nflxvideo.net -ipv6-c058-hkg001-ix.1.oca.nflxvideo.net -ipv6-c057-sin001-ix.1.oca.nflxvideo.net -ipv6-c051-hkg001-ix.1.oca.nflxvideo.net -ipv6-c108-fra002-ix.1.oca.nflxvideo.net -ipv4-c024-jnb001-ix.1.oca.nflxvideo.net -ipv4-c030-jnb001-ix.1.oca.nflxvideo.net -ipv4-c010-osa001-ix.1.oca.nflxvideo.net -ipv4-c020-osa001-ix.1.oca.nflxvideo.net -ipv4-c001-osa001-ix.1.oca.nflxvideo.net -ipv4-c011-osa001-ix.1.oca.nflxvideo.net -ipv4-c021-osa001-ix.1.oca.nflxvideo.net -ipv4-c002-osa001-ix.1.oca.nflxvideo.net -ipv4-c012-osa001-ix.1.oca.nflxvideo.net -ipv4-c022-osa001-ix.1.oca.nflxvideo.net -ipv4-c003-osa001-ix.1.oca.nflxvideo.net -ipv4-c013-osa001-ix.1.oca.nflxvideo.net -ipv4-c004-osa001-ix.1.oca.nflxvideo.net -ipv4-c014-osa001-ix.1.oca.nflxvideo.net -ipv4-c005-osa001-ix.1.oca.nflxvideo.net -ipv4-c015-osa001-ix.1.oca.nflxvideo.net -ipv4-c006-osa001-ix.1.oca.nflxvideo.net -ipv4-c016-osa001-ix.1.oca.nflxvideo.net -ipv4-c007-osa001-ix.1.oca.nflxvideo.net -ipv4-c017-osa001-ix.1.oca.nflxvideo.net -ipv4-c008-osa001-ix.1.oca.nflxvideo.net -ipv4-c018-osa001-ix.1.oca.nflxvideo.net -ipv4-c009-osa001-ix.1.oca.nflxvideo.net -ipv4-c019-osa001-ix.1.oca.nflxvideo.net -ipv4-c020-jnb001-ix.1.oca.nflxvideo.net -ipv4-c001-jnb001-ix.1.oca.nflxvideo.net -ipv4-c011-jnb001-ix.1.oca.nflxvideo.net -ipv4-c021-jnb001-ix.1.oca.nflxvideo.net -ipv4-c031-jnb001-ix.1.oca.nflxvideo.net -ipv4-c012-jnb001-ix.1.oca.nflxvideo.net -ipv4-c022-jnb001-ix.1.oca.nflxvideo.net -ipv4-c032-jnb001-ix.1.oca.nflxvideo.net -ipv4-c003-jnb001-ix.1.oca.nflxvideo.net -ipv4-c023-jnb001-ix.1.oca.nflxvideo.net -ipv4-c033-jnb001-ix.1.oca.nflxvideo.net -ipv4-c014-jnb001-ix.1.oca.nflxvideo.net -ipv4-c034-jnb001-ix.1.oca.nflxvideo.net -ipv4-c005-jnb001-ix.1.oca.nflxvideo.net -ipv4-c015-jnb001-ix.1.oca.nflxvideo.net -ipv4-c006-jnb001-ix.1.oca.nflxvideo.net -ipv4-c036-jnb001-ix.1.oca.nflxvideo.net -ipv4-c007-jnb001-ix.1.oca.nflxvideo.net -ipv4-c017-jnb001-ix.1.oca.nflxvideo.net -ipv4-c018-jnb001-ix.1.oca.nflxvideo.net -ipv4-c028-jnb001-ix.1.oca.nflxvideo.net -ipv4-c038-jnb001-ix.1.oca.nflxvideo.net -ipv4-c009-jnb001-ix.1.oca.nflxvideo.net -ipv4-c019-jnb001-ix.1.oca.nflxvideo.net -ipv4-c029-jnb001-ix.1.oca.nflxvideo.net -ipv4-c013-jnb001-ix.1.oca.nflxvideo.net -ipv4-c035-jnb001-ix.1.oca.nflxvideo.net -dualstack.apiproxy-nrdp-prod-nlb-4-9fae3883a092e5c6.elb.us-west-2.amazonaws.com -dualstack.apiproxy-nrdp-prod-nlb-2-42101415231301e4.elb.us-west-2.amazonaws.com -dualstack.apiproxy-nrdp-prod-nlb-1-4659b24f746a127b.elb.us-west-2.amazonaws.com -dualstack.apiproxy-nrdp-prod-nlb-3-80d1f4b305f7c0e4.elb.us-west-2.amazonaws.com -ipv4-c002-hkg001-pccw-isp.1.oca.nflxvideo.net -ipv6-c012-hkg001-ix.1.oca.nflxvideo.net -ipv6-c006-sin001-starhub-isp.1.oca.nflxvideo.net -ipv6-c026-sin001-ix.1.oca.nflxvideo.net -ipv4-c001-cgk001-moratel-isp.1.oca.nflxvideo.net -ipv4-c221-sjc002-ix.1.oca.nflxvideo.net -ipv4-c204-sjc002-dev-ix.1.oca.nflxvideo.net -ipv4-c070-lax009-ix.1.oca.nflxvideo.net -ipv4-c024-lax009-ix.1.oca.nflxvideo.net -ipv4-c044-lhr005-ix.1.oca.nflxvideo.net -ipv4-c133-lhr004-ix.1.oca.nflxvideo.net -ipv4-c144-sea001-ix.1.oca.nflxvideo.net -ipv4-c046-nyc005-ix.1.oca.nflxvideo.net -ipv4-c007-pdx001-ix.1.oca.nflxvideo.net -ipv4-c111-lhr004-ix.1.oca.nflxvideo.net -ipv4-c059-lhr005-ix.1.oca.nflxvideo.net -ipv4-c162-sea001-ix.1.oca.nflxvideo.net -ipv4-c031-nyc005-ix.1.oca.nflxvideo.net -ipv4-c022-pdx001-ix.1.oca.nflxvideo.net -ipv6-c212-sea001-ix.1.oca.nflxvideo.net -ipv6-c147-sea001-ix.1.oca.nflxvideo.net -ipv6-c181-sea001-ix.1.oca.nflxvideo.net -ipv6-c204-sea001-ix.1.oca.nflxvideo.net -ipv4-c132-lhr004-ix.1.oca.nflxvideo.net -ipv4-c067-lhr005-ix.1.oca.nflxvideo.net -ipv4-c197-sea001-ix.1.oca.nflxvideo.net -ipv4-c044-pdx001-ix.1.oca.nflxvideo.net -ipv4-c060-nyc005-ix.1.oca.nflxvideo.net diff --git a/luci-app-openclash/root/usr/share/openclash/res/default.yaml b/luci-app-openclash/root/usr/share/openclash/res/default.yaml deleted file mode 100644 index 96a75dc0..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/default.yaml +++ /dev/null @@ -1,410 +0,0 @@ -# Copyright (c) 2018 Dreamacro -# 接管:不支持在此页面直接修改,请到全局设置页面进行修改 - -# Port of HTTP(S) proxy server on the local end -# 此项将被接管 -port: 7890 - -# Port of SOCKS5 proxy server on the local end -# 此项将被接管 -socks-port: 7891 - -# Transparent proxy server port for Linux and macOS -# 此项将被接管 -redir-port: 7892 - -# HTTP(S) and SOCKS5 server on the same port -mixed-port: 7890 - -# Set to true to allow connections to the local-end server from -# other LAN IP addresses -# 此项将被接管为true -allow-lan: true - -# This is only applicable when `allow-lan` is `true` -# '*': bind all IP addresses -# 192.168.122.11: bind a single IPv4 address -# "[aaaa::a8aa:ff:fe09:57d8]": bind a single IPv6 address -# HTTP(S)\SOCKS5 监听地址,此项将被接管为all -bind-address: "*" - -# Clash router working mode -# rule: rule-based packet routing -# global: all packets will be forwarded to a single endpoint -# direct: directly forward the packets to the Internet -# 此项将被接管 -mode: rule - -# Clash by default prints logs to STDOUT -# info / warning / error / debug / silent -# 此项将被接管 -log-level: info - -# When set to false, resolver won't translate hostnames to IPv6 addresses -# 此项将被接管 -ipv6: false - -# RESTful web API listening address -# 此项将被接管 -external-controller: 0.0.0.0:9090 - -# A relative path to the configuration directory or an absolute path to a -# directory in which you put some static web resource. Clash core will then -# serve it at `http://{{external-controller}}/ui`. -# 此项将被接管 -external-ui: "/usr/share/openclash/dashboard" - -# Secret for the RESTful API (optional) -# Authenticate by spedifying HTTP header `Authorization: Bearer ${secret}` -# ALWAYS set a secret if RESTful API is listening on 0.0.0.0 -# 此项将被接管 -secret: '123456' - -# authentication of local SOCKS5/HTTP(S) server -# 此项将被接管 -authentication: - - "user1:pass1" - - "user2:pass2" - -# Outbound interface name -interface-name: br-lan - -# tun option -# 此项将被接管 -tun: -# enable: false -# stack: system -# dns-hijack: -# - tcp://8.8.8.8:53 -# - tcp://8.8.4.4:53 - -# Static hosts for DNS server and connection establishment, only works -# when `dns.enhanced-mode` is `redir-host`. -# -# Wildcard hostnames are supported (e.g. *.clash.dev, *.foo.*.example.com) -# Non-wildcard domain names have a higher priority than wildcard domain names -# e.g. foo.example.com > *.example.com > .example.com -# P.S. +.foo.com equals to .foo.com and foo.com -hosts: - # '*.clash.dev': 127.0.0.1 - # '.dev': 127.0.0.1 - # 'alpha.clash.dev': '::1' - -profile: - # store the `select` results in $HOME/.config/clash/.cache - # when two different configurations have groups with the same name, the selected values are shared - # set false if you don't want this behavior - store-selected: true - # open tracing exporter API - tracing: true - -# DNS server settings -# This section is optional. When not present, the DNS server will be disabled. -# 如订阅配置无包括此项的所有DNS设置,OpenClash将自动添加 -dns: - enable: true # set true to enable dns (default is false) # 此项将被接管为true - ipv6: false # default is false # 此项将被接管 - listen: 0.0.0.0:53 # 端口为53时将被接管为7874 - # These nameservers are used to resolve the DNS nameserver hostnames below. - # Specify IP addresses only - default-nameserver: - - 114.114.114.114 - - 8.8.8.8 - enhanced-mode: redir-host # or fake-ip # 此项将被接管 - fake-ip-range: 198.18.0.1/16 # Fake IP addresses pool CIDR # 此项将被接管 - use-hosts: true # lookup hosts and return IP record # 此项将被接管 - # Hostnames in this list will not be resolved with fake IPs - # i.e. questions to these domain names will always be answered with their - # real IP addresses - # fake-ip-filter: - # - '*.lan' - # - localhost.ptlogin2.qq.com - - # Supports UDP, TCP, DoT, DoH. You can specify the port to connect to. - # All DNS questions are sent directly to the nameserver, without proxies - # involved. Clash answers the DNS question with the first result gathered. - nameserver: - - 114.114.114.114 - - https://1.1.1.1/dns-query # dns over https - fallback: # concurrent request with nameserver, fallback used when GEOIP country isn't CN - - tcp://1.1.1.1 - fallback-filter: - geoip: true # default - ipcidr: # ips in these subnets will be considered polluted - - 240.0.0.0/4 - -# 以上设置您可直接覆盖到配置文件,无需更改 -# Openclash 不会对下方服务器设置进行任何更改,请确保设置正确 - -#proxy-providers: # 代理集设置,此部分与Proxy两者不能同时删除 -# pro: -# type: http -# path: ./proxy_provider/pro.yaml -# url: https://xxx -# interval: 3600 -# health-check: -# enable: true -# url: http://www.gstatic.com/generate_204 -# interval: 300 -# iplc: -# type: file -# path: ./proxy_provider/iplc.yaml -# health-check: -# enable: true -# url: http://www.gstatic.com/generate_204 -# interval: 300 - -proxies: # 节点设置,此部分与proxy-provider两者不能同时删除 - -# shadowsocks -# The supported ciphers(encrypt methods): -# aes-128-gcm aes-192-gcm aes-256-gcm -# aes-128-cfb aes-192-cfb aes-256-cfb -# aes-128-ctr aes-192-ctr aes-256-ctr -# rc4-md5 chacha20-ietf xchacha20 -# chacha20-ietf-poly1305 xchacha20-ietf-poly1305 -- name: "ss1" - type: ss - server: server - port: 443 - cipher: chacha20-ietf-poly1305 - password: "password" - # udp: true - -# old obfs configuration remove after prerelease -- name: "ss2" - type: ss - server: server - port: 443 - cipher: chacha20-ietf-poly1305 - password: "password" - plugin: obfs - plugin-opts: - mode: tls # or http - # host: bing.com - -- name: "ss3" - type: ss - server: server - port: 443 - cipher: chacha20-ietf-poly1305 - password: "password" - plugin: v2ray-plugin - plugin-opts: - mode: websocket # no QUIC now - # tls: true # wss - # skip-cert-verify: true - # host: bing.com - # path: "/" - # headers: - # custom: value - -# shadowsocksR -#The supported shadowsocksR ciphers(encrypt methods): -#aes-128-cfb aes-192-cfb aes-256-cfb -#aes-128-ctr aes-192-ctr aes-256-ctr -#rc4-md5 chacha20-ietf xchacha20 - -#The supported shadowsocksR obfses: -#plain http_simple http_post -#random_head tls1.2_ticket_auth tls1.2_ticket_fastauth - -#The supported shadowsocksR protocols: -#origin auth_sha1_v4 auth_aes128_md5 -#auth_aes128_sha1 auth_chain_a auth_chain_b - -- name: "ssr" - type: ssr - server: server - port: 443 - cipher: chacha20-ietf - password: "password" - obfs: tls1.2_ticket_auth - protocol: auth_sha1_v4 - # obfs-param: domain.tld - # protocol-param: "#" - # udp: true - -# vmess -# cipher support auto/aes-128-gcm/chacha20-poly1305/none -- name: "vmess" - type: vmess - server: server - port: 443 - uuid: uuid - alterId: 32 - cipher: auto - # udp: true - # tls: true - # skip-cert-verify: true - # servername: example.com # priority over wss host - # network: ws - # ws-opts: - # path: /path - # headers: - # Host: v2ray.com - # max-early-data: 2048 - # early-data-header-name: Sec-WebSocket-Protocol - -- name: "vmess-http" - type: vmess - server: server - port: 443 - uuid: uuid - alterId: 32 - cipher: auto - # udp: true - # network: http - # http-opts: - # # method: "GET" - # # path: - # # - '/' - # # - '/video' - # # headers: - # # Connection: - # # - keep-alive - -# socks5 -- name: "socks" - type: socks5 - server: server - port: 443 - # username: username - # password: password - # tls: true - # skip-cert-verify: true - # udp: true -# http -- name: "http" - type: http - server: server - port: 443 - # username: username - # password: password - # tls: true # https - # skip-cert-verify: true - -# snell -- name: "snell" - type: snell - server: server - port: 44046 - psk: yourpsk - # obfs-opts: - # mode: http # or tls - # host: bing.com - -# trojan -- name: "trojan" - type: trojan - server: server - port: 443 - password: yourpsk - # udp: true - # sni: example.com # aka server name - # alpn: - # - h2 - # - http/1.1 - # skip-cert-verify: true - -# Openclash 不会对下方策略组设置进行任何更改,请确保设置正确 - -proxy-groups: # 此参数必须保留,不能删除 - -# relay chains the proxies. proxies shall not contain a proxy-group. No UDP support. -# Traffic: clash <-> http <-> vmess <-> ss1 <-> ss2 <-> Internet -- name: "relay" - type: relay - proxies: - - http - - vmess - - ss1 - - ss2 - -# url-test select which proxy will be used by benchmarking speed to a URL. -- name: "auto" - type: url-test - proxies: - - ss1 - - ss2 - - vmess1 - url: 'http://www.gstatic.com/generate_204' - interval: 300 - -# fallback select an available policy by priority. The availability is tested by accessing an URL, just like an auto url-test group. -- name: "fallback-auto" - type: fallback - proxies: - - ss1 - - ss2 - - vmess1 - url: 'http://www.gstatic.com/generate_204' - interval: 300 - -# load-balance: The request of the same eTLD will be dial on the same proxy. -- name: "load-balance" - type: load-balance - strategy: consistent-hashing # or round-robin - proxies: - - ss1 - - ss2 - - vmess1 - url: 'http://www.gstatic.com/generate_204' - interval: 300 - -# select is used for selecting proxy or proxy group -# you can use RESTful API to switch proxy, is recommended for use in GUI. -- name: Proxy - type: select - proxies: - - ss1 - - ss2 - - vmess1 - - auto - -- name: UseProvider - type: select - use: - - provider1 - proxies: - - Proxy - - DIRECT - -# https://lancellc.gitbook.io/clash/clash-config-file/rule-provider -#rule-providers: -# name: # name of the provider -# type: http # type of the provider, it can be a HTTP or a File -# behavior: classical # or ipcidr、domain -# path: # where is the file, ./ relative to clash home -# url: # only available when type is HTTP, where to download a file. You don't need to create a new file in local space. -# interval: # auto-update interval, only available when type is HTTP - -# https://lancellc.gitbook.io/clash/clash-config-file/script -#script: -# code: | -# def main(ctx, metadata): -# ip = metadata["dst_ip"] = ctx.resolve_ip(metadata["host"]) -# if ip == "": -# return "DIRECT" -# -# code = ctx.geoip(ip) -# if code == "LAN" or code == "CN": -# return "DIRECT" -# -# return "Proxy" # default policy for requests which are not matched by any other script - -rules: # 此参数必须保留,不能删除 -# 如果您将一直使用第三方规则,下方可以留空。 -- DOMAIN-SUFFIX,google.com,auto -- DOMAIN-KEYWORD,google,auto -- DOMAIN,google.com,auto -- DOMAIN-SUFFIX,ad.com,REJECT -- IP-CIDR,127.0.0.0/8,DIRECT -# rename SOURCE-IP-CIDR and would remove after prerelease -- SRC-IP-CIDR,192.168.1.201/32,DIRECT -- GEOIP,CN,DIRECT -- DST-PORT,80,DIRECT -- SRC-PORT,7777,DIRECT -# or use rule with provider -- RULE-SET,name,Proxy -- MATCH,auto \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/res/game_rules.list b/luci-app-openclash/root/usr/share/openclash/res/game_rules.list deleted file mode 100644 index c4f5f644..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/game_rules.list +++ /dev/null @@ -1,148 +0,0 @@ -300英雄,300hero-cn.rules -永恒之塔-台服,Aion-TW.rules -美国卡车模拟国际服,American-Truck-Simulator.rules -圣歌,Anthem.rules -Apex-uu,Apex-uu.rules -Apex英雄,Apex.rules -武装突袭(Codefourgaming和官服),Arma3.rules -方舟:生存进化,ARK--Survival-Evolved.rules -刺客信条:奥德赛,Assassin's-Creed-Odyssey.rules,Assassins-Creed-Odyssey.rules -刺客信条:起源,Assassin's-Creed-Origins.rules,Assassins-Creed-Origins.rules -Atlas-全区,Atlas.rules -战地1,Battlefield-1.rules -战地4,BattleField-4.rules -战地5,Battlefield-Ⅴ.rules,Battlefield-5.rules -黑色沙漠,Black-Desert.rules -黑色幸存者,BlackSurvivor.rules -剑灵台服,Blade&Soul TW.rules -剑灵-日服,Blade-&-Soul-jp.rules -剑灵-国服全部区服(UU规则),Blood-&-Soul-CN-TestServer-NantianGuo-Alpha.rules -剑灵-国服-南天国(测试版),Blood-&-Soul-CN.rules -无主之地3,Borderlands3-asia.rules -泡泡战士-跑跑卡丁车-韩服,BubbleFighter-KartRider-KR.rules -使命召唤4:现代战争重置版,Call-Of-Duty-4-Modern-Warfare.rules -使命召唤15亚服,Call-Of-Duty15-Asia.rules -英雄连2,Company-Of-Heroes-2.rules -反恐精英:全球攻势,CS-GO.rules -反恐精英:全球攻势-港服(tx),CSGO-HKtx.rules -反恐精英:全球攻势-日服(tx),CSGO-JPtx.rules -反恐精英:全球攻势-美服(tx),CSGO-UStx.rules -黑暗之魂3,Dark-Souls-3.rules -不屈不挠,Dauntless.rules -DayZ-steam,DayZ.rules -黎明杀机,Dead-by-Daylight.rules -命运2-全服(tx),Destiny2-Alltx.rules -命运2-全服(uu),Destiny2-Alluu.rules -天命2-亚服/命运2-亚服,Destiny2-Asia.rules -天命2-欧服/命运2-欧服,Destiny2-EU.rules -命运2-steam,Destiny2-steam.rules -天命2-美服/命运2-美服,Destiny2-US.rules -暗黑破坏神3-亚服,Diablo3-Asia.rules -暗黑破坏神3-美服,Diablo3-US.rules -脏弹-Steam,Dirty-Bomb.rules -Discord,Discord-All.rules -饥荒-steam,Don't-Starve-steam.rules,Dont-Starve-steam.rules -刀塔霸业,Dota-Underlords.rules -DOTA2-日服,Dota2-jp.rules -逃离塔科夫,Escape-from-Tarkov.rules -欧卡2所有分区-UU,Euro-Truck-Simulator-2.rules -Eve-online欧服,Eve-online.rules -FIFA19,FiFa19-INT.rules -FIFA20,FIFA20.rules -最终幻想14国服,FINAL-FANTASY-XIV-cn.rules -最终幻想14,Final-Fantasy-XIV.rules -荣耀战魂,For-Honour.rules -堡垒之夜-亚服,Fortnite-AS.rules -堡垒之夜-国服,Fortnite-cn.rules -极限竞速地平线4,Forza-Horizon-4.rules -极限竞速7,Forza-Motorsport-7.rules -基佬大乱斗Gang-Beasts,Gang-Beasts.rules -GTA5,GTA-5.rules -激战2,Guild-Wars-2.rules -巫师昆特牌国际服,Gwent_The-Witcher-Card-game.rules -杀手2外服,HITMAN2.rules -光环:士官长合集,Halo-The-Master-Chief-Collection.rules -荒野行动PC版-国服,HuangYeXingDong-cn.rules -叛乱:沙漠风暴,Insurgency-Sandstorm.rules -Jump大乱斗,Jump-Force.rules -跑跑卡丁车(韩服),KartRider.rules -Kurtzpel,Kurtzpel.rules -求生之路2-Test,L4D2-Test.rules -英雄联盟-日服,League-of-Legends-jp.rules -英雄联盟-韩服,League-of-Legends-kr.rules -英雄联盟PBE,League-of-Legends-PBE.rules -英雄联盟-台服,League-of-Legends-tw+Garena(2018-12-19).rules -英雄联盟-台服+Garena平台(2018-12-19更新),League-of-Legends-tw.rules -英雄联盟-美服,League-of-Legends-us.rules -失落的方舟韩服,Lost-Ark.rules -失落的方舟俄服,Lostark-RU.rules -冒险岛,Maplestory-us.rules -怪兽世界猎人steam版,Monster-Hunter-World.rules -万智牌:竞技场-国际服,MTG-Arena.rules -奇迹传奇MU2,MU2.rules -我的世界-地下城,Minecraft-Dungeons.rules -NBA-2K19,NBA-2K19.rules -NBA2K20,NBA2K20.rules -仁王,NIOH.rules -橘子客户端-UU,Origin.rules -Osu!,Osu!.rules -守望先锋-亚服,Overwatch-Asia.rules -守望先锋-美服,Overwatch-US.rules -流亡黯道-国际服,Path Of Exile.rules -流放之路,PathOfexile.rules -梦幻之星2-日服(tx),PHANTASY STAR ONLINE2-JPtx.rules -行星边际2,PlanetSide-2.rules -绝地求生大逃杀,PlayerUnknown's-Battlegrounds-update.rules,PlayerUnknowns-Battlegrounds-update.rules -实况足球-2018,Pro-Evolution-Soccer-2018.rules -实况足球-2019,Pro-Evolution-Soccer-2019.rules -绝地求生亚服-东南亚服,PUBG-Asia&-Southeast-Asia.rules -绝地求生国际服,PUBG-INT.rules -绝地求生韩服,PUBG-kakao.rules -绝地求生低配版-Garena,PUBGLite-Garena.rules -绝地求生轻量版-WEB客户端,PUBGLITE-WEB.rules -R2竞技场服,R2Arena.rules -R2俄服官服,R2RU.rules -R2美服,R2US.rules -仙境传说OL美国,Ragnarok-Online-2-us.rules -仙境传说OL台湾,Ragnarok-Online-tw.rules -荒野大镖客2,Red-dead-redemption2.rules -无限法则,Ring-of-Elysium-asia.rules -Roblox,Roblox.rules -影之诗,Shadowverse.rules -灵魂行者-台服,Soul-Worker.rules -星际公民,Star-Citizen.rules -星球大战2前线,Star-Wars-BattlefrontII.rules -StarCraft-亚服,StarCraft-2-asia.rules -星际争霸2-国服,StarCraftⅡ-cn.rules,StarCraft2-cn.rules -Steam-社区(Beta),Steam.rules -极限巅峰,Steep.rules -街头霸王5,Street-Fighter-V.rules -神谕之战,TERA.rules -飙酷车神,The-Crew.rules -飙酷车神2,The-Crew2.rules -上古卷轴OL,The-Elder-Scrolls-Online.rules -天涯明月刀-台服,TianYaMingYueDao-tw.rules -泰坦陨落2,TiTanFall2.rules -新枫之谷,TMS.rules -幽灵行动:荒野,Tom-Clancy's-Ghost-Recon-Wildlands.rules,Tom-Clancys-Ghost-Recon-Wildlands.rules -彩虹六号-围攻-全部,Tom-Clancy's-Rainbow-Six-Siege-all.rules,Tom-Clancys-Rainbow-Six-Siege-all.rules -彩虹六号-围攻-EAS,Tom-Clancy's-Rainbow-Six-Siege-EAS.rules,Tom-Clancys-Rainbow-Six-Siege-EAS.rules -全境封锁,Tom-clancy's-The-Division-2.rules,Tom-clancys-The-Division-2.rules -全境封锁2,Tom-clancy's-The-Division.rules,Tom-clancys-The-Division.rules -未转变者Unturned,Unturned.rules -无畏契约,Valorant.rules -战争雷霆,War-thunder-steam.rules -战争前线-steam,Warface.rules -看门狗,Watch-Dogs.rules -看门狗2,Watch-Dogs2.rules -求生意志OL,Will-To-Live-Online.rules -坦克世界-亚服,World-of-Tanks-Asia.rules -坦克世界-国服,World-of-Tanks-cn.rules -坦克世界闪电战,World-of-Tanks-Blitz.rules -魔兽世界台服,World-of-warcraft-tw.rules -战舰世界-亚服,World-of-Warships-US.rules -战舰世界-美服,World-of-Warships.rules -僵尸世界大战,Worldwar-Z.rules -魔兽世界-欧服,WoW-EU.rules -游戏王决斗链接,YO-GI-HO delulinks.rules -游侠对战平台,YouXiaDuiZhanPingTai.rules diff --git a/luci-app-openclash/root/usr/share/openclash/res/lhie1.yaml b/luci-app-openclash/root/usr/share/openclash/res/lhie1.yaml deleted file mode 100644 index 6c1cae88..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/lhie1.yaml +++ /dev/null @@ -1,462 +0,0 @@ -rules: -- RULE-SET,Reject,AdBlock -- RULE-SET,Special,DIRECT -- RULE-SET,Netflix,Netflix -- RULE-SET,Spotify,Spotify -- RULE-SET,YouTube,YouTube -- RULE-SET,Disney Plus,Disney -- RULE-SET,Bilibili,Asian TV -- RULE-SET,IQ,Asian TV -- RULE-SET,IQIYI,Asian TV -- RULE-SET,Letv,Asian TV -- RULE-SET,Netease Music,Asian TV -- RULE-SET,Tencent Video,Asian TV -- RULE-SET,Youku,Asian TV -- RULE-SET,WeTV,Asian TV -- RULE-SET,ABC,Global TV -- RULE-SET,Abema TV,Global TV -- RULE-SET,Amazon,Global TV -- RULE-SET,Apple News,Global TV -- RULE-SET,Apple TV,Global TV -- RULE-SET,Bahamut,Global TV -- RULE-SET,BBC iPlayer,Global TV -- RULE-SET,DAZN,Global TV -- RULE-SET,Discovery Plus,Global TV -- RULE-SET,encoreTVB,Global TV -- RULE-SET,Fox Now,Global TV -- RULE-SET,Fox+,Global TV -- RULE-SET,HBO Go,Global TV -- RULE-SET,HBO Max,Global TV -- RULE-SET,Hulu Japan,Global TV -- RULE-SET,Hulu,Global TV -- RULE-SET,Japonx,Global TV -- RULE-SET,JOOX,Global TV -- RULE-SET,KKBOX,Global TV -- RULE-SET,KKTV,Global TV -- RULE-SET,Line TV,Global TV -- RULE-SET,myTV SUPER,Global TV -- RULE-SET,Pandora,Global TV -- RULE-SET,PBS,Global TV -- RULE-SET,Pornhub,Global TV -- RULE-SET,Soundcloud,Global TV -- RULE-SET,ViuTV,Global TV -- RULE-SET,Telegram,Telegram -- RULE-SET,Steam,Steam -- RULE-SET,Speedtest,Speedtest -- RULE-SET,PayPal,PayPal -- RULE-SET,Microsoft,Microsoft -- RULE-SET,Apple,Apple -- RULE-SET,Google FCM,Google FCM -- RULE-SET,Scholar,Scholar -- RULE-SET,PROXY,Proxy -- RULE-SET,Domestic,Domestic -- RULE-SET,Domestic IPs,Domestic -- RULE-SET,LAN,DIRECT -- GEOIP,CN,Domestic -- MATCH,Others -script: - code: | - def main(ctx, metadata): - ruleset_action = {"Reject": "AdBlock", - "Special": "DIRECT", - "Netflix": "Netflix", - "Spotify": "Spotify", - "YouTube": "YouTube", - "Disney Plus": "Disney", - "Bilibili": "Asian TV", - "IQ": "Asian TV", - "IQIYI": "Asian TV", - "Letv": "Asian TV", - "Netease Music": "Asian TV", - "Tencent Video": "Asian TV", - "Youku": "Asian TV", - "WeTV": "Asian TV", - "ABC": "Global TV", - "Abema TV": "Global TV", - "Amazon": "Global TV", - "Apple News": "Global TV", - "Apple TV": "Global TV", - "Bahamut": "Global TV", - "BBC iPlayer": "Global TV", - "DAZN": "Global TV", - "Discovery Plus": "Global TV", - "encoreTVB": "Global TV", - "Fox Now": "Global TV", - "Fox+": "Global TV", - "HBO Go": "Global TV", - "HBO Max": "Global TV", - "Hulu Japan": "Global TV", - "Hulu": "Global TV", - "Japonx": "Global TV", - "JOOX": "Global TV", - "KKBOX": "Global TV", - "KKTV": "Global TV", - "Line TV": "Global TV", - "myTV SUPER": "Global TV", - "Pandora": "Global TV", - "PBS": "Global TV", - "Pornhub": "Global TV", - "Soundcloud": "Global TV", - "ViuTV": "Global TV", - "Telegram": "Telegram", - "Steam": "Steam", - "Speedtest": "Speedtest", - "PayPal": "PayPal", - "Microsoft": "Microsoft", - "Apple": "Apple", - "Google FCM": "Google FCM", - "Scholar": "Scholar", - "PROXY": "Proxy", - "Domestic": "Domestic", - "Domestic IPs": "Domestic", - "LAN": "DIRECT" - } - - port = int(metadata["dst_port"]) - - if metadata["network"] == "UDP": - if port == 443: - ctx.log('[Script] matched QUIC traffic use reject') - return "REJECT" - - port_list = [21, 22, 23, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 998, 2052, 2053, 2082, 2083, 2086, 2095, 2096, 5222, 5228, 5229, 5230, 8080, 8443, 8880, 8888, 8889] - if port not in port_list: - ctx.log('[Script] not common port use direct') - return "DIRECT" - - if metadata["dst_ip"] == "": - metadata["dst_ip"] = ctx.resolve_ip(metadata["host"]) - - for ruleset in ruleset_action: - if ctx.rule_providers[ruleset].match(metadata): - return ruleset_action[ruleset] - - if metadata["dst_ip"] == "": - return "DIRECT" - - code = ctx.geoip(metadata["dst_ip"]) - if code == "CN": - ctx.log('[Script] Geoip CN') - return "Domestic" - - ctx.log('[Script] FINAL') - return "Others" -rule-providers: - Reject: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Reject.yaml - path: "./Rules/Reject" - interval: 86400 - Special: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Special.yaml - path: "./Rules/Special" - interval: 86400 - Netflix: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Netflix.yaml - path: "./Rules/Media/Netflix" - interval: 86400 - Spotify: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Spotify.yaml - path: "./Rules/Media/Spotify" - interval: 86400 - YouTube: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/YouTube.yaml - path: "./Rules/Media/YouTube" - interval: 86400 - Bilibili: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Bilibili.yaml - path: "./Rules/Media/Bilibili" - interval: 86400 - IQ: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/IQ.yaml - path: "./Rules/Media/IQI" - interval: 86400 - IQIYI: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/IQIYI.yaml - path: "./Rules/Media/IQYI" - interval: 86400 - Letv: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Letv.yaml - path: "./Rules/Media/Letv" - interval: 86400 - Netease Music: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Netease%20Music.yaml - path: "./Rules/Media/Netease_Music" - interval: 86400 - Tencent Video: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Tencent%20Video.yaml - path: "./Rules/Media/Tencent_Video" - interval: 86400 - Youku: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Youku.yaml - path: "./Rules/Media/Youku" - interval: 86400 - WeTV: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/WeTV.yaml - path: "./Rules/Media/WeTV" - interval: 86400 - ABC: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/ABC.yaml - path: "./Rules/Media/ABC" - interval: 86400 - Abema TV: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Abema%20TV.yaml - path: "./Rules/Media/Abema_TV" - interval: 86400 - Amazon: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Amazon.yaml - path: "./Rules/Media/Amazon" - interval: 86400 - Apple News: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Apple%20News.yaml - path: "./Rules/Media/Apple_News" - interval: 86400 - Apple TV: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Apple%20TV.yaml - path: "./Rules/Media/Apple_TV" - interval: 86400 - Bahamut: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Bahamut.yaml - path: "./Rules/Media/Bahamut" - interval: 86400 - BBC iPlayer: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/BBC%20iPlayer.yaml - path: "./Rules/Media/BBC_iPlayer" - interval: 86400 - DAZN: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/DAZN.yaml - path: "./Rules/Media/DAZN" - interval: 86400 - Discovery Plus: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Discovery%20Plus.yaml - path: "./Rules/Media/Discovery_Plus" - interval: 86400 - Disney Plus: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Disney%20Plus.yaml - path: "./Rules/Media/Disney_Plus" - interval: 86400 - encoreTVB: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/encoreTVB.yaml - path: "./Rules/Media/encoreTVB" - interval: 86400 - Fox Now: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Fox%20Now.yaml - path: "./Rules/Media/Fox_Now" - interval: 86400 - Fox+: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Fox%2B.yaml - path: "./Rules/Media/Fox+" - interval: 86400 - HBO Go: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/HBO%20Go.yaml - path: "./Rules/Media/HBO_Go" - interval: 86400 - HBO Max: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/HBO%20Max.yaml - path: "./Rules/Media/HBO_Max" - interval: 86400 - Hulu Japan: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Hulu%20Japan.yaml - path: "./Rules/Media/Hulu_Japan" - interval: 86400 - Hulu: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Hulu.yaml - path: "./Rules/Media/Hulu" - interval: 86400 - Japonx: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Japonx.yaml - path: "./Rules/Media/Japonx" - interval: 86400 - JOOX: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/JOOX.yaml - path: "./Rules/Media/JOOX" - interval: 86400 - KKBOX: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/KKBOX.yaml - path: "./Rules/Media/KKBOX" - interval: 86400 - KKTV: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/KKTV.yaml - path: "./Rules/Media/KKTV" - interval: 86400 - Line TV: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Line%20TV.yaml - path: "./Rules/Media/Line_TV" - interval: 86400 - myTV SUPER: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/myTV%20SUPER.yaml - path: "./Rules/Media/myTV_SUPER" - interval: 86400 - Pandora: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Pandora.yaml - path: "./Rules/Media/Pandora" - interval: 86400 - PBS: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/PBS.yaml - path: "./Rules/Media/PBS" - interval: 86400 - Pornhub: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Pornhub.yaml - path: "./Rules/Media/Pornhub" - interval: 86400 - Soundcloud: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/Soundcloud.yaml - path: "./Rules/Media/Soundcloud" - interval: 86400 - ViuTV: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Media/ViuTV.yaml - path: "./Rules/Media/ViuTV" - interval: 86400 - Telegram: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Telegram.yaml - path: "./Rules/Telegram" - interval: 86400 - Steam: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Steam.yaml - path: "./Rules/Steam" - interval: 86400 - Speedtest: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Speedtest.yaml - path: "./Rules/Speedtest" - interval: 86400 - PayPal: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/PayPal.yaml - path: "./Rules/PayPal" - interval: 86400 - Microsoft: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Microsoft.yaml - path: "./Rules/Microsoft" - interval: 86400 - PROXY: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Proxy.yaml - path: "./Rules/Proxy" - interval: 86400 - Domestic: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Domestic.yaml - path: "./Rules/Domestic" - interval: 86400 - Apple: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Apple.yaml - path: "./Rules/Apple" - interval: 86400 - Google FCM: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Google%20FCM.yaml - path: "./Rules/Google FCM" - interval: 86400 - Scholar: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/Scholar.yaml - path: "./Rules/Scholar" - interval: 86400 - Domestic IPs: - type: http - behavior: ipcidr - url: https://raw.dler.io/main/Clash/Provider/Domestic%20IPs.yaml - path: "./Rules/Domestic_IPs" - interval: 86400 - LAN: - type: http - behavior: classical - url: https://raw.dler.io/main/Clash/Provider/LAN.yaml - path: "./Rules/LAN" - interval: 86400 diff --git a/luci-app-openclash/root/usr/share/openclash/res/openclash_version b/luci-app-openclash/root/usr/share/openclash/res/openclash_version deleted file mode 100644 index 2b746af0..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/openclash_version +++ /dev/null @@ -1,2 +0,0 @@ -v0.44.16-beta -data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYQAAAAqCAMAAAHzBexdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzMjhCMEQxODJBRDExRUNBRkM3OEI1MDAzRjNFRDMxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzMjhCMEQyODJBRDExRUNBRkM3OEI1MDAzRjNFRDMxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTMyOEIwQ0Y4MkFEMTFFQ0FGQzc4QjUwMDNGM0VEMzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTMyOEIwRDA4MkFEMTFFQ0FGQzc4QjUwMDNGM0VEMzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7aZwxhAAADAFBMVEUJeLihoaGUxeG6uroka5NFgKIqjcbh7/c5lclISEilpaWKioojhLwFbaljlbEbhcEFaaIccaLR0dHR5vI9PT2enp4GcKyCgoLv9Pcwk8uGvt8HXpE1dZre3t6xytmizOW1tbUVappUi6s/Pz9ubm6StckJca3a2tp1tdnn5+fOzs7R4ekHZp2RkZFFRUVLS0sFZZtycnIIXI13d3cEU4CFhYVFkb0keaoKdLGCrsacnJxiYmJjnLy/v7+srKx4eHhFmsrg4OBDQ0MFWYpBQUEKaqDw9feixtoJZJmy0eOUlJTCwsI2kcZqamo0faYFYJUHVoTIyMgGXY+z1upXpdJXlbnFxcVAQEDAwMCiwNK2trZmrdXR3+gXgLzKysoHbKUIYZQgdabB2eeCss6kzuZlZWVgYGCDqsFKn88GVYKEscwYbZ4XYo1HnMyhv9CNjY0FcrCDq8JDfqCSvtYEYphortevr68micJ0dHSJweJynrh0sdUJWIVFia81h7UBcrNZWVlTU1NRUVFUVFRVVVUFdrdSUlILfL0HeLkKe7wGd7hWVlYOgMADdLUEdrYDdbUEdbYDdLQOf8ASg8MSg8QShMQThMUAcrJXV1cOf78Nfr8Nfr4Mfb4Mfb0Je7sJersJeroIebo6OjqqqqrV1dXU1NSrq6upqanC3u47Ozvw9/uAgIB+fn7B3u719fWBgYEGVYGEvN3q6uqEvd3B1eD09PTz8/MEXI5MTEyFvt6DvNyCqcB/f3/B3e1Jns4IV4RHm8zB3e7o6Ohkq9MHVoNGm8sIaJ+EtNCXl5fC3u+Fvd7W1taErMKFvd3g6u/A1N9EmcpVos8IdbPg6vAFdLSCutqDr8jC3+9Inc4EVYMUXomixNfB2+qEq8LD3++RuM+EtM/B1+Nlq9RInc0FZ6Anhr0lfrAIWYjC1eHQ5PDC3Otlp80mcJt0oLl1qMUCc7QRgsMPgMEQgcJaWlpfX19NTU1eXl5cXFxbW1tPT09QUFBYWFhdXV1OTk7///////+2mlSIAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAAECVJREFUeNpi+P8FF5iGFVQyfMcJPmIHDL9//9P7DQeMS4CEOERg7ty5anPnbpn7b+7OuWfmAgn+uXP3zZ3L0Nz8r/kfEC1eCSSbnThXNjenLVYAMpsXsi9cuLB4VdI/ILVwbebGf5kLFwIRQxNO0IcdMPz/igvUYwXTAQKIwZC0oJrGQEZIOflCQkkcEWDiv61BASW3Chg6/+YCkSs4kHbOBQcUBKyEUItXLtUHhtIeYDgtfLHx38K1a9cuXPgPHEL/gGH1D0844QomEkOpHiCAGAz/kAw+kAQYPoOAeP5nLCAVmWOPYM4Egx4pMMUBxBkzoQRYCCIOBwzdQKAFxP+A8KvIPxFrEZHuf07/nJwgYiDuIZF/nCLLurdx/lsN5HV3d3Z6dK7odOj819nZmbOiU9gCxADx2GNADEvpf0xGAZ3XpI+4giQYGoFg0b9/DQr//gFZQAykIRDOXdqo+W/58kaFf4vWgAQbu7q65Lq6Yv5Jd+3q6toL5P0DwX8gzAvi/XMWAHMkgGRXF8NP0sFEkgBAADHgLjtwAfNppID/DKQnJXMS09J3koH5R5IAJLXaYUusn8XBCCO1JkJSYSmEYps5kx+WMNk0MBPrTAZQIWGtL4JcYvz+rfL7H5DU/P07ClqWqPzWAxYkEMnEuSCgEc8Kov4BSxIlEOPa3Lnsz6XnQooWYBGzE1zOgIoZYPpe1g0B/0S6lYFJ/183OEt0dzd2G3f/A2UCThW97mVeLpzd6k7/ursFQWmfD5wHgIyz8wtzOyHg3wOQ4NkAls5I13/XpDs9noNE4QVZM6joBwL1lSvhbGAdAOQCC7WVWs2LA4ECS0HiggsXKh1duGUhuCJYy+6zVngtmA0s7x4wZEpvBLKUMjM3LozdkAkSBec4zX/bGv8dgmQye3DOA2YvIKGbBuKuAWe75T/BeQ8onA3OY2KgTAVkATPdhS5wPuu69S8PJPBPokvun8STf7z/ikESeOogXCC7jyRARp5WJDFPW38lFSjWkwL+AwTgtQxCmwiiMLz00iRSJdogBmPRg0LBGHSlioimGi8GxYWiSEUKvfXgRU9ayOJ2d0DBi4cFDwObNK4xJJAUtT2lCO2h4kE8WDyJB/GiIFhqwb++mdmNFQWhkHww7735/39mb7urra90gaGHnWPXJl5Lm2DoWwfRVrvB2P0OohUCTuFAYhA7C/8Bqt2T/QT+Diwt/ePU2KMN4MsItoWbCJJKRKjcUhPOvRoNlGRy4/E/d4TmKuqwRbvrgiotlAAXDSrZWqx2hQQMIuuWUCrJfEHmooFbzwLlG4hdglsuu24tFcMRt16jI1dlOu4Q47NU4OwYcZxjcBS44wu1srsVKrmcnJB7FwkUZ7aCGXwk7fMiIk5vr+87eL9Y6QlszVIUU8EAtWAGcxGC33oQs86ftBoHQ/fpdlKOolGkfNEqJSzLJHHaCvNxLsA1juscLTFKwd+ncb/JW6MLvKUUHnr4tHB4ZpzT5T5vNjl/Ay4fBbnjTTkq5JeBsJGiuqUqXv0rMNu/YmYUKhD+qZkhSDxru9VpKgnzx1n6gjw2V0msQonKjzNBH2AwdqHCWM8exuZfsoxhGB+OG/upTQprXsYgS56xyqTcs7k5xgZes63CyLPbA4ydpjEP5TLNDun3PO/Jmj3sef2ebXtCkuUQ6YFAa9jzgnzU+952X1wOLkjb6bQMUUqKKj0xJTF0Uc/ouuh6RmrPVeuTkli6tN9SvahOTWVoXpbHZRf+sq7f1ANbW+sGEw86iLb+swvs/dpBfgnAm9mFNnWGcTxdt9gUtaInbbfMraB2FLH1c8hKguvaraubtptMRKcyCpob8UZ0bGNksWmToxuDIS3Di7Zplya03do0FnEqwuyNQlFE2ZUoKMgGU/Gjlj7x+TjvyYlzbsLO+dOe53nf530PDb35//5xZZ/f1D+/jtiml7NZ1wonDIaN/uKHrDMG4y8b5ZBHumOrR3rghG7bKWds3iFbbV4OlwOBxXf/q8o4CVpc9lTo/rvygNr9yu7c4vZuazHzo66uQ/s+V1wOXc+U6VRHoN8L8G9GNRCQ6n+bbeuyf7Sy+cpzmu9+9X7SXCXFl7aaRtWdvCx+dcu5k8ra5hlT+PFJp2okC4GM5qnR9OmnaFVZLnwIBKT3UAYxDTO5KQUR1HJaUVbLG7VqdtQiuLm2EdRiwVxu920zdy6lL/OpLxsb1qobR91F3Jx084rbIvOFymxDp3jt+DAa77i45/7tAMO1UFhI5ntk6A0sIyOG2UYz3VlQ1ammbM3nF8MwvWgVFC8cws2hM1Xy2mkx1uSq3Vy2bRKf3PraDloWgU957faGiQQNlpRcUTvtAJ8BzrfCxNJkewLQa1+fNfGeecOlMpiQ1HhK11NxPXVG0zz9n2jaIwhXVy+r0KFGq1/frxcUcGCp62vG8M60rqb3OLrxaI90oDzHU59pwrJoUSbFpzmmubgpGoULnGbeOs87W8t30rIEmqMQVTqfoEgHXr8KrSrfafY1QxGWhpXlJT7w+aKVKxsa0yr+cVkwgRRPHTyYigsA9BbTgBRnfijuJRoQjRM7RKxT7LcfMJnCG+cyP8Wn2df/gV5/ieBAYlTI4BQvIagAgjSaoMlLjWeDgBRBVECz9Kjwwmk5meTW4AWVUzVJ7TsRDp/oo59wuLeXBgOoes6ucM1brEyTf33eNDwwsAa81NKqooULvY6+6CBdgG5Yzgl+N7zJO+nBwUEYNMo1Cby6f6HkK32Ns6/SYDAoNxZ80Q24CFbK/T9/DqZ/My64TIK5j4+xUKE/FPL3Ca4gvYRCVS34OMDogmuvX52vBajLm6JqfmphLKL47CFv9nFgHRE22fVxOcHMp/hb2vEB8g2izkeIOlJ2dLzAyHOcnhuQZ/YrpqEK85iC1OpGR8esdQp5jL9o6kP6N3lDdfhssn4ELYM7b6mP4AEw/twZbizTEL2gjtoebCqmLB+BMnfUcngRn7/jdG4sNgmyaSm/AueCAJOx0j1YVseMmdygi3gCJ7FXsVs6aYxNahvvYeiK4NOzWYiLACwSGaAdpq9qGRsXpMlNIxa66+mpk27zOJ81+Gr13jbhsXkGphmkZpRjitrmtLVtFLSTmdw4LDyHk7ZS7N6Zo6jtGyf0rZ1yBjy/sxU8p5zQ93bK5QQ6z9iJztlnfKP8P+pr+zQ7+1iA7q09pOorjqtlen2V6c/CNK2rViL3WmolN9JctS01S4M1yewdrAfWZMFobXZrXrtsjI0xiRCveq/i1My3WUmzQmskGdSg1xqLDdZgj2xQ89POOb/ze3ldCNGF6+eP8/s+P+f4Ox4f3++55N//hU8mBpZ87ZagBYwPnk4ULPnKTeGiEoxrGkl/uCtcU4FxCV5rN+8v928VuqYf+ae7wuPvCYOtX7orPJxqbqb8JrGruKLf9MkrYsZybQu7Cf2ynInN46G4hmvjnGzryf+DF/t6fHzHcG0AwlVqCOAccwH3FcX3PiO7oA0J17CMSg+/cPLl8BhVdjStQEdMKIVR6Jjx/BWxHMs1egwQw8V+dHw6HgpDqGGck209NTamABGHCX7FDidXPVYjXFa9iIZRIeyV35a0C8D3lOvwUm1UuIplNF7mEzF6E5og6I8yyWqkQg1OM+00avjYT8uszx1wmBwtYF4HPTpNDhYHmJhaY2KKCJn9qIAWZTus2lyF/PmMFTStaSMhcUAkTqphBcMkHhmzkar56qUHn+LF1anAFF6rhVdpaR7uLaXKFkC+CyFiAO/2PkQ3137A6ghvQBtS2tvbew8DXNmAm72rSsdAN7o3+NDTxovEvgN0eQO+rBIsghh9mFDfPTpbKmhzeGKBUWMgm8Bvl9SwEe2eXaE6U7kD+M7/ndBj/5RHY56OHBxdB61xl1Mz0UxMCxUg0EOl0BnnIZoJK1D9rFybq5C3iGm6ajI32QQa34J8aspHi7iM6QuJloIm1VKDpXqyhzd8xGoz2hJoZXlxKVPbcLVMhfnYtPetsjpunOqDoF+W7gPKnHAVdVyqQ2wee4/znULq39u7bt3eTWxmcsCC1hEcQF5ZGRkPUKWs7JE3fa6LAKZqs6WSPIcD07WGGohF9W9Rw8b4UJ3Zai4hgYK+y2otMftj3kozcZljWARAzVbyLe9gdA4tnXUY8CcP+vatVm2uQr4AkUnUrHsmUUQj00DTDZmIZpEZxGXtiuerYwiukBD3O3aQxxTMnEUewD7RXIdWOaQiq35mxCIP2bgD+y8VVlSQTahwQivquAT8uOUSQRDjzLpdR+HFQlKvEDKPRTfxU0VFCOYW0vArbTSsVZp2KK5iX2tr3raZ0oIkSE0FjjRgl8ZANoE9ySbII7u0hGpJaKlm8BP8WWdB7ZejZJSkoX0X4cGwU65Cro/JZAd3s0xRAz/R5UeD5EhpdeJNp0oZq2ZjfmWlDyaXEeU6LovWRvymhDRChcrLau1MpRZn0MglcqjYs3A3NRUc9KZYy0J40jYqAFFnGG7tfqTykb8P7iz76PGsh9KCJKiv8BKMkPP+RFKeZJvNdvgz+Rzs8sg+swDeICHb9q9OhFG89avyy1EKuvKx2dyOlE+dchVy80gGbbfkU4NI4YlI0RMJz2NKpB3nFOZgm4Ic8uajEDRE5VuIYrYsoFCJyG0W0Ybdzc22MK6R3wnNzQk2Lc6C31G2xXIqWx7et9lOhDHEsZCzzH4IOGKzteFOAseQ4iMb3VxcGDZka8Rl7QRyY4cjI4X8ZI72b2iojWT3mxuA2oaG6HaA9kka2EhRi1pRGCZvcj0JXCi01LLWiNqfjfaGkqdrtDMsQDuijc65Cjla1mSTtHa6AJFIV4t2QkNMtTpVpB0NCvEem0XBY/IdHVvIxITZCMmyFMwHvKmaDpxVBZ7XaMQpmbmQnp4ehRAyFhAlcT/q+yyWGyHYn2hR4yzqvW6k910kc8RZLLmbSNghS8GNKEpyBPXploI+S9h1hPSlExuQrklW3caTL9lVpQnx8fG1aVVVXfS2XUpmfGZKaIngT5w72UiRJCRxyVhlSJlkt09aU0LbQIKg9o+QbPt6T+0MVkEQMsbIVcir0jyn26d7llQZ5YkMVdnVdnt1Nm09KZH+wk6Fd88JFYoiej4s5vKs5KA3z99NnZxMP3pyIqCnZ7EqcJlGI07JzIXt27en9hwg4yOq5SQfjL14/sHB5JwTGizu8Z57Z3Awls/xRnJE6rbzd2/Npd21sOSg2Y1vpxLr5NjBwQdrk4N6ArTZY3WmjAa9Xm8wck23Ur9Sd3TEoCOyOIoxRjn+mS5Dr8/QjVDZYND6abZBSz9iMBjGylXI+QpGNBNRG5flSJ0Ywz8lcFyNsMSfFWVaTmdnYpEoFyUmBqripmk04pTMXEiUwNMDizs7iwOPj0JgYmAhmaO4SJm+k0xZ+LlIltuZS+mKaG4Y4S7SZrumt+aam6NfuCtc0x10CeZ85q7w2DkyUfBaLyC/TgR4vJgwuzDnY/cE6zG/8DMNTwTM+cYNEUDe/4v/ALgEVK/AAN4iAAAAAElFTkSuQmCC \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/res/rule_providers.list b/luci-app-openclash/root/usr/share/openclash/res/rule_providers.list deleted file mode 100644 index c8e638e6..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/rule_providers.list +++ /dev/null @@ -1,178 +0,0 @@ -放行规则-ConnersHua(建议置顶并直连),ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Unbreak.yaml -放行规则-lhie1(建议置顶并直连),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Special.yaml -放行规则-ACL4SSR(建议置顶并直连),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,UnBan.yaml -反劫持规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Hijacking.yaml -国内IP白名单(By lhie1),lhie1,ipcidr,dler-io/Rules/master/Clash/Provider/,Domestic%20IPs.yaml,Domestic IPs.yaml -国内IP白名单,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,ChinaIP.yaml -国内域名白名单(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Domestic.yaml -国内域名白名单,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,China.yaml -国内流媒体合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,StreamingCN.yaml -国内流媒体国际版合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,StreamingSE.yaml -国外常用网站合集(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Proxy.yaml -国外常用网站合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Global.yaml -国外流媒体合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,Streaming.yaml -学术网站,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,Scholar.yaml -广告规则(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Reject.yaml -广告规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Advertising.yaml -微软服务,lhie1,classical,dler-io/Rules/master/Clash/Provider/,Microsoft.yaml -数字货币相关,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,Cryptocurrency.yaml -隐私规则合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Privacy.yaml -ABC,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,ABC.yaml -Abema TV,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Abema%20TV.yaml,Abema TV.yaml -AbemaTV(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,AbemaTV.yaml,AbemaTV-ACL4SSR.yaml -AbemaTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,AbemaTV.yaml -Adobe,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Adobe.yaml -All-4,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,All-4.yaml -Amazon(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Amazon.yaml,Amazon-ACL4SSR.yaml -Amazon,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Amazon.yaml -AmazonIp,ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,AmazonIp.yaml -AppStore,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStore.yaml -AppStoreConnect,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStoreConnect.yaml -Apple FindMy,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,FindMy.yaml -Apple Music,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Music.yaml -Apple News(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Apple%20News.yaml,Apple News.yaml -Apple News,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,News.yaml -Apple SoftwareUpdate,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,SoftwareUpdate.yaml -Apple TV(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Apple%20TV.yaml,Apple TV.yaml -Apple TV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,TV.yaml -Apple TestFlight,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,TestFlight.yaml -Apple iCloud,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,iCloud.yaml -Apple(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Apple.yaml,Apple-ACL4SSR.yaml -Apple(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Apple.yaml,Apple-lhie1.yaml -Apple,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Apple.yaml -BBC iPlayer,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,BBC iPlayer.yaml -BBC-iPlayer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,BBC-iPlayer.yaml -Bahamut(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Bahamut.yaml,Bahamut-ACL4SSR.yaml -Bahamut(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Bahamut.yaml,Bahamut-lhie1.yaml -Bahamut,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Bahamut.yaml -BanAD,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanAD.yaml -BanEasyList,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasyList.yaml -BanEasyListChina,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasyListChina.yaml -BanEasyPrivacy,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasyPrivacy.yaml -BanProgramAD,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanProgramAD.yaml -Bilibili(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Bilibili.yaml,Bilibili-ACL4SSR.yaml -Bilibili,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Bilibili.yaml -Bilibili-Intl,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,bilibili-Intl.yaml -BilibiliHMT,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,BilibiliHMT.yaml -Blizzard(By ConnersHua),ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Blizzard.yaml,Blizzard-ConnersHua.yaml -Blizzard,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Blizzard.yaml -ChinaCompanyIp,ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaCompanyIp.yaml -ChinaDomain,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaDomain.yaml -ChinaIp(By ACL4SSR),ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaIp.yaml,ChinaIp-ACL4SSR.yaml -ChinaMedia,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaMedia.yaml -Chromecast,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,Chromecast.yaml -DAZN(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,DAZN.yaml,DAZN-lhie1.yaml -DAZN,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DAZN.yaml -Deezer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Deezer.yaml -Developer,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Developer.yaml -Discord,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Discord.yaml -DiscoveryPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DiscoveryPlus.yaml -Disney Plus,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Disney%20Plus.yaml,Disney Plus.yaml -DisneyPlus(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,DisneyPlus.yaml,DisneyPlus-ACL4SSR.yaml -DisneyPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DisneyPlus.yaml -Download,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,Download.yaml -EHGallery,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,EHGallery.yaml -Epic,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Epic.yaml -FOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,FOX.yaml -Fox Now,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Fox%20Now.yaml,Fox Now.yaml -Fox+,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Fox+.yaml -GFW地址,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,IP-Blackhole.yaml -Google,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Google.yaml -GoogleCN,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,GoogleCN.yaml -GoogleDrive,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleDrive.yaml -GoogleFCM,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,GoogleFCM.yaml -GoogleSearch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleSearch.yaml -GoogleVoice,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleVoice.yaml -HBO(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,HBO.yaml,HBO-ACL4SSR.yaml -HBO(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,HBO.yaml,HBO-lhie1.yaml -HBO,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HBO.yaml -HBO-GO-HKG,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HBO-GO-HKG.yaml -HWTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HWTV.yaml -Himalaya,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Podcast/,Himalaya.yaml -Hulu Japan,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Hulu Japan.yaml -Hulu(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Hulu.yaml,Hulu-lhie1.yaml -Hulu,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Hulu.yaml -Hulu-JPN,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Hulu-JPN.yaml -ITV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ITV.yaml -Instagram,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Instagram.yaml -JOOX(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,JOOX.yaml,JOOX-lhie1.yaml -JOOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,JOOX.yaml -Japonx,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Japonx.yaml -KKBOX(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,KKBOX.yaml,KKBOX-lhie1.yaml -KKBOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,KKBOX.yaml -KKTV(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,KKTV.yaml,KKTV-lhie1.yaml -KKTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,KKTV.yaml -LINE-TV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,LINE-TV.yaml -Letv,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Letv.yaml -LiTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,LiTV.yaml -Line TV,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Line%20TV.yaml,Line TV.yaml -LocalAreaNetwork,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,LocalAreaNetwork.yaml -MOO,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,MOO.yaml -Microsoft(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Microsoft.yaml,Microsoft-ACL4SSR.yaml -My5,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,My5.yaml -NetEaseMusic,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,NetEaseMusic.yaml -Netease Music,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Netease%20Music.yaml,Netease Music.yaml -Netflix(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Netflix.yaml,Netflix-ACL4SSR.yaml -Netflix(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Netflix.yaml,Netflix-lhie1.yaml -Netflix,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Netflix.yaml -Nintendo,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Nintendo.yaml -Now-E,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Now-E.yaml -OneDrive(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,OneDrive.yaml,OneDrive-ACL4SSR.yaml -OneDrive,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Microsoft/,OneDrive.yaml -Origin,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Origin.yaml -PBS(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,PBS.yaml,PBS-lhie1.yaml -PBS,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,PBS.yaml -Pandora(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Pandora.yaml,Pandora-lhie1.yaml -Pandora,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Pandora.yaml -ParamountPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ParamountPlus.yaml -PayPal(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,PayPal.yaml,PayPal-lhie1.yaml -PayPal,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,PayPal.yaml -Peacock,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Peacock.yaml -Porn,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Porn.yaml -Pornhub(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Pornhub.yaml,Pornhub-lhie1.yaml -Pornhub,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Pornhub.yaml -Prime-Video,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Prime-Video.yaml -ProxyGFWlist,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ProxyGFWlist.yaml -ProxyLite,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ProxyLite.yaml -ProxyMedia,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ProxyMedia.yaml -Scholar(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Scholar.yaml,Scholar-ACL4SSR.yaml -Siri,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Siri.yaml -Sony,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Sony.yaml -SoundCloud,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,SoundCloud.yaml -Soundcloud(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Soundcloud.yaml,Soundcloud-lhie1.yaml -Speedtest,lhie1,classical,dler-io/Rules/master/Clash/Provider/,Speedtest.yaml -Spotify(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Spotify.yaml,Spotify-ACL4SSR.yaml -Spotify(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Spotify.yaml,Spotify-lhie1.yaml -Spotify,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Spotify.yaml -Steam(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Steam.yaml,Steam-ACL4SSR.yaml -Steam,lhie1,classical,dler-io/Rules/master/Clash/Provider/,Steam.yaml -SteamCN,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,SteamCN.yaml -TIDAL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,TIDAL.yaml -TaiwanGood,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,TaiwanGood.yaml -Telegram(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Telegram.yaml,Telegram-ACL4SSR.yaml -Telegram(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Telegram.yaml,Telegram-lhie1.yaml -Telegram,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,Telegram.yaml -TelegramNL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramNL.yaml -TelegramSG,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramSG.yaml -TelegramUS,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramUS.yaml -Tencent Video,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Tencent%20Video.yaml,Tencent Video.yaml -TikTok,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,TikTok.yaml -Twitch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Live/,Twitch.yaml -ViuTV(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,ViuTV.yaml,ViuTV-lhie1.yaml -ViuTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ViuTV.yaml -WeTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,WeTV.yaml -Xbox,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Xbox.yaml -YouTube Music,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,YouTube%20Music.yaml,YouTube Music.yaml -YouTube(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,YouTube.yaml,YouTube-ACL4SSR.yaml -YouTube(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,YouTube.yaml,YouTube-lhie1.yaml -YouTube,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,YouTube.yaml -YouTubeMusic,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,YouTubeMusic.yaml -Youku,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Youku.yaml -encoreTVB(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,encoreTVB.yaml,encoreTVB-lhie1.yaml -encoreTVB,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,encoreTVB.yaml -iCloud-email,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Mail.yaml -iQIYI,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,iQIYI.yaml -iQiyi,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,iQiyi.yaml -myTV SUPER,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,myTV%20SUPER.yaml,myTV SUPER.yaml -myTV-SUPER,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,myTV-SUPER.yaml -niconico,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,niconico.yaml \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/res/sub_ini.list b/luci-app-openclash/root/usr/share/openclash/res/sub_ini.list deleted file mode 100644 index f7e05a93..00000000 --- a/luci-app-openclash/root/usr/share/openclash/res/sub_ini.list +++ /dev/null @@ -1,40 +0,0 @@ -默认(附带用于Clash的AdGuard DNS),default_with_clash_adg.yml,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/default_with_clash_adg.yml -无Urltest,no_urltest.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/no_urltest.ini -带Urltest,urltest.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/urltest.ini -ConnersHua 神机规则 Pro,connershua_pro.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/connershua_new.ini -lhie1 洞主规则(使用 Clash 分组规则),lhie1_clash.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/lhie1_clash.ini -lhie1 洞主规则完整版,lhie1_dler.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/lhie1_dler.ini -ACL4SSR 规则标准版,acl4ssr_standard.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/acl4ssr_standard.ini -ACL4SSR 规则 GFWList,acl4ssr_gfwlist.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/acl4ssr_gfwlist.ini -ACL4SSR 规则 AdblockPlus,ACL4SSR_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_AdblockPlus.ini -ACL4SSR 规则 BackCN,ACL4SSR_BackCN.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_BackCN.ini -ACL4SSR 规则 Mini,ACL4SSR_Mini.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Mini.ini -ACL4SSR 规则 Mini Fallback,ACL4SSR_Mini_Fallback.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Mini_Fallback.ini -ACL4SSR 规则 Mini MultiMode,ACL4SSR_Mini_MultiMode.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Mini_MultiMode.ini -ACL4SSR 规则 Mini NoAuto,ACL4SSR_Mini_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Mini_NoAuto.ini -ACL4SSR 规则 NoApple,ACL4SSR_NoApple.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_NoApple.ini -ACL4SSR 规则 NoAuto,ACL4SSR_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_NoAuto.ini -ACL4SSR 规则 NoAuto NoApple,ACL4SSR_NoAuto_NoApple.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_NoAuto_NoApple.ini -ACL4SSR 规则 NoAuto NoApple NoMicrosoft,ACL4SSR_NoAuto_NoApple_NoMicrosoft.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_NoAuto_NoApple_NoMicrosoft.ini -ACL4SSR 规则 NoMicrosoft,ACL4SSR_NoMicrosoft.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_NoMicrosoft.ini -ACL4SSR 规则 Online,ACL4SSR_Online.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online.ini -ACL4SSR 规则 Online AdblockPlus,ACL4SSR_Online_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_AdblockPlus.ini -ACL4SSR 规则 Online Full,ACL4SSR_Online_Full.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full.ini -ACL4SSR 规则 Online Full AdblockPlus,ACL4SSR_Online_Full_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_AdblockPlus.ini -ACL4SSR 规则 Online Full Google,ACL4SSR_Online_Full_Google.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_Google.ini -ACL4SSR 规则 Online Full MultiMode,ACL4SSR_Online_Full_MultiMode.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_MultiMode.ini -ACL4SSR 规则 Online Full Netflix,ACL4SSR_Online_Full_Netflix.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_Netflix.ini -ACL4SSR 规则 Online Full NoAuto,ACL4SSR_Online_Full_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_NoAuto.ini -ACL4SSR 规则 Online Mini,ACL4SSR_Online_Mini.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini.ini -ACL4SSR 规则 Online Mini AdblockPlus,ACL4SSR_Online_Mini_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_AdblockPlus.ini -ACL4SSR 规则 Online Mini Fallback,ACL4SSR_Online_Mini_Fallback.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_Fallback.ini -ACL4SSR 规则 Online Mini MultiCountry,ACL4SSR_Online_Mini_MultiCountry.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_MultiCountry.ini -ACL4SSR 规则 Online Mini MultiMode,ACL4SSR_Online_Mini_MultiMode.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_MultiMode.ini -ACL4SSR 规则 Online Mini NoAuto,ACL4SSR_Online_Mini_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_NoAuto.ini -ACL4SSR 规则 Online MultiCountry,ACL4SSR_Online_MultiCountry.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_MultiCountry.ini -ACL4SSR 规则 Online NoAuto,ACL4SSR_Online_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_NoAuto.ini -ACL4SSR 规则 Online NoReject,ACL4SSR_Online_NoReject.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_NoReject.ini -ACL4SSR 规则 WithChinaIp,ACL4SSR_WithChinaIp.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithChinaIp.ini -ACL4SSR 规则 WithChinaIp WithGFW,ACL4SSR_WithChinaIp_WithGFW.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithChinaIp_WithGFW.ini -ACL4SSR 规则 WithGFW,ACL4SSR_WithGFW.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithGFW.ini -eHpo1 规则,ehpo1_main.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/ehpo1_main.ini \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/ruby.sh b/luci-app-openclash/root/usr/share/openclash/ruby.sh deleted file mode 100644 index 651351ac..00000000 --- a/luci-app-openclash/root/usr/share/openclash/ruby.sh +++ /dev/null @@ -1,111 +0,0 @@ -#!/bin/sh - -ruby_read() -{ -local Value RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); puts Value$2}.join" -if [ -n "$(echo "$2" |grep '.to_yaml' 2>/dev/null)" ]; then - ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null |sed '1d' 2>/dev/null -else - ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -fi -} - -ruby_read_hash() -{ -local Value RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = $1; puts Value$2}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -ruby_edit() -{ -local Value RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); Value$2; File.open('$1','w') {|f| YAML.dump(Value, f)}}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -#数组覆盖 -ruby_cover() -{ -local Value Value_1 RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); if File::exist?('$3') then Value_1 = YAML.load_file('$3'); if not '$4'.empty? then Value$2=Value_1['$4']; else Value$2=Value_1 end else if not '$4'.empty? then Value.delete('$4'); end; end; File.open('$1','w') {|f| YAML.dump(Value, f)}}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -#hash增加 -ruby_merge() -{ -local Value Value_1 RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); Value_1 = YAML.load_file('$3'); Value$2.merge!(Value_1$4); File.open('$1','w') {|f| YAML.dump(Value, f)}}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -#hash去重 -ruby_uniq() -{ -local Value RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); Value$2=Value$2.uniq; File.open('$1','w') {|f| YAML.dump(Value, f)}}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -#数组指定位置前添加一组值(不要key) -ruby_arr_add_file() -{ -local Value Value_1 RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); Value_1 = YAML.load_file('$4').reverse!; Value_1$5.each{|x| Value$2.insert($3,x)}; Value$2=Value$2.uniq; File.open('$1','w') {|f| YAML.dump(Value, f)}}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -#数组开头添加一组值(含key) -ruby_arr_head_add_file() -{ -local Value Value_1 RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); Value_1 = YAML.load_file('$3'); Value$2=(Value_1$4+Value$2).uniq; File.open('$1','w') {|f| YAML.dump(Value, f)}}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -#数组指定位置前增加值 -ruby_arr_insert() -{ -local Value RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); Value$2=Value$2.insert($3,'$4').uniq; File.open('$1','w') {|f| YAML.dump(Value, f)}}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -ruby_read_hash_arr() -{ -local Value RUBY_YAML_PARSE -if [ -z "$1" ] || [ -z "$2" ]; then - return -fi -RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); Value$2.each do |i| puts i$3 end}.join" -ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/CNAME b/luci-app-openclash/root/usr/share/openclash/yacd/CNAME deleted file mode 100644 index 356aa6f5..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/CNAME +++ /dev/null @@ -1 +0,0 @@ -yacd.haishan.me diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/_headers b/luci-app-openclash/root/usr/share/openclash/yacd/_headers deleted file mode 100644 index 877d928f..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/_headers +++ /dev/null @@ -1,12 +0,0 @@ -# for netlify hosting -# https://docs.netlify.com/routing/headers/#syntax-for-the-headers-file - -/* - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - X-Content-Type-Options: nosniff - Referrer-Policy: same-origin -/*.css - Cache-Control: public, max-age=31536000, immutable -/*.js - Cache-Control: public, max-age=31536000, immutable diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/apple-touch-icon-precomposed.png b/luci-app-openclash/root/usr/share/openclash/yacd/apple-touch-icon-precomposed.png deleted file mode 100644 index e83c40f5..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/apple-touch-icon-precomposed.png and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Chart.min.44f6c6c6.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Chart.min.44f6c6c6.js deleted file mode 100644 index ce08d541..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Chart.min.44f6c6c6.js +++ /dev/null @@ -1,9 +0,0 @@ -import{A as Da}from"./vendor.38e754a4.js";function Ta(Re,Gt){return Gt.forEach(function(B){B&&typeof B!="string"&&!Array.isArray(B)&&Object.keys(B).forEach(function(j){if(j!=="default"&&!(j in Re)){var z=Object.getOwnPropertyDescriptor(B,j);Object.defineProperty(Re,j,z.get?z:{enumerable:!0,get:function(){return B[j]}})}})}),Object.freeze(Re)}var Yt={exports:{}};/*! - * Chart.js v2.9.4 - * https://www.chartjs.org - * (c) 2020 Chart.js Contributors - * Released under the MIT License - */(function(Re,Gt){(function(B,j){Re.exports=j(function(){try{return require("moment")}catch{}}())})(Da,function(B){B=B&&B.hasOwnProperty("default")?B.default:B;var j={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},z=function(e,t){return e(t={exports:{}},t.exports),t.exports}(function(e){var t={};for(var n in j)j.hasOwnProperty(n)&&(t[j[n]]=n);var i=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in i)if(i.hasOwnProperty(a)){if(!("channels"in i[a]))throw new Error("missing channels property: "+a);if(!("labels"in i[a]))throw new Error("missing channel labels property: "+a);if(i[a].labels.length!==i[a].channels)throw new Error("channel and label counts mismatch: "+a);var r=i[a].channels,o=i[a].labels;delete i[a].channels,delete i[a].labels,Object.defineProperty(i[a],"channels",{value:r}),Object.defineProperty(i[a],"labels",{value:o})}i.rgb.hsl=function(s){var l,u,d=s[0]/255,h=s[1]/255,f=s[2]/255,g=Math.min(d,h,f),p=Math.max(d,h,f),m=p-g;return p===g?l=0:d===p?l=(h-f)/m:h===p?l=2+(f-d)/m:f===p&&(l=4+(d-h)/m),(l=Math.min(60*l,360))<0&&(l+=360),u=(g+p)/2,[l,100*(p===g?0:u<=.5?m/(p+g):m/(2-p-g)),100*u]},i.rgb.hsv=function(s){var l,u,d,h,f,g=s[0]/255,p=s[1]/255,m=s[2]/255,v=Math.max(g,p,m),x=v-Math.min(g,p,m),b=function(y){return(v-y)/6/x+.5};return x===0?h=f=0:(f=x/v,l=b(g),u=b(p),d=b(m),g===v?h=d-u:p===v?h=1/3+l-d:m===v&&(h=2/3+u-l),h<0?h+=1:h>1&&(h-=1)),[360*h,100*f,100*v]},i.rgb.hwb=function(s){var l=s[0],u=s[1],d=s[2];return[i.rgb.hsl(s)[0],100*(1/255*Math.min(l,Math.min(u,d))),100*(d=1-1/255*Math.max(l,Math.max(u,d)))]},i.rgb.cmyk=function(s){var l,u=s[0]/255,d=s[1]/255,h=s[2]/255;return[100*((1-u-(l=Math.min(1-u,1-d,1-h)))/(1-l)||0),100*((1-d-l)/(1-l)||0),100*((1-h-l)/(1-l)||0),100*l]},i.rgb.keyword=function(s){var l=t[s];if(l)return l;var u,d,h,f=1/0;for(var g in j)if(j.hasOwnProperty(g)){var p=j[g],m=(d=s,h=p,Math.pow(d[0]-h[0],2)+Math.pow(d[1]-h[1],2)+Math.pow(d[2]-h[2],2));m.04045?Math.pow((l+.055)/1.055,2.4):l/12.92)+.3576*(u=u>.04045?Math.pow((u+.055)/1.055,2.4):u/12.92)+.1805*(d=d>.04045?Math.pow((d+.055)/1.055,2.4):d/12.92)),100*(.2126*l+.7152*u+.0722*d),100*(.0193*l+.1192*u+.9505*d)]},i.rgb.lab=function(s){var l=i.rgb.xyz(s),u=l[0],d=l[1],h=l[2];return d/=100,h/=108.883,u=(u/=95.047)>.008856?Math.pow(u,1/3):7.787*u+16/116,[116*(d=d>.008856?Math.pow(d,1/3):7.787*d+16/116)-16,500*(u-d),200*(d-(h=h>.008856?Math.pow(h,1/3):7.787*h+16/116))]},i.hsl.rgb=function(s){var l,u,d,h,f,g=s[0]/360,p=s[1]/100,m=s[2]/100;if(p===0)return[f=255*m,f,f];l=2*m-(u=m<.5?m*(1+p):m+p-m*p),h=[0,0,0];for(var v=0;v<3;v++)(d=g+1/3*-(v-1))<0&&d++,d>1&&d--,f=6*d<1?l+6*(u-l)*d:2*d<1?u:3*d<2?l+(u-l)*(2/3-d)*6:l,h[v]=255*f;return h},i.hsl.hsv=function(s){var l=s[0],u=s[1]/100,d=s[2]/100,h=u,f=Math.max(d,.01);return u*=(d*=2)<=1?d:2-d,h*=f<=1?f:2-f,[l,100*(d===0?2*h/(f+h):2*u/(d+u)),100*((d+u)/2)]},i.hsv.rgb=function(s){var l=s[0]/60,u=s[1]/100,d=s[2]/100,h=Math.floor(l)%6,f=l-Math.floor(l),g=255*d*(1-u),p=255*d*(1-u*f),m=255*d*(1-u*(1-f));switch(d*=255,h){case 0:return[d,m,g];case 1:return[p,d,g];case 2:return[g,d,m];case 3:return[g,p,d];case 4:return[m,g,d];case 5:return[d,g,p]}},i.hsv.hsl=function(s){var l,u,d,h=s[0],f=s[1]/100,g=s[2]/100,p=Math.max(g,.01);return d=(2-f)*g,u=f*p,[h,100*(u=(u/=(l=(2-f)*p)<=1?l:2-l)||0),100*(d/=2)]},i.hwb.rgb=function(s){var l,u,d,h,f,g,p,m=s[0]/360,v=s[1]/100,x=s[2]/100,b=v+x;switch(b>1&&(v/=b,x/=b),d=6*m-(l=Math.floor(6*m)),(1&l)!=0&&(d=1-d),h=v+d*((u=1-x)-v),l){default:case 6:case 0:f=u,g=h,p=v;break;case 1:f=h,g=u,p=v;break;case 2:f=v,g=u,p=h;break;case 3:f=v,g=h,p=u;break;case 4:f=h,g=v,p=u;break;case 5:f=u,g=v,p=h}return[255*f,255*g,255*p]},i.cmyk.rgb=function(s){var l=s[0]/100,u=s[1]/100,d=s[2]/100,h=s[3]/100;return[255*(1-Math.min(1,l*(1-h)+h)),255*(1-Math.min(1,u*(1-h)+h)),255*(1-Math.min(1,d*(1-h)+h))]},i.xyz.rgb=function(s){var l,u,d,h=s[0]/100,f=s[1]/100,g=s[2]/100;return u=-.9689*h+1.8758*f+.0415*g,d=.0557*h+-.204*f+1.057*g,l=(l=3.2406*h+-1.5372*f+-.4986*g)>.0031308?1.055*Math.pow(l,1/2.4)-.055:12.92*l,u=u>.0031308?1.055*Math.pow(u,1/2.4)-.055:12.92*u,d=d>.0031308?1.055*Math.pow(d,1/2.4)-.055:12.92*d,[255*(l=Math.min(Math.max(0,l),1)),255*(u=Math.min(Math.max(0,u),1)),255*(d=Math.min(Math.max(0,d),1))]},i.xyz.lab=function(s){var l=s[0],u=s[1],d=s[2];return u/=100,d/=108.883,l=(l/=95.047)>.008856?Math.pow(l,1/3):7.787*l+16/116,[116*(u=u>.008856?Math.pow(u,1/3):7.787*u+16/116)-16,500*(l-u),200*(u-(d=d>.008856?Math.pow(d,1/3):7.787*d+16/116))]},i.lab.xyz=function(s){var l,u,d,h=s[0];l=s[1]/500+(u=(h+16)/116),d=u-s[2]/200;var f=Math.pow(u,3),g=Math.pow(l,3),p=Math.pow(d,3);return u=f>.008856?f:(u-16/116)/7.787,l=g>.008856?g:(l-16/116)/7.787,d=p>.008856?p:(d-16/116)/7.787,[l*=95.047,u*=100,d*=108.883]},i.lab.lch=function(s){var l,u=s[0],d=s[1],h=s[2];return(l=360*Math.atan2(h,d)/2/Math.PI)<0&&(l+=360),[u,Math.sqrt(d*d+h*h),l]},i.lch.lab=function(s){var l,u=s[0],d=s[1];return l=s[2]/360*2*Math.PI,[u,d*Math.cos(l),d*Math.sin(l)]},i.rgb.ansi16=function(s){var l=s[0],u=s[1],d=s[2],h=1 in arguments?arguments[1]:i.rgb.hsv(s)[2];if((h=Math.round(h/50))===0)return 30;var f=30+(Math.round(d/255)<<2|Math.round(u/255)<<1|Math.round(l/255));return h===2&&(f+=60),f},i.hsv.ansi16=function(s){return i.rgb.ansi16(i.hsv.rgb(s),s[2])},i.rgb.ansi256=function(s){var l=s[0],u=s[1],d=s[2];return l===u&&u===d?l<8?16:l>248?231:Math.round((l-8)/247*24)+232:16+36*Math.round(l/255*5)+6*Math.round(u/255*5)+Math.round(d/255*5)},i.ansi16.rgb=function(s){var l=s%10;if(l===0||l===7)return s>50&&(l+=3.5),[l=l/10.5*255,l,l];var u=.5*(1+~~(s>50));return[(1&l)*u*255,(l>>1&1)*u*255,(l>>2&1)*u*255]},i.ansi256.rgb=function(s){if(s>=232){var l=10*(s-232)+8;return[l,l,l]}var u;return s-=16,[Math.floor(s/36)/5*255,Math.floor((u=s%36)/6)/5*255,u%6/5*255]},i.rgb.hex=function(s){var l=(((255&Math.round(s[0]))<<16)+((255&Math.round(s[1]))<<8)+(255&Math.round(s[2]))).toString(16).toUpperCase();return"000000".substring(l.length)+l},i.hex.rgb=function(s){var l=s.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!l)return[0,0,0];var u=l[0];l[0].length===3&&(u=u.split("").map(function(h){return h+h}).join(""));var d=parseInt(u,16);return[d>>16&255,d>>8&255,255&d]},i.rgb.hcg=function(s){var l,u=s[0]/255,d=s[1]/255,h=s[2]/255,f=Math.max(Math.max(u,d),h),g=Math.min(Math.min(u,d),h),p=f-g;return l=p<=0?0:f===u?(d-h)/p%6:f===d?2+(h-u)/p:4+(u-d)/p+4,l/=6,[360*(l%=1),100*p,100*(p<1?g/(1-p):0)]},i.hsl.hcg=function(s){var l=s[1]/100,u=s[2]/100,d=1,h=0;return(d=u<.5?2*l*u:2*l*(1-u))<1&&(h=(u-.5*d)/(1-d)),[s[0],100*d,100*h]},i.hsv.hcg=function(s){var l=s[1]/100,u=s[2]/100,d=l*u,h=0;return d<1&&(h=(u-d)/(1-d)),[s[0],100*d,100*h]},i.hcg.rgb=function(s){var l=s[0]/360,u=s[1]/100,d=s[2]/100;if(u===0)return[255*d,255*d,255*d];var h,f=[0,0,0],g=l%1*6,p=g%1,m=1-p;switch(Math.floor(g)){case 0:f[0]=1,f[1]=p,f[2]=0;break;case 1:f[0]=m,f[1]=1,f[2]=0;break;case 2:f[0]=0,f[1]=1,f[2]=p;break;case 3:f[0]=0,f[1]=m,f[2]=1;break;case 4:f[0]=p,f[1]=0,f[2]=1;break;default:f[0]=1,f[1]=0,f[2]=m}return h=(1-u)*d,[255*(u*f[0]+h),255*(u*f[1]+h),255*(u*f[2]+h)]},i.hcg.hsv=function(s){var l=s[1]/100,u=l+s[2]/100*(1-l),d=0;return u>0&&(d=l/u),[s[0],100*d,100*u]},i.hcg.hsl=function(s){var l=s[1]/100,u=s[2]/100*(1-l)+.5*l,d=0;return u>0&&u<.5?d=l/(2*u):u>=.5&&u<1&&(d=l/(2*(1-u))),[s[0],100*d,100*u]},i.hcg.hwb=function(s){var l=s[1]/100,u=l+s[2]/100*(1-l);return[s[0],100*(u-l),100*(1-u)]},i.hwb.hcg=function(s){var l=s[1]/100,u=1-s[2]/100,d=u-l,h=0;return d<1&&(h=(u-d)/(1-d)),[s[0],100*d,100*h]},i.apple.rgb=function(s){return[s[0]/65535*255,s[1]/65535*255,s[2]/65535*255]},i.rgb.apple=function(s){return[s[0]/255*65535,s[1]/255*65535,s[2]/255*65535]},i.gray.rgb=function(s){return[s[0]/100*255,s[0]/100*255,s[0]/100*255]},i.gray.hsl=i.gray.hsv=function(s){return[0,0,s[0]]},i.gray.hwb=function(s){return[0,100,s[0]]},i.gray.cmyk=function(s){return[0,0,0,s[0]]},i.gray.lab=function(s){return[s[0],0,0]},i.gray.hex=function(s){var l=255&Math.round(s[0]/100*255),u=((l<<16)+(l<<8)+l).toString(16).toUpperCase();return"000000".substring(u.length)+u},i.rgb.gray=function(s){return[(s[0]+s[1]+s[2])/3/255*100]}});z.rgb,z.hsl,z.hsv,z.hwb,z.cmyk,z.xyz,z.lab,z.lch,z.hex,z.keyword,z.ansi16,z.ansi256,z.hcg,z.apple,z.gray;function ii(e){var t=function(){for(var u={},d=Object.keys(z),h=d.length,f=0;f1&&(o=Array.prototype.slice.call(arguments));var s=a(o);if(typeof s=="object")for(var l=s.length,u=0;u1&&(o=Array.prototype.slice.call(arguments)),a(o))};return"conversion"in a&&(r.conversion=a.conversion),r}(i)})});var oi=Ae,dt={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ie={getRgba:ht,getHsla:ct,getRgb:function(e){var t=ht(e);return t&&t.slice(0,3)},getHsl:function(e){var t=ct(e);return t&&t.slice(0,3)},getHwb:Xt,getAlpha:function(e){var t=ht(e);if(t||(t=ct(e))||(t=Xt(e)))return t[3]},hexString:function(e,t){return t=t!==void 0&&e.length===3?t:e[3],"#"+Xe(e[0])+Xe(e[1])+Xe(e[2])+(t>=0&&t<1?Xe(Math.round(255*t)):"")},rgbString:function(e,t){return t<1||e[3]&&e[3]<1?Kt(e,t):"rgb("+e[0]+", "+e[1]+", "+e[2]+")"},rgbaString:Kt,percentString:function(e,t){if(t<1||e[3]&&e[3]<1)return $t(e,t);var n=Math.round(e[0]/255*100),i=Math.round(e[1]/255*100),a=Math.round(e[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:$t,hslString:function(e,t){return t<1||e[3]&&e[3]<1?Zt(e,t):"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)"},hslaString:Zt,hwbString:function(e,t){return t===void 0&&(t=e[3]!==void 0?e[3]:1),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+(t!==void 0&&t!==1?", "+t:"")+")"},keyword:function(e){return Jt[e.slice(0,3)]}};function ht(e){if(e){var t=[0,0,0],n=1,i=e.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;rn?(t+.05)/(n+.05):(n+.05)/(t+.05)},level:function(e){var t=this.contrast(e);return t>=7.1?"AAA":t>=4.5?"AA":""},dark:function(){var e=this.values.rgb;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var e=[],t=0;t<3;t++)e[t]=255-this.values.rgb[t];return this.setValues("rgb",e),this},lighten:function(e){var t=this.values.hsl;return t[2]+=t[2]*e,this.setValues("hsl",t),this},darken:function(e){var t=this.values.hsl;return t[2]-=t[2]*e,this.setValues("hsl",t),this},saturate:function(e){var t=this.values.hsl;return t[1]+=t[1]*e,this.setValues("hsl",t),this},desaturate:function(e){var t=this.values.hsl;return t[1]-=t[1]*e,this.setValues("hsl",t),this},whiten:function(e){var t=this.values.hwb;return t[1]+=t[1]*e,this.setValues("hwb",t),this},blacken:function(e){var t=this.values.hwb;return t[2]+=t[2]*e,this.setValues("hwb",t),this},greyscale:function(){var e=this.values.rgb,t=.3*e[0]+.59*e[1]+.11*e[2];return this.setValues("rgb",[t,t,t]),this},clearer:function(e){var t=this.values.alpha;return this.setValues("alpha",t-t*e),this},opaquer:function(e){var t=this.values.alpha;return this.setValues("alpha",t+t*e),this},rotate:function(e){var t=this.values.hsl,n=(t[0]+e)%360;return t[0]=n<0?360+n:n,this.setValues("hsl",t),this},mix:function(e,t){var n=e,i=t===void 0?.5:t,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var e,t,n=new Z,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(e=i[r],(t={}.toString.call(e))==="[object Array]"?a[r]=e.slice(0):t==="[object Number]"?a[r]=e:console.error("unexpected color value:",e));return n}},Z.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},Z.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},Z.prototype.getValues=function(e){for(var t=this.values,n={},i=0;i=0;a--)t.call(n,e[a],a);else for(a=0;a=1?e:-(Math.sqrt(1-e*e)-1)},easeOutCirc:function(e){return Math.sqrt(1-(e-=1)*e)},easeInOutCirc:function(e){return(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},easeInElastic:function(e){var t=1.70158,n=0,i=1;return e===0?0:e===1?1:(n||(n=.3),t=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n))},easeOutElastic:function(e){var t=1.70158,n=0,i=1;return e===0?0:e===1?1:(n||(n=.3),t=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*e)*Math.sin((e-t)*(2*Math.PI)/n)+1)},easeInOutElastic:function(e){var t=1.70158,n=0,i=1;return e===0?0:(e/=.5)==2?1:(n||(n=.45),t=n/(2*Math.PI)*Math.asin(1/i),e<1?i*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)*.5+1)},easeInBack:function(e){var t=1.70158;return e*e*((t+1)*e-t)},easeOutBack:function(e){var t=1.70158;return(e-=1)*e*((t+1)*e+t)+1},easeInOutBack:function(e){var t=1.70158;return(e/=.5)<1?e*e*((1+(t*=1.525))*e-t)*.5:.5*((e-=2)*e*((1+(t*=1.525))*e+t)+2)},easeInBounce:function(e){return 1-ze.easeOutBounce(1-e)},easeOutBounce:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},easeInOutBounce:function(e){return e<.5?.5*ze.easeInBounce(2*e):.5*ze.easeOutBounce(2*e-1)+.5}},si={effects:ze};J.easingEffects=ze;var U=Math.PI,li=U/180,ui=2*U,Q=U/2,Ne=U/4,nn=2*U/3,$e={clear:function(e){e.ctx.clearRect(0,0,e.width,e.height)},roundedRect:function(e,t,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=t+o,l=n+o,u=t+i-o,d=n+a-o;e.moveTo(t,l),st.left-1e-6&&e.xt.top-1e-6&&e.y0&&this.requestAnimationFrame()},advance:function(){for(var e,t,n,i,a=this.animations,r=0;r=n?(c.callback(e.onAnimationComplete,[e],t),t.animating=!1,a.splice(r,1)):++r}},De=c.options.resolve,on=["push","pop","shift","splice","unshift"];function sn(e,t){var n=e._chartjs;if(n){var i=n.listeners,a=i.indexOf(t);a!==-1&&i.splice(a,1),i.length>0||(on.forEach(function(r){delete e[r]}),delete e._chartjs)}}var vt=function(e,t){this.initialize(e,t)};c.extend(vt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(e,t){var n=this;n.chart=e,n.index=t,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(e){this.index=e},linkScales:function(){var e=this.getMeta(),t=this.chart,n=t.scales,i=this.getDataset(),a=t.options.scales;e.xAxisID!==null&&e.xAxisID in n&&!i.xAxisID||(e.xAxisID=i.xAxisID||a.xAxes[0].id),e.yAxisID!==null&&e.yAxisID in n&&!i.yAxisID||(e.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(e){return this.chart.scales[e]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&sn(this._data,this)},createMetaDataset:function(){var e=this.datasetElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(e){var t=this.dataElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index,_index:e})},addElements:function(){var e,t,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(e=0,t=i.length;en&&this.insertElements(n,i-n)},insertElements:function(e,t){for(var n=0;na?(r=a/t.innerRadius,e.arc(o,s,t.innerRadius-a,i+r,n-r,!0)):e.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),e.closePath(),e.clip()}function bi(e,t,n){var i=t.borderAlign==="inner";i?(e.lineWidth=2*t.borderWidth,e.lineJoin="round"):(e.lineWidth=t.borderWidth,e.lineJoin="bevel"),n.fullCircles&&function(a,r,o,s){var l,u=o.endAngle;for(s&&(o.endAngle=o.startAngle+oe,ln(a,o),o.endAngle=u,o.endAngle===o.startAngle&&o.fullCircles&&(o.endAngle+=oe,o.fullCircles--)),a.beginPath(),a.arc(o.x,o.y,o.innerRadius,o.startAngle+oe,o.startAngle,!0),l=0;ls;)a-=oe;for(;a=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var e=this._view,t=(e.startAngle+e.endAngle)/2,n=(e.innerRadius+e.outerRadius)/2;return{x:e.x+Math.cos(t)*n,y:e.y+Math.sin(t)*n}},getArea:function(){var e=this._view;return Math.PI*((e.endAngle-e.startAngle)/(2*Math.PI))*(Math.pow(e.outerRadius,2)-Math.pow(e.innerRadius,2))},tooltipPosition:function(){var e=this._view,t=e.startAngle+(e.endAngle-e.startAngle)/2,n=(e.outerRadius-e.innerRadius)/2+e.innerRadius;return{x:e.x+Math.cos(t)*n,y:e.y+Math.sin(t)*n}},draw:function(){var e,t=this._chart.ctx,n=this._view,i=n.borderAlign==="inner"?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/oe)};if(t.save(),t.fillStyle=n.backgroundColor,t.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+oe,t.beginPath(),t.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),t.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),t.closePath(),e=0;eu.x&&(d=pn(d,"left","right")):u.basen?n:i,r:l.right||a<0?0:a>t?t:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>t?t:o}}function Be(e,t,n){var i=t===null,a=n===null,r=!(!e||i&&a)&&gn(e);return r&&(i||t>=r.left&&t<=r.right)&&(a||n>=r.top&&n<=r.bottom)}S._set("global",{elements:{rectangle:{backgroundColor:fn,borderColor:fn,borderSkipped:"bottom",borderWidth:0}}});var Mi=re.extend({_type:"rectangle",draw:function(){var e=this._chart.ctx,t=this._view,n=function(r){var o=gn(r),s=o.right-o.left,l=o.bottom-o.top,u=wi(r,s/2,l/2);return{outer:{x:o.left,y:o.top,w:s,h:l},inner:{x:o.left+u.l,y:o.top+u.t,w:s-u.l-u.r,h:l-u.t-u.b}}}(t),i=n.outer,a=n.inner;e.fillStyle=t.backgroundColor,e.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(e.save(),e.beginPath(),e.rect(i.x,i.y,i.w,i.h),e.clip(),e.fillStyle=t.borderColor,e.rect(a.x,a.y,a.w,a.h),e.fill("evenodd"),e.restore())},height:function(){var e=this._view;return e.base-e.y},inRange:function(e,t){return Be(this._view,e,t)},inLabelRange:function(e,t){var n=this._view;return Je(n)?Be(n,e,null):Be(n,null,t)},inXRange:function(e){return Be(this._view,e,null)},inYRange:function(e){return Be(this._view,null,e)},getCenterPoint:function(){var e,t,n=this._view;return Je(n)?(e=n.x,t=(n.y+n.base)/2):(e=(n.x+n.base)/2,t=n.y),{x:e,y:t}},getArea:function(){var e=this._view;return Je(e)?e.width*Math.abs(e.y-e.base):e.height*Math.abs(e.x-e.base)},tooltipPosition:function(){var e=this._view;return{x:e.x,y:e.y}}}),Y={},Si=xi,Ci=yi,Pi=ki,Ai=Mi;Y.Arc=Si,Y.Line=Ci,Y.Point=Pi,Y.Rectangle=Ai;var Ee=c._deprecated,Te=c.valueOrDefault;function Di(e,t,n){var i,a,r=n.barThickness,o=t.stackCount,s=t.pixels[e],l=c.isNullOrUndef(r)?function(u,d){var h,f,g,p,m=u._length;for(g=1,p=d.length;g0?Math.min(m,Math.abs(f-h)):m,h=f;return m}(t.scale,t.pixels):-1;return c.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}S._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),S._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var mn=ee.extend({dataElementType:Y.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var e,t,n=this;ee.prototype.initialize.apply(n,arguments),(e=n.getMeta()).stack=n.getDataset().stack,e.bar=!0,t=n._getIndexScale().options,Ee("bar chart",t.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Ee("bar chart",t.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Ee("bar chart",t.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Ee("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Ee("bar chart",t.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(e){var t,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),t=0,n=i.length;t=0&&m.min>=0?m.min:m.max,_=m.start===void 0?m.end:m.max>=0&&m.min>=0?m.max-m.min:m.min-m.max,k=p.length;if(x||x===void 0&&b!==void 0)for(i=0;i=0&&u.max>=0?u.max:u.min,(m.min<0&&r<0||m.max>=0&&r>0)&&(y+=r));return o=h.getPixelForValue(y),l=(s=h.getPixelForValue(y+_))-o,v!==void 0&&Math.abs(l)=0&&!f||_<0&&f?o-v:o+v),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(e,t,n,i){var a=i.barThickness==="flex"?function(l,u,d){var h,f=u.pixels,g=f[l],p=l>0?f[l-1]:null,m=l=xe?-le:b<-xe?le:0)+v,_=Math.cos(b),k=Math.sin(b),M=Math.cos(y),C=Math.sin(y),P=b<=0&&y>=0||y>=le,w=b<=ye&&y>=ye||y>=le+ye,O=b<=-ye&&y>=-ye||y>=xe+ye,D=b===-xe||y>=xe?-1:Math.min(_,_*m,M,M*m),T=O?-1:Math.min(k,k*m,C,C*m),N=P?1:Math.max(_,_*m,M,M*m),I=w?1:Math.max(k,k*m,C,C*m);u=(N-D)/2,d=(I-T)/2,h=-(N+D)/2,f=-(I+T)/2}for(i=0,a=p.length;i0&&!isNaN(e)?le*(Math.abs(e)/t):0},getMaxBorderWidth:function(e){var t,n,i,a,r,o,s,l,u=0,d=this.chart;if(!e){for(t=0,n=d.data.datasets.length;t(u=s>u?s:u)?l:u);return u},setHoverStyle:function(e){var t=e._model,n=e._options,i=c.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth},t.backgroundColor=Qe(n.hoverBackgroundColor,i(n.backgroundColor)),t.borderColor=Qe(n.hoverBorderColor,i(n.borderColor)),t.borderWidth=Qe(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(e){for(var t=0,n=0;n0&&xt(l[e-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),e0&&(r=e.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(e,t){return wt(e,t,{intersect:!1})},point:function(e,t){return yt(e,ke(t,e))},nearest:function(e,t,n){var i=ke(t,e);n.axis=n.axis||"xy";var a=kt(n.axis);return _t(e,i,n.intersect,a)},x:function(e,t,n){var i=ke(t,e),a=[],r=!1;return We(e,function(o){o.inXRange(i.x)&&a.push(o),o.inRange(i.x,i.y)&&(r=!0)}),n.intersect&&!r&&(a=[]),a},y:function(e,t,n){var i=ke(t,e),a=[],r=!1;return We(e,function(o){o.inYRange(i.y)&&a.push(o),o.inRange(i.x,i.y)&&(r=!0)}),n.intersect&&!r&&(a=[]),a}}},Mt=c.extend;function Ve(e,t){return c.where(e,function(n){return n.pos===t})}function et(e,t){return e.sort(function(n,i){var a=t?i:n,r=t?n:i;return a.weight===r.weight?a.index-r.index:a.weight-r.weight})}function _n(e,t,n,i){return Math.max(e[n],t[n])+Math.max(e[i],t[i])}function Wi(e,t,n){var i,a,r=n.box,o=e.maxPadding;if(n.size&&(e[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,e[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=t.outerWidth-_n(o,e,"left","right"),a=t.outerHeight-_n(o,e,"top","bottom"),i!==e.w||a!==e.h){e.w=i,e.h=a;var l=n.horizontal?[i,e.w]:[a,e.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function Vi(e,t){var n=t.maxPadding;function i(a){var r={left:0,top:0,right:0,bottom:0};return a.forEach(function(o){r[o]=Math.max(t[o],n[o])}),r}return i(e?["left","right"]:["top","bottom"])}function tt(e,t,n){var i,a,r,o,s,l,u=[];for(i=0,a=e.length;idiv{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&St.default||St,q="$chartjs",Ct="chartjs-size-monitor",wn="chartjs-render-monitor",ji="chartjs-render-animation",Mn=["animationstart","webkitAnimationStart"],qi={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function Sn(e,t){var n=c.getStyle(e,t),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Cn=!!function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("e",null,t)}catch{}return e}()&&{passive:!0};function He(e,t,n){e.addEventListener(t,n,Cn)}function Pt(e,t,n){e.removeEventListener(t,n,Cn)}function At(e,t,n,i,a){return{type:e,chart:t,native:a||null,x:n!==void 0?n:null,y:i!==void 0?i:null}}function je(e){var t=document.createElement("div");return t.className=e||"",t}function Ui(e,t,n){var i,a,r,o,s=e[q]||(e[q]={}),l=s.resizer=function(u){var d=je(Ct),h=je(Ct+"-expand"),f=je(Ct+"-shrink");h.appendChild(je()),f.appendChild(je()),d.appendChild(h),d.appendChild(f),d._reset=function(){h.scrollLeft=1e6,h.scrollTop=1e6,f.scrollLeft=1e6,f.scrollTop=1e6};var g=function(){d._reset(),u()};return He(h,"scroll",g.bind(h,"expand")),He(f,"scroll",g.bind(f,"shrink")),d}((i=function(){if(s.resizer){var u=n.options.maintainAspectRatio&&e.parentNode,d=u?u.clientWidth:0;t(At("resize",n)),u&&u.clientWidth0){var r=e[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index-1?e.split(` -`):e}function Dn(e){var t=S.global;return{xPadding:e.xPadding,yPadding:e.yPadding,xAlign:e.xAlign,yAlign:e.yAlign,rtl:e.rtl,textDirection:e.textDirection,bodyFontColor:e.bodyFontColor,_bodyFontFamily:de(e.bodyFontFamily,t.defaultFontFamily),_bodyFontStyle:de(e.bodyFontStyle,t.defaultFontStyle),_bodyAlign:e.bodyAlign,bodyFontSize:de(e.bodyFontSize,t.defaultFontSize),bodySpacing:e.bodySpacing,titleFontColor:e.titleFontColor,_titleFontFamily:de(e.titleFontFamily,t.defaultFontFamily),_titleFontStyle:de(e.titleFontStyle,t.defaultFontStyle),titleFontSize:de(e.titleFontSize,t.defaultFontSize),_titleAlign:e.titleAlign,titleSpacing:e.titleSpacing,titleMarginBottom:e.titleMarginBottom,footerFontColor:e.footerFontColor,_footerFontFamily:de(e.footerFontFamily,t.defaultFontFamily),_footerFontStyle:de(e.footerFontStyle,t.defaultFontStyle),footerFontSize:de(e.footerFontSize,t.defaultFontSize),_footerAlign:e.footerAlign,footerSpacing:e.footerSpacing,footerMarginTop:e.footerMarginTop,caretSize:e.caretSize,cornerRadius:e.cornerRadius,backgroundColor:e.backgroundColor,opacity:0,legendColorBackground:e.multiKeyBackground,displayColors:e.displayColors,borderColor:e.borderColor,borderWidth:e.borderWidth}}function nt(e,t){return t==="center"?e.x+e.width/2:t==="right"?e.x+e.width-e.xPadding:e.x+e.xPadding}function Tn(e){return se([],he(e))}var Xi=re.extend({initialize:function(){this._model=Dn(this._options),this._lastActive=[]},getTitle:function(){var e=this,t=e._options,n=t.callbacks,i=n.beforeTitle.apply(e,arguments),a=n.title.apply(e,arguments),r=n.afterTitle.apply(e,arguments),o=[];return o=se(o,he(i)),o=se(o,he(a)),o=se(o,he(r))},getBeforeBody:function(){return Tn(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(e,t){var n=this,i=n._options.callbacks,a=[];return c.each(e,function(r){var o={before:[],lines:[],after:[]};se(o.before,he(i.beforeLabel.call(n,r,t))),se(o.lines,i.label.call(n,r,t)),se(o.after,he(i.afterLabel.call(n,r,t))),a.push(o)}),a},getAfterBody:function(){return Tn(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var e=this,t=e._options.callbacks,n=t.beforeFooter.apply(e,arguments),i=t.footer.apply(e,arguments),a=t.afterFooter.apply(e,arguments),r=[];return r=se(r,he(n)),r=se(r,he(i)),r=se(r,he(a))},update:function(e){var t,n,i,a,r,o,s,l,u,d,h=this,f=h._options,g=h._model,p=h._model=Dn(f),m=h._active,v=h._data,x={xAlign:g.xAlign,yAlign:g.yAlign},b={x:g.x,y:g.y},y={width:g.width,height:g.height},_={x:g.caretX,y:g.caretY};if(m.length){p.opacity=1;var k=[],M=[];_=An[f.position].call(h,m,h._eventPosition);var C=[];for(t=0,n=m.length;tD.width&&(T=D.width-w.width),T<0&&(T=0)),V==="top"?N+=$:N-=V==="bottom"?w.height+$:w.height/2,V==="center"?W==="left"?T+=$:W==="right"&&(T-=$):W==="left"?T-=fe:W==="right"&&(T+=fe),{x:T,y:N}}(p,y,x=function(P,w){var O,D,T,N,I,L=P._model,E=P._chart,W=P._chart.chartArea,V="center",$="center";L.yE.height-w.height&&($="bottom");var fe=(W.left+W.right)/2,be=(W.top+W.bottom)/2;$==="center"?(O=function(H){return H<=fe},D=function(H){return H>fe}):(O=function(H){return H<=w.width/2},D=function(H){return H>=E.width-w.width/2}),T=function(H){return H+w.width+L.caretSize+L.caretPadding>E.width},N=function(H){return H-w.width-L.caretSize-L.caretPadding<0},I=function(H){return H<=be?"top":"bottom"},O(L.x)?(V="left",T(L.x)&&(V="center",$=I(L.y))):D(L.x)&&(V="right",N(L.x)&&(V="center",$=I(L.y)));var ne=P._options;return{xAlign:ne.xAlign?ne.xAlign:V,yAlign:ne.yAlign?ne.yAlign:$}}(this,y),h._chart)}else p.opacity=0;return p.xAlign=x.xAlign,p.yAlign=x.yAlign,p.x=b.x,p.y=b.y,p.width=y.width,p.height=y.height,p.caretX=_.x,p.caretY=_.y,h._model=p,e&&f.custom&&f.custom.call(h,p),h},drawCaret:function(e,t){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(e,t,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(e,t,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,f=n.yAlign,g=e.x,p=e.y,m=t.width,v=t.height;if(f==="center")s=p+v/2,h==="left"?(a=(i=g)-u,r=i,o=s+u,l=s-u):(a=(i=g+m)+u,r=i,o=s-u,l=s+u);else if(h==="left"?(i=(a=g+d+u)-u,r=a+u):h==="right"?(i=(a=g+m-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),f==="top")s=(o=p)-u,l=o;else{s=(o=p+v)+u,l=o;var x=r;r=i,i=x}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(e,t,n){var i,a,r,o=t.title,s=o.length;if(s){var l=Dt(t.rtl,t.x,t.width);for(e.x=nt(t,t._titleAlign),n.textAlign=l.textAlign(t._titleAlign),n.textBaseline="middle",i=t.titleFontSize,a=t.titleSpacing,n.fillStyle=t.titleFontColor,n.font=c.fontString(i,t._titleFontStyle,t._titleFontFamily),r=0;r0&&n.stroke()},draw:function(){var e=this._chart.ctx,t=this._view;if(t.opacity!==0){var n={width:t.width,height:t.height},i={x:t.x,y:t.y},a=Math.abs(t.opacity<.001)?0:t.opacity,r=t.title.length||t.beforeBody.length||t.body.length||t.afterBody.length||t.footer.length;this._options.enabled&&r&&(e.save(),e.globalAlpha=a,this.drawBackground(i,t,e,n),i.y+=t.yPadding,c.rtl.overrideTextDirection(e,t.textDirection),this.drawTitle(i,t,e),this.drawBody(i,t,e),this.drawFooter(i,t,e),c.rtl.restoreTextDirection(e,t.textDirection),e.restore())}},handleEvent:function(e){var t,n=this,i=n._options;return n._lastActive=n._lastActive||[],e.type==="mouseout"?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(e,i.mode,i),i.reverse&&n._active.reverse()),(t=!c.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:e.x,y:e.y},n.update(!0),n.pivot())),t}}),Ki=An,Tt=Xi;Tt.positioners=Ki;var It=c.valueOrDefault;function In(){return c.merge(Object.create(null),[].slice.call(arguments),{merger:function(e,t,n,i){if(e==="xAxes"||e==="yAxes"){var a,r,o,s=n[e].length;for(t[e]||(t[e]=[]),a=0;a=t[e].length&&t[e].push({}),!t[e][a].type||o.type&&o.type!==t[e][a].type?c.merge(t[e][a],[qe.getScaleDefaults(r),o]):c.merge(t[e][a],o)}else c._merger(e,t,n,i)}})}function Ft(){return c.merge(Object.create(null),[].slice.call(arguments),{merger:function(e,t,n,i){var a=t[e]||Object.create(null),r=n[e];e==="scales"?t[e]=In(a,r):e==="scale"?t[e]=c.merge(a,[qe.getScaleDefaults(r.type),r]):c._merger(e,t,n,i)}})}function $i(e){var t=e.options;c.each(e.scales,function(n){te.removeBox(e,n)}),t=Ft(S.global,S[e.config.type],t),e.options=e.config.options=t,e.ensureScalesHaveIDs(),e.buildOrUpdateScales(),e.tooltip._options=t.tooltips,e.tooltip.initialize()}function Fn(e,t,n){var i,a=function(r){return r.id===i};do i=t+n++;while(c.findIndex(e,a)>=0);return i}function On(e){return e==="top"||e==="bottom"}function Ln(e,t){return function(n,i){return n[e]===i[e]?n[t]-i[t]:n[e]-i[e]}}S._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var ge=function(e,t){return this.construct(e,t),this};c.extend(ge.prototype,{construct:function(e,t){var n=this;t=function(s){var l=(s=s||Object.create(null)).data=s.data||{};return l.datasets=l.datasets||[],l.labels=l.labels||[],s.options=Ft(S.global,S[s.type],s.options||{}),s}(t);var i=Fe.acquireContext(e,t),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=c.uid(),n.ctx=i,n.canvas=a,n.config=t,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=t.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,ge.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(s){n.config.data=s}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var e=this;return R.notify(e,"beforeInit"),c.retinaScale(e,e.options.devicePixelRatio),e.bindEvents(),e.options.responsive&&e.resize(!0),e.initToolTip(),R.notify(e,"afterInit"),e},clear:function(){return c.canvas.clear(this),this},stop:function(){return mt.cancelAnimation(this),this},resize:function(e){var t=this,n=t.options,i=t.canvas,a=n.maintainAspectRatio&&t.aspectRatio||null,r=Math.max(0,Math.floor(c.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:c.getMaximumHeight(i)));if((t.width!==r||t.height!==o)&&(i.width=t.width=r,i.height=t.height=o,i.style.width=r+"px",i.style.height=o+"px",c.retinaScale(t,n.devicePixelRatio),!e)){var s={width:r,height:o};R.notify(t,"resize",[s]),n.onResize&&n.onResize(t,s),t.stop(),t.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var e=this.options,t=e.scales||{},n=e.scale;c.each(t.xAxes,function(i,a){i.id||(i.id=Fn(t.xAxes,"x-axis-",a))}),c.each(t.yAxes,function(i,a){i.id||(i.id=Fn(t.yAxes,"y-axis-",a))}),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var e=this,t=e.options,n=e.scales||{},i=[],a=Object.keys(n).reduce(function(r,o){return r[o]=!1,r},{});t.scales&&(i=i.concat((t.scales.xAxes||[]).map(function(r){return{options:r,dtype:"category",dposition:"bottom"}}),(t.scales.yAxes||[]).map(function(r){return{options:r,dtype:"linear",dposition:"left"}}))),t.scale&&i.push({options:t.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),c.each(i,function(r){var o=r.options,s=o.id,l=It(o.type,r.dtype);On(o.position)!==On(r.dposition)&&(o.position=r.dposition),a[s]=!0;var u=null;if(s in n&&n[s].type===l)(u=n[s]).options=o,u.ctx=e.ctx,u.chart=e;else{var d=qe.getScaleConstructor(l);if(!d)return;u=new d({id:s,type:l,options:o,ctx:e.ctx,chart:e}),n[u.id]=u}u.mergeTicksOptions(),r.isDefault&&(e.scale=u)}),c.each(a,function(r,o){r||delete n[o]}),e.scales=n,qe.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e,t,n=this,i=[],a=n.data.datasets;for(e=0,t=a.length;e=0;--n)this.drawDataset(t[n],e);R.notify(this,"afterDatasetsDraw",[e])}},drawDataset:function(e,t){var n={meta:e,index:e.index,easingValue:t};R.notify(this,"beforeDatasetDraw",[n])!==!1&&(e.controller.draw(t),R.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(e){var t=this.tooltip,n={tooltip:t,easingValue:e};R.notify(this,"beforeTooltipDraw",[n])!==!1&&(t.draw(),R.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(e){return Ie.modes.single(this,e)},getElementsAtEvent:function(e){return Ie.modes.label(this,e,{intersect:!0})},getElementsAtXAxis:function(e){return Ie.modes["x-axis"](this,e,{intersect:!0})},getElementsAtEventForMode:function(e,t,n){var i=Ie.modes[t];return typeof i=="function"?i(this,e,n):[]},getDatasetAtEvent:function(e){return Ie.modes.dataset(this,e,{intersect:!0})},getDatasetMeta:function(e){var t=this.data.datasets[e];t._meta||(t._meta={});var n=t._meta[this.id];return n||(n=t._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t.order||0,index:e}),n},getVisibleDatasetCount:function(){for(var e=0,t=0,n=this.data.datasets.length;t3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&e!==Math.floor(e)&&(i=e-Math.floor(e));var a=c.log10(Math.abs(i)),r="";if(e!==0)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=c.log10(Math.abs(e)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=e.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=e.toFixed(l)}else r="0";return r},logarithmic:function(e,t,n){var i=e/Math.pow(10,Math.floor(c.log10(e)));return e===0?"0":i===1||i===2||i===5||t===0||t===n.length-1?e.toExponential():""}}},Me=c.isArray,Ye=c.isNullOrUndef,Se=c.valueOrDefault,Oe=c.valueAtIndexOrDefault;function Zi(e,t,n){var i,a=e.getTicks().length,r=Math.min(t,a-1),o=e.getPixelForTick(r),s=e._startPixel,l=e._endPixel;if(!(n&&(i=a===1?Math.max(o-s,l-o):t===0?(e.getPixelForTick(1)-o)/2:(o-e.getPixelForTick(r-1))/2,(o+=rl+1e-6)))return o}function Ji(e,t,n,i){var a,r,o,s,l,u,d,h,f,g,p,m,v,x=n.length,b=[],y=[],_=[],k=0,M=0;for(a=0;aw){for(D=0;D=f||d<=1||!s.isHorizontal()?s.labelRotation=h:(t=(e=s._getLabelSizes()).widest.width,n=e.highest.height-e.highest.offset,i=Math.min(s.maxWidth,s.chart.width-t),t+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-Ge(l.gridLines)-u.padding-Lt(l.scaleLabel),o=Math.sqrt(t*t+n*n),g=c.toDegrees(Math.min(Math.asin(Math.min((e.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),g=Math.max(h,Math.min(f,g))),s.labelRotation=g)},afterCalculateTickRotation:function(){c.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){c.callback(this.options.beforeFit,[this])},fit:function(){var e=this,t=e.minSize={width:0,height:0},n=e.chart,i=e.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=e._isVisible(),l=i.position==="bottom",u=e.isHorizontal();if(u?t.width=e.maxWidth:s&&(t.width=Ge(o)+Lt(r)),u?s&&(t.height=Ge(o)+Lt(r)):t.height=e.maxHeight,a.display&&s){var d=Rt(a),h=e._getLabelSizes(),f=h.first,g=h.last,p=h.widest,m=h.highest,v=.4*d.minor.lineHeight,x=a.padding;if(u){var b=e.labelRotation!==0,y=c.toRadians(e.labelRotation),_=Math.cos(y),k=Math.sin(y),M=k*p.width+_*(m.height-(b?m.offset:0))+(b?0:v);t.height=Math.min(e.maxHeight,t.height+M+x);var C,P,w=e.getPixelForTick(0)-e.left,O=e.right-e.getPixelForTick(e.getTicks().length-1);b?(C=l?_*f.width+k*f.offset:k*(f.height-f.offset),P=l?k*(g.height-g.offset):_*g.width+k*g.offset):(C=f.width/2,P=g.width/2),e.paddingLeft=Math.max((C-w)*e.width/(e.width-w),0)+3,e.paddingRight=Math.max((P-O)*e.width/(e.width-O),0)+3}else{var D=a.mirror?0:p.width+x+v;t.width=Math.min(e.maxWidth,t.width+D),e.paddingTop=f.height/2,e.paddingBottom=g.height/2}}e.handleMargins(),u?(e.width=e._length=n.width-e.margins.left-e.margins.right,e.height=t.height):(e.width=t.width,e.height=e._length=n.height-e.margins.top-e.margins.bottom)},handleMargins:function(){var e=this;e.margins&&(e.margins.left=Math.max(e.paddingLeft,e.margins.left),e.margins.top=Math.max(e.paddingTop,e.margins.top),e.margins.right=Math.max(e.paddingRight,e.margins.right),e.margins.bottom=Math.max(e.paddingBottom,e.margins.bottom))},afterFit:function(){c.callback(this.options.afterFit,[this])},isHorizontal:function(){var e=this.options.position;return e==="top"||e==="bottom"},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(e){if(Ye(e))return NaN;if((typeof e=="number"||e instanceof Number)&&!isFinite(e))return NaN;if(e){if(this.isHorizontal()){if(e.x!==void 0)return this.getRightValue(e.x)}else if(e.y!==void 0)return this.getRightValue(e.y)}return e},_convertTicksToLabels:function(e){var t,n,i,a=this;for(a.ticks=e.map(function(r){return r.value}),a.beforeTickToLabelConversion(),t=a.convertTicksToLabels(e)||a.ticks,a.afterTickToLabelConversion(),n=0,i=e.length;nn-1?null:this.getPixelForDecimal(e*i+(t?i/2:0))},getPixelForDecimal:function(e){return this._reversePixels&&(e=1-e),this._startPixel+e*this._length},getDecimalForPixel:function(e){var t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var e=this.min,t=this.max;return this.beginAtZero?0:e<0&&t<0?t:e>0&&t>0?e:0},_autoSkip:function(e){var t,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(f){var g,p,m=[];for(g=0,p=f.length;gs)return function(f,g,p){var m,v,x=0,b=g[0];for(p=Math.ceil(p),m=0;mk)return x;return Math.max(k,1)}(l,e,0,s),u>0){for(t=0,n=u-1;t1?(h-d)/(u-1):null,at(e,i,c.isNullOrUndef(a)?0:d-a,d),at(e,i,h,c.isNullOrUndef(a)?e.length:h+a),zt(e)}return at(e,i),zt(e)},_tickSize:function(){var e=this.options.ticks,t=c.toRadians(this.labelRotation),n=Math.abs(Math.cos(t)),i=Math.abs(Math.sin(t)),a=this._getLabelSizes(),r=e.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i=0&&(o=e),r!==void 0&&(e=n.indexOf(r))>=0&&(s=e),t.minIndex=o,t.maxIndex=s,t.min=n[o],t.max=n[s]},buildTicks:function(){var e=this._getLabels(),t=this.minIndex,n=this.maxIndex;this.ticks=t===0&&n===e.length-1?e:e.slice(t,n+1)},getLabelForIndex:function(e,t){var n=this.chart;return n.getDatasetMeta(t).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[t].data[e]):this._getLabels()[e]},_configure:function(){var e=this,t=e.options.offset,n=e.ticks;G.prototype._configure.call(e),e.isHorizontal()||(e._reversePixels=!e._reversePixels),n&&(e._startValue=e.minIndex-(t?.5:0),e._valueRange=Math.max(n.length-(t?0:1),1))},getPixelForValue:function(e,t,n){var i,a,r,o=this;return Bt(t)||Bt(n)||(e=o.chart.data.datasets[n].data[t]),Bt(e)||(i=o.isHorizontal()?e.x:e.y),(i!==void 0||e!==void 0&&isNaN(t))&&(a=o._getLabels(),e=c.valueOrDefault(i,e),t=(r=a.indexOf(e))!==-1?r:t,isNaN(t)&&(t=e)),o.getPixelForDecimal((t-o._startValue)/o._valueRange)},getPixelForTick:function(e){var t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e],e+this.minIndex)},getValueForPixel:function(e){var t=Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange);return Math.min(Math.max(t,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),Qi={position:"bottom"};zn._defaults=Qi;var ea=c.noop,Ce=c.isNullOrUndef,rt=G.extend({getRightValue:function(e){return typeof e=="string"?+e:G.prototype.getRightValue.call(this,e)},handleTickRangeOptions:function(){var e=this,t=e.options.ticks;if(t.beginAtZero){var n=c.sign(e.min),i=c.sign(e.max);n<0&&i<0?e.max=0:n>0&&i>0&&(e.min=0)}var a=t.min!==void 0||t.suggestedMin!==void 0,r=t.max!==void 0||t.suggestedMax!==void 0;t.min!==void 0?e.min=t.min:t.suggestedMin!==void 0&&(e.min===null?e.min=t.suggestedMin:e.min=Math.min(e.min,t.suggestedMin)),t.max!==void 0?e.max=t.max:t.suggestedMax!==void 0&&(e.max===null?e.max=t.suggestedMax:e.max=Math.max(e.max,t.suggestedMax)),a!==r&&e.min>=e.max&&(a?e.max=e.min+1:e.min=e.max-1),e.min===e.max&&(e.max++,t.beginAtZero||e.min--)},getTickLimit:function(){var e,t=this.options.ticks,n=t.stepSize,i=t.maxTicksLimit;return n?e=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(e=this._computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:ea,buildTicks:function(){var e=this,t=e.options.ticks,n=e.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:t.min,max:t.max,precision:t.precision,stepSize:c.valueOrDefault(t.fixedStepSize,t.stepSize)},a=e.ticks=function(r,o){var s,l,u,d,h=[],f=r.stepSize,g=f||1,p=r.maxTicks-1,m=r.min,v=r.max,x=r.precision,b=o.min,y=o.max,_=c.niceNum((y-b)/p/g)*g;if(_<1e-14&&Ce(m)&&Ce(v))return[b,y];(d=Math.ceil(y/_)-Math.floor(b/_))>p&&(_=c.niceNum(d*_/p/g)*g),f||Ce(x)?s=Math.pow(10,c._decimalPlaces(_)):(s=Math.pow(10,x),_=Math.ceil(_*s)/s),l=Math.floor(b/_)*_,u=Math.ceil(y/_)*_,f&&(!Ce(m)&&c.almostWhole(m/_,_/1e3)&&(l=m),!Ce(v)&&c.almostWhole(v/_,_/1e3)&&(u=v)),d=(u-l)/_,d=c.almostEquals(d,Math.round(d),_/1e3)?Math.round(d):Math.ceil(d),l=Math.round(l*s)/s,u=Math.round(u*s)/s,h.push(Ce(m)?l:m);for(var k=1;kt.length-1?null:this.getPixelForValue(t[e])}}),aa=ta;Nn._defaults=aa;var Et=c.valueOrDefault,X=c.math.log10,ra={position:"left",ticks:{callback:Ue.formatters.logarithmic}};function ot(e,t){return c.isFinite(e)&&e>=0?e:t}var Bn=G.extend({determineDataLimits:function(){var e,t,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(v){return d?v.xAxisID===o.id:v.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var f=s.stacked;if(f===void 0){for(e=0;e0){var x=c.min(v),b=c.max(v);o.min=Math.min(o.min,x),o.max=Math.max(o.max,b)}})}else for(e=0;e0?e.minNotZero=e.min:e.max<1?e.minNotZero=Math.pow(10,Math.floor(X(e.max))):e.minNotZero=1)},buildTicks:function(){var e=this,t=e.options.ticks,n=!e.isHorizontal(),i={min:ot(t.min),max:ot(t.max)},a=e.ticks=function(r,o){var s,l,u=[],d=Et(r.min,Math.pow(10,Math.floor(X(o.min)))),h=Math.floor(X(o.max)),f=Math.ceil(o.max/Math.pow(10,h));d===0?(s=Math.floor(X(o.minNotZero)),l=Math.floor(o.minNotZero/Math.pow(10,s)),u.push(d),d=l*Math.pow(10,s)):(s=Math.floor(X(d)),l=Math.floor(d/Math.pow(10,s)));var g=s<0?Math.pow(10,Math.abs(s)):1;do u.push(d),++l==10&&(l=1,g=++s>=0?1:g),d=Math.round(l*Math.pow(10,s)*g)/g;while(st.length-1?null:this.getPixelForValue(t[e])},_getFirstTickValue:function(e){var t=Math.floor(X(e));return Math.floor(e/Math.pow(10,t))*Math.pow(10,t)},_configure:function(){var e=this,t=e.min,n=0;G.prototype._configure.call(e),t===0&&(t=e._getFirstTickValue(e.minNotZero),n=Et(e.options.ticks.fontSize,S.global.defaultFontSize)/e._length),e._startValue=X(t),e._valueOffset=n,e._valueRange=(X(e.max)-X(t))/(1-n)},getPixelForValue:function(e){var t=this,n=0;return(e=+t.getRightValue(e))>t.min&&e>0&&(n=(X(e)-t._startValue)/t._valueRange+t._valueOffset),t.getPixelForDecimal(n)},getValueForPixel:function(e){var t=this,n=t.getDecimalForPixel(e);return n===0&&t.min===0?0:Math.pow(10,t._startValue+(n-t._valueOffset)*t._valueRange)}}),oa=ra;Bn._defaults=oa;var st=c.valueOrDefault,Wt=c.valueAtIndexOrDefault,En=c.options.resolve,sa={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Ue.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(e){return e}}};function Vt(e){var t=e.ticks;return t.display&&e.display?st(t.fontSize,S.global.defaultFontSize)+2*t.backdropPaddingY:0}function Wn(e,t,n,i,a){return e===i||e===a?{start:t-n/2,end:t+n/2}:ea?{start:t-n,end:t}:{start:t,end:t+n}}function la(e){return e===0||e===180?"center":e<180?"left":"right"}function ua(e,t,n,i){var a,r,o=n.y+i/2;if(c.isArray(t))for(a=0,r=t.length;a270||e<90)&&(n.y-=t.h)}function lt(e){return c.isNumber(e)?e:0}var Vn=rt.extend({setDimensions:function(){var e=this;e.width=e.maxWidth,e.height=e.maxHeight,e.paddingTop=Vt(e.options)/2,e.xCenter=Math.floor(e.width/2),e.yCenter=Math.floor((e.height-e.paddingTop)/2),e.drawingArea=Math.min(e.height-e.paddingTop,e.width)/2},determineDataLimits:function(){var e=this,t=e.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;c.each(t.data.datasets,function(a,r){if(t.isDatasetVisible(r)){var o=t.getDatasetMeta(r);c.each(a.data,function(s,l){var u=+e.getRightValue(s);isNaN(u)||o.data[l].hidden||(n=Math.min(u,n),i=Math.max(u,i))})}}),e.min=n===Number.POSITIVE_INFINITY?0:n,e.max=i===Number.NEGATIVE_INFINITY?0:i,e.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Vt(this.options))},convertTicksToLabels:function(){var e=this;rt.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(function(){var t=c.callback(e.options.pointLabels.callback,arguments,e);return t||t===0?t:""})},getLabelForIndex:function(e,t){return+this.getRightValue(this.chart.data.datasets[t].data[e])},fit:function(){var e=this.options;e.display&&e.pointLabels.display?function(t){var n,i,a,r=c.options._parseFont(t.options.pointLabels),o={l:0,r:t.width,t:0,b:t.height-t.paddingTop},s={};t.ctx.font=r.string,t._pointLabelSizes=[];var l,u,d,h=t.chart.data.labels.length;for(n=0;no.r&&(o.r=p.end,s.r=f),m.starto.b&&(o.b=m.end,s.b=f)}t.setReductions(t.drawingArea,o,s)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(e,t,n){var i=this,a=t.l/Math.sin(n.l),r=Math.max(t.r-i.width,0)/Math.sin(n.r),o=-t.t/Math.cos(n.t),s=-Math.max(t.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=lt(a),r=lt(r),o=lt(o),s=lt(s),i.drawingArea=Math.min(Math.floor(e-(a+r)/2),Math.floor(e-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(e,t,n,i){var a=this,r=a.width-t-a.drawingArea,o=e+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(e){var t=this.chart,n=(e*(360/t.data.labels.length)+((t.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(e){var t=this;if(c.isNullOrUndef(e))return NaN;var n=t.drawingArea/(t.max-t.min);return t.options.ticks.reverse?(t.max-e)*n:(e-t.min)*n},getPointPosition:function(e,t){var n=this.getIndexAngle(e)-Math.PI/2;return{x:Math.cos(n)*t+this.xCenter,y:Math.sin(n)*t+this.yCenter}},getPointPositionForValue:function(e,t){return this.getPointPosition(e,this.getDistanceFromCenterForValue(t))},getBasePosition:function(e){var t=this.min,n=this.max;return this.getPointPositionForValue(e||0,this.beginAtZero?0:t<0&&n<0?n:t>0&&n>0?t:0)},_drawGrid:function(){var e,t,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=st(s.lineWidth,o.lineWidth),u=st(s.color,o.color);if(r.pointLabels.display&&function(d){var h=d.ctx,f=d.options,g=f.pointLabels,p=Vt(f),m=d.getDistanceFromCenterForValue(f.ticks.reverse?d.min:d.max),v=c.options._parseFont(g);h.save(),h.font=v.string,h.textBaseline="middle";for(var x=d.chart.data.labels.length-1;x>=0;x--){var b=x===0?p/2:0,y=d.getPointPosition(x,m+b+5),_=Wt(g.fontColor,x,S.global.defaultFontColor);h.fillStyle=_;var k=d.getIndexAngle(x),M=c.toDegrees(k);h.textAlign=la(M),da(M,d._pointLabelSizes[x],y),ua(h,d.pointLabels[x],y,v.lineHeight)}h.restore()}(i),o.display&&c.each(i.ticks,function(d,h){h!==0&&(t=i.getDistanceFromCenterForValue(i.ticksAsNumbers[h]),function(f,g,p,m){var v,x=f.ctx,b=g.circular,y=f.chart.data.labels.length,_=Wt(g.color,m-1),k=Wt(g.lineWidth,m-1);if((b||y)&&_&&k){if(x.save(),x.strokeStyle=_,x.lineWidth=k,x.setLineDash&&(x.setLineDash(g.borderDash||[]),x.lineDashOffset=g.borderDashOffset||0),x.beginPath(),b)x.arc(f.xCenter,f.yCenter,p,0,2*Math.PI);else{v=f.getPointPosition(0,p),x.moveTo(v.x,v.y);for(var M=1;M=0;e--)t=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(e,t),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var e=this,t=e.ctx,n=e.options.ticks;if(n.display){var i,a,r=e.getIndexAngle(0),o=c.options._parseFont(n),s=st(n.fontColor,S.global.defaultFontColor);t.save(),t.font=o.string,t.translate(e.xCenter,e.yCenter),t.rotate(r),t.textAlign="center",t.textBaseline="middle",c.each(e.ticks,function(l,u){(u!==0||n.reverse)&&(i=e.getDistanceFromCenterForValue(e.ticksAsNumbers[u]),n.showLabelBackdrop&&(a=t.measureText(l).width,t.fillStyle=n.backdropColor,t.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),t.fillStyle=s,t.fillText(l,0,-i))}),t.restore()}},_drawTitle:c.noop}),ha=sa;Vn._defaults=ha;var Ht=c._deprecated,Hn=c.options.resolve,ca=c.valueOrDefault,jn=Number.MIN_SAFE_INTEGER||-9007199254740991,jt=Number.MAX_SAFE_INTEGER||9007199254740991,ut={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},K=Object.keys(ut);function qn(e,t){return e-t}function Un(e){return c.valueOrDefault(e.time.min,e.ticks.min)}function Yn(e){return c.valueOrDefault(e.time.max,e.ticks.max)}function Le(e,t,n,i){var a=function(d,h,f){for(var g,p,m,v=0,x=d.length-1;v>=0&&v<=x;){if(p=d[(g=v+x>>1)-1]||null,m=d[g],!p)return{lo:null,hi:m};if(m[h]f))return{lo:p,hi:m};x=g-1}}return{lo:m,hi:null}}(e,t,n),r=a.lo?a.hi?a.lo:e[e.length-2]:e[0],o=a.lo?a.hi?a.hi:e[e.length-1]:e[1],s=o[t]-r[t],l=s?(n-r[t])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function qt(e,t){var n=e._adapter,i=e.options.time,a=i.parser,r=a||i.format,o=t;return typeof a=="function"&&(o=a(o)),c.isFinite(o)||(o=typeof r=="string"?n.parse(o,r):n.parse(o)),o!==null?+o:(a||typeof r!="function"||(o=r(t),c.isFinite(o)||(o=n.parse(o))),o)}function Pe(e,t){if(c.isNullOrUndef(t))return null;var n=e.options.time,i=qt(e,e.getRightValue(t));return i===null||n.round&&(i=+e._adapter.startOf(i,n.round)),i}function Gn(e,t,n,i){var a,r,o,s=K.length;for(a=K.indexOf(e);a=0&&(u[g].major=!0);return u}(e,r,o,n):r}var Kn=G.extend({initialize:function(){this.mergeTicksOptions(),G.prototype.initialize.call(this)},update:function(){var e=this,t=e.options,n=t.time||(t.time={}),i=e._adapter=new Ot._date(t.adapters.date);return Ht("time scale",n.format,"time.format","time.parser"),Ht("time scale",n.min,"time.min","ticks.min"),Ht("time scale",n.max,"time.max","ticks.max"),c.mergeIf(n.displayFormats,i.formats()),G.prototype.update.apply(e,arguments)},getRightValue:function(e){return e&&e.t!==void 0&&(e=e.t),G.prototype.getRightValue.call(this,e)},determineDataLimits:function(){var e,t,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",f=jt,g=jn,p=[],m=[],v=[],x=s._getLabels();for(e=0,n=x.length;e1?function(b){var y,_,k,M={},C=[];for(y=0,_=b.length;y<_;++y)M[k=b[y]]||(M[k]=!0,C.push(k));return C}(p).sort(qn):p.sort(qn),f=Math.min(f,p[0]),g=Math.max(g,p[p.length-1])),f=Pe(s,Un(d))||f,g=Pe(s,Yn(d))||g,f=f===jt?+u.startOf(Date.now(),h):f,g=g===jn?+u.endOf(Date.now(),h)+1:g,s.min=Math.min(f,g),s.max=Math.max(f+1,g),s._table=[],s._timestamps={data:p,datasets:m,labels:v}},buildTicks:function(){var e,t,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),f=s.source,g=o.distribution;for(u=f==="data"||f==="auto"&&g==="series"?u.data:f==="labels"?u.labels:function(p,m,v,x){var b,y=p._adapter,_=p.options,k=_.time,M=k.unit||Gn(k.minUnit,m,v,x),C=Hn([k.stepSize,k.unitStepSize,1]),P=M==="week"&&k.isoWeekday,w=m,O=[];if(P&&(w=+y.startOf(w,"isoWeek",P)),w=+y.startOf(w,P?"day":M),y.diff(v,m,M)>1e5*C)throw m+" and "+v+" are too far apart with stepSize of "+C+" "+M;for(b=w;b=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?Gn(l.minUnit,i.min,i.max,h):function(p,m,v,x,b){var y,_;for(y=K.length-1;y>=K.indexOf(v);y--)if(_=K[y],ut[_].common&&p._adapter.diff(b,x,_)>=m-1)return _;return K[v?K.indexOf(v):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&i._unit!=="year"?function(p){for(var m=K.indexOf(p)+1,v=K.length;mm&&k=0&&e0?s:1}}),fa={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};Kn._defaults=fa;var ga={category:zn,linear:Nn,logarithmic:Bn,radialLinear:Vn,time:Kn},pa={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Ot._date.override(typeof B=="function"?{_id:"moment",formats:function(){return pa},parse:function(e,t){return typeof e=="string"&&typeof t=="string"?e=B(e,t):e instanceof B||(e=B(e)),e.isValid()?e.valueOf():null},format:function(e,t){return B(e).format(t)},add:function(e,t,n){return B(e).add(t,n).valueOf()},diff:function(e,t,n){return B(e).diff(B(t),n)},startOf:function(e,t,n){return e=B(e),t==="isoWeek"?e.isoWeekday(n).valueOf():e.startOf(t).valueOf()},endOf:function(e,t){return B(e).endOf(t).valueOf()},_create:function(e){return B(e)}}:{}),S._set("global",{plugins:{filler:{propagate:!0}}});var ma={dataset:function(e){var t=e.fill,n=e.chart,i=n.getDatasetMeta(t),a=i&&n.isDatasetVisible(t)&&i.dataset._children||[],r=a.length||0;return r?function(o,s){return s=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function ba(e){return(e.el._scale||{}).getPointPositionForValue?function(t){var n,i,a,r,o,s=t.el._scale,l=s.options,u=s.chart.data.labels.length,d=t.fill,h=[];if(!u)return null;for(n=l.ticks.reverse?s.max:s.min,i=l.ticks.reverse?s.min:s.max,a=s.getPointPositionForValue(0,n),r=0;r0;--r)c.canvas.lineTo(e,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)e.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function _a(e,t,n,i,a,r){var o,s,l,u,d,h,f,g,p=t.length,m=i.spanGaps,v=[],x=[],b=0,y=0;for(e.beginPath(),o=0,s=p;o=0;--n)(t=l[n].$filler)&&t.visible&&(a=(i=t.el)._view,r=i._children||[],o=t.mapper,s=a.backgroundColor||S.global.defaultColor,o&&s&&r.length&&(c.canvas.clipArea(u,e.chartArea),_a(u,r,o,a,s,i._loop),c.canvas.unclipArea(u)))}},wa=c.rtl.getRtlAdapter,pe=c.noop,me=c.valueOrDefault;function Ut(e,t){return e.usePointStyle&&e.boxWidth>t?t:e.boxWidth}S._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(e,t){var n=t.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=a.hidden===null?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(e){var t=e.data.datasets,n=e.options.legend||{},i=n.labels&&n.labels.usePointStyle;return e._getSortedDatasetMetas().map(function(a){var r=a.controller.getStyle(i?0:void 0);return{text:t[a.index].label,fillStyle:r.backgroundColor,hidden:!e.isDatasetVisible(a.index),lineCap:r.borderCapStyle,lineDash:r.borderDash,lineDashOffset:r.borderDashOffset,lineJoin:r.borderJoinStyle,lineWidth:r.borderWidth,strokeStyle:r.borderColor,pointStyle:r.pointStyle,rotation:r.rotation,datasetIndex:a.index}},this)}}},legendCallback:function(e){var t,n,i,a=document.createElement("ul"),r=e.data.datasets;for(a.setAttribute("class",e.id+"-legend"),t=0,n=r.length;tl.width)&&(h+=o+n.padding,d[d.length-(y>0?0:1)]=0),s[y]={left:0,top:0,width:_,height:o},d[d.length-1]+=_+n.padding}),l.height+=h}else{var f=n.padding,g=e.columnWidths=[],p=e.columnHeights=[],m=n.padding,v=0,x=0;c.each(e.legendItems,function(b,y){var _=Ut(n,o)+o/2+a.measureText(b.text).width;y>0&&x+o+2*f>l.height&&(m+=v+n.padding,g.push(v),p.push(x),v=0,x=0),v=Math.max(v,_),x+=o+f,s[y]={left:0,top:0,width:_,height:o}}),m+=v,g.push(v),p.push(x),l.width+=m}e.width=l.width,e.height=l.height}else e.width=l.width=e.height=l.height=0},afterFit:pe,isHorizontal:function(){return this.options.position==="top"||this.options.position==="bottom"},draw:function(){var e=this,t=e.options,n=t.labels,i=S.global,a=i.defaultColor,r=i.elements.line,o=e.height,s=e.columnHeights,l=e.width,u=e.lineWidths;if(t.display){var d,h=wa(t.rtl,e.left,e.minSize.width),f=e.ctx,g=me(n.fontColor,i.defaultFontColor),p=c.options._parseFont(n),m=p.size;f.textAlign=h.textAlign("left"),f.textBaseline="middle",f.lineWidth=.5,f.strokeStyle=g,f.fillStyle=g,f.font=p.string;var v=Ut(n,m),x=e.legendHitBoxes,b=function(k,M){switch(t.align){case"start":return n.padding;case"end":return k-M;default:return(k-M+n.padding)/2}},y=e.isHorizontal();d=y?{x:e.left+b(l,u[0]),y:e.top+n.padding,line:0}:{x:e.left+n.padding,y:e.top+b(o,s[0]),line:0},c.rtl.overrideTextDirection(e.ctx,t.textDirection);var _=m+n.padding;c.each(e.legendItems,function(k,M){var C=f.measureText(k.text).width,P=v+m/2+C,w=d.x,O=d.y;h.setWidth(e.minSize.width),y?M>0&&w+P+n.padding>e.left+e.minSize.width&&(O=d.y+=_,d.line++,w=d.x=e.left+b(l,u[d.line])):M>0&&O+_>e.top+e.minSize.height&&(w=d.x=w+e.columnWidths[d.line]+n.padding,d.line++,O=d.y=e.top+b(o,s[d.line]));var D=h.x(w);(function(T,N,I){if(!(isNaN(v)||v<=0)){f.save();var L=me(I.lineWidth,r.borderWidth);if(f.fillStyle=me(I.fillStyle,a),f.lineCap=me(I.lineCap,r.borderCapStyle),f.lineDashOffset=me(I.lineDashOffset,r.borderDashOffset),f.lineJoin=me(I.lineJoin,r.borderJoinStyle),f.lineWidth=L,f.strokeStyle=me(I.strokeStyle,a),f.setLineDash&&f.setLineDash(me(I.lineDash,r.borderDash)),n&&n.usePointStyle){var E=v*Math.SQRT2/2,W=h.xPlus(T,v/2),V=N+m/2;c.canvas.drawPoint(f,I.pointStyle,E,W,V,I.rotation)}else f.fillRect(h.leftForLtr(T,v),N,v,m),L!==0&&f.strokeRect(h.leftForLtr(T,v),N,v,m);f.restore()}})(D,O,k),x[M].left=h.leftForLtr(D,x[M].width),x[M].top=O,function(T,N,I,L){var E=m/2,W=h.xPlus(T,v+E),V=N+E;f.fillText(I.text,W,V),I.hidden&&(f.beginPath(),f.lineWidth=2,f.moveTo(W,V),f.lineTo(h.xPlus(W,L),V),f.stroke())}(D,O,k,C),y?d.x+=P+n.padding:d.y+=_}),c.rtl.restoreTextDirection(e.ctx,t.textDirection)}},_getLegendItemAt:function(e,t){var n,i,a,r=this;if(e>=r.left&&e<=r.right&&t>=r.top&&t<=r.bottom){for(a=r.legendHitBoxes,n=0;n=(i=a[n]).left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height)return r.legendItems[n]}return null},handleEvent:function(e){var t,n=this,i=n.options,a=e.type==="mouseup"?"click":e.type;if(a==="mousemove"){if(!i.onHover&&!i.onLeave)return}else if(a!=="click"||!i.onClick)return;t=n._getLegendItemAt(e.x,e.y),a==="click"?t&&i.onClick&&i.onClick.call(n,e.native,t):(i.onLeave&&t!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,e.native,n._hoveredItem),n._hoveredItem=t),i.onHover&&t&&i.onHover.call(n,e.native,t))}});function Qn(e,t){var n=new Jn({ctx:e.ctx,options:t,chart:e});te.configure(e,n,t),te.addBox(e,n),e.legend=n}var Ma={id:"legend",_element:Jn,beforeInit:function(e){var t=e.options.legend;t&&Qn(e,t)},beforeUpdate:function(e){var t=e.options.legend,n=e.legend;t?(c.mergeIf(t,S.global.legend),n?(te.configure(e,n,t),n.options=t):Qn(e,t)):n&&(te.removeBox(e,n),delete e.legend)},afterEvent:function(e,t){var n=e.legend;n&&n.handleEvent(t)}},ce=c.noop;S._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var ei=re.extend({initialize:function(e){c.extend(this,e),this.legendHitBoxes=[]},beforeUpdate:ce,update:function(e,t,n){var i=this;return i.beforeUpdate(),i.maxWidth=e,i.maxHeight=t,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:ce,beforeSetDimensions:ce,setDimensions:function(){var e=this;e.isHorizontal()?(e.width=e.maxWidth,e.left=0,e.right=e.width):(e.height=e.maxHeight,e.top=0,e.bottom=e.height),e.paddingLeft=0,e.paddingTop=0,e.paddingRight=0,e.paddingBottom=0,e.minSize={width:0,height:0}},afterSetDimensions:ce,beforeBuildLabels:ce,buildLabels:ce,afterBuildLabels:ce,beforeFit:ce,fit:function(){var e,t=this,n=t.options,i=t.minSize={},a=t.isHorizontal();n.display?(e=(c.isArray(n.text)?n.text.length:1)*c.options._parseFont(n).lineHeight+2*n.padding,t.width=i.width=a?t.maxWidth:e,t.height=i.height=a?e:t.maxHeight):t.width=i.width=t.height=i.height=0},afterFit:ce,isHorizontal:function(){var e=this.options.position;return e==="top"||e==="bottom"},draw:function(){var e=this,t=e.ctx,n=e.options;if(n.display){var i,a,r,o=c.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=e.top,h=e.left,f=e.bottom,g=e.right;t.fillStyle=c.valueOrDefault(n.fontColor,S.global.defaultFontColor),t.font=o.string,e.isHorizontal()?(a=h+(g-h)/2,r=d+l,i=g-h):(a=n.position==="left"?h+l:g-l,r=d+(f-d)/2,i=f-d,u=Math.PI*(n.position==="left"?-.5:.5)),t.save(),t.translate(a,r),t.rotate(u),t.textAlign="center",t.textBaseline="middle";var p=n.text;if(c.isArray(p))for(var m=0,v=0;v=0;o--){var s=i[o];if(a(s))return s}},c.isNumber=function(i){return!isNaN(parseFloat(i))&&isFinite(i)},c.almostEquals=function(i,a,r){return Math.abs(i-a)=i},c.max=function(i){return i.reduce(function(a,r){return isNaN(r)?a:Math.max(a,r)},Number.NEGATIVE_INFINITY)},c.min=function(i){return i.reduce(function(a,r){return isNaN(r)?a:Math.min(a,r)},Number.POSITIVE_INFINITY)},c.sign=Math.sign?function(i){return Math.sign(i)}:function(i){return(i=+i)==0||isNaN(i)?i:i>0?1:-1},c.toRadians=function(i){return i*(Math.PI/180)},c.toDegrees=function(i){return i*(180/Math.PI)},c._decimalPlaces=function(i){if(c.isFinite(i)){for(var a=1,r=0;Math.round(i*a)/a!==i;)a*=10,r++;return r}},c.getAngleFromPoint=function(i,a){var r=a.x-i.x,o=a.y-i.y,s=Math.sqrt(r*r+o*o),l=Math.atan2(o,r);return l<-.5*Math.PI&&(l+=2*Math.PI),{angle:l,distance:s}},c.distanceBetweenPoints=function(i,a){return Math.sqrt(Math.pow(a.x-i.x,2)+Math.pow(a.y-i.y,2))},c.aliasPixel=function(i){return i%2==0?0:.5},c._alignPixel=function(i,a,r){var o=i.currentDevicePixelRatio,s=r/2;return Math.round((a-s)*o)/o+s},c.splineCurve=function(i,a,r,o){var s=i.skip?a:i,l=a,u=r.skip?a:r,d=Math.sqrt(Math.pow(l.x-s.x,2)+Math.pow(l.y-s.y,2)),h=Math.sqrt(Math.pow(u.x-l.x,2)+Math.pow(u.y-l.y,2)),f=d/(d+h),g=h/(d+h),p=o*(f=isNaN(f)?0:f),m=o*(g=isNaN(g)?0:g);return{previous:{x:l.x-p*(u.x-s.x),y:l.y-p*(u.y-s.y)},next:{x:l.x+m*(u.x-s.x),y:l.y+m*(u.y-s.y)}}},c.EPSILON=Number.EPSILON||1e-14,c.splineCurveMonotone=function(i){var a,r,o,s,l,u,d,h,f,g=(i||[]).map(function(v){return{model:v._model,deltaK:0,mK:0}}),p=g.length;for(a=0;a0?g[a-1]:null,(s=a0?g[a-1]:null,s=a=i.length-1?i[0]:i[a+1]:a>=i.length-1?i[i.length-1]:i[a+1]},c.previousItem=function(i,a,r){return r?a<=0?i[i.length-1]:i[a-1]:a<=0?i[0]:i[a-1]},c.niceNum=function(i,a){var r=Math.floor(c.log10(i)),o=i/Math.pow(10,r);return(a?o<1.5?1:o<3?2:o<7?5:10:o<=1?1:o<=2?2:o<=5?5:10)*Math.pow(10,r)},c.requestAnimFrame=typeof window=="undefined"?function(i){i()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(i){return window.setTimeout(i,1e3/60)},c.getRelativePosition=function(i,a){var r,o,s=i.originalEvent||i,l=i.target||i.srcElement,u=l.getBoundingClientRect(),d=s.touches;d&&d.length>0?(r=d[0].clientX,o=d[0].clientY):(r=s.clientX,o=s.clientY);var h=parseFloat(c.getStyle(l,"padding-left")),f=parseFloat(c.getStyle(l,"padding-top")),g=parseFloat(c.getStyle(l,"padding-right")),p=parseFloat(c.getStyle(l,"padding-bottom")),m=u.right-u.left-h-g,v=u.bottom-u.top-f-p;return{x:r=Math.round((r-u.left-h)/m*l.width/a.currentDevicePixelRatio),y:o=Math.round((o-u.top-f)/v*l.height/a.currentDevicePixelRatio)}},c.getConstraintWidth=function(i){return n(i,"max-width","clientWidth")},c.getConstraintHeight=function(i){return n(i,"max-height","clientHeight")},c._calculatePadding=function(i,a,r){return(a=c.getStyle(i,a)).indexOf("%")>-1?r*parseInt(a,10)/100:parseInt(a,10)},c._getParentNode=function(i){var a=i.parentNode;return a&&a.toString()==="[object ShadowRoot]"&&(a=a.host),a},c.getMaximumWidth=function(i){var a=c._getParentNode(i);if(!a)return i.clientWidth;var r=a.clientWidth,o=r-c._calculatePadding(a,"padding-left",r)-c._calculatePadding(a,"padding-right",r),s=c.getConstraintWidth(i);return isNaN(s)?o:Math.min(o,s)},c.getMaximumHeight=function(i){var a=c._getParentNode(i);if(!a)return i.clientHeight;var r=a.clientHeight,o=r-c._calculatePadding(a,"padding-top",r)-c._calculatePadding(a,"padding-bottom",r),s=c.getConstraintHeight(i);return isNaN(s)?o:Math.min(o,s)},c.getStyle=function(i,a){return i.currentStyle?i.currentStyle[a]:document.defaultView.getComputedStyle(i,null).getPropertyValue(a)},c.retinaScale=function(i,a){var r=i.currentDevicePixelRatio=a||typeof window!="undefined"&&window.devicePixelRatio||1;if(r!==1){var o=i.canvas,s=i.height,l=i.width;o.height=s*r,o.width=l*r,i.ctx.scale(r,r),o.style.height||o.style.width||(o.style.height=s+"px",o.style.width=l+"px")}},c.fontString=function(i,a,r){return a+" "+i+"px "+r},c.longestText=function(i,a,r,o){var s=(o=o||{}).data=o.data||{},l=o.garbageCollect=o.garbageCollect||[];o.font!==a&&(s=o.data={},l=o.garbageCollect=[],o.font=a),i.font=a;var u,d,h,f,g,p=0,m=r.length;for(u=0;ur.length){for(u=0;uo&&(o=l),o},c.numberOfLabelLines=function(i){var a=1;return c.each(i,function(r){c.isArray(r)&&r.length>a&&(a=r.length)}),a},c.color=Ke?function(i){return i instanceof CanvasGradient&&(i=S.global.defaultColor),Ke(i)}:function(i){return console.error("Color.js not found!"),i},c.getHoverColor=function(i){return i instanceof CanvasPattern||i instanceof CanvasGradient?i:c.color(i).saturate(.5).darken(.1).rgbString()}}(),A._adapters=Ot,A.Animation=pt,A.animationService=mt,A.controllers=yn,A.DatasetController=ee,A.defaults=S,A.Element=re,A.elements=Y,A.Interaction=Ie,A.layouts=te,A.platform=Fe,A.plugins=R,A.Scale=G,A.scaleService=qe,A.Ticks=Ue,A.Tooltip=Tt,A.helpers.each(ga,function(e,t){A.scaleService.registerScaleType(t,e,e._defaults)}),ve)ve.hasOwnProperty(ni)&&A.plugins.register(ve[ni]);A.platform.initialize();var Aa=A;return typeof window!="undefined"&&(window.Chart=A),A.Chart=A,A.Legend=ve.legend._element,A.Title=ve.title._element,A.pluginService=A.plugins,A.PluginBase=A.Element.extend({}),A.canvasHelpers=A.helpers.canvas,A.layoutService=A.layouts,A.LinearScaleBase=rt,A.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],function(e){A[e]=function(t,n){return new A(t,A.helpers.merge(n||{},{type:e.charAt(0).toLowerCase()+e.slice(1)}))}}),Aa})})(Yt);var Ia=Yt.exports,Oa=Object.freeze(Ta({__proto__:null,[Symbol.toStringTag]:"Module",default:Ia},[Yt.exports]));export{Oa as C}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Config.029b666f.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Config.029b666f.js deleted file mode 100644 index 83a9d08b..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Config.029b666f.js +++ /dev/null @@ -1 +0,0 @@ -var J=Object.defineProperty,q=Object.defineProperties;var F=Object.getOwnPropertyDescriptors;var C=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable;var R=(e,a,l)=>a in e?J(e,a,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[a]=l,u=(e,a)=>{for(var l in a||(a={}))P.call(a,l)&&R(e,l,a[l]);if(C)for(var l of C(a))O.call(a,l)&&R(e,l,a[l]);return e},E=(e,a)=>q(e,F(a));var j=(e,a)=>{var l={};for(var s in e)P.call(e,s)&&a.indexOf(s)<0&&(l[s]=e[s]);if(e!=null&&C)for(var s of C(e))a.indexOf(s)<0&&O.call(e,s)&&(l[s]=e[s]);return l};import{R as m,g as K,r as t,k as W,J as Q,j as X}from"./vendor.38e754a4.js";import{r as Y}from"./logs.4dcb9935.js";import{S}from"./Select.29a5a6ae.js";import{s as A,b as Z,d as T,e as $,u as ee,c as M,h as te,g as B,i as ae,o as ne,j as k,k as le,C as se,l as re,B as oe,n as ce,q as ie}from"./index.ee5bc09a.js";const{useState:pe,useRef:ue,useEffect:me,useCallback:de}=m;function ge(e){return m.createElement("input",u({className:A.input},e))}function xe(l){var s=l,{value:e}=s,a=j(s,["value"]);const[i,r]=pe(e),d=ue(e);me(()=>{d.current!==e&&r(e),d.current=e},[e]);const g=de(b=>r(b.target.value),[r]);return m.createElement("input",u({className:A.input,value:i,onChange:g},a))}const fe="_root_1tdl3_1",Ee="_section_1tdl3_2",he="_wrapSwitch_1tdl3_26",ve="_sep_1tdl3_32",Ce="_label_1tdl3_45";var c={root:fe,section:Ee,wrapSwitch:he,sep:ve,label:Ce};const be="_fieldset_1ghjp_1",ye="_input_1ghjp_9",Se="_cnt_1ghjp_9";var _={fieldset:be,input:ye,cnt:Se};function ke({OptionComponent:e,optionPropsList:a,selectedIndex:l,onChange:s}){const i=K("visually-hidden",_.input),r=d=>{s(d.target.value)};return m.createElement("fieldset",{className:_.fieldset},a.map((d,g)=>m.createElement("label",{key:g},m.createElement("input",{type:"radio",checked:l===g,name:"selection",value:g,"aria-labelledby":"traffic chart type "+g,onChange:r,className:i}),m.createElement("div",{className:_.cnt},m.createElement(e,u({},d))))))}const _e={legend:{display:!1},scales:{xAxes:[{display:!1}],yAxes:[{display:!1}]}},D=[23e3,35e3,46e3,33e3,9e4,68e3,23e3,45e3],we=[184e3,183e3,196e3,182e3,19e4,186e3,182e3,189e3],Ie=D;function Ne({id:e}){const a=Z.read(),l=t.exports.useMemo(()=>({labels:Ie,datasets:[E(u(u({},T),$[e].up),{data:D}),E(u(u({},T),$[e].down),{data:we})]}),[e]),s="chart-"+e;return ee(a,s,l,null,_e),m.createElement("div",{style:{width:100,padding:5}},m.createElement("canvas",{id:s}))}const{useEffect:U,useState:Le,useCallback:x,useRef:Pe,useMemo:Oe}=X,Re=[{id:0},{id:1},{id:2},{id:3}],je=[["debug","Debug"],["warning","Warning"],["info","Info"],["error","Error"],["silent","Silent"]],Ae=[{key:"port",label:"HTTP Proxy Port"},{key:"socks-port",label:"SOCKS5 Proxy Port"},{key:"mixed-port",label:"Mixed Port"},{key:"redir-port",label:"Redir Port"}],Te=[["zh","\u4E2D\u6587"],["en","English"]],$e=[["Global","Global"],["Rule","Rule"],["Direct","Direct"]],Me=e=>({configs:te(e),apiConfig:B(e)}),Be=e=>({selectedChartStyleIndex:ce(e),latencyTestUrl:ie(e),apiConfig:B(e)}),De=M(Be)(Ve);var Fe=M(Me)(Ue);function Ue({dispatch:e,configs:a,apiConfig:l}){return U(()=>{e(ae(l))},[e,l]),t.exports.createElement(De,{configs:a})}function Ve({dispatch:e,configs:a,selectedChartStyleIndex:l,latencyTestUrl:s,apiConfig:i}){const[r,d]=Le(a),g=Pe(a);U(()=>{g.current!==a&&d(a),g.current=a},[a]);const b=x(()=>{e(ne("apiConfig"))},[e]),f=x((n,o)=>{d(E(u({},r),{[n]:o}))},[r]),V=x(n=>{const o="allow-lan",p=n;f(o,p),e(k(i,{"allow-lan":p}))},[i,e,f]),h=x(({name:n,value:o})=>{switch(n){case"mode":case"log-level":f(n,o),e(k(i,{[n]:o})),n==="log-level"&&Y(E(u({},i),{logLevel:o}));break;case"redir-port":case"socks-port":case"mixed-port":case"port":if(o!==""){const p=parseInt(o,10);if(p<0||p>65535)return}f(n,o);break;default:return}},[i,e,f]),z=x(n=>h(n.target),[h]),{selectChartStyleIndex:G,updateAppConfig:w}=le(),I=x(n=>{const o=n.target,{name:p,value:L}=o;switch(p){case"port":case"socks-port":case"mixed-port":case"redir-port":{const y=parseInt(L,10);if(y<0||y>65535)return;e(k(i,{[p]:y}));break}case"latencyTestUrl":{w(p,L);break}default:throw new Error(`unknown input name ${p}`)}},[i,e,w]),H=Oe(()=>{const n=r.mode;return typeof n=="string"&&n[0].toUpperCase()+n.slice(1)},[r.mode]),{t:v,i18n:N}=W();return t.exports.createElement("div",null,t.exports.createElement(se,{title:v("Config")}),t.exports.createElement("div",{className:c.root},Ae.map(n=>r[n.key]!==void 0?t.exports.createElement("div",{key:n.key},t.exports.createElement("div",{className:c.label},n.label),t.exports.createElement(ge,{name:n.key,value:r[n.key],onChange:z,onBlur:I})):null),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},"Mode"),t.exports.createElement(S,{options:$e,selected:H,onChange:n=>h({name:"mode",value:n.target.value})})),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},"Log Level"),t.exports.createElement(S,{options:je,selected:r["log-level"],onChange:n=>h({name:"log-level",value:n.target.value})})),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},"Allow LAN"),t.exports.createElement("div",{className:c.wrapSwitch},t.exports.createElement(re,{name:"allow-lan",checked:r["allow-lan"],onChange:V})))),t.exports.createElement("div",{className:c.sep},t.exports.createElement("div",null)),t.exports.createElement("div",{className:c.section},t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},v("latency_test_url")),t.exports.createElement(xe,{name:"latencyTestUrl",type:"text",value:s,onBlur:I})),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},v("lang")),t.exports.createElement("div",null,t.exports.createElement(S,{options:Te,selected:N.language,onChange:n=>N.changeLanguage(n.target.value)}))),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},v("chart_style")),t.exports.createElement(ke,{OptionComponent:Ne,optionPropsList:Re,selectedIndex:l,onChange:G})),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},"Action"),t.exports.createElement(oe,{start:t.exports.createElement(Q,{size:16}),label:"Switch backend",onClick:b}))))}export{Fe as default}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Config.af7c0f33.css b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Config.af7c0f33.css deleted file mode 100644 index 95b5bf34..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Config.af7c0f33.css +++ /dev/null @@ -1 +0,0 @@ -._root_1tdl3_1,._section_1tdl3_2{display:grid;grid-template-columns:repeat(auto-fill,minmax(345px,1fr));max-width:900px;gap:5px}@media screen and (min-width: 30em){._root_1tdl3_1,._section_1tdl3_2{gap:15px}}._root_1tdl3_1,._section_1tdl3_2{padding:6px 15px 10px}@media screen and (min-width: 30em){._root_1tdl3_1,._section_1tdl3_2{padding:10px 40px 15px}}._wrapSwitch_1tdl3_26{height:40px;display:flex;align-items:center}._sep_1tdl3_32{max-width:900px;padding:0 15px}@media screen and (min-width: 30em){._sep_1tdl3_32{padding:0 40px}}._sep_1tdl3_32>div{border-top:1px dashed #373737}._label_1tdl3_45{padding:11px 0}._fieldset_1ghjp_1{margin:0;padding:0;border:0;display:flex;flex-wrap:wrap}._input_1ghjp_9+._cnt_1ghjp_9{border:1px solid transparent;border-radius:8px;cursor:pointer;margin-right:5px;margin-bottom:5px}._input_1ghjp_9:focus+._cnt_1ghjp_9,._input_1ghjp_9:checked+._cnt_1ghjp_9{border-color:#387cec} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Connections.52bc9670.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Connections.52bc9670.js deleted file mode 100644 index 86c39397..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Connections.52bc9670.js +++ /dev/null @@ -1 +0,0 @@ -var po=Object.defineProperty,go=Object.defineProperties;var vo=Object.getOwnPropertyDescriptors;var bn=Object.getOwnPropertySymbols;var mo=Object.prototype.hasOwnProperty,ho=Object.prototype.propertyIsEnumerable;var wn=(d,p,l)=>p in d?po(d,p,{enumerable:!0,configurable:!0,writable:!0,value:l}):d[p]=l,xe=(d,p)=>{for(var l in p||(p={}))mo.call(p,l)&&wn(d,l,p[l]);if(bn)for(var l of bn(p))ho.call(p,l)&&wn(d,l,p[l]);return d},Te=(d,p)=>go(d,vo(p));import{r as fe,R as _,g as Ce,A as yo,C as bo,M as wo,k as Ro,P as Co,D as So,I as Po}from"./vendor.38e754a4.js";import{p as Rn,m as Cn,B as Sn,c as xo,a as Eo,f as Io,C as Bo,S as To,g as Fo}from"./index.ee5bc09a.js";import{u as _o}from"./useRemainingViewPortHeight.7baef998.js";import{f as Oo}from"./index.9233837d.js";import{F as Ao,p as Go,A as No}from"./Fab.4dc9cb99.js";function at(d){return function(p){return!!p.type&&p.type.tabsRole===d}}var De=at("Tab"),it=at("TabList"),$e=at("TabPanel");function st(){return st=Object.assign||function(d){for(var p=1;p=0)&&(l[v]=d[v]);return l}function Mo(d,p){d.prototype=Object.create(p.prototype),d.prototype.constructor=d,dt(d,p)}function dt(d,p){return dt=Object.setPrototypeOf||function(s,v){return s.__proto__=v,s},dt(d,p)}function En(d){return d&&"getAttribute"in d}function In(d){return En(d)&&d.getAttribute("data-rttab")}function Se(d){return En(d)&&d.getAttribute("aria-disabled")==="true"}var Ve;function Lo(d){var p=d||(typeof window!="undefined"?window:void 0);try{Ve=!!(typeof p!="undefined"&&p.document&&p.document.activeElement)}catch{Ve=!1}}var ft=function(d){Mo(p,d);function p(){for(var s,v=arguments.length,y=new Array(v),u=0;u=this.getTabsCount())){var u=this.props,B=u.onSelect,M=u.selectedIndex;B(v,M,y)}},l.getNextTab=function(v){for(var y=this.getTabsCount(),u=v+1;uv;)if(!Se(this.getTab(y)))return y;return v},l.getFirstTab=function(){for(var v=this.getTabsCount(),y=0;y=0)&&(l[v]=d[v]);return l}function Vo(d,p){d.prototype=Object.create(p.prototype),d.prototype.constructor=d,pt(d,p)}function pt(d,p){return pt=Object.setPrototypeOf||function(s,v){return s.__proto__=v,s},pt(d,p)}var Ko=0,gt=1,Ke=function(d){Vo(p,d);function p(s){var v;return v=d.call(this,s)||this,v.handleSelected=function(y,u,B){var M=v.props.onSelect,c=v.state.mode;if(!(typeof M=="function"&&M(y,u,B)===!1)){var X={focus:B.type==="keydown"};c===gt&&(X.selectedIndex=y),v.setState(X)}},v.state=p.copyPropsToState(v.props,{},s.defaultFocus),v}p.getDerivedStateFromProps=function(v,y){return p.copyPropsToState(v,y)},p.getModeFromProps=function(v){return v.selectedIndex===null?gt:Ko},p.copyPropsToState=function(v,y,u){u===void 0&&(u=!1);var B={focus:u,mode:p.getModeFromProps(v)};if(B.mode===gt){var M=Math.max(0,xn(v.children)-1),c=null;y.selectedIndex!=null?c=Math.min(y.selectedIndex,M):c=v.defaultIndex||0,B.selectedIndex=c}return B};var l=p.prototype;return l.render=function(){var v=this.props,y=v.children;v.defaultIndex,v.defaultFocus;var u=$o(v,Do),B=this.state,M=B.focus,c=B.selectedIndex;return u.focus=M,u.onSelect=this.handleSelected,c!=null&&(u.selectedIndex=c),_.createElement(ft,u,y)},p}(fe.exports.Component);Ke.defaultProps={defaultFocus:!1,forceRenderTabPanel:!1,selectedIndex:null,defaultIndex:null,environment:null,disableUpDownKeys:!1};Ke.propTypes={};Ke.tabsRole="Tabs";var Uo=["children","className"];function vt(){return vt=Object.assign||function(d){for(var p=1;p=0)&&(l[v]=d[v]);return l}function Xo(d,p){d.prototype=Object.create(p.prototype),d.prototype.constructor=d,mt(d,p)}function mt(d,p){return mt=Object.setPrototypeOf||function(s,v){return s.__proto__=v,s},mt(d,p)}var Ue=function(d){Xo(p,d);function p(){return d.apply(this,arguments)||this}var l=p.prototype;return l.render=function(){var v=this.props,y=v.children,u=v.className,B=qo(v,Uo);return _.createElement("ul",vt({},B,{className:Ce(u),role:"tablist"}),y)},p}(fe.exports.Component);Ue.defaultProps={className:"react-tabs__tab-list"};Ue.propTypes={};Ue.tabsRole="TabList";var Qo=["children","className","disabled","disabledClassName","focus","id","panelId","selected","selectedClassName","tabIndex","tabRef"];function ht(){return ht=Object.assign||function(d){for(var p=1;p=0)&&(l[v]=d[v]);return l}function Yo(d,p){d.prototype=Object.create(p.prototype),d.prototype.constructor=d,yt(d,p)}function yt(d,p){return yt=Object.setPrototypeOf||function(s,v){return s.__proto__=v,s},yt(d,p)}var bt="react-tabs__tab",Fe=function(d){Yo(p,d);function p(){return d.apply(this,arguments)||this}var l=p.prototype;return l.componentDidMount=function(){this.checkFocus()},l.componentDidUpdate=function(){this.checkFocus()},l.checkFocus=function(){var v=this.props,y=v.selected,u=v.focus;y&&u&&this.node.focus()},l.render=function(){var v,y=this,u=this.props,B=u.children,M=u.className,c=u.disabled,X=u.disabledClassName;u.focus;var q=u.id,Q=u.panelId,ee=u.selected,V=u.selectedClassName,J=u.tabIndex,ne=u.tabRef,oe=Jo(u,Qo);return _.createElement("li",ht({},oe,{className:Ce(M,(v={},v[V]=ee,v[X]=c,v)),ref:function(W){y.node=W,ne&&ne(W)},role:"tab",id:q,"aria-selected":ee?"true":"false","aria-disabled":c?"true":"false","aria-controls":Q,tabIndex:J||(ee?"0":null),"data-rttab":!0}),B)},p}(fe.exports.Component);Fe.defaultProps={className:bt,disabledClassName:bt+"--disabled",focus:!1,id:null,panelId:null,selected:!1,selectedClassName:bt+"--selected"};Fe.propTypes={};Fe.tabsRole="Tab";var Zo=["children","className","forceRender","id","selected","selectedClassName","tabId"];function wt(){return wt=Object.assign||function(d){for(var p=1;p=0)&&(l[v]=d[v]);return l}function ta(d,p){d.prototype=Object.create(p.prototype),d.prototype.constructor=d,Rt(d,p)}function Rt(d,p){return Rt=Object.setPrototypeOf||function(s,v){return s.__proto__=v,s},Rt(d,p)}var Bn="react-tabs__tab-panel",_e=function(d){ta(p,d);function p(){return d.apply(this,arguments)||this}var l=p.prototype;return l.render=function(){var v,y=this.props,u=y.children,B=y.className,M=y.forceRender,c=y.id,X=y.selected,q=y.selectedClassName,Q=y.tabId,ee=ea(y,Zo);return _.createElement("div",wt({},ee,{className:Ce(B,(v={},v[q]=X,v)),role:"tabpanel",id:c,"aria-labelledby":Q}),M||X?u:null)},p}(fe.exports.Component);_e.defaultProps={className:Bn,forceRender:!1,selectedClassName:Bn+"--selected"};_e.propTypes={};_e.tabsRole="TabPanel";const na="_placeHolder_12xws_1",ra="_connQty_12xws_10",oa="_inputWrapper_12xws_22",aa="_input_12xws_22";var Oe={placeHolder:na,connQty:ra,inputWrapper:oa,input:aa},Ct={exports:{}},St={exports:{}};(function(d,p){(function(l,s){s(p,fe.exports)})(yo,function(l,s){function v(e,t,n,r,a,o,i){try{var f=e[o](i),g=f.value}catch(m){return void n(m)}f.done?t(g):Promise.resolve(g).then(r,a)}function y(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function i(g){v(o,r,a,i,f,"next",g)}function f(g){v(o,r,a,i,f,"throw",g)}i(void 0)})}}function u(){return(u=Object.assign||function(e){for(var t=1;t=0||(a[n]=e[n]);return a}function M(e){var t=function(n,r){if(typeof n!="object"||n===null)return n;var a=n[Symbol.toPrimitive];if(a!==void 0){var o=a.call(n,r||"default");if(typeof o!="object")return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(n)}(e,"string");return typeof t=="symbol"?t:String(t)}s=s&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s;var c={init:"init"},X=function(e){var t=e.value;return t===void 0?"":t},q=function(){return s.createElement(s.Fragment,null,"\xA0")},Q={Cell:X,width:150,minWidth:0,maxWidth:Number.MAX_SAFE_INTEGER};function ee(){for(var e=arguments.length,t=new Array(e),n=0;n(o=typeof o=="number"?o:1/0)){var i=a;a=o,o=i}return e.filter(function(f){return t.some(function(g){var m=f.values[g];return m>=a&&m<=o})})};Mt.autoRemove=function(e){return!e||typeof e[0]!="number"&&typeof e[1]!="number"};var Ie=Object.freeze({__proto__:null,text:Ot,exactText:At,exactTextCase:Gt,includes:Nt,includesAll:kt,includesSome:Ht,includesValue:jt,exact:Wt,equals:zt,between:Mt});c.resetFilters="resetFilters",c.setFilter="setFilter",c.setAllFilters="setAllFilters";var Lt=function(e){e.stateReducers.push(sr),e.useInstance.push(ur)};function sr(e,t,n,r){if(t.type===c.init)return u({filters:[]},e);if(t.type===c.resetFilters)return u({},e,{filters:r.initialState.filters||[]});if(t.type===c.setFilter){var a=t.columnId,o=t.filterValue,i=r.allColumns,f=r.filterTypes,g=i.find(function(P){return P.id===a});if(!g)throw new Error("React-Table: Could not find a column with id: "+a);var m=Ee(g.filter,f||{},Ie),C=e.filters.find(function(P){return P.id===a}),w=Z(o,C&&C.value);return Xe(m.autoRemove,w,g)?u({},e,{filters:e.filters.filter(function(P){return P.id!==a})}):u({},e,C?{filters:e.filters.map(function(P){return P.id===a?{id:a,value:w}:P})}:{filters:[].concat(e.filters,[{id:a,value:w}])})}if(t.type===c.setAllFilters){var R=t.filters,h=r.allColumns,b=r.filterTypes;return u({},e,{filters:Z(R,e.filters).filter(function(P){var S=h.find(function(I){return I.id===P.id});return!Xe(Ee(S.filter,b||{},Ie).autoRemove,P.value,S)})})}}function ur(e){var t=e.data,n=e.rows,r=e.flatRows,a=e.rowsById,o=e.allColumns,i=e.filterTypes,f=e.manualFilters,g=e.defaultCanFilter,m=g!==void 0&&g,C=e.disableFilters,w=e.state.filters,R=e.dispatch,h=e.autoResetFilters,b=h===void 0||h,P=s.useCallback(function(A,G){R({type:c.setFilter,columnId:A,filterValue:G})},[R]),S=s.useCallback(function(A){R({type:c.setAllFilters,filters:A})},[R]);o.forEach(function(A){var G=A.id,j=A.accessor,T=A.defaultCanFilter,O=A.disableFilters;A.canFilter=j?ve(O!==!0&&void 0,C!==!0&&void 0,!0):ve(T,m,!1),A.setFilter=function(N){return P(A.id,N)};var $=w.find(function(N){return N.id===G});A.filterValue=$&&$.value});var I=s.useMemo(function(){if(f||!w.length)return[n,r,a];var A=[],G={};return[function j(T,O){O===void 0&&(O=0);var $=T;return($=w.reduce(function(N,D){var L=D.id,U=D.value,E=o.find(function(te){return te.id===L});if(!E)return N;O===0&&(E.preFilteredRows=N);var z=Ee(E.filter,i||{},Ie);return z?(E.filteredRows=z(N,[L],U),E.filteredRows):(console.warn("Could not find a valid 'column.filter' for column with the ID: "+E.id+"."),N)},T)).forEach(function(N){A.push(N),G[N.id]=N,N.subRows&&(N.subRows=N.subRows&&N.subRows.length>0?j(N.subRows,O+1):N.subRows)}),$}(n),A,G]},[f,w,n,r,a,o,i]),H=I[0],k=I[1],x=I[2];s.useMemo(function(){o.filter(function(A){return!w.find(function(G){return G.id===A.id})}).forEach(function(A){A.preFilteredRows=H,A.filteredRows=H})},[H,w,o]);var K=W(b);re(function(){K()&&R({type:c.resetFilters})},[R,f?null:t]),Object.assign(e,{preFilteredRows:n,preFilteredFlatRows:r,preFilteredRowsById:a,filteredRows:H,filteredFlatRows:k,filteredRowsById:x,rows:H,flatRows:k,rowsById:x,setFilter:P,setAllFilters:S})}Lt.pluginName="useFilters",c.resetGlobalFilter="resetGlobalFilter",c.setGlobalFilter="setGlobalFilter";var Dt=function(e){e.stateReducers.push(lr),e.useInstance.push(cr)};function lr(e,t,n,r){if(t.type===c.resetGlobalFilter)return u({},e,{globalFilter:r.initialState.globalFilter||void 0});if(t.type===c.setGlobalFilter){var a=t.filterValue,o=r.userFilterTypes,i=Ee(r.globalFilter,o||{},Ie),f=Z(a,e.globalFilter);return Xe(i.autoRemove,f)?(e.globalFilter,B(e,["globalFilter"])):u({},e,{globalFilter:f})}}function cr(e){var t=e.data,n=e.rows,r=e.flatRows,a=e.rowsById,o=e.allColumns,i=e.filterTypes,f=e.globalFilter,g=e.manualGlobalFilter,m=e.state.globalFilter,C=e.dispatch,w=e.autoResetGlobalFilter,R=w===void 0||w,h=e.disableGlobalFilter,b=s.useCallback(function(x){C({type:c.setGlobalFilter,filterValue:x})},[C]),P=s.useMemo(function(){if(g||m===void 0)return[n,r,a];var x=[],K={},A=Ee(f,i||{},Ie);if(!A)return console.warn("Could not find a valid 'globalFilter' option."),n;o.forEach(function(j){var T=j.disableGlobalFilter;j.canFilter=ve(T!==!0&&void 0,h!==!0&&void 0,!0)});var G=o.filter(function(j){return j.canFilter===!0});return[function j(T){return(T=A(T,G.map(function(O){return O.id}),m)).forEach(function(O){x.push(O),K[O.id]=O,O.subRows=O.subRows&&O.subRows.length?j(O.subRows):O.subRows}),T}(n),x,K]},[g,m,f,i,o,n,r,a,h]),S=P[0],I=P[1],H=P[2],k=W(R);re(function(){k()&&C({type:c.resetGlobalFilter})},[C,g?null:t]),Object.assign(e,{preGlobalFilteredRows:n,preGlobalFilteredFlatRows:r,preGlobalFilteredRowsById:a,globalFilteredRows:S,globalFilteredFlatRows:I,globalFilteredRowsById:H,rows:S,flatRows:I,rowsById:H,setGlobalFilter:b,disableGlobalFilter:h})}function $t(e,t){return t.reduce(function(n,r){return n+(typeof r=="number"?r:0)},0)}Dt.pluginName="useGlobalFilter";var Vt=Object.freeze({__proto__:null,sum:$t,min:function(e){var t=e[0]||0;return e.forEach(function(n){typeof n=="number"&&(t=Math.min(t,n))}),t},max:function(e){var t=e[0]||0;return e.forEach(function(n){typeof n=="number"&&(t=Math.max(t,n))}),t},minMax:function(e){var t=e[0]||0,n=e[0]||0;return e.forEach(function(r){typeof r=="number"&&(t=Math.min(t,r),n=Math.max(n,r))}),t+".."+n},average:function(e){return $t(0,e)/e.length},median:function(e){if(!e.length)return null;var t=Math.floor(e.length/2),n=[].concat(e).sort(function(r,a){return r-a});return e.length%2!=0?n[t]:(n[t-1]+n[t])/2},unique:function(e){return Array.from(new Set(e).values())},uniqueCount:function(e){return new Set(e).size},count:function(e){return e.length}}),dr=[],fr={};c.resetGroupBy="resetGroupBy",c.setGroupBy="setGroupBy",c.toggleGroupBy="toggleGroupBy";var Kt=function(e){e.getGroupByToggleProps=[pr],e.stateReducers.push(gr),e.visibleColumnsDeps.push(function(t,n){var r=n.instance;return[].concat(t,[r.state.groupBy])}),e.visibleColumns.push(vr),e.useInstance.push(hr),e.prepareRow.push(yr)};Kt.pluginName="useGroupBy";var pr=function(e,t){var n=t.header;return[e,{onClick:n.canGroupBy?function(r){r.persist(),n.toggleGroupBy()}:void 0,style:{cursor:n.canGroupBy?"pointer":void 0},title:"Toggle GroupBy"}]};function gr(e,t,n,r){if(t.type===c.init)return u({groupBy:[]},e);if(t.type===c.resetGroupBy)return u({},e,{groupBy:r.initialState.groupBy||[]});if(t.type===c.setGroupBy)return u({},e,{groupBy:t.value});if(t.type===c.toggleGroupBy){var a=t.columnId,o=t.value,i=o!==void 0?o:!e.groupBy.includes(a);return u({},e,i?{groupBy:[].concat(e.groupBy,[a])}:{groupBy:e.groupBy.filter(function(f){return f!==a})})}}function vr(e,t){var n=t.instance.state.groupBy,r=n.map(function(o){return e.find(function(i){return i.id===o})}).filter(Boolean),a=e.filter(function(o){return!n.includes(o.id)});return(e=[].concat(r,a)).forEach(function(o){o.isGrouped=n.includes(o.id),o.groupedIndex=n.indexOf(o.id)}),e}var mr={};function hr(e){var t=e.data,n=e.rows,r=e.flatRows,a=e.rowsById,o=e.allColumns,i=e.flatHeaders,f=e.groupByFn,g=f===void 0?Ut:f,m=e.manualGroupBy,C=e.aggregations,w=C===void 0?mr:C,R=e.plugins,h=e.state.groupBy,b=e.dispatch,P=e.autoResetGroupBy,S=P===void 0||P,I=e.disableGroupBy,H=e.defaultCanGroupBy,k=e.getHooks;oe(R,["useColumnOrder","useFilters"],"useGroupBy");var x=W(e);o.forEach(function(E){var z=E.accessor,te=E.defaultGroupBy,ue=E.disableGroupBy;E.canGroupBy=z?ve(E.canGroupBy,ue!==!0&&void 0,I!==!0&&void 0,!0):ve(E.canGroupBy,te,H,!1),E.canGroupBy&&(E.toggleGroupBy=function(){return e.toggleGroupBy(E.id)}),E.Aggregated=E.Aggregated||E.Cell});var K=s.useCallback(function(E,z){b({type:c.toggleGroupBy,columnId:E,value:z})},[b]),A=s.useCallback(function(E){b({type:c.setGroupBy,value:E})},[b]);i.forEach(function(E){E.getGroupByToggleProps=V(k().getGroupByToggleProps,{instance:x(),header:E})});var G=s.useMemo(function(){if(m||!h.length)return[n,r,a,dr,fr,r,a];var E=h.filter(function(se){return o.find(function(be){return be.id===se})}),z=[],te={},ue=[],F={},Y=[],ae={},le=function se(be,we,fn){if(we===void 0&&(we=0),we===E.length)return be;var nt=E[we],ao=g(be,nt);return Object.entries(ao).map(function(pn,io){var gn=pn[0],We=pn[1],ze=nt+":"+gn,vn=se(We,we+1,ze=fn?fn+">"+ze:ze),mn=we?Et(We,"leafRows"):We,so=function(de,rt,lo){var Me={};return o.forEach(function(ie){if(E.includes(ie.id))Me[ie.id]=rt[0]?rt[0].values[ie.id]:null;else{var hn=typeof ie.aggregate=="function"?ie.aggregate:w[ie.aggregate]||Vt[ie.aggregate];if(hn){var co=rt.map(function(Le){return Le.values[ie.id]}),fo=de.map(function(Le){var ot=Le.values[ie.id];if(!lo&&ie.aggregateValue){var yn=typeof ie.aggregateValue=="function"?ie.aggregateValue:w[ie.aggregateValue]||Vt[ie.aggregateValue];if(!yn)throw console.info({column:ie}),new Error("React Table: Invalid column.aggregateValue option for column listed above");ot=yn(ot,Le,ie)}return ot});Me[ie.id]=hn(fo,co)}else{if(ie.aggregate)throw console.info({column:ie}),new Error("React Table: Invalid column.aggregate option for column listed above");Me[ie.id]=null}}}),Me}(mn,We,we),uo={id:ze,isGrouped:!0,groupByID:nt,groupByVal:gn,values:so,subRows:vn,leafRows:mn,depth:we,index:io};return vn.forEach(function(de){z.push(de),te[de.id]=de,de.isGrouped?(ue.push(de),F[de.id]=de):(Y.push(de),ae[de.id]=de)}),uo})}(n);return le.forEach(function(se){z.push(se),te[se.id]=se,se.isGrouped?(ue.push(se),F[se.id]=se):(Y.push(se),ae[se.id]=se)}),[le,z,te,ue,F,Y,ae]},[m,h,n,r,a,o,w,g]),j=G[0],T=G[1],O=G[2],$=G[3],N=G[4],D=G[5],L=G[6],U=W(S);re(function(){U()&&b({type:c.resetGroupBy})},[b,m?null:t]),Object.assign(e,{preGroupedRows:n,preGroupedFlatRow:r,preGroupedRowsById:a,groupedRows:j,groupedFlatRows:T,groupedRowsById:O,onlyGroupedFlatRows:$,onlyGroupedRowsById:N,nonGroupedFlatRows:D,nonGroupedRowsById:L,rows:j,flatRows:T,rowsById:O,toggleGroupBy:K,setGroupBy:A})}function yr(e){e.allCells.forEach(function(t){var n;t.isGrouped=t.column.isGrouped&&t.column.id===e.groupByID,t.isPlaceholder=!t.isGrouped&&t.column.isGrouped,t.isAggregated=!t.isGrouped&&!t.isPlaceholder&&((n=e.subRows)==null?void 0:n.length)})}function Ut(e,t){return e.reduce(function(n,r,a){var o=""+r.values[t];return n[o]=Array.isArray(n[o])?n[o]:[],n[o].push(r),n},{})}var qt=/([0-9]+)/gm;function Je(e,t){return e===t?0:e>t?1:-1}function Be(e,t,n){return[e.values[n],t.values[n]]}function Xt(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}var br=Object.freeze({__proto__:null,alphanumeric:function(e,t,n){var r=Be(e,t,n),a=r[0],o=r[1];for(a=Xt(a),o=Xt(o),a=a.split(qt).filter(Boolean),o=o.split(qt).filter(Boolean);a.length&&o.length;){var i=a.shift(),f=o.shift(),g=parseInt(i,10),m=parseInt(f,10),C=[g,m].sort();if(isNaN(C[0])){if(i>f)return 1;if(f>i)return-1}else{if(isNaN(C[1]))return isNaN(g)?-1:1;if(g>m)return 1;if(m>g)return-1}}return a.length-o.length},datetime:function(e,t,n){var r=Be(e,t,n),a=r[0],o=r[1];return Je(a=a.getTime(),o=o.getTime())},basic:function(e,t,n){var r=Be(e,t,n);return Je(r[0],r[1])},string:function(e,t,n){var r=Be(e,t,n),a=r[0],o=r[1];for(a=a.split("").filter(Boolean),o=o.split("").filter(Boolean);a.length&&o.length;){var i=a.shift(),f=o.shift(),g=i.toLowerCase(),m=f.toLowerCase();if(g>m)return 1;if(m>g)return-1;if(i>f)return 1;if(f>i)return-1}return a.length-o.length},number:function(e,t,n){var r=Be(e,t,n),a=r[0],o=r[1],i=/[^0-9.]/gi;return Je(a=Number(String(a).replace(i,"")),o=Number(String(o).replace(i,"")))}});c.resetSortBy="resetSortBy",c.setSortBy="setSortBy",c.toggleSortBy="toggleSortBy",c.clearSortBy="clearSortBy",Q.sortType="alphanumeric",Q.sortDescFirst=!1;var Qt=function(e){e.getSortByToggleProps=[wr],e.stateReducers.push(Rr),e.useInstance.push(Cr)};Qt.pluginName="useSortBy";var wr=function(e,t){var n=t.instance,r=t.column,a=n.isMultiSortEvent,o=a===void 0?function(i){return i.shiftKey}:a;return[e,{onClick:r.canSort?function(i){i.persist(),r.toggleSortBy(void 0,!n.disableMultiSort&&o(i))}:void 0,style:{cursor:r.canSort?"pointer":void 0},title:r.canSort?"Toggle SortBy":void 0}]};function Rr(e,t,n,r){if(t.type===c.init)return u({sortBy:[]},e);if(t.type===c.resetSortBy)return u({},e,{sortBy:r.initialState.sortBy||[]});if(t.type===c.clearSortBy)return u({},e,{sortBy:e.sortBy.filter(function(x){return x.id!==t.columnId})});if(t.type===c.setSortBy)return u({},e,{sortBy:t.sortBy});if(t.type===c.toggleSortBy){var a,o=t.columnId,i=t.desc,f=t.multi,g=r.allColumns,m=r.disableMultiSort,C=r.disableSortRemove,w=r.disableMultiRemove,R=r.maxMultiSortColCount,h=R===void 0?Number.MAX_SAFE_INTEGER:R,b=e.sortBy,P=g.find(function(x){return x.id===o}).sortDescFirst,S=b.find(function(x){return x.id===o}),I=b.findIndex(function(x){return x.id===o}),H=i!=null,k=[];return(a=!m&&f?S?"toggle":"add":I!==b.length-1||b.length!==1?"replace":S?"toggle":"replace")!=="toggle"||C||H||f&&w||!(S&&S.desc&&!P||!S.desc&&P)||(a="remove"),a==="replace"?k=[{id:o,desc:H?i:P}]:a==="add"?(k=[].concat(b,[{id:o,desc:H?i:P}])).splice(0,k.length-h):a==="toggle"?k=b.map(function(x){return x.id===o?u({},x,{desc:H?i:!S.desc}):x}):a==="remove"&&(k=b.filter(function(x){return x.id!==o})),u({},e,{sortBy:k})}}function Cr(e){var t=e.data,n=e.rows,r=e.flatRows,a=e.allColumns,o=e.orderByFn,i=o===void 0?Jt:o,f=e.sortTypes,g=e.manualSortBy,m=e.defaultCanSort,C=e.disableSortBy,w=e.flatHeaders,R=e.state.sortBy,h=e.dispatch,b=e.plugins,P=e.getHooks,S=e.autoResetSortBy,I=S===void 0||S;oe(b,["useFilters","useGlobalFilter","useGroupBy","usePivotColumns"],"useSortBy");var H=s.useCallback(function(T){h({type:c.setSortBy,sortBy:T})},[h]),k=s.useCallback(function(T,O,$){h({type:c.toggleSortBy,columnId:T,desc:O,multi:$})},[h]),x=W(e);w.forEach(function(T){var O=T.accessor,$=T.canSort,N=T.disableSortBy,D=T.id,L=O?ve(N!==!0&&void 0,C!==!0&&void 0,!0):ve(m,$,!1);T.canSort=L,T.canSort&&(T.toggleSortBy=function(E,z){return k(T.id,E,z)},T.clearSortBy=function(){h({type:c.clearSortBy,columnId:T.id})}),T.getSortByToggleProps=V(P().getSortByToggleProps,{instance:x(),column:T});var U=R.find(function(E){return E.id===D});T.isSorted=!!U,T.sortedIndex=R.findIndex(function(E){return E.id===D}),T.isSortedDesc=T.isSorted?U.desc:void 0});var K=s.useMemo(function(){if(g||!R.length)return[n,r];var T=[],O=R.filter(function($){return a.find(function(N){return N.id===$.id})});return[function $(N){var D=i(N,O.map(function(L){var U=a.find(function(te){return te.id===L.id});if(!U)throw new Error("React-Table: Could not find a column with id: "+L.id+" while sorting");var E=U.sortType,z=xt(E)||(f||{})[E]||br[E];if(!z)throw new Error("React-Table: Could not find a valid sortType of '"+E+"' for column '"+L.id+"'.");return function(te,ue){return z(te,ue,L.id,L.desc)}}),O.map(function(L){var U=a.find(function(E){return E.id===L.id});return U&&U.sortInverted?L.desc:!L.desc}));return D.forEach(function(L){T.push(L),L.subRows&&L.subRows.length!==0&&(L.subRows=$(L.subRows))}),D}(n),T]},[g,R,n,r,a,i,f]),A=K[0],G=K[1],j=W(I);re(function(){j()&&h({type:c.resetSortBy})},[g?null:t]),Object.assign(e,{preSortedRows:n,preSortedFlatRows:r,sortedRows:A,sortedFlatRows:G,rows:A,flatRows:G,setSortBy:H,toggleSortBy:k})}function Jt(e,t,n){return[].concat(e).sort(function(r,a){for(var o=0;oe.pageIndex?f=a===-1?o.length>=e.pageSize:i-1),f?u({},e,{pageIndex:i}):e}if(t.type===c.setPageSize){var g=t.pageSize,m=e.pageSize*e.pageIndex;return u({},e,{pageIndex:Math.floor(m/g),pageSize:g})}}function Pr(e){var t=e.rows,n=e.autoResetPage,r=n===void 0||n,a=e.manualExpandedKey,o=a===void 0?"expanded":a,i=e.plugins,f=e.pageCount,g=e.paginateExpandedRows,m=g===void 0||g,C=e.expandSubRows,w=C===void 0||C,R=e.state,h=R.pageSize,b=R.pageIndex,P=R.expanded,S=R.globalFilter,I=R.filters,H=R.groupBy,k=R.sortBy,x=e.dispatch,K=e.data,A=e.manualPagination;oe(i,["useGlobalFilter","useFilters","useGroupBy","useSortBy","useExpanded"],"usePagination");var G=W(r);re(function(){G()&&x({type:c.resetPage})},[x,A?null:K,S,I,H,k]);var j=A?f:Math.ceil(t.length/h),T=s.useMemo(function(){return j>0?[].concat(new Array(j)).fill(null).map(function(z,te){return te}):[]},[j]),O=s.useMemo(function(){var z;if(A)z=t;else{var te=h*b,ue=te+h;z=t.slice(te,ue)}return m?z:It(z,{manualExpandedKey:o,expanded:P,expandSubRows:w})},[w,P,o,A,b,h,m,t]),$=b>0,N=j===-1?O.length>=h:b-1&&o.push(a.splice(g,1)[0])};a.length&&r.length;)i();return[].concat(o,a)}function Ur(e){var t=e.dispatch;e.setColumnOrder=s.useCallback(function(n){return t({type:c.setColumnOrder,columnOrder:n})},[t])}an.pluginName="useColumnOrder",Q.canResize=!0,c.columnStartResizing="columnStartResizing",c.columnResizing="columnResizing",c.columnDoneResizing="columnDoneResizing",c.resetResize="resetResize";var sn=function(e){e.getResizerProps=[qr],e.getHeaderProps.push({style:{position:"relative"}}),e.stateReducers.push(Xr),e.useInstance.push(Jr),e.useInstanceBeforeDimensions.push(Qr)},qr=function(e,t){var n=t.instance,r=t.header,a=n.dispatch,o=function(i,f){var g=!1;if(i.type==="touchstart"){if(i.touches&&i.touches.length>1)return;g=!0}var m=function(S){var I=[];return function H(k){k.columns&&k.columns.length&&k.columns.map(H),I.push(k)}(S),I}(f).map(function(S){return[S.id,S.totalWidth]}),C=g?Math.round(i.touches[0].clientX):i.clientX,w=function(S){a({type:c.columnResizing,clientX:S})},R=function(){return a({type:c.columnDoneResizing})},h={mouse:{moveEvent:"mousemove",moveHandler:function(S){return w(S.clientX)},upEvent:"mouseup",upHandler:function(S){document.removeEventListener("mousemove",h.mouse.moveHandler),document.removeEventListener("mouseup",h.mouse.upHandler),R()}},touch:{moveEvent:"touchmove",moveHandler:function(S){return S.cancelable&&(S.preventDefault(),S.stopPropagation()),w(S.touches[0].clientX),!1},upEvent:"touchend",upHandler:function(S){document.removeEventListener(h.touch.moveEvent,h.touch.moveHandler),document.removeEventListener(h.touch.upEvent,h.touch.moveHandler),R()}}},b=g?h.touch:h.mouse,P=!!function(){if(typeof Qe=="boolean")return Qe;var S=!1;try{var I={get passive(){return S=!0,!1}};window.addEventListener("test",null,I),window.removeEventListener("test",null,I)}catch{S=!1}return Qe=S}()&&{passive:!1};document.addEventListener(b.moveEvent,b.moveHandler,P),document.addEventListener(b.upEvent,b.upHandler,P),a({type:c.columnStartResizing,columnId:f.id,columnWidth:f.totalWidth,headerIdWidths:m,clientX:C})};return[e,{onMouseDown:function(i){return i.persist()||o(i,r)},onTouchStart:function(i){return i.persist()||o(i,r)},style:{cursor:"col-resize"},draggable:!1,role:"separator"}]};function Xr(e,t){if(t.type===c.init)return u({columnResizing:{columnWidths:{}}},e);if(t.type===c.resetResize)return u({},e,{columnResizing:{columnWidths:{}}});if(t.type===c.columnStartResizing){var n=t.clientX,r=t.columnId,a=t.columnWidth,o=t.headerIdWidths;return u({},e,{columnResizing:u({},e.columnResizing,{startX:n,headerIdWidths:o,columnWidth:a,isResizingColumn:r})})}if(t.type===c.columnResizing){var i=t.clientX,f=e.columnResizing,g=f.startX,m=f.columnWidth,C=f.headerIdWidths,w=(i-g)/m,R={};return(C===void 0?[]:C).forEach(function(h){var b=h[0],P=h[1];R[b]=Math.max(P+P*w,0)}),u({},e,{columnResizing:u({},e.columnResizing,{columnWidths:u({},e.columnResizing.columnWidths,{},R)})})}return t.type===c.columnDoneResizing?u({},e,{columnResizing:u({},e.columnResizing,{startX:null,isResizingColumn:null})}):void 0}sn.pluginName="useResizeColumns";var Qr=function(e){var t=e.flatHeaders,n=e.disableResizing,r=e.getHooks,a=e.state.columnResizing,o=W(e);t.forEach(function(i){var f=ve(i.disableResizing!==!0&&void 0,n!==!0&&void 0,!0);i.canResize=f,i.width=a.columnWidths[i.id]||i.originalWidth||i.width,i.isResizing=a.isResizingColumn===i.id,f&&(i.getResizerProps=V(r().getResizerProps,{instance:o(),header:i}))})};function Jr(e){var t=e.plugins,n=e.dispatch,r=e.autoResetResize,a=r===void 0||r,o=e.columns;oe(t,["useAbsoluteLayout"],"useResizeColumns");var i=W(a);re(function(){i()&&n({type:c.resetResize})},[o]);var f=s.useCallback(function(){return n({type:c.resetResize})},[n]);Object.assign(e,{resetResizing:f})}var Ye={position:"absolute",top:0},un=function(e){e.getTableBodyProps.push(je),e.getRowProps.push(je),e.getHeaderGroupProps.push(je),e.getFooterGroupProps.push(je),e.getHeaderProps.push(function(t,n){var r=n.column;return[t,{style:u({},Ye,{left:r.totalLeft+"px",width:r.totalWidth+"px"})}]}),e.getCellProps.push(function(t,n){var r=n.cell;return[t,{style:u({},Ye,{left:r.column.totalLeft+"px",width:r.column.totalWidth+"px"})}]}),e.getFooterProps.push(function(t,n){var r=n.column;return[t,{style:u({},Ye,{left:r.totalLeft+"px",width:r.totalWidth+"px"})}]})};un.pluginName="useAbsoluteLayout";var je=function(e,t){return[e,{style:{position:"relative",width:t.instance.totalColumnsWidth+"px"}}]},Ze={display:"inline-block",boxSizing:"border-box"},et=function(e,t){return[e,{style:{display:"flex",width:t.instance.totalColumnsWidth+"px"}}]},ln=function(e){e.getRowProps.push(et),e.getHeaderGroupProps.push(et),e.getFooterGroupProps.push(et),e.getHeaderProps.push(function(t,n){var r=n.column;return[t,{style:u({},Ze,{width:r.totalWidth+"px"})}]}),e.getCellProps.push(function(t,n){var r=n.cell;return[t,{style:u({},Ze,{width:r.column.totalWidth+"px"})}]}),e.getFooterProps.push(function(t,n){var r=n.column;return[t,{style:u({},Ze,{width:r.totalWidth+"px"})}]})};function cn(e){e.getTableProps.push(Yr),e.getRowProps.push(tt),e.getHeaderGroupProps.push(tt),e.getFooterGroupProps.push(tt),e.getHeaderProps.push(Zr),e.getCellProps.push(eo),e.getFooterProps.push(to)}ln.pluginName="useBlockLayout",cn.pluginName="useFlexLayout";var Yr=function(e,t){return[e,{style:{minWidth:t.instance.totalColumnsMinWidth+"px"}}]},tt=function(e,t){return[e,{style:{display:"flex",flex:"1 0 auto",minWidth:t.instance.totalColumnsMinWidth+"px"}}]},Zr=function(e,t){var n=t.column;return[e,{style:{boxSizing:"border-box",flex:n.totalFlexWidth?n.totalFlexWidth+" 0 auto":void 0,minWidth:n.totalMinWidth+"px",width:n.totalWidth+"px"}}]},eo=function(e,t){var n=t.cell;return[e,{style:{boxSizing:"border-box",flex:n.column.totalFlexWidth+" 0 auto",minWidth:n.column.totalMinWidth+"px",width:n.column.totalWidth+"px"}}]},to=function(e,t){var n=t.column;return[e,{style:{boxSizing:"border-box",flex:n.totalFlexWidth?n.totalFlexWidth+" 0 auto":void 0,minWidth:n.totalMinWidth+"px",width:n.totalWidth+"px"}}]};function dn(e){e.stateReducers.push(oo),e.getTableProps.push(no),e.getHeaderProps.push(ro)}dn.pluginName="useGridLayout";var no=function(e,t){return[e,{style:{display:"grid",gridTemplateColumns:t.instance.state.gridLayout.columnWidths.map(function(n){return n}).join(" ")}}]},ro=function(e,t){return[e,{id:"header-cell-"+t.column.id,style:{position:"sticky"}}]};function oo(e,t,n,r){if(t.type==="init")return u({gridLayout:{columnWidths:r.columns.map(function(){return"auto"})}},e);if(t.type==="columnStartResizing"){var a=t.columnId,o=r.visibleColumns.findIndex(function(h){return h.id===a}),i=function(h){var b,P=(b=document.getElementById("header-cell-"+h))==null?void 0:b.offsetWidth;if(P!==void 0)return P}(a);return i!==void 0?u({},e,{gridLayout:u({},e.gridLayout,{columnId:a,columnIndex:o,startingWidth:i})}):e}if(t.type==="columnResizing"){var f=e.gridLayout,g=f.columnIndex,m=f.startingWidth,C=f.columnWidths,w=m-(e.columnResizing.startX-t.clientX),R=[].concat(C);return R[g]=w+"px",u({},e,{gridLayout:u({},e.gridLayout,{columnWidths:R})})}}l._UNSTABLE_usePivotColumns=Zt,l.actions=c,l.defaultColumn=Q,l.defaultGroupByFn=Ut,l.defaultOrderByFn=Jt,l.defaultRenderer=X,l.emptyRenderer=q,l.ensurePluginOrder=oe,l.flexRender=pe,l.functionalUpdate=Z,l.loopHooks=ne,l.makePropGetter=V,l.makeRenderer=ce,l.reduceHooks=J,l.safeUseLayoutEffect=me,l.useAbsoluteLayout=un,l.useAsyncDebounce=function(e,t){t===void 0&&(t=0);var n=s.useRef({}),r=W(e),a=W(t);return s.useCallback(function(){var o=y(regeneratorRuntime.mark(function i(){var f,g,m,C=arguments;return regeneratorRuntime.wrap(function(w){for(;;)switch(w.prev=w.next){case 0:for(f=C.length,g=new Array(f),m=0;m1?t-1:0),r=1;r_.createElement("div",Te(xe({},y.getHeaderGroupProps()),{className:Pe.tr}),y.headers.map(u=>_.createElement("div",Te(xe({},u.getHeaderProps(u.getSortByToggleProps())),{className:Pe.th}),_.createElement("span",null,u.render("Header")),_.createElement("span",{className:Pe.sortIconContainer},u.isSorted?_.createElement("span",{className:u.isSortedDesc?"":Pe.rotate180},_.createElement(bo,{size:16})):null))),s.map((u,B)=>(v(u),u.cells.map((M,c)=>_.createElement("div",Te(xe({},M.getCellProps()),{className:Ce(Pe.td,B%2==0?Pe.odd:!1,c>=1&&c<=4?Pe.du:!1)}),ga(M))))))))}const ya="_overlay_148w6_1",ba="_cnt_148w6_5",wa="_afterOpen_148w6_15",Ra="_btngrp_148w6_20";var qe={overlay:ya,cnt:ba,afterOpen:wa,btngrp:Ra};const{useRef:Ca,useCallback:Sa,useMemo:Pa}=_;function xa({isOpen:d,onRequestClose:p,primaryButtonOnTap:l}){const s=Ca(null),v=Sa(()=>{s.current.focus()},[]),y=Pa(()=>({base:Ce(Cn.content,qe.cnt),afterOpen:qe.afterOpen,beforeClose:""}),[]);return _.createElement(wo,{isOpen:d,onRequestClose:p,onAfterOpen:v,className:y,overlayClassName:Ce(Cn.overlay,qe.overlay)},_.createElement("p",null,"Are you sure you want to close all connections?"),_.createElement("div",{className:qe.btngrp},_.createElement(Sn,{onClick:l,ref:s},"I'm sure"),_.createElement("div",{style:{width:20}}),_.createElement(Sn,{onClick:p},"No")))}const{useEffect:Ea,useState:Ge,useRef:Ia,useCallback:Ne}=_,Tn=30;function Ba(d){const p={};for(let l=0;l[l.host,l.sourceIP,l.sourcePort,l.destinationIP,l.chains,l.rule,l.type,l.network].some(s=>Ta(s,p))):d}function Fa(d,p,l){const{id:s,metadata:v,upload:y,download:u,start:B,chains:M,rule:c}=d,{host:X,destinationPort:q,destinationIP:Q,network:ee,type:V,sourceIP:J,sourcePort:ne}=v;let oe=X;oe===""&&(oe=Q);const Z=p[s];return Te(xe({id:s,upload:y,download:u,start:l-new Date(B).valueOf(),chains:M.reverse().join(" / "),rule:c},v),{host:`${oe}:${q}`,type:`${V}(${ee})`,source:`${J}:${ne}`,downloadSpeedCurr:u-(Z?Z.download:0),uploadSpeedCurr:y-(Z?Z.upload:0)})}function _n(d){return d.length>0?_.createElement(ha,{data:d}):_.createElement("div",{className:Oe.placeHolder},_.createElement(To,{width:200,height:200,c1:"var(--color-text)"}))}function On({qty:d}){return d<100?""+d:"99+"}function _a({apiConfig:d}){const[p,l]=_o(),[s,v]=Ge([]),[y,u]=Ge([]),[B,M]=Ge(""),c=Fn(s,B),X=Fn(y,B),[q,Q]=Ge(!1),ee=Ne(()=>Q(!0),[]),V=Ne(()=>Q(!1),[]),[J,ne]=Ge(!1),oe=Ne(()=>{ne(ce=>!ce)},[]),Z=Ne(()=>{Eo(d),V()},[d,V]),W=Ia(s),me=Ne(({connections:ce})=>{const pe=Ba(W.current),ye=Date.now(),ge=ce.map(he=>Fa(he,pe,ye)),Re=[];for(const he of W.current)ge.findIndex(ke=>ke.id===he.id)<0&&Re.push(he);u(he=>[...Re,...he].slice(0,101)),ge&&(ge.length!==0||W.current.length!==0)&&!J?(W.current=ge,v(ge)):W.current=ge},[v,J]);Ea(()=>Io(d,me),[d,me]);const{t:re}=Ro();return _.createElement("div",null,_.createElement(Bo,{title:re("Connections")}),_.createElement(Ke,null,_.createElement("div",{style:{display:"flex",flexWrap:"wrap",justifyContent:"space-between"}},_.createElement(Ue,null,_.createElement(Fe,null,_.createElement("span",null,re("Active")),_.createElement("span",{className:Oe.connQty},_.createElement(On,{qty:c.length}))),_.createElement(Fe,null,_.createElement("span",null,re("Closed")),_.createElement("span",{className:Oe.connQty},_.createElement(On,{qty:X.length})))),_.createElement("div",{className:Oe.inputWrapper},_.createElement("input",{type:"text",name:"filter",autoComplete:"off",className:Oe.input,placeholder:"Filter",onChange:ce=>M(ce.target.value)}))),_.createElement("div",{ref:p,style:{padding:30,paddingBottom:Tn,paddingTop:0}},_.createElement("div",{style:{height:l-Tn,overflow:"auto"}},_.createElement(_e,null,_.createElement(_.Fragment,null,_n(c)),_.createElement(Ao,{icon:J?_.createElement(Co,{size:16}):_.createElement(So,{size:16}),mainButtonStyles:J?{background:"#e74c3c"}:{},style:Go,text:re(J?"Resume Refresh":"Pause Refresh"),onClick:oe},_.createElement(No,{text:"Close All Connections",onClick:ee},_.createElement(Po,{size:10})))),_.createElement(_e,null,_n(X)))),_.createElement(xa,{isOpen:q,primaryButtonOnTap:Z,onRequestClose:V})))}const Oa=d=>({apiConfig:Fo(d)});var Wa=xo(Oa)(_a);export{Wa as default}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Connections.9de0e2a6.css b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Connections.9de0e2a6.css deleted file mode 100644 index 2ac771f1..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Connections.9de0e2a6.css +++ /dev/null @@ -1 +0,0 @@ -.react-tabs{-webkit-tap-highlight-color:transparent}.react-tabs__tab-list{margin:0 0 10px;padding:0 30px}.react-tabs__tab{display:inline-flex;align-items:center;border:1px solid transparent;border-radius:5px;bottom:-1px;position:relative;list-style:none;padding:6px 10px;cursor:pointer;font-size:1.2em;opacity:.5}.react-tabs__tab--selected{opacity:1}.react-tabs__tab--disabled{color:GrayText;cursor:default}.react-tabs__tab:focus{border-color:#0188fe;outline:none}.react-tabs__tab:focus:after{content:"";position:absolute}.react-tabs__tab-panel{display:none}.react-tabs__tab-panel--selected{display:block}._placeHolder_12xws_1{height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-background);opacity:.1}._connQty_12xws_10{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}._inputWrapper_12xws_22{margin:0 30px;width:100%;max-width:350px;justify-self:flex-end}._input_12xws_22{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:18px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:36px;outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._tr_198pq_1{display:grid;grid-template-columns:repeat(11,minmax(-webkit-max-content,auto));grid-template-columns:repeat(11,minmax(max-content,auto))}._th_198pq_7{padding:8px 10px;height:50px;background:var(--color-background);position:-webkit-sticky;position:sticky;top:0;font-size:.8em;text-align:center;-webkit-user-select:none;user-select:none;display:flex;align-items:center;justify-content:space-between}._th_198pq_7:hover{color:var(--color-text-highlight)}._td_198pq_24{padding:8px 13px;font-size:.9em;font-family:var(--font-normal)}._td_198pq_24._odd_198pq_30{background:var(--color-row-odd)}._du_198pq_35{text-align:right}._sortIconContainer_198pq_39{display:inline-flex;margin-left:10px;width:16px;height:16px}._rotate180_198pq_46{transform:rotate(180deg)}._overlay_148w6_1{background-color:#0009}._cnt_148w6_5{background-color:var(--bg-modal);color:var(--color-text);max-width:300px;line-height:1.4;transform:translate(-50%,-50%) scale(1.2);opacity:.6;transition:all .3s ease}._afterOpen_148w6_15{opacity:1;transform:translate(-50%,-50%) scale(1)}._btngrp_148w6_20{display:flex;align-items:center;justify-content:center;margin-top:30px} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Fab.200e0680.css b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Fab.200e0680.css deleted file mode 100644 index e74e6e4b..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Fab.200e0680.css +++ /dev/null @@ -1 +0,0 @@ -.rtf{box-sizing:border-box;margin:25px;position:fixed;white-space:nowrap;z-index:9998;padding-left:0;list-style:none}.rtf.open .rtf--mb{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.rtf.open .rtf--mb>ul{list-style:none;margin:0;padding:0}.rtf.open .rtf--ab__c:hover>span,.rtf.open .rtf--ab__c>span.always-show{transition:ease-in-out opacity .2s;opacity:.9}.rtf.open .rtf--ab__c:nth-child(1){transform:translateY(-60px) scale(1);transition-delay:.03s}.rtf.open .rtf--ab__c:nth-child(1).top{transform:translateY(60px) scale(1)}.rtf.open .rtf--ab__c:nth-child(2){transform:translateY(-120px) scale(1);transition-delay:.09s}.rtf.open .rtf--ab__c:nth-child(2).top{transform:translateY(120px) scale(1)}.rtf.open .rtf--ab__c:nth-child(3){transform:translateY(-180px) scale(1);transition-delay:.12s}.rtf.open .rtf--ab__c:nth-child(3).top{transform:translateY(180px) scale(1)}.rtf.open .rtf--ab__c:nth-child(4){transform:translateY(-240px) scale(1);transition-delay:.15s}.rtf.open .rtf--ab__c:nth-child(4).top{transform:translateY(240px) scale(1)}.rtf.open .rtf--ab__c:nth-child(5){transform:translateY(-300px) scale(1);transition-delay:.18s}.rtf.open .rtf--ab__c:nth-child(5).top{transform:translateY(300px) scale(1)}.rtf.open .rtf--ab__c:nth-child(6){transform:translateY(-360px) scale(1);transition-delay:.21s}.rtf.open .rtf--ab__c:nth-child(6).top{transform:translateY(360px) scale(1)}.rtf--mb__c{padding:25px;margin:-25px}.rtf--mb__c *:last-child{margin-bottom:0}.rtf--mb__c:hover>span,.rtf--mb__c>span.always-show{transition:ease-in-out opacity .2s;opacity:.9}.rtf--mb__c>span{opacity:0;transition:ease-in-out opacity .2s;position:absolute;top:50%;transform:translateY(-50%);margin-right:6px;margin-left:4px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px #00000024,0 4px 8px #00000047}.rtf--mb__c>span.right{right:100%}.rtf--mb{width:48px;height:48px;background:var(--btn-bg);z-index:9999;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px #00000024,0 4px 8px #00000047;cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:bold;color:#f1f1f1;font-size:18px}.rtf--mb>*{transition:ease-in-out transform .2s}.rtf--ab__c{display:block;position:absolute;top:0;right:1px;padding:10px 0;margin:-10px 0;transition:ease-in-out transform .2s}.rtf--ab__c>span{opacity:0;transition:ease-in-out opacity .2s;position:absolute;top:50%;transform:translateY(-50%);margin-right:6px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px #00000024,0 4px 8px #00000047}.rtf--ab__c>span.right{right:100%}.rtf--ab__c:nth-child(1){transform:translateY(-60px) scale(0);transition-delay:.21s}.rtf--ab__c:nth-child(1).top{transform:translateY(60px) scale(0)}.rtf--ab__c:nth-child(2){transform:translateY(-120px) scale(0);transition-delay:.18s}.rtf--ab__c:nth-child(2).top{transform:translateY(120px) scale(0)}.rtf--ab__c:nth-child(3){transform:translateY(-180px) scale(0);transition-delay:.15s}.rtf--ab__c:nth-child(3).top{transform:translateY(180px) scale(0)}.rtf--ab__c:nth-child(4){transform:translateY(-240px) scale(0);transition-delay:.12s}.rtf--ab__c:nth-child(4).top{transform:translateY(240px) scale(0)}.rtf--ab__c:nth-child(5){transform:translateY(-300px) scale(0);transition-delay:.09s}.rtf--ab__c:nth-child(5).top{transform:translateY(300px) scale(0)}.rtf--ab__c:nth-child(6){transform:translateY(-360px) scale(0);transition-delay:.03s}.rtf--ab__c:nth-child(6).top{transform:translateY(360px) scale(0)}.rtf--ab{height:40px;width:40px;margin-right:4px;background-color:#aaa;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px #00000024,0 4px 8px #00000047;cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:bold;color:#f1f1f1;font-size:16px;z-index:10000}.rtf--ab:hover{background:#387cec;border:1px solid #387cec;color:#fff}.rtf--ab:focus{border-color:var(--color-focus-blue)}._spining_4i8sg_1{position:relative;border-radius:50%;background:linear-gradient(60deg,#e66465,#9198e5);width:48px;height:48px;display:flex;justify-content:center;align-items:center}._spining_4i8sg_1:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:_spining_keyframes_4i8sg_1 1s linear infinite}@keyframes _spining_keyframes_4i8sg_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Fab.4dc9cb99.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Fab.4dc9cb99.js deleted file mode 100644 index 1ad9a1c1..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Fab.4dc9cb99.js +++ /dev/null @@ -1 +0,0 @@ -var j=Object.defineProperty,A=Object.defineProperties;var B=Object.getOwnPropertyDescriptors;var p=Object.getOwnPropertySymbols;var _=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable;var N=(e,t,s)=>t in e?j(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,o=(e,t)=>{for(var s in t||(t={}))_.call(t,s)&&N(e,s,t[s]);if(p)for(var s of p(t))k.call(t,s)&&N(e,s,t[s]);return e},d=(e,t)=>A(e,B(t));var c=(e,t)=>{var s={};for(var n in e)_.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(e!=null&&p)for(var n of p(e))t.indexOf(n)<0&&k.call(e,n)&&(s[n]=e[n]);return s};import{r,j as H}from"./vendor.38e754a4.js";const L="_spining_4i8sg_1",R="_spining_keyframes_4i8sg_1";var V={spining:L,spining_keyframes:R};const{useState:q}=H;function K({children:e}){return r.exports.createElement("span",{className:V.spining},e)}const P={right:10,bottom:10},Q=s=>{var n=s,{children:e}=n,t=c(n,["children"]);return r.exports.createElement("button",d(o({type:"button"},t),{className:"rtf--ab"}),e)},w=s=>{var n=s,{children:e}=n,t=c(n,["children"]);return r.exports.createElement("button",o({type:"button",className:"rtf--mb"},t),e)},z={bottom:24,right:24},S=D=>{var g=D,{event:e="hover",style:t=z,alwaysShowTitle:s=!1,children:n,icon:$,mainButtonStyles:h,onClick:b,text:f}=g,v=c(g,["event","style","alwaysShowTitle","children","icon","mainButtonStyles","onClick","text"]);const[i,m]=q(!1),u=s||!i,x=()=>m(!0),E=()=>m(!1),C=()=>e==="hover"&&x(),I=()=>e==="hover"&&E(),y=a=>b?b(a):(a.persist(),e==="click"?i?E():x():null),F=(a,l)=>{a.persist(),m(!1),setTimeout(()=>{l(a)},1)},M=()=>r.exports.Children.map(n,(a,l)=>r.exports.isValidElement(a)?r.exports.createElement("li",{className:`rtf--ab__c ${"top"in t?"top":""}`},r.exports.cloneElement(a,d(o({"data-testid":`action-button-${l}`,"aria-label":a.props.text||`Menu button ${l+1}`,"aria-hidden":u,tabIndex:i?0:-1},a.props),{onClick:O=>{a.props.onClick&&F(O,a.props.onClick)}})),a.props.text&&r.exports.createElement("span",{className:`${"right"in t?"right":""} ${s?"always-show":""}`,"aria-hidden":u},a.props.text)):null);return r.exports.createElement("ul",o({onMouseEnter:C,onMouseLeave:I,className:`rtf ${i?"open":"closed"}`,"data-testid":"fab",style:t},v),r.exports.createElement("li",{className:"rtf--mb__c"},r.exports.createElement(w,{onClick:y,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0},$),f&&r.exports.createElement("span",{className:`${"right"in t?"right":""} ${s?"always-show":""}`,"aria-hidden":u},f),r.exports.createElement("ul",null,M())))};export{Q as A,S as F,K as I,P as p}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Logs.01e28256.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Logs.01e28256.js deleted file mode 100644 index 26bf4379..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Logs.01e28256.js +++ /dev/null @@ -1 +0,0 @@ -var b=Object.defineProperty,T=Object.defineProperties;var C=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,y=Object.prototype.propertyIsEnumerable;var v=(e,t,a)=>t in e?b(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,u=(e,t)=>{for(var a in t||(t={}))P.call(t,a)&&v(e,a,t[a]);if(E)for(var a of E(t))y.call(t,a)&&v(e,a,t[a]);return e},x=(e,t)=>T(e,C(t));import{r as o,R as l,K as L,k as N,P as W,D as I,j,g as k}from"./vendor.38e754a4.js";import{a as w,F as z}from"./index.esm.edbe839b.js";import{r as F,s as D,f as M}from"./logs.4dcb9935.js";import{c as f,w as A,x as H,k as $,y as B,C as K,S as V,z as q,A as Y,g as G,D as J}from"./index.ee5bc09a.js";import{d as O}from"./debounce.76599460.js";import{u as Q}from"./useRemainingViewPortHeight.7baef998.js";import{F as U,p as X}from"./Fab.4dc9cb99.js";const Z="_RuleSearch_1gcst_1",ee="_RuleSearchContainer_1gcst_5",te="_inputWrapper_1gcst_10",ae="_input_1gcst_10",oe="_iconWrapper_1gcst_35";var p={RuleSearch:Z,RuleSearchContainer:ee,inputWrapper:te,input:ae,iconWrapper:oe};function se({dispatch:e,searchText:t,updateSearchText:a}){const[s,r]=o.exports.useState(t),i=o.exports.useCallback(c=>{e(a(c))},[e,a]),d=o.exports.useMemo(()=>O(i,300),[i]),g=c=>{r(c.target.value),d(c.target.value)};return l.createElement("div",{className:p.RuleSearch},l.createElement("div",{className:p.RuleSearchContainer},l.createElement("div",{className:p.inputWrapper},l.createElement("input",{type:"text",value:s,onChange:g,className:p.input})),l.createElement("div",{className:p.iconWrapper},l.createElement(L,{size:20}))))}const re=e=>({searchText:A(e),updateSearchText:H});var ne=f(re)(se);const ce="_logMeta_1dg5t_1",le="_logType_1dg5t_8",ie="_logTime_1dg5t_18",pe="_logText_1dg5t_24",ge="_logsWrapper_1dg5t_37",me="_logPlaceholder_1dg5t_51",ue="_logPlaceholderIcon_1dg5t_64";var n={logMeta:ce,logType:le,logTime:ie,logText:pe,logsWrapper:ge,logPlaceholder:me,logPlaceholderIcon:ue};const{useCallback:S,memo:de,useEffect:xe}=j,h=30,he={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function _e({time:e,even:t,payload:a,type:s}){const r=k({even:t},"log");return o.exports.createElement("div",{className:r},o.exports.createElement("div",{className:n.logMeta},o.exports.createElement("div",{className:n.logTime},e),o.exports.createElement("div",{className:n.logType,style:{backgroundColor:he[s]}},s),o.exports.createElement("div",{className:n.logText},a)))}function Ee(e,t){return t[e].id}const ve=de(({index:e,style:t,data:a})=>{const s=a[e];return o.exports.createElement("div",{style:t},o.exports.createElement(_e,u({},s)))},w);function fe({dispatch:e,logLevel:t,apiConfig:a,logs:s,logStreamingPaused:r}){const i=$(),d=S(()=>{r?F(x(u({},a),{logLevel:t})):D(),i.app.updateAppConfig("logStreamingPaused",!r)},[a,t,r,i.app]),g=S(R=>e(B(R)),[e]);xe(()=>{M(x(u({},a),{logLevel:t}),g)},[a,t,g]);const[c,_]=Q(),{t:m}=N();return o.exports.createElement("div",null,o.exports.createElement(K,{title:m("Logs")}),o.exports.createElement(ne,null),o.exports.createElement("div",{ref:c,style:{paddingBottom:h}},s.length===0?o.exports.createElement("div",{className:n.logPlaceholder,style:{height:_-h}},o.exports.createElement("div",{className:n.logPlaceholderIcon},o.exports.createElement(V,{width:200,height:200})),o.exports.createElement("div",null,m("no_logs"))):o.exports.createElement("div",{className:n.logsWrapper},o.exports.createElement(z,{height:_-h,width:"100%",itemCount:s.length,itemSize:80,itemData:s,itemKey:Ee},ve),o.exports.createElement(U,{icon:r?o.exports.createElement(W,{size:16}):o.exports.createElement(I,{size:16}),mainButtonStyles:r?{background:"#e74c3c"}:{},style:X,text:m(r?"Resume Refresh":"Pause Refresh"),onClick:d}))))}const Se=e=>({logs:q(e),logLevel:Y(e),apiConfig:G(e),logStreamingPaused:J(e)});var We=f(Se)(fe);export{We as default}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Logs.8b54b7be.css b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Logs.8b54b7be.css deleted file mode 100644 index c262757f..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Logs.8b54b7be.css +++ /dev/null @@ -1 +0,0 @@ -._RuleSearch_1gcst_1{padding:0 40px 5px}._RuleSearchContainer_1gcst_5{position:relative;height:40px}._inputWrapper_1gcst_10{position:absolute;top:50%;transform:translateY(-50%);left:0;width:100%}._input_1gcst_10{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 15px 0 35px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._iconWrapper_1gcst_35{position:absolute;top:50%;transform:translateY(-50%);left:10px}._logMeta_1dg5t_1{display:flex;align-items:center;flex-wrap:wrap;font-size:.9em}._logType_1dg5t_8{color:#eee;flex-shrink:0;text-align:center;width:66px;border-radius:100px;padding:3px 5px;margin:0 8px}._logTime_1dg5t_18{flex-shrink:0;color:#999;font-size:14px}._logText_1dg5t_24{flex-shrink:0;display:flex;font-family:"Roboto Mono",Menlo,monospace;align-items:center;padding:8px 0;width:100%;white-space:pre;overflow:auto}._logsWrapper_1dg5t_37{margin:0;padding:0;color:var(--color-text)}._logsWrapper_1dg5t_37 .log{padding:10px 40px;background:var(--color-background)}._logsWrapper_1dg5t_37 .log.even{background:var(--color-background)}._logPlaceholder_1dg5t_51{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#2d2d30}._logPlaceholder_1dg5t_51 div:nth-child(2){color:var(--color-text-secondary);font-size:1.4em;opacity:.6}._logPlaceholderIcon_1dg5t_64{opacity:.3} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Proxies.71af777a.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Proxies.71af777a.js deleted file mode 100644 index c75b5665..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Proxies.71af777a.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as m,g as E,C as Pe,N as Se,Z as k,k as $,R as P,O as Re,M as Ae,T as Te}from"./vendor.38e754a4.js";import{B as x,E as Me,F as V,N as K,c as _,G as Z,H as I,k as S,I as Le,J as Y,K as z,L as B,M as Ne,O as De,P as Fe,Q as J,R as $e,g as Q,C as X,l as ee,T as Ie,m as te,U as ze,V as Be,W as qe,X as je}from"./index.ee5bc09a.js";import{F as He,p as We,A as Ge,I as Ue}from"./Fab.4dc9cb99.js";import{R as Ve,T as Ke}from"./TextFitler.cc7f7fa3.js";import{f as Ze}from"./index.9233837d.js";import{S as Ye}from"./Select.29a5a6ae.js";import"./debounce.76599460.js";const Je="_FlexCenter_1380a_1";var Qe={FlexCenter:Je};function Xe({children:e}){return o.exports.createElement("div",{className:Qe.FlexCenter},e)}const{useRef:re,useEffect:et}=m;function tt({onClickPrimaryButton:e,onClickSecondaryButton:t}){const r=re(null),n=re(null);et(()=>{r.current.focus()},[]);const s=a=>{a.keyCode===39?n.current.focus():a.keyCode===37&&r.current.focus()};return o.exports.createElement("div",{onKeyDown:s},o.exports.createElement("h2",null,"Close Connections?"),o.exports.createElement("p",null,'Click "Yes" to close those connections that are still using the old selected proxy in this group'),o.exports.createElement("div",{style:{height:30}}),o.exports.createElement(Xe,null,o.exports.createElement(x,{onClick:e,ref:r},"Yes"),o.exports.createElement("div",{style:{width:20}}),o.exports.createElement(x,{onClick:t,ref:n},"No")))}const rt="_header_1y9js_1",nt="_arrow_1y9js_8",ot="_isOpen_1y9js_13",st="_btn_1y9js_20",at="_qty_1y9js_25";var g={header:rt,arrow:nt,isOpen:ot,btn:st,qty:at};function ne({name:e,type:t,toggle:r,isOpen:n,qty:s}){const a=o.exports.useCallback(i=>{i.preventDefault(),(i.key==="Enter"||i.key===" ")&&r()},[r]);return o.exports.createElement("div",{className:g.header,onClick:r,style:{cursor:"pointer"},tabIndex:0,onKeyDown:a,role:"button"},o.exports.createElement("div",null,o.exports.createElement(Me,{name:e,type:t})),typeof s=="number"?o.exports.createElement("span",{className:g.qty},s):null,o.exports.createElement(x,{kind:"minimal",onClick:r,className:g.btn,title:"Toggle collapsible section"},o.exports.createElement("span",{className:E(g.arrow,{[g.isOpen]:n})},o.exports.createElement(Pe,{size:20}))))}const{useMemo:it}=m;function ct(e,t){return e.filter(r=>{const n=t[r];return n===void 0?!0:n.number!==0})}const R=(e,t)=>{if(e&&typeof e.number=="number"&&e.number>0)return e.number;const r=t&&t.type;return r&&K.indexOf(r)>-1?-1:999999},lt={Natural:e=>e,LatencyAsc:(e,t,r)=>e.sort((n,s)=>{const a=R(t[n],r&&r[n]),i=R(t[s],r&&r[s]);return a-i}),LatencyDesc:(e,t,r)=>e.sort((n,s)=>{const a=R(t[n],r&&r[n]);return R(t[s],r&&r[s])-a}),NameAsc:e=>e.sort(),NameDesc:e=>e.sort((t,r)=>t>r?-1:tn.trim()).filter(n=>!!n);return r.length===0?e:e.filter(n=>{let s=0;for(;s-1)return!0}return!1})}function pt(e,t,r,n,s,a){let i=[...e];return r&&(i=ct(e,t)),typeof n=="string"&&n!==""&&(i=ut(i,n)),lt[s](i,t,a)}function oe(e,t,r,n,s){const[a]=Se(V);return it(()=>pt(e,t,r,a,n,s),[e,t,r,a,n,s])}const dt="_header_1g0y5_1",ft="_zapWrapper_1g0y5_5";var se={header:dt,zapWrapper:ft};const ae={Right:39,Left:37,Enter:13,Space:32},mt="_proxy_sq0tg_1",ht="_now_sq0tg_25",vt="_error_sq0tg_29",yt="_selectable_sq0tg_32",xt="_proxyType_sq0tg_40",_t="_row_sq0tg_51",bt="_proxyName_sq0tg_57",Et="_proxySmall_sq0tg_68";var h={proxy:mt,now:ht,error:vt,selectable:yt,proxyType:xt,row:_t,proxyName:bt,proxySmall:Et};const gt="_proxyLatency_15kyb_1";var wt={proxyLatency:gt};function Ct({number:e,color:t}){return o.exports.createElement("span",{className:wt.proxyLatency,style:{color:t}},o.exports.createElement("span",null,e," ms"))}const{useMemo:w}=m,C={good:"#67c23a",normal:"#d4b75c",bad:"#e67f3c",na:"#909399"};function ie({number:e}={}){return e===0?C.na:e<200?C.good:e<400?C.normal:typeof e=="number"?C.bad:C.na}function Ot(e,t){return K.indexOf(t)>-1?"linear-gradient(135deg, white 15%, #999 15% 30%, white 30% 45%, #999 45% 60%, white 60% 75%, #999 75% 90%, white 90% 100%)":ie(e)}function kt({now:e,name:t,proxy:r,latency:n,isSelectable:s,onClick:a}){const i=w(()=>Ot(n,r.type),[n,r]),c=w(()=>{let d=t;return n&&typeof n.number=="number"&&(d+=" "+n.number+" ms"),d},[t,n]),l=o.exports.useCallback(()=>{s&&a&&a(t)},[t,a,s]),u=w(()=>E(h.proxySmall,{[h.now]:e,[h.selectable]:s}),[s,e]),p=o.exports.useCallback(d=>{d.keyCode===ae.Enter&&l()},[l]);return o.exports.createElement("div",{title:c,className:u,style:{background:i},onClick:l,onKeyDown:p,role:s?"menuitem":""})}function Pt(e){return e==="Shadowsocks"?"SS":e}function St({now:e,name:t,proxy:r,latency:n,isSelectable:s,onClick:a}){const i=w(()=>ie(n),[n]),c=o.exports.useCallback(()=>{s&&a&&a(t)},[t,a,s]),l=o.exports.useCallback(p=>{p.keyCode===ae.Enter&&c()},[c]),u=w(()=>E(h.proxy,{[h.now]:e,[h.error]:n&&n.error,[h.selectable]:s}),[s,e,n]);return o.exports.createElement("div",{tabIndex:0,className:u,onClick:c,onKeyDown:l,role:s?"menuitem":""},o.exports.createElement("div",{className:h.proxyName},t),o.exports.createElement("div",{className:h.row},o.exports.createElement("span",{className:h.proxyType,style:{opacity:e?.6:.2}},Pt(r.type)),n&&n.number?o.exports.createElement(Ct,{number:n.number,color:i}):null))}const ce=(e,{name:t})=>{const r=Z(e),n=I(e);return{proxy:r[t],latency:n[t]}},Rt=_(ce)(St),At=_(ce)(kt),Tt="_list_10y5m_1",Mt="_listSummaryView_10y5m_8";var le={list:Tt,listSummaryView:Mt};function ue({all:e,now:t,isSelectable:r,itemOnTapCallback:n}){const s=e;return o.exports.createElement("div",{className:le.list},s.map(a=>o.exports.createElement(Rt,{key:a,onClick:n,isSelectable:r,name:a,now:a===t})))}function pe({all:e,now:t,isSelectable:r,itemOnTapCallback:n}){return o.exports.createElement("div",{className:le.listSummaryView},e.map(s=>o.exports.createElement(At,{key:s,onClick:n,isSelectable:r,name:s,now:s===t})))}const{createElement:Lt,useCallback:q,useMemo:Nt,useState:Dt}=m;function Ft(){return o.exports.createElement("div",{className:se.zapWrapper},o.exports.createElement(k,{size:16}))}function $t({name:e,all:t,delay:r,hideUnavailableProxies:n,proxySortBy:s,proxies:a,type:i,now:c,isOpen:l,apiConfig:u,dispatch:p}){const d=oe(t,r,n,s,a),v=Nt(()=>i==="Selector",[i]),{app:{updateCollapsibleIsOpen:y},proxies:{requestDelayForProxies:f}}=S(),O=q(()=>{y("proxyGroup",e,!l)},[l,y,e]),D=q(U=>{!v||p(Le(u,e,U))},[u,p,e,v]),[F,G]=Dt(!1),ke=q(async()=>{G(!0);try{await f(u,d)}catch{}G(!1)},[d,u,f]);return o.exports.createElement("div",{className:se.group},o.exports.createElement("div",{style:{display:"flex",alignItems:"center"}},o.exports.createElement(ne,{name:e,type:i,toggle:O,qty:d.length,isOpen:l}),o.exports.createElement(x,{title:"Test latency",kind:"minimal",onClick:ke,isLoading:F},o.exports.createElement(Ft,null))),Lt(l?ue:pe,{all:d,now:c,isSelectable:v,itemOnTapCallback:D}))}const It=_((e,{name:t,delay:r})=>{const n=Z(e),s=Y(e),a=z(e),i=B(e),c=n[t],{all:l,type:u,now:p}=c;return{all:l,delay:r,hideUnavailableProxies:i,proxySortBy:a,proxies:n,type:u,now:p,isOpen:s[`proxyGroup:${t}`]}})($t),{useCallback:de,useState:zt}=m;function Bt({dispatch:e,apiConfig:t,name:r}){return de(()=>e(Ne(t,r)),[t,e,r])}function qt({dispatch:e,apiConfig:t,names:r}){const[n,s]=zt(!1);return[de(async()=>{if(!n){s(!0);try{await e(De(t,r))}catch{}s(!1)}},[t,e,r,n]),n]}const{useState:jt,useCallback:Ht}=m;function Wt({isLoading:e}){return e?o.exports.createElement(Ue,null,o.exports.createElement(k,{width:16,height:16})):o.exports.createElement(k,{width:16,height:16})}function Gt({dispatch:e,apiConfig:t}){const[r,n]=jt(!1);return[Ht(()=>{r||(n(!0),e(Fe(t)).then(()=>n(!1),()=>n(!1)))},[t,e,r]),r]}function Ut({dispatch:e,apiConfig:t,proxyProviders:r}){const{t:n}=$(),[s,a]=Gt({dispatch:e,apiConfig:t}),[i,c]=qt({apiConfig:t,dispatch:e,names:r.map(l=>l.name)});return o.exports.createElement(He,{icon:o.exports.createElement(Wt,{isLoading:a}),onClick:s,text:n("Test Latency"),style:We},r.length>0?o.exports.createElement(Ge,{text:n("update_all_proxy_provider"),onClick:i},o.exports.createElement(Ve,{isRotating:c})):null)}var fe=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(s,a){return s[0]===r?(n=a,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),s=this.__entries__[n];return s&&s[1]},t.prototype.set=function(r,n){var s=e(this.__entries__,r);~s?this.__entries__[s][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,s=e(n,r);~s&&n.splice(s,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var s=0,a=this.__entries__;s0},e.prototype.connect_=function(){!j||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Qt?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!j||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,s=Jt.some(function(a){return!!~n.indexOf(a)});s&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),me=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),ye=typeof WeakMap!="undefined"?new WeakMap:new fe,xe=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Xt.getInstance(),n=new lr(t,r,this);ye.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){xe.prototype[e]=function(){var t;return(t=ye.get(this))[e].apply(t,arguments)}});var ur=function(){return typeof A.ResizeObserver!="undefined"?A.ResizeObserver:xe}();const{memo:pr,useState:dr,useRef:_e,useEffect:be}=P;function fr(e){const t=_e();return be(()=>void(t.current=e),[e]),t.current}function mr(){const e=_e(),[t,r]=dr({height:0});return be(()=>{const n=new ur(([s])=>r(s.contentRect));return e.current&&n.observe(e.current),()=>n.disconnect()},[]),[e,t]}const hr={initialOpen:{height:"auto",transition:{duration:0}},open:e=>({height:e,opacity:1,visibility:"visible",transition:{duration:.3}}),closed:{height:0,opacity:0,visibility:"hidden",transition:{duration:.3}}},vr={open:{x:0},closed:{x:20}},Ee=pr(({children:e,isOpen:t})=>{const n=J.read().motion,s=fr(t),[a,{height:i}]=mr();return P.createElement("div",null,P.createElement(n.div,{animate:t&&s===t?"initialOpen":t?"open":"closed",custom:i,variants:hr},P.createElement(n.div,{variants:vr,ref:a},e)))}),yr="_updatedAt_1ql33_1",xr="_body_1ql33_8",_r="_actionFooter_1ql33_17",br="_refresh_1ql33_27";var L={updatedAt:yr,body:xr,actionFooter:_r,refresh:br};const{useState:Er,useCallback:ge}=m;function gr({name:e,proxies:t,delay:r,hideUnavailableProxies:n,proxySortBy:s,vehicleType:a,updatedAt:i,isOpen:c,dispatch:l,apiConfig:u}){const p=oe(t,r,n,s),[d,v]=Er(!1),y=Bt({dispatch:l,apiConfig:u,name:e}),f=ge(async()=>{v(!0),await l($e(u,e)),v(!1)},[u,l,e,v]),{app:{updateCollapsibleIsOpen:O}}=S(),D=ge(()=>{O("proxyProvider",e,!c)},[c,O,e]),F=Ze(new Date(i),new Date);return o.exports.createElement("div",{className:L.body},o.exports.createElement(ne,{name:e,toggle:D,type:a,isOpen:c,qty:p.length}),o.exports.createElement("div",{className:L.updatedAt},o.exports.createElement("small",null,"Updated ",F," ago")),o.exports.createElement(Ee,{isOpen:c},o.exports.createElement(ue,{all:p}),o.exports.createElement("div",{className:L.actionFooter},o.exports.createElement(x,{text:"Update",start:o.exports.createElement(Or,null),onClick:y}),o.exports.createElement(x,{text:"Health Check",start:o.exports.createElement(k,{size:16}),onClick:f,isLoading:d}))),o.exports.createElement(Ee,{isOpen:!c},o.exports.createElement(pe,{all:p})))}const wr={rest:{scale:1},pressed:{scale:.95}},Cr={rest:{rotate:0},hover:{rotate:360,transition:{duration:.3}}};function Or(){const t=J.read().motion;return o.exports.createElement(t.div,{className:L.refresh,variants:wr,initial:"rest",whileHover:"hover",whileTap:"pressed"},o.exports.createElement(t.div,{className:"flexCenter",variants:Cr},o.exports.createElement(Re,{size:16})))}const kr=(e,{proxies:t,name:r})=>{const n=B(e),s=I(e),a=Y(e),i=Q(e),c=z(e);return{apiConfig:i,proxies:t,delay:s,hideUnavailableProxies:n,proxySortBy:c,isOpen:a[`proxyProvider:${r}`]}},Pr=_(kr)(gr);function Sr({items:e}){return e.length===0?null:o.exports.createElement(o.exports.Fragment,null,o.exports.createElement(X,{title:"Proxy Provider"}),o.exports.createElement("div",null,e.map(t=>o.exports.createElement(Pr,{key:t.name,name:t.name,proxies:t.proxies,type:t.type,vehicleType:t.vehicleType,updatedAt:t.updatedAt}))))}const Rr="_labeledInput_cmki0_1";var H={labeledInput:Rr};const Ar=[["Natural","order_natural"],["LatencyAsc","order_latency_asc"],["LatencyDesc","order_latency_desc"],["NameAsc","order_name_asc"],["NameDesc","order_name_desc"]],{useCallback:we}=m;function Tr({appConfig:e}){const{app:{updateAppConfig:t}}=S(),r=we(a=>{t("proxySortBy",a.target.value)},[t]),n=we(a=>{t("hideUnavailableProxies",a)},[t]),{t:s}=$();return o.exports.createElement(o.exports.Fragment,null,o.exports.createElement("div",{className:H.labeledInput},o.exports.createElement("span",null,s("sort_in_grp")),o.exports.createElement("div",null,o.exports.createElement(Ye,{options:Ar.map(a=>[a[0],s(a[1])]),selected:e.proxySortBy,onChange:r}))),o.exports.createElement("hr",null),o.exports.createElement("div",{className:H.labeledInput},o.exports.createElement("span",null,s("hide_unavail_proxies")),o.exports.createElement("div",null,o.exports.createElement(ee,{name:"hideUnavailableProxies",checked:e.hideUnavailableProxies,onChange:n}))),o.exports.createElement("div",{className:H.labeledInput},o.exports.createElement("span",null,s("auto_close_conns")),o.exports.createElement("div",null,o.exports.createElement(ee,{name:"autoCloseOldConns",checked:e.autoCloseOldConns,onChange:a=>t("autoCloseOldConns",a)}))))}const Mr=e=>{const t=z(e),r=B(e),n=Ie(e);return{appConfig:{proxySortBy:t,hideUnavailableProxies:r,autoCloseOldConns:n}}};var Lr=_(Mr)(Tr);const Nr="_overlay_uuk3b_1",Dr="_cnt_uuk3b_5",Fr="_afterOpen_uuk3b_16";var W={overlay:Nr,cnt:Dr,afterOpen:Fr};const{useMemo:$r}=m;function Ce({isOpen:e,onRequestClose:t,children:r}){const n=$r(()=>({base:E(te.content,W.cnt),afterOpen:W.afterOpen,beforeClose:""}),[]);return o.exports.createElement(Ae,{isOpen:e,onRequestClose:t,className:n,overlayClassName:E(te.overlay,W.overlay)},r)}function Ir({color:e="currentColor",size:t=24}){return o.exports.createElement("svg",{fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:t,height:t,stroke:e,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},o.exports.createElement("path",{d:"M2 6h9M18.5 6H22"}),o.exports.createElement("circle",{cx:"16",cy:"6",r:"2"}),o.exports.createElement("path",{d:"M22 18h-9M6 18H2"}),o.exports.createElement("circle",{r:"2",transform:"matrix(-1 0 0 1 8 18)"}))}const zr="_topBar_jgy4z_1",Br="_topBarRight_jgy4z_13",qr="_textFilterContainer_jgy4z_22",jr="_group_jgy4z_29";var N={topBar:zr,topBarRight:Br,textFilterContainer:qr,group:jr};const{useState:Hr,useEffect:Wr,useCallback:Oe,useRef:Gr}=m;function Ur({dispatch:e,groupNames:t,delay:r,proxyProviders:n,apiConfig:s,showModalClosePrevConns:a}){const i=Gr({}),c=Oe(()=>{i.current.startAt=Date.now(),e(ze(s)).then(()=>{i.current.completeAt=Date.now()})},[s,e]);Wr(()=>{c();const f=()=>{i.current.startAt&&Date.now()-i.current.startAt>3e4&&c()};return window.addEventListener("focus",f,!1),()=>window.removeEventListener("focus",f,!1)},[c]);const[l,u]=Hr(!1),p=Oe(()=>{u(!1)},[]),{proxies:{closeModalClosePrevConns:d,closePrevConnsAndTheModal:v}}=S(),{t:y}=$();return o.exports.createElement(o.exports.Fragment,null,o.exports.createElement(Ce,{isOpen:l,onRequestClose:p},o.exports.createElement(Lr,null)),o.exports.createElement("div",{className:N.topBar},o.exports.createElement(X,{title:y("Proxies")}),o.exports.createElement("div",{className:N.topBarRight},o.exports.createElement("div",{className:N.textFilterContainer},o.exports.createElement(Ke,{textAtom:V})),o.exports.createElement(Te,{label:y("settings")},o.exports.createElement(x,{kind:"minimal",onClick:()=>u(!0)},o.exports.createElement(Ir,{size:16}))))),o.exports.createElement("div",null,t.map(f=>o.exports.createElement("div",{className:N.group,key:f},o.exports.createElement(It,{name:f,delay:r,apiConfig:s,dispatch:e})))),o.exports.createElement(Sr,{items:n}),o.exports.createElement("div",{style:{height:60}}),o.exports.createElement(Ut,{dispatch:e,apiConfig:s,proxyProviders:n}),o.exports.createElement(Ce,{isOpen:a,onRequestClose:d},o.exports.createElement(tt,{onClickPrimaryButton:()=>v(s),onClickSecondaryButton:d})))}const Vr=e=>({apiConfig:Q(e),groupNames:Be(e),proxyProviders:qe(e),delay:I(e),showModalClosePrevConns:je(e)});var tn=_(Vr)(Ur);export{tn as default}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Proxies.831754de.css b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Proxies.831754de.css deleted file mode 100644 index ffe5c309..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Proxies.831754de.css +++ /dev/null @@ -1 +0,0 @@ -._FlexCenter_1380a_1{display:flex;justify-content:center;align-items:center}._header_1y9js_1{display:flex;align-items:center}._header_1y9js_1:focus{outline:none}._header_1y9js_1 ._arrow_1y9js_8{display:inline-flex;transform:rotate(0);transition:transform .3s}._header_1y9js_1 ._arrow_1y9js_8._isOpen_1y9js_13{transform:rotate(180deg)}._header_1y9js_1 ._arrow_1y9js_8:focus{outline:var(--color-focus-blue) solid 1px}._btn_1y9js_20{margin-left:5px}._qty_1y9js_25{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}._header_1g0y5_1{margin-bottom:12px}._zapWrapper_1g0y5_5{width:20px;height:20px;display:flex;align-items:center;justify-content:center}._proxy_sq0tg_1{margin:3px;padding:5px;position:relative;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;outline:none;border:1px solid transparent;max-width:280px;background-color:var(--color-bg-proxy)}._proxy_sq0tg_1:focus{border:1px solid var(--color-focus-blue)}@media screen and (min-width: 30em){._proxy_sq0tg_1{min-width:200px;border-radius:10px;padding:10px}}._proxy_sq0tg_1._now_sq0tg_25{background-color:var(--color-focus-blue);color:#ddd}._proxy_sq0tg_1._error_sq0tg_29{opacity:.5}._proxy_sq0tg_1._selectable_sq0tg_32{transition:transform .2s ease-in-out;cursor:pointer}._proxy_sq0tg_1._selectable_sq0tg_32:hover{transform:translateY(-2px)}._proxyType_sq0tg_40{font-family:var(--font-mono);font-size:.6em;margin-right:3px}@media screen and (min-width: 30em){._proxyType_sq0tg_40{font-size:.85em}}._row_sq0tg_51{display:flex;align-items:center;justify-content:space-between}._proxyName_sq0tg_57{width:100%;margin-bottom:5px;font-size:.85em}@media screen and (min-width: 30em){._proxyName_sq0tg_57{font-size:1em}}._proxySmall_sq0tg_68{width:13px;height:13px;border-radius:50%;border:1px solid var(--color-background)}._proxySmall_sq0tg_68._now_sq0tg_25{border-color:var(--color-text-secondary)}._proxySmall_sq0tg_68._selectable_sq0tg_32{transition:transform .1s ease-in-out;cursor:pointer}._proxySmall_sq0tg_68._selectable_sq0tg_32:hover{transform:scale(1.2)}._proxyLatency_15kyb_1{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width: 30em){._proxyLatency_15kyb_1{font-size:1em}}._list_10y5m_1{display:flex;flex-wrap:wrap;margin:8px 0 8px -3px}._listSummaryView_10y5m_8{margin:8px 0;display:grid;grid-template-columns:repeat(auto-fill,13px);grid-gap:10px}._updatedAt_1ql33_1{margin-bottom:12px}._updatedAt_1ql33_1 small{color:#777}._body_1ql33_8{padding:10px 15px}@media screen and (min-width: 30em){._body_1ql33_8{padding:10px 40px}}._actionFooter_1ql33_17{display:flex}._actionFooter_1ql33_17 button{margin:0 5px}._actionFooter_1ql33_17 button:first-child{margin-left:0}._refresh_1ql33_27{display:flex;justify-content:center;align-items:center;cursor:pointer}._labeledInput_cmki0_1{max-width:85vw;width:400px;display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:13px 0}hr{height:1px;background-color:var(--color-separator);border:none;outline:none;margin:1rem 0}._overlay_uuk3b_1{background-color:#0009}._cnt_uuk3b_5{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;transform:translate(-50%,-50%) scale(1.2);box-shadow:#0000001f 0 4px 4px,#0000003d 0 16px 32px}._afterOpen_uuk3b_16{opacity:1;transform:translate(-50%,-50%) scale(1)}._topBar_jgy4z_1{position:-webkit-sticky;position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;z-index:1;background-color:var(--color-background2);-webkit-backdrop-filter:blur(36px);backdrop-filter:blur(36px)}._topBarRight_jgy4z_13{display:flex;align-items:center;flex-wrap:wrap;flex:1;justify-content:flex-end;margin-right:20px}._textFilterContainer_jgy4z_22{max-width:350px;min-width:150px;flex:1;margin-right:8px}._group_jgy4z_29{padding:10px 15px}@media screen and (min-width: 30em){._group_jgy4z_29{padding:10px 40px}} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Rules.a609ca62.css b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Rules.a609ca62.css deleted file mode 100644 index d31e6b76..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Rules.a609ca62.css +++ /dev/null @@ -1 +0,0 @@ -._RuleProviderItem_ly9yn_1{display:grid;grid-template-columns:40px 1fr 46px;height:100%}._left_ly9yn_7{display:inline-flex;align-items:center;color:var(--color-text-secondary);opacity:.4}._middle_ly9yn_14{display:grid;grid-template-rows:1fr auto auto;align-items:center}._gray_ly9yn_20{color:#777}._refreshButtonWrapper_ly9yn_24{display:grid;place-items:center;opacity:0;transition:opacity .2s}._RuleProviderItem_ly9yn_1:hover ._refreshButtonWrapper_ly9yn_24{opacity:1}._rule_1ymqx_1{display:flex;align-items:center;padding:6px 15px}@media screen and (min-width: 30em){._rule_1ymqx_1{padding:10px 40px}}._left_1ymqx_12{width:40px;padding-right:15px;color:var(--color-text-secondary);opacity:.4}._a_1ymqx_19{display:flex;align-items:center;font-size:12px;opacity:.8}._b_1ymqx_26{padding:10px 0;font-family:"Roboto Mono",Menlo,monospace;font-size:16px}@media screen and (min-width: 30em){._b_1ymqx_26{font-size:19px}}._type_1ymqx_37{width:110px}._header_1j1w3_1{display:grid;grid-template-columns:1fr minmax(auto,330px);align-items:center;padding-right:15px}@media screen and (min-width: 30em){._header_1j1w3_1{padding-right:40px}}._RuleProviderItemWrapper_1j1w3_17{padding:6px 15px}@media screen and (min-width: 30em){._RuleProviderItemWrapper_1j1w3_17{padding:10px 40px}} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Rules.b2ac0faa.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Rules.b2ac0faa.js deleted file mode 100644 index caaf1a61..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Rules.b2ac0faa.js +++ /dev/null @@ -1 +0,0 @@ -var B=Object.defineProperty,j=Object.defineProperties;var F=Object.getOwnPropertyDescriptors;var R=Object.getOwnPropertySymbols;var S=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable;var _=(e,t,r)=>t in e?B(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,u=(e,t)=>{for(var r in t||(t={}))S.call(t,r)&&_(e,r,t[r]);if(R)for(var r of R(t))$.call(t,r)&&_(e,r,t[r]);return e},v=(e,t)=>j(e,F(t));import{e as A,u as g,N as q,U as E,V as x,r as l,k as P,R as o}from"./vendor.38e754a4.js";import{a as L,V as Q}from"./index.esm.edbe839b.js";import{t as y,E as W,B as z,c as D,g as U,C as V}from"./index.ee5bc09a.js";import{R as b,T as H}from"./TextFitler.cc7f7fa3.js";import{f as M}from"./index.9233837d.js";import{F as O,p as G}from"./Fab.4dc9cb99.js";import{u as J}from"./useRemainingViewPortHeight.7baef998.js";import"./debounce.76599460.js";function K(e){const t=e.providers,r=Object.keys(t),s={};for(let n=0;n=0,"there is no valid rules list in the rules API response"),e.rules.map((t,r)=>v(u({},t),{id:r}))}async function re(e,t){let r={rules:[]};try{const{url:s,init:n}=y(t),a=await fetch(s+e,n);a.ok&&(r=await a.json())}catch(s){console.log("failed to fetch rules",s)}return te(r)}const I=A({key:"ruleFilterText",default:""});function ne(e,t){const r=E(),{mutate:s,isLoading:n}=x(w,{onSuccess:()=>{r.invalidateQueries("/providers/rules")}});return[i=>{i.preventDefault(),s({name:e,apiConfig:t})},n]}function se(e){const t=E(),{data:r}=N(e),{mutate:s,isLoading:n}=x(Y,{onSuccess:()=>{t.invalidateQueries("/providers/rules")}});return[i=>{i.preventDefault(),s({names:r.names,apiConfig:e})},n]}function N(e){return g(["/providers/rules",e],()=>X("/providers/rules",e))}function ae(e){const{data:t,isFetching:r}=g(["/rules",e],()=>re("/rules",e)),{data:s}=N(e),[n]=q(I);if(n==="")return{rules:t,provider:s,isFetching:r};{const a=n.toLowerCase();return{rules:t.filter(i=>i.payload.toLowerCase().indexOf(a)>=0),isFetching:r,provider:{byName:s.byName,names:s.names.filter(i=>i.toLowerCase().indexOf(a)>=0)}}}}const oe="_RuleProviderItem_ly9yn_1",ie="_left_ly9yn_7",le="_middle_ly9yn_14",ce="_gray_ly9yn_20",ue="_refreshButtonWrapper_ly9yn_24";var m={RuleProviderItem:oe,left:ie,middle:le,gray:ce,refreshButtonWrapper:ue};function me({idx:e,name:t,vehicleType:r,behavior:s,updatedAt:n,ruleCount:a,apiConfig:i}){const[d,c]=ne(t,i),f=M(new Date(n),new Date);return l.exports.createElement("div",{className:m.RuleProviderItem},l.exports.createElement("span",{className:m.left},e),l.exports.createElement("div",{className:m.middle},l.exports.createElement(W,{name:t,type:`${r} / ${s}`}),l.exports.createElement("div",{className:m.gray},a<2?`${a} rule`:`${a} rules`),l.exports.createElement("small",{className:m.gray},"Updated ",f," ago")),l.exports.createElement("span",{className:m.refreshButtonWrapper},l.exports.createElement(z,{onClick:d,disabled:c},l.exports.createElement(b,{isRotating:c}))))}function de({apiConfig:e}){const[t,r]=se(e),{t:s}=P();return l.exports.createElement(O,{icon:l.exports.createElement(b,{isRotating:r}),text:s("update_all_rule_provider"),style:G,onClick:t})}const fe="_rule_1ymqx_1",pe="_left_1ymqx_12",ve="_a_1ymqx_19",ye="_b_1ymqx_26",he="_type_1ymqx_37";var p={rule:fe,left:pe,a:ve,b:ye,type:he};const h={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function Re({proxy:e}){let t=h._default;return h[e]&&(t=h[e]),{color:t}}function _e({type:e,payload:t,proxy:r,id:s}){const n=Re({proxy:r});return o.createElement("div",{className:p.rule},o.createElement("div",{className:p.left},s),o.createElement("div",null,o.createElement("div",{className:p.b},t),o.createElement("div",{className:p.a},o.createElement("div",{className:p.type},e),o.createElement("div",{style:n},r))))}const ge="_header_1j1w3_1",Ee="_RuleProviderItemWrapper_1j1w3_17";var C={header:ge,RuleProviderItemWrapper:Ee};const{memo:xe}=o,T=30;function Pe(e,{rules:t,provider:r}){const s=r.names.length;return e{const{rules:s,provider:n,apiConfig:a}=r,i=n.names.length;if(e({apiConfig:U(e)});var qe=D(Ie)(Ne);function Ne({apiConfig:e}){const[t,r]=J(),{rules:s,provider:n}=ae(e),a=be({provider:n}),{t:i}=P();return o.createElement("div",null,o.createElement("div",{className:C.header},o.createElement(V,{title:i("Rules")}),o.createElement(H,{placeholder:"Filter",textAtom:I})),o.createElement("div",{ref:t,style:{paddingBottom:T}},o.createElement(Q,{height:r-T,width:"100%",itemCount:s.length+n.names.length,itemSize:a,itemData:{rules:s,provider:n,apiConfig:e},itemKey:Pe},we)),n&&n.names&&n.names.length>0?o.createElement(de,{apiConfig:e}):null)}export{qe as default}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Select.29a5a6ae.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Select.29a5a6ae.js deleted file mode 100644 index 124c1cb3..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Select.29a5a6ae.js +++ /dev/null @@ -1 +0,0 @@ -import{r as t}from"./vendor.38e754a4.js";const o="_select_1mr76_1";var l={select:o};function m({options:r,selected:s,onChange:c}){return t.exports.createElement("select",{className:l.select,value:s,onChange:c},r.map(([e,a])=>t.exports.createElement("option",{key:e,value:e},a)))}export{m as S}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Select.9a98fc65.css b/luci-app-openclash/root/usr/share/openclash/yacd/assets/Select.9a98fc65.css deleted file mode 100644 index 6f2d8657..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/Select.9a98fc65.css +++ /dev/null @@ -1 +0,0 @@ -._select_1mr76_1{height:40px;line-height:1.5;width:100%;padding-left:8px;-webkit-appearance:none;appearance:none;background-color:var(--color-input-bg);color:var(--color-text);padding-right:20px;border-radius:4px;border:1px solid var(--color-input-border);background-image:url(data:image/svg+xml,%0A%20%20%20%20%3Csvg%20width%3D%228%22%20height%3D%2224%22%20viewBox%3D%220%200%208%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%207L7%2011H1L4%207Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%2017L1%2013L7%2013L4%2017Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%3C%2Fsvg%3E%0A%20%20);background-position:right 8px center;background-repeat:no-repeat}._select_1mr76_1:hover,._select_1mr76_1:focus{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}._select_1mr76_1:focus{box-shadow:#4299e199 0 0 0 3px}._select_1mr76_1 option{background-color:var(--color-background)} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/TextFitler.00e03ee5.css b/luci-app-openclash/root/usr/share/openclash/yacd/assets/TextFitler.00e03ee5.css deleted file mode 100644 index c06c7e66..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/TextFitler.00e03ee5.css +++ /dev/null @@ -1 +0,0 @@ -._rotate_1dspl_1{display:inline-flex}._isRotating_1dspl_5{animation:_rotating_1dspl_1 3s infinite linear;animation-fill-mode:forwards}@keyframes _rotating_1dspl_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._input_16a1f_1{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;outline:none;padding:8px 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._input_16a1f_1:focus{border:1px solid var(--color-focus-blue)} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/TextFitler.cc7f7fa3.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/TextFitler.cc7f7fa3.js deleted file mode 100644 index b74d40a8..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/TextFitler.cc7f7fa3.js +++ /dev/null @@ -1 +0,0 @@ -import{g as i,r as n,O as l,N as u,j as p}from"./vendor.38e754a4.js";import{d as x}from"./debounce.76599460.js";const _="_rotate_1dspl_1",g="_isRotating_1dspl_5",d="_rotating_1dspl_1";var r={rotate:_,isRotating:g,rotating:d};function E({isRotating:t}){const e=i(r.rotate,{[r.isRotating]:t});return n.exports.createElement("span",{className:e},n.exports.createElement(l,{width:16}))}const{useCallback:m,useState:R,useMemo:f}=p;function h(t){const[,e]=u(t),[a,c]=R(""),o=f(()=>x(e,300),[e]);return[m(s=>{c(s.target.value),o(s.target.value)},[o]),a]}const v="_input_16a1f_1";var T={input:v};function N(t){const[e,a]=h(t.textAtom);return n.exports.createElement("input",{className:T.input,type:"text",value:a,onChange:e,placeholder:t.placeholder})}export{E as R,N as T}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/debounce.76599460.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/debounce.76599460.js deleted file mode 100644 index dec4764c..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/debounce.76599460.js +++ /dev/null @@ -1 +0,0 @@ -function p(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var M=typeof global=="object"&&global&&global.Object===Object&&global,R=M,w=typeof self=="object"&&self&&self.Object===Object&&self,B=R||w||Function("return this")(),$=B,F=function(){return $.Date.now()},S=F,G=/\s/;function U(e){for(var n=e.length;n--&&G.test(e.charAt(n)););return n}var _=/^\s+/;function D(e){return e&&e.slice(0,U(e)+1).replace(_,"")}var H=$.Symbol,y=H,E=Object.prototype,X=E.hasOwnProperty,q=E.toString,g=y?y.toStringTag:void 0;function z(e){var n=X.call(e,g),i=e[g];try{e[g]=void 0;var o=!0}catch{}var f=q.call(e);return o&&(n?e[g]=i:delete e[g]),f}var J=Object.prototype,K=J.toString;function Q(e){return K.call(e)}var V="[object Null]",Y="[object Undefined]",k=y?y.toStringTag:void 0;function Z(e){return e==null?e===void 0?Y:V:k&&k in Object(e)?z(e):Q(e)}function ee(e){return e!=null&&typeof e=="object"}var ne="[object Symbol]";function te(e){return typeof e=="symbol"||ee(e)&&Z(e)==ne}var W=0/0,re=/^[-+]0x[0-9a-f]+$/i,ie=/^0b[01]+$/i,oe=/^0o[0-7]+$/i,ae=parseInt;function L(e){if(typeof e=="number")return e;if(te(e))return W;if(p(e)){var n=typeof e.valueOf=="function"?e.valueOf():e;e=p(n)?n+"":n}if(typeof e!="string")return e===0?e:+e;e=D(e);var i=ie.test(e);return i||oe.test(e)?ae(e.slice(2),i?2:8):re.test(e)?W:+e}var fe="Expected a function",ce=Math.max,ue=Math.min;function se(e,n,i){var o,f,s,u,r,c,d=0,O=!1,l=!1,T=!0;if(typeof e!="function")throw new TypeError(fe);n=L(n)||0,p(i)&&(O=!!i.leading,l="maxWait"in i,s=l?ce(L(i.maxWait)||0,n):s,T="trailing"in i?!!i.trailing:T);function j(t){var a=o,b=f;return o=f=void 0,d=t,u=e.apply(b,a),u}function N(t){return d=t,r=setTimeout(m,n),O?j(t):u}function P(t){var a=t-c,b=t-d,I=n-a;return l?ue(I,s-b):I}function h(t){var a=t-c,b=t-d;return c===void 0||a>=n||a<0||l&&b>=s}function m(){var t=S();if(h(t))return x(t);r=setTimeout(m,P(t))}function x(t){return r=void 0,T&&o?j(t):(o=f=void 0,u)}function A(){r!==void 0&&clearTimeout(r),d=0,o=c=f=r=void 0}function C(){return r===void 0?u:x(S())}function v(){var t=S(),a=h(t);if(o=arguments,f=this,c=t,a){if(r===void 0)return N(c);if(l)return clearTimeout(r),r=setTimeout(m,n),j(c)}return r===void 0&&(r=setTimeout(m,n)),u}return v.cancel=A,v.flush=C,v}export{se as d}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/en.f1dd5536.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/en.f1dd5536.js deleted file mode 100644 index 33ef205d..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/en.f1dd5536.js +++ /dev/null @@ -1 +0,0 @@ -const e={Overview:"Overview",Proxies:"Proxies",Rules:"Rules",Conns:"Conns",Config:"Config",Logs:"Logs",Upload:"Upload",Download:"Download","Upload Total":"Upload Total","Download Total":"Download Total","Active Connections":"Active Connections","Pause Refresh":"Pause Refresh","Resume Refresh":"Resume Refresh",Up:"Up",Down:"Down","Test Latency":"Test Latency",settings:"settings",sort_in_grp:"Sorting in group",hide_unavail_proxies:"Hide unavailable proxies",auto_close_conns:"Automatically close old connections",order_natural:"Original order in config file",order_latency_asc:"By latency from small to big",order_latency_desc:"By latency from big to small",order_name_asc:"By name alphabetically (A-Z)",order_name_desc:"By name alphabetically (Z-A)",Connections:"Connections",Active:"Active",Closed:"Closed",theme:"theme",about:"about",no_logs:"No logs yet, hang tight...",chart_style:"Chart Style",latency_test_url:"Latency Test URL",lang:"Language",update_all_rule_provider:"Update all rule providers",update_all_proxy_provider:"Update all proxy providers"};export{e as data}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/index.9233837d.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/index.9233837d.js deleted file mode 100644 index 73ddb47a..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/index.9233837d.js +++ /dev/null @@ -1 +0,0 @@ -function m(e,t){if(t.length1?"s":"")+" required, but only "+t.length+" present")}function l(e){m(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):((typeof e=="string"||t==="[object String]")&&typeof console!="undefined"&&(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn(new Error().stack)),new Date(NaN))}function y(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()}function g(e,t){m(2,arguments);var a=l(e),n=l(t),i=a.getTime()-n.getTime();return i<0?-1:i>0?1:i}function N(e,t){m(2,arguments);var a=l(e),n=l(t),i=a.getFullYear()-n.getFullYear(),r=a.getMonth()-n.getMonth();return i*12+r}function F(e,t){return m(2,arguments),l(e).getTime()-l(t).getTime()}var D={ceil:Math.ceil,round:Math.round,floor:Math.floor,trunc:function(e){return e<0?Math.ceil(e):Math.floor(e)}},x="trunc";function k(e){return e?D[e]:D[x]}function A(e){m(1,arguments);var t=l(e);return t.setHours(23,59,59,999),t}function C(e){m(1,arguments);var t=l(e),a=t.getMonth();return t.setFullYear(t.getFullYear(),a+1,0),t.setHours(23,59,59,999),t}function X(e){m(1,arguments);var t=l(e);return A(t).getTime()===C(t).getTime()}function I(e,t){m(2,arguments);var a=l(e),n=l(t),i=g(a,n),r=Math.abs(N(a,n)),o;if(r<1)o=0;else{a.getMonth()===1&&a.getDate()>27&&a.setDate(30),a.setMonth(a.getMonth()-i*r);var s=g(a,n)===-i;X(l(e))&&r===1&&g(e,n)===1&&(s=!1),o=i*(r-Number(s))}return o===0?0:o}function O(e,t,a){m(2,arguments);var n=F(e,t)/1e3;return k(a==null?void 0:a.roundingMethod)(n)}var j={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},E=function(e,t,a){var n,i=j[e];return typeof i=="string"?n=i:t===1?n=i.one:n=i.other.replace("{{count}}",t.toString()),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"in "+n:n+" ago":n},R=E;function M(e){return function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},a=t.width?String(t.width):e.defaultWidth,n=e.formats[a]||e.formats[e.defaultWidth];return n}}var Y={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},_={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},z={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},L={date:M({formats:Y,defaultWidth:"full"}),time:M({formats:_,defaultWidth:"full"}),dateTime:M({formats:z,defaultWidth:"full"})},V=L,q={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},H=function(e,t,a,n){return q[e]},J=H;function c(e){return function(t,a){var n=a||{},i=n.context?String(n.context):"standalone",r;if(i==="formatting"&&e.formattingValues){var o=e.defaultFormattingWidth||e.defaultWidth,s=n.width?String(n.width):o;r=e.formattingValues[s]||e.formattingValues[o]}else{var d=e.defaultWidth,h=n.width?String(n.width):e.defaultWidth;r=e.values[h]||e.values[d]}var u=e.argumentCallback?e.argumentCallback(t):t;return r[u]}}var U={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Q={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},$={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},B={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},K={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},G={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Z=function(e,t){var a=Number(e),n=a%100;if(n>20||n<10)switch(n%10){case 1:return a+"st";case 2:return a+"nd";case 3:return a+"rd"}return a+"th"},ee={ordinalNumber:Z,era:c({values:U,defaultWidth:"wide"}),quarter:c({values:Q,defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:c({values:$,defaultWidth:"wide"}),day:c({values:B,defaultWidth:"wide"}),dayPeriod:c({values:K,defaultWidth:"wide",formattingValues:G,defaultFormattingWidth:"wide"})},te=ee;function v(e){return function(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=a.width,i=n&&e.matchPatterns[n]||e.matchPatterns[e.defaultMatchWidth],r=t.match(i);if(!r)return null;var o=r[0],s=n&&e.parsePatterns[n]||e.parsePatterns[e.defaultParseWidth],d=Array.isArray(s)?ne(s,function(f){return f.test(o)}):ae(s,function(f){return f.test(o)}),h;h=e.valueCallback?e.valueCallback(d):d,h=a.valueCallback?a.valueCallback(h):h;var u=t.slice(o.length);return{value:h,rest:u}}}function ae(e,t){for(var a in e)if(e.hasOwnProperty(a)&&t(e[a]))return a}function ne(e,t){for(var a=0;a1&&arguments[1]!==void 0?arguments[1]:{},n=t.match(e.matchPattern);if(!n)return null;var i=n[0],r=t.match(e.parsePattern);if(!r)return null;var o=e.valueCallback?e.valueCallback(r[0]):r[0];o=a.valueCallback?a.valueCallback(o):o;var s=t.slice(i.length);return{value:o,rest:s}}}var ie=/^(\d+)(th|st|nd|rd)?/i,oe=/\d+/i,ue={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},se={any:[/^b/i,/^(a|c)/i]},le={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},de={any:[/1/i,/2/i,/3/i,/4/i]},fe={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},me={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},he={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},ce={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},ve={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},ge={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},be={ordinalNumber:re({matchPattern:ie,parsePattern:oe,valueCallback:function(e){return parseInt(e,10)}}),era:v({matchPatterns:ue,defaultMatchWidth:"wide",parsePatterns:se,defaultParseWidth:"any"}),quarter:v({matchPatterns:le,defaultMatchWidth:"wide",parsePatterns:de,defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:v({matchPatterns:fe,defaultMatchWidth:"wide",parsePatterns:me,defaultParseWidth:"any"}),day:v({matchPatterns:he,defaultMatchWidth:"wide",parsePatterns:ce,defaultParseWidth:"any"}),dayPeriod:v({matchPatterns:ve,defaultMatchWidth:"any",parsePatterns:ge,defaultParseWidth:"any"})},Me=be,pe={code:"en-US",formatDistance:R,formatLong:V,formatRelative:J,localize:te,match:Me,options:{weekStartsOn:0,firstWeekContainsDate:1}},we=pe;function ye(e,t){if(e==null)throw new TypeError("assign requires that input parameter not be null or undefined");t=t||{};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}function De(e){return ye({},e)}var P=1440,Pe=2520,p=43200,Se=86400;function Te(e,t){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};m(2,arguments);var n=a.locale||we;if(!n.formatDistance)throw new RangeError("locale must contain formatDistance property");var i=g(e,t);if(isNaN(i))throw new RangeError("Invalid time value");var r=De(a);r.addSuffix=Boolean(a.addSuffix),r.comparison=i;var o,s;i>0?(o=l(t),s=l(e)):(o=l(e),s=l(t));var d=O(s,o),h=(y(s)-y(o))/1e3,u=Math.round((d-h)/60),f;if(u<2)return a.includeSeconds?d<5?n.formatDistance("lessThanXSeconds",5,r):d<10?n.formatDistance("lessThanXSeconds",10,r):d<20?n.formatDistance("lessThanXSeconds",20,r):d<40?n.formatDistance("halfAMinute",null,r):d<60?n.formatDistance("lessThanXMinutes",1,r):n.formatDistance("xMinutes",1,r):u===0?n.formatDistance("lessThanXMinutes",1,r):n.formatDistance("xMinutes",u,r);if(u<45)return n.formatDistance("xMinutes",u,r);if(u<90)return n.formatDistance("aboutXHours",1,r);if(ut in e?Pt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,d=(e,t)=>{for(var n in t||(t={}))de.call(t,n)&&V(e,n,t[n]);if(B)for(var n of B(t))pe.call(t,n)&&V(e,n,t[n]);return e},x=(e,t)=>kt(e,Nt(t));var D=(e,t)=>{var n={};for(var o in e)de.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&B)for(var o of B(e))t.indexOf(o)<0&&pe.call(e,o)&&(n[o]=e[o]);return n};var fe=(e,t,n)=>(V(e,typeof t!="symbol"?t+"":t,n),n);import{i as $t,B as At,a as Tt,b as Lt,R as l,s as It,f as Rt,u as Ot,r as s,G as Ut,Q as Bt,c as Dt,d as jt,e as Mt,g as C,I as Ft,E as zt,h as Wt,j as $,k as R,T as me,M as he,l as qt,L as ge,F as Ht,m as Vt,n as Gt,o as Jt,p as Kt,q as Qt,t as Yt,v as Xt,S as G,w as Zt,x as en,H as tn,y as xe,z as nn}from"./vendor.38e754a4.js";const on=function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const a of r)if(a.type==="childList")for(const c of a.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&o(c)}).observe(document,{childList:!0,subtree:!0});function n(r){const a={};return r.integrity&&(a.integrity=r.integrity),r.referrerpolicy&&(a.referrerPolicy=r.referrerpolicy),r.crossorigin==="use-credentials"?a.credentials="include":r.crossorigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function o(r){if(r.ep)return;r.ep=!0;const a=n(r);fetch(r.href,a)}};on();const rn="modulepreload",ye={},sn="./",v=function(t,n){return!n||n.length===0?t():Promise.all(n.map(o=>{if(o=`${sn}${o}`,o in ye)return;ye[o]=!0;const r=o.endsWith(".css"),a=r?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${a}`))return;const c=document.createElement("link");if(c.rel=r?"stylesheet":rn,r||(c.as="script",c.crossOrigin=""),c.href=o,document.head.appendChild(c),r)return new Promise((i,u)=>{c.addEventListener("load",i),c.addEventListener("error",u)})})).then(()=>t())},ve={zh:v(()=>import("./zh.247ad8fa.js"),[]),en:v(()=>import("./en.f1dd5536.js"),[])};$t.use(At).use(Tt).use(Lt).init({debug:!1,backend:{loadPath:"/__{{lng}}/{{ns}}.json",request:function(e,t,n,o){let r;switch(t){case"/__zh/translation.json":case"/__zh-CN/translation.json":r=ve.zh;break;case"/__en/translation.json":default:r=ve.en;break}r&&r.then(a=>{o(null,{status:200,data:a.data})})}},supportedLngs:["en","zh"],fallbackLng:"en",interpolation:{escapeValue:!1}});function an(e,t){let n;return(...o)=>{n&&clearTimeout(n),n=setTimeout(()=>{e(...o)},t)}}function _e(e){return e.replace(/\/$/,"")}function oa(e,t){let n=String(e);for(;n.lengtho.current,[]);xn(()=>{},[c]);const i=Se((p,m)=>{if(typeof p=="function")return p(i,c);const g=Rt(c(),m);g!==o.current&&(o.current=g,a(g))},[c]),u=hn(()=>$e(t,i),[t,i]);return l.createElement(Pe.Provider,{value:r},l.createElement(ke.Provider,{value:i},l.createElement(Ne.Provider,{value:u},n)))}function _(e){return t=>{const n=mn(t);function o(r){const a=K(Pe),c=K(ke),i=e(a,r),u=d(d({dispatch:c},r),i);return l.createElement(n,d({},u))}return o}}function En(e,t){return function(...n){return t(e.apply(this,n))}}function $e(e,t){const n={};for(const o in e){const r=e[o];typeof r=="function"?n[o]=En(r,t):typeof r=="object"&&(n[o]=$e(r,t))}return n}const Ae="yacd.haishan.me";function wn(){try{const e=localStorage.getItem(Ae);return e?JSON.parse(e):void 0}catch{return}}function k(e){try{const t=JSON.stringify(e);localStorage.setItem(Ae,t)}catch{}}const Te="/configs";async function Le(e){const{url:t,init:n}=h(e);return await fetch(t+Te,n)}function bn(e){return"socks-port"in e&&(e["socket-port"]=e["socks-port"]),e}async function Cn(e,t){const{url:n,init:o}=h(e),r=JSON.stringify(bn(t));return await fetch(n+Te,x(d({},o),{body:r,method:"PATCH"}))}const Ie="/traffic",Sn=new TextDecoder("utf-8"),j=150,O={labels:Array(j),up:Array(j),down:Array(j),size:j,subscribers:[],appendData(e){this.up.push(e.up),this.down.push(e.down);const t=new Date,n=""+t.getMinutes()+t.getSeconds();this.labels.push(n),this.up.length>this.size&&this.up.shift(),this.down.length>this.size&&this.down.shift(),this.labels.length>this.size&&this.labels.shift(),this.subscribers.forEach(o=>o(e))},subscribe(e){return this.subscribers.push(e),()=>{const t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}}};let A=!1,M="";function Q(e){O.appendData(JSON.parse(e))}function Re(e){return e.read().then(({done:t,value:n})=>{M+=Sn.decode(n,{stream:!t});const r=M.split(` -`),a=r[r.length-1];for(let c=0;c{if(o.ok){const r=o.body.getReader();Re(r)}else A=!1},o=>{console.log("fetch /traffic error",o),A=!1}),O}function Oe(e){return t=>{t(`openModal:${e}`,n=>{n.modals[e]=!0})}}function kn(e){return t=>{t(`closeModal:${e}`,n=>{n.modals[e]=!1})}}const Nn={apiConfig:!1},sa=e=>e.configs.configs,$n=e=>e.configs.haveFetchedConfig,aa=e=>e.configs.configs["log-level"];function Ue(e){return async(t,n)=>{let o;try{o=await Le(e)}catch{t(Oe("apiConfig"));return}if(!o.ok){console.log("Error fetch configs",o.statusText),t(Oe("apiConfig"));return}const r=await o.json();t("store/configs#fetchConfigs",c=>{c.configs.configs=r}),$n(n())?Y(e):t(An())}}function An(){return e=>{e("store/configs#markHaveFetchedConfig",t=>{t.configs.haveFetchedConfig=!0})}}function ca(e,t){return async n=>{Cn(e,t).then(o=>{o.ok===!1&&console.log("Error update configs",o.statusText)},o=>{throw console.log("Error update configs",o),o}).then(()=>{n(Ue(e))}),n("storeConfigsOptimisticUpdateConfigs",o=>{o.configs.configs=d(d({},o.configs.configs),t)})}}const Tn={configs:{port:7890,"socks-port":7891,"redir-port":0,"allow-lan":!1,mode:"Rule","log-level":"uninit"},haveFetchedConfig:!1},T=e=>{const t=e.app.selectedClashAPIConfigIndex;return e.app.clashAPIConfigs[t]},Be=e=>e.app.selectedClashAPIConfigIndex,X=e=>e.app.clashAPIConfigs,Z=e=>e.app.theme,Ln=e=>e.app.selectedChartStyleIndex,In=e=>e.app.latencyTestUrl,la=e=>e.app.collapsibleIsOpen,ia=e=>e.app.proxySortBy,ua=e=>e.app.hideUnavailableProxies,Rn=e=>e.app.autoCloseOldConns,da=e=>e.app.logStreamingPaused,On=an(k,600);function ee(e,{baseURL:t,secret:n}){const o=X(e());for(let r=0;r{if(ee(o,{baseURL:e,secret:t}))return;const a={baseURL:e,secret:t,addedAt:Date.now()};n("addClashAPIConfig",c=>{c.app.clashAPIConfigs.push(a)}),k(o().app)}}function Bn({baseURL:e,secret:t}){return async(n,o)=>{const r=ee(o,{baseURL:e,secret:t});n("removeClashAPIConfig",a=>{a.app.clashAPIConfigs.splice(r,1)}),k(o().app)}}function Dn({baseURL:e,secret:t}){return async(n,o)=>{const r=ee(o,{baseURL:e,secret:t});Be(o())!==r&&n("selectClashAPIConfig",c=>{c.app.selectedClashAPIConfigIndex=r}),k(o().app);try{window.location.reload()}catch{}}}const De=document.querySelector("html"),je=document.querySelector('meta[name="theme-color"]');function Me(e="dark"){e==="dark"?(De.setAttribute("data-theme","dark"),je.setAttribute("content","#202020")):(De.setAttribute("data-theme","light"),je.setAttribute("content","#f7f7f7"))}function jn(){return(e,t)=>{const o=Z(t())==="light"?"dark":"light";Me(o),e("storeSwitchTheme",r=>{r.app.theme=o}),k(t().app)}}function Mn(e){return(t,n)=>{t("appSelectChartStyleIndex",o=>{o.app.selectedChartStyleIndex=Number(e)}),k(n().app)}}function Fe(e,t){return(n,o)=>{n("appUpdateAppConfig",r=>{r.app[e]=t}),k(o().app)}}function Fn(e,t,n){return(o,r)=>{o("updateCollapsibleIsOpen",a=>{a.app.collapsibleIsOpen[`${e}:${t}`]=n}),On(r().app)}}var Ct,St;const zn={baseURL:(St=(Ct=document.getElementById("app"))==null?void 0:Ct.getAttribute("data-base-url"))!=null?St:"http://127.0.0.1:9090",secret:"",addedAt:0},Wn={selectedClashAPIConfigIndex:0,clashAPIConfigs:[zn],latencyTestUrl:"http://www.gstatic.com/generate_204",selectedChartStyleIndex:0,theme:"dark",collapsibleIsOpen:{},proxySortBy:"Natural",hideUnavailableProxies:!1,autoCloseOldConns:!1,logStreamingPaused:!1};function qn(){const{search:e}=window.location,t={};if(typeof e!="string"||e==="")return t;const n=e.replace(/^\?/,"").split("&");for(let o=0;oun("/version",e.apiConfig));return s.exports.createElement(s.exports.Fragment,null,s.exports.createElement(Ce,{title:"About"}),t&&t.version?s.exports.createElement(ze,{name:"Clash",version:t.version,link:"https://github.com/Dreamacro/clash"}):null,s.exports.createElement(ze,{name:"Yacd",version:"0.3.4",link:"https://github.com/haishanh/yacd"}))}const Qn=e=>({apiConfig:T(e)}),Yn=_(Qn)(Kn),Xn="_loading_74j3j_1",Zn="_spinner_74j3j_9",eo="_rotate_74j3j_1";var We={loading:Xn,spinner:Zn,rotate:eo};const qe=({height:e})=>{const t=e?{height:e}:{};return l.createElement("div",{className:We.loading,style:t},l.createElement("div",{className:We.spinner}))},to=e=>({apiConfig:T(e),apiConfigs:X(e)});function no({apiConfig:e,apiConfigs:t}){return s.exports.useEffect(()=>{let n="yacd";if(t.length>1)try{n=`${new URL(e.baseURL).host} - yacd`}catch{}document.title=n}),s.exports.createElement(s.exports.Fragment,null)}const oo=_(to)(no),ro=new Bt,so=new Dt({queryCache:ro,defaultOptions:{queries:{suspense:!0}}}),ne=300,He=e=>e.logs.logs,Ve=e=>e.logs.tail,ao=e=>e.logs.searchText,pa=jt(He,Ve,ao,(e,t,n)=>{const o=[];for(let r=t;r>=0;r--)o.push(e[r]);if(e.length===ne)for(let r=ne-1;r>t;r--)o.push(e[r]);return n===""?o:o.filter(r=>r.payload.toLowerCase().indexOf(n)>=0)});function fa(e){return t=>{t("logsUpdateSearchText",n=>{n.logs.searchText=e.toLowerCase()})}}function ma(e){return(t,n)=>{const o=n(),r=He(o),a=Ve(o),c=a>=ne-1?0:a+1;r[c]=e,t("logsAppendLog",i=>{i.logs.tail=c})}}const co={searchText:"",logs:[],tail:-1},z="/connections",W=[];function lo(e){let t;try{t=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}W.forEach(n=>n(t))}let oe;function io(e,t){if(oe===1&&t)return Ge(t);oe=1;const n=we(e,z),o=new WebSocket(n);if(o.addEventListener("error",()=>oe=3),o.addEventListener("message",r=>lo(r.data)),t)return Ge(t)}function Ge(e){return W.push(e),function(){const n=W.indexOf(e);W.splice(n,1)}}async function ha(e){const{url:t,init:n}=h(e);return await fetch(t+z,x(d({},n),{method:"DELETE"}))}async function uo(e){const{url:t,init:n}=h(e);return await fetch(t+z,d({},n))}async function po(e,t){const{url:n,init:o}=h(e),r=`${n}${z}/${t}`;return await fetch(r,x(d({},o),{method:"DELETE"}))}const re="/proxies";async function fo(e){const{url:t,init:n}=h(e);return await(await fetch(t+re,n)).json()}async function mo(e,t,n){const o={name:n},{url:r,init:a}=h(e),c=`${r}${re}/${t}`;return await fetch(c,x(d({},a),{method:"PUT",body:JSON.stringify(o)}))}async function ho(e,t,n="http://www.gstatic.com/generate_204"){const{url:o,init:r}=h(e),a=`timeout=5000&url=${n}`,c=`${o}${re}/${encodeURIComponent(t)}/delay?${a}`;return await fetch(c,r)}async function go(e){const{url:t,init:n}=h(e),o=await fetch(t+"/providers/proxies",n);return o.status===404?{providers:{}}:await o.json()}async function Je(e,t){const{url:n,init:o}=h(e),r=x(d({},o),{method:"PUT"});return await fetch(n+"/providers/proxies/"+t,r)}async function xo(e,t){const{url:n,init:o}=h(e),r=x(d({},o),{method:"GET"});return await fetch(n+"/providers/proxies/"+t+"/healthcheck",r)}const yo={proxies:{},delay:{},groupNames:[],showModalClosePrevConns:!1},Ke=()=>null,vo=["Direct","Fallback","Reject","Selector","URLTest","LoadBalance","Unknown"],_o=e=>e.proxies.proxies,Qe=e=>e.proxies.delay,ga=e=>e.proxies.groupNames,Eo=e=>e.proxies.proxyProviders||[],Ye=e=>e.proxies.dangleProxyNames,xa=e=>e.proxies.showModalClosePrevConns;function L(e){return async(t,n)=>{const[o,r]=await Promise.all([fo(e),go(e)]),{providers:a,proxies:c}=$o(r.providers),i=d(d({},c),o.proxies),[u,p]=No(i),m=Qe(n()),g=d({},m);for(let f=0;f{f.proxies.proxies=i,f.proxies.groupNames=u,f.proxies.delay=g,f.proxies.proxyProviders=a,f.proxies.dangleProxyNames=P})}}function ya(e,t){return async n=>{try{await Je(e,t)}catch{}n(L(e))}}function va(e,t){return async n=>{for(let o=0;o{await Xe(e,t),await n(L(e))}}async function wo(e,t,n){const o=await uo(e);o.ok||console.log("unable to fetch all connections",o.statusText);const a=(await o.json()).connections,c=[];for(const i of a)i.chains.indexOf(t)>-1&&i.chains.indexOf(n)<0&&c.push(i.id);await Promise.all(c.map(i=>po(e,i).catch(Ke)))}function bo(e,t,n){const o=[n,t];let r,a=n;for(;(r=e[a])&&r.now;)o.unshift(r.now),a=r.now;return o}async function Co(e,t,n,o,r){try{if((await mo(n,o,r)).ok===!1)throw new Error("failed to switch proxy: res.statusText")}catch(c){throw console.log(c,"failed to swith proxy"),c}if(e(L(n)),Rn(t())){const c=_o(t());et(n,c,{groupName:o,itemName:r})}}function Ze(){return e=>{e("closeModalClosePrevConns",t=>{t.proxies.showModalClosePrevConns=!1})}}function et(e,t,n){const o=bo(t,n.groupName,n.itemName);wo(e,n.groupName,o[0])}function So(e){return async(t,n)=>{var c;const o=n(),r=(c=o.proxies.switchProxyCtx)==null?void 0:c.to;if(!r){t(Ze());return}const a=o.proxies.proxies;et(e,a,r),t("closePrevConnsAndTheModal",i=>{i.proxies.showModalClosePrevConns=!1,i.proxies.switchProxyCtx=void 0})}}function Ea(e,t,n){return async(o,r)=>{Co(o,r,e,t,n).catch(Ke),o("store/proxies#switchProxy",a=>{const c=a.proxies.proxies;c[t]&&c[t].now&&(c[t].now=n)})}}function Po(e,t){return async(n,o)=>{const r=In(o()),a=await ho(e,t,r);let c="";a.ok===!1&&(c=a.statusText);const{delay:i}=await a.json(),u=Qe(o()),p=x(d({},u),{[t]:{error:c,number:i}});n("requestDelayForProxyOnce",m=>{m.proxies.delay=p})}}function tt(e,t){return async n=>{await n(Po(e,t))}}function ko(e,t){return async(n,o)=>{const r=Ye(o()),a=t.filter(c=>r.indexOf(c)>-1).map(c=>n(tt(e,c)));await Promise.all(a),await n(L(e))}}function wa(e){return async(t,n)=>{const o=Ye(n());await Promise.all(o.map(a=>t(tt(e,a))));const r=Eo(n());for(const a of r)await Xe(e,a.name);await t(L(e))}}function No(e){let t=[],n;const o=[];for(const r in e){const a=e[r];a.all&&Array.isArray(a.all)?(t.push(r),r==="GLOBAL"&&(n=a.all)):vo.indexOf(a.type)<0&&o.push(r)}return n&&(n.push("GLOBAL"),t=t.map(r=>[n.indexOf(r),r]).sort((r,a)=>r[0]-a[0]).map(r=>r[1])),[t,o]}function $o(e){const t=Object.keys(e),n=[],o={};for(let r=0;rn(r=>!r),[]);return[t,o]}const Uo="_ul_1d6f2_1",Bo="_li_1d6f2_10",Do="_close_1d6f2_28",jo="_eye_1d6f2_36",Mo="_hasSecret_1d6f2_45",Fo="_url_1d6f2_50",zo="_secret_1d6f2_54",Wo="_btn_1d6f2_72";var E={ul:Uo,li:Bo,close:Do,eye:jo,hasSecret:Mo,url:Fo,secret:zo,btn:Wo};const qo=e=>({apiConfigs:X(e),selectedClashAPIConfigIndex:Be(e)}),Ho=_(qo)(Vo);function Vo({apiConfigs:e,selectedClashAPIConfigIndex:t}){const{app:{removeClashAPIConfig:n,selectClashAPIConfig:o}}=vn(),r=s.exports.useCallback(c=>{n(c)},[n]),a=s.exports.useCallback(c=>{o(c)},[o]);return s.exports.createElement(s.exports.Fragment,null,s.exports.createElement("ul",{className:E.ul},e.map((c,i)=>s.exports.createElement("li",{className:C(E.li,{[E.hasSecret]:c.secret,[E.isSelected]:i===t}),key:c.baseURL+c.secret},s.exports.createElement(Go,{disableRemove:i===t,baseURL:c.baseURL,secret:c.secret,onRemove:r,onSelect:a})))))}function Go({baseURL:e,secret:t,disableRemove:n,onRemove:o,onSelect:r}){const[a,c]=Oo(),i=a?zt:Wt,u=s.exports.useCallback(p=>{p.stopPropagation()},[]);return s.exports.createElement(s.exports.Fragment,null,s.exports.createElement(nt,{disabled:n,onClick:()=>o({baseURL:e,secret:t}),className:E.close},s.exports.createElement(Ft,{size:20})),s.exports.createElement("span",{className:E.url,tabIndex:0,role:"button",onClick:()=>r({baseURL:e,secret:t}),onKeyUp:u},e),s.exports.createElement("span",null),t?s.exports.createElement(s.exports.Fragment,null,s.exports.createElement("span",{className:E.secret},a?t:"***"),s.exports.createElement(nt,{onClick:c,className:E.eye},s.exports.createElement(i,{size:20}))):null)}function nt({children:e,onClick:t,className:n,disabled:o}){return s.exports.createElement("button",{disabled:o,className:C(n,E.btn),onClick:t},e)}const Jo="_root_zwtea_1",Ko="_header_zwtea_5",Qo="_icon_zwtea_10",Yo="_body_zwtea_20",Xo="_hostnamePort_zwtea_24",Zo="_error_zwtea_36",er="_footer_zwtea_42";var N={root:Jo,header:Ko,icon:Qo,body:Yo,hostnamePort:Xo,error:Zo,footer:er};const tr="_btn_1h2nv_1",nr="_minimal_1h2nv_34",or="_btnStart_1h2nv_51",rr="_loadingContainer_1h2nv_58";var q={btn:tr,minimal:nr,btnStart:or,loadingContainer:rr};const sr="_sectionNameType_8lri2_1",ar="_loadingDot_8lri2_66",cr="_dot2_8lri2_1",lr="_dot1_8lri2_1",ir="_dot3_8lri2_1";var ot={sectionNameType:sr,loadingDot:ar,dot2:cr,dot1:lr,dot3:ir};function Ca({name:e,type:t}){return l.createElement("h2",{className:ot.sectionNameType},l.createElement("span",null,e),l.createElement("span",null,t))}function ur(){return l.createElement("span",{className:ot.loadingDot})}const{forwardRef:dr,useCallback:pr}=$;function fr(e,t){const w=e,{onClick:n,disabled:o=!1,isLoading:r,kind:a="primary",className:c,children:i,label:u,text:p,start:m}=w,g=D(w,["onClick","disabled","isLoading","kind","className","children","label","text","start"]),P={children:i,label:u,text:p,start:m},f=pr(b=>{r||n&&n(b)},[r,n]),y=C(q.btn,{[q.minimal]:a==="minimal"},c);return s.exports.createElement("button",d({className:y,ref:t,onClick:f,disabled:o},g),r?s.exports.createElement(s.exports.Fragment,null,s.exports.createElement("span",{style:{display:"inline-flex",opacity:0}},s.exports.createElement(rt,d({},P))),s.exports.createElement("span",{className:q.loadingContainer},s.exports.createElement(ur,null))):s.exports.createElement(rt,d({},P)))}function rt({children:e,label:t,text:n,start:o}){return s.exports.createElement(s.exports.Fragment,null,o?s.exports.createElement("span",{className:q.btnStart},typeof o=="function"?o():o):null,e||t||n)}var mr=dr(fr);const hr="_root_1or8t_1",gr="_floatAbove_1or8t_32";var st={root:hr,floatAbove:gr};const{useCallback:xr}=$;function at(a){var c=a,{id:e,label:t,value:n,onChange:o}=c,r=D(c,["id","label","value","onChange"]);const i=xr(u=>o(u),[o]);return s.exports.createElement("div",{className:st.root},s.exports.createElement("input",d({id:e,value:n,onChange:i},r)),s.exports.createElement("label",{htmlFor:e,className:st.floatAbove},t))}const yr="_path_r8pm3_1",vr="_dash_r8pm3_1";var _r={path:yr,dash:vr};function se({width:e=320,height:t=320,animate:n=!1,c0:o="currentColor",stroke:r="#eee",eye:a="#eee",mouth:c="#eee"}){const i=C({[_r.path]:n});return s.exports.createElement("svg",{width:e,height:t,viewBox:"0 0 320 320",xmlns:"http://www.w3.org/2000/svg"},s.exports.createElement("g",{fill:"none",fillRule:"evenodd"},s.exports.createElement("path",{d:"M71.689 53.055c9.23-1.487 25.684 27.263 41.411 56.663 18.572-8.017 71.708-7.717 93.775 0 4.714-15.612 31.96-57.405 41.626-56.663 3.992.088 13.07 31.705 23.309 94.96 2.743 16.949 7.537 47.492 14.38 91.63-42.339 17.834-84.37 26.751-126.095 26.751-41.724 0-83.756-8.917-126.095-26.751C52.973 116.244 65.536 54.047 71.689 53.055z",stroke:r,strokeWidth:"4",strokeLinecap:"round",fill:o,className:i}),s.exports.createElement("circle",{fill:a,cx:"216.5",cy:"181.5",r:"14.5"}),s.exports.createElement("circle",{fill:a,cx:"104.5",cy:"181.5",r:"14.5"}),s.exports.createElement("g",{stroke:c,strokeLinecap:"round",strokeWidth:"4"},s.exports.createElement("path",{d:"M175.568 218.694c-2.494 1.582-5.534 2.207-8.563 1.508-3.029-.7-5.487-2.594-7.035-5.11M143.981 218.694c2.494 1.582 5.534 2.207 8.563 1.508 3.03-.7 5.488-2.594 7.036-5.11"}))))}const{useState:ae,useRef:ct,useCallback:ce,useEffect:Er}=$,lt=0,wr=e=>({apiConfig:T(e)});function br({dispatch:e}){const[t,n]=ae(""),[o,r]=ae(""),[a,c]=ae(""),i=ct(!1),u=ct(null),p=ce(f=>{i.current=!0,c("");const y=f.target,{name:w}=y,b=y.value;switch(w){case"baseURL":n(b);break;case"secret":r(b);break;default:throw new Error(`unknown input name ${w}`)}},[]),m=ce(()=>{Cr({baseURL:t,secret:o}).then(f=>{f[0]!==lt?c(f[1]):e(Un({baseURL:t,secret:o}))})},[t,o,e]),g=ce(f=>{f.target instanceof Element&&(!f.target.tagName||f.target.tagName.toUpperCase()!=="INPUT")||f.key==="Enter"&&m()},[m]),P=async()=>{(await fetch("/")).json().then(y=>{y.hello==="clash"&&n(window.location.origin)})};return Er(()=>{P()},[]),s.exports.createElement("div",{className:N.root,ref:u,onKeyDown:g},s.exports.createElement("div",{className:N.header},s.exports.createElement("div",{className:N.icon},s.exports.createElement(se,{width:160,height:160,stroke:"var(--stroke)"}))),s.exports.createElement("div",{className:N.body},s.exports.createElement("div",{className:N.hostnamePort},s.exports.createElement(at,{id:"baseURL",name:"baseURL",label:"API Base URL",type:"text",placeholder:"http://127.0.0.1:9090",value:t,onChange:p}),s.exports.createElement(at,{id:"secret",name:"secret",label:"Secret(optional)",value:o,type:"text",onChange:p}))),s.exports.createElement("div",{className:N.error},a||null),s.exports.createElement("div",{className:N.footer},s.exports.createElement(mr,{label:"Add",onClick:m})),s.exports.createElement("div",{style:{height:20}}),s.exports.createElement(Ho,null))}var it=_(wr)(br);async function Cr(e){try{new URL(e.baseURL)}catch{if(e.baseURL){const n=e.baseURL.substring(0,7);if(n!=="http://"&&n!=="https:/")return[1,"Must starts with http:// or https://"]}return[1,"Invalid URL"]}try{const t=await Le(e);return t.status>399?[1,t.statusText]:[lt]}catch{return[1,"Failed to connect"]}}function Sr(e){let t={};const n={},o={};function r(u="default"){return n[u]=e(u).then(p=>{delete n[u],t[u]=p}).catch(p=>{o[u]=p}),n[u]}function a(u="default"){t[u]!==void 0||n[u]||r(u)}function c(u="default"){if(t[u]!==void 0)return t[u];throw o[u]?o[u]:n[u]?n[u]:r(u)}function i(u){u?delete t[u]:t={}}return{preload:a,read:c,clear:i}}const ut=Sr(()=>v(()=>import("./index.fe1062b5.js"),["assets/index.fe1062b5.js","assets/vendor.38e754a4.js"])),Pr="_iconWrapper_5pz1j_1",kr="_themeSwitchContainer_5pz1j_23";var dt={iconWrapper:Pr,themeSwitchContainer:kr};function Nr({theme:e,dispatch:t}){const{t:n}=R(),o=s.exports.useCallback(()=>{t(jn())},[t]);return s.exports.createElement(me,{label:n("theme"),"aria-label":"switch to "+(e==="light"?"dark":"light")+" theme"},s.exports.createElement("button",{className:C(dt.iconWrapper,dt.themeSwitchContainer),onClick:o},e==="light"?s.exports.createElement($r,null):s.exports.createElement(Ar,null)))}function $r(){const t=ut.read().motion;return s.exports.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},s.exports.createElement(t.path,{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z",initial:{rotate:-30},animate:{rotate:0},transition:{duration:.7}}))}function Ar(){const t=ut.read().motion;return s.exports.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},s.exports.createElement("circle",{cx:"12",cy:"12",r:"5"}),s.exports.createElement(t.g,{initial:{scale:.8},animate:{scale:1},transition:{duration:.7}},s.exports.createElement("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),s.exports.createElement("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),s.exports.createElement("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),s.exports.createElement("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),s.exports.createElement("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),s.exports.createElement("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),s.exports.createElement("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),s.exports.createElement("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})))}const Tr=e=>({theme:Z(e)}),pt=_(Tr)(Nr),le=0,ie={[le]:{message:"Browser not supported!",detail:'This browser does not support "fetch", please choose another one.'},default:{message:"Oops, something went wrong!"}};function Lr(e){const{code:t}=e;return typeof t=="number"?ie[t]:ie.default}const Ir="_content_b98hm_1",Rr="_container_b98hm_16",Or="_overlay_b98hm_22",Ur="_fixed_b98hm_26";var H={content:Ir,container:Rr,overlay:Or,fixed:Ur};const Br="_overlay_85t19_1",Dr="_content_85t19_11";var ft={overlay:Br,content:Dr};function jr(c){var i=c,{isOpen:e,onRequestClose:t,className:n,overlayClassName:o,children:r}=i,a=D(i,["isOpen","onRequestClose","className","overlayClassName","children"]);const u=C(n,ft.content),p=C(o,ft.overlay);return s.exports.createElement(he,d({isOpen:e,onRequestClose:t,className:u,overlayClassName:p},a),r)}var Mr=s.exports.memo(jr);const{useCallback:Fr,useEffect:zr}=$;function Wr({dispatch:e,apiConfig:t,modals:n}){if(!window.fetch){const{detail:r}=ie[le],a=new Error(r);throw a.code=le,a}const o=Fr(()=>{e(kn("apiConfig"))},[e]);return zr(()=>{e(Ue(t))},[e,t]),s.exports.createElement(Mr,{isOpen:n.apiConfig,className:H.content,overlayClassName:H.overlay,shouldCloseOnOverlayClick:!1,shouldCloseOnEsc:!1,onRequestClose:o},s.exports.createElement("div",{className:H.container},s.exports.createElement(it,null)),s.exports.createElement("div",{className:H.fixed},s.exports.createElement(pt,null)))}const qr=e=>({modals:e.modals,apiConfig:T(e)});var Hr=_(qr)(Wr);const Vr="_root_4m2cd_1",Gr="_yacd_4m2cd_14",Jr="_link_4m2cd_23";var ue={root:Vr,yacd:Gr,link:Jr};function Kr({width:e=24,height:t=24}={}){return l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},l.createElement("path",{d:"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"}))}const Qr="https://github.com/haishanh/yacd/issues";function Yr({message:e,detail:t}){return l.createElement("div",{className:ue.root},l.createElement("div",{className:ue.yacd},l.createElement(se,{width:150,height:150})),e?l.createElement("h1",null,e):null,t?l.createElement("p",null,t):null,l.createElement("p",null,l.createElement("a",{className:ue.link,href:Qr},l.createElement(Kr,{width:16,height:16}),"haishanh/yacd")))}class Xr extends s.exports.Component{constructor(){super(...arguments);fe(this,"state",{error:null})}static getDerivedStateFromError(t){return{error:t}}render(){if(this.state.error){const{message:t,detail:n}=Lr(this.state.error);return s.exports.createElement(Yr,{message:t,detail:n})}else return this.props.children}}const Zr="_root_ecp08_1";var mt={root:Zr};const ht=["B","KB","MB","GB","TB","PB","EB","ZB","YB"];function U(e){if(e<1e3)return e+" B";const t=Math.min(Math.floor(Math.log10(e)/3),ht.length-1);e=Number((e/Math.pow(1e3,t)).toPrecision(3));const n=ht[t];return e+" "+n}const es=qt.exports.unstable_createResource(()=>v(()=>import("./Chart.min.44f6c6c6.js").then(function(e){return e.C}),["assets/Chart.min.44f6c6c6.js","assets/vendor.38e754a4.js"]).then(e=>e.default)),gt={borderWidth:1,lineTension:0,pointRadius:0},ts={responsive:!0,maintainAspectRatio:!0,title:{display:!1},legend:{display:!0,position:"top",labels:{fontColor:"#ccc",boxWidth:20}},tooltips:{enabled:!1,mode:"index",intersect:!1,animationDuration:100},hover:{mode:"nearest",intersect:!0},scales:{xAxes:[{display:!1,gridLines:{display:!1}}],yAxes:[{display:!0,gridLines:{display:!0,color:"#555",borderDash:[3,6],drawBorder:!1},ticks:{callback(e){return U(e)+"/s "}}}]}},xt=[{down:{backgroundColor:"rgba(176, 209, 132, 0.8)",borderColor:"rgb(176, 209, 132)"},up:{backgroundColor:"rgba(181, 220, 231, 0.8)",borderColor:"rgb(181, 220, 231)"}},{up:{backgroundColor:"rgb(98, 190, 100)",borderColor:"rgb(78,146,79)"},down:{backgroundColor:"rgb(160, 230, 66)",borderColor:"rgb(110, 156, 44)"}},{up:{backgroundColor:"rgba(94, 175, 223, 0.3)",borderColor:"rgb(94, 175, 223)"},down:{backgroundColor:"rgba(139, 227, 195, 0.3)",borderColor:"rgb(139, 227, 195)"}},{up:{backgroundColor:"rgba(242, 174, 62, 0.3)",borderColor:"rgb(242, 174, 62)"},down:{backgroundColor:"rgba(69, 154, 248, 0.3)",borderColor:"rgb(69, 154, 248)"}}],{useEffect:ns}=l,os=ts;function rs(e,t,n,o,r={}){ns(()=>{const a=document.getElementById(t).getContext("2d"),c=new e(a,{type:"line",data:n,options:d(d({},os),r)}),i=o&&o.subscribe(()=>c.update());return()=>{i&&i(),c.destroy()}},[e,t,n,o,r])}const{useMemo:ss}=$,as={position:"relative",maxWidth:1e3},cs=e=>({apiConfig:T(e),selectedChartStyleIndex:Ln(e)});var ls=_(cs)(is);function is({apiConfig:e,selectedChartStyleIndex:t}){const n=es.read(),o=Y(e),{t:r}=R(),a=ss(()=>({labels:o.labels,datasets:[x(d(d({},gt),xt[t].up),{label:r("Up"),data:o.up}),x(d(d({},gt),xt[t].down),{label:r("Down"),data:o.down})]}),[o,t,r]);return rs(n,"trafficChart",a,o),s.exports.createElement("div",{style:as},s.exports.createElement("canvas",{id:"trafficChart"}))}const us="_TrafficNow_1wdp6_1",ds="_sec_1wdp6_7";var I={TrafficNow:us,sec:ds};const{useState:yt,useEffect:vt,useCallback:ps}=$,fs=e=>({apiConfig:T(e)});var ms=_(fs)(hs);function hs({apiConfig:e}){const{t}=R(),{upStr:n,downStr:o}=gs(e),{upTotal:r,dlTotal:a,connNumber:c}=xs(e);return s.exports.createElement("div",{className:I.TrafficNow},s.exports.createElement("div",{className:I.sec},s.exports.createElement("div",null,t("Upload")),s.exports.createElement("div",null,n)),s.exports.createElement("div",{className:I.sec},s.exports.createElement("div",null,t("Download")),s.exports.createElement("div",null,o)),s.exports.createElement("div",{className:I.sec},s.exports.createElement("div",null,t("Upload Total")),s.exports.createElement("div",null,r)),s.exports.createElement("div",{className:I.sec},s.exports.createElement("div",null,t("Download Total")),s.exports.createElement("div",null,a)),s.exports.createElement("div",{className:I.sec},s.exports.createElement("div",null,t("Active Connections")),s.exports.createElement("div",null,c)))}function gs(e){const[t,n]=yt({upStr:"0 B/s",downStr:"0 B/s"});return vt(()=>Y(e).subscribe(o=>n({upStr:U(o.up)+"/s",downStr:U(o.down)+"/s"})),[e]),t}function xs(e){const[t,n]=yt({upTotal:"0 B",dlTotal:"0 B",connNumber:0}),o=ps(({downloadTotal:r,uploadTotal:a,connections:c})=>{n({upTotal:U(a),dlTotal:U(r),connNumber:c.length})},[n]);return vt(()=>io(e,o),[e,o]),t}function ys(){const{t:e}=R();return l.createElement("div",null,l.createElement(Ce,{title:e("Overview")}),l.createElement("div",{className:mt.root},l.createElement("div",null,l.createElement(ms,null)),l.createElement("div",{className:mt.chart},l.createElement(s.exports.Suspense,{fallback:l.createElement(qe,{height:"200px"})},l.createElement(ls,null)))))}const vs="_lo_pmly2_1";var _s={lo:vs};function Es(){return l.createElement("div",{className:_s.lo},l.createElement(se,{width:280,height:280,animate:!0,c0:"transparent",c1:"#646464"}))}const ws="_app_1q2jw_1",bs="_content_1q2jw_17";var _t={app:ws,content:bs};const Cs="_root_wh224_1",Ss="_logoPlaceholder_wh224_7",Ps="_rows_wh224_17",ks="_row_wh224_17",Ns="_rowActive_wh224_54",$s="_label_wh224_64",As="_footer_wh224_80",Ts="_iconWrapper_wh224_92";var S={root:Cs,logoPlaceholder:Ss,rows:Ps,row:ks,rowActive:Ns,label:$s,footer:As,iconWrapper:Ts};const Ls={activity:Ht,globe:Vt,command:Gt,file:Jt,settings:Kt,link:Qt},Is=s.exports.memo(function({isActive:t,to:n,iconId:o,labelText:r}){const a=Ls[o],c=C(S.row,t?S.rowActive:null);return s.exports.createElement(ge,{to:n,className:c},s.exports.createElement(a,null),s.exports.createElement("div",{className:S.label},r))}),Rs=[{to:"/",iconId:"activity",labelText:"Overview"},{to:"/proxies",iconId:"globe",labelText:"Proxies"},{to:"/rules",iconId:"command",labelText:"Rules"},{to:"/connections",iconId:"link",labelText:"Conns"},{to:"/configs",iconId:"settings",labelText:"Config"},{to:"/logs",iconId:"file",labelText:"Logs"}];function Os(){const{t:e}=R(),t=Yt();return s.exports.createElement("div",{className:S.root},s.exports.createElement("div",{className:S.logoPlaceholder}),s.exports.createElement("div",{className:S.rows},Rs.map(({to:n,iconId:o,labelText:r})=>s.exports.createElement(Is,{key:n,to:n,isActive:t.pathname===n,iconId:o,labelText:e(r)}))),s.exports.createElement("div",{className:S.footer},s.exports.createElement(pt,null),s.exports.createElement(me,{label:e("about")},s.exports.createElement(ge,{to:"/about",className:S.iconWrapper},s.exports.createElement(Xt,{size:20})))))}const Us="_input_4ejw0_1";var Sa={input:Us};const Bs=G.default?G.default:G;function Ds({checked:e=!1,onChange:t,theme:n,name:o}){const r=n==="dark"?"#393939":"#e9e9e9";return l.createElement(Bs,{onChange:t,checked:e,uncheckedIcon:!1,checkedIcon:!1,offColor:r,onColor:"#047aff",offHandleColor:"#fff",onHandleColor:"#fff",handleDiameter:24,height:28,width:44,className:"rs",name:o})}var Pa=_(e=>({theme:Z(e)}))(Ds);const js="_ToggleSwitch_10mtp_1",Ms="_slider_10mtp_28";var Et={ToggleSwitch:js,slider:Ms};function Fs({options:e,value:t,name:n,onChange:o}){const r=s.exports.useMemo(()=>e.map(i=>i.value).indexOf(t),[e,t]),a=s.exports.useCallback(i=>{const u=Math.floor(100/e.length);if(i===e.length-1)return 100-e.length*u+u;if(i>-1)return u},[e]),c=s.exports.useMemo(()=>({width:a(r)+"%",left:r*a(0)+"%"}),[r,a]);return l.createElement("div",{className:Et.ToggleSwitch},l.createElement("div",{className:Et.slider,style:c}),e.map((i,u)=>{const p=`${n}-${i.label}`,m=u===0?"":"border-left";return l.createElement("label",{htmlFor:p,key:p,className:m,style:{width:a(u)+"%"}},l.createElement("input",{id:p,name:n,type:"radio",value:i.value,checked:t===i.value,onChange:o}),l.createElement("div",null,i.label))}))}l.memo(Fs);const zs=s.exports.lazy(()=>v(()=>import("./Connections.52bc9670.js"),["assets/Connections.52bc9670.js","assets/Connections.9de0e2a6.css","assets/vendor.38e754a4.js","assets/useRemainingViewPortHeight.7baef998.js","assets/index.9233837d.js","assets/Fab.4dc9cb99.js","assets/Fab.200e0680.css"])),Ws=s.exports.lazy(()=>v(()=>import("./Config.029b666f.js"),["assets/Config.029b666f.js","assets/Config.af7c0f33.css","assets/vendor.38e754a4.js","assets/logs.4dcb9935.js","assets/Select.29a5a6ae.js","assets/Select.9a98fc65.css"])),qs=s.exports.lazy(()=>v(()=>import("./Logs.01e28256.js"),["assets/Logs.01e28256.js","assets/Logs.8b54b7be.css","assets/vendor.38e754a4.js","assets/index.esm.edbe839b.js","assets/logs.4dcb9935.js","assets/debounce.76599460.js","assets/useRemainingViewPortHeight.7baef998.js","assets/Fab.4dc9cb99.js","assets/Fab.200e0680.css"])),Hs=s.exports.lazy(()=>v(()=>import("./Proxies.71af777a.js"),["assets/Proxies.71af777a.js","assets/Proxies.831754de.css","assets/vendor.38e754a4.js","assets/Fab.4dc9cb99.js","assets/Fab.200e0680.css","assets/TextFitler.cc7f7fa3.js","assets/TextFitler.00e03ee5.css","assets/debounce.76599460.js","assets/index.9233837d.js","assets/Select.29a5a6ae.js","assets/Select.9a98fc65.css"])),Vs=s.exports.lazy(()=>v(()=>import("./Rules.b2ac0faa.js"),["assets/Rules.b2ac0faa.js","assets/Rules.a609ca62.css","assets/vendor.38e754a4.js","assets/index.esm.edbe839b.js","assets/TextFitler.cc7f7fa3.js","assets/TextFitler.00e03ee5.css","assets/debounce.76599460.js","assets/index.9233837d.js","assets/Fab.4dc9cb99.js","assets/Fab.200e0680.css","assets/useRemainingViewPortHeight.7baef998.js"])),Gs=[{path:"/",element:l.createElement(ys,null)},{path:"/connections",element:l.createElement(zs,null)},{path:"/configs",element:l.createElement(Ws,null)},{path:"/logs",element:l.createElement(qs,null)},{path:"/proxies",element:l.createElement(Hs,null)},{path:"/rules",element:l.createElement(Vs,null)},{path:"/about",element:l.createElement(Yn,null)},!1].filter(Boolean);function Js(){return xe(Gs)}function Ks(){return l.createElement(l.Fragment,null,l.createElement(Hr,null),l.createElement(Os,null),l.createElement("div",{className:_t.content},l.createElement(s.exports.Suspense,{fallback:l.createElement(Es,null)},l.createElement(Js,null))))}function Qs(){return xe([{path:"/backend",element:l.createElement(it,null)},{path:"*",element:l.createElement(Ks,null)}])}const Ys=()=>l.createElement(Xr,null,l.createElement(Zt,null,l.createElement(_n,{initialState:To,actions:Lo},l.createElement(en,{client:so},l.createElement(tn,null,l.createElement("div",{className:_t.app},l.createElement(oo,null),l.createElement(s.exports.Suspense,{fallback:l.createElement(qe,null)},l.createElement(Qs,null)))))))),Xs=Boolean(window.location.hostname==="localhost"||window.location.hostname==="[::1]"||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function Zs(e){if("serviceWorker"in navigator){if(new URL("./",window.location.href).origin!==window.location.origin)return;window.addEventListener("load",()=>{const n=".//sw.js";Xs?(ea(n,e),navigator.serviceWorker.ready.then(()=>{console.log("This web app is being served cache-first by a service worker")})):wt(n,e)})}}function wt(e,t){navigator.serviceWorker.register(e).then(n=>{n.onupdatefound=()=>{const o=n.installing;o!=null&&(o.onstatechange=()=>{o.state==="installed"&&(navigator.serviceWorker.controller?(console.log("New content is available and will be used when all tabs for this page are closed. See https://cra.link/PWA."),t&&t.onUpdate&&t.onUpdate(n)):(console.log("Content is cached for offline use."),t&&t.onSuccess&&t.onSuccess(n)))})}}).catch(n=>{console.error("Error during service worker registration:",n)})}function ea(e,t){fetch(e,{headers:{"Service-Worker":"script"}}).then(n=>{const o=n.headers.get("content-type");n.status===404||o!=null&&o.indexOf("javascript")===-1?navigator.serviceWorker.ready.then(r=>{r.unregister().then(()=>{window.location.reload()})}):wt(e,t)}).catch(()=>{console.log("No internet connection found. App is running in offline mode.")})}const bt=document.getElementById("app");he.setAppElement(bt);nn.render(l.createElement(l.StrictMode,null,l.createElement(Ys,null)),bt);Zs();console.log("Checkout the repo: https://github.com/haishanh/yacd");console.log("Version:","0.3.4");export{aa as A,mr as B,Ce as C,da as D,Ca as E,ba as F,_o as G,Qe as H,Ea as I,la as J,ia as K,ua as L,ya as M,vo as N,va as O,wa as P,ut as Q,_a as R,se as S,Rn as T,L as U,ga as V,Eo as W,xa as X,ha as a,es as b,_ as c,gt as d,xt as e,io as f,T as g,sa as h,Ue as i,ca as j,vn as k,Pa as l,ft as m,Ln as n,Oe as o,U as p,In as q,ra as r,Sa as s,h as t,rs as u,oa as v,ao as w,fa as x,ma as y,pa as z}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/index.esm.edbe839b.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/index.esm.edbe839b.js deleted file mode 100644 index 4bbe782f..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/index.esm.edbe839b.js +++ /dev/null @@ -1 +0,0 @@ -import{r as F}from"./vendor.38e754a4.js";function A(){return A=Object.assign||function(n){for(var t=1;t=0)&&(r[a]=n[a]);return r}var at=typeof performance=="object"&&typeof performance.now=="function",q=at?function(){return performance.now()}:function(){return Date.now()};function j(n){cancelAnimationFrame(n.id)}function ot(n,t){var r=q();function i(){q()-r>=t?n.call(null):a.id=requestAnimationFrame(i)}var a={id:requestAnimationFrame(i)};return a}var C=null;function H(n){if(n===void 0&&(n=!1),C===null||n){var t=document.createElement("div"),r=t.style;r.width="50px",r.height="50px",r.overflow="scroll",r.direction="rtl";var i=document.createElement("div"),a=i.style;return a.width="100px",a.height="100px",t.appendChild(i),document.body.appendChild(t),t.scrollLeft>0?C="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?C="negative":C="positive-ascending"),document.body.removeChild(t),C}return C}var st=150,lt=function(t,r){return t};function K(n){var t,r,i=n.getItemOffset,a=n.getEstimatedTotalSize,s=n.getItemSize,c=n.getOffsetForIndexAndAlignment,u=n.getStartIndexForOffset,v=n.getStopIndexForStartIndex,O=n.initInstanceProps,S=n.shouldResetStyleCacheOnItemSizeChange,M=n.validateProps;return r=t=function(g){it(x,g);function x(f){var e;return e=g.call(this,f)||this,e._instanceProps=O(e.props,P(P(e))),e._outerRef=void 0,e._resetIsScrollingTimeoutId=null,e.state={instance:P(P(e)),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof e.props.initialScrollOffset=="number"?e.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},e._callOnItemsRendered=void 0,e._callOnItemsRendered=D(function(o,l,d,m){return e.props.onItemsRendered({overscanStartIndex:o,overscanStopIndex:l,visibleStartIndex:d,visibleStopIndex:m})}),e._callOnScroll=void 0,e._callOnScroll=D(function(o,l,d){return e.props.onScroll({scrollDirection:o,scrollOffset:l,scrollUpdateWasRequested:d})}),e._getItemStyle=void 0,e._getItemStyle=function(o){var l=e.props,d=l.direction,m=l.itemSize,z=l.layout,h=e._getItemStyleCache(S&&m,S&&z,S&&d),I;if(h.hasOwnProperty(o))I=h[o];else{var y=i(e.props,o,e._instanceProps),T=s(e.props,o,e._instanceProps),_=d==="horizontal"||z==="horizontal",b=d==="rtl",E=_?y:0;h[o]=I={position:"absolute",left:b?void 0:E,right:b?E:void 0,top:_?0:y,height:_?"100%":T,width:_?T:"100%"}}return I},e._getItemStyleCache=void 0,e._getItemStyleCache=D(function(o,l,d){return{}}),e._onScrollHorizontal=function(o){var l=o.currentTarget,d=l.clientWidth,m=l.scrollLeft,z=l.scrollWidth;e.setState(function(h){if(h.scrollOffset===m)return null;var I=e.props.direction,y=m;if(I==="rtl")switch(H()){case"negative":y=-m;break;case"positive-descending":y=z-d-m;break}return y=Math.max(0,Math.min(y,z-d)),{isScrolling:!0,scrollDirection:h.scrollOffset0)for(var R=et;R<=rt;R++)k.push(F.exports.createElement(o,{data:T,key:b(R,T),index:R,isScrolling:X?N:void 0,style:this._getItemStyle(R)}));var U=a(this.props,this._instanceProps);return F.exports.createElement(Z||J||"div",{className:l,onScroll:tt,ref:this._outerRefSetter,style:A({position:"relative",height:m,width:Y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:d},Q)},F.exports.createElement(h||I||"div",{children:k,ref:z,style:{height:L?"100%":U,pointerEvents:N?"none":void 0,width:L?U:"100%"}}))},p._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var e=this.props.itemCount;if(e>0){var o=this._getRangeToRender(),l=o[0],d=o[1],m=o[2],z=o[3];this._callOnItemsRendered(l,d,m,z)}}if(typeof this.props.onScroll=="function"){var h=this.state,I=h.scrollDirection,y=h.scrollOffset,T=h.scrollUpdateWasRequested;this._callOnScroll(I,y,T)}},p._getRangeToRender=function(){var e=this.props,o=e.itemCount,l=e.overscanCount,d=this.state,m=d.isScrolling,z=d.scrollDirection,h=d.scrollOffset;if(o===0)return[0,0,0,0];var I=u(this.props,h,this._instanceProps),y=v(this.props,I,h,this._instanceProps),T=!m||z==="backward"?Math.max(1,l):1,_=!m||z==="forward"?Math.max(1,l):1;return[Math.max(0,I-T),Math.max(0,Math.min(o-1,y+_)),I,y]},x}(F.exports.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},r}var ct=function(t,r){t.children,t.direction,t.height,t.layout,t.innerTagName,t.outerTagName,t.width,r.instance},ut=50,w=function(t,r,i){var a=t,s=a.itemSize,c=i.itemMetadataMap,u=i.lastMeasuredIndex;if(r>u){var v=0;if(u>=0){var O=c[u];v=O.offset+O.size}for(var S=u+1;S<=r;S++){var M=s(S);c[S]={offset:v,size:M},v+=M}i.lastMeasuredIndex=r}return c[r]},ft=function(t,r,i){var a=r.itemMetadataMap,s=r.lastMeasuredIndex,c=s>0?a[s].offset:0;return c>=i?V(t,r,s,0,i):dt(t,r,Math.max(0,s),i)},V=function(t,r,i,a,s){for(;a<=i;){var c=a+Math.floor((i-a)/2),u=w(t,c,r).offset;if(u===s)return c;us&&(i=c-1)}return a>0?a-1:0},dt=function(t,r,i,a){for(var s=t.itemCount,c=1;i=i&&(c=i-1),c>=0){var v=a[c];u=v.offset+v.size}var O=i-c-1,S=O*s;return u+S},ht=K({getItemOffset:function(t,r,i){return w(t,r,i).offset},getItemSize:function(t,r,i){return i.itemMetadataMap[r].size},getEstimatedTotalSize:B,getOffsetForIndexAndAlignment:function(t,r,i,a,s){var c=t.direction,u=t.height,v=t.layout,O=t.width,S=c==="horizontal"||v==="horizontal",M=S?O:u,g=w(t,r,s),x=B(t,s),p=Math.max(0,Math.min(x-M,g.offset)),f=Math.max(0,g.offset-M+g.size);switch(i==="smart"&&(a>=f-M&&a<=p+M?i="auto":i="center"),i){case"start":return p;case"end":return f;case"center":return Math.round(f+(p-f)/2);case"auto":default:return a>=f&&a<=p?a:a=f-g&&a<=p+g?i="auto":i="center"),i){case"start":return p;case"end":return f;case"center":{var e=Math.round(f+(p-f)/2);return ex+Math.floor(g/2)?x:e}case"auto":default:return a>=f&&a<=p?a:a=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function R(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),o,a=[],i;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)a.push(o.value)}catch(s){i={error:s}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}return a}function K(t,e){for(var r=0,n=e.length,o=t.length;rperformance.now():()=>Date.now(),Yr=typeof window!="undefined"?t=>window.requestAnimationFrame(t):t=>setTimeout(()=>t(Ni()),Kr);function Hi(t){let e=[],r=[],n=0,o=!1,a=!1;const i=new WeakSet,s={schedule:(u,l=!1,c=!1)=>{const v=c&&o,d=v?e:r;return l&&i.add(u),d.indexOf(u)===-1&&(d.push(u),v&&o&&(n=e.length)),u},cancel:u=>{const l=r.indexOf(u);l!==-1&&r.splice(l,1),i.delete(u)},process:u=>{if(o){a=!0;return}if(o=!0,[e,r]=[r,e],r.length=0,n=e.length,n)for(let l=0;l(t[e]=Hi(()=>Lt=!0),t),{}),$=Dt.reduce((t,e)=>{const r=ne[e];return t[e]=(n,o=!1,a=!1)=>(Lt||ki(),r.schedule(n,o,a)),t},{}),St=Dt.reduce((t,e)=>(t[e]=ne[e].cancel,t),{}),De=Dt.reduce((t,e)=>(t[e]=()=>ne[e].process(bt),t),{}),Gi=t=>ne[t].process(bt),Wr=t=>{Lt=!1,bt.delta=Oe?Kr:Math.max(Math.min(t-bt.timestamp,zi),1),bt.timestamp=t,Le=!0,Dt.forEach(Gi),Le=!1,Lt&&(Oe=!1,Yr(Wr))},ki=()=>{Lt=!0,Oe=!0,Le||Yr(Wr)},oe=()=>bt;/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */function Xr(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(t);oMath.min(Math.max(r,t),e),Ie=.001,Ki=.01,$r=10,Yi=.05,Wi=1;function Xi({duration:t=800,bounce:e=.25,velocity:r=0,mass:n=1}){let o,a;Oi(t<=$r*1e3);let i=1-e;i=ie(Yi,Wi,i),t=ie(Ki,$r,t/1e3),i<1?(o=l=>{const c=l*i,v=c*t,d=c-r,f=Fe(l,i),p=Math.exp(-v);return Ie-d/f*p},a=l=>{const v=l*i*t,d=v*r+r,f=Math.pow(i,2)*Math.pow(l,2)*t,p=Math.exp(-v),h=Fe(Math.pow(l,2),i);return(-o(l)+Ie>0?-1:1)*((d-f)*p)/h}):(o=l=>{const c=Math.exp(-l*t),v=(l-r)*t+1;return-Ie+c*v},a=l=>{const c=Math.exp(-l*t),v=(r-l)*(t*t);return c*v});const s=5/t,u=Zi(o,a,s);if(t=t*1e3,isNaN(u))return{stiffness:100,damping:10,duration:t};{const l=Math.pow(u,2)*n;return{stiffness:l,damping:i*2*Math.sqrt(n*l),duration:t}}}const $i=12;function Zi(t,e,r){let n=r;for(let o=1;o<$i;o++)n=n-t(n)/e(n);return n}function Fe(t,e){return t*Math.sqrt(1-e*e)}const qi=["duration","bounce"],Ji=["stiffness","damping","mass"];function Zr(t,e){return e.some(r=>t[r]!==void 0)}function Qi(t){let e=Object.assign({velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1},t);if(!Zr(t,Ji)&&Zr(t,qi)){const r=Xi(t);e=Object.assign(Object.assign(Object.assign({},e),r),{velocity:0,mass:1}),e.isResolvedFromDuration=!0}return e}function je(t){var{from:e=0,to:r=1,restSpeed:n=2,restDelta:o}=t,a=Xr(t,["from","to","restSpeed","restDelta"]);const i={done:!1,value:e};let{stiffness:s,damping:u,mass:l,velocity:c,duration:v,isResolvedFromDuration:d}=Qi(a),f=qr,p=qr;function h(){const x=c?-(c/1e3):0,y=r-e,b=u/(2*Math.sqrt(s*l)),S=Math.sqrt(s/l)/1e3;if(o!=null||(o=Math.abs(r-e)<=1?.01:.4),b<1){const P=Fe(S,b);f=V=>{const A=Math.exp(-b*S*V);return r-A*((x+b*S*y)/P*Math.sin(P*V)+y*Math.cos(P*V))},p=V=>{const A=Math.exp(-b*S*V);return b*S*A*(Math.sin(P*V)*(x+b*S*y)/P+y*Math.cos(P*V))-A*(Math.cos(P*V)*(x+b*S*y)-P*y*Math.sin(P*V))}}else if(b===1)f=P=>r-Math.exp(-S*P)*(y+(x+S*y)*P);else{const P=S*Math.sqrt(b*b-1);f=V=>{const A=Math.exp(-b*S*V),O=Math.min(P*V,300);return r-A*((x+b*S*y)*Math.sinh(O)+P*y*Math.cosh(O))/P}}}return h(),{next:x=>{const y=f(x);if(d)i.done=x>=v;else{const b=p(x)*1e3,S=Math.abs(b)<=n,P=Math.abs(r-y)<=o;i.done=S&&P}return i.value=i.done?r:y,i},flipTarget:()=>{c=-c,[e,r]=[r,e],h()}}}je.needsInterpolation=(t,e)=>typeof t=="string"||typeof e=="string";const qr=t=>0,It=(t,e,r)=>{const n=e-t;return n===0?1:(r-t)/n},I=(t,e,r)=>-r*t+r*e+t,Jr=(t,e)=>r=>Math.max(Math.min(r,e),t),Ft=t=>t%1?Number(t.toFixed(5)):t,jt=/(-)?([\d]*\.?[\d])+/g,Be=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,ta=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function Bt(t){return typeof t=="string"}const lt={test:t=>typeof t=="number",parse:parseFloat,transform:t=>t},_t=Object.assign(Object.assign({},lt),{transform:Jr(0,1)}),ae=Object.assign(Object.assign({},lt),{default:1}),Ut=t=>({test:e=>Bt(e)&&e.endsWith(t)&&e.split(" ").length===1,parse:parseFloat,transform:e=>`${e}${t}`}),nt=Ut("deg"),ot=Ut("%"),C=Ut("px"),ea=Ut("vh"),ra=Ut("vw"),Qr=Object.assign(Object.assign({},ot),{parse:t=>ot.parse(t)/100,transform:t=>ot.transform(t*100)}),_e=(t,e)=>r=>Boolean(Bt(r)&&ta.test(r)&&r.startsWith(t)||e&&Object.prototype.hasOwnProperty.call(r,e)),tn=(t,e,r)=>n=>{if(!Bt(n))return n;const[o,a,i,s]=n.match(jt);return{[t]:parseFloat(o),[e]:parseFloat(a),[r]:parseFloat(i),alpha:s!==void 0?parseFloat(s):1}},ct={test:_e("hsl","hue"),parse:tn("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:r,alpha:n=1})=>"hsla("+Math.round(t)+", "+ot.transform(Ft(e))+", "+ot.transform(Ft(r))+", "+Ft(_t.transform(n))+")"},na=Jr(0,255),Ue=Object.assign(Object.assign({},lt),{transform:t=>Math.round(na(t))}),it={test:_e("rgb","red"),parse:tn("red","green","blue"),transform:({red:t,green:e,blue:r,alpha:n=1})=>"rgba("+Ue.transform(t)+", "+Ue.transform(e)+", "+Ue.transform(r)+", "+Ft(_t.transform(n))+")"};function oa(t){let e="",r="",n="",o="";return t.length>5?(e=t.substr(1,2),r=t.substr(3,2),n=t.substr(5,2),o=t.substr(7,2)):(e=t.substr(1,1),r=t.substr(2,1),n=t.substr(3,1),o=t.substr(4,1),e+=e,r+=r,n+=n,o+=o),{red:parseInt(e,16),green:parseInt(r,16),blue:parseInt(n,16),alpha:o?parseInt(o,16)/255:1}}const Ne={test:_e("#"),parse:oa,transform:it.transform},H={test:t=>it.test(t)||Ne.test(t)||ct.test(t),parse:t=>it.test(t)?it.parse(t):ct.test(t)?ct.parse(t):Ne.parse(t),transform:t=>Bt(t)?t:t.hasOwnProperty("red")?it.transform(t):ct.transform(t)},en="${c}",rn="${n}";function ia(t){var e,r,n,o;return isNaN(t)&&Bt(t)&&((r=(e=t.match(jt))===null||e===void 0?void 0:e.length)!==null&&r!==void 0?r:0)+((o=(n=t.match(Be))===null||n===void 0?void 0:n.length)!==null&&o!==void 0?o:0)>0}function nn(t){typeof t=="number"&&(t=`${t}`);const e=[];let r=0;const n=t.match(Be);n&&(r=n.length,t=t.replace(Be,en),e.push(...n.map(H.parse)));const o=t.match(jt);return o&&(t=t.replace(jt,rn),e.push(...o.map(lt.parse))),{values:e,numColors:r,tokenised:t}}function on(t){return nn(t).values}function an(t){const{values:e,numColors:r,tokenised:n}=nn(t),o=e.length;return a=>{let i=n;for(let s=0;stypeof t=="number"?0:t;function sa(t){const e=on(t);return an(t)(e.map(aa))}const tt={test:ia,parse:on,createTransformer:an,getAnimatableNone:sa},ua=new Set(["brightness","contrast","saturate","opacity"]);function la(t){let[e,r]=t.slice(0,-1).split("(");if(e==="drop-shadow")return t;const[n]=r.match(jt)||[];if(!n)return t;const o=r.replace(n,"");let a=ua.has(e)?1:0;return n!==r&&(a*=100),e+"("+a+o+")"}const ca=/([a-z-]*)\(.*?\)/g,He=Object.assign(Object.assign({},tt),{getAnimatableNone:t=>{const e=t.match(ca);return e?e.map(la).join(" "):t}});function ze(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+(e-t)*6*r:r<1/2?e:r<2/3?t+(e-t)*(2/3-r)*6:t}function sn({hue:t,saturation:e,lightness:r,alpha:n}){t/=360,e/=100,r/=100;let o=0,a=0,i=0;if(!e)o=a=i=r;else{const s=r<.5?r*(1+e):r+e-r*e,u=2*r-s;o=ze(u,s,t+1/3),a=ze(u,s,t),i=ze(u,s,t-1/3)}return{red:Math.round(o*255),green:Math.round(a*255),blue:Math.round(i*255),alpha:n}}const fa=(t,e,r)=>{const n=t*t,o=e*e;return Math.sqrt(Math.max(0,r*(o-n)+n))},da=[Ne,it,ct],un=t=>da.find(e=>e.test(t)),ln=(t,e)=>{let r=un(t),n=un(e),o=r.parse(t),a=n.parse(e);r===ct&&(o=sn(o),r=it),n===ct&&(a=sn(a),n=it);const i=Object.assign({},o);return s=>{for(const u in i)u!=="alpha"&&(i[u]=fa(o[u],a[u],s));return i.alpha=I(o.alpha,a.alpha,s),r.transform(i)}},Ge=t=>typeof t=="number",va=(t,e)=>r=>e(t(r)),se=(...t)=>t.reduce(va);function cn(t,e){return Ge(t)?r=>I(t,e,r):H.test(t)?ln(t,e):vn(t,e)}const fn=(t,e)=>{const r=[...t],n=r.length,o=t.map((a,i)=>cn(a,e[i]));return a=>{for(let i=0;i{const r=Object.assign(Object.assign({},t),e),n={};for(const o in r)t[o]!==void 0&&e[o]!==void 0&&(n[o]=cn(t[o],e[o]));return o=>{for(const a in n)r[a]=n[a](o);return r}};function dn(t){const e=tt.parse(t),r=e.length;let n=0,o=0,a=0;for(let i=0;i{const r=tt.createTransformer(e),n=dn(t),o=dn(e);return n.numHSL===o.numHSL&&n.numRGB===o.numRGB&&n.numNumbers>=o.numNumbers?se(fn(n.parsed,o.parsed),r):i=>`${i>0?e:t}`},ha=(t,e)=>r=>I(t,e,r);function ma(t){if(typeof t=="number")return ha;if(typeof t=="string")return H.test(t)?ln:vn;if(Array.isArray(t))return fn;if(typeof t=="object")return pa}function ga(t,e,r){const n=[],o=r||ma(t[0]),a=t.length-1;for(let i=0;ir(It(t,e,n))}function xa(t,e){const r=t.length,n=r-1;return o=>{let a=0,i=!1;if(o<=t[0]?i=!0:o>=t[n]&&(a=n-1,i=!0),!i){let u=1;for(;uo||u===n);u++);a=u-1}const s=It(t[a],t[a+1],o);return e[a](s)}}function ke(t,e,{clamp:r=!0,ease:n,mixer:o}={}){const a=t.length;Jt(a===e.length),Jt(!n||!Array.isArray(n)||n.length===a-1),t[0]>t[a-1]&&(t=[].concat(t),e=[].concat(e),t.reverse(),e.reverse());const i=ga(e,n,o),s=a===2?ya(t,i):xa(t,i);return r?u=>s(ie(t[0],t[a-1],u)):s}const ue=t=>e=>1-t(1-e),Ke=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,ba=t=>e=>Math.pow(e,t),pn=t=>e=>e*e*((t+1)*e-t),Sa=t=>{const e=pn(t);return r=>(r*=2)<1?.5*e(r):.5*(2-Math.pow(2,-10*(r-1)))},hn=1.525,Pa=4/11,Ta=8/11,Va=9/10,Ye=t=>t,We=ba(2),Ca=ue(We),mn=Ke(We),gn=t=>1-Math.sin(Math.acos(t)),Xe=ue(gn),Ea=Ke(Xe),$e=pn(hn),wa=ue($e),Aa=Ke($e),Ma=Sa(hn),Ra=4356/361,Oa=35442/1805,La=16061/1805,le=t=>{if(t===1||t===0)return t;const e=t*t;return tt<.5?.5*(1-le(1-t*2)):.5*le(t*2-1)+.5;function Fa(t,e){return t.map(()=>e||mn).splice(0,t.length-1)}function ja(t){const e=t.length;return t.map((r,n)=>n!==0?n/(e-1):0)}function Ba(t,e){return t.map(r=>r*e)}function ce({from:t=0,to:e=1,ease:r,offset:n,duration:o=300}){const a={done:!1,value:t},i=Array.isArray(e)?e:[t,e],s=Ba(n&&n.length===i.length?n:ja(i),o);function u(){return ke(s,i,{ease:Array.isArray(r)?r:Fa(i,r)})}let l=u();return{next:c=>(a.value=l(c),a.done=c>=o,a),flipTarget:()=>{i.reverse(),l=u()}}}function _a({velocity:t=0,from:e=0,power:r=.8,timeConstant:n=350,restDelta:o=.5,modifyTarget:a}){const i={done:!1,value:e};let s=r*t;const u=e+s,l=a===void 0?u:a(u);return l!==u&&(s=l-e),{next:c=>{const v=-s*Math.exp(-c/n);return i.done=!(v>o||v<-o),i.value=i.done?l:l+v,i},flipTarget:()=>{}}}const yn={keyframes:ce,spring:je,decay:_a};function Ua(t){if(Array.isArray(t.to))return ce;if(yn[t.type])return yn[t.type];const e=new Set(Object.keys(t));return e.has("ease")||e.has("duration")&&!e.has("dampingRatio")?ce:e.has("dampingRatio")||e.has("stiffness")||e.has("mass")||e.has("damping")||e.has("restSpeed")||e.has("restDelta")?je:ce}function xn(t,e,r=0){return t-e-r}function Na(t,e,r=0,n=!0){return n?xn(e+-t,e,r):e-(t-e)+r}function Ha(t,e,r,n){return n?t>=e+r:t<=-r}const za=t=>{const e=({delta:r})=>t(r);return{start:()=>$.update(e,!0),stop:()=>St.update(e)}};function Ze(t){var e,r,{from:n,autoplay:o=!0,driver:a=za,elapsed:i=0,repeat:s=0,repeatType:u="loop",repeatDelay:l=0,onPlay:c,onStop:v,onComplete:d,onRepeat:f,onUpdate:p}=t,h=Xr(t,["from","autoplay","driver","elapsed","repeat","repeatType","repeatDelay","onPlay","onStop","onComplete","onRepeat","onUpdate"]);let{to:x}=h,y,b=0,S=h.duration,P,V=!1,A=!0,O;const w=Ua(h);((r=(e=w).needsInterpolation)===null||r===void 0?void 0:r.call(e,n,x))&&(O=ke([0,100],[n,x],{clamp:!1}),n=0,x=100);const M=w(Object.assign(Object.assign({},h),{from:n,to:x}));function F(){b++,u==="reverse"?(A=b%2==0,i=Na(i,S,l,A)):(i=xn(i,S,l),u==="mirror"&&M.flipTarget()),V=!1,f&&f()}function _(){y.stop(),d&&d()}function z(Z){if(A||(Z=-Z),i+=Z,!V){const rt=M.next(Math.max(0,i));P=rt.value,O&&(P=O(P)),V=A?rt.done:i<=0}p==null||p(P),V&&(b===0&&(S!=null||(S=i)),b{v==null||v(),y.stop()}}}function bn(t,e){return e?t*(1e3/e):0}function Ga({from:t=0,velocity:e=0,min:r,max:n,power:o=.8,timeConstant:a=750,bounceStiffness:i=500,bounceDamping:s=10,restDelta:u=1,modifyTarget:l,driver:c,onUpdate:v,onComplete:d,onStop:f}){let p;function h(S){return r!==void 0&&Sn}function x(S){return r===void 0?n:n===void 0||Math.abs(r-S){var V;v==null||v(P),(V=S.onUpdate)===null||V===void 0||V.call(S,P)},onComplete:d,onStop:f}))}function b(S){y(Object.assign({type:"spring",stiffness:i,damping:s,restDelta:u},S))}if(h(t))b({from:t,velocity:e,to:x(t)});else{let S=o*e+t;typeof l!="undefined"&&(S=l(S));const P=x(S),V=P===r?-1:1;let A,O;const w=M=>{A=O,O=M,e=bn(M-A,oe().delta),(V===1&&M>P||V===-1&&Mp==null?void 0:p.stop()}}const qe=t=>t.hasOwnProperty("x")&&t.hasOwnProperty("y"),Sn=t=>qe(t)&&t.hasOwnProperty("z"),fe=(t,e)=>Math.abs(t-e);function Pn(t,e){if(Ge(t)&&Ge(e))return fe(t,e);if(qe(t)&&qe(e)){const r=fe(t.x,e.x),n=fe(t.y,e.y),o=Sn(t)&&Sn(e)?fe(t.z,e.z):0;return Math.sqrt(Math.pow(r,2)+Math.pow(n,2)+Math.pow(o,2))}}const ka=(t,e,r)=>{const n=e-t;return((r-t)%n+n)%n+t},Tn=(t,e)=>1-3*e+3*t,Vn=(t,e)=>3*e-6*t,Cn=t=>3*t,de=(t,e,r)=>((Tn(e,r)*t+Vn(e,r))*t+Cn(e))*t,En=(t,e,r)=>3*Tn(e,r)*t*t+2*Vn(e,r)*t+Cn(e),Ka=1e-7,Ya=10;function Wa(t,e,r,n,o){let a,i,s=0;do i=e+(r-e)/2,a=de(i,n,o)-t,a>0?r=i:e=i;while(Math.abs(a)>Ka&&++s=$a?Za(i,v,t,r):d===0?v:Wa(i,s,s+pe,t,r)}return i=>i===0||i===1?i:de(a(i),e,n)}function Je(t,e){t.indexOf(e)===-1&&t.push(e)}function Qe(t,e){var r=t.indexOf(e);r>-1&&t.splice(r,1)}function Ja(t,e,r){var n=R(t),o=n.slice(0),a=e<0?o.length+e:e;if(a>=0&&ae?1:r(It(t,e,n))}}function Bn(t,e){t.min=e.min,t.max=e.max}function q(t,e){Bn(t.x,e.x),Bn(t.y,e.y)}function ir(t){return t===void 0||t===1}function _n(t){var e=t.scale,r=t.scaleX,n=t.scaleY;return!ir(e)||!ir(r)||!ir(n)}function at(t){return _n(t)||Un(t.x)||Un(t.y)||t.z||t.rotate||t.rotateX||t.rotateY}function Un(t){return t&&t!=="0%"}function ge(t,e,r){var n=t-r,o=e*n;return r+o}function Nn(t,e,r,n,o){return o!==void 0&&(t=ge(t,o,n)),ge(t,r,n)+e}function ar(t,e,r,n,o){e===void 0&&(e=0),r===void 0&&(r=1),t.min=Nn(t.min,e,r,n,o),t.max=Nn(t.max,e,r,n,o)}function Hn(t,e){var r=e.x,n=e.y;ar(t.x,r.translate,r.scale,r.originPoint),ar(t.y,n.translate,n.scale,n.originPoint)}function gs(t,e,r,n){var o,a;n===void 0&&(n=!1);var i=r.length;if(!!i){e.x=e.y=1;for(var s,u,l=0;l=0;o--){var a=this.members[o];if(a.isPresent!==!1){n=a;break}}return n?(this.promote(n),!0):!1},t.prototype.promote=function(e,r){var n,o=this.lead;if(e!==o&&(this.prevLead=o,this.lead=e,e.show(),o)){o.instance&&o.scheduleRender(),e.scheduleRender(),e.resumeFrom=o,r&&(e.resumeFrom.preserveOpacity=!0),o.snapshot&&(e.snapshot=o.snapshot,e.snapshot.latestValues=o.animationValues||o.latestValues,e.snapshot.isShared=!0),((n=e.root)===null||n===void 0?void 0:n.isUpdating)&&(e.isLayoutDirty=!0);var a=e.options.crossfade;a===!1&&o.hide()}},t.prototype.exitAnimationComplete=function(){this.members.forEach(function(e){var r,n,o,a,i;(n=(r=e.options).onExitComplete)===null||n===void 0||n.call(r),(i=(o=e.resumingFrom)===null||o===void 0?void 0:(a=o.options).onExitComplete)===null||i===void 0||i.call(a)})},t.prototype.scheduleRender=function(){this.members.forEach(function(e){e.instance&&e.scheduleRender(!1)})},t.prototype.removeLeadSnapshot=function(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)},t}(),ye={};function Cs(t){Object.assign(ye,t)}var Es="translate3d(0px, 0px, 0) scale(1, 1)";function eo(t,e,r){var n=t.x.translate/e.x,o=t.y.translate/e.y,a="translate3d("+n+"px, "+o+"px, 0) ";if(r){var i=r.rotate,s=r.rotateX,u=r.rotateY;i&&(a+="rotate("+i+"deg) "),s&&(a+="rotateX("+s+"deg) "),u&&(a+="rotateY("+u+"deg) ")}return a+="scale("+t.x.scale+", "+t.y.scale+")",a===Es?"none":a}function J(t){return[t("x"),t("y")]}var sr=["","X","Y","Z"],ws=["translate","scale","rotate","skew"],Kt=["transformPerspective","x","y","z"];ws.forEach(function(t){return sr.forEach(function(e){return Kt.push(t+e)})});function As(t,e){return Kt.indexOf(t)-Kt.indexOf(e)}var Ms=new Set(Kt);function xe(t){return Ms.has(t)}var Rs=new Set(["originX","originY","originZ"]);function ro(t){return Rs.has(t)}var Os=function(t,e){return t.depth-e.depth},Ls=function(){function t(){this.children=[],this.isDirty=!1}return t.prototype.add=function(e){Je(this.children,e),this.isDirty=!0},t.prototype.remove=function(e){Qe(this.children,e),this.isDirty=!0},t.prototype.forEach=function(e){this.isDirty&&this.children.sort(Os),this.isDirty=!1,this.children.forEach(e)},t}(),Ds=function(t){return Boolean(t&&typeof t=="object"&&t.mix&&t.toValue)},Is=function(t){return Ht(t)?t[t.length-1]||0:t};function be(t){var e=W(t)?t.get():t;return Ds(e)?e.toValue():e}var no=1e3,Yt={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function oo(t){var e=t.attachResizeListener,r=t.defaultParent,n=t.measureScroll,o=t.resetTransform;return function(){function a(i,s,u){var l=this;s===void 0&&(s={}),u===void 0&&(u=r==null?void 0:r()),this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.potentialNodes=new Map,this.checkUpdateFailed=function(){l.isUpdating&&(l.isUpdating=!1,l.clearAllSnapshots())},this.updateProjection=function(){l.nodes.forEach(Ns),l.nodes.forEach(Hs)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.id=i,this.latestValues=s,this.root=u?u.root||u:this,this.path=u?K(K([],R(u.path),!1),[u]):[],this.parent=u,this.depth=u?u.depth+1:0,i&&this.root.registerPotentialNode(i,this);for(var c=0;c=0;n--)if(Boolean(t.path[n].instance)){r=t.path[n];break}var o=r&&r!==t.root?r.instance:document,a=o.querySelector('[data-projection-id="'+e+'"]');a&&t.mount(a,!0)}function uo(t){t.min=Math.round(t.min),t.max=Math.round(t.max)}function lo(t){uo(t.x),uo(t.y)}var Xs=1;function $s(){return j(function(){if(Yt.hasEverUpdated)return Xs++})}var Wt=m.exports.createContext({}),co=m.exports.createContext({});function Zs(t,e,r,n){var o,a=e.layoutId,i=e.layout,s=e.drag,u=e.dragConstraints,l=e.layoutScroll,c=m.exports.useContext(co);!n||!r||(r==null?void 0:r.projection)||(r.projection=new n(t,r.getLatestValues(),(o=r.parent)===null||o===void 0?void 0:o.projection),r.projection.setOptions({layoutId:a,layout:i,alwaysMeasureLayout:Boolean(s)||u&&xt(u),visualElement:r,scheduleRender:function(){return r.scheduleRender()},animationType:typeof i=="string"?i:"both",initialPromotionConfig:c,layoutScroll:l}))}var qs=function(t){_r(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.getSnapshotBeforeUpdate=function(){return this.updateProps(),null},e.prototype.componentDidUpdate=function(){},e.prototype.updateProps=function(){var r=this.props,n=r.visualElement,o=r.props;n&&n.setProps(o)},e.prototype.render=function(){return this.props.children},e}(we.Component);function fo(t){var e=t.preloadedFeatures,r=t.createVisualElement,n=t.projectionNodeConstructor,o=t.useRender,a=t.useVisualState,i=t.Component;e&&Me(e);function s(u,l){var c=Js(u);u=g(g({},u),{layoutId:c});var v=m.exports.useContext(gt),d=null,f=Ui(u),p=$s(),h=a(u,v.isStatic);return!v.isStatic&&Ot&&(f.visualElement=Ii(i,h,g(g({},v),u),r),Zs(p,u,f.visualElement,n||Rt.projectionNodeConstructor),d=Di(u,f.visualElement)),m.exports.createElement(qs,{visualElement:f.visualElement,props:g(g({},v),u)},d,m.exports.createElement(Qt.Provider,{value:f},o(i,u,p,Fi(h,f.visualElement,l),h,v.isStatic)))}return m.exports.forwardRef(s)}function Js(t){var e,r=t.layoutId,n=(e=m.exports.useContext(Wt))===null||e===void 0?void 0:e.id;return n&&r!==void 0?n+"-"+r:r}function vo(t){function e(n,o){return o===void 0&&(o={}),fo(t(n,o))}var r=new Map;return new Proxy(e,{get:function(n,o){return r.has(o)||r.set(o,e(o)),r.get(o)}})}var Qs=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","svg","switch","symbol","text","tspan","use","view"];function ur(t){return typeof t!="string"||t.includes("-")?!1:!!(Qs.indexOf(t)>-1||/[A-Z]/.test(t))}function po(t,e){var r=e.layout,n=e.layoutId;return xe(t)||ro(t)||(r||n!==void 0)&&(!!ye[t]||t==="opacity")}var tu={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"};function eu(t,e,r,n){var o=t.transform,a=t.transformKeys,i=e.enableHardwareAcceleration,s=i===void 0?!0:i,u=e.allowTransformNone,l=u===void 0?!0:u,c="";a.sort(As);for(var v=!1,d=a.length,f=0;fb&&_,rt=Array.isArray(F)?F:[F],ut=rt.reduce(a,{});z===!1&&(ut={});var At=M.prevResolvedValues,ht=At===void 0?{}:At,Zt=g(g({},ht),ut),mt=function(E){Z=!0,x.delete(E),M.needsAnimating[E]=!0};for(var G in Zt){var L=ut[G],T=ht[G];y.hasOwnProperty(G)||(L!==T?Ht(L)&&Ht(T)?Uo(L,T)?M.protectedKeys[G]=!0:mt(G):L!==void 0?mt(G):x.add(G):L!==void 0&&x.has(G)?mt(G):M.protectedKeys[G]=!0)}M.prevProp=F,M.prevResolvedValues=ut,M.isActive&&(y=g(g({},y),ut)),o&&t.blockInitialAnimation&&(Z=!1),Z&&!N&&h.push.apply(h,K([],R(rt.map(function(E){return{animation:E,options:g({type:w},c)}}))))},P=0;P=3;if(!(!f&&!p)){var h=d.point,x=oe().timestamp;o.history.push(g(g({},h),{timestamp:x}));var y=o.handlers,b=y.onStart,S=y.onMove;f||(b&&b(o.lastMoveEvent,d),o.startEvent=o.lastMoveEvent),S&&S(o.lastMoveEvent,d)}}},this.handlePointerMove=function(d,f){if(o.lastMoveEvent=d,o.lastMoveEventInfo=Er(f,o.transformPagePoint),Eo(d)&&d.buttons===0){o.handlePointerUp(d,f);return}$.update(o.updatePoint,!0)},this.handlePointerUp=function(d,f){o.end();var p=o.handlers,h=p.onEnd,x=p.onSessionEnd,y=wr(Er(f,o.transformPagePoint),o.history);o.startEvent&&h&&h(d,y),x&&x(d,y)},!(wo(e)&&e.touches.length>1)){this.handlers=r,this.transformPagePoint=i;var s=gr(e),u=Er(s,this.transformPagePoint),l=u.point,c=oe().timestamp;this.history=[g(g({},l),{timestamp:c})];var v=r.onSessionStart;v&&v(e,wr(u,this.history)),this.removeListeners=se(Vt(window,"pointermove",this.handlePointerMove),Vt(window,"pointerup",this.handlePointerUp),Vt(window,"pointercancel",this.handlePointerUp))}}return t.prototype.updateHandlers=function(e){this.handlers=e},t.prototype.end=function(){this.removeListeners&&this.removeListeners(),St.update(this.updatePoint)},t}();function Er(t,e){return e?{point:e(t.point)}:t}function Wo(t,e){return{x:t.x-e.x,y:t.y-e.y}}function wr(t,e){var r=t.point;return{point:r,delta:Wo(r,Xo(e)),offset:Wo(r,ll(e)),velocity:cl(e,.1)}}function ll(t){return t[0]}function Xo(t){return t[t.length-1]}function cl(t,e){if(t.length<2)return{x:0,y:0};for(var r=t.length-1,n=null,o=Xo(t);r>=0&&(n=t[r],!(o.timestamp-n.timestamp>he(e)));)r--;if(!n)return{x:0,y:0};var a=(o.timestamp-n.timestamp)/1e3;if(a===0)return{x:0,y:0};var i={x:(o.x-n.x)/a,y:(o.y-n.y)/a};return i.x===1/0&&(i.x=0),i.y===1/0&&(i.y=0),i}function fl(t,e,r){var n=e.min,o=e.max;return n!==void 0&&to&&(t=r?I(o,t,r.max):Math.min(t,o)),t}function $o(t,e,r){return{min:e!==void 0?t.min+e:void 0,max:r!==void 0?t.max+r-(t.max-t.min):void 0}}function dl(t,e){var r=e.top,n=e.left,o=e.bottom,a=e.right;return{x:$o(t.x,n,a),y:$o(t.y,r,o)}}function Zo(t,e){var r,n=e.min-t.min,o=e.max-t.max;return e.max-e.minn?r=It(e.min,e.max-n,t.min):n>o&&(r=It(t.min,t.max-o,e.min)),ie(0,1,r)}function hl(t,e){var r={};return e.min!==void 0&&(r.min=e.min-t.min),e.max!==void 0&&(r.max=e.max-t.min),r}var Ar=.35;function ml(t){return t===void 0&&(t=Ar),t===!1?t=0:t===!0&&(t=Ar),{x:qo(t,"left","right"),y:qo(t,"top","bottom")}}function qo(t,e,r){return{min:Jo(t,e),max:Jo(t,r)}}function Jo(t,e){var r;return typeof t=="number"?t:(r=t[e])!==null&&r!==void 0?r:0}function Qo(t){var e=t.top,r=t.left,n=t.right,o=t.bottom;return{x:{min:r,max:n},y:{min:e,max:o}}}function gl(t){var e=t.x,r=t.y;return{top:r.min,right:e.max,bottom:r.max,left:e.min}}function yl(t,e){if(!e)return t;var r=e({x:t.left,y:t.top}),n=e({x:t.right,y:t.bottom});return{top:r.y,left:r.x,bottom:n.y,right:n.x}}function ti(t,e){return Qo(yl(t.getBoundingClientRect(),e))}function xl(t,e,r){var n=ti(t,r),o=e.scroll;return o&&(Pt(n.x,o.x),Pt(n.y,o.y)),n}var bl=new WeakMap,Sl=function(){function t(e){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=B(),this.visualElement=e}return t.prototype.start=function(e,r){var n=this,o=r===void 0?{}:r,a=o.snapToCursor,i=a===void 0?!1:a;if(this.visualElement.isPresent!==!1){var s=function(v){n.stopAnimation(),i&&n.snapToCursor(gr(v,"page").point)},u=function(v,d){var f,p=n.getProps(),h=p.drag,x=p.dragPropagation,y=p.onDragStart;h&&!x&&(n.openGlobalLock&&n.openGlobalLock(),n.openGlobalLock=Do(h),!n.openGlobalLock)||(n.isDragging=!0,n.currentDirection=null,n.resolveConstraints(),n.visualElement.projection&&(n.visualElement.projection.isAnimationBlocked=!0,n.visualElement.projection.target=void 0),J(function(b){var S,P,V=n.getAxisMotionValue(b).get()||0;if(ot.test(V)){var A=(P=(S=n.visualElement.projection)===null||S===void 0?void 0:S.layout)===null||P===void 0?void 0:P.actual[b];if(A){var O=et(A);V=O*(parseFloat(V)/100)}}n.originPoint[b]=V}),y==null||y(v,d),(f=n.visualElement.animationState)===null||f===void 0||f.setActive(D.Drag,!0))},l=function(v,d){var f=n.getProps(),p=f.dragPropagation,h=f.dragDirectionLock,x=f.onDirectionLock,y=f.onDrag;if(!(!p&&!n.openGlobalLock)){var b=d.offset;if(h&&n.currentDirection===null){n.currentDirection=Pl(b),n.currentDirection!==null&&(x==null||x(n.currentDirection));return}n.updateAxis("x",d.point,b),n.updateAxis("y",d.point,b),n.visualElement.syncRender(),y==null||y(v,d)}},c=function(v,d){return n.stop(v,d)};this.panSession=new Yo(e,{onSessionStart:s,onStart:u,onMove:l,onSessionEnd:c},{transformPagePoint:this.visualElement.getTransformPagePoint()})}},t.prototype.stop=function(e,r){var n=this.isDragging;if(this.cancel(),!!n){var o=r.velocity;this.startAnimation(o);var a=this.getProps().onDragEnd;a==null||a(e,r)}},t.prototype.cancel=function(){var e,r;this.isDragging=!1,this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!1),(e=this.panSession)===null||e===void 0||e.end(),this.panSession=void 0;var n=this.getProps().dragPropagation;!n&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),(r=this.visualElement.animationState)===null||r===void 0||r.setActive(D.Drag,!1)},t.prototype.updateAxis=function(e,r,n){var o=this.getProps().drag;if(!(!n||!Te(e,o,this.currentDirection))){var a=this.getAxisMotionValue(e),i=this.originPoint[e]+n[e];this.constraints&&this.constraints[e]&&(i=fl(i,this.constraints[e],this.elastic[e])),a.set(i)}},t.prototype.resolveConstraints=function(){var e=this,r=this.getProps(),n=r.dragConstraints,o=r.dragElastic,a=(this.visualElement.projection||{}).layout,i=this.constraints;n&&xt(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):n&&a?this.constraints=dl(a.actual,n):this.constraints=!1,this.elastic=ml(o),i!==this.constraints&&a&&this.constraints&&!this.hasMutatedConstraints&&J(function(s){e.getAxisMotionValue(s)&&(e.constraints[s]=hl(a.actual[s],e.constraints[s]))})},t.prototype.resolveRefConstraints=function(){var e=this.getProps(),r=e.dragConstraints,n=e.onMeasureDragConstraints;if(!r||!xt(r))return!1;var o=r.current,a=this.visualElement.projection;if(!a||!a.layout)return!1;var i=xl(o,a.root,this.visualElement.getTransformPagePoint()),s=vl(a.layout.actual,i);if(n){var u=n(gl(s));this.hasMutatedConstraints=!!u,u&&(s=Qo(u))}return s},t.prototype.startAnimation=function(e){var r=this,n=this.getProps(),o=n.drag,a=n.dragMomentum,i=n.dragElastic,s=n.dragTransition,u=n.dragSnapToOrigin,l=n.onDragTransitionEnd,c=this.constraints||{},v=J(function(d){var f;if(!!Te(d,o,r.currentDirection)){var p=(f=c==null?void 0:c[d])!==null&&f!==void 0?f:{};u&&(p={min:0,max:0});var h=i?200:1e6,x=i?40:1e7,y=g(g({type:"inertia",velocity:a?e[d]:0,bounceStiffness:h,bounceDamping:x,timeConstant:750,restDelta:1,restSpeed:10},s),p);return r.startAxisValueAnimation(d,y)}});return Promise.all(v).then(l)},t.prototype.startAxisValueAnimation=function(e,r){var n=this.getAxisMotionValue(e);return or(e,n,0,r)},t.prototype.stopAnimation=function(){var e=this;J(function(r){return e.getAxisMotionValue(r).stop()})},t.prototype.getAxisMotionValue=function(e){var r,n,o="_drag"+e.toUpperCase(),a=this.visualElement.getProps()[o];return a||this.visualElement.getValue(e,(n=(r=this.visualElement.getProps().initial)===null||r===void 0?void 0:r[e])!==null&&n!==void 0?n:0)},t.prototype.snapToCursor=function(e){var r=this;J(function(n){var o=r.getProps().drag;if(!!Te(n,o,r.currentDirection)){var a=r.visualElement.projection,i=r.getAxisMotionValue(n);if(a&&a.layout){var s=a.layout.actual[n],u=s.min,l=s.max;i.set(e[n]-I(u,l,.5))}}})},t.prototype.scalePositionWithinConstraints=function(){var e=this,r,n=this.getProps(),o=n.drag,a=n.dragConstraints,i=this.visualElement.projection;if(!(!xt(a)||!i||!this.constraints)){this.stopAnimation();var s={x:0,y:0};J(function(l){var c=e.getAxisMotionValue(l);if(c){var v=c.get();s[l]=pl({min:v,max:v},e.constraints[l])}});var u=this.visualElement.getProps().transformTemplate;this.visualElement.getInstance().style.transform=u?u({},""):"none",(r=i.root)===null||r===void 0||r.updateScroll(),i.updateLayout(),this.resolveConstraints(),J(function(l){if(!!Te(l,o,null)){var c=e.getAxisMotionValue(l),v=e.constraints[l],d=v.min,f=v.max;c.set(I(d,f,s[l]))}})}},t.prototype.addListeners=function(){var e=this,r;bl.set(this.visualElement,this);var n=this.visualElement.getInstance(),o=Vt(n,"pointerdown",function(l){var c=e.getProps(),v=c.drag,d=c.dragListener,f=d===void 0?!0:d;v&&f&&e.start(l)}),a=function(){var l=e.getProps().dragConstraints;xt(l)&&(e.constraints=e.resolveRefConstraints())},i=this.visualElement.projection,s=i.addEventListener("measure",a);i&&!i.layout&&((r=i.root)===null||r===void 0||r.updateScroll(),i.updateLayout()),a();var u=dt(window,"resize",function(){e.scalePositionWithinConstraints()});return i.addEventListener("didUpdate",function(l){var c=l.delta,v=l.hasLayoutChanged;e.isDragging&&v&&(J(function(d){var f=e.getAxisMotionValue(d);!f||(e.originPoint[d]+=c[d].translate,f.set(f.get()+c[d].translate))}),e.visualElement.syncRender())}),function(){u(),o(),s()}},t.prototype.getProps=function(){var e=this.visualElement.getProps(),r=e.drag,n=r===void 0?!1:r,o=e.dragDirectionLock,a=o===void 0?!1:o,i=e.dragPropagation,s=i===void 0?!1:i,u=e.dragConstraints,l=u===void 0?!1:u,c=e.dragElastic,v=c===void 0?Ar:c,d=e.dragMomentum,f=d===void 0?!0:d;return g(g({},e),{drag:n,dragDirectionLock:a,dragPropagation:s,dragConstraints:l,dragElastic:v,dragMomentum:f})},t}();function Te(t,e,r){return(e===!0||e===t)&&(r===null||r===t)}function Pl(t,e){e===void 0&&(e=10);var r=null;return Math.abs(t.y)>e?r="y":Math.abs(t.x)>e&&(r="x"),r}function Tl(t){var e=t.dragControls,r=t.visualElement,n=j(function(){return new Sl(r)});m.exports.useEffect(function(){return e&&e.subscribe(n)},[n,e]),m.exports.useEffect(function(){return n.addListeners()},[n])}function Vl(t){var e=t.onPan,r=t.onPanStart,n=t.onPanEnd,o=t.onPanSessionStart,a=t.visualElement,i=e||r||n||o,s=m.exports.useRef(null),u=m.exports.useContext(gt).transformPagePoint,l={onSessionStart:o,onStart:r,onMove:e,onEnd:function(v,d){s.current=null,n&&n(v,d)}};m.exports.useEffect(function(){s.current!==null&&s.current.updateHandlers(l)});function c(v){s.current=new Yo(v,l,{transformPagePoint:u})}Pe(a,"pointerdown",i&&c),yr(function(){return s.current&&s.current.end()})}var ei={pan:st(Vl),drag:st(Tl)},Ve=["LayoutMeasure","BeforeLayoutMeasure","LayoutUpdate","ViewportBoxUpdate","Update","Render","AnimationComplete","LayoutAnimationComplete","AnimationStart","SetAxisTarget","Unmount"];function Cl(){var t=Ve.map(function(){return new Nt}),e={},r={clearAllListeners:function(){return t.forEach(function(n){return n.clear()})},updatePropListeners:function(n){Ve.forEach(function(o){var a,i="on"+o,s=n[i];(a=e[o])===null||a===void 0||a.call(e),s&&(e[o]=r[i](s))})}};return t.forEach(function(n,o){r["on"+Ve[o]]=function(a){return n.add(a)},r["notify"+Ve[o]]=function(){for(var a=[],i=0;i5)return o;var u=tt.createTransformer(t),l=typeof s[0]!="number"?1:0,c=n.x.scale*r.x,v=n.y.scale*r.y;s[0+l]/=c,s[1+l]/=v;var d=I(c,v,.5);typeof s[2+l]=="number"&&(s[2+l]/=d),typeof s[3+l]=="number"&&(s[3+l]/=d);var f=u(s);if(a){var p=0;f=f.replace(vi,function(){var h=i[p];return p++,h})}return f}},Gl=function(t){_r(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.componentDidMount=function(){var r=this,n=this.props,o=n.visualElement,a=n.layoutGroup,i=n.switchLayoutGroup,s=n.layoutId,u=o.projection;Cs(Kl),u&&((a==null?void 0:a.group)&&a.group.add(u),(i==null?void 0:i.register)&&s&&i.register(u),u.root.didUpdate(),u.addEventListener("animationComplete",function(){r.safeToRemove()}),u.setOptions(g(g({},u.options),{onExitComplete:function(){return r.safeToRemove()}}))),Yt.hasEverUpdated=!0},e.prototype.getSnapshotBeforeUpdate=function(r){var n=this,o=this.props,a=o.layoutDependency,i=o.visualElement,s=o.drag,u=o.isPresent,l=i.projection;return l&&(l.isPresent=u,s||r.layoutDependency!==a||a===void 0?l.willUpdate():this.safeToRemove(),r.isPresent!==u&&(u?l.promote():l.relegate()||$.postRender(function(){var c;((c=l.getStack())===null||c===void 0?void 0:c.members.length)||n.safeToRemove()}))),null},e.prototype.componentDidUpdate=function(){var r=this.props.visualElement.projection;r&&(r.root.didUpdate(),!r.currentAnimation&&r.isLead()&&this.safeToRemove())},e.prototype.componentWillUnmount=function(){var r=this.props,n=r.visualElement,o=r.layoutGroup,a=r.switchLayoutGroup,i=n.projection;i&&(i.scheduleCheckAfterUnmount(),(o==null?void 0:o.group)&&o.group.remove(i),(a==null?void 0:a.deregister)&&a.deregister(i))},e.prototype.safeToRemove=function(){var r=this.props.safeToRemove;r==null||r()},e.prototype.render=function(){return null},e}(we.Component);function kl(t){var e=R(_o(),2),r=e[0],n=e[1],o=m.exports.useContext(Wt);return we.createElement(Gl,g({},t,{layoutGroup:o,switchLayoutGroup:m.exports.useContext(co),isPresent:r,safeToRemove:n}))}var Kl={borderRadius:g(g({},$t),{applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]}),borderTopLeftRadius:$t,borderTopRightRadius:$t,borderBottomLeftRadius:$t,borderBottomRightRadius:$t,boxShadow:zl},pi={measureLayout:kl},Yl=oo({attachResizeListener:function(t,e){return t.addEventListener("resize",e,{passive:!0}),function(){return t.removeEventListener("resize",e)}},measureScroll:function(){return{x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}}}),pt={current:void 0},Dr=oo({measureScroll:function(t){return{x:t.scrollLeft,y:t.scrollTop}},defaultParent:function(){if(!pt.current){var t=new Yl(0,{});t.mount(window),t.setOptions({layoutScroll:!0}),pt.current=t}return pt.current},resetTransform:function(t,e){t.style.transform=e!=null?e:"none"}}),hi=g(g(g(g({},Ko),Bo),ei),pi),mi=vo(function(t,e){return hr(t,e,hi,Lr,Dr)});function Ec(t){return fo(hr(t,{forwardMotionProps:!1},hi,Lr,Dr))}var wc=vo(hr);function gi(){var t=m.exports.useRef(!1),e=R(m.exports.useState(0),2),r=e[0],n=e[1];return yr(function(){return t.current=!0}),[m.exports.useCallback(function(){!t.current&&n(r+1)},[r]),r]}var yi=0;function Wl(){var t=yi;return yi++,t}var Ir=function(t){var e=t.children,r=t.initial,n=t.isPresent,o=t.onExitComplete,a=t.custom,i=t.presenceAffectsLayout,s=j(Xl),u=j(Wl),l=m.exports.useMemo(function(){return{id:u,initial:r,isPresent:n,custom:a,onExitComplete:function(c){var v,d;s.set(c,!0);try{for(var f=Ri(s.values()),p=f.next();!p.done;p=f.next()){var h=p.value;if(!h)return}}catch(x){v={error:x}}finally{try{p&&!p.done&&(d=f.return)&&d.call(f)}finally{if(v)throw v.error}}o==null||o()},register:function(c){return s.set(c,!1),function(){return s.delete(c)}}}},i?void 0:[n]);return m.exports.useMemo(function(){s.forEach(function(c,v){return s.set(v,!1)})},[n]),m.exports.useEffect(function(){!n&&!s.size&&(o==null||o())},[n]),m.exports.createElement(yt.Provider,{value:l},e)};function Xl(){return new Map}function Ct(t){return t.key||""}function $l(t,e){t.forEach(function(r){var n=Ct(r);e.set(n,r)})}function Zl(t){var e=[];return m.exports.Children.forEach(t,function(r){m.exports.isValidElement(r)&&e.push(r)}),e}var Ac=function(t){var e=t.children,r=t.custom,n=t.initial,o=n===void 0?!0:n,a=t.onExitComplete,i=t.exitBeforeEnter,s=t.presenceAffectsLayout,u=s===void 0?!0:s,l=R(gi(),1),c=l[0],v=m.exports.useContext(Wt).forceRender;v&&(c=v);var d=m.exports.useRef(!0),f=m.exports.useRef(!0);m.exports.useEffect(function(){return function(){f.current=!1}},[]);var p=Zl(e),h=m.exports.useRef(p),x=m.exports.useRef(new Map).current,y=m.exports.useRef(new Set).current;if($l(p,x),d.current)return d.current=!1,m.exports.createElement(m.exports.Fragment,null,p.map(function(w){return m.exports.createElement(Ir,{key:Ct(w),isPresent:!0,initial:o?void 0:!1,presenceAffectsLayout:u},w)}));for(var b=K([],R(p)),S=h.current.map(Ct),P=p.map(Ct),V=S.length,A=0;A0?1:-1,i=t[o+a];if(!i)return t;var s=t[o],u=i.layout,l=I(u.min,u.max,.5);return a===1&&s.layout.max+r>l||a===-1&&s.layout.min+r.001?1/t:Tc};function Yc(t){var e=Et(1),r=Et(1),n=Nr();t?(e=t.scaleX||e,r=t.scaleY||r):n&&(e=n.getValue("scaleX",1),r=n.getValue("scaleY",1));var o=jr(e,Mi),a=jr(r,Mi);return{scaleX:o,scaleY:a}}export{Ac as AnimatePresence,Mc as AnimateSharedLayout,ql as DeprecatedLayoutGroupContext,yc as DragControls,Ls as FlatTree,Ql as LayoutGroup,Wt as LayoutGroupContext,Oc as LazyMotion,Rc as MotionConfig,gt as MotionConfigContext,ts as MotionValue,yt as PresenceContext,Lc as Reorder,co as SwitchLayoutGroupContext,Cs as addScaleCorrector,ds as animate,Tr as animateVisualElement,gc as animationControls,Ec as createDomMotionComponent,fo as createMotionComponent,dc as domAnimation,Dc as domMax,Se as isValidMotionProp,wc as m,mi as motion,Y as motionValue,be as resolveMotionValue,uc as transform,Nc as useAnimation,Hc as useCycle,Kc as useDeprecatedAnimatedState,Yc as useDeprecatedInvertedScale,mr as useDomEvent,zc as useDragControls,Bc as useElementScroll,Gc as useInstantLayoutTransition,Cc as useIsPresent,Ic as useMotionTemplate,Et as useMotionValue,_o as usePresence,Uc as useReducedMotion,kc as useResetProjection,Fc as useSpring,jr as useTransform,jc as useVelocity,_c as useViewportScroll,Mr as visualElement}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/logs.4dcb9935.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/logs.4dcb9935.js deleted file mode 100644 index f8b04274..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/logs.4dcb9935.js +++ /dev/null @@ -1,2 +0,0 @@ -var x=Object.defineProperty,C=Object.defineProperties;var E=Object.getOwnPropertyDescriptors;var h=Object.getOwnPropertySymbols;var j=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var v=(e,t,n)=>t in e?x(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,p=(e,t)=>{for(var n in t||(t={}))j.call(t,n)&&v(e,n,t[n]);if(h)for(var n of h(t))A.call(t,n)&&v(e,n,t[n]);return e},w=(e,t)=>C(e,E(t));import{r as F,t as H,v as a}from"./index.ee5bc09a.js";var D;(function(e){e[e.Connecting=0]="Connecting",e[e.Open=1]="Open",e[e.Closing=2]="Closing",e[e.Closed=3]="Closed"})(D||(D={}));const L="/logs",J=new TextDecoder("utf-8"),N=()=>Math.floor((1+Math.random())*65536).toString(16);let M=!1,i=!1,f="",s,d;function m(e,t){let n;try{n=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=T(r);n.time=l,n.id=+r-0+N(),n.even=M=!M,t(n)}function T(e){const t=e.getFullYear()%100,n=a(e.getMonth()+1,2),r=a(e.getDate(),2),l=a(e.getHours(),2),o=a(e.getMinutes(),2),c=a(e.getSeconds(),2);return`${t}-${n}-${r} ${l}:${o}:${c}`}function O(e,t){return e.read().then(({done:n,value:r})=>{f+=J.decode(r,{stream:!n});const o=f.split(` -`),c=o[o.length-1];for(let g=0;ge[n]).join("|")}let b,u;function Y(e,t){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;d=t;const n=F(e,L);s=new WebSocket(n),s.addEventListener("error",()=>{G(e,t)}),s.addEventListener("message",function(r){m(r.data,t)})}function q(){s.close(),u&&u.abort()}function z(e){!d||!s||(s.close(),i=!1,Y(e,d))}function G(e,t){if(u&&$(e)!==b)u.abort();else if(i)return;i=!0,b=$(e),u=new AbortController;const n=u.signal,{url:r,init:l}=H(e);fetch(r+L+"?level="+e.logLevel,w(p({},l),{signal:n})).then(o=>{const c=o.body.getReader();O(c,t)},o=>{i=!1,!n.aborted&&console.log("GET /logs error:",o.message)})}export{Y as f,z as r,q as s}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-400-normal.cce57747.woff2 b/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-400-normal.cce57747.woff2 deleted file mode 100644 index 6354811d..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-400-normal.cce57747.woff2 and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-400-normal.d7410996.woff b/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-400-normal.d7410996.woff deleted file mode 100644 index 796d9f32..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-400-normal.d7410996.woff and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-700-normal.a61d6725.woff2 b/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-700-normal.a61d6725.woff2 deleted file mode 100644 index e8660703..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-700-normal.a61d6725.woff2 and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-700-normal.b1fda8d8.woff b/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-700-normal.b1fda8d8.woff deleted file mode 100644 index bb308f2f..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/assets/open-sans-latin-700-normal.b1fda8d8.woff and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/roboto-mono-latin-400-normal.2dfc0e86.woff b/luci-app-openclash/root/usr/share/openclash/yacd/assets/roboto-mono-latin-400-normal.2dfc0e86.woff deleted file mode 100644 index f319fbfa..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/assets/roboto-mono-latin-400-normal.2dfc0e86.woff and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/roboto-mono-latin-400-normal.e1fd013a.woff2 b/luci-app-openclash/root/usr/share/openclash/yacd/assets/roboto-mono-latin-400-normal.e1fd013a.woff2 deleted file mode 100644 index ed384d22..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/assets/roboto-mono-latin-400-normal.e1fd013a.woff2 and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/useRemainingViewPortHeight.7baef998.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/useRemainingViewPortHeight.7baef998.js deleted file mode 100644 index 34352c15..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/useRemainingViewPortHeight.7baef998.js +++ /dev/null @@ -1 +0,0 @@ -import{j as r}from"./vendor.38e754a4.js";const{useState:s,useRef:a,useCallback:u,useLayoutEffect:c}=r;function g(){const t=a(null),[n,i]=s(200),e=u(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{g as u}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/vendor.38e754a4.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/vendor.38e754a4.js deleted file mode 100644 index 10686384..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/vendor.38e754a4.js +++ /dev/null @@ -1,86 +0,0 @@ -var n0=Object.defineProperty,r0=Object.defineProperties;var o0=Object.getOwnPropertyDescriptors;var Ui=Object.getOwnPropertySymbols;var cd=Object.prototype.hasOwnProperty,fd=Object.prototype.propertyIsEnumerable;var dd=(e,t,n)=>t in e?n0(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,He=(e,t)=>{for(var n in t||(t={}))cd.call(t,n)&&dd(e,n,t[n]);if(Ui)for(var n of Ui(t))fd.call(t,n)&&dd(e,n,t[n]);return e},tt=(e,t)=>r0(e,o0(t));var ji=(e,t)=>{var n={};for(var r in e)cd.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ui)for(var r of Ui(e))t.indexOf(r)<0&&fd.call(e,r)&&(n[r]=e[r]);return n};function pd(e,t){return t.forEach(function(n){n&&typeof n!="string"&&!Array.isArray(n)&&Object.keys(n).forEach(function(r){if(r!=="default"&&!(r in e)){var o=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(e,r,o.get?o:{enumerable:!0,get:function(){return n[r]}})}})}),Object.freeze(e)}function Wt(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Wt=function(n){return typeof n}:Wt=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Wt(e)}function i0(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function be(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:{};Mt(this,e),this.init(t,n)}return Dt(e,[{key:"init",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=r.prefix||"i18next:",this.logger=n||f0,this.options=r,this.debug=r.debug}},{key:"setDebug",value:function(n){this.debug=n}},{key:"log",value:function(){for(var n=arguments.length,r=new Array(n),o=0;o1?r-1:0),i=1;i-1?s.replace(/###/g,"."):s}function o(){return!e||typeof e=="string"}for(var i=typeof t!="string"?[].concat(t):t.split(".");i.length>1;){if(o())return{};var a=r(i.shift());!e[a]&&n&&(e[a]=new n),Object.prototype.hasOwnProperty.call(e,a)?e=e[a]:e={}}return o()?{}:{obj:e,k:r(i.shift())}}function gd(e,t,n){var r=lu(e,t,Object),o=r.obj,i=r.k;o[i]=n}function h0(e,t,n,r){var o=lu(e,t,Object),i=o.obj,a=o.k;i[a]=i[a]||[],r&&(i[a]=i[a].concat(n)),r||i[a].push(n)}function Bi(e,t){var n=lu(e,t),r=n.obj,o=n.k;if(!!r)return r[o]}function yd(e,t,n){var r=Bi(e,n);return r!==void 0?r:Bi(t,n)}function wd(e,t,n){for(var r in t)r!=="__proto__"&&r!=="constructor"&&(r in e?typeof e[r]=="string"||e[r]instanceof String||typeof t[r]=="string"||t[r]instanceof String?n&&(e[r]=t[r]):wd(e[r],t[r],n):e[r]=t[r]);return e}function hr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var v0={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function m0(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,function(t){return v0[t]}):e}var zi=typeof window!="undefined"&&window.navigator&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,g0=[" ",",","?","!",";"];function y0(e,t,n){t=t||"",n=n||"";var r=g0.filter(function(s){return t.indexOf(s)<0&&n.indexOf(s)<0});if(r.length===0)return!0;var o=new RegExp("(".concat(r.map(function(s){return s==="?"?"\\?":s}).join("|"),")")),i=!o.test(e);if(!i){var a=e.indexOf(n);a>0&&!o.test(e.substring(0,a))&&(i=!0)}return i}function Sd(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!!e){if(e[t])return e[t];for(var r=t.split(n),o=e,i=0;ii+a;)a++,s=r.slice(i,i+a).join(n),u=o[s];if(u===void 0)return;if(typeof u=="string")return u;if(s&&typeof u[s]=="string")return u[s];var l=r.slice(i+a).join(n);return l?Sd(u,l,n):void 0}o=o[r[i]]}return o}}var w0=function(e){Vi(t,e);function t(n){var r,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};return Mt(this,t),r=so(this,pr(t).call(this)),zi&&rn.call(nn(r)),r.data=n||{},r.options=o,r.options.keySeparator===void 0&&(r.options.keySeparator="."),r.options.ignoreJSONStructure===void 0&&(r.options.ignoreJSONStructure=!0),r}return Dt(t,[{key:"addNamespaces",value:function(r){this.options.ns.indexOf(r)<0&&this.options.ns.push(r)}},{key:"removeNamespaces",value:function(r){var o=this.options.ns.indexOf(r);o>-1&&this.options.ns.splice(o,1)}},{key:"getResource",value:function(r,o,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},s=a.keySeparator!==void 0?a.keySeparator:this.options.keySeparator,u=a.ignoreJSONStructure!==void 0?a.ignoreJSONStructure:this.options.ignoreJSONStructure,l=[r,o];i&&typeof i!="string"&&(l=l.concat(i)),i&&typeof i=="string"&&(l=l.concat(s?i.split(s):i)),r.indexOf(".")>-1&&(l=r.split("."));var c=Bi(this.data,l);return c||!u||typeof i!="string"?c:Sd(this.data&&this.data[r]&&this.data[r][o],i,s)}},{key:"addResource",value:function(r,o,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1},u=this.options.keySeparator;u===void 0&&(u=".");var l=[r,o];i&&(l=l.concat(u?i.split(u):i)),r.indexOf(".")>-1&&(l=r.split("."),a=o,o=l[1]),this.addNamespaces(o),gd(this.data,l,a),s.silent||this.emit("added",r,o,i,a)}},{key:"addResources",value:function(r,o,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(var s in i)(typeof i[s]=="string"||Object.prototype.toString.apply(i[s])==="[object Array]")&&this.addResource(r,o,s,i[s],{silent:!0});a.silent||this.emit("added",r,o,i)}},{key:"addResourceBundle",value:function(r,o,i,a,s){var u=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},l=[r,o];r.indexOf(".")>-1&&(l=r.split("."),a=i,i=o,o=l[1]),this.addNamespaces(o);var c=Bi(this.data,l)||{};a?wd(c,i,s):c=be({},c,i),gd(this.data,l,c),u.silent||this.emit("added",r,o,i)}},{key:"removeResourceBundle",value:function(r,o){this.hasResourceBundle(r,o)&&delete this.data[r][o],this.removeNamespaces(o),this.emit("removed",r,o)}},{key:"hasResourceBundle",value:function(r,o){return this.getResource(r,o)!==void 0}},{key:"getResourceBundle",value:function(r,o){return o||(o=this.options.defaultNS),this.options.compatibilityAPI==="v1"?be({},{},this.getResource(r,o)):this.getResource(r,o)}},{key:"getDataByLanguage",value:function(r){return this.data[r]}},{key:"hasLanguageSomeTranslations",value:function(r){var o=this.getDataByLanguage(r),i=o&&Object.keys(o)||[];return!!i.find(function(a){return o[a]&&Object.keys(o[a]).length>0})}},{key:"toJSON",value:function(){return this.data}}]),t}(rn),_d={processors:{},addPostProcessor:function(t){this.processors[t.name]=t},handle:function(t,n,r,o,i){var a=this;return t.forEach(function(s){a.processors[s]&&(n=a.processors[s].process(n,r,o,i))}),n}},bd={},Ed=function(e){Vi(t,e);function t(n){var r,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return Mt(this,t),r=so(this,pr(t).call(this)),zi&&rn.call(nn(r)),p0(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],n,nn(r)),r.options=o,r.options.keySeparator===void 0&&(r.options.keySeparator="."),r.logger=Ft.create("translator"),r}return Dt(t,[{key:"changeLanguage",value:function(r){r&&(this.language=r)}},{key:"exists",value:function(r){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(r==null)return!1;var i=this.resolve(r,o);return i&&i.res!==void 0}},{key:"extractFromKey",value:function(r,o){var i=o.nsSeparator!==void 0?o.nsSeparator:this.options.nsSeparator;i===void 0&&(i=":");var a=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,s=o.ns||this.options.defaultNS,u=i&&r.indexOf(i)>-1,l=!this.options.userDefinedKeySeparator&&!o.keySeparator&&!this.options.userDefinedNsSeparator&&!o.nsSeparator&&!y0(r,i,a);if(u&&!l){var c=r.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:r,namespaces:s};var v=r.split(i);(i!==a||i===a&&this.options.ns.indexOf(v[0])>-1)&&(s=v.shift()),r=v.join(a)}return typeof s=="string"&&(s=[s]),{key:r,namespaces:s}}},{key:"translate",value:function(r,o,i){var a=this;if(Wt(o)!=="object"&&this.options.overloadTranslationOptionHandler&&(o=this.options.overloadTranslationOptionHandler(arguments)),o||(o={}),r==null)return"";Array.isArray(r)||(r=[String(r)]);var s=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,u=this.extractFromKey(r[r.length-1],o),l=u.key,c=u.namespaces,v=c[c.length-1],d=o.lng||this.language,m=o.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(d&&d.toLowerCase()==="cimode"){if(m){var y=o.nsSeparator||this.options.nsSeparator;return v+y+l}return l}var _=this.resolve(r,o),p=_&&_.res,f=_&&_.usedKey||l,h=_&&_.exactUsedKey||l,g=Object.prototype.toString.apply(p),w=["[object Number]","[object Function]","[object RegExp]"],x=o.joinArrays!==void 0?o.joinArrays:this.options.joinArrays,E=!this.i18nFormat||this.i18nFormat.handleAsObject,L=typeof p!="string"&&typeof p!="boolean"&&typeof p!="number";if(E&&p&&L&&w.indexOf(g)<0&&!(typeof x=="string"&&g==="[object Array]")){if(!o.returnObjects&&!this.options.returnObjects)return this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!"),this.options.returnedObjectHandler?this.options.returnedObjectHandler(f,p,be({},o,{ns:c})):"key '".concat(l," (").concat(this.language,")' returned an object instead of string.");if(s){var V=g==="[object Array]",F=V?[]:{},G=V?h:f;for(var Y in p)if(Object.prototype.hasOwnProperty.call(p,Y)){var ie="".concat(G).concat(s).concat(Y);F[Y]=this.translate(ie,be({},o,{joinArrays:!1,ns:c})),F[Y]===ie&&(F[Y]=p[Y])}p=F}}else if(E&&typeof x=="string"&&g==="[object Array]")p=p.join(x),p&&(p=this.extendTranslation(p,r,o,i));else{var Z=!1,S=!1,C=o.count!==void 0&&typeof o.count!="string",U=t.hasDefaultValue(o),b=C?this.pluralResolver.getSuffix(d,o.count,o):"",P=o["defaultValue".concat(b)]||o.defaultValue;!this.isValidLookup(p)&&U&&(Z=!0,p=P),this.isValidLookup(p)||(S=!0,p=l);var I=o.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey,J=I&&S?void 0:p,k=U&&P!==p&&this.options.updateMissing;if(S||Z||k){if(this.logger.log(k?"updateKey":"missingKey",d,v,l,k?P:p),s){var N=this.resolve(l,be({},o,{keySeparator:!1}));N&&N.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var X=[],le=this.languageUtils.getFallbackCodes(this.options.fallbackLng,o.lng||this.language);if(this.options.saveMissingTo==="fallback"&&le&&le[0])for(var he=0;he1&&arguments[1]!==void 0?arguments[1]:{},a,s,u,l,c;return typeof r=="string"&&(r=[r]),r.forEach(function(v){if(!o.isValidLookup(a)){var d=o.extractFromKey(v,i),m=d.key;s=m;var y=d.namespaces;o.options.fallbackNS&&(y=y.concat(o.options.fallbackNS));var _=i.count!==void 0&&typeof i.count!="string",p=i.context!==void 0&&(typeof i.context=="string"||typeof i.context=="number")&&i.context!=="",f=i.lngs?i.lngs:o.languageUtils.toResolveHierarchy(i.lng||o.language,i.fallbackLng);y.forEach(function(h){o.isValidLookup(a)||(c=h,!bd["".concat(f[0],"-").concat(h)]&&o.utils&&o.utils.hasLoadedNamespace&&!o.utils.hasLoadedNamespace(c)&&(bd["".concat(f[0],"-").concat(h)]=!0,o.logger.warn('key "'.concat(s,'" for languages "').concat(f.join(", "),`" won't get resolved as namespace "`).concat(c,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),f.forEach(function(g){if(!o.isValidLookup(a)){l=g;var w=m,x=[w];if(o.i18nFormat&&o.i18nFormat.addLookupKeys)o.i18nFormat.addLookupKeys(x,m,g,h,i);else{var E;_&&(E=o.pluralResolver.getSuffix(g,i.count,i)),_&&p&&x.push(w+E),p&&x.push(w+="".concat(o.options.contextSeparator).concat(i.context)),_&&x.push(w+=E)}for(var L;L=x.pop();)o.isValidLookup(a)||(u=L,a=o.getResource(g,h,L,i))}}))})}}),{res:a,usedKey:s,exactUsedKey:u,usedLng:l,usedNS:c}}},{key:"isValidLookup",value:function(r){return r!==void 0&&!(!this.options.returnNull&&r===null)&&!(!this.options.returnEmptyString&&r==="")}},{key:"getResource",value:function(r,o,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(r,o,i,a):this.resourceStore.getResource(r,o,i,a)}}],[{key:"hasDefaultValue",value:function(r){var o="defaultValue";for(var i in r)if(Object.prototype.hasOwnProperty.call(r,i)&&o===i.substring(0,o.length)&&r[i]!==void 0)return!0;return!1}}]),t}(rn);function cu(e){return e.charAt(0).toUpperCase()+e.slice(1)}var S0=function(){function e(t){Mt(this,e),this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Ft.create("languageUtils")}return Dt(e,[{key:"getScriptPartFromCode",value:function(n){if(!n||n.indexOf("-")<0)return null;var r=n.split("-");return r.length===2||(r.pop(),r[r.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(r.join("-"))}},{key:"getLanguagePartFromCode",value:function(n){if(!n||n.indexOf("-")<0)return n;var r=n.split("-");return this.formatLanguageCode(r[0])}},{key:"formatLanguageCode",value:function(n){if(typeof n=="string"&&n.indexOf("-")>-1){var r=["hans","hant","latn","cyrl","cans","mong","arab"],o=n.split("-");return this.options.lowerCaseLng?o=o.map(function(i){return i.toLowerCase()}):o.length===2?(o[0]=o[0].toLowerCase(),o[1]=o[1].toUpperCase(),r.indexOf(o[1].toLowerCase())>-1&&(o[1]=cu(o[1].toLowerCase()))):o.length===3&&(o[0]=o[0].toLowerCase(),o[1].length===2&&(o[1]=o[1].toUpperCase()),o[0]!=="sgn"&&o[2].length===2&&(o[2]=o[2].toUpperCase()),r.indexOf(o[1].toLowerCase())>-1&&(o[1]=cu(o[1].toLowerCase())),r.indexOf(o[2].toLowerCase())>-1&&(o[2]=cu(o[2].toLowerCase()))),o.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?n.toLowerCase():n}},{key:"isSupportedCode",value:function(n){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(n=this.getLanguagePartFromCode(n)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(n)>-1}},{key:"getBestMatchFromCodes",value:function(n){var r=this;if(!n)return null;var o;return n.forEach(function(i){if(!o){var a=r.formatLanguageCode(i);(!r.options.supportedLngs||r.isSupportedCode(a))&&(o=a)}}),!o&&this.options.supportedLngs&&n.forEach(function(i){if(!o){var a=r.getLanguagePartFromCode(i);if(r.isSupportedCode(a))return o=a;o=r.options.supportedLngs.find(function(s){if(s.indexOf(a)===0)return s})}}),o||(o=this.getFallbackCodes(this.options.fallbackLng)[0]),o}},{key:"getFallbackCodes",value:function(n,r){if(!n)return[];if(typeof n=="function"&&(n=n(r)),typeof n=="string"&&(n=[n]),Object.prototype.toString.apply(n)==="[object Array]")return n;if(!r)return n.default||[];var o=n[r];return o||(o=n[this.getScriptPartFromCode(r)]),o||(o=n[this.formatLanguageCode(r)]),o||(o=n[this.getLanguagePartFromCode(r)]),o||(o=n.default),o||[]}},{key:"toResolveHierarchy",value:function(n,r){var o=this,i=this.getFallbackCodes(r||this.options.fallbackLng||[],n),a=[],s=function(l){!l||(o.isSupportedCode(l)?a.push(l):o.logger.warn("rejecting language code not found in supportedLngs: ".concat(l)))};return typeof n=="string"&&n.indexOf("-")>-1?(this.options.load!=="languageOnly"&&s(this.formatLanguageCode(n)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&s(this.getScriptPartFromCode(n)),this.options.load!=="currentOnly"&&s(this.getLanguagePartFromCode(n))):typeof n=="string"&&s(this.formatLanguageCode(n)),i.forEach(function(u){a.indexOf(u)<0&&s(o.formatLanguageCode(u))}),a}}]),e}(),_0=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],b0={1:function(t){return Number(t>1)},2:function(t){return Number(t!=1)},3:function(t){return 0},4:function(t){return Number(t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2)},5:function(t){return Number(t==0?0:t==1?1:t==2?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5)},6:function(t){return Number(t==1?0:t>=2&&t<=4?1:2)},7:function(t){return Number(t==1?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2)},8:function(t){return Number(t==1?0:t==2?1:t!=8&&t!=11?2:3)},9:function(t){return Number(t>=2)},10:function(t){return Number(t==1?0:t==2?1:t<7?2:t<11?3:4)},11:function(t){return Number(t==1||t==11?0:t==2||t==12?1:t>2&&t<20?2:3)},12:function(t){return Number(t%10!=1||t%100==11)},13:function(t){return Number(t!==0)},14:function(t){return Number(t==1?0:t==2?1:t==3?2:3)},15:function(t){return Number(t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2)},16:function(t){return Number(t%10==1&&t%100!=11?0:t!==0?1:2)},17:function(t){return Number(t==1||t%10==1&&t%100!=11?0:1)},18:function(t){return Number(t==0?0:t==1?1:2)},19:function(t){return Number(t==1?0:t==0||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3)},20:function(t){return Number(t==1?0:t==0||t%100>0&&t%100<20?1:2)},21:function(t){return Number(t%100==1?1:t%100==2?2:t%100==3||t%100==4?3:0)},22:function(t){return Number(t==1?0:t==2?1:(t<0||t>10)&&t%10==0?2:3)}},E0=["v1","v2","v3"],Rd={zero:0,one:1,two:2,few:3,many:4,other:5};function R0(){var e={};return _0.forEach(function(t){t.lngs.forEach(function(n){e[n]={numbers:t.nr,plurals:b0[t.fc]}})}),e}var O0=function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};Mt(this,e),this.languageUtils=t,this.options=n,this.logger=Ft.create("pluralResolver"),(!this.options.compatibilityJSON||this.options.compatibilityJSON==="v4")&&(typeof Intl=="undefined"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=R0()}return Dt(e,[{key:"addRule",value:function(n,r){this.rules[n]=r}},{key:"getRule",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(n,{type:r.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[n]||this.rules[this.languageUtils.getLanguagePartFromCode(n)]}},{key:"needsPlural",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=this.getRule(n,r);return this.shouldUseIntlApi()?o&&o.resolvedOptions().pluralCategories.length>1:o&&o.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(n,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(n,o).map(function(i){return"".concat(r).concat(i)})}},{key:"getSuffixes",value:function(n){var r=this,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=this.getRule(n,o);return i?this.shouldUseIntlApi()?i.resolvedOptions().pluralCategories.sort(function(a,s){return Rd[a]-Rd[s]}).map(function(a){return"".concat(r.options.prepend).concat(a)}):i.numbers.map(function(a){return r.getSuffix(n,a,o)}):[]}},{key:"getSuffix",value:function(n,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=this.getRule(n,o);return i?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(i.select(r)):this.getSuffixRetroCompatible(i,r):(this.logger.warn("no plural rule found for: ".concat(n)),"")}},{key:"getSuffixRetroCompatible",value:function(n,r){var o=this,i=n.noAbs?n.plurals(r):n.plurals(Math.abs(r)),a=n.numbers[i];this.options.simplifyPluralSuffix&&n.numbers.length===2&&n.numbers[0]===1&&(a===2?a="plural":a===1&&(a=""));var s=function(){return o.options.prepend&&a.toString()?o.options.prepend+a.toString():a.toString()};return this.options.compatibilityJSON==="v1"?a===1?"":typeof a=="number"?"_plural_".concat(a.toString()):s():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&n.numbers.length===2&&n.numbers[0]===1?s():this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString()}},{key:"shouldUseIntlApi",value:function(){return!E0.includes(this.options.compatibilityJSON)}}]),e}(),C0=function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Mt(this,e),this.logger=Ft.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||function(n){return n},this.init(t)}return Dt(e,[{key:"init",value:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};n.interpolation||(n.interpolation={escapeValue:!0});var r=n.interpolation;this.escape=r.escape!==void 0?r.escape:m0,this.escapeValue=r.escapeValue!==void 0?r.escapeValue:!0,this.useRawValueToEscape=r.useRawValueToEscape!==void 0?r.useRawValueToEscape:!1,this.prefix=r.prefix?hr(r.prefix):r.prefixEscaped||"{{",this.suffix=r.suffix?hr(r.suffix):r.suffixEscaped||"}}",this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||",",this.unescapePrefix=r.unescapeSuffix?"":r.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":r.unescapeSuffix||"",this.nestingPrefix=r.nestingPrefix?hr(r.nestingPrefix):r.nestingPrefixEscaped||hr("$t("),this.nestingSuffix=r.nestingSuffix?hr(r.nestingSuffix):r.nestingSuffixEscaped||hr(")"),this.nestingOptionsSeparator=r.nestingOptionsSeparator?r.nestingOptionsSeparator:r.nestingOptionsSeparator||",",this.maxReplaces=r.maxReplaces?r.maxReplaces:1e3,this.alwaysFormat=r.alwaysFormat!==void 0?r.alwaysFormat:!1,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var n="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(n,"g");var r="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(r,"g");var o="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(o,"g")}},{key:"interpolate",value:function(n,r,o,i){var a=this,s,u,l,c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function v(p){return p.replace(/\$/g,"$$$$")}var d=function(f){if(f.indexOf(a.formatSeparator)<0){var h=yd(r,c,f);return a.alwaysFormat?a.format(h,void 0,o,be({},i,r,{interpolationkey:f})):h}var g=f.split(a.formatSeparator),w=g.shift().trim(),x=g.join(a.formatSeparator).trim();return a.format(yd(r,c,w),x,o,be({},i,r,{interpolationkey:w}))};this.resetRegExp();var m=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,y=i&&i.interpolation&&i.interpolation.skipOnVariables||this.options.interpolation.skipOnVariables,_=[{regex:this.regexpUnescape,safeValue:function(f){return v(f)}},{regex:this.regexp,safeValue:function(f){return a.escapeValue?v(a.escape(f)):v(f)}}];return _.forEach(function(p){for(l=0;s=p.regex.exec(n);){if(u=d(s[1].trim()),u===void 0)if(typeof m=="function"){var f=m(n,s,i);u=typeof f=="string"?f:""}else if(y){u=s[0];continue}else a.logger.warn("missed to pass in variable ".concat(s[1]," for interpolating ").concat(n)),u="";else typeof u!="string"&&!a.useRawValueToEscape&&(u=md(u));var h=p.safeValue(u);if(n=n.replace(s[0],h),y?(p.regex.lastIndex+=h.length,p.regex.lastIndex-=s[0].length):p.regex.lastIndex=0,l++,l>=a.maxReplaces)break}}),n}},{key:"nest",value:function(n,r){var o=this,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a,s,u=be({},i);u.applyPostProcessor=!1,delete u.defaultValue;function l(m,y){var _=this.nestingOptionsSeparator;if(m.indexOf(_)<0)return m;var p=m.split(new RegExp("".concat(_,"[ ]*{"))),f="{".concat(p[1]);m=p[0],f=this.interpolate(f,u),f=f.replace(/'/g,'"');try{u=JSON.parse(f),y&&(u=be({},y,u))}catch(h){return this.logger.warn("failed parsing options string in nesting for key ".concat(m),h),"".concat(m).concat(_).concat(f)}return delete u.defaultValue,m}for(;a=this.nestingRegexp.exec(n);){var c=[],v=!1;if(a[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(a[1])){var d=a[1].split(this.formatSeparator).map(function(m){return m.trim()});a[1]=d.shift(),c=d,v=!0}if(s=r(l.call(this,a[1].trim(),u),u),s&&a[0]===n&&typeof s!="string")return s;typeof s!="string"&&(s=md(s)),s||(this.logger.warn("missed to resolve ".concat(a[1]," for nesting ").concat(n)),s=""),v&&(s=c.reduce(function(m,y){return o.format(m,y,i.lng,be({},i,{interpolationkey:a[1].trim()}))},s.trim())),n=n.replace(a[0],s),this.regexp.lastIndex=0}return n}}]),e}();function x0(e){var t=e.toLowerCase().trim(),n={};if(e.indexOf("(")>-1){var r=e.split("(");t=r[0].toLowerCase().trim();var o=r[1].substring(0,r[1].length-1);if(t==="currency"&&o.indexOf(":")<0)n.currency||(n.currency=o.trim());else if(t==="relativetime"&&o.indexOf(":")<0)n.range||(n.range=o.trim());else{var i=o.split(";");i.forEach(function(a){if(!!a){var s=a.split(":"),u=c0(s,2),l=u[0],c=u[1];c.trim()==="false"&&(n[l.trim()]=!1),c.trim()==="true"&&(n[l.trim()]=!0),isNaN(c.trim())||(n[l.trim()]=parseInt(c.trim(),10)),n[l.trim()]||(n[l.trim()]=c.trim())}})}}return{formatName:t,formatOptions:n}}var k0=function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Mt(this,e),this.logger=Ft.create("formatter"),this.options=t,this.formats={number:function(r,o,i){return new Intl.NumberFormat(o,i).format(r)},currency:function(r,o,i){return new Intl.NumberFormat(o,be({},i,{style:"currency"})).format(r)},datetime:function(r,o,i){return new Intl.DateTimeFormat(o,be({},i)).format(r)},relativetime:function(r,o,i){return new Intl.RelativeTimeFormat(o,be({},i)).format(r,i.range||"day")},list:function(r,o,i){return new Intl.ListFormat(o,be({},i)).format(r)}},this.init(t)}return Dt(e,[{key:"init",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}},o=r.interpolation;this.formatSeparator=o.formatSeparator?o.formatSeparator:o.formatSeparator||","}},{key:"add",value:function(n,r){this.formats[n]=r}},{key:"format",value:function(n,r,o,i){var a=this,s=r.split(this.formatSeparator),u=s.reduce(function(l,c){var v=x0(c),d=v.formatName,m=v.formatOptions;if(a.formats[d]){var y=l;try{var _=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},p=_.locale||_.lng||i.locale||i.lng||o;y=a.formats[d](l,p,be({},m,i,_))}catch(f){a.logger.warn(f)}return y}else a.logger.warn("there was no format function for ".concat(d));return l},n);return u}}]),e}();function T0(e,t){for(var n=e.indexOf(t);n!==-1;)e.splice(n,1),n=e.indexOf(t)}var P0=function(e){Vi(t,e);function t(n,r,o){var i,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return Mt(this,t),i=so(this,pr(t).call(this)),zi&&rn.call(nn(i)),i.backend=n,i.store=r,i.services=o,i.languageUtils=o.languageUtils,i.options=a,i.logger=Ft.create("backendConnector"),i.state={},i.queue=[],i.backend&&i.backend.init&&i.backend.init(o,a.backend,a),i}return Dt(t,[{key:"queueLoad",value:function(r,o,i,a){var s=this,u=[],l=[],c=[],v=[];return r.forEach(function(d){var m=!0;o.forEach(function(y){var _="".concat(d,"|").concat(y);!i.reload&&s.store.hasResourceBundle(d,y)?s.state[_]=2:s.state[_]<0||(s.state[_]===1?l.indexOf(_)<0&&l.push(_):(s.state[_]=1,m=!1,l.indexOf(_)<0&&l.push(_),u.indexOf(_)<0&&u.push(_),v.indexOf(y)<0&&v.push(y)))}),m||c.push(d)}),(u.length||l.length)&&this.queue.push({pending:l,loaded:{},errors:[],callback:a}),{toLoad:u,pending:l,toLoadLanguages:c,toLoadNamespaces:v}}},{key:"loaded",value:function(r,o,i){var a=r.split("|"),s=a[0],u=a[1];o&&this.emit("failedLoading",s,u,o),i&&this.store.addResourceBundle(s,u,i),this.state[r]=o?-1:2;var l={};this.queue.forEach(function(c){h0(c.loaded,[s],u),T0(c.pending,r),o&&c.errors.push(o),c.pending.length===0&&!c.done&&(Object.keys(c.loaded).forEach(function(v){l[v]||(l[v]=[]),c.loaded[v].length&&c.loaded[v].forEach(function(d){l[v].indexOf(d)<0&&l[v].push(d)})}),c.done=!0,c.errors.length?c.callback(c.errors):c.callback())}),this.emit("loaded",l),this.queue=this.queue.filter(function(c){return!c.done})}},{key:"read",value:function(r,o,i){var a=this,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,u=arguments.length>4&&arguments[4]!==void 0?arguments[4]:350,l=arguments.length>5?arguments[5]:void 0;return r.length?this.backend[i](r,o,function(c,v){if(c&&v&&s<5){setTimeout(function(){a.read.call(a,r,o,i,s+1,u*2,l)},u);return}l(c,v)}):l(null,{})}},{key:"prepareLoading",value:function(r,o){var i=this,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},s=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),s&&s();typeof r=="string"&&(r=this.languageUtils.toResolveHierarchy(r)),typeof o=="string"&&(o=[o]);var u=this.queueLoad(r,o,a,s);if(!u.toLoad.length)return u.pending.length||s(),null;u.toLoad.forEach(function(l){i.loadOne(l)})}},{key:"load",value:function(r,o,i){this.prepareLoading(r,o,{},i)}},{key:"reload",value:function(r,o,i){this.prepareLoading(r,o,{reload:!0},i)}},{key:"loadOne",value:function(r){var o=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",a=r.split("|"),s=a[0],u=a[1];this.read(s,u,"read",void 0,void 0,function(l,c){l&&o.logger.warn("".concat(i,"loading namespace ").concat(u," for language ").concat(s," failed"),l),!l&&c&&o.logger.log("".concat(i,"loaded namespace ").concat(u," for language ").concat(s),c),o.loaded(r,l,c)})}},{key:"saveMissing",value:function(r,o,i,a,s){var u=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(o)){this.logger.warn('did not save key "'.concat(i,'" as the namespace "').concat(o,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}i==null||i===""||(this.backend&&this.backend.create&&this.backend.create(r,o,i,a,null,be({},u,{isUpdate:s})),!(!r||!r[0])&&this.store.addResource(r[0],o,i,a))}}]),t}(rn);function L0(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){var n={};if(Wt(t[1])==="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),Wt(t[2])==="object"||Wt(t[3])==="object"){var r=t[3]||t[2];Object.keys(r).forEach(function(o){n[o]=r[o]})}return n},interpolation:{escapeValue:!0,format:function(t,n,r,o){return t},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function Od(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function Wi(){}function N0(e){var t=Object.getOwnPropertyNames(Object.getPrototypeOf(e));t.forEach(function(n){typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}var A0=function(e){Vi(t,e);function t(){var n,r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},o=arguments.length>1?arguments[1]:void 0;if(Mt(this,t),n=so(this,pr(t).call(this)),zi&&rn.call(nn(n)),n.options=Od(r),n.services={},n.logger=Ft,n.modules={external:[]},N0(nn(n)),o&&!n.isInitialized&&!r.isClone){if(!n.options.initImmediate)return n.init(r,o),so(n,nn(n));setTimeout(function(){n.init(r,o)},0)}return n}return Dt(t,[{key:"init",value:function(){var r=this,o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=arguments.length>1?arguments[1]:void 0;typeof o=="function"&&(i=o,o={}),!o.defaultNS&&o.ns&&(typeof o.ns=="string"?o.defaultNS=o.ns:o.ns.indexOf("translation")<0&&(o.defaultNS=o.ns[0]));var a=L0();this.options=be({},a,this.options,Od(o)),o.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=o.keySeparator),o.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=o.nsSeparator);function s(p){return p?typeof p=="function"?new p:p:null}if(!this.options.isClone){this.modules.logger?Ft.init(s(this.modules.logger),this.options):Ft.init(null,this.options);var u;this.modules.formatter?u=this.modules.formatter:typeof Intl!="undefined"&&(u=k0);var l=new S0(this.options);this.store=new w0(this.options.resources,this.options);var c=this.services;c.logger=Ft,c.resourceStore=this.store,c.languageUtils=l,c.pluralResolver=new O0(l,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),u&&(!this.options.interpolation.format||this.options.interpolation.format===a.interpolation.format)&&(c.formatter=s(u),c.formatter.init(c,this.options),this.options.interpolation.format=c.formatter.format.bind(c.formatter)),c.interpolator=new C0(this.options),c.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},c.backendConnector=new P0(s(this.modules.backend),c.resourceStore,c,this.options),c.backendConnector.on("*",function(p){for(var f=arguments.length,h=new Array(f>1?f-1:0),g=1;g1?f-1:0),g=1;g0&&v[0]!=="dev"&&(this.options.lng=v[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined");var d=["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"];d.forEach(function(p){r[p]=function(){var f;return(f=r.store)[p].apply(f,arguments)}});var m=["addResource","addResources","addResourceBundle","removeResourceBundle"];m.forEach(function(p){r[p]=function(){var f;return(f=r.store)[p].apply(f,arguments),r}});var y=uo(),_=function(){var f=function(g,w){r.isInitialized&&!r.initializedStoreOnce&&r.logger.warn("init: i18next is already initialized. You should call init just once!"),r.isInitialized=!0,r.options.isClone||r.logger.log("initialized",r.options),r.emit("initialized",r.options),y.resolve(w),i(g,w)};if(r.languages&&r.options.compatibilityAPI!=="v1"&&!r.isInitialized)return f(null,r.t.bind(r));r.changeLanguage(r.options.lng,f)};return this.options.resources||!this.options.initImmediate?_():setTimeout(_,0),y}},{key:"loadResources",value:function(r){var o=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Wi,a=i,s=typeof r=="string"?r:this.language;if(typeof r=="function"&&(a=r),!this.options.resources||this.options.partialBundledLanguages){if(s&&s.toLowerCase()==="cimode")return a();var u=[],l=function(d){if(!!d){var m=o.services.languageUtils.toResolveHierarchy(d);m.forEach(function(y){u.indexOf(y)<0&&u.push(y)})}};if(s)l(s);else{var c=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);c.forEach(function(v){return l(v)})}this.options.preload&&this.options.preload.forEach(function(v){return l(v)}),this.services.backendConnector.load(u,this.options.ns,a)}else a(null)}},{key:"reloadResources",value:function(r,o,i){var a=uo();return r||(r=this.languages),o||(o=this.options.ns),i||(i=Wi),this.services.backendConnector.reload(r,o,function(s){a.resolve(),i(s)}),a}},{key:"use",value:function(r){if(!r)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!r.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return r.type==="backend"&&(this.modules.backend=r),(r.type==="logger"||r.log&&r.warn&&r.error)&&(this.modules.logger=r),r.type==="languageDetector"&&(this.modules.languageDetector=r),r.type==="i18nFormat"&&(this.modules.i18nFormat=r),r.type==="postProcessor"&&_d.addPostProcessor(r),r.type==="formatter"&&(this.modules.formatter=r),r.type==="3rdParty"&&this.modules.external.push(r),this}},{key:"changeLanguage",value:function(r,o){var i=this;this.isLanguageChangingTo=r;var a=uo();this.emit("languageChanging",r);var s=function(v){if(i.language=v,i.languages=i.services.languageUtils.toResolveHierarchy(v),i.resolvedLanguage=void 0,!(["cimode","dev"].indexOf(v)>-1))for(var d=0;d-1)&&i.store.hasLanguageSomeTranslations(m)){i.resolvedLanguage=m;break}}},u=function(v,d){d?(s(d),i.translator.changeLanguage(d),i.isLanguageChangingTo=void 0,i.emit("languageChanged",d),i.logger.log("languageChanged",d)):i.isLanguageChangingTo=void 0,a.resolve(function(){return i.t.apply(i,arguments)}),o&&o(v,function(){return i.t.apply(i,arguments)})},l=function(v){!r&&!v&&i.services.languageDetector&&(v=[]);var d=typeof v=="string"?v:i.services.languageUtils.getBestMatchFromCodes(v);d&&(i.language||s(d),i.translator.language||i.translator.changeLanguage(d),i.services.languageDetector&&i.services.languageDetector.cacheUserLanguage(d)),i.loadResources(d,function(m){u(m,d)})};return!r&&this.services.languageDetector&&!this.services.languageDetector.async?l(this.services.languageDetector.detect()):!r&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(l):l(r),a}},{key:"getFixedT",value:function(r,o,i){var a=this,s=function u(l,c){var v;if(Wt(c)!=="object"){for(var d=arguments.length,m=new Array(d>2?d-2:0),y=2;y1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var a=this.resolvedLanguage||this.languages[0],s=this.options?this.options.fallbackLng:!1,u=this.languages[this.languages.length-1];if(a.toLowerCase()==="cimode")return!0;var l=function(d,m){var y=o.services.backendConnector.state["".concat(d,"|").concat(m)];return y===-1||y===2};if(i.precheck){var c=i.precheck(this,l);if(c!==void 0)return c}return!!(this.hasResourceBundle(a,r)||!this.services.backendConnector.backend||l(a,r)&&(!s||l(u,r)))}},{key:"loadNamespaces",value:function(r,o){var i=this,a=uo();return this.options.ns?(typeof r=="string"&&(r=[r]),r.forEach(function(s){i.options.ns.indexOf(s)<0&&i.options.ns.push(s)}),this.loadResources(function(s){a.resolve(),o&&o(s)}),a):(o&&o(),Promise.resolve())}},{key:"loadLanguages",value:function(r,o){var i=uo();typeof r=="string"&&(r=[r]);var a=this.options.preload||[],s=r.filter(function(u){return a.indexOf(u)<0});return s.length?(this.options.preload=a.concat(s),this.loadResources(function(u){i.resolve(),o&&o(u)}),i):(o&&o(),Promise.resolve())}},{key:"dir",value:function(r){if(r||(r=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!r)return"rtl";var o=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"];return o.indexOf(this.services.languageUtils.getLanguagePartFromCode(r))>-1||r.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}},{key:"createInstance",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},o=arguments.length>1?arguments[1]:void 0;return new t(r,o)}},{key:"cloneInstance",value:function(){var r=this,o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Wi,a=be({},this.options,o,{isClone:!0}),s=new t(a),u=["store","services","language"];return u.forEach(function(l){s[l]=r[l]}),s.services=be({},this.services),s.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},s.translator=new Ed(s.services,s.options),s.translator.on("*",function(l){for(var c=arguments.length,v=new Array(c>1?c-1:0),d=1;d0){var s=o.maxAge-0;if(isNaN(s))throw new Error("maxAge should be a Number");a+="; Max-Age="+Math.floor(s)}if(o.domain){if(!kd.test(o.domain))throw new TypeError("option domain is invalid");a+="; Domain="+o.domain}if(o.path){if(!kd.test(o.path))throw new TypeError("option path is invalid");a+="; Path="+o.path}if(o.expires){if(typeof o.expires.toUTCString!="function")throw new TypeError("option expires is invalid");a+="; Expires="+o.expires.toUTCString()}if(o.httpOnly&&(a+="; HttpOnly"),o.secure&&(a+="; Secure"),o.sameSite){var u=typeof o.sameSite=="string"?o.sameSite.toLowerCase():o.sameSite;switch(u){case!0:a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"strict":a+="; SameSite=Strict";break;case"none":a+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return a},Td={create:function(t,n,r,o){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};r&&(i.expires=new Date,i.expires.setTime(i.expires.getTime()+r*60*1e3)),o&&(i.domain=o),document.cookie=U0(t,encodeURIComponent(n),i)},read:function(t){for(var n=t+"=",r=document.cookie.split(";"),o=0;o0){var s=o[i].substring(0,a);s===t.lookupQuerystring&&(n=o[i].substring(a+1))}}return n}},lo=null,Pd=function(){if(lo!==null)return lo;try{lo=window!=="undefined"&&window.localStorage!==null;var t="i18next.translate.boo";window.localStorage.setItem(t,"foo"),window.localStorage.removeItem(t)}catch{lo=!1}return lo},B0={name:"localStorage",lookup:function(t){var n;if(t.lookupLocalStorage&&Pd()){var r=window.localStorage.getItem(t.lookupLocalStorage);r&&(n=r)}return n},cacheUserLanguage:function(t,n){n.lookupLocalStorage&&Pd()&&window.localStorage.setItem(n.lookupLocalStorage,t)}},co=null,Ld=function(){if(co!==null)return co;try{co=window!=="undefined"&&window.sessionStorage!==null;var t="i18next.translate.boo";window.sessionStorage.setItem(t,"foo"),window.sessionStorage.removeItem(t)}catch{co=!1}return co},z0={name:"sessionStorage",lookup:function(t){var n;if(t.lookupSessionStorage&&Ld()){var r=window.sessionStorage.getItem(t.lookupSessionStorage);r&&(n=r)}return n},cacheUserLanguage:function(t,n){n.lookupSessionStorage&&Ld()&&window.sessionStorage.setItem(n.lookupSessionStorage,t)}},W0={name:"navigator",lookup:function(t){var n=[];if(typeof navigator!="undefined"){if(navigator.languages)for(var r=0;r0?n:void 0}},H0={name:"htmlTag",lookup:function(t){var n,r=t.htmlTag||(typeof document!="undefined"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(n=r.getAttribute("lang")),n}},q0={name:"path",lookup:function(t){var n;if(typeof window!="undefined"){var r=window.location.pathname.match(/\/([a-zA-Z-]*)/g);if(r instanceof Array)if(typeof t.lookupFromPathIndex=="number"){if(typeof r[t.lookupFromPathIndex]!="string")return;n=r[t.lookupFromPathIndex].replace("/","")}else n=r[0].replace("/","")}return n}},Q0={name:"subdomain",lookup:function(t){var n;if(typeof window!="undefined"){var r=window.location.href.match(/(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/gi);r instanceof Array&&(typeof t.lookupFromSubdomainIndex=="number"?n=r[t.lookupFromSubdomainIndex].replace("http://","").replace("https://","").replace(".",""):n=r[0].replace("http://","").replace("https://","").replace(".",""))}return n}};function K0(){return{order:["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"]}}var G0=function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};M0(this,e),this.type="languageDetector",this.detectors={},this.init(t,n)}return D0(e,[{key:"init",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=$0(r,this.options||{},K0()),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=o,this.addDetector(j0),this.addDetector(V0),this.addDetector(B0),this.addDetector(z0),this.addDetector(W0),this.addDetector(H0),this.addDetector(q0),this.addDetector(Q0)}},{key:"addDetector",value:function(n){this.detectors[n.name]=n}},{key:"detect",value:function(n){var r=this;n||(n=this.options.order);var o=[];return n.forEach(function(i){if(r.detectors[i]){var a=r.detectors[i].lookup(r.options);a&&typeof a=="string"&&(a=[a]),a&&(o=o.concat(a))}}),this.services.languageUtils.getBestMatchFromCodes?o:o.length>0?o[0]:null}},{key:"cacheUserLanguage",value:function(n,r){var o=this;r||(r=this.options.caches),!!r&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(n)>-1||r.forEach(function(i){o.detectors[i]&&o.detectors[i].cacheUserLanguage(n,o.options)}))}}]),e}();G0.type="languageDetector";function Hi(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Hi=function(n){return typeof n}:Hi=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Hi(e)}var Nd=[],X0=Nd.forEach,Y0=Nd.slice;function fu(e){return X0.call(Y0.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e}function Ad(){return typeof XMLHttpRequest=="function"||(typeof XMLHttpRequest=="undefined"?"undefined":Hi(XMLHttpRequest))==="object"}function Z0(e){return!!e&&typeof e.then=="function"}function J0(e){return Z0(e)?e:Promise.resolve(e)}var qi=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function e1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t1(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach(function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}),t}function n1(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Qi={exports:{}},du={exports:{}};(function(e,t){var n=typeof self!="undefined"?self:qi,r=function(){function i(){this.fetch=!1,this.DOMException=n.DOMException}return i.prototype=n,new i}();(function(i){(function(a){var s={searchParams:"URLSearchParams"in i,iterable:"Symbol"in i&&"iterator"in Symbol,blob:"FileReader"in i&&"Blob"in i&&function(){try{return new Blob,!0}catch{return!1}}(),formData:"FormData"in i,arrayBuffer:"ArrayBuffer"in i};function u(S){return S&&DataView.prototype.isPrototypeOf(S)}if(s.arrayBuffer)var l=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],c=ArrayBuffer.isView||function(S){return S&&l.indexOf(Object.prototype.toString.call(S))>-1};function v(S){if(typeof S!="string"&&(S=String(S)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(S))throw new TypeError("Invalid character in header field name");return S.toLowerCase()}function d(S){return typeof S!="string"&&(S=String(S)),S}function m(S){var C={next:function(){var U=S.shift();return{done:U===void 0,value:U}}};return s.iterable&&(C[Symbol.iterator]=function(){return C}),C}function y(S){this.map={},S instanceof y?S.forEach(function(C,U){this.append(U,C)},this):Array.isArray(S)?S.forEach(function(C){this.append(C[0],C[1])},this):S&&Object.getOwnPropertyNames(S).forEach(function(C){this.append(C,S[C])},this)}y.prototype.append=function(S,C){S=v(S),C=d(C);var U=this.map[S];this.map[S]=U?U+", "+C:C},y.prototype.delete=function(S){delete this.map[v(S)]},y.prototype.get=function(S){return S=v(S),this.has(S)?this.map[S]:null},y.prototype.has=function(S){return this.map.hasOwnProperty(v(S))},y.prototype.set=function(S,C){this.map[v(S)]=d(C)},y.prototype.forEach=function(S,C){for(var U in this.map)this.map.hasOwnProperty(U)&&S.call(C,this.map[U],U,this)},y.prototype.keys=function(){var S=[];return this.forEach(function(C,U){S.push(U)}),m(S)},y.prototype.values=function(){var S=[];return this.forEach(function(C){S.push(C)}),m(S)},y.prototype.entries=function(){var S=[];return this.forEach(function(C,U){S.push([U,C])}),m(S)},s.iterable&&(y.prototype[Symbol.iterator]=y.prototype.entries);function _(S){if(S.bodyUsed)return Promise.reject(new TypeError("Already read"));S.bodyUsed=!0}function p(S){return new Promise(function(C,U){S.onload=function(){C(S.result)},S.onerror=function(){U(S.error)}})}function f(S){var C=new FileReader,U=p(C);return C.readAsArrayBuffer(S),U}function h(S){var C=new FileReader,U=p(C);return C.readAsText(S),U}function g(S){for(var C=new Uint8Array(S),U=new Array(C.length),b=0;b-1?C:S}function V(S,C){C=C||{};var U=C.body;if(S instanceof V){if(S.bodyUsed)throw new TypeError("Already read");this.url=S.url,this.credentials=S.credentials,C.headers||(this.headers=new y(S.headers)),this.method=S.method,this.mode=S.mode,this.signal=S.signal,!U&&S._bodyInit!=null&&(U=S._bodyInit,S.bodyUsed=!0)}else this.url=String(S);if(this.credentials=C.credentials||this.credentials||"same-origin",(C.headers||!this.headers)&&(this.headers=new y(C.headers)),this.method=L(C.method||this.method||"GET"),this.mode=C.mode||this.mode||null,this.signal=C.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&U)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(U)}V.prototype.clone=function(){return new V(this,{body:this._bodyInit})};function F(S){var C=new FormData;return S.trim().split("&").forEach(function(U){if(U){var b=U.split("="),P=b.shift().replace(/\+/g," "),I=b.join("=").replace(/\+/g," ");C.append(decodeURIComponent(P),decodeURIComponent(I))}}),C}function G(S){var C=new y,U=S.replace(/\r?\n[\t ]+/g," ");return U.split(/\r?\n/).forEach(function(b){var P=b.split(":"),I=P.shift().trim();if(I){var J=P.join(":").trim();C.append(I,J)}}),C}x.call(V.prototype);function Y(S,C){C||(C={}),this.type="default",this.status=C.status===void 0?200:C.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in C?C.statusText:"OK",this.headers=new y(C.headers),this.url=C.url||"",this._initBody(S)}x.call(Y.prototype),Y.prototype.clone=function(){return new Y(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new y(this.headers),url:this.url})},Y.error=function(){var S=new Y(null,{status:0,statusText:""});return S.type="error",S};var ie=[301,302,303,307,308];Y.redirect=function(S,C){if(ie.indexOf(C)===-1)throw new RangeError("Invalid status code");return new Y(null,{status:C,headers:{location:S}})},a.DOMException=i.DOMException;try{new a.DOMException}catch{a.DOMException=function(C,U){this.message=C,this.name=U;var b=Error(C);this.stack=b.stack},a.DOMException.prototype=Object.create(Error.prototype),a.DOMException.prototype.constructor=a.DOMException}function Z(S,C){return new Promise(function(U,b){var P=new V(S,C);if(P.signal&&P.signal.aborted)return b(new a.DOMException("Aborted","AbortError"));var I=new XMLHttpRequest;function J(){I.abort()}I.onload=function(){var k={status:I.status,statusText:I.statusText,headers:G(I.getAllResponseHeaders()||"")};k.url="responseURL"in I?I.responseURL:k.headers.get("X-Request-URL");var N="response"in I?I.response:I.responseText;U(new Y(N,k))},I.onerror=function(){b(new TypeError("Network request failed"))},I.ontimeout=function(){b(new TypeError("Network request failed"))},I.onabort=function(){b(new a.DOMException("Aborted","AbortError"))},I.open(P.method,P.url,!0),P.credentials==="include"?I.withCredentials=!0:P.credentials==="omit"&&(I.withCredentials=!1),"responseType"in I&&s.blob&&(I.responseType="blob"),P.headers.forEach(function(k,N){I.setRequestHeader(N,k)}),P.signal&&(P.signal.addEventListener("abort",J),I.onreadystatechange=function(){I.readyState===4&&P.signal.removeEventListener("abort",J)}),I.send(typeof P._bodyInit=="undefined"?null:P._bodyInit)})}return Z.polyfill=!0,i.fetch||(i.fetch=Z,i.Headers=y,i.Request=V,i.Response=Y),a.Headers=y,a.Request=V,a.Response=Y,a.fetch=Z,Object.defineProperty(a,"__esModule",{value:!0}),a})({})})(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var o=r;t=o.fetch,t.default=o.fetch,t.fetch=o.fetch,t.Headers=o.Headers,t.Request=o.Request,t.Response=o.Response,e.exports=t})(du,du.exports);(function(e,t){var n;if(typeof fetch=="function"&&(typeof qi!="undefined"&&qi.fetch?n=qi.fetch:typeof window!="undefined"&&window.fetch&&(n=window.fetch)),typeof n1!="undefined"&&(typeof window=="undefined"||typeof window.document=="undefined")){var r=n||du.exports;r.default&&(r=r.default),t.default=r,e.exports=t.default}})(Qi,Qi.exports);var Md=Qi.exports,Dd=Object.freeze(pd({__proto__:null,[Symbol.toStringTag]:"Module",default:Md},[Qi.exports]));function fo(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?fo=function(n){return typeof n}:fo=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},fo(e)}var on;typeof fetch=="function"&&(typeof global!="undefined"&&global.fetch?on=global.fetch:typeof window!="undefined"&&window.fetch&&(on=window.fetch));var po;Ad&&(typeof global!="undefined"&&global.XMLHttpRequest?po=global.XMLHttpRequest:typeof window!="undefined"&&window.XMLHttpRequest&&(po=window.XMLHttpRequest));var Ki;typeof ActiveXObject=="function"&&(typeof global!="undefined"&&global.ActiveXObject?Ki=global.ActiveXObject:typeof window!="undefined"&&window.ActiveXObject&&(Ki=window.ActiveXObject));!on&&Dd&&!po&&!Ki&&(on=Md||Dd);typeof on!="function"&&(on=void 0);var pu=function(t,n){if(n&&fo(n)==="object"){var r="";for(var o in n)r+="&"+encodeURIComponent(o)+"="+encodeURIComponent(n[o]);if(!r)return t;t=t+(t.indexOf("?")!==-1?"&":"?")+r.slice(1)}return t},r1=function(t,n,r,o){t.queryStringParams&&(n=pu(n,t.queryStringParams));var i=fu({},typeof t.customHeaders=="function"?t.customHeaders():t.customHeaders);r&&(i["Content-Type"]="application/json"),on(n,fu({method:r?"POST":"GET",body:r?t.stringify(r):void 0,headers:i},typeof t.requestOptions=="function"?t.requestOptions(r):t.requestOptions)).then(function(a){if(!a.ok)return o(a.statusText||"Error",{status:a.status});a.text().then(function(s){o(null,{status:a.status,data:s})}).catch(o)}).catch(o)},o1=function(t,n,r,o){r&&fo(r)==="object"&&(r=pu("",r).slice(1)),t.queryStringParams&&(n=pu(n,t.queryStringParams));try{var i;po?i=new po:i=new Ki("MSXML2.XMLHTTP.3.0"),i.open(r?"POST":"GET",n,1),t.crossDomain||i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i.withCredentials=!!t.withCredentials,r&&i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.overrideMimeType&&i.overrideMimeType("application/json");var a=t.customHeaders;if(a=typeof a=="function"?a():a,a)for(var s in a)i.setRequestHeader(s,a[s]);i.onreadystatechange=function(){i.readyState>3&&o(i.status>=400?i.statusText:null,{status:i.status,data:i.responseText})},i.send(r)}catch(u){console&&console.log(u)}},i1=function(t,n,r,o){if(typeof r=="function"&&(o=r,r=void 0),o=o||function(){},on)return r1(t,n,r,o);if(Ad||typeof ActiveXObject=="function")return o1(t,n,r,o)};function a1(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fd(e,t){for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};a1(this,e),this.services=t,this.options=n,this.allOptions=r,this.type="backend",this.init(t,n,r)}return s1(e,[{key:"init",value:function(n){var r=this,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=fu(o,this.options||{},l1()),this.allOptions=i,this.services&&this.options.reloadInterval&&setInterval(function(){return r.reload()},this.options.reloadInterval)}},{key:"readMulti",value:function(n,r,o){this._readAny(n,n,r,r,o)}},{key:"read",value:function(n,r,o){this._readAny([n],n,[r],r,o)}},{key:"_readAny",value:function(n,r,o,i,a){var s=this,u=this.options.loadPath;typeof this.options.loadPath=="function"&&(u=this.options.loadPath(n,o)),u=J0(u),u.then(function(l){var c=s.services.interpolator.interpolate(l,{lng:n.join("+"),ns:o.join("+")});s.loadUrl(c,a,r,i)})}},{key:"loadUrl",value:function(n,r,o,i){var a=this;this.options.request(this.options,n,void 0,function(s,u){if(u&&(u.status>=500&&u.status<600||!u.status))return r("failed loading "+n+"; status code: "+u.status,!0);if(u&&u.status>=400&&u.status<500)return r("failed loading "+n+"; status code: "+u.status,!1);if(!u&&s&&s.message&&s.message.indexOf("Failed to fetch")>-1)return r("failed loading "+n+": "+s.message,!0);if(s)return r(s,!1);var l,c;try{typeof u.data=="string"?l=a.options.parse(u.data,o,i):l=u.data}catch{c="failed parsing "+n+" to json"}if(c)return r(c,!1);r(null,l)})}},{key:"create",value:function(n,r,o,i,a){var s=this;if(!!this.options.addPath){typeof n=="string"&&(n=[n]);var u=this.options.parsePayload(r,o,i),l=0,c=[],v=[];n.forEach(function(d){var m=s.options.addPath;typeof s.options.addPath=="function"&&(m=s.options.addPath(d,r));var y=s.services.interpolator.interpolate(m,{lng:d,ns:r});s.options.request(s.options,y,u,function(_,p){l+=1,c.push(_),v.push(p),l===n.length&&a&&a(c,v)})})}}},{key:"reload",value:function(){var n=this,r=this.services,o=r.backendConnector,i=r.languageUtils,a=r.logger,s=o.language;if(!(s&&s.toLowerCase()==="cimode")){var u=[],l=function(v){var d=i.toResolveHierarchy(v);d.forEach(function(m){u.indexOf(m)<0&&u.push(m)})};l(s),this.allOptions.preload&&this.allOptions.preload.forEach(function(c){return l(c)}),u.forEach(function(c){n.allOptions.ns.forEach(function(v){o.read(c,v,"read",null,null,function(d,m){d&&a.warn("loading namespace ".concat(v," for language ").concat(c," failed"),d),!d&&m&&a.log("loaded namespace ".concat(v," for language ").concat(c),m),o.loaded("".concat(c,"|").concat(v),d,m)})})})}}}]),e}();c1.type="backend";function Id(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var $={exports:{}},ve={};/* -object-assign -(c) Sindre Sorhus -@license MIT -*/var $d=Object.getOwnPropertySymbols,f1=Object.prototype.hasOwnProperty,d1=Object.prototype.propertyIsEnumerable;function p1(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function h1(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(r.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}var Ud=h1()?Object.assign:function(e,t){for(var n,r=p1(e),o,i=1;i0&&arguments[0]!==void 0?arguments[0]:{};Su=rp(rp({},Su),e)}function R1(){return Su}var O1=function(){function e(){S1(this,e),this.usedNamespaces={}}return _1(e,[{key:"addUsedNamespaces",value:function(n){var r=this;n.forEach(function(o){r.usedNamespaces[o]||(r.usedNamespaces[o]=!0)})}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function C1(e){op=e}function x1(){return op}var jT={type:"3rdParty",init:function(t){E1(t.options.react),C1(t)}};function k1(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),r=0;r2&&arguments[2]!==void 0?arguments[2]:{};if(!t.languages||!t.languages.length)return _u("i18n.languages were undefined or empty",t.languages),!0;var r=t.languages[0],o=t.options?t.options.fallbackLng:!1,i=t.languages[t.languages.length-1];if(r.toLowerCase()==="cimode")return!0;var a=function(u,l){var c=t.services.backendConnector.state["".concat(u,"|").concat(l)];return c===-1||c===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(r,e)||!t.services.backendConnector.backend||a(r,e)&&(!o||a(i,e)))}function P1(e){if(Array.isArray(e))return e}function L1(e,t){var n=e==null?null:typeof Symbol!="undefined"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r=[],o=!0,i=!1,a,s;try{for(n=n.call(e);!(o=(a=n.next()).done)&&(r.push(a.value),!(t&&r.length===t));o=!0);}catch(u){i=!0,s=u}finally{try{!o&&n.return!=null&&n.return()}finally{if(i)throw s}}return r}}function sp(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:{},n=t.i18n,r=$.exports.useContext(b1)||{},o=r.i18n,i=r.defaultNS,a=n||o||x1();if(a&&!a.reportNamespaces&&(a.reportNamespaces=new O1),!a){_u("You will need to pass in an i18next instance by using initReactI18next");var s=function(L){return Array.isArray(L)?L[L.length-1]:L},u=[s,{},!1];return u.t=s,u.i18n={},u.ready=!1,u}a.options.react&&a.options.react.wait!==void 0&&_u("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var l=bu(bu(bu({},R1()),a.options.react),t),c=l.useSuspense,v=l.keyPrefix,d=e||i||a.options&&a.options.defaultNS;d=typeof d=="string"?[d]:d||["translation"],a.reportNamespaces.addUsedNamespaces&&a.reportNamespaces.addUsedNamespaces(d);var m=(a.isInitialized||a.initializedStoreOnce)&&d.every(function(E){return T1(E,a,l)});function y(){return a.getFixedT(null,l.nsMode==="fallback"?d:d[0],v)}var _=$.exports.useState(y),p=M1(_,2),f=p[0],h=p[1],g=$.exports.useRef(!0);$.exports.useEffect(function(){var E=l.bindI18n,L=l.bindI18nStore;g.current=!0,!m&&!c&&ap(a,d,function(){g.current&&h(y)});function V(){g.current&&h(y)}return E&&a&&a.on(E,V),L&&a&&a.store.on(L,V),function(){g.current=!1,E&&a&&E.split(" ").forEach(function(F){return a.off(F,V)}),L&&a&&L.split(" ").forEach(function(F){return a.store.off(F,V)})}},[a,d.join()]);var w=$.exports.useRef(!0);$.exports.useEffect(function(){g.current&&!w.current&&h(y),w.current=!1},[a]);var x=[f,a,m];if(x.t=f,x.i18n=a,x.ready=m,m||!m&&!c)return x;throw new Promise(function(E){ap(a,d,function(){E()})})}var Yi={exports:{}},pt={},Eu={exports:{}},lp={};/** @license React v0.20.2 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */(function(e){var t,n,r,o;if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var a=Date,s=a.now();e.unstable_now=function(){return a.now()-s}}if(typeof window=="undefined"||typeof MessageChannel!="function"){var u=null,l=null,c=function(){if(u!==null)try{var k=e.unstable_now();u(!0,k),u=null}catch(N){throw setTimeout(c,0),N}};t=function(k){u!==null?setTimeout(t,0,k):(u=k,setTimeout(c,0))},n=function(k,N){l=setTimeout(k,N)},r=function(){clearTimeout(l)},e.unstable_shouldYield=function(){return!1},o=e.unstable_forceFrameRate=function(){}}else{var v=window.setTimeout,d=window.clearTimeout;if(typeof console!="undefined"){var m=window.cancelAnimationFrame;typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof m!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var y=!1,_=null,p=-1,f=5,h=0;e.unstable_shouldYield=function(){return e.unstable_now()>=h},o=function(){},e.unstable_forceFrameRate=function(k){0>k||125>>1,he=k[le];if(he!==void 0&&0V(T,X))A!==void 0&&0>V(A,T)?(k[le]=A,k[M]=X,le=M):(k[le]=T,k[Te]=X,le=Te);else if(A!==void 0&&0>V(A,X))k[le]=A,k[M]=X,le=M;else break e}}return N}return null}function V(k,N){var X=k.sortIndex-N.sortIndex;return X!==0?X:k.id-N.id}var F=[],G=[],Y=1,ie=null,Z=3,S=!1,C=!1,U=!1;function b(k){for(var N=E(G);N!==null;){if(N.callback===null)L(G);else if(N.startTime<=k)L(G),N.sortIndex=N.expirationTime,x(F,N);else break;N=E(G)}}function P(k){if(U=!1,b(k),!C)if(E(F)!==null)C=!0,t(I);else{var N=E(G);N!==null&&n(P,N.startTime-k)}}function I(k,N){C=!1,U&&(U=!1,r()),S=!0;var X=Z;try{for(b(N),ie=E(F);ie!==null&&(!(ie.expirationTime>N)||k&&!e.unstable_shouldYield());){var le=ie.callback;if(typeof le=="function"){ie.callback=null,Z=ie.priorityLevel;var he=le(ie.expirationTime<=N);N=e.unstable_now(),typeof he=="function"?ie.callback=he:ie===E(F)&&L(F),b(N)}else L(F);ie=E(F)}if(ie!==null)var Te=!0;else{var T=E(G);T!==null&&n(P,T.startTime-N),Te=!1}return Te}finally{ie=null,Z=X,S=!1}}var J=o;e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(k){k.callback=null},e.unstable_continueExecution=function(){C||S||(C=!0,t(I))},e.unstable_getCurrentPriorityLevel=function(){return Z},e.unstable_getFirstCallbackNode=function(){return E(F)},e.unstable_next=function(k){switch(Z){case 1:case 2:case 3:var N=3;break;default:N=Z}var X=Z;Z=N;try{return k()}finally{Z=X}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=J,e.unstable_runWithPriority=function(k,N){switch(k){case 1:case 2:case 3:case 4:case 5:break;default:k=3}var X=Z;Z=k;try{return N()}finally{Z=X}},e.unstable_scheduleCallback=function(k,N,X){var le=e.unstable_now();switch(typeof X=="object"&&X!==null?(X=X.delay,X=typeof X=="number"&&0le?(k.sortIndex=X,x(G,k),E(F)===null&&k===E(G)&&(U?r():U=!0,n(P,X-le))):(k.sortIndex=he,x(F,k),C||S||(C=!0,t(I))),k},e.unstable_wrapCallback=function(k){var N=Z;return function(){var X=Z;Z=N;try{return k.apply(this,arguments)}finally{Z=X}}}})(lp);Eu.exports=lp;/** @license React v17.0.2 - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Zi=$.exports,Ce=Ud,je=Eu.exports;function j(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;nt}return!1}function Ye(e,t,n,r,o,i,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var Be={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Be[e]=new Ye(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Be[t]=new Ye(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Be[e]=new Ye(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Be[e]=new Ye(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Be[e]=new Ye(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Be[e]=new Ye(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Be[e]=new Ye(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Be[e]=new Ye(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Be[e]=new Ye(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ru=/[\-:]([a-z])/g;function Ou(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ru,Ou);Be[t]=new Ye(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ru,Ou);Be[t]=new Ye(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ru,Ou);Be[t]=new Ye(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Be[e]=new Ye(e,1,!1,e.toLowerCase(),null,!1,!1)});Be.xlinkHref=new Ye("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Be[e]=new Ye(e,1,!1,e.toLowerCase(),null,!0,!0)});function Cu(e,t,n,r){var o=Be.hasOwnProperty(t)?Be[t]:null,i=o!==null?o.type===0:r?!1:!(!(2s||o[a]!==i[s])return` -`+o[a].replace(" at new "," at ");while(1<=a&&0<=s);break}}}finally{Fu=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?So(e):""}function U1(e){switch(e.tag){case 5:return So(e.type);case 16:return So("Lazy");case 13:return So("Suspense");case 19:return So("SuspenseList");case 0:case 2:case 15:return e=na(e.type,!1),e;case 11:return e=na(e.type.render,!1),e;case 22:return e=na(e.type._render,!1),e;case 1:return e=na(e.type,!0),e;default:return""}}function yr(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case an:return"Fragment";case $n:return"Portal";case go:return"Profiler";case xu:return"StrictMode";case yo:return"Suspense";case ea:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Tu:return(e.displayName||"Context")+".Consumer";case ku:return(e._context.displayName||"Context")+".Provider";case Ji:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case ta:return yr(e.type);case Lu:return yr(e._render);case Pu:t=e._payload,e=e._init;try{return yr(e(t))}catch{}}return null}function sn(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function mp(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function j1(e){var t=mp(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n!="undefined"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(a){r=""+a,i.call(this,a)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(a){r=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ra(e){e._valueTracker||(e._valueTracker=j1(e))}function gp(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=mp(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function oa(e){if(e=e||(typeof document!="undefined"?document:void 0),typeof e=="undefined")return null;try{return e.activeElement||e.body}catch{return e.body}}function Iu(e,t){var n=t.checked;return Ce({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n!=null?n:e._wrapperState.initialChecked})}function yp(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=sn(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function wp(e,t){t=t.checked,t!=null&&Cu(e,"checked",t,!1)}function $u(e,t){wp(e,t);var n=sn(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Uu(e,t.type,n):t.hasOwnProperty("defaultValue")&&Uu(e,t.type,sn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Sp(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Uu(e,t,n){(t!=="number"||oa(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function V1(e){var t="";return Zi.Children.forEach(e,function(n){n!=null&&(t+=n)}),t}function ju(e,t){return e=Ce({children:void 0},t),(t=V1(t.children))&&(e.children=t),e}function wr(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=n.length))throw Error(j(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:sn(n)}}function bp(e,t){var n=sn(t.value),r=sn(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function Ep(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var Bu={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Rp(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function zu(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?Rp(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var ia,Op=function(e){return typeof MSApp!="undefined"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==Bu.svg||"innerHTML"in e)e.innerHTML=t;else{for(ia=ia||document.createElement("div"),ia.innerHTML=""+t.valueOf().toString()+"",t=ia.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function _o(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var bo={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},B1=["Webkit","ms","Moz","O"];Object.keys(bo).forEach(function(e){B1.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),bo[t]=bo[e]})});function Cp(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||bo.hasOwnProperty(e)&&bo[e]?(""+t).trim():t+"px"}function xp(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=Cp(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var z1=Ce({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Wu(e,t){if(t){if(z1[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(j(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(j(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(j(61))}if(t.style!=null&&typeof t.style!="object")throw Error(j(62))}}function Hu(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function qu(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Qu=null,Sr=null,_r=null;function kp(e){if(e=Vo(e)){if(typeof Qu!="function")throw Error(j(280));var t=e.stateNode;t&&(t=Ea(t),Qu(e.stateNode,e.type,t))}}function Tp(e){Sr?_r?_r.push(e):_r=[e]:Sr=e}function Pp(){if(Sr){var e=Sr,t=_r;if(_r=Sr=null,kp(e),t)for(e=0;er?0:1<n;n++)t.push(e);return t}function da(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,e=e.eventTimes,t=31-fn(t),e[t]=n}var fn=Math.clz32?Math.clz32:iw,rw=Math.log,ow=Math.LN2;function iw(e){return e===0?32:31-(rw(e)/ow|0)|0}var aw=je.unstable_UserBlockingPriority,sw=je.unstable_runWithPriority,pa=!0;function uw(e,t,n,r){Un||Gu();var o=sl,i=Un;Un=!0;try{Lp(o,e,t,n,r)}finally{(Un=i)||Yu()}}function lw(e,t,n,r){sw(aw,sl.bind(null,e,t,n,r))}function sl(e,t,n,r){if(pa){var o;if((o=(t&4)==0)&&0=Mo),rh=String.fromCharCode(32),oh=!1;function ih(e,t){switch(e){case"keyup":return Nw.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ah(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Cr=!1;function Mw(e,t){switch(e){case"compositionend":return ah(t);case"keypress":return t.which!==32?null:(oh=!0,rh);case"textInput":return e=t.data,e===rh&&oh?null:e;default:return null}}function Dw(e,t){if(Cr)return e==="compositionend"||!vl&&ih(e,t)?(e=Yp(),ha=ll=dn=null,Cr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ph(n)}}function vh(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?vh(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function mh(){for(var e=window,t=oa();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=oa(e.document)}return t}function yl(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Hw=qt&&"documentMode"in document&&11>=document.documentMode,xr=null,wl=null,$o=null,Sl=!1;function gh(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Sl||xr==null||xr!==oa(r)||(r=xr,"selectionStart"in r&&yl(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),$o&&Io($o,r)||($o=r,r=wa(wl,"onSelect"),0Nr||(e.current=xl[Nr],xl[Nr]=null,Nr--)}function Ne(e,t){Nr++,xl[Nr]=e.current,e.current=t}var vn={},qe=hn(vn),nt=hn(!1),Bn=vn;function Ar(e,t){var n=e.type.contextTypes;if(!n)return vn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function rt(e){return e=e.childContextTypes,e!=null}function Ra(){Re(nt),Re(qe)}function Ah(e,t,n){if(qe.current!==vn)throw Error(j(168));Ne(qe,t),Ne(nt,n)}function Mh(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in e))throw Error(j(108,yr(t)||"Unknown",o));return Ce({},n,r)}function Oa(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||vn,Bn=qe.current,Ne(qe,e),Ne(nt,nt.current),!0}function Dh(e,t,n){var r=e.stateNode;if(!r)throw Error(j(169));n?(e=Mh(e,t,Bn),r.__reactInternalMemoizedMergedChildContext=e,Re(nt),Re(qe),Ne(qe,e)):Re(nt),Ne(nt,n)}var kl=null,zn=null,Kw=je.unstable_runWithPriority,Tl=je.unstable_scheduleCallback,Pl=je.unstable_cancelCallback,Gw=je.unstable_shouldYield,Fh=je.unstable_requestPaint,Ll=je.unstable_now,Xw=je.unstable_getCurrentPriorityLevel,Ca=je.unstable_ImmediatePriority,Ih=je.unstable_UserBlockingPriority,$h=je.unstable_NormalPriority,Uh=je.unstable_LowPriority,jh=je.unstable_IdlePriority,Nl={},Yw=Fh!==void 0?Fh:function(){},Qt=null,xa=null,Al=!1,Vh=Ll(),Qe=1e4>Vh?Ll:function(){return Ll()-Vh};function Mr(){switch(Xw()){case Ca:return 99;case Ih:return 98;case $h:return 97;case Uh:return 96;case jh:return 95;default:throw Error(j(332))}}function Bh(e){switch(e){case 99:return Ca;case 98:return Ih;case 97:return $h;case 96:return Uh;case 95:return jh;default:throw Error(j(332))}}function Wn(e,t){return e=Bh(e),Kw(e,t)}function Bo(e,t,n){return e=Bh(e),Tl(e,t,n)}function $t(){if(xa!==null){var e=xa;xa=null,Pl(e)}zh()}function zh(){if(!Al&&Qt!==null){Al=!0;var e=0;try{var t=Qt;Wn(99,function(){for(;eL?(V=E,E=null):V=E.sibling;var F=d(p,E,h[L],g);if(F===null){E===null&&(E=V);break}e&&E&&F.alternate===null&&t(p,E),f=i(F,f,L),x===null?w=F:x.sibling=F,x=F,E=V}if(L===h.length)return n(p,E),w;if(E===null){for(;LL?(V=E,E=null):V=E.sibling;var G=d(p,E,F.value,g);if(G===null){E===null&&(E=V);break}e&&E&&G.alternate===null&&t(p,E),f=i(G,f,L),x===null?w=G:x.sibling=G,x=G,E=V}if(F.done)return n(p,E),w;if(E===null){for(;!F.done;L++,F=h.next())F=v(p,F.value,g),F!==null&&(f=i(F,f,L),x===null?w=F:x.sibling=F,x=F);return w}for(E=r(p,E);!F.done;L++,F=h.next())F=m(E,p,L,F.value,g),F!==null&&(e&&F.alternate!==null&&E.delete(F.key===null?L:F.key),f=i(F,f,L),x===null?w=F:x.sibling=F,x=F);return e&&E.forEach(function(Y){return t(p,Y)}),w}return function(p,f,h,g){var w=typeof h=="object"&&h!==null&&h.type===an&&h.key===null;w&&(h=h.props.children);var x=typeof h=="object"&&h!==null;if(x)switch(h.$$typeof){case mo:e:{for(x=h.key,w=f;w!==null;){if(w.key===x){switch(w.tag){case 7:if(h.type===an){n(p,w.sibling),f=o(w,h.props.children),f.return=p,p=f;break e}break;default:if(w.elementType===h.type){n(p,w.sibling),f=o(w,h.props),f.ref=Wo(p,w,h),f.return=p,p=f;break e}}n(p,w);break}else t(p,w);w=w.sibling}h.type===an?(f=Wr(h.props.children,p.mode,g,h.key),f.return=p,p=f):(g=Za(h.type,h.key,h.props,null,p.mode,g),g.ref=Wo(p,f,h),g.return=p,p=g)}return a(p);case $n:e:{for(w=h.key;f!==null;){if(f.key===w)if(f.tag===4&&f.stateNode.containerInfo===h.containerInfo&&f.stateNode.implementation===h.implementation){n(p,f.sibling),f=o(f,h.children||[]),f.return=p,p=f;break e}else{n(p,f);break}else t(p,f);f=f.sibling}f=Sc(h,p.mode,g),f.return=p,p=f}return a(p)}if(typeof h=="string"||typeof h=="number")return h=""+h,f!==null&&f.tag===6?(n(p,f.sibling),f=o(f,h),f.return=p,p=f):(n(p,f),f=wc(h,p.mode,g),f.return=p,p=f),a(p);if(Aa(h))return y(p,f,h,g);if(wo(h))return _(p,f,h,g);if(x&&Ma(p,h),typeof h=="undefined"&&!w)switch(p.tag){case 1:case 22:case 0:case 11:case 15:throw Error(j(152,yr(p.type)||"Component"))}return n(p,f)}}var Da=Zh(!0),Jh=Zh(!1),Ho={},Ut=hn(Ho),qo=hn(Ho),Qo=hn(Ho);function Hn(e){if(e===Ho)throw Error(j(174));return e}function $l(e,t){switch(Ne(Qo,t),Ne(qo,e),Ne(Ut,Ho),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:zu(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=zu(t,e)}Re(Ut),Ne(Ut,t)}function Ir(){Re(Ut),Re(qo),Re(Qo)}function ev(e){Hn(Qo.current);var t=Hn(Ut.current),n=zu(t,e.type);t!==n&&(Ne(qo,e),Ne(Ut,n))}function Ul(e){qo.current===e&&(Re(Ut),Re(qo))}var Ae=hn(0);function Fa(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if((t.flags&64)!=0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Kt=null,wn=null,jt=!1;function tv(e,t){var n=yt(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function nv(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function jl(e){if(jt){var t=wn;if(t){var n=t;if(!nv(e,t)){if(t=Tr(n.nextSibling),!t||!nv(e,t)){e.flags=e.flags&-1025|2,jt=!1,Kt=e;return}tv(Kt,n)}Kt=e,wn=Tr(t.firstChild)}else e.flags=e.flags&-1025|2,jt=!1,Kt=e}}function rv(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Kt=e}function Ia(e){if(e!==Kt)return!1;if(!jt)return rv(e),jt=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!Rl(t,e.memoizedProps))for(t=wn;t;)tv(e,t),t=Tr(t.nextSibling);if(rv(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(j(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){wn=Tr(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}wn=null}}else wn=Kt?Tr(e.stateNode.nextSibling):null;return!0}function Vl(){wn=Kt=null,jt=!1}var $r=[];function Bl(){for(var e=0;e<$r.length;e++)$r[e]._workInProgressVersionPrimary=null;$r.length=0}var Ko=In.ReactCurrentDispatcher,mt=In.ReactCurrentBatchConfig,Go=0,Fe=null,Ke=null,ze=null,$a=!1,Xo=!1;function ot(){throw Error(j(321))}function zl(e,t){if(t===null)return!1;for(var n=0;ni))throw Error(j(301));i+=1,ze=Ke=null,t.updateQueue=null,Ko.current=nS,e=n(r,o)}while(Xo)}if(Ko.current=Ba,t=Ke!==null&&Ke.next!==null,Go=0,ze=Ke=Fe=null,$a=!1,t)throw Error(j(300));return e}function qn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ze===null?Fe.memoizedState=ze=e:ze=ze.next=e,ze}function Qn(){if(Ke===null){var e=Fe.alternate;e=e!==null?e.memoizedState:null}else e=Ke.next;var t=ze===null?Fe.memoizedState:ze.next;if(t!==null)ze=t,Ke=e;else{if(e===null)throw Error(j(310));Ke=e,e={memoizedState:Ke.memoizedState,baseState:Ke.baseState,baseQueue:Ke.baseQueue,queue:Ke.queue,next:null},ze===null?Fe.memoizedState=ze=e:ze=ze.next=e}return ze}function Vt(e,t){return typeof t=="function"?t(e):t}function Yo(e){var t=Qn(),n=t.queue;if(n===null)throw Error(j(311));n.lastRenderedReducer=e;var r=Ke,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var a=o.next;o.next=i.next,i.next=a}r.baseQueue=o=i,n.pending=null}if(o!==null){o=o.next,r=r.baseState;var s=a=i=null,u=o;do{var l=u.lane;if((Go&l)===l)s!==null&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var c={lane:l,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};s===null?(a=s=c,i=r):s=s.next=c,Fe.lanes|=l,ti|=l}u=u.next}while(u!==null&&u!==o);s===null?i=r:s.next=a,ht(r,t.memoizedState)||(Ot=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function Zo(e){var t=Qn(),n=t.queue;if(n===null)throw Error(j(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var a=o=o.next;do i=e(i,a.action),a=a.next;while(a!==o);ht(i,t.memoizedState)||(Ot=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function ov(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===r:(e=e.mutableReadLanes,(e=(Go&e)===e)&&(t._workInProgressVersionPrimary=r,$r.push(t))),e)return n(t._source);throw $r.push(t),Error(j(350))}function iv(e,t,n,r){var o=Ze;if(o===null)throw Error(j(349));var i=t._getVersion,a=i(t._source),s=Ko.current,u=s.useState(function(){return ov(o,t,n)}),l=u[1],c=u[0];u=ze;var v=e.memoizedState,d=v.refs,m=d.getSnapshot,y=v.source;v=v.subscribe;var _=Fe;return e.memoizedState={refs:d,source:t,subscribe:r},s.useEffect(function(){d.getSnapshot=n,d.setSnapshot=l;var p=i(t._source);if(!ht(a,p)){p=n(t._source),ht(c,p)||(l(p),p=_n(_),o.mutableReadLanes|=p&o.pendingLanes),p=o.mutableReadLanes,o.entangledLanes|=p;for(var f=o.entanglements,h=p;0n?98:n,function(){e(!0)}),Wn(97<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=a.createElement(n,{is:r.is}):(e=a.createElement(n),n==="select"&&(a=e,r.multiple?a.multiple=!0:r.size&&(a.size=r.size))):e=a.createElementNS(e,n),e[pn]=t,e[ba]=r,Cv(e,t,!1,!1),t.stateNode=e,a=Hu(n,r),n){case"dialog":Ee("cancel",e),Ee("close",e),o=r;break;case"iframe":case"object":case"embed":Ee("load",e),o=r;break;case"video":case"audio":for(o=0;occ&&(t.flags|=64,i=!0,ei(r,!1),t.lanes=33554432)}else{if(!i)if(e=Fa(a),e!==null){if(t.flags|=64,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),ei(r,!0),r.tail===null&&r.tailMode==="hidden"&&!a.alternate&&!jt)return t=t.lastEffect=r.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*Qe()-r.renderingStartTime>cc&&n!==1073741824&&(t.flags|=64,i=!0,ei(r,!1),t.lanes=33554432);r.isBackwards?(a.sibling=t.child,t.child=a):(n=r.last,n!==null?n.sibling=a:t.child=a,r.last=a)}return r.tail!==null?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Qe(),n.sibling=null,t=Ae.current,Ne(Ae,i?t&1|2:t&1),n):null;case 23:case 24:return mc(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&r.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(j(156,t.tag))}function iS(e){switch(e.tag){case 1:rt(e.type)&&Ra();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(Ir(),Re(nt),Re(qe),Bl(),t=e.flags,(t&64)!=0)throw Error(j(285));return e.flags=t&-4097|64,e;case 5:return Ul(e),null;case 13:return Re(Ae),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return Re(Ae),null;case 4:return Ir(),null;case 10:return Dl(e),null;case 23:case 24:return mc(),null;default:return null}}function ec(e,t){try{var n="",r=t;do n+=U1(r),r=r.return;while(r);var o=n}catch(i){o=` -Error generating stack: `+i.message+` -`+i.stack}return{value:e,source:t,stack:o}}function tc(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var aS=typeof WeakMap=="function"?WeakMap:Map;function Tv(e,t,n){n=gn(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){qa||(qa=!0,fc=r),tc(e,t)},n}function Pv(e,t,n){n=gn(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var o=t.value;n.payload=function(){return tc(e,t),r(o)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(n.callback=function(){typeof r!="function"&&(Bt===null?Bt=new Set([this]):Bt.add(this),tc(e,t));var a=t.stack;this.componentDidCatch(t.value,{componentStack:a!==null?a:""})}),n}var sS=typeof WeakSet=="function"?WeakSet:Set;function Lv(e){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(n){Rn(e,n)}else t.current=null}function uS(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(t.flags&256&&e!==null){var n=e.memoizedProps,r=e.memoizedState;e=t.stateNode,t=e.getSnapshotBeforeUpdate(t.elementType===t.type?n:Rt(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:t.flags&256&&Ol(t.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(j(163))}function lS(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{if((e.tag&3)==3){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{var o=e;r=o.next,o=o.tag,(o&4)!=0&&(o&1)!=0&&(qv(n,e),gS(n,e)),e=r}while(e!==t)}return;case 1:e=n.stateNode,n.flags&4&&(t===null?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Rt(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),t=n.updateQueue,t!==null&&Qh(n,t,e);return;case 3:if(t=n.updateQueue,t!==null){if(e=null,n.child!==null)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}Qh(n,t,e)}return;case 5:e=n.stateNode,t===null&&n.flags&4&&kh(n.type,n.memoizedProps)&&e.focus();return;case 6:return;case 4:return;case 12:return;case 13:n.memoizedState===null&&(n=n.alternate,n!==null&&(n=n.memoizedState,n!==null&&(n=n.dehydrated,n!==null&&zp(n))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(j(163))}function Nv(e,t){for(var n=e;;){if(n.tag===5){var r=n.stateNode;if(t)r=r.style,typeof r.setProperty=="function"?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=o!=null&&o.hasOwnProperty("display")?o.display:null,r.style.display=Cp("display",o)}}else if(n.tag===6)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((n.tag!==23&&n.tag!==24||n.memoizedState===null||n===e)&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function Av(e,t){if(zn&&typeof zn.onCommitFiberUnmount=="function")try{zn.onCommitFiberUnmount(kl,t)}catch{}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(e=t.updateQueue,e!==null&&(e=e.lastEffect,e!==null)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,o!==void 0)if((r&4)!=0)qv(t,n);else{r=t;try{o()}catch(i){Rn(r,i)}}n=n.next}while(n!==e)}break;case 1:if(Lv(t),e=t.stateNode,typeof e.componentWillUnmount=="function")try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(i){Rn(t,i)}break;case 5:Lv(t);break;case 4:Iv(e,t)}}function Mv(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function Dv(e){return e.tag===5||e.tag===3||e.tag===4}function Fv(e){e:{for(var t=e.return;t!==null;){if(Dv(t))break e;t=t.return}throw Error(j(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:t=t.containerInfo,r=!0;break;case 4:t=t.containerInfo,r=!0;break;default:throw Error(j(161))}n.flags&16&&(_o(t,""),n.flags&=-17);e:t:for(n=e;;){for(;n.sibling===null;){if(n.return===null||Dv(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.flags&2||n.child===null||n.tag===4)continue t;n.child.return=n,n=n.child}if(!(n.flags&2)){n=n.stateNode;break e}}r?nc(e,n,t):rc(e,n,t)}function nc(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Sa));else if(r!==4&&(e=e.child,e!==null))for(nc(e,t,n),e=e.sibling;e!==null;)nc(e,t,n),e=e.sibling}function rc(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(rc(e,t,n),e=e.sibling;e!==null;)rc(e,t,n),e=e.sibling}function Iv(e,t){for(var n=t,r=!1,o,i;;){if(!r){r=n.return;e:for(;;){if(r===null)throw Error(j(160));switch(o=r.stateNode,r.tag){case 5:i=!1;break e;case 3:o=o.containerInfo,i=!0;break e;case 4:o=o.containerInfo,i=!0;break e}r=r.return}r=!0}if(n.tag===5||n.tag===6){e:for(var a=e,s=n,u=s;;)if(Av(a,u),u.child!==null&&u.tag!==4)u.child.return=u,u=u.child;else{if(u===s)break e;for(;u.sibling===null;){if(u.return===null||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}i?(a=o,s=n.stateNode,a.nodeType===8?a.parentNode.removeChild(s):a.removeChild(s)):o.removeChild(n.stateNode)}else if(n.tag===4){if(n.child!==null){o=n.stateNode.containerInfo,i=!0,n.child.return=n,n=n.child;continue}}else if(Av(e,n),n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return,n.tag===4&&(r=!1)}n.sibling.return=n.return,n=n.sibling}}function oc(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do(r.tag&3)==3&&(e=r.destroy,r.destroy=void 0,e!==void 0&&e()),r=r.next;while(r!==n)}return;case 1:return;case 5:if(n=t.stateNode,n!=null){r=t.memoizedProps;var o=e!==null?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,i!==null){for(n[ba]=r,e==="input"&&r.type==="radio"&&r.name!=null&&wp(n,r),Hu(e,o),t=Hu(e,r),o=0;oo&&(o=a),n&=~i}if(n=o,n=Qe()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*fS(n/1960))-n,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}We!==5&&(We=2),u=ec(u,s),d=a;do{switch(d.tag){case 3:i=u,d.flags|=4096,t&=-t,d.lanes|=t;var x=Tv(d,i,t);qh(d,x);break e;case 1:i=u;var E=d.type,L=d.stateNode;if((d.flags&64)==0&&(typeof E.getDerivedStateFromError=="function"||L!==null&&typeof L.componentDidCatch=="function"&&(Bt===null||!Bt.has(L)))){d.flags|=4096,t&=-t,d.lanes|=t;var V=Pv(d,i,t);qh(d,V);break e}}d=d.return}while(d!==null)}Hv(n)}catch(F){t=F,$e===n&&n!==null&&($e=n=n.return);continue}break}while(1)}function zv(){var e=Wa.current;return Wa.current=Ba,e===null?Ba:e}function ai(e,t){var n=oe;oe|=16;var r=zv();Ze===e&&Ge===t||zr(e,t);do try{pS();break}catch(o){Bv(e,o)}while(1);if(Ml(),oe=n,Wa.current=r,$e!==null)throw Error(j(261));return Ze=null,Ge=0,We}function pS(){for(;$e!==null;)Wv($e)}function hS(){for(;$e!==null&&!Gw();)Wv($e)}function Wv(e){var t=Kv(e.alternate,e,Kn);e.memoizedProps=e.pendingProps,t===null?Hv(e):$e=t,ic.current=null}function Hv(e){var t=e;do{var n=t.alternate;if(e=t.return,(t.flags&2048)==0){if(n=oS(n,t,Kn),n!==null){$e=n;return}if(n=t,n.tag!==24&&n.tag!==23||n.memoizedState===null||(Kn&1073741824)!=0||(n.mode&4)==0){for(var r=0,o=n.child;o!==null;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}e!==null&&(e.flags&2048)==0&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1a&&(s=a,a=x,x=s),s=hh(h,x),i=hh(h,a),s&&i&&(w.rangeCount!==1||w.anchorNode!==s.node||w.anchorOffset!==s.offset||w.focusNode!==i.node||w.focusOffset!==i.offset)&&(g=g.createRange(),g.setStart(s.node,s.offset),w.removeAllRanges(),x>a?(w.addRange(g),w.extend(i.node,i.offset)):(g.setEnd(i.node,i.offset),w.addRange(g)))))),g=[],w=h;w=w.parentNode;)w.nodeType===1&&g.push({element:w,left:w.scrollLeft,top:w.scrollTop});for(typeof h.focus=="function"&&h.focus(),h=0;hQe()-lc?zr(e,0):sc|=n),gt(e,t)}function SS(e,t){var n=e.stateNode;n!==null&&n.delete(t),t=0,t===0&&(t=e.mode,(t&2)==0?t=1:(t&4)==0?t=Mr()===99?1:2:(Yt===0&&(Yt=Ur),t=Rr(62914560&~Yt),t===0&&(t=4194304))),n=ut(),e=Xa(e,t),e!==null&&(da(e,t,n),gt(e,n))}var Kv;Kv=function(e,t,n){var r=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||nt.current)Ot=!0;else if((n&r)!=0)Ot=(e.flags&16384)!=0;else{switch(Ot=!1,t.tag){case 3:wv(t),Vl();break;case 5:ev(t);break;case 1:rt(t.type)&&Oa(t);break;case 4:$l(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;Ne(ka,o._currentValue),o._currentValue=r;break;case 13:if(t.memoizedState!==null)return(n&t.child.childLanes)!=0?Sv(e,t,n):(Ne(Ae,Ae.current&1),t=Gt(e,t,n),t!==null?t.sibling:null);Ne(Ae,Ae.current&1);break;case 19:if(r=(n&t.childLanes)!=0,(e.flags&64)!=0){if(r)return Ov(e,t,n);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),Ne(Ae,Ae.current),r)break;return null;case 23:case 24:return t.lanes=0,Gl(e,t,n)}return Gt(e,t,n)}else Ot=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=Ar(t,qe.current),Fr(t,n),o=Wl(null,t,r,e,o,n),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,rt(r)){var i=!0;Oa(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Fl(t);var a=r.getDerivedStateFromProps;typeof a=="function"&&La(t,r,a,e),o.updater=Na,t.stateNode=o,o._reactInternals=t,Il(t,r,e,n),t=Yl(null,t,r,!0,i,n)}else t.tag=0,it(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=bS(o),e=Rt(o,e),i){case 0:t=Xl(null,t,o,e,n);break e;case 1:t=yv(null,t,o,e,n);break e;case 11:t=hv(null,t,o,e,n);break e;case 14:t=vv(null,t,o,Rt(o.type,e),r,n);break e}throw Error(j(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Rt(r,o),Xl(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Rt(r,o),yv(e,t,r,o,n);case 3:if(wv(t),r=t.updateQueue,e===null||r===null)throw Error(j(282));if(r=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,Hh(e,t),zo(t,r,null,n),r=t.memoizedState.element,r===o)Vl(),t=Gt(e,t,n);else{if(o=t.stateNode,(i=o.hydrate)&&(wn=Tr(t.stateNode.containerInfo.firstChild),Kt=t,i=jt=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o=0)&&i(u,!c)}function s(u){var l=[].slice.call(u.querySelectorAll("*"),0).reduce(function(c,v){return c.concat(v.shadowRoot?s(v.shadowRoot):[v])},[]);return l.filter(a)}e.exports=t.default})(rs,rs.exports);Object.defineProperty(Ct,"__esModule",{value:!0});Ct.resetState=FS;Ct.log=IS;Ct.handleBlur=li;Ct.handleFocus=ci;Ct.markForFocusLater=$S;Ct.returnFocus=US;Ct.popWithoutFocus=jS;Ct.setupScopedFocus=VS;Ct.teardownScopedFocus=BS;var AS=rs.exports,MS=DS(AS);function DS(e){return e&&e.__esModule?e:{default:e}}var Hr=[],qr=null,Cc=!1;function FS(){Hr=[]}function IS(){}function li(){Cc=!0}function ci(){if(Cc){if(Cc=!1,!qr)return;setTimeout(function(){if(!qr.contains(document.activeElement)){var e=(0,MS.default)(qr)[0]||qr;e.focus()}},0)}}function $S(){Hr.push(document.activeElement)}function US(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=null;try{Hr.length!==0&&(t=Hr.pop(),t.focus({preventScroll:e}));return}catch{console.warn(["You tried to return focus to",t,"but it is not in the DOM anymore"].join(" "))}}function jS(){Hr.length>0&&Hr.pop()}function VS(e){qr=e,window.addEventListener?(window.addEventListener("blur",li,!1),document.addEventListener("focus",ci,!0)):(window.attachEvent("onBlur",li),document.attachEvent("onFocus",ci))}function BS(){qr=null,window.addEventListener?(window.removeEventListener("blur",li),document.removeEventListener("focus",ci)):(window.detachEvent("onBlur",li),document.detachEvent("onFocus",ci))}var xc={exports:{}};(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=a;var n=rs.exports,r=o(n);function o(s){return s&&s.__esModule?s:{default:s}}function i(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:document;return s.activeElement.shadowRoot?i(s.activeElement.shadowRoot):s.activeElement}function a(s,u){var l=(0,r.default)(s);if(!l.length){u.preventDefault();return}var c=void 0,v=u.shiftKey,d=l[0],m=l[l.length-1],y=i();if(s===y){if(!v)return;c=m}if(m===y&&!v&&(c=d),d===y&&v&&(c=m),c){u.preventDefault(),c.focus();return}var _=/(\bChrome\b|\bSafari\b)\//.exec(navigator.userAgent),p=_!=null&&_[1]!="Chrome"&&/\biPod\b|\biPad\b/g.exec(navigator.userAgent)==null;if(!!p){var f=l.indexOf(y);if(f>-1&&(f+=v?-1:1),c=l[f],typeof c=="undefined"){u.preventDefault(),c=v?m:d,c.focus();return}u.preventDefault(),c.focus()}}e.exports=t.default})(xc,xc.exports);var xt={},zS=function(){},WS=zS,kt={},tm={exports:{}};/*! - Copyright (c) 2015 Jed Watson. - Based on code that is Copyright 2013-2015, Facebook, Inc. - All rights reserved. -*/(function(e){(function(){var t=!!(typeof window!="undefined"&&window.document&&window.document.createElement),n={canUseDOM:t,canUseWorkers:typeof Worker!="undefined",canUseEventListeners:t&&!!(window.addEventListener||window.attachEvent),canUseViewport:t&&!!window.screen};e.exports?e.exports=n:window.ExecutionEnvironment=n})()})(tm);Object.defineProperty(kt,"__esModule",{value:!0});kt.canUseDOM=kt.SafeNodeList=kt.SafeHTMLCollection=void 0;var HS=tm.exports,qS=QS(HS);function QS(e){return e&&e.__esModule?e:{default:e}}var os=qS.default,KS=os.canUseDOM?window.HTMLElement:{};kt.SafeHTMLCollection=os.canUseDOM?window.HTMLCollection:{};kt.SafeNodeList=os.canUseDOM?window.NodeList:{};kt.canUseDOM=os.canUseDOM;kt.default=KS;Object.defineProperty(xt,"__esModule",{value:!0});xt.resetState=JS;xt.log=e_;xt.assertNodeList=nm;xt.setElement=t_;xt.validateElement=kc;xt.hide=n_;xt.show=r_;xt.documentNotReadyOrSSRTesting=o_;var GS=WS,XS=ZS(GS),YS=kt;function ZS(e){return e&&e.__esModule?e:{default:e}}var wt=null;function JS(){wt&&(wt.removeAttribute?wt.removeAttribute("aria-hidden"):wt.length!=null?wt.forEach(function(e){return e.removeAttribute("aria-hidden")}):document.querySelectorAll(wt).forEach(function(e){return e.removeAttribute("aria-hidden")})),wt=null}function e_(){}function nm(e,t){if(!e||!e.length)throw new Error("react-modal: No elements were found for selector "+t+".")}function t_(e){var t=e;if(typeof t=="string"&&YS.canUseDOM){var n=document.querySelectorAll(t);nm(n,t),t=n}return wt=t||wt,wt}function kc(e){var t=e||wt;return t?Array.isArray(t)||t instanceof HTMLCollection||t instanceof NodeList?t:[t]:((0,XS.default)(!1,["react-modal: App element is not defined.","Please use `Modal.setAppElement(el)` or set `appElement={el}`.","This is needed so screen readers don't see main content","when modal is opened. It is not recommended, but you can opt-out","by setting `ariaHideApp={false}`."].join(" ")),[])}function n_(e){var t=!0,n=!1,r=void 0;try{for(var o=kc(e)[Symbol.iterator](),i;!(t=(i=o.next()).done);t=!0){var a=i.value;a.setAttribute("aria-hidden","true")}}catch(s){n=!0,r=s}finally{try{!t&&o.return&&o.return()}finally{if(n)throw r}}}function r_(e){var t=!0,n=!1,r=void 0;try{for(var o=kc(e)[Symbol.iterator](),i;!(t=(i=o.next()).done);t=!0){var a=i.value;a.removeAttribute("aria-hidden")}}catch(s){n=!0,r=s}finally{try{!t&&o.return&&o.return()}finally{if(n)throw r}}}function o_(){wt=null}var Qr={};Object.defineProperty(Qr,"__esModule",{value:!0});Qr.resetState=i_;Qr.log=a_;var fi={},di={};function rm(e,t){e.classList.remove(t)}function i_(){var e=document.getElementsByTagName("html")[0];for(var t in fi)rm(e,fi[t]);var n=document.body;for(var r in di)rm(n,di[r]);fi={},di={}}function a_(){}var s_=function(t,n){return t[n]||(t[n]=0),t[n]+=1,n},u_=function(t,n){return t[n]&&(t[n]-=1),n},l_=function(t,n,r){r.forEach(function(o){s_(n,o),t.add(o)})},c_=function(t,n,r){r.forEach(function(o){u_(n,o),n[o]===0&&t.remove(o)})};Qr.add=function(t,n){return l_(t.classList,t.nodeName.toLowerCase()=="html"?fi:di,n.split(" "))};Qr.remove=function(t,n){return c_(t.classList,t.nodeName.toLowerCase()=="html"?fi:di,n.split(" "))};var Kr={};Object.defineProperty(Kr,"__esModule",{value:!0});Kr.log=d_;Kr.resetState=p_;function f_(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var om=function e(){var t=this;f_(this,e),this.register=function(n){t.openInstances.indexOf(n)===-1&&(t.openInstances.push(n),t.emit("register"))},this.deregister=function(n){var r=t.openInstances.indexOf(n);r!==-1&&(t.openInstances.splice(r,1),t.emit("deregister"))},this.subscribe=function(n){t.subscribers.push(n)},this.emit=function(n){t.subscribers.forEach(function(r){return r(n,t.openInstances.slice())})},this.openInstances=[],this.subscribers=[]},is=new om;function d_(){console.log("portalOpenInstances ----------"),console.log(is.openInstances.length),is.openInstances.forEach(function(e){return console.log(e)}),console.log("end portalOpenInstances ----------")}function p_(){is=new om}Kr.default=is;var Tc={};Object.defineProperty(Tc,"__esModule",{value:!0});Tc.resetState=g_;Tc.log=y_;var h_=Kr,v_=m_(h_);function m_(e){return e&&e.__esModule?e:{default:e}}var Xe=void 0,Tt=void 0,Yn=[];function g_(){for(var e=[Xe,Tt],t=0;t0?(document.body.firstChild!==Xe&&document.body.insertBefore(Xe,document.body.firstChild),document.body.lastChild!==Tt&&document.body.appendChild(Tt)):(Xe.parentElement&&Xe.parentElement.removeChild(Xe),Tt.parentElement&&Tt.parentElement.removeChild(Tt))}v_.default.subscribe(w_);(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=Object.assign||function(S){for(var C=1;C0&&(ie-=1,ie===0&&m.show(I)),b.props.shouldFocusAfterRender&&(b.props.shouldReturnFocusAfterClose?(l.returnFocus(b.props.preventScroll),l.teardownScopedFocus()):l.popWithoutFocus()),b.props.onAfterClose&&b.props.onAfterClose(),g.default.deregister(b)},b.open=function(){b.beforeOpen(),b.state.afterOpen&&b.state.beforeClose?(clearTimeout(b.closeTimer),b.setState({beforeClose:!1})):(b.props.shouldFocusAfterRender&&(l.setupScopedFocus(b.node),l.markForFocusLater()),b.setState({isOpen:!0},function(){b.openAnimationFrame=requestAnimationFrame(function(){b.setState({afterOpen:!0}),b.props.isOpen&&b.props.onAfterOpen&&b.props.onAfterOpen({overlayEl:b.overlay,contentEl:b.content})})}))},b.close=function(){b.props.closeTimeoutMS>0?b.closeWithTimeout():b.closeWithoutTimeout()},b.focusContent=function(){return b.content&&!b.contentHasFocus()&&b.content.focus({preventScroll:!0})},b.closeWithTimeout=function(){var P=Date.now()+b.props.closeTimeoutMS;b.setState({beforeClose:!0,closesAt:P},function(){b.closeTimer=setTimeout(b.closeWithoutTimeout,b.state.closesAt-Date.now())})},b.closeWithoutTimeout=function(){b.setState({beforeClose:!1,isOpen:!1,afterOpen:!1,closesAt:null},b.afterClose)},b.handleKeyDown=function(P){P.keyCode===G&&(0,v.default)(b.content,P),b.props.shouldCloseOnEsc&&P.keyCode===Y&&(P.stopPropagation(),b.requestClose(P))},b.handleOverlayOnClick=function(P){b.shouldClose===null&&(b.shouldClose=!0),b.shouldClose&&b.props.shouldCloseOnOverlayClick&&(b.ownerHandlesClose()?b.requestClose(P):b.focusContent()),b.shouldClose=null},b.handleContentOnMouseUp=function(){b.shouldClose=!1},b.handleOverlayOnMouseDown=function(P){!b.props.shouldCloseOnOverlayClick&&P.target==b.overlay&&P.preventDefault()},b.handleContentOnClick=function(){b.shouldClose=!1},b.handleContentOnMouseDown=function(){b.shouldClose=!1},b.requestClose=function(P){return b.ownerHandlesClose()&&b.props.onRequestClose(P)},b.ownerHandlesClose=function(){return b.props.onRequestClose},b.shouldBeClosed=function(){return!b.state.isOpen&&!b.state.beforeClose},b.contentHasFocus=function(){return document.activeElement===b.content||b.content.contains(document.activeElement)},b.buildClassName=function(P,I){var J=(typeof I=="undefined"?"undefined":r(I))==="object"?I:{base:F[P],afterOpen:F[P]+"--after-open",beforeClose:F[P]+"--before-close"},k=J.base;return b.state.afterOpen&&(k=k+" "+J.afterOpen),b.state.beforeClose&&(k=k+" "+J.beforeClose),typeof I=="string"&&I?k+" "+I:k},b.attributesFromObject=function(P,I){return Object.keys(I).reduce(function(J,k){return J[P+"-"+k]=I[k],J},{})},b.state={afterOpen:!1,beforeClose:!1},b.shouldClose=null,b.moveFromContentToOverlay=null,b}return o(C,[{key:"componentDidMount",value:function(){this.props.isOpen&&this.open()}},{key:"componentDidUpdate",value:function(b,P){this.props.isOpen&&!b.isOpen?this.open():!this.props.isOpen&&b.isOpen&&this.close(),this.props.shouldFocusAfterRender&&this.state.isOpen&&!P.isOpen&&this.focusContent()}},{key:"componentWillUnmount",value:function(){this.state.isOpen&&this.afterClose(),clearTimeout(this.closeTimer),cancelAnimationFrame(this.openAnimationFrame)}},{key:"beforeOpen",value:function(){var b=this.props,P=b.appElement,I=b.ariaHideApp,J=b.htmlOpenClassName,k=b.bodyOpenClassName;k&&_.add(document.body,k),J&&_.add(document.getElementsByTagName("html")[0],J),I&&(ie+=1,m.hide(P)),g.default.register(this)}},{key:"render",value:function(){var b=this.props,P=b.id,I=b.className,J=b.overlayClassName,k=b.defaultStyles,N=b.children,X=I?{}:k.content,le=J?{}:k.overlay;if(this.shouldBeClosed())return null;var he={ref:this.setOverlayRef,className:this.buildClassName("overlay",J),style:n({},le,this.props.style.overlay),onClick:this.handleOverlayOnClick,onMouseDown:this.handleOverlayOnMouseDown},Te=n({id:P,ref:this.setContentRef,style:n({},X,this.props.style.content),className:this.buildClassName("content",I),tabIndex:"-1",onKeyDown:this.handleKeyDown,onMouseDown:this.handleContentOnMouseDown,onMouseUp:this.handleContentOnMouseUp,onClick:this.handleContentOnClick,role:this.props.role,"aria-label":this.props.contentLabel},this.attributesFromObject("aria",n({modal:!0},this.props.aria)),this.attributesFromObject("data",this.props.data||{}),{"data-testid":this.props.testId}),T=this.props.contentElement(Te,N);return this.props.overlayElement(he,T)}}]),C}(i.Component);Z.defaultProps={style:{overlay:{},content:{}},defaultStyles:{}},Z.propTypes={isOpen:s.default.bool.isRequired,defaultStyles:s.default.shape({content:s.default.object,overlay:s.default.object}),style:s.default.shape({content:s.default.object,overlay:s.default.object}),className:s.default.oneOfType([s.default.string,s.default.object]),overlayClassName:s.default.oneOfType([s.default.string,s.default.object]),bodyOpenClassName:s.default.string,htmlOpenClassName:s.default.string,ariaHideApp:s.default.bool,appElement:s.default.oneOfType([s.default.instanceOf(f.default),s.default.instanceOf(p.SafeHTMLCollection),s.default.instanceOf(p.SafeNodeList),s.default.arrayOf(s.default.instanceOf(f.default))]),onAfterOpen:s.default.func,onAfterClose:s.default.func,onRequestClose:s.default.func,closeTimeoutMS:s.default.number,shouldFocusAfterRender:s.default.bool,shouldCloseOnOverlayClick:s.default.bool,shouldReturnFocusAfterClose:s.default.bool,preventScroll:s.default.bool,role:s.default.string,contentLabel:s.default.string,aria:s.default.object,data:s.default.object,children:s.default.node,shouldCloseOnEsc:s.default.bool,overlayRef:s.default.func,contentRef:s.default.func,id:s.default.string,overlayElement:s.default.func,contentElement:s.default.func,testId:s.default.string},t.default=Z,e.exports=t.default})(Oc,Oc.exports);function am(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);e!=null&&this.setState(e)}function sm(e){function t(n){var r=this.constructor.getDerivedStateFromProps(e,n);return r!=null?r:null}this.setState(t.bind(this))}function um(e,t){try{var n=this.props,r=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(n,r)}finally{this.props=n,this.state=r}}am.__suppressDeprecationWarning=!0;sm.__suppressDeprecationWarning=!0;um.__suppressDeprecationWarning=!0;function S_(e){var t=e.prototype;if(!t||!t.isReactComponent)throw new Error("Can only polyfill class components");if(typeof e.getDerivedStateFromProps!="function"&&typeof t.getSnapshotBeforeUpdate!="function")return e;var n=null,r=null,o=null;if(typeof t.componentWillMount=="function"?n="componentWillMount":typeof t.UNSAFE_componentWillMount=="function"&&(n="UNSAFE_componentWillMount"),typeof t.componentWillReceiveProps=="function"?r="componentWillReceiveProps":typeof t.UNSAFE_componentWillReceiveProps=="function"&&(r="UNSAFE_componentWillReceiveProps"),typeof t.componentWillUpdate=="function"?o="componentWillUpdate":typeof t.UNSAFE_componentWillUpdate=="function"&&(o="UNSAFE_componentWillUpdate"),n!==null||r!==null||o!==null){var i=e.displayName||e.name,a=typeof e.getDerivedStateFromProps=="function"?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error(`Unsafe legacy lifecycles will not be called for components using new component APIs. - -`+i+" uses "+a+" but also contains the following legacy lifecycles:"+(n!==null?` - `+n:"")+(r!==null?` - `+r:"")+(o!==null?` - `+o:"")+` - -The above lifecycles should be removed. Learn more about this warning here: -https://fb.me/react-async-component-lifecycle-hooks`)}if(typeof e.getDerivedStateFromProps=="function"&&(t.componentWillMount=am,t.componentWillReceiveProps=sm),typeof t.getSnapshotBeforeUpdate=="function"){if(typeof t.componentDidUpdate!="function")throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");t.componentWillUpdate=um;var s=t.componentDidUpdate;t.componentDidUpdate=function(l,c,v){var d=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:v;s.call(this,l,c,d)}}return e}var __=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",polyfill:S_}),b_=t1(__);Object.defineProperty(Xn,"__esModule",{value:!0});Xn.bodyOpenClassName=Xn.portalClassName=void 0;var lm=Object.assign||function(e){for(var t=1;t0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();function fe(){return fe=Object.assign||function(e){for(var t=1;t=0&&e!==1/0}function cs(e){return Array.isArray(e)?e:[e]}function mm(e,t){return Math.max(e+(t||0)-Date.now(),0)}function fs(e,t,n){return vi(e)?typeof t=="function"?fe({},n,{queryKey:e,queryFn:t}):fe({},t,{queryKey:e}):e}function F_(e,t,n){return vi(e)?typeof t=="function"?fe({},n,{mutationKey:e,mutationFn:t}):fe({},t,{mutationKey:e}):typeof e=="function"?fe({},t,{mutationFn:e}):fe({},e)}function xn(e,t,n){return vi(e)?[fe({},t,{queryKey:e}),n]:[e||{},t]}function I_(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var n=e!=null?e:!t;return n?"active":"inactive"}function gm(e,t){var n=e.active,r=e.exact,o=e.fetching,i=e.inactive,a=e.predicate,s=e.queryKey,u=e.stale;if(vi(s)){if(r){if(t.queryHash!==Lc(s,t.options))return!1}else if(!ds(t.queryKey,s))return!1}var l=I_(n,i);if(l==="none")return!1;if(l!=="all"){var c=t.isActive();if(l==="active"&&!c||l==="inactive"&&c)return!1}return!(typeof u=="boolean"&&t.isStale()!==u||typeof o=="boolean"&&t.isFetching()!==o||a&&!a(t))}function ym(e,t){var n=e.exact,r=e.fetching,o=e.predicate,i=e.mutationKey;if(vi(i)){if(!t.options.mutationKey)return!1;if(n){if(Jn(t.options.mutationKey)!==Jn(i))return!1}else if(!ds(t.options.mutationKey,i))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||o&&!o(t))}function Lc(e,t){var n=(t==null?void 0:t.queryKeyHashFn)||Jn;return n(e)}function Jn(e){var t=cs(e);return $_(t)}function $_(e){return JSON.stringify(e,function(t,n){return Nc(n)?Object.keys(n).sort().reduce(function(r,o){return r[o]=n[o],r},{}):n})}function ds(e,t){return wm(cs(e),cs(t))}function wm(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(n){return!wm(e[n],t[n])}):!1}function ps(e,t){if(e===t)return e;var n=Array.isArray(e)&&Array.isArray(t);if(n||Nc(e)&&Nc(t)){for(var r=n?e.length:Object.keys(e).length,o=n?t:Object.keys(t),i=o.length,a=n?[]:{},s=0,u=0;u0||y.errorUpdateCount>0,isFetchedAfterMount:y.dataUpdateCount>d.dataUpdateCount||y.errorUpdateCount>d.errorUpdateCount,isFetching:h,isRefetching:h&&g!=="loading",isLoadingError:g==="error"&&y.dataUpdatedAt===0,isPlaceholderData:x,isPreviousData:w,isRefetchError:g==="error"&&y.dataUpdatedAt!==0,isStale:gi(o,i),refetch:this.refetch,remove:this.remove};return Y},n.shouldNotifyListeners=function(o,i){if(!i)return!0;if(o===i)return!1;var a=this.options,s=a.notifyOnChangeProps,u=a.notifyOnChangePropsExclusions;if(!s&&!u||s==="tracked"&&!this.trackedProps.length)return!0;var l=s==="tracked"?this.trackedProps:s;return Object.keys(o).some(function(c){var v=c,d=o[v]!==i[v],m=l==null?void 0:l.some(function(_){return _===c}),y=u==null?void 0:u.some(function(_){return _===c});return d&&!y&&(!l||m)})},n.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!U_(this.currentResult,i)){var a={cache:!0};(o==null?void 0:o.listeners)!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(a.listeners=!0),this.notify(fe({},a,o))}},n.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i==null||i.removeObserver(this),o.addObserver(this))}},n.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!ms(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},n.notify=function(o){var i=this;xe.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(a){a(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(Xr);function eb(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function tb(e,t){return t.enabled!==!1&&e.state.dataUpdatedAt>0&&(t.refetchOnMount==="always"||t.refetchOnMount!==!1&&gi(e,t))}function km(e,t){return eb(e,t)||tb(e,t)}function nb(e,t){return t.enabled!==!1&&(t.refetchOnReconnect==="always"||t.refetchOnReconnect!==!1&&gi(e,t))}function rb(e,t){return t.enabled!==!1&&(t.refetchOnWindowFocus==="always"||t.refetchOnWindowFocus!==!1&&gi(e,t))}function Tm(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error"||r.enabled===!1)&&gi(e,n)}function gi(e,t){return e.isStaleByTime(t.staleTime)}var ob=function(e){Gr(t,e);function t(r,o){var i;return i=e.call(this)||this,i.client=r,i.setOptions(o),i.bindMethods(),i.updateResult(),i}var n=t.prototype;return n.bindMethods=function(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)},n.setOptions=function(o){this.options=this.client.defaultMutationOptions(o)},n.onUnsubscribe=function(){if(!this.listeners.length){var o;(o=this.currentMutation)==null||o.removeObserver(this)}},n.onMutationUpdate=function(o){this.updateResult();var i={listeners:!0};o.type==="success"?i.onSuccess=!0:o.type==="error"&&(i.onError=!0),this.notify(i)},n.getCurrentResult=function(){return this.currentResult},n.reset=function(){this.currentMutation=void 0,this.updateResult(),this.notify({listeners:!0})},n.mutate=function(o,i){return this.mutateOptions=i,this.currentMutation&&this.currentMutation.removeObserver(this),this.currentMutation=this.client.getMutationCache().build(this.client,fe({},this.options,{variables:typeof o!="undefined"?o:this.options.variables})),this.currentMutation.addObserver(this),this.currentMutation.execute()},n.updateResult=function(){var o=this.currentMutation?this.currentMutation.state:Cm(),i=fe({},o,{isLoading:o.status==="loading",isSuccess:o.status==="success",isError:o.status==="error",isIdle:o.status==="idle",mutate:this.mutate,reset:this.reset});this.currentResult=i},n.notify=function(o){var i=this;xe.batch(function(){i.mutateOptions&&(o.onSuccess?(i.mutateOptions.onSuccess==null||i.mutateOptions.onSuccess(i.currentResult.data,i.currentResult.variables,i.currentResult.context),i.mutateOptions.onSettled==null||i.mutateOptions.onSettled(i.currentResult.data,null,i.currentResult.variables,i.currentResult.context)):o.onError&&(i.mutateOptions.onError==null||i.mutateOptions.onError(i.currentResult.error,i.currentResult.variables,i.currentResult.context),i.mutateOptions.onSettled==null||i.mutateOptions.onSettled(void 0,i.currentResult.error,i.currentResult.variables,i.currentResult.context))),o.listeners&&i.listeners.forEach(function(a){a(i.currentResult)})})},t}(Xr),ib=Zv.unstable_batchedUpdates;xe.setBatchNotifyFunction(ib);var ab=console;H_(ab);var Pm=B.createContext(void 0),Lm=B.createContext(!1);function Nm(e){return e&&typeof window!="undefined"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=Pm),window.ReactQueryClientContext):Pm}var Am=function(){var t=B.useContext(Nm(B.useContext(Lm)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},WT=function(t){var n=t.client,r=t.contextSharing,o=r===void 0?!1:r,i=t.children;B.useEffect(function(){return n.mount(),function(){n.unmount()}},[n]);var a=Nm(o);return B.createElement(Lm.Provider,{value:o},B.createElement(a.Provider,{value:n},i))};function sb(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var ub=B.createContext(sb()),lb=function(){return B.useContext(ub)};function Mm(e,t,n){return typeof t=="function"?t(n):typeof t=="boolean"?t:!!e}function HT(e,t,n){var r=B.useRef(!1),o=B.useState(0),i=o[1],a=F_(e,t,n),s=Am(),u=B.useRef();u.current?u.current.setOptions(a):u.current=new ob(s,a);var l=u.current.getCurrentResult();B.useEffect(function(){r.current=!0;var v=u.current.subscribe(xe.batchCalls(function(){r.current&&i(function(d){return d+1})}));return function(){r.current=!1,v()}},[]);var c=B.useCallback(function(v,d){u.current.mutate(v,d).catch(Ie)},[]);if(l.error&&Mm(void 0,u.current.options.useErrorBoundary,l.error))throw l.error;return fe({},l,{mutate:c,mutateAsync:l.mutate})}function cb(e,t){var n=B.useRef(!1),r=B.useState(0),o=r[1],i=Am(),a=lb(),s=i.defaultQueryObserverOptions(e);s.optimisticResults=!0,s.onError&&(s.onError=xe.batchCalls(s.onError)),s.onSuccess&&(s.onSuccess=xe.batchCalls(s.onSuccess)),s.onSettled&&(s.onSettled=xe.batchCalls(s.onSettled)),s.suspense&&(typeof s.staleTime!="number"&&(s.staleTime=1e3),s.cacheTime===0&&(s.cacheTime=1)),(s.suspense||s.useErrorBoundary)&&(a.isReset()||(s.retryOnMount=!1));var u=B.useState(function(){return new t(i,s)}),l=u[0],c=l.getOptimisticResult(s);if(B.useEffect(function(){n.current=!0,a.clearReset();var v=l.subscribe(xe.batchCalls(function(){n.current&&o(function(d){return d+1})}));return l.updateResult(),function(){n.current=!1,v()}},[a,l]),B.useEffect(function(){l.setOptions(s,{listeners:!1})},[s,l]),s.suspense&&c.isLoading)throw l.fetchOptimistic(s).then(function(v){var d=v.data;s.onSuccess==null||s.onSuccess(d),s.onSettled==null||s.onSettled(d,null)}).catch(function(v){a.clearReset(),s.onError==null||s.onError(v),s.onSettled==null||s.onSettled(void 0,v)});if(c.isError&&!c.isFetching&&Mm(s.suspense,s.useErrorBoundary,c.error))throw c.error;return s.notifyOnChangeProps==="tracked"&&(c=l.trackResult(c)),c}function qT(e,t,n){var r=fs(e,t,n);return cb(r,J_)}function ys(){return ys=Object.assign||function(e){for(var t=1;t({basename:s,navigator:i,static:a}),[s,i,a]);typeof r=="string"&&(r=kn(r));let{pathname:l="/",search:c="",hash:v="",state:d=null,key:m="default"}=r,y=$.exports.useMemo(()=>{let _=Bm(l,s);return _==null?null:{pathname:_,search:c,hash:v,state:d,key:m}},[s,l,c,v,d,m]);return y==null?null:$.exports.createElement(Mc.Provider,{value:u},$.exports.createElement(Dc.Provider,{children:n,value:{location:y,navigationType:o}}))}function vb(e){Si()||Tn(!1);let{basename:t,navigator:n}=$.exports.useContext(Mc),{hash:r,pathname:o,search:i}=$m(e),a=o;if(t!=="/"){let s=Db(e),u=s!=null&&s.endsWith("/");a=o==="/"?t+(u?"/":""):Pn([t,o])}return n.createHref({pathname:a,search:i,hash:r})}function Si(){return $.exports.useContext(Dc)!=null}function ws(){return Si()||Tn(!1),$.exports.useContext(Dc).location}function mb(){Si()||Tn(!1);let{basename:e,navigator:t}=$.exports.useContext(Mc),{matches:n}=$.exports.useContext(wi),{pathname:r}=ws(),o=JSON.stringify(n.map(s=>s.pathnameBase)),i=$.exports.useRef(!1);return $.exports.useEffect(()=>{i.current=!0}),$.exports.useCallback(function(s,u){if(u===void 0&&(u={}),!i.current)return;if(typeof s=="number"){t.go(s);return}let l=Vm(s,JSON.parse(o),r);e!=="/"&&(l.pathname=Pn([e,l.pathname])),(u.replace?t.replace:t.push)(l,u.state)},[e,t,o,r])}function gb(){return $.exports.useContext(wi).outlet}function $m(e){let{matches:t}=$.exports.useContext(wi),{pathname:n}=ws(),r=JSON.stringify(t.map(o=>o.pathnameBase));return $.exports.useMemo(()=>Vm(e,JSON.parse(r),n),[e,r,n])}function QT(e,t){Si()||Tn(!1);let{matches:n}=$.exports.useContext(wi),r=n[n.length-1],o=r?r.params:{};r&&r.pathname;let i=r?r.pathnameBase:"/";r&&r.route;let a=ws(),s;if(t){var u;let d=typeof t=="string"?kn(t):t;i==="/"||((u=d.pathname)==null?void 0:u.startsWith(i))||Tn(!1),s=d}else s=a;let l=s.pathname||"/",c=i==="/"?l:l.slice(i.length)||"/",v=yb(e,{pathname:c});return Tb(v&&v.map(d=>Object.assign({},d,{params:Object.assign({},o,d.params),pathname:Pn([i,d.pathname]),pathnameBase:d.pathnameBase==="/"?i:Pn([i,d.pathnameBase])})),n)}function yb(e,t,n){n===void 0&&(n="/");let r=typeof t=="string"?kn(t):t,o=Bm(r.pathname||"/",n);if(o==null)return null;let i=Um(e);wb(i);let a=null;for(let s=0;a==null&&s{let a={relativePath:o.path||"",caseSensitive:o.caseSensitive===!0,childrenIndex:i};a.relativePath.startsWith("/")&&(a.relativePath.startsWith(r)||Tn(!1),a.relativePath=a.relativePath.slice(r.length));let s=Pn([r,a.relativePath]),u=n.concat(a);o.children&&o.children.length>0&&(o.index===!0&&Tn(!1),Um(o.children,t,u,s)),!(o.path==null&&!o.index)&&t.push({path:s,score:Cb(s,o.index),routesMeta:u})}),t}function wb(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:xb(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const Sb=/^:\w+$/,_b=3,bb=2,Eb=1,Rb=10,Ob=-2,jm=e=>e==="*";function Cb(e,t){let n=e.split("/"),r=n.length;return n.some(jm)&&(r+=Ob),t&&(r+=bb),n.filter(o=>!jm(o)).reduce((o,i)=>o+(Sb.test(i)?_b:i===""?Eb:Rb),r)}function xb(e,t){return e.length===t.length&&e.slice(0,-1).every((r,o)=>r===t[o])?e[e.length-1]-t[t.length-1]:0}function kb(e,t,n){let r=t,{routesMeta:o}=e,i={},a="/",s=[];for(let u=0;u$.exports.createElement(wi.Provider,{children:r.route.element!==void 0?r.route.element:$.exports.createElement(pb,null),value:{outlet:n,matches:t.concat(e.slice(0,o+1))}}),null)}function Pb(e,t){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=Lb(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let i=o[0],a=i.replace(/(.)\/+$/,"$1"),s=o.slice(1);return{params:r.reduce((l,c,v)=>{if(c==="*"){let d=s[v]||"";a=i.slice(0,i.length-d.length).replace(/(.)\/+$/,"$1")}return l[c]=Nb(s[v]||""),l},{}),pathname:i,pathnameBase:a,pattern:e}}function Lb(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0);let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/:(\w+)/g,(a,s)=>(r.push(s),"([^\\/]+)"));return e.endsWith("*")?(r.push("*"),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):o+=n?"\\/*$":"(?:\\b|$)",[new RegExp(o,t?void 0:"i"),r]}function Nb(e,t){try{return decodeURIComponent(e)}catch{return e}}function Ab(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:o=""}=typeof e=="string"?kn(e):e;return{pathname:n?n.startsWith("/")?n:Mb(n,t):t,search:Ib(r),hash:$b(o)}}function Mb(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function Vm(e,t,n){let r=typeof e=="string"?kn(e):e,o=e===""||r.pathname===""?"/":r.pathname,i;if(o==null)i=n;else{let s=t.length-1;if(o.startsWith("..")){let u=o.split("/");for(;u[0]==="..";)u.shift(),s-=1;r.pathname=u.join("/")}i=s>=0?t[s]:"/"}let a=Ab(r,i);return o&&o!=="/"&&o.endsWith("/")&&!a.pathname.endsWith("/")&&(a.pathname+="/"),a}function Db(e){return e===""||e.pathname===""?"/":typeof e=="string"?kn(e).pathname:e.pathname}function Bm(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=e.charAt(t.length);return n&&n!=="/"?null:e.slice(t.length)||"/"}const Pn=e=>e.join("/").replace(/\/\/+/g,"/"),Fb=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Ib=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,$b=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;/** - * React Router DOM v6.0.2 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Fc(){return Fc=Object.assign||function(e){for(var t=1;t=0)&&(n[o]=e[o]);return n}const jb=["onClick","reloadDocument","replace","state","target","to"];function KT(e){let{basename:t,children:n,window:r}=e,o=$.exports.useRef();o.current==null&&(o.current=db({window:r}));let i=o.current,[a,s]=$.exports.useState({action:i.action,location:i.location});return $.exports.useLayoutEffect(()=>i.listen(s),[i]),$.exports.createElement(hb,{basename:t,children:n,location:a.location,navigationType:a.action,navigator:i})}function Vb(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}const GT=$.exports.forwardRef(function(t,n){let{onClick:r,reloadDocument:o,replace:i=!1,state:a,target:s,to:u}=t,l=Ub(t,jb),c=vb(u),v=Bb(u,{replace:i,state:a,target:s});function d(m){r&&r(m),!m.defaultPrevented&&!o&&v(m)}return $.exports.createElement("a",Fc({},l,{href:c,onClick:d,ref:n,target:s}))});function Bb(e,t){let{target:n,replace:r,state:o}=t===void 0?{}:t,i=mb(),a=ws(),s=$m(e);return $.exports.useCallback(u=>{if(u.button===0&&(!n||n==="_self")&&!Vb(u)){u.preventDefault();let l=!!r||yi(a)===yi(s);i(e,{replace:l,state:o})}},[a,i,s,r,o,n,e])}function zb(e){const t=new Error(e);if(t.stack===void 0)try{throw t}catch{}return t}var Wb=zb,de=Wb;function Hb(e){return!!e&&typeof e.then=="function"}var ke=Hb;function qb(e,t){if(e!=null)return e;throw de(t!=null?t:"Got unexpected null or undefined")}var ye=qb;function ue(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class Ss{getValue(){throw de("BaseLoadable")}toPromise(){throw de("BaseLoadable")}valueMaybe(){throw de("BaseLoadable")}valueOrThrow(){throw de(`Loadable expected value, but in "${this.state}" state`)}promiseMaybe(){throw de("BaseLoadable")}promiseOrThrow(){throw de(`Loadable expected promise, but in "${this.state}" state`)}errorMaybe(){throw de("BaseLoadable")}errorOrThrow(){throw de(`Loadable expected error, but in "${this.state}" state`)}is(t){return t.state===this.state&&t.contents===this.contents}map(t){throw de("BaseLoadable")}}class Qb extends Ss{constructor(t){super();ue(this,"state","hasValue"),ue(this,"contents",void 0),this.contents=t}getValue(){return this.contents}toPromise(){return Promise.resolve(this.contents)}valueMaybe(){return this.contents}valueOrThrow(){return this.contents}promiseMaybe(){}errorMaybe(){}map(t){try{const n=t(this.contents);return ke(n)?Yr(n):Es(n)?n:_s(n)}catch(n){return ke(n)?Yr(n.next(()=>this.map(t))):bs(n)}}}class Kb extends Ss{constructor(t){super();ue(this,"state","hasError"),ue(this,"contents",void 0),this.contents=t}getValue(){throw this.contents}toPromise(){return Promise.reject(this.contents)}valueMaybe(){}promiseMaybe(){}errorMaybe(){return this.contents}errorOrThrow(){return this.contents}map(t){return this}}class zm extends Ss{constructor(t){super();ue(this,"state","loading"),ue(this,"contents",void 0),this.contents=t}getValue(){throw this.contents}toPromise(){return this.contents}valueMaybe(){}promiseMaybe(){return this.contents}promiseOrThrow(){return this.contents}errorMaybe(){}map(t){return Yr(this.contents.then(n=>{const r=t(n);if(Es(r)){const o=r;switch(o.state){case"hasValue":return o.contents;case"hasError":throw o.contents;case"loading":return o.contents}}return r}).catch(n=>{if(ke(n))return n.then(()=>this.map(t).contents);throw n}))}}function _s(e){return Object.freeze(new Qb(e))}function bs(e){return Object.freeze(new Kb(e))}function Yr(e){return Object.freeze(new zm(e))}function Gb(){return Object.freeze(new zm(new Promise(()=>{})))}function Xb(e){return e.every(t=>t.state==="hasValue")?_s(e.map(t=>t.contents)):e.some(t=>t.state==="hasError")?bs(ye(e.find(t=>t.state==="hasError"),"Invalid loadable passed to loadableAll").contents):Yr(Promise.all(e.map(t=>t.contents)))}function Wm(e){const t=Array.isArray(e)?e:Object.getOwnPropertyNames(e).map(r=>e[r]),n=Xb(t);return Array.isArray(e)?n:n.map(r=>Object.getOwnPropertyNames(e).reduce((o,i,a)=>tt(He({},o),{[i]:r[a]}),{}))}function Es(e){return e instanceof Ss}const Yb={of:e=>ke(e)?Yr(e):_s(e),error:e=>bs(e),all:Wm,isLoadable:Es};var tr={loadableWithValue:_s,loadableWithError:bs,loadableWithPromise:Yr,loadableLoading:Gb,loadableAll:Wm,isLoadable:Es,RecoilLoadable:Yb},Zb=tr.loadableWithValue,Jb=tr.loadableWithError,eE=tr.loadableWithPromise,tE=tr.loadableLoading,nE=tr.loadableAll,rE=tr.isLoadable,oE=tr.RecoilLoadable,_i=Object.freeze({__proto__:null,loadableWithValue:Zb,loadableWithError:Jb,loadableWithPromise:eE,loadableLoading:tE,loadableAll:nE,isLoadable:rE,RecoilLoadable:oE}),Ic;const Hm=(Ic=B.useMutableSource)!==null&&Ic!==void 0?Ic:B.unstable_useMutableSource;function iE(){return Hm&&!(typeof window!="undefined"&&window.$disableRecoilValueMutableSource_TEMP_HACK_DO_NOT_USE)}var qm={mutableSourceExists:iE,useMutableSource:Hm};const{mutableSourceExists:aE}=qm,$c=new Map().set("recoil_hamt_2020",!0).set("recoil_memory_managament_2020",!0).set("recoil_suppress_rerender_in_callback",!0);function Uc(e){var t;return e==="recoil_early_rendering_2021"&&!aE()?!1:(t=$c.get(e))!==null&&t!==void 0?t:!1}Uc.setPass=e=>{$c.set(e,!0)};Uc.setFail=e=>{$c.set(e,!1)};var Se=Uc;function sE(e,t){return function*(){let n=0;for(const r of e)yield t(r,n++)}()}var Qm=sE;function uE(e,t,{error:n}={}){return null}var lE=uE,Km=lE;class jc{constructor(t){ue(this,"key",void 0),this.key=t}}class Gm extends jc{}class Xm extends jc{}function cE(e){return e instanceof Gm||e instanceof Xm}var Rs={AbstractRecoilValue:jc,RecoilState:Gm,RecoilValueReadOnly:Xm,isRecoilValue:cE},fE=Rs.AbstractRecoilValue,dE=Rs.RecoilState,pE=Rs.RecoilValueReadOnly,hE=Rs.isRecoilValue,nr=Object.freeze({__proto__:null,AbstractRecoilValue:fE,RecoilState:dE,RecoilValueReadOnly:pE,isRecoilValue:hE});class Ym{}const vE=new Ym;class mE extends Error{constructor(t){super(`Tried to set the value of Recoil selector ${t} using an updater function, but it is an async selector in a pending or error state; this is not supported.`)}}const rr=new Map,Vc=new Map;function gE(e){return Qm(e,t=>ye(Vc.get(t)))}function yE(e){if(rr.has(e.key)){const n=`Duplicate atom key "${e.key}". This is a FATAL ERROR in - production. But it is safe to ignore this warning if it occurred because of - hot module replacement.`;console.warn(n)}rr.set(e.key,e);const t=e.set==null?new nr.RecoilValueReadOnly(e.key):new nr.RecoilState(e.key);return Vc.set(e.key,t),t}class Zm extends Error{}function wE(e){const t=rr.get(e);if(t==null)throw new Zm(`Missing definition for RecoilValue: "${e}""`);return t}function SE(e){return rr.get(e)}const Os=new Map;function _E(e){var t;if(!Se("recoil_memory_managament_2020"))return;const n=rr.get(e);if(n==null||(t=n.shouldDeleteConfigOnRelease)===null||t===void 0?void 0:t.call(n)){var r;rr.delete(e),(r=Jm(e))===null||r===void 0||r(),Os.delete(e)}}function bE(e,t){!Se("recoil_memory_managament_2020")||(t===void 0?Os.delete(e):Os.set(e,t))}function Jm(e){return Os.get(e)}var Je={nodes:rr,recoilValues:Vc,registerNode:yE,getNode:wE,getNodeMaybe:SE,deleteNodeConfigIfPossible:_E,setConfigDeletionHandler:bE,getConfigDeletionHandler:Jm,recoilValuesForKeys:gE,NodeMissingError:Zm,DefaultValue:Ym,DEFAULT_VALUE:vE,RecoilValueNotReady:mE};function EE(e,t){t()}var RE={enqueueExecution:EE};function OE(e,t){return t={exports:{}},e(t,t.exports),t.exports}var CE=OE(function(e){var t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(O){return typeof O}:function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O},n={},r=5,o=Math.pow(2,r),i=o-1,a=o/2,s=o/4,u={},l=function(R){return function(){return R}},c=n.hash=function(O){var R=typeof O=="undefined"?"undefined":t(O);if(R==="number")return O;R!=="string"&&(O+="");for(var D=0,W=0,H=O.length;W>1&1431655765,R=(R&858993459)+(R>>2&858993459),R=R+(R>>4)&252645135,R+=R>>8,R+=R>>16,R&127},d=function(R,D){return D>>>R&i},m=function(R){return 1<=D;)H[re--]=H[re];return H[D]=W,H}for(var ee=0,te=0,ce=new Array(K+1);ee>>=1;return re[D]=W,Y(R,te+1,re)},S=function(R,D,W,H){for(var K=new Array(D-1),re=0,ee=0,te=0,ce=H.length;te1?F(R,this.hash,ce):ce[0]}var Oe=H();return Oe===u?this:(++ee.value,C(R,W,this.hash,this,K,V(R,K,re,Oe)))},J=function(R,D,W,H,K,re,ee){var te=this.mask,ce=this.children,Oe=d(W,K),et=m(Oe),Ue=y(te,et),dt=te&et,bt=dt?ce[Ue]:E,dr=bt._modify(R,D,W+r,H,K,re,ee);if(bt===dr)return this;var $i=b(R,this),io=te,ao=void 0;if(dt&&L(dr)){if(io&=~et,!io)return E;if(ce.length<=2&&ie(ce[Ue^1]))return ce[Ue^1];ao=p($i,Ue,ce)}else if(!dt&&!L(dr)){if(ce.length>=a)return Z(R,Oe,dr,te,ce);io|=et,ao=f($i,Ue,dr,ce)}else ao=_($i,Ue,dr,ce);return $i?(this.mask=io,this.children=ao,this):G(R,io,ao)},k=function(R,D,W,H,K,re,ee){var te=this.size,ce=this.children,Oe=d(W,K),et=ce[Oe],Ue=(et||E)._modify(R,D,W+r,H,K,re,ee);if(et===Ue)return this;var dt=b(R,this),bt=void 0;if(L(et)&&!L(Ue))++te,bt=_(dt,Oe,Ue,ce);else if(!L(et)&&L(Ue)){if(--te,te<=s)return S(R,te,Oe,ce);bt=_(dt,Oe,E,ce)}else bt=_(dt,Oe,Ue,ce);return dt?(this.size=te,this.children=bt,this):Y(R,te,bt)};E._modify=function(O,R,D,W,H,K,re){var ee=W();return ee===u?E:(++re.value,V(O,H,K,ee))};function N(O,R,D,W,H){this._editable=O,this._edit=R,this._config=D,this._root=W,this._size=H}N.prototype.setTree=function(O,R){return this._editable?(this._root=O,this._size=R,this):O===this._root?this:new N(this._editable,this._edit,this._config,O,R)};var X=n.tryGetHash=function(O,R,D,W){for(var H=W._root,K=0,re=W._config.keyEq;;)switch(H.type){case h:return re(D,H.key)?H.value:O;case g:{if(R===H.hash)for(var ee=H.children,te=0,ce=ee.length;te{n.set(o,t(r,o))}),n}var xs=NE;function AE(){return{nodeDeps:new Map,nodeToNodeSubscriptions:new Map}}function ME(e){return{nodeDeps:xs(e.nodeDeps,t=>new Set(t)),nodeToNodeSubscriptions:xs(e.nodeToNodeSubscriptions,t=>new Set(t))}}function Wc(e,t,n){const{nodeDeps:r,nodeToNodeSubscriptions:o}=t;e.forEach((i,a)=>{const s=r.get(a);if(s&&n&&s!==n.nodeDeps.get(a))return;r.set(a,new Set(i)),(s==null?i:Cs(i,s)).forEach(l=>{o.has(l)||o.set(l,new Set),ye(o.get(l)).add(a)}),s&&Cs(s,i).forEach(c=>{if(!o.has(c))return;const v=ye(o.get(c));v.delete(a),v.size===0&&o.delete(c)})})}function DE(e,t,n){var r,o,i,a;const s=t.getState();!(n===s.currentTree.version||n===((r=s.nextTree)===null||r===void 0?void 0:r.version)||n===((o=s.previousTree)===null||o===void 0?void 0:o.version));const u=t.getGraph(n);if(Wc(e,u),n===((i=s.previousTree)===null||i===void 0?void 0:i.version)){const c=t.getGraph(s.currentTree.version);Wc(e,c,u)}if(n===((a=s.previousTree)===null||a===void 0?void 0:a.version)||n===s.currentTree.version){var l;const c=(l=s.nextTree)===null||l===void 0?void 0:l.version;if(c!==void 0){const v=t.getGraph(c);Wc(e,v,u)}}}function FE(e,t){e.forEach((n,r)=>{t.has(r)||t.set(r,new Set);const o=ye(t.get(r));n.forEach(i=>o.add(i))})}function IE(e,t,n){n.has(e)||n.set(e,new Set),ye(n.get(e)).add(t)}var bi={addToDependencyMap:IE,cloneGraph:ME,graph:AE,mergeDepsIntoDependencyMap:FE,saveDependencyMapToStore:DE};const{persistentMap:eg}=PE,{graph:$E}=bi;let UE=0;const tg=()=>UE++;function ng(){const e=tg();return{version:e,stateID:e,transactionMetadata:{},dirtyAtoms:new Set,atomValues:eg(),nonvalidatedAtoms:eg()}}function jE(){const e=ng();return{currentTree:e,nextTree:null,previousTree:null,commitDepth:0,knownAtoms:new Set,knownSelectors:new Set,transactionSubscriptions:new Map,nodeTransactionSubscriptions:new Map,nodeToComponentSubscriptions:new Map,queuedComponentCallbacks_DEPRECATED:[],suspendedComponentResolvers:new Set,graphsByVersion:new Map().set(e.version,$E()),versionsUsedByComponent:new Map,retention:{referenceCounts:new Map,nodesRetainedByZone:new Map,retainablesToCheckForRelease:new Set},nodeCleanupFunctions:new Map}}var rg={makeEmptyTreeState:ng,makeEmptyStoreState:jE,getNextTreeStateVersion:tg};function VE(...e){const t=new Set;for(const n of e)for(const r of n)t.add(r);return t}var BE=VE;function zE(e,t){const n=new Set(e);return n.add(t),n}function WE(e,t){const n=new Set(e);return n.delete(t),n}function HE(e,t,n){const r=new Map(e);return r.set(t,n),r}function qE(e,t,n){const r=new Map(e);return r.set(t,n(r.get(t))),r}function QE(e,t){const n=new Map(e);return n.delete(t),n}function KE(e,t){const n=new Map(e);return t.forEach(r=>n.delete(r)),n}var og={setByAddingToSet:zE,setByDeletingFromSet:WE,mapBySettingInMap:HE,mapByUpdatingInMap:qE,mapByDeletingFromMap:QE,mapByDeletingMultipleFromMap:KE};function*GE(e,t){let n=0;for(const r of e)t(r,n++)&&(yield r)}var ig=GE;class ag{}function XE(){return new ag}var ks={RetentionZone:ag,retentionZone:XE};const{setByAddingToSet:YE}=og,{getNode:Ts,getNodeMaybe:ZE,recoilValuesForKeys:sg}=Je,{RetentionZone:ug}=ks,JE=Object.freeze(new Set);class eR extends Error{}function tR(e,t,n){if(!Se("recoil_memory_managament_2020"))return()=>{};const{nodesRetainedByZone:r}=e.getState().retention;function o(i){let a=r.get(i);a||r.set(i,a=new Set),a.add(t)}if(n instanceof ug)o(n);else if(Array.isArray(n))for(const i of n)o(i);return()=>{if(!Se("recoil_memory_managament_2020"))return;const i=e.getState().retention.nodesRetainedByZone;function a(s){const u=i.get(s);u&&u.delete(t),u&&u.size===0&&i.delete(s)}if(n instanceof ug)a(n);else if(Array.isArray(n))for(const s of n)a(s)}}function Hc(e,t,n,r){const o=e.getState();if(o.nodeCleanupFunctions.has(n))return;const i=Ts(n),a=tR(e,n,i.retainedBy),s=i.init(e,t,r);o.nodeCleanupFunctions.set(n,()=>{s(),a()})}function nR(e,t){var n;const r=e.getState();(n=r.nodeCleanupFunctions.get(t))===null||n===void 0||n(),r.nodeCleanupFunctions.delete(t)}function rR(e,t,n){return Hc(e,t,n,"get"),Ts(n).get(e,t)}function lg(e,t,n){return Ts(n).peek(e,t)}function oR(e,t,n){var r;const o=ZE(t);return o==null||(r=o.invalidate)===null||r===void 0||r.call(o,e),tt(He({},e),{atomValues:e.atomValues.clone().delete(t),nonvalidatedAtoms:e.nonvalidatedAtoms.clone().set(t,n),dirtyAtoms:YE(e.dirtyAtoms,t)})}function iR(e,t,n,r){const o=Ts(n);if(o.set==null)throw new eR(`Attempt to set read-only RecoilValue: ${n}`);const i=o.set;return Hc(e,t,n,"set"),i(e,t,r)}function aR(e,t,n){var r,o,i;const a=e.getState(),s=e.getGraph(t.version),u=a.knownAtoms.has(n)?"atom":a.knownSelectors.has(n)?"selector":void 0,l=ig(cg(e,t,new Set([n])),c=>c!==n);return{loadable:lg(e,t,n),isActive:a.knownAtoms.has(n)||a.knownSelectors.has(n),isSet:u==="selector"?!1:t.atomValues.has(n),isModified:t.dirtyAtoms.has(n),type:u,deps:sg((r=s.nodeDeps.get(n))!==null&&r!==void 0?r:[]),subscribers:{nodes:sg(l),components:Qm((o=(i=a.nodeToComponentSubscriptions.get(n))===null||i===void 0?void 0:i.values())!==null&&o!==void 0?o:[],([c])=>({name:c}))}}}function cg(e,t,n){const r=new Set,o=Array.from(n),i=e.getGraph(t.version);for(let s=o.pop();s;s=o.pop()){var a;r.add(s);const u=(a=i.nodeToNodeSubscriptions.get(s))!==null&&a!==void 0?a:JE;for(const l of u)r.has(l)||o.push(l)}return r}var or={getNodeLoadable:rR,peekNodeLoadable:lg,setNodeValue:iR,cleanUpNode:nR,setUnvalidatedAtomValue_DEPRECATED:oR,peekNodeInfo:aR,getDownstreamNodes:cg,initializeNodeIfNewToStore:Hc};const{getDownstreamNodes:sR,getNodeLoadable:fg,setNodeValue:uR}=or,{getNodeMaybe:dg}=Je,{DefaultValue:qc,RecoilValueNotReady:lR}=Je,{AbstractRecoilValue:cR,RecoilState:fR,RecoilValueReadOnly:dR,isRecoilValue:pR}=nr;function hR(e,{key:t},n=e.getState().currentTree){var r,o;const i=e.getState();!(n.version===i.currentTree.version||n.version===((r=i.nextTree)===null||r===void 0?void 0:r.version)||n.version===((o=i.previousTree)===null||o===void 0?void 0:o.version));const a=fg(e,n,t);return a.state==="loading"&&a.contents.catch(()=>{}),a}function vR(e,t){const n=e.clone();return t.forEach((r,o)=>{r.state==="hasValue"&&r.contents instanceof qc?n.delete(o):n.set(o,r)}),n}function mR(e,t,{key:n},r){if(typeof r=="function"){const o=fg(e,t,n);if(o.state==="loading")throw new lR(n);if(o.state==="hasError")throw o.contents;return r(o.contents)}else return r}function gR(e,t,n){if(n.type==="set"){const{recoilValue:o,valueOrUpdater:i}=n,a=mR(e,t,o,i),s=uR(e,t,o.key,a);for(const[u,l]of s.entries())Qc(t,u,l)}else if(n.type==="setLoadable"){const{recoilValue:{key:o},loadable:i}=n;Qc(t,o,i)}else if(n.type==="markModified"){const{recoilValue:{key:o}}=n;t.dirtyAtoms.add(o)}else if(n.type==="setUnvalidated"){var r;const{recoilValue:{key:o},unvalidatedValue:i}=n,a=dg(o);a==null||(r=a.invalidate)===null||r===void 0||r.call(a,t),t.atomValues.delete(o),t.nonvalidatedAtoms.set(o,i),t.dirtyAtoms.add(o)}else Km(`Unknown action ${n.type}`)}function Qc(e,t,n){n.state==="hasValue"&&n.contents instanceof qc?e.atomValues.delete(t):e.atomValues.set(t,n),e.dirtyAtoms.add(t),e.nonvalidatedAtoms.delete(t)}function pg(e,t){e.replaceState(n=>{const r=hg(n);for(const o of t)gR(e,r,o);return Kc(e,r),r})}function Ps(e,t){if(Ei.length){const n=Ei[Ei.length-1];let r=n.get(e);r||n.set(e,r=[]),r.push(t)}else pg(e,[t])}const Ei=[];function yR(){const e=new Map;return Ei.push(e),()=>{for(const[t,n]of e)pg(t,n);Ei.pop()}}function hg(e){return tt(He({},e),{atomValues:e.atomValues.clone(),nonvalidatedAtoms:e.nonvalidatedAtoms.clone(),dirtyAtoms:new Set(e.dirtyAtoms)})}function Kc(e,t){const n=sR(e,t,t.dirtyAtoms);for(const i of n){var r,o;(r=dg(i))===null||r===void 0||(o=r.invalidate)===null||o===void 0||o.call(r,t)}}function vg(e,t,n){Ps(e,{type:"set",recoilValue:t,valueOrUpdater:n})}function wR(e,t,n){if(n instanceof qc)return vg(e,t,n);Ps(e,{type:"setLoadable",recoilValue:t,loadable:n})}function SR(e,t){Ps(e,{type:"markModified",recoilValue:t})}function _R(e,t,n){Ps(e,{type:"setUnvalidated",recoilValue:t,unvalidatedValue:n})}let bR=0;function ER(e,{key:t},n,r=null){const o=bR++,i=e.getState();if(i.nodeToComponentSubscriptions.has(t)||i.nodeToComponentSubscriptions.set(t,new Map),ye(i.nodeToComponentSubscriptions.get(t)).set(o,[r!=null?r:"",n]),Se("recoil_early_rendering_2021")){const a=e.getState().nextTree;a&&a.dirtyAtoms.has(t)&&n(a)}return{release:()=>{const a=e.getState(),s=a.nodeToComponentSubscriptions.get(t);s===void 0||!s.has(o)||(s.delete(o),s.size===0&&a.nodeToComponentSubscriptions.delete(t))}}}var Zt={RecoilValueReadOnly:dR,AbstractRecoilValue:cR,RecoilState:fR,getRecoilValueAsLoadable:hR,setRecoilValue:vg,setRecoilValueLoadable:wR,markRecoilValueModified:SR,setUnvalidatedRecoilValue:_R,subscribeToRecoilValue:ER,isRecoilValue:pR,applyAtomValueWrites:vR,batchStart:yR,writeLoadableToTreeState:Qc,invalidateDownstreams:Kc,copyTreeState:hg,invalidateDownstreams_FOR_TESTING:Kc};function RR(e,t,n){const r=e.entries();let o=r.next();for(;!o.done;){const i=o.value;if(t.call(n,i[1],i[0],e))return!0;o=r.next()}return!1}var OR=RR;const{cleanUpNode:CR}=or,{deleteNodeConfigIfPossible:xR,getNode:mg}=Je,{RetentionZone:gg}=ks,kR=12e4,yg=new Set;function wg(e,t){const n=e.getState(),r=n.currentTree;if(n.nextTree)return;const o=new Set;for(const a of t)if(a instanceof gg)for(const s of NR(n,a))o.add(s);else o.add(a);const i=TR(e,o);for(const a of i)LR(e,r,a)}function TR(e,t){const n=e.getState(),r=n.currentTree,o=e.getGraph(r.version),i=new Set,a=new Set;return s(t),i;function s(u){const l=new Set,c=PR(e,r,u,i,a);for(const y of c){var v;if(mg(y).retainedBy==="recoilRoot"){a.add(y);continue}if(((v=n.retention.referenceCounts.get(y))!==null&&v!==void 0?v:0)>0){a.add(y);continue}if(Sg(y).some(p=>n.retention.referenceCounts.get(p))){a.add(y);continue}const _=o.nodeToNodeSubscriptions.get(y);if(_&&OR(_,p=>a.has(p))){a.add(y);continue}i.add(y),l.add(y)}const d=new Set;for(const y of l)for(const _ of(m=o.nodeDeps.get(y))!==null&&m!==void 0?m:yg){var m;i.has(_)||d.add(_)}d.size&&s(d)}}function PR(e,t,n,r,o){const i=e.getGraph(t.version),a=[],s=new Set;for(;n.size>0;)u(ye(n.values().next().value));return a;function u(l){if(r.has(l)||o.has(l)){n.delete(l);return}if(s.has(l))return;const c=i.nodeToNodeSubscriptions.get(l);if(c)for(const v of c)u(v);s.add(l),n.delete(l),a.push(l)}}function LR(e,t,n){if(!Se("recoil_memory_managament_2020"))return;CR(e,n);const r=e.getState();r.knownAtoms.delete(n),r.knownSelectors.delete(n),r.nodeTransactionSubscriptions.delete(n),r.retention.referenceCounts.delete(n);const o=Sg(n);for(const u of o){var i;(i=r.retention.nodesRetainedByZone.get(u))===null||i===void 0||i.delete(n)}t.atomValues.delete(n),t.dirtyAtoms.delete(n),t.nonvalidatedAtoms.delete(n);const a=r.graphsByVersion.get(t.version);if(a){const u=a.nodeDeps.get(n);if(u!==void 0){a.nodeDeps.delete(n);for(const l of u){var s;(s=a.nodeToNodeSubscriptions.get(l))===null||s===void 0||s.delete(n)}}a.nodeToNodeSubscriptions.delete(n)}xR(n)}function NR(e,t){var n;return(n=e.retention.nodesRetainedByZone.get(t))!==null&&n!==void 0?n:yg}function Sg(e){const t=mg(e).retainedBy;return t===void 0||t==="components"||t==="recoilRoot"?[]:t instanceof gg?[t]:t}function AR(e,t){const n=e.getState();n.nextTree?n.retention.retainablesToCheckForRelease.add(t):wg(e,new Set([t]))}function MR(e,t,n){var r;if(!Se("recoil_memory_managament_2020"))return;const o=e.getState().retention.referenceCounts,i=((r=o.get(t))!==null&&r!==void 0?r:0)+n;i===0?_g(e,t):o.set(t,i)}function _g(e,t){if(!Se("recoil_memory_managament_2020"))return;e.getState().retention.referenceCounts.delete(t),AR(e,t)}function DR(e){if(!Se("recoil_memory_managament_2020"))return;const t=e.getState();wg(e,t.retention.retainablesToCheckForRelease),t.retention.retainablesToCheckForRelease.clear()}function FR(e){return e===void 0?"recoilRoot":e}var ir={SUSPENSE_TIMEOUT_MS:kR,updateRetainCount:MR,updateRetainCountToZero:_g,releaseScheduledRetainablesNow:DR,retainedByOptionWithDefault:FR};function*IR(e){for(const t of e)for(const n of t)yield n}var $R=IR;const UR=typeof window=="undefined",jR=typeof navigator!="undefined"&&navigator.product==="ReactNative";var Gc={isSSR:UR,isReactNative:jR};const{unstable_batchedUpdates:VR}=Zv;var BR={unstable_batchedUpdates:VR};const{unstable_batchedUpdates:zR}=BR;var WR={unstable_batchedUpdates:zR};const{batchStart:HR}=Zt,{unstable_batchedUpdates:qR}=WR;let Xc=qR;const QR=e=>{Xc=e},KR=()=>Xc,GR=e=>{Xc(()=>{let t=()=>{};try{t=HR(),e()}finally{t()}})};var Ls={getBatcher:KR,setBatcher:QR,batchUpdates:GR};const{isSSR:XR}=Gc,{batchUpdates:Yc}=Ls,{initializeNodeIfNewToStore:YR,peekNodeInfo:ZR}=or,{graph:JR}=bi,{DEFAULT_VALUE:eO,recoilValues:bg,recoilValuesForKeys:Eg}=Je,{AbstractRecoilValue:tO,getRecoilValueAsLoadable:nO,setRecoilValue:Rg,setUnvalidatedRecoilValue:rO}=Zt,{updateRetainCount:Ns}=ir,{getNextTreeStateVersion:oO,makeEmptyStoreState:iO}=rg;class As{constructor(t){ue(this,"_store",void 0),ue(this,"_refCount",0),ue(this,"getLoadable",n=>(this.checkRefCount_INTERNAL(),nO(this._store,n))),ue(this,"getPromise",n=>(this.checkRefCount_INTERNAL(),this.getLoadable(n).toPromise())),ue(this,"getNodes_UNSTABLE",n=>{if(this.checkRefCount_INTERNAL(),(n==null?void 0:n.isModified)===!0){if((n==null?void 0:n.isInitialized)===!1)return[];const i=this._store.getState().currentTree;return Eg(i.dirtyAtoms)}const r=this._store.getState().knownAtoms,o=this._store.getState().knownSelectors;return(n==null?void 0:n.isInitialized)==null?bg.values():n.isInitialized===!0?Eg($R([this._store.getState().knownAtoms,this._store.getState().knownSelectors])):ig(bg.values(),({key:i})=>!r.has(i)&&!o.has(i))}),ue(this,"getInfo_UNSTABLE",({key:n})=>(this.checkRefCount_INTERNAL(),ZR(this._store,this._store.getState().currentTree,n))),ue(this,"map",n=>{this.checkRefCount_INTERNAL();const r=new Jc(this,Yc);return n(r),Zc(r.getStore_INTERNAL())}),ue(this,"asyncMap",async n=>{this.checkRefCount_INTERNAL();const r=new Jc(this,Yc);return await n(r),Zc(r.getStore_INTERNAL())}),this._store={getState:()=>t,replaceState:n=>{t.currentTree=n(t.currentTree)},getGraph:n=>{const r=t.graphsByVersion;if(r.has(n))return ye(r.get(n));const o=JR();return r.set(n,o),o},subscribeToTransactions:()=>({release:()=>{}}),addTransactionMetadata:()=>{throw de("Cannot subscribe to Snapshots")}};for(const n of this._store.getState().nodeCleanupFunctions.keys())YR(this._store,t.currentTree,n,"get"),Ns(this._store,n,1);this.retain(),this.autorelease_INTERNAL()}retain(){if(!Se("recoil_memory_managament_2020"))return()=>{};this._refCount++;let t=!1;return()=>{t||(t=!0,this.release_INTERNAL())}}autorelease_INTERNAL(){!Se("recoil_memory_managament_2020")||XR||window.setTimeout(()=>this.release_INTERNAL(),0)}release_INTERNAL(){!Se("recoil_memory_managament_2020")||(this._refCount--,this._refCount===0)}checkRefCount_INTERNAL(){Se("recoil_memory_managament_2020")&&this._refCount<=0}getStore_INTERNAL(){return this.checkRefCount_INTERNAL(),this._store}getID(){return this.checkRefCount_INTERNAL(),this.getID_INTERNAL()}getID_INTERNAL(){return this.checkRefCount_INTERNAL(),this._store.getState().currentTree.stateID}}function Og(e,t,n=!1){const r=e.getState(),o=n?oO():t.version;return{currentTree:n?{version:o,stateID:o,transactionMetadata:He({},t.transactionMetadata),dirtyAtoms:new Set(t.dirtyAtoms),atomValues:t.atomValues.clone(),nonvalidatedAtoms:t.nonvalidatedAtoms.clone()}:t,commitDepth:0,nextTree:null,previousTree:null,knownAtoms:new Set(r.knownAtoms),knownSelectors:new Set(r.knownSelectors),transactionSubscriptions:new Map,nodeTransactionSubscriptions:new Map,nodeToComponentSubscriptions:new Map,queuedComponentCallbacks_DEPRECATED:[],suspendedComponentResolvers:new Set,graphsByVersion:new Map().set(o,e.getGraph(t.version)),versionsUsedByComponent:new Map,retention:{referenceCounts:new Map,nodesRetainedByZone:new Map,retainablesToCheckForRelease:new Set},nodeCleanupFunctions:new Map}}function aO(e){const t=new As(iO());return e!=null?t.map(e):t}function Zc(e,t="current"){const n=e.getState(),r=t==="current"?n.currentTree:ye(n.previousTree);return new As(Og(e,r))}class Jc extends As{constructor(t,n){super(Og(t.getStore_INTERNAL(),t.getStore_INTERNAL().getState().currentTree,!0));ue(this,"_batch",void 0),ue(this,"set",(r,o)=>{this.checkRefCount_INTERNAL();const i=this.getStore_INTERNAL();this._batch(()=>{Ns(i,r.key,1),Rg(this.getStore_INTERNAL(),r,o)})}),ue(this,"reset",r=>{this.checkRefCount_INTERNAL();const o=this.getStore_INTERNAL();this._batch(()=>{Ns(o,r.key,1),Rg(this.getStore_INTERNAL(),r,eO)})}),ue(this,"setUnvalidatedAtomValues_DEPRECATED",r=>{this.checkRefCount_INTERNAL();const o=this.getStore_INTERNAL();Yc(()=>{for(const[i,a]of r.entries())Ns(o,i,1),rO(o,new tO(i),a)})}),this._batch=n}}var Ms={Snapshot:As,MutableSnapshot:Jc,freshSnapshot:aO,cloneSnapshot:Zc},sO=Ms.Snapshot,uO=Ms.MutableSnapshot,lO=Ms.freshSnapshot,cO=Ms.cloneSnapshot,Ri=Object.freeze({__proto__:null,Snapshot:sO,MutableSnapshot:uO,freshSnapshot:lO,cloneSnapshot:cO});const{getNextTreeStateVersion:fO,makeEmptyStoreState:Cg}=rg,{cleanUpNode:dO,getDownstreamNodes:pO,setNodeValue:hO,setUnvalidatedAtomValue_DEPRECATED:vO}=or,{graph:mO}=bi,{cloneGraph:gO}=bi,{applyAtomValueWrites:yO}=Zt,{releaseScheduledRetainablesNow:xg}=ir,{freshSnapshot:wO}=Ri,{useCallback:SO,useContext:kg,useEffect:ef,useMemo:_O,useRef:tf,useState:bO}=B;function Oi(){throw de("This component must be used inside a component.")}const Tg=Object.freeze({getState:Oi,replaceState:Oi,getGraph:Oi,subscribeToTransactions:Oi,addTransactionMetadata:Oi});let nf=!1;function Pg(e){if(nf)throw de("An atom update was triggered within the execution of a state updater function. State updater functions provided to Recoil must be pure functions.");const t=e.getState();if(t.nextTree===null){Se("recoil_memory_managament_2020")&&Se("recoil_release_on_cascading_update_killswitch_2021")&&t.commitDepth>0&&xg(e);const n=t.currentTree.version,r=fO();t.nextTree=tt(He({},t.currentTree),{version:r,stateID:r,dirtyAtoms:new Set,transactionMetadata:{}}),t.graphsByVersion.set(r,gO(ye(t.graphsByVersion.get(n))))}}const Lg=B.createContext({current:Tg}),rf=()=>kg(Lg),Ng=B.createContext(null);function EO(){return kg(Ng)}function of(e,t,n){const r=pO(e,n,n.dirtyAtoms);for(const o of r){const i=t.nodeToComponentSubscriptions.get(o);if(i)for(const[a,[s,u]]of i)u(n)}}function Ag(e){const t=e.getState(),n=t.currentTree,r=n.dirtyAtoms;if(r.size){for(const[o,i]of t.nodeTransactionSubscriptions)if(r.has(o))for(const[a,s]of i)s(e);for(const[o,i]of t.transactionSubscriptions)i(e);(!Se("recoil_early_rendering_2021")||t.suspendedComponentResolvers.size)&&(of(e,t,n),t.suspendedComponentResolvers.forEach(o=>o()),t.suspendedComponentResolvers.clear())}t.queuedComponentCallbacks_DEPRECATED.forEach(o=>o(n)),t.queuedComponentCallbacks_DEPRECATED.splice(0,t.queuedComponentCallbacks_DEPRECATED.length)}function RO(e){const t=e.current.getState();t.commitDepth++;try{const{nextTree:n}=t;if(n===null)return;t.previousTree=t.currentTree,t.currentTree=n,t.nextTree=null,Ag(e.current),t.previousTree!=null?t.graphsByVersion.delete(t.previousTree.version):Km("Ended batch with no previous state, which is unexpected","recoil"),t.previousTree=null,Se("recoil_memory_managament_2020")&&xg(e.current)}finally{t.commitDepth--}}function OO({setNotifyBatcherOfChange:e}){const t=rf(),[n,r]=bO([]);return e(()=>r({})),ef(()=>{RE.enqueueExecution("Batcher",()=>{RO(t)})}),ef(()=>()=>{e(()=>{})},[e]),null}function CO(e,t){const n=Cg();return t({set:(r,o)=>{const i=n.currentTree,a=hO(e,i,r.key,o),s=new Set(a.keys()),u=i.nonvalidatedAtoms.clone();for(const l of s)u.delete(l);n.currentTree=tt(He({},i),{dirtyAtoms:BE(i.dirtyAtoms,s),atomValues:yO(i.atomValues,a),nonvalidatedAtoms:u})},setUnvalidatedAtomValues:r=>{r.forEach((o,i)=>{n.currentTree=vO(n.currentTree,i,o)})}}),n}function xO(e){return wO().map(e).getStore_INTERNAL().getState()}let Mg=0;function kO({initializeState_DEPRECATED:e,initializeState:t,store_INTERNAL:n,children:r}){var o;let i;const a=p=>{const f=i.current.graphsByVersion;if(f.has(p))return ye(f.get(p));const h=mO();return f.set(p,h),h},s=(p,f)=>{if(f==null){const{transactionSubscriptions:h}=y.current.getState(),g=Mg++;return h.set(g,p),{release:()=>{h.delete(g)}}}else{const{nodeTransactionSubscriptions:h}=y.current.getState();h.has(f)||h.set(f,new Map);const g=Mg++;return ye(h.get(f)).set(g,p),{release:()=>{const w=h.get(f);w&&(w.delete(g),w.size===0&&h.delete(f))}}}},u=p=>{Pg(y.current);for(const f of Object.keys(p))ye(y.current.getState().nextTree).transactionMetadata[f]=p[f]},l=p=>{const f=y.current.getState();Pg(y.current);const h=ye(f.nextTree);let g;try{nf=!0,g=p(h)}finally{nf=!1}g!==h&&(f.nextTree=g,Se("recoil_early_rendering_2021")&&of(m,f,g),ye(c.current)())},c=tf(null),v=SO(p=>{c.current=p},[c]),d=(o=B.createMutableSource)!==null&&o!==void 0?o:B.unstable_createMutableSource,m=n!=null?n:{getState:()=>i.current,replaceState:l,getGraph:a,subscribeToTransactions:s,addTransactionMetadata:u},y=tf(m);i=tf(e!=null?CO(m,e):t!=null?xO(t):Cg());const _=_O(()=>d?d(i,()=>i.current.currentTree.version):null,[d,i]);return ef(()=>()=>{for(const p of y.current.getState().knownAtoms)dO(y.current,p)},[]),B.createElement(Lg.Provider,{value:y},B.createElement(Ng.Provider,{value:_},B.createElement(OO,{setNotifyBatcherOfChange:v}),r))}function TO(e){const o=e,{override:t}=o,n=ji(o,["override"]),r=rf();return t===!1&&r.current!==Tg?e.children:B.createElement(kO,n)}var Jt={useStoreRef:rf,useRecoilMutableSource:EO,RecoilRoot:TO,notifyComponents_FOR_TESTING:of,sendEndOfBatchNotifications_FOR_TESTING:Ag};const{useRef:PO}=B;function LO(){return PO(),""}var af=LO;function NO(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0,r=e.length;n{t.current=e}),t.current}var Dg=FO;const{useStoreRef:IO}=Jt,{SUSPENSE_TIMEOUT_MS:$O}=ir,{updateRetainCount:Ci}=ir,{RetentionZone:UO}=ks,{isSSR:Fg}=Gc,{useEffect:jO,useRef:VO}=B;function BO(e){if(!!Se("recoil_memory_managament_2020"))return zO(e)}function zO(e){const n=(Array.isArray(e)?e:[e]).map(a=>a instanceof UO?a:a.key),r=IO();jO(()=>{if(!Se("recoil_memory_managament_2020"))return;const a=r.current;if(o.current&&!Fg)window.clearTimeout(o.current),o.current=null;else for(const s of n)Ci(a,s,1);return()=>{for(const s of n)Ci(a,s,-1)}},[r,...n]);const o=VO(),i=Dg(n);if(!Fg&&(i===void 0||!AO(i,n))){const a=r.current;for(const s of n)Ci(a,s,1);if(i)for(const s of i)Ci(a,s,-1);o.current&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>{o.current=null;for(const s of n)Ci(a,s,-1)},$O)}}var Ig=BO;const{batchUpdates:WO}=Ls,{DEFAULT_VALUE:$g}=Je,{useRecoilMutableSource:HO,useStoreRef:ar}=Jt,{AbstractRecoilValue:Ug,getRecoilValueAsLoadable:xi,setRecoilValue:Ds,setUnvalidatedRecoilValue:qO,subscribeToRecoilValue:sf}=Zt,{setByAddingToSet:QO}=og,{mutableSourceExists:KO,useMutableSource:GO}=qm,{useCallback:Zr,useEffect:ki,useMemo:XO,useRef:Ti,useState:jg}=B;function Vg(e,t,n){if(e.state==="hasValue")return e.contents;throw e.state==="loading"?new Promise(o=>{n.current.getState().suspendedComponentResolvers.add(o)}):e.state==="hasError"?e.contents:de(`Invalid value of loadable atom "${t.key}"`)}function YO(){const e=ar(),[,t]=jg([]),n=Ti(new Set);n.current=new Set;const r=Ti(new Set),o=Ti(new Map),i=Zr(s=>{const u=o.current.get(s);u&&(u.release(),o.current.delete(s))},[o]),a=af();return ki(()=>{const s=e.current;function u(l,c){!o.current.has(c)||t([])}Cs(n.current,r.current).forEach(l=>{if(o.current.has(l))return;const c=sf(s,new Ug(l),d=>{u(d,l)},a);o.current.set(l,c),s.getState().nextTree?s.getState().queuedComponentCallbacks_DEPRECATED.push(()=>{u(s.getState(),l)}):u(s.getState(),l)}),Cs(r.current,n.current).forEach(l=>{i(l)}),r.current=n.current}),ki(()=>{const s=o.current;return()=>s.forEach((u,l)=>i(l))},[i]),XO(()=>{function s(m){return y=>{Ds(e.current,m,y)}}function u(m){return()=>Ds(e.current,m,$g)}function l(m){var y;n.current.has(m.key)||(n.current=QO(n.current,m.key));const _=e.current.getState();return xi(e.current,m,Se("recoil_early_rendering_2021")&&(y=_.nextTree)!==null&&y!==void 0?y:_.currentTree)}function c(m){const y=l(m);return Vg(y,m,e)}function v(m){return[c(m),s(m)]}function d(m){return[l(m),s(m)]}return{getRecoilValue:c,getRecoilValueLoadable:l,getRecoilState:v,getRecoilStateLoadable:d,getSetRecoilState:s,getResetRecoilState:u}},[n,e])}const ZO={current:0};function JO(e){const t=ar(),n=Zr(()=>{var l;const c=t.current,v=c.getState(),d=Se("recoil_early_rendering_2021")&&(l=v.nextTree)!==null&&l!==void 0?l:v.currentTree;return xi(c,e,d)},[t,e]),r=Zr(()=>n(),[n]),o=af(),i=Zr((l,c)=>{const v=t.current;return sf(v,e,()=>{if(!Se("recoil_suppress_rerender_in_callback"))return c();const m=n();u.current.is(m)||c(),u.current=m},o).release},[t,e,o,n]),a=HO(),s=GO(a,r,i),u=Ti(s);return ki(()=>{u.current=s}),s}function e2(e){const t=ar(),[n,r]=jg([]),o=af();ki(()=>{const s=t.current,u=s.getState(),l=sf(s,e,v=>{var d;if(!Se("recoil_suppress_rerender_in_callback"))return r([]);const m=xi(s,e,s.getState().currentTree);((d=a.current)===null||d===void 0?void 0:d.is(m))||r(m),a.current=m},o);if(u.nextTree)s.getState().queuedComponentCallbacks_DEPRECATED.push(()=>{a.current=null,r([])});else{var c;if(!Se("recoil_suppress_rerender_in_callback"))return r([]);const v=xi(s,e,s.getState().currentTree);((c=a.current)===null||c===void 0?void 0:c.is(v))||r(v),a.current=v}return l.release},[o,e,t]);const i=xi(t.current,e),a=Ti(i);return ki(()=>{a.current=i}),i}function uf(e){return Se("recoil_memory_managament_2020")&&Ig(e),KO()?JO(e):e2(e)}function Bg(e){const t=ar(),n=uf(e);return Vg(n,e,t)}function lf(e){const t=ar();return Zr(n=>{Ds(t.current,e,n)},[t,e])}function t2(e){const t=ar();return Zr(()=>{Ds(t.current,e,$g)},[t,e])}function n2(e){return[Bg(e),lf(e)]}function r2(e){return[uf(e),lf(e)]}function o2(){const e=ar();return(t,n={})=>{WO(()=>{e.current.addTransactionMetadata(n),t.forEach((r,o)=>qO(e.current,new Ug(o),r))})}}var i2={recoilComponentGetRecoilValueCount_FOR_TESTING:ZO,useRecoilInterface:YO,useRecoilState:n2,useRecoilStateLoadable:r2,useRecoilValue:Bg,useRecoilValueLoadable:uf,useResetRecoilState:t2,useSetRecoilState:lf,useSetUnvalidatedAtomValues:o2};function a2(e,t){const n=new Map;for(const[r,o]of e)t(o,r)&&n.set(r,o);return n}var s2=a2;function u2(e,t){const n=new Set;for(const r of e)t(r)&&n.add(r);return n}var l2=u2;function c2(...e){const t=new Map;for(let n=0;nt.current.subscribeToTransactions(e).release,[e,t])}function qg(e){const t=e.atomValues.toMap(),n=xs(s2(t,(r,o)=>{const a=zg(o).persistence_UNSTABLE;return a!=null&&a.type!=="none"&&r.state==="hasValue"}),r=>r.contents);return f2(e.nonvalidatedAtoms.toMap(),n)}function S2(e){$s(Is(t=>{let n=t.getState().previousTree;const r=t.getState().currentTree;n||(n=t.getState().currentTree);const o=qg(r),i=qg(n),a=xs(h2,u=>{var l,c,v,d;return{persistence_UNSTABLE:{type:(l=(c=u.persistence_UNSTABLE)===null||c===void 0?void 0:c.type)!==null&&l!==void 0?l:"none",backButton:(v=(d=u.persistence_UNSTABLE)===null||d===void 0?void 0:d.backButton)!==null&&v!==void 0?v:!1}}}),s=l2(r.dirtyAtoms,u=>o.has(u)||i.has(u));e({atomValues:o,previousAtomValues:i,atomInfo:a,modifiedAtoms:s,transactionMetadata:He({},r.transactionMetadata)})},[e]))}function _2(e){$s(Is(t=>{const n=Fs(t,"current"),r=Fs(t,"previous");e({snapshot:n,previousSnapshot:r})},[e]))}function b2(){const e=cf(),[t,n]=w2(()=>Fs(e.current)),r=Dg(t),o=y2();return Hg(()=>(o.current&&!Wg&&window.clearTimeout(o.current),t.retain()),[t]),$s(Is(i=>n(Fs(i)),[])),r!==t&&!Wg&&(o.current&&(r==null||r.release_INTERNAL(),window.clearTimeout(o.current)),t.retain(),o.current=window.setTimeout(()=>{t.release_INTERNAL(),o.current=null},g2)),t}function E2(){const e=cf();return Is(t=>{var n;const r=e.current.getState(),o=(n=r.nextTree)!==null&&n!==void 0?n:r.currentTree,i=t.getStore_INTERNAL().getState().currentTree;d2(()=>{const a=new Set;for(const l of[o.atomValues.keys(),i.atomValues.keys()])for(const c of l){var s,u;((s=o.atomValues.get(c))===null||s===void 0?void 0:s.contents)!==((u=i.atomValues.get(c))===null||u===void 0?void 0:u.contents)&&zg(c).shouldRestoreFromSnapshots&&a.add(c)}a.forEach(l=>{m2(e.current,new v2(l),i.atomValues.has(l)?ye(i.atomValues.get(l)):p2)}),e.current.replaceState(l=>tt(He({},l),{stateID:t.getID_INTERNAL()}))})},[e])}var Qg={useRecoilSnapshot:b2,useGotoRecoilSnapshot:E2,useRecoilTransactionObserver:_2,useTransactionObservation_DEPRECATED:S2,useTransactionSubscription_DEPRECATED:$s};const{peekNodeInfo:R2}=or,{useStoreRef:O2}=Jt;function C2(){const e=O2();return({key:t})=>R2(e.current,e.current.getState().currentTree,t)}var x2=C2;const{RecoilRoot:k2,useStoreRef:T2}=Jt,{useMemo:P2}=B;function L2(){const e=T2().current;return P2(()=>{function t({children:n}){return B.createElement(k2,{store_INTERNAL:e},n)}return t},[e])}var N2=L2;const{loadableWithValue:A2}=_i,{DEFAULT_VALUE:M2,getNode:D2}=Je,{copyTreeState:F2,getRecoilValueAsLoadable:I2,invalidateDownstreams:$2,writeLoadableToTreeState:U2}=Zt;function Kg(e){return D2(e.key).nodeType==="atom"}class j2{constructor(t,n){ue(this,"_store",void 0),ue(this,"_treeState",void 0),ue(this,"_changes",void 0),ue(this,"get",r=>{if(this._changes.has(r.key))return this._changes.get(r.key);if(!Kg(r))throw de("Reading selectors within atomicUpdate is not supported");const o=I2(this._store,r,this._treeState);if(o.state==="hasValue")return o.contents;throw o.state==="hasError"?o.contents:de(`Expected Recoil atom ${r.key} to have a value, but it is in a loading state.`)}),ue(this,"set",(r,o)=>{if(!Kg(r))throw de("Setting selectors within atomicUpdate is not supported");if(typeof o=="function"){const i=this.get(r);this._changes.set(r.key,o(i))}else this._changes.set(r.key,o)}),ue(this,"reset",r=>{this.set(r,M2)}),this._store=t,this._treeState=n,this._changes=new Map}newTreeState_INTERNAL(){if(this._changes.size===0)return this._treeState;const t=F2(this._treeState);for(const[n,r]of this._changes)U2(t,n,A2(r));return $2(this._store,t),t}}function V2(e){return t=>{e.replaceState(n=>{const r=new j2(e,n);return t(r),r.newTreeState_INTERNAL()})}}var B2={atomicUpdater:V2},z2=B2.atomicUpdater,Gg=Object.freeze({__proto__:null,atomicUpdater:z2});function W2(e,t){if(!e)throw new Error(t)}var H2=W2,Us=H2;const{atomicUpdater:q2}=Gg,{batchUpdates:Q2}=Ls,{DEFAULT_VALUE:K2}=Je,{useStoreRef:G2}=Jt,{setRecoilValue:Xg}=Zt,{Snapshot:YT,cloneSnapshot:X2}=Ri,{useGotoRecoilSnapshot:Y2}=Qg,{useCallback:Z2}=B;class Yg{}const J2=new Yg;function eC(e,t){const n=G2(),r=Y2();return Z2((...o)=>{function i(c,v){Xg(n.current,c,v)}function a(c){Xg(n.current,c,K2)}const s=X2(n.current),u=q2(n.current);let l=J2;return Q2(()=>{const c="useRecoilCallback expects a function that returns a function: it accepts a function of the type (RecoilInterface) => T = R and returns a callback function T => R, where RecoilInterface is an object {snapshot, set, ...} and T and R are the argument and return types of the callback you want to create. Please see the docs at recoiljs.org for details.";if(typeof e!="function")throw de(c);const v=e({set:i,reset:a,snapshot:s,gotoSnapshot:r,transact_UNSTABLE:u});if(typeof v!="function")throw de(c);l=v(...o)}),l instanceof Yg&&Us(!1),l},t!=null?[...t,n]:void 0)}var tC=eC;const{getNode:nC}=Je,{useStoreRef:rC}=Jt,{useCallback:oC}=B;function iC(e){const t=rC();return oC(()=>{var n;const r=t.current,{currentTree:o}=r.getState(),i=nC(e.key);(n=i.clearCache)===null||n===void 0||n.call(i,r,o)},[e,t])}var aC=iC;const{atomicUpdater:sC}=Gg,{useStoreRef:uC}=Jt,{useMemo:lC}=B;function cC(e,t){const n=uC();return lC(()=>(...r)=>{sC(n.current)(i=>{e(i)(...r)})},t!=null?[...t,n]:void 0)}var fC=cC;function Pt(e,t,n){if(typeof e=="string"&&!e.includes('"')&&!e.includes("\\"))return`"${e}"`;switch(typeof e){case"undefined":return"";case"boolean":return e?"true":"false";case"number":case"symbol":return String(e);case"string":return JSON.stringify(e);case"function":if((t==null?void 0:t.allowFunctions)!==!0)throw de("Attempt to serialize function in a Recoil cache key");return`__FUNCTION(${e.name})__`}if(e===null)return"null";if(typeof e!="object"){var r;return(r=JSON.stringify(e))!==null&&r!==void 0?r:""}if(ke(e))return"__PROMISE__";if(Array.isArray(e))return`[${e.map((o,i)=>Pt(o,t,i.toString()))}]`;if(typeof e.toJSON=="function")return Pt(e.toJSON(n),t,n);if(e instanceof Map){const o={};for(const[i,a]of e)o[typeof i=="string"?i:Pt(i,t)]=a;return Pt(o,t,n)}return e instanceof Set?Pt(Array.from(e).sort((o,i)=>Pt(o,t).localeCompare(Pt(i,t))),t,n):Symbol!==void 0&&e[Symbol.iterator]!=null&&typeof e[Symbol.iterator]=="function"?Pt(Array.from(e),t,n):`{${Object.keys(e).filter(o=>e[o]!==void 0).sort().map(o=>`${Pt(o,t)}:${Pt(e[o],t,o)}`).join(",")}}`}function dC(e,t={allowFunctions:!1}){return Pt(e,t)}var js=dC;class pC{constructor(t){var n,r,o;ue(this,"_numLeafs",void 0),ue(this,"_root",void 0),ue(this,"_onHit",void 0),ue(this,"_onSet",void 0),ue(this,"_mapNodeValue",void 0),this._numLeafs=0,this._root=null,this._onHit=(n=t==null?void 0:t.onHit)!==null&&n!==void 0?n:()=>{},this._onSet=(r=t==null?void 0:t.onSet)!==null&&r!==void 0?r:()=>{},this._mapNodeValue=(o=t==null?void 0:t.mapNodeValue)!==null&&o!==void 0?o:i=>i}size(){return this._numLeafs}root(){return this._root}get(t,n){var r;return(r=this.getLeafNode(t,n))===null||r===void 0?void 0:r.value}getLeafNode(t,n){return Zg(this.root(),r=>this._mapNodeValue(t(r)),{onNodeVisit:r=>{n==null||n.onNodeVisit(r),r.type==="leaf"&&this._onHit(r)}})}set(t,n,r){let o,i=null;const a=()=>{i=ff(this.root(),t.map(([s,u])=>[s,this._mapNodeValue(u)]),null,n,null,{onNodeVisit:s=>{r==null||r.onNodeVisit(s),s.type==="leaf"&&(o=s)}},()=>{this.clear(),a()})};a(),this.root()||(this._root=i),this._numLeafs++,this._onSet(ye(o))}delete(t){if(!this.root())return!1;const n=ye(this.root());return hC(n,t,t.parent)?t===n||n.type==="branch"&&!n.branches.size?(this._root=null,this._numLeafs=0,!0):(this._numLeafs-=ey(t),!0):!1}clear(){this._numLeafs=0,this._root=null}}const Zg=(e,t,n)=>{var r;if(e==null)return;if(n==null||(r=n.onNodeVisit)===null||r===void 0||r.call(n,e),e.type==="leaf")return e;const o=t(e.nodeKey);return Zg(e.branches.get(o),t,n)},ff=(e,t,n,r,o,i,a)=>{var s;let u;if(e==null)if(t.length===0)u={type:"leaf",value:r,parent:n,branchKey:o};else{const[l,...c]=t,[v,d]=l;u={type:"branch",nodeKey:v,parent:n,branches:new Map,branchKey:o},u.branches.set(d,ff(null,c,u,r,d,i,a))}else if(u=e,t.length){const[l,...c]=t,[v,d]=l;if(e.type!=="branch"||e.nodeKey!==v)return a(),u;e.branches.set(d,ff(e.branches.get(d),c,e,r,d,i,a))}return i==null||(s=i.onNodeVisit)===null||s===void 0||s.call(i,u),u},hC=(e,t,n)=>n?(n.branches.delete(t.branchKey),Jg(e,n,n.parent)):e===t,Jg=(e,t,n)=>n?(t.branches.size===0&&n.branches.delete(t.branchKey),Jg(e,n,n.parent)):e===t,ey=e=>e.type==="leaf"?1:Array.from(e.branches.values()).reduce((t,n)=>t+ey(n),0);var vC={TreeCache:pC},mC=vC.TreeCache,ty=Object.freeze({__proto__:null,TreeCache:mC});class gC{constructor(t){var n;ue(this,"_maxSize",void 0),ue(this,"_size",void 0),ue(this,"_head",void 0),ue(this,"_tail",void 0),ue(this,"_map",void 0),ue(this,"_keyMapper",void 0),this._maxSize=t.maxSize,this._size=0,this._head=null,this._tail=null,this._map=new Map,this._keyMapper=(n=t.mapKey)!==null&&n!==void 0?n:r=>r}head(){return this._head}tail(){return this._tail}size(){return this._size}maxSize(){return this._maxSize}has(t){return this._map.has(this._keyMapper(t))}get(t){const n=this._keyMapper(t),r=this._map.get(n);if(!!r)return this.set(t,r.value),r.value}set(t,n){const r=this._keyMapper(t);this._map.get(r)&&this.delete(t);const i=this.head(),a={key:t,right:i,left:null,value:n};i?i.left=a:this._tail=a,this._map.set(r,a),this._head=a,this._size++,this._maybeDeleteLRU()}_maybeDeleteLRU(){this.size()>this.maxSize()&&this.deleteLru()}deleteLru(){const t=this.tail();t&&this.delete(t.key)}delete(t){const n=this._keyMapper(t);if(!this._size||!this._map.has(n))return;const r=ye(this._map.get(n)),o=r.right,i=r.left;o&&(o.left=r.left),i&&(i.right=r.right),r===this.head()&&(this._head=o),r===this.tail()&&(this._tail=i),this._map.delete(n),this._size--}clear(){this._size=0,this._head=null,this._tail=null,this._map=new Map}}var yC={LRUCache:gC},wC=yC.LRUCache,ny=Object.freeze({__proto__:null,LRUCache:wC});const{LRUCache:SC}=ny,{TreeCache:_C}=ty;function bC(e,t=n=>n){const n=new SC({maxSize:e}),r=new _C({mapNodeValue:t,onHit:o=>{n.set(o,!0)},onSet:o=>{const i=n.tail();n.set(o,!0),i&&r.size()>e&&r.delete(i.key)}});return r}var ry=bC;const{TreeCache:EC}=ty,Vs={equality:"reference",eviction:"keep-all",maxSize:1/0};function RC({equality:e=Vs.equality,eviction:t=Vs.eviction,maxSize:n=Vs.maxSize}=Vs){const r=OC(e);return CC(t,n,r)}function OC(e){switch(e){case"reference":return t=>t;case"value":return t=>js(t)}throw de(`Unrecognized equality policy ${e}`)}function CC(e,t,n){switch(e){case"keep-all":return new EC({mapNodeValue:n});case"lru":return ry(ye(t),n);case"most-recent":return ry(1,n)}throw de(`Unrecognized eviction policy ${e}`)}var xC=RC;function kC(e){return()=>null}var TC={startPerfBlock:kC};const{loadableWithError:Pi,loadableWithPromise:PC,loadableWithValue:df}=_i,{getNodeLoadable:LC,peekNodeLoadable:NC,setNodeValue:AC}=or,{saveDependencyMapToStore:MC}=bi,{DEFAULT_VALUE:DC,RecoilValueNotReady:FC,getConfigDeletionHandler:IC,getNode:$C,registerNode:oy}=Je,{isRecoilValue:UC}=nr,{AbstractRecoilValue:jC}=nr,{markRecoilValueModified:VC,setRecoilValueLoadable:BC}=Zt,{retainedByOptionWithDefault:zC}=ir,{cloneSnapshot:WC}=Ri,{startPerfBlock:HC}=TC;class iy{}const Li=new iy,Ni=[],Bs=new Map,qC=(()=>{let e=0;return()=>e++})();function QC(){return{depValuesDiscoveredSoFarDuringAsyncWork:null,latestLoadable:null,latestExecutionId:null,stateVersion:null}}function KC(e){let t=null;const{key:n,get:r,cachePolicy_UNSTABLE:o}=e,i=e.set!=null?e.set:void 0,a=new Set,s=xC(o!=null?o:{equality:"reference",eviction:"keep-all"}),u=zC(e.retainedBy_UNSTABLE),l=new Map;let c=0;function v(){return!Se("recoil_memory_managament_2020")||c>0}function d(T){return l.has(T)||l.set(T,QC()),ye(l.get(T))}function m(T){return c++,T.getState().knownSelectors.add(n),()=>{c--,T.getState().knownSelectors.delete(n),l.delete(T)}}function y(){return IC(n)!==void 0&&!v()}function _(T,M,A){if(M.state==="loading"){let q=Bs.get(A);q==null&&Bs.set(A,q=new Set),q.add(T)}}function p(T,M){const A=Bs.get(M);if(A!==void 0){for(const q of A)BC(q,new jC(n),T);Bs.delete(M)}}function f(T,M,A){const q=T.getState().knownSelectors.has(A);if(q&&M.atomValues.has(A))return ye(M.atomValues.get(A));const z=LC(T,M,A);return z.state!=="loading"&&q&&M.atomValues.set(A,z),z}function h(T,M,A,q,z,ae){return M.then(pe=>{if(!v())throw P(T,z),Li;const we=df(pe);return k(A,F(q),we),x(T,A,new Set(q.keys()),z),w(T,we,z),pe}).catch(pe=>{if(!v())throw P(T,z),Li;if(I(T,z)&&b(q,T,z),ke(pe))return g(T,pe,A,q,z,ae);const we=Pi(pe);throw k(A,F(q),we),x(T,A,new Set(q.keys()),z),w(T,we,z),pe})}function g(T,M,A,q,z,ae){return M.then(pe=>{if(!v())throw P(T,z),Li;ae.loadingDepKey!=null&&ae.loadingDepPromise===M?A.atomValues.set(ae.loadingDepKey,df(pe)):T.getState().knownSelectors.forEach(De=>{A.atomValues.delete(De)});const we=V(T,A);if(we&&we.state==="hasValue")return C(we,T),we.contents;if(!I(T,z)){var Me;const De=ie(A);if((De==null||(Me=De.latestLoadable)===null||Me===void 0?void 0:Me.state)==="loading")return De.latestLoadable.contents}const[Pe,Le]=L(T,A,z);if(I(T,z)&&b(Le,T,z),Pe.state!=="loading"&&(k(A,F(Le),Pe),x(T,A,new Set(Le.keys()),z),w(T,Pe,z)),Pe.state==="hasError")throw Pe.contents;return Pe.contents}).catch(pe=>{if(pe instanceof iy)throw Li;if(!v())throw P(T,z),Li;const we=Pi(pe);throw k(A,F(q),Pi(pe)),x(T,A,new Set(q.keys()),z),w(T,we,z),pe})}function w(T,M,A){I(T,A)&&(C(M,T),p(M,A))}function x(T,M,A,q){var z,ae,pe,we;if(I(T,q)||M.version===((z=T.getState())===null||z===void 0||(ae=z.currentTree)===null||ae===void 0?void 0:ae.version)||M.version===((pe=T.getState())===null||pe===void 0||(we=pe.nextTree)===null||we===void 0?void 0:we.version)){var Me,Pe,Le;MC(new Map([[n,A]]),T,(Me=(Pe=T.getState())===null||Pe===void 0||(Le=Pe.nextTree)===null||Le===void 0?void 0:Le.version)!==null&&Me!==void 0?Me:T.getState().currentTree.version)}}function E(T,M,A,q,z){A.add(q),x(T,M,A,z)}function L(T,M,A){const q=HC(n);let z,ae=!1,pe;const we={loadingDepKey:null,loadingDepPromise:null},Me=new Map,Pe=new Set;x(T,M,Pe,A);function Le(At){const{key:_t}=At;E(T,M,Pe,_t,A);const at=f(T,M,_t);switch(Me.set(_t,at),at.state){case"hasValue":return at.contents;case"hasError":throw at.contents;case"loading":throw we.loadingDepKey=_t,we.loadingDepPromise=at.contents,at.contents}throw de("Invalid Loadable state")}let De=!1;const oo=At=>(..._t)=>{if(!De)throw de("getCallback() should only be called asynchronously after the selector is evalutated. It can be used for selectors to return objects with callbacks that can obtain the current Recoil state without a subscription.");const at=WC(T),Ii=At({snapshot:at});if(typeof Ii!="function")throw de("getCallback() expects a function that returns a function.");return Ii(..._t)};try{z=r({get:Le,getCallback:oo}),z=UC(z)?Le(z):z,De=!0,ke(z)?z=h(T,z,M,Me,A,we).finally(q):q()}catch(At){z=At,ke(z)?z=g(T,z,M,Me,A,we).finally(q):(ae=!0,q())}return ae?pe=Pi(z):ke(z)?pe=PC(z):pe=df(z),pe.state!=="loading"&&J(pe.contents),[pe,Me]}function V(T,M){const A=new Set,q=d(T);let z;try{z=s.get(ae=>(typeof ae!="string"&&Us(!1),f(T,M,ae).contents),{onNodeVisit:ae=>{ae.type==="branch"&&ae.nodeKey!==n&&typeof ae.nodeKey=="string"&&(A.add(ae.nodeKey),a.add(ae.nodeKey))}})}catch(ae){throw de(`Problem with cache lookup for selector "${n}": ${ae.message}`)}return z&&x(T,M,A,q.latestExecutionId),z}function F(T){return Array.from(T.entries()).map(([M,A])=>[M,A.contents])}function G(T,M){const A=qC(),[q,z]=L(T,M,A);return C(q,T,z,A,M),U(M,F(z),q),_(T,q,A),q}function Y(T,M){const A=V(T,M);if(A!=null)return C(A,T),A;const q=ie(M);if(q){const z=q;return _(T,ye(z.latestLoadable),ye(z.latestExecutionId)),ye(z.latestLoadable)}return G(T,M)}function ie(T){var M;const[,A]=(M=Array.from(l.entries()).find(([q,z])=>z.latestLoadable!=null&&z.latestExecutionId!=null&&!S(q,T)))!==null&&M!==void 0?M:[];return A}const Z=new Map;function S(T,M){var A,q;const z=d(T),ae=(A=z.depValuesDiscoveredSoFarDuringAsyncWork)!==null&&A!==void 0?A:new Map,pe=Array(((q=Z.get(M.version))!==null&&q!==void 0?q:new Map).entries()),we=Z.has(M.version)&&pe.length===ae.size&&pe.every(([Me,Pe])=>ae.get(Me)===Pe);return ae==null||M.version===z.stateVersion||we?!1:(Z.set(M.version,new Map(ae)),Array.from(ae).some(([Me,Pe])=>f(T,M,Me).contents!==Pe.contents))}function C(T,M,A,q,z){const ae=d(M);T.state==="loading"?(ae.depValuesDiscoveredSoFarDuringAsyncWork=A,ae.latestExecutionId=q,ae.latestLoadable=T,ae.stateVersion=z==null?void 0:z.version):(ae.depValuesDiscoveredSoFarDuringAsyncWork=null,ae.latestExecutionId=null,ae.latestLoadable=null,ae.stateVersion=null)}function U(T,M,A){A.state!=="loading"&&k(T,M,A)}function b(T,M,A){const q=d(M);I(M,A)&&(q.depValuesDiscoveredSoFarDuringAsyncWork=T)}function P(T,M){I(T,M)&&l.delete(T)}function I(T,M){const A=d(T);return M===A.latestExecutionId}function J(T){}function k(T,M,A){T.atomValues.set(n,A);try{s.set(M,A)}catch(q){throw de(`Problem with setting cache for selector "${n}": ${q.message}`)}}function N(T){if(Ni.includes(n)){const M=`Recoil selector has circular dependencies: ${Ni.slice(Ni.indexOf(n)).join(" \u2192 ")}`;return Pi(de(M))}Ni.push(n);try{return T()}finally{Ni.pop()}}function X(T,M){return s.get(q=>{typeof q!="string"&&Us(!1);const z=NC(T,M,q);return z==null?void 0:z.contents})}function le(T,M){return N(()=>Y(T,M))}function he(T){T.atomValues.delete(n)}function Te(T,M){t==null&&Us(!1);for(const q of a){var A;const z=$C(q);(A=z.clearCache)===null||A===void 0||A.call(z,T,M)}he(M),s.clear(),VC(T,t)}return i!=null?t=oy({key:n,nodeType:"selector",peek:X,get:le,set:(M,A,q)=>{let z=!1;const ae=new Map;function pe({key:Le}){if(z)throw de("Recoil: Async selector sets are not currently supported.");const De=f(M,A,Le);if(De.state==="hasValue")return De.contents;throw De.state==="loading"?new FC(Le):De.contents}function we(Le,De){if(z)throw de("Recoil: Async selector sets are not currently supported.");const oo=typeof De=="function"?De(pe(Le)):De;AC(M,A,Le.key,oo).forEach((_t,at)=>ae.set(at,_t))}function Me(Le){we(Le,DC)}const Pe=i({set:we,get:pe,reset:Me},q);if(Pe!==void 0)throw ke(Pe)?de("Recoil: Async selector sets are not currently supported."):de("Recoil: selector set should be a void function.");return z=!0,ae},init:m,invalidate:he,clearCache:Te,shouldDeleteConfigOnRelease:y,dangerouslyAllowMutability:e.dangerouslyAllowMutability,shouldRestoreFromSnapshots:!1,retainedBy:u}):t=oy({key:n,nodeType:"selector",peek:X,get:le,init:m,invalidate:he,clearCache:Te,shouldDeleteConfigOnRelease:y,dangerouslyAllowMutability:e.dangerouslyAllowMutability,shouldRestoreFromSnapshots:!1,retainedBy:u})}var zs=KC;const{loadableWithError:ay,loadableWithPromise:pf,loadableWithValue:Jr}=_i,{peekNodeInfo:GC}=or,{DEFAULT_VALUE:sr,DefaultValue:zt,getConfigDeletionHandler:sy,registerNode:XC,setConfigDeletionHandler:YC}=Je,{isRecoilValue:ZC}=nr,{getRecoilValueAsLoadable:JC,markRecoilValueModified:ex,setRecoilValue:uy,setRecoilValueLoadable:tx}=Zt,{retainedByOptionWithDefault:nx}=ir;function rx(e){const{key:t,persistence_UNSTABLE:n}=e,r=nx(e.retainedBy_UNSTABLE);let o=0,i=ke(e.default)?pf(e.default.then(f=>(i=Jr(f),f)).catch(f=>{throw i=ay(f),f})):Jr(e.default);u(e.default);let a;const s=new Map;function u(f){return f}function l(f,h){const g=h.then(w=>{var x,E;return((E=((x=f.getState().nextTree)!==null&&x!==void 0?x:f.getState().currentTree).atomValues.get(t))===null||E===void 0?void 0:E.contents)===g&&uy(f,p,w),w}).catch(w=>{var x,E;throw((E=((x=f.getState().nextTree)!==null&&x!==void 0?x:f.getState().currentTree).atomValues.get(t))===null||E===void 0?void 0:E.contents)===g&&tx(f,p,ay(w)),w});return g}function c(f,h,g){o++;const w=f.getState().knownAtoms.has(t);if(f.getState().knownAtoms.add(t),i.state==="loading"){const G=()=>{var Y;((Y=f.getState().nextTree)!==null&&Y!==void 0?Y:f.getState().currentTree).atomValues.has(t)||ex(f,p)};i.contents.then(G).catch(G)}let x=sr,E=null;if(e.effects_UNSTABLE!=null&&!w){let Y=function(b){if(G&&b.key===t&&!(x instanceof zt)){const P=x;return P instanceof zt?i:ke(P)?pf(P.then(I=>I instanceof zt?i.toPromise():I)):Jr(P)}return JC(f,b)},ie=function(b){return Y(b).toPromise()},Z=function(b){var P;const I=GC(f,(P=f.getState().nextTree)!==null&&P!==void 0?P:f.getState().currentTree,b.key);return G&&b.key===t&&!(x instanceof zt)?tt(He({},I),{isSet:!0,loadable:Y(b)}):I},G=!0;const S=b=>P=>{if(G){const I=x instanceof zt||ke(x)?i.state==="hasValue"?i.contents:sr:x;x=typeof P=="function"?P(I):P,ke(x)&&(x=x.then(J=>(E={effect:b,value:J},J)))}else{if(ke(P))throw de("Setting atoms to async values is not implemented.");typeof P!="function"&&(E={effect:b,value:P}),uy(f,p,typeof P=="function"?I=>{const J=P(I);return E={effect:b,value:J},J}:P)}},C=b=>()=>S(b)(sr),U=b=>P=>{f.subscribeToTransactions(I=>{var J;let{currentTree:k,previousTree:N}=I.getState();N||(N=k);const X=(J=k.atomValues.get(t))!==null&&J!==void 0?J:i;if(X.state==="hasValue"){var le,he,Te,T;const M=X.contents,A=(le=N.atomValues.get(t))!==null&&le!==void 0?le:i,q=A.state==="hasValue"?A.contents:sr;((he=E)===null||he===void 0?void 0:he.effect)!==b||((Te=E)===null||Te===void 0?void 0:Te.value)!==M?P(M,q,!k.atomValues.has(t)):((T=E)===null||T===void 0?void 0:T.effect)===b&&(E=null)}},t)};for(const b of(L=e.effects_UNSTABLE)!==null&&L!==void 0?L:[]){var L;const P=b({node:p,trigger:g,setSelf:S(b),resetSelf:C(b),onSet:U(b),getPromise:ie,getLoadable:Y,getInfo_UNSTABLE:Z});if(P!=null){var V;s.set(f,[...(V=s.get(f))!==null&&V!==void 0?V:[],P])}}G=!1}if(!(x instanceof zt)){var F;const G=u(x),Y=ke(G)?pf(l(f,G)):Jr(G);h.atomValues.set(t,Y),(F=f.getState().nextTree)===null||F===void 0||F.atomValues.set(t,Y)}return()=>{var G;o--,(G=s.get(f))===null||G===void 0||G.forEach(Y=>Y()),s.delete(f),f.getState().knownAtoms.delete(t)}}function v(f,h){var g,w;return(g=(w=h.atomValues.get(t))!==null&&w!==void 0?w:a)!==null&&g!==void 0?g:i}function d(f,h){if(h.atomValues.has(t))return ye(h.atomValues.get(t));if(h.nonvalidatedAtoms.has(t)){if(a!=null)return a;if(n==null)return i;const g=h.nonvalidatedAtoms.get(t),w=n.validator(g,sr);return a=w instanceof zt?i:Jr(w),a}else return i}function m(){a=void 0}function y(f,h,g){if(h.atomValues.has(t)){const w=ye(h.atomValues.get(t));if(w.state==="hasValue"&&g===w.contents)return new Map}else if(!h.nonvalidatedAtoms.has(t)&&g instanceof zt)return new Map;return a=void 0,new Map().set(t,Jr(g))}function _(){return sy(t)!==void 0&&o<=0}const p=XC({key:t,nodeType:"atom",peek:v,get:d,set:y,init:c,invalidate:m,shouldDeleteConfigOnRelease:_,dangerouslyAllowMutability:e.dangerouslyAllowMutability,persistence_UNSTABLE:e.persistence_UNSTABLE?{type:e.persistence_UNSTABLE.type,backButton:e.persistence_UNSTABLE.backButton}:void 0,shouldRestoreFromSnapshots:!0,retainedBy:r});return p}function ly(e){const r=e,{default:t}=r,n=ji(r,["default"]);return ZC(t)?ox(tt(He({},n),{default:t})):rx(tt(He({},n),{default:t}))}function ox(e){const t=ly(tt(He({},e),{default:sr,persistence_UNSTABLE:e.persistence_UNSTABLE===void 0?void 0:tt(He({},e.persistence_UNSTABLE),{validator:r=>r instanceof zt?r:ye(e.persistence_UNSTABLE).validator(r,sr)}),effects_UNSTABLE:e.effects_UNSTABLE})),n=zs({key:`${e.key}__withFallback`,get:({get:r})=>{const o=r(t);return o instanceof zt?e.default:o},set:({set:r},o)=>r(t,o),dangerouslyAllowMutability:e.dangerouslyAllowMutability});return YC(n.key,sy(e.key)),n}var cy=ly;class ix{constructor(t){var n;ue(this,"_map",void 0),ue(this,"_keyMapper",void 0),this._map=new Map,this._keyMapper=(n=t==null?void 0:t.mapKey)!==null&&n!==void 0?n:r=>r}size(){return this._map.size}has(t){return this._map.has(this._keyMapper(t))}get(t){return this._map.get(this._keyMapper(t))}set(t,n){this._map.set(this._keyMapper(t),n)}delete(t){this._map.delete(this._keyMapper(t))}clear(){this._map.clear()}}var ax={MapCache:ix},sx=ax.MapCache,ux=Object.freeze({__proto__:null,MapCache:sx});const{LRUCache:fy}=ny,{MapCache:lx}=ux,Ws={equality:"reference",eviction:"none",maxSize:1/0};function cx({equality:e=Ws.equality,eviction:t=Ws.eviction,maxSize:n=Ws.maxSize}=Ws){const r=fx(e);return dx(t,n,r)}function fx(e){switch(e){case"reference":return t=>t;case"value":return t=>js(t)}throw de(`Unrecognized equality policy ${e}`)}function dx(e,t,n){switch(e){case"keep-all":return new lx({mapKey:n});case"lru":return new fy({mapKey:n,maxSize:ye(t)});case"most-recent":return new fy({mapKey:n,maxSize:1})}throw de(`Unrecognized eviction policy ${e}`)}var dy=cx;const{setConfigDeletionHandler:px}=Je;function hx(e){var t,n;const r=dy({equality:(t=(n=e.cachePolicyForParams_UNSTABLE)===null||n===void 0?void 0:n.equality)!==null&&t!==void 0?t:"value",eviction:"keep-all"});return o=>{var i;const a=r.get(o);if(a!=null)return a;const c=e,{cachePolicyForParams_UNSTABLE:s}=c,u=ji(c,["cachePolicyForParams_UNSTABLE"]),l=cy(tt(He({},u),{key:`${e.key}__${(i=js(o))!==null&&i!==void 0?i:"void"}`,default:typeof e.default=="function"?e.default(o):e.default,retainedBy_UNSTABLE:typeof e.retainedBy_UNSTABLE=="function"?e.retainedBy_UNSTABLE(o):e.retainedBy_UNSTABLE,effects_UNSTABLE:typeof e.effects_UNSTABLE=="function"?e.effects_UNSTABLE(o):e.effects_UNSTABLE}));return r.set(o,l),px(l.key,()=>{r.delete(o)}),l}}var vx=hx;const{setConfigDeletionHandler:mx}=Je;let gx=0;function yx(e){var t,n;const r=dy({equality:(t=(n=e.cachePolicyForParams_UNSTABLE)===null||n===void 0?void 0:n.equality)!==null&&t!==void 0?t:"value",eviction:"keep-all"});return o=>{var i;const a=r.get(o);if(a!=null)return a;const s=`${e.key}__selectorFamily/${(i=js(o,{allowFunctions:!0}))!==null&&i!==void 0?i:"void"}/${gx++}`,u=d=>e.get(o)(d),l=e.cachePolicy_UNSTABLE,c=typeof e.retainedBy_UNSTABLE=="function"?e.retainedBy_UNSTABLE(o):e.retainedBy_UNSTABLE;let v;if(e.set!=null){const d=e.set;v=zs({key:s,get:u,set:(y,_)=>d(o)(y,_),cachePolicy_UNSTABLE:l,dangerouslyAllowMutability:e.dangerouslyAllowMutability,retainedBy_UNSTABLE:c})}else v=zs({key:s,get:u,cachePolicy_UNSTABLE:l,dangerouslyAllowMutability:e.dangerouslyAllowMutability,retainedBy_UNSTABLE:c});return r.set(o,v),mx(v.key,()=>{r.delete(o)}),v}}var Ln=yx;const wx=Ln({key:"__constant",get:e=>()=>e,cachePolicyForParams_UNSTABLE:{equality:"reference"}});function Sx(e){return wx(e)}var _x=Sx;const bx=Ln({key:"__error",get:e=>()=>{throw de(e)},cachePolicyForParams_UNSTABLE:{equality:"reference"}});function Ex(e){return bx(e)}var Rx=Ex;function Ox(e){return e}var Cx=Ox;const{loadableWithError:py,loadableWithPromise:hy,loadableWithValue:vy}=_i;function Hs(e,t){const n=Array(t.length).fill(void 0),r=Array(t.length).fill(void 0);for(const[o,i]of t.entries())try{n[o]=e(i)}catch(a){r[o]=a}return[n,r]}function xx(e){return e!=null&&!ke(e)}function qs(e){return Array.isArray(e)?e:Object.getOwnPropertyNames(e).map(t=>e[t])}function hf(e,t){return Array.isArray(e)?t:Object.getOwnPropertyNames(e).reduce((n,r,o)=>tt(He({},n),{[r]:t[o]}),{})}function eo(e,t,n){const r=n.map((o,i)=>o==null?vy(t[i]):ke(o)?hy(o):py(o));return hf(e,r)}function kx(e,t){return t.map((n,r)=>n===void 0?e[r]:n)}const Tx=Ln({key:"__waitForNone",get:e=>({get:t})=>{const n=qs(e),[r,o]=Hs(t,n);return eo(e,r,o)},dangerouslyAllowMutability:!0}),Px=Ln({key:"__waitForAny",get:e=>({get:t})=>{const n=qs(e),[r,o]=Hs(t,n);return o.some(i=>!ke(i))?eo(e,r,o):new Promise(i=>{for(const[a,s]of o.entries())ke(s)&&s.then(u=>{r[a]=u,o[a]=void 0,i(eo(e,r,o))}).catch(u=>{o[a]=u,i(eo(e,r,o))})})},dangerouslyAllowMutability:!0}),Lx=Ln({key:"__waitForAll",get:e=>({get:t})=>{const n=qs(e),[r,o]=Hs(t,n);if(o.every(a=>a==null))return hf(e,r);const i=o.find(xx);if(i!=null)throw i;return Promise.all(o).then(a=>hf(e,kx(r,a)))},dangerouslyAllowMutability:!0}),Nx=Ln({key:"__waitForAllSettled",get:e=>({get:t})=>{const n=qs(e),[r,o]=Hs(t,n);return o.every(i=>!ke(i))?eo(e,r,o):Promise.all(o.map((i,a)=>ke(i)?i.then(s=>{r[a]=s,o[a]=void 0}).catch(s=>{r[a]=void 0,o[a]=s}):null)).then(()=>eo(e,r,o))},dangerouslyAllowMutability:!0}),Ax=Ln({key:"__noWait",get:e=>({get:t})=>{try{return vy(t(e))}catch(n){return ke(n)?hy(n):py(n)}},dangerouslyAllowMutability:!0});var Mx={waitForNone:Tx,waitForAny:Px,waitForAll:Lx,waitForAllSettled:Nx,noWait:Ax};const{RecoilLoadable:Dx}=_i,{DefaultValue:Fx}=Je,{RecoilRoot:Ix}=Jt,{isRecoilValue:$x}=nr,{retentionZone:Ux}=ks,{freshSnapshot:jx}=Ri,{useRecoilState:Vx,useRecoilStateLoadable:Bx,useRecoilValue:zx,useRecoilValueLoadable:Wx,useResetRecoilState:Hx,useSetRecoilState:qx,useSetUnvalidatedAtomValues:Qx}=i2,{useGotoRecoilSnapshot:Kx,useRecoilSnapshot:Gx,useRecoilTransactionObserver:Xx,useTransactionObservation_DEPRECATED:Yx}=Qg,{noWait:Zx,waitForAll:Jx,waitForAllSettled:ek,waitForAny:tk,waitForNone:nk}=Mx;var vf={DefaultValue:Fx,isRecoilValue:$x,RecoilLoadable:Dx,RecoilRoot:Ix,useRecoilBridgeAcrossReactRoots_UNSTABLE:N2,atom:cy,selector:zs,atomFamily:vx,selectorFamily:Ln,constSelector:_x,errorSelector:Rx,readOnlySelector:Cx,noWait:Zx,waitForNone:nk,waitForAny:tk,waitForAll:Jx,waitForAllSettled:ek,useRecoilValue:zx,useRecoilValueLoadable:Wx,useRecoilState:Vx,useRecoilStateLoadable:Bx,useSetRecoilState:qx,useResetRecoilState:Hx,useGetRecoilValueInfo_UNSTABLE:x2,useRecoilRefresher_UNSTABLE:aC,useRecoilCallback:tC,useRecoilTransaction_UNSTABLE:fC,useGotoRecoilSnapshot:Kx,useRecoilSnapshot:Gx,useRecoilTransactionObserver_UNSTABLE:Xx,useTransactionObservation_UNSTABLE:Yx,useSetUnvalidatedAtomValues_UNSTABLE:Qx,snapshot_UNSTABLE:jx,useRetain:Ig,retentionZone:Ux},ZT=vf.RecoilRoot,JT=vf.atom,eP=vf.useRecoilState;function mf(){return mf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function ok(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gf=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=rk(e,["color","size"]);return B.createElement("svg",mf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("polyline",{points:"6 9 12 15 18 9"}))});gf.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};gf.displayName="ChevronDown";var tP=gf;function yf(){return yf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function ak(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wf=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=ik(e,["color","size"]);return B.createElement("svg",yf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),B.createElement("line",{x1:"1",y1:"1",x2:"23",y2:"23"}))});wf.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};wf.displayName="EyeOff";var nP=wf;function Sf(){return Sf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function uk(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _f=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=sk(e,["color","size"]);return B.createElement("svg",Sf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),B.createElement("circle",{cx:"12",cy:"12",r:"3"}))});_f.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};_f.displayName="Eye";var rP=_f;function bf(){return bf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function ck(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ef=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=lk(e,["color","size"]);return B.createElement("svg",bf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("path",{d:"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"}))});Ef.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};Ef.displayName="GitHub";var oP=Ef;function Rf(){return Rf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function dk(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Of=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=fk(e,["color","size"]);return B.createElement("svg",Rf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("circle",{cx:"12",cy:"12",r:"10"}),B.createElement("line",{x1:"12",y1:"16",x2:"12",y2:"12"}),B.createElement("line",{x1:"12",y1:"8",x2:"12.01",y2:"8"}))});Of.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};Of.displayName="Info";var iP=Of;function Cf(){return Cf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function hk(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xf=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=pk(e,["color","size"]);return B.createElement("svg",Cf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}),B.createElement("polyline",{points:"16 17 21 12 16 7"}),B.createElement("line",{x1:"21",y1:"12",x2:"9",y2:"12"}))});xf.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};xf.displayName="LogOut";var aP=xf;function kf(){return kf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function mk(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tf=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=vk(e,["color","size"]);return B.createElement("svg",kf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("rect",{x:"6",y:"4",width:"4",height:"16"}),B.createElement("rect",{x:"14",y:"4",width:"4",height:"16"}))});Tf.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};Tf.displayName="Pause";var sP=Tf;function Pf(){return Pf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function yk(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lf=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=gk(e,["color","size"]);return B.createElement("svg",Pf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("polygon",{points:"5 3 19 12 5 21 5 3"}))});Lf.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};Lf.displayName="Play";var uP=Lf;function Nf(){return Nf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function Sk(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Af=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=wk(e,["color","size"]);return B.createElement("svg",Nf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("polyline",{points:"23 4 23 10 17 10"}),B.createElement("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"}))});Af.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};Af.displayName="RotateCw";var lP=Af;function Mf(){return Mf=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function bk(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Df=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=_k(e,["color","size"]);return B.createElement("svg",Mf({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("circle",{cx:"11",cy:"11",r:"8"}),B.createElement("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"}))});Df.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};Df.displayName="Search";var cP=Df;function Ff(){return Ff=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function Rk(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var If=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=Ek(e,["color","size"]);return B.createElement("svg",Ff({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),B.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))});If.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};If.displayName="X";var fP=If;function $f(){return $f=Object.assign||function(e){for(var t=1;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,r)||(n[r]=e[r]))}return n}function Ck(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uf=$.exports.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=e.size,i=o===void 0?24:o,a=Ok(e,["color","size"]);return B.createElement("svg",$f({ref:t,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a),B.createElement("polygon",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2"}))});Uf.propTypes={color:ne.string,size:ne.oneOfType([ne.string,ne.number])};Uf.displayName="Zap";var dP=Uf;function Lt(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r3?t.i-4:t.i:Array.isArray(e)?1:Vf(e)?2:Bf(e)?3:0}function jf(e,t){return no(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function xk(e,t){return no(e)===2?e.get(t):e[t]}function my(e,t,n){var r=no(e);r===2?e.set(t,n):r===3?(e.delete(t),e.add(n)):e[t]=n}function kk(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function Vf(e){return Nk&&e instanceof Map}function Bf(e){return Ak&&e instanceof Set}function lr(e){return e.o||e.t}function zf(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=Dk(e);delete t[lt];for(var n=ed(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=Tk),Object.freeze(e),t&&Ai(e,function(n,r){return Wf(r,!0)},!0)),e}function Tk(){Lt(2)}function Hf(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function en(e){var t=Fk[e];return t||Lt(18,e),t}function gy(){return Mi}function qf(e,t){t&&(en("Patches"),e.u=[],e.s=[],e.v=t)}function Qs(e){Qf(e),e.p.forEach(Pk),e.p=null}function Qf(e){e===Mi&&(Mi=e.l)}function yy(e){return Mi={p:[],l:Mi,h:e,m:!0,_:0}}function Pk(e){var t=e[lt];t.i===0||t.i===1?t.j():t.O=!0}function Kf(e,t){t._=t.p.length;var n=t.p[0],r=e!==void 0&&e!==n;return t.h.g||en("ES5").S(t,e,r),r?(n[lt].P&&(Qs(t),Lt(4)),ur(e)&&(e=Ks(t,e),t.l||Gs(t,e)),t.u&&en("Patches").M(n[lt],e,t.u,t.s)):e=Ks(t,n,[]),Qs(t),t.u&&t.v(t.u,t.s),e!==Ry?e:void 0}function Ks(e,t,n){if(Hf(t))return t;var r=t[lt];if(!r)return Ai(t,function(i,a){return wy(e,r,t,i,a,n)},!0),t;if(r.A!==e)return t;if(!r.P)return Gs(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var o=r.i===4||r.i===5?r.o=zf(r.k):r.o;Ai(r.i===3?new Set(o):o,function(i,a){return wy(e,r,o,i,a,n)}),Gs(e,o,!1),n&&e.u&&en("Patches").R(r,n,e.u,e.s)}return r.o}function wy(e,t,n,r,o,i){if(to(o)){var a=Ks(e,o,i&&t&&t.i!==3&&!jf(t.D,r)?i.concat(r):void 0);if(my(n,r,a),!to(a))return;e.m=!1}if(ur(o)&&!Hf(o)){if(!e.h.F&&e._<1)return;Ks(e,o),t&&t.A.l||Gs(e,o)}}function Gs(e,t,n){n===void 0&&(n=!1),e.h.F&&e.m&&Wf(t,n)}function Gf(e,t){var n=e[lt];return(n?lr(n):e)[t]}function Sy(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function Xf(e){e.P||(e.P=!0,e.l&&Xf(e.l))}function Yf(e){e.o||(e.o=zf(e.t))}function Zf(e,t,n){var r=Vf(t)?en("MapSet").N(t,n):Bf(t)?en("MapSet").T(t,n):e.g?function(o,i){var a=Array.isArray(o),s={i:a?1:0,A:i?i.A:gy(),P:!1,I:!1,D:{},l:i,t:o,k:null,o:null,j:null,C:!1},u=s,l=Xs;a&&(u=[s],l=Ys);var c=Proxy.revocable(u,l),v=c.revoke,d=c.proxy;return s.k=d,s.j=v,d}(t,n):en("ES5").J(t,n);return(n?n.A:gy()).p.push(r),r}function Lk(e){return to(e)||Lt(22,e),function t(n){if(!ur(n))return n;var r,o=n[lt],i=no(n);if(o){if(!o.P&&(o.i<4||!en("ES5").K(o)))return o.t;o.I=!0,r=_y(n,i),o.I=!1}else r=_y(n,i);return Ai(r,function(a,s){o&&xk(o.t,a)===s||my(r,a,t(s))}),i===3?new Set(r):r}(e)}function _y(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return zf(e)}var by,Mi,Jf=typeof Symbol!="undefined"&&typeof Symbol("x")=="symbol",Nk=typeof Map!="undefined",Ak=typeof Set!="undefined",Ey=typeof Proxy!="undefined"&&Proxy.revocable!==void 0&&typeof Reflect!="undefined",Ry=Jf?Symbol.for("immer-nothing"):((by={})["immer-nothing"]=!0,by),Oy=Jf?Symbol.for("immer-draftable"):"__$immer_draftable",lt=Jf?Symbol.for("immer-state"):"__$immer_state",Mk=""+Object.prototype.constructor,ed=typeof Reflect!="undefined"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,Dk=Object.getOwnPropertyDescriptors||function(e){var t={};return ed(e).forEach(function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)}),t},Fk={},Xs={get:function(e,t){if(t===lt)return e;var n=lr(e);if(!jf(n,t))return function(o,i,a){var s,u=Sy(i,a);return u?"value"in u?u.value:(s=u.get)===null||s===void 0?void 0:s.call(o.k):void 0}(e,n,t);var r=n[t];return e.I||!ur(r)?r:r===Gf(e.t,t)?(Yf(e),e.o[t]=Zf(e.A.h,r,e)):r},has:function(e,t){return t in lr(e)},ownKeys:function(e){return Reflect.ownKeys(lr(e))},set:function(e,t,n){var r=Sy(lr(e),t);if(r==null?void 0:r.set)return r.set.call(e.k,n),!0;if(!e.P){var o=Gf(lr(e),t),i=o==null?void 0:o[lt];if(i&&i.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(kk(n,o)&&(n!==void 0||jf(e.t,t)))return!0;Yf(e),Xf(e)}return e.o[t]===n&&typeof n!="number"&&(n!==void 0||t in e.o)||(e.o[t]=n,e.D[t]=!0,!0)},deleteProperty:function(e,t){return Gf(e.t,t)!==void 0||t in e.t?(e.D[t]=!1,Yf(e),Xf(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=lr(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.i!==1||t!=="length",enumerable:r.enumerable,value:n[t]}},defineProperty:function(){Lt(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){Lt(12)}},Ys={};Ai(Xs,function(e,t){Ys[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),Ys.deleteProperty=function(e,t){return Xs.deleteProperty.call(this,e[0],t)},Ys.set=function(e,t,n){return Xs.set.call(this,e[0],t,n,e[0])};var Ik=function(){function e(n){var r=this;this.g=Ey,this.F=!0,this.produce=function(o,i,a){if(typeof o=="function"&&typeof i!="function"){var s=i;i=o;var u=r;return function(m){var y=this;m===void 0&&(m=s);for(var _=arguments.length,p=Array(_>1?_-1:0),f=1;f<_;f++)p[f-1]=arguments[f];return u.produce(m,function(h){var g;return(g=i).call.apply(g,[y,h].concat(p))})}}var l;if(typeof i!="function"&&Lt(6),a!==void 0&&typeof a!="function"&&Lt(7),ur(o)){var c=yy(r),v=Zf(r,o,void 0),d=!0;try{l=i(v),d=!1}finally{d?Qs(c):Qf(c)}return typeof Promise!="undefined"&&l instanceof Promise?l.then(function(m){return qf(c,a),Kf(m,c)},function(m){throw Qs(c),m}):(qf(c,a),Kf(l,c))}if(!o||typeof o!="object")return(l=i(o))===Ry?void 0:(l===void 0&&(l=o),r.F&&Wf(l,!0),l);Lt(21,o)},this.produceWithPatches=function(o,i){return typeof o=="function"?function(u){for(var l=arguments.length,c=Array(l>1?l-1:0),v=1;v=0;o--){var i=r[o];if(i.path.length===0&&i.op==="replace"){n=i.value;break}}var a=en("Patches").$;return to(n)?a(n,r):this.produce(n,function(s){return a(s,r.slice(o+1))})},e}(),ct=new Ik,pP=ct.produce;ct.produceWithPatches.bind(ct);var hP=ct.setAutoFreeze.bind(ct);ct.setUseProxies.bind(ct);ct.applyPatches.bind(ct);ct.createDraft.bind(ct);ct.finishDraft.bind(ct);var Zs="NOT_FOUND";function $k(e){var t;return{get:function(r){return t&&e(t.key,r)?t.value:Zs},put:function(r,o){t={key:r,value:o}},getEntries:function(){return t?[t]:[]},clear:function(){t=void 0}}}function Uk(e,t){var n=[];function r(s){var u=n.findIndex(function(c){return t(s,c.key)});if(u>-1){var l=n[u];return u>0&&(n.splice(u,1),n.unshift(l)),l.value}return Zs}function o(s,u){r(s)===Zs&&(n.unshift({key:s,value:u}),n.length>e&&n.pop())}function i(){return n}function a(){n=[]}return{get:r,put:o,getEntries:i,clear:a}}var jk=function(t,n){return t===n};function Vk(e){return function(n,r){if(n===null||r===null||n.length!==r.length)return!1;for(var o=n.length,i=0;i1?t-1:0),r=1;re.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}return n=e[Symbol.iterator](),n.next.bind(n)}function Yk(e,t){if(e!=null)if(Py(e))e(t);else try{e.current=t}catch{throw new Error('Cannot assign value "'+t+'" to ref "'+e+'"')}}function Ny(){for(var e=arguments.length,t=new Array(e),n=0;n=0)&&(n[o]=e[o]);return n}var tT=["as","style"],nT=$.exports.forwardRef(function(t,n){var r=t.as,o=r===void 0?"span":r,i=t.style,a=i===void 0?{}:i,s=eT(t,tT);return $.exports.createElement(o,Js({ref:n,style:Js({border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",whiteSpace:"nowrap",wordWrap:"normal"},a)},s))}),rT=["bottom","height","left","right","top","width"],oT=function(t,n){return t===void 0&&(t={}),n===void 0&&(n={}),rT.some(function(r){return t[r]!==n[r]})},An=new Map,Ay,iT=function e(){var t=[];An.forEach(function(n,r){var o=r.getBoundingClientRect();oT(o,n.rect)&&(n.rect=o,t.push(n))}),t.forEach(function(n){n.callbacks.forEach(function(r){return r(n.rect)})}),Ay=window.requestAnimationFrame(e)};function aT(e,t){return{observe:function(){var r=An.size===0;An.has(e)?An.get(e).callbacks.push(t):An.set(e,{rect:void 0,hasRectChanged:!1,callbacks:[t]}),r&&iT()},unobserve:function(){var r=An.get(e);if(r){var o=r.callbacks.indexOf(t);o>=0&&r.callbacks.splice(o,1),r.callbacks.length||An.delete(e),An.size||cancelAnimationFrame(Ay)}}}}function My(e,t,n){var r,o;if(Kk(t))r=t;else{var i;r=(i=t==null?void 0:t.observe)!=null?i:!0,o=t==null?void 0:t.onChange}Py(n)&&(o=n);var a=$.exports.useState(e.current),s=a[0],u=a[1],l=$.exports.useRef(!1),c=$.exports.useRef(!1),v=$.exports.useState(null),d=v[0],m=v[1],y=$.exports.useRef(o);return Di(function(){y.current=o,e.current!==s&&u(e.current)}),Di(function(){s&&!l.current&&(l.current=!0,m(s.getBoundingClientRect()))},[s]),Di(function(){if(!!r){var _=s;if(c.current||(c.current=!0,_=e.current),!!_){var p=aT(_,function(f){y.current==null||y.current(f),m(f)});return p.observe(),function(){p.unobserve()}}}},[r,s,e]),d}function Mn(){return Mn=Object.assign||function(e){for(var t=1;t=0)&&(n[o]=e[o]);return n}var sT=["children","label","ariaLabel","id","DEBUG_STYLE"],uT=["label","ariaLabel","isVisible","id"],lT=["ariaLabel","aria-label","as","id","isVisible","label","position","style","triggerRect"],cT=["type"],tu,cr,tn,Fi,nu,fr,fT=100,dT=500,ge;(function(e){e.Idle="IDLE",e.Focused="FOCUSED",e.Visible="VISIBLE",e.LeavingVisible="LEAVING_VISIBLE",e.Dismissed="DISMISSED"})(ge||(ge={}));var me;(function(e){e.Blur="BLUR",e.Focus="FOCUS",e.GlobalMouseMove="GLOBAL_MOUSE_MOVE",e.MouseDown="MOUSE_DOWN",e.MouseEnter="MOUSE_ENTER",e.MouseLeave="MOUSE_LEAVE",e.MouseMove="MOUSE_MOVE",e.Rest="REST",e.SelectWithKeyboard="SELECT_WITH_KEYBOARD",e.TimeComplete="TIME_COMPLETE"})(me||(me={}));var rd={initial:ge.Idle,states:(fr={},fr[ge.Idle]={enter:ad,on:(tu={},tu[me.MouseEnter]=ge.Focused,tu[me.Focus]=ge.Visible,tu)},fr[ge.Focused]={enter:vT,leave:mT,on:(cr={},cr[me.MouseMove]=ge.Focused,cr[me.MouseLeave]=ge.Idle,cr[me.MouseDown]=ge.Dismissed,cr[me.Blur]=ge.Idle,cr[me.Rest]=ge.Visible,cr)},fr[ge.Visible]={on:(tn={},tn[me.Focus]=ge.Focused,tn[me.MouseEnter]=ge.Focused,tn[me.MouseLeave]=ge.LeavingVisible,tn[me.Blur]=ge.LeavingVisible,tn[me.MouseDown]=ge.Dismissed,tn[me.SelectWithKeyboard]=ge.Dismissed,tn[me.GlobalMouseMove]=ge.LeavingVisible,tn)},fr[ge.LeavingVisible]={enter:gT,leave:function(){yT(),ad()},on:(Fi={},Fi[me.MouseEnter]=ge.Visible,Fi[me.Focus]=ge.Visible,Fi[me.TimeComplete]=ge.Idle,Fi)},fr[ge.Dismissed]={leave:function(){ad()},on:(nu={},nu[me.MouseLeave]=ge.Idle,nu[me.Blur]=ge.Idle,nu)},fr)},St={value:rd.initial,context:{id:null}},ru=[];function pT(e){return ru.push(e),function(){ru.splice(ru.indexOf(e),1)}}function hT(){ru.forEach(function(e){return e(St)})}var od;function vT(){window.clearTimeout(od),od=window.setTimeout(function(){Nt({type:me.Rest})},fT)}function mT(){window.clearTimeout(od)}var id;function gT(){window.clearTimeout(id),id=window.setTimeout(function(){return Nt({type:me.TimeComplete})},dT)}function yT(){window.clearTimeout(id)}function ad(){St.context.id=null}function wT(e){var t=e===void 0?{}:e,n=t.id,r=t.onPointerEnter,o=t.onPointerMove,i=t.onPointerLeave,a=t.onPointerDown,s=t.onMouseEnter,u=t.onMouseMove,l=t.onMouseLeave,c=t.onMouseDown,v=t.onFocus,d=t.onBlur,m=t.onKeyDown,y=t.disabled,_=t.ref,p=t.DEBUG_STYLE,f=String(qk(n)),h=$.exports.useState(p?!0:Dy(f,!0)),g=h[0],w=h[1],x=$.exports.useRef(null),E=Ny(_,x),L=My(x,{observe:g});$.exports.useEffect(function(){return pT(function(){w(Dy(f))})},[f]),$.exports.useEffect(function(){var I=nd(x.current);function J(k){(k.key==="Escape"||k.key==="Esc")&&St.value===ge.Visible&&Nt({type:me.SelectWithKeyboard})}return I.addEventListener("keydown",J),function(){return I.removeEventListener("keydown",J)}},[]),CT({disabled:y,isVisible:g,ref:x});function V(I,J){return typeof window!="undefined"&&"PointerEvent"in window?I:Nn(I,J)}function F(I){return function(k){k.pointerType==="mouse"&&I(k)}}function G(){Nt({type:me.MouseEnter,id:f})}function Y(){Nt({type:me.MouseMove,id:f})}function ie(){Nt({type:me.MouseLeave})}function Z(){St.context.id===f&&Nt({type:me.MouseDown})}function S(){window.__REACH_DISABLE_TOOLTIPS||Nt({type:me.Focus,id:f})}function C(){St.context.id===f&&Nt({type:me.Blur})}function U(I){(I.key==="Enter"||I.key===" ")&&Nt({type:me.SelectWithKeyboard})}var b={"aria-describedby":g?Ty("tooltip",f):void 0,"data-state":g?"tooltip-visible":"tooltip-hidden","data-reach-tooltip-trigger":"",ref:E,onPointerEnter:Nn(r,F(G)),onPointerMove:Nn(o,F(Y)),onPointerLeave:Nn(i,F(ie)),onPointerDown:Nn(a,F(Z)),onMouseEnter:V(s,G),onMouseMove:V(u,Y),onMouseLeave:V(l,ie),onMouseDown:V(c,Z),onFocus:Nn(v,S),onBlur:Nn(d,C),onKeyDown:Nn(m,U)},P={id:f,triggerRect:L,isVisible:g};return[b,P,g]}var ST=$.exports.forwardRef(function(e,t){var n=e.children,r=e.label,o=e.ariaLabel,i=e.id,a=e.DEBUG_STYLE,s=eu(e,sT),u=$.exports.Children.only(n),l=wT({id:i,onPointerEnter:u.props.onPointerEnter,onPointerMove:u.props.onPointerMove,onPointerLeave:u.props.onPointerLeave,onPointerDown:u.props.onPointerDown,onMouseEnter:u.props.onMouseEnter,onMouseMove:u.props.onMouseMove,onMouseLeave:u.props.onMouseLeave,onMouseDown:u.props.onMouseDown,onFocus:u.props.onFocus,onBlur:u.props.onBlur,onKeyDown:u.props.onKeyDown,disabled:u.props.disabled,ref:u.ref,DEBUG_STYLE:a}),c=l[0],v=l[1];return $.exports.createElement($.exports.Fragment,null,$.exports.cloneElement(u,c),$.exports.createElement(_T,Mn({ref:t,label:r,"aria-label":o},v,s)))}),_T=$.exports.forwardRef(function(t,n){var r=t.label,o=t.ariaLabel,i=t.isVisible,a=t.id,s=eu(t,uT);return i?$.exports.createElement(Jk,null,$.exports.createElement(bT,Mn({ref:n,label:r,"aria-label":o,isVisible:i},s,{id:Ty("tooltip",String(a))}))):null}),bT=$.exports.forwardRef(function(t,n){var r=t.ariaLabel,o=t["aria-label"],i=t.as,a=i===void 0?"div":i,s=t.id,u=t.isVisible,l=t.label,c=t.position,v=c===void 0?OT:c,d=t.style,m=t.triggerRect,y=eu(t,lT),_=(o||r)!=null,p=$.exports.useRef(null),f=Ny(n,p),h=My(p,{observe:u});return $.exports.createElement($.exports.Fragment,null,$.exports.createElement(a,Mn({role:_?void 0:"tooltip"},y,{ref:f,"data-reach-tooltip":"",id:_?void 0:s,style:Mn({},d,ET(v,m,h))}),l),_&&$.exports.createElement(nT,{role:"tooltip",id:s},o||r))});function ET(e,t,n){var r=!n;return r?{visibility:"hidden"}:e(t,n)}var RT=8,OT=function(t,n,r){r===void 0&&(r=RT);var o=Qk(),i=o.width,a=o.height;if(!t||!n)return{};var s={top:t.top-n.height<0,right:ir&&(a=!0,TT.unstable_scheduleCallback(n))}function n(){a=!1;var s=r;if(o!==null)for(var u=o.previous;i>s&&u!==null;){var l=u.onDelete,c=u.previous;u.onDelete=null,u.previous=u.next=null,u===o?o=u=null:(o.previous=c,c.next=o,u=c),--i,l()}}var r=e,o=null,i=0,a=!1;return{add:function(s,u){return s={value:s,onDelete:u,next:null,previous:null},o===null?s.previous=s.next=s:(u=o.previous,u.next=s,s.previous=u,o.previous=s,s.next=o),o=s,i+=1,s},update:function(s,u){s.value=u},access:function(s){var u=s.next;if(u!==null){var l=o;if(o!==s){var c=s.previous;c.next=u,u.previous=c,u=l.previous,u.next=s,s.previous=u,l.previous=s,s.next=l,o=s}}return t(),s.value},setLimit:function(s){r=s,t()}}}(500),iu=new Map,$y=Fy.createContext(null);function Uy(e,t,n,r){var o=iu.get(e);o===void 0&&(o=new Map,iu.set(e,o));var i=o.get(r);if(i===void 0){t=t(n),t.then(function(s){if(a.status===0){var u=a;u.status=1,u.value=s}},function(s){if(a.status===0){var u=a;u.status=2,u.value=s}});var a={status:0,value:t};return e=sd.add(a,NT.bind(null,e,r)),o.set(r,e),a}return sd.access(i)}function NT(e,t){var n=iu.get(e);n!==void 0&&(n.delete(t),n.size===0&&iu.delete(e))}ou.unstable_createResource=function(e,t){var n=t!==void 0?t:LT,r={read:function(o){Iy($y);var i=n(o);switch(o=Uy(r,e,o,i),o.status){case 0:throw o.value;case 1:return o.value;case 2:throw o.value}},preload:function(o){Iy($y);var i=n(o);Uy(r,e,o,i)}};return r};ou.unstable_setGlobalCacheLimit=function(e){sd.setLimit(e)};kT.exports=ou;var jy={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Vy=B.createContext&&B.createContext(jy),Dn=globalThis&&globalThis.__assign||function(){return Dn=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=u)&&this.A(n),this.W&&this.setState({N:!1,j:!1}),this.l=Date.now()},t.prototype.p=function(n){n.preventDefault(),typeof n.button=="number"&&n.button!==0||(this.I(n.clientX),window.addEventListener("mousemove",this.v),window.addEventListener("mouseup",this.g))},t.prototype.v=function(n){n.preventDefault(),this.L(n.clientX)},t.prototype.g=function(n){this.U(n),window.removeEventListener("mousemove",this.v),window.removeEventListener("mouseup",this.g)},t.prototype.k=function(n){this.X=null,this.I(n.touches[0].clientX)},t.prototype.M=function(n){this.L(n.touches[0].clientX)},t.prototype.m=function(n){n.preventDefault(),this.U(n)},t.prototype.$=function(n){Date.now()-this.l>50&&(this.A(n),Date.now()-this.u>50&&this.W&&this.setState({j:!1}))},t.prototype.C=function(){this.u=Date.now()},t.prototype.D=function(){this.setState({j:!0})},t.prototype.O=function(){this.setState({j:!1})},t.prototype.S=function(n){this.H=n},t.prototype.T=function(n){n.preventDefault(),this.H.focus(),this.A(n),this.W&&this.setState({j:!1})},t.prototype.A=function(n){var r=this.props;(0,r.onChange)(!r.checked,n,r.id)},t.prototype.render=function(){var n=this.props,r=n.checked,o=n.disabled,i=n.className,a=n.offColor,s=n.onColor,u=n.offHandleColor,l=n.onHandleColor,c=n.checkedIcon,v=n.uncheckedIcon,d=n.checkedHandleIcon,m=n.uncheckedHandleIcon,y=n.boxShadow,_=n.activeBoxShadow,p=n.height,f=n.width,h=n.borderRadius,g=function(C,U){var b={};for(var P in C)Object.prototype.hasOwnProperty.call(C,P)&&U.indexOf(P)===-1&&(b[P]=C[P]);return b}(n,["checked","disabled","className","offColor","onColor","offHandleColor","onHandleColor","checkedIcon","uncheckedIcon","checkedHandleIcon","uncheckedHandleIcon","boxShadow","activeBoxShadow","height","width","borderRadius","handleDiameter"]),w=this.state,x=w.h,E=w.N,L=w.j,V={position:"relative",display:"inline-block",textAlign:"left",opacity:o?.5:1,direction:"ltr",borderRadius:p/2,WebkitTransition:"opacity 0.25s",MozTransition:"opacity 0.25s",transition:"opacity 0.25s",touchAction:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",userSelect:"none"},F={height:p,width:f,margin:Math.max(0,(this.t-p)/2),position:"relative",background:qy(x,this.i,this.o,a,s),borderRadius:typeof h=="number"?h:p/2,cursor:o?"default":"pointer",WebkitTransition:E?null:"background 0.25s",MozTransition:E?null:"background 0.25s",transition:E?null:"background 0.25s"},G={height:p,width:Math.min(1.5*p,f-(this.t+p)/2+1),position:"relative",opacity:(x-this.o)/(this.i-this.o),pointerEvents:"none",WebkitTransition:E?null:"opacity 0.25s",MozTransition:E?null:"opacity 0.25s",transition:E?null:"opacity 0.25s"},Y={height:p,width:Math.min(1.5*p,f-(this.t+p)/2+1),position:"absolute",opacity:1-(x-this.o)/(this.i-this.o),right:0,top:0,pointerEvents:"none",WebkitTransition:E?null:"opacity 0.25s",MozTransition:E?null:"opacity 0.25s",transition:E?null:"opacity 0.25s"},ie={height:this.t,width:this.t,background:qy(x,this.i,this.o,u,l),display:"inline-block",cursor:o?"default":"pointer",borderRadius:typeof h=="number"?h-1:"50%",position:"absolute",transform:"translateX("+x+"px)",top:Math.max(0,(p-this.t)/2),outline:0,boxShadow:L?_:y,border:0,WebkitTransition:E?null:"background-color 0.25s, transform 0.25s, box-shadow 0.15s",MozTransition:E?null:"background-color 0.25s, transform 0.25s, box-shadow 0.15s",transition:E?null:"background-color 0.25s, transform 0.25s, box-shadow 0.15s"},Z={height:this.t,width:this.t,opacity:Math.max(2*(1-(x-this.o)/(this.i-this.o)-.5),0),position:"absolute",left:0,top:0,pointerEvents:"none",WebkitTransition:E?null:"opacity 0.25s",MozTransition:E?null:"opacity 0.25s",transition:E?null:"opacity 0.25s"},S={height:this.t,width:this.t,opacity:Math.max(2*((x-this.o)/(this.i-this.o)-.5),0),position:"absolute",left:0,top:0,pointerEvents:"none",WebkitTransition:E?null:"opacity 0.25s",MozTransition:E?null:"opacity 0.25s",transition:E?null:"opacity 0.25s"};return ft.createElement("div",{className:i,style:V},ft.createElement("div",{className:"react-switch-bg",style:F,onClick:o?null:this.T,onMouseDown:function(C){return C.preventDefault()}},c&&ft.createElement("div",{style:G},c),v&&ft.createElement("div",{style:Y},v)),ft.createElement("div",{className:"react-switch-handle",style:ie,onClick:function(C){return C.preventDefault()},onMouseDown:o?null:this.p,onTouchStart:o?null:this.k,onTouchMove:o?null:this.M,onTouchEnd:o?null:this.m,onTouchCancel:o?null:this.O},m&&ft.createElement("div",{style:Z},m),d&&ft.createElement("div",{style:S},d)),ft.createElement("input",Wy({},{type:"checkbox",role:"switch","aria-checked":r,checked:r,disabled:o,style:{border:0,clip:"rect(0 0 0 0)",height:1,margin:-1,overflow:"hidden",padding:0,position:"absolute",width:1}},g,{ref:this.S,onFocus:this.D,onBlur:this.O,onKeyUp:this.C,onChange:this.$})))},t}(ft.Component);Qy.defaultProps={disabled:!1,offColor:"#888",onColor:"#080",offHandleColor:"#fff",onHandleColor:"#fff",uncheckedIcon:DT,checkedIcon:FT,boxShadow:null,activeBoxShadow:"0 0 2px 3px #3bf",height:28,width:56},ud.default=Qy;zy.exports=ud;var RP=zy.exports;export{qi as A,c1 as B,tP as C,sP as D,nP as E,yP as F,oP as G,KT as H,fP as I,aP as J,cP as K,GT as L,BT as M,eP as N,lP as O,uP as P,Q_ as Q,B as R,RP as S,gP as T,Am as U,HT as V,dP as Z,jT as a,G0 as b,zT as c,vP as d,JT as e,pP as f,mP as g,rP as h,$T as i,UT as j,VT as k,kT as l,SP as m,bP as n,wP as o,EP as p,_P as q,$ as r,hP as s,ws as t,qT as u,iP as v,ZT as w,WT as x,QT as y,Zv as z}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/assets/zh.247ad8fa.js b/luci-app-openclash/root/usr/share/openclash/yacd/assets/zh.247ad8fa.js deleted file mode 100644 index 89cd7a61..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/assets/zh.247ad8fa.js +++ /dev/null @@ -1 +0,0 @@ -const u={Overview:"\u6982\u89C8",Proxies:"\u4EE3\u7406",Rules:"\u89C4\u5219",Conns:"\u8FDE\u63A5",Config:"\u914D\u7F6E",Logs:"\u65E5\u5FD7",Upload:"\u4E0A\u4F20",Download:"\u4E0B\u8F7D","Upload Total":"\u4E0A\u4F20\u603B\u91CF","Download Total":"\u4E0B\u8F7D\u603B\u91CF","Active Connections":"\u6D3B\u52A8\u8FDE\u63A5","Pause Refresh":"\u6682\u505C\u5237\u65B0","Resume Refresh":"\u7EE7\u7EED\u5237\u65B0",Up:"\u4E0A\u4F20",Down:"\u4E0B\u8F7D","Test Latency":"\u5EF6\u8FDF\u6D4B\u901F",settings:"\u8BBE\u7F6E",sort_in_grp:"\u4EE3\u7406\u7EC4\u6761\u76EE\u6392\u5E8F",hide_unavail_proxies:"\u9690\u85CF\u4E0D\u53EF\u7528\u4EE3\u7406",auto_close_conns:"\u5207\u6362\u4EE3\u7406\u65F6\u81EA\u52A8\u65AD\u5F00\u65E7\u8FDE\u63A5",order_natural:"\u539F config \u6587\u4EF6\u4E2D\u7684\u6392\u5E8F",order_latency_asc:"\u6309\u5EF6\u8FDF\u4ECE\u5C0F\u5230\u5927",order_latency_desc:"\u6309\u5EF6\u8FDF\u4ECE\u5927\u5230\u5C0F",order_name_asc:"\u6309\u540D\u79F0\u5B57\u6BCD\u6392\u5E8F (A-Z)",order_name_desc:"\u6309\u540D\u79F0\u5B57\u6BCD\u6392\u5E8F (Z-A)",Connections:"\u8FDE\u63A5",Active:"\u6D3B\u52A8",Closed:"\u5DF2\u65AD\u5F00",theme:"\u4E3B\u9898",about:"\u5173\u4E8E",no_logs:"\u6682\u65E0\u65E5\u5FD7...",chart_style:"\u6D41\u91CF\u56FE\u6837\u5F0F",latency_test_url:"\u5EF6\u8FDF\u6D4B\u901F URL",lang:"\u8BED\u8A00",update_all_rule_provider:"\u66F4\u65B0\u6240\u6709 rule provider",update_all_proxy_provider:"\u66F4\u65B0\u6240\u6709 proxy providers"};export{u as data}; diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/index.html b/luci-app-openclash/root/usr/share/openclash/yacd/index.html deleted file mode 100644 index 8a62a9d6..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - yacd - - - - - -
- - - diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/manifest.webmanifest b/luci-app-openclash/root/usr/share/openclash/yacd/manifest.webmanifest deleted file mode 100644 index 0fda37af..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/manifest.webmanifest +++ /dev/null @@ -1 +0,0 @@ -{"name":"yacd","short_name":"yacd","start_url":"./","display":"standalone","background_color":"#ffffff","lang":"en","scope":"./"} diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/registerSW.js b/luci-app-openclash/root/usr/share/openclash/yacd/registerSW.js deleted file mode 100644 index 179c13c0..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/registerSW.js +++ /dev/null @@ -1 +0,0 @@ -if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})} \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/sw.js b/luci-app-openclash/root/usr/share/openclash/yacd/sw.js deleted file mode 100644 index 49719110..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yacd/sw.js +++ /dev/null @@ -1,2 +0,0 @@ -var X=Object.defineProperty,Y=Object.defineProperties;var Z=Object.getOwnPropertyDescriptors;var A=Object.getOwnPropertySymbols;var ee=Object.prototype.hasOwnProperty,te=Object.prototype.propertyIsEnumerable;var v=(s,e,t)=>e in s?X(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,O=(s,e)=>{for(var t in e||(e={}))ee.call(e,t)&&v(s,t,e[t]);if(A)for(var t of A(e))te.call(e,t)&&v(s,t,e[t]);return s},S=(s,e)=>Y(s,Z(e));try{self["workbox:core:6.2.4"]&&_()}catch{}const se=(s,...e)=>{let t=s;return e.length>0&&(t+=` :: ${JSON.stringify(e)}`),t},ne=se;class l extends Error{constructor(e,t){const n=ne(e,t);super(n);this.name=e,this.details=t}}const W=new Set;function ae(s){W.add(s)}const d={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:typeof registration!="undefined"?registration.scope:""},E=s=>[d.prefix,s,d.suffix].filter(e=>e&&e.length>0).join("-"),re=s=>{for(const e of Object.keys(d))s(e)},b={updateDetails:s=>{re(e=>{typeof s[e]=="string"&&(d[e]=s[e])})},getGoogleAnalyticsName:s=>s||E(d.googleAnalytics),getPrecacheName:s=>s||E(d.precache),getPrefix:()=>d.prefix,getRuntimeName:s=>s||E(d.runtime),getSuffix:()=>d.suffix};function B(s,e){const t=new URL(s);for(const n of e)t.searchParams.delete(n);return t.href}async function ie(s,e,t,n){const a=B(e.url,t);if(e.url===a)return s.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),i=await s.keys(e,r);for(const c of i){const o=B(c.url,t);if(a===o)return s.match(c,n)}}let m;function ce(){if(m===void 0){const s=new Response("");if("body"in s)try{new Response(s.body),m=!0}catch{m=!1}m=!1}return m}function q(s){s.then(()=>{})}class oe{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}async function he(){for(const s of W)await s()}const le=s=>new URL(String(s),location.href).href.replace(new RegExp(`^${location.origin}`),"");function ue(s){return new Promise(e=>setTimeout(e,s))}function j(s,e){const t=e();return s.waitUntil(t),t}async function de(s,e){let t=null;if(s.url&&(t=new URL(s.url).origin),t!==self.location.origin)throw new l("cross-origin-copy-response",{origin:t});const n=s.clone(),a={headers:new Headers(n.headers),status:n.status,statusText:n.statusText},r=e?e(a):a,i=ce()?n.body:await n.blob();return new Response(i,r)}function fe(){self.addEventListener("activate",()=>self.clients.claim())}const pe=(s,e)=>e.some(t=>s instanceof t);let F,H;function ge(){return F||(F=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function me(){return H||(H=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const V=new WeakMap,D=new WeakMap,$=new WeakMap,L=new WeakMap,U=new WeakMap;function ye(s){const e=new Promise((t,n)=>{const a=()=>{s.removeEventListener("success",r),s.removeEventListener("error",i)},r=()=>{t(f(s.result)),a()},i=()=>{n(s.error),a()};s.addEventListener("success",r),s.addEventListener("error",i)});return e.then(t=>{t instanceof IDBCursor&&V.set(t,s)}).catch(()=>{}),U.set(e,s),e}function we(s){if(D.has(s))return;const e=new Promise((t,n)=>{const a=()=>{s.removeEventListener("complete",r),s.removeEventListener("error",i),s.removeEventListener("abort",i)},r=()=>{t(),a()},i=()=>{n(s.error||new DOMException("AbortError","AbortError")),a()};s.addEventListener("complete",r),s.addEventListener("error",i),s.addEventListener("abort",i)});D.set(s,e)}let T={get(s,e,t){if(s instanceof IDBTransaction){if(e==="done")return D.get(s);if(e==="objectStoreNames")return s.objectStoreNames||$.get(s);if(e==="store")return t.objectStoreNames[1]?void 0:t.objectStore(t.objectStoreNames[0])}return f(s[e])},set(s,e,t){return s[e]=t,!0},has(s,e){return s instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in s}};function _e(s){T=s(T)}function Re(s){return s===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...t){const n=s.call(P(this),e,...t);return $.set(n,e.sort?e.sort():[e]),f(n)}:me().includes(s)?function(...e){return s.apply(P(this),e),f(V.get(this))}:function(...e){return f(s.apply(P(this),e))}}function be(s){return typeof s=="function"?Re(s):(s instanceof IDBTransaction&&we(s),pe(s,ge())?new Proxy(s,T):s)}function f(s){if(s instanceof IDBRequest)return ye(s);if(L.has(s))return L.get(s);const e=be(s);return e!==s&&(L.set(s,e),U.set(e,s)),e}const P=s=>U.get(s);function Ce(s,e,{blocked:t,upgrade:n,blocking:a,terminated:r}={}){const i=indexedDB.open(s,e),c=f(i);return n&&i.addEventListener("upgradeneeded",o=>{n(f(i.result),o.oldVersion,o.newVersion,f(i.transaction))}),t&&i.addEventListener("blocked",()=>t()),c.then(o=>{r&&o.addEventListener("close",()=>r()),a&&o.addEventListener("versionchange",()=>a())}).catch(()=>{}),c}function xe(s,{blocked:e}={}){const t=indexedDB.deleteDatabase(s);return e&&t.addEventListener("blocked",()=>e()),f(t).then(()=>{})}const Ee=["get","getKey","getAll","getAllKeys","count"],De=["put","add","delete","clear"],k=new Map;function G(s,e){if(!(s instanceof IDBDatabase&&!(e in s)&&typeof e=="string"))return;if(k.get(e))return k.get(e);const t=e.replace(/FromIndex$/,""),n=e!==t,a=De.includes(t);if(!(t in(n?IDBIndex:IDBObjectStore).prototype)||!(a||Ee.includes(t)))return;const r=async function(i,...c){const o=this.transaction(i,a?"readwrite":"readonly");let h=o.store;return n&&(h=h.index(c.shift())),(await Promise.all([h[t](...c),a&&o.done]))[0]};return k.set(e,r),r}_e(s=>S(O({},s),{get:(e,t,n)=>G(e,t)||s.get(e,t,n),has:(e,t)=>!!G(e,t)||s.has(e,t)}));try{self["workbox:expiration:6.2.4"]&&_()}catch{}const Le="workbox-expiration",y="cache-entries",Q=s=>{const e=new URL(s,location.href);return e.hash="",e.href};class Ue{constructor(e){this._db=null,this._cacheName=e}_upgradeDb(e){const t=e.createObjectStore(y,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1})}_upgradeDbAndDeleteOldDbs(e){this._upgradeDb(e),this._cacheName&&xe(this._cacheName)}async setTimestamp(e,t){e=Q(e);const n={url:e,timestamp:t,cacheName:this._cacheName,id:this._getId(e)},r=(await this.getDb()).transaction(y,"readwrite",{durability:"relaxed"});await r.store.put(n),await r.done}async getTimestamp(e){const n=await(await this.getDb()).get(y,this._getId(e));return n==null?void 0:n.timestamp}async expireEntries(e,t){const n=await this.getDb();let a=await n.transaction(y).store.index("timestamp").openCursor(null,"prev");const r=[];let i=0;for(;a;){const o=a.value;o.cacheName===this._cacheName&&(e&&o.timestamp=t?r.push(a.value):i++),a=await a.continue()}const c=[];for(const o of r)await n.delete(y,o.id),c.push(o.url);return c}_getId(e){return this._cacheName+"|"+Q(e)}async getDb(){return this._db||(this._db=await Ce(Le,1,{upgrade:this._upgradeDbAndDeleteOldDbs.bind(this)})),this._db}}class Te{constructor(e,t={}){this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._matchOptions=t.matchOptions,this._cacheName=e,this._timestampModel=new Ue(e)}async expireEntries(){if(this._isRunning){this._rerunRequested=!0;return}this._isRunning=!0;const e=this._maxAgeSeconds?Date.now()-this._maxAgeSeconds*1e3:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),n=await self.caches.open(this._cacheName);for(const a of t)await n.delete(a,this._matchOptions);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,q(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){const t=await this._timestampModel.getTimestamp(e),n=Date.now()-this._maxAgeSeconds*1e3;return t!==void 0?t{if(!r)return null;const i=this._isResponseDateFresh(r),c=this._getCacheExpiration(a);q(c.expireEntries());const o=c.updateTimestamp(n.url);if(t)try{t.waitUntil(o)}catch{}return i?r:null},this.cacheDidUpdate=async({cacheName:t,request:n})=>{const a=this._getCacheExpiration(t);await a.updateTimestamp(n.url),await a.expireEntries()},this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&ae(()=>this.deleteCacheAndMetadata())}_getCacheExpiration(e){if(e===b.getRuntimeName())throw new l("expire-custom-caches-only");let t=this._cacheExpirations.get(e);return t||(t=new Te(e,this._config),this._cacheExpirations.set(e,t)),t}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0;const t=this._getDateHeaderTimestamp(e);if(t===null)return!0;const n=Date.now();return t>=n-this._maxAgeSeconds*1e3}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),a=new Date(t).getTime();return isNaN(a)?null:a}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}try{self["workbox:precaching:6.2.4"]&&_()}catch{}const ke="__WB_REVISION__";function Ie(s){if(!s)throw new l("add-to-cache-list-unexpected-type",{entry:s});if(typeof s=="string"){const r=new URL(s,location.href);return{cacheKey:r.href,url:r.href}}const{revision:e,url:t}=s;if(!t)throw new l("add-to-cache-list-unexpected-type",{entry:s});if(!e){const r=new URL(t,location.href);return{cacheKey:r.href,url:r.href}}const n=new URL(t,location.href),a=new URL(t,location.href);return n.searchParams.set(ke,e),{cacheKey:n.href,url:a.href}}class Me{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type==="install"&&t&&t.originalRequest&&t.originalRequest instanceof Request){const a=t.originalRequest.url;n?this.notUpdatedURLs.push(a):this.updatedURLs.push(a)}return n}}}class Ne{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:t,params:n})=>{const a=(n==null?void 0:n.cacheKey)||this._precacheController.getCacheKeyForURL(t.url);return a?new Request(a,{headers:t.headers}):t},this._precacheController=e}}try{self["workbox:strategies:6.2.4"]&&_()}catch{}function C(s){return typeof s=="string"?new Request(s):s}class Ke{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new oe,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(const n of this._plugins)this._pluginStateMap.set(n,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){const{event:t}=this;let n=C(e);if(n.mode==="navigate"&&t instanceof FetchEvent&&t.preloadResponse){const i=await t.preloadResponse;if(i)return i}const a=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const i of this.iterateCallbacks("requestWillFetch"))n=await i({request:n.clone(),event:t})}catch(i){if(i instanceof Error)throw new l("plugin-error-request-will-fetch",{thrownErrorMessage:i.message})}const r=n.clone();try{let i;i=await fetch(n,n.mode==="navigate"?void 0:this._strategy.fetchOptions);for(const c of this.iterateCallbacks("fetchDidSucceed"))i=await c({event:t,request:r,response:i});return i}catch(i){throw a&&await this.runCallbacks("fetchDidFail",{error:i,event:t,originalRequest:a.clone(),request:r.clone()}),i}}async fetchAndCachePut(e){const t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){const t=C(e);let n;const{cacheName:a,matchOptions:r}=this._strategy,i=await this.getCacheKey(t,"read"),c=Object.assign(Object.assign({},r),{cacheName:a});n=await caches.match(i,c);for(const o of this.iterateCallbacks("cachedResponseWillBeUsed"))n=await o({cacheName:a,matchOptions:r,cachedResponse:n,request:i,event:this.event})||void 0;return n}async cachePut(e,t){const n=C(e);await ue(0);const a=await this.getCacheKey(n,"write");if(!t)throw new l("cache-put-with-no-response",{url:le(a.url)});const r=await this._ensureResponseSafeToCache(t);if(!r)return!1;const{cacheName:i,matchOptions:c}=this._strategy,o=await self.caches.open(i),h=this.hasCallback("cacheDidUpdate"),g=h?await ie(o,a.clone(),["__WB_REVISION__"],c):null;try{await o.put(a,h?r.clone():r)}catch(u){if(u instanceof Error)throw u.name==="QuotaExceededError"&&await he(),u}for(const u of this.iterateCallbacks("cacheDidUpdate"))await u({cacheName:i,oldResponse:g,newResponse:r.clone(),request:a,event:this.event});return!0}async getCacheKey(e,t){if(!this._cacheKeys[t]){let n=e;for(const a of this.iterateCallbacks("cacheKeyWillBeUsed"))n=C(await a({mode:t,request:n,event:this.event,params:this.params}));this._cacheKeys[t]=n}return this._cacheKeys[t]}hasCallback(e){for(const t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(const n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(const t of this._strategy.plugins)if(typeof t[e]=="function"){const n=this._pluginStateMap.get(t);yield r=>{const i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){let e;for(;e=this._extendLifetimePromises.shift();)await e}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(const a of this.iterateCallbacks("cacheWillUpdate"))if(t=await a({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}}class z{constructor(e={}){this.cacheName=b.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){const[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});const t=e.event,n=typeof e.request=="string"?new Request(e.request):e.request,a="params"in e?e.params:void 0,r=new Ke(this,{event:t,request:n,params:a}),i=this._getResponse(r,n,t),c=this._awaitComplete(i,r,n,t);return[i,c]}async _getResponse(e,t,n){await e.runCallbacks("handlerWillStart",{event:n,request:t});let a;try{if(a=await this._handle(t,e),!a||a.type==="error")throw new l("no-response",{url:t.url})}catch(r){if(r instanceof Error){for(const i of e.iterateCallbacks("handlerDidError"))if(a=await i({error:r,event:n,request:t}),a)break}if(!a)throw r}for(const r of e.iterateCallbacks("handlerWillRespond"))a=await r({event:n,request:t,response:a});return a}async _awaitComplete(e,t,n,a){let r,i;try{r=await e}catch{}try{await t.runCallbacks("handlerDidRespond",{event:a,request:n,response:r}),await t.doneWaiting()}catch(c){c instanceof Error&&(i=c)}if(await t.runCallbacks("handlerDidComplete",{event:a,request:n,response:r,error:i}),t.destroy(),i)throw i}}class p extends z{constructor(e={}){e.cacheName=b.getPrecacheName(e.cacheName);super(e);this._fallbackToNetwork=e.fallbackToNetwork!==!1,this.plugins.push(p.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){const n=await t.cacheMatch(e);return n||(t.event&&t.event.type==="install"?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let n;const a=t.params||{};if(this._fallbackToNetwork){const r=a.integrity,i=e.integrity,c=!i||i===r;n=await t.fetch(new Request(e,{integrity:i||r})),r&&c&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,n.clone()))}else throw new l("missing-precache-entry",{cacheName:this.cacheName,url:e.url});return n}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();const n=await t.fetch(e);if(!await t.cachePut(e,n.clone()))throw new l("bad-precaching-response",{url:e.url,status:n.status});return n}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(const[n,a]of this.plugins.entries())a!==p.copyRedirectedCacheableResponsesPlugin&&(a===p.defaultPrecacheCacheabilityPlugin&&(e=n),a.cacheWillUpdate&&t++);t===0?this.plugins.push(p.defaultPrecacheCacheabilityPlugin):t>1&&e!==null&&this.plugins.splice(e,1)}}p.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:s}){return!s||s.status>=400?null:s}};p.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:s}){return s.redirected?await de(s):s}};class Ae{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new p({cacheName:b.getPrecacheName(e),plugins:[...t,new Ne({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){const t=[];for(const n of e){typeof n=="string"?t.push(n):n&&n.revision===void 0&&t.push(n.url);const{cacheKey:a,url:r}=Ie(n),i=typeof n!="string"&&n.revision?"reload":"default";if(this._urlsToCacheKeys.has(r)&&this._urlsToCacheKeys.get(r)!==a)throw new l("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(r),secondEntry:a});if(typeof n!="string"&&n.integrity){if(this._cacheKeysToIntegrities.has(a)&&this._cacheKeysToIntegrities.get(a)!==n.integrity)throw new l("add-to-cache-list-conflicting-integrities",{url:r});this._cacheKeysToIntegrities.set(a,n.integrity)}if(this._urlsToCacheKeys.set(r,a),this._urlsToCacheModes.set(r,i),t.length>0){const c=`Workbox is precaching URLs without revision info: ${t.join(", ")} -This is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(c)}}}install(e){return j(e,async()=>{const t=new Me;this.strategy.plugins.push(t);for(const[r,i]of this._urlsToCacheKeys){const c=this._cacheKeysToIntegrities.get(i),o=this._urlsToCacheModes.get(r),h=new Request(r,{integrity:c,cache:o,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:i},request:h,event:e}))}const{updatedURLs:n,notUpdatedURLs:a}=t;return{updatedURLs:n,notUpdatedURLs:a}})}activate(e){return j(e,async()=>{const t=await self.caches.open(this.strategy.cacheName),n=await t.keys(),a=new Set(this._urlsToCacheKeys.values()),r=[];for(const i of n)a.has(i.url)||(await t.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){const t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){const t=this.getCacheKeyForURL(e);if(!t)throw new l("non-precached-url",{url:e});return n=>(n.request=new Request(e),n.params=Object.assign({cacheKey:t},n.params),this.strategy.handle(n))}}let I;const M=()=>(I||(I=new Ae),I);try{self["workbox:routing:6.2.4"]&&_()}catch{}const J="GET",x=s=>s&&typeof s=="object"?s:{handle:s};class w{constructor(e,t,n=J){this.handler=x(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=x(e)}}class ve extends w{constructor(e,t,n){const a=({url:r})=>{const i=e.exec(r.href);if(!!i&&!(r.origin!==location.origin&&i.index!==0))return i.slice(1)};super(a,t,n)}}class Oe{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{const{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&e.data.type==="CACHE_URLS"){const{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(a=>{typeof a=="string"&&(a=[a]);const r=new Request(...a);return this.handleRequest({request:r,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){const n=new URL(e.url,location.href);if(!n.protocol.startsWith("http"))return;const a=n.origin===location.origin,{params:r,route:i}=this.findMatchingRoute({event:t,request:e,sameOrigin:a,url:n});let c=i&&i.handler;const o=e.method;if(!c&&this._defaultHandlerMap.has(o)&&(c=this._defaultHandlerMap.get(o)),!c)return;let h;try{h=c.handle({url:n,request:e,event:t,params:r})}catch(u){h=Promise.reject(u)}const g=i&&i.catchHandler;return h instanceof Promise&&(this._catchHandler||g)&&(h=h.catch(async u=>{if(g)try{return await g.handle({url:n,request:e,event:t,params:r})}catch(K){K instanceof Error&&(u=K)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw u})),h}findMatchingRoute({url:e,sameOrigin:t,request:n,event:a}){const r=this._routes.get(n.method)||[];for(const i of r){let c;const o=i.match({url:e,sameOrigin:t,request:n,event:a});if(o)return c=o,(Array.isArray(c)&&c.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o=="boolean")&&(c=void 0),{route:i,params:c}}return{}}setDefaultHandler(e,t=J){this._defaultHandlerMap.set(t,x(e))}setCatchHandler(e){this._catchHandler=x(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new l("unregister-route-but-not-found-with-method",{method:e.method});const t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new l("unregister-route-route-not-registered")}}let R;const Se=()=>(R||(R=new Oe,R.addFetchListener(),R.addCacheListener()),R);function N(s,e,t){let n;if(typeof s=="string"){const r=new URL(s,location.href),i=({url:c})=>c.href===r.href;n=new w(i,e,t)}else if(s instanceof RegExp)n=new ve(s,e,t);else if(typeof s=="function")n=new w(s,e,t);else if(s instanceof w)n=s;else throw new l("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});return Se().registerRoute(n),n}function We(s,e=[]){for(const t of[...s.searchParams.keys()])e.some(n=>n.test(t))&&s.searchParams.delete(t);return s}function*Be(s,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:t="index.html",cleanURLs:n=!0,urlManipulation:a}={}){const r=new URL(s,location.href);r.hash="",yield r.href;const i=We(r,e);if(yield i.href,t&&i.pathname.endsWith("/")){const c=new URL(i.href);c.pathname+=t,yield c.href}if(n){const c=new URL(i.href);c.pathname+=".html",yield c.href}if(a){const c=a({url:r});for(const o of c)yield o.href}}class qe extends w{constructor(e,t){const n=({request:a})=>{const r=e.getURLsToCacheKeys();for(const i of Be(a.url,t)){const c=r.get(i);if(c){const o=e.getIntegrityForCacheKey(c);return{cacheKey:c,integrity:o}}}};super(n,e.strategy)}}function je(s){const e=M(),t=new qe(e,s);N(t)}function Fe(s){return M().createHandlerBoundToURL(s)}function He(s){M().precache(s)}function Ve(s,e){He(s),je(e)}const $e={cacheWillUpdate:async({response:s})=>s.status===200||s.status===0?s:null};class Ge extends z{constructor(e={}){super(e);this.plugins.some(t=>"cacheWillUpdate"in t)||this.plugins.unshift($e)}async _handle(e,t){const n=t.fetchAndCachePut(e).catch(()=>{});let a=await t.cacheMatch(e),r;if(!a)try{a=await n}catch(i){i instanceof Error&&(r=i)}if(!a)throw new l("no-response",{url:e.url,error:r});return a}}fe();Ve([{"revision":"d0d35ccda6954f7b562aedff19ceac1f","url":"assets/Chart.min.44f6c6c6.js"},{"revision":"560b4b3731eac27ed8464ae63736a403","url":"assets/Config.029b666f.js"},{"revision":"688780183f6e8bba011aaa17b21edc81","url":"assets/Config.af7c0f33.css"},{"revision":"3b1948f2abeb8e054b0502b8375cf8ed","url":"assets/Connections.52bc9670.js"},{"revision":"21300a3c2b164f3083d9f1c87fd10f5a","url":"assets/Connections.9de0e2a6.css"},{"revision":"c992868d4a1226459572050c9834d4d6","url":"assets/debounce.76599460.js"},{"revision":"fee69678629e061e2c62d6e75e96a9ca","url":"assets/en.f1dd5536.js"},{"revision":"ae26b63d74b240862bca083c250333ac","url":"assets/Fab.200e0680.css"},{"revision":"6a882d10b99ba90325fcaaa56d1903b0","url":"assets/Fab.4dc9cb99.js"},{"revision":"c3b24e08c08c2c68aadf5346bde96a9e","url":"assets/index.9233837d.js"},{"revision":"38d3c16250f5c63b92343b8548b24bba","url":"assets/index.a628dc5e.css"},{"revision":"2bc0f8901f1d81485ab1cd648c03644f","url":"assets/index.ee5bc09a.js"},{"revision":"880c3f58d2b32c1df6344dce31e78751","url":"assets/index.esm.edbe839b.js"},{"revision":"2e1d26d385287c98add4a989bfee2308","url":"assets/index.fe1062b5.js"},{"revision":"c29fa98e7381f1ce956e082670a7f67a","url":"assets/Logs.01e28256.js"},{"revision":"87082b6d912161e727e4b3b197cf78a1","url":"assets/logs.4dcb9935.js"},{"revision":"1c0b9d4cca07d4b04d27e2de6dc8bb12","url":"assets/Logs.8b54b7be.css"},{"revision":"219f852ca592ae57ab3baf5eed1a5863","url":"assets/Proxies.71af777a.js"},{"revision":"e3e0d66390968a0f5a7228f4fdb65baa","url":"assets/Proxies.831754de.css"},{"revision":"535bd4976fbd24c7e059039e5a3793da","url":"assets/Rules.a609ca62.css"},{"revision":"d7fb0fd07f69a1b9b8818702fb53e201","url":"assets/Rules.b2ac0faa.js"},{"revision":"712f0d85f551e8bdb85dfa225c0a3db6","url":"assets/Select.29a5a6ae.js"},{"revision":"88f80c124258f9d6bf0b3d5a2989647e","url":"assets/Select.9a98fc65.css"},{"revision":"59379024432ff9f99d4d6d440939cc5d","url":"assets/TextFitler.00e03ee5.css"},{"revision":"430fd348ed2f145711fa9be59ecb42b8","url":"assets/TextFitler.cc7f7fa3.js"},{"revision":"c54dde040e53af511564e4078a746188","url":"assets/useRemainingViewPortHeight.7baef998.js"},{"revision":"0d3db41061b1cdce75845a9be20bce8c","url":"assets/vendor.38e754a4.js"},{"revision":"59bfb31432b7fef20a252631767355f9","url":"assets/zh.247ad8fa.js"},{"revision":"ca824d1af4ca2a4dd4328e309db5ca1b","url":"index.html"},{"revision":"402b66900e731ca748771b6fc5e7a068","url":"registerSW.js"},{"revision":"c0f9cb6aaf647e778bdc01c59944755b","url":"manifest.webmanifest"}]);const Qe=new RegExp("/[^/?]+\\.[^/]+$");N(({request:s,url:e})=>!(s.mode!=="navigate"||e.pathname.startsWith("/_")||e.pathname.match(Qe)),Fe("index.html"));N(({url:s})=>s.origin===self.location.origin&&s.pathname.endsWith(".png"),new Ge({cacheName:"images",plugins:[new Pe({maxEntries:50})]}));self.addEventListener("message",s=>{s.data&&s.data.type==="SKIP_WAITING"&&self.skipWaiting()}); diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/yacd-128.png b/luci-app-openclash/root/usr/share/openclash/yacd/yacd-128.png deleted file mode 100644 index 4609a149..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/yacd-128.png and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/yacd-64.png b/luci-app-openclash/root/usr/share/openclash/yacd/yacd-64.png deleted file mode 100644 index bbbcf651..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/yacd-64.png and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yacd/yacd.ico b/luci-app-openclash/root/usr/share/openclash/yacd/yacd.ico deleted file mode 100644 index ec4e4708..00000000 Binary files a/luci-app-openclash/root/usr/share/openclash/yacd/yacd.ico and /dev/null differ diff --git a/luci-app-openclash/root/usr/share/openclash/yml_change.sh b/luci-app-openclash/root/usr/share/openclash/yml_change.sh deleted file mode 100644 index c76da9df..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yml_change.sh +++ /dev/null @@ -1,199 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/ruby.sh - -LOG_FILE="/tmp/openclash.log" -LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) -dns_advanced_setting=$(uci -q get openclash.config.dns_advanced_setting) - -if [ "${14}" != "1" ]; then - controller_address="0.0.0.0" - bind_address="*" -else - controller_address=${11} - bind_address=${11} -fi - -if [ -n "$(ruby_read "$7" "['tun']")" ]; then - if [ -n "$(ruby_read "$7" "['tun']['device-url']")" ]; then - if [ "${15}" -eq 1 ] || [ "${15}" -eq 3 ]; then - uci set openclash.config.config_reload=0 - fi - else - uci set openclash.config.config_reload=0 - fi -else - if [ -n "${15}" ]; then - uci set openclash.config.config_reload=0 - fi -fi - -if [ -z "${15}" ]; then - en_mode_tun=0 -else - en_mode_tun=${15} -fi - -if [ -z "${16}" ]; then - stack_type=system -else - stack_type=${16} -fi - -if [ "$(ruby_read "$7" "['external-controller']")" != "$controller_address:$5" ]; then - uci set openclash.config.config_reload=0 -fi - -if [ "$(ruby_read "$7" "['secret']")" != "$4" ]; then - uci set openclash.config.config_reload=0 -fi -uci commit openclash - -ruby -ryaml -E UTF-8 -e " -begin - Value = YAML.load_file('$7'); -rescue Exception => e - puts '${LOGTIME} Error: Load File Error,【' + e.message + '】' -end -begin - Value['redir-port']=$6; - Value['tproxy-port']=${20}; - Value['port']=$9; - Value['socks-port']=${10}; - Value['mixed-port']=${19}; - Value['mode']='${13}'; - Value['log-level']='${12}'; - Value['allow-lan']=true; - Value['external-controller']='$controller_address:$5'; - Value['secret']='$4'; - Value['bind-address']='$bind_address'; - Value['external-ui']='/usr/share/openclash/dashboard'; -if not Value.key?('dns') then - Value_1={'dns'=>{'enable'=>true}} - Value['dns']=Value_1['dns'] -else - Value['dns']['enable']=true -end; -if $8 == 1 then - Value['ipv6']=true -else - Value['ipv6']=false -end; -if ${21} == 1 then - Value['dns']['ipv6']=true -else - Value['dns']['ipv6']=false -end; -if ${24} != 1 then - Value['dns']['enhanced-mode']='$2'; -else - Value['dns']['enhanced-mode']='fake-ip'; -end; -if '$2' == 'fake-ip' or ${24} == 1 then - Value['dns']['fake-ip-range']='198.18.0.1/16' -else - Value['dns'].delete('fake-ip-range') -end; -if ${21} != 1 then - Value['dns']['listen']='127.0.0.1:${17}' -else - Value['dns']['listen']='0.0.0.0:${17}' -end; -Value_2={'tun'=>{'enable'=>true}}; -if $en_mode_tun != 0 then - Value['tun']=Value_2['tun'] - Value['tun']['stack']='$stack_type' - Value_2={'dns-hijack'=>['tcp://8.8.8.8:53','tcp://8.8.4.4:53']} - Value['tun'].merge!(Value_2) -else - if Value.key?('tun') then - Value.delete('tun') - end -end; -if not Value.key?('profile') then - Value_3={'profile'=>{'store-selected'=>true}} - Value['profile']=Value_3['profile'] -else - Value['profile']['store-selected']=true -end; -if ${22} != 1 then - Value['profile']['store-fake-ip']=false -else - Value['profile']['store-fake-ip']=true -end; -rescue Exception => e -puts '${LOGTIME} Error: Set General Error,【' + e.message + '】' -end -begin -#添加自定义Hosts设置 -if '$2' == 'redir-host' then - if File::exist?('/etc/openclash/custom/openclash_custom_hosts.list') then - Value_3 = YAML.load_file('/etc/openclash/custom/openclash_custom_hosts.list') - if Value_3 != false then - Value['dns']['use-hosts']=true - if Value.has_key?('hosts') and not Value['hosts'].to_a.empty? then - Value['hosts'].merge!(Value_3) - Value['hosts'].uniq - else - Value['hosts']=Value_3 - end - end - end -end; -rescue Exception => e -puts '${LOGTIME} Error: Set Hosts Rules Error,【' + e.message + '】' -end -begin -#fake-ip-filter -if '$2' == 'fake-ip' then - if File::exist?('/tmp/openclash_fake_filter.list') then - Value_4 = YAML.load_file('/tmp/openclash_fake_filter.list') - if Value_4 != false then - if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then - Value_5 = Value_4['fake-ip-filter'].reverse! - Value_5.each{|x| Value['dns']['fake-ip-filter'].insert(-1,x)} - else - Value['dns']['fake-ip-filter']=Value_4['fake-ip-filter'] - end - Value['dns']['fake-ip-filter']=Value['dns']['fake-ip-filter'].uniq - end - end - if ${23} == 1 then - if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then - Value['dns']['fake-ip-filter'].insert(-1,'+.nflxvideo.net') - Value['dns']['fake-ip-filter'].insert(-1,'+.media.dssott.com') - Value['dns']['fake-ip-filter']=Value['dns']['fake-ip-filter'].uniq - else - Value['dns'].merge!({'fake-ip-filter'=>['+.nflxvideo.net', '+.media.dssott.com']}) - end - end -elsif ${24} == 1 then - if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then - Value['dns']['fake-ip-filter'].insert(-1,'+.*') - Value['dns']['fake-ip-filter']=Value['dns']['fake-ip-filter'].uniq - else - Value['dns'].merge!({'fake-ip-filter'=>['+.*']}) - end -end; -rescue Exception => e -puts '${LOGTIME} Error: Set Fake-IP-Filter Error,【' + e.message + '】' -end -begin -#nameserver-policy -if '$dns_advanced_setting' == '1' then - if File::exist?('/etc/openclash/custom/openclash_custom_domain_dns_policy.list') then - Value_6 = YAML.load_file('/etc/openclash/custom/openclash_custom_domain_dns_policy.list') - if Value_6 != false then - if Value['dns'].has_key?('nameserver-policy') and not Value['dns']['nameserver-policy'].to_a.empty? then - Value['dns']['nameserver-policy'].merge!(Value_6) - Value['dns']['nameserver-policy'].uniq - else - Value['dns']['nameserver-policy']=Value_6 - end - end - end -end; -rescue Exception => e -puts '${LOGTIME} Error: Set Nameserver-Policy Error,【' + e.message + '】' -ensure -File.open('$7','w') {|f| YAML.dump(Value, f)} -end" 2>/dev/null >> $LOG_FILE diff --git a/luci-app-openclash/root/usr/share/openclash/yml_groups_get.sh b/luci-app-openclash/root/usr/share/openclash/yml_groups_get.sh deleted file mode 100644 index 61918575..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yml_groups_get.sh +++ /dev/null @@ -1,260 +0,0 @@ -#!/bin/bash -. /lib/functions.sh -. /usr/share/openclash/log.sh - -set_lock() { - exec 876>"/tmp/lock/openclash_groups_get.lock" 2>/dev/null - flock -x 876 2>/dev/null -} - -del_lock() { - flock -u 876 2>/dev/null - rm -rf "/tmp/lock/openclash_groups_get.lock" -} - -ruby_read_hash() -{ - RUBY_YAML_PARSE="Thread.new{Value = $1; puts Value$2}.join" - ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -ruby_read() -{ - RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); puts Value$2}.join" - ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -CFG_FILE="/etc/config/openclash" -other_group_file="/tmp/yaml_other_group.yaml" -servers_update=$(uci get openclash.config.servers_update 2>/dev/null) -servers_if_update=$(uci get openclash.config.servers_if_update 2>/dev/null) -CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null) -CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -UPDATE_CONFIG_FILE=$(uci get openclash.config.config_update_path 2>/dev/null) -UPDATE_CONFIG_NAME=$(echo "$UPDATE_CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) -LOG_FILE="/tmp/openclash.log" -set_lock - -if [ ! -z "$UPDATE_CONFIG_FILE" ]; then - CONFIG_FILE="$UPDATE_CONFIG_FILE" - CONFIG_NAME="$UPDATE_CONFIG_NAME" -fi - -if [ -z "$CONFIG_FILE" ]; then - CONFIG_FILE="/etc/openclash/config/$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')" - CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -fi - -if [ -z "$CONFIG_NAME" ]; then - CONFIG_FILE="/etc/openclash/config/config.yaml" - CONFIG_NAME="config.yaml" -fi - -BACKUP_FILE="/etc/openclash/backup/$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)" - -if [ ! -s "$CONFIG_FILE" ] && [ ! -s "$BACKUP_FILE" ]; then - del_lock - exit 0 -elif [ ! -s "$CONFIG_FILE" ] && [ -s "$BACKUP_FILE" ]; then - mv "$BACKUP_FILE" "$CONFIG_FILE" -fi - -LOG_OUT "Start Getting【$CONFIG_NAME】Groups Setting..." - -/usr/share/openclash/yml_groups_name_get.sh -if [ $? -ne 0 ]; then - LOG_OUT "Read Error, Config File【$CONFIG_NAME】Abnormal!" - uci commit openclash - sleep 5 - SLOG_CLEAN - del_lock - exit 0 -fi - -#判断当前配置文件是否有策略组信息 -cfg_group_name() -{ - local section="$1" - config_get "config" "$section" "config" "" - - if [ -z "$config" ]; then - return - fi - - [ "$config" = "$CONFIG_NAME" ] && { - config_group_exist=1 - } -} - -#删除不必要的配置 -cfg_delete() -{ - LOG_OUT "Deleting Old Configuration..." -#删除策略组 - group_num=$(grep "^config groups$" "$CFG_FILE" |wc -l) - for ((i=$group_num;i>=0;i--)) - do - if [ "$(uci get openclash.@groups["$i"].config 2>/dev/null)" = "$CONFIG_NAME" ] || [ "$(uci get openclash.@groups["$i"].config 2>/dev/null)" = "all" ]; then - uci delete openclash.@groups["$i"] 2>/dev/null - uci commit openclash - fi - done -#删除启用的节点 - server_num=$(grep "^config servers$" "$CFG_FILE" |wc -l) - for ((i=$server_num;i>=0;i--)) - do - if [ "$(uci get openclash.@servers["$i"].config 2>/dev/null)" = "$CONFIG_NAME" ] || [ "$(uci get openclash.@servers["$i"].config 2>/dev/null)" = "all" ]; then - if [ "$(uci get openclash.@servers["$i"].enabled 2>/dev/null)" = "1" ] && [ "$(uci get openclash.@servers["$i"].manual 2>/dev/null)" = "0" ]; then - uci delete openclash.@servers["$i"] 2>/dev/null - uci commit openclash - fi - fi - done -#删除启用的代理集 - provider_num=$(grep "^config proxy-provider$" "$CFG_FILE" 2>/dev/null |wc -l) - for ((i=$provider_num;i>=0;i--)) - do - if [ "$(uci get openclash.@proxy-provider["$i"].config 2>/dev/null)" = "$CONFIG_NAME" ] || [ "$(uci get openclash.@proxy-provider["$i"].config 2>/dev/null)" = "all" ]; then - if [ "$(uci get openclash.@proxy-provider["$i"].enabled)" = "1" ] && [ "$(uci get openclash.@proxy-provider["$i"].manual)" = "0" ]; then - uci delete openclash.@proxy-provider["$i"] 2>/dev/null - uci commit openclash - fi - fi - done -} - -config_load "openclash" -config_foreach cfg_group_name "groups" - -if [ "$servers_if_update" -eq 1 ] && [ "$servers_update" -eq 1 ] && [ "$config_group_exist" -eq 1 ]; then - /usr/share/openclash/yml_proxys_get.sh - del_lock - exit 0 -fi - -count=0 -match_group_file="/tmp/Proxy_Group" -#提取策略组部分 -group_hash=$(ruby_read "$CONFIG_FILE" ".select {|x| 'proxy-groups' == x}") -num=$(ruby_read_hash "$group_hash" "['proxy-groups'].count") - -if [ -z "$num" ]; then - LOG_OUT "Error: Unable To Parse Config File, Please Check And Try Again!" - sleep 3 - del_lock - exit 0 -fi - -cfg_delete - -while [ "$count" -lt "$num" ] -do - - #type - group_type=$(ruby_read_hash "$group_hash" "['proxy-groups'][$count]['type']") - #name - group_name=$(ruby_read_hash "$group_hash" "['proxy-groups'][$count]['name']") - - if [ -z "$group_type" ] || [ -z "$group_name" ]; then - let count++ - continue - fi - - LOG_OUT "Start Getting【$CONFIG_NAME - $group_type - $group_name】Group Setting..." - - name=openclash - uci_name_tmp=$(uci add $name groups) - uci_set="uci -q set $name.$uci_name_tmp." - uci_add="uci -q add_list $name.$uci_name_tmp." - - ${uci_set}config="$CONFIG_NAME" - ${uci_set}name="$group_name" - ${uci_set}old_name="$group_name" - ${uci_set}old_name_cfg="$group_name" - ${uci_set}type="$group_type" - - ruby -ryaml -E UTF-8 -e " - begin - Value = ${group_hash}; - Thread.new{ - #strategy - if Value['proxy-groups'][$count].key?('strategy') then - group_strategy = '${uci_set}strategy=' + Value['proxy-groups'][$count]['strategy'].to_s - system(group_strategy) - end - }.join; - - Thread.new{ - #disable-udp - if Value['proxy-groups'][$count].key?('disable-udp') then - group_disable_udp = '${uci_set}disable_udp=' + Value['proxy-groups'][$count]['disable-udp'].to_s - system(group_disable_udp) - end - }.join; - - Thread.new{ - #test_url - if Value['proxy-groups'][$count].key?('url') then - group_test_url = '${uci_set}test_url=\"' + Value['proxy-groups'][$count]['url'].to_s + '\"' - system(group_test_url) - end - }.join; - - Thread.new{ - #test_interval - if Value['proxy-groups'][$count].key?('interval') then - group_test_interval = '${uci_set}test_interval=' + Value['proxy-groups'][$count]['interval'].to_s - system(group_test_interval) - end - }.join; - - Thread.new{ - #test_tolerance - if Value['proxy-groups'][$count].key?('tolerance') then - group_test_tolerance = '${uci_set}tolerance=' + Value['proxy-groups'][$count]['tolerance'].to_s - system(group_test_tolerance) - end - }.join; - - Thread.new{ - #interface-name - if Value['proxy-groups'][$count].key?('interface-name') then - interface_name = '${uci_set}interface_name=' + Value['proxy-groups'][$count]['interface-name'].to_s - system(interface_name) - end - }.join; - - Thread.new{ - #routing-mark - if Value['proxy-groups'][$count].key?('routing-mark') then - routing_mark = '${uci_set}routing_mark=' + Value['proxy-groups'][$count]['routing-mark'].to_s - system(routing_mark) - end - }.join; - - Thread.new{ - #other_group - Value_1 = File.readlines('/tmp/Proxy_Group').map!{|x| x.strip}; - if Value['proxy-groups'][$count].key?('proxies') then - Value['proxy-groups'][$count]['proxies'].each{ - |x| - if Value_1.include?(x) then - uci = '${uci_add}other_group=\"' + x.to_s + '\"' - system(uci) - end - } - end - }.join; - rescue Exception => e - puts '${LOGTIME} Error: Resolve Proxy-group Error,【${CONFIG_NAME} - ${group_type} - ${group_name}: ' + e.message + '】' - end - " 2>/dev/null >> $LOG_FILE & - - let count++ -done - -wait -uci commit openclash -/usr/share/openclash/yml_proxys_get.sh -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/yml_groups_name_ch.sh b/luci-app-openclash/root/usr/share/openclash/yml_groups_name_ch.sh deleted file mode 100644 index 864f0bf9..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yml_groups_name_ch.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -. /lib/functions.sh - -set_lock() { - exec 882>"/tmp/lock/openclash_name_ch.lock" 2>/dev/null - flock -x 882 2>/dev/null -} - -del_lock() { - flock -u 882 2>/dev/null - rm -rf "/tmp/lock/openclash_name_ch.lock" -} - -cfg_groups_set() -{ - - CFG_FILE="/etc/config/openclash" - local section="$1" - config_get "name" "$section" "name" "" - config_get "old_name_cfg" "$section" "old_name_cfg" "" - config_get "old_name" "$section" "old_name" "" - - if [ -z "$name" ]; then - return - fi - - if [ -z "$old_name_cfg" ]; then - uci -q set openclash."$section".old_name_cfg="$name" - uci commit openclash - fi - - if [ -z "$old_name" ]; then - uci -q set openclash."$section".old_name="$name" - uci commit openclash - fi - - #名字变化时处理配置文件 - if [ "$name" != "$old_name_cfg" ] && [ ! -z "$old_name_cfg" ]; then - sed -i "s/old_name_cfg \'${old_name_cfg}\'/old_name_cfg \'${name}\'/g" $CFG_FILE 2>/dev/null - sed -i "s/groups \'${old_name_cfg}\'/groups \'${name}\'/g" $CFG_FILE 2>/dev/null - sed -i "s/other_group \'${old_name_cfg}\'/other_group \'${name}\'/g" $CFG_FILE 2>/dev/null - sed -i "s/new_servers_group \'${old_name_cfg}\'/new_servers_group \'${name}\'/g" $CFG_FILE 2>/dev/null - sed -i "s/relay_groups \'${old_name_cfg}\'/relay_groups \'${name}\'/g" $CFG_FILE 2>/dev/null - #第三方规则处理 - OTHER_RULE_NAMES=("GlobalTV" "AsianTV" "Proxy" "Youtube" "Bilibili" "Bahamut" "HBOGo" "HBOMax" "Pornhub" "Apple" "GoogleFCM" "Scholar" "Microsoft" "Netflix" "Disney" "Spotify" "Steam" "Speedtest" "Telegram" "PayPal" "Netease_Music" "AdBlock" "Domestic" "Others") - for i in ${OTHER_RULE_NAMES[@]}; do - sed -i "s/option ${i} \'${old_name_cfg}\'/option ${i} \'${name}\'/g" $CFG_FILE 2>/dev/null - done 2>/dev/null - config_load "openclash" - fi - -} - -set_lock -config_load "openclash" -config_foreach cfg_groups_set "groups" -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/yml_groups_name_get.sh b/luci-app-openclash/root/usr/share/openclash/yml_groups_name_get.sh deleted file mode 100644 index a1092bee..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yml_groups_name_get.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/ruby.sh - -CFG_FILE=$(uci get openclash.config.config_path 2>/dev/null) -UPDATE_CONFIG_FILE=$(uci get openclash.config.config_update_path 2>/dev/null) - -if [ ! -z "$UPDATE_CONFIG_FILE" ]; then - CFG_FILE="$UPDATE_CONFIG_FILE" -fi - -if [ -z "$CFG_FILE" ]; then - CFG_FILE="/etc/openclash/config/$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')" -fi - -if [ -f "$CFG_FILE" ]; then - rm -rf "/tmp/Proxy_Group" 2>/dev/null - ruby_read_hash_arr "$CFG_FILE" "['proxy-groups']" "['name']" >/tmp/Proxy_Group 2>&1 - - if [ -f "/tmp/Proxy_Group" ]; then - echo 'DIRECT' >>/tmp/Proxy_Group - echo 'REJECT' >>/tmp/Proxy_Group - else - return 1 - fi -else - return 1 -fi \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/yml_groups_set.sh b/luci-app-openclash/root/usr/share/openclash/yml_groups_set.sh deleted file mode 100644 index e81b7782..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yml_groups_set.sh +++ /dev/null @@ -1,308 +0,0 @@ -#!/bin/sh -. /lib/functions.sh -. /usr/share/openclash/log.sh - -set_lock() { - exec 887>"/tmp/lock/openclash_groups_set.lock" 2>/dev/null - flock -x 887 2>/dev/null -} - -del_lock() { - flock -u 887 2>/dev/null - rm -rf "/tmp/lock/openclash_groups_set.lock" -} - -set_lock -GROUP_FILE="/tmp/yaml_groups.yaml" -CFG_FILE="/etc/config/openclash" -servers_update=$(uci get openclash.config.servers_update 2>/dev/null) -CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null) -CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -UPDATE_CONFIG_FILE=$(uci get openclash.config.config_update_path 2>/dev/null) -UPDATE_CONFIG_NAME=$(echo "$UPDATE_CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) - -if [ ! -z "$UPDATE_CONFIG_FILE" ]; then - CONFIG_FILE="$UPDATE_CONFIG_FILE" - CONFIG_NAME="$UPDATE_CONFIG_NAME" -fi - -if [ -z "$CONFIG_FILE" ]; then - CONFIG_FILE="/etc/openclash/config/$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')" - CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -fi - -if [ -z "$CONFIG_NAME" ]; then - CONFIG_FILE="/etc/openclash/config/config.yaml" - CONFIG_NAME="config.yaml" -fi - -set_groups() -{ - if [ -z "$1" ]; then - return - fi - - if [ "$add_for_this" -eq 1 ]; then - return - fi - - if [ "$1" = "$3" ] || [ "$1" = "all" ]; then - set_group=1 - add_for_this=1 - echo " - \"${2}\"" >>$GROUP_FILE - fi - -} - -set_relay_groups() -{ - if [ -z "$1" ]; then - return - fi - - if [ "$add_for_this" -eq 1 ]; then - return - fi - - if [ ! -z "$(echo "$1" |grep "#relay#")" ]; then - server_relay_num=$(echo "$1" |awk -F '#relay#' '{print $2}') - server_group_name=$(echo "$1" |awk -F '#relay#' '{print $1}') - fi - - if [ ! -z "$server_relay_num" ]; then - if [ "$server_group_name" = "$3" ] || [ "$server_group_name" = "all" ]; then - set_group=1 - add_for_this=1 - echo "$server_relay_num # - \"${2}\"" >>/tmp/relay_server - fi - fi -} - -#加入节点 -yml_servers_add() -{ - - local section="$1" - add_for_this=0 - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - config_get "name" "$section" "name" "" - config_get "relay_groups" "$section" "relay_groups" "" - - if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ "$enabled" = "0" ]; then - return - else - if [ -z "$4" ] && [ "$3" = "relay" ] && [ ! -z "$relay_groups" ]; then - config_list_foreach "$section" "relay_groups" set_relay_groups "$name" "$2" - elif [ -z "$4" ]; then - config_list_foreach "$section" "groups" set_groups "$name" "$2" - fi - - if [ ! -z "$if_game_group" ] && [ -z "$(ruby -ryaml -E UTF-8 -e "Value = YAML.load_file('$CONFIG_FILE'); Value['proxies'].each{|x| if x['name'].eql?('$name') then puts x['name'] end}" 2>/dev/null)" ]; then - /usr/share/openclash/yml_proxys_set.sh "$name" "proxy" - fi - fi - -} - -#加入其它策略组 -set_other_groups() -{ - if [ -z "$1" ]; then - return - fi - set_group=1 - echo " - ${1}" >>$GROUP_FILE - -} - -#加入代理集 -set_proxy_provider() -{ - local section="$1" - add_for_this=0 - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - config_get "name" "$section" "name" "" - - if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ "$enabled" = "0" ]; then - return - else - if [ -z "$3" ]; then - config_list_foreach "$section" "groups" set_provider_groups "$name" "$2" - fi - - if [ ! -z "$if_game_group" ] && [ -z "$(ruby -ryaml -E UTF-8 -e "Value = YAML.load_file('$CONFIG_FILE'); Value['proxy-providers'].keys.each{|x| if x.eql?('$name') then puts x end}" 2>/dev/null)" ]; then - /usr/share/openclash/yml_proxys_set.sh "$name" "proxy-provider" - fi - fi -} - -set_provider_groups() -{ - if [ -z "$1" ]; then - return - fi - - if [ "$add_for_this" -eq 1 ]; then - return - fi - - if [ "$1" = "$3" ] || [ "$1" = "all" ]; then - set_proxy_provider=1 - add_for_this=1 - echo " - ${2}" >>$GROUP_FILE - fi - -} - -#创建策略组 -yml_groups_set() -{ - - local section="$1" - config_get "config" "$section" "config" "" - config_get "type" "$section" "type" "" - config_get "name" "$section" "name" "" - config_get "disable_udp" "$section" "disable_udp" "" - config_get "strategy" "$section" "strategy" "" - config_get "old_name" "$section" "old_name" "" - config_get "test_url" "$section" "test_url" "" - config_get "test_interval" "$section" "test_interval" "" - config_get "tolerance" "$section" "tolerance" "" - config_get "interface_name" "$section" "interface_name" "" - config_get "routing_mark" "$section" "routing_mark" "" - - if [ ! -z "$if_game_group" ] && [ "$if_game_group" != "$name" ]; then - return - fi - - if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$type" ]; then - return - fi - - if [ -z "$name" ]; then - return - fi - - if [ -z "$test_url" ] || [ -z "$test_interval" ] && [ "$type" != "select" ] && [ "$type" != "relay" ]; then - return - fi - - #游戏策略组存在时判断节点是否存在 - if [ -n "$if_game_group" ] && [ -n "$(grep "^$if_game_group$" /tmp/Proxy_Group)" ]; then - config_foreach yml_servers_add "servers" "$name" "$type" "check" #加入服务器节点 - config_foreach set_proxy_provider "proxy-provider" "$group_name" "check" #加入代理集 - return - fi - - LOG_OUT "Start Writing【$CONFIG_NAME - $type - $name】Group To Config File..." - - echo " - name: $name" >>$GROUP_FILE - echo " type: $type" >>$GROUP_FILE - if [ "$type" = "load-balance" ]; then - [ -n "$strategy" ] && { - echo " strategy: $strategy" >>$GROUP_FILE - } - fi - [ -n "$disable_udp" ] && { - echo " disable-udp: $disable_udp" >>$GROUP_FILE - } - group_name="$name" - echo " proxies: $group_name" >>$GROUP_FILE - - #名字变化时处理规则部分 - if [ "$name" != "$old_name" ] && [ ! -z "$old_name" ]; then - sed -i "s/,${old_name}/,${name}#d/g" "$CONFIG_FILE" 2>/dev/null - sed -i "s/: \"${old_name}\"/: \"${name}#d\"/g" "$CONFIG_FILE" 2>/dev/null - sed -i "s/return \"${old_name}\"$/return \"${name}#d\"/g" "$CONFIG_FILE" 2>/dev/null - sed -i "s/old_name \'${old_name}\'/old_name \'${name}\'/g" "$CFG_FILE" 2>/dev/null - config_load "openclash" - fi - - set_group=0 - set_proxy_provider=0 - - config_list_foreach "$section" "other_group" set_other_groups #加入其他策略组 - config_foreach yml_servers_add "servers" "$name" "$type" #加入服务器节点 - - if [ "$type" = "relay" ] && [ -s "/tmp/relay_server" ]; then - cat /tmp/relay_server |sort -k 1 |awk -F '#' '{print $2}' > /tmp/relay_server.list 2>/dev/null - sed -i "/^ \{0,\}proxies: ${group_name}/r/tmp/relay_server.list" "$GROUP_FILE" 2>/dev/null - rm -rf /tmp/relay_server 2>/dev/null - fi - - echo " use: $group_name" >>$GROUP_FILE - - config_foreach set_proxy_provider "proxy-provider" "$group_name" #加入代理集 - - if [ "$set_group" -eq 1 ]; then - sed -i "/^ \{0,\}proxies: ${group_name}/c\ proxies:" $GROUP_FILE - else - sed -i "/proxies: ${group_name}/d" $GROUP_FILE 2>/dev/null - fi - - if [ "$set_proxy_provider" -eq 1 ]; then - sed -i "/^ \{0,\}use: ${group_name}/c\ use:" $GROUP_FILE - else - sed -i "/use: ${group_name}/d" $GROUP_FILE 2>/dev/null - fi - - [ -n "$test_url" ] && { - echo " url: $test_url" >>$GROUP_FILE - } - [ -n "$test_interval" ] && { - echo " interval: \"$test_interval\"" >>$GROUP_FILE - } - [ -n "$tolerance" ] && { - echo " tolerance: \"$tolerance\"" >>$GROUP_FILE - } - [ -n "$interface_name" ] && { - echo " interface-name: \"$interface_name\"" >>$GROUP_FILE - } - [ -n "$routing_mark" ] && { - echo " routing-mark: \"$routing_mark\"" >>$GROUP_FILE - } -} - -create_config=$(uci get openclash.config.create_config 2>/dev/null) -servers_if_update=$(uci get openclash.config.servers_if_update 2>/dev/null) -if_game_group="$1" -if [ "$create_config" = "0" ] || [ "$servers_if_update" = "1" ] || [ ! -z "$if_game_group" ]; then - /usr/share/openclash/yml_groups_name_get.sh - if [ $? -ne 0 ]; then - LOG_OUT "Error: Config File【$CONFIG_NAME】Unable To Parse, Please Choose One-key Function To Create Config File..." - uci commit openclash - sleep 3 - SLOG_CLEAN - del_lock - exit 0 - else - if [ -z "$if_game_group" ]; then - echo "proxy-groups:" >$GROUP_FILE - else - rm -rf $GROUP_FILE - fi - config_load "openclash" - config_foreach yml_groups_set "groups" - sed -i "s/#d//g" "$CONFIG_FILE" 2>/dev/null - rm -rf /tmp/relay_server.list 2>/dev/null - fi -fi - -del_lock -if [ -z "$if_game_group" ]; then - /usr/share/openclash/yml_proxys_set.sh -fi diff --git a/luci-app-openclash/root/usr/share/openclash/yml_proxys_get.sh b/luci-app-openclash/root/usr/share/openclash/yml_proxys_get.sh deleted file mode 100644 index e59c7a3c..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yml_proxys_get.sh +++ /dev/null @@ -1,935 +0,0 @@ -#!/bin/bash -. /lib/functions.sh -. /usr/share/openclash/log.sh - -set_lock() { - exec 875>"/tmp/lock/openclash_proxies_get.lock" 2>/dev/null - flock -x 875 2>/dev/null -} - -del_lock() { - flock -u 875 2>/dev/null - rm -rf "/tmp/lock/openclash_proxies_get.lock" -} - -sub_info_get() -{ - local section="$1" name - config_get "name" "$section" "name" "" - - if [ -z "$name" ] || [ "$name" != "${CONFIG_NAME%%.*}" ]; then - return - else - sub_cfg=true - fi -} - -ruby_read_hash() -{ - RUBY_YAML_PARSE="Thread.new{Value = $1; puts Value$2}.join" - ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -ruby_read() -{ - RUBY_YAML_PARSE="Thread.new{Value = YAML.load_file('$1'); puts Value$2}.join" - ruby -ryaml -E UTF-8 -e "$RUBY_YAML_PARSE" 2>/dev/null -} - -CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null) -CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -UPDATE_CONFIG_FILE=$(uci get openclash.config.config_update_path 2>/dev/null) -UPDATE_CONFIG_NAME=$(echo "$UPDATE_CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) -LOG_FILE="/tmp/openclash.log" -set_lock - -if [ ! -z "$UPDATE_CONFIG_FILE" ]; then - CONFIG_FILE="$UPDATE_CONFIG_FILE" - CONFIG_NAME="$UPDATE_CONFIG_NAME" -fi - -if [ -z "$CONFIG_FILE" ]; then - CONFIG_FILE="/etc/openclash/config/$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')" - CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -fi - -if [ -z "$CONFIG_NAME" ]; then - CONFIG_FILE="/etc/openclash/config/config.yaml" - CONFIG_NAME="config.yaml" -fi - -BACKUP_FILE="/etc/openclash/backup/$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)" - -if [ ! -s "$CONFIG_FILE" ] && [ ! -s "$BACKUP_FILE" ]; then - del_lock - exit 0 -elif [ ! -s "$CONFIG_FILE" ] && [ -s "$BACKUP_FILE" ]; then - mv "$BACKUP_FILE" "$CONFIG_FILE" -fi - -#判断订阅配置 -config_load "openclash" -config_foreach sub_info_get "config_subscribe" - -#提取节点部分 -proxy_hash=$(ruby_read "$CONFIG_FILE" ".select {|x| 'proxies' == x or 'proxy-providers' == x}") - -CFG_FILE="/etc/config/openclash" -match_servers="/tmp/match_servers.list" -match_provider="/tmp/match_provider.list" -servers_update=$(uci get openclash.config.servers_update 2>/dev/null) -servers_if_update=$(uci get openclash.config.servers_if_update 2>/dev/null) - -#proxy -num=$(ruby_read_hash "$proxy_hash" "['proxies'].count") -count=0 - -#provider -provider_num=$(ruby_read_hash "$proxy_hash" "['proxy-providers'].count") -provider_count=0 - -#group -group_hash=$(ruby_read "$CONFIG_FILE" ".select {|x| 'proxy-groups' == x}") - -if [ -z "$group_hash" ]; then - LOG_OUT "Error: Unable To Parse Config File, Please Check And Try Again!" - sleep 3 - del_lock - exit 0 -fi - -if [ -z "$num" ] && [ -z "$provider_num" ]; then - LOG_OUT "Error: Unable To Parse Config File, Please Check And Try Again!" - sleep 3 - del_lock - exit 0 -fi - -cfg_new_servers_groups_check() -{ - - if [ -z "$1" ]; then - return - fi - - config_foreach cfg_group_name "groups" "$1" -} - -cfg_group_name() -{ - local section="$1" - config_get "name" "$section" "name" "" - config_get "config" "$section" "config" "" - - if [ -z "$config" ]; then - return - fi - - if [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$name" ]; then - return - fi - - if [ "$name" = "$2" ]; then - config_group_exist=$(( $config_group_exist + 1 )) - fi -} - -#判断当前配置文件策略组信息是否包含指定策略组 -config_group_exist=0 -if [ -z "$(uci -q get openclash.config.new_servers_group)" ]; then - config_group_exist=2 -elif [ "$(uci -q get openclash.config.new_servers_group)" = "all" ]; then - config_group_exist=1 -else - config_load "openclash" - config_list_foreach "config" "new_servers_group" cfg_new_servers_groups_check - - if [ "$config_group_exist" -ne 0 ]; then - config_group_exist=1 - else - config_group_exist=0 - fi -fi - -LOG_OUT "Start Getting【$CONFIG_NAME】Proxy-providers Setting..." - -yml_provider_name_get() -{ - local section="$1" - config_get "name" "$section" "name" "" - config_get "config" "$section" "config" "" - if [ -n "$name" ] && [ "$config" = "$CONFIG_NAME" ]; then - echo "$provider_nums.$name" >>"$match_provider" - fi - provider_nums=$(( $provider_nums + 1 )) -} - -cfg_new_provider_groups_get() -{ - if [ -z "$1" ]; then - return - fi - - ${uci_add}groups="${1}" -} - -echo "" >"$match_provider" -provider_nums=0 -config_load "openclash" -config_foreach yml_provider_name_get "proxy-provider" - -#获取代理集信息 -while [ "$provider_count" -lt "$provider_num" ] -do - #name - provider_name=$(ruby_read_hash "$proxy_hash" "['proxy-providers'].keys[$provider_count]") - #type - provider_type=$(ruby_read_hash "$proxy_hash" "['proxy-providers'].values[$provider_count]['type']") - - if [ -z "$provider_name" ] || [ -z "$provider_type" ]; then - let provider_count++ - continue - fi - - LOG_OUT "Start Getting【$CONFIG_NAME - $provider_name】Proxy-provider Setting..." - - #代理集存在时获取代理集编号 - provider_nums=$(grep -Fw "$provider_name" "$match_provider" 2>/dev/null|awk -F '.' '{print $1}') - if [ -n "$provider_nums" ]; then - sed -i "/^${provider_nums}\./c\#match#" "$match_provider" 2>/dev/null - uci_set="uci -q set openclash.@proxy-provider["$provider_nums"]." - uci_get="uci -q get openclash.@proxy-provider["$provider_nums"]." - uci_add="uci -q add_list openclash.@proxy-provider["$provider_nums"]." - uci_del="uci -q delete openclash.@proxy-provider["$provider_nums"]." - if [ -z "${uci_get}manual" ]; then - ${uci_set}manual="0" - fi - ${uci_set}type="$provider_type" - else - #代理集不存在时添加新代理集 - name=openclash - uci_name_tmp=$(uci add $name proxy-provider) - uci_set="uci -q set $name.$uci_name_tmp." - uci_add="uci -q add_list $name.$uci_name_tmp." - uci_del="uci -q delete $name.$uci_name_tmp." - - if [ "$config_group_exist" -eq 0 ] && [ "$servers_if_update" = "1" ] && [ "$servers_update" -eq 1 ]; then - ${uci_set}enabled="0" - else - ${uci_set}enabled="1" - fi - if [ "$servers_if_update" = "1" ] || "$sub_cfg"; then - ${uci_set}manual="0" - else - ${uci_set}manual="1" - fi - ${uci_set}config="$CONFIG_NAME" - ${uci_set}name="$provider_name" - ${uci_set}type="$provider_type" - fi - ruby -ryaml -E UTF-8 -e " - begin - Value = $proxy_hash; - Thread.new{ - #path - if Value['proxy-providers'].values[$provider_count].key?('path') then - if '$provider_type' == 'http' then - provider_path = '${uci_set}path=./proxy_provider/${provider_name}.yaml' - else - provider_path = '${uci_set}path=\"' + Value['proxy-providers'].values[$provider_count]['path'].to_s + '\"' - end - system(provider_path) - end - }.join; - - Thread.new{ - #gen_url - if Value['proxy-providers'].values[$provider_count].key?('url') then - provider_gen_url = '${uci_set}provider_url=\"' + Value['proxy-providers'].values[$provider_count]['url'].to_s + '\"' - system(provider_gen_url) - end - }.join; - - Thread.new{ - #gen_interval - if Value['proxy-providers'].values[$provider_count].key?('interval') then - provider_gen_interval = '${uci_set}provider_interval=' + Value['proxy-providers'].values[$provider_count]['interval'].to_s - system(provider_gen_interval) - end - }.join; - - Thread.new{ - #filter - if Value['proxy-providers'].values[$provider_count].key?('filter') then - provider_gen_filter = '${uci_set}provider_filter=' + Value['proxy-providers'].values[$provider_count]['filter'].to_s - system(provider_gen_filter) - end - }.join; - - Thread.new{ - #che_enable - if Value['proxy-providers'].values[$provider_count].key?('health-check') then - if Value['proxy-providers'].values[$provider_count]['health-check'].key?('enable') then - provider_che_enable = '${uci_set}health_check=' + Value['proxy-providers'].values[$provider_count]['health-check']['enable'].to_s - system(provider_che_enable) - end - end - }.join; - - Thread.new{ - #che_url - if Value['proxy-providers'].values[$provider_count].key?('health-check') then - if Value['proxy-providers'].values[$provider_count]['health-check'].key?('url') then - provider_che_url = '${uci_set}health_check_url=\"' + Value['proxy-providers'].values[$provider_count]['health-check']['url'].to_s + '\"' - system(provider_che_url) - end - end - }.join; - - Thread.new{ - #che_interval - if Value['proxy-providers'].values[$provider_count].key?('health-check') then - if Value['proxy-providers'].values[$provider_count]['health-check'].key?('interval') then - provider_che_interval = '${uci_set}health_check_interval=' + Value['proxy-providers'].values[$provider_count]['health-check']['interval'].to_s - system(provider_che_interval) - end - end - }.join; - - rescue Exception => e - puts '${LOGTIME} Error: Resolve Proxy-provider Error,【${CONFIG_NAME} - ${provider_name}: ' + e.message + '】' - end - " 2>/dev/null >> $LOG_FILE & - - #加入策略组 - if [ "$servers_if_update" = "1" ] && [ "$config_group_exist" = "1" ] && [ "$servers_update" = "1" ] && [ -z "$provider_nums" ]; then - #新代理集且设置默认策略组时加入指定策略组 - config_load "openclash" - config_list_foreach "config" "new_servers_group" cfg_new_provider_groups_get - elif [ "$servers_if_update" != "1" ]; then - ruby -ryaml -E UTF-8 -e " - Thread.new{ - begin - Value = ${group_hash}; - system '${uci_del}groups >/dev/null 2>&1'; - Value['proxy-groups'].each{ - |x| - if x.key?('use') then - x['use'].each{ - |y| - if y == '$provider_name' then - uci = '${uci_add}groups=\"' + x['name'] + '\"' - system(uci) - break - end - } - end - }; - rescue Exception => e - puts '${LOGTIME} Error: Resolve Proxy-provider Error,【${CONFIG_NAME} - ${provider_name}: ' + e.message + '】' - end - }.join; - " 2>/dev/null >> $LOG_FILE & - fi - let provider_count++ -done 2>/dev/null - - -#删除订阅中已不存在的代理集 -if [ "$servers_if_update" = "1" ]; then - LOG_OUT "Deleting【$CONFIG_NAME】Proxy-providers That no Longer Exists in Subscription" - sed -i '/#match#/d' "$match_provider" 2>/dev/null - cat $match_provider 2>/dev/null|awk -F '.' '{print $1}' |sort -rn |while read line - do - if [ -z "$line" ]; then - continue - fi - if [ "$(uci get openclash.@proxy-provider["$line"].manual)" = "0" ] && [ "$(uci get openclash.@proxy-provider["$line"].config)" = "$CONFIG_NAME" ]; then - uci delete openclash.@proxy-provider["$line"] 2>/dev/null - fi - done -fi - - -yml_servers_name_get() -{ - local section="$1" - config_get "name" "$section" "name" "" - config_get "config" "$section" "config" "" - if [ -n "$name" ] && [ "$config" = "$CONFIG_NAME" ]; then - echo "$server_num.$name" >>"$match_servers" - fi - server_num=$(( $server_num + 1 )) -} - -cfg_new_servers_groups_get() -{ - if [ -z "$1" ]; then - return - fi - - ${uci_add}groups="${1}" -} - -LOG_OUT "Start Getting【$CONFIG_NAME】Proxies Setting..." - -echo "" >"$match_servers" -server_num=0 -config_load "openclash" -config_foreach yml_servers_name_get "servers" - -while [ "$count" -lt "$num" ] -do - #name - server_name=$(ruby_read_hash "$proxy_hash" "['proxies'][$count]['name']") - - if [ -z "$server_name" ]; then - let count++ - continue - fi - - #type - server_type=$(ruby_read_hash "$proxy_hash" "['proxies'][$count]['type']") - - LOG_OUT "Start Getting【$CONFIG_NAME - $server_type - $server_name】Proxy Setting..." - -#节点存在时获取节点编号 - server_num=$(grep -Fw "$server_name" "$match_servers" 2>/dev/null|awk -F '.' '{print $1}') - if [ -n "$server_num" ]; then -#更新已有节点 - sed -i "/^${server_num}\./c\#match#" "$match_servers" 2>/dev/null - uci_set="uci -q set openclash.@servers["$server_num"]." - uci_get="uci -q get openclash.@servers["$server_num"]." - uci_add="uci -q add_list openclash.@servers["$server_num"]." - uci_del="uci -q delete openclash.@servers["$server_num"]." - - if [ -z "${uci_get}manual" ]; then - ${uci_set}manual="0" - fi - ${uci_set}type="$server_type" - else -#添加新节点 - name=openclash - uci_name_tmp=$(uci add $name servers) - uci_set="uci -q set $name.$uci_name_tmp." - uci_add="uci -q add_list $name.$uci_name_tmp." - uci_del="uci -q delete $name.$uci_name_tmp." - - if [ "$config_group_exist" -eq 0 ] && [ "$servers_if_update" = "1" ] && [ "$servers_update" -eq 1 ]; then - ${uci_set}enabled="0" - else - ${uci_set}enabled="1" - fi - if [ "$servers_if_update" = "1" ] || "$sub_cfg"; then - ${uci_set}manual="0" - else - ${uci_set}manual="1" - fi - ${uci_set}config="$CONFIG_NAME" - ${uci_set}name="$server_name" - ${uci_set}type="$server_type" - fi - - ruby -ryaml -E UTF-8 -e " - begin - Value = $proxy_hash; - Thread.new{ - #server - if Value['proxies'][$count].key?('server') then - server = '${uci_set}server=\"' + Value['proxies'][$count]['server'].to_s + '\"' - system(server) - end - }.join; - - Thread.new{ - #port - if Value['proxies'][$count].key?('port') then - port = '${uci_set}port=' + Value['proxies'][$count]['port'].to_s - system(port) - end - }.join; - - Thread.new{ - #udp - if Value['proxies'][$count].key?('udp') then - udp = '${uci_set}udp=' + Value['proxies'][$count]['udp'].to_s - system(udp) - end - }.join; - - Thread.new{ - #interface-name - if Value['proxies'][$count].key?('interface-name') then - interface_name = '${uci_set}interface_name=' + Value['proxies'][$count]['interface-name'].to_s - system(interface_name) - end - }.join; - - Thread.new{ - #routing-mark - if Value['proxies'][$count].key?('routing-mark') then - routing_mark = '${uci_set}routing_mark=' + Value['proxies'][$count]['routing-mark'].to_s - system(routing_mark) - end - }.join; - - if '$server_type' == 'ss' then - Thread.new{ - #cipher - if Value['proxies'][$count].key?('cipher') then - cipher = '${uci_set}cipher=' + Value['proxies'][$count]['cipher'].to_s - system(cipher) - end - }.join - - Thread.new{ - #plugin-opts - if Value['proxies'][$count].key?('plugin-opts') then - #mode - if Value['proxies'][$count]['plugin-opts'].key?('mode') then - mode = '${uci_set}obfs=' + Value['proxies'][$count]['plugin-opts']['mode'].to_s - system(mode) - else - mode = '${uci_set}obfs=none' - system(mode) - end - #host: - if Value['proxies'][$count]['plugin-opts'].key?('host') then - host = '${uci_set}host=\"' + Value['proxies'][$count]['plugin-opts']['host'].to_s + '\"' - system(host) - end - if Value['proxies'][$count]['plugin'].to_s == 'v2ray-plugin' then - #path - if Value['proxies'][$count]['plugin-opts'].key?('path') then - path = '${uci_set}path=\"' + Value['proxies'][$count]['plugin-opts']['path'].to_s + '\"' - system(path) - end - #mux - if Value['proxies'][$count]['plugin-opts'].key?('mux') then - mux = '${uci_set}mux=' + Value['proxies'][$count]['plugin-opts']['mux'].to_s - system(mux) - end - #headers - if Value['proxies'][$count]['plugin-opts'].key?('headers') then - if Value['proxies'][$count]['plugin-opts']['headers'].key?('custom') then - custom = '${uci_set}custom=\"' + Value['proxies'][$count]['plugin-opts']['headers']['custom'].to_s + '\"' - system(custom) - end - end - #tls - if Value['proxies'][$count]['plugin-opts'].key?('tls') then - tls = '${uci_set}tls=' + Value['proxies'][$count]['plugin-opts']['tls'].to_s - system(tls) - end - #skip-cert-verify - if Value['proxies'][$count]['plugin-opts'].key?('skip-cert-verify') then - skip_cert_verify = '${uci_set}skip_cert_verify=' + Value['proxies'][$count]['plugin-opts']['skip-cert-verify'].to_s - system(skip_cert_verify) - end - end - end - }.join - end; - if '$server_type' == 'ssr' then - Thread.new{ - #cipher - if Value['proxies'][$count].key?('cipher') then - cipher = '${uci_set}cipher_ssr=' + Value['proxies'][$count]['cipher'].to_s - system(cipher) - end - }.join - - Thread.new{ - #obfs - if Value['proxies'][$count].key?('obfs') then - obfs = '${uci_set}obfs_ssr=' + Value['proxies'][$count]['obfs'].to_s - system(obfs) - end - }.join - - Thread.new{ - #protocol - if Value['proxies'][$count].key?('protocol') then - protocol = '${uci_set}protocol=' + Value['proxies'][$count]['protocol'].to_s - system(protocol) - end - }.join - - Thread.new{ - #obfs-param - if Value['proxies'][$count].key?('obfs-param') then - obfs_param = '${uci_set}obfs_param=\"' + Value['proxies'][$count]['obfs-param'].to_s + '\"' - system(obfs_param) - end - }.join - - Thread.new{ - #protocol-param - if Value['proxies'][$count].key?('protocol-param') then - protocol_param = '${uci_set}protocol_param=\"' + Value['proxies'][$count]['protocol-param'].to_s + '\"' - system(protocol_param) - end - }.join - end; - if '$server_type' == 'vmess' then - Thread.new{ - #uuid - if Value['proxies'][$count].key?('uuid') then - uuid = '${uci_set}uuid=' + Value['proxies'][$count]['uuid'].to_s - system(uuid) - end - }.join - - Thread.new{ - #alterId - if Value['proxies'][$count].key?('alterId') then - alterId = '${uci_set}alterId=' + Value['proxies'][$count]['alterId'].to_s - system(alterId) - end - }.join - - Thread.new{ - #cipher - if Value['proxies'][$count].key?('cipher') then - cipher = '${uci_set}securitys=' + Value['proxies'][$count]['cipher'].to_s - system(cipher) - end - }.join - - Thread.new{ - #tls - if Value['proxies'][$count].key?('tls') then - tls = '${uci_set}tls=' + Value['proxies'][$count]['tls'].to_s - system(tls) - end - }.join - - Thread.new{ - #skip-cert-verify - if Value['proxies'][$count].key?('skip-cert-verify') then - skip_cert_verify = '${uci_set}skip_cert_verify=' + Value['proxies'][$count]['skip-cert-verify'].to_s - system(skip_cert_verify) - end - }.join - - Thread.new{ - #servername - if Value['proxies'][$count].key?('servername') then - servername = '${uci_set}servername=\"' + Value['proxies'][$count]['servername'].to_s + '\"' - system(servername) - end - }.join - - Thread.new{ - #network: - if Value['proxies'][$count].key?('network') then - if Value['proxies'][$count]['network'].to_s == 'ws' - system '${uci_set}obfs_vmess=websocket' - #ws-path: - if Value['proxies'][$count].key?('ws-path') then - path = '${uci_set}ws_opts_path=\"' + Value['proxies'][$count]['ws-path'].to_s + '\"' - system(path) - end - #Host: - if Value['proxies'][$count].key?('ws-headers') then - system '${uci_del}ws_opts_headers >/dev/null 2>&1' - Value['proxies'][$count]['ws-headers'].keys.each{ - |v| - custom = '${uci_add}ws_opts_headers=\"' + v.to_s + ': '+ Value['proxies'][$count]['ws-headers'][v].to_s + '\"' - system(custom) - } - end - #ws-opts-path: - if Value['proxies'][$count].key?('ws-opts') then - if Value['proxies'][$count]['ws-opts'].key?('path') then - ws_opts_path = '${uci_set}ws_opts_path=\"' + Value['proxies'][$count]['ws-opts']['path'].to_s + '\"' - system(ws_opts_path) - end - #ws-opts-headers: - if Value['proxies'][$count]['ws-opts'].key?('headers') then - system '${uci_del}ws_opts_headers >/dev/null 2>&1' - Value['proxies'][$count]['ws-opts']['headers'].keys.each{ - |v| - ws_opts_headers = '${uci_add}ws_opts_headers=\"' + v.to_s + ': '+ Value['proxies'][$count]['ws-opts']['headers'][v].to_s + '\"' - system(ws_opts_headers) - } - end - #max-early-data: - if Value['proxies'][$count]['ws-opts'].key?('max-early-data') then - max_early_data = '${uci_set}max_early_data=\"' + Value['proxies'][$count]['ws-opts']['max-early-data'].to_s + '\"' - system(max_early_data) - end - #early-data-header-name: - if Value['proxies'][$count]['ws-opts'].key?('early-data-header-name') then - early_data_header_name = '${uci_set}early_data_header_name=\"' + Value['proxies'][$count]['ws-opts']['early-data-header-name'].to_s + '\"' - system(early_data_header_name) - end - end - elsif Value['proxies'][$count]['network'].to_s == 'http' - system '${uci_set}obfs_vmess=http' - if Value['proxies'][$count].key?('http-opts') then - if Value['proxies'][$count]['http-opts'].key?('path') then - system '${uci_del}http_path >/dev/null 2>&1' - Value['proxies'][$count]['http-opts']['path'].each{ - |x| - http_path = '${uci_add}http_path=\"' + x.to_s + '\"' - system(http_path) - } - end - if Value['proxies'][$count]['http-opts'].key?('headers') then - if Value['proxies'][$count]['http-opts']['headers'].key?('Connection') then - if Value['proxies'][$count]['http-opts']['headers']['Connection'].include?('keep-alive') then - keep_alive = '${uci_set}keep_alive=true' - else - keep_alive = '${uci_set}keep_alive=false' - end - system(keep_alive) - end - end - end - elsif Value['proxies'][$count]['network'].to_s == 'h2' - system '${uci_set}obfs_vmess=h2' - if Value['proxies'][$count].key?('h2-opts') then - if Value['proxies'][$count]['h2-opts'].key?('host') then - system '${uci_del}h2_host >/dev/null 2>&1' - Value['proxies'][$count]['h2-opts']['host'].each{ - |x| - h2_host = '${uci_add}h2_host=\"' + x.to_s + '\"' - system(h2_host) - } - end - if Value['proxies'][$count]['h2-opts'].key?('path') then - h2_path = '${uci_set}h2_path=\"' + Value['proxies'][$count]['h2-opts']['path'].to_s + '\"' - system(h2_path) - end - end - elsif Value['proxies'][$count]['network'].to_s == 'grpc' - #grpc-service-name - system '${uci_set}obfs_vmess=grpc' - if Value['proxies'][$count].key?('grpc-opts') then - if Value['proxies'][$count]['grpc-opts'].key?('grpc-service-name') then - grpc_service_name = '${uci_set}grpc_service_name=\"' + Value['proxies'][$count]['grpc-opts']['grpc-service-name'].to_s + '\"' - system(grpc_service_name) - end - end - else - system '${uci_set}obfs_vmess=none' - end - end - }.join - end; - if '$server_type' == 'snell' then - Thread.new{ - if Value['proxies'][$count].key?('obfs-opts') then - if Value['proxies'][$count]['obfs-opts'].key?('mode') then - mode = '${uci_set}obfs_snell=' + Value['proxies'][$count]['obfs-opts']['mode'].to_s - system(mode) - else - system '${uci_set}obfs_snell=none' - end - if Value['proxies'][$count]['obfs-opts'].key?('host') then - host = '${uci_set}host=\"' + Value['proxies'][$count]['obfs-opts']['host'].to_s + '\"' - system(host) - end - end - }.join - - Thread.new{ - if Value['proxies'][$count].key?('psk') then - psk = '${uci_set}psk=' + Value['proxies'][$count]['psk'].to_s - system(psk) - end - }.join - - Thread.new{ - if Value['proxies'][$count].key?('version') then - snell_version = '${uci_set}snell_version=' + Value['proxies'][$count]['version'].to_s - system(snell_version) - end - }.join - end; - if '$server_type' == 'socks5' or '$server_type' == 'http' then - Thread.new{ - if Value['proxies'][$count].key?('username') then - username = '${uci_set}auth_name=\"' + Value['proxies'][$count]['username'].to_s + '\"' - system(username) - end - }.join - - Thread.new{ - if Value['proxies'][$count].key?('password') then - password = '${uci_set}auth_pass=\"' + Value['proxies'][$count]['password'].to_s + '\"' - system(password) - end - }.join - - Thread.new{ - #tls - if Value['proxies'][$count].key?('tls') then - tls = '${uci_set}tls=' + Value['proxies'][$count]['tls'].to_s - system(tls) - end - }.join - - Thread.new{ - #skip-cert-verify - if Value['proxies'][$count].key?('skip-cert-verify') then - skip_cert_verify = '${uci_set}skip_cert_verify=' + Value['proxies'][$count]['skip-cert-verify'].to_s - system(skip_cert_verify) - end - }.join - else - Thread.new{ - if Value['proxies'][$count].key?('password') then - password = '${uci_set}password=\"' + Value['proxies'][$count]['password'].to_s + '\"' - system(password) - end - }.join - end; - if '$server_type' == 'http' or '$server_type' == 'trojan' then - Thread.new{ - if Value['proxies'][$count].key?('sni') then - sni = '${uci_set}sni=\"' + Value['proxies'][$count]['sni'].to_s + '\"' - system(sni) - end - }.join - end; - if '$server_type' == 'trojan' then - Thread.new{ - #alpn - if Value['proxies'][$count].key?('alpn') then - system '${uci_del}alpn >/dev/null 2>&1' - Value['proxies'][$count]['alpn'].each{ - |x| - alpn = '${uci_add}alpn=\"' + x.to_s + '\"' - system(alpn) - } - end - }.join - - Thread.new{ - #grpc-service-name - if Value['proxies'][$count].key?('grpc-opts') then - system '${uci_set}obfs_trojan=grpc' - if Value['proxies'][$count]['grpc-opts'].key?('grpc-service-name') then - grpc_service_name = '${uci_set}grpc_service_name=\"' + Value['proxies'][$count]['grpc-opts']['grpc-service-name'].to_s + '\"' - system(grpc_service_name) - end - end - }.join - - Thread.new{ - if Value['proxies'][$count].key?('ws-opts') then - system '${uci_set}obfs_trojan=ws' - #trojan_ws_path - if Value['proxies'][$count]['ws-opts'].key?('path') then - trojan_ws_path = '${uci_set}trojan_ws_path=\"' + Value['proxies'][$count]['ws-opts']['path'].to_s + '\"' - system(trojan_ws_path) - end - #trojan_ws_headers - if Value['proxies'][$count]['ws-opts'].key?('headers') then - system '${uci_del}trojan_ws_headers >/dev/null 2>&1' - Value['proxies'][$count]['ws-opts']['headers'].keys.each{ - |v| - trojan_ws_headers = '${uci_add}trojan_ws_headers=\"' + v.to_s + ': '+ Value['proxies'][$count]['ws-opts']['headers'][v].to_s + '\"' - system(trojan_ws_headers) - } - end - end - }.join - - Thread.new{ - #skip-cert-verify - if Value['proxies'][$count].key?('skip-cert-verify') then - skip_cert_verify = '${uci_set}skip_cert_verify=' + Value['proxies'][$count]['skip-cert-verify'].to_s - system(skip_cert_verify) - end - }.join - end; - - rescue Exception => e - puts '${LOGTIME} Error: Resolve Proxy Error,【${CONFIG_NAME} - ${server_type} - ${server_name}: ' + e.message + '】' - end - " 2>/dev/null >> $LOG_FILE & - - - #加入策略组 - if [ "$servers_if_update" = "1" ] && [ "$config_group_exist" = "1" ] && [ "$servers_update" = "1" ] && [ -z "$server_num" ]; then - #新代理且设置默认策略组时加入指定策略组 - config_load "openclash" - config_list_foreach "config" "new_servers_group" cfg_new_servers_groups_get - elif [ "$servers_if_update" != "1" ]; then - ruby -ryaml -E UTF-8 -e " - Thread.new{ - begin - Value = ${group_hash}; - #proxy - system '${uci_del}groups >/dev/null 2>&1'; - Value['proxy-groups'].each{ - |x| - if x.key?('proxies') then - x['proxies'].each{ - |y| - if y == '$server_name' then - uci_proxy = '${uci_add}groups=\"' + x['name'] + '\"' - system(uci_proxy) - break - end - } - end - };; - #relay - system '${uci_del}relay_groups >/dev/null 2>&1'; - Value['proxy-groups'].each{ - |x| - if x['type'] == 'relay' and x.key?('proxies') then - x['proxies'].each{ - |y| - if y == '$server_name' then - uci_relay = '${uci_add}relay_groups=\"' + x['name'] + '#relay#' + x['proxies'].index('$server_name') + '\"' - system(uci_relay) - break - end - } - end - }; - rescue Exception => e - puts '${LOGTIME} Error: Resolve Proxy Error,【${CONFIG_NAME} - ${server_type} - ${server_name}: ' + e.message + '】' - end - }.join; - " 2>/dev/null >> $LOG_FILE & - fi - let count++ -done 2>/dev/null - -#删除订阅中已不存在的节点 -if [ "$servers_if_update" = "1" ]; then - LOG_OUT "Deleting【$CONFIG_NAME】Proxies That no Longer Exists in Subscription" - sed -i '/#match#/d' "$match_servers" 2>/dev/null - cat $match_servers |awk -F '.' '{print $1}' |sort -rn |while read -r line - do - if [ -z "$line" ]; then - continue - fi - if [ "$(uci get openclash.@servers["$line"].manual 2>/dev/null)" = "0" ] && [ "$(uci get openclash.@servers["$line"].config 2>/dev/null)" = "$CONFIG_NAME" ]; then - uci delete openclash.@servers["$line"] 2>/dev/null - fi - done 2>/dev/null -fi - -uci set openclash.config.servers_if_update=0 -wait -uci commit openclash -/usr/share/openclash/cfg_servers_address_fake_filter.sh -LOG_OUT "Config File【$CONFIG_NAME】Read Successful!" -sleep 3 -SLOG_CLEAN -rm -rf /tmp/match_servers.list 2>/dev/null -rm -rf /tmp/match_provider.list 2>/dev/null -rm -rf /tmp/yaml_other_group.yaml 2>/dev/null -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh b/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh deleted file mode 100644 index 15ab4be6..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh +++ /dev/null @@ -1,1327 +0,0 @@ -#!/bin/sh -. /lib/functions.sh -. /usr/share/openclash/ruby.sh -. /usr/share/openclash/log.sh - -set_lock() { - exec 886>"/tmp/lock/openclash_proxies_set.lock" 2>/dev/null - flock -x 886 2>/dev/null -} - -del_lock() { - flock -u 886 2>/dev/null - rm -rf "/tmp/lock/openclash_proxies_set.lock" -} - -SERVER_FILE="/tmp/yaml_servers.yaml" -PROXY_PROVIDER_FILE="/tmp/yaml_provider.yaml" -servers_if_update=$(uci get openclash.config.servers_if_update 2>/dev/null) -config_auto_update=$(uci get openclash.config.auto_update 2>/dev/null) -CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null) -CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -UPDATE_CONFIG_FILE=$(uci get openclash.config.config_update_path 2>/dev/null) -UPDATE_CONFIG_NAME=$(echo "$UPDATE_CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -UCI_DEL_LIST="uci del_list openclash.config.new_servers_group" -UCI_ADD_LIST="uci add_list openclash.config.new_servers_group" -UCI_SET="uci set openclash.config." -MIX_PROXY=$(uci get openclash.config.mix_proxies 2>/dev/null) -servers_name="/tmp/servers_name.list" -proxy_provider_name="/tmp/provider_name.list" -set_lock - -if [ ! -z "$UPDATE_CONFIG_FILE" ]; then - CONFIG_FILE="$UPDATE_CONFIG_FILE" - CONFIG_NAME="$UPDATE_CONFIG_NAME" -fi - -if [ -z "$CONFIG_FILE" ]; then - CONFIG_FILE="/etc/openclash/config/$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')" - CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) -fi - -if [ -z "$CONFIG_NAME" ]; then - CONFIG_FILE="/etc/openclash/config/config.yaml" - CONFIG_NAME="config.yaml" -fi - -yml_other_rules_del() -{ - local section="$1" - local enabled config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - config_get "rule_name" "$section" "rule_name" "" - - if [ "$enabled" = "0" ] || [ "$config" != "$2" ] || [ "$rule_name" != "$3" ]; then - return - else - uci set openclash."$section".enabled=0 2>/dev/null - fi -} -#写入代理集到配置文件 -yml_proxy_provider_set() -{ - local section="$1" - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - config_get "type" "$section" "type" "" - config_get "name" "$section" "name" "" - config_get "path" "$section" "path" "" - config_get "provider_filter" "$section" "provider_filter" "" - config_get "provider_url" "$section" "provider_url" "" - config_get "provider_interval" "$section" "provider_interval" "" - config_get "health_check" "$section" "health_check" "" - config_get "health_check_url" "$section" "health_check_url" "" - config_get "health_check_interval" "$section" "health_check_interval" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$type" ]; then - return - fi - - if [ -z "$name" ]; then - return - fi - - if [ "$path" != "./proxy_provider/$name.yaml" ] && [ "$type" = "http" ]; then - path="./proxy_provider/$name.yaml" - elif [ -z "$path" ]; then - return - fi - - if [ -z "$health_check" ]; then - return - fi - - if [ ! -z "$if_game_proxy" ] && [ "$if_game_proxy" != "$name" ] && [ "$if_game_proxy_type" = "proxy-provider" ]; then - return - fi - - if [ "$MIX_PROXY" != "1" ] && [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - #避免重复代理集 - if [ "$config" = "$CONFIG_NAME" ] || [ "$config" = "all" ]; then - if [ -n "$(grep -w "path: $path" "$PROXY_PROVIDER_FILE" 2>/dev/null)" ]; then - return - elif [ "$(grep -w "^$name$" "$proxy_provider_name" |wc -l 2>/dev/null)" -ge 2 ] && [ -z "$(grep -w "path: $path" "$PROXY_PROVIDER_FILE" 2>/dev/null)" ]; then - sed -i "1,/^${name}$/{//d}" "$proxy_provider_name" 2>/dev/null - return - fi - fi - - LOG_OUT "Start Writing【$CONFIG_NAME - $type - $name】Proxy-provider To Config File..." - echo "$name" >> /tmp/Proxy_Provider - -cat >> "$PROXY_PROVIDER_FILE" <<-EOF - $name: - type: $type - path: "$path" -EOF - if [ -n "$provider_filter" ]; then -cat >> "$PROXY_PROVIDER_FILE" <<-EOF - filter: "$provider_filter" -EOF - fi - if [ -n "$provider_url" ]; then -cat >> "$PROXY_PROVIDER_FILE" <<-EOF - url: "$provider_url" - interval: $provider_interval -EOF - fi -cat >> "$PROXY_PROVIDER_FILE" <<-EOF - health-check: - enable: $health_check - url: "$health_check_url" - interval: $health_check_interval -EOF - -} - -set_alpn() -{ - if [ -z "$1" ]; then - return - fi -cat >> "$SERVER_FILE" <<-EOF - - '$1' -EOF -} - -set_http_path() -{ - if [ -z "$1" ]; then - return - fi -cat >> "$SERVER_FILE" <<-EOF - - '$1' -EOF -} - -set_h2_host() -{ - if [ -z "$1" ]; then - return - fi -cat >> "$SERVER_FILE" <<-EOF - - '$1' -EOF -} - -set_ws_headers() -{ - if [ -z "$1" ]; then - return - fi -cat >> "$SERVER_FILE" <<-EOF - $1 -EOF -} - -#写入服务器节点到配置文件 -yml_servers_set() -{ - - local section="$1" - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - config_get "type" "$section" "type" "" - config_get "name" "$section" "name" "" - config_get "server" "$section" "server" "" - config_get "port" "$section" "port" "" - config_get "cipher" "$section" "cipher" "" - config_get "cipher_ssr" "$section" "cipher_ssr" "" - config_get "password" "$section" "password" "" - config_get "securitys" "$section" "securitys" "" - config_get "udp" "$section" "udp" "" - config_get "obfs" "$section" "obfs" "" - config_get "obfs_ssr" "$section" "obfs_ssr" "" - config_get "obfs_param" "$section" "obfs_param" "" - config_get "obfs_vmess" "$section" "obfs_vmess" "" - config_get "obfs_trojan" "$section" "obfs_trojan" "" - config_get "protocol" "$section" "protocol" "" - config_get "protocol_param" "$section" "protocol_param" "" - config_get "host" "$section" "host" "" - config_get "mux" "$section" "mux" "" - config_get "custom" "$section" "custom" "" - config_get "tls" "$section" "tls" "" - config_get "skip_cert_verify" "$section" "skip_cert_verify" "" - config_get "path" "$section" "path" "" - config_get "alterId" "$section" "alterId" "" - config_get "uuid" "$section" "uuid" "" - config_get "auth_name" "$section" "auth_name" "" - config_get "auth_pass" "$section" "auth_pass" "" - config_get "psk" "$section" "psk" "" - config_get "obfs_snell" "$section" "obfs_snell" "" - config_get "snell_version" "$section" "snell_version" "" - config_get "sni" "$section" "sni" "" - config_get "alpn" "$section" "alpn" "" - config_get "http_path" "$section" "http_path" "" - config_get "keep_alive" "$section" "keep_alive" "" - config_get "servername" "$section" "servername" "" - config_get "h2_path" "$section" "h2_path" "" - config_get "h2_host" "$section" "h2_host" "" - config_get "grpc_service_name" "$section" "grpc_service_name" "" - config_get "ws_opts_path" "$section" "ws_opts_path" "" - config_get "ws_opts_headers" "$section" "ws_opts_headers" "" - config_get "max_early_data" "$section" "max_early_data" "" - config_get "early_data_header_name" "$section" "early_data_header_name" "" - config_get "trojan_ws_path" "$section" "trojan_ws_path" "" - config_get "trojan_ws_headers" "$section" "trojan_ws_headers" "" - config_get "interface_name" "$section" "interface_name" "" - config_get "routing_mark" "$section" "routing_mark" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$type" ]; then - return - fi - - if [ -z "$name" ]; then - return - fi - - if [ -z "$server" ]; then - return - fi - - if [ -z "$port" ]; then - return - fi - - if [ -z "$password" ]; then - if [ "$type" = "ss" ] || [ "$type" = "trojan" ] || [ "$type" = "ssr" ]; then - return - fi - fi - - if [ ! -z "$if_game_proxy" ] && [ "$if_game_proxy" != "$name" ] && [ "$if_game_proxy_type" = "proxy" ]; then - return - fi - - if [ "$MIX_PROXY" != "1" ] && [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - #避免重复节点 - if [ "$config" = "$CONFIG_NAME" ] || [ "$config" = "all" ]; then - if [ "$(grep -w "^$name$" "$servers_name" |wc -l 2>/dev/null)" -ge 2 ] && [ -n "$(grep -w "name: \"$name\"" "$SERVER_FILE" 2>/dev/null)" ]; then - return - fi - fi - - if [ "$config" = "$CONFIG_NAME" ] || [ "$config" = "all" ]; then - if [ -n "$(grep -w "name: \"$name\"" "$SERVER_FILE" 2>/dev/null)" ]; then - return - elif [ "$(grep -w "^$name$" "$servers_name" |wc -l 2>/dev/null)" -ge 2 ] && [ -z "$(grep -w "name: \"$name\"" "$SERVER_FILE" 2>/dev/null)" ]; then - sed -i "1,/^${name}$/{//d}" "$servers_name" 2>/dev/null - return - fi - fi - LOG_OUT "Start Writing【$CONFIG_NAME - $type - $name】Proxy To Config File..." - - if [ "$obfs" != "none" ] && [ -n "$obfs" ]; then - if [ "$obfs" = "websocket" ]; then - obfss="plugin: v2ray-plugin" - else - obfss="plugin: obfs" - fi - else - obfss="" - fi - - if [ "$obfs_vmess" = "websocket" ]; then - obfs_vmess="network: ws" - fi - - if [ "$obfs_vmess" = "http" ]; then - obfs_vmess="network: http" - fi - - if [ "$obfs_vmess" = "h2" ]; then - obfs_vmess="network: h2" - fi - - if [ "$obfs_vmess" = "grpc" ]; then - obfs_vmess="network: grpc" - fi - - if [ ! -z "$custom" ] && [ "$type" = "vmess" ]; then - custom="Host: \"$custom\"" - fi - - if [ ! -z "$path" ]; then - if [ "$type" != "vmess" ]; then - path="path: \"$path\"" - elif [ "$obfs_vmess" = "network: ws" ]; then - path="ws-path: \"$path\"" - fi - fi - -#ss - if [ "$type" = "ss" ]; then -cat >> "$SERVER_FILE" <<-EOF - - name: "$name" - type: $type - server: "$server" - port: $port - cipher: $cipher - password: "$password" -EOF - if [ ! -z "$udp" ]; then -cat >> "$SERVER_FILE" <<-EOF - udp: $udp -EOF - fi - if [ ! -z "$obfss" ]; then -cat >> "$SERVER_FILE" <<-EOF - $obfss - plugin-opts: - mode: $obfs -EOF - if [ ! -z "$host" ]; then -cat >> "$SERVER_FILE" <<-EOF - host: "$host" -EOF - fi - if [ "$obfss" = "plugin: v2ray-plugin" ]; then - if [ ! -z "$tls" ]; then -cat >> "$SERVER_FILE" <<-EOF - tls: $tls -EOF - fi - if [ ! -z "$skip_cert_verify" ]; then -cat >> "$SERVER_FILE" <<-EOF - skip-cert-verify: $skip_cert_verify -EOF - fi - if [ ! -z "$path" ]; then -cat >> "$SERVER_FILE" <<-EOF - $path -EOF - fi - if [ ! -z "$mux" ]; then -cat >> "$SERVER_FILE" <<-EOF - mux: $mux -EOF - fi - if [ ! -z "$custom" ]; then -cat >> "$SERVER_FILE" <<-EOF - headers: - custom: $custom -EOF - fi - fi - fi - fi - -#ssr -if [ "$type" = "ssr" ]; then -cat >> "$SERVER_FILE" <<-EOF - - name: "$name" - type: $type - server: "$server" - port: $port - cipher: $cipher_ssr - password: "$password" - obfs: "$obfs_ssr" - protocol: "$protocol" -EOF - if [ ! -z "$obfs_param" ]; then -cat >> "$SERVER_FILE" <<-EOF - obfs-param: $obfs_param -EOF - fi - if [ ! -z "$protocol_param" ]; then -cat >> "$SERVER_FILE" <<-EOF - protocol-param: $protocol_param -EOF - fi - if [ ! -z "$udp" ]; then -cat >> "$SERVER_FILE" <<-EOF - udp: $udp -EOF - fi -fi - -#vmess - if [ "$type" = "vmess" ]; then -cat >> "$SERVER_FILE" <<-EOF - - name: "$name" - type: $type - server: "$server" - port: $port - uuid: $uuid - alterId: $alterId - cipher: $securitys -EOF - if [ ! -z "$udp" ]; then -cat >> "$SERVER_FILE" <<-EOF - udp: $udp -EOF - fi - if [ ! -z "$skip_cert_verify" ]; then -cat >> "$SERVER_FILE" <<-EOF - skip-cert-verify: $skip_cert_verify -EOF - fi - if [ ! -z "$tls" ]; then -cat >> "$SERVER_FILE" <<-EOF - tls: $tls -EOF - fi - if [ ! -z "$servername" ] && [ "$tls" = "true" ]; then -cat >> "$SERVER_FILE" <<-EOF - servername: "$servername" -EOF - fi - if [ "$obfs_vmess" != "none" ]; then -cat >> "$SERVER_FILE" <<-EOF - $obfs_vmess -EOF - if [ "$obfs_vmess" = "network: ws" ]; then - if [ ! -z "$path" ]; then -cat >> "$SERVER_FILE" <<-EOF - $path -EOF - fi - if [ ! -z "$custom" ]; then -cat >> "$SERVER_FILE" <<-EOF - ws-headers: - $custom -EOF - fi - if [ -n "$ws_opts_path" ] || [ -n "$ws_opts_headers" ] || [ -n "$max_early_data" ] || [ -n "$early_data_header_name" ]; then -cat >> "$SERVER_FILE" <<-EOF - ws-opts: -EOF - if [ -n "$ws_opts_path" ]; then -cat >> "$SERVER_FILE" <<-EOF - path: "$ws_opts_path" -EOF - fi - if [ -n "$ws_opts_headers" ]; then -cat >> "$SERVER_FILE" <<-EOF - headers: -EOF - config_list_foreach "$section" "ws_opts_headers" set_ws_headers - fi - if [ -n "$max_early_data" ]; then -cat >> "$SERVER_FILE" <<-EOF - max-early-data: $max_early_data -EOF - fi - if [ -n "$early_data_header_name" ]; then -cat >> "$SERVER_FILE" <<-EOF - early-data-header-name: "$early_data_header_name" -EOF - fi - fi - fi - if [ "$obfs_vmess" = "network: http" ]; then - if [ ! -z "$http_path" ]; then -cat >> "$SERVER_FILE" <<-EOF - http-opts: - method: "GET" - path: -EOF - config_list_foreach "$section" "http_path" set_http_path - fi - if [ "$keep_alive" = "true" ]; then -cat >> "$SERVER_FILE" <<-EOF - headers: - Connection: - - keep-alive -EOF - fi - fi - #h2 - if [ "$obfs_vmess" = "network: h2" ]; then - if [ ! -z "$h2_host" ]; then -cat >> "$SERVER_FILE" <<-EOF - h2-opts: - host: -EOF - config_list_foreach "$section" "h2_host" set_h2_host - fi - if [ ! -z "$h2_path" ]; then -cat >> "$SERVER_FILE" <<-EOF - path: $h2_path -EOF - fi - fi - if [ ! -z "$grpc_service_name" ] && [ "$obfs_vmess" = "network: grpc" ]; then -cat >> "$SERVER_FILE" <<-EOF - grpc-opts: - grpc-service-name: "$grpc_service_name" -EOF - fi - fi - fi - -#socks5 - if [ "$type" = "socks5" ]; then -cat >> "$SERVER_FILE" <<-EOF - - name: "$name" - type: $type - server: "$server" - port: $port -EOF - if [ ! -z "$auth_name" ]; then -cat >> "$SERVER_FILE" <<-EOF - username: "$auth_name" -EOF - fi - if [ ! -z "$auth_pass" ]; then -cat >> "$SERVER_FILE" <<-EOF - password: "$auth_pass" -EOF - fi - if [ ! -z "$udp" ]; then -cat >> "$SERVER_FILE" <<-EOF - udp: $udp -EOF - fi - if [ ! -z "$skip_cert_verify" ]; then -cat >> "$SERVER_FILE" <<-EOF - skip-cert-verify: $skip_cert_verify -EOF - fi - if [ ! -z "$tls" ]; then -cat >> "$SERVER_FILE" <<-EOF - tls: $tls -EOF - fi - fi - -#http - if [ "$type" = "http" ]; then -cat >> "$SERVER_FILE" <<-EOF - - name: "$name" - type: $type - server: "$server" - port: $port -EOF - if [ ! -z "$auth_name" ]; then -cat >> "$SERVER_FILE" <<-EOF - username: "$auth_name" -EOF - fi - if [ ! -z "$auth_pass" ]; then -cat >> "$SERVER_FILE" <<-EOF - password: "$auth_pass" -EOF - fi - if [ ! -z "$skip_cert_verify" ]; then -cat >> "$SERVER_FILE" <<-EOF - skip-cert-verify: $skip_cert_verify -EOF - fi - if [ ! -z "$tls" ]; then -cat >> "$SERVER_FILE" <<-EOF - tls: $tls -EOF - fi - if [ ! -z "$sni" ]; then -cat >> "$SERVER_FILE" <<-EOF - sni: "$sni" -EOF - fi - fi - -#trojan - if [ "$type" = "trojan" ]; then -cat >> "$SERVER_FILE" <<-EOF - - name: "$name" - type: $type - server: "$server" - port: $port - password: "$password" -EOF - if [ ! -z "$udp" ]; then -cat >> "$SERVER_FILE" <<-EOF - udp: $udp -EOF - fi - if [ ! -z "$sni" ]; then -cat >> "$SERVER_FILE" <<-EOF - sni: "$sni" -EOF - fi - if [ ! -z "$alpn" ]; then -cat >> "$SERVER_FILE" <<-EOF - alpn: -EOF - config_list_foreach "$section" "alpn" set_alpn - fi - if [ ! -z "$skip_cert_verify" ]; then -cat >> "$SERVER_FILE" <<-EOF - skip-cert-verify: $skip_cert_verify -EOF - fi - if [ ! -z "$grpc_service_name" ]; then -cat >> "$SERVER_FILE" <<-EOF - network: grpc - grpc-opts: - grpc-service-name: "$grpc_service_name" -EOF - fi - if [ "$obfs_trojan" = "ws" ]; then - if [ -n "$trojan_ws_path" ] || [ -n "$trojan_ws_headers" ]; then -cat >> "$SERVER_FILE" <<-EOF - network: ws - ws-opts: -EOF - fi - if [ -n "$trojan_ws_path" ]; then -cat >> "$SERVER_FILE" <<-EOF - path: "$trojan_ws_path" -EOF - fi - if [ -n "$trojan_ws_headers" ]; then -cat >> "$SERVER_FILE" <<-EOF - headers: -EOF - config_list_foreach "$section" "trojan_ws_headers" set_ws_headers - fi - fi - fi - -#snell - if [ "$type" = "snell" ]; then -cat >> "$SERVER_FILE" <<-EOF - - name: "$name" - type: $type - server: "$server" - port: $port - psk: $psk -EOF - if [ -n "$snell_version" ]; then -cat >> "$SERVER_FILE" <<-EOF - version: "$snell_version" -EOF - fi - if [ "$obfs_snell" != "none" ] && [ ! -z "$host" ]; then -cat >> "$SERVER_FILE" <<-EOF - obfs-opts: - mode: $obfs_snell - host: "$host" -EOF - fi - fi - -#interface-name - if [ -n "$interface_name" ]; then -cat >> "$SERVER_FILE" <<-EOF - interface-name: $interface_name -EOF - fi - -#routing_mark - if [ -n "$routing_mark" ]; then -cat >> "$SERVER_FILE" <<-EOF - routing-mark: $routing_mark -EOF - fi -} - -new_servers_group_set() -{ - local section="$1" - config_get_bool "enabled" "$section" "enabled" "1" - config_get "name" "$section" "name" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$name" ] || [ "$(echo $name.yaml)" != "$CONFIG_NAME" ]; then - return - fi - - new_servers_group_set=1 - -} - -yml_servers_name_get() -{ - local section="$1" - config_get "name" "$section" "name" "" - [ ! -z "$name" ] && { - echo "$name" >>"$servers_name" - } -} - -yml_proxy_provider_name_get() -{ - local section="$1" - config_get "name" "$section" "name" "" - [ ! -z "$name" ] && { - echo "$name" >>"$proxy_provider_name" - } -} - -#创建配置文件 -if_game_proxy="$1" -if_game_proxy_type="$2" -#创建对比文件防止重复 -config_load "openclash" -config_foreach yml_servers_name_get "servers" -config_foreach yml_proxy_provider_name_get "proxy-provider" -#判断是否启用保留配置 -config_foreach new_servers_group_set "config_subscribe" -#proxy-provider -LOG_OUT "Start Writing【$CONFIG_NAME】Proxy-providers Setting..." -echo "proxy-providers:" >$PROXY_PROVIDER_FILE -rm -rf /tmp/Proxy_Provider -config_foreach yml_proxy_provider_set "proxy-provider" -sed -i "s/^ \{0,\}/ - /" /tmp/Proxy_Provider 2>/dev/null #添加参数 -if [ "$(grep "-" /tmp/Proxy_Provider 2>/dev/null |wc -l)" -eq 0 ]; then - rm -rf $PROXY_PROVIDER_FILE - rm -rf /tmp/Proxy_Provider -fi -rm -rf $proxy_provider_name - -#proxy -rule_sources=$(uci get openclash.config.rule_sources 2>/dev/null) -create_config=$(uci get openclash.config.create_config 2>/dev/null) -LOG_OUT "Start Writing【$CONFIG_NAME】Proxies Setting..." -echo "proxies:" >$SERVER_FILE -config_foreach yml_servers_set "servers" -egrep '^ {0,}-' $SERVER_FILE |grep name: |awk -F 'name: ' '{print $2}' |sed 's/,.*//' 2>/dev/null >/tmp/Proxy_Server 2>&1 -if [ -s "/tmp/Proxy_Server" ]; then - sed -i "s/^ \{0,\}/ - /" /tmp/Proxy_Server 2>/dev/null #添加参数 -else - rm -rf $SERVER_FILE - rm -rf /tmp/Proxy_Server -fi -rm -rf $servers_name - -#一键创建配置文件 -if [ "$rule_sources" = "ConnersHua" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then -LOG_OUT "Creating By Using Connershua (rule set) Rules..." -echo "proxy-groups:" >>$SERVER_FILE -cat >> "$SERVER_FILE" <<-EOF - - name: Auto - UrlTest - type: url-test -EOF -if [ -f "/tmp/Proxy_Server" ]; then -cat >> "$SERVER_FILE" <<-EOF - proxies: -EOF -fi -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - url: https://cp.cloudflare.com/generate_204 - interval: "600" - tolerance: "150" - - name: Proxy - type: select - proxies: - - Auto - UrlTest - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Domestic - type: select - proxies: - - DIRECT - - Proxy - - name: Others - type: select - proxies: - - Proxy - - DIRECT - - Domestic - - name: Asian TV - type: select - proxies: - - DIRECT - - Proxy -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Global TV - type: select - proxies: - - Proxy - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -config_load "openclash" -config_foreach yml_other_rules_del "other_rules" "$CONFIG_NAME" "ConnersHua" -uci_name_tmp=$(uci add openclash other_rules) -uci_set="uci -q set openclash.$uci_name_tmp." -${UCI_SET}rule_source="1" -${uci_set}enable="1" -${uci_set}rule_name="ConnersHua" -${uci_set}config="$CONFIG_NAME" -${uci_set}GlobalTV="Global TV" -${uci_set}AsianTV="Asian TV" -${uci_set}Proxy="Proxy" -${uci_set}AdBlock="AdBlock" -${uci_set}Domestic="Domestic" -${uci_set}Others="Others" - -[ "$config_auto_update" -eq 1 ] && [ "$new_servers_group_set" -eq 1 ] && { - ${UCI_SET}servers_update="1" - ${UCI_DEL_LIST}="all" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Auto - UrlTest" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Auto - UrlTest" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Proxy" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Proxy" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Asian TV" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Asian TV" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Global TV" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Global TV" >/dev/null 2>&1 -} -elif [ "$rule_sources" = "lhie1" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then -LOG_OUT "Creating By Using lhie1 Rules..." -echo "proxy-groups:" >>$SERVER_FILE -cat >> "$SERVER_FILE" <<-EOF - - name: Auto - UrlTest - type: url-test -EOF -if [ -f "/tmp/Proxy_Server" ]; then -cat >> "$SERVER_FILE" <<-EOF - proxies: -EOF -fi -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - url: https://cp.cloudflare.com/generate_204 - interval: "600" - tolerance: "150" - - name: Proxy - type: select - proxies: - - Auto - UrlTest - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Domestic - type: select - proxies: - - DIRECT - - Proxy - - name: Others - type: select - proxies: - - Proxy - - DIRECT - - Domestic - - name: Microsoft - type: select - proxies: - - DIRECT - - Proxy -EOF -cat >> "$SERVER_FILE" <<-EOF - - name: Apple - type: select - proxies: - - DIRECT - - Proxy -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Google FCM - type: select - proxies: - - DIRECT - - Proxy -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Scholar - type: select - proxies: - - DIRECT - - Proxy -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Bilibili - type: select - proxies: - - Asian TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Bahamut - type: select - proxies: - - Global TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: HBO Max - type: select - proxies: - - Global TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: HBO Go - type: select - proxies: - - Global TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Pornhub - type: select - proxies: - - Global TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Netflix - type: select - proxies: - - Global TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Disney - type: select - proxies: - - Global TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Youtube - type: select - disable-udp: true - proxies: - - Global TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Spotify - type: select - proxies: - - Global TV - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Steam - type: select - proxies: - - DIRECT - - Proxy -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: AdBlock - type: select - proxies: - - REJECT - - DIRECT - - Proxy - - name: Asian TV - type: select - proxies: - - DIRECT - - Proxy -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Global TV - type: select - proxies: - - Proxy - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Speedtest - type: select - proxies: - - Proxy - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Telegram - type: select - proxies: - - Proxy - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: PayPal - type: select - proxies: - - DIRECT - - Proxy -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -config_load "openclash" -config_foreach yml_other_rules_del "other_rules" "$CONFIG_NAME" "lhie1" -uci_name_tmp=$(uci add openclash other_rules) -uci_set="uci -q set openclash.$uci_name_tmp." -${UCI_SET}rule_source="1" -${uci_set}enable="1" -${uci_set}rule_name="lhie1" -${uci_set}config="$CONFIG_NAME" -${uci_set}GlobalTV="Global TV" -${uci_set}AsianTV="Asian TV" -${uci_set}Proxy="Proxy" -${uci_set}Youtube="Youtube" -${uci_set}Bilibili="Bilibili" -${uci_set}Bahamut="Bahamut" -${uci_set}HBOMax="HBO Max" -${uci_set}HBOGo="HBO Go" -${uci_set}Pornhub="Pornhub" -${uci_set}Apple="Apple" -${uci_set}GoogleFCM="Google FCM" -${uci_set}Scholar="Scholar" -${uci_set}Microsoft="Microsoft" -${uci_set}Netflix="Netflix" -${uci_set}Disney="Disney" -${uci_set}Spotify="Spotify" -${uci_set}Steam="Steam" -${uci_set}AdBlock="AdBlock" -${uci_set}Speedtest="Speedtest" -${uci_set}Telegram="Telegram" -${uci_set}PayPal="PayPal" -${uci_set}Domestic="Domestic" -${uci_set}Others="Others" - -[ "$config_auto_update" -eq 1 ] && [ "$new_servers_group_set" -eq 1 ] && { - ${UCI_SET}servers_update="1" - ${UCI_DEL_LIST}="all" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Auto - UrlTest" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Auto - UrlTest" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Proxy" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Proxy" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Youtube" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Youtube" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Bilibili" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Bilibili" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Bahamut" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Bahamut" >/dev/null 2>&1 - ${UCI_DEL_LIST}="HBO Max" >/dev/null 2>&1 && ${UCI_ADD_LIST}="HBO Max" >/dev/null 2>&1 - ${UCI_DEL_LIST}="HBO Go" >/dev/null 2>&1 && ${UCI_ADD_LIST}="HBO Go" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Pornhub" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Pornhub" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Asian TV" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Asian TV" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Global TV" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Global TV" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Netflix" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Netflix" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Apple" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Apple" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Google FCM" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Google FCM" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Scholar" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Scholar" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Disney" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Disney" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Spotify" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Spotify" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Steam" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Steam" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Telegram" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Telegram" >/dev/null 2>&1 - ${UCI_DEL_LIST}="PayPal" >/dev/null 2>&1 && ${UCI_ADD_LIST}="PayPal" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Speedtest" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Speedtest" >/dev/null 2>&1 -} -elif [ "$rule_sources" = "ConnersHua_return" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then -LOG_OUT "Creating By Using ConnersHua Return Rules..." -echo "proxy-groups:" >>$SERVER_FILE -cat >> "$SERVER_FILE" <<-EOF - - name: Auto - UrlTest - type: url-test -EOF -if [ -f "/tmp/Proxy_Server" ]; then -cat >> "$SERVER_FILE" <<-EOF - proxies: -EOF -fi -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - url: https://cp.cloudflare.com/generate_204 - interval: "600" - tolerance: "150" - - name: Proxy - type: select - proxies: - - Auto - UrlTest - - DIRECT -EOF -cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null -if [ -f "/tmp/Proxy_Provider" ]; then -cat >> "$SERVER_FILE" <<-EOF - use: -EOF -fi -cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null -cat >> "$SERVER_FILE" <<-EOF - - name: Others - type: select - proxies: - - Proxy - - DIRECT -EOF -config_load "openclash" -config_foreach yml_other_rules_del "other_rules" "$CONFIG_NAME" "ConnersHua_return" -uci_name_tmp=$(uci add openclash other_rules) -uci_set="uci -q set openclash.$uci_name_tmp." -${UCI_SET}rule_source="1" -${uci_set}enable="1" -${uci_set}rule_name="ConnersHua_return" -${uci_set}config="$CONFIG_NAME" -${uci_set}Proxy="Proxy" -${uci_set}Others="Others" -[ "$config_auto_update" -eq 1 ] && [ "$new_servers_group_set" -eq 1 ] && { - ${UCI_SET}servers_update="1" - ${UCI_DEL_LIST}="all" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Auto - UrlTest" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Auto - UrlTest" >/dev/null 2>&1 - ${UCI_DEL_LIST}="Proxy" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Proxy" >/dev/null 2>&1 -} -fi - -if [ "$create_config" != "0" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then - echo "rules:" >>$SERVER_FILE - LOG_OUT "Config File【$CONFIG_NAME】Created Successful, Updating Proxies, Proxy-providers, Groups..." - cat "$PROXY_PROVIDER_FILE" > "$CONFIG_FILE" 2>/dev/null - cat "$SERVER_FILE" >> "$CONFIG_FILE" 2>/dev/null - /usr/share/openclash/yml_groups_get.sh >/dev/null 2>&1 -elif [ -z "$if_game_proxy" ]; then - LOG_OUT "Proxies, Proxy-providers, Groups Edited Successful, Updating Config File【$CONFIG_NAME】..." - config_hash=$(ruby -ryaml -E UTF-8 -e "Value = YAML.load_file('$CONFIG_FILE'); puts Value" 2>/dev/null) - if [ "$config_hash" != "false" ] && [ -n "$config_hash" ]; then - ruby_cover "$CONFIG_FILE" "['proxies']" "$SERVER_FILE" "proxies" - ruby_cover "$CONFIG_FILE" "['proxy-providers']" "$PROXY_PROVIDER_FILE" "proxy-providers" - ruby_cover "$CONFIG_FILE" "['proxy-groups']" "/tmp/yaml_groups.yaml" "proxy-groups" - else - cat "$SERVER_FILE" "$PROXY_PROVIDER_FILE" "/tmp/yaml_groups.yaml" > "$CONFIG_FILE" 2>/dev/null - fi -fi - -if [ -z "$if_game_proxy" ]; then - rm -rf $SERVER_FILE 2>/dev/null - rm -rf $PROXY_PROVIDER_FILE 2>/dev/null - rm -rf /tmp/yaml_groups.yaml 2>/dev/null - LOG_OUT "Config File【$CONFIG_NAME】Write Successful!" - sleep 3 - SLOG_CLEAN -fi -rm -rf /tmp/Proxy_Server 2>/dev/null -rm -rf /tmp/Proxy_Provider 2>/dev/null -del_lock -${UCI_SET}enable=1 2>/dev/null -[ "$(uci get openclash.config.servers_if_update)" == "0" ] && [ -z "$if_game_proxy" ] && /etc/init.d/openclash restart >/dev/null 2>&1 -${UCI_SET}servers_if_update=0 -uci commit openclash diff --git a/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh b/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh deleted file mode 100644 index b31e4b6b..00000000 --- a/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh +++ /dev/null @@ -1,431 +0,0 @@ -#!/bin/sh -. /lib/functions.sh -. /usr/share/openclash/ruby.sh -. /usr/share/openclash/log.sh - -LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) -LOG_FILE="/tmp/openclash.log" - -yml_other_set() -{ - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$4'); - rescue Exception => e - puts '${LOGTIME} Error: Load File Error,【' + e.message + '】' - end - begin - if $3 == 1 then - #script - for i in ['/etc/openclash/custom/openclash_custom_rules.list','/etc/openclash/custom/openclash_custom_rules_2.list'] do - if File::exist?(i) then - Value_1 = YAML.load_file(i) - if Value_1 != false then - if Value_1.class.to_s == 'Hash' then - if Value_1['script'] and Value_1['script'].class.to_s != 'Array' then - if Value.key?('script') and not Value_1['script'].to_a.empty? then - if Value['script'].key?('code') and Value_1['script'].key?('code') then - Value['script']['code'].merge!(Value_1['script']['code']).uniq - elsif Value_1['script'].key?('code') then - Value['script']['code'] = Value_1['script']['code'] - end - if Value['script'].key?('shortcuts') and Value_1['script'].key?('shortcuts') - Value['script']['shortcuts'].merge!(Value_1['script']['shortcuts']).uniq - elsif Value_1['script'].key?('shortcuts') then - Value['script']['shortcuts'] = Value_1['script']['shortcuts'] - end - else - Value['script'] = Value_1['script'] - end - end - end - end - end - end; - #rules - if Value.has_key?('rules') and not Value['rules'].to_a.empty? then - if File::exist?('/etc/openclash/custom/openclash_custom_rules.list') then - Value_1 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules.list') - if Value_1 != false then - if Value_1.class.to_s == 'Hash' then - if not Value_1['rules'].to_a.empty? and Value_1['rules'].class.to_s == 'Array' then - Value_2 = Value_1['rules'].to_a.reverse! - end - elsif Value_1.class.to_s == 'Array' - Value_2 = Value_1.reverse! - end - if defined? Value_2 then - Value_2.each{|x| Value['rules'].insert(0,x)} - Value['rules'] = Value['rules'].uniq - end - end - end - if File::exist?('/etc/openclash/custom/openclash_custom_rules_2.list') then - Value_3 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules_2.list') - if Value_3 != false then - ruby_add_index = Value['rules'].index(Value['rules'].grep(/(GEOIP|MATCH|FINAL)/).first) - ruby_add_index ||= -1 - if Value_3.class.to_s == 'Hash' then - if not Value_3['rules'].to_a.empty? and Value_3['rules'].class.to_s == 'Array' then - Value_4 = Value_3['rules'].to_a.reverse! - end - elsif Value_3.class.to_s == 'Array' - Value_4 = Value_3.reverse! - end - if defined? Value_4 then - if ruby_add_index == -1 then - Value_4 = Value_4.reverse! - end - Value_4.each{|x| Value['rules'].insert(ruby_add_index,x)} - Value['rules'] = Value['rules'].uniq - end - end - end - else - if File::exist?('/etc/openclash/custom/openclash_custom_rules.list') then - Value_1 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules.list') - if Value_1 != false then - if Value_1.class.to_s == 'Hash' then - if not Value_1['rules'].to_a.empty? and Value_1['rules'].class.to_s == 'Array' then - Value['rules'] = Value_1['rules'] - Value['rules'] = Value['rules'].uniq - end - elsif Value_1.class.to_s == 'Array' - Value['rules'] = Value_1 - Value['rules'] = Value['rules'].uniq - end - end - end - if File::exist?('/etc/openclash/custom/openclash_custom_rules_2.list') then - Value_2 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules_2.list') - if Value_2 != false then - if Value['rules'].to_a.empty? then - if Value_2.class.to_s == 'Hash' then - if not Value_2['rules'].to_a.empty? and Value_2['rules'].class.to_s == 'Array' then - Value['rules'] = Value_2['rules'] - Value['rules'] = Value['rules'].uniq - end - elsif Value_2.class.to_s == 'Array' - Value['rules'] = Value_2 - Value['rules'] = Value['rules'].uniq - end - else - ruby_add_index = Value['rules'].index(Value['rules'].grep(/(GEOIP|MATCH|FINAL)/).first) - ruby_add_index ||= -1 - if Value_2.class.to_s == 'Hash' then - if not Value_2['rules'].to_a.empty? and Value_2['rules'].class.to_s == 'Array' then - Value_3 = Value_2['rules'].to_a.reverse! - end - elsif Value_2.class.to_s == 'Array' - Value_3 = Value_2.reverse! - end - if defined? Value_3 then - if ruby_add_index == -1 then - Value_3 = Value_3.reverse! - end - Value_3.each{|x| Value['rules'].insert(ruby_add_index,x)} - Value['rules'] = Value['rules'].uniq - end - end - end - end - end - end; - rescue Exception => e - puts '${LOGTIME} Error: Set Custom Rules Error,【' + e.message + '】' - end - - begin - if Value.has_key?('rules') and not Value['rules'].to_a.empty? then - if Value['rules'].to_a.grep(/(?=.*198.18.0)(?=.*REJECT)/).empty? then - Value['rules']=Value['rules'].to_a.insert(0,'IP-CIDR,198.18.0.1/16,REJECT,no-resolve') - end - else - Value['rules']=%w(IP-CIDR,198.18.0.1/16,REJECT,no-resolve) - end; - rescue Exception => e - puts '${LOGTIME} Error: Set 198.18.0.1/16 REJECT Rule Error,【' + e.message + '】' - end - - begin - if $5 == 1 then - Value['rules']=Value['rules'].to_a.insert(1, - 'DOMAIN-SUFFIX,awesome-hd.me,DIRECT', - 'DOMAIN-SUFFIX,broadcasthe.net,DIRECT', - 'DOMAIN-SUFFIX,chdbits.co,DIRECT', - 'DOMAIN-SUFFIX,classix-unlimited.co.uk,DIRECT', - 'DOMAIN-SUFFIX,empornium.me,DIRECT', - 'DOMAIN-SUFFIX,gazellegames.net,DIRECT', - 'DOMAIN-SUFFIX,hdchina.org,DIRECT', - 'DOMAIN-SUFFIX,hdsky.me,DIRECT', - 'DOMAIN-SUFFIX,icetorrent.org,DIRECT', - 'DOMAIN-SUFFIX,jpopsuki.eu,DIRECT', - 'DOMAIN-SUFFIX,icetorrent.org,DIRECT', - 'DOMAIN-SUFFIX,keepfrds.com,DIRECT', - 'DOMAIN-SUFFIX,madsrevolution.net,DIRECT', - 'DOMAIN-SUFFIX,m-team.cc,DIRECT', - 'DOMAIN-SUFFIX,nanyangpt.com,DIRECT', - 'DOMAIN-SUFFIX,ncore.cc,DIRECT', - 'DOMAIN-SUFFIX,open.cd,DIRECT', - 'DOMAIN-SUFFIX,ourbits.club,DIRECT', - 'DOMAIN-SUFFIX,passthepopcorn.me,DIRECT', - 'DOMAIN-SUFFIX,privatehd.to,DIRECT', - 'DOMAIN-SUFFIX,redacted.ch,DIRECT', - 'DOMAIN-SUFFIX,springsunday.net,DIRECT', - 'DOMAIN-SUFFIX,tjupt.org,DIRECT', - 'DOMAIN-SUFFIX,totheglory.im,DIRECT', - 'DOMAIN-KEYWORD,announce,DIRECT', - 'DOMAIN-KEYWORD,torrent,DIRECT', - 'DOMAIN-KEYWORD,tracker,DIRECT' - ) - match_group=Value['rules'].grep(/(MATCH|FINAL)/)[0] - if not match_group.nil? then - common_port_group=match_group.split(',')[2] or common_port_group=match_group.split(',')[1] - if not common_port_group.nil? then - ruby_add_index = Value['rules'].index(Value['rules'].grep(/(MATCH|FINAL)/).first) - ruby_add_index ||= -1 - Value['rules']=Value['rules'].to_a.insert(ruby_add_index, - 'DST-PORT,80,' + common_port_group, - 'DST-PORT,443,' + common_port_group, - 'DST-PORT,22,' + common_port_group - ) - end - end - Value['rules'].to_a.collect!{|x|x.to_s.gsub(/(^MATCH.*|^FINAL.*)/, 'MATCH,DIRECT')} - end; - rescue Exception => e - puts '${LOGTIME} Error: Set BT/P2P DIRECT Rules Error,【' + e.message + '】' - ensure - File.open('$4','w') {|f| YAML.dump(Value, f)} - end" 2>/dev/null >> $LOG_FILE -} - -yml_other_rules_get() -{ - local section="$1" - local enabled config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ] || [ "$config" != "$2" ]; then - return - fi - - if [ -n "$rule_name" ]; then - LOG_OUT "Warrning: Multiple Other-Rules-Configurations Enabled, Ignore..." - return - fi - - config_get "rule_name" "$section" "rule_name" "" - config_get "GlobalTV" "$section" "GlobalTV" "" - config_get "AsianTV" "$section" "AsianTV" "" - config_get "Proxy" "$section" "Proxy" "" - config_get "Youtube" "$section" "Youtube" "" - config_get "Bilibili" "$section" "Bilibili" "" - config_get "Bahamut" "$section" "Bahamut" "" - config_get "HBOMax" "$section" "HBOMax" "$GlobalTV" - config_get "HBOGo" "$section" "HBOGo" "$GlobalTV" - config_get "Pornhub" "$section" "Pornhub" "" - config_get "Apple" "$section" "Apple" "" - config_get "Scholar" "$section" "Scholar" "" - config_get "Netflix" "$section" "Netflix" "" - config_get "Disney" "$section" "Disney" "" - config_get "Spotify" "$section" "Spotify" "" - config_get "Steam" "$section" "Steam" "" - config_get "AdBlock" "$section" "AdBlock" "" - config_get "Netease_Music" "$section" "Netease_Music" "" - config_get "Speedtest" "$section" "Speedtest" "" - config_get "Telegram" "$section" "Telegram" "" - config_get "Microsoft" "$section" "Microsoft" "" - config_get "PayPal" "$section" "PayPal" "" - config_get "Domestic" "$section" "Domestic" "" - config_get "Others" "$section" "Others" "" - config_get "GoogleFCM" "$section" "GoogleFCM" "DIRECT" -} - -if [ "$2" != "0" ]; then - /usr/share/openclash/yml_groups_name_get.sh - if [ $? -ne 0 ]; then - LOG_OUT "Error: Unable To Parse Config File, Please Check And Try Again!" - exit 0 - fi - config_load "openclash" - config_foreach yml_other_rules_get "other_rules" "$6" - if [ -z "$rule_name" ]; then - yml_other_set "$1" "$2" "$3" "$4" "$5" - exit 0 - #判断策略组是否存在 - elif [ "$rule_name" = "ConnersHua_return" ]; then - if [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ];then - LOG_OUT "Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!" - yml_other_set "$1" "$2" "$3" "$4" "$5" - exit 0 - fi - elif [ "$rule_name" = "ConnersHua" ]; then - if [ -z "$(grep "$GlobalTV" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$AsianTV" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Domestic" /tmp/Proxy_Group)" ]; then - LOG_OUT "Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!" - yml_other_set "$1" "$2" "$3" "$4" "$5" - exit 0 - fi - elif [ "$rule_name" = "lhie1" ]; then - if [ -z "$(grep -F "$GlobalTV" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$AsianTV" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Youtube" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Bilibili" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Bahamut" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$HBOMax" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$HBOGo" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Pornhub" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Apple" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Scholar" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Netflix" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Disney" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Spotify" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Steam" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$AdBlock" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Speedtest" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Telegram" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Microsoft" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$PayPal" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$GoogleFCM" /tmp/Proxy_Group)" ]\ - || [ -z "$(grep -F "$Domestic" /tmp/Proxy_Group)" ]; then - LOG_OUT "Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!" - yml_other_set "$1" "$2" "$3" "$4" "$5" - exit 0 - fi - fi - if [ -z "$Proxy" ]; then - LOG_OUT "Error: Missing Porxy-Group's Name, Stop Setting The Other Rules!" - yml_other_set "$1" "$2" "$3" "$4" "$5" - exit 0 - else - #删除原有的部分,防止冲突 - if [ -n "$(ruby_read "$4" "['script']")" ]; then - ruby_edit "$4" ".delete('script')" - fi - if [ -n "$(ruby_read "$4" "['rules']")" ]; then - ruby_edit "$4" ".delete('rules')" - fi - if [ "$rule_name" = "lhie1" ]; then - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$4'); - Value_1 = YAML.load_file('/usr/share/openclash/res/lhie1.yaml'); - if Value_1.has_key?('rule-providers') and not Value_1['rule-providers'].to_a.empty? then - if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then - Value['rule-providers'].merge!(Value_1['rule-providers']) - else - Value['rule-providers']=Value_1['rule-providers'] - end - end; - Value['script']=Value_1['script']; - Value['rules']=Value_1['rules']; - Value['rules'].to_a.collect!{|x| - x.to_s.gsub(/,Bilibili,Asian TV$/, ',Bilibili,$Bilibili#d') - .gsub(/,Bahamut,Global TV$/, ',Bahamut,$Bahamut#d') - .gsub(/,HBO Max,Global TV$/, ',HBO Max,$HBOMax#d') - .gsub(/,HBO Go,Global TV$/, ',HBO Go,$HBOGo#d') - .gsub(/,Pornhub,Global TV$/, ',Pornhub,$Pornhub#d') - .gsub(/,Global TV$/, ',$GlobalTV#d') - .gsub(/,Asian TV$/, ',$AsianTV#d') - .gsub(/,Proxy$/, ',$Proxy#d') - .gsub(/,YouTube$/, ',$Youtube#d') - .gsub(/,Apple$/, ',$Apple#d') - .gsub(/,Scholar$/, ',$Scholar#d') - .gsub(/,Netflix$/, ',$Netflix#d') - .gsub(/,Disney$/, ',$Disney#d') - .gsub(/,Spotify$/, ',$Spotify#d') - .gsub(/,Steam$/, ',$Steam#d') - .gsub(/,AdBlock$/, ',$AdBlock#d') - .gsub(/,Speedtest$/, ',$Speedtest#d') - .gsub(/,Telegram$/, ',$Telegram#d') - .gsub(/,Microsoft$/, ',$Microsoft#d') - .to_s.gsub(/,PayPal$/, ',$PayPal#d') - .gsub(/,Domestic$/, ',$Domestic#d') - .gsub(/,Others$/, ',$Others#d') - .gsub(/,Google FCM$/, ',$GoogleFCM#d') - .gsub(/#d/, '') - }; - Value['script']['code'].to_s.gsub!(/\"Bilibili\": \"Asian TV\"/,'\"Bilibili\": \"$Bilibili#d\"') - .gsub!(/\"Bahamut\": \"Global TV\"/,'\"Bahamut\": \"$Bahamut#d\"') - .gsub!(/\"HBO Max\": \"Global TV\"/,'\"HBO Max\": \"$HBOMax#d\"') - .gsub!(/\"HBO Go\": \"Global TV\"/,'\"HBO Go\": \"$HBOGo#d\"') - .gsub!(/\"Pornhub\": \"Global TV\"/,'\"Pornhub\": \"$Pornhub#d\"') - .gsub!(/: \"Global TV\"/,': \"$GlobalTV#d\"') - .gsub!(/: \"Asian TV\"/,': \"$AsianTV#d\"') - .gsub!(/: \"Proxy\"/,': \"$Proxy#d\"') - .gsub!(/: \"YouTube\"/,': \"$Youtube#d\"') - .gsub!(/: \"Apple\"/,': \"$Apple#d\"') - .gsub!(/: \"Scholar\"/,': \"$Scholar#d\"') - .gsub!(/: \"Netflix\"/,': \"$Netflix#d\"') - .gsub!(/: \"Disney\"/,': \"$Disney#d\"') - .gsub!(/: \"Spotify\"/,': \"$Spotify#d\"') - .gsub!(/: \"Steam\"/,': \"$Steam#d\"') - .gsub!(/: \"AdBlock\"/,': \"$AdBlock#d\"') - .gsub!(/: \"Speedtest\"/,': \"$Speedtest#d\"') - .gsub!(/: \"Telegram\"/,': \"$Telegram#d\"') - .gsub!(/: \"Microsoft\"/,': \"$Microsoft#d\"') - .gsub!(/: \"PayPal\"/,': \"$PayPal#d\"') - .gsub!(/: \"Domestic\"/,': \"$Domestic#d\"') - .gsub!(/: \"Google FCM\"/,': \"$GoogleFCM#d\"') - .gsub!(/return \"Domestic\"$/, 'return \"$Domestic#d\"') - .gsub!(/return \"Others\"$/, 'return \"$Others#d\"') - .gsub!(/#d/, ''); - File.open('$4','w') {|f| YAML.dump(Value, f)}; - rescue Exception => e - puts '${LOGTIME} Error: Set lhie1 Rules Error,【' + e.message + '】' - end" 2>/dev/null >> $LOG_FILE - elif [ "$rule_name" = "ConnersHua" ]; then - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$4'); - Value_1 = YAML.load_file('/usr/share/openclash/res/ConnersHua.yaml'); - if Value_1.has_key?('rule-providers') and not Value_1['rule-providers'].to_a.empty? then - if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then - Value['rule-providers'].merge!(Value_1['rule-providers']) - else - Value['rule-providers']=Value_1['rule-providers'] - end - end; - Value['rules']=Value_1['rules']; - Value['rules'].to_a.collect!{|x| - x.to_s.gsub(/,Streaming$/, ',$GlobalTV#d') - .gsub(/,StreamingSE$/, ',$AsianTV#d') - .gsub(/(,PROXY$|,IP-Blackhole$)/, ',$Proxy#d') - .gsub(/,China,DIRECT$/, ',China,$Domestic#d') - .gsub(/,ChinaIP,DIRECT$/, ',ChinaIP,$Domestic#d') - .gsub(/,CN,DIRECT$/, ',CN,$Domestic#d') - .gsub(/,MATCH$/, ',$Others#d') - .gsub(/#d/, '') - }; - File.open('$4','w') {|f| YAML.dump(Value, f)}; - rescue Exception => e - puts '${LOGTIME} Error: Set ConnersHua Rules Error,【' + e.message + '】' - end" 2>/dev/null >> $LOG_FILE - else - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$4'); - Value_1 = YAML.load_file('/usr/share/openclash/res/ConnersHua_return.yaml'); - Value['rules']=Value_1['rules']; - Value['rules'].to_a.collect!{|x| - x.to_s.gsub(/,PROXY$/, ',$Proxy#d') - .gsub(/MATCH,DIRECT$/, 'MATCH,$Others#d') - .gsub(/#d/, '') - }; - File.open('$4','w') {|f| YAML.dump(Value, f)}; - rescue Exception => e - puts '${LOGTIME} Error: Set ConnersHua Return Rules Error,【' + e.message + '】' - end" 2>/dev/null >> $LOG_FILE - fi - fi -fi - -yml_other_set "$1" "$2" "$3" "$4" "$5" diff --git a/luci-app-openclash/root/usr/share/rpcd/acl.d/luci-app-openclash.json b/luci-app-openclash/root/usr/share/rpcd/acl.d/luci-app-openclash.json deleted file mode 100644 index 8214de21..00000000 --- a/luci-app-openclash/root/usr/share/rpcd/acl.d/luci-app-openclash.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-openclash": { - "description": "Grant UCI access for luci-app-openclash", - "read": { - "uci": [ "openclash" ] - }, - "write": { - "uci": [ "openclash" ] - } - } -} \ No newline at end of file diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/dialog/dialog.css b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/dialog/dialog.css deleted file mode 100644 index 677c0783..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/dialog/dialog.css +++ /dev/null @@ -1,32 +0,0 @@ -.CodeMirror-dialog { - position: absolute; - left: 0; right: 0; - background: inherit; - z-index: 15; - padding: .1em .8em; - overflow: hidden; - color: inherit; -} - -.CodeMirror-dialog-top { - border-bottom: 1px solid #eee; - top: 0; -} - -.CodeMirror-dialog-bottom { - border-top: 1px solid #eee; - bottom: 0; -} - -.CodeMirror-dialog input { - border: none; - outline: none; - background: transparent; - width: 20em; - color: inherit; - font-family: monospace; -} - -.CodeMirror-dialog button { - font-size: 70%; -} diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/dialog/dialog.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/dialog/dialog.js deleted file mode 100644 index 5f1f4aa4..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/dialog/dialog.js +++ /dev/null @@ -1,163 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -// Open simple dialogs on top of an editor. Relies on dialog.css. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - function dialogDiv(cm, template, bottom) { - var wrap = cm.getWrapperElement(); - var dialog; - dialog = wrap.appendChild(document.createElement("div")); - if (bottom) - dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; - else - dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; - - if (typeof template == "string") { - dialog.innerHTML = template; - } else { // Assuming it's a detached DOM element. - dialog.appendChild(template); - } - CodeMirror.addClass(wrap, 'dialog-opened'); - return dialog; - } - - function closeNotification(cm, newVal) { - if (cm.state.currentNotificationClose) - cm.state.currentNotificationClose(); - cm.state.currentNotificationClose = newVal; - } - - CodeMirror.defineExtension("openDialog", function(template, callback, options) { - if (!options) options = {}; - - closeNotification(this, null); - - var dialog = dialogDiv(this, template, options.bottom); - var closed = false, me = this; - function close(newVal) { - if (typeof newVal == 'string') { - inp.value = newVal; - } else { - if (closed) return; - closed = true; - CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); - dialog.parentNode.removeChild(dialog); - me.focus(); - - if (options.onClose) options.onClose(dialog); - } - } - - var inp = dialog.getElementsByTagName("input")[0], button; - if (inp) { - inp.focus(); - - if (options.value) { - inp.value = options.value; - if (options.selectValueOnOpen !== false) { - inp.select(); - } - } - - if (options.onInput) - CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);}); - if (options.onKeyUp) - CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); - - CodeMirror.on(inp, "keydown", function(e) { - if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } - if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) { - inp.blur(); - CodeMirror.e_stop(e); - close(); - } - if (e.keyCode == 13) callback(inp.value, e); - }); - - if (options.closeOnBlur !== false) CodeMirror.on(dialog, "focusout", function (evt) { - if (evt.relatedTarget !== null) close(); - }); - } else if (button = dialog.getElementsByTagName("button")[0]) { - CodeMirror.on(button, "click", function() { - close(); - me.focus(); - }); - - if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); - - button.focus(); - } - return close; - }); - - CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { - closeNotification(this, null); - var dialog = dialogDiv(this, template, options && options.bottom); - var buttons = dialog.getElementsByTagName("button"); - var closed = false, me = this, blurring = 1; - function close() { - if (closed) return; - closed = true; - CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); - dialog.parentNode.removeChild(dialog); - me.focus(); - } - buttons[0].focus(); - for (var i = 0; i < buttons.length; ++i) { - var b = buttons[i]; - (function(callback) { - CodeMirror.on(b, "click", function(e) { - CodeMirror.e_preventDefault(e); - close(); - if (callback) callback(me); - }); - })(callbacks[i]); - CodeMirror.on(b, "blur", function() { - --blurring; - setTimeout(function() { if (blurring <= 0) close(); }, 200); - }); - CodeMirror.on(b, "focus", function() { ++blurring; }); - } - }); - - /* - * openNotification - * Opens a notification, that can be closed with an optional timer - * (default 5000ms timer) and always closes on click. - * - * If a notification is opened while another is opened, it will close the - * currently opened one and open the new one immediately. - */ - CodeMirror.defineExtension("openNotification", function(template, options) { - closeNotification(this, close); - var dialog = dialogDiv(this, template, options && options.bottom); - var closed = false, doneTimer; - var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; - - function close() { - if (closed) return; - closed = true; - clearTimeout(doneTimer); - CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); - dialog.parentNode.removeChild(dialog); - } - - CodeMirror.on(dialog, 'click', function(e) { - CodeMirror.e_preventDefault(e); - close(); - }); - - if (duration) - doneTimer = setTimeout(close, duration); - - return close; - }); -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/autorefresh.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/autorefresh.js deleted file mode 100644 index 37014dc3..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/autorefresh.js +++ /dev/null @@ -1,47 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")) - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod) - else // Plain browser env - mod(CodeMirror) -})(function(CodeMirror) { - "use strict" - - CodeMirror.defineOption("autoRefresh", false, function(cm, val) { - if (cm.state.autoRefresh) { - stopListening(cm, cm.state.autoRefresh) - cm.state.autoRefresh = null - } - if (val && cm.display.wrapper.offsetHeight == 0) - startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250}) - }) - - function startListening(cm, state) { - function check() { - if (cm.display.wrapper.offsetHeight) { - stopListening(cm, state) - if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight) - cm.refresh() - } else { - state.timeout = setTimeout(check, state.delay) - } - } - state.timeout = setTimeout(check, state.delay) - state.hurry = function() { - clearTimeout(state.timeout) - state.timeout = setTimeout(check, 50) - } - CodeMirror.on(window, "mouseup", state.hurry) - CodeMirror.on(window, "keyup", state.hurry) - } - - function stopListening(_cm, state) { - clearTimeout(state.timeout) - CodeMirror.off(window, "mouseup", state.hurry) - CodeMirror.off(window, "keyup", state.hurry) - } -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/fullscreen.css b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/fullscreen.css deleted file mode 100644 index 437acd89..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/fullscreen.css +++ /dev/null @@ -1,6 +0,0 @@ -.CodeMirror-fullscreen { - position: fixed; - top: 0; left: 0; right: 0; bottom: 0; - height: auto; - z-index: 9; -} diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/fullscreen.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/fullscreen.js deleted file mode 100644 index eda7300f..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/fullscreen.js +++ /dev/null @@ -1,41 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { - if (old == CodeMirror.Init) old = false; - if (!old == !val) return; - if (val) setFullscreen(cm); - else setNormal(cm); - }); - - function setFullscreen(cm) { - var wrap = cm.getWrapperElement(); - cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, - width: wrap.style.width, height: wrap.style.height}; - wrap.style.width = ""; - wrap.style.height = "auto"; - wrap.className += " CodeMirror-fullscreen"; - document.documentElement.style.overflow = "hidden"; - cm.refresh(); - } - - function setNormal(cm) { - var wrap = cm.getWrapperElement(); - wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); - document.documentElement.style.overflow = ""; - var info = cm.state.fullScreenRestore; - wrap.style.width = info.width; wrap.style.height = info.height; - window.scrollTo(info.scrollLeft, info.scrollTop); - cm.refresh(); - } -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/edit/matchbrackets.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/edit/matchbrackets.js deleted file mode 100644 index 43dc8840..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/edit/matchbrackets.js +++ /dev/null @@ -1,160 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && - (document.documentMode == null || document.documentMode < 8); - - var Pos = CodeMirror.Pos; - - var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<", "<": ">>", ">": "<<"}; - - function bracketRegex(config) { - return config && config.bracketRegex || /[(){}[\]]/ - } - - function findMatchingBracket(cm, where, config) { - var line = cm.getLineHandle(where.line), pos = where.ch - 1; - var afterCursor = config && config.afterCursor - if (afterCursor == null) - afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className) - var re = bracketRegex(config) - - // A cursor is defined as between two characters, but in in vim command mode - // (i.e. not insert mode), the cursor is visually represented as a - // highlighted box on top of the 2nd character. Otherwise, we allow matches - // from before or after the cursor. - var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) || - re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)]; - if (!match) return null; - var dir = match.charAt(1) == ">" ? 1 : -1; - if (config && config.strict && (dir > 0) != (pos == where.ch)) return null; - var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); - - var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config); - if (found == null) return null; - return {from: Pos(where.line, pos), to: found && found.pos, - match: found && found.ch == match.charAt(0), forward: dir > 0}; - } - - // bracketRegex is used to specify which type of bracket to scan - // should be a regexp, e.g. /[[\]]/ - // - // Note: If "where" is on an open bracket, then this bracket is ignored. - // - // Returns false when no bracket was found, null when it reached - // maxScanLines and gave up - function scanForBracket(cm, where, dir, style, config) { - var maxScanLen = (config && config.maxScanLineLength) || 10000; - var maxScanLines = (config && config.maxScanLines) || 1000; - - var stack = []; - var re = bracketRegex(config) - var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) - : Math.max(cm.firstLine() - 1, where.line - maxScanLines); - for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { - var line = cm.getLine(lineNo); - if (!line) continue; - var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1; - if (line.length > maxScanLen) continue; - if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); - for (; pos != end; pos += dir) { - var ch = line.charAt(pos); - if (re.test(ch) && (style === undefined || - (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || "") == (style || ""))) { - var match = matching[ch]; - if (match && (match.charAt(1) == ">") == (dir > 0)) stack.push(ch); - else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; - else stack.pop(); - } - } - } - return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; - } - - function matchBrackets(cm, autoclear, config) { - // Disable brace matching in long lines, since it'll cause hugely slow updates - var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000, - highlightNonMatching = config && config.highlightNonMatching; - var marks = [], ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config); - if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) { - var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; - marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style})); - if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) - marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style})); - } - } - - if (marks.length) { - // Kludge to work around the IE bug from issue #1193, where text - // input stops going to the textarea whenever this fires. - if (ie_lt8 && cm.state.focused) cm.focus(); - - var clear = function() { - cm.operation(function() { - for (var i = 0; i < marks.length; i++) marks[i].clear(); - }); - }; - if (autoclear) setTimeout(clear, 800); - else return clear; - } - } - - function doMatchBrackets(cm) { - cm.operation(function() { - if (cm.state.matchBrackets.currentlyHighlighted) { - cm.state.matchBrackets.currentlyHighlighted(); - cm.state.matchBrackets.currentlyHighlighted = null; - } - cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); - }); - } - - function clearHighlighted(cm) { - if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) { - cm.state.matchBrackets.currentlyHighlighted(); - cm.state.matchBrackets.currentlyHighlighted = null; - } - } - - CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.off("cursorActivity", doMatchBrackets); - cm.off("focus", doMatchBrackets) - cm.off("blur", clearHighlighted) - clearHighlighted(cm); - } - if (val) { - cm.state.matchBrackets = typeof val == "object" ? val : {}; - cm.on("cursorActivity", doMatchBrackets); - cm.on("focus", doMatchBrackets) - cm.on("blur", clearHighlighted) - } - }); - - CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); - CodeMirror.defineExtension("findMatchingBracket", function(pos, config, oldConfig){ - // Backwards-compatibility kludge - if (oldConfig || typeof config == "boolean") { - if (!oldConfig) { - config = config ? {strict: true} : null - } else { - oldConfig.strict = config - config = oldConfig - } - } - return findMatchingBracket(this, pos, config) - }); - CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ - return scanForBracket(this, pos, dir, style, config); - }); -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldcode.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldcode.js deleted file mode 100644 index 721bc087..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldcode.js +++ /dev/null @@ -1,159 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - function doFold(cm, pos, options, force) { - if (options && options.call) { - var finder = options; - options = null; - } else { - var finder = getOption(cm, options, "rangeFinder"); - } - if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); - var minSize = getOption(cm, options, "minFoldSize"); - - function getRange(allowFolded) { - var range = finder(cm, pos); - if (!range || range.to.line - range.from.line < minSize) return null; - if (force === "fold") return range; - - var marks = cm.findMarksAt(range.from); - for (var i = 0; i < marks.length; ++i) { - if (marks[i].__isFold) { - if (!allowFolded) return null; - range.cleared = true; - marks[i].clear(); - } - } - return range; - } - - var range = getRange(true); - if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { - pos = CodeMirror.Pos(pos.line - 1, 0); - range = getRange(false); - } - if (!range || range.cleared || force === "unfold") return; - - var myWidget = makeWidget(cm, options, range); - CodeMirror.on(myWidget, "mousedown", function(e) { - myRange.clear(); - CodeMirror.e_preventDefault(e); - }); - var myRange = cm.markText(range.from, range.to, { - replacedWith: myWidget, - clearOnEnter: getOption(cm, options, "clearOnEnter"), - __isFold: true - }); - myRange.on("clear", function(from, to) { - CodeMirror.signal(cm, "unfold", cm, from, to); - }); - CodeMirror.signal(cm, "fold", cm, range.from, range.to); - } - - function makeWidget(cm, options, range) { - var widget = getOption(cm, options, "widget"); - - if (typeof widget == "function") { - widget = widget(range.from, range.to); - } - - if (typeof widget == "string") { - var text = document.createTextNode(widget); - widget = document.createElement("span"); - widget.appendChild(text); - widget.className = "CodeMirror-foldmarker"; - } else if (widget) { - widget = widget.cloneNode(true) - } - return widget; - } - - // Clumsy backwards-compatible interface - CodeMirror.newFoldFunction = function(rangeFinder, widget) { - return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); }; - }; - - // New-style interface - CodeMirror.defineExtension("foldCode", function(pos, options, force) { - doFold(this, pos, options, force); - }); - - CodeMirror.defineExtension("isFolded", function(pos) { - var marks = this.findMarksAt(pos); - for (var i = 0; i < marks.length; ++i) - if (marks[i].__isFold) return true; - }); - - CodeMirror.commands.toggleFold = function(cm) { - cm.foldCode(cm.getCursor()); - }; - CodeMirror.commands.fold = function(cm) { - cm.foldCode(cm.getCursor(), null, "fold"); - }; - CodeMirror.commands.unfold = function(cm) { - cm.foldCode(cm.getCursor(), { scanUp: false }, "unfold"); - }; - CodeMirror.commands.foldAll = function(cm) { - cm.operation(function() { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) - cm.foldCode(CodeMirror.Pos(i, 0), { scanUp: false }, "fold"); - }); - }; - CodeMirror.commands.unfoldAll = function(cm) { - cm.operation(function() { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) - cm.foldCode(CodeMirror.Pos(i, 0), { scanUp: false }, "unfold"); - }); - }; - - CodeMirror.registerHelper("fold", "combine", function() { - var funcs = Array.prototype.slice.call(arguments, 0); - return function(cm, start) { - for (var i = 0; i < funcs.length; ++i) { - var found = funcs[i](cm, start); - if (found) return found; - } - }; - }); - - CodeMirror.registerHelper("fold", "auto", function(cm, start) { - var helpers = cm.getHelpers(start, "fold"); - for (var i = 0; i < helpers.length; i++) { - var cur = helpers[i](cm, start); - if (cur) return cur; - } - }); - - var defaultOptions = { - rangeFinder: CodeMirror.fold.auto, - widget: "\u2194", - minFoldSize: 0, - scanUp: false, - clearOnEnter: true - }; - - CodeMirror.defineOption("foldOptions", null); - - function getOption(cm, options, name) { - if (options && options[name] !== undefined) - return options[name]; - var editorOptions = cm.options.foldOptions; - if (editorOptions && editorOptions[name] !== undefined) - return editorOptions[name]; - return defaultOptions[name]; - } - - CodeMirror.defineExtension("foldOption", function(options, name) { - return getOption(this, options, name); - }); -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldgutter.css b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldgutter.css deleted file mode 100644 index ad19ae2d..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldgutter.css +++ /dev/null @@ -1,20 +0,0 @@ -.CodeMirror-foldmarker { - color: blue; - text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; - font-family: arial; - line-height: .3; - cursor: pointer; -} -.CodeMirror-foldgutter { - width: .7em; -} -.CodeMirror-foldgutter-open, -.CodeMirror-foldgutter-folded { - cursor: pointer; -} -.CodeMirror-foldgutter-open:after { - content: "\25BE"; -} -.CodeMirror-foldgutter-folded:after { - content: "\25B8"; -} diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldgutter.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldgutter.js deleted file mode 100644 index 7d46a609..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldgutter.js +++ /dev/null @@ -1,163 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./foldcode")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./foldcode"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("foldGutter", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.clearGutter(cm.state.foldGutter.options.gutter); - cm.state.foldGutter = null; - cm.off("gutterClick", onGutterClick); - cm.off("changes", onChange); - cm.off("viewportChange", onViewportChange); - cm.off("fold", onFold); - cm.off("unfold", onFold); - cm.off("swapDoc", onChange); - } - if (val) { - cm.state.foldGutter = new State(parseOptions(val)); - updateInViewport(cm); - cm.on("gutterClick", onGutterClick); - cm.on("changes", onChange); - cm.on("viewportChange", onViewportChange); - cm.on("fold", onFold); - cm.on("unfold", onFold); - cm.on("swapDoc", onChange); - } - }); - - var Pos = CodeMirror.Pos; - - function State(options) { - this.options = options; - this.from = this.to = 0; - } - - function parseOptions(opts) { - if (opts === true) opts = {}; - if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; - if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; - if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; - return opts; - } - - function isFolded(cm, line) { - var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0)); - for (var i = 0; i < marks.length; ++i) { - if (marks[i].__isFold) { - var fromPos = marks[i].find(-1); - if (fromPos && fromPos.line === line) - return marks[i]; - } - } - } - - function marker(spec) { - if (typeof spec == "string") { - var elt = document.createElement("div"); - elt.className = spec + " CodeMirror-guttermarker-subtle"; - return elt; - } else { - return spec.cloneNode(true); - } - } - - function updateFoldInfo(cm, from, to) { - var opts = cm.state.foldGutter.options, cur = from - 1; - var minSize = cm.foldOption(opts, "minFoldSize"); - var func = cm.foldOption(opts, "rangeFinder"); - // we can reuse the built-in indicator element if its className matches the new state - var clsFolded = typeof opts.indicatorFolded == "string" && classTest(opts.indicatorFolded); - var clsOpen = typeof opts.indicatorOpen == "string" && classTest(opts.indicatorOpen); - cm.eachLine(from, to, function(line) { - ++cur; - var mark = null; - var old = line.gutterMarkers; - if (old) old = old[opts.gutter]; - if (isFolded(cm, cur)) { - if (clsFolded && old && clsFolded.test(old.className)) return; - mark = marker(opts.indicatorFolded); - } else { - var pos = Pos(cur, 0); - var range = func && func(cm, pos); - if (range && range.to.line - range.from.line >= minSize) { - if (clsOpen && old && clsOpen.test(old.className)) return; - mark = marker(opts.indicatorOpen); - } - } - if (!mark && !old) return; - cm.setGutterMarker(line, opts.gutter, mark); - }); - } - - // copied from CodeMirror/src/util/dom.js - function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } - - function updateInViewport(cm) { - var vp = cm.getViewport(), state = cm.state.foldGutter; - if (!state) return; - cm.operation(function() { - updateFoldInfo(cm, vp.from, vp.to); - }); - state.from = vp.from; state.to = vp.to; - } - - function onGutterClick(cm, line, gutter) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - if (gutter != opts.gutter) return; - var folded = isFolded(cm, line); - if (folded) folded.clear(); - else cm.foldCode(Pos(line, 0), opts); - } - - function onChange(cm) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - state.from = state.to = 0; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600); - } - - function onViewportChange(cm) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function() { - var vp = cm.getViewport(); - if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { - updateInViewport(cm); - } else { - cm.operation(function() { - if (vp.from < state.from) { - updateFoldInfo(cm, vp.from, state.from); - state.from = vp.from; - } - if (vp.to > state.to) { - updateFoldInfo(cm, state.to, vp.to); - state.to = vp.to; - } - }); - } - }, opts.updateViewportTimeSpan || 400); - } - - function onFold(cm, from) { - var state = cm.state.foldGutter; - if (!state) return; - var line = from.line; - if (line >= state.from && line < state.to) - updateFoldInfo(cm, line, line + 1); - } -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/indent-fold.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/indent-fold.js deleted file mode 100644 index 0cc11264..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/indent-fold.js +++ /dev/null @@ -1,48 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -function lineIndent(cm, lineNo) { - var text = cm.getLine(lineNo) - var spaceTo = text.search(/\S/) - if (spaceTo == -1 || /\bcomment\b/.test(cm.getTokenTypeAt(CodeMirror.Pos(lineNo, spaceTo + 1)))) - return -1 - return CodeMirror.countColumn(text, null, cm.getOption("tabSize")) -} - -CodeMirror.registerHelper("fold", "indent", function(cm, start) { - var myIndent = lineIndent(cm, start.line) - if (myIndent < 0) return - var lastLineInFold = null - - // Go through lines until we find a line that definitely doesn't belong in - // the block we're folding, or to the end. - for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { - var indent = lineIndent(cm, i) - if (indent == -1) { - } else if (indent > myIndent) { - // Lines with a greater indent are considered part of the block. - lastLineInFold = i; - } else { - // If this line has non-space, non-comment content, and is - // indented less or equal to the start line, it is the start of - // another block. - break; - } - } - if (lastLineInFold) return { - from: CodeMirror.Pos(start.line, cm.getLine(start.line).length), - to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) - }; -}); - -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/js-yaml.min.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/js-yaml.min.js deleted file mode 100644 index bdd8eef5..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/js-yaml.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jsyaml={})}(this,(function(e){"use strict";function t(e){return null==e}var n={isNothing:t,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:t(e)?[]:[e]},repeat:function(e,t){var n,i="";for(n=0;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var c=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,o=[0],c=[],s=-1;i=r.exec(e.buffer);)c.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=o.length-2);s<0&&(s=o.length-1);var u,p,f="",d=Math.min(e.line+t.linesAfter,c.length).toString().length,h=t.maxLength-(t.indent+d+3);for(u=1;u<=t.linesBefore&&!(s-u<0);u++)p=a(e.buffer,o[s-u],c[s-u],e.position-(o[s]-o[s-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f;for(p=a(e.buffer,o[s],c[s],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(s+u>=c.length);u++)p=a(e.buffer,o[s+u],c[s+u],e.position-(o[s]-o[s+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n";return f.replace(/\n$/,"")},s=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"];var p=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===s.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function f(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)})),n[t]=e})),n}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[];if(e instanceof p)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var i=Object.create(d.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit"),i.compiledExplicit=f(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),x=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var I=/^[-+]?[0-9]+e/;var S=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!x.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0";return i=e.toString(10),I.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),O=b.extend({implicit:[A,v,C,S]}),j=O,T=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var F=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==T.exec(e)||null!==N.exec(e))},construct:function(e){var t,n,i,r,o,a,l,c,s=0,u=null;if(null===(t=T.exec(e))&&(t=N.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(s=t[7].slice(0,3);s.length<3;)s+="0";s=+s}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),c=new Date(Date.UTC(n,i,r,o,a,l,s)),u&&c.setTime(c.getTime()-u),c},instanceOf:Date,represent:function(e){return e.toISOString()}});var E=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var L=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=M;for(n=0;n64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=M,a=0,l=[];for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=M;for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),_=Object.prototype.hasOwnProperty,D=Object.prototype.toString;var U=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],l=e;for(t=0,n=l.length;t>10),56320+(e-65536&1023))}for(var ie=new Array(256),re=new Array(256),oe=0;oe<256;oe++)ie[oe]=te(oe)?1:0,re[oe]=te(oe);function ae(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||K,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function le(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=c(n),new o(t,n)}function ce(e,t){throw le(e,t)}function se(e,t){e.onWarning&&e.onWarning.call(null,le(e,t))}var ue={YAML:function(e,t,n){var i,r,o;null!==e.version&&ce(e,"duplication of %YAML directive"),1!==n.length&&ce(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&ce(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&ce(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&se(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&ce(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],G.test(i)||ce(e,"ill-formed tag handle (first argument) of the TAG directive"),P.call(e.tagMap,i)&&ce(e,'there is a previously declared suffix for "'+i+'" tag handle'),V.test(r)||ce(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(t){ce(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function pe(e,t,n,i){var r,o,a,l;if(t1&&(e.result+=n.repeat("\n",t-1))}function be(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,ce(e,"tab characters must not be used in indentation")),45===i)&&z(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,ge(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,we(e,t,3,!1,!0),a.push(e.result),ge(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)ce(e,"bad indentation of a sequence entry");else if(e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,c=e.position),we(e,t,4,!0,r)&&(y?g=e.result:m=e.result),y||(de(e,f,d,h,g,m,a,l,c),h=g=m=null),ge(e,!0,-1),s=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==s)ce(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===o?ce(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?ce(e,"repeat of an indentation width identifier"):(p=t+o-1,u=!0)}if(Q(a)){do{a=e.input.charCodeAt(++e.position)}while(Q(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!J(a)&&0!==a)}for(;0!==a;){for(he(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),J(a))f++;else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=ee(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:ce(e,"expected hexadecimal character");e.result+=ne(o),e.position++}else ce(e,"unknown escape sequence");n=i=e.position}else J(l)?(pe(e,n,i,!0),ye(e,ge(e,!1,t)),n=i=e.position):e.position===e.lineStart&&me(e)?ce(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}ce(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!z(i)&&!X(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&ce(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),P.call(e.anchorMap,n)||ce(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result;if(z(u=e.input.charCodeAt(e.position))||X(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(z(i=e.input.charCodeAt(e.position+1))||n&&X(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(z(i=e.input.charCodeAt(e.position+1))||n&&X(i))break}else if(35===u){if(z(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&me(e)||n&&X(u))break;if(J(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s;break}}a&&(pe(e,r,o,!1),ye(e,e.line-l),r=o=e.position,a=!1),Q(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return pe(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||ce(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===g&&(y=c&&be(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&ce(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&ce(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ce(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function ke(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&ce(e,"directive name must not be less than one character in length");0!==r;){for(;Q(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!J(r));break}if(J(r))break;for(t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&he(e),P.call(ue,n)?ue[n](e,n,i):se(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):a&&ce(e,"directives end mark is expected"),we(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&H.test(e.input.slice(o,e.position))&&se(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&me(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function Re(e){return/^\n* /.test(e)}function Be(e,t,n,i,r,o,a,l){var c,s,u=0,p=null,f=!1,d=!1,h=-1!==i,g=-1,m=De(s=Ye(e,0))&&s!==Oe&&!_e(s)&&45!==s&&63!==s&&58!==s&&44!==s&&91!==s&&93!==s&&123!==s&&125!==s&&35!==s&&38!==s&&42!==s&&33!==s&&124!==s&&61!==s&&62!==s&&39!==s&&34!==s&&37!==s&&64!==s&&96!==s&&function(e){return!_e(e)&&58!==e}(Ye(e,e.length-1));if(t||a)for(c=0;c=65536?c+=2:c++){if(!De(u=Ye(e,c)))return 5;m=m&&qe(u,p,l),p=u}else{for(c=0;c=65536?c+=2:c++){if(10===(u=Ye(e,c)))f=!0,h&&(d=d||c-g-1>i&&" "!==e[g+1],g=c);else if(!De(u))return 5;m=m&&qe(u,p,l),p=u}d=d||h&&c-g-1>i&&" "!==e[g+1]}return f||d?n>9&&Re(e)?5:a?2===o?5:2:d?4:3:!m||a||r(e)?2===o?5:2:1}function Ke(e,t,n,i,r){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Te.indexOf(t)||Ne.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),c=i||e.flowLevel>-1&&n>=e.flowLevel;switch(Be(t,c,e.indent,l,(function(t){return function(e,t){var n,i;for(n=0,i=e.implicitTypes.length;n"+Pe(t,e.indent)+We(Me(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,He(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0];var l;for(;i=r.exec(e);){var c=i[1],s=i[2];n=" "===s[0],o+=c+(a||n||""===s?"":"\n")+He(s,t),a=n}return o}(t,l),a));case 5:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=Ye(e,r),!(t=je[i])&&De(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||Fe(i);return n}(t)+'"';default:throw new o("impossible error: invalid scalar style")}}()}function Pe(e,t){var n=Re(e)?String(t):"",i="\n"===e[e.length-1];return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function We(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function He(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,c="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,c+="\n"+e.slice(o,i),o=i+1),a=l;return c+="\n",e.length-o>t&&a>o?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function $e(e,t,n,i){var r,o,a,l="",c=e.tag;for(r=0,o=n.length;r tag resolver accepts not "'+s+'" style');i=c.represent[s](t,s)}e.dump=i}return!0}return!1}function Ve(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Ge(e,n,!1)||Ge(e,n,!0);var c,s=Ie.call(e.dump),u=i;i&&(i=e.flowLevel<0||e.flowLevel>t);var p,f,d="[object Object]"===s||"[object Array]"===s;if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===s)i&&0!==Object.keys(e.dump).length?(!function(e,t,n,i){var r,a,l,c,s,u,p="",f=e.tag,d=Object.keys(n);if(!0===e.sortKeys)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function");for(r=0,a=d.length;r1024)&&(e.dump&&10===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,s&&(u+=Le(e,t)),Ve(e,t+1,c,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump));e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a,l,c="",s=e.tag,u=Object.keys(n);for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ve(e,t,a,!1,!1)&&(c+=l+=e.dump));e.tag=s,e.dump="{"+c+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump));else if("[object Array]"===s)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?$e(e,t-1,e.dump,r):$e(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a="",l=e.tag;for(i=0,r=n.length;i",e.dump=c+" "+e.dump)}return!0}function Ze(e,t){var n,i,r=[],o=[];for(Je(e,r,o),n=0,i=o.length;n -1 ? false : message.push(item.message) }); - - var maxSeverity = null; - var tipLabel = state.hasGutter && document.createDocumentFragment(); - - for (var i = 0; i < anns.length; ++i) { - var ann = anns[i]; - var severity = ann.severity; - if (!severity) severity = "error"; - maxSeverity = getMaxSeverity(maxSeverity, severity); - - if (options.formatAnnotation) ann = options.formatAnnotation(ann); - if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); - - if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { - className: "CodeMirror-lint-mark CodeMirror-lint-mark-" + severity, - __annotation: ann - })); - } - // use original annotations[line] to show multiple messages - if (state.hasGutter) - cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, annotations[line].length > 1, - options.tooltips)); - - if (options.highlightLines) - cm.addLineClass(line, "wrap", LINT_LINE_ID + maxSeverity); - } - if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); - } - - function onChange(cm) { - var state = cm.state.lint; - if (!state) return; - clearTimeout(state.timeout); - state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay); - } - - function popupTooltips(cm, annotations, e) { - var target = e.target || e.srcElement; - var tooltip = document.createDocumentFragment(); - for (var i = 0; i < annotations.length; i++) { - var ann = annotations[i]; - tooltip.appendChild(annotationTooltip(ann)); - } - showTooltipFor(cm, e, tooltip, target); - } - - function onMouseOver(cm, e) { - var target = e.target || e.srcElement; - if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; - var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2; - var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, "client")); - - var annotations = []; - for (var i = 0; i < spans.length; ++i) { - var ann = spans[i].__annotation; - if (ann) annotations.push(ann); - } - if (annotations.length) popupTooltips(cm, annotations, e); - } - - CodeMirror.defineOption("lint", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - clearMarks(cm); - if (cm.state.lint.options.lintOnChange !== false) - cm.off("change", onChange); - CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); - clearTimeout(cm.state.lint.timeout); - delete cm.state.lint; - } - - if (val) { - var gutters = cm.getOption("gutters"), hasLintGutter = false; - for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; - var state = cm.state.lint = new LintState(cm, val, hasLintGutter); - if (state.options.lintOnChange) - cm.on("change", onChange); - if (state.options.tooltips != false && state.options.tooltips != "gutter") - CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); - - startLinting(cm); - } - }); - - CodeMirror.defineExtension("performLint", function() { - startLinting(this); - }); -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/yaml-lint.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/yaml-lint.js deleted file mode 100644 index b4ac5abc..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/yaml-lint.js +++ /dev/null @@ -1,41 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -// Depends on js-yaml.js from https://github.com/nodeca/js-yaml - -// declare global: jsyaml - -CodeMirror.registerHelper("lint", "yaml", function(text) { - var found = []; - if (!window.jsyaml) { - if (window.console) { - window.console.error("Error: window.jsyaml not defined, CodeMirror YAML linting cannot run."); - } - return found; - } - try { jsyaml.loadAll(text); } - catch(e) { - var loc = e.mark, - // js-yaml YAMLException doesn't always provide an accurate lineno - // e.g., when there are multiple yaml docs - // --- - // --- - // foo:bar - from = loc ? CodeMirror.Pos(loc.line, loc.column) : CodeMirror.Pos(0, 0), - to = from; - found.push({ from: from, to: to, message: e.message }); - } - return found; -}); - -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/scroll/annotatescrollbar.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/scroll/annotatescrollbar.js deleted file mode 100644 index c12e44cd..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/scroll/annotatescrollbar.js +++ /dev/null @@ -1,128 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineExtension("annotateScrollbar", function(options) { - if (typeof options == "string") options = {className: options}; - return new Annotation(this, options); - }); - - CodeMirror.defineOption("scrollButtonHeight", 0); - - function Annotation(cm, options) { - this.cm = cm; - this.options = options; - this.buttonHeight = options.scrollButtonHeight || cm.getOption("scrollButtonHeight"); - this.annotations = []; - this.doRedraw = this.doUpdate = null; - this.div = cm.getWrapperElement().appendChild(document.createElement("div")); - this.div.style.cssText = "position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none"; - this.computeScale(); - - function scheduleRedraw(delay) { - clearTimeout(self.doRedraw); - self.doRedraw = setTimeout(function() { self.redraw(); }, delay); - } - - var self = this; - cm.on("refresh", this.resizeHandler = function() { - clearTimeout(self.doUpdate); - self.doUpdate = setTimeout(function() { - if (self.computeScale()) scheduleRedraw(20); - }, 100); - }); - cm.on("markerAdded", this.resizeHandler); - cm.on("markerCleared", this.resizeHandler); - if (options.listenForChanges !== false) - cm.on("changes", this.changeHandler = function() { - scheduleRedraw(250); - }); - } - - Annotation.prototype.computeScale = function() { - var cm = this.cm; - var hScale = (cm.getWrapperElement().clientHeight - cm.display.barHeight - this.buttonHeight * 2) / - cm.getScrollerElement().scrollHeight - if (hScale != this.hScale) { - this.hScale = hScale; - return true; - } - }; - - Annotation.prototype.update = function(annotations) { - this.annotations = annotations; - this.redraw(); - }; - - Annotation.prototype.redraw = function(compute) { - if (compute !== false) this.computeScale(); - var cm = this.cm, hScale = this.hScale; - - var frag = document.createDocumentFragment(), anns = this.annotations; - - var wrapping = cm.getOption("lineWrapping"); - var singleLineH = wrapping && cm.defaultTextHeight() * 1.5; - var curLine = null, curLineObj = null; - - function getY(pos, top) { - if (curLine != pos.line) { - curLine = pos.line - curLineObj = cm.getLineHandle(pos.line) - var visual = cm.getLineHandleVisualStart(curLineObj) - if (visual != curLineObj) { - curLine = cm.getLineNumber(visual) - curLineObj = visual - } - } - if ((curLineObj.widgets && curLineObj.widgets.length) || - (wrapping && curLineObj.height > singleLineH)) - return cm.charCoords(pos, "local")[top ? "top" : "bottom"]; - var topY = cm.heightAtLine(curLineObj, "local"); - return topY + (top ? 0 : curLineObj.height); - } - - var lastLine = cm.lastLine() - if (cm.display.barWidth) for (var i = 0, nextTop; i < anns.length; i++) { - var ann = anns[i]; - if (ann.to.line > lastLine) continue; - var top = nextTop || getY(ann.from, true) * hScale; - var bottom = getY(ann.to, false) * hScale; - while (i < anns.length - 1) { - if (anns[i + 1].to.line > lastLine) break; - nextTop = getY(anns[i + 1].from, true) * hScale; - if (nextTop > bottom + .9) break; - ann = anns[++i]; - bottom = getY(ann.to, false) * hScale; - } - if (bottom == top) continue; - var height = Math.max(bottom - top, 3); - - var elt = frag.appendChild(document.createElement("div")); - elt.style.cssText = "position: absolute; right: 0px; width: " + Math.max(cm.display.barWidth - 1, 2) + "px; top: " - + (top + this.buttonHeight) + "px; height: " + height + "px"; - elt.className = this.options.className; - if (ann.id) { - elt.setAttribute("annotation-id", ann.id); - } - } - this.div.textContent = ""; - this.div.appendChild(frag); - }; - - Annotation.prototype.clear = function() { - this.cm.off("refresh", this.resizeHandler); - this.cm.off("markerAdded", this.resizeHandler); - this.cm.off("markerCleared", this.resizeHandler); - if (this.changeHandler) this.cm.off("changes", this.changeHandler); - this.div.parentNode.removeChild(this.div); - }; -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/jump-to-line.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/jump-to-line.js deleted file mode 100644 index 990c235e..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/jump-to-line.js +++ /dev/null @@ -1,53 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -// Defines jumpToLine command. Uses dialog.js if present. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("../dialog/dialog")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "../dialog/dialog"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - // default search panel location - CodeMirror.defineOption("search", {bottom: false}); - - function dialog(cm, text, shortText, deflt, f) { - if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom}); - else f(prompt(shortText, deflt)); - } - - function getJumpDialog(cm) { - return cm.phrase("Jump to line:") + ' ' + cm.phrase("(Use line:column or scroll% syntax)") + ''; - } - - function interpretLine(cm, string) { - var num = Number(string) - if (/^[-+]/.test(string)) return cm.getCursor().line + num - else return num - 1 - } - - CodeMirror.commands.jumpToLine = function(cm) { - var cur = cm.getCursor(); - dialog(cm, getJumpDialog(cm), cm.phrase("Jump to line:"), (cur.line + 1) + ":" + cur.ch, function(posStr) { - if (!posStr) return; - - var match; - if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) { - cm.setCursor(interpretLine(cm, match[1]), Number(match[2])) - } else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) { - var line = Math.round(cm.lineCount() * Number(match[1]) / 100); - if (/^[-+]/.test(match[1])) line = cur.line + line + 1; - cm.setCursor(line - 1, cur.ch); - } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) { - cm.setCursor(interpretLine(cm, match[1]), cur.ch); - } - }); - }; - - CodeMirror.keyMap["default"]["Alt-G"] = "jumpToLine"; -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/match-highlighter.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/match-highlighter.js deleted file mode 100644 index 9b181ebc..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/match-highlighter.js +++ /dev/null @@ -1,167 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -// Highlighting text that matches the selection -// -// Defines an option highlightSelectionMatches, which, when enabled, -// will style strings that match the selection throughout the -// document. -// -// The option can be set to true to simply enable it, or to a -// {minChars, style, wordsOnly, showToken, delay} object to explicitly -// configure it. minChars is the minimum amount of characters that should be -// selected for the behavior to occur, and style is the token style to -// apply to the matches. This will be prefixed by "cm-" to create an -// actual CSS class name. If wordsOnly is enabled, the matches will be -// highlighted only if the selected text is a word. showToken, when enabled, -// will cause the current token to be highlighted when nothing is selected. -// delay is used to specify how much time to wait, in milliseconds, before -// highlighting the matches. If annotateScrollbar is enabled, the occurrences -// will be highlighted on the scrollbar via the matchesonscrollbar addon. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./matchesonscrollbar")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./matchesonscrollbar"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var defaults = { - style: "matchhighlight", - minChars: 2, - delay: 100, - wordsOnly: false, - annotateScrollbar: false, - showToken: false, - trim: true - } - - function State(options) { - this.options = {} - for (var name in defaults) - this.options[name] = (options && options.hasOwnProperty(name) ? options : defaults)[name] - this.overlay = this.timeout = null; - this.matchesonscroll = null; - this.active = false; - } - - CodeMirror.defineOption("highlightSelectionMatches", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - removeOverlay(cm); - clearTimeout(cm.state.matchHighlighter.timeout); - cm.state.matchHighlighter = null; - cm.off("cursorActivity", cursorActivity); - cm.off("focus", onFocus) - } - if (val) { - var state = cm.state.matchHighlighter = new State(val); - if (cm.hasFocus()) { - state.active = true - highlightMatches(cm) - } else { - cm.on("focus", onFocus) - } - cm.on("cursorActivity", cursorActivity); - } - }); - - function cursorActivity(cm) { - var state = cm.state.matchHighlighter; - if (state.active || cm.hasFocus()) scheduleHighlight(cm, state) - } - - function onFocus(cm) { - var state = cm.state.matchHighlighter - if (!state.active) { - state.active = true - scheduleHighlight(cm, state) - } - } - - function scheduleHighlight(cm, state) { - clearTimeout(state.timeout); - state.timeout = setTimeout(function() {highlightMatches(cm);}, state.options.delay); - } - - function addOverlay(cm, query, hasBoundary, style) { - var state = cm.state.matchHighlighter; - cm.addOverlay(state.overlay = makeOverlay(query, hasBoundary, style)); - if (state.options.annotateScrollbar && cm.showMatchesOnScrollbar) { - var searchFor = hasBoundary ? new RegExp((/\w/.test(query.charAt(0)) ? "\\b" : "") + - query.replace(/[\\\[.+*?(){|^$]/g, "\\$&") + - (/\w/.test(query.charAt(query.length - 1)) ? "\\b" : "")) : query; - state.matchesonscroll = cm.showMatchesOnScrollbar(searchFor, false, - {className: "CodeMirror-selection-highlight-scrollbar"}); - } - } - - function removeOverlay(cm) { - var state = cm.state.matchHighlighter; - if (state.overlay) { - cm.removeOverlay(state.overlay); - state.overlay = null; - if (state.matchesonscroll) { - state.matchesonscroll.clear(); - state.matchesonscroll = null; - } - } - } - - function highlightMatches(cm) { - cm.operation(function() { - var state = cm.state.matchHighlighter; - removeOverlay(cm); - if (!cm.somethingSelected() && state.options.showToken) { - var re = state.options.showToken === true ? /[\w$]/ : state.options.showToken; - var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start; - while (start && re.test(line.charAt(start - 1))) --start; - while (end < line.length && re.test(line.charAt(end))) ++end; - if (start < end) - addOverlay(cm, line.slice(start, end), re, state.options.style); - return; - } - var from = cm.getCursor("from"), to = cm.getCursor("to"); - if (from.line != to.line) return; - if (state.options.wordsOnly && !isWord(cm, from, to)) return; - var selection = cm.getRange(from, to) - if (state.options.trim) selection = selection.replace(/^\s+|\s+$/g, "") - if (selection.length >= state.options.minChars) - addOverlay(cm, selection, false, state.options.style); - }); - } - - function isWord(cm, from, to) { - var str = cm.getRange(from, to); - if (str.match(/^\w+$/) !== null) { - if (from.ch > 0) { - var pos = {line: from.line, ch: from.ch - 1}; - var chr = cm.getRange(pos, from); - if (chr.match(/\W/) === null) return false; - } - if (to.ch < cm.getLine(from.line).length) { - var pos = {line: to.line, ch: to.ch + 1}; - var chr = cm.getRange(to, pos); - if (chr.match(/\W/) === null) return false; - } - return true; - } else return false; - } - - function boundariesAround(stream, re) { - return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) && - (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos))); - } - - function makeOverlay(query, hasBoundary, style) { - return {token: function(stream) { - if (stream.match(query) && - (!hasBoundary || boundariesAround(stream, hasBoundary))) - return style; - stream.next(); - stream.skipTo(query.charAt(0)) || stream.skipToEnd(); - }}; - } -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/matchesonscrollbar.css b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/matchesonscrollbar.css deleted file mode 100644 index 77932cc9..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/matchesonscrollbar.css +++ /dev/null @@ -1,8 +0,0 @@ -.CodeMirror-search-match { - background: gold; - border-top: 1px solid orange; - border-bottom: 1px solid orange; - -moz-box-sizing: border-box; - box-sizing: border-box; - opacity: .5; -} diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/matchesonscrollbar.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/matchesonscrollbar.js deleted file mode 100644 index 8a4a8275..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/matchesonscrollbar.js +++ /dev/null @@ -1,97 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./searchcursor"), require("../scroll/annotatescrollbar")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./searchcursor", "../scroll/annotatescrollbar"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineExtension("showMatchesOnScrollbar", function(query, caseFold, options) { - if (typeof options == "string") options = {className: options}; - if (!options) options = {}; - return new SearchAnnotation(this, query, caseFold, options); - }); - - function SearchAnnotation(cm, query, caseFold, options) { - this.cm = cm; - this.options = options; - var annotateOptions = {listenForChanges: false}; - for (var prop in options) annotateOptions[prop] = options[prop]; - if (!annotateOptions.className) annotateOptions.className = "CodeMirror-search-match"; - this.annotation = cm.annotateScrollbar(annotateOptions); - this.query = query; - this.caseFold = caseFold; - this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1}; - this.matches = []; - this.update = null; - - this.findMatches(); - this.annotation.update(this.matches); - - var self = this; - cm.on("change", this.changeHandler = function(_cm, change) { self.onChange(change); }); - } - - var MAX_MATCHES = 1000; - - SearchAnnotation.prototype.findMatches = function() { - if (!this.gap) return; - for (var i = 0; i < this.matches.length; i++) { - var match = this.matches[i]; - if (match.from.line >= this.gap.to) break; - if (match.to.line >= this.gap.from) this.matches.splice(i--, 1); - } - var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), {caseFold: this.caseFold, multiline: this.options.multiline}); - var maxMatches = this.options && this.options.maxMatches || MAX_MATCHES; - while (cursor.findNext()) { - var match = {from: cursor.from(), to: cursor.to()}; - if (match.from.line >= this.gap.to) break; - this.matches.splice(i++, 0, match); - if (this.matches.length > maxMatches) break; - } - this.gap = null; - }; - - function offsetLine(line, changeStart, sizeChange) { - if (line <= changeStart) return line; - return Math.max(changeStart, line + sizeChange); - } - - SearchAnnotation.prototype.onChange = function(change) { - var startLine = change.from.line; - var endLine = CodeMirror.changeEnd(change).line; - var sizeChange = endLine - change.to.line; - if (this.gap) { - this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line); - this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line); - } else { - this.gap = {from: change.from.line, to: endLine + 1}; - } - - if (sizeChange) for (var i = 0; i < this.matches.length; i++) { - var match = this.matches[i]; - var newFrom = offsetLine(match.from.line, startLine, sizeChange); - if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch); - var newTo = offsetLine(match.to.line, startLine, sizeChange); - if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch); - } - clearTimeout(this.update); - var self = this; - this.update = setTimeout(function() { self.updateAfterChange(); }, 250); - }; - - SearchAnnotation.prototype.updateAfterChange = function() { - this.findMatches(); - this.annotation.update(this.matches); - }; - - SearchAnnotation.prototype.clear = function() { - this.cm.off("change", this.changeHandler); - this.annotation.clear(); - }; -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/search.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/search.js deleted file mode 100644 index 24a0855e..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/search.js +++ /dev/null @@ -1,292 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -// Define search commands. Depends on dialog.js or another -// implementation of the openDialog method. - -// Replace works a little oddly -- it will do the replace on the next -// Ctrl-G (or whatever is bound to findNext) press. You prevent a -// replace by making sure the match is no longer selected when hitting -// Ctrl-G. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - // default search panel location - CodeMirror.defineOption("search", {bottom: false}); - - function searchOverlay(query, caseInsensitive) { - if (typeof query == "string") - query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g"); - else if (!query.global) - query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); - - return {token: function(stream) { - query.lastIndex = stream.pos; - var match = query.exec(stream.string); - if (match && match.index == stream.pos) { - stream.pos += match[0].length || 1; - return "searching"; - } else if (match) { - stream.pos = match.index; - } else { - stream.skipToEnd(); - } - }}; - } - - function SearchState() { - this.posFrom = this.posTo = this.lastQuery = this.query = null; - this.overlay = null; - } - - function getSearchState(cm) { - return cm.state.search || (cm.state.search = new SearchState()); - } - - function queryCaseInsensitive(query) { - return typeof query == "string" && query == query.toLowerCase(); - } - - function getSearchCursor(cm, query, pos) { - // Heuristic: if the query string is all lowercase, do a case insensitive search. - return cm.getSearchCursor(query, pos, {caseFold: queryCaseInsensitive(query), multiline: true}); - } - - function persistentDialog(cm, text, deflt, onEnter, onKeyDown) { - cm.openDialog(text, onEnter, { - value: deflt, - selectValueOnOpen: true, - closeOnEnter: false, - onClose: function() { clearSearch(cm); }, - onKeyDown: onKeyDown, - bottom: cm.options.search.bottom - }); - } - - function dialog(cm, text, shortText, deflt, f) { - if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom}); - else f(prompt(shortText, deflt)); - } - - function confirmDialog(cm, text, shortText, fs) { - if (cm.openConfirm) cm.openConfirm(text, fs); - else if (confirm(shortText)) fs[0](); - } - - function parseString(string) { - return string.replace(/\\([nrt\\])/g, function(match, ch) { - if (ch == "n") return "\n" - if (ch == "r") return "\r" - if (ch == "t") return "\t" - if (ch == "\\") return "\\" - return match - }) - } - - function parseQuery(query) { - var isRE = query.match(/^\/(.*)\/([a-z]*)$/); - if (isRE) { - try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); } - catch(e) {} // Not a regular expression after all, do a string search - } else { - query = parseString(query) - } - if (typeof query == "string" ? query == "" : query.test("")) - query = /x^/; - return query; - } - - function startSearch(cm, state, query) { - state.queryText = query; - state.query = parseQuery(query); - cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); - state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); - cm.addOverlay(state.overlay); - if (cm.showMatchesOnScrollbar) { - if (state.annotate) { state.annotate.clear(); state.annotate = null; } - state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); - } - } - - function doSearch(cm, rev, persistent, immediate) { - var state = getSearchState(cm); - if (state.query) return findNext(cm, rev); - var q = cm.getSelection() || state.lastQuery; - if (q instanceof RegExp && q.source == "x^") q = null - if (persistent && cm.openDialog) { - var hiding = null - var searchNext = function(query, event) { - CodeMirror.e_stop(event); - if (!query) return; - if (query != state.queryText) { - startSearch(cm, state, query); - state.posFrom = state.posTo = cm.getCursor(); - } - if (hiding) hiding.style.opacity = 1 - findNext(cm, event.shiftKey, function(_, to) { - var dialog - if (to.line < 3 && document.querySelector && - (dialog = cm.display.wrapper.querySelector(".CodeMirror-dialog")) && - dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top) - (hiding = dialog).style.opacity = .4 - }) - }; - persistentDialog(cm, getQueryDialog(cm), q, searchNext, function(event, query) { - var keyName = CodeMirror.keyName(event) - var extra = cm.getOption('extraKeys'), cmd = (extra && extra[keyName]) || CodeMirror.keyMap[cm.getOption("keyMap")][keyName] - if (cmd == "findNext" || cmd == "findPrev" || - cmd == "findPersistentNext" || cmd == "findPersistentPrev") { - CodeMirror.e_stop(event); - startSearch(cm, getSearchState(cm), query); - cm.execCommand(cmd); - } else if (cmd == "find" || cmd == "findPersistent") { - CodeMirror.e_stop(event); - searchNext(query, event); - } - }); - if (immediate && q) { - startSearch(cm, state, q); - findNext(cm, rev); - } - } else { - dialog(cm, getQueryDialog(cm), "Search for:", q, function(query) { - if (query && !state.query) cm.operation(function() { - startSearch(cm, state, query); - state.posFrom = state.posTo = cm.getCursor(); - findNext(cm, rev); - }); - }); - } - } - - function findNext(cm, rev, callback) {cm.operation(function() { - var state = getSearchState(cm); - var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); - if (!cursor.find(rev)) { - cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); - if (!cursor.find(rev)) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20); - state.posFrom = cursor.from(); state.posTo = cursor.to(); - if (callback) callback(cursor.from(), cursor.to()) - });} - - function clearSearch(cm) {cm.operation(function() { - var state = getSearchState(cm); - state.lastQuery = state.query; - if (!state.query) return; - state.query = state.queryText = null; - cm.removeOverlay(state.overlay); - if (state.annotate) { state.annotate.clear(); state.annotate = null; } - });} - - function el(tag, attrs) { - var element = tag ? document.createElement(tag) : document.createDocumentFragment(); - for (var key in attrs) { - element[key] = attrs[key]; - } - for (var i = 2; i < arguments.length; i++) { - var child = arguments[i] - element.appendChild(typeof child == "string" ? document.createTextNode(child) : child); - } - return element; - } - - function getQueryDialog(cm) { - return el("", null, - el("span", {className: "CodeMirror-search-label"}, cm.phrase("Search:")), " ", - el("input", {type: "text", "style": "width: 10em", className: "CodeMirror-search-field"}), " ", - el("span", {style: "color: #888", className: "CodeMirror-search-hint"}, - cm.phrase("(Use /re/ syntax for regexp search)"))); - } - function getReplaceQueryDialog(cm) { - return el("", null, " ", - el("input", {type: "text", "style": "width: 10em", className: "CodeMirror-search-field"}), " ", - el("span", {style: "color: #888", className: "CodeMirror-search-hint"}, - cm.phrase("(Use /re/ syntax for regexp search)"))); - } - function getReplacementQueryDialog(cm) { - return el("", null, - el("span", {className: "CodeMirror-search-label"}, cm.phrase("With:")), " ", - el("input", {type: "text", "style": "width: 10em", className: "CodeMirror-search-field"})); - } - function getDoReplaceConfirm(cm) { - return el("", null, - el("span", {className: "CodeMirror-search-label"}, cm.phrase("Replace?")), " ", - el("button", {}, cm.phrase("Yes")), " ", - el("button", {}, cm.phrase("No")), " ", - el("button", {}, cm.phrase("All")), " ", - el("button", {}, cm.phrase("Stop"))); - } - - function replaceAll(cm, query, text) { - cm.operation(function() { - for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { - if (typeof query != "string") { - var match = cm.getRange(cursor.from(), cursor.to()).match(query); - cursor.replace(text.replace(/\$(\d)/g, function(_, i) {return match[i];})); - } else cursor.replace(text); - } - }); - } - - function replace(cm, all) { - if (cm.getOption("readOnly")) return; - var query = cm.getSelection() || getSearchState(cm).lastQuery; - var dialogText = all ? cm.phrase("Replace all:") : cm.phrase("Replace:") - var fragment = el("", null, - el("span", {className: "CodeMirror-search-label"}, dialogText), - getReplaceQueryDialog(cm)) - dialog(cm, fragment, dialogText, query, function(query) { - if (!query) return; - query = parseQuery(query); - dialog(cm, getReplacementQueryDialog(cm), cm.phrase("Replace with:"), "", function(text) { - text = parseString(text) - if (all) { - replaceAll(cm, query, text) - } else { - clearSearch(cm); - var cursor = getSearchCursor(cm, query, cm.getCursor("from")); - var advance = function() { - var start = cursor.from(), match; - if (!(match = cursor.findNext())) { - cursor = getSearchCursor(cm, query); - if (!(match = cursor.findNext()) || - (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); - confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase("Replace?"), - [function() {doReplace(match);}, advance, - function() {replaceAll(cm, query, text)}]); - }; - var doReplace = function(match) { - cursor.replace(typeof query == "string" ? text : - text.replace(/\$(\d)/g, function(_, i) {return match[i];})); - advance(); - }; - advance(); - } - }); - }); - } - - CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);}; - CodeMirror.commands.findPersistent = function(cm) {clearSearch(cm); doSearch(cm, false, true);}; - CodeMirror.commands.findPersistentNext = function(cm) {doSearch(cm, false, true, true);}; - CodeMirror.commands.findPersistentPrev = function(cm) {doSearch(cm, true, true, true);}; - CodeMirror.commands.findNext = doSearch; - CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);}; - CodeMirror.commands.clearSearch = clearSearch; - CodeMirror.commands.replace = replace; - CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);}; -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/searchcursor.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/searchcursor.js deleted file mode 100644 index d5869578..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/searchcursor.js +++ /dev/null @@ -1,296 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")) - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod) - else // Plain browser env - mod(CodeMirror) -})(function(CodeMirror) { - "use strict" - var Pos = CodeMirror.Pos - - function regexpFlags(regexp) { - var flags = regexp.flags - return flags != null ? flags : (regexp.ignoreCase ? "i" : "") - + (regexp.global ? "g" : "") - + (regexp.multiline ? "m" : "") - } - - function ensureFlags(regexp, flags) { - var current = regexpFlags(regexp), target = current - for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) - target += flags.charAt(i) - return current == target ? regexp : new RegExp(regexp.source, target) - } - - function maybeMultiline(regexp) { - return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source) - } - - function searchRegexpForward(doc, regexp, start) { - regexp = ensureFlags(regexp, "g") - for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) { - regexp.lastIndex = ch - var string = doc.getLine(line), match = regexp.exec(string) - if (match) - return {from: Pos(line, match.index), - to: Pos(line, match.index + match[0].length), - match: match} - } - } - - function searchRegexpForwardMultiline(doc, regexp, start) { - if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start) - - regexp = ensureFlags(regexp, "gm") - var string, chunk = 1 - for (var line = start.line, last = doc.lastLine(); line <= last;) { - // This grows the search buffer in exponentially-sized chunks - // between matches, so that nearby matches are fast and don't - // require concatenating the whole document (in case we're - // searching for something that has tons of matches), but at the - // same time, the amount of retries is limited. - for (var i = 0; i < chunk; i++) { - if (line > last) break - var curLine = doc.getLine(line++) - string = string == null ? curLine : string + "\n" + curLine - } - chunk = chunk * 2 - regexp.lastIndex = start.ch - var match = regexp.exec(string) - if (match) { - var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n") - var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length - return {from: Pos(startLine, startCh), - to: Pos(startLine + inside.length - 1, - inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), - match: match} - } - } - } - - function lastMatchIn(string, regexp, endMargin) { - var match, from = 0 - while (from <= string.length) { - regexp.lastIndex = from - var newMatch = regexp.exec(string) - if (!newMatch) break - var end = newMatch.index + newMatch[0].length - if (end > string.length - endMargin) break - if (!match || end > match.index + match[0].length) - match = newMatch - from = newMatch.index + 1 - } - return match - } - - function searchRegexpBackward(doc, regexp, start) { - regexp = ensureFlags(regexp, "g") - for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) { - var string = doc.getLine(line) - var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch) - if (match) - return {from: Pos(line, match.index), - to: Pos(line, match.index + match[0].length), - match: match} - } - } - - function searchRegexpBackwardMultiline(doc, regexp, start) { - if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start) - regexp = ensureFlags(regexp, "gm") - var string, chunkSize = 1, endMargin = doc.getLine(start.line).length - start.ch - for (var line = start.line, first = doc.firstLine(); line >= first;) { - for (var i = 0; i < chunkSize && line >= first; i++) { - var curLine = doc.getLine(line--) - string = string == null ? curLine : curLine + "\n" + string - } - chunkSize *= 2 - - var match = lastMatchIn(string, regexp, endMargin) - if (match) { - var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n") - var startLine = line + before.length, startCh = before[before.length - 1].length - return {from: Pos(startLine, startCh), - to: Pos(startLine + inside.length - 1, - inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), - match: match} - } - } - } - - var doFold, noFold - if (String.prototype.normalize) { - doFold = function(str) { return str.normalize("NFD").toLowerCase() } - noFold = function(str) { return str.normalize("NFD") } - } else { - doFold = function(str) { return str.toLowerCase() } - noFold = function(str) { return str } - } - - // Maps a position in a case-folded line back to a position in the original line - // (compensating for codepoints increasing in number during folding) - function adjustPos(orig, folded, pos, foldFunc) { - if (orig.length == folded.length) return pos - for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) { - if (min == max) return min - var mid = (min + max) >> 1 - var len = foldFunc(orig.slice(0, mid)).length - if (len == pos) return mid - else if (len > pos) max = mid - else min = mid + 1 - } - } - - function searchStringForward(doc, query, start, caseFold) { - // Empty string would match anything and never progress, so we - // define it to match nothing instead. - if (!query.length) return null - var fold = caseFold ? doFold : noFold - var lines = fold(query).split(/\r|\n\r?/) - - search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) { - var orig = doc.getLine(line).slice(ch), string = fold(orig) - if (lines.length == 1) { - var found = string.indexOf(lines[0]) - if (found == -1) continue search - var start = adjustPos(orig, string, found, fold) + ch - return {from: Pos(line, adjustPos(orig, string, found, fold) + ch), - to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)} - } else { - var cutFrom = string.length - lines[0].length - if (string.slice(cutFrom) != lines[0]) continue search - for (var i = 1; i < lines.length - 1; i++) - if (fold(doc.getLine(line + i)) != lines[i]) continue search - var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1] - if (endString.slice(0, lastLine.length) != lastLine) continue search - return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch), - to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))} - } - } - } - - function searchStringBackward(doc, query, start, caseFold) { - if (!query.length) return null - var fold = caseFold ? doFold : noFold - var lines = fold(query).split(/\r|\n\r?/) - - search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) { - var orig = doc.getLine(line) - if (ch > -1) orig = orig.slice(0, ch) - var string = fold(orig) - if (lines.length == 1) { - var found = string.lastIndexOf(lines[0]) - if (found == -1) continue search - return {from: Pos(line, adjustPos(orig, string, found, fold)), - to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))} - } else { - var lastLine = lines[lines.length - 1] - if (string.slice(0, lastLine.length) != lastLine) continue search - for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) - if (fold(doc.getLine(start + i)) != lines[i]) continue search - var top = doc.getLine(line + 1 - lines.length), topString = fold(top) - if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search - return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)), - to: Pos(line, adjustPos(orig, string, lastLine.length, fold))} - } - } - } - - function SearchCursor(doc, query, pos, options) { - this.atOccurrence = false - this.doc = doc - pos = pos ? doc.clipPos(pos) : Pos(0, 0) - this.pos = {from: pos, to: pos} - - var caseFold - if (typeof options == "object") { - caseFold = options.caseFold - } else { // Backwards compat for when caseFold was the 4th argument - caseFold = options - options = null - } - - if (typeof query == "string") { - if (caseFold == null) caseFold = false - this.matches = function(reverse, pos) { - return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold) - } - } else { - query = ensureFlags(query, "gm") - if (!options || options.multiline !== false) - this.matches = function(reverse, pos) { - return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos) - } - else - this.matches = function(reverse, pos) { - return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos) - } - } - } - - SearchCursor.prototype = { - findNext: function() {return this.find(false)}, - findPrevious: function() {return this.find(true)}, - - find: function(reverse) { - var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to)) - - // Implements weird auto-growing behavior on null-matches for - // backwards-compatibility with the vim code (unfortunately) - while (result && CodeMirror.cmpPos(result.from, result.to) == 0) { - if (reverse) { - if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1) - else if (result.from.line == this.doc.firstLine()) result = null - else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1))) - } else { - if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1) - else if (result.to.line == this.doc.lastLine()) result = null - else result = this.matches(reverse, Pos(result.to.line + 1, 0)) - } - } - - if (result) { - this.pos = result - this.atOccurrence = true - return this.pos.match || true - } else { - var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0) - this.pos = {from: end, to: end} - return this.atOccurrence = false - } - }, - - from: function() {if (this.atOccurrence) return this.pos.from}, - to: function() {if (this.atOccurrence) return this.pos.to}, - - replace: function(newText, origin) { - if (!this.atOccurrence) return - var lines = CodeMirror.splitLines(newText) - this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin) - this.pos.to = Pos(this.pos.from.line + lines.length - 1, - lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)) - } - } - - CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { - return new SearchCursor(this.doc, query, pos, caseFold) - }) - CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { - return new SearchCursor(this, query, pos, caseFold) - }) - - CodeMirror.defineExtension("selectMatches", function(query, caseFold) { - var ranges = [] - var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold) - while (cur.findNext()) { - if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break - ranges.push({anchor: cur.from(), head: cur.to()}) - } - if (ranges.length) - this.setSelections(ranges, 0) - }) -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/selection/active-line.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/selection/active-line.js deleted file mode 100644 index c7b14ce0..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/selection/active-line.js +++ /dev/null @@ -1,72 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - var WRAP_CLASS = "CodeMirror-activeline"; - var BACK_CLASS = "CodeMirror-activeline-background"; - var GUTT_CLASS = "CodeMirror-activeline-gutter"; - - CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { - var prev = old == CodeMirror.Init ? false : old; - if (val == prev) return - if (prev) { - cm.off("beforeSelectionChange", selectionChange); - clearActiveLines(cm); - delete cm.state.activeLines; - } - if (val) { - cm.state.activeLines = []; - updateActiveLines(cm, cm.listSelections()); - cm.on("beforeSelectionChange", selectionChange); - } - }); - - function clearActiveLines(cm) { - for (var i = 0; i < cm.state.activeLines.length; i++) { - cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); - cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); - cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS); - } - } - - function sameArray(a, b) { - if (a.length != b.length) return false; - for (var i = 0; i < a.length; i++) - if (a[i] != b[i]) return false; - return true; - } - - function updateActiveLines(cm, ranges) { - var active = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - var option = cm.getOption("styleActiveLine"); - if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty()) - continue - var line = cm.getLineHandleVisualStart(range.head.line); - if (active[active.length - 1] != line) active.push(line); - } - if (sameArray(cm.state.activeLines, active)) return; - cm.operation(function() { - clearActiveLines(cm); - for (var i = 0; i < active.length; i++) { - cm.addLineClass(active[i], "wrap", WRAP_CLASS); - cm.addLineClass(active[i], "background", BACK_CLASS); - cm.addLineClass(active[i], "gutter", GUTT_CLASS); - } - cm.state.activeLines = active; - }); - } - - function selectionChange(cm, sel) { - updateActiveLines(cm, sel.ranges); - } -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/lib/codemirror.css b/luci-app-openclash/root/www/luci-static/resources/openclash/lib/codemirror.css deleted file mode 100644 index 86061bb0..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/lib/codemirror.css +++ /dev/null @@ -1,349 +0,0 @@ -/* BASICS */ - -.CodeMirror { - /* Set height, width, borders, and global font properties here */ - font-family: monospace; - height: 300px; - color: black; - direction: ltr; -} - -/* PADDING */ - -.CodeMirror-lines { - padding: 4px 0; /* Vertical padding around content */ -} -.CodeMirror pre.CodeMirror-line, -.CodeMirror pre.CodeMirror-line-like { - padding: 0 4px; /* Horizontal padding of content */ -} - -.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - border-right: 1px solid #ddd; - background-color: #f7f7f7; - white-space: nowrap; -} -.CodeMirror-linenumbers {} -.CodeMirror-linenumber { - padding: 0 3px 0 5px; - min-width: 20px; - text-align: right; - color: #999; - white-space: nowrap; -} - -.CodeMirror-guttermarker { color: black; } -.CodeMirror-guttermarker-subtle { color: #999; } - -/* CURSOR */ - -.CodeMirror-cursor { - border-left: 1px solid black; - border-right: none; - width: 0; -} -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} -.cm-fat-cursor .CodeMirror-cursor { - width: auto; - border: 0 !important; - background: #7e7; -} -.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} -.cm-fat-cursor-mark { - background-color: rgba(20, 255, 20, 0.5); - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; -} -.cm-animate-fat-cursor { - width: auto; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; - background-color: #7e7; -} -@-moz-keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} -@-webkit-keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} -@keyframes blink { - 0% {} - 50% { background-color: transparent; } - 100% {} -} - -/* Can style cursor different in overwrite (non-insert) mode */ -.CodeMirror-overwrite .CodeMirror-cursor {} - -.cm-tab { display: inline-block; text-decoration: inherit; } - -.CodeMirror-rulers { - position: absolute; - left: 0; right: 0; top: -50px; bottom: 0; - overflow: hidden; -} -.CodeMirror-ruler { - border-left: 1px solid #ccc; - top: 0; bottom: 0; - position: absolute; -} - -/* DEFAULT THEME */ - -.cm-s-default .cm-header {color: blue;} -.cm-s-default .cm-quote {color: #090;} -.cm-negative {color: #d44;} -.cm-positive {color: #292;} -.cm-header, .cm-strong {font-weight: bold;} -.cm-em {font-style: italic;} -.cm-link {text-decoration: underline;} -.cm-strikethrough {text-decoration: line-through;} - -.cm-s-default .cm-keyword {color: #708;} -.cm-s-default .cm-atom {color: #219;} -.cm-s-default .cm-number {color: #164;} -.cm-s-default .cm-def {color: #00f;} -.cm-s-default .cm-variable, -.cm-s-default .cm-punctuation, -.cm-s-default .cm-property, -.cm-s-default .cm-operator {} -.cm-s-default .cm-variable-2 {color: #05a;} -.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;} -.cm-s-default .cm-comment {color: #a50;} -.cm-s-default .cm-string {color: #a11;} -.cm-s-default .cm-string-2 {color: #f50;} -.cm-s-default .cm-meta {color: #555;} -.cm-s-default .cm-qualifier {color: #555;} -.cm-s-default .cm-builtin {color: #30a;} -.cm-s-default .cm-bracket {color: #997;} -.cm-s-default .cm-tag {color: #170;} -.cm-s-default .cm-attribute {color: #00c;} -.cm-s-default .cm-hr {color: #999;} -.cm-s-default .cm-link {color: #00c;} - -.cm-s-default .cm-error {color: #f00;} -.cm-invalidchar {color: #f00;} - -.CodeMirror-composing { border-bottom: 2px solid; } - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;} -div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;} -.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } -.CodeMirror-activeline-background {background: #e8f2ff;} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror { - position: relative; - overflow: hidden; - background: white; -} - -.CodeMirror-scroll { - overflow: scroll !important; /* Things will break if this is overridden */ - /* 50px is the magic margin used to hide the element's real scrollbars */ - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -50px; margin-right: -50px; - padding-bottom: 50px; - height: 100%; - outline: none; /* Prevent dragging from highlighting the element */ - position: relative; -} -.CodeMirror-sizer { - position: relative; - border-right: 50px solid transparent; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actual scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; - outline: none; -} -.CodeMirror-vscrollbar { - right: 0; top: 0; - overflow-x: hidden; - overflow-y: scroll; -} -.CodeMirror-hscrollbar { - bottom: 0; left: 0; - overflow-y: hidden; - overflow-x: scroll; -} -.CodeMirror-scrollbar-filler { - right: 0; bottom: 0; -} -.CodeMirror-gutter-filler { - left: 0; bottom: 0; -} - -.CodeMirror-gutters { - position: absolute; left: 0; top: 0; - min-height: 100%; - z-index: 3; -} -.CodeMirror-gutter { - white-space: normal; - height: 100%; - display: inline-block; - vertical-align: top; - margin-bottom: -50px; -} -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - background: none !important; - border: none !important; -} -.CodeMirror-gutter-background { - position: absolute; - top: 0; bottom: 0; - z-index: 4; -} -.CodeMirror-gutter-elt { - position: absolute; - cursor: default; - z-index: 4; -} -.CodeMirror-gutter-wrapper ::selection { background-color: transparent } -.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } - -.CodeMirror-lines { - cursor: text; - min-height: 1px; /* prevents collapsing before first draw */ -} -.CodeMirror pre.CodeMirror-line, -.CodeMirror pre.CodeMirror-line-like { - /* Reset some styles that the rest of the page might have set */ - -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; - border-width: 0; - background: transparent; - font-family: inherit; - font-size: inherit; - margin: 0; - white-space: pre; - word-wrap: normal; - line-height: inherit; - color: inherit; - z-index: 2; - position: relative; - overflow: visible; - -webkit-tap-highlight-color: transparent; - -webkit-font-variant-ligatures: contextual; - font-variant-ligatures: contextual; -} -.CodeMirror-wrap pre.CodeMirror-line, -.CodeMirror-wrap pre.CodeMirror-line-like { - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; -} - -.CodeMirror-linebackground { - position: absolute; - left: 0; right: 0; top: 0; bottom: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - padding: 0.1px; /* Force widget margins to stay inside of the container */ -} - -.CodeMirror-widget {} - -.CodeMirror-rtl pre { direction: rtl; } - -.CodeMirror-code { - outline: none; -} - -/* Force content-box sizing for the elements where we expect it */ -.CodeMirror-scroll, -.CodeMirror-sizer, -.CodeMirror-gutter, -.CodeMirror-gutters, -.CodeMirror-linenumber { - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} - -.CodeMirror-cursor { - position: absolute; - pointer-events: none; -} -.CodeMirror-measure pre { position: static; } - -div.CodeMirror-cursors { - visibility: hidden; - position: relative; - z-index: 3; -} -div.CodeMirror-dragcursors { - visibility: visible; -} - -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { background: #d9d9d9; } -.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } -.CodeMirror-crosshair { cursor: crosshair; } -.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } -.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } - -.cm-searching { - background-color: #ffa; - background-color: rgba(255, 255, 0, .4); -} - -/* Used to force a border model for a node */ -.cm-force-border { padding-right: .1px; } - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack:after { content: ''; } - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { background: none; } diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/lib/codemirror.js b/luci-app-openclash/root/www/luci-static/resources/openclash/lib/codemirror.js deleted file mode 100644 index d2e5bcc5..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/lib/codemirror.js +++ /dev/null @@ -1,9839 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -// This is CodeMirror (https://codemirror.net), a code editor -// implemented in JavaScript on top of the browser's DOM. -// -// You can find some technical background for some of the code below -// at http://marijnhaverbeke.nl/blog/#cm-internals . - -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.CodeMirror = factory()); -}(this, (function () { 'use strict'; - - // Kludges for bugs and behavior differences that can't be feature - // detected are enabled based on userAgent etc sniffing. - var userAgent = navigator.userAgent; - var platform = navigator.platform; - - var gecko = /gecko\/\d/i.test(userAgent); - var ie_upto10 = /MSIE \d/.test(userAgent); - var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); - var edge = /Edge\/(\d+)/.exec(userAgent); - var ie = ie_upto10 || ie_11up || edge; - var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); - var webkit = !edge && /WebKit\//.test(userAgent); - var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); - var chrome = !edge && /Chrome\//.test(userAgent); - var presto = /Opera\//.test(userAgent); - var safari = /Apple Computer/.test(navigator.vendor); - var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); - var phantom = /PhantomJS/.test(userAgent); - - var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); - var android = /Android/.test(userAgent); - // This is woefully incomplete. Suggestions for alternative methods welcome. - var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); - var mac = ios || /Mac/.test(platform); - var chromeOS = /\bCrOS\b/.test(userAgent); - var windows = /win/i.test(platform); - - var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); - if (presto_version) { presto_version = Number(presto_version[1]); } - if (presto_version && presto_version >= 15) { presto = false; webkit = true; } - // Some browsers use the wrong event properties to signal cmd/ctrl on OS X - var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); - var captureRightClick = gecko || (ie && ie_version >= 9); - - function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } - - var rmClass = function(node, cls) { - var current = node.className; - var match = classTest(cls).exec(current); - if (match) { - var after = current.slice(match.index + match[0].length); - node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); - } - }; - - function removeChildren(e) { - for (var count = e.childNodes.length; count > 0; --count) - { e.removeChild(e.firstChild); } - return e - } - - function removeChildrenAndAdd(parent, e) { - return removeChildren(parent).appendChild(e) - } - - function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) { e.className = className; } - if (style) { e.style.cssText = style; } - if (typeof content == "string") { e.appendChild(document.createTextNode(content)); } - else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } } - return e - } - // wrapper for elt, which removes the elt from the accessibility tree - function eltP(tag, content, className, style) { - var e = elt(tag, content, className, style); - e.setAttribute("role", "presentation"); - return e - } - - var range; - if (document.createRange) { range = function(node, start, end, endNode) { - var r = document.createRange(); - r.setEnd(endNode || node, end); - r.setStart(node, start); - return r - }; } - else { range = function(node, start, end) { - var r = document.body.createTextRange(); - try { r.moveToElementText(node.parentNode); } - catch(e) { return r } - r.collapse(true); - r.moveEnd("character", end); - r.moveStart("character", start); - return r - }; } - - function contains(parent, child) { - if (child.nodeType == 3) // Android browser always returns false when child is a textnode - { child = child.parentNode; } - if (parent.contains) - { return parent.contains(child) } - do { - if (child.nodeType == 11) { child = child.host; } - if (child == parent) { return true } - } while (child = child.parentNode) - } - - function activeElt() { - // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. - // IE < 10 will throw when accessed while the page is loading or in an iframe. - // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. - var activeElement; - try { - activeElement = document.activeElement; - } catch(e) { - activeElement = document.body || null; - } - while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) - { activeElement = activeElement.shadowRoot.activeElement; } - return activeElement - } - - function addClass(node, cls) { - var current = node.className; - if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; } - } - function joinClasses(a, b) { - var as = a.split(" "); - for (var i = 0; i < as.length; i++) - { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } } - return b - } - - var selectInput = function(node) { node.select(); }; - if (ios) // Mobile Safari apparently has a bug where select() is broken. - { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; } - else if (ie) // Suppress mysterious IE10 errors - { selectInput = function(node) { try { node.select(); } catch(_e) {} }; } - - function bind(f) { - var args = Array.prototype.slice.call(arguments, 1); - return function(){return f.apply(null, args)} - } - - function copyObj(obj, target, overwrite) { - if (!target) { target = {}; } - for (var prop in obj) - { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) - { target[prop] = obj[prop]; } } - return target - } - - // Counts the column offset in a string, taking tabs into account. - // Used mostly to find indentation. - function countColumn(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/); - if (end == -1) { end = string.length; } - } - for (var i = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf("\t", i); - if (nextTab < 0 || nextTab >= end) - { return n + (end - i) } - n += nextTab - i; - n += tabSize - (n % tabSize); - i = nextTab + 1; - } - } - - var Delayed = function() { - this.id = null; - this.f = null; - this.time = 0; - this.handler = bind(this.onTimeout, this); - }; - Delayed.prototype.onTimeout = function (self) { - self.id = 0; - if (self.time <= +new Date) { - self.f(); - } else { - setTimeout(self.handler, self.time - +new Date); - } - }; - Delayed.prototype.set = function (ms, f) { - this.f = f; - var time = +new Date + ms; - if (!this.id || time < this.time) { - clearTimeout(this.id); - this.id = setTimeout(this.handler, ms); - this.time = time; - } - }; - - function indexOf(array, elt) { - for (var i = 0; i < array.length; ++i) - { if (array[i] == elt) { return i } } - return -1 - } - - // Number of pixels added to scroller and sizer to hide scrollbar - var scrollerGap = 50; - - // Returned or thrown by various protocols to signal 'I'm not - // handling this'. - var Pass = {toString: function(){return "CodeMirror.Pass"}}; - - // Reused option objects for setSelection & friends - var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; - - // The inverse of countColumn -- find the offset that corresponds to - // a particular column. - function findColumn(string, goal, tabSize) { - for (var pos = 0, col = 0;;) { - var nextTab = string.indexOf("\t", pos); - if (nextTab == -1) { nextTab = string.length; } - var skipped = nextTab - pos; - if (nextTab == string.length || col + skipped >= goal) - { return pos + Math.min(skipped, goal - col) } - col += nextTab - pos; - col += tabSize - (col % tabSize); - pos = nextTab + 1; - if (col >= goal) { return pos } - } - } - - var spaceStrs = [""]; - function spaceStr(n) { - while (spaceStrs.length <= n) - { spaceStrs.push(lst(spaceStrs) + " "); } - return spaceStrs[n] - } - - function lst(arr) { return arr[arr.length-1] } - - function map(array, f) { - var out = []; - for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); } - return out - } - - function insertSorted(array, value, score) { - var pos = 0, priority = score(value); - while (pos < array.length && score(array[pos]) <= priority) { pos++; } - array.splice(pos, 0, value); - } - - function nothing() {} - - function createObj(base, props) { - var inst; - if (Object.create) { - inst = Object.create(base); - } else { - nothing.prototype = base; - inst = new nothing(); - } - if (props) { copyObj(props, inst); } - return inst - } - - var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; - function isWordCharBasic(ch) { - return /\w/.test(ch) || ch > "\x80" && - (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) - } - function isWordChar(ch, helper) { - if (!helper) { return isWordCharBasic(ch) } - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } - return helper.test(ch) - } - - function isEmpty(obj) { - for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } - return true - } - - // Extending unicode characters. A series of a non-extending char + - // any number of extending chars is treated as a single unit as far - // as editing and measuring is concerned. This is not fully correct, - // since some scripts/fonts/browsers also treat other configurations - // of code points as a group. - var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; - function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } - - // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. - function skipExtendingChars(str, pos, dir) { - while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; } - return pos - } - - // Returns the value from the range [`from`; `to`] that satisfies - // `pred` and is closest to `from`. Assumes that at least `to` - // satisfies `pred`. Supports `from` being greater than `to`. - function findFirst(pred, from, to) { - // At any point we are certain `to` satisfies `pred`, don't know - // whether `from` does. - var dir = from > to ? -1 : 1; - for (;;) { - if (from == to) { return from } - var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); - if (mid == from) { return pred(mid) ? from : to } - if (pred(mid)) { to = mid; } - else { from = mid + dir; } - } - } - - // BIDI HELPERS - - function iterateBidiSections(order, from, to, f) { - if (!order) { return f(from, to, "ltr", 0) } - var found = false; - for (var i = 0; i < order.length; ++i) { - var part = order[i]; - if (part.from < to && part.to > from || from == to && part.to == from) { - f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); - found = true; - } - } - if (!found) { f(from, to, "ltr"); } - } - - var bidiOther = null; - function getBidiPartAt(order, ch, sticky) { - var found; - bidiOther = null; - for (var i = 0; i < order.length; ++i) { - var cur = order[i]; - if (cur.from < ch && cur.to > ch) { return i } - if (cur.to == ch) { - if (cur.from != cur.to && sticky == "before") { found = i; } - else { bidiOther = i; } - } - if (cur.from == ch) { - if (cur.from != cur.to && sticky != "before") { found = i; } - else { bidiOther = i; } - } - } - return found != null ? found : bidiOther - } - - // Bidirectional ordering algorithm - // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm - // that this (partially) implements. - - // One-char codes used for character types: - // L (L): Left-to-Right - // R (R): Right-to-Left - // r (AL): Right-to-Left Arabic - // 1 (EN): European Number - // + (ES): European Number Separator - // % (ET): European Number Terminator - // n (AN): Arabic Number - // , (CS): Common Number Separator - // m (NSM): Non-Spacing Mark - // b (BN): Boundary Neutral - // s (B): Paragraph Separator - // t (S): Segment Separator - // w (WS): Whitespace - // N (ON): Other Neutrals - - // Returns null if characters are ordered as they appear - // (left-to-right), or an array of sections ({from, to, level} - // objects) in the order in which they occur visually. - var bidiOrdering = (function() { - // Character types for codepoints 0 to 0xff - var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; - // Character types for codepoints 0x600 to 0x6f9 - var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; - function charType(code) { - if (code <= 0xf7) { return lowTypes.charAt(code) } - else if (0x590 <= code && code <= 0x5f4) { return "R" } - else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } - else if (0x6ee <= code && code <= 0x8ac) { return "r" } - else if (0x2000 <= code && code <= 0x200b) { return "w" } - else if (code == 0x200c) { return "b" } - else { return "L" } - } - - var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; - var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; - - function BidiSpan(level, from, to) { - this.level = level; - this.from = from; this.to = to; - } - - return function(str, direction) { - var outerType = direction == "ltr" ? "L" : "R"; - - if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } - var len = str.length, types = []; - for (var i = 0; i < len; ++i) - { types.push(charType(str.charCodeAt(i))); } - - // W1. Examine each non-spacing mark (NSM) in the level run, and - // change the type of the NSM to the type of the previous - // character. If the NSM is at the start of the level run, it will - // get the type of sor. - for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { - var type = types[i$1]; - if (type == "m") { types[i$1] = prev; } - else { prev = type; } - } - - // W2. Search backwards from each instance of a European number - // until the first strong type (R, L, AL, or sor) is found. If an - // AL is found, change the type of the European number to Arabic - // number. - // W3. Change all ALs to R. - for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { - var type$1 = types[i$2]; - if (type$1 == "1" && cur == "r") { types[i$2] = "n"; } - else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } } - } - - // W4. A single European separator between two European numbers - // changes to a European number. A single common separator between - // two numbers of the same type changes to that type. - for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { - var type$2 = types[i$3]; - if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; } - else if (type$2 == "," && prev$1 == types[i$3+1] && - (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; } - prev$1 = type$2; - } - - // W5. A sequence of European terminators adjacent to European - // numbers changes to all European numbers. - // W6. Otherwise, separators and terminators change to Other - // Neutral. - for (var i$4 = 0; i$4 < len; ++i$4) { - var type$3 = types[i$4]; - if (type$3 == ",") { types[i$4] = "N"; } - else if (type$3 == "%") { - var end = (void 0); - for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} - var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; - for (var j = i$4; j < end; ++j) { types[j] = replace; } - i$4 = end - 1; - } - } - - // W7. Search backwards from each instance of a European number - // until the first strong type (R, L, or sor) is found. If an L is - // found, then change the type of the European number to L. - for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { - var type$4 = types[i$5]; - if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; } - else if (isStrong.test(type$4)) { cur$1 = type$4; } - } - - // N1. A sequence of neutrals takes the direction of the - // surrounding strong text if the text on both sides has the same - // direction. European and Arabic numbers act as if they were R in - // terms of their influence on neutrals. Start-of-level-run (sor) - // and end-of-level-run (eor) are used at level run boundaries. - // N2. Any remaining neutrals take the embedding direction. - for (var i$6 = 0; i$6 < len; ++i$6) { - if (isNeutral.test(types[i$6])) { - var end$1 = (void 0); - for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} - var before = (i$6 ? types[i$6-1] : outerType) == "L"; - var after = (end$1 < len ? types[end$1] : outerType) == "L"; - var replace$1 = before == after ? (before ? "L" : "R") : outerType; - for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; } - i$6 = end$1 - 1; - } - } - - // Here we depart from the documented algorithm, in order to avoid - // building up an actual levels array. Since there are only three - // levels (0, 1, 2) in an implementation that doesn't take - // explicit embedding into account, we can build up the order on - // the fly, without following the level-based algorithm. - var order = [], m; - for (var i$7 = 0; i$7 < len;) { - if (countsAsLeft.test(types[i$7])) { - var start = i$7; - for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} - order.push(new BidiSpan(0, start, i$7)); - } else { - var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0; - for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} - for (var j$2 = pos; j$2 < i$7;) { - if (countsAsNum.test(types[j$2])) { - if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; } - var nstart = j$2; - for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} - order.splice(at, 0, new BidiSpan(2, nstart, j$2)); - at += isRTL; - pos = j$2; - } else { ++j$2; } - } - if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); } - } - } - if (direction == "ltr") { - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length; - order.unshift(new BidiSpan(0, 0, m[0].length)); - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length; - order.push(new BidiSpan(0, len - m[0].length, len)); - } - } - - return direction == "rtl" ? order.reverse() : order - } - })(); - - // Get the bidi ordering for the given line (and cache it). Returns - // false for lines that are fully left-to-right, and an array of - // BidiSpan objects otherwise. - function getOrder(line, direction) { - var order = line.order; - if (order == null) { order = line.order = bidiOrdering(line.text, direction); } - return order - } - - // EVENT HANDLING - - // Lightweight event framework. on/off also work on DOM nodes, - // registering native DOM handlers. - - var noHandlers = []; - - var on = function(emitter, type, f) { - if (emitter.addEventListener) { - emitter.addEventListener(type, f, false); - } else if (emitter.attachEvent) { - emitter.attachEvent("on" + type, f); - } else { - var map = emitter._handlers || (emitter._handlers = {}); - map[type] = (map[type] || noHandlers).concat(f); - } - }; - - function getHandlers(emitter, type) { - return emitter._handlers && emitter._handlers[type] || noHandlers - } - - function off(emitter, type, f) { - if (emitter.removeEventListener) { - emitter.removeEventListener(type, f, false); - } else if (emitter.detachEvent) { - emitter.detachEvent("on" + type, f); - } else { - var map = emitter._handlers, arr = map && map[type]; - if (arr) { - var index = indexOf(arr, f); - if (index > -1) - { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); } - } - } - } - - function signal(emitter, type /*, values...*/) { - var handlers = getHandlers(emitter, type); - if (!handlers.length) { return } - var args = Array.prototype.slice.call(arguments, 2); - for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); } - } - - // The DOM events that CodeMirror handles can be overridden by - // registering a (non-DOM) handler on the editor for the event name, - // and preventDefault-ing the event in that handler. - function signalDOMEvent(cm, e, override) { - if (typeof e == "string") - { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; } - signal(cm, override || e.type, cm, e); - return e_defaultPrevented(e) || e.codemirrorIgnore - } - - function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity; - if (!arr) { return } - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); - for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) - { set.push(arr[i]); } } - } - - function hasHandler(emitter, type) { - return getHandlers(emitter, type).length > 0 - } - - // Add on and off methods to a constructor's prototype, to make - // registering events on such objects more convenient. - function eventMixin(ctor) { - ctor.prototype.on = function(type, f) {on(this, type, f);}; - ctor.prototype.off = function(type, f) {off(this, type, f);}; - } - - // Due to the fact that we still support jurassic IE versions, some - // compatibility wrappers are needed. - - function e_preventDefault(e) { - if (e.preventDefault) { e.preventDefault(); } - else { e.returnValue = false; } - } - function e_stopPropagation(e) { - if (e.stopPropagation) { e.stopPropagation(); } - else { e.cancelBubble = true; } - } - function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false - } - function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} - - function e_target(e) {return e.target || e.srcElement} - function e_button(e) { - var b = e.which; - if (b == null) { - if (e.button & 1) { b = 1; } - else if (e.button & 2) { b = 3; } - else if (e.button & 4) { b = 2; } - } - if (mac && e.ctrlKey && b == 1) { b = 3; } - return b - } - - // Detect drag-and-drop - var dragAndDrop = function() { - // There is *some* kind of drag-and-drop support in IE6-8, but I - // couldn't get it to work yet. - if (ie && ie_version < 9) { return false } - var div = elt('div'); - return "draggable" in div || "dragDrop" in div - }(); - - var zwspSupported; - function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "\u200b"); - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); - if (measure.firstChild.offsetHeight != 0) - { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } - } - var node = zwspSupported ? elt("span", "\u200b") : - elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); - node.setAttribute("cm-text", ""); - return node - } - - // Feature-detect IE's crummy client rect reporting for bidi text - var badBidiRects; - function hasBadBidiRects(measure) { - if (badBidiRects != null) { return badBidiRects } - var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); - var r0 = range(txt, 0, 1).getBoundingClientRect(); - var r1 = range(txt, 1, 2).getBoundingClientRect(); - removeChildren(measure); - if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) - return badBidiRects = (r1.right - r0.right < 3) - } - - // See if "".split is the broken IE version, if so, provide an - // alternative way to split lines. - var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { - var pos = 0, result = [], l = string.length; - while (pos <= l) { - var nl = string.indexOf("\n", pos); - if (nl == -1) { nl = string.length; } - var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); - var rt = line.indexOf("\r"); - if (rt != -1) { - result.push(line.slice(0, rt)); - pos += rt + 1; - } else { - result.push(line); - pos = nl + 1; - } - } - return result - } : function (string) { return string.split(/\r\n?|\n/); }; - - var hasSelection = window.getSelection ? function (te) { - try { return te.selectionStart != te.selectionEnd } - catch(e) { return false } - } : function (te) { - var range; - try {range = te.ownerDocument.selection.createRange();} - catch(e) {} - if (!range || range.parentElement() != te) { return false } - return range.compareEndPoints("StartToEnd", range) != 0 - }; - - var hasCopyEvent = (function () { - var e = elt("div"); - if ("oncopy" in e) { return true } - e.setAttribute("oncopy", "return;"); - return typeof e.oncopy == "function" - })(); - - var badZoomedRects = null; - function hasBadZoomedRects(measure) { - if (badZoomedRects != null) { return badZoomedRects } - var node = removeChildrenAndAdd(measure, elt("span", "x")); - var normal = node.getBoundingClientRect(); - var fromRange = range(node, 0, 1).getBoundingClientRect(); - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 - } - - // Known modes, by name and by MIME - var modes = {}, mimeModes = {}; - - // Extra arguments are stored as the mode's dependencies, which is - // used by (legacy) mechanisms like loadmode.js to automatically - // load a mode. (Preferred mechanism is the require/define calls.) - function defineMode(name, mode) { - if (arguments.length > 2) - { mode.dependencies = Array.prototype.slice.call(arguments, 2); } - modes[name] = mode; - } - - function defineMIME(mime, spec) { - mimeModes[mime] = spec; - } - - // Given a MIME type, a {name, ...options} config object, or a name - // string, return a mode config object. - function resolveMode(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - var found = mimeModes[spec.name]; - if (typeof found == "string") { found = {name: found}; } - spec = createObj(found, spec); - spec.name = found.name; - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { - return resolveMode("application/xml") - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { - return resolveMode("application/json") - } - if (typeof spec == "string") { return {name: spec} } - else { return spec || {name: "null"} } - } - - // Given a mode spec (anything that resolveMode accepts), find and - // initialize an actual mode object. - function getMode(options, spec) { - spec = resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) { return getMode(options, "text/plain") } - var modeObj = mfactory(options, spec); - if (modeExtensions.hasOwnProperty(spec.name)) { - var exts = modeExtensions[spec.name]; - for (var prop in exts) { - if (!exts.hasOwnProperty(prop)) { continue } - if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; } - modeObj[prop] = exts[prop]; - } - } - modeObj.name = spec.name; - if (spec.helperType) { modeObj.helperType = spec.helperType; } - if (spec.modeProps) { for (var prop$1 in spec.modeProps) - { modeObj[prop$1] = spec.modeProps[prop$1]; } } - - return modeObj - } - - // This can be used to attach properties to mode objects from - // outside the actual mode definition. - var modeExtensions = {}; - function extendMode(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); - copyObj(properties, exts); - } - - function copyState(mode, state) { - if (state === true) { return state } - if (mode.copyState) { return mode.copyState(state) } - var nstate = {}; - for (var n in state) { - var val = state[n]; - if (val instanceof Array) { val = val.concat([]); } - nstate[n] = val; - } - return nstate - } - - // Given a mode and a state (for that mode), find the inner mode and - // state at the position that the state refers to. - function innerMode(mode, state) { - var info; - while (mode.innerMode) { - info = mode.innerMode(state); - if (!info || info.mode == mode) { break } - state = info.state; - mode = info.mode; - } - return info || {mode: mode, state: state} - } - - function startState(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true - } - - // STRING STREAM - - // Fed to the mode parsers, provides helper functions to make - // parsers more succinct. - - var StringStream = function(string, tabSize, lineOracle) { - this.pos = this.start = 0; - this.string = string; - this.tabSize = tabSize || 8; - this.lastColumnPos = this.lastColumnValue = 0; - this.lineStart = 0; - this.lineOracle = lineOracle; - }; - - StringStream.prototype.eol = function () {return this.pos >= this.string.length}; - StringStream.prototype.sol = function () {return this.pos == this.lineStart}; - StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; - StringStream.prototype.next = function () { - if (this.pos < this.string.length) - { return this.string.charAt(this.pos++) } - }; - StringStream.prototype.eat = function (match) { - var ch = this.string.charAt(this.pos); - var ok; - if (typeof match == "string") { ok = ch == match; } - else { ok = ch && (match.test ? match.test(ch) : match(ch)); } - if (ok) {++this.pos; return ch} - }; - StringStream.prototype.eatWhile = function (match) { - var start = this.pos; - while (this.eat(match)){} - return this.pos > start - }; - StringStream.prototype.eatSpace = function () { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; } - return this.pos > start - }; - StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;}; - StringStream.prototype.skipTo = function (ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) {this.pos = found; return true} - }; - StringStream.prototype.backUp = function (n) {this.pos -= n;}; - StringStream.prototype.column = function () { - if (this.lastColumnPos < this.start) { - this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); - this.lastColumnPos = this.start; - } - return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) - }; - StringStream.prototype.indentation = function () { - return countColumn(this.string, null, this.tabSize) - - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) - }; - StringStream.prototype.match = function (pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) { this.pos += pattern.length; } - return true - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) { return null } - if (match && consume !== false) { this.pos += match[0].length; } - return match - } - }; - StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; - StringStream.prototype.hideFirstChars = function (n, inner) { - this.lineStart += n; - try { return inner() } - finally { this.lineStart -= n; } - }; - StringStream.prototype.lookAhead = function (n) { - var oracle = this.lineOracle; - return oracle && oracle.lookAhead(n) - }; - StringStream.prototype.baseToken = function () { - var oracle = this.lineOracle; - return oracle && oracle.baseToken(this.pos) - }; - - // Find the line object corresponding to the given line number. - function getLine(doc, n) { - n -= doc.first; - if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } - var chunk = doc; - while (!chunk.lines) { - for (var i = 0;; ++i) { - var child = chunk.children[i], sz = child.chunkSize(); - if (n < sz) { chunk = child; break } - n -= sz; - } - } - return chunk.lines[n] - } - - // Get the part of a document between two positions, as an array of - // strings. - function getBetween(doc, start, end) { - var out = [], n = start.line; - doc.iter(start.line, end.line + 1, function (line) { - var text = line.text; - if (n == end.line) { text = text.slice(0, end.ch); } - if (n == start.line) { text = text.slice(start.ch); } - out.push(text); - ++n; - }); - return out - } - // Get the lines between from and to, as array of strings. - function getLines(doc, from, to) { - var out = []; - doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value - return out - } - - // Update the height of a line, propagating the height change - // upwards to parent nodes. - function updateLineHeight(line, height) { - var diff = height - line.height; - if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } } - } - - // Given a line object, find its line number by walking up through - // its parent links. - function lineNo(line) { - if (line.parent == null) { return null } - var cur = line.parent, no = indexOf(cur.lines, line); - for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { - for (var i = 0;; ++i) { - if (chunk.children[i] == cur) { break } - no += chunk.children[i].chunkSize(); - } - } - return no + cur.first - } - - // Find the line at the given vertical position, using the height - // information in the document tree. - function lineAtHeight(chunk, h) { - var n = chunk.first; - outer: do { - for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { - var child = chunk.children[i$1], ch = child.height; - if (h < ch) { chunk = child; continue outer } - h -= ch; - n += child.chunkSize(); - } - return n - } while (!chunk.lines) - var i = 0; - for (; i < chunk.lines.length; ++i) { - var line = chunk.lines[i], lh = line.height; - if (h < lh) { break } - h -= lh; - } - return n + i - } - - function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} - - function lineNumberFor(options, i) { - return String(options.lineNumberFormatter(i + options.firstLineNumber)) - } - - // A Pos instance represents a position within the text. - function Pos(line, ch, sticky) { - if ( sticky === void 0 ) sticky = null; - - if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } - this.line = line; - this.ch = ch; - this.sticky = sticky; - } - - // Compare two positions, return 0 if they are the same, a negative - // number when a is less, and a positive number otherwise. - function cmp(a, b) { return a.line - b.line || a.ch - b.ch } - - function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } - - function copyPos(x) {return Pos(x.line, x.ch)} - function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } - function minPos(a, b) { return cmp(a, b) < 0 ? a : b } - - // Most of the external API clips given positions to make sure they - // actually exist within the document. - function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} - function clipPos(doc, pos) { - if (pos.line < doc.first) { return Pos(doc.first, 0) } - var last = doc.first + doc.size - 1; - if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } - return clipToLen(pos, getLine(doc, pos.line).text.length) - } - function clipToLen(pos, linelen) { - var ch = pos.ch; - if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } - else if (ch < 0) { return Pos(pos.line, 0) } - else { return pos } - } - function clipPosArray(doc, array) { - var out = []; - for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); } - return out - } - - var SavedContext = function(state, lookAhead) { - this.state = state; - this.lookAhead = lookAhead; - }; - - var Context = function(doc, state, line, lookAhead) { - this.state = state; - this.doc = doc; - this.line = line; - this.maxLookAhead = lookAhead || 0; - this.baseTokens = null; - this.baseTokenPos = 1; - }; - - Context.prototype.lookAhead = function (n) { - var line = this.doc.getLine(this.line + n); - if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; } - return line - }; - - Context.prototype.baseToken = function (n) { - if (!this.baseTokens) { return null } - while (this.baseTokens[this.baseTokenPos] <= n) - { this.baseTokenPos += 2; } - var type = this.baseTokens[this.baseTokenPos + 1]; - return {type: type && type.replace(/( |^)overlay .*/, ""), - size: this.baseTokens[this.baseTokenPos] - n} - }; - - Context.prototype.nextLine = function () { - this.line++; - if (this.maxLookAhead > 0) { this.maxLookAhead--; } - }; - - Context.fromSaved = function (doc, saved, line) { - if (saved instanceof SavedContext) - { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) } - else - { return new Context(doc, copyState(doc.mode, saved), line) } - }; - - Context.prototype.save = function (copy) { - var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; - return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state - }; - - - // Compute a style array (an array starting with a mode generation - // -- for invalidation -- followed by pairs of end positions and - // style strings), which is used to highlight the tokens on the - // line. - function highlightLine(cm, line, context, forceToEnd) { - // A styles array always starts with a number identifying the - // mode/overlays that it is based on (for easy invalidation). - var st = [cm.state.modeGen], lineClasses = {}; - // Compute the base array of styles - runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); }, - lineClasses, forceToEnd); - var state = context.state; - - // Run overlays, adjust style array. - var loop = function ( o ) { - context.baseTokens = st; - var overlay = cm.state.overlays[o], i = 1, at = 0; - context.state = true; - runMode(cm, line.text, overlay.mode, context, function (end, style) { - var start = i; - // Ensure there's a token end at the current position, and that i points at it - while (at < end) { - var i_end = st[i]; - if (i_end > end) - { st.splice(i, 1, end, st[i+1], i_end); } - i += 2; - at = Math.min(end, i_end); - } - if (!style) { return } - if (overlay.opaque) { - st.splice(start, i - start, end, "overlay " + style); - i = start + 2; - } else { - for (; start < i; start += 2) { - var cur = st[start+1]; - st[start+1] = (cur ? cur + " " : "") + "overlay " + style; - } - } - }, lineClasses); - context.state = state; - context.baseTokens = null; - context.baseTokenPos = 1; - }; - - for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); - - return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} - } - - function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var context = getContextBefore(cm, lineNo(line)); - var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); - var result = highlightLine(cm, line, context); - if (resetState) { context.state = resetState; } - line.stateAfter = context.save(!resetState); - line.styles = result.styles; - if (result.classes) { line.styleClasses = result.classes; } - else if (line.styleClasses) { line.styleClasses = null; } - if (updateFrontier === cm.doc.highlightFrontier) - { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); } - } - return line.styles - } - - function getContextBefore(cm, n, precise) { - var doc = cm.doc, display = cm.display; - if (!doc.mode.startState) { return new Context(doc, true, n) } - var start = findStartLine(cm, n, precise); - var saved = start > doc.first && getLine(doc, start - 1).stateAfter; - var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); - - doc.iter(start, n, function (line) { - processLine(cm, line.text, context); - var pos = context.line; - line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; - context.nextLine(); - }); - if (precise) { doc.modeFrontier = context.line; } - return context - } - - // Lightweight form of highlight -- proceed over this line and - // update state, but don't save a style array. Used for lines that - // aren't currently visible. - function processLine(cm, text, context, startAt) { - var mode = cm.doc.mode; - var stream = new StringStream(text, cm.options.tabSize, context); - stream.start = stream.pos = startAt || 0; - if (text == "") { callBlankLine(mode, context.state); } - while (!stream.eol()) { - readToken(mode, stream, context.state); - stream.start = stream.pos; - } - } - - function callBlankLine(mode, state) { - if (mode.blankLine) { return mode.blankLine(state) } - if (!mode.innerMode) { return } - var inner = innerMode(mode, state); - if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } - } - - function readToken(mode, stream, state, inner) { - for (var i = 0; i < 10; i++) { - if (inner) { inner[0] = innerMode(mode, state).mode; } - var style = mode.token(stream, state); - if (stream.pos > stream.start) { return style } - } - throw new Error("Mode " + mode.name + " failed to advance stream.") - } - - var Token = function(stream, type, state) { - this.start = stream.start; this.end = stream.pos; - this.string = stream.current(); - this.type = type || null; - this.state = state; - }; - - // Utility for getTokenAt and getLineTokens - function takeToken(cm, pos, precise, asArray) { - var doc = cm.doc, mode = doc.mode, style; - pos = clipPos(doc, pos); - var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise); - var stream = new StringStream(line.text, cm.options.tabSize, context), tokens; - if (asArray) { tokens = []; } - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos; - style = readToken(mode, stream, context.state); - if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); } - } - return asArray ? tokens : new Token(stream, style, context.state) - } - - function extractLineClasses(type, output) { - if (type) { for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); - if (!lineClass) { break } - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); - var prop = lineClass[1] ? "bgClass" : "textClass"; - if (output[prop] == null) - { output[prop] = lineClass[2]; } - else if (!(new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)")).test(output[prop])) - { output[prop] += " " + lineClass[2]; } - } } - return type - } - - // Run the given mode's parser over a line, calling f for each token. - function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans; - if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; } - var curStart = 0, curStyle = null; - var stream = new StringStream(text, cm.options.tabSize, context), style; - var inner = cm.options.addModeClass && [null]; - if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); } - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false; - if (forceToEnd) { processLine(cm, text, context, stream.pos); } - stream.pos = text.length; - style = null; - } else { - style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); - } - if (inner) { - var mName = inner[0].name; - if (mName) { style = "m-" + (style ? mName + " " + style : mName); } - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 5000); - f(curStart, curStyle); - } - curStyle = style; - } - stream.start = stream.pos; - } - while (curStart < stream.pos) { - // Webkit seems to refuse to render text nodes longer than 57444 - // characters, and returns inaccurate measurements in nodes - // starting around 5000 chars. - var pos = Math.min(stream.pos, curStart + 5000); - f(pos, curStyle); - curStart = pos; - } - } - - // Finds the line to start with when starting a parse. Tries to - // find a line with a stateAfter, so that it can start with a - // valid state. If that fails, it returns the line with the - // smallest indentation, which tends to need the least context to - // parse correctly. - function findStartLine(cm, n, precise) { - var minindent, minline, doc = cm.doc; - var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); - for (var search = n; search > lim; --search) { - if (search <= doc.first) { return doc.first } - var line = getLine(doc, search - 1), after = line.stateAfter; - if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) - { return search } - var indented = countColumn(line.text, null, cm.options.tabSize); - if (minline == null || minindent > indented) { - minline = search - 1; - minindent = indented; - } - } - return minline - } - - function retreatFrontier(doc, n) { - doc.modeFrontier = Math.min(doc.modeFrontier, n); - if (doc.highlightFrontier < n - 10) { return } - var start = doc.first; - for (var line = n - 1; line > start; line--) { - var saved = getLine(doc, line).stateAfter; - // change is on 3 - // state on line 1 looked ahead 2 -- so saw 3 - // test 1 + 2 < 3 should cover this - if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { - start = line + 1; - break - } - } - doc.highlightFrontier = Math.min(doc.highlightFrontier, start); - } - - // Optimize some code when these features are not used. - var sawReadOnlySpans = false, sawCollapsedSpans = false; - - function seeReadOnlySpans() { - sawReadOnlySpans = true; - } - - function seeCollapsedSpans() { - sawCollapsedSpans = true; - } - - // TEXTMARKER SPANS - - function MarkedSpan(marker, from, to) { - this.marker = marker; - this.from = from; this.to = to; - } - - // Search an array of spans for a span matching the given marker. - function getMarkedSpanFor(spans, marker) { - if (spans) { for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.marker == marker) { return span } - } } - } - - // Remove a span from an array, returning undefined if no spans are - // left (we don't store arrays for lines without spans). - function removeMarkedSpan(spans, span) { - var r; - for (var i = 0; i < spans.length; ++i) - { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } } - return r - } - - // Add a span to a line. - function addMarkedSpan(line, span, op) { - var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet)); - if (inThisOp && inThisOp.has(line.markedSpans)) { - line.markedSpans.push(span); - } else { - line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; - if (inThisOp) { inThisOp.add(line.markedSpans); } - } - span.marker.attachLine(line); - } - - // Used for the algorithm that adjusts markers for a change in the - // document. These functions cut an array of spans at a given - // character position, returning an array of remaining chunks (or - // undefined if nothing remains). - function markedSpansBefore(old, startCh, isInsert) { - var nw; - if (old) { for (var i = 0; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); - if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh) - ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); - } - } } - return nw - } - function markedSpansAfter(old, endCh, isInsert) { - var nw; - if (old) { for (var i = 0; i < old.length; ++i) { - var span = old[i], marker = span.marker; - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh) - ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, - span.to == null ? null : span.to - endCh)); - } - } } - return nw - } - - // Given a change object, compute the new set of marker spans that - // cover the line in which the change took place. Removes spans - // entirely within the change, reconnects spans belonging to the - // same marker that appear on both sides of the change, and cuts off - // spans partially within the change. Returns an array of span - // arrays with one element for each line in (after) the change. - function stretchSpansOverChange(doc, change) { - if (change.full) { return null } - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; - if (!oldFirst && !oldLast) { return null } - - var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; - // Get the spans that 'stick out' on both sides - var first = markedSpansBefore(oldFirst, startCh, isInsert); - var last = markedSpansAfter(oldLast, endCh, isInsert); - - // Next, merge those two ends - var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); - if (first) { - // Fix up .to properties of first - for (var i = 0; i < first.length; ++i) { - var span = first[i]; - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker); - if (!found) { span.to = startCh; } - else if (sameLine) { span.to = found.to == null ? null : found.to + offset; } - } - } - } - if (last) { - // Fix up .from in last (or move them into first in case of sameLine) - for (var i$1 = 0; i$1 < last.length; ++i$1) { - var span$1 = last[i$1]; - if (span$1.to != null) { span$1.to += offset; } - if (span$1.from == null) { - var found$1 = getMarkedSpanFor(first, span$1.marker); - if (!found$1) { - span$1.from = offset; - if (sameLine) { (first || (first = [])).push(span$1); } - } - } else { - span$1.from += offset; - if (sameLine) { (first || (first = [])).push(span$1); } - } - } - } - // Make sure we didn't create any zero-length spans - if (first) { first = clearEmptySpans(first); } - if (last && last != first) { last = clearEmptySpans(last); } - - var newMarkers = [first]; - if (!sameLine) { - // Fill gap with whole-line-spans - var gap = change.text.length - 2, gapMarkers; - if (gap > 0 && first) - { for (var i$2 = 0; i$2 < first.length; ++i$2) - { if (first[i$2].to == null) - { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } } - for (var i$3 = 0; i$3 < gap; ++i$3) - { newMarkers.push(gapMarkers); } - newMarkers.push(last); - } - return newMarkers - } - - // Remove spans that are empty and don't have a clearWhenEmpty - // option of false. - function clearEmptySpans(spans) { - for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) - { spans.splice(i--, 1); } - } - if (!spans.length) { return null } - return spans - } - - // Used to 'clip' out readOnly ranges when making a change. - function removeReadOnlyRanges(doc, from, to) { - var markers = null; - doc.iter(from.line, to.line + 1, function (line) { - if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { - var mark = line.markedSpans[i].marker; - if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) - { (markers || (markers = [])).push(mark); } - } } - }); - if (!markers) { return null } - var parts = [{from: from, to: to}]; - for (var i = 0; i < markers.length; ++i) { - var mk = markers[i], m = mk.find(0); - for (var j = 0; j < parts.length; ++j) { - var p = parts[j]; - if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } - var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); - if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) - { newParts.push({from: p.from, to: m.from}); } - if (dto > 0 || !mk.inclusiveRight && !dto) - { newParts.push({from: m.to, to: p.to}); } - parts.splice.apply(parts, newParts); - j += newParts.length - 3; - } - } - return parts - } - - // Connect or disconnect spans from a line. - function detachMarkedSpans(line) { - var spans = line.markedSpans; - if (!spans) { return } - for (var i = 0; i < spans.length; ++i) - { spans[i].marker.detachLine(line); } - line.markedSpans = null; - } - function attachMarkedSpans(line, spans) { - if (!spans) { return } - for (var i = 0; i < spans.length; ++i) - { spans[i].marker.attachLine(line); } - line.markedSpans = spans; - } - - // Helpers used when computing which overlapping collapsed span - // counts as the larger one. - function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } - function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } - - // Returns a number indicating which of two overlapping collapsed - // spans is larger (and thus includes the other). Falls back to - // comparing ids when the spans cover exactly the same range. - function compareCollapsedMarkers(a, b) { - var lenDiff = a.lines.length - b.lines.length; - if (lenDiff != 0) { return lenDiff } - var aPos = a.find(), bPos = b.find(); - var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); - if (fromCmp) { return -fromCmp } - var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); - if (toCmp) { return toCmp } - return b.id - a.id - } - - // Find out whether a line ends or starts in a collapsed span. If - // so, return the marker for that span. - function collapsedSpanAtSide(line, start) { - var sps = sawCollapsedSpans && line.markedSpans, found; - if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && - (!found || compareCollapsedMarkers(found, sp.marker) < 0)) - { found = sp.marker; } - } } - return found - } - function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } - function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } - - function collapsedSpanAround(line, ch) { - var sps = sawCollapsedSpans && line.markedSpans, found; - if (sps) { for (var i = 0; i < sps.length; ++i) { - var sp = sps[i]; - if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && - (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; } - } } - return found - } - - // Test whether there exists a collapsed span that partially - // overlaps (covers the start or end, but not both) of a new span. - // Such overlap is not allowed. - function conflictingCollapsedRange(doc, lineNo, from, to, marker) { - var line = getLine(doc, lineNo); - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) { for (var i = 0; i < sps.length; ++i) { - var sp = sps[i]; - if (!sp.marker.collapsed) { continue } - var found = sp.marker.find(0); - var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); - var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); - if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } - if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || - fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) - { return true } - } } - } - - // A visual line is a line as drawn on the screen. Folding, for - // example, can cause multiple logical lines to appear on the same - // visual line. This finds the start of the visual line that the - // given line is part of (usually that is the line itself). - function visualLine(line) { - var merged; - while (merged = collapsedSpanAtStart(line)) - { line = merged.find(-1, true).line; } - return line - } - - function visualLineEnd(line) { - var merged; - while (merged = collapsedSpanAtEnd(line)) - { line = merged.find(1, true).line; } - return line - } - - // Returns an array of logical lines that continue the visual line - // started by the argument, or undefined if there are no such lines. - function visualLineContinued(line) { - var merged, lines; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line - ;(lines || (lines = [])).push(line); - } - return lines - } - - // Get the line number of the start of the visual line that the - // given line number is part of. - function visualLineNo(doc, lineN) { - var line = getLine(doc, lineN), vis = visualLine(line); - if (line == vis) { return lineN } - return lineNo(vis) - } - - // Get the line number of the start of the next visual line after - // the given line. - function visualLineEndNo(doc, lineN) { - if (lineN > doc.lastLine()) { return lineN } - var line = getLine(doc, lineN), merged; - if (!lineIsHidden(doc, line)) { return lineN } - while (merged = collapsedSpanAtEnd(line)) - { line = merged.find(1, true).line; } - return lineNo(line) + 1 - } - - // Compute whether a line is hidden. Lines count as hidden when they - // are part of a visual line that starts with another line, or when - // they are entirely covered by collapsed, non-widget span. - function lineIsHidden(doc, line) { - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { - sp = sps[i]; - if (!sp.marker.collapsed) { continue } - if (sp.from == null) { return true } - if (sp.marker.widgetNode) { continue } - if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) - { return true } - } } - } - function lineIsHiddenInner(doc, line, span) { - if (span.to == null) { - var end = span.marker.find(1, true); - return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) - } - if (span.marker.inclusiveRight && span.to == line.text.length) - { return true } - for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { - sp = line.markedSpans[i]; - if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && - (sp.to == null || sp.to != span.from) && - (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && - lineIsHiddenInner(doc, line, sp)) { return true } - } - } - - // Find the height above the given line. - function heightAtLine(lineObj) { - lineObj = visualLine(lineObj); - - var h = 0, chunk = lineObj.parent; - for (var i = 0; i < chunk.lines.length; ++i) { - var line = chunk.lines[i]; - if (line == lineObj) { break } - else { h += line.height; } - } - for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { - for (var i$1 = 0; i$1 < p.children.length; ++i$1) { - var cur = p.children[i$1]; - if (cur == chunk) { break } - else { h += cur.height; } - } - } - return h - } - - // Compute the character length of a line, taking into account - // collapsed ranges (see markText) that might hide parts, and join - // other lines onto it. - function lineLength(line) { - if (line.height == 0) { return 0 } - var len = line.text.length, merged, cur = line; - while (merged = collapsedSpanAtStart(cur)) { - var found = merged.find(0, true); - cur = found.from.line; - len += found.from.ch - found.to.ch; - } - cur = line; - while (merged = collapsedSpanAtEnd(cur)) { - var found$1 = merged.find(0, true); - len -= cur.text.length - found$1.from.ch; - cur = found$1.to.line; - len += cur.text.length - found$1.to.ch; - } - return len - } - - // Find the longest line in the document. - function findMaxLine(cm) { - var d = cm.display, doc = cm.doc; - d.maxLine = getLine(doc, doc.first); - d.maxLineLength = lineLength(d.maxLine); - d.maxLineChanged = true; - doc.iter(function (line) { - var len = lineLength(line); - if (len > d.maxLineLength) { - d.maxLineLength = len; - d.maxLine = line; - } - }); - } - - // LINE DATA STRUCTURE - - // Line objects. These hold state related to a line, including - // highlighting info (the styles array). - var Line = function(text, markedSpans, estimateHeight) { - this.text = text; - attachMarkedSpans(this, markedSpans); - this.height = estimateHeight ? estimateHeight(this) : 1; - }; - - Line.prototype.lineNo = function () { return lineNo(this) }; - eventMixin(Line); - - // Change the content (text, markers) of a line. Automatically - // invalidates cached information and tries to re-estimate the - // line's height. - function updateLine(line, text, markedSpans, estimateHeight) { - line.text = text; - if (line.stateAfter) { line.stateAfter = null; } - if (line.styles) { line.styles = null; } - if (line.order != null) { line.order = null; } - detachMarkedSpans(line); - attachMarkedSpans(line, markedSpans); - var estHeight = estimateHeight ? estimateHeight(line) : 1; - if (estHeight != line.height) { updateLineHeight(line, estHeight); } - } - - // Detach a line from the document tree and its markers. - function cleanUpLine(line) { - line.parent = null; - detachMarkedSpans(line); - } - - // Convert a style as returned by a mode (either null, or a string - // containing one or more styles) to a CSS style. This is cached, - // and also looks for line-wide styles. - var styleToClassCache = {}, styleToClassCacheWithMode = {}; - function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) { return null } - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; - return cache[style] || - (cache[style] = style.replace(/\S+/g, "cm-$&")) - } - - // Render the DOM representation of the text of a line. Also builds - // up a 'line map', which points at the DOM nodes that represent - // specific stretches of text, and is used by the measuring code. - // The returned object contains the DOM node, this map, and - // information about line-wide styles that were set by the mode. - function buildLineContent(cm, lineView) { - // The padding-right forces the element to have a 'border', which - // is needed on Webkit to be able to get line-level bounding - // rectangles for it (in measureChar). - var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); - var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, - col: 0, pos: 0, cm: cm, - trailingSpace: false, - splitSpaces: cm.getOption("lineWrapping")}; - lineView.measure = {}; - - // Iterate over the logical lines that make up this visual line. - for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { - var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0); - builder.pos = 0; - builder.addToken = buildToken; - // Optionally wire in some hacks into the token-rendering - // algorithm, to deal with browser quirks. - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) - { builder.addToken = buildTokenBadBidi(builder.addToken, order); } - builder.map = []; - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); - if (line.styleClasses) { - if (line.styleClasses.bgClass) - { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); } - if (line.styleClasses.textClass) - { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } - } - - // Ensure at least a single node is present, for measuring. - if (builder.map.length == 0) - { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); } - - // Store the map and a cache object for the current logical line - if (i == 0) { - lineView.measure.map = builder.map; - lineView.measure.cache = {}; - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) - ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}); - } - } - - // See issue #2901 - if (webkit) { - var last = builder.content.lastChild; - if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) - { builder.content.className = "cm-tab-wrap-hack"; } - } - - signal(cm, "renderLine", cm, lineView.line, builder.pre); - if (builder.pre.className) - { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); } - - return builder - } - - function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "\u2022", "cm-invalidchar"); - token.title = "\\u" + ch.charCodeAt(0).toString(16); - token.setAttribute("aria-label", token.title); - return token - } - - // Build up the DOM representation for a single token, and add it to - // the line map. Takes care to render special characters separately. - function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { - if (!text) { return } - var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; - var special = builder.cm.state.specialChars, mustWrap = false; - var content; - if (!special.test(text)) { - builder.col += text.length; - content = document.createTextNode(displayText); - builder.map.push(builder.pos, builder.pos + text.length, content); - if (ie && ie_version < 9) { mustWrap = true; } - builder.pos += text.length; - } else { - content = document.createDocumentFragment(); - var pos = 0; - while (true) { - special.lastIndex = pos; - var m = special.exec(text); - var skipped = m ? m.index - pos : text.length - pos; - if (skipped) { - var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); - if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); } - else { content.appendChild(txt); } - builder.map.push(builder.pos, builder.pos + skipped, txt); - builder.col += skipped; - builder.pos += skipped; - } - if (!m) { break } - pos += skipped + 1; - var txt$1 = (void 0); - if (m[0] == "\t") { - var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; - txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); - txt$1.setAttribute("role", "presentation"); - txt$1.setAttribute("cm-text", "\t"); - builder.col += tabWidth; - } else if (m[0] == "\r" || m[0] == "\n") { - txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); - txt$1.setAttribute("cm-text", m[0]); - builder.col += 1; - } else { - txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); - txt$1.setAttribute("cm-text", m[0]); - if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); } - else { content.appendChild(txt$1); } - builder.col += 1; - } - builder.map.push(builder.pos, builder.pos + 1, txt$1); - builder.pos++; - } - } - builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; - if (style || startStyle || endStyle || mustWrap || css || attributes) { - var fullStyle = style || ""; - if (startStyle) { fullStyle += startStyle; } - if (endStyle) { fullStyle += endStyle; } - var token = elt("span", [content], fullStyle, css); - if (attributes) { - for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") - { token.setAttribute(attr, attributes[attr]); } } - } - return builder.content.appendChild(token) - } - builder.content.appendChild(content); - } - - // Change some spaces to NBSP to prevent the browser from collapsing - // trailing spaces at the end of a line when rendering text (issue #1362). - function splitSpaces(text, trailingBefore) { - if (text.length > 1 && !/ /.test(text)) { return text } - var spaceBefore = trailingBefore, result = ""; - for (var i = 0; i < text.length; i++) { - var ch = text.charAt(i); - if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) - { ch = "\u00a0"; } - result += ch; - spaceBefore = ch == " "; - } - return result - } - - // Work around nonsense dimensions being reported for stretches of - // right-to-left text. - function buildTokenBadBidi(inner, order) { - return function (builder, text, style, startStyle, endStyle, css, attributes) { - style = style ? style + " cm-force-border" : "cm-force-border"; - var start = builder.pos, end = start + text.length; - for (;;) { - // Find the part that overlaps with the start of this text - var part = (void 0); - for (var i = 0; i < order.length; i++) { - part = order[i]; - if (part.to > start && part.from <= start) { break } - } - if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) } - inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); - startStyle = null; - text = text.slice(part.to - start); - start = part.to; - } - } - } - - function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode; - if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); } - if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { - if (!widget) - { widget = builder.content.appendChild(document.createElement("span")); } - widget.setAttribute("cm-marker", marker.id); - } - if (widget) { - builder.cm.display.input.setUneditable(widget); - builder.content.appendChild(widget); - } - builder.pos += size; - builder.trailingSpace = false; - } - - // Outputs a number of spans to make up a line, taking highlighting - // and marked text into account. - function insertLineContent(line, builder, styles) { - var spans = line.markedSpans, allText = line.text, at = 0; - if (!spans) { - for (var i$1 = 1; i$1 < styles.length; i$1+=2) - { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); } - return - } - - var len = allText.length, pos = 0, i = 1, text = "", style, css; - var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes; - for (;;) { - if (nextChange == pos) { // Update current marker set - spanStyle = spanEndStyle = spanStartStyle = css = ""; - attributes = null; - collapsed = null; nextChange = Infinity; - var foundBookmarks = [], endStyles = (void 0); - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], m = sp.marker; - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { - foundBookmarks.push(m); - } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { - if (sp.to != null && sp.to != pos && nextChange > sp.to) { - nextChange = sp.to; - spanEndStyle = ""; - } - if (m.className) { spanStyle += " " + m.className; } - if (m.css) { css = (css ? css + ";" : "") + m.css; } - if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; } - if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); } - // support for the old title property - // https://github.com/codemirror/CodeMirror/pull/5673 - if (m.title) { (attributes || (attributes = {})).title = m.title; } - if (m.attributes) { - for (var attr in m.attributes) - { (attributes || (attributes = {}))[attr] = m.attributes[attr]; } - } - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) - { collapsed = sp; } - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from; - } - } - if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) - { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } } - - if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) - { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, - collapsed.marker, collapsed.from == null); - if (collapsed.to == null) { return } - if (collapsed.to == pos) { collapsed = false; } - } - } - if (pos >= len) { break } - - var upto = Math.min(len, nextChange); - while (true) { - if (text) { - var end = pos + text.length; - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text; - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, - spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); - } - if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} - pos = end; - spanStartStyle = ""; - } - text = allText.slice(at, at = styles[i++]); - style = interpretTokenStyle(styles[i++], builder.cm.options); - } - } - } - - - // These objects are used to represent the visible (currently drawn) - // part of the document. A LineView may correspond to multiple - // logical lines, if those are connected by collapsed ranges. - function LineView(doc, line, lineN) { - // The starting line - this.line = line; - // Continuing lines, if any - this.rest = visualLineContinued(line); - // Number of logical lines in this visual line - this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; - this.node = this.text = null; - this.hidden = lineIsHidden(doc, line); - } - - // Create a range of LineView objects for the given lines. - function buildViewArray(cm, from, to) { - var array = [], nextPos; - for (var pos = from; pos < to; pos = nextPos) { - var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); - nextPos = pos + view.size; - array.push(view); - } - return array - } - - var operationGroup = null; - - function pushOperation(op) { - if (operationGroup) { - operationGroup.ops.push(op); - } else { - op.ownsGroup = operationGroup = { - ops: [op], - delayedCallbacks: [] - }; - } - } - - function fireCallbacksForOps(group) { - // Calls delayed callbacks and cursorActivity handlers until no - // new ones appear - var callbacks = group.delayedCallbacks, i = 0; - do { - for (; i < callbacks.length; i++) - { callbacks[i].call(null); } - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j]; - if (op.cursorActivityHandlers) - { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) - { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } - } - } while (i < callbacks.length) - } - - function finishOperation(op, endCb) { - var group = op.ownsGroup; - if (!group) { return } - - try { fireCallbacksForOps(group); } - finally { - operationGroup = null; - endCb(group); - } - } - - var orphanDelayedCallbacks = null; - - // Often, we want to signal events at a point where we are in the - // middle of some work, but don't want the handler to start calling - // other methods on the editor, which might be in an inconsistent - // state or simply not expect any other events to happen. - // signalLater looks whether there are any handlers, and schedules - // them to be executed when the last operation ends, or, if no - // operation is active, when a timeout fires. - function signalLater(emitter, type /*, values...*/) { - var arr = getHandlers(emitter, type); - if (!arr.length) { return } - var args = Array.prototype.slice.call(arguments, 2), list; - if (operationGroup) { - list = operationGroup.delayedCallbacks; - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks; - } else { - list = orphanDelayedCallbacks = []; - setTimeout(fireOrphanDelayed, 0); - } - var loop = function ( i ) { - list.push(function () { return arr[i].apply(null, args); }); - }; - - for (var i = 0; i < arr.length; ++i) - loop( i ); - } - - function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks; - orphanDelayedCallbacks = null; - for (var i = 0; i < delayed.length; ++i) { delayed[i](); } - } - - // When an aspect of a line changes, a string is added to - // lineView.changes. This updates the relevant part of the line's - // DOM structure. - function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j]; - if (type == "text") { updateLineText(cm, lineView); } - else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); } - else if (type == "class") { updateLineClasses(cm, lineView); } - else if (type == "widget") { updateLineWidgets(cm, lineView, dims); } - } - lineView.changes = null; - } - - // Lines with gutter elements, widgets or a background class need to - // be wrapped, and have the extra elements added to the wrapper div - function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative"); - if (lineView.text.parentNode) - { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); } - lineView.node.appendChild(lineView.text); - if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; } - } - return lineView.node - } - - function updateLineBackground(cm, lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; - if (cls) { cls += " CodeMirror-linebackground"; } - if (lineView.background) { - if (cls) { lineView.background.className = cls; } - else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } - } else if (cls) { - var wrap = ensureLineWrapped(lineView); - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); - cm.display.input.setUneditable(lineView.background); - } - } - - // Wrapper around buildLineContent which will reuse the structure - // in display.externalMeasured when possible. - function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured; - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null; - lineView.measure = ext.measure; - return ext.built - } - return buildLineContent(cm, lineView) - } - - // Redraw the line's text. Interacts with the background and text - // classes because the mode may output tokens that influence these - // classes. - function updateLineText(cm, lineView) { - var cls = lineView.text.className; - var built = getLineContent(cm, lineView); - if (lineView.text == lineView.node) { lineView.node = built.pre; } - lineView.text.parentNode.replaceChild(built.pre, lineView.text); - lineView.text = built.pre; - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass; - lineView.textClass = built.textClass; - updateLineClasses(cm, lineView); - } else if (cls) { - lineView.text.className = cls; - } - } - - function updateLineClasses(cm, lineView) { - updateLineBackground(cm, lineView); - if (lineView.line.wrapClass) - { ensureLineWrapped(lineView).className = lineView.line.wrapClass; } - else if (lineView.node != lineView.text) - { lineView.node.className = ""; } - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; - lineView.text.className = textClass || ""; - } - - function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter); - lineView.gutter = null; - } - if (lineView.gutterBackground) { - lineView.node.removeChild(lineView.gutterBackground); - lineView.gutterBackground = null; - } - if (lineView.line.gutterClass) { - var wrap = ensureLineWrapped(lineView); - lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, - ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")); - cm.display.input.setUneditable(lineView.gutterBackground); - wrap.insertBefore(lineView.gutterBackground, lineView.text); - } - var markers = lineView.line.gutterMarkers; - if (cm.options.lineNumbers || markers) { - var wrap$1 = ensureLineWrapped(lineView); - var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")); - gutterWrap.setAttribute("aria-hidden", "true"); - cm.display.input.setUneditable(gutterWrap); - wrap$1.insertBefore(gutterWrap, lineView.text); - if (lineView.line.gutterClass) - { gutterWrap.className += " " + lineView.line.gutterClass; } - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) - { lineView.lineNumber = gutterWrap.appendChild( - elt("div", lineNumberFor(cm.options, lineN), - "CodeMirror-linenumber CodeMirror-gutter-elt", - ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); } - if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { - var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id]; - if (found) - { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", - ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); } - } } - } - } - - function updateLineWidgets(cm, lineView, dims) { - if (lineView.alignable) { lineView.alignable = null; } - var isWidget = classTest("CodeMirror-linewidget"); - for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { - next = node.nextSibling; - if (isWidget.test(node.className)) { lineView.node.removeChild(node); } - } - insertLineWidgets(cm, lineView, dims); - } - - // Build a line's DOM representation from scratch - function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView); - lineView.text = lineView.node = built.pre; - if (built.bgClass) { lineView.bgClass = built.bgClass; } - if (built.textClass) { lineView.textClass = built.textClass; } - - updateLineClasses(cm, lineView); - updateLineGutter(cm, lineView, lineN, dims); - insertLineWidgets(cm, lineView, dims); - return lineView.node - } - - // A lineView may contain multiple logical lines (when merged by - // collapsed spans). The widgets for all of them need to be drawn. - function insertLineWidgets(cm, lineView, dims) { - insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); - if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) - { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } } - } - - function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { - if (!line.widgets) { return } - var wrap = ensureLineWrapped(lineView); - for (var i = 0, ws = line.widgets; i < ws.length; ++i) { - var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); - if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); } - positionLineWidget(widget, node, lineView, dims); - cm.display.input.setUneditable(node); - if (allowAbove && widget.above) - { wrap.insertBefore(node, lineView.gutter || lineView.text); } - else - { wrap.appendChild(node); } - signalLater(widget, "redraw"); - } - } - - function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node); - var width = dims.wrapperWidth; - node.style.left = dims.fixedPos + "px"; - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth; - node.style.paddingLeft = dims.gutterTotalWidth + "px"; - } - node.style.width = width + "px"; - } - if (widget.coverGutter) { - node.style.zIndex = 5; - node.style.position = "relative"; - if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; } - } - } - - function widgetHeight(widget) { - if (widget.height != null) { return widget.height } - var cm = widget.doc.cm; - if (!cm) { return 0 } - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;"; - if (widget.coverGutter) - { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; } - if (widget.noHScroll) - { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; } - removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); - } - return widget.height = widget.node.parentNode.offsetHeight - } - - // Return true when the given mouse event happened in a widget - function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || - (n.parentNode == display.sizer && n != display.mover)) - { return true } - } - } - - // POSITION MEASUREMENT - - function paddingTop(display) {return display.lineSpace.offsetTop} - function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} - function paddingH(display) { - if (display.cachedPaddingH) { return display.cachedPaddingH } - var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; - var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; - if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; } - return data - } - - function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } - function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth - } - function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight - } - - // Ensure the lineView.wrapping.heights array is populated. This is - // an array of bottom offsets for the lines that make up a drawn - // line. When lineWrapping is on, there might be more than one - // height. - function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping; - var curWidth = wrapping && displayWidth(cm); - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = []; - if (wrapping) { - lineView.measure.width = curWidth; - var rects = lineView.text.firstChild.getClientRects(); - for (var i = 0; i < rects.length - 1; i++) { - var cur = rects[i], next = rects[i + 1]; - if (Math.abs(cur.bottom - next.bottom) > 2) - { heights.push((cur.bottom + next.top) / 2 - rect.top); } - } - } - heights.push(rect.bottom - rect.top); - } - } - - // Find a line map (mapping character offsets to text nodes) and a - // measurement cache for the given line number. (A line view might - // contain multiple lines when collapsed ranges are present.) - function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) - { return {map: lineView.measure.map, cache: lineView.measure.cache} } - for (var i = 0; i < lineView.rest.length; i++) - { if (lineView.rest[i] == line) - { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } - for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) - { if (lineNo(lineView.rest[i$1]) > lineN) - { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } - } - - // Render a line into the hidden node display.externalMeasured. Used - // when measurement is needed for a line that's not in the viewport. - function updateExternalMeasurement(cm, line) { - line = visualLine(line); - var lineN = lineNo(line); - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); - view.lineN = lineN; - var built = view.built = buildLineContent(cm, view); - view.text = built.pre; - removeChildrenAndAdd(cm.display.lineMeasure, built.pre); - return view - } - - // Get a {top, bottom, left, right} box (in line-local coordinates) - // for a given character. - function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) - } - - // Find a line view that corresponds to the given line number. - function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) - { return cm.display.view[findViewIndex(cm, lineN)] } - var ext = cm.display.externalMeasured; - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) - { return ext } - } - - // Measurement can be split in two steps, the set-up work that - // applies to the whole line, and the measurement of the actual - // character. Functions like coordsChar, that need to do a lot of - // measurements in a row, can thus ensure that the set-up work is - // only done once. - function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line); - var view = findViewForLine(cm, lineN); - if (view && !view.text) { - view = null; - } else if (view && view.changes) { - updateLineForChanges(cm, view, lineN, getDimensions(cm)); - cm.curOp.forceUpdate = true; - } - if (!view) - { view = updateExternalMeasurement(cm, line); } - - var info = mapFromLineView(view, line, lineN); - return { - line: line, view: view, rect: null, - map: info.map, cache: info.cache, before: info.before, - hasHeights: false - } - } - - // Given a prepared measurement object, measures the position of an - // actual character (or fetches it from the cache). - function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) { ch = -1; } - var key = ch + (bias || ""), found; - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key]; - } else { - if (!prepared.rect) - { prepared.rect = prepared.view.text.getBoundingClientRect(); } - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect); - prepared.hasHeights = true; - } - found = measureCharInner(cm, prepared, ch, bias); - if (!found.bogus) { prepared.cache[key] = found; } - } - return {left: found.left, right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom} - } - - var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; - - function nodeAndOffsetInLineMap(map, ch, bias) { - var node, start, end, collapse, mStart, mEnd; - // First, search the line map for the text node corresponding to, - // or closest to, the target character. - for (var i = 0; i < map.length; i += 3) { - mStart = map[i]; - mEnd = map[i + 1]; - if (ch < mStart) { - start = 0; end = 1; - collapse = "left"; - } else if (ch < mEnd) { - start = ch - mStart; - end = start + 1; - } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { - end = mEnd - mStart; - start = end - 1; - if (ch >= mEnd) { collapse = "right"; } - } - if (start != null) { - node = map[i + 2]; - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) - { collapse = bias; } - if (bias == "left" && start == 0) - { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { - node = map[(i -= 3) + 2]; - collapse = "left"; - } } - if (bias == "right" && start == mEnd - mStart) - { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { - node = map[(i += 3) + 2]; - collapse = "right"; - } } - break - } - } - return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} - } - - function getUsefulRect(rects, bias) { - var rect = nullRect; - if (bias == "left") { for (var i = 0; i < rects.length; i++) { - if ((rect = rects[i]).left != rect.right) { break } - } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { - if ((rect = rects[i$1]).left != rect.right) { break } - } } - return rect - } - - function measureCharInner(cm, prepared, ch, bias) { - var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); - var node = place.node, start = place.start, end = place.end, collapse = place.collapse; - - var rect; - if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. - for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned - while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; } - while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; } - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) - { rect = node.parentNode.getBoundingClientRect(); } - else - { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); } - if (rect.left || rect.right || start == 0) { break } - end = start; - start = start - 1; - collapse = "right"; - } - if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); } - } else { // If it is a widget, simply get the box for the whole widget. - if (start > 0) { collapse = bias = "right"; } - var rects; - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) - { rect = rects[bias == "right" ? rects.length - 1 : 0]; } - else - { rect = node.getBoundingClientRect(); } - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0]; - if (rSpan) - { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; } - else - { rect = nullRect; } - } - - var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; - var mid = (rtop + rbot) / 2; - var heights = prepared.view.measure.heights; - var i = 0; - for (; i < heights.length - 1; i++) - { if (mid < heights[i]) { break } } - var top = i ? heights[i - 1] : 0, bot = heights[i]; - var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top: top, bottom: bot}; - if (!rect.left && !rect.right) { result.bogus = true; } - if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } - - return result - } - - // Work around problem with bounding client rects on ranges being - // returned incorrectly when zoomed on IE10 and below. - function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || - screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) - { return rect } - var scaleX = screen.logicalXDPI / screen.deviceXDPI; - var scaleY = screen.logicalYDPI / screen.deviceYDPI; - return {left: rect.left * scaleX, right: rect.right * scaleX, - top: rect.top * scaleY, bottom: rect.bottom * scaleY} - } - - function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {}; - lineView.measure.heights = null; - if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) - { lineView.measure.caches[i] = {}; } } - } - } - - function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null; - removeChildren(cm.display.lineMeasure); - for (var i = 0; i < cm.display.view.length; i++) - { clearLineMeasurementCacheFor(cm.display.view[i]); } - } - - function clearCaches(cm) { - clearLineMeasurementCache(cm); - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; - if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; } - cm.display.lineNumChars = null; - } - - function pageScrollX() { - // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 - // which causes page_Offset and bounding client rects to use - // different reference viewports and invalidate our calculations. - if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } - return window.pageXOffset || (document.documentElement || document.body).scrollLeft - } - function pageScrollY() { - if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } - return window.pageYOffset || (document.documentElement || document.body).scrollTop - } - - function widgetTopHeight(lineObj) { - var height = 0; - if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) - { height += widgetHeight(lineObj.widgets[i]); } } } - return height - } - - // Converts a {top, bottom, left, right} box from line-local - // coordinates into another coordinate system. Context may be one of - // "line", "div" (display.lineDiv), "local"./null (editor), "window", - // or "page". - function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { - if (!includeWidgets) { - var height = widgetTopHeight(lineObj); - rect.top += height; rect.bottom += height; - } - if (context == "line") { return rect } - if (!context) { context = "local"; } - var yOff = heightAtLine(lineObj); - if (context == "local") { yOff += paddingTop(cm.display); } - else { yOff -= cm.display.viewOffset; } - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); - rect.left += xOff; rect.right += xOff; - } - rect.top += yOff; rect.bottom += yOff; - return rect - } - - // Coverts a box from "div" coords to another coordinate system. - // Context may be "window", "page", "div", or "local"./null. - function fromCoordSystem(cm, coords, context) { - if (context == "div") { return coords } - var left = coords.left, top = coords.top; - // First move into "page" coordinate system - if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect(); - left += localBox.left; - top += localBox.top; - } - - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); - return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} - } - - function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) { lineObj = getLine(cm.doc, pos.line); } - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) - } - - // Returns a box for a given cursor position, which may have an - // 'other' property containing the position of the secondary cursor - // on a bidi boundary. - // A cursor Pos(line, char, "before") is on the same visual line as `char - 1` - // and after `char - 1` in writing order of `char - 1` - // A cursor Pos(line, char, "after") is on the same visual line as `char` - // and before `char` in writing order of `char` - // Examples (upper-case letters are RTL, lower-case are LTR): - // Pos(0, 1, ...) - // before after - // ab a|b a|b - // aB a|B aB| - // Ab |Ab A|b - // AB B|A B|A - // Every position after the last character on a line is considered to stick - // to the last character on the line. - function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line); - if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } - function get(ch, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); - if (right) { m.left = m.right; } else { m.right = m.left; } - return intoCoordSystem(cm, lineObj, m, context) - } - var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky; - if (ch >= lineObj.text.length) { - ch = lineObj.text.length; - sticky = "before"; - } else if (ch <= 0) { - ch = 0; - sticky = "after"; - } - if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } - - function getBidi(ch, partPos, invert) { - var part = order[partPos], right = part.level == 1; - return get(invert ? ch - 1 : ch, right != invert) - } - var partPos = getBidiPartAt(order, ch, sticky); - var other = bidiOther; - var val = getBidi(ch, partPos, sticky == "before"); - if (other != null) { val.other = getBidi(ch, other, sticky != "before"); } - return val - } - - // Used to cheaply estimate the coordinates for a position. Used for - // intermediate scroll updates. - function estimateCoords(cm, pos) { - var left = 0; - pos = clipPos(cm.doc, pos); - if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; } - var lineObj = getLine(cm.doc, pos.line); - var top = heightAtLine(lineObj) + paddingTop(cm.display); - return {left: left, right: left, top: top, bottom: top + lineObj.height} - } - - // Positions returned by coordsChar contain some extra information. - // xRel is the relative x position of the input coordinates compared - // to the found position (so xRel > 0 means the coordinates are to - // the right of the character position, for example). When outside - // is true, that means the coordinates lie outside the line's - // vertical range. - function PosWithInfo(line, ch, sticky, outside, xRel) { - var pos = Pos(line, ch, sticky); - pos.xRel = xRel; - if (outside) { pos.outside = outside; } - return pos - } - - // Compute the character position closest to the given coordinates. - // Input must be lineSpace-local ("div" coordinate system). - function coordsChar(cm, x, y) { - var doc = cm.doc; - y += cm.display.viewOffset; - if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) } - var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; - if (lineN > last) - { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) } - if (x < 0) { x = 0; } - - var lineObj = getLine(doc, lineN); - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y); - var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); - if (!collapsed) { return found } - var rangeEnd = collapsed.find(1); - if (rangeEnd.line == lineN) { return rangeEnd } - lineObj = getLine(doc, lineN = rangeEnd.line); - } - } - - function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { - y -= widgetTopHeight(lineObj); - var end = lineObj.text.length; - var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0); - end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end); - return {begin: begin, end: end} - } - - function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { - if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } - var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; - return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) - } - - // Returns true if the given side of a box is after the given - // coordinates, in top-to-bottom, left-to-right order. - function boxIsAfter(box, x, y, left) { - return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x - } - - function coordsCharInner(cm, lineObj, lineNo, x, y) { - // Move y into line-local coordinate space - y -= heightAtLine(lineObj); - var preparedMeasure = prepareMeasureForLine(cm, lineObj); - // When directly calling `measureCharPrepared`, we have to adjust - // for the widgets at this line. - var widgetHeight = widgetTopHeight(lineObj); - var begin = 0, end = lineObj.text.length, ltr = true; - - var order = getOrder(lineObj, cm.doc.direction); - // If the line isn't plain left-to-right text, first figure out - // which bidi section the coordinates fall into. - if (order) { - var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart) - (cm, lineObj, lineNo, preparedMeasure, order, x, y); - ltr = part.level != 1; - // The awkward -1 offsets are needed because findFirst (called - // on these below) will treat its first bound as inclusive, - // second as exclusive, but we want to actually address the - // characters in the part's range - begin = ltr ? part.from : part.to - 1; - end = ltr ? part.to : part.from - 1; - } - - // A binary search to find the first character whose bounding box - // starts after the coordinates. If we run across any whose box wrap - // the coordinates, store that. - var chAround = null, boxAround = null; - var ch = findFirst(function (ch) { - var box = measureCharPrepared(cm, preparedMeasure, ch); - box.top += widgetHeight; box.bottom += widgetHeight; - if (!boxIsAfter(box, x, y, false)) { return false } - if (box.top <= y && box.left <= x) { - chAround = ch; - boxAround = box; - } - return true - }, begin, end); - - var baseX, sticky, outside = false; - // If a box around the coordinates was found, use that - if (boxAround) { - // Distinguish coordinates nearer to the left or right side of the box - var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr; - ch = chAround + (atStart ? 0 : 1); - sticky = atStart ? "after" : "before"; - baseX = atLeft ? boxAround.left : boxAround.right; - } else { - // (Adjust for extended bound, if necessary.) - if (!ltr && (ch == end || ch == begin)) { ch++; } - // To determine which side to associate with, get the box to the - // left of the character and compare it's vertical position to the - // coordinates - sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : - (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ? - "after" : "before"; - // Now get accurate coordinates for this place, in order to get a - // base X position - var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure); - baseX = coords.left; - outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; - } - - ch = skipExtendingChars(lineObj.text, ch, 1); - return PosWithInfo(lineNo, ch, sticky, outside, x - baseX) - } - - function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) { - // Bidi parts are sorted left-to-right, and in a non-line-wrapping - // situation, we can take this ordering to correspond to the visual - // ordering. This finds the first part whose end is after the given - // coordinates. - var index = findFirst(function (i) { - var part = order[i], ltr = part.level != 1; - return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"), - "line", lineObj, preparedMeasure), x, y, true) - }, 0, order.length - 1); - var part = order[index]; - // If this isn't the first part, the part's start is also after - // the coordinates, and the coordinates aren't on the same line as - // that start, move one part back. - if (index > 0) { - var ltr = part.level != 1; - var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"), - "line", lineObj, preparedMeasure); - if (boxIsAfter(start, x, y, true) && start.top > y) - { part = order[index - 1]; } - } - return part - } - - function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { - // In a wrapped line, rtl text on wrapping boundaries can do things - // that don't correspond to the ordering in our `order` array at - // all, so a binary search doesn't work, and we want to return a - // part that only spans one line so that the binary search in - // coordsCharInner is safe. As such, we first find the extent of the - // wrapped line, and then do a flat search in which we discard any - // spans that aren't on the line. - var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); - var begin = ref.begin; - var end = ref.end; - if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; } - var part = null, closestDist = null; - for (var i = 0; i < order.length; i++) { - var p = order[i]; - if (p.from >= end || p.to <= begin) { continue } - var ltr = p.level != 1; - var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; - // Weigh against spans ending before this, so that they are only - // picked if nothing ends after - var dist = endX < x ? x - endX + 1e9 : endX - x; - if (!part || closestDist > dist) { - part = p; - closestDist = dist; - } - } - if (!part) { part = order[order.length - 1]; } - // Clip the part to the wrapped line. - if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; } - if (part.to > end) { part = {from: part.from, to: end, level: part.level}; } - return part - } - - var measureText; - // Compute the default text height. - function textHeight(display) { - if (display.cachedTextHeight != null) { return display.cachedTextHeight } - if (measureText == null) { - measureText = elt("pre", null, "CodeMirror-line-like"); - // Measure a bunch of lines, for browsers that compute - // fractional heights. - for (var i = 0; i < 49; ++i) { - measureText.appendChild(document.createTextNode("x")); - measureText.appendChild(elt("br")); - } - measureText.appendChild(document.createTextNode("x")); - } - removeChildrenAndAdd(display.measure, measureText); - var height = measureText.offsetHeight / 50; - if (height > 3) { display.cachedTextHeight = height; } - removeChildren(display.measure); - return height || 1 - } - - // Compute the default character width. - function charWidth(display) { - if (display.cachedCharWidth != null) { return display.cachedCharWidth } - var anchor = elt("span", "xxxxxxxxxx"); - var pre = elt("pre", [anchor], "CodeMirror-line-like"); - removeChildrenAndAdd(display.measure, pre); - var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; - if (width > 2) { display.cachedCharWidth = width; } - return width || 10 - } - - // Do a bulk-read of the DOM positions and sizes needed to draw the - // view, so that we don't interleave reading and writing to the DOM. - function getDimensions(cm) { - var d = cm.display, left = {}, width = {}; - var gutterLeft = d.gutters.clientLeft; - for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { - var id = cm.display.gutterSpecs[i].className; - left[id] = n.offsetLeft + n.clientLeft + gutterLeft; - width[id] = n.clientWidth; - } - return {fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth} - } - - // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, - // but using getBoundingClientRect to get a sub-pixel-accurate - // result. - function compensateForHScroll(display) { - return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left - } - - // Returns a function that estimates the height of a line, to use as - // first approximation until the line becomes visible (and is thus - // properly measurable). - function estimateHeight(cm) { - var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; - var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); - return function (line) { - if (lineIsHidden(cm.doc, line)) { return 0 } - - var widgetsHeight = 0; - if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { - if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; } - } } - - if (wrapping) - { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } - else - { return widgetsHeight + th } - } - } - - function estimateLineHeights(cm) { - var doc = cm.doc, est = estimateHeight(cm); - doc.iter(function (line) { - var estHeight = est(line); - if (estHeight != line.height) { updateLineHeight(line, estHeight); } - }); - } - - // Given a mouse event, find the corresponding position. If liberal - // is false, it checks whether a gutter or scrollbar was clicked, - // and returns null if it was. forRect is used by rectangular - // selections, and tries to estimate a character position even for - // coordinates beyond the right of the text. - function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display; - if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } - - var x, y, space = display.lineSpace.getBoundingClientRect(); - // Fails unpredictably on IE[67] when mouse is dragged around quickly. - try { x = e.clientX - space.left; y = e.clientY - space.top; } - catch (e$1) { return null } - var coords = coordsChar(cm, x, y), line; - if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); - } - return coords - } - - // Find the view element corresponding to a given line. Return null - // when the line isn't visible. - function findViewIndex(cm, n) { - if (n >= cm.display.viewTo) { return null } - n -= cm.display.viewFrom; - if (n < 0) { return null } - var view = cm.display.view; - for (var i = 0; i < view.length; i++) { - n -= view[i].size; - if (n < 0) { return i } - } - } - - // Updates the display.view data structure for a given change to the - // document. From and to are in pre-change coordinates. Lendiff is - // the amount of lines added or subtracted by the change. This is - // used for changes that span multiple lines, or change the way - // lines are divided into visual lines. regLineChange (below) - // registers single-line changes. - function regChange(cm, from, to, lendiff) { - if (from == null) { from = cm.doc.first; } - if (to == null) { to = cm.doc.first + cm.doc.size; } - if (!lendiff) { lendiff = 0; } - - var display = cm.display; - if (lendiff && to < display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers > from)) - { display.updateLineNumbers = from; } - - cm.curOp.viewChanged = true; - - if (from >= display.viewTo) { // Change after - if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) - { resetView(cm); } - } else if (to <= display.viewFrom) { // Change before - if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { - resetView(cm); - } else { - display.viewFrom += lendiff; - display.viewTo += lendiff; - } - } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap - resetView(cm); - } else if (from <= display.viewFrom) { // Top overlap - var cut = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cut) { - display.view = display.view.slice(cut.index); - display.viewFrom = cut.lineN; - display.viewTo += lendiff; - } else { - resetView(cm); - } - } else if (to >= display.viewTo) { // Bottom overlap - var cut$1 = viewCuttingPoint(cm, from, from, -1); - if (cut$1) { - display.view = display.view.slice(0, cut$1.index); - display.viewTo = cut$1.lineN; - } else { - resetView(cm); - } - } else { // Gap in the middle - var cutTop = viewCuttingPoint(cm, from, from, -1); - var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cutTop && cutBot) { - display.view = display.view.slice(0, cutTop.index) - .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) - .concat(display.view.slice(cutBot.index)); - display.viewTo += lendiff; - } else { - resetView(cm); - } - } - - var ext = display.externalMeasured; - if (ext) { - if (to < ext.lineN) - { ext.lineN += lendiff; } - else if (from < ext.lineN + ext.size) - { display.externalMeasured = null; } - } - } - - // Register a change to a single line. Type must be one of "text", - // "gutter", "class", "widget" - function regLineChange(cm, line, type) { - cm.curOp.viewChanged = true; - var display = cm.display, ext = cm.display.externalMeasured; - if (ext && line >= ext.lineN && line < ext.lineN + ext.size) - { display.externalMeasured = null; } - - if (line < display.viewFrom || line >= display.viewTo) { return } - var lineView = display.view[findViewIndex(cm, line)]; - if (lineView.node == null) { return } - var arr = lineView.changes || (lineView.changes = []); - if (indexOf(arr, type) == -1) { arr.push(type); } - } - - // Clear the view. - function resetView(cm) { - cm.display.viewFrom = cm.display.viewTo = cm.doc.first; - cm.display.view = []; - cm.display.viewOffset = 0; - } - - function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), diff, view = cm.display.view; - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) - { return {index: index, lineN: newN} } - var n = cm.display.viewFrom; - for (var i = 0; i < index; i++) - { n += view[i].size; } - if (n != oldN) { - if (dir > 0) { - if (index == view.length - 1) { return null } - diff = (n + view[index].size) - oldN; - index++; - } else { - diff = n - oldN; - } - oldN += diff; newN += diff; - } - while (visualLineNo(cm.doc, newN) != newN) { - if (index == (dir < 0 ? 0 : view.length - 1)) { return null } - newN += dir * view[index - (dir < 0 ? 1 : 0)].size; - index += dir; - } - return {index: index, lineN: newN} - } - - // Force the view to cover a given range, adding empty view element - // or clipping off existing ones as needed. - function adjustView(cm, from, to) { - var display = cm.display, view = display.view; - if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { - display.view = buildViewArray(cm, from, to); - display.viewFrom = from; - } else { - if (display.viewFrom > from) - { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); } - else if (display.viewFrom < from) - { display.view = display.view.slice(findViewIndex(cm, from)); } - display.viewFrom = from; - if (display.viewTo < to) - { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); } - else if (display.viewTo > to) - { display.view = display.view.slice(0, findViewIndex(cm, to)); } - } - display.viewTo = to; - } - - // Count the number of lines in the view whose DOM representation is - // out of date (or nonexistent). - function countDirtyView(cm) { - var view = cm.display.view, dirty = 0; - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; } - } - return dirty - } - - function updateSelection(cm) { - cm.display.input.showSelection(cm.display.input.prepareSelection()); - } - - function prepareSelection(cm, primary) { - if ( primary === void 0 ) primary = true; - - var doc = cm.doc, result = {}; - var curFragment = result.cursors = document.createDocumentFragment(); - var selFragment = result.selection = document.createDocumentFragment(); - - for (var i = 0; i < doc.sel.ranges.length; i++) { - if (!primary && i == doc.sel.primIndex) { continue } - var range = doc.sel.ranges[i]; - if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue } - var collapsed = range.empty(); - if (collapsed || cm.options.showCursorWhenSelecting) - { drawSelectionCursor(cm, range.head, curFragment); } - if (!collapsed) - { drawSelectionRange(cm, range, selFragment); } - } - return result - } - - // Draws a cursor for the given range - function drawSelectionCursor(cm, head, output) { - var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); - - var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); - cursor.style.left = pos.left + "px"; - cursor.style.top = pos.top + "px"; - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; - - if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { - var charPos = charCoords(cm, head, "div", null, null); - if (charPos.right - charPos.left > 0) { - cursor.style.width = (charPos.right - charPos.left) + "px"; - } - } - - if (pos.other) { - // Secondary cursor, shown when on a 'jump' in bi-directional text - var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); - otherCursor.style.display = ""; - otherCursor.style.left = pos.other.left + "px"; - otherCursor.style.top = pos.other.top + "px"; - otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; - } - } - - function cmpCoords(a, b) { return a.top - b.top || a.left - b.left } - - // Draws the given range as a highlighted selection - function drawSelectionRange(cm, range, output) { - var display = cm.display, doc = cm.doc; - var fragment = document.createDocumentFragment(); - var padding = paddingH(cm.display), leftSide = padding.left; - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; - var docLTR = doc.direction == "ltr"; - - function add(left, top, width, bottom) { - if (top < 0) { top = 0; } - top = Math.round(top); - bottom = Math.round(bottom); - fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))); - } - - function drawForLine(line, fromArg, toArg) { - var lineObj = getLine(doc, line); - var lineLen = lineObj.text.length; - var start, end; - function coords(ch, bias) { - return charCoords(cm, Pos(line, ch), "div", lineObj, bias) - } - - function wrapX(pos, dir, side) { - var extent = wrappedLineExtentChar(cm, lineObj, null, pos); - var prop = (dir == "ltr") == (side == "after") ? "left" : "right"; - var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); - return coords(ch, prop)[prop] - } - - var order = getOrder(lineObj, doc.direction); - iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { - var ltr = dir == "ltr"; - var fromPos = coords(from, ltr ? "left" : "right"); - var toPos = coords(to - 1, ltr ? "right" : "left"); - - var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen; - var first = i == 0, last = !order || i == order.length - 1; - if (toPos.top - fromPos.top <= 3) { // Single line - var openLeft = (docLTR ? openStart : openEnd) && first; - var openRight = (docLTR ? openEnd : openStart) && last; - var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; - var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; - add(left, fromPos.top, right - left, fromPos.bottom); - } else { // Multiple lines - var topLeft, topRight, botLeft, botRight; - if (ltr) { - topLeft = docLTR && openStart && first ? leftSide : fromPos.left; - topRight = docLTR ? rightSide : wrapX(from, dir, "before"); - botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); - botRight = docLTR && openEnd && last ? rightSide : toPos.right; - } else { - topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); - topRight = !docLTR && openStart && first ? rightSide : fromPos.right; - botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; - botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); - } - add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); - if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); } - add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); - } - - if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; } - if (cmpCoords(toPos, start) < 0) { start = toPos; } - if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; } - if (cmpCoords(toPos, end) < 0) { end = toPos; } - }); - return {start: start, end: end} - } - - var sFrom = range.from(), sTo = range.to(); - if (sFrom.line == sTo.line) { - drawForLine(sFrom.line, sFrom.ch, sTo.ch); - } else { - var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); - var singleVLine = visualLine(fromLine) == visualLine(toLine); - var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; - var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; - if (singleVLine) { - if (leftEnd.top < rightStart.top - 2) { - add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); - add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); - } else { - add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); - } - } - if (leftEnd.bottom < rightStart.top) - { add(leftSide, leftEnd.bottom, null, rightStart.top); } - } - - output.appendChild(fragment); - } - - // Cursor-blinking - function restartBlink(cm) { - if (!cm.state.focused) { return } - var display = cm.display; - clearInterval(display.blinker); - var on = true; - display.cursorDiv.style.visibility = ""; - if (cm.options.cursorBlinkRate > 0) - { display.blinker = setInterval(function () { - if (!cm.hasFocus()) { onBlur(cm); } - display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; - }, cm.options.cursorBlinkRate); } - else if (cm.options.cursorBlinkRate < 0) - { display.cursorDiv.style.visibility = "hidden"; } - } - - function ensureFocus(cm) { - if (!cm.hasFocus()) { - cm.display.input.focus(); - if (!cm.state.focused) { onFocus(cm); } - } - } - - function delayBlurEvent(cm) { - cm.state.delayingBlurEvent = true; - setTimeout(function () { if (cm.state.delayingBlurEvent) { - cm.state.delayingBlurEvent = false; - if (cm.state.focused) { onBlur(cm); } - } }, 100); - } - - function onFocus(cm, e) { - if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; } - - if (cm.options.readOnly == "nocursor") { return } - if (!cm.state.focused) { - signal(cm, "focus", cm, e); - cm.state.focused = true; - addClass(cm.display.wrapper, "CodeMirror-focused"); - // This test prevents this from firing when a context - // menu is closed (since the input reset would kill the - // select-all detection hack) - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - cm.display.input.reset(); - if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730 - } - cm.display.input.receivedFocus(); - } - restartBlink(cm); - } - function onBlur(cm, e) { - if (cm.state.delayingBlurEvent) { return } - - if (cm.state.focused) { - signal(cm, "blur", cm, e); - cm.state.focused = false; - rmClass(cm.display.wrapper, "CodeMirror-focused"); - } - clearInterval(cm.display.blinker); - setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150); - } - - // Read the actual heights of the rendered lines, and update their - // stored heights to match. - function updateHeightsInViewport(cm) { - var display = cm.display; - var prevBottom = display.lineDiv.offsetTop; - var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); - var oldHeight = display.lineDiv.getBoundingClientRect().top; - var mustScroll = 0; - for (var i = 0; i < display.view.length; i++) { - var cur = display.view[i], wrapping = cm.options.lineWrapping; - var height = (void 0), width = 0; - if (cur.hidden) { continue } - oldHeight += cur.line.height; - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight; - height = bot - prevBottom; - prevBottom = bot; - } else { - var box = cur.node.getBoundingClientRect(); - height = box.bottom - box.top; - // Check that lines don't extend past the right of the current - // editor width - if (!wrapping && cur.text.firstChild) - { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; } - } - var diff = cur.line.height - height; - if (diff > .005 || diff < -.005) { - if (oldHeight < viewTop) { mustScroll -= diff; } - updateLineHeight(cur.line, height); - updateWidgetHeight(cur.line); - if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) - { updateWidgetHeight(cur.rest[j]); } } - } - if (width > cm.display.sizerWidth) { - var chWidth = Math.ceil(width / charWidth(cm.display)); - if (chWidth > cm.display.maxLineLength) { - cm.display.maxLineLength = chWidth; - cm.display.maxLine = cur.line; - cm.display.maxLineChanged = true; - } - } - } - if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; } - } - - // Read and store the height of line widgets associated with the - // given line. - function updateWidgetHeight(line) { - if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) { - var w = line.widgets[i], parent = w.node.parentNode; - if (parent) { w.height = parent.offsetHeight; } - } } - } - - // Compute the lines that are visible in a given viewport (defaults - // the the current scroll position). viewport may contain top, - // height, and ensure (see op.scrollToPos) properties. - function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; - top = Math.floor(top - paddingTop(display)); - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; - - var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); - // Ensure is a {from: {line, ch}, to: {line, ch}} object, and - // forces those lines into the viewport (if possible). - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; - if (ensureFrom < from) { - from = ensureFrom; - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); - to = ensureTo; - } - } - return {from: from, to: Math.max(to, from + 1)} - } - - // SCROLLING THINGS INTO VIEW - - // If an editor sits on the top or bottom of the window, partially - // scrolled out of view, this ensures that the cursor is visible. - function maybeScrollWindow(cm, rect) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } - - var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; - if (rect.top + box.top < 0) { doScroll = true; } - else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; } - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")); - cm.display.lineSpace.appendChild(scrollNode); - scrollNode.scrollIntoView(doScroll); - cm.display.lineSpace.removeChild(scrollNode); - } - } - - // Scroll a given position into view (immediately), verifying that - // it actually became visible (as line heights are accurately - // measured, the position of something may 'drift' during drawing). - function scrollPosIntoView(cm, pos, end, margin) { - if (margin == null) { margin = 0; } - var rect; - if (!cm.options.lineWrapping && pos == end) { - // Set pos and end to the cursor positions around the character pos sticks to - // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch - // If pos == Pos(_, 0, "before"), pos and end are unchanged - end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; - pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; - } - for (var limit = 0; limit < 5; limit++) { - var changed = false; - var coords = cursorCoords(cm, pos); - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); - rect = {left: Math.min(coords.left, endCoords.left), - top: Math.min(coords.top, endCoords.top) - margin, - right: Math.max(coords.left, endCoords.left), - bottom: Math.max(coords.bottom, endCoords.bottom) + margin}; - var scrollPos = calculateScrollPos(cm, rect); - var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; - if (scrollPos.scrollTop != null) { - updateScrollTop(cm, scrollPos.scrollTop); - if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; } - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; } - } - if (!changed) { break } - } - return rect - } - - // Scroll a given set of coordinates into view (immediately). - function scrollIntoView(cm, rect) { - var scrollPos = calculateScrollPos(cm, rect); - if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); } - if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); } - } - - // Calculate a new scroll position needed to scroll the given - // rectangle into view. Returns an object with scrollTop and - // scrollLeft properties. When these are undefined, the - // vertical/horizontal position does not need to be adjusted. - function calculateScrollPos(cm, rect) { - var display = cm.display, snapMargin = textHeight(cm.display); - if (rect.top < 0) { rect.top = 0; } - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; - var screen = displayHeight(cm), result = {}; - if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; } - var docBottom = cm.doc.height + paddingVert(display); - var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin; - if (rect.top < screentop) { - result.scrollTop = atTop ? 0 : rect.top; - } else if (rect.bottom > screentop + screen) { - var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); - if (newTop != screentop) { result.scrollTop = newTop; } - } - - var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; - var screenw = displayWidth(cm) - display.gutters.offsetWidth; - var tooWide = rect.right - rect.left > screenw; - if (tooWide) { rect.right = rect.left + screenw; } - if (rect.left < 10) - { result.scrollLeft = 0; } - else if (rect.left < screenleft) - { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); } - else if (rect.right > screenw + screenleft - 3) - { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; } - return result - } - - // Store a relative adjustment to the scroll position in the current - // operation (to be applied when the operation finishes). - function addToScrollTop(cm, top) { - if (top == null) { return } - resolveScrollToPos(cm); - cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; - } - - // Make sure that at the end of the operation the current cursor is - // shown. - function ensureCursorVisible(cm) { - resolveScrollToPos(cm); - var cur = cm.getCursor(); - cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}; - } - - function scrollToCoords(cm, x, y) { - if (x != null || y != null) { resolveScrollToPos(cm); } - if (x != null) { cm.curOp.scrollLeft = x; } - if (y != null) { cm.curOp.scrollTop = y; } - } - - function scrollToRange(cm, range) { - resolveScrollToPos(cm); - cm.curOp.scrollToPos = range; - } - - // When an operation has its scrollToPos property set, and another - // scroll action is applied before the end of the operation, this - // 'simulates' scrolling that position into view in a cheap way, so - // that the effect of intermediate scroll commands is not ignored. - function resolveScrollToPos(cm) { - var range = cm.curOp.scrollToPos; - if (range) { - cm.curOp.scrollToPos = null; - var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); - scrollToCoordsRange(cm, from, to, range.margin); - } - } - - function scrollToCoordsRange(cm, from, to, margin) { - var sPos = calculateScrollPos(cm, { - left: Math.min(from.left, to.left), - top: Math.min(from.top, to.top) - margin, - right: Math.max(from.right, to.right), - bottom: Math.max(from.bottom, to.bottom) + margin - }); - scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); - } - - // Sync the scrollable area and scrollbars, ensure the viewport - // covers the visible area. - function updateScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) { return } - if (!gecko) { updateDisplaySimple(cm, {top: val}); } - setScrollTop(cm, val, true); - if (gecko) { updateDisplaySimple(cm); } - startWorker(cm, 100); - } - - function setScrollTop(cm, val, forceScroll) { - val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); - if (cm.display.scroller.scrollTop == val && !forceScroll) { return } - cm.doc.scrollTop = val; - cm.display.scrollbars.setScrollTop(val); - if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; } - } - - // Sync scroller and scrollbar, ensure the gutter elements are - // aligned. - function setScrollLeft(cm, val, isScroller, forceScroll) { - val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); - if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return } - cm.doc.scrollLeft = val; - alignHorizontally(cm); - if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; } - cm.display.scrollbars.setScrollLeft(val); - } - - // SCROLLBARS - - // Prepare DOM reads needed to update the scrollbars. Done in one - // shot to minimize update/measure roundtrips. - function measureForScrollbars(cm) { - var d = cm.display, gutterW = d.gutters.offsetWidth; - var docH = Math.round(cm.doc.height + paddingVert(cm.display)); - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - } - } - - var NativeScrollbars = function(place, scroll, cm) { - this.cm = cm; - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); - vert.tabIndex = horiz.tabIndex = -1; - place(vert); place(horiz); - - on(vert, "scroll", function () { - if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); } - }); - on(horiz, "scroll", function () { - if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); } - }); - - this.checkedZeroWidth = false; - // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). - if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } - }; - - NativeScrollbars.prototype.update = function (measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - var sWidth = measure.nativeBarWidth; - - if (needsV) { - this.vert.style.display = "block"; - this.vert.style.bottom = needsH ? sWidth + "px" : "0"; - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); - // A bug in IE8 can cause this value to be negative, so guard it. - this.vert.firstChild.style.height = - Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; - } else { - this.vert.style.display = ""; - this.vert.firstChild.style.height = "0"; - } - - if (needsH) { - this.horiz.style.display = "block"; - this.horiz.style.right = needsV ? sWidth + "px" : "0"; - this.horiz.style.left = measure.barLeft + "px"; - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); - this.horiz.firstChild.style.width = - Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; - } else { - this.horiz.style.display = ""; - this.horiz.firstChild.style.width = "0"; - } - - if (!this.checkedZeroWidth && measure.clientHeight > 0) { - if (sWidth == 0) { this.zeroWidthHack(); } - this.checkedZeroWidth = true; - } - - return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} - }; - - NativeScrollbars.prototype.setScrollLeft = function (pos) { - if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; } - if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); } - }; - - NativeScrollbars.prototype.setScrollTop = function (pos) { - if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; } - if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); } - }; - - NativeScrollbars.prototype.zeroWidthHack = function () { - var w = mac && !mac_geMountainLion ? "12px" : "18px"; - this.horiz.style.height = this.vert.style.width = w; - this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; - this.disableHoriz = new Delayed; - this.disableVert = new Delayed; - }; - - NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { - bar.style.pointerEvents = "auto"; - function maybeDisable() { - // To find out whether the scrollbar is still visible, we - // check whether the element under the pixel in the bottom - // right corner of the scrollbar box is the scrollbar box - // itself (when the bar is still visible) or its filler child - // (when the bar is hidden). If it is still visible, we keep - // it enabled, if it's hidden, we disable pointer events. - var box = bar.getBoundingClientRect(); - var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) - : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); - if (elt != bar) { bar.style.pointerEvents = "none"; } - else { delay.set(1000, maybeDisable); } - } - delay.set(1000, maybeDisable); - }; - - NativeScrollbars.prototype.clear = function () { - var parent = this.horiz.parentNode; - parent.removeChild(this.horiz); - parent.removeChild(this.vert); - }; - - var NullScrollbars = function () {}; - - NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; - NullScrollbars.prototype.setScrollLeft = function () {}; - NullScrollbars.prototype.setScrollTop = function () {}; - NullScrollbars.prototype.clear = function () {}; - - function updateScrollbars(cm, measure) { - if (!measure) { measure = measureForScrollbars(cm); } - var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; - updateScrollbarsInner(cm, measure); - for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) - { updateHeightsInViewport(cm); } - updateScrollbarsInner(cm, measureForScrollbars(cm)); - startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; - } - } - - // Re-synchronize the fake scrollbars with the actual size of the - // content. - function updateScrollbarsInner(cm, measure) { - var d = cm.display; - var sizes = d.scrollbars.update(measure); - - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; - d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; - - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block"; - d.scrollbarFiller.style.height = sizes.bottom + "px"; - d.scrollbarFiller.style.width = sizes.right + "px"; - } else { d.scrollbarFiller.style.display = ""; } - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block"; - d.gutterFiller.style.height = sizes.bottom + "px"; - d.gutterFiller.style.width = measure.gutterWidth + "px"; - } else { d.gutterFiller.style.display = ""; } - } - - var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; - - function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear(); - if (cm.display.scrollbars.addClass) - { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } - } - - cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); - // Prevent clicks in the scrollbars from killing focus - on(node, "mousedown", function () { - if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); } - }); - node.setAttribute("cm-not-content", "true"); - }, function (pos, axis) { - if (axis == "horizontal") { setScrollLeft(cm, pos); } - else { updateScrollTop(cm, pos); } - }, cm); - if (cm.display.scrollbars.addClass) - { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } - } - - // Operations are used to wrap a series of changes to the editor - // state in such a way that each change won't have to update the - // cursor and display (which would be awkward, slow, and - // error-prone). Instead, display updates are batched and then all - // combined and executed at once. - - var nextOpId = 0; - // Start a new operation. - function startOperation(cm) { - cm.curOp = { - cm: cm, - viewChanged: false, // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, // Used to detect need to update scrollbar - forceUpdate: false, // Used to force a redraw - updateInput: 0, // Whether to reset the input textarea - typing: false, // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, // Accumulated changes, for firing change events - cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already - selectionChanged: false, // Whether the selection needs to be redrawn - updateMaxLine: false, // Set when the widest line needs to be determined anew - scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, // Used to scroll to a specific position - focus: false, - id: ++nextOpId, // Unique ID - markArrays: null // Used by addMarkedSpan - }; - pushOperation(cm.curOp); - } - - // Finish an operation, updating the display and signalling delayed events - function endOperation(cm) { - var op = cm.curOp; - if (op) { finishOperation(op, function (group) { - for (var i = 0; i < group.ops.length; i++) - { group.ops[i].cm.curOp = null; } - endOperations(group); - }); } - } - - // The DOM updates done when an operation finishes are batched so - // that the minimum number of relayouts are required. - function endOperations(group) { - var ops = group.ops; - for (var i = 0; i < ops.length; i++) // Read DOM - { endOperation_R1(ops[i]); } - for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) - { endOperation_W1(ops[i$1]); } - for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM - { endOperation_R2(ops[i$2]); } - for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) - { endOperation_W2(ops[i$3]); } - for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM - { endOperation_finish(ops[i$4]); } - } - - function endOperation_R1(op) { - var cm = op.cm, display = cm.display; - maybeClipScrollbars(cm); - if (op.updateMaxLine) { findMaxLine(cm); } - - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || - op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || - op.scrollToPos.to.line >= display.viewTo) || - display.maxLineChanged && cm.options.lineWrapping; - op.update = op.mustUpdate && - new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); - } - - function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); - } - - function endOperation_R2(op) { - var cm = op.cm, display = cm.display; - if (op.updatedDisplay) { updateHeightsInViewport(cm); } - - op.barMeasure = measureForScrollbars(cm); - - // If the max line changed since it was last measured, measure it, - // and ensure the document's width matches it. - // updateDisplay_W2 will use these properties to do the actual resizing - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; - cm.display.sizerWidth = op.adjustWidthTo; - op.barMeasure.scrollWidth = - Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); - } - - if (op.updatedDisplay || op.selectionChanged) - { op.preparedSelection = display.input.prepareSelection(); } - } - - function endOperation_W2(op) { - var cm = op.cm; - - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; - if (op.maxScrollLeft < cm.doc.scrollLeft) - { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); } - cm.display.maxLineChanged = false; - } - - var takeFocus = op.focus && op.focus == activeElt(); - if (op.preparedSelection) - { cm.display.input.showSelection(op.preparedSelection, takeFocus); } - if (op.updatedDisplay || op.startHeight != cm.doc.height) - { updateScrollbars(cm, op.barMeasure); } - if (op.updatedDisplay) - { setDocumentHeight(cm, op.barMeasure); } - - if (op.selectionChanged) { restartBlink(cm); } - - if (cm.state.focused && op.updateInput) - { cm.display.input.reset(op.typing); } - if (takeFocus) { ensureFocus(op.cm); } - } - - function endOperation_finish(op) { - var cm = op.cm, display = cm.display, doc = cm.doc; - - if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); } - - // Abort mouse wheel delta measurement, when scrolling explicitly - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) - { display.wheelStartX = display.wheelStartY = null; } - - // Propagate the scroll position to the actual DOM scroller - if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); } - - if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); } - // If we need to scroll a specific position into view, do so. - if (op.scrollToPos) { - var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), - clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); - maybeScrollWindow(cm, rect); - } - - // Fire events for markers that are hidden/unidden by editing or - // undoing - var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; - if (hidden) { for (var i = 0; i < hidden.length; ++i) - { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } } - if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) - { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } } - - if (display.wrapper.offsetHeight) - { doc.scrollTop = cm.display.scroller.scrollTop; } - - // Fire change events, and delayed event handlers - if (op.changeObjs) - { signal(cm, "changes", cm, op.changeObjs); } - if (op.update) - { op.update.finish(); } - } - - // Run the given function in an operation - function runInOp(cm, f) { - if (cm.curOp) { return f() } - startOperation(cm); - try { return f() } - finally { endOperation(cm); } - } - // Wraps a function in an operation. Returns the wrapped function. - function operation(cm, f) { - return function() { - if (cm.curOp) { return f.apply(cm, arguments) } - startOperation(cm); - try { return f.apply(cm, arguments) } - finally { endOperation(cm); } - } - } - // Used to add methods to editor and doc instances, wrapping them in - // operations. - function methodOp(f) { - return function() { - if (this.curOp) { return f.apply(this, arguments) } - startOperation(this); - try { return f.apply(this, arguments) } - finally { endOperation(this); } - } - } - function docMethodOp(f) { - return function() { - var cm = this.cm; - if (!cm || cm.curOp) { return f.apply(this, arguments) } - startOperation(cm); - try { return f.apply(this, arguments) } - finally { endOperation(cm); } - } - } - - // HIGHLIGHT WORKER - - function startWorker(cm, time) { - if (cm.doc.highlightFrontier < cm.display.viewTo) - { cm.state.highlight.set(time, bind(highlightWorker, cm)); } - } - - function highlightWorker(cm) { - var doc = cm.doc; - if (doc.highlightFrontier >= cm.display.viewTo) { return } - var end = +new Date + cm.options.workTime; - var context = getContextBefore(cm, doc.highlightFrontier); - var changedLines = []; - - doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { - if (context.line >= cm.display.viewFrom) { // Visible - var oldStyles = line.styles; - var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; - var highlighted = highlightLine(cm, line, context, true); - if (resetState) { context.state = resetState; } - line.styles = highlighted.styles; - var oldCls = line.styleClasses, newCls = highlighted.classes; - if (newCls) { line.styleClasses = newCls; } - else if (oldCls) { line.styleClasses = null; } - var ischange = !oldStyles || oldStyles.length != line.styles.length || - oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); - for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; } - if (ischange) { changedLines.push(context.line); } - line.stateAfter = context.save(); - context.nextLine(); - } else { - if (line.text.length <= cm.options.maxHighlightLength) - { processLine(cm, line.text, context); } - line.stateAfter = context.line % 5 == 0 ? context.save() : null; - context.nextLine(); - } - if (+new Date > end) { - startWorker(cm, cm.options.workDelay); - return true - } - }); - doc.highlightFrontier = context.line; - doc.modeFrontier = Math.max(doc.modeFrontier, context.line); - if (changedLines.length) { runInOp(cm, function () { - for (var i = 0; i < changedLines.length; i++) - { regLineChange(cm, changedLines[i], "text"); } - }); } - } - - // DISPLAY DRAWING - - var DisplayUpdate = function(cm, viewport, force) { - var display = cm.display; - - this.viewport = viewport; - // Store some values that we'll need later (but don't want to force a relayout for) - this.visible = visibleLines(display, cm.doc, viewport); - this.editorIsHidden = !display.wrapper.offsetWidth; - this.wrapperHeight = display.wrapper.clientHeight; - this.wrapperWidth = display.wrapper.clientWidth; - this.oldDisplayWidth = displayWidth(cm); - this.force = force; - this.dims = getDimensions(cm); - this.events = []; - }; - - DisplayUpdate.prototype.signal = function (emitter, type) { - if (hasHandler(emitter, type)) - { this.events.push(arguments); } - }; - DisplayUpdate.prototype.finish = function () { - for (var i = 0; i < this.events.length; i++) - { signal.apply(null, this.events[i]); } - }; - - function maybeClipScrollbars(cm) { - var display = cm.display; - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; - display.heightForcer.style.height = scrollGap(cm) + "px"; - display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; - display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; - display.scrollbarsClipped = true; - } - } - - function selectionSnapshot(cm) { - if (cm.hasFocus()) { return null } - var active = activeElt(); - if (!active || !contains(cm.display.lineDiv, active)) { return null } - var result = {activeElt: active}; - if (window.getSelection) { - var sel = window.getSelection(); - if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { - result.anchorNode = sel.anchorNode; - result.anchorOffset = sel.anchorOffset; - result.focusNode = sel.focusNode; - result.focusOffset = sel.focusOffset; - } - } - return result - } - - function restoreSelection(snapshot) { - if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return } - snapshot.activeElt.focus(); - if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && - snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { - var sel = window.getSelection(), range = document.createRange(); - range.setEnd(snapshot.anchorNode, snapshot.anchorOffset); - range.collapse(false); - sel.removeAllRanges(); - sel.addRange(range); - sel.extend(snapshot.focusNode, snapshot.focusOffset); - } - } - - // Does the actual updating of the line display. Bails out - // (returning false) when there is nothing to be done and forced is - // false. - function updateDisplayIfNeeded(cm, update) { - var display = cm.display, doc = cm.doc; - - if (update.editorIsHidden) { - resetView(cm); - return false - } - - // Bail out if the visible area is already rendered and nothing changed. - if (!update.force && - update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && - display.renderedView == display.view && countDirtyView(cm) == 0) - { return false } - - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm); - update.dims = getDimensions(cm); - } - - // Compute a suitable new viewport (from & to) - var end = doc.first + doc.size; - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); - var to = Math.min(end, update.visible.to + cm.options.viewportMargin); - if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); } - if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); } - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from); - to = visualLineEndNo(cm.doc, to); - } - - var different = from != display.viewFrom || to != display.viewTo || - display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; - adjustView(cm, from, to); - - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); - // Position the mover div to align with the current scroll position - cm.display.mover.style.top = display.viewOffset + "px"; - - var toUpdate = countDirtyView(cm); - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && - (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) - { return false } - - // For big changes, we hide the enclosing element during the - // update, since that speeds up the operations on most browsers. - var selSnapshot = selectionSnapshot(cm); - if (toUpdate > 4) { display.lineDiv.style.display = "none"; } - patchDisplay(cm, display.updateLineNumbers, update.dims); - if (toUpdate > 4) { display.lineDiv.style.display = ""; } - display.renderedView = display.view; - // There might have been a widget with a focused element that got - // hidden or updated, if so re-focus it. - restoreSelection(selSnapshot); - - // Prevent selection and cursors from interfering with the scroll - // width and height. - removeChildren(display.cursorDiv); - removeChildren(display.selectionDiv); - display.gutters.style.height = display.sizer.style.minHeight = 0; - - if (different) { - display.lastWrapHeight = update.wrapperHeight; - display.lastWrapWidth = update.wrapperWidth; - startWorker(cm, 400); - } - - display.updateLineNumbers = null; - - return true - } - - function postUpdateDisplay(cm, update) { - var viewport = update.viewport; - - for (var first = true;; first = false) { - if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { - // Clip forced viewport to actual scrollable area. - if (viewport && viewport.top != null) - { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; } - // Updated line heights might result in the drawn area not - // actually covering the viewport. Keep looping until it does. - update.visible = visibleLines(cm.display, cm.doc, viewport); - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) - { break } - } else if (first) { - update.visible = visibleLines(cm.display, cm.doc, viewport); - } - if (!updateDisplayIfNeeded(cm, update)) { break } - updateHeightsInViewport(cm); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - updateScrollbars(cm, barMeasure); - setDocumentHeight(cm, barMeasure); - update.force = false; - } - - update.signal(cm, "update", cm); - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); - cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; - } - } - - function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport); - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm); - postUpdateDisplay(cm, update); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - updateScrollbars(cm, barMeasure); - setDocumentHeight(cm, barMeasure); - update.finish(); - } - } - - // Sync the actual display DOM structure with display.view, removing - // nodes for lines that are no longer in view, and creating the ones - // that are not there yet, and updating the ones that are out of - // date. - function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, lineNumbers = cm.options.lineNumbers; - var container = display.lineDiv, cur = container.firstChild; - - function rm(node) { - var next = node.nextSibling; - // Works around a throw-scroll bug in OS X Webkit - if (webkit && mac && cm.display.currentWheelTarget == node) - { node.style.display = "none"; } - else - { node.parentNode.removeChild(node); } - return next - } - - var view = display.view, lineN = display.viewFrom; - // Loop over the elements in the view, syncing cur (the DOM nodes - // in display.lineDiv) with the view as we go. - for (var i = 0; i < view.length; i++) { - var lineView = view[i]; - if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet - var node = buildLineElement(cm, lineView, lineN, dims); - container.insertBefore(node, cur); - } else { // Already drawn - while (cur != lineView.node) { cur = rm(cur); } - var updateNumber = lineNumbers && updateNumbersFrom != null && - updateNumbersFrom <= lineN && lineView.lineNumber; - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; } - updateLineForChanges(cm, lineView, lineN, dims); - } - if (updateNumber) { - removeChildren(lineView.lineNumber); - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); - } - cur = lineView.node.nextSibling; - } - lineN += lineView.size; - } - while (cur) { cur = rm(cur); } - } - - function updateGutterSpace(display) { - var width = display.gutters.offsetWidth; - display.sizer.style.marginLeft = width + "px"; - // Send an event to consumers responding to changes in gutter width. - signalLater(display, "gutterChanged", display); - } - - function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px"; - cm.display.heightForcer.style.top = measure.docHeight + "px"; - cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; - } - - // Re-align line numbers and gutter marks to compensate for - // horizontal scrolling. - function alignHorizontally(cm) { - var display = cm.display, view = display.view; - if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } - var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; - var gutterW = display.gutters.offsetWidth, left = comp + "px"; - for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { - if (cm.options.fixedGutter) { - if (view[i].gutter) - { view[i].gutter.style.left = left; } - if (view[i].gutterBackground) - { view[i].gutterBackground.style.left = left; } - } - var align = view[i].alignable; - if (align) { for (var j = 0; j < align.length; j++) - { align[j].style.left = left; } } - } } - if (cm.options.fixedGutter) - { display.gutters.style.left = (comp + gutterW) + "px"; } - } - - // Used to ensure that the line number gutter is still the right - // size for the current document size. Returns true when an update - // is needed. - function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) { return false } - var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], - "CodeMirror-linenumber CodeMirror-gutter-elt")); - var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; - display.lineGutter.style.width = ""; - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; - display.lineNumWidth = display.lineNumInnerWidth + padding; - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; - display.lineGutter.style.width = display.lineNumWidth + "px"; - updateGutterSpace(cm.display); - return true - } - return false - } - - function getGutters(gutters, lineNumbers) { - var result = [], sawLineNumbers = false; - for (var i = 0; i < gutters.length; i++) { - var name = gutters[i], style = null; - if (typeof name != "string") { style = name.style; name = name.className; } - if (name == "CodeMirror-linenumbers") { - if (!lineNumbers) { continue } - else { sawLineNumbers = true; } - } - result.push({className: name, style: style}); - } - if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); } - return result - } - - // Rebuild the gutter elements, ensure the margin to the left of the - // code matches their width. - function renderGutters(display) { - var gutters = display.gutters, specs = display.gutterSpecs; - removeChildren(gutters); - display.lineGutter = null; - for (var i = 0; i < specs.length; ++i) { - var ref = specs[i]; - var className = ref.className; - var style = ref.style; - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); - if (style) { gElt.style.cssText = style; } - if (className == "CodeMirror-linenumbers") { - display.lineGutter = gElt; - gElt.style.width = (display.lineNumWidth || 1) + "px"; - } - } - gutters.style.display = specs.length ? "" : "none"; - updateGutterSpace(display); - } - - function updateGutters(cm) { - renderGutters(cm.display); - regChange(cm); - alignHorizontally(cm); - } - - // The display handles the DOM integration, both for input reading - // and content drawing. It holds references to DOM nodes and - // display-related state. - - function Display(place, doc, input, options) { - var d = this; - this.input = input; - - // Covers bottom-right square when both scrollbars are present. - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); - d.scrollbarFiller.setAttribute("cm-not-content", "true"); - // Covers bottom of gutter when coverGutterNextToScrollbar is on - // and h scrollbar is present. - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); - d.gutterFiller.setAttribute("cm-not-content", "true"); - // Will contain the actual code, positioned to cover the viewport. - d.lineDiv = eltP("div", null, "CodeMirror-code"); - // Elements are added to these to represent selection and cursors. - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); - d.cursorDiv = elt("div", null, "CodeMirror-cursors"); - // A visibility: hidden element used to find the size of things. - d.measure = elt("div", null, "CodeMirror-measure"); - // When lines outside of the viewport are measured, they are drawn in this. - d.lineMeasure = elt("div", null, "CodeMirror-measure"); - // Wraps everything that needs to exist inside the vertically-padded coordinate system - d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], - null, "position: relative; outline: none"); - var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); - // Moved around its parent to cover visible view. - d.mover = elt("div", [lines], null, "position: relative"); - // Set to the height of the document, allowing scrolling. - d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); - d.sizerWidth = null; - // Behavior of elts with overflow: auto and padding is - // inconsistent across browsers. This is used to ensure the - // scrollable area is big enough. - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); - // Will contain the gutters, if any. - d.gutters = elt("div", null, "CodeMirror-gutters"); - d.lineGutter = null; - // Actual scrollable element. - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); - d.scroller.setAttribute("tabIndex", "-1"); - // The element in which the editor lives. - d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); - - // This attribute is respected by automatic translation systems such as Google Translate, - // and may also be respected by tools used by human translators. - d.wrapper.setAttribute('translate', 'no'); - - // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) - if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } - if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; } - - if (place) { - if (place.appendChild) { place.appendChild(d.wrapper); } - else { place(d.wrapper); } - } - - // Current rendered range (may be bigger than the view window). - d.viewFrom = d.viewTo = doc.first; - d.reportedViewFrom = d.reportedViewTo = doc.first; - // Information about the rendered lines. - d.view = []; - d.renderedView = null; - // Holds info about a single rendered line when it was rendered - // for measurement, while not in view. - d.externalMeasured = null; - // Empty space (in pixels) above the view - d.viewOffset = 0; - d.lastWrapHeight = d.lastWrapWidth = 0; - d.updateLineNumbers = null; - - d.nativeBarWidth = d.barHeight = d.barWidth = 0; - d.scrollbarsClipped = false; - - // Used to only resize the line number gutter when necessary (when - // the amount of lines crosses a boundary that makes its width change) - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; - // Set to true when a non-horizontal-scrolling line widget is - // added. As an optimization, line widget aligning is skipped when - // this is false. - d.alignWidgets = false; - - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - - // Tracks the maximum line length so that the horizontal scrollbar - // can be kept static when scrolling. - d.maxLine = null; - d.maxLineLength = 0; - d.maxLineChanged = false; - - // Used for measuring wheel scrolling granularity - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; - - // True when shift is held down. - d.shift = false; - - // Used to track whether anything happened since the context menu - // was opened. - d.selForContextMenu = null; - - d.activeTouch = null; - - d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); - renderGutters(d); - - input.init(d); - } - - // Since the delta values reported on mouse wheel events are - // unstandardized between browsers and even browser versions, and - // generally horribly unpredictable, this code starts by measuring - // the scroll effect that the first few mouse wheel events have, - // and, from that, detects the way it can convert deltas to pixel - // offsets afterwards. - // - // The reason we want to know the amount a wheel event will scroll - // is that it gives us a chance to update the display before the - // actual scrolling happens, reducing flickering. - - var wheelSamples = 0, wheelPixelsPerUnit = null; - // Fill in a browser-detected starting value on browsers where we - // know one. These don't have to be accurate -- the result of them - // being wrong would just be a slight flicker on the first wheel - // scroll (if it is large enough). - if (ie) { wheelPixelsPerUnit = -.53; } - else if (gecko) { wheelPixelsPerUnit = 15; } - else if (chrome) { wheelPixelsPerUnit = -.7; } - else if (safari) { wheelPixelsPerUnit = -1/3; } - - function wheelEventDelta(e) { - var dx = e.wheelDeltaX, dy = e.wheelDeltaY; - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; } - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; } - else if (dy == null) { dy = e.wheelDelta; } - return {x: dx, y: dy} - } - function wheelEventPixels(e) { - var delta = wheelEventDelta(e); - delta.x *= wheelPixelsPerUnit; - delta.y *= wheelPixelsPerUnit; - return delta - } - - function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; - var pixelsPerUnit = wheelPixelsPerUnit; - if (event.deltaMode === 0) { - dx = e.deltaX; - dy = e.deltaY; - pixelsPerUnit = 1; - } - - var display = cm.display, scroll = display.scroller; - // Quit if there's nothing to scroll here - var canScrollX = scroll.scrollWidth > scroll.clientWidth; - var canScrollY = scroll.scrollHeight > scroll.clientHeight; - if (!(dx && canScrollX || dy && canScrollY)) { return } - - // Webkit browsers on OS X abort momentum scrolls when the target - // of the scroll event is removed from the scrollable element. - // This hack (see related code in patchDisplay) makes sure the - // element is kept around. - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i = 0; i < view.length; i++) { - if (view[i].node == cur) { - cm.display.currentWheelTarget = cur; - break outer - } - } - } - } - - // On some browsers, horizontal scrolling will cause redraws to - // happen before the gutter has been realigned, causing it to - // wriggle around in a most unseemly way. When we have an - // estimated pixels/delta value, we just handle horizontal - // scrolling entirely here. It'll be slightly off from native, but - // better than glitching out. - if (dx && !gecko && !presto && pixelsPerUnit != null) { - if (dy && canScrollY) - { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); } - setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); - // Only prevent default scrolling if vertical scrolling is - // actually possible. Otherwise, it causes vertical scroll - // jitter on OSX trackpads when deltaX is small and deltaY - // is large (issue #3579) - if (!dy || (dy && canScrollY)) - { e_preventDefault(e); } - display.wheelStartX = null; // Abort measurement, if in progress - return - } - - // 'Project' the visible viewport to cover the area that is being - // scrolled into view (if we know enough to estimate it). - if (dy && pixelsPerUnit != null) { - var pixels = dy * pixelsPerUnit; - var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; - if (pixels < 0) { top = Math.max(0, top + pixels - 50); } - else { bot = Math.min(cm.doc.height, bot + pixels + 50); } - updateDisplaySimple(cm, {top: top, bottom: bot}); - } - - if (wheelSamples < 20 && e.deltaMode !== 0) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; - display.wheelDX = dx; display.wheelDY = dy; - setTimeout(function () { - if (display.wheelStartX == null) { return } - var movedX = scroll.scrollLeft - display.wheelStartX; - var movedY = scroll.scrollTop - display.wheelStartY; - var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || - (movedX && display.wheelDX && movedX / display.wheelDX); - display.wheelStartX = display.wheelStartY = null; - if (!sample) { return } - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); - ++wheelSamples; - }, 200); - } else { - display.wheelDX += dx; display.wheelDY += dy; - } - } - } - - // Selection objects are immutable. A new one is created every time - // the selection changes. A selection is one or more non-overlapping - // (and non-touching) ranges, sorted, and an integer that indicates - // which one is the primary selection (the one that's scrolled into - // view, that getCursor returns, etc). - var Selection = function(ranges, primIndex) { - this.ranges = ranges; - this.primIndex = primIndex; - }; - - Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; - - Selection.prototype.equals = function (other) { - if (other == this) { return true } - if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } - for (var i = 0; i < this.ranges.length; i++) { - var here = this.ranges[i], there = other.ranges[i]; - if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } - } - return true - }; - - Selection.prototype.deepCopy = function () { - var out = []; - for (var i = 0; i < this.ranges.length; i++) - { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); } - return new Selection(out, this.primIndex) - }; - - Selection.prototype.somethingSelected = function () { - for (var i = 0; i < this.ranges.length; i++) - { if (!this.ranges[i].empty()) { return true } } - return false - }; - - Selection.prototype.contains = function (pos, end) { - if (!end) { end = pos; } - for (var i = 0; i < this.ranges.length; i++) { - var range = this.ranges[i]; - if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) - { return i } - } - return -1 - }; - - var Range = function(anchor, head) { - this.anchor = anchor; this.head = head; - }; - - Range.prototype.from = function () { return minPos(this.anchor, this.head) }; - Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; - Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; - - // Take an unsorted, potentially overlapping set of ranges, and - // build a selection out of it. 'Consumes' ranges array (modifying - // it). - function normalizeSelection(cm, ranges, primIndex) { - var mayTouch = cm && cm.options.selectionsMayTouch; - var prim = ranges[primIndex]; - ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }); - primIndex = indexOf(ranges, prim); - for (var i = 1; i < ranges.length; i++) { - var cur = ranges[i], prev = ranges[i - 1]; - var diff = cmp(prev.to(), cur.from()); - if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { - var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); - var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; - if (i <= primIndex) { --primIndex; } - ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); - } - } - return new Selection(ranges, primIndex) - } - - function simpleSelection(anchor, head) { - return new Selection([new Range(anchor, head || anchor)], 0) - } - - // Compute the position of the end of a change (its 'to' property - // refers to the pre-change end). - function changeEnd(change) { - if (!change.text) { return change.to } - return Pos(change.from.line + change.text.length - 1, - lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) - } - - // Adjust a position to refer to the post-change position of the - // same text, or the end of the change if the change covers it. - function adjustForChange(pos, change) { - if (cmp(pos, change.from) < 0) { return pos } - if (cmp(pos, change.to) <= 0) { return changeEnd(change) } - - var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; - if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; } - return Pos(line, ch) - } - - function computeSelAfterChange(doc, change) { - var out = []; - for (var i = 0; i < doc.sel.ranges.length; i++) { - var range = doc.sel.ranges[i]; - out.push(new Range(adjustForChange(range.anchor, change), - adjustForChange(range.head, change))); - } - return normalizeSelection(doc.cm, out, doc.sel.primIndex) - } - - function offsetPos(pos, old, nw) { - if (pos.line == old.line) - { return Pos(nw.line, pos.ch - old.ch + nw.ch) } - else - { return Pos(nw.line + (pos.line - old.line), pos.ch) } - } - - // Used by replaceSelections to allow moving the selection to the - // start or around the replaced test. Hint may be "start" or "around". - function computeReplacedSel(doc, changes, hint) { - var out = []; - var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - var from = offsetPos(change.from, oldPrev, newPrev); - var to = offsetPos(changeEnd(change), oldPrev, newPrev); - oldPrev = change.to; - newPrev = to; - if (hint == "around") { - var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; - out[i] = new Range(inv ? to : from, inv ? from : to); - } else { - out[i] = new Range(from, from); - } - } - return new Selection(out, doc.sel.primIndex) - } - - // Used to get the editor into a consistent state again when options change. - - function loadMode(cm) { - cm.doc.mode = getMode(cm.options, cm.doc.modeOption); - resetModeState(cm); - } - - function resetModeState(cm) { - cm.doc.iter(function (line) { - if (line.stateAfter) { line.stateAfter = null; } - if (line.styles) { line.styles = null; } - }); - cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; - startWorker(cm, 100); - cm.state.modeGen++; - if (cm.curOp) { regChange(cm); } - } - - // DOCUMENT DATA STRUCTURE - - // By default, updates that start and end at the beginning of a line - // are treated specially, in order to make the association of line - // widgets and marker elements with the text behave more intuitive. - function isWholeLineUpdate(doc, change) { - return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && - (!doc.cm || doc.cm.options.wholeLineUpdateBefore) - } - - // Perform a change on the document data structure. - function updateDoc(doc, change, markedSpans, estimateHeight) { - function spansFor(n) {return markedSpans ? markedSpans[n] : null} - function update(line, text, spans) { - updateLine(line, text, spans, estimateHeight); - signalLater(line, "change", line, change); - } - function linesFor(start, end) { - var result = []; - for (var i = start; i < end; ++i) - { result.push(new Line(text[i], spansFor(i), estimateHeight)); } - return result - } - - var from = change.from, to = change.to, text = change.text; - var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); - var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; - - // Adjust the line structure - if (change.full) { - doc.insert(0, linesFor(0, text.length)); - doc.remove(text.length, doc.size - text.length); - } else if (isWholeLineUpdate(doc, change)) { - // This is a whole-line replace. Treated specially to make - // sure line objects move the way they are supposed to. - var added = linesFor(0, text.length - 1); - update(lastLine, lastLine.text, lastSpans); - if (nlines) { doc.remove(from.line, nlines); } - if (added.length) { doc.insert(from.line, added); } - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); - } else { - var added$1 = linesFor(1, text.length - 1); - added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - doc.insert(from.line + 1, added$1); - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); - doc.remove(from.line + 1, nlines); - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); - var added$2 = linesFor(1, text.length - 1); - if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); } - doc.insert(from.line + 1, added$2); - } - - signalLater(doc, "change", doc, change); - } - - // Call f for all linked documents. - function linkedDocs(doc, f, sharedHistOnly) { - function propagate(doc, skip, sharedHist) { - if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { - var rel = doc.linked[i]; - if (rel.doc == skip) { continue } - var shared = sharedHist && rel.sharedHist; - if (sharedHistOnly && !shared) { continue } - f(rel.doc, shared); - propagate(rel.doc, doc, shared); - } } - } - propagate(doc, null, true); - } - - // Attach a document to an editor. - function attachDoc(cm, doc) { - if (doc.cm) { throw new Error("This document is already in use.") } - cm.doc = doc; - doc.cm = cm; - estimateLineHeights(cm); - loadMode(cm); - setDirectionClass(cm); - cm.options.direction = doc.direction; - if (!cm.options.lineWrapping) { findMaxLine(cm); } - cm.options.mode = doc.modeOption; - regChange(cm); - } - - function setDirectionClass(cm) { - (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); - } - - function directionChanged(cm) { - runInOp(cm, function () { - setDirectionClass(cm); - regChange(cm); - }); - } - - function History(prev) { - // Arrays of change events and selections. Doing something adds an - // event to done and clears undo. Undoing moves events from done - // to undone, redoing moves them in the other direction. - this.done = []; this.undone = []; - this.undoDepth = prev ? prev.undoDepth : Infinity; - // Used to track when changes can be merged into a single undo - // event - this.lastModTime = this.lastSelTime = 0; - this.lastOp = this.lastSelOp = null; - this.lastOrigin = this.lastSelOrigin = null; - // Used by the isClean() method - this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; - } - - // Create a history change event from an updateDoc-style change - // object. - function historyChangeFromChange(doc, change) { - var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); - linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true); - return histChange - } - - // Pop all selection events off the end of a history array. Stop at - // a change event. - function clearSelectionEvents(array) { - while (array.length) { - var last = lst(array); - if (last.ranges) { array.pop(); } - else { break } - } - } - - // Find the top change event in the history. Pop off selection - // events that are in the way. - function lastChangeEvent(hist, force) { - if (force) { - clearSelectionEvents(hist.done); - return lst(hist.done) - } else if (hist.done.length && !lst(hist.done).ranges) { - return lst(hist.done) - } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { - hist.done.pop(); - return lst(hist.done) - } - } - - // Register a change in the history. Merges changes that are within - // a single operation, or are close together with an origin that - // allows merging (starting with "+") into a single event. - function addChangeToHistory(doc, change, selAfter, opId) { - var hist = doc.history; - hist.undone.length = 0; - var time = +new Date, cur; - var last; - - if ((hist.lastOp == opId || - hist.lastOrigin == change.origin && change.origin && - ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) || - change.origin.charAt(0) == "*")) && - (cur = lastChangeEvent(hist, hist.lastOp == opId))) { - // Merge this change into the last event - last = lst(cur.changes); - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - // Optimized case for simple insertion -- don't want to add - // new changesets for every character typed - last.to = changeEnd(change); - } else { - // Add new sub-event - cur.changes.push(historyChangeFromChange(doc, change)); - } - } else { - // Can not be merged, start a new event. - var before = lst(hist.done); - if (!before || !before.ranges) - { pushSelectionToHistory(doc.sel, hist.done); } - cur = {changes: [historyChangeFromChange(doc, change)], - generation: hist.generation}; - hist.done.push(cur); - while (hist.done.length > hist.undoDepth) { - hist.done.shift(); - if (!hist.done[0].ranges) { hist.done.shift(); } - } - } - hist.done.push(selAfter); - hist.generation = ++hist.maxGeneration; - hist.lastModTime = hist.lastSelTime = time; - hist.lastOp = hist.lastSelOp = opId; - hist.lastOrigin = hist.lastSelOrigin = change.origin; - - if (!last) { signal(doc, "historyAdded"); } - } - - function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0); - return ch == "*" || - ch == "+" && - prev.ranges.length == sel.ranges.length && - prev.somethingSelected() == sel.somethingSelected() && - new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) - } - - // Called whenever the selection changes, sets the new selection as - // the pending selection in the history, and pushes the old pending - // selection into the 'done' array when it was significantly - // different (in number of selected ranges, emptiness, or time). - function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, origin = options && options.origin; - - // A new event is started when the previous origin does not match - // the current, or the origins don't allow matching. Origins - // starting with * are always merged, those starting with + are - // merged when similar and close together in time. - if (opId == hist.lastSelOp || - (origin && hist.lastSelOrigin == origin && - (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || - selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) - { hist.done[hist.done.length - 1] = sel; } - else - { pushSelectionToHistory(sel, hist.done); } - - hist.lastSelTime = +new Date; - hist.lastSelOrigin = origin; - hist.lastSelOp = opId; - if (options && options.clearRedo !== false) - { clearSelectionEvents(hist.undone); } - } - - function pushSelectionToHistory(sel, dest) { - var top = lst(dest); - if (!(top && top.ranges && top.equals(sel))) - { dest.push(sel); } - } - - // Used to store marked span information in the history. - function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], n = 0; - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { - if (line.markedSpans) - { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; } - ++n; - }); - } - - // When un/re-doing restores text containing marked spans, those - // that have been explicitly cleared should not be restored. - function removeClearedSpans(spans) { - if (!spans) { return null } - var out; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } } - else if (out) { out.push(spans[i]); } - } - return !out ? spans : out.length ? out : null - } - - // Retrieve and filter the old marked spans stored in a change event. - function getOldSpans(doc, change) { - var found = change["spans_" + doc.id]; - if (!found) { return null } - var nw = []; - for (var i = 0; i < change.text.length; ++i) - { nw.push(removeClearedSpans(found[i])); } - return nw - } - - // Used for un/re-doing changes from the history. Combines the - // result of computing the existing spans with the set of spans that - // existed in the history (so that deleting around a span and then - // undoing brings back the span). - function mergeOldSpans(doc, change) { - var old = getOldSpans(doc, change); - var stretched = stretchSpansOverChange(doc, change); - if (!old) { return stretched } - if (!stretched) { return old } - - for (var i = 0; i < old.length; ++i) { - var oldCur = old[i], stretchCur = stretched[i]; - if (oldCur && stretchCur) { - spans: for (var j = 0; j < stretchCur.length; ++j) { - var span = stretchCur[j]; - for (var k = 0; k < oldCur.length; ++k) - { if (oldCur[k].marker == span.marker) { continue spans } } - oldCur.push(span); - } - } else if (stretchCur) { - old[i] = stretchCur; - } - } - return old - } - - // Used both to provide a JSON-safe object in .getHistory, and, when - // detaching a document, to split the history in two - function copyHistoryArray(events, newGroup, instantiateSel) { - var copy = []; - for (var i = 0; i < events.length; ++i) { - var event = events[i]; - if (event.ranges) { - copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); - continue - } - var changes = event.changes, newChanges = []; - copy.push({changes: newChanges}); - for (var j = 0; j < changes.length; ++j) { - var change = changes[j], m = (void 0); - newChanges.push({from: change.from, to: change.to, text: change.text}); - if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { - if (indexOf(newGroup, Number(m[1])) > -1) { - lst(newChanges)[prop] = change[prop]; - delete change[prop]; - } - } } } - } - } - return copy - } - - // The 'scroll' parameter given to many of these indicated whether - // the new cursor position should be scrolled into view after - // modifying the selection. - - // If shift is held or the extend flag is set, extends a range to - // include a given position (and optionally a second position). - // Otherwise, simply returns the range between the given positions. - // Used for cursor motion and such. - function extendRange(range, head, other, extend) { - if (extend) { - var anchor = range.anchor; - if (other) { - var posBefore = cmp(head, anchor) < 0; - if (posBefore != (cmp(other, anchor) < 0)) { - anchor = head; - head = other; - } else if (posBefore != (cmp(head, other) < 0)) { - head = other; - } - } - return new Range(anchor, head) - } else { - return new Range(other || head, head) - } - } - - // Extend the primary selection range, discard the rest. - function extendSelection(doc, head, other, options, extend) { - if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); } - setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); - } - - // Extend all selections (pos is an array of selections with length - // equal the number of selections) - function extendSelections(doc, heads, options) { - var out = []; - var extend = doc.cm && (doc.cm.display.shift || doc.extend); - for (var i = 0; i < doc.sel.ranges.length; i++) - { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); } - var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); - setSelection(doc, newSel, options); - } - - // Updates a single range in the selection. - function replaceOneSelection(doc, i, range, options) { - var ranges = doc.sel.ranges.slice(0); - ranges[i] = range; - setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); - } - - // Reset the selection to a single range. - function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options); - } - - // Give beforeSelectionChange handlers a change to influence a - // selection update. - function filterSelectionChange(doc, sel, options) { - var obj = { - ranges: sel.ranges, - update: function(ranges) { - this.ranges = []; - for (var i = 0; i < ranges.length; i++) - { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), - clipPos(doc, ranges[i].head)); } - }, - origin: options && options.origin - }; - signal(doc, "beforeSelectionChange", doc, obj); - if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); } - if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) } - else { return sel } - } - - function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, last = lst(done); - if (last && last.ranges) { - done[done.length - 1] = sel; - setSelectionNoUndo(doc, sel, options); - } else { - setSelection(doc, sel, options); - } - } - - // Set a new selection. - function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options); - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); - } - - function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) - { sel = filterSelectionChange(doc, sel, options); } - - var bias = options && options.bias || - (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); - - if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") - { ensureCursorVisible(doc.cm); } - } - - function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) { return } - - doc.sel = sel; - - if (doc.cm) { - doc.cm.curOp.updateInput = 1; - doc.cm.curOp.selectionChanged = true; - signalCursorActivity(doc.cm); - } - signalLater(doc, "cursorActivity", doc); - } - - // Verify that the selection does not partially select any atomic - // marked ranges. - function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); - } - - // Return a selection that does not partially select any atomic - // ranges. - function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; - var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); - if (out || newAnchor != range.anchor || newHead != range.head) { - if (!out) { out = sel.ranges.slice(0, i); } - out[i] = new Range(newAnchor, newHead); - } - } - return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel - } - - function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { - var line = getLine(doc, pos.line); - if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { - var sp = line.markedSpans[i], m = sp.marker; - - // Determine if we should prevent the cursor being placed to the left/right of an atomic marker - // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it - // is with selectLeft/Right - var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft; - var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight; - - if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && - (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter"); - if (m.explicitlyCleared) { - if (!line.markedSpans) { break } - else {--i; continue} - } - } - if (!m.atomic) { continue } - - if (oldPos) { - var near = m.find(dir < 0 ? 1 : -1), diff = (void 0); - if (dir < 0 ? preventCursorRight : preventCursorLeft) - { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); } - if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) - { return skipAtomicInner(doc, near, pos, dir, mayClear) } - } - - var far = m.find(dir < 0 ? -1 : 1); - if (dir < 0 ? preventCursorLeft : preventCursorRight) - { far = movePos(doc, far, dir, far.line == pos.line ? line : null); } - return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null - } - } } - return pos - } - - // Ensure a given position is not inside an atomic range. - function skipAtomic(doc, pos, oldPos, bias, mayClear) { - var dir = bias || 1; - var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || - (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || - skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || - (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); - if (!found) { - doc.cantEdit = true; - return Pos(doc.first, 0) - } - return found - } - - function movePos(doc, pos, dir, line) { - if (dir < 0 && pos.ch == 0) { - if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } - else { return null } - } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { - if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } - else { return null } - } else { - return new Pos(pos.line, pos.ch + dir) - } - } - - function selectAll(cm) { - cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); - } - - // UPDATING - - // Allow "beforeChange" event handlers to influence a change - function filterChange(doc, change, update) { - var obj = { - canceled: false, - from: change.from, - to: change.to, - text: change.text, - origin: change.origin, - cancel: function () { return obj.canceled = true; } - }; - if (update) { obj.update = function (from, to, text, origin) { - if (from) { obj.from = clipPos(doc, from); } - if (to) { obj.to = clipPos(doc, to); } - if (text) { obj.text = text; } - if (origin !== undefined) { obj.origin = origin; } - }; } - signal(doc, "beforeChange", doc, obj); - if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); } - - if (obj.canceled) { - if (doc.cm) { doc.cm.curOp.updateInput = 2; } - return null - } - return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} - } - - // Apply a change to a document, and add it to the document's - // history, and propagating it to all linked documents. - function makeChange(doc, change, ignoreReadOnly) { - if (doc.cm) { - if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } - if (doc.cm.state.suppressEdits) { return } - } - - if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { - change = filterChange(doc, change, true); - if (!change) { return } - } - - // Possibly split or suppress the update based on the presence - // of read-only spans in its range. - var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); - if (split) { - for (var i = split.length - 1; i >= 0; --i) - { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); } - } else { - makeChangeInner(doc, change); - } - } - - function makeChangeInner(doc, change) { - if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } - var selAfter = computeSelAfterChange(doc, change); - addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); - - makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); - var rebased = []; - - linkedDocs(doc, function (doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); - }); - } - - // Revert a change stored in a document's history. - function makeChangeFromHistory(doc, type, allowSelectionOnly) { - var suppress = doc.cm && doc.cm.state.suppressEdits; - if (suppress && !allowSelectionOnly) { return } - - var hist = doc.history, event, selAfter = doc.sel; - var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; - - // Verify that there is a useable event (so that ctrl-z won't - // needlessly clear selection events) - var i = 0; - for (; i < source.length; i++) { - event = source[i]; - if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) - { break } - } - if (i == source.length) { return } - hist.lastOrigin = hist.lastSelOrigin = null; - - for (;;) { - event = source.pop(); - if (event.ranges) { - pushSelectionToHistory(event, dest); - if (allowSelectionOnly && !event.equals(doc.sel)) { - setSelection(doc, event, {clearRedo: false}); - return - } - selAfter = event; - } else if (suppress) { - source.push(event); - return - } else { break } - } - - // Build up a reverse change object to add to the opposite history - // stack (redo when undoing, and vice versa). - var antiChanges = []; - pushSelectionToHistory(selAfter, dest); - dest.push({changes: antiChanges, generation: hist.generation}); - hist.generation = event.generation || ++hist.maxGeneration; - - var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); - - var loop = function ( i ) { - var change = event.changes[i]; - change.origin = type; - if (filter && !filterChange(doc, change, false)) { - source.length = 0; - return {} - } - - antiChanges.push(historyChangeFromChange(doc, change)); - - var after = i ? computeSelAfterChange(doc, change) : lst(source); - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); - if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); } - var rebased = []; - - // Propagate to the linked documents - linkedDocs(doc, function (doc, sharedHist) { - if (!sharedHist && indexOf(rebased, doc.history) == -1) { - rebaseHist(doc.history, change); - rebased.push(doc.history); - } - makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); - }); - }; - - for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { - var returned = loop( i$1 ); - - if ( returned ) return returned.v; - } - } - - // Sub-views need their line numbers shifted when text is added - // above or below them in the parent document. - function shiftDoc(doc, distance) { - if (distance == 0) { return } - doc.first += distance; - doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( - Pos(range.anchor.line + distance, range.anchor.ch), - Pos(range.head.line + distance, range.head.ch) - ); }), doc.sel.primIndex); - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance); - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) - { regLineChange(doc.cm, l, "gutter"); } - } - } - - // More lower-level change function, handling only a single document - // (not linked ones). - function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) - { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } - - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); - return - } - if (change.from.line > doc.lastLine()) { return } - - // Clip the change to the size of this doc - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line); - shiftDoc(doc, shift); - change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], origin: change.origin}; - } - var last = doc.lastLine(); - if (change.to.line > last) { - change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], origin: change.origin}; - } - - change.removed = getBetween(doc, change.from, change.to); - - if (!selAfter) { selAfter = computeSelAfterChange(doc, change); } - if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); } - else { updateDoc(doc, change, spans); } - setSelectionNoUndo(doc, selAfter, sel_dontScroll); - - if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) - { doc.cantEdit = false; } - } - - // Handle the interaction of a change to a document with the editor - // that this document is part of. - function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, display = cm.display, from = change.from, to = change.to; - - var recomputeMaxLength = false, checkWidthStart = from.line; - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); - doc.iter(checkWidthStart, to.line + 1, function (line) { - if (line == display.maxLine) { - recomputeMaxLength = true; - return true - } - }); - } - - if (doc.sel.contains(change.from, change.to) > -1) - { signalCursorActivity(cm); } - - updateDoc(doc, change, spans, estimateHeight(cm)); - - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function (line) { - var len = lineLength(line); - if (len > display.maxLineLength) { - display.maxLine = line; - display.maxLineLength = len; - display.maxLineChanged = true; - recomputeMaxLength = false; - } - }); - if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; } - } - - retreatFrontier(doc, from.line); - startWorker(cm, 400); - - var lendiff = change.text.length - (to.line - from.line) - 1; - // Remember that these lines changed, for updating the display - if (change.full) - { regChange(cm); } - else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) - { regLineChange(cm, from.line, "text"); } - else - { regChange(cm, from.line, to.line + 1, lendiff); } - - var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); - if (changeHandler || changesHandler) { - var obj = { - from: from, to: to, - text: change.text, - removed: change.removed, - origin: change.origin - }; - if (changeHandler) { signalLater(cm, "change", cm, obj); } - if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } - } - cm.display.selForContextMenu = null; - } - - function replaceRange(doc, code, from, to, origin) { - var assign; - - if (!to) { to = from; } - if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); } - if (typeof code == "string") { code = doc.splitLines(code); } - makeChange(doc, {from: from, to: to, text: code, origin: origin}); - } - - // Rebasing/resetting history to deal with externally-sourced changes - - function rebaseHistSelSingle(pos, from, to, diff) { - if (to < pos.line) { - pos.line += diff; - } else if (from < pos.line) { - pos.line = from; - pos.ch = 0; - } - } - - // Tries to rebase an array of history events given a change in the - // document. If the change touches the same lines as the event, the - // event, and everything 'behind' it, is discarded. If the change is - // before the event, the event's positions are updated. Uses a - // copy-on-write scheme for the positions, to avoid having to - // reallocate them all on every rebase, but also avoid problems with - // shared position objects being unsafely updated. - function rebaseHistArray(array, from, to, diff) { - for (var i = 0; i < array.length; ++i) { - var sub = array[i], ok = true; - if (sub.ranges) { - if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } - for (var j = 0; j < sub.ranges.length; j++) { - rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); - rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); - } - continue - } - for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { - var cur = sub.changes[j$1]; - if (to < cur.from.line) { - cur.from = Pos(cur.from.line + diff, cur.from.ch); - cur.to = Pos(cur.to.line + diff, cur.to.ch); - } else if (from <= cur.to.line) { - ok = false; - break - } - } - if (!ok) { - array.splice(0, i + 1); - i = 0; - } - } - } - - function rebaseHist(hist, change) { - var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; - rebaseHistArray(hist.done, from, to, diff); - rebaseHistArray(hist.undone, from, to, diff); - } - - // Utility for applying a change to a line by handle or number, - // returning the number and optionally registering the line as - // changed. - function changeLine(doc, handle, changeType, op) { - var no = handle, line = handle; - if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); } - else { no = lineNo(handle); } - if (no == null) { return null } - if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); } - return line - } - - // The document is represented as a BTree consisting of leaves, with - // chunk of lines in them, and branches, with up to ten leaves or - // other branch nodes below them. The top node is always a branch - // node, and is the document object itself (meaning it has - // additional methods and properties). - // - // All nodes have parent links. The tree is used both to go from - // line numbers to line objects, and to go from objects to numbers. - // It also indexes by height, and is used to convert between height - // and line object, and to find the total height of the document. - // - // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html - - function LeafChunk(lines) { - this.lines = lines; - this.parent = null; - var height = 0; - for (var i = 0; i < lines.length; ++i) { - lines[i].parent = this; - height += lines[i].height; - } - this.height = height; - } - - LeafChunk.prototype = { - chunkSize: function() { return this.lines.length }, - - // Remove the n lines at offset 'at'. - removeInner: function(at, n) { - for (var i = at, e = at + n; i < e; ++i) { - var line = this.lines[i]; - this.height -= line.height; - cleanUpLine(line); - signalLater(line, "delete"); - } - this.lines.splice(at, n); - }, - - // Helper used to collapse a small branch into a single leaf. - collapse: function(lines) { - lines.push.apply(lines, this.lines); - }, - - // Insert the given array of lines at offset 'at', count them as - // having the given height. - insertInner: function(at, lines, height) { - this.height += height; - this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); - for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; } - }, - - // Used to iterate over a part of the tree. - iterN: function(at, n, op) { - for (var e = at + n; at < e; ++at) - { if (op(this.lines[at])) { return true } } - } - }; - - function BranchChunk(children) { - this.children = children; - var size = 0, height = 0; - for (var i = 0; i < children.length; ++i) { - var ch = children[i]; - size += ch.chunkSize(); height += ch.height; - ch.parent = this; - } - this.size = size; - this.height = height; - this.parent = null; - } - - BranchChunk.prototype = { - chunkSize: function() { return this.size }, - - removeInner: function(at, n) { - this.size -= n; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var rm = Math.min(n, sz - at), oldHeight = child.height; - child.removeInner(at, rm); - this.height -= oldHeight - child.height; - if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } - if ((n -= rm) == 0) { break } - at = 0; - } else { at -= sz; } - } - // If the result is smaller than 25 lines, ensure that it is a - // single leaf node. - if (this.size - n < 25 && - (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { - var lines = []; - this.collapse(lines); - this.children = [new LeafChunk(lines)]; - this.children[0].parent = this; - } - }, - - collapse: function(lines) { - for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); } - }, - - insertInner: function(at, lines, height) { - this.size += lines.length; - this.height += height; - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at <= sz) { - child.insertInner(at, lines, height); - if (child.lines && child.lines.length > 50) { - // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. - // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. - var remaining = child.lines.length % 25 + 25; - for (var pos = remaining; pos < child.lines.length;) { - var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); - child.height -= leaf.height; - this.children.splice(++i, 0, leaf); - leaf.parent = this; - } - child.lines = child.lines.slice(0, remaining); - this.maybeSpill(); - } - break - } - at -= sz; - } - }, - - // When a node has grown, check whether it should be split. - maybeSpill: function() { - if (this.children.length <= 10) { return } - var me = this; - do { - var spilled = me.children.splice(me.children.length - 5, 5); - var sibling = new BranchChunk(spilled); - if (!me.parent) { // Become the parent node - var copy = new BranchChunk(me.children); - copy.parent = me; - me.children = [copy, sibling]; - me = copy; - } else { - me.size -= sibling.size; - me.height -= sibling.height; - var myIndex = indexOf(me.parent.children, me); - me.parent.children.splice(myIndex + 1, 0, sibling); - } - sibling.parent = me.parent; - } while (me.children.length > 10) - me.parent.maybeSpill(); - }, - - iterN: function(at, n, op) { - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i], sz = child.chunkSize(); - if (at < sz) { - var used = Math.min(n, sz - at); - if (child.iterN(at, used, op)) { return true } - if ((n -= used) == 0) { break } - at = 0; - } else { at -= sz; } - } - } - }; - - // Line widgets are block elements displayed above or below a line. - - var LineWidget = function(doc, node, options) { - if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) - { this[opt] = options[opt]; } } } - this.doc = doc; - this.node = node; - }; - - LineWidget.prototype.clear = function () { - var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); - if (no == null || !ws) { return } - for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } } - if (!ws.length) { line.widgets = null; } - var height = widgetHeight(this); - updateLineHeight(line, Math.max(0, line.height - height)); - if (cm) { - runInOp(cm, function () { - adjustScrollWhenAboveVisible(cm, line, -height); - regLineChange(cm, no, "widget"); - }); - signalLater(cm, "lineWidgetCleared", cm, this, no); - } - }; - - LineWidget.prototype.changed = function () { - var this$1 = this; - - var oldH = this.height, cm = this.doc.cm, line = this.line; - this.height = null; - var diff = widgetHeight(this) - oldH; - if (!diff) { return } - if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); } - if (cm) { - runInOp(cm, function () { - cm.curOp.forceUpdate = true; - adjustScrollWhenAboveVisible(cm, line, diff); - signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); - }); - } - }; - eventMixin(LineWidget); - - function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) - { addToScrollTop(cm, diff); } - } - - function addLineWidget(doc, handle, node, options) { - var widget = new LineWidget(doc, node, options); - var cm = doc.cm; - if (cm && widget.noHScroll) { cm.display.alignWidgets = true; } - changeLine(doc, handle, "widget", function (line) { - var widgets = line.widgets || (line.widgets = []); - if (widget.insertAt == null) { widgets.push(widget); } - else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); } - widget.line = line; - if (cm && !lineIsHidden(doc, line)) { - var aboveVisible = heightAtLine(line) < doc.scrollTop; - updateLineHeight(line, line.height + widgetHeight(widget)); - if (aboveVisible) { addToScrollTop(cm, widget.height); } - cm.curOp.forceUpdate = true; - } - return true - }); - if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); } - return widget - } - - // TEXTMARKERS - - // Created with markText and setBookmark methods. A TextMarker is a - // handle that can be used to clear or find a marked position in the - // document. Line objects hold arrays (markedSpans) containing - // {from, to, marker} object pointing to such marker objects, and - // indicating that such a marker is present on that line. Multiple - // lines may point to the same marker when it spans across lines. - // The spans will have null for their from/to properties when the - // marker continues beyond the start/end of the line. Markers have - // links back to the lines they currently touch. - - // Collapsed markers have unique ids, in order to be able to order - // them, which is needed for uniquely determining an outer marker - // when they overlap (they may nest, but not partially overlap). - var nextMarkerId = 0; - - var TextMarker = function(doc, type) { - this.lines = []; - this.type = type; - this.doc = doc; - this.id = ++nextMarkerId; - }; - - // Clear the marker. - TextMarker.prototype.clear = function () { - if (this.explicitlyCleared) { return } - var cm = this.doc.cm, withOp = cm && !cm.curOp; - if (withOp) { startOperation(cm); } - if (hasHandler(this, "clear")) { - var found = this.find(); - if (found) { signalLater(this, "clear", found.from, found.to); } - } - var min = null, max = null; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), "text"); } - else if (cm) { - if (span.to != null) { max = lineNo(line); } - if (span.from != null) { min = lineNo(line); } - } - line.markedSpans = removeMarkedSpan(line.markedSpans, span); - if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) - { updateLineHeight(line, textHeight(cm.display)); } - } - if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { - var visual = visualLine(this.lines[i$1]), len = lineLength(visual); - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual; - cm.display.maxLineLength = len; - cm.display.maxLineChanged = true; - } - } } - - if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); } - this.lines.length = 0; - this.explicitlyCleared = true; - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false; - if (cm) { reCheckSelection(cm.doc); } - } - if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); } - if (withOp) { endOperation(cm); } - if (this.parent) { this.parent.clear(); } - }; - - // Find the position of the marker in the document. Returns a {from, - // to} object by default. Side can be passed to get a specific side - // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the - // Pos objects returned contain a line object, rather than a line - // number (used to prevent looking up the same line twice). - TextMarker.prototype.find = function (side, lineObj) { - if (side == null && this.type == "bookmark") { side = 1; } - var from, to; - for (var i = 0; i < this.lines.length; ++i) { - var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (span.from != null) { - from = Pos(lineObj ? line : lineNo(line), span.from); - if (side == -1) { return from } - } - if (span.to != null) { - to = Pos(lineObj ? line : lineNo(line), span.to); - if (side == 1) { return to } - } - } - return from && {from: from, to: to} - }; - - // Signals that the marker's widget changed, and surrounding layout - // should be recomputed. - TextMarker.prototype.changed = function () { - var this$1 = this; - - var pos = this.find(-1, true), widget = this, cm = this.doc.cm; - if (!pos || !cm) { return } - runInOp(cm, function () { - var line = pos.line, lineN = lineNo(pos.line); - var view = findViewForLine(cm, lineN); - if (view) { - clearLineMeasurementCacheFor(view); - cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; - } - cm.curOp.updateMaxLine = true; - if (!lineIsHidden(widget.doc, line) && widget.height != null) { - var oldHeight = widget.height; - widget.height = null; - var dHeight = widgetHeight(widget) - oldHeight; - if (dHeight) - { updateLineHeight(line, line.height + dHeight); } - } - signalLater(cm, "markerChanged", cm, this$1); - }); - }; - - TextMarker.prototype.attachLine = function (line) { - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) - { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } - } - this.lines.push(line); - }; - - TextMarker.prototype.detachLine = function (line) { - this.lines.splice(indexOf(this.lines, line), 1); - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp - ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); - } - }; - eventMixin(TextMarker); - - // Create a marker, wire it up to the right lines, and - function markText(doc, from, to, options, type) { - // Shared markers (across linked documents) are handled separately - // (markTextShared will call out to this again, once per - // document). - if (options && options.shared) { return markTextShared(doc, from, to, options, type) } - // Ensure we are in an operation. - if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } - - var marker = new TextMarker(doc, type), diff = cmp(from, to); - if (options) { copyObj(options, marker, false); } - // Don't connect empty markers unless clearWhenEmpty is false - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) - { return marker } - if (marker.replacedWith) { - // Showing up as a widget implies collapsed (widget replaces text) - marker.collapsed = true; - marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); - if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); } - if (options.insertLeft) { marker.widgetNode.insertLeft = true; } - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || - from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) - { throw new Error("Inserting collapsed marker partially overlapping an existing one") } - seeCollapsedSpans(); - } - - if (marker.addToHistory) - { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); } - - var curLine = from.line, cm = doc.cm, updateMaxLine; - doc.iter(curLine, to.line + 1, function (line) { - if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) - { updateMaxLine = true; } - if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); } - addMarkedSpan(line, new MarkedSpan(marker, - curLine == from.line ? from.ch : null, - curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp); - ++curLine; - }); - // lineIsHidden depends on the presence of the spans, so needs a second pass - if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { - if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); } - }); } - - if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); } - - if (marker.readOnly) { - seeReadOnlySpans(); - if (doc.history.done.length || doc.history.undone.length) - { doc.clearHistory(); } - } - if (marker.collapsed) { - marker.id = ++nextMarkerId; - marker.atomic = true; - } - if (cm) { - // Sync editor state - if (updateMaxLine) { cm.curOp.updateMaxLine = true; } - if (marker.collapsed) - { regChange(cm, from.line, to.line + 1); } - else if (marker.className || marker.startStyle || marker.endStyle || marker.css || - marker.attributes || marker.title) - { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } } - if (marker.atomic) { reCheckSelection(cm.doc); } - signalLater(cm, "markerAdded", cm, marker); - } - return marker - } - - // SHARED TEXTMARKERS - - // A shared marker spans multiple linked documents. It is - // implemented as a meta-marker-object controlling multiple normal - // markers. - var SharedTextMarker = function(markers, primary) { - this.markers = markers; - this.primary = primary; - for (var i = 0; i < markers.length; ++i) - { markers[i].parent = this; } - }; - - SharedTextMarker.prototype.clear = function () { - if (this.explicitlyCleared) { return } - this.explicitlyCleared = true; - for (var i = 0; i < this.markers.length; ++i) - { this.markers[i].clear(); } - signalLater(this, "clear"); - }; - - SharedTextMarker.prototype.find = function (side, lineObj) { - return this.primary.find(side, lineObj) - }; - eventMixin(SharedTextMarker); - - function markTextShared(doc, from, to, options, type) { - options = copyObj(options); - options.shared = false; - var markers = [markText(doc, from, to, options, type)], primary = markers[0]; - var widget = options.widgetNode; - linkedDocs(doc, function (doc) { - if (widget) { options.widgetNode = widget.cloneNode(true); } - markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); - for (var i = 0; i < doc.linked.length; ++i) - { if (doc.linked[i].isParent) { return } } - primary = lst(markers); - }); - return new SharedTextMarker(markers, primary) - } - - function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) - } - - function copySharedMarkers(doc, markers) { - for (var i = 0; i < markers.length; i++) { - var marker = markers[i], pos = marker.find(); - var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); - marker.markers.push(subMark); - subMark.parent = marker; - } - } - } - - function detachSharedMarkers(markers) { - var loop = function ( i ) { - var marker = markers[i], linked = [marker.primary.doc]; - linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }); - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j]; - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null; - marker.markers.splice(j--, 1); - } - } - }; - - for (var i = 0; i < markers.length; i++) loop( i ); - } - - var nextDocId = 0; - var Doc = function(text, mode, firstLine, lineSep, direction) { - if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } - if (firstLine == null) { firstLine = 0; } - - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); - this.first = firstLine; - this.scrollTop = this.scrollLeft = 0; - this.cantEdit = false; - this.cleanGeneration = 1; - this.modeFrontier = this.highlightFrontier = firstLine; - var start = Pos(firstLine, 0); - this.sel = simpleSelection(start); - this.history = new History(null); - this.id = ++nextDocId; - this.modeOption = mode; - this.lineSep = lineSep; - this.direction = (direction == "rtl") ? "rtl" : "ltr"; - this.extend = false; - - if (typeof text == "string") { text = this.splitLines(text); } - updateDoc(this, {from: start, to: start, text: text}); - setSelection(this, simpleSelection(start), sel_dontScroll); - }; - - Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function(from, to, op) { - if (op) { this.iterN(from - this.first, to - from, op); } - else { this.iterN(this.first, this.first + this.size, from); } - }, - - // Non-public interface for adding and removing lines. - insert: function(at, lines) { - var height = 0; - for (var i = 0; i < lines.length; ++i) { height += lines[i].height; } - this.insertInner(at - this.first, lines, height); - }, - remove: function(at, n) { this.removeInner(at - this.first, n); }, - - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - - getValue: function(lineSep) { - var lines = getLines(this, this.first, this.first + this.size); - if (lineSep === false) { return lines } - return lines.join(lineSep || this.lineSeparator()) - }, - setValue: docMethodOp(function(code) { - var top = Pos(this.first, 0), last = this.first + this.size - 1; - makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), - text: this.splitLines(code), origin: "setValue", full: true}, true); - if (this.cm) { scrollToCoords(this.cm, 0, 0); } - setSelection(this, simpleSelection(top), sel_dontScroll); - }), - replaceRange: function(code, from, to, origin) { - from = clipPos(this, from); - to = to ? clipPos(this, to) : from; - replaceRange(this, code, from, to, origin); - }, - getRange: function(from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); - if (lineSep === false) { return lines } - if (lineSep === '') { return lines.join('') } - return lines.join(lineSep || this.lineSeparator()) - }, - - getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, - - getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, - getLineNumber: function(line) {return lineNo(line)}, - - getLineHandleVisualStart: function(line) { - if (typeof line == "number") { line = getLine(this, line); } - return visualLine(line) - }, - - lineCount: function() {return this.size}, - firstLine: function() {return this.first}, - lastLine: function() {return this.first + this.size - 1}, - - clipPos: function(pos) {return clipPos(this, pos)}, - - getCursor: function(start) { - var range = this.sel.primary(), pos; - if (start == null || start == "head") { pos = range.head; } - else if (start == "anchor") { pos = range.anchor; } - else if (start == "end" || start == "to" || start === false) { pos = range.to(); } - else { pos = range.from(); } - return pos - }, - listSelections: function() { return this.sel.ranges }, - somethingSelected: function() {return this.sel.somethingSelected()}, - - setCursor: docMethodOp(function(line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); - }), - setSelection: docMethodOp(function(anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); - }), - extendSelection: docMethodOp(function(head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); - }), - extendSelections: docMethodOp(function(heads, options) { - extendSelections(this, clipPosArray(this, heads), options); - }), - extendSelectionsBy: docMethodOp(function(f, options) { - var heads = map(this.sel.ranges, f); - extendSelections(this, clipPosArray(this, heads), options); - }), - setSelections: docMethodOp(function(ranges, primary, options) { - if (!ranges.length) { return } - var out = []; - for (var i = 0; i < ranges.length; i++) - { out[i] = new Range(clipPos(this, ranges[i].anchor), - clipPos(this, ranges[i].head || ranges[i].anchor)); } - if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); } - setSelection(this, normalizeSelection(this.cm, out, primary), options); - }), - addSelection: docMethodOp(function(anchor, head, options) { - var ranges = this.sel.ranges.slice(0); - ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); - setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); - }), - - getSelection: function(lineSep) { - var ranges = this.sel.ranges, lines; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - lines = lines ? lines.concat(sel) : sel; - } - if (lineSep === false) { return lines } - else { return lines.join(lineSep || this.lineSeparator()) } - }, - getSelections: function(lineSep) { - var parts = [], ranges = this.sel.ranges; - for (var i = 0; i < ranges.length; i++) { - var sel = getBetween(this, ranges[i].from(), ranges[i].to()); - if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); } - parts[i] = sel; - } - return parts - }, - replaceSelection: function(code, collapse, origin) { - var dup = []; - for (var i = 0; i < this.sel.ranges.length; i++) - { dup[i] = code; } - this.replaceSelections(dup, collapse, origin || "+input"); - }, - replaceSelections: docMethodOp(function(code, collapse, origin) { - var changes = [], sel = this.sel; - for (var i = 0; i < sel.ranges.length; i++) { - var range = sel.ranges[i]; - changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}; - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); - for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) - { makeChange(this, changes[i$1]); } - if (newSel) { setSelectionReplaceHistory(this, newSel); } - else if (this.cm) { ensureCursorVisible(this.cm); } - }), - undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), - redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), - undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), - redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), - - setExtending: function(val) {this.extend = val;}, - getExtending: function() {return this.extend}, - - historySize: function() { - var hist = this.history, done = 0, undone = 0; - for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } } - for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } } - return {undo: done, redo: undone} - }, - clearHistory: function() { - var this$1 = this; - - this.history = new History(this.history); - linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true); - }, - - markClean: function() { - this.cleanGeneration = this.changeGeneration(true); - }, - changeGeneration: function(forceSplit) { - if (forceSplit) - { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; } - return this.history.generation - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration) - }, - - getHistory: function() { - return {done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone)} - }, - setHistory: function(histData) { - var hist = this.history = new History(this.history); - hist.done = copyHistoryArray(histData.done.slice(0), null, true); - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); - }, - - setGutterMarker: docMethodOp(function(line, gutterID, value) { - return changeLine(this, line, "gutter", function (line) { - var markers = line.gutterMarkers || (line.gutterMarkers = {}); - markers[gutterID] = value; - if (!value && isEmpty(markers)) { line.gutterMarkers = null; } - return true - }) - }), - - clearGutter: docMethodOp(function(gutterID) { - var this$1 = this; - - this.iter(function (line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - changeLine(this$1, line, "gutter", function () { - line.gutterMarkers[gutterID] = null; - if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; } - return true - }); - } - }); - }), - - lineInfo: function(line) { - var n; - if (typeof line == "number") { - if (!isLine(this, line)) { return null } - n = line; - line = getLine(this, line); - if (!line) { return null } - } else { - n = lineNo(line); - if (n == null) { return null } - } - return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, - textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, - widgets: line.widgets} - }, - - addLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - if (!line[prop]) { line[prop] = cls; } - else if (classTest(cls).test(line[prop])) { return false } - else { line[prop] += " " + cls; } - return true - }) - }), - removeLineClass: docMethodOp(function(handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop = where == "text" ? "textClass" - : where == "background" ? "bgClass" - : where == "gutter" ? "gutterClass" : "wrapClass"; - var cur = line[prop]; - if (!cur) { return false } - else if (cls == null) { line[prop] = null; } - else { - var found = cur.match(classTest(cls)); - if (!found) { return false } - var end = found.index + found[0].length; - line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; - } - return true - }) - }), - - addLineWidget: docMethodOp(function(handle, node, options) { - return addLineWidget(this, handle, node, options) - }), - removeLineWidget: function(widget) { widget.clear(); }, - - markText: function(from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") - }, - setBookmark: function(pos, options) { - var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, shared: options && options.shared, - handleMouseEvents: options && options.handleMouseEvents}; - pos = clipPos(this, pos); - return markText(this, pos, pos, realOpts, "bookmark") - }, - findMarksAt: function(pos) { - pos = clipPos(this, pos); - var markers = [], spans = getLine(this, pos.line).markedSpans; - if (spans) { for (var i = 0; i < spans.length; ++i) { - var span = spans[i]; - if ((span.from == null || span.from <= pos.ch) && - (span.to == null || span.to >= pos.ch)) - { markers.push(span.marker.parent || span.marker); } - } } - return markers - }, - findMarks: function(from, to, filter) { - from = clipPos(this, from); to = clipPos(this, to); - var found = [], lineNo = from.line; - this.iter(from.line, to.line + 1, function (line) { - var spans = line.markedSpans; - if (spans) { for (var i = 0; i < spans.length; i++) { - var span = spans[i]; - if (!(span.to != null && lineNo == from.line && from.ch >= span.to || - span.from == null && lineNo != from.line || - span.from != null && lineNo == to.line && span.from >= to.ch) && - (!filter || filter(span.marker))) - { found.push(span.marker.parent || span.marker); } - } } - ++lineNo; - }); - return found - }, - getAllMarks: function() { - var markers = []; - this.iter(function (line) { - var sps = line.markedSpans; - if (sps) { for (var i = 0; i < sps.length; ++i) - { if (sps[i].from != null) { markers.push(sps[i].marker); } } } - }); - return markers - }, - - posFromIndex: function(off) { - var ch, lineNo = this.first, sepSize = this.lineSeparator().length; - this.iter(function (line) { - var sz = line.text.length + sepSize; - if (sz > off) { ch = off; return true } - off -= sz; - ++lineNo; - }); - return clipPos(this, Pos(lineNo, ch)) - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords); - var index = coords.ch; - if (coords.line < this.first || coords.ch < 0) { return 0 } - var sepSize = this.lineSeparator().length; - this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value - index += line.text.length + sepSize; - }); - return index - }, - - copy: function(copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), - this.modeOption, this.first, this.lineSep, this.direction); - doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; - doc.sel = this.sel; - doc.extend = false; - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth; - doc.setHistory(this.getHistory()); - } - return doc - }, - - linkedDoc: function(options) { - if (!options) { options = {}; } - var from = this.first, to = this.first + this.size; - if (options.from != null && options.from > from) { from = options.from; } - if (options.to != null && options.to < to) { to = options.to; } - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); - if (options.sharedHist) { copy.history = this.history - ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); - copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; - copySharedMarkers(copy, findSharedMarkers(this)); - return copy - }, - unlinkDoc: function(other) { - if (other instanceof CodeMirror) { other = other.doc; } - if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { - var link = this.linked[i]; - if (link.doc != other) { continue } - this.linked.splice(i, 1); - other.unlinkDoc(this); - detachSharedMarkers(findSharedMarkers(this)); - break - } } - // If the histories were shared, split them again - if (other.history == this.history) { - var splitIds = [other.id]; - linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true); - other.history = new History(null); - other.history.done = copyHistoryArray(this.history.done, splitIds); - other.history.undone = copyHistoryArray(this.history.undone, splitIds); - } - }, - iterLinkedDocs: function(f) {linkedDocs(this, f);}, - - getMode: function() {return this.mode}, - getEditor: function() {return this.cm}, - - splitLines: function(str) { - if (this.lineSep) { return str.split(this.lineSep) } - return splitLinesAuto(str) - }, - lineSeparator: function() { return this.lineSep || "\n" }, - - setDirection: docMethodOp(function (dir) { - if (dir != "rtl") { dir = "ltr"; } - if (dir == this.direction) { return } - this.direction = dir; - this.iter(function (line) { return line.order = null; }); - if (this.cm) { directionChanged(this.cm); } - }) - }); - - // Public alias. - Doc.prototype.eachLine = Doc.prototype.iter; - - // Kludge to work around strange IE behavior where it'll sometimes - // re-fire a series of drag-related events right after the drop (#1551) - var lastDrop = 0; - - function onDrop(e) { - var cm = this; - clearDragCursor(cm); - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) - { return } - e_preventDefault(e); - if (ie) { lastDrop = +new Date; } - var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; - if (!pos || cm.isReadOnly()) { return } - // Might be a file drop, in which case we simply extract the text - // and insert it. - if (files && files.length && window.FileReader && window.File) { - var n = files.length, text = Array(n), read = 0; - var markAsReadAndPasteIfAllFilesAreRead = function () { - if (++read == n) { - operation(cm, function () { - pos = clipPos(cm.doc, pos); - var change = {from: pos, to: pos, - text: cm.doc.splitLines( - text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())), - origin: "paste"}; - makeChange(cm.doc, change); - setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); - })(); - } - }; - var readTextFromFile = function (file, i) { - if (cm.options.allowDropFileTypes && - indexOf(cm.options.allowDropFileTypes, file.type) == -1) { - markAsReadAndPasteIfAllFilesAreRead(); - return - } - var reader = new FileReader; - reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); }; - reader.onload = function () { - var content = reader.result; - if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { - markAsReadAndPasteIfAllFilesAreRead(); - return - } - text[i] = content; - markAsReadAndPasteIfAllFilesAreRead(); - }; - reader.readAsText(file); - }; - for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); } - } else { // Normal drop - // Don't do a replace if the drop happened inside of the selected text. - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e); - // Ensure the editor is re-focused - setTimeout(function () { return cm.display.input.focus(); }, 20); - return - } - try { - var text$1 = e.dataTransfer.getData("Text"); - if (text$1) { - var selected; - if (cm.state.draggingText && !cm.state.draggingText.copy) - { selected = cm.listSelections(); } - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); - if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) - { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } } - cm.replaceSelection(text$1, "around", "paste"); - cm.display.input.focus(); - } - } - catch(e$1){} - } - } - - function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } - - e.dataTransfer.setData("Text", cm.getSelection()); - e.dataTransfer.effectAllowed = "copyMove"; - - // Use dummy image instead of default browsers image. - // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (presto) { - img.width = img.height = 1; - cm.display.wrapper.appendChild(img); - // Force a relayout, or Opera won't use our image for some obscure reason - img._top = img.offsetTop; - } - e.dataTransfer.setDragImage(img, 0, 0); - if (presto) { img.parentNode.removeChild(img); } - } - } - - function onDragOver(cm, e) { - var pos = posFromMouse(cm, e); - if (!pos) { return } - var frag = document.createDocumentFragment(); - drawSelectionCursor(cm, pos, frag); - if (!cm.display.dragCursor) { - cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); - cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); - } - removeChildrenAndAdd(cm.display.dragCursor, frag); - } - - function clearDragCursor(cm) { - if (cm.display.dragCursor) { - cm.display.lineSpace.removeChild(cm.display.dragCursor); - cm.display.dragCursor = null; - } - } - - // These must be handled carefully, because naively registering a - // handler for each editor will cause the editors to never be - // garbage collected. - - function forEachCodeMirror(f) { - if (!document.getElementsByClassName) { return } - var byClass = document.getElementsByClassName("CodeMirror"), editors = []; - for (var i = 0; i < byClass.length; i++) { - var cm = byClass[i].CodeMirror; - if (cm) { editors.push(cm); } - } - if (editors.length) { editors[0].operation(function () { - for (var i = 0; i < editors.length; i++) { f(editors[i]); } - }); } - } - - var globalsRegistered = false; - function ensureGlobalHandlers() { - if (globalsRegistered) { return } - registerGlobalHandlers(); - globalsRegistered = true; - } - function registerGlobalHandlers() { - // When the window resizes, we need to refresh active editors. - var resizeTimer; - on(window, "resize", function () { - if (resizeTimer == null) { resizeTimer = setTimeout(function () { - resizeTimer = null; - forEachCodeMirror(onResize); - }, 100); } - }); - // When the window loses focus, we want to show the editor as blurred - on(window, "blur", function () { return forEachCodeMirror(onBlur); }); - } - // Called when the window resizes - function onResize(cm) { - var d = cm.display; - // Might be a text scaling operation, clear size caches. - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.scrollbarsClipped = false; - cm.setSize(); - } - - var keyNames = { - 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", - 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", - 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", - 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", - 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock", - 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", - 221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", - 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" - }; - - // Number keys - for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); } - // Alphabetic keys - for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); } - // Function keys - for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; } - - var keyMap = {}; - - keyMap.basic = { - "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", - "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", - "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", - "Esc": "singleSelection" - }; - // Note that the save and find-related commands aren't defined by - // default. User code or addons can define them. Unknown commands - // are simply ignored. - keyMap.pcDefault = { - "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", - "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", - "fallthrough": "basic" - }; - // Very basic readline/emacs-style bindings, which are standard on Mac. - keyMap.emacsy = { - "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", - "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", - "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", - "Ctrl-T": "transposeChars", "Ctrl-O": "openLine" - }; - keyMap.macDefault = { - "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", - "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", - "fallthrough": ["basic", "emacsy"] - }; - keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; - - // KEYMAP DISPATCH - - function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/); - name = parts[parts.length - 1]; - var alt, ctrl, shift, cmd; - for (var i = 0; i < parts.length - 1; i++) { - var mod = parts[i]; - if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; } - else if (/^a(lt)?$/i.test(mod)) { alt = true; } - else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; } - else if (/^s(hift)?$/i.test(mod)) { shift = true; } - else { throw new Error("Unrecognized modifier name: " + mod) } - } - if (alt) { name = "Alt-" + name; } - if (ctrl) { name = "Ctrl-" + name; } - if (cmd) { name = "Cmd-" + name; } - if (shift) { name = "Shift-" + name; } - return name - } - - // This is a kludge to keep keymaps mostly working as raw objects - // (backwards compatibility) while at the same time support features - // like normalization and multi-stroke key bindings. It compiles a - // new normalized keymap, and then updates the old object to reflect - // this. - function normalizeKeyMap(keymap) { - var copy = {}; - for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname]; - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } - if (value == "...") { delete keymap[keyname]; continue } - - var keys = map(keyname.split(" "), normalizeKeyName); - for (var i = 0; i < keys.length; i++) { - var val = (void 0), name = (void 0); - if (i == keys.length - 1) { - name = keys.join(" "); - val = value; - } else { - name = keys.slice(0, i + 1).join(" "); - val = "..."; - } - var prev = copy[name]; - if (!prev) { copy[name] = val; } - else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } - } - delete keymap[keyname]; - } } - for (var prop in copy) { keymap[prop] = copy[prop]; } - return keymap - } - - function lookupKey(key, map, handle, context) { - map = getKeyMap(map); - var found = map.call ? map.call(key, context) : map[key]; - if (found === false) { return "nothing" } - if (found === "...") { return "multi" } - if (found != null && handle(found)) { return "handled" } - - if (map.fallthrough) { - if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") - { return lookupKey(key, map.fallthrough, handle, context) } - for (var i = 0; i < map.fallthrough.length; i++) { - var result = lookupKey(key, map.fallthrough[i], handle, context); - if (result) { return result } - } - } - } - - // Modifier key presses don't count as 'real' key presses for the - // purpose of keymap fallthrough. - function isModifierKey(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode]; - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" - } - - function addModifierNames(name, event, noShift) { - var base = name; - if (event.altKey && base != "Alt") { name = "Alt-" + name; } - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; } - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { name = "Cmd-" + name; } - if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; } - return name - } - - // Look up the name of a key as indicated by an event object. - function keyName(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) { return false } - var name = keyNames[event.keyCode]; - if (name == null || event.altGraphKey) { return false } - // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, - // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) - if (event.keyCode == 3 && event.code) { name = event.code; } - return addModifierNames(name, event, noShift) - } - - function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val - } - - // Helper for deleting text near the selection(s), used to implement - // backspace, delete, and similar functionality. - function deleteNearSelection(cm, compute) { - var ranges = cm.doc.sel.ranges, kill = []; - // Build up a set of ranges to kill first, merging overlapping - // ranges. - for (var i = 0; i < ranges.length; i++) { - var toKill = compute(ranges[i]); - while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { - var replaced = kill.pop(); - if (cmp(replaced.from, toKill.from) < 0) { - toKill.from = replaced.from; - break - } - } - kill.push(toKill); - } - // Next, remove those actual ranges. - runInOp(cm, function () { - for (var i = kill.length - 1; i >= 0; i--) - { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); } - ensureCursorVisible(cm); - }); - } - - function moveCharLogically(line, ch, dir) { - var target = skipExtendingChars(line.text, ch + dir, dir); - return target < 0 || target > line.text.length ? null : target - } - - function moveLogically(line, start, dir) { - var ch = moveCharLogically(line, start.ch, dir); - return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") - } - - function endOfLine(visually, cm, lineObj, lineNo, dir) { - if (visually) { - if (cm.doc.direction == "rtl") { dir = -dir; } - var order = getOrder(lineObj, cm.doc.direction); - if (order) { - var part = dir < 0 ? lst(order) : order[0]; - var moveInStorageOrder = (dir < 0) == (part.level == 1); - var sticky = moveInStorageOrder ? "after" : "before"; - var ch; - // With a wrapped rtl chunk (possibly spanning multiple bidi parts), - // it could be that the last bidi part is not on the last visual line, - // since visual lines contain content order-consecutive chunks. - // Thus, in rtl, we are looking for the first (content-order) character - // in the rtl chunk that is on the last line (that is, the same line - // as the last (content-order) character). - if (part.level > 0 || cm.doc.direction == "rtl") { - var prep = prepareMeasureForLine(cm, lineObj); - ch = dir < 0 ? lineObj.text.length - 1 : 0; - var targetTop = measureCharPrepared(cm, prep, ch).top; - ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch); - if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); } - } else { ch = dir < 0 ? part.to : part.from; } - return new Pos(lineNo, ch, sticky) - } - } - return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") - } - - function moveVisually(cm, line, start, dir) { - var bidi = getOrder(line, cm.doc.direction); - if (!bidi) { return moveLogically(line, start, dir) } - if (start.ch >= line.text.length) { - start.ch = line.text.length; - start.sticky = "before"; - } else if (start.ch <= 0) { - start.ch = 0; - start.sticky = "after"; - } - var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]; - if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { - // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, - // nothing interesting happens. - return moveLogically(line, start, dir) - } - - var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }; - var prep; - var getWrappedLineExtent = function (ch) { - if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } - prep = prep || prepareMeasureForLine(cm, line); - return wrappedLineExtentChar(cm, line, prep, ch) - }; - var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); - - if (cm.doc.direction == "rtl" || part.level == 1) { - var moveInStorageOrder = (part.level == 1) == (dir < 0); - var ch = mv(start, moveInStorageOrder ? 1 : -1); - if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { - // Case 2: We move within an rtl part or in an rtl editor on the same visual line - var sticky = moveInStorageOrder ? "before" : "after"; - return new Pos(start.line, ch, sticky) - } - } - - // Case 3: Could not move within this bidi part in this visual line, so leave - // the current bidi part - - var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { - var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder - ? new Pos(start.line, mv(ch, 1), "before") - : new Pos(start.line, ch, "after"); }; - - for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { - var part = bidi[partPos]; - var moveInStorageOrder = (dir > 0) == (part.level != 1); - var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); - if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } - ch = moveInStorageOrder ? part.from : mv(part.to, -1); - if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } - } - }; - - // Case 3a: Look for other bidi parts on the same visual line - var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); - if (res) { return res } - - // Case 3b: Look for other bidi parts on the next visual line - var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); - if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { - res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); - if (res) { return res } - } - - // Case 4: Nowhere to move - return null - } - - // Commands are parameter-less actions that can be performed on an - // editor, mostly used for keybindings. - var commands = { - selectAll: selectAll, - singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, - killLine: function (cm) { return deleteNearSelection(cm, function (range) { - if (range.empty()) { - var len = getLine(cm.doc, range.head.line).text.length; - if (range.head.ch == len && range.head.line < cm.lastLine()) - { return {from: range.head, to: Pos(range.head.line + 1, 0)} } - else - { return {from: range.head, to: Pos(range.head.line, len)} } - } else { - return {from: range.from(), to: range.to()} - } - }); }, - deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ - from: Pos(range.from().line, 0), - to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) - }); }); }, - delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ - from: Pos(range.from().line, 0), to: range.from() - }); }); }, - delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { - var top = cm.charCoords(range.head, "div").top + 5; - var leftPos = cm.coordsChar({left: 0, top: top}, "div"); - return {from: leftPos, to: range.from()} - }); }, - delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { - var top = cm.charCoords(range.head, "div").top + 5; - var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); - return {from: range.from(), to: rightPos } - }); }, - undo: function (cm) { return cm.undo(); }, - redo: function (cm) { return cm.redo(); }, - undoSelection: function (cm) { return cm.undoSelection(); }, - redoSelection: function (cm) { return cm.redoSelection(); }, - goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, - goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, - goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, - {origin: "+move", bias: 1} - ); }, - goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, - {origin: "+move", bias: 1} - ); }, - goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, - {origin: "+move", bias: -1} - ); }, - goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { - var top = cm.cursorCoords(range.head, "div").top + 5; - return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") - }, sel_move); }, - goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { - var top = cm.cursorCoords(range.head, "div").top + 5; - return cm.coordsChar({left: 0, top: top}, "div") - }, sel_move); }, - goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { - var top = cm.cursorCoords(range.head, "div").top + 5; - var pos = cm.coordsChar({left: 0, top: top}, "div"); - if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } - return pos - }, sel_move); }, - goLineUp: function (cm) { return cm.moveV(-1, "line"); }, - goLineDown: function (cm) { return cm.moveV(1, "line"); }, - goPageUp: function (cm) { return cm.moveV(-1, "page"); }, - goPageDown: function (cm) { return cm.moveV(1, "page"); }, - goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, - goCharRight: function (cm) { return cm.moveH(1, "char"); }, - goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, - goColumnRight: function (cm) { return cm.moveH(1, "column"); }, - goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, - goGroupRight: function (cm) { return cm.moveH(1, "group"); }, - goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, - goWordRight: function (cm) { return cm.moveH(1, "word"); }, - delCharBefore: function (cm) { return cm.deleteH(-1, "codepoint"); }, - delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, - delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, - delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, - delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, - delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, - indentAuto: function (cm) { return cm.indentSelection("smart"); }, - indentMore: function (cm) { return cm.indentSelection("add"); }, - indentLess: function (cm) { return cm.indentSelection("subtract"); }, - insertTab: function (cm) { return cm.replaceSelection("\t"); }, - insertSoftTab: function (cm) { - var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].from(); - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); - spaces.push(spaceStr(tabSize - col % tabSize)); - } - cm.replaceSelections(spaces); - }, - defaultTab: function (cm) { - if (cm.somethingSelected()) { cm.indentSelection("add"); } - else { cm.execCommand("insertTab"); } - }, - // Swap the two chars left and right of each selection's head. - // Move cursor behind the two swapped characters afterwards. - // - // Doesn't consider line feeds a character. - // Doesn't scan more than one line above to find a character. - // Doesn't do anything on an empty line. - // Doesn't do anything with non-empty selections. - transposeChars: function (cm) { return runInOp(cm, function () { - var ranges = cm.listSelections(), newSel = []; - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) { continue } - var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; - if (line) { - if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); } - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1); - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), - Pos(cur.line, cur.ch - 2), cur, "+transpose"); - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text; - if (prev) { - cur = new Pos(cur.line, 1); - cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + - prev.charAt(prev.length - 1), - Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); - } - } - } - newSel.push(new Range(cur, cur)); - } - cm.setSelections(newSel); - }); }, - newlineAndIndent: function (cm) { return runInOp(cm, function () { - var sels = cm.listSelections(); - for (var i = sels.length - 1; i >= 0; i--) - { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); } - sels = cm.listSelections(); - for (var i$1 = 0; i$1 < sels.length; i$1++) - { cm.indentLine(sels[i$1].from().line, null, true); } - ensureCursorVisible(cm); - }); }, - openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, - toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } - }; - - - function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLine(line); - if (visual != line) { lineN = lineNo(visual); } - return endOfLine(true, cm, visual, lineN, 1) - } - function lineEnd(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLineEnd(line); - if (visual != line) { lineN = lineNo(visual); } - return endOfLine(true, cm, line, lineN, -1) - } - function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line); - var line = getLine(cm.doc, start.line); - var order = getOrder(line, cm.doc.direction); - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; - return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) - } - return start - } - - // Run a handler that was bound to a key. - function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound]; - if (!bound) { return false } - } - // Ensure previous input has been read, so that the handler sees a - // consistent view of the document - cm.display.input.ensurePolled(); - var prevShift = cm.display.shift, done = false; - try { - if (cm.isReadOnly()) { cm.state.suppressEdits = true; } - if (dropShift) { cm.display.shift = false; } - done = bound(cm) != Pass; - } finally { - cm.display.shift = prevShift; - cm.state.suppressEdits = false; - } - return done - } - - function lookupKeyForEditor(cm, name, handle) { - for (var i = 0; i < cm.state.keyMaps.length; i++) { - var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); - if (result) { return result } - } - return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) - || lookupKey(name, cm.options.keyMap, handle, cm) - } - - // Note that, despite the name, this function is also used to check - // for bound mouse clicks. - - var stopSeq = new Delayed; - - function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq; - if (seq) { - if (isModifierKey(name)) { return "handled" } - if (/\'$/.test(name)) - { cm.state.keySeq = null; } - else - { stopSeq.set(50, function () { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null; - cm.display.input.reset(); - } - }); } - if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true } - } - return dispatchKeyInner(cm, name, e, handle) - } - - function dispatchKeyInner(cm, name, e, handle) { - var result = lookupKeyForEditor(cm, name, handle); - - if (result == "multi") - { cm.state.keySeq = name; } - if (result == "handled") - { signalLater(cm, "keyHandled", cm, name, e); } - - if (result == "handled" || result == "multi") { - e_preventDefault(e); - restartBlink(cm); - } - - return !!result - } - - // Handle a key from the keydown event. - function handleKeyBinding(cm, e) { - var name = keyName(e, true); - if (!name) { return false } - - if (e.shiftKey && !cm.state.keySeq) { - // First try to resolve full name (including 'Shift-'). Failing - // that, see if there is a cursor-motion command (starting with - // 'go') bound to the keyname without 'Shift-'. - return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) - || dispatchKey(cm, name, e, function (b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) - { return doHandleBinding(cm, b) } - }) - } else { - return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) - } - } - - // Handle a key from the keypress event - function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) - } - - var lastStoppedKey = null; - function onKeyDown(e) { - var cm = this; - if (e.target && e.target != cm.display.input.getField()) { return } - cm.curOp.focus = activeElt(); - if (signalDOMEvent(cm, e)) { return } - // IE does strange things with escape. - if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; } - var code = e.keyCode; - cm.display.shift = code == 16 || e.shiftKey; - var handled = handleKeyBinding(cm, e); - if (presto) { - lastStoppedKey = handled ? code : null; - // Opera has no cut event... we try to at least catch the key combo - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) - { cm.replaceSelection("", null, "cut"); } - } - if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) - { document.execCommand("cut"); } - - // Turn mouse into crosshair when Alt is held on Mac. - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) - { showCrossHair(cm); } - } - - function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv; - addClass(lineDiv, "CodeMirror-crosshair"); - - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair"); - off(document, "keyup", up); - off(document, "mouseover", up); - } - } - on(document, "keyup", up); - on(document, "mouseover", up); - } - - function onKeyUp(e) { - if (e.keyCode == 16) { this.doc.sel.shift = false; } - signalDOMEvent(this, e); - } - - function onKeyPress(e) { - var cm = this; - if (e.target && e.target != cm.display.input.getField()) { return } - if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } - var keyCode = e.keyCode, charCode = e.charCode; - if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} - if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } - var ch = String.fromCharCode(charCode == null ? keyCode : charCode); - // Some browsers fire keypress events for backspace - if (ch == "\x08") { return } - if (handleCharBinding(cm, e, ch)) { return } - cm.display.input.onKeyPress(e); - } - - var DOUBLECLICK_DELAY = 400; - - var PastClick = function(time, pos, button) { - this.time = time; - this.pos = pos; - this.button = button; - }; - - PastClick.prototype.compare = function (time, pos, button) { - return this.time + DOUBLECLICK_DELAY > time && - cmp(pos, this.pos) == 0 && button == this.button - }; - - var lastClick, lastDoubleClick; - function clickRepeat(pos, button) { - var now = +new Date; - if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { - lastClick = lastDoubleClick = null; - return "triple" - } else if (lastClick && lastClick.compare(now, pos, button)) { - lastDoubleClick = new PastClick(now, pos, button); - lastClick = null; - return "double" - } else { - lastClick = new PastClick(now, pos, button); - lastDoubleClick = null; - return "single" - } - } - - // A mouse down can be a single click, double click, triple click, - // start of selection drag, start of text drag, new cursor - // (ctrl-click), rectangle drag (alt-drag), or xwin - // middle-click-paste. Or it might be a click on something we should - // not interfere with, such as a scrollbar or widget. - function onMouseDown(e) { - var cm = this, display = cm.display; - if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } - display.input.ensurePolled(); - display.shift = e.shiftKey; - - if (eventInWidget(display, e)) { - if (!webkit) { - // Briefly turn off draggability, to allow widgets to do - // normal dragging things. - display.scroller.draggable = false; - setTimeout(function () { return display.scroller.draggable = true; }, 100); - } - return - } - if (clickInGutter(cm, e)) { return } - var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; - window.focus(); - - // #3261: make sure, that we're not starting a second selection - if (button == 1 && cm.state.selectingText) - { cm.state.selectingText(e); } - - if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return } - - if (button == 1) { - if (pos) { leftButtonDown(cm, pos, repeat, e); } - else if (e_target(e) == display.scroller) { e_preventDefault(e); } - } else if (button == 2) { - if (pos) { extendSelection(cm.doc, pos); } - setTimeout(function () { return display.input.focus(); }, 20); - } else if (button == 3) { - if (captureRightClick) { cm.display.input.onContextMenu(e); } - else { delayBlurEvent(cm); } - } - } - - function handleMappedButton(cm, button, pos, repeat, event) { - var name = "Click"; - if (repeat == "double") { name = "Double" + name; } - else if (repeat == "triple") { name = "Triple" + name; } - name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; - - return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { - if (typeof bound == "string") { bound = commands[bound]; } - if (!bound) { return false } - var done = false; - try { - if (cm.isReadOnly()) { cm.state.suppressEdits = true; } - done = bound(cm, pos) != Pass; - } finally { - cm.state.suppressEdits = false; - } - return done - }) - } - - function configureMouse(cm, repeat, event) { - var option = cm.getOption("configureMouse"); - var value = option ? option(cm, repeat, event) : {}; - if (value.unit == null) { - var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; - value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; - } - if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; } - if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; } - if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); } - return value - } - - function leftButtonDown(cm, pos, repeat, event) { - if (ie) { setTimeout(bind(ensureFocus, cm), 0); } - else { cm.curOp.focus = activeElt(); } - - var behavior = configureMouse(cm, repeat, event); - - var sel = cm.doc.sel, contained; - if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && - repeat == "single" && (contained = sel.contains(pos)) > -1 && - (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && - (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) - { leftButtonStartDrag(cm, event, pos, behavior); } - else - { leftButtonSelect(cm, event, pos, behavior); } - } - - // Start a text drag. When it ends, see if any dragging actually - // happen, and treat as a click if it didn't. - function leftButtonStartDrag(cm, event, pos, behavior) { - var display = cm.display, moved = false; - var dragEnd = operation(cm, function (e) { - if (webkit) { display.scroller.draggable = false; } - cm.state.draggingText = false; - if (cm.state.delayingBlurEvent) { - if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; } - else { delayBlurEvent(cm); } - } - off(display.wrapper.ownerDocument, "mouseup", dragEnd); - off(display.wrapper.ownerDocument, "mousemove", mouseMove); - off(display.scroller, "dragstart", dragStart); - off(display.scroller, "drop", dragEnd); - if (!moved) { - e_preventDefault(e); - if (!behavior.addNew) - { extendSelection(cm.doc, pos, null, null, behavior.extend); } - // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) - if ((webkit && !safari) || ie && ie_version == 9) - { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); } - else - { display.input.focus(); } - } - }); - var mouseMove = function(e2) { - moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; - }; - var dragStart = function () { return moved = true; }; - // Let the drag handler handle this. - if (webkit) { display.scroller.draggable = true; } - cm.state.draggingText = dragEnd; - dragEnd.copy = !behavior.moveOnDrag; - on(display.wrapper.ownerDocument, "mouseup", dragEnd); - on(display.wrapper.ownerDocument, "mousemove", mouseMove); - on(display.scroller, "dragstart", dragStart); - on(display.scroller, "drop", dragEnd); - - cm.state.delayingBlurEvent = true; - setTimeout(function () { return display.input.focus(); }, 20); - // IE's approach to draggable - if (display.scroller.dragDrop) { display.scroller.dragDrop(); } - } - - function rangeForUnit(cm, pos, unit) { - if (unit == "char") { return new Range(pos, pos) } - if (unit == "word") { return cm.findWordAt(pos) } - if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } - var result = unit(cm, pos); - return new Range(result.from, result.to) - } - - // Normal selection, as opposed to text dragging. - function leftButtonSelect(cm, event, start, behavior) { - if (ie) { delayBlurEvent(cm); } - var display = cm.display, doc = cm.doc; - e_preventDefault(event); - - var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; - if (behavior.addNew && !behavior.extend) { - ourIndex = doc.sel.contains(start); - if (ourIndex > -1) - { ourRange = ranges[ourIndex]; } - else - { ourRange = new Range(start, start); } - } else { - ourRange = doc.sel.primary(); - ourIndex = doc.sel.primIndex; - } - - if (behavior.unit == "rectangle") { - if (!behavior.addNew) { ourRange = new Range(start, start); } - start = posFromMouse(cm, event, true, true); - ourIndex = -1; - } else { - var range = rangeForUnit(cm, start, behavior.unit); - if (behavior.extend) - { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); } - else - { ourRange = range; } - } - - if (!behavior.addNew) { - ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; - } else if (ourIndex == -1) { - ourIndex = ranges.length; - setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), - {scroll: false, origin: "*mouse"}); - } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { - setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), - {scroll: false, origin: "*mouse"}); - startSel = doc.sel; - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); - } - - var lastPos = start; - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) { return } - lastPos = pos; - - if (behavior.unit == "rectangle") { - var ranges = [], tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); - var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); - line <= end; line++) { - var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); - if (left == right) - { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); } - else if (text.length > leftPos) - { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } - } - if (!ranges.length) { ranges.push(new Range(start, start)); } - setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), - {origin: "*mouse", scroll: false}); - cm.scrollIntoView(pos); - } else { - var oldRange = ourRange; - var range = rangeForUnit(cm, pos, behavior.unit); - var anchor = oldRange.anchor, head; - if (cmp(range.anchor, anchor) > 0) { - head = range.head; - anchor = minPos(oldRange.from(), range.anchor); - } else { - head = range.anchor; - anchor = maxPos(oldRange.to(), range.head); - } - var ranges$1 = startSel.ranges.slice(0); - ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); - setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); - } - } - - var editorSize = display.wrapper.getBoundingClientRect(); - // Used to ensure timeout re-tries don't fire when another extend - // happened in the meantime (clearTimeout isn't reliable -- at - // least on Chrome, the timeouts still happen even when cleared, - // if the clear happens after their scheduled firing time). - var counter = 0; - - function extend(e) { - var curCount = ++counter; - var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); - if (!cur) { return } - if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt(); - extendTo(cur); - var visible = visibleLines(display, doc); - if (cur.line >= visible.to || cur.line < visible.from) - { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); } - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; - if (outside) { setTimeout(operation(cm, function () { - if (counter != curCount) { return } - display.scroller.scrollTop += outside; - extend(e); - }), 50); } - } - } - - function done(e) { - cm.state.selectingText = false; - counter = Infinity; - // If e is null or undefined we interpret this as someone trying - // to explicitly cancel the selection rather than the user - // letting go of the mouse button. - if (e) { - e_preventDefault(e); - display.input.focus(); - } - off(display.wrapper.ownerDocument, "mousemove", move); - off(display.wrapper.ownerDocument, "mouseup", up); - doc.history.lastSelOrigin = null; - } - - var move = operation(cm, function (e) { - if (e.buttons === 0 || !e_button(e)) { done(e); } - else { extend(e); } - }); - var up = operation(cm, done); - cm.state.selectingText = up; - on(display.wrapper.ownerDocument, "mousemove", move); - on(display.wrapper.ownerDocument, "mouseup", up); - } - - // Used when mouse-selecting to adjust the anchor to the proper side - // of a bidi jump depending on the visual position of the head. - function bidiSimplify(cm, range) { - var anchor = range.anchor; - var head = range.head; - var anchorLine = getLine(cm.doc, anchor.line); - if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range } - var order = getOrder(anchorLine); - if (!order) { return range } - var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]; - if (part.from != anchor.ch && part.to != anchor.ch) { return range } - var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1); - if (boundary == 0 || boundary == order.length) { return range } - - // Compute the relative visual position of the head compared to the - // anchor (<0 is to the left, >0 to the right) - var leftSide; - if (head.line != anchor.line) { - leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; - } else { - var headIndex = getBidiPartAt(order, head.ch, head.sticky); - var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); - if (headIndex == boundary - 1 || headIndex == boundary) - { leftSide = dir < 0; } - else - { leftSide = dir > 0; } - } - - var usePart = order[boundary + (leftSide ? -1 : 0)]; - var from = leftSide == (usePart.level == 1); - var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"; - return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head) - } - - - // Determines whether an event happened in the gutter, and fires the - // handlers for the corresponding event. - function gutterEvent(cm, e, type, prevent) { - var mX, mY; - if (e.touches) { - mX = e.touches[0].clientX; - mY = e.touches[0].clientY; - } else { - try { mX = e.clientX; mY = e.clientY; } - catch(e$1) { return false } - } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } - if (prevent) { e_preventDefault(e); } - - var display = cm.display; - var lineBox = display.lineDiv.getBoundingClientRect(); - - if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } - mY -= lineBox.top - display.viewOffset; - - for (var i = 0; i < cm.display.gutterSpecs.length; ++i) { - var g = display.gutters.childNodes[i]; - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY); - var gutter = cm.display.gutterSpecs[i]; - signal(cm, type, cm, line, gutter.className, e); - return e_defaultPrevented(e) - } - } - } - - function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true) - } - - // CONTEXT MENU HANDLING - - // To make the context menu work, we need to briefly unhide the - // textarea (making it as unobtrusive as possible) to let the - // right-click take effect on it. - function onContextMenu(cm, e) { - if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } - if (signalDOMEvent(cm, e, "contextmenu")) { return } - if (!captureRightClick) { cm.display.input.onContextMenu(e); } - } - - function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) { return false } - return gutterEvent(cm, e, "gutterContextMenu", false) - } - - function themeChanged(cm) { - cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + - cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); - clearCaches(cm); - } - - var Init = {toString: function(){return "CodeMirror.Init"}}; - - var defaults = {}; - var optionHandlers = {}; - - function defineOptions(CodeMirror) { - var optionHandlers = CodeMirror.optionHandlers; - - function option(name, deflt, handle, notOnInit) { - CodeMirror.defaults[name] = deflt; - if (handle) { optionHandlers[name] = - notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; } - } - - CodeMirror.defineOption = option; - - // Passed to option handlers when there is no old value. - CodeMirror.Init = Init; - - // These two are, on init, called from the constructor because they - // have to be initialized before the editor can start at all. - option("value", "", function (cm, val) { return cm.setValue(val); }, true); - option("mode", null, function (cm, val) { - cm.doc.modeOption = val; - loadMode(cm); - }, true); - - option("indentUnit", 2, loadMode, true); - option("indentWithTabs", false); - option("smartIndent", true); - option("tabSize", 4, function (cm) { - resetModeState(cm); - clearCaches(cm); - regChange(cm); - }, true); - - option("lineSeparator", null, function (cm, val) { - cm.doc.lineSep = val; - if (!val) { return } - var newBreaks = [], lineNo = cm.doc.first; - cm.doc.iter(function (line) { - for (var pos = 0;;) { - var found = line.text.indexOf(val, pos); - if (found == -1) { break } - pos = found + val.length; - newBreaks.push(Pos(lineNo, found)); - } - lineNo++; - }); - for (var i = newBreaks.length - 1; i >= 0; i--) - { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); } - }); - option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { - cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); - if (old != Init) { cm.refresh(); } - }); - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true); - option("electricChars", true); - option("inputStyle", mobile ? "contenteditable" : "textarea", function () { - throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME - }, true); - option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true); - option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true); - option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true); - option("rtlMoveVisually", !windows); - option("wholeLineUpdateBefore", true); - - option("theme", "default", function (cm) { - themeChanged(cm); - updateGutters(cm); - }, true); - option("keyMap", "default", function (cm, val, old) { - var next = getKeyMap(val); - var prev = old != Init && getKeyMap(old); - if (prev && prev.detach) { prev.detach(cm, next); } - if (next.attach) { next.attach(cm, prev || null); } - }); - option("extraKeys", null); - option("configureMouse", null); - - option("lineWrapping", false, wrappingChanged, true); - option("gutters", [], function (cm, val) { - cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); - updateGutters(cm); - }, true); - option("fixedGutter", true, function (cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; - cm.refresh(); - }, true); - option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true); - option("scrollbarStyle", "native", function (cm) { - initScrollbars(cm); - updateScrollbars(cm); - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); - }, true); - option("lineNumbers", false, function (cm, val) { - cm.display.gutterSpecs = getGutters(cm.options.gutters, val); - updateGutters(cm); - }, true); - option("firstLineNumber", 1, updateGutters, true); - option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true); - option("showCursorWhenSelecting", false, updateSelection, true); - - option("resetSelectionOnContextMenu", true); - option("lineWiseCopyCut", true); - option("pasteLinesPerSelection", true); - option("selectionsMayTouch", false); - - option("readOnly", false, function (cm, val) { - if (val == "nocursor") { - onBlur(cm); - cm.display.input.blur(); - } - cm.display.input.readOnlyChanged(val); - }); - - option("screenReaderLabel", null, function (cm, val) { - val = (val === '') ? null : val; - cm.display.input.screenReaderLabelChanged(val); - }); - - option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true); - option("dragDrop", true, dragDropChanged); - option("allowDropFileTypes", null); - - option("cursorBlinkRate", 530); - option("cursorScrollMargin", 0); - option("cursorHeight", 1, updateSelection, true); - option("singleCursorHeightPerLine", true, updateSelection, true); - option("workTime", 100); - option("workDelay", 100); - option("flattenSpans", true, resetModeState, true); - option("addModeClass", false, resetModeState, true); - option("pollInterval", 100); - option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }); - option("historyEventDelay", 1250); - option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true); - option("maxHighlightLength", 10000, resetModeState, true); - option("moveInputWithCursor", true, function (cm, val) { - if (!val) { cm.display.input.resetPosition(); } - }); - - option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); - option("autofocus", null); - option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true); - option("phrases", null); - } - - function dragDropChanged(cm, value, old) { - var wasOn = old && old != Init; - if (!value != !wasOn) { - var funcs = cm.display.dragFunctions; - var toggle = value ? on : off; - toggle(cm.display.scroller, "dragstart", funcs.start); - toggle(cm.display.scroller, "dragenter", funcs.enter); - toggle(cm.display.scroller, "dragover", funcs.over); - toggle(cm.display.scroller, "dragleave", funcs.leave); - toggle(cm.display.scroller, "drop", funcs.drop); - } - } - - function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap"); - cm.display.sizer.style.minWidth = ""; - cm.display.sizerWidth = null; - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap"); - findMaxLine(cm); - } - estimateLineHeights(cm); - regChange(cm); - clearCaches(cm); - setTimeout(function () { return updateScrollbars(cm); }, 100); - } - - // A CodeMirror instance represents an editor. This is the object - // that user code is usually dealing with. - - function CodeMirror(place, options) { - var this$1 = this; - - if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) } - - this.options = options = options ? copyObj(options) : {}; - // Determine effective options based on given values and defaults. - copyObj(defaults, options, false); - - var doc = options.value; - if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); } - else if (options.mode) { doc.modeOption = options.mode; } - this.doc = doc; - - var input = new CodeMirror.inputStyles[options.inputStyle](this); - var display = this.display = new Display(place, doc, input, options); - display.wrapper.CodeMirror = this; - themeChanged(this); - if (options.lineWrapping) - { this.display.wrapper.className += " CodeMirror-wrap"; } - initScrollbars(this); - - this.state = { - keyMaps: [], // stores maps added by addKeyMap - overlays: [], // highlighting overlays, as added by addOverlay - modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, - delayingBlurEvent: false, - focused: false, - suppressEdits: false, // used to disable editing during key handlers when in readOnly mode - pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll - selectingText: false, - draggingText: false, - highlight: new Delayed(), // stores highlight worker timeout - keySeq: null, // Unfinished key sequence - specialChars: null - }; - - if (options.autofocus && !mobile) { display.input.focus(); } - - // Override magic textarea content restore that IE sometimes does - // on our hidden textarea on reload - if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); } - - registerEventHandlers(this); - ensureGlobalHandlers(); - - startOperation(this); - this.curOp.forceUpdate = true; - attachDoc(this, doc); - - if ((options.autofocus && !mobile) || this.hasFocus()) - { setTimeout(function () { - if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); } - }, 20); } - else - { onBlur(this); } - - for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) - { optionHandlers[opt](this, options[opt], Init); } } - maybeUpdateLineNumberWidth(this); - if (options.finishInit) { options.finishInit(this); } - for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); } - endOperation(this); - // Suppress optimizelegibility in Webkit, since it breaks text - // measuring on line wrapping boundaries. - if (webkit && options.lineWrapping && - getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") - { display.lineDiv.style.textRendering = "auto"; } - } - - // The default configuration options. - CodeMirror.defaults = defaults; - // Functions to run when options are changed. - CodeMirror.optionHandlers = optionHandlers; - - // Attach the necessary event handlers when initializing the editor - function registerEventHandlers(cm) { - var d = cm.display; - on(d.scroller, "mousedown", operation(cm, onMouseDown)); - // Older IE's will not fire a second mousedown for a double click - if (ie && ie_version < 11) - { on(d.scroller, "dblclick", operation(cm, function (e) { - if (signalDOMEvent(cm, e)) { return } - var pos = posFromMouse(cm, e); - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } - e_preventDefault(e); - var word = cm.findWordAt(pos); - extendSelection(cm.doc, word.anchor, word.head); - })); } - else - { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); } - // Some browsers fire contextmenu *after* opening the menu, at - // which point we can't mess with it anymore. Context menu is - // handled in onMouseDown for these browsers. - on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }); - on(d.input.getField(), "contextmenu", function (e) { - if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); } - }); - - // Used to suppress mouse event handling when a touch happens - var touchFinished, prevTouch = {end: 0}; - function finishTouch() { - if (d.activeTouch) { - touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000); - prevTouch = d.activeTouch; - prevTouch.end = +new Date; - } - } - function isMouseLikeTouchEvent(e) { - if (e.touches.length != 1) { return false } - var touch = e.touches[0]; - return touch.radiusX <= 1 && touch.radiusY <= 1 - } - function farAway(touch, other) { - if (other.left == null) { return true } - var dx = other.left - touch.left, dy = other.top - touch.top; - return dx * dx + dy * dy > 20 * 20 - } - on(d.scroller, "touchstart", function (e) { - if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { - d.input.ensurePolled(); - clearTimeout(touchFinished); - var now = +new Date; - d.activeTouch = {start: now, moved: false, - prev: now - prevTouch.end <= 300 ? prevTouch : null}; - if (e.touches.length == 1) { - d.activeTouch.left = e.touches[0].pageX; - d.activeTouch.top = e.touches[0].pageY; - } - } - }); - on(d.scroller, "touchmove", function () { - if (d.activeTouch) { d.activeTouch.moved = true; } - }); - on(d.scroller, "touchend", function (e) { - var touch = d.activeTouch; - if (touch && !eventInWidget(d, e) && touch.left != null && - !touch.moved && new Date - touch.start < 300) { - var pos = cm.coordsChar(d.activeTouch, "page"), range; - if (!touch.prev || farAway(touch, touch.prev)) // Single tap - { range = new Range(pos, pos); } - else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap - { range = cm.findWordAt(pos); } - else // Triple tap - { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); } - cm.setSelection(range.anchor, range.head); - cm.focus(); - e_preventDefault(e); - } - finishTouch(); - }); - on(d.scroller, "touchcancel", finishTouch); - - // Sync scrolling between fake scrollbars and real scrollable - // area, ensure viewport is updated when scrolling. - on(d.scroller, "scroll", function () { - if (d.scroller.clientHeight) { - updateScrollTop(cm, d.scroller.scrollTop); - setScrollLeft(cm, d.scroller.scrollLeft, true); - signal(cm, "scroll", cm); - } - }); - - // Listen to wheel events in order to try and update the viewport on time. - on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }); - on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }); - - // Prevent wrapper from ever scrolling - on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); - - d.dragFunctions = { - enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }}, - over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, - start: function (e) { return onDragStart(cm, e); }, - drop: operation(cm, onDrop), - leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} - }; - - var inp = d.input.getField(); - on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }); - on(inp, "keydown", operation(cm, onKeyDown)); - on(inp, "keypress", operation(cm, onKeyPress)); - on(inp, "focus", function (e) { return onFocus(cm, e); }); - on(inp, "blur", function (e) { return onBlur(cm, e); }); - } - - var initHooks = []; - CodeMirror.defineInitHook = function (f) { return initHooks.push(f); }; - - // Indent the given line. The how parameter can be "smart", - // "add"/null, "subtract", or "prev". When aggressive is false - // (typically set to true for forced single-line indents), empty - // lines are not indented, and places where the mode returns Pass - // are left alone. - function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, state; - if (how == null) { how = "add"; } - if (how == "smart") { - // Fall back to "prev" when the mode doesn't have an indentation - // method. - if (!doc.mode.indent) { how = "prev"; } - else { state = getContextBefore(cm, n).state; } - } - - var tabSize = cm.options.tabSize; - var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); - if (line.stateAfter) { line.stateAfter = null; } - var curSpaceString = line.text.match(/^\s*/)[0], indentation; - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0; - how = "not"; - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); - if (indentation == Pass || indentation > 150) { - if (!aggressive) { return } - how = "prev"; - } - } - if (how == "prev") { - if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); } - else { indentation = 0; } - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit; - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit; - } else if (typeof how == "number") { - indentation = curSpace + how; - } - indentation = Math.max(0, indentation); - - var indentString = "", pos = 0; - if (cm.options.indentWithTabs) - { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} } - if (pos < indentation) { indentString += spaceStr(indentation - pos); } - - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); - line.stateAfter = null; - return true - } else { - // Ensure that, if the cursor was in the whitespace at the start - // of the line, it is moved to the end of that space. - for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { - var range = doc.sel.ranges[i$1]; - if (range.head.line == n && range.head.ch < curSpaceString.length) { - var pos$1 = Pos(n, curSpaceString.length); - replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); - break - } - } - } - } - - // This will be set to a {lineWise: bool, text: [string]} object, so - // that, when pasting, we know what kind of selections the copied - // text was made out of. - var lastCopied = null; - - function setLastCopied(newLastCopied) { - lastCopied = newLastCopied; - } - - function applyTextInput(cm, inserted, deleted, sel, origin) { - var doc = cm.doc; - cm.display.shift = false; - if (!sel) { sel = doc.sel; } - - var recent = +new Date - 200; - var paste = origin == "paste" || cm.state.pasteIncoming > recent; - var textLines = splitLinesAuto(inserted), multiPaste = null; - // When pasting N lines into N selections, insert one line per selection - if (paste && sel.ranges.length > 1) { - if (lastCopied && lastCopied.text.join("\n") == inserted) { - if (sel.ranges.length % lastCopied.text.length == 0) { - multiPaste = []; - for (var i = 0; i < lastCopied.text.length; i++) - { multiPaste.push(doc.splitLines(lastCopied.text[i])); } - } - } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { - multiPaste = map(textLines, function (l) { return [l]; }); - } - } - - var updateInput = cm.curOp.updateInput; - // Normal behavior is to insert the new text into every selection - for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { - var range = sel.ranges[i$1]; - var from = range.from(), to = range.to(); - if (range.empty()) { - if (deleted && deleted > 0) // Handle deletion - { from = Pos(from.line, from.ch - deleted); } - else if (cm.state.overwrite && !paste) // Handle overwrite - { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } - else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) - { from = to = Pos(from.line, 0); } - } - var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, - origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")}; - makeChange(cm.doc, changeEvent); - signalLater(cm, "inputRead", cm, changeEvent); - } - if (inserted && !paste) - { triggerElectric(cm, inserted); } - - ensureCursorVisible(cm); - if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; } - cm.curOp.typing = true; - cm.state.pasteIncoming = cm.state.cutIncoming = -1; - } - - function handlePaste(e, cm) { - var pasted = e.clipboardData && e.clipboardData.getData("Text"); - if (pasted) { - e.preventDefault(); - if (!cm.isReadOnly() && !cm.options.disableInput) - { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); } - return true - } - } - - function triggerElectric(cm, inserted) { - // When an 'electric' character is inserted, immediately trigger a reindent - if (!cm.options.electricChars || !cm.options.smartIndent) { return } - var sel = cm.doc.sel; - - for (var i = sel.ranges.length - 1; i >= 0; i--) { - var range = sel.ranges[i]; - if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue } - var mode = cm.getModeAt(range.head); - var indented = false; - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) - { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indented = indentLine(cm, range.head.line, "smart"); - break - } } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) - { indented = indentLine(cm, range.head.line, "smart"); } - } - if (indented) { signalLater(cm, "electricInput", cm, range.head.line); } - } - } - - function copyableRanges(cm) { - var text = [], ranges = []; - for (var i = 0; i < cm.doc.sel.ranges.length; i++) { - var line = cm.doc.sel.ranges[i].head.line; - var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; - ranges.push(lineRange); - text.push(cm.getRange(lineRange.anchor, lineRange.head)); - } - return {text: text, ranges: ranges} - } - - function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { - field.setAttribute("autocorrect", autocorrect ? "" : "off"); - field.setAttribute("autocapitalize", autocapitalize ? "" : "off"); - field.setAttribute("spellcheck", !!spellcheck); - } - - function hiddenTextarea() { - var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"); - var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); - // The textarea is kept positioned near the cursor to prevent the - // fact that it'll be scrolled into view on input from scrolling - // our fake cursor out of view. On webkit, when wrap=off, paste is - // very slow. So make the area wide instead. - if (webkit) { te.style.width = "1000px"; } - else { te.setAttribute("wrap", "off"); } - // If border: 0; -- iOS fails to open keyboard (issue #1287) - if (ios) { te.style.border = "1px solid black"; } - disableBrowserMagic(te); - return div - } - - // The publicly visible API. Note that methodOp(f) means - // 'wrap f in an operation, performed on its `this` parameter'. - - // This is not the complete set of editor methods. Most of the - // methods defined on the Doc type are also injected into - // CodeMirror.prototype, for backwards compatibility and - // convenience. - - function addEditorMethods(CodeMirror) { - var optionHandlers = CodeMirror.optionHandlers; - - var helpers = CodeMirror.helpers = {}; - - CodeMirror.prototype = { - constructor: CodeMirror, - focus: function(){window.focus(); this.display.input.focus();}, - - setOption: function(option, value) { - var options = this.options, old = options[option]; - if (options[option] == value && option != "mode") { return } - options[option] = value; - if (optionHandlers.hasOwnProperty(option)) - { operation(this, optionHandlers[option])(this, value, old); } - signal(this, "optionChange", this, option); - }, - - getOption: function(option) {return this.options[option]}, - getDoc: function() {return this.doc}, - - addKeyMap: function(map, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); - }, - removeKeyMap: function(map) { - var maps = this.state.keyMaps; - for (var i = 0; i < maps.length; ++i) - { if (maps[i] == map || maps[i].name == map) { - maps.splice(i, 1); - return true - } } - }, - - addOverlay: methodOp(function(spec, options) { - var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); - if (mode.startState) { throw new Error("Overlays may not be stateful.") } - insertSorted(this.state.overlays, - {mode: mode, modeSpec: spec, opaque: options && options.opaque, - priority: (options && options.priority) || 0}, - function (overlay) { return overlay.priority; }); - this.state.modeGen++; - regChange(this); - }), - removeOverlay: methodOp(function(spec) { - var overlays = this.state.overlays; - for (var i = 0; i < overlays.length; ++i) { - var cur = overlays[i].modeSpec; - if (cur == spec || typeof spec == "string" && cur.name == spec) { - overlays.splice(i, 1); - this.state.modeGen++; - regChange(this); - return - } - } - }), - - indentLine: methodOp(function(n, dir, aggressive) { - if (typeof dir != "string" && typeof dir != "number") { - if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; } - else { dir = dir ? "add" : "subtract"; } - } - if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); } - }), - indentSelection: methodOp(function(how) { - var ranges = this.doc.sel.ranges, end = -1; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (!range.empty()) { - var from = range.from(), to = range.to(); - var start = Math.max(end, from.line); - end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; - for (var j = start; j < end; ++j) - { indentLine(this, j, how); } - var newRanges = this.doc.sel.ranges; - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) - { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } - } else if (range.head.line > end) { - indentLine(this, range.head.line, how, true); - end = range.head.line; - if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); } - } - } - }), - - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function(pos, precise) { - return takeToken(this, pos, precise) - }, - - getLineTokens: function(line, precise) { - return takeToken(this, Pos(line), precise, true) - }, - - getTokenTypeAt: function(pos) { - pos = clipPos(this.doc, pos); - var styles = getLineStyles(this, getLine(this.doc, pos.line)); - var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; - var type; - if (ch == 0) { type = styles[2]; } - else { for (;;) { - var mid = (before + after) >> 1; - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; } - else if (styles[mid * 2 + 1] < ch) { before = mid + 1; } - else { type = styles[mid * 2 + 2]; break } - } } - var cut = type ? type.indexOf("overlay ") : -1; - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) - }, - - getModeAt: function(pos) { - var mode = this.doc.mode; - if (!mode.innerMode) { return mode } - return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode - }, - - getHelper: function(pos, type) { - return this.getHelpers(pos, type)[0] - }, - - getHelpers: function(pos, type) { - var found = []; - if (!helpers.hasOwnProperty(type)) { return found } - var help = helpers[type], mode = this.getModeAt(pos); - if (typeof mode[type] == "string") { - if (help[mode[type]]) { found.push(help[mode[type]]); } - } else if (mode[type]) { - for (var i = 0; i < mode[type].length; i++) { - var val = help[mode[type][i]]; - if (val) { found.push(val); } - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]); - } else if (help[mode.name]) { - found.push(help[mode.name]); - } - for (var i$1 = 0; i$1 < help._global.length; i$1++) { - var cur = help._global[i$1]; - if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) - { found.push(cur.val); } - } - return found - }, - - getStateAfter: function(line, precise) { - var doc = this.doc; - line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); - return getContextBefore(this, line + 1, precise).state - }, - - cursorCoords: function(start, mode) { - var pos, range = this.doc.sel.primary(); - if (start == null) { pos = range.head; } - else if (typeof start == "object") { pos = clipPos(this.doc, start); } - else { pos = start ? range.from() : range.to(); } - return cursorCoords(this, pos, mode || "page") - }, - - charCoords: function(pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page") - }, - - coordsChar: function(coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page"); - return coordsChar(this, coords.left, coords.top) - }, - - lineAtHeight: function(height, mode) { - height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; - return lineAtHeight(this.doc, height + this.display.viewOffset) - }, - heightAtLine: function(line, mode, includeWidgets) { - var end = false, lineObj; - if (typeof line == "number") { - var last = this.doc.first + this.doc.size - 1; - if (line < this.doc.first) { line = this.doc.first; } - else if (line > last) { line = last; end = true; } - lineObj = getLine(this.doc, line); - } else { - lineObj = line; - } - return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + - (end ? this.doc.height - heightAtLine(lineObj) : 0) - }, - - defaultTextHeight: function() { return textHeight(this.display) }, - defaultCharWidth: function() { return charWidth(this.display) }, - - getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, - - addWidget: function(pos, node, scroll, vert, horiz) { - var display = this.display; - pos = cursorCoords(this, clipPos(this.doc, pos)); - var top = pos.bottom, left = pos.left; - node.style.position = "absolute"; - node.setAttribute("cm-ignore-events", "true"); - this.display.input.setUneditable(node); - display.sizer.appendChild(node); - if (vert == "over") { - top = pos.top; - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); - // Default to positioning above (if specified and possible); otherwise default to positioning below - if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) - { top = pos.top - node.offsetHeight; } - else if (pos.bottom + node.offsetHeight <= vspace) - { top = pos.bottom; } - if (left + node.offsetWidth > hspace) - { left = hspace - node.offsetWidth; } - } - node.style.top = top + "px"; - node.style.left = node.style.right = ""; - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth; - node.style.right = "0px"; - } else { - if (horiz == "left") { left = 0; } - else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; } - node.style.left = left + "px"; - } - if (scroll) - { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); } - }, - - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - triggerOnMouseDown: methodOp(onMouseDown), - - execCommand: function(cmd) { - if (commands.hasOwnProperty(cmd)) - { return commands[cmd].call(null, this) } - }, - - triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), - - findPosH: function(from, amount, unit, visually) { - var dir = 1; - if (amount < 0) { dir = -1; amount = -amount; } - var cur = clipPos(this.doc, from); - for (var i = 0; i < amount; ++i) { - cur = findPosH(this.doc, cur, dir, unit, visually); - if (cur.hitSide) { break } - } - return cur - }, - - moveH: methodOp(function(dir, unit) { - var this$1 = this; - - this.extendSelectionsBy(function (range) { - if (this$1.display.shift || this$1.doc.extend || range.empty()) - { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) } - else - { return dir < 0 ? range.from() : range.to() } - }, sel_move); - }), - - deleteH: methodOp(function(dir, unit) { - var sel = this.doc.sel, doc = this.doc; - if (sel.somethingSelected()) - { doc.replaceSelection("", null, "+delete"); } - else - { deleteNearSelection(this, function (range) { - var other = findPosH(doc, range.head, dir, unit, false); - return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other} - }); } - }), - - findPosV: function(from, amount, unit, goalColumn) { - var dir = 1, x = goalColumn; - if (amount < 0) { dir = -1; amount = -amount; } - var cur = clipPos(this.doc, from); - for (var i = 0; i < amount; ++i) { - var coords = cursorCoords(this, cur, "div"); - if (x == null) { x = coords.left; } - else { coords.left = x; } - cur = findPosV(this, coords, dir, unit); - if (cur.hitSide) { break } - } - return cur - }, - - moveV: methodOp(function(dir, unit) { - var this$1 = this; - - var doc = this.doc, goals = []; - var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); - doc.extendSelectionsBy(function (range) { - if (collapse) - { return dir < 0 ? range.from() : range.to() } - var headPos = cursorCoords(this$1, range.head, "div"); - if (range.goalColumn != null) { headPos.left = range.goalColumn; } - goals.push(headPos.left); - var pos = findPosV(this$1, headPos, dir, unit); - if (unit == "page" && range == doc.sel.primary()) - { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); } - return pos - }, sel_move); - if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) - { doc.sel.ranges[i].goalColumn = goals[i]; } } - }), - - // Find the word at the given position (as returned by coordsChar). - findWordAt: function(pos) { - var doc = this.doc, line = getLine(doc, pos.line).text; - var start = pos.ch, end = pos.ch; - if (line) { - var helper = this.getHelper(pos, "wordChars"); - if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; } - var startChar = line.charAt(start); - var check = isWordChar(startChar, helper) - ? function (ch) { return isWordChar(ch, helper); } - : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } - : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }; - while (start > 0 && check(line.charAt(start - 1))) { --start; } - while (end < line.length && check(line.charAt(end))) { ++end; } - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)) - }, - - toggleOverwrite: function(value) { - if (value != null && value == this.state.overwrite) { return } - if (this.state.overwrite = !this.state.overwrite) - { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); } - else - { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); } - - signal(this, "overwriteToggle", this, this.state.overwrite); - }, - hasFocus: function() { return this.display.input.getField() == activeElt() }, - isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, - - scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }), - getScrollInfo: function() { - var scroller = this.display.scroller; - return {left: scroller.scrollLeft, top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), clientWidth: displayWidth(this)} - }, - - scrollIntoView: methodOp(function(range, margin) { - if (range == null) { - range = {from: this.doc.sel.primary().head, to: null}; - if (margin == null) { margin = this.options.cursorScrollMargin; } - } else if (typeof range == "number") { - range = {from: Pos(range, 0), to: null}; - } else if (range.from == null) { - range = {from: range, to: null}; - } - if (!range.to) { range.to = range.from; } - range.margin = margin || 0; - - if (range.from.line != null) { - scrollToRange(this, range); - } else { - scrollToCoordsRange(this, range.from, range.to, range.margin); - } - }), - - setSize: methodOp(function(width, height) { - var this$1 = this; - - var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }; - if (width != null) { this.display.wrapper.style.width = interpret(width); } - if (height != null) { this.display.wrapper.style.height = interpret(height); } - if (this.options.lineWrapping) { clearLineMeasurementCache(this); } - var lineNo = this.display.viewFrom; - this.doc.iter(lineNo, this.display.viewTo, function (line) { - if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) - { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } } - ++lineNo; - }); - this.curOp.forceUpdate = true; - signal(this, "refresh", this); - }), - - operation: function(f){return runInOp(this, f)}, - startOperation: function(){return startOperation(this)}, - endOperation: function(){return endOperation(this)}, - - refresh: methodOp(function() { - var oldHeight = this.display.cachedTextHeight; - regChange(this); - this.curOp.forceUpdate = true; - clearCaches(this); - scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); - updateGutterSpace(this.display); - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) - { estimateLineHeights(this); } - signal(this, "refresh", this); - }), - - swapDoc: methodOp(function(doc) { - var old = this.doc; - old.cm = null; - // Cancel the current text selection if any (#5821) - if (this.state.selectingText) { this.state.selectingText(); } - attachDoc(this, doc); - clearCaches(this); - this.display.input.reset(); - scrollToCoords(this, doc.scrollLeft, doc.scrollTop); - this.curOp.forceScroll = true; - signalLater(this, "swapDoc", this, old); - return old - }), - - phrase: function(phraseText) { - var phrases = this.options.phrases; - return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText - }, - - getInputField: function(){return this.display.input.getField()}, - getWrapperElement: function(){return this.display.wrapper}, - getScrollerElement: function(){return this.display.scroller}, - getGutterElement: function(){return this.display.gutters} - }; - eventMixin(CodeMirror); - - CodeMirror.registerHelper = function(type, name, value) { - if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; } - helpers[type][name] = value; - }; - CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { - CodeMirror.registerHelper(type, name, value); - helpers[type]._global.push({pred: predicate, val: value}); - }; - } - - // Used for horizontal relative motion. Dir is -1 or 1 (left or - // right), unit can be "codepoint", "char", "column" (like char, but - // doesn't cross line boundaries), "word" (across next word), or - // "group" (to the start of next group of word or - // non-word-non-whitespace chars). The visually param controls - // whether, in right-to-left text, direction 1 means to move towards - // the next index in the string, or towards the character to the right - // of the current position. The resulting position will have a - // hitSide=true property if it reached the end of the document. - function findPosH(doc, pos, dir, unit, visually) { - var oldPos = pos; - var origDir = dir; - var lineObj = getLine(doc, pos.line); - var lineDir = visually && doc.direction == "rtl" ? -dir : dir; - function findNextLine() { - var l = pos.line + lineDir; - if (l < doc.first || l >= doc.first + doc.size) { return false } - pos = new Pos(l, pos.ch, pos.sticky); - return lineObj = getLine(doc, l) - } - function moveOnce(boundToLine) { - var next; - if (unit == "codepoint") { - var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); - if (isNaN(ch)) { - next = null; - } else { - var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF; - next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); - } - } else if (visually) { - next = moveVisually(doc.cm, lineObj, pos, dir); - } else { - next = moveLogically(lineObj, pos, dir); - } - if (next == null) { - if (!boundToLine && findNextLine()) - { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); } - else - { return false } - } else { - pos = next; - } - return true - } - - if (unit == "char" || unit == "codepoint") { - moveOnce(); - } else if (unit == "column") { - moveOnce(true); - } else if (unit == "word" || unit == "group") { - var sawType = null, group = unit == "group"; - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) { break } - var cur = lineObj.text.charAt(pos.ch) || "\n"; - var type = isWordChar(cur, helper) ? "w" - : group && cur == "\n" ? "n" - : !group || /\s/.test(cur) ? null - : "p"; - if (group && !first && !type) { type = "s"; } - if (sawType && sawType != type) { - if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";} - break - } - - if (type) { sawType = type; } - if (dir > 0 && !moveOnce(!first)) { break } - } - } - var result = skipAtomic(doc, pos, oldPos, origDir, true); - if (equalCursorPos(oldPos, result)) { result.hitSide = true; } - return result - } - - // For relative vertical movement. Dir may be -1 or 1. Unit can be - // "page" or "line". The resulting position will have a hitSide=true - // property if it reached the end of the document. - function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, x = pos.left, y; - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); - var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); - y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; - - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3; - } - var target; - for (;;) { - target = coordsChar(cm, x, y); - if (!target.outside) { break } - if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } - y += dir * 5; - } - return target - } - - // CONTENTEDITABLE INPUT STYLE - - var ContentEditableInput = function(cm) { - this.cm = cm; - this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; - this.polling = new Delayed(); - this.composing = null; - this.gracePeriod = false; - this.readDOMTimeout = null; - }; - - ContentEditableInput.prototype.init = function (display) { - var this$1 = this; - - var input = this, cm = input.cm; - var div = input.div = display.lineDiv; - div.contentEditable = true; - disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); - - function belongsToInput(e) { - for (var t = e.target; t; t = t.parentNode) { - if (t == div) { return true } - if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { break } - } - return false - } - - on(div, "paste", function (e) { - if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } - // IE doesn't fire input events, so we schedule a read for the pasted content in this way - if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); } - }); - - on(div, "compositionstart", function (e) { - this$1.composing = {data: e.data, done: false}; - }); - on(div, "compositionupdate", function (e) { - if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; } - }); - on(div, "compositionend", function (e) { - if (this$1.composing) { - if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); } - this$1.composing.done = true; - } - }); - - on(div, "touchstart", function () { return input.forceCompositionEnd(); }); - - on(div, "input", function () { - if (!this$1.composing) { this$1.readFromDOMSoon(); } - }); - - function onCopyCut(e) { - if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return } - if (cm.somethingSelected()) { - setLastCopied({lineWise: false, text: cm.getSelections()}); - if (e.type == "cut") { cm.replaceSelection("", null, "cut"); } - } else if (!cm.options.lineWiseCopyCut) { - return - } else { - var ranges = copyableRanges(cm); - setLastCopied({lineWise: true, text: ranges.text}); - if (e.type == "cut") { - cm.operation(function () { - cm.setSelections(ranges.ranges, 0, sel_dontScroll); - cm.replaceSelection("", null, "cut"); - }); - } - } - if (e.clipboardData) { - e.clipboardData.clearData(); - var content = lastCopied.text.join("\n"); - // iOS exposes the clipboard API, but seems to discard content inserted into it - e.clipboardData.setData("Text", content); - if (e.clipboardData.getData("Text") == content) { - e.preventDefault(); - return - } - } - // Old-fashioned briefly-focus-a-textarea hack - var kludge = hiddenTextarea(), te = kludge.firstChild; - cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); - te.value = lastCopied.text.join("\n"); - var hadFocus = activeElt(); - selectInput(te); - setTimeout(function () { - cm.display.lineSpace.removeChild(kludge); - hadFocus.focus(); - if (hadFocus == div) { input.showPrimarySelection(); } - }, 50); - } - on(div, "copy", onCopyCut); - on(div, "cut", onCopyCut); - }; - - ContentEditableInput.prototype.screenReaderLabelChanged = function (label) { - // Label for screenreaders, accessibility - if(label) { - this.div.setAttribute('aria-label', label); - } else { - this.div.removeAttribute('aria-label'); - } - }; - - ContentEditableInput.prototype.prepareSelection = function () { - var result = prepareSelection(this.cm, false); - result.focus = activeElt() == this.div; - return result - }; - - ContentEditableInput.prototype.showSelection = function (info, takeFocus) { - if (!info || !this.cm.display.view.length) { return } - if (info.focus || takeFocus) { this.showPrimarySelection(); } - this.showMultipleSelections(info); - }; - - ContentEditableInput.prototype.getSelection = function () { - return this.cm.display.wrapper.ownerDocument.getSelection() - }; - - ContentEditableInput.prototype.showPrimarySelection = function () { - var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary(); - var from = prim.from(), to = prim.to(); - - if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { - sel.removeAllRanges(); - return - } - - var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); - if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && - cmp(minPos(curAnchor, curFocus), from) == 0 && - cmp(maxPos(curAnchor, curFocus), to) == 0) - { return } - - var view = cm.display.view; - var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || - {node: view[0].measure.map[2], offset: 0}; - var end = to.line < cm.display.viewTo && posToDOM(cm, to); - if (!end) { - var measure = view[view.length - 1].measure; - var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; - end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; - } - - if (!start || !end) { - sel.removeAllRanges(); - return - } - - var old = sel.rangeCount && sel.getRangeAt(0), rng; - try { rng = range(start.node, start.offset, end.offset, end.node); } - catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible - if (rng) { - if (!gecko && cm.state.focused) { - sel.collapse(start.node, start.offset); - if (!rng.collapsed) { - sel.removeAllRanges(); - sel.addRange(rng); - } - } else { - sel.removeAllRanges(); - sel.addRange(rng); - } - if (old && sel.anchorNode == null) { sel.addRange(old); } - else if (gecko) { this.startGracePeriod(); } - } - this.rememberSelection(); - }; - - ContentEditableInput.prototype.startGracePeriod = function () { - var this$1 = this; - - clearTimeout(this.gracePeriod); - this.gracePeriod = setTimeout(function () { - this$1.gracePeriod = false; - if (this$1.selectionChanged()) - { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); } - }, 20); - }; - - ContentEditableInput.prototype.showMultipleSelections = function (info) { - removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); - removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); - }; - - ContentEditableInput.prototype.rememberSelection = function () { - var sel = this.getSelection(); - this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; - this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; - }; - - ContentEditableInput.prototype.selectionInEditor = function () { - var sel = this.getSelection(); - if (!sel.rangeCount) { return false } - var node = sel.getRangeAt(0).commonAncestorContainer; - return contains(this.div, node) - }; - - ContentEditableInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor") { - if (!this.selectionInEditor() || activeElt() != this.div) - { this.showSelection(this.prepareSelection(), true); } - this.div.focus(); - } - }; - ContentEditableInput.prototype.blur = function () { this.div.blur(); }; - ContentEditableInput.prototype.getField = function () { return this.div }; - - ContentEditableInput.prototype.supportsTouch = function () { return true }; - - ContentEditableInput.prototype.receivedFocus = function () { - var this$1 = this; - - var input = this; - if (this.selectionInEditor()) - { setTimeout(function () { return this$1.pollSelection(); }, 20); } - else - { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); } - - function poll() { - if (input.cm.state.focused) { - input.pollSelection(); - input.polling.set(input.cm.options.pollInterval, poll); - } - } - this.polling.set(this.cm.options.pollInterval, poll); - }; - - ContentEditableInput.prototype.selectionChanged = function () { - var sel = this.getSelection(); - return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || - sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset - }; - - ContentEditableInput.prototype.pollSelection = function () { - if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } - var sel = this.getSelection(), cm = this.cm; - // On Android Chrome (version 56, at least), backspacing into an - // uneditable block element will put the cursor in that element, - // and then, because it's not editable, hide the virtual keyboard. - // Because Android doesn't allow us to actually detect backspace - // presses in a sane way, this code checks for when that happens - // and simulates a backspace press in this case. - if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { - this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}); - this.blur(); - this.focus(); - return - } - if (this.composing) { return } - this.rememberSelection(); - var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var head = domToPos(cm, sel.focusNode, sel.focusOffset); - if (anchor && head) { runInOp(cm, function () { - setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); - if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; } - }); } - }; - - ContentEditableInput.prototype.pollContent = function () { - if (this.readDOMTimeout != null) { - clearTimeout(this.readDOMTimeout); - this.readDOMTimeout = null; - } - - var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); - var from = sel.from(), to = sel.to(); - if (from.ch == 0 && from.line > cm.firstLine()) - { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); } - if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) - { to = Pos(to.line + 1, 0); } - if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } - - var fromIndex, fromLine, fromNode; - if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { - fromLine = lineNo(display.view[0].line); - fromNode = display.view[0].node; - } else { - fromLine = lineNo(display.view[fromIndex].line); - fromNode = display.view[fromIndex - 1].node.nextSibling; - } - var toIndex = findViewIndex(cm, to.line); - var toLine, toNode; - if (toIndex == display.view.length - 1) { - toLine = display.viewTo - 1; - toNode = display.lineDiv.lastChild; - } else { - toLine = lineNo(display.view[toIndex + 1].line) - 1; - toNode = display.view[toIndex + 1].node.previousSibling; - } - - if (!fromNode) { return false } - var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); - var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); - while (newText.length > 1 && oldText.length > 1) { - if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } - else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } - else { break } - } - - var cutFront = 0, cutEnd = 0; - var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); - while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) - { ++cutFront; } - var newBot = lst(newText), oldBot = lst(oldText); - var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), - oldBot.length - (oldText.length == 1 ? cutFront : 0)); - while (cutEnd < maxCutEnd && - newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) - { ++cutEnd; } - // Try to move start of change to start of selection if ambiguous - if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { - while (cutFront && cutFront > from.ch && - newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { - cutFront--; - cutEnd++; - } - } - - newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); - newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); - - var chFrom = Pos(fromLine, cutFront); - var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); - if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { - replaceRange(cm.doc, newText, chFrom, chTo, "+input"); - return true - } - }; - - ContentEditableInput.prototype.ensurePolled = function () { - this.forceCompositionEnd(); - }; - ContentEditableInput.prototype.reset = function () { - this.forceCompositionEnd(); - }; - ContentEditableInput.prototype.forceCompositionEnd = function () { - if (!this.composing) { return } - clearTimeout(this.readDOMTimeout); - this.composing = null; - this.updateFromDOM(); - this.div.blur(); - this.div.focus(); - }; - ContentEditableInput.prototype.readFromDOMSoon = function () { - var this$1 = this; - - if (this.readDOMTimeout != null) { return } - this.readDOMTimeout = setTimeout(function () { - this$1.readDOMTimeout = null; - if (this$1.composing) { - if (this$1.composing.done) { this$1.composing = null; } - else { return } - } - this$1.updateFromDOM(); - }, 80); - }; - - ContentEditableInput.prototype.updateFromDOM = function () { - var this$1 = this; - - if (this.cm.isReadOnly() || !this.pollContent()) - { runInOp(this.cm, function () { return regChange(this$1.cm); }); } - }; - - ContentEditableInput.prototype.setUneditable = function (node) { - node.contentEditable = "false"; - }; - - ContentEditableInput.prototype.onKeyPress = function (e) { - if (e.charCode == 0 || this.composing) { return } - e.preventDefault(); - if (!this.cm.isReadOnly()) - { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); } - }; - - ContentEditableInput.prototype.readOnlyChanged = function (val) { - this.div.contentEditable = String(val != "nocursor"); - }; - - ContentEditableInput.prototype.onContextMenu = function () {}; - ContentEditableInput.prototype.resetPosition = function () {}; - - ContentEditableInput.prototype.needsContentAttribute = true; - - function posToDOM(cm, pos) { - var view = findViewForLine(cm, pos.line); - if (!view || view.hidden) { return null } - var line = getLine(cm.doc, pos.line); - var info = mapFromLineView(view, line, pos.line); - - var order = getOrder(line, cm.doc.direction), side = "left"; - if (order) { - var partPos = getBidiPartAt(order, pos.ch); - side = partPos % 2 ? "right" : "left"; - } - var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); - result.offset = result.collapse == "right" ? result.end : result.start; - return result - } - - function isInGutter(node) { - for (var scan = node; scan; scan = scan.parentNode) - { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } - return false - } - - function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } - - function domTextBetween(cm, from, to, fromLine, toLine) { - var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false; - function recognizeMarker(id) { return function (marker) { return marker.id == id; } } - function close() { - if (closing) { - text += lineSep; - if (extraLinebreak) { text += lineSep; } - closing = extraLinebreak = false; - } - } - function addText(str) { - if (str) { - close(); - text += str; - } - } - function walk(node) { - if (node.nodeType == 1) { - var cmText = node.getAttribute("cm-text"); - if (cmText) { - addText(cmText); - return - } - var markerID = node.getAttribute("cm-marker"), range; - if (markerID) { - var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); - if (found.length && (range = found[0].find(0))) - { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); } - return - } - if (node.getAttribute("contenteditable") == "false") { return } - var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); - if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return } - - if (isBlock) { close(); } - for (var i = 0; i < node.childNodes.length; i++) - { walk(node.childNodes[i]); } - - if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; } - if (isBlock) { closing = true; } - } else if (node.nodeType == 3) { - addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); - } - } - for (;;) { - walk(from); - if (from == to) { break } - from = from.nextSibling; - extraLinebreak = false; - } - return text - } - - function domToPos(cm, node, offset) { - var lineNode; - if (node == cm.display.lineDiv) { - lineNode = cm.display.lineDiv.childNodes[offset]; - if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } - node = null; offset = 0; - } else { - for (lineNode = node;; lineNode = lineNode.parentNode) { - if (!lineNode || lineNode == cm.display.lineDiv) { return null } - if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } - } - } - for (var i = 0; i < cm.display.view.length; i++) { - var lineView = cm.display.view[i]; - if (lineView.node == lineNode) - { return locateNodeInLineView(lineView, node, offset) } - } - } - - function locateNodeInLineView(lineView, node, offset) { - var wrapper = lineView.text.firstChild, bad = false; - if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } - if (node == wrapper) { - bad = true; - node = wrapper.childNodes[offset]; - offset = 0; - if (!node) { - var line = lineView.rest ? lst(lineView.rest) : lineView.line; - return badPos(Pos(lineNo(line), line.text.length), bad) - } - } - - var textNode = node.nodeType == 3 ? node : null, topNode = node; - if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { - textNode = node.firstChild; - if (offset) { offset = textNode.nodeValue.length; } - } - while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; } - var measure = lineView.measure, maps = measure.maps; - - function find(textNode, topNode, offset) { - for (var i = -1; i < (maps ? maps.length : 0); i++) { - var map = i < 0 ? measure.map : maps[i]; - for (var j = 0; j < map.length; j += 3) { - var curNode = map[j + 2]; - if (curNode == textNode || curNode == topNode) { - var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); - var ch = map[j] + offset; - if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; } - return Pos(line, ch) - } - } - } - } - var found = find(textNode, topNode, offset); - if (found) { return badPos(found, bad) } - - // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems - for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { - found = find(after, after.firstChild, 0); - if (found) - { return badPos(Pos(found.line, found.ch - dist), bad) } - else - { dist += after.textContent.length; } - } - for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { - found = find(before, before.firstChild, -1); - if (found) - { return badPos(Pos(found.line, found.ch + dist$1), bad) } - else - { dist$1 += before.textContent.length; } - } - } - - // TEXTAREA INPUT STYLE - - var TextareaInput = function(cm) { - this.cm = cm; - // See input.poll and input.reset - this.prevInput = ""; - - // Flag that indicates whether we expect input to appear real soon - // now (after some event like 'keypress' or 'input') and are - // polling intensively. - this.pollingFast = false; - // Self-resetting timeout for the poller - this.polling = new Delayed(); - // Used to work around IE issue with selection being forgotten when focus moves away from textarea - this.hasSelection = false; - this.composing = null; - }; - - TextareaInput.prototype.init = function (display) { - var this$1 = this; - - var input = this, cm = this.cm; - this.createField(display); - var te = this.textarea; - - display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); - - // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) - if (ios) { te.style.width = "0px"; } - - on(te, "input", function () { - if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; } - input.poll(); - }); - - on(te, "paste", function (e) { - if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } - - cm.state.pasteIncoming = +new Date; - input.fastPoll(); - }); - - function prepareCopyCut(e) { - if (signalDOMEvent(cm, e)) { return } - if (cm.somethingSelected()) { - setLastCopied({lineWise: false, text: cm.getSelections()}); - } else if (!cm.options.lineWiseCopyCut) { - return - } else { - var ranges = copyableRanges(cm); - setLastCopied({lineWise: true, text: ranges.text}); - if (e.type == "cut") { - cm.setSelections(ranges.ranges, null, sel_dontScroll); - } else { - input.prevInput = ""; - te.value = ranges.text.join("\n"); - selectInput(te); - } - } - if (e.type == "cut") { cm.state.cutIncoming = +new Date; } - } - on(te, "cut", prepareCopyCut); - on(te, "copy", prepareCopyCut); - - on(display.scroller, "paste", function (e) { - if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } - if (!te.dispatchEvent) { - cm.state.pasteIncoming = +new Date; - input.focus(); - return - } - - // Pass the `paste` event to the textarea so it's handled by its event listener. - var event = new Event("paste"); - event.clipboardData = e.clipboardData; - te.dispatchEvent(event); - }); - - // Prevent normal selection in the editor (we handle our own) - on(display.lineSpace, "selectstart", function (e) { - if (!eventInWidget(display, e)) { e_preventDefault(e); } - }); - - on(te, "compositionstart", function () { - var start = cm.getCursor("from"); - if (input.composing) { input.composing.range.clear(); } - input.composing = { - start: start, - range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) - }; - }); - on(te, "compositionend", function () { - if (input.composing) { - input.poll(); - input.composing.range.clear(); - input.composing = null; - } - }); - }; - - TextareaInput.prototype.createField = function (_display) { - // Wraps and hides input textarea - this.wrapper = hiddenTextarea(); - // The semihidden textarea that is focused when the editor is - // focused, and receives input. - this.textarea = this.wrapper.firstChild; - }; - - TextareaInput.prototype.screenReaderLabelChanged = function (label) { - // Label for screenreaders, accessibility - if(label) { - this.textarea.setAttribute('aria-label', label); - } else { - this.textarea.removeAttribute('aria-label'); - } - }; - - TextareaInput.prototype.prepareSelection = function () { - // Redraw the selection and/or cursor - var cm = this.cm, display = cm.display, doc = cm.doc; - var result = prepareSelection(cm); - - // Move the hidden textarea near the cursor to prevent scrolling artifacts - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); - var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, - headPos.top + lineOff.top - wrapOff.top)); - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, - headPos.left + lineOff.left - wrapOff.left)); - } - - return result - }; - - TextareaInput.prototype.showSelection = function (drawn) { - var cm = this.cm, display = cm.display; - removeChildrenAndAdd(display.cursorDiv, drawn.cursors); - removeChildrenAndAdd(display.selectionDiv, drawn.selection); - if (drawn.teTop != null) { - this.wrapper.style.top = drawn.teTop + "px"; - this.wrapper.style.left = drawn.teLeft + "px"; - } - }; - - // Reset the input to correspond to the selection (or to be empty, - // when not typing and nothing is selected) - TextareaInput.prototype.reset = function (typing) { - if (this.contextMenuPending || this.composing) { return } - var cm = this.cm; - if (cm.somethingSelected()) { - this.prevInput = ""; - var content = cm.getSelection(); - this.textarea.value = content; - if (cm.state.focused) { selectInput(this.textarea); } - if (ie && ie_version >= 9) { this.hasSelection = content; } - } else if (!typing) { - this.prevInput = this.textarea.value = ""; - if (ie && ie_version >= 9) { this.hasSelection = null; } - } - }; - - TextareaInput.prototype.getField = function () { return this.textarea }; - - TextareaInput.prototype.supportsTouch = function () { return false }; - - TextareaInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { - try { this.textarea.focus(); } - catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM - } - }; - - TextareaInput.prototype.blur = function () { this.textarea.blur(); }; - - TextareaInput.prototype.resetPosition = function () { - this.wrapper.style.top = this.wrapper.style.left = 0; - }; - - TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); }; - - // Poll for input changes, using the normal rate of polling. This - // runs as long as the editor is focused. - TextareaInput.prototype.slowPoll = function () { - var this$1 = this; - - if (this.pollingFast) { return } - this.polling.set(this.cm.options.pollInterval, function () { - this$1.poll(); - if (this$1.cm.state.focused) { this$1.slowPoll(); } - }); - }; - - // When an event has just come in that is likely to add or change - // something in the input textarea, we poll faster, to ensure that - // the change appears on the screen quickly. - TextareaInput.prototype.fastPoll = function () { - var missed = false, input = this; - input.pollingFast = true; - function p() { - var changed = input.poll(); - if (!changed && !missed) {missed = true; input.polling.set(60, p);} - else {input.pollingFast = false; input.slowPoll();} - } - input.polling.set(20, p); - }; - - // Read input from the textarea, and update the document to match. - // When something is selected, it is present in the textarea, and - // selected (unless it is huge, in which case a placeholder is - // used). When nothing is selected, the cursor sits after previously - // seen text (can be empty), which is stored in prevInput (we must - // not reset the textarea when typing, because that breaks IME). - TextareaInput.prototype.poll = function () { - var this$1 = this; - - var cm = this.cm, input = this.textarea, prevInput = this.prevInput; - // Since this is called a *lot*, try to bail out as cheaply as - // possible when it is clear that nothing happened. hasSelection - // will be the case when there is a lot of text in the textarea, - // in which case reading its value would be expensive. - if (this.contextMenuPending || !cm.state.focused || - (hasSelection(input) && !prevInput && !this.composing) || - cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) - { return false } - - var text = input.value; - // If nothing changed, bail. - if (text == prevInput && !cm.somethingSelected()) { return false } - // Work around nonsensical selection resetting in IE9/10, and - // inexplicable appearance of private area unicode characters on - // some key combos in Mac (#2689). - if (ie && ie_version >= 9 && this.hasSelection === text || - mac && /[\uf700-\uf7ff]/.test(text)) { - cm.display.input.reset(); - return false - } - - if (cm.doc.sel == cm.display.selForContextMenu) { - var first = text.charCodeAt(0); - if (first == 0x200b && !prevInput) { prevInput = "\u200b"; } - if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } - } - // Find the part of the input that is actually new - var same = 0, l = Math.min(prevInput.length, text.length); - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; } - - runInOp(cm, function () { - applyTextInput(cm, text.slice(same), prevInput.length - same, - null, this$1.composing ? "*compose" : null); - - // Don't leave long text in the textarea, since it makes further polling slow - if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; } - else { this$1.prevInput = text; } - - if (this$1.composing) { - this$1.composing.range.clear(); - this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), - {className: "CodeMirror-composing"}); - } - }); - return true - }; - - TextareaInput.prototype.ensurePolled = function () { - if (this.pollingFast && this.poll()) { this.pollingFast = false; } - }; - - TextareaInput.prototype.onKeyPress = function () { - if (ie && ie_version >= 9) { this.hasSelection = null; } - this.fastPoll(); - }; - - TextareaInput.prototype.onContextMenu = function (e) { - var input = this, cm = input.cm, display = cm.display, te = input.textarea; - if (input.contextMenuPending) { input.contextMenuPending(); } - var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; - if (!pos || presto) { return } // Opera is difficult. - - // Reset the current text selection only if the click is done outside of the selection - // and 'resetSelectionOnContextMenu' option is true. - var reset = cm.options.resetSelectionOnContextMenu; - if (reset && cm.doc.sel.contains(pos) == -1) - { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); } - - var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; - var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); - input.wrapper.style.cssText = "position: static"; - te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; - var oldScrollY; - if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712) - display.input.focus(); - if (webkit) { window.scrollTo(null, oldScrollY); } - display.input.reset(); - // Adds "Select all" to context menu in FF - if (!cm.somethingSelected()) { te.value = input.prevInput = " "; } - input.contextMenuPending = rehide; - display.selForContextMenu = cm.doc.sel; - clearTimeout(display.detectingSelectAll); - - // Select-all will be greyed out if there's nothing to select, so - // this adds a zero-width space so that we can later check whether - // it got selected. - function prepareSelectAllHack() { - if (te.selectionStart != null) { - var selected = cm.somethingSelected(); - var extval = "\u200b" + (selected ? te.value : ""); - te.value = "\u21da"; // Used to catch context-menu undo - te.value = extval; - input.prevInput = selected ? "" : "\u200b"; - te.selectionStart = 1; te.selectionEnd = extval.length; - // Re-set this, in case some other handler touched the - // selection in the meantime. - display.selForContextMenu = cm.doc.sel; - } - } - function rehide() { - if (input.contextMenuPending != rehide) { return } - input.contextMenuPending = false; - input.wrapper.style.cssText = oldWrapperCSS; - te.style.cssText = oldCSS; - if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); } - - // Try to detect the user choosing select-all - if (te.selectionStart != null) { - if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); } - var i = 0, poll = function () { - if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && - te.selectionEnd > 0 && input.prevInput == "\u200b") { - operation(cm, selectAll)(cm); - } else if (i++ < 10) { - display.detectingSelectAll = setTimeout(poll, 500); - } else { - display.selForContextMenu = null; - display.input.reset(); - } - }; - display.detectingSelectAll = setTimeout(poll, 200); - } - } - - if (ie && ie_version >= 9) { prepareSelectAllHack(); } - if (captureRightClick) { - e_stop(e); - var mouseup = function () { - off(window, "mouseup", mouseup); - setTimeout(rehide, 20); - }; - on(window, "mouseup", mouseup); - } else { - setTimeout(rehide, 50); - } - }; - - TextareaInput.prototype.readOnlyChanged = function (val) { - if (!val) { this.reset(); } - this.textarea.disabled = val == "nocursor"; - this.textarea.readOnly = !!val; - }; - - TextareaInput.prototype.setUneditable = function () {}; - - TextareaInput.prototype.needsContentAttribute = false; - - function fromTextArea(textarea, options) { - options = options ? copyObj(options) : {}; - options.value = textarea.value; - if (!options.tabindex && textarea.tabIndex) - { options.tabindex = textarea.tabIndex; } - if (!options.placeholder && textarea.placeholder) - { options.placeholder = textarea.placeholder; } - // Set autofocus to true if this textarea is focused, or if it has - // autofocus and no other element is focused. - if (options.autofocus == null) { - var hasFocus = activeElt(); - options.autofocus = hasFocus == textarea || - textarea.getAttribute("autofocus") != null && hasFocus == document.body; - } - - function save() {textarea.value = cm.getValue();} - - var realSubmit; - if (textarea.form) { - on(textarea.form, "submit", save); - // Deplorable hack to make the submit method do the right thing. - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form; - realSubmit = form.submit; - try { - var wrappedSubmit = form.submit = function () { - save(); - form.submit = realSubmit; - form.submit(); - form.submit = wrappedSubmit; - }; - } catch(e) {} - } - } - - options.finishInit = function (cm) { - cm.save = save; - cm.getTextArea = function () { return textarea; }; - cm.toTextArea = function () { - cm.toTextArea = isNaN; // Prevent this from being ran twice - save(); - textarea.parentNode.removeChild(cm.getWrapperElement()); - textarea.style.display = ""; - if (textarea.form) { - off(textarea.form, "submit", save); - if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") - { textarea.form.submit = realSubmit; } - } - }; - }; - - textarea.style.display = "none"; - var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, - options); - return cm - } - - function addLegacyProps(CodeMirror) { - CodeMirror.off = off; - CodeMirror.on = on; - CodeMirror.wheelEventPixels = wheelEventPixels; - CodeMirror.Doc = Doc; - CodeMirror.splitLines = splitLinesAuto; - CodeMirror.countColumn = countColumn; - CodeMirror.findColumn = findColumn; - CodeMirror.isWordChar = isWordCharBasic; - CodeMirror.Pass = Pass; - CodeMirror.signal = signal; - CodeMirror.Line = Line; - CodeMirror.changeEnd = changeEnd; - CodeMirror.scrollbarModel = scrollbarModel; - CodeMirror.Pos = Pos; - CodeMirror.cmpPos = cmp; - CodeMirror.modes = modes; - CodeMirror.mimeModes = mimeModes; - CodeMirror.resolveMode = resolveMode; - CodeMirror.getMode = getMode; - CodeMirror.modeExtensions = modeExtensions; - CodeMirror.extendMode = extendMode; - CodeMirror.copyState = copyState; - CodeMirror.startState = startState; - CodeMirror.innerMode = innerMode; - CodeMirror.commands = commands; - CodeMirror.keyMap = keyMap; - CodeMirror.keyName = keyName; - CodeMirror.isModifierKey = isModifierKey; - CodeMirror.lookupKey = lookupKey; - CodeMirror.normalizeKeyMap = normalizeKeyMap; - CodeMirror.StringStream = StringStream; - CodeMirror.SharedTextMarker = SharedTextMarker; - CodeMirror.TextMarker = TextMarker; - CodeMirror.LineWidget = LineWidget; - CodeMirror.e_preventDefault = e_preventDefault; - CodeMirror.e_stopPropagation = e_stopPropagation; - CodeMirror.e_stop = e_stop; - CodeMirror.addClass = addClass; - CodeMirror.contains = contains; - CodeMirror.rmClass = rmClass; - CodeMirror.keyNames = keyNames; - } - - // EDITOR CONSTRUCTOR - - defineOptions(CodeMirror); - - addEditorMethods(CodeMirror); - - // Set up methods on CodeMirror's prototype to redirect to the editor's document. - var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); - for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) - { CodeMirror.prototype[prop] = (function(method) { - return function() {return method.apply(this.doc, arguments)} - })(Doc.prototype[prop]); } } - - eventMixin(Doc); - CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; - - // Extra arguments are stored as the mode's dependencies, which is - // used by (legacy) mechanisms like loadmode.js to automatically - // load a mode. (Preferred mechanism is the require/define calls.) - CodeMirror.defineMode = function(name/*, mode, …*/) { - if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; } - defineMode.apply(this, arguments); - }; - - CodeMirror.defineMIME = defineMIME; - - // Minimal default mode. - CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }); - CodeMirror.defineMIME("text/plain", "null"); - - // EXTENSIONS - - CodeMirror.defineExtension = function (name, func) { - CodeMirror.prototype[name] = func; - }; - CodeMirror.defineDocExtension = function (name, func) { - Doc.prototype[name] = func; - }; - - CodeMirror.fromTextArea = fromTextArea; - - addLegacyProps(CodeMirror); - - CodeMirror.version = "5.63.1"; - - return CodeMirror; - -}))); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/mode/lua/lua.js b/luci-app-openclash/root/www/luci-static/resources/openclash/mode/lua/lua.js deleted file mode 100644 index 2fad0180..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/mode/lua/lua.js +++ /dev/null @@ -1,160 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -// LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's -// CodeMirror 1 mode. -// highlights keywords, strings, comments (no leveling supported! ("[==[")), tokens, basic indenting - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("lua", function(config, parserConfig) { - var indentUnit = config.indentUnit; - - function prefixRE(words) { - return new RegExp("^(?:" + words.join("|") + ")", "i"); - } - function wordRE(words) { - return new RegExp("^(?:" + words.join("|") + ")$", "i"); - } - var specials = wordRE(parserConfig.specials || []); - - // long list of standard functions from lua manual - var builtins = wordRE([ - "_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load", - "loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require", - "select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall", - - "coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield", - - "debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable", - "debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable", - "debug.setupvalue","debug.traceback", - - "close","flush","lines","read","seek","setvbuf","write", - - "io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin", - "io.stdout","io.tmpfile","io.type","io.write", - - "math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg", - "math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max", - "math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh", - "math.sqrt","math.tan","math.tanh", - - "os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale", - "os.time","os.tmpname", - - "package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload", - "package.seeall", - - "string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub", - "string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper", - - "table.concat","table.insert","table.maxn","table.remove","table.sort" - ]); - var keywords = wordRE(["and","break","elseif","false","nil","not","or","return", - "true","function", "end", "if", "then", "else", "do", - "while", "repeat", "until", "for", "in", "local" ]); - - var indentTokens = wordRE(["function", "if","repeat","do", "\\(", "{"]); - var dedentTokens = wordRE(["end", "until", "\\)", "}"]); - var dedentPartial = prefixRE(["end", "until", "\\)", "}", "else", "elseif"]); - - function readBracket(stream) { - var level = 0; - while (stream.eat("=")) ++level; - stream.eat("["); - return level; - } - - function normal(stream, state) { - var ch = stream.next(); - if (ch == "-" && stream.eat("-")) { - if (stream.eat("[") && stream.eat("[")) - return (state.cur = bracketed(readBracket(stream), "comment"))(stream, state); - stream.skipToEnd(); - return "comment"; - } - if (ch == "\"" || ch == "'") - return (state.cur = string(ch))(stream, state); - if (ch == "[" && /[\[=]/.test(stream.peek())) - return (state.cur = bracketed(readBracket(stream), "string"))(stream, state); - if (/\d/.test(ch)) { - stream.eatWhile(/[\w.%]/); - return "number"; - } - if (/[\w_]/.test(ch)) { - stream.eatWhile(/[\w\\\-_.]/); - return "variable"; - } - return null; - } - - function bracketed(level, style) { - return function(stream, state) { - var curlev = null, ch; - while ((ch = stream.next()) != null) { - if (curlev == null) {if (ch == "]") curlev = 0;} - else if (ch == "=") ++curlev; - else if (ch == "]" && curlev == level) { state.cur = normal; break; } - else curlev = null; - } - return style; - }; - } - - function string(quote) { - return function(stream, state) { - var escaped = false, ch; - while ((ch = stream.next()) != null) { - if (ch == quote && !escaped) break; - escaped = !escaped && ch == "\\"; - } - if (!escaped) state.cur = normal; - return "string"; - }; - } - - return { - startState: function(basecol) { - return {basecol: basecol || 0, indentDepth: 0, cur: normal}; - }, - - token: function(stream, state) { - if (stream.eatSpace()) return null; - var style = state.cur(stream, state); - var word = stream.current(); - if (style == "variable") { - if (keywords.test(word)) style = "keyword"; - else if (builtins.test(word)) style = "builtin"; - else if (specials.test(word)) style = "variable-2"; - } - if ((style != "comment") && (style != "string")){ - if (indentTokens.test(word)) ++state.indentDepth; - else if (dedentTokens.test(word)) --state.indentDepth; - } - return style; - }, - - indent: function(state, textAfter) { - var closing = dedentPartial.test(textAfter); - return state.basecol + indentUnit * (state.indentDepth - (closing ? 1 : 0)); - }, - - electricInput: /^\s*(?:end|until|else|\)|\})$/, - lineComment: "--", - blockCommentStart: "--[[", - blockCommentEnd: "]]" - }; -}); - -CodeMirror.defineMIME("text/x-lua", "lua"); - -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/mode/yaml/yaml.js b/luci-app-openclash/root/www/luci-static/resources/openclash/mode/yaml/yaml.js deleted file mode 100644 index d4649410..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/mode/yaml/yaml.js +++ /dev/null @@ -1,120 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.defineMode("yaml", function() { - - var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; - var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); - - return { - token: function(stream, state) { - var ch = stream.peek(); - var esc = state.escaped; - state.escaped = false; - /* comments */ - if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { - stream.skipToEnd(); - return "comment"; - } - - if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) - return "string"; - - if (state.literal && stream.indentation() > state.keyCol) { - stream.skipToEnd(); return "string"; - } else if (state.literal) { state.literal = false; } - if (stream.sol()) { - state.keyCol = 0; - state.pair = false; - state.pairStart = false; - /* document start */ - if(stream.match('---')) { return "def"; } - /* document end */ - if (stream.match('...')) { return "def"; } - /* array list item */ - if (stream.match(/\s*-\s+/)) { return 'meta'; } - } - /* inline pairs/lists */ - if (stream.match(/^(\{|\}|\[|\])/)) { - if (ch == '{') - state.inlinePairs++; - else if (ch == '}') - state.inlinePairs--; - else if (ch == '[') - state.inlineList++; - else - state.inlineList--; - return 'meta'; - } - - /* list separator */ - if (state.inlineList > 0 && !esc && ch == ',') { - stream.next(); - return 'meta'; - } - /* pairs separator */ - if (state.inlinePairs > 0 && !esc && ch == ',') { - state.keyCol = 0; - state.pair = false; - state.pairStart = false; - stream.next(); - return 'meta'; - } - - /* start of value of a pair */ - if (state.pairStart) { - /* block literals */ - if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; - /* references */ - if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } - /* numbers */ - if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } - if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } - /* keywords */ - if (stream.match(keywordRegex)) { return 'keyword'; } - } - - /* pairs (associative arrays) -> key */ - if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) { - state.pair = true; - state.keyCol = stream.indentation(); - return "atom"; - } - if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } - - /* nothing found, continue */ - state.pairStart = false; - state.escaped = (ch == '\\'); - stream.next(); - return null; - }, - startState: function() { - return { - pair: false, - pairStart: false, - keyCol: 0, - inlinePairs: 0, - inlineList: 0, - literal: false, - escaped: false - }; - }, - lineComment: "#", - fold: "indent" - }; -}); - -CodeMirror.defineMIME("text/x-yaml", "yaml"); -CodeMirror.defineMIME("text/yaml", "yaml"); - -}); diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/theme/idea.css b/luci-app-openclash/root/www/luci-static/resources/openclash/theme/idea.css deleted file mode 100644 index eab36717..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/theme/idea.css +++ /dev/null @@ -1,42 +0,0 @@ -/** - Name: IDEA default theme - From IntelliJ IDEA by JetBrains - */ - -.cm-s-idea span.cm-meta { color: #808000; } -.cm-s-idea span.cm-number { color: #0000FF; } -.cm-s-idea span.cm-keyword { line-height: 1em; font-weight: bold; color: #000080; } -.cm-s-idea span.cm-atom { font-weight: bold; color: #000080; } -.cm-s-idea span.cm-def { color: #000000; } -.cm-s-idea span.cm-variable { color: black; } -.cm-s-idea span.cm-variable-2 { color: black; } -.cm-s-idea span.cm-variable-3, .cm-s-idea span.cm-type { color: black; } -.cm-s-idea span.cm-property { color: black; } -.cm-s-idea span.cm-operator { color: black; } -.cm-s-idea span.cm-comment { color: #808080; } -.cm-s-idea span.cm-string { color: #008000; } -.cm-s-idea span.cm-string-2 { color: #008000; } -.cm-s-idea span.cm-qualifier { color: #555; } -.cm-s-idea span.cm-error { color: #FF0000; } -.cm-s-idea span.cm-attribute { color: #0000FF; } -.cm-s-idea span.cm-tag { color: #000080; } -.cm-s-idea span.cm-link { color: #0000FF; } -.cm-s-idea .CodeMirror-activeline-background { background: #FFFAE3; } - -.cm-s-idea span.cm-builtin { color: #30a; } -.cm-s-idea span.cm-bracket { color: #cc7; } -.cm-s-idea { font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;} - - -.cm-s-idea .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } - -.CodeMirror-hints.idea { - font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; - color: #616569; - background-color: #ebf3fd !important; -} - -.CodeMirror-hints.idea .CodeMirror-hint-active { - background-color: #a2b8c9 !important; - color: #5c6065 !important; -} \ No newline at end of file diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/theme/material.css b/luci-app-openclash/root/www/luci-static/resources/openclash/theme/material.css deleted file mode 100644 index a7848499..00000000 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/theme/material.css +++ /dev/null @@ -1,141 +0,0 @@ -/* - Name: material - Author: Mattia Astorino (http://github.com/equinusocio) - Website: https://material-theme.site/ -*/ - -.cm-s-material.CodeMirror { - background-color: #263238; - color: #EEFFFF; -} - -.cm-s-material .CodeMirror-gutters { - background: #263238; - color: #546E7A; - border: none; -} - -.cm-s-material .CodeMirror-guttermarker, -.cm-s-material .CodeMirror-guttermarker-subtle, -.cm-s-material .CodeMirror-linenumber { - color: #546E7A; -} - -.cm-s-material .CodeMirror-cursor { - border-left: 1px solid #FFCC00; -} -.cm-s-material.cm-fat-cursor .CodeMirror-cursor { - background-color: #5d6d5c80 !important; -} -.cm-s-material .cm-animate-fat-cursor { - background-color: #5d6d5c80 !important; -} - -.cm-s-material div.CodeMirror-selected { - background: rgba(128, 203, 196, 0.2); -} - -.cm-s-material.CodeMirror-focused div.CodeMirror-selected { - background: rgba(128, 203, 196, 0.2); -} - -.cm-s-material .CodeMirror-line::selection, -.cm-s-material .CodeMirror-line>span::selection, -.cm-s-material .CodeMirror-line>span>span::selection { - background: rgba(128, 203, 196, 0.2); -} - -.cm-s-material .CodeMirror-line::-moz-selection, -.cm-s-material .CodeMirror-line>span::-moz-selection, -.cm-s-material .CodeMirror-line>span>span::-moz-selection { - background: rgba(128, 203, 196, 0.2); -} - -.cm-s-material .CodeMirror-activeline-background { - background: rgba(0, 0, 0, 0.5); -} - -.cm-s-material .cm-keyword { - color: #C792EA; -} - -.cm-s-material .cm-operator { - color: #89DDFF; -} - -.cm-s-material .cm-variable-2 { - color: #EEFFFF; -} - -.cm-s-material .cm-variable-3, -.cm-s-material .cm-type { - color: #f07178; -} - -.cm-s-material .cm-builtin { - color: #FFCB6B; -} - -.cm-s-material .cm-atom { - color: #F78C6C; -} - -.cm-s-material .cm-number { - color: #FF5370; -} - -.cm-s-material .cm-def { - color: #82AAFF; -} - -.cm-s-material .cm-string { - color: #C3E88D; -} - -.cm-s-material .cm-string-2 { - color: #f07178; -} - -.cm-s-material .cm-comment { - color: #546E7A; -} - -.cm-s-material .cm-variable { - color: #f07178; -} - -.cm-s-material .cm-tag { - color: #FF5370; -} - -.cm-s-material .cm-meta { - color: #FFCB6B; -} - -.cm-s-material .cm-attribute { - color: #C792EA; -} - -.cm-s-material .cm-property { - color: #C792EA; -} - -.cm-s-material .cm-qualifier { - color: #DECB6B; -} - -.cm-s-material .cm-variable-3, -.cm-s-material .cm-type { - color: #DECB6B; -} - - -.cm-s-material .cm-error { - color: rgba(255, 255, 255, 1.0); - background-color: #FF5370; -} - -.cm-s-material .CodeMirror-matchingbracket { - text-decoration: underline; - color: white !important; -} diff --git a/luci-app-openclash/tools/po2lmo/Makefile b/luci-app-openclash/tools/po2lmo/Makefile deleted file mode 100644 index ad2c1332..00000000 --- a/luci-app-openclash/tools/po2lmo/Makefile +++ /dev/null @@ -1,12 +0,0 @@ - -INSTALL = install -PREFIX = /usr/bin - -po2lmo: src/po2lmo.o src/template_lmo.o - $(CC) $(LDFLAGS) -o src/po2lmo src/po2lmo.o src/template_lmo.o - -install: - $(INSTALL) -m 755 src/po2lmo $(PREFIX) - -clean: - $(RM) src/po2lmo src/*.o diff --git a/luci-app-openclash/tools/po2lmo/src/po2lmo b/luci-app-openclash/tools/po2lmo/src/po2lmo deleted file mode 100644 index 68d4c13a..00000000 Binary files a/luci-app-openclash/tools/po2lmo/src/po2lmo and /dev/null differ diff --git a/luci-app-openclash/tools/po2lmo/src/po2lmo.c b/luci-app-openclash/tools/po2lmo/src/po2lmo.c deleted file mode 100644 index 0da792b6..00000000 --- a/luci-app-openclash/tools/po2lmo/src/po2lmo.c +++ /dev/null @@ -1,247 +0,0 @@ -/* - * lmo - Lua Machine Objects - PO to LMO conversion tool - * - * Copyright (C) 2009-2012 Jo-Philipp Wich - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "template_lmo.h" - -static void die(const char *msg) -{ - fprintf(stderr, "Error: %s\n", msg); - exit(1); -} - -static void usage(const char *name) -{ - fprintf(stderr, "Usage: %s input.po output.lmo\n", name); - exit(1); -} - -static void print(const void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - if( fwrite(ptr, size, nmemb, stream) == 0 ) - die("Failed to write stdout"); -} - -static int extract_string(const char *src, char *dest, int len) -{ - int pos = 0; - int esc = 0; - int off = -1; - - for( pos = 0; (pos < strlen(src)) && (pos < len); pos++ ) - { - if( (off == -1) && (src[pos] == '"') ) - { - off = pos + 1; - } - else if( off >= 0 ) - { - if( esc == 1 ) - { - switch (src[pos]) - { - case '"': - case '\\': - off++; - break; - } - dest[pos-off] = src[pos]; - esc = 0; - } - else if( src[pos] == '\\' ) - { - dest[pos-off] = src[pos]; - esc = 1; - } - else if( src[pos] != '"' ) - { - dest[pos-off] = src[pos]; - } - else - { - dest[pos-off] = '\0'; - break; - } - } - } - - return (off > -1) ? strlen(dest) : -1; -} - -static int cmp_index(const void *a, const void *b) -{ - uint32_t x = ((const lmo_entry_t *)a)->key_id; - uint32_t y = ((const lmo_entry_t *)b)->key_id; - - if (x < y) - return -1; - else if (x > y) - return 1; - - return 0; -} - -static void print_uint32(uint32_t x, FILE *out) -{ - uint32_t y = htonl(x); - print(&y, sizeof(uint32_t), 1, out); -} - -static void print_index(void *array, int n, FILE *out) -{ - lmo_entry_t *e; - - qsort(array, n, sizeof(*e), cmp_index); - - for (e = array; n > 0; n--, e++) - { - print_uint32(e->key_id, out); - print_uint32(e->val_id, out); - print_uint32(e->offset, out); - print_uint32(e->length, out); - } -} - -int main(int argc, char *argv[]) -{ - char line[4096]; - char key[4096]; - char val[4096]; - char tmp[4096]; - int state = 0; - int offset = 0; - int length = 0; - int n_entries = 0; - void *array = NULL; - lmo_entry_t *entry = NULL; - uint32_t key_id, val_id; - - FILE *in; - FILE *out; - - if( (argc != 3) || ((in = fopen(argv[1], "r")) == NULL) || ((out = fopen(argv[2], "w")) == NULL) ) - usage(argv[0]); - - memset(line, 0, sizeof(key)); - memset(key, 0, sizeof(val)); - memset(val, 0, sizeof(val)); - - while( (NULL != fgets(line, sizeof(line), in)) || (state >= 2 && feof(in)) ) - { - if( state == 0 && strstr(line, "msgid \"") == line ) - { - switch(extract_string(line, key, sizeof(key))) - { - case -1: - die("Syntax error in msgid"); - case 0: - state = 1; - break; - default: - state = 2; - } - } - else if( state == 1 || state == 2 ) - { - if( strstr(line, "msgstr \"") == line || state == 2 ) - { - switch(extract_string(line, val, sizeof(val))) - { - case -1: - state = 4; - break; - default: - state = 3; - } - } - else - { - switch(extract_string(line, tmp, sizeof(tmp))) - { - case -1: - state = 2; - break; - default: - strcat(key, tmp); - } - } - } - else if( state == 3 ) - { - switch(extract_string(line, tmp, sizeof(tmp))) - { - case -1: - state = 4; - break; - default: - strcat(val, tmp); - } - } - - if( state == 4 ) - { - if( strlen(key) > 0 && strlen(val) > 0 ) - { - key_id = sfh_hash(key, strlen(key)); - val_id = sfh_hash(val, strlen(val)); - - if( key_id != val_id ) - { - n_entries++; - array = realloc(array, n_entries * sizeof(lmo_entry_t)); - entry = (lmo_entry_t *)array + n_entries - 1; - - if (!array) - die("Out of memory"); - - entry->key_id = key_id; - entry->val_id = val_id; - entry->offset = offset; - entry->length = strlen(val); - - length = strlen(val) + ((4 - (strlen(val) % 4)) % 4); - - print(val, length, 1, out); - offset += length; - } - } - - state = 0; - memset(key, 0, sizeof(key)); - memset(val, 0, sizeof(val)); - } - - memset(line, 0, sizeof(line)); - } - - print_index(array, n_entries, out); - - if( offset > 0 ) - { - print_uint32(offset, out); - fsync(fileno(out)); - fclose(out); - } - else - { - fclose(out); - unlink(argv[2]); - } - - fclose(in); - return(0); -} diff --git a/luci-app-openclash/tools/po2lmo/src/template_lmo.c b/luci-app-openclash/tools/po2lmo/src/template_lmo.c deleted file mode 100644 index 27205a72..00000000 --- a/luci-app-openclash/tools/po2lmo/src/template_lmo.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * lmo - Lua Machine Objects - Base functions - * - * Copyright (C) 2009-2010 Jo-Philipp Wich - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "template_lmo.h" - -/* - * Hash function from http://www.azillionmonkeys.com/qed/hash.html - * Copyright (C) 2004-2008 by Paul Hsieh - */ - -uint32_t sfh_hash(const char *data, int len) -{ - uint32_t hash = len, tmp; - int rem; - - if (len <= 0 || data == NULL) return 0; - - rem = len & 3; - len >>= 2; - - /* Main loop */ - for (;len > 0; len--) { - hash += sfh_get16(data); - tmp = (sfh_get16(data+2) << 11) ^ hash; - hash = (hash << 16) ^ tmp; - data += 2*sizeof(uint16_t); - hash += hash >> 11; - } - - /* Handle end cases */ - switch (rem) { - case 3: hash += sfh_get16(data); - hash ^= hash << 16; - hash ^= data[sizeof(uint16_t)] << 18; - hash += hash >> 11; - break; - case 2: hash += sfh_get16(data); - hash ^= hash << 11; - hash += hash >> 17; - break; - case 1: hash += *data; - hash ^= hash << 10; - hash += hash >> 1; - } - - /* Force "avalanching" of final 127 bits */ - hash ^= hash << 3; - hash += hash >> 5; - hash ^= hash << 4; - hash += hash >> 17; - hash ^= hash << 25; - hash += hash >> 6; - - return hash; -} - -uint32_t lmo_canon_hash(const char *str, int len) -{ - char res[4096]; - char *ptr, prev; - int off; - - if (!str || len >= sizeof(res)) - return 0; - - for (prev = ' ', ptr = res, off = 0; off < len; prev = *str, off++, str++) - { - if (isspace(*str)) - { - if (!isspace(prev)) - *ptr++ = ' '; - } - else - { - *ptr++ = *str; - } - } - - if ((ptr > res) && isspace(*(ptr-1))) - ptr--; - - return sfh_hash(res, ptr - res); -} - -lmo_archive_t * lmo_open(const char *file) -{ - int in = -1; - uint32_t idx_offset = 0; - struct stat s; - - lmo_archive_t *ar = NULL; - - if (stat(file, &s) == -1) - goto err; - - if ((in = open(file, O_RDONLY)) == -1) - goto err; - - if ((ar = (lmo_archive_t *)malloc(sizeof(*ar))) != NULL) - { - memset(ar, 0, sizeof(*ar)); - - ar->fd = in; - ar->size = s.st_size; - - fcntl(ar->fd, F_SETFD, fcntl(ar->fd, F_GETFD) | FD_CLOEXEC); - - if ((ar->mmap = mmap(NULL, ar->size, PROT_READ, MAP_SHARED, ar->fd, 0)) == MAP_FAILED) - goto err; - - idx_offset = ntohl(*((const uint32_t *) - (ar->mmap + ar->size - sizeof(uint32_t)))); - - if (idx_offset >= ar->size) - goto err; - - ar->index = (lmo_entry_t *)(ar->mmap + idx_offset); - ar->length = (ar->size - idx_offset - sizeof(uint32_t)) / sizeof(lmo_entry_t); - ar->end = ar->mmap + ar->size; - - return ar; - } - -err: - if (in > -1) - close(in); - - if (ar != NULL) - { - if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) - munmap(ar->mmap, ar->size); - - free(ar); - } - - return NULL; -} - -void lmo_close(lmo_archive_t *ar) -{ - if (ar != NULL) - { - if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) - munmap(ar->mmap, ar->size); - - close(ar->fd); - free(ar); - - ar = NULL; - } -} - - -lmo_catalog_t *_lmo_catalogs = NULL; -lmo_catalog_t *_lmo_active_catalog = NULL; - -int lmo_load_catalog(const char *lang, const char *dir) -{ - DIR *dh = NULL; - char pattern[16]; - char path[PATH_MAX]; - struct dirent *de = NULL; - - lmo_archive_t *ar = NULL; - lmo_catalog_t *cat = NULL; - - if (!lmo_change_catalog(lang)) - return 0; - - if (!dir || !(dh = opendir(dir))) - goto err; - - if (!(cat = malloc(sizeof(*cat)))) - goto err; - - memset(cat, 0, sizeof(*cat)); - - snprintf(cat->lang, sizeof(cat->lang), "%s", lang); - snprintf(pattern, sizeof(pattern), "*.%s.lmo", lang); - - while ((de = readdir(dh)) != NULL) - { - if (!fnmatch(pattern, de->d_name, 0)) - { - snprintf(path, sizeof(path), "%s/%s", dir, de->d_name); - ar = lmo_open(path); - - if (ar) - { - ar->next = cat->archives; - cat->archives = ar; - } - } - } - - closedir(dh); - - cat->next = _lmo_catalogs; - _lmo_catalogs = cat; - - if (!_lmo_active_catalog) - _lmo_active_catalog = cat; - - return 0; - -err: - if (dh) closedir(dh); - if (cat) free(cat); - - return -1; -} - -int lmo_change_catalog(const char *lang) -{ - lmo_catalog_t *cat; - - for (cat = _lmo_catalogs; cat; cat = cat->next) - { - if (!strncmp(cat->lang, lang, sizeof(cat->lang))) - { - _lmo_active_catalog = cat; - return 0; - } - } - - return -1; -} - -static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash) -{ - unsigned int m, l, r; - uint32_t k; - - l = 0; - r = ar->length - 1; - - while (1) - { - m = l + ((r - l) / 2); - - if (r < l) - break; - - k = ntohl(ar->index[m].key_id); - - if (k == hash) - return &ar->index[m]; - - if (k > hash) - { - if (!m) - break; - - r = m - 1; - } - else - { - l = m + 1; - } - } - - return NULL; -} - -int lmo_translate(const char *key, int keylen, char **out, int *outlen) -{ - uint32_t hash; - lmo_entry_t *e; - lmo_archive_t *ar; - - if (!key || !_lmo_active_catalog) - return -2; - - hash = lmo_canon_hash(key, keylen); - - for (ar = _lmo_active_catalog->archives; ar; ar = ar->next) - { - if ((e = lmo_find_entry(ar, hash)) != NULL) - { - *out = ar->mmap + ntohl(e->offset); - *outlen = ntohl(e->length); - return 0; - } - } - - return -1; -} - -void lmo_close_catalog(const char *lang) -{ - lmo_archive_t *ar, *next; - lmo_catalog_t *cat, *prev; - - for (prev = NULL, cat = _lmo_catalogs; cat; prev = cat, cat = cat->next) - { - if (!strncmp(cat->lang, lang, sizeof(cat->lang))) - { - if (prev) - prev->next = cat->next; - else - _lmo_catalogs = cat->next; - - for (ar = cat->archives; ar; ar = next) - { - next = ar->next; - lmo_close(ar); - } - - free(cat); - break; - } - } -} diff --git a/luci-app-openclash/tools/po2lmo/src/template_lmo.h b/luci-app-openclash/tools/po2lmo/src/template_lmo.h deleted file mode 100644 index 57f59aa5..00000000 --- a/luci-app-openclash/tools/po2lmo/src/template_lmo.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * lmo - Lua Machine Objects - General header - * - * Copyright (C) 2009-2012 Jo-Philipp Wich - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _TEMPLATE_LMO_H_ -#define _TEMPLATE_LMO_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if (defined(__GNUC__) && defined(__i386__)) -#define sfh_get16(d) (*((const uint16_t *) (d))) -#else -#define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ - +(uint32_t)(((const uint8_t *)(d))[0]) ) -#endif - - -struct lmo_entry { - uint32_t key_id; - uint32_t val_id; - uint32_t offset; - uint32_t length; -} __attribute__((packed)); - -typedef struct lmo_entry lmo_entry_t; - - -struct lmo_archive { - int fd; - int length; - uint32_t size; - lmo_entry_t *index; - char *mmap; - char *end; - struct lmo_archive *next; -}; - -typedef struct lmo_archive lmo_archive_t; - - -struct lmo_catalog { - char lang[6]; - struct lmo_archive *archives; - struct lmo_catalog *next; -}; - -typedef struct lmo_catalog lmo_catalog_t; - - -uint32_t sfh_hash(const char *data, int len); -uint32_t lmo_canon_hash(const char *data, int len); - -lmo_archive_t * lmo_open(const char *file); -void lmo_close(lmo_archive_t *ar); - - -extern lmo_catalog_t *_lmo_catalogs; -extern lmo_catalog_t *_lmo_active_catalog; - -int lmo_load_catalog(const char *lang, const char *dir); -int lmo_change_catalog(const char *lang); -int lmo_translate(const char *key, int keylen, char **out, int *outlen); -void lmo_close_catalog(const char *lang); - -#endif diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile deleted file mode 100644 index 25ee6f28..00000000 --- a/luci-app-passwall/Makefile +++ /dev/null @@ -1,166 +0,0 @@ -# Copyright (C) 2018-2020 L-WRT Team -# Copyright (C) 2021 xiaorouji -# -# This is free software, licensed under the GNU General Public License v3. - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-passwall -#20220207 - -PKG_CONFIG_DEPENDS:= \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Brook \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Haproxy \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_PDNSD \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray_Plugin \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_IPv6_Nat - -LUCI_TITLE:=LuCI support for PassWall -LUCI_PKGARCH:=all -LUCI_DEPENDS:=+coreutils +coreutils-base64 +coreutils-nohup +curl \ - +dnsmasq-full +luci-compat +dns2socks +ipset +ip-full +ipt2socks +iptables-mod-tproxy +iptables-mod-iprange \ - +libuci-lua +lua +luci-lib-jsonc +microsocks +tcping +resolveip \ - +unzip \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Brook:brook \ - +PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG:chinadns-ng \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Haproxy:haproxy \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria:hysteria \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \ - +PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy:naiveproxy \ - +PACKAGE_$(PKG_NAME)_INCLUDE_PDNSD:pdnsd-alt \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-local \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-redir \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server:shadowsocks-libev-ss-server \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client:shadowsocks-rust-sslocal \ - +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-local \ - +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-redir \ - +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server:shadowsocksr-libev-ssr-server \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs:simple-obfs \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO:trojan-go \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus:trojan-plus \ - +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray-core \ - +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin:v2ray-plugin \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray-core \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Xray_Plugin:xray-plugin \ - +PACKAGE_$(PKG_NAME)_INCLUDE_IPv6_Nat:ip6tables-mod-nat - -define Package/$(PKG_NAME)/config -menu "Configuration" - -config PACKAGE_$(PKG_NAME)_INCLUDE_Brook - bool "Include Brook" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG - bool "Include ChinaDNS-NG" - default y - -config PACKAGE_$(PKG_NAME)_INCLUDE_Haproxy - bool "Include Haproxy" - default y if aarch64||arm||i386||x86_64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria - bool "Include Hysteria" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun - bool "Include Kcptun" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy - bool "Include NaiveProxy" - depends on !(arc||(arm&&TARGET_gemini)||armeb||mips||mips64||powerpc) - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_PDNSD - bool "Include PDNSD" - default y - -config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client - bool "Include Shadowsocks Libev Client" - default y - -config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server - bool "Include Shadowsocks Libev Server" - default y if aarch64||arm||i386||x86_64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client - bool "Include Shadowsocks Rust Client" - depends on aarch64||arm||i386||mips||mipsel||x86_64 - default y if aarch64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client - bool "Include ShadowsocksR Libev Client" - default y - -config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server - bool "Include ShadowsocksR Libev Server" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs - bool "Include Simple-Obfs (Shadowsocks Plugin)" - default y - -config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO - bool "Include Trojan-GO" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus - bool "Include Trojan-Plus" - default y - -config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray - bool "Include V2ray" - default y if aarch64||arm||i386||x86_64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin - bool "Include V2ray-Plugin (Shadowsocks Plugin)" - default y if aarch64||arm||i386||x86_64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_Xray - bool "Include Xray" - default y if aarch64||arm||i386||x86_64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_Xray_Plugin - bool "Include Xray-Plugin (Shadowsocks Plugin)" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_IPv6_Nat - bool "Include IPv6 Nat" - default n - -endmenu -endef - -define Package/$(PKG_NAME)/conffiles -/etc/config/passwall -/etc/config/passwall_server -/usr/share/passwall/rules/direct_host -/usr/share/passwall/rules/direct_ip -/usr/share/passwall/rules/proxy_host -/usr/share/passwall/rules/proxy_ip -/usr/share/passwall/rules/block_host -/usr/share/passwall/rules/block_ip -/usr/share/passwall/rules/lanlist_ipv4 -/usr/share/passwall/rules/lanlist_ipv6 -endef - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-passwall/luasrc/controller/passwall.lua b/luci-app-passwall/luasrc/controller/passwall.lua deleted file mode 100644 index eb71c82e..00000000 --- a/luci-app-passwall/luasrc/controller/passwall.lua +++ /dev/null @@ -1,524 +0,0 @@ --- Copyright (C) 2018-2020 L-WRT Team --- Copyright (C) 2021 xiaorouji - -module("luci.controller.passwall", package.seeall) -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local ucic = luci.model.uci.cursor() -local http = require "luci.http" -local util = require "luci.util" -local i18n = require "luci.i18n" -local kcptun = require("luci.model.cbi." .. appname ..".api.kcptun") -local brook = require("luci.model.cbi." .. appname ..".api.brook") -local v2ray = require("luci.model.cbi." .. appname ..".api.v2ray") -local xray = require("luci.model.cbi." .. appname ..".api.xray") -local trojan_go = require("luci.model.cbi." .. appname ..".api.trojan_go") -local hysteria = require("luci.model.cbi." .. appname ..".api.hysteria") - -function index() - appname = require "luci.model.cbi.passwall.api.api".appname - entry({"admin", "services", appname}).dependent = true - entry({"admin", "services", appname, "reset_config"}, call("reset_config")).leaf = true - entry({"admin", "services", appname, "show"}, call("show_menu")).leaf = true - entry({"admin", "services", appname, "hide"}, call("hide_menu")).leaf = true - if not nixio.fs.access("/etc/config/passwall") then return end - if nixio.fs.access("/etc/config/passwall_show") then - e = entry({"admin", "services", appname}, alias("admin", "services", appname, "settings"), _("Pass Wall"), -1) - e.dependent = true - e.acl_depends = { "luci-app-passwall" } - end - --[[ Client ]] - entry({"admin", "services", appname, "settings"}, cbi(appname .. "/client/global"), _("Basic Settings"), 1).dependent = true - entry({"admin", "services", appname, "node_list"}, cbi(appname .. "/client/node_list"), _("Node List"), 2).dependent = true - entry({"admin", "services", appname, "node_subscribe"}, cbi(appname .. "/client/node_subscribe"), _("Node Subscribe"), 3).dependent = true - entry({"admin", "services", appname, "auto_switch"}, cbi(appname .. "/client/auto_switch"), _("Auto Switch"), 4).leaf = true - entry({"admin", "services", appname, "other"}, cbi(appname .. "/client/other", {autoapply = true}), _("Other Settings"), 92).leaf = true - if nixio.fs.access("/usr/sbin/haproxy") then - entry({"admin", "services", appname, "haproxy"}, cbi(appname .. "/client/haproxy"), _("Load Balancing"), 93).leaf = true - end - entry({"admin", "services", appname, "app_update"}, cbi(appname .. "/client/app_update"), _("App Update"), 95).leaf = true - entry({"admin", "services", appname, "rule"}, cbi(appname .. "/client/rule"), _("Rule Manage"), 96).leaf = true - entry({"admin", "services", appname, "rule_list"}, cbi(appname .. "/client/rule_list"), _("Rule List"), 97).leaf = true - entry({"admin", "services", appname, "node_subscribe_config"}, cbi(appname .. "/client/node_subscribe_config")).leaf = true - entry({"admin", "services", appname, "node_config"}, cbi(appname .. "/client/node_config")).leaf = true - entry({"admin", "services", appname, "shunt_rules"}, cbi(appname .. "/client/shunt_rules")).leaf = true - entry({"admin", "services", appname, "acl"}, cbi(appname .. "/client/acl"), _("Access control"), 98).leaf = true - entry({"admin", "services", appname, "acl_config"}, cbi(appname .. "/client/acl_config")).leaf = true - entry({"admin", "services", appname, "log"}, form(appname .. "/client/log"), _("Watch Logs"), 999).leaf = true - - --[[ Server ]] - entry({"admin", "services", appname, "server"}, cbi(appname .. "/server/index"), _("Server-Side"), 99).leaf = true - entry({"admin", "services", appname, "server_user"}, cbi(appname .. "/server/user")).leaf = true - - --[[ API ]] - entry({"admin", "services", appname, "server_user_status"}, call("server_user_status")).leaf = true - entry({"admin", "services", appname, "server_user_log"}, call("server_user_log")).leaf = true - entry({"admin", "services", appname, "server_get_log"}, call("server_get_log")).leaf = true - entry({"admin", "services", appname, "server_clear_log"}, call("server_clear_log")).leaf = true - entry({"admin", "services", appname, "link_add_node"}, call("link_add_node")).leaf = true - entry({"admin", "services", appname, "autoswitch_add_node"}, call("autoswitch_add_node")).leaf = true - entry({"admin", "services", appname, "autoswitch_remove_node"}, call("autoswitch_remove_node")).leaf = true - entry({"admin", "services", appname, "get_now_use_node"}, call("get_now_use_node")).leaf = true - entry({"admin", "services", appname, "get_redir_log"}, call("get_redir_log")).leaf = true - entry({"admin", "services", appname, "get_log"}, call("get_log")).leaf = true - entry({"admin", "services", appname, "clear_log"}, call("clear_log")).leaf = true - entry({"admin", "services", appname, "status"}, call("status")).leaf = true - entry({"admin", "services", appname, "haproxy_status"}, call("haproxy_status")).leaf = true - entry({"admin", "services", appname, "socks_status"}, call("socks_status")).leaf = true - entry({"admin", "services", appname, "connect_status"}, call("connect_status")).leaf = true - entry({"admin", "services", appname, "check_port"}, call("check_port")).leaf = true - entry({"admin", "services", appname, "ping_node"}, call("ping_node")).leaf = true - entry({"admin", "services", appname, "set_node"}, call("set_node")).leaf = true - entry({"admin", "services", appname, "copy_node"}, call("copy_node")).leaf = true - entry({"admin", "services", appname, "clear_all_nodes"}, call("clear_all_nodes")).leaf = true - entry({"admin", "services", appname, "delete_select_nodes"}, call("delete_select_nodes")).leaf = true - entry({"admin", "services", appname, "update_rules"}, call("update_rules")).leaf = true - entry({"admin", "services", appname, "kcptun_check"}, call("kcptun_check")).leaf = true - entry({"admin", "services", appname, "kcptun_update"}, call("kcptun_update")).leaf = true - entry({"admin", "services", appname, "brook_check"}, call("brook_check")).leaf = true - entry({"admin", "services", appname, "brook_update"}, call("brook_update")).leaf = true - entry({"admin", "services", appname, "v2ray_check"}, call("v2ray_check")).leaf = true - entry({"admin", "services", appname, "v2ray_update"}, call("v2ray_update")).leaf = true - entry({"admin", "services", appname, "xray_check"}, call("xray_check")).leaf = true - entry({"admin", "services", appname, "xray_update"}, call("xray_update")).leaf = true - entry({"admin", "services", appname, "trojan_go_check"}, call("trojan_go_check")).leaf = true - entry({"admin", "services", appname, "trojan_go_update"}, call("trojan_go_update")).leaf = true - entry({"admin", "services", appname, "hysteria_check"}, call("hysteria_check")).leaf = true - entry({"admin", "services", appname, "hysteria_update"}, call("hysteria_update")).leaf = true -end - -local function http_write_json(content) - http.prepare_content("application/json") - http.write_json(content or {code = 1}) -end - -function reset_config() - luci.sys.call('/etc/init.d/passwall stop') - luci.sys.call('[ -f "/usr/share/passwall/0_default_config" ] && cp -f /usr/share/passwall/0_default_config /etc/config/passwall') - luci.http.redirect(api.url()) -end - -function show_menu() - luci.sys.call("touch /etc/config/passwall_show") - luci.sys.call("rm -rf /tmp/luci-*") - luci.sys.call("/etc/init.d/rpcd restart >/dev/null") - luci.http.redirect(api.url()) -end - -function hide_menu() - luci.sys.call("rm -rf /etc/config/passwall_show") - luci.sys.call("rm -rf /tmp/luci-*") - luci.sys.call("/etc/init.d/rpcd restart >/dev/null") - luci.http.redirect(luci.dispatcher.build_url("admin", "status", "overview")) -end - -function link_add_node() - local lfile = "/tmp/links.conf" - local link = luci.http.formvalue("link") - luci.sys.call('echo \'' .. link .. '\' > ' .. lfile) - luci.sys.call("lua /usr/share/passwall/subscribe.lua add log") -end - -function autoswitch_add_node() - local key = luci.http.formvalue("key") - if key and key ~= "" then - for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" and e["remark"]:find(key) then - luci.sys.call(string.format("uci -q del_list passwall.@auto_switch[0].tcp_node='%s' && uci -q add_list passwall.@auto_switch[0].tcp_node='%s'", e.id, e.id)) - end - end - end - luci.http.redirect(api.url("auto_switch")) -end - -function autoswitch_remove_node() - local key = luci.http.formvalue("key") - if key and key ~= "" then - for k, e in ipairs(ucic:get(appname, "@auto_switch[0]", "tcp_node") or {}) do - if e and (ucic:get(appname, e, "remarks") or ""):find(key) then - luci.sys.call(string.format("uci -q del_list passwall.@auto_switch[0].tcp_node='%s'", e)) - end - end - end - luci.http.redirect(api.url("auto_switch")) -end - -function get_now_use_node() - local e = {} - local data, code, msg = nixio.fs.readfile("/tmp/etc/passwall/id/TCP") - if data then - e["TCP"] = util.trim(data) - end - local data, code, msg = nixio.fs.readfile("/tmp/etc/passwall/id/UDP") - if data then - e["UDP"] = util.trim(data) - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function get_redir_log() - local proto = luci.http.formvalue("proto") - proto = proto:upper() - if proto == "UDP" and (ucic:get(appname, "@global[0]", "udp_node") or "nil") == "tcp" and not nixio.fs.access("/tmp/etc/passwall/" .. proto .. ".log") then - proto = "TCP" - end - if nixio.fs.access("/tmp/etc/passwall/" .. proto .. ".log") then - local content = luci.sys.exec("cat /tmp/etc/passwall/" .. proto .. ".log") - content = content:gsub("\n", "
") - luci.http.write(content) - else - luci.http.write(string.format("", i18n.translate("Not enabled log"))) - end -end - -function get_log() - -- luci.sys.exec("[ -f /tmp/log/passwall.log ] && sed '1!G;h;$!d' /tmp/log/passwall.log > /tmp/log/passwall_show.log") - luci.http.write(luci.sys.exec("[ -f '/tmp/log/passwall.log' ] && cat /tmp/log/passwall.log")) -end - -function clear_log() - luci.sys.call("echo '' > /tmp/log/passwall.log") -end - -function status() - -- local dns_mode = ucic:get(appname, "@global[0]", "dns_mode") - local e = {} - e.dns_mode_status = luci.sys.call("netstat -apn | grep ':7913 ' >/dev/null") == 0 - e.haproxy_status = luci.sys.call(string.format("top -bn1 | grep -v grep | grep '%s/bin/' | grep haproxy >/dev/null", appname)) == 0 - e["tcp_node_status"] = luci.sys.call(string.format("top -bn1 | grep -v -E 'grep|acl/|acl_' | grep '%s/bin/' | grep -i 'TCP' >/dev/null", appname)) == 0 - - if (ucic:get(appname, "@global[0]", "udp_node") or "nil") == "tcp" then - e["udp_node_status"] = e["tcp_node_status"] - else - e["udp_node_status"] = luci.sys.call(string.format("top -bn1 | grep -v -E 'grep|acl/|acl_' | grep '%s/bin/' | grep -i 'UDP' >/dev/null", appname)) == 0 - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function haproxy_status() - local e = luci.sys.call(string.format("top -bn1 | grep -v grep | grep '%s/bin/' | grep haproxy >/dev/null", appname)) == 0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function socks_status() - local e = {} - local index = luci.http.formvalue("index") - local id = luci.http.formvalue("id") - e.index = index - e.socks_status = luci.sys.call(string.format("top -bn1 | grep -v -E 'grep|acl/|acl_' | grep '%s/bin/' | grep '%s' | grep 'SOCKS_' > /dev/null", appname, id)) == 0 - local use_http = ucic:get(appname, id, "http_port") or 0 - e.use_http = 0 - if tonumber(use_http) > 0 then - e.use_http = 1 - e.http_status = luci.sys.call(string.format("top -bn1 | grep -v -E 'grep|acl/|acl_' | grep '%s/bin/' | grep '%s' | grep -E 'HTTP_|HTTP2SOCKS' > /dev/null", appname, id)) == 0 - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function connect_status() - local e = {} - e.use_time = "" - local url = luci.http.formvalue("url") - local result = luci.sys.exec('curl --connect-timeout 3 -o /dev/null -I -skL -w "%{http_code}:%{time_starttransfer}" ' .. url) - local code = tonumber(luci.sys.exec("echo -n '" .. result .. "' | awk -F ':' '{print $1}'") or "0") - if code ~= 0 then - local use_time = luci.sys.exec("echo -n '" .. result .. "' | awk -F ':' '{print $2}'") - if use_time:find("%.") then - e.use_time = string.format("%.2f", use_time * 1000) - else - e.use_time = string.format("%.2f", use_time / 1000) - end - e.ping_type = "curl" - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function ping_node() - local index = luci.http.formvalue("index") - local address = luci.http.formvalue("address") - local port = luci.http.formvalue("port") - local e = {} - e.index = index - local nodes_ping = ucic:get(appname, "@global_other[0]", "nodes_ping") or "" - if nodes_ping:find("tcping") and luci.sys.exec("echo -n $(command -v tcping)") ~= "" then - e.ping = luci.sys.exec(string.format("echo -n $(tcping -q -c 1 -i 1 -t 2 -p %s %s 2>&1 | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}') 2>/dev/null", port, address)) - end - if e.ping == nil or tonumber(e.ping) == 0 then - e.ping = luci.sys.exec("echo -n $(ping -c 1 -W 1 %q 2>&1 | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}') 2>/dev/null" % address) - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function set_node() - local protocol = luci.http.formvalue("protocol") - local section = luci.http.formvalue("section") - ucic:set(appname, "@global[0]", protocol .. "_node", section) - ucic:commit(appname) - luci.sys.call("/etc/init.d/passwall restart > /dev/null 2>&1 &") - luci.http.redirect(api.url("log")) -end - -function copy_node() - local section = luci.http.formvalue("section") - local uuid = api.gen_uuid() - ucic:section(appname, "nodes", uuid) - for k, v in pairs(ucic:get_all(appname, section)) do - local filter = k:find("%.") - if filter and filter == 1 then - else - xpcall(function() - ucic:set(appname, uuid, k, v) - end, - function(e) - end) - end - end - ucic:delete(appname, uuid, "add_from") - ucic:set(appname, uuid, "add_mode", 1) - ucic:commit(appname) - luci.http.redirect(api.url("node_config", uuid)) -end - -function clear_all_nodes() - ucic:set(appname, '@global[0]', "enabled", "0") - ucic:set(appname, '@global[0]', "tcp_node", "nil") - ucic:set(appname, '@global[0]', "udp_node", "nil") - ucic:set_list(appname, "@auto_switch[0]", "tcp_node", {}) - ucic:foreach(appname, "socks", function(t) - ucic:delete(appname, t[".name"]) - end) - ucic:foreach(appname, "haproxy_config", function(t) - ucic:delete(appname, t[".name"]) - end) - ucic:foreach(appname, "acl_rule", function(t) - ucic:set(appname, t[".name"], "tcp_node", "default") - ucic:set(appname, t[".name"], "udp_node", "default") - end) - ucic:foreach(appname, "nodes", function(node) - ucic:delete(appname, node['.name']) - end) - - ucic:commit(appname) - luci.sys.call("/etc/init.d/" .. appname .. " stop") -end - -function delete_select_nodes() - local ids = luci.http.formvalue("ids") - local auto_switch_tcp_node_list = ucic:get(appname, "@auto_switch[0]", "tcp_node") or {} - string.gsub(ids, '[^' .. "," .. ']+', function(w) - for k, v in ipairs(auto_switch_tcp_node_list) do - if v == w then - luci.sys.call(string.format("uci -q del_list passwall.@auto_switch[0].tcp_node='%s'", w)) - end - end - if (ucic:get(appname, "@global[0]", "tcp_node") or "nil") == w then - ucic:set(appname, '@global[0]', "tcp_node", "nil") - end - if (ucic:get(appname, "@global[0]", "udp_node") or "nil") == w then - ucic:set(appname, '@global[0]', "udp_node", "nil") - end - ucic:foreach(appname, "socks", function(t) - if t["node"] == w then - ucic:delete(appname, t[".name"]) - end - end) - ucic:foreach(appname, "haproxy_config", function(t) - if t["lbss"] == w then - ucic:delete(appname, t[".name"]) - end - end) - ucic:foreach(appname, "acl_rule", function(t) - if t["tcp_node"] == w then - ucic:set(appname, t[".name"], "tcp_node", "default") - end - if t["udp_node"] == w then - ucic:set(appname, t[".name"], "udp_node", "default") - end - end) - ucic:delete(appname, w) - end) - ucic:commit(appname) - luci.sys.call("/etc/init.d/" .. appname .. " restart > /dev/null 2>&1 &") -end - -function check_port() - function socket_connect(type, address, port) - local socket = nixio.socket(type, "stream") - socket:setopt("socket", "rcvtimeo", 3) - socket:setopt("socket", "sndtimeo", 3) - local ret = socket:connect(address, port) - if socket then socket:close() end - if tostring(ret) == "true" then - return true - end - return false - end - local result = {} - ucic:foreach(appname, "nodes", function(s) - if (s.use_kcp and s.use_kcp == "1" and s.kcp_port) or (s.transport and s.transport == "mkcp" and s.port) then - else - local type = s.type - if type and s.address and s.port and s.remarks then - local ip_type = api.get_ip_type(s.address) - local o = {} - o.remark = "%s:[%s] %s:%s" % {s.type, s.remarks, ip_type == "6" and '[' .. s.address .. ']' or s.address, s.port} - o.flag = socket_connect(ip_type == "6" and "inet6" or "inet", s.address, s.port) - if not o.flag and ip_type == "" then - o.flag = socket_connect("inet6", s.address, s.port) - end - result[#result + 1] = o - end - end - end) - luci.http.prepare_content("application/json") - luci.http.write_json(result) -end - -function update_rules() - local update = luci.http.formvalue("update") - luci.sys.call("lua /usr/share/passwall/rule_update.lua log '" .. update .. "' > /dev/null 2>&1 &") - http_write_json() -end - -function server_user_status() - local e = {} - e.index = luci.http.formvalue("index") - e.status = luci.sys.call(string.format("top -bn1 | grep -v 'grep' | grep '%s/bin/' | grep -i '%s' >/dev/null", appname .. "_server", luci.http.formvalue("id"))) == 0 - http_write_json(e) -end - -function server_user_log() - local id = luci.http.formvalue("id") - if nixio.fs.access("/tmp/etc/passwall_server/" .. id .. ".log") then - local content = luci.sys.exec("cat /tmp/etc/passwall_server/" .. id .. ".log") - content = content:gsub("\n", "
") - luci.http.write(content) - else - luci.http.write(string.format("", i18n.translate("Not enabled log"))) - end -end - -function server_get_log() - luci.http.write(luci.sys.exec("[ -f '/tmp/log/passwall_server.log' ] && cat /tmp/log/passwall_server.log")) -end - -function server_clear_log() - luci.sys.call("echo '' > /tmp/log/passwall_server.log") -end - -function kcptun_check() - local json = kcptun.to_check("") - http_write_json(json) -end - -function kcptun_update() - local json = nil - local task = http.formvalue("task") - if task == "extract" then - json = kcptun.to_extract(http.formvalue("file"), http.formvalue("subfix")) - elseif task == "move" then - json = kcptun.to_move(http.formvalue("file")) - else - json = kcptun.to_download(http.formvalue("url"), http.formvalue("size")) - end - - http_write_json(json) -end - -function brook_check() - local json = brook.to_check("") - http_write_json(json) -end - -function brook_update() - local json = nil - local task = http.formvalue("task") - if task == "move" then - json = brook.to_move(http.formvalue("file")) - else - json = brook.to_download(http.formvalue("url"), http.formvalue("size")) - end - - http_write_json(json) -end - -function v2ray_check() - local json = v2ray.to_check("") - http_write_json(json) -end - -function v2ray_update() - local json = nil - local task = http.formvalue("task") - if task == "extract" then - json = v2ray.to_extract(http.formvalue("file"), http.formvalue("subfix")) - elseif task == "move" then - json = v2ray.to_move(http.formvalue("file")) - else - json = v2ray.to_download(http.formvalue("url"), http.formvalue("size")) - end - - http_write_json(json) -end - -function xray_check() - local json = xray.to_check("") - http_write_json(json) -end - -function xray_update() - local json = nil - local task = http.formvalue("task") - if task == "extract" then - json = xray.to_extract(http.formvalue("file"), http.formvalue("subfix")) - elseif task == "move" then - json = xray.to_move(http.formvalue("file")) - else - json = xray.to_download(http.formvalue("url"), http.formvalue("size")) - end - - http_write_json(json) -end - -function trojan_go_check() - local json = trojan_go.to_check("") - http_write_json(json) -end - -function trojan_go_update() - local json = nil - local task = http.formvalue("task") - if task == "extract" then - json = trojan_go.to_extract(http.formvalue("file"), http.formvalue("subfix")) - elseif task == "move" then - json = trojan_go.to_move(http.formvalue("file")) - else - json = trojan_go.to_download(http.formvalue("url"), http.formvalue("size")) - end - - http_write_json(json) -end - -function hysteria_check() - local json = hysteria.to_check("") - http_write_json(json) -end - -function hysteria_update() - local json = nil - local task = http.formvalue("task") - if task == "move" then - json = hysteria.to_move(http.formvalue("file")) - else - json = hysteria.to_download(http.formvalue("url"), http.formvalue("size")) - end - - http_write_json(json) -end - diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua deleted file mode 100755 index 4c62a8d0..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua +++ /dev/null @@ -1,597 +0,0 @@ -module("luci.model.cbi.passwall.api.api", package.seeall) -fs = require "nixio.fs" -sys = require "luci.sys" -uci = require"luci.model.uci".cursor() -util = require "luci.util" -datatypes = require "luci.cbi.datatypes" -jsonc = require "luci.jsonc" -i18n = require "luci.i18n" - -appname = "passwall" -curl = "/usr/bin/curl" -curl_args = {"-skfL", "--connect-timeout 3", "--retry 3", "-m 60"} -command_timeout = 300 -LEDE_BOARD = nil -DISTRIB_TARGET = nil - -function url(...) - local url = string.format("admin/services/%s", appname) - local args = { ... } - for i, v in pairs(args) do - if v ~= "" then - url = url .. "/" .. v - end - end - return require "luci.dispatcher".build_url(url) -end - -function trim(s) - return (s:gsub("^%s*(.-)%s*$", "%1")) -end - -function is_exist(table, value) - for index, k in ipairs(table) do - if k == value then - return true - end - end - return false -end - -function repeat_exist(table, value) - local count = 0 - for index, k in ipairs(table) do - if k:find("-") and k == value then - count = count + 1 - end - end - if count > 1 then - return true - end - return false -end - -function get_args(arg) - local var = {} - for i, arg_k in pairs(arg) do - if i > 0 then - local v = arg[i + 1] - if v then - if repeat_exist(arg, v) == false then - var[arg_k] = v - end - end - end - end - return var -end - -function strToTable(str) - if str == nil or type(str) ~= "string" then - return {} - end - - return loadstring("return " .. str)() -end - -function is_normal_node(e) - if e and e.type and e.protocol and (e.protocol == "_balancing" or e.protocol == "_shunt") then - return false - end - return true -end - -function is_special_node(e) - return is_normal_node(e) == false -end - -function is_ip(val) - return datatypes.ipaddr(val) -end - -function is_ipv6(val) - local str = val - local address = val:match('%[(.*)%]') - if address then - str = address - end - if datatypes.ip6addr(str) then - return true - end - return false -end - -function is_ipv6addrport(val) - if is_ipv6(val) then - local address, port = val:match('%[(.*)%]:([^:]+)$') - if port then - return datatypes.port(port) - end - end - return false -end - -function get_ip_type(val) - if is_ipv6(val) then - return "6" - elseif datatypes.ip4addr(val) then - return "4" - end - return "" -end - -function is_mac(val) - return datatypes.macaddr(val) -end - -function ip_or_mac(val) - if val then - if get_ip_type(val) == "4" then - return "ip" - end - if is_mac(val) then - return "mac" - end - end - return "" -end - -function iprange(val) - if val then - local ipStart, ipEnd = val:match("^([^/]+)-([^/]+)$") - if (ipStart and datatypes.ip4addr(ipStart)) and (ipEnd and datatypes.ip4addr(ipEnd)) then - return true - end - end - return false -end - -function get_valid_nodes() - local nodes_ping = uci_get_type("global_other", "nodes_ping") or "" - local nodes = {} - uci:foreach(appname, "nodes", function(e) - e.id = e[".name"] - if e.type and e.remarks then - if e.protocol and (e.protocol == "_balancing" or e.protocol == "_shunt") then - e["remark"] = "%s:[%s] " % {i18n.translatef(e.type .. e.protocol), e.remarks} - e["node_type"] = "special" - nodes[#nodes + 1] = e - end - if e.port and e.address then - local address = e.address - if datatypes.ipaddr(address) or datatypes.hostname(address) then - local type2 = e.type - local address2 = address - if (type2 == "V2ray" or type2 == "Xray") and e.protocol then - local protocol = e.protocol - if protocol == "vmess" then - protocol = "VMess" - elseif protocol == "vless" then - protocol = "VLESS" - else - protocol = protocol:gsub("^%l",string.upper) - end - type2 = type2 .. " " .. protocol - end - if datatypes.ip6addr(address) then address2 = "[" .. address .. "]" end - e["remark"] = "%s:[%s]" % {type2, e.remarks} - if nodes_ping:find("info") then - e["remark"] = "%s:[%s] %s:%s" % {type2, e.remarks, address2, e.port} - end - if e.use_kcp and e.use_kcp == "1" then - e["remark"] = "%s+%s:[%s]" % {type2, "Kcptun", e.remarks} - if nodes_ping:find("info") then - e["remark"] = "%s+%s:[%s] %s" % {type2, "Kcptun", e.remarks, address2} - end - end - e.node_type = "normal" - nodes[#nodes + 1] = e - end - end - end - end) - return nodes -end - -function get_full_node_remarks(n) - local remarks = "" - if n then - if n.protocol and (n.protocol == "_balancing" or n.protocol == "_shunt") then - remarks = "%s:[%s] " % {i18n.translatef(n.type .. n.protocol), n.remarks} - else - local type2 = n.type - if (n.type == "V2ray" or n.type == "Xray") and n.protocol then - local protocol = n.protocol - if protocol == "vmess" then - protocol = "VMess" - elseif protocol == "vless" then - protocol = "VLESS" - else - protocol = protocol:gsub("^%l",string.upper) - end - type2 = type2 .. " " .. protocol - end - if n.use_kcp and n.use_kcp == "1" then - remarks = "%s+%s:[%s] %s" % {type2, "Kcptun", n.remarks, n.address} - else - remarks = "%s:[%s] %s:%s" % {type2, n.remarks, n.address, n.port} - end - end - end - return remarks -end - -function gen_uuid(format) - local uuid = sys.exec("echo -n $(cat /proc/sys/kernel/random/uuid)") - if format == nil then - uuid = string.gsub(uuid, "-", "") - end - return uuid -end - -function uci_get_type(type, config, default) - local value = uci:get_first(appname, type, config, default) or sys.exec("echo -n $(uci -q get " .. appname .. ".@" .. type .."[0]." .. config .. ")") - if (value == nil or value == "") and (default and default ~= "") then - value = default - end - return value -end - -function uci_get_type_id(id, config, default) - local value = uci:get(appname, id, config, default) or sys.exec("echo -n $(uci -q get " .. appname .. "." .. id .. "." .. config .. ")") - if (value == nil or value == "") and (default and default ~= "") then - value = default - end - return value -end - -function chmod_755(file) - if file and file ~= "" then - if not fs.access(file, "rwx", "rx", "rx") then - fs.chmod(file, 755) - end - end -end - -function get_customed_path(e) - return uci_get_type("global_app", e .. "_file") -end - -function is_finded(e) - return luci.sys.exec('type -t -p "/bin/%s" -p "%s" "%s"' % {e, get_customed_path(e), e}) ~= "" and true or false -end - - -function clone(org) - local function copy(org, res) - for k,v in pairs(org) do - if type(v) ~= "table" then - res[k] = v; - else - res[k] = {}; - copy(v, res[k]) - end - end - end - - local res = {} - copy(org, res) - return res -end - -function get_bin_version_cache(file, cmd) - sys.call("mkdir -p /tmp/etc/passwall_tmp") - if fs.access(file) then - chmod_755(file) - local md5 = sys.exec("echo -n $(md5sum " .. file .. " | awk '{print $1}')") - if fs.access("/tmp/etc/passwall_tmp/" .. md5) then - return sys.exec("echo -n $(cat /tmp/etc/passwall_tmp/%s)" % md5) - else - local version = sys.exec(string.format("echo -n $(%s %s)", file, cmd)) - sys.call("echo '" .. version .. "' > " .. "/tmp/etc/passwall_tmp/" .. md5) - return version - end - end - return "" -end - -function get_v2ray_path() - local path = uci_get_type("global_app", "v2ray_file") - return path -end - -function get_v2ray_version(file) - if file == nil then file = get_v2ray_path() end - local cmd = "-version | awk '{print $2}' | sed -n 1P" - return get_bin_version_cache(file, cmd) -end - -function get_xray_path() - local path = uci_get_type("global_app", "xray_file") - return path -end - -function get_xray_version(file) - if file == nil then file = get_xray_path() end - local cmd = "-version | awk '{print $2}' | sed -n 1P" - return get_bin_version_cache(file, cmd) -end - -function get_trojan_go_path() - local path = uci_get_type("global_app", "trojan_go_file") - return path -end - -function get_trojan_go_version(file) - if file == nil then file = get_trojan_go_path() end - local cmd = "-version | awk '{print $2}' | sed -n 1P" - return get_bin_version_cache(file, cmd) -end - -function get_kcptun_path() - local path = uci_get_type("global_app", "kcptun_client_file") - return path -end - -function get_kcptun_version(file) - if file == nil then file = get_kcptun_path() end - local cmd = "-v | awk '{print $3}'" - return get_bin_version_cache(file, cmd) -end - -function get_brook_path() - local path = uci_get_type("global_app", "brook_file") - return path -end - -function get_brook_version(file) - if file == nil then file = get_brook_path() end - local cmd = "-v | awk '{print $3}'" - return get_bin_version_cache(file, cmd) -end - -function get_hysteria_path() - local path = uci_get_type("global_app", "hysteria_file") - return path -end - -function get_hysteria_version(file) - if file == nil then file = get_hysteria_path() end - local cmd = "-v | awk '{print $3}'" - return get_bin_version_cache(file, cmd) -end - -function is_file(path) - if path and #path > 1 then - if sys.exec('[ -f "%s" ] && echo -n 1' % path) == "1" then - return true - end - end - return nil -end - -function is_dir(path) - if path and #path > 1 then - if sys.exec('[ -d "%s" ] && echo -n 1' % path) == "1" then - return true - end - end - return nil -end - -function get_final_dir(path) - if is_dir(path) then - return path - else - return get_final_dir(fs.dirname(path)) - end -end - -function get_free_space(dir) - if dir == nil then dir = "/" end - if sys.call("df -k " .. dir .. " >/dev/null 2>&1") == 0 then - return tonumber(sys.exec("echo -n $(df -k " .. dir .. " | awk 'NR>1' | awk '{print $4}')")) - end - return 0 -end - -function get_file_space(file) - if file == nil then return 0 end - if fs.access(file) then - return tonumber(sys.exec("echo -n $(du -k " .. file .. " | awk '{print $1}')")) - end - return 0 -end - -function _unpack(t, i) - i = i or 1 - if t[i] ~= nil then return t[i], _unpack(t, i + 1) end -end - -function exec(cmd, args, writer, timeout) - local os = require "os" - local nixio = require "nixio" - - local fdi, fdo = nixio.pipe() - local pid = nixio.fork() - - if pid > 0 then - fdo:close() - - if writer or timeout then - local starttime = os.time() - while true do - if timeout and os.difftime(os.time(), starttime) >= timeout then - nixio.kill(pid, nixio.const.SIGTERM) - return 1 - end - - if writer then - local buffer = fdi:read(2048) - if buffer and #buffer > 0 then - writer(buffer) - end - end - - local wpid, stat, code = nixio.waitpid(pid, "nohang") - - if wpid and stat == "exited" then return code end - - if not writer and timeout then nixio.nanosleep(1) end - end - else - local wpid, stat, code = nixio.waitpid(pid) - return wpid and stat == "exited" and code - end - elseif pid == 0 then - nixio.dup(fdo, nixio.stdout) - fdi:close() - fdo:close() - nixio.exece(cmd, args, nil) - nixio.stdout:close() - os.exit(1) - end -end - -function compare_versions(ver1, comp, ver2) - local table = table - - if not ver1 then ver1 = "" end - if not ver2 then ver2 = "" end - - local av1 = util.split(ver1, "[%.%-]", nil, true) - local av2 = util.split(ver2, "[%.%-]", nil, true) - - local max = table.getn(av1) - local n2 = table.getn(av2) - if (max < n2) then max = n2 end - - for i = 1, max, 1 do - local s1 = tonumber(av1[i] or 0) or 0 - local s2 = tonumber(av2[i] or 0) or 0 - - if comp == "~=" and (s1 ~= s2) then return true end - if (comp == "<" or comp == "<=") and (s1 < s2) then return true end - if (comp == ">" or comp == ">=") and (s1 > s2) then return true end - if (s1 ~= s2) then return false end - end - - return not (comp == "<" or comp == ">") -end - -function auto_get_arch() - local arch = nixio.uname().machine or "" - if fs.access("/usr/lib/os-release") then - LEDE_BOARD = sys.exec("echo -n $(grep 'LEDE_BOARD' /usr/lib/os-release | awk -F '[\\042\\047]' '{print $2}')") - end - if fs.access("/etc/openwrt_release") then - DISTRIB_TARGET = sys.exec("echo -n $(grep 'DISTRIB_TARGET' /etc/openwrt_release | awk -F '[\\042\\047]' '{print $2}')") - end - - if arch == "mips" then - if LEDE_BOARD and LEDE_BOARD ~= "" then - if string.match(LEDE_BOARD, "ramips") == "ramips" then - arch = "ramips" - else - arch = sys.exec("echo '" .. LEDE_BOARD .. "' | grep -oE 'ramips|ar71xx'") - end - elseif DISTRIB_TARGET and DISTRIB_TARGET ~= "" then - if string.match(DISTRIB_TARGET, "ramips") == "ramips" then - arch = "ramips" - else - arch = sys.exec("echo '" .. DISTRIB_TARGET .. "' | grep -oE 'ramips|ar71xx'") - end - end - end - - return util.trim(arch) -end - -function get_file_info(arch) - local file_tree = "" - local sub_version = "" - - if arch == "x86_64" then - file_tree = "amd64" - elseif arch == "aarch64" then - file_tree = "arm64" - elseif arch == "ramips" then - file_tree = "mipsle" - elseif arch == "ar71xx" then - file_tree = "mips" - elseif arch:match("^i[%d]86$") then - file_tree = "386" - elseif arch:match("^armv[5-8]") then - file_tree = "arm" - sub_version = arch:match("[5-8]") - if LEDE_BOARD and string.match(LEDE_BOARD, "bcm53xx") == "bcm53xx" then - sub_version = "5" - elseif DISTRIB_TARGET and string.match(DISTRIB_TARGET, "bcm53xx") == - "bcm53xx" then - sub_version = "5" - end - sub_version = "5" - end - - return file_tree, sub_version -end - -function get_api_json(url) - local jsonc = require "luci.jsonc" - local json_content = luci.sys.exec(curl .. " " .. _unpack(curl_args) .. " " .. url) - if json_content == "" then return {} end - return jsonc.parse(json_content) or {} -end - -function common_to_check(api_url, local_version, match_file_name) - local json = get_api_json(api_url) - - if #json > 0 then - json = json[1] - end - - if json.tag_name == nil then - return { - code = 1, - error = i18n.translate("Get remote version info failed.") - } - end - - local remote_version = json.tag_name - local has_update = compare_versions(local_version:match("[^v]+"), "<", remote_version:match("[^v]+")) - - if not has_update then - return { - code = 0, - local_version = local_version, - remote_version = remote_version - } - end - - local asset = {} - for _, v in ipairs(json.assets) do - if v.name and v.name:match(match_file_name) then - asset = v - break - end - end - if not asset.browser_download_url then - return { - code = 1, - local_version = local_version, - remote_version = remote_version, - html_url = json.html_url, - data = asset, - error = i18n.translate("New version found, but failed to get new version download url.") - } - end - - return { - code = 0, - has_update = true, - local_version = local_version, - remote_version = remote_version, - html_url = json.html_url, - data = asset - } -end \ No newline at end of file diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/brook.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/brook.lua deleted file mode 100644 index 8941b663..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/brook.lua +++ /dev/null @@ -1,134 +0,0 @@ -module("luci.model.cbi.passwall.api.brook", package.seeall) -local api = require "luci.model.cbi.passwall.api.api" -local fs = api.fs -local sys = api.sys -local util = api.util -local i18n = api.i18n - -local pre_release_url = "https://api.github.com/repos/txthinking/brook/releases?per_page=1" -local release_url = "https://api.github.com/repos/txthinking/brook/releases/latest" -local api_url = release_url -local app_path = api.get_brook_path() or "" - -function check_path() - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "Brook") - } - end - return { - code = 0 - } -end - -function to_check(arch) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not arch or arch == "" then arch = api.auto_get_arch() end - - local file_tree, sub_version = api.get_file_info(arch) - - if file_tree == "" then - return { - code = 1, - error = i18n.translate("Can't determine ARCH, or ARCH not supported.") - } - end - - return api.common_to_check(api_url, api.get_brook_version(), "linux_" .. file_tree .. sub_version) -end - -function to_download(url, size) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not url or url == "" then - return {code = 1, error = i18n.translate("Download url is required.")} - end - - sys.call("/bin/rm -f /tmp/brook_download.*") - - local tmp_file = util.trim(util.exec("mktemp -u -t brook_download.XXXXXX")) - - if size then - local kb1 = api.get_free_space("/tmp") - if tonumber(size) > tonumber(kb1) then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - end - - result = api.exec(api.curl, {api._unpack(api.curl_args), "-o", tmp_file, url}, nil, api.command_timeout) == 0 - - if not result then - api.exec("/bin/rm", {"-f", tmp_file}) - return { - code = 1, - error = i18n.translatef("File download failed or timed out: %s", url) - } - end - - return {code = 0, file = tmp_file} -end - -function to_move(file) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" or not fs.access(file) then - sys.call("/bin/rm -rf /tmp/brook_download.*") - return {code = 1, error = i18n.translate("Client file is required.")} - end - - local new_version = api.get_brook_version(file) - if new_version == "" then - sys.call("/bin/rm -rf /tmp/brook_download.*") - return { - code = 1, - error = i18n.translate("The client file is not suitable for current device.") - } - end - - local flag = sys.call('pgrep -af "passwall/.*brook" >/dev/null') - if flag == 0 then - sys.call("/etc/init.d/passwall stop") - end - - local old_app_size = 0 - if fs.access(app_path) then - old_app_size = api.get_file_space(app_path) - end - local new_app_size = api.get_file_space(file) - local final_dir = api.get_final_dir(app_path) - local final_dir_free_size = api.get_free_space(final_dir) - if final_dir_free_size > 0 then - final_dir_free_size = final_dir_free_size + old_app_size - if new_app_size > final_dir_free_size then - sys.call("/bin/rm -rf /tmp/brook_download.*") - return {code = 1, error = i18n.translatef("%s not enough space.", final_dir)} - end - end - - result = api.exec("/bin/mv", {"-f", file, app_path}, nil, api.command_timeout) == 0 - - sys.call("/bin/rm -rf /tmp/brook_download.*") - if flag == 0 then - sys.call("/etc/init.d/passwall restart >/dev/null 2>&1 &") - end - - if not result or not fs.access(app_path) then - return { - code = 1, - error = i18n.translatef("Can't move new file to path: %s", app_path) - } - end - - return {code = 0} -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_hysteria.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_hysteria.lua deleted file mode 100644 index d1d646f5..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_hysteria.lua +++ /dev/null @@ -1,61 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local uci = api.uci -local jsonc = api.jsonc - -local var = api.get_args(arg) -local node_section = var["-node"] -if not node_section then - print("-node 不能为空") - return -end -local local_tcp_redir_port = var["-local_tcp_redir_port"] -local local_udp_redir_port = var["-local_udp_redir_port"] -local local_socks_address = var["-local_socks_address"] or "0.0.0.0" -local local_socks_port = var["-local_socks_port"] -local local_socks_username = var["-local_socks_username"] -local local_socks_password = var["-local_socks_password"] -local local_http_address = var["-local_http_address"] or "0.0.0.0" -local local_http_port = var["-local_http_port"] -local local_http_username = var["-local_http_username"] -local local_http_password = var["-local_http_password"] -local node = uci:get_all("passwall", node_section) - -local config = { - server = node.address .. ":" .. node.port, - protocol = node.protocol or "udp", - obfs = node.hysteria_obfs, - auth = (node.hysteria_auth_type == "base64") and node.hysteria_auth_password or nil, - auth_str = (node.hysteria_auth_type == "string") and node.hysteria_auth_password or nil, - alpn = node.hysteria_alpn or nil, - server_name = node.tls_serverName, - insecure = (node.tls_allowInsecure == "1") and true or false, - up_mbps = tonumber(node.hysteria_up_mbps) or 10, - down_mbps = tonumber(node.hysteria_down_mbps) or 50, - recv_window_conn = (node.hysteria_recv_window_conn) and tonumber(node.hysteria_recv_window_conn) or nil, - recv_window = (node.hysteria_recv_window) and tonumber(node.hysteria_recv_window) or nil, - disable_mtu_discovery = (node.hysteria_disable_mtu_discovery) and true or false, - socks5 = (local_socks_address and local_socks_port) and { - listen = local_socks_address .. ":" .. local_socks_port, - timeout = 300, - disable_udp = false, - user = (local_socks_username and local_socks_password) and local_socks_username, - password = (local_socks_username and local_socks_password) and local_socks_password, - } or nil, - http = (local_http_address and local_http_port) and { - listen = local_http_address .. ":" .. local_http_port, - timeout = 300, - disable_udp = false, - user = (local_http_username and local_http_password) and local_http_username, - password = (local_http_username and local_http_password) and local_http_password, - } or nil, - tproxy_tcp = (local_tcp_redir_port) and { - listen = "0.0.0.0:" .. local_tcp_redir_port, - timeout = 300 - } or nil, - tproxy_udp = (local_udp_redir_port) and { - listen = "0.0.0.0:" .. local_udp_redir_port, - timeout = 60 - } or nil -} - -print(jsonc.stringify(config, 1)) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_naiveproxy.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_naiveproxy.lua deleted file mode 100644 index dec0710b..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_naiveproxy.lua +++ /dev/null @@ -1,23 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local uci = api.uci -local jsonc = api.jsonc - -local var = api.get_args(arg) -local node_section = var["-node"] -if not node_section then - print("-node 不能为空") - return -end -local run_type = var["-run_type"] -local local_addr = var["-local_addr"] -local local_port = var["-local_port"] -local server_host = var["-server_host"] -local server_port = var["-server_port"] -local node = uci:get_all("passwall", node_section) - -local config = { - listen = run_type .. "://" .. local_addr .. ":" .. local_port, - proxy = node.protocol .. "://" .. node.username .. ":" .. node.password .. "@" .. (server_host or node.address) .. ":" .. (server_port or node.port) -} - -print(jsonc.stringify(config, 1)) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_shadowsocks.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_shadowsocks.lua deleted file mode 100644 index cc7c95a3..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_shadowsocks.lua +++ /dev/null @@ -1,69 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local uci = api.uci -local jsonc = api.jsonc - -local var = api.get_args(arg) -local node_section = var["-node"] -if not node_section then - print("-node 不能为空") - return -end -local local_addr = var["-local_addr"] -local local_port = var["-local_port"] -local server_host = var["-server_host"] -local server_port = var["-server_port"] -local protocol = var["-protocol"] -local mode = var["-mode"] -local node = uci:get_all("passwall", node_section) - -local config = { - server = server_host or node.address, - server_port = tonumber(server_port) or tonumber(node.port), - local_address = local_addr, - local_port = tonumber(local_port), - password = node.password, - method = node.method, - timeout = tonumber(node.timeout), - fast_open = (node.tcp_fast_open and node.tcp_fast_open == "true") and true or false, - reuse_port = true, - tcp_tproxy = var["-tcp_tproxy"] and true or nil -} - -if node.type == "SS" then - if node.plugin and node.plugin ~= "none" then - config.plugin = node.plugin - config.plugin_opts = node.plugin_opts or nil - end - config.mode = mode -elseif node.type == "SS-Rust" then - config = { - servers = { - { - address = server_host or node.address, - port = tonumber(server_port) or tonumber(node.port), - method = node.method, - password = node.password, - timeout = tonumber(node.timeout), - plugin = (node.plugin and node.plugin ~= "none") and node.plugin or nil, - plugin_opts = (node.plugin and node.plugin ~= "none") and node.plugin_opts or nil - } - }, - locals = { - { - protocol = protocol, - local_address = local_addr, - local_port = tonumber(local_port), - mode = mode, - tcp_redir = var["-tcp_tproxy"] and "tproxy" or nil - } - }, - fast_open = (node.tcp_fast_open and node.tcp_fast_open == "true") and true or false - } -elseif node.type == "SSR" then - config.protocol = node.protocol - config.protocol_param = node.protocol_param - config.obfs = node.obfs - config.obfs_param = node.obfs_param -end - -print(jsonc.stringify(config, 1)) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_trojan.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_trojan.lua deleted file mode 100644 index ff7957ba..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_trojan.lua +++ /dev/null @@ -1,81 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local uci = api.uci -local json = api.jsonc - -local var = api.get_args(arg) -local node_section = var["-node"] -if not node_section then - print("-node 不能为空") - return -end -local run_type = var["-run_type"] -local local_addr = var["-local_addr"] -local local_port = var["-local_port"] -local server_host = var["-server_host"] -local server_port = var["-server_port"] -local loglevel = var["-loglevel"] or 2 -local node = uci:get_all("passwall", node_section) - -local cipher = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA" -local cipher13 = "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384" -local trojan = { - run_type = run_type, - local_addr = local_addr, - local_port = tonumber(local_port), - remote_addr = server_host or node.address, - remote_port = tonumber(server_port) or tonumber(node.port), - password = {node.password}, - log_level = tonumber(loglevel), - ssl = { - verify = (node.tls_allowInsecure ~= "1") and true or false, - verify_hostname = true, - cert = nil, - cipher = cipher, - cipher_tls13 = cipher13, - sni = node.tls_serverName or node.address, - alpn = {"h2", "http/1.1"}, - reuse_session = true, - session_ticket = (node.tls_sessionTicket and node.tls_sessionTicket == "1") and true or false, - curves = "" - }, - udp_timeout = 60, - tcp = { - use_tproxy = (node.type == "Trojan-Plus" and var["-use_tproxy"]) and true or nil, - no_delay = true, - keep_alive = true, - reuse_port = true, - fast_open = (node.tcp_fast_open == "true") and true or false, - fast_open_qlen = 20 - } -} -if node.type == "Trojan-Go" then - trojan.ssl.cipher = nil - trojan.ssl.cipher_tls13 = nil - trojan.ssl.fingerprint = (node.fingerprint ~= "disable") and node.fingerprint or "" - trojan.ssl.alpn = (node.trojan_transport == 'ws') and {} or {"h2", "http/1.1"} - if node.tls ~= "1" and node.trojan_transport == "original" then trojan.ssl = nil end - trojan.transport_plugin = ((not node.tls or node.tls ~= "1") and node.trojan_transport == "original") and { - enabled = node.plugin_type ~= nil, - type = node.plugin_type or "plaintext", - command = node.plugin_type ~= "plaintext" and node.plugin_cmd or nil, - option = node.plugin_type ~= "plaintext" and node.plugin_option or nil, - arg = node.plugin_type ~= "plaintext" and { node.plugin_arg } or nil, - env = {} - } or nil - trojan.websocket = (node.trojan_transport == 'ws') and { - enabled = true, - path = node.ws_path or "/", - host = node.ws_host or (node.tls_serverName or node.address) - } or nil - trojan.shadowsocks = (node.ss_aead == "1") and { - enabled = true, - method = node.ss_aead_method or "aes_128_gcm", - password = node.ss_aead_pwd or "" - } or nil - trojan.mux = (node.smux == "1") and { - enabled = true, - concurrency = tonumber(node.mux_concurrency), - idle_timeout = tonumber(node.smux_idle_timeout) - } or nil -end -print(json.stringify(trojan, 1)) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua deleted file mode 100644 index 5f1b9f24..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua +++ /dev/null @@ -1,681 +0,0 @@ -module("luci.model.cbi.passwall.api.gen_v2ray", package.seeall) -local api = require "luci.model.cbi.passwall.api.api" - -local var = api.get_args(arg) -local node_section = var["-node"] -local proto = var["-proto"] -local proxy_way = var["-proxy_way"] -local redir_port = var["-redir_port"] -local route_only = var["-route_only"] -local local_socks_address = var["-local_socks_address"] or "0.0.0.0" -local local_socks_port = var["-local_socks_port"] -local local_socks_username = var["-local_socks_username"] -local local_socks_password = var["-local_socks_password"] -local local_http_address = var["-local_http_address"] or "0.0.0.0" -local local_http_port = var["-local_http_port"] -local local_http_username = var["-local_http_username"] -local local_http_password = var["-local_http_password"] -local dns_listen_port = var["-dns_listen_port"] -local dns_server = var["-dns_server"] -local dns_tcp_server = var["-dns_tcp_server"] -local dns_cache = var["-dns_cache"] -local doh_url = var["-doh_url"] -local doh_host = var["-doh_host"] -local dns_client_ip = var["-dns_client_ip"] -local dns_query_strategy = var["-dns_query_strategy"] -local dns_socks_address = var["-dns_socks_address"] -local dns_socks_port = var["-dns_socks_port"] -local dns_fakedns = var["-dns_fakedns"] -local loglevel = var["-loglevel"] or "warning" -local network = proto -local new_port - -local uci = api.uci -local sys = api.sys -local jsonc = api.jsonc -local appname = api.appname -local dns = nil -local fakedns = nil -local inbounds = {} -local outbounds = {} -local routing = nil - -local function get_new_port() - if new_port then - new_port = tonumber(sys.exec(string.format("echo -n $(/usr/share/%s/app.sh get_new_port %s tcp)", appname, new_port + 1))) - else - new_port = tonumber(sys.exec(string.format("echo -n $(/usr/share/%s/app.sh get_new_port auto tcp)", appname))) - end - return new_port -end - -function gen_outbound(node, tag, proxy_table) - local proxy = 0 - local proxy_tag = "nil" - if proxy_table ~= nil and type(proxy_table) == "table" then - proxy = proxy_table.proxy or 0 - proxy_tag = proxy_table.tag or "nil" - end - local result = nil - if node and node ~= "nil" then - local node_id = node[".name"] - if tag == nil then - tag = node_id - end - - if node.type == "V2ray" or node.type == "Xray" then - proxy = 0 - if proxy_tag ~= "nil" then - node.proxySettings = { - tag = proxy_tag, - transportLayer = true - } - end - end - - if node.type ~= "V2ray" and node.type ~= "Xray" then - if node.type == "Socks" then - node.protocol = "socks" - node.transport = "tcp" - else - local node_type = proto or "socks" - local relay_port = node.port - new_port = get_new_port() - node.port = new_port - sys.call(string.format('/usr/share/%s/app.sh run_socks "%s"> /dev/null', - appname, - string.format("flag=%s node=%s bind=%s socks_port=%s config_file=%s relay_port=%s", - new_port, --flag - node_id, --node - "127.0.0.1", --bind - new_port, --socks port - string.format("/tmp/etc/%s/v2_%s_%s_%s.json", appname, node_type, node_id, new_port), --config file - (proxy == 1 and proxy_tag ~= "nil" and relay_port) and tostring(relay_port) or "" --relay port - ) - ) - ) - node.protocol = "socks" - node.transport = "tcp" - node.address = "127.0.0.1" - end - node.stream_security = "none" - else - if node.tls and node.tls == "1" then - node.stream_security = "tls" - if node.type == "Xray" and node.xtls and node.xtls == "1" then - node.stream_security = "xtls" - end - end - end - - result = { - _flag_tag = node_id, - _flag_proxy = proxy, - _flag_proxy_tag = proxy_tag, - tag = tag, - proxySettings = node.proxySettings or nil, - protocol = node.protocol, - mux = (node.stream_security ~= "xtls") and { - enabled = (node.mux == "1") and true or false, - concurrency = (node.mux_concurrency) and tonumber(node.mux_concurrency) or 8 - } or nil, - -- 底层传输配置 - streamSettings = (node.protocol == "vmess" or node.protocol == "vless" or node.protocol == "socks" or node.protocol == "shadowsocks" or node.protocol == "trojan") and { - network = node.transport, - security = node.stream_security, - xtlsSettings = (node.stream_security == "xtls") and { - serverName = node.tls_serverName, - allowInsecure = (node.tls_allowInsecure == "1") and true or false - } or nil, - tlsSettings = (node.stream_security == "tls") and { - serverName = node.tls_serverName, - allowInsecure = (node.tls_allowInsecure == "1") and true or false, - fingerprint = (node.type == "Xray" and node.fingerprint and node.fingerprint ~= "disable") and node.fingerprint or nil - } or nil, - tcpSettings = (node.transport == "tcp" and node.protocol ~= "socks") and { - header = { - type = node.tcp_guise or "none", - request = (node.tcp_guise == "http") and { - path = node.tcp_guise_http_path or {"/"}, - headers = { - Host = node.tcp_guise_http_host or {} - } - } or nil - } - } or nil, - kcpSettings = (node.transport == "mkcp") and { - mtu = tonumber(node.mkcp_mtu), - tti = tonumber(node.mkcp_tti), - uplinkCapacity = tonumber(node.mkcp_uplinkCapacity), - downlinkCapacity = tonumber(node.mkcp_downlinkCapacity), - congestion = (node.mkcp_congestion == "1") and true or false, - readBufferSize = tonumber(node.mkcp_readBufferSize), - writeBufferSize = tonumber(node.mkcp_writeBufferSize), - seed = (node.mkcp_seed and node.mkcp_seed ~= "") and node.mkcp_seed or nil, - header = {type = node.mkcp_guise} - } or nil, - wsSettings = (node.transport == "ws") and { - path = node.ws_path or "", - headers = (node.ws_host ~= nil) and - {Host = node.ws_host} or nil, - maxEarlyData = tonumber(node.ws_maxEarlyData) or nil - } or nil, - httpSettings = (node.transport == "h2") and { - path = node.h2_path, - host = node.h2_host, - read_idle_timeout = tonumber(node.h2_read_idle_timeout) or nil, - health_check_timeout = tonumber(node.h2_health_check_timeout) or nil - } or nil, - dsSettings = (node.transport == "ds") and - {path = node.ds_path} or nil, - quicSettings = (node.transport == "quic") and { - security = node.quic_security, - key = node.quic_key, - header = {type = node.quic_guise} - } or nil, - grpcSettings = (node.transport == "grpc") and { - serviceName = node.grpc_serviceName, - multiMode = (node.grpc_mode == "multi") and true or nil, - idle_timeout = tonumber(node.grpc_idle_timeout) or nil, - health_check_timeout = tonumber(node.grpc_health_check_timeout) or nil, - permit_without_stream = (node.grpc_permit_without_stream == "1") and true or nil, - initial_windows_size = tonumber(node.grpc_initial_windows_size) or nil - } or nil - } or nil, - settings = { - vnext = (node.protocol == "vmess" or node.protocol == "vless") and { - { - address = node.address, - port = tonumber(node.port), - users = { - { - id = node.uuid, - level = 0, - security = (node.protocol == "vmess") and node.security or nil, - encryption = node.encryption or "none", - flow = node.flow or nil - } - } - } - } or nil, - servers = (node.protocol == "socks" or node.protocol == "http" or node.protocol == "shadowsocks" or node.protocol == "trojan") and { - { - address = node.address, - port = tonumber(node.port), - method = node.method or nil, - flow = node.flow or nil, - ivCheck = (node.iv_check == "1") and true or false, - password = node.password or "", - users = (node.username and node.password) and { - { - user = node.username, - pass = node.password - } - } or nil - } - } or nil - } - } - local alpn = {} - if node.alpn and node.alpn ~= "default" then - string.gsub(node.alpn, '[^' .. "," .. ']+', function(w) - table.insert(alpn, w) - end) - end - if alpn and #alpn > 0 then - if result.streamSettings.tlsSettings then - result.streamSettings.tlsSettings.alpn = alpn - end - if result.streamSettings.xtlsSettings then - result.streamSettings.xtlsSettings.alpn = alpn - end - end - end - return result -end - -if node_section then - local node = uci:get_all(appname, node_section) - if local_socks_port then - local inbound = { - listen = local_socks_address, - port = tonumber(local_socks_port), - protocol = "socks", - settings = {auth = "noauth", udp = true}, - sniffing = {enabled = true, destOverride = {"http", "tls"}} - } - if local_socks_username and local_socks_password and local_socks_username ~= "" and local_socks_password ~= "" then - inbound.settings.auth = "password" - inbound.settings.accounts = { - { - user = local_socks_username, - pass = local_socks_password - } - } - end - table.insert(inbounds, inbound) - network = "tcp,udp" - end - if local_http_port then - local inbound = { - listen = local_http_address, - port = tonumber(local_http_port), - protocol = "http", - settings = {allowTransparent = false} - } - if local_http_username and local_http_password and local_http_username ~= "" and local_http_password ~= "" then - inbound.settings.accounts = { - { - user = local_http_username, - pass = local_http_password - } - } - end - table.insert(inbounds, inbound) - end - - if redir_port then - table.insert(inbounds, { - port = tonumber(redir_port), - protocol = "dokodemo-door", - settings = {network = proto, followRedirect = true}, - streamSettings = {sockopt = {tproxy = proxy_way}}, - sniffing = {enabled = true, destOverride = {"http", "tls", (dns_fakedns) and "fakedns"}, metadataOnly = false, RouteOnly = route_only and true or nil} - }) - end - - local up_trust_doh = uci:get(appname, "@global[0]", "up_trust_doh") - if up_trust_doh then - local t = {} - string.gsub(up_trust_doh, '[^' .. "," .. ']+', function (w) - table.insert(t, w) - end) - if #t > 1 then - local host = sys.exec("echo -n $(echo " .. t[1] .. " | sed 's/https:\\/\\///g' | awk -F ':' '{print $1}' | awk -F '/' '{print $1}')") - dns = { - hosts = { - [host] = t[2] - } - } - end - end - - if node.protocol == "_shunt" then - table.insert(outbounds, { - protocol = "freedom", - tag = "direct", - settings = { - domainStrategy = "UseIPv4" - }, - streamSettings = { - sockopt = { - mark = 255 - } - } - }) - table.insert(outbounds, { - protocol = "blackhole", - tag = "blackhole" - }) - local rules = {} - - local default_node_id = node.default_node or "_direct" - local default_outboundTag - if default_node_id == "_direct" then - default_outboundTag = "direct" - elseif default_node_id == "_blackhole" then - default_outboundTag = "blackhole" - else - local default_node = uci:get_all(appname, default_node_id) - local main_node_id = node.main_node or "nil" - local proxy = 0 - local proxy_tag - if main_node_id ~= "nil" then - local main_node = uci:get_all(appname, main_node_id) - if main_node and api.is_normal_node(main_node) and main_node_id ~= default_node_id then - local main_node_outbound = gen_outbound(main_node, "main") - if main_node_outbound then - table.insert(outbounds, main_node_outbound) - proxy = 1 - proxy_tag = "main" - if default_node.type ~= "V2ray" and default_node.type ~= "Xray" then - proxy_tag = nil - new_port = get_new_port() - table.insert(inbounds, { - tag = "proxy_default", - listen = "127.0.0.1", - port = new_port, - protocol = "dokodemo-door", - settings = {network = "tcp,udp", address = default_node.address, port = tonumber(default_node.port)} - }) - if default_node.tls_serverName == nil then - default_node.tls_serverName = default_node.address - end - default_node.address = "127.0.0.1" - default_node.port = new_port - table.insert(rules, 1, { - type = "field", - inboundTag = {"proxy_default"}, - outboundTag = "main" - }) - end - end - end - end - if default_node and api.is_normal_node(default_node) then - local default_outbound = gen_outbound(default_node, "default", { proxy = proxy, tag = proxy_tag }) - if default_outbound then - table.insert(outbounds, default_outbound) - default_outboundTag = "default" - end - end - end - - uci:foreach(appname, "shunt_rules", function(e) - local name = e[".name"] - local _node_id = node[name] or "nil" - local proxy_tag = node[name .. "_proxy_tag"] or "nil" - local outboundTag - if _node_id == "_direct" then - outboundTag = "direct" - elseif _node_id == "_blackhole" then - outboundTag = "blackhole" - elseif _node_id == "_default" then - outboundTag = "default" - else - if _node_id ~= "nil" then - local _node = uci:get_all(appname, _node_id) - if _node and api.is_normal_node(_node) then - local new_outbound - for index, value in ipairs(outbounds) do - if value["_flag_tag"] == _node_id and value["_flag_proxy_tag"] == proxy_tag then - new_outbound = api.clone(value) - break - end - end - if new_outbound then - new_outbound["tag"] = name - table.insert(outbounds, new_outbound) - outboundTag = name - else - if _node.type ~= "V2ray" and _node.type ~= "Xray" then - if proxy_tag ~= "nil" then - new_port = get_new_port() - table.insert(inbounds, { - tag = "proxy_" .. name, - listen = "127.0.0.1", - port = new_port, - protocol = "dokodemo-door", - settings = {network = "tcp,udp", address = _node.address, port = tonumber(_node.port)} - }) - if _node.tls_serverName == nil then - _node.tls_serverName = _node.address - end - _node.address = "127.0.0.1" - _node.port = new_port - table.insert(rules, 1, { - type = "field", - inboundTag = {"proxy_" .. name}, - outboundTag = proxy_tag - }) - end - end - local _outbound = gen_outbound(_node, name, { proxy = (proxy_tag ~= "nil") and 1 or 0, tag = (proxy_tag ~= "nil") and proxy_tag or nil }) - if _outbound then - table.insert(outbounds, _outbound) - outboundTag = name - end - end - end - end - end - if outboundTag then - if outboundTag == "default" then - outboundTag = default_outboundTag - end - local protocols = nil - if e["protocol"] and e["protocol"] ~= "" then - protocols = {} - string.gsub(e["protocol"], '[^' .. " " .. ']+', function(w) - table.insert(protocols, w) - end) - end - if e.domain_list then - local _domain = {} - string.gsub(e.domain_list, '[^' .. "\r\n" .. ']+', function(w) - table.insert(_domain, w) - end) - table.insert(rules, { - type = "field", - outboundTag = outboundTag, - domain = _domain, - protocol = protocols - }) - end - if e.ip_list then - local _ip = {} - string.gsub(e.ip_list, '[^' .. "\r\n" .. ']+', function(w) - table.insert(_ip, w) - end) - table.insert(rules, { - type = "field", - outboundTag = outboundTag, - ip = _ip, - protocol = protocols - }) - end - if not e.domain_list and not e.ip_list and protocols then - table.insert(rules, { - type = "field", - outboundTag = outboundTag, - protocol = protocols - }) - end - end - end) - - if default_outboundTag then - table.insert(rules, { - type = "field", - outboundTag = default_outboundTag, - network = network - }) - end - - routing = { - domainStrategy = node.domainStrategy or "AsIs", - domainMatcher = node.domainMatcher or "hybrid", - rules = rules - } - elseif node.protocol == "_balancing" then - if node.balancing_node then - local nodes = node.balancing_node - local length = #nodes - for i = 1, length do - local node = uci:get_all(appname, nodes[i]) - local outbound = gen_outbound(node) - if outbound then table.insert(outbounds, outbound) end - end - routing = { - domainStrategy = node.domainStrategy or "AsIs", - domainMatcher = node.domainMatcher or "hybrid", - balancers = {{tag = "balancer", selector = nodes}}, - rules = { - {type = "field", network = "tcp,udp", balancerTag = "balancer"} - } - } - end - else - local outbound = gen_outbound(node) - if outbound then table.insert(outbounds, outbound) end - routing = { - domainStrategy = "AsIs", - domainMatcher = "hybrid", - rules = {} - } - end -end - -if dns_server or dns_fakedns then - table.insert(outbounds, { - protocol = "dns", - tag = "dns-out" - }) - local rules = {} - - dns = { - tag = "dns-in1", - disableCache = (dns_cache and dns_cache == "0") and true or false, - servers = { - dns_server - }, - clientIp = (dns_client_ip and dns_client_ip ~= "") and dns_client_ip or nil, - queryStrategy = (dns_query_strategy and dns_query_strategy ~= "") and dns_query_strategy or nil - } - if doh_url and doh_host then - dns.hosts = { - [doh_host] = dns_server - } - if not redir_port and not dns_socks_port then - doh_url = doh_url:gsub("https://", "https+local://") - end - dns.servers = { - doh_url - } - end - - if dns_tcp_server then - if not redir_port and not dns_socks_port then - dns_tcp_server = dns_tcp_server:gsub("tcp://", "tcp+local://") - end - dns.servers = { - dns_tcp_server - } - end - - if dns_fakedns then - fakedns = {} - fakedns[#fakedns + 1] = { - ipPool = "198.18.0.0/16", - poolSize = 65535 - } - dns_server = "1.1.1.1" - dns.servers = { - "fakedns" - } - end - - if dns_listen_port then - table.insert(inbounds, { - listen = "127.0.0.1", - port = tonumber(dns_listen_port), - protocol = "dokodemo-door", - tag = "dns-in", - settings = { - address = dns_server, - port = 53, - network = "tcp,udp" - } - }) - end - - table.insert(rules, { - type = "field", - inboundTag = { - "dns-in" - }, - outboundTag = "dns-out" - }) - - if dns_socks_address and dns_socks_port then - table.insert(outbounds, 1, { - tag = "out", - protocol = "socks", - streamSettings = { - network = "tcp", - security = "none" - }, - settings = { - servers = { - { - address = dns_socks_address, - port = tonumber(dns_socks_port) - } - } - } - }) - local outboundTag = "out" - table.insert(rules, { - type = "field", - inboundTag = { - "dns-in1" - }, - outboundTag = outboundTag - }) - end - - if node_section and (proto and proto:find("tcp")) and redir_port and not dns_fakedns then - local outboundTag = node_section - local node = uci:get_all(appname, node_section) - if node.protocol == "_shunt" then - outboundTag = "default" - end - table.insert(rules, { - type = "field", - inboundTag = { - "dns-in1" - }, - outboundTag = outboundTag - }) - end - - if not routing then - routing = { - domainStrategy = "IPOnDemand", - rules = rules - } - else - for index, value in ipairs(rules) do - table.insert(routing.rules, 1, value) - end - end -end - -if inbounds or outbounds then - local config = { - log = { - -- error = string.format("/tmp/etc/%s/%s.log", appname, node[".name"]), - loglevel = loglevel - }, - -- DNS - dns = dns, - fakedns = fakedns, - -- 传入连接 - inbounds = inbounds, - -- 传出连接 - outbounds = outbounds, - -- 路由 - routing = routing, - -- 本地策略 - --[[ - policy = { - levels = { - [0] = { - handshake = 4, - connIdle = 300, - uplinkOnly = 2, - downlinkOnly = 5, - bufferSize = 10240, - statsUserUplink = false, - statsUserDownlink = false - } - }, - system = { - statsInboundUplink = false, - statsInboundDownlink = false - } - } - ]]-- - } - print(jsonc.stringify(config, 1)) -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray_proto.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray_proto.lua deleted file mode 100644 index 54c383f0..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray_proto.lua +++ /dev/null @@ -1,111 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local jsonc = api.jsonc -local inbounds = {} -local outbounds = {} -local routing = nil - -local var = api.get_args(arg) -local local_socks_address = var["-local_socks_address"] or "0.0.0.0" -local local_socks_port = var["-local_socks_port"] -local local_socks_username = var["-local_socks_username"] -local local_socks_password = var["-local_socks_password"] -local local_http_address = var["-local_http_address"] or "0.0.0.0" -local local_http_port = var["-local_http_port"] -local local_http_username = var["-local_http_username"] -local local_http_password = var["-local_http_password"] -local server_proto = var["-server_proto"] -local server_address = var["-server_address"] -local server_port = var["-server_port"] -local server_username = var["-server_username"] -local server_password = var["-server_password"] - -function gen_outbound(proto, address, port, username, password) - local result = { - protocol = proto, - streamSettings = { - network = "tcp", - security = "none" - }, - settings = { - servers = { - { - address = address, - port = tonumber(port), - users = (username and password) and { - { - user = username, - pass = password - } - } or nil - } - } - } - } - return result -end - -if local_socks_address and local_socks_port then - local inbound = { - listen = local_socks_address, - port = tonumber(local_socks_port), - protocol = "socks", - settings = { - udp = true, - auth = "noauth" - } - } - if local_socks_username and local_socks_password and local_socks_username ~= "" and local_socks_password ~= "" then - inbound.settings.auth = "password" - inbound.settings.accounts = { - { - user = local_socks_username, - pass = local_socks_password - } - } - end - table.insert(inbounds, inbound) -end - -if local_http_address and local_http_port then - local inbound = { - listen = local_http_address, - port = tonumber(local_http_port), - protocol = "http", - settings = { - allowTransparent = false - } - } - if local_http_username and local_http_password and local_http_username ~= "" and local_http_password ~= "" then - inbound.settings.accounts = { - { - user = local_http_username, - pass = local_http_password - } - } - end - table.insert(inbounds, inbound) -end - -if server_proto ~= "nil" and server_address ~= "nil" and server_port ~= "nil" then - local outbound = gen_outbound(server_proto, server_address, server_port, server_username, server_password) - if outbound then table.insert(outbounds, outbound) end -end - --- 额外传出连接 -table.insert(outbounds, { - protocol = "freedom", tag = "direct", settings = {keep = ""} -}) - -local config = { - log = { - -- error = string.format("/tmp/etc/passwall/%s.log", node[".name"]), - loglevel = "warning" - }, - -- 传入连接 - inbounds = inbounds, - -- 传出连接 - outbounds = outbounds, - -- 路由 - routing = routing -} -print(jsonc.stringify(config, 1)) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/hysteria.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/hysteria.lua deleted file mode 100644 index 2d2e3612..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/hysteria.lua +++ /dev/null @@ -1,134 +0,0 @@ -module("luci.model.cbi.passwall.api.hysteria", package.seeall) -local api = require "luci.model.cbi.passwall.api.api" -local fs = api.fs -local sys = api.sys -local util = api.util -local i18n = api.i18n - -local pre_release_url = "https://api.github.com/repos/HyNetwork/hysteria/releases?per_page=1" -local release_url = "https://api.github.com/repos/HyNetwork/hysteria/releases/latest" -local api_url = release_url -local app_path = api.get_hysteria_path() or "" - -function check_path() - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "hysteria") - } - end - return { - code = 0 - } -end - -function to_check(arch) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not arch or arch == "" then arch = api.auto_get_arch() end - - local file_tree, sub_version = api.get_file_info(arch) - - if file_tree == "" then - return { - code = 1, - error = i18n.translate("Can't determine ARCH, or ARCH not supported.") - } - end - - return api.common_to_check(api_url, api.get_hysteria_version(), "linux%-" .. file_tree .. sub_version) -end - -function to_download(url, size) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not url or url == "" then - return {code = 1, error = i18n.translate("Download url is required.")} - end - - sys.call("/bin/rm -f /tmp/hysteria_download.*") - - local tmp_file = util.trim(util.exec("mktemp -u -t hysteria_download.XXXXXX")) - - if size then - local kb1 = api.get_free_space("/tmp") - if tonumber(size) > tonumber(kb1) then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - end - - result = api.exec(api.curl, {api._unpack(api.curl_args), "-o", tmp_file, url}, nil, api.command_timeout) == 0 - - if not result then - api.exec("/bin/rm", {"-f", tmp_file}) - return { - code = 1, - error = i18n.translatef("File download failed or timed out: %s", url) - } - end - - return {code = 0, file = tmp_file} -end - -function to_move(file) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" or not fs.access(file) then - sys.call("/bin/rm -rf /tmp/hysteria_download.*") - return {code = 1, error = i18n.translate("Client file is required.")} - end - - local new_version = api.get_hysteria_version(file) - if new_version == "" then - sys.call("/bin/rm -rf /tmp/hysteria_download.*") - return { - code = 1, - error = i18n.translate("The client file is not suitable for current device.") - } - end - - local flag = sys.call('pgrep -af "passwall/.*hysteria" >/dev/null') - if flag == 0 then - sys.call("/etc/init.d/passwall stop") - end - - local old_app_size = 0 - if fs.access(app_path) then - old_app_size = api.get_file_space(app_path) - end - local new_app_size = api.get_file_space(file) - local final_dir = api.get_final_dir(app_path) - local final_dir_free_size = api.get_free_space(final_dir) - if final_dir_free_size > 0 then - final_dir_free_size = final_dir_free_size + old_app_size - if new_app_size > final_dir_free_size then - sys.call("/bin/rm -rf /tmp/hysteria_download.*") - return {code = 1, error = i18n.translatef("%s not enough space.", final_dir)} - end - end - - result = api.exec("/bin/mv", {"-f", file, app_path}, nil, api.command_timeout) == 0 - - sys.call("/bin/rm -rf /tmp/hysteria_download.*") - if flag == 0 then - sys.call("/etc/init.d/passwall restart >/dev/null 2>&1 &") - end - - if not result or not fs.access(app_path) then - return { - code = 1, - error = i18n.translatef("Can't move new file to path: %s", app_path) - } - end - - return {code = 0} -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/kcptun.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/kcptun.lua deleted file mode 100644 index 54abbda2..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/kcptun.lua +++ /dev/null @@ -1,189 +0,0 @@ -module("luci.model.cbi.passwall.api.kcptun", package.seeall) -local api = require "luci.model.cbi.passwall.api.api" -local fs = api.fs -local sys = api.sys -local util = api.util -local i18n = api.i18n - -local pre_release_url = "https://api.github.com/repos/xtaci/kcptun/releases?per_page=1" -local release_url = "https://api.github.com/repos/xtaci/kcptun/releases/latest" -local api_url = release_url -local app_path = api.get_kcptun_path() or "" - -function check_path() - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "Kcptun") - } - end - return { - code = 0 - } -end - -function to_check(arch) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not arch or arch == "" then arch = api.auto_get_arch() end - - local file_tree, sub_version = api.get_file_info(arch) - - if file_tree == "" then - return { - code = 1, - error = i18n.translate("Can't determine ARCH, or ARCH not supported.") - } - end - - return api.common_to_check(api_url, api.get_kcptun_version(), "linux%-" .. file_tree .. sub_version) -end - -function to_download(url, size) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not url or url == "" then - return {code = 1, error = i18n.translate("Download url is required.")} - end - - sys.call("/bin/rm -f /tmp/kcptun_download.*") - - local tmp_file = util.trim(util.exec("mktemp -u -t kcptun_download.XXXXXX")) - - if size then - local kb1 = api.get_free_space("/tmp") - if tonumber(size) > tonumber(kb1) then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - end - - result = api.exec(api.curl, {api._unpack(api.curl_args), "-o", tmp_file, url}, nil, api.command_timeout) == 0 - - if not result then - api.exec("/bin/rm", {"-f", tmp_file}) - return { - code = 1, - error = i18n.translatef("File download failed or timed out: %s", url) - } - end - - return {code = 0, file = tmp_file} -end - -function to_extract(file, subfix) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" or not fs.access(file) then - return {code = 1, error = i18n.translate("File path required.")} - end - - sys.call("/bin/rm -rf /tmp/kcptun_extract.*") - - local new_file_size = api.get_file_space(file) - local tmp_free_size = api.get_free_space("/tmp") - if tmp_free_size <= 0 or tmp_free_size <= new_file_size then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - - local tmp_dir = util.trim(util.exec("mktemp -d -t kcptun_extract.XXXXXX")) - - local output = {} - api.exec("/bin/tar", {"-C", tmp_dir, "-zxvf", file}, - function(chunk) output[#output + 1] = chunk end) - local files = util.split(table.concat(output)) - - api.exec("/bin/rm", {"-f", file}) - - local new_file = nil - for _, f in pairs(files) do - if f:match("client_linux_%s" % subfix) then - new_file = tmp_dir .. "/" .. util.trim(f) - break - end - end - - if not new_file then - for _, f in pairs(files) do - if f:match("client_") then - new_file = tmp_dir .. "/" .. util.trim(f) - break - end - end - end - - if not new_file then - api.exec("/bin/rm", {"-rf", tmp_dir}) - return { - code = 1, - error = i18n.translatef("Can't find client in file: %s", file) - } - end - - return {code = 0, file = new_file} -end - -function to_move(file) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" or not fs.access(file) then - sys.call("/bin/rm -rf /tmp/kcptun_extract.*") - return {code = 1, error = i18n.translate("Client file is required.")} - end - - local new_version = api.get_kcptun_version(file) - if new_version == "" then - sys.call("/bin/rm -rf /tmp/kcptun_extract.*") - return { - code = 1, - error = i18n.translate("The client file is not suitable for current device.") - } - end - - local flag = sys.call('pgrep -af "passwall/.*kcptun" >/dev/null') - if flag == 0 then - sys.call("/etc/init.d/passwall stop") - end - - local old_app_size = 0 - if fs.access(app_path) then - old_app_size = api.get_file_space(app_path) - end - local new_app_size = api.get_file_space(file) - local final_dir = api.get_final_dir(app_path) - local final_dir_free_size = api.get_free_space(final_dir) - if final_dir_free_size > 0 then - final_dir_free_size = final_dir_free_size + old_app_size - if new_app_size > final_dir_free_size then - sys.call("/bin/rm -rf /tmp/kcptun_extract.*") - return {code = 1, error = i18n.translatef("%s not enough space.", final_dir)} - end - end - - result = api.exec("/bin/mv", {"-f", file, app_path}, nil, api.command_timeout) == 0 - - sys.call("/bin/rm -rf /tmp/kcptun_extract.*") - if flag == 0 then - sys.call("/etc/init.d/passwall restart >/dev/null 2>&1 &") - end - - if not result or not fs.access(app_path) then - return { - code = 1, - error = i18n.translatef("Can't move new file to path: %s", app_path) - } - end - - return {code = 0} -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/trojan_go.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/trojan_go.lua deleted file mode 100644 index 4f8b4849..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/trojan_go.lua +++ /dev/null @@ -1,183 +0,0 @@ -module("luci.model.cbi.passwall.api.trojan_go", package.seeall) -local api = require "luci.model.cbi.passwall.api.api" -local fs = api.fs -local sys = api.sys -local util = api.util -local i18n = api.i18n - -local pre_release_url = "https://api.github.com/repos/p4gefau1t/trojan-go/releases?per_page=1" -local release_url = "https://api.github.com/repos/p4gefau1t/trojan-go/releases/latest" -local api_url = release_url -local app_path = api.get_trojan_go_path() or "" - -function check_path() - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "Trojan-GO") - } - end - return { - code = 0 - } -end - -function to_check(arch) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not arch or arch == "" then arch = api.auto_get_arch() end - - local file_tree, sub_version = api.get_file_info(arch) - - if file_tree == "" then - return { - code = 1, - error = i18n.translate("Can't determine ARCH, or ARCH not supported.") - } - end - - if file_tree == "mips" then file_tree = "mips%-hardfloat" end - if file_tree == "mipsle" then file_tree = "mipsle%-hardfloat" end - if file_tree == "arm64" then - file_tree = "armv8" - else - if sub_version and sub_version:match("^[5-8]$") then file_tree = file_tree .. "v" .. sub_version end - end - - return api.common_to_check(api_url, api.get_trojan_go_version(), "linux%-" .. file_tree .. "%.zip") -end - -function to_download(url, size) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not url or url == "" then - return {code = 1, error = i18n.translate("Download url is required.")} - end - - sys.call("/bin/rm -f /tmp/trojan-go_download.*") - - local tmp_file = util.trim(util.exec("mktemp -u -t trojan-go_download.XXXXXX")) - - if size then - local kb1 = api.get_free_space("/tmp") - if tonumber(size) > tonumber(kb1) then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - end - - result = api.exec(api.curl, {api._unpack(api.curl_args), "-o", tmp_file, url}, nil, api.command_timeout) == 0 - - if not result then - api.exec("/bin/rm", {"-f", tmp_file}) - return { - code = 1, - error = i18n.translatef("File download failed or timed out: %s", url) - } - end - - return {code = 0, file = tmp_file} -end - -function to_extract(file, subfix) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" or not fs.access(file) then - return {code = 1, error = i18n.translate("File path required.")} - end - - if sys.exec("echo -n $(opkg list-installed | grep -c unzip)") ~= "1" then - api.exec("/bin/rm", {"-f", file}) - return { - code = 1, - error = i18n.translate("Not installed unzip, Can't unzip!") - } - end - - sys.call("/bin/rm -rf /tmp/trojan-go_extract.*") - - local new_file_size = api.get_file_space(file) - local tmp_free_size = api.get_free_space("/tmp") - if tmp_free_size <= 0 or tmp_free_size <= new_file_size then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - - local tmp_dir = util.trim(util.exec("mktemp -d -t trojan-go_extract.XXXXXX")) - - local output = {} - api.exec("/usr/bin/unzip", {"-o", file, "-d", tmp_dir}, - function(chunk) output[#output + 1] = chunk end) - - local files = util.split(table.concat(output)) - - api.exec("/bin/rm", {"-f", file}) - - return {code = 0, file = tmp_dir} -end - -function to_move(file) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" then - sys.call("/bin/rm -rf /tmp/trojan-go_extract.*") - return {code = 1, error = i18n.translate("Client file is required.")} - end - - local bin_path = file .. "/trojan-go" - - local new_version = api.get_trojan_go_version(bin_path) - if new_version == "" then - sys.call("/bin/rm -rf /tmp/trojan-go_extract.*") - return { - code = 1, - error = i18n.translate("The client file is not suitable for current device.") - } - end - - local flag = sys.call('pgrep -af "passwall/.*trojan-go" >/dev/null') - if flag == 0 then - sys.call("/etc/init.d/passwall stop") - end - - local old_app_size = 0 - if fs.access(app_path) then - old_app_size = api.get_file_space(app_path) - end - local new_app_size = api.get_file_space(bin_path) - local final_dir = api.get_final_dir(app_path) - local final_dir_free_size = api.get_free_space(final_dir) - if final_dir_free_size > 0 then - final_dir_free_size = final_dir_free_size + old_app_size - if new_app_size > final_dir_free_size then - sys.call("/bin/rm -rf /tmp/trojan-go_extract.*") - return {code = 1, error = i18n.translatef("%s not enough space.", final_dir)} - end - end - - result = api.exec("/bin/mv", { "-f", bin_path, app_path }, nil, api.command_timeout) == 0 - - sys.call("/bin/rm -rf /tmp/trojan-go_extract.*") - if flag == 0 then - sys.call("/etc/init.d/passwall restart >/dev/null 2>&1 &") - end - - if not result or not fs.access(app_path) then - return { - code = 1, - error = i18n.translatef("Can't move new file to path: %s", app_path) - } - end - - return {code = 0} -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/v2ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/v2ray.lua deleted file mode 100644 index c00bf146..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/v2ray.lua +++ /dev/null @@ -1,181 +0,0 @@ -module("luci.model.cbi.passwall.api.v2ray", package.seeall) -local api = require "luci.model.cbi.passwall.api.api" -local fs = api.fs -local sys = api.sys -local util = api.util -local i18n = api.i18n - -local pre_release_url = "https://api.github.com/repos/v2fly/v2ray-core/releases?per_page=1" -local release_url = "https://api.github.com/repos/v2fly/v2ray-core/releases/latest" -local api_url = release_url -local app_path = api.get_v2ray_path() or "" - -function check_path() - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "V2ray") - } - end - return { - code = 0 - } -end - -function to_check(arch) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not arch or arch == "" then arch = api.auto_get_arch() end - - local file_tree, sub_version = api.get_file_info(arch) - - if file_tree == "" then - return { - code = 1, - error = i18n.translate("Can't determine ARCH, or ARCH not supported.") - } - end - - if file_tree == "amd64" then file_tree = "64" end - if file_tree == "386" then file_tree = "32" end - if file_tree == "mipsle" then file_tree = "mips32le" end - if file_tree == "mips" then file_tree = "mips32" end - if file_tree == "arm" then file_tree = "arm32" end - - return api.common_to_check(api_url, api.get_v2ray_version(), "linux%-" .. file_tree .. (sub_version ~= "" and ".+" .. sub_version or "")) -end - -function to_download(url, size) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not url or url == "" then - return {code = 1, error = i18n.translate("Download url is required.")} - end - - sys.call("/bin/rm -f /tmp/v2ray_download.*") - - local tmp_file = util.trim(util.exec("mktemp -u -t v2ray_download.XXXXXX")) - - if size then - local kb1 = api.get_free_space("/tmp") - if tonumber(size) > tonumber(kb1) then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - end - - result = api.exec(api.curl, {api._unpack(api.curl_args), "-o", tmp_file, url}, nil, api.command_timeout) == 0 - - if not result then - api.exec("/bin/rm", {"-f", tmp_file}) - return { - code = 1, - error = i18n.translatef("File download failed or timed out: %s", url) - } - end - - return {code = 0, file = tmp_file} -end - -function to_extract(file, subfix) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" or not fs.access(file) then - return {code = 1, error = i18n.translate("File path required.")} - end - - if sys.exec("echo -n $(opkg list-installed | grep -c unzip)") ~= "1" then - api.exec("/bin/rm", {"-f", file}) - return { - code = 1, - error = i18n.translate("Not installed unzip, Can't unzip!") - } - end - - sys.call("/bin/rm -rf /tmp/v2ray_extract.*") - - local new_file_size = api.get_file_space(file) - local tmp_free_size = api.get_free_space("/tmp") - if tmp_free_size <= 0 or tmp_free_size <= new_file_size then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - - local tmp_dir = util.trim(util.exec("mktemp -d -t v2ray_extract.XXXXXX")) - - local output = {} - api.exec("/usr/bin/unzip", {"-o", file, "v2ray", "-d", tmp_dir}, - function(chunk) output[#output + 1] = chunk end) - - local files = util.split(table.concat(output)) - - api.exec("/bin/rm", {"-f", file}) - - return {code = 0, file = tmp_dir} -end - -function to_move(file) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" then - sys.call("/bin/rm -rf /tmp/v2ray_extract.*") - return {code = 1, error = i18n.translate("Client file is required.")} - end - - local bin_path = file .. "/v2ray" - - local new_version = api.get_v2ray_version(bin_path) - if new_version == "" then - sys.call("/bin/rm -rf /tmp/v2ray_extract.*") - return { - code = 1, - error = i18n.translate("The client file is not suitable for current device.") - } - end - - local flag = sys.call('pgrep -af "passwall/.*v2ray" >/dev/null') - if flag == 0 then - sys.call("/etc/init.d/passwall stop") - end - - local old_app_size = 0 - if fs.access(app_path) then - old_app_size = api.get_file_space(app_path) - end - local new_app_size = api.get_file_space(bin_path) - local final_dir = api.get_final_dir(app_path) - local final_dir_free_size = api.get_free_space(final_dir) - if final_dir_free_size > 0 then - final_dir_free_size = final_dir_free_size + old_app_size - if new_app_size > final_dir_free_size then - sys.call("/bin/rm -rf /tmp/v2ray_extract.*") - return {code = 1, error = i18n.translatef("%s not enough space.", final_dir)} - end - end - - result = api.exec("/bin/mv", { "-f", bin_path, app_path }, nil, api.command_timeout) == 0 - - sys.call("/bin/rm -rf /tmp/v2ray_extract.*") - if flag == 0 then - sys.call("/etc/init.d/passwall restart >/dev/null 2>&1 &") - end - - if not result or not fs.access(app_path) then - return { - code = 1, - error = i18n.translatef("Can't move new file to path: %s", app_path) - } - end - - return {code = 0} -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/xray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/xray.lua deleted file mode 100644 index d56ab29f..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/xray.lua +++ /dev/null @@ -1,181 +0,0 @@ -module("luci.model.cbi.passwall.api.xray", package.seeall) -local api = require "luci.model.cbi.passwall.api.api" -local fs = api.fs -local sys = api.sys -local util = api.util -local i18n = api.i18n - -local pre_release_url = "https://api.github.com/repos/XTLS/Xray-core/releases?per_page=1" -local release_url = "https://api.github.com/repos/XTLS/Xray-core/releases/latest" -local api_url = release_url -local app_path = api.get_xray_path() or "" - -function check_path() - if app_path == "" then - return { - code = 1, - error = i18n.translatef("You did not fill in the %s path. Please save and apply then update manually.", "Xray") - } - end - return { - code = 0 - } -end - -function to_check(arch) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not arch or arch == "" then arch = api.auto_get_arch() end - - local file_tree, sub_version = api.get_file_info(arch) - - if file_tree == "" then - return { - code = 1, - error = i18n.translate("Can't determine ARCH, or ARCH not supported.") - } - end - - if file_tree == "amd64" then file_tree = "64" end - if file_tree == "386" then file_tree = "32" end - if file_tree == "mipsle" then file_tree = "mips32le" end - if file_tree == "mips" then file_tree = "mips32" end - if file_tree == "arm" then file_tree = "arm32" end - - return api.common_to_check(api_url, api.get_xray_version(), "linux%-" .. file_tree .. (sub_version ~= "" and ".+" .. sub_version or "")) -end - -function to_download(url, size) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not url or url == "" then - return {code = 1, error = i18n.translate("Download url is required.")} - end - - sys.call("/bin/rm -f /tmp/xray_download.*") - - local tmp_file = util.trim(util.exec("mktemp -u -t xray_download.XXXXXX")) - - if size then - local kb1 = api.get_free_space("/tmp") - if tonumber(size) > tonumber(kb1) then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - end - - result = api.exec(api.curl, {api._unpack(api.curl_args), "-o", tmp_file, url}, nil, api.command_timeout) == 0 - - if not result then - api.exec("/bin/rm", {"-f", tmp_file}) - return { - code = 1, - error = i18n.translatef("File download failed or timed out: %s", url) - } - end - - return {code = 0, file = tmp_file} -end - -function to_extract(file, subfix) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" or not fs.access(file) then - return {code = 1, error = i18n.translate("File path required.")} - end - - if sys.exec("echo -n $(opkg list-installed | grep -c unzip)") ~= "1" then - api.exec("/bin/rm", {"-f", file}) - return { - code = 1, - error = i18n.translate("Not installed unzip, Can't unzip!") - } - end - - sys.call("/bin/rm -rf /tmp/xray_extract.*") - - local new_file_size = api.get_file_space(file) - local tmp_free_size = api.get_free_space("/tmp") - if tmp_free_size <= 0 or tmp_free_size <= new_file_size then - return {code = 1, error = i18n.translatef("%s not enough space.", "/tmp")} - end - - local tmp_dir = util.trim(util.exec("mktemp -d -t xray_extract.XXXXXX")) - - local output = {} - api.exec("/usr/bin/unzip", {"-o", file, "xray", "-d", tmp_dir}, - function(chunk) output[#output + 1] = chunk end) - - local files = util.split(table.concat(output)) - - api.exec("/bin/rm", {"-f", file}) - - return {code = 0, file = tmp_dir} -end - -function to_move(file) - local result = check_path() - if result.code ~= 0 then - return result - end - - if not file or file == "" then - sys.call("/bin/rm -rf /tmp/xray_extract.*") - return {code = 1, error = i18n.translate("Client file is required.")} - end - - local bin_path = file .. "/xray" - - local new_version = api.get_xray_version(bin_path) - if new_version == "" then - sys.call("/bin/rm -rf /tmp/xray_extract.*") - return { - code = 1, - error = i18n.translate("The client file is not suitable for current device.") - } - end - - local flag = sys.call('pgrep -af "passwall/.*xray" >/dev/null') - if flag == 0 then - sys.call("/etc/init.d/passwall stop") - end - - local old_app_size = 0 - if fs.access(app_path) then - old_app_size = api.get_file_space(app_path) - end - local new_app_size = api.get_file_space(bin_path) - local final_dir = api.get_final_dir(app_path) - local final_dir_free_size = api.get_free_space(final_dir) - if final_dir_free_size > 0 then - final_dir_free_size = final_dir_free_size + old_app_size - if new_app_size > final_dir_free_size then - sys.call("/bin/rm -rf /tmp/xray_extract.*") - return {code = 1, error = i18n.translatef("%s not enough space.", final_dir)} - end - end - - result = api.exec("/bin/mv", { "-f", bin_path, app_path }, nil, api.command_timeout) == 0 - - sys.call("/bin/rm -rf /tmp/xray_extract.*") - if flag == 0 then - sys.call("/etc/init.d/passwall restart >/dev/null 2>&1 &") - end - - if not result or not fs.access(app_path) then - return { - code = 1, - error = i18n.translatef("Can't move new file to path: %s", app_path) - } - end - - return {code = 0} -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl.lua deleted file mode 100644 index 4a9dd675..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl.lua +++ /dev/null @@ -1,119 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local sys = api.sys -local has_chnlist = api.fs.access("/usr/share/passwall/rules/chnlist") - -m = Map(appname) - -local global_proxy_mode = (m:get("@global[0]", "tcp_proxy_mode") or "") .. (m:get("@global[0]", "udp_proxy_mode") or "") - --- [[ ACLs Settings ]]-- -s = m:section(TypedSection, "acl_rule", translate("ACLs"), "" .. translate("ACLs is a tools which used to designate specific IP proxy mode.") .. "") -s.template = "cbi/tblsection" -s.sortable = true -s.anonymous = true -s.addremove = true -s.extedit = api.url("acl_config", "%s") -function s.create(e, t) - t = TypedSection.create(e, t) - luci.http.redirect(e.extedit:format(t)) -end - ----- Enable -o = s:option(Flag, "enabled", translate("Enable")) -o.default = 1 -o.rmempty = false - ----- Remarks -o = s:option(Value, "remarks", translate("Remarks")) -o.rmempty = true - -local mac_t = {} -sys.net.mac_hints(function(e, t) - mac_t[e] = { - ip = t, - mac = e - } -end) - -o = s:option(DummyValue, "sources", translate("Source")) -o.rawhtml = true -o.cfgvalue = function(t, n) - local e = '' - local v = Value.cfgvalue(t, n) or '' - string.gsub(v, '[^' .. " " .. ']+', function(w) - local a = w - if mac_t[w] then - a = a .. ' (' .. mac_t[w].ip .. ')' - end - if #e > 0 then - e = e .. "
" - end - e = e .. a - end) - return e -end - ----- TCP Proxy Mode -tcp_proxy_mode = s:option(ListValue, "tcp_proxy_mode", translatef("%s Proxy Mode", "TCP")) -tcp_proxy_mode.default = "default" -tcp_proxy_mode.rmempty = false -tcp_proxy_mode:value("default", translate("Default")) -tcp_proxy_mode:value("disable", translate("No Proxy")) -tcp_proxy_mode:value("global", translate("Global Proxy")) -if has_chnlist and global_proxy_mode:find("returnhome") then - tcp_proxy_mode:value("returnhome", translate("China List")) -else - tcp_proxy_mode:value("gfwlist", translate("GFW List")) - tcp_proxy_mode:value("chnroute", translate("Not China List")) -end -tcp_proxy_mode:value("direct/proxy", translate("Only use direct/proxy list")) - ----- UDP Proxy Mode -udp_proxy_mode = s:option(ListValue, "udp_proxy_mode", translatef("%s Proxy Mode", "UDP")) -udp_proxy_mode.default = "default" -udp_proxy_mode.rmempty = false -udp_proxy_mode:value("default", translate("Default")) -udp_proxy_mode:value("disable", translate("No Proxy")) -udp_proxy_mode:value("global", translate("Global Proxy")) -if has_chnlist and global_proxy_mode:find("returnhome") then - udp_proxy_mode:value("returnhome", translate("China List")) -else - udp_proxy_mode:value("gfwlist", translate("GFW List")) - udp_proxy_mode:value("chnroute", translate("Not China List")) -end -udp_proxy_mode:value("direct/proxy", translate("Only use direct/proxy list")) - ---[[ ----- TCP No Redir Ports -o = s:option(Value, "tcp_no_redir_ports", translate("TCP No Redir Ports")) -o.default = "default" -o:value("disable", translate("No patterns are used")) -o:value("default", translate("Default")) -o:value("1:65535", translate("All")) - ----- UDP No Redir Ports -o = s:option(Value, "udp_no_redir_ports", translate("UDP No Redir Ports")) -o.default = "default" -o:value("disable", translate("No patterns are used")) -o:value("default", translate("Default")) -o:value("1:65535", translate("All")) - ----- TCP Redir Ports -o = s:option(Value, "tcp_redir_ports", translate("TCP Redir Ports")) -o.default = "default" -o:value("default", translate("Default")) -o:value("1:65535", translate("All")) -o:value("80,443", "80,443") -o:value("80:65535", "80 " .. translate("or more")) -o:value("1:443", "443 " .. translate("or less")) - ----- UDP Redir Ports -o = s:option(Value, "udp_redir_ports", translate("UDP Redir Ports")) -o.default = "default" -o:value("default", translate("Default")) -o:value("1:65535", translate("All")) -o:value("53", "53") -]]-- - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua deleted file mode 100644 index bee18824..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua +++ /dev/null @@ -1,291 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local sys = api.sys -local has_v2ray = api.is_finded("v2ray") -local has_xray = api.is_finded("xray") -local has_chnlist = api.fs.access("/usr/share/passwall/rules/chnlist") - -m = Map(appname) - -local nodes_table = {} -for k, e in ipairs(api.get_valid_nodes()) do - nodes_table[#nodes_table + 1] = e -end - -local global_proxy_mode = (m:get("@global[0]", "tcp_proxy_mode") or "") .. (m:get("@global[0]", "udp_proxy_mode") or "") - -local dynamicList_write = function(self, section, value) - local t = {} - local t2 = {} - if type(value) == "table" then - local x - for _, x in ipairs(value) do - if x and #x > 0 then - if not t2[x] then - t2[x] = x - t[#t+1] = x - end - end - end - else - t = { value } - end - t = table.concat(t, " ") - return DynamicList.write(self, section, t) -end - --- [[ ACLs Settings ]]-- -s = m:section(NamedSection, arg[1], translate("ACLs"), translate("ACLs")) -s.addremove = false -s.dynamic = false - ----- Enable -o = s:option(Flag, "enabled", translate("Enable")) -o.default = 1 -o.rmempty = false - ----- Remarks -o = s:option(Value, "remarks", translate("Remarks")) -o.default = arg[1] -o.rmempty = true - -local mac_t = {} -sys.net.mac_hints(function(e, t) - mac_t[#mac_t + 1] = { - ip = t, - mac = e - } -end) -table.sort(mac_t, function(a,b) - if #a.ip < #b.ip then - return true - elseif #a.ip == #b.ip then - if a.ip < b.ip then - return true - else - return #a.ip < #b.ip - end - end - return false -end) - ----- Source -sources = s:option(DynamicList, "sources", translate("Source")) -sources.description = "
  • " .. translate("Example:") -.. "
  • " .. translate("MAC") .. ": 00:00:00:FF:FF:FF" -.. "
  • " .. translate("IP") .. ": 192.168.1.100" -.. "
  • " .. translate("IP CIDR") .. ": 192.168.1.0/24" -.. "
  • " .. translate("IP range") .. ": 192.168.1.100-192.168.1.200" -.. "
  • " .. translate("IPSet") .. ": ipset:lanlist" -.. "
" -sources.cast = "string" -for _, key in pairs(mac_t) do - sources:value(key.mac, "%s (%s)" % {key.mac, key.ip}) -end -sources.cfgvalue = function(self, section) - local value - if self.tag_error[section] then - value = self:formvalue(section) - else - value = self.map:get(section, self.option) - if type(value) == "string" then - local value2 = {} - string.gsub(value, '[^' .. " " .. ']+', function(w) table.insert(value2, w) end) - value = value2 - end - end - return value -end -sources.validate = function(self, value, t) - local err = {} - for _, v in ipairs(value) do - local flag = false - if v:find("ipset:") and v:find("ipset:") == 1 then - local ipset = v:gsub("ipset:", "") - if ipset and ipset ~= "" then - flag = true - end - end - - if flag == false and datatypes.macaddr(v) then - flag = true - end - - if flag == false and datatypes.ip4addr(v) then - flag = true - end - - if flag == false and api.iprange(v) then - flag = true - end - - if flag == false then - err[#err + 1] = v - end - end - - if #err > 0 then - self:add_error(t, "invalid", translate("Not true format, please re-enter!")) - for _, v in ipairs(err) do - self:add_error(t, "invalid", v) - end - end - - return value -end -sources.write = dynamicList_write - ----- TCP Proxy Mode -tcp_proxy_mode = s:option(ListValue, "tcp_proxy_mode", translatef("%s Proxy Mode", "TCP")) -tcp_proxy_mode.default = "default" -tcp_proxy_mode.rmempty = false -tcp_proxy_mode:value("default", translate("Default")) -tcp_proxy_mode:value("disable", translate("No Proxy")) -tcp_proxy_mode:value("global", translate("Global Proxy")) -if has_chnlist and global_proxy_mode:find("returnhome") then - tcp_proxy_mode:value("returnhome", translate("China List")) -else - tcp_proxy_mode:value("gfwlist", translate("GFW List")) - tcp_proxy_mode:value("chnroute", translate("Not China List")) -end -tcp_proxy_mode:value("direct/proxy", translate("Only use direct/proxy list")) - ----- UDP Proxy Mode -udp_proxy_mode = s:option(ListValue, "udp_proxy_mode", translatef("%s Proxy Mode", "UDP")) -udp_proxy_mode.default = "default" -udp_proxy_mode.rmempty = false -udp_proxy_mode:value("default", translate("Default")) -udp_proxy_mode:value("disable", translate("No Proxy")) -udp_proxy_mode:value("global", translate("Global Proxy")) -if has_chnlist and global_proxy_mode:find("returnhome") then - udp_proxy_mode:value("returnhome", translate("China List")) -else - udp_proxy_mode:value("gfwlist", translate("GFW List")) - udp_proxy_mode:value("chnroute", translate("Not China List")) -end -udp_proxy_mode:value("direct/proxy", translate("Only use direct/proxy list")) - ----- TCP No Redir Ports -o = s:option(Value, "tcp_no_redir_ports", translate("TCP No Redir Ports")) -o.default = "default" -o:value("disable", translate("No patterns are used")) -o:value("default", translate("Default")) -o:value("1:65535", translate("All")) - ----- UDP No Redir Ports -o = s:option(Value, "udp_no_redir_ports", translate("UDP No Redir Ports")) -o.default = "default" -o:value("disable", translate("No patterns are used")) -o:value("default", translate("Default")) -o:value("1:65535", translate("All")) - ----- TCP Redir Ports -o = s:option(Value, "tcp_redir_ports", translate("TCP Redir Ports")) -o.default = "default" -o:value("default", translate("Default")) -o:value("1:65535", translate("All")) -o:value("80,443", "80,443") -o:value("80:65535", "80 " .. translate("or more")) -o:value("1:443", "443 " .. translate("or less")) - ----- UDP Redir Ports -o = s:option(Value, "udp_redir_ports", translate("UDP Redir Ports")) -o.default = "default" -o:value("default", translate("Default")) -o:value("1:65535", translate("All")) -o:value("53", "53") - -tcp_node = s:option(ListValue, "tcp_node", "" .. translate("TCP Node") .. "") -tcp_node.default = "default" -tcp_node:value("default", translate("Default")) - -udp_node = s:option(ListValue, "udp_node", "" .. translate("UDP Node") .. "") -udp_node.default = "default" -udp_node:value("default", translate("Default")) -udp_node:value("tcp", translate("Same as the tcp node")) - -for k, v in pairs(nodes_table) do - tcp_node:value(v.id, v["remark"]) - udp_node:value(v.id, v["remark"]) -end - ----- DNS Forward Mode -o = s:option(ListValue, "dns_mode", translate("Filter Mode")) -o:depends({ tcp_node = "default", ['!reverse'] = true }) -if api.is_finded("dns2socks") then - o:value("dns2socks", "dns2socks") -end -if has_v2ray then - o:value("v2ray", "V2ray") -end -if has_xray then - o:value("xray", "Xray") -end - -o = s:option(ListValue, "v2ray_dns_mode", " ") -o:value("tcp", "TCP") -o:value("doh", "DoH") -o:depends("dns_mode", "v2ray") -o:depends("dns_mode", "xray") - ----- DNS Forward -o = s:option(Value, "dns_forward", translate("Remote DNS")) -o.default = "1.1.1.1" -o:value("1.1.1.1", "1.1.1.1 (CloudFlare DNS)") -o:value("1.1.1.2", "1.1.1.2 (CloudFlare DNS)") -o:value("8.8.8.8", "8.8.8.8 (Google DNS)") -o:value("8.8.4.4", "8.8.4.4 (Google DNS)") -o:value("208.67.222.222", "208.67.222.222 (Open DNS)") -o:value("208.67.220.220", "208.67.220.220 (Open DNS)") -o:depends("dns_mode", "dns2socks") -o:depends("v2ray_dns_mode", "tcp") - -if has_v2ray or has_xray then ----- DoH -o = s:option(Value, "dns_doh", translate("DoH request address")) -o:value("https://cloudflare-dns.com/dns-query,1.1.1.1", "CloudFlare") -o:value("https://security.cloudflare-dns.com/dns-query,1.1.1.2", "CloudFlare-Security") -o:value("https://doh.opendns.com/dns-query,208.67.222.222", "OpenDNS") -o:value("https://dns.google/dns-query,8.8.8.8", "Google") -o:value("https://doh.libredns.gr/dns-query,116.202.176.26", "LibreDNS") -o:value("https://doh.libredns.gr/ads,116.202.176.26", "LibreDNS (No Ads)") -o:value("https://dns.quad9.net/dns-query,9.9.9.9", "Quad9-Recommended") -o:value("https://dns.adguard.com/dns-query,176.103.130.130", "AdGuard") -o.default = "https://cloudflare-dns.com/dns-query,1.1.1.1" -o.validate = function(self, value, t) - if value ~= "" then - local flag = 0 - local util = require "luci.util" - local val = util.split(value, ",") - local url = val[1] - val[1] = nil - for i = 1, #val do - local v = val[i] - if v then - if not api.datatypes.ipmask4(v) then - flag = 1 - end - end - end - if flag == 0 then - return value - end - end - return nil, translate("DoH request address") .. " " .. translate("Format must be:") .. " URL,IP" -end -o:depends("v2ray_dns_mode", "doh") -end - -o = s:option(Value, "dns_client_ip", translate("EDNS Client Subnet")) -o.datatype = "ipaddr" -o:depends("v2ray_dns_mode", "doh") - -o = s:option(ListValue, "dns_query_strategy", translate("Query Strategy")) -o.default = "UseIPv4" -o:value("UseIPv4") -o:value("UseIPv6") -o:value("UseIP") -o:depends("dns_mode", "v2ray") -o:depends("dns_mode", "xray") - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/app_update.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/app_update.lua deleted file mode 100644 index 206a34ec..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/app_update.lua +++ /dev/null @@ -1,49 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname - -m = Map(appname) - --- [[ App Settings ]]-- -s = m:section(TypedSection, "global_app", translate("App Update"), - "" .. - translate("Please confirm that your firmware supports FPU.") .. - "") -s.anonymous = true -s:append(Template(appname .. "/app_update/v2ray_version")) -s:append(Template(appname .. "/app_update/xray_version")) -s:append(Template(appname .. "/app_update/trojan_go_version")) -s:append(Template(appname .. "/app_update/kcptun_version")) -s:append(Template(appname .. "/app_update/brook_version")) -s:append(Template(appname .. "/app_update/hysteria_version")) - -o = s:option(Value, "v2ray_file", translatef("%s App Path", "V2ray")) -o.default = "/usr/bin/v2ray" -o.rmempty = false - -o = s:option(Value, "xray_file", translatef("%s App Path", "Xray")) -o.default = "/usr/bin/xray" -o.rmempty = false - -o = s:option(Value, "trojan_go_file", translatef("%s App Path", "Trojan-Go")) -o.default = "/usr/bin/trojan-go" -o.rmempty = false - -o = s:option(Value, "kcptun_client_file", translatef("%s Client App Path", "Kcptun")) -o.default = "/usr/bin/kcptun-client" -o.rmempty = false - -o = s:option(Value, "brook_file", translatef("%s App Path", "Brook")) -o.default = "/usr/bin/brook" -o.rmempty = false - -o = s:option(Value, "hysteria_file", translatef("%s App Path", "Hysteria")) -o.default = "/usr/bin/hysteria" -o.rmempty = false - -o = s:option(DummyValue, "tips", " ") -o.rawhtml = true -o.cfgvalue = function(t, n) - return string.format('%s', translate("if you want to run from memory, change the path, /tmp beginning then save the application and update it manually.")) -end - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/auto_switch.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/auto_switch.lua deleted file mode 100644 index 221de291..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/auto_switch.lua +++ /dev/null @@ -1,66 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname - -local nodes_table = {} -for k, e in ipairs(api.get_valid_nodes()) do - nodes_table[#nodes_table + 1] = e -end - -m = Map(appname) - --- [[ Auto Switch Settings ]]-- -s = m:section(TypedSection, "auto_switch") -s.anonymous = true - ----- Enable -o = s:option(Flag, "enable", translate("Enable")) -o.default = 0 -o.rmempty = false - -o = s:option(Value, "testing_time", translate("How often to test"), translate("Units:minutes")) -o.datatype = "uinteger" -o.default = 1 - -o = s:option(Value, "connect_timeout", translate("Timeout seconds"), translate("Units:seconds")) -o.datatype = "uinteger" -o.default = 3 - -o = s:option(Value, "retry_num", translate("Timeout retry num")) -o.datatype = "uinteger" -o.default = 3 - -o = s:option(DynamicList, "tcp_node", "TCP " .. translate("List of backup nodes")) -for k, v in pairs(nodes_table) do - if v.node_type == "normal" then - o:value(v.id, v["remark"]) - end -end -function o.write(self, section, value) - local t = {} - local t2 = {} - if type(value) == "table" then - local x - for _, x in ipairs(value) do - if x and #x > 0 then - if not t2[x] then - t2[x] = x - t[#t+1] = x - end - end - end - else - t = { value } - end - return DynamicList.write(self, section, t) -end - -o = s:option(Flag, "restore_switch", "TCP " .. translate("Restore Switch"), translate("When detects main node is available, switch back to the main node.")) - -o = s:option(ListValue, "shunt_logic", "TCP " .. translate("If the main node is V2ray/Xray shunt")) -o:value("0", translate("Switch it")) -o:value("1", translate("Applying to the default node")) -o:value("2", translate("Applying to the default preproxy node")) - -m:append(Template(appname .. "/auto_switch/footer")) - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua deleted file mode 100644 index 8a191ed8..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua +++ /dev/null @@ -1,471 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local uci = api.uci -local datatypes = api.datatypes -local has_v2ray = api.is_finded("v2ray") -local has_xray = api.is_finded("xray") -local has_chnlist = api.fs.access("/usr/share/passwall/rules/chnlist") - -m = Map(appname) - -local nodes_table = {} -for k, e in ipairs(api.get_valid_nodes()) do - nodes_table[#nodes_table + 1] = e -end - -local socks_table = {} -uci:foreach(appname, "socks", function(s) - if s.enabled == "1" and s.node then - local id, remarks - local same, i = s.node:match("^(tcp)") - if same then - remarks = translatef("Same as the tcp node") - else - for k, n in pairs(nodes_table) do - if (s.node == n.id) then - remarks = n["remark"]; break - end - end - end - id = "127.0.0.1" .. ":" .. s.port - socks_table[#socks_table + 1] = { - id = id, - remarks = id .. " - " .. (remarks or translate("Misconfigured")) - } - end -end) - -local doh_validate = function(self, value, t) - if value ~= "" then - local flag = 0 - local util = require "luci.util" - local val = util.split(value, ",") - local url = val[1] - val[1] = nil - for i = 1, #val do - local v = val[i] - if v then - if not datatypes.ipmask4(v) then - flag = 1 - end - end - end - if flag == 0 then - return value - end - end - return nil, translate("DoH request address") .. " " .. translate("Format must be:") .. " URL,IP" -end - -local redir_mode_validate = function(self, value, t) - local tcp_proxy_mode_v = tcp_proxy_mode:formvalue(t) or "" - local udp_proxy_mode_v = udp_proxy_mode:formvalue(t) or "" - local localhost_tcp_proxy_mode_v = localhost_tcp_proxy_mode:formvalue(t) or "" - local localhost_udp_proxy_mode_v = localhost_udp_proxy_mode:formvalue(t) or "" - local s = tcp_proxy_mode_v .. udp_proxy_mode_v .. localhost_tcp_proxy_mode_v .. localhost_udp_proxy_mode_v - if s:find("returnhome") then - if s:find("chnroute") or s:find("gfwlist") then - return nil, translate("China list or gfwlist cannot be used together with outside China list!") - end - end - return value -end - -local status = m:get("@global_other[0]", "status") or "" -if status:find("big_icon") then - m:append(Template(appname .. "/global/status")) -else - m:append(Template(appname .. "/global/status2")) -end - -s = m:section(TypedSection, "global") -s.anonymous = true -s.addremove = false - -s:tab("Main", translate("Main")) - --- [[ Global Settings ]]-- -o = s:taboption("Main", Flag, "enabled", translate("Main switch")) -o.rmempty = false - ----- TCP Node -tcp_node = s:taboption("Main", ListValue, "tcp_node", "" .. translate("TCP Node") .. "") -tcp_node.description = "" ---tcp_node.description = translate("For proxy specific list.") ---tcp_node.description = o.description .. "
" -local current_node = luci.sys.exec(string.format("[ -f '/tmp/etc/%s/id/TCP' ] && echo -n $(cat /tmp/etc/%s/id/TCP)", appname, appname)) -if current_node and current_node ~= "" and current_node ~= "nil" then - local n = uci:get_all(appname, current_node) - if n then - if tonumber(m:get("@auto_switch[0]", "enable") or 0) == 1 then - local remarks = api.get_full_node_remarks(n) - local url = api.url("node_config", current_node) - tcp_node.description = tcp_node.description .. translatef("Current node: %s", string.format('%s', url, remarks)) .. "
" - end - end -end -tcp_node:value("nil", translate("Close")) - --- 分流 -if (has_v2ray or has_xray) and #nodes_table > 0 then - local normal_list = {} - local shunt_list = {} - for k, v in pairs(nodes_table) do - if v.node_type == "normal" then - normal_list[#normal_list + 1] = v - end - if v.protocol and v.protocol == "_shunt" then - shunt_list[#shunt_list + 1] = v - end - end - for k, v in pairs(shunt_list) do - uci:foreach(appname, "shunt_rules", function(e) - local id = e[".name"] - o = s:taboption("Main", ListValue, v.id .. "." .. id .. "_node", string.format('* %s', api.url("shunt_rules", id), translate(e.remarks))) - o:depends("tcp_node", v.id) - o:value("nil", translate("Close")) - o:value("_default", translate("Default")) - o:value("_direct", translate("Direct Connection")) - o:value("_blackhole", translate("Blackhole")) - for k1, v1 in pairs(normal_list) do - o:value(v1.id, v1["remark"]) - end - o.cfgvalue = function(self, section) - return m:get(v.id, id) or "nil" - end - o.write = function(self, section, value) - m:set(v.id, id, value) - end - end) - - local id = "default_node" - o = s:taboption("Main", ListValue, v.id .. "." .. id, string.format('* %s', translate("Default"))) - o:depends("tcp_node", v.id) - o:value("_direct", translate("Direct Connection")) - o:value("_blackhole", translate("Blackhole")) - for k1, v1 in pairs(normal_list) do - o:value(v1.id, v1["remark"]) - end - o.cfgvalue = function(self, section) - return m:get(v.id, id) or "nil" - end - o.write = function(self, section, value) - m:set(v.id, id, value) - end - - local id = "main_node" - o = s:taboption("Main", ListValue, v.id .. "." .. id, string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node.")) - o:depends("tcp_node", v.id) - o:value("nil", translate("Close")) - for k1, v1 in pairs(normal_list) do - o:value(v1.id, v1["remark"]) - end - o.cfgvalue = function(self, section) - return m:get(v.id, id) or "nil" - end - o.write = function(self, section, value) - m:set(v.id, id, value) - end - end -end - -udp_node = s:taboption("Main", ListValue, "udp_node", "" .. translate("UDP Node") .. "") -udp_node:value("nil", translate("Close")) ---udp_node.description = translate("For proxy game network, DNS hijack etc.") .. "
" .. translate("The selected server will not use Kcptun.") -udp_node:value("tcp", translate("Same as the tcp node")) - -s:tab("DNS", translate("DNS")) - -if api.is_finded("smartdns") then - dns_shunt = s:taboption("DNS", ListValue, "dns_shunt", translate("DNS Shunt")) - dns_shunt:value("dnsmasq", "Dnsmasq") - dns_shunt:value("smartdns", "SmartDNS") - - group_domestic = s:taboption("DNS", Value, "group_domestic", translate("Domestic group name")) - group_domestic.placeholder = "local" - group_domestic:depends("dns_shunt", "smartdns") - group_domestic.description = translate("You only need to configure domestic DNS packets in SmartDNS and set it redirect or as Dnsmasq upstream, and fill in the domestic DNS group name here.") -end - -o = s:taboption("DNS", Flag, "filter_proxy_ipv6", translate("Filter Proxy Host IPv6"), translate("Experimental feature.")) -o.default = "0" - ----- DNS Forward Mode -dns_mode = s:taboption("DNS", ListValue, "dns_mode", translate("Filter Mode")) -dns_mode.rmempty = false -dns_mode:reset_values() -if api.is_finded("pdnsd") then - dns_mode:value("pdnsd", "pdnsd " .. translatef("Requery DNS By %s", translate("TCP Node"))) -end -if api.is_finded("dns2socks") then - dns_mode:value("dns2socks", "dns2socks") -end -if has_v2ray then - dns_mode:value("v2ray", "V2ray") -end -if has_xray then - dns_mode:value("xray", "Xray") -end -dns_mode:value("udp", translatef("Requery DNS By %s", "UDP")) - -o = s:taboption("DNS", ListValue, "v2ray_dns_mode", " ") -o:value("tcp", "TCP") -o:value("doh", "DoH") -o:value("fakedns", "FakeDNS") -o:depends("dns_mode", "v2ray") -o:depends("dns_mode", "xray") -o.validate = function(self, value, t) - if value == "fakedns" then - local _dns_mode = dns_mode:formvalue(t) - local _tcp_node = tcp_node:formvalue(t) - if m:get(_tcp_node, "type"):lower() ~= _dns_mode then - return nil, translatef("TCP node must be '%s' type to use FakeDNS.", _dns_mode) - end - end - return value -end - -o = s:taboption("DNS", ListValue, "dns_by", translate("Resolver For The List Proxied")) -o:value("tcp", translatef("Requery DNS By %s", translate("TCP Node"))) -o:value("socks", translatef("Requery DNS By %s", translate("Socks Node"))) -o:depends("v2ray_dns_mode", "tcp") -o:depends("v2ray_dns_mode", "doh") - -o = s:taboption("DNS", Value, "socks_server", translate("Socks Server"), translate("Make sure socks service is available on this address.")) -for k, v in pairs(socks_table) do o:value(v.id, v.remarks) end -o.validate = function(self, value, t) - if not datatypes.ipaddrport(value) then - return nil, translate("Socks Server") .. " " .. translate("Not valid IP format, please re-enter!") - end - return value -end -o:depends({dns_mode = "dns2socks"}) -o:depends({dns_by = "socks"}) - ----- DoH -o = s:taboption("DNS", Value, "up_trust_doh", translate("DoH request address")) -o:value("https://cloudflare-dns.com/dns-query,1.1.1.1", "CloudFlare") -o:value("https://security.cloudflare-dns.com/dns-query,1.1.1.2", "CloudFlare-Security") -o:value("https://doh.opendns.com/dns-query,208.67.222.222", "OpenDNS") -o:value("https://dns.google/dns-query,8.8.8.8", "Google") -o:value("https://doh.libredns.gr/dns-query,116.202.176.26", "LibreDNS") -o:value("https://doh.libredns.gr/ads,116.202.176.26", "LibreDNS (No Ads)") -o:value("https://dns.quad9.net/dns-query,9.9.9.9", "Quad9-Recommended") -o:value("https://dns.adguard.com/dns-query,176.103.130.130", "AdGuard") -o.default = "https://cloudflare-dns.com/dns-query,1.1.1.1" -o.validate = doh_validate -o:depends("v2ray_dns_mode", "doh") - ----- DNS Forward -o = s:taboption("DNS", Value, "dns_forward", translate("Remote DNS")) ---o.description = translate("IP:Port mode acceptable, multi value split with english comma.") .. " " .. translate("If you use dns2socks, only the first one is valid.") -o.datatype = "or(ipaddr,ipaddrport)" -o.default = "1.1.1.1" -o:value("1.1.1.1", "1.1.1.1 (CloudFlare DNS)") -o:value("1.1.1.2", "1.1.1.2 (CloudFlare DNS)") -o:value("8.8.8.8", "8.8.8.8 (Google DNS)") -o:value("8.8.4.4", "8.8.4.4 (Google DNS)") -o:value("208.67.222.222", "208.67.222.222 (Open DNS)") -o:value("208.67.220.220", "208.67.220.220 (Open DNS)") -o:depends({dns_mode = "dns2socks"}) -o:depends({dns_mode = "pdnsd"}) -o:depends({dns_mode = "udp"}) -o:depends({v2ray_dns_mode = "tcp"}) - -o = s:taboption("DNS", Value, "dns_client_ip", translate("EDNS Client Subnet")) -o.description = translate("Notify the DNS server when the DNS query is notified, the location of the client (cannot be a private IP address).") .. "
" .. - translate("This feature requires the DNS server to support the Edns Client Subnet (RFC7871).") -o.datatype = "ipaddr" -o:depends("v2ray_dns_mode", "tcp") -o:depends("v2ray_dns_mode", "doh") - -o = s:taboption("DNS", ListValue, "dns_query_strategy", translate("Query Strategy")) -o.default = "UseIPv4" -o:value("UseIPv4") -o:value("UseIPv6") -o:value("UseIP") -o:depends({dns_mode = "v2ray", v2ray_dns_mode = "tcp"}) -o:depends({dns_mode = "v2ray", v2ray_dns_mode = "doh"}) -o:depends({dns_mode = "xray", v2ray_dns_mode = "tcp"}) -o:depends({dns_mode = "xray", v2ray_dns_mode = "doh"}) - -o = s:taboption("DNS", Flag, "dns_cache", translate("Cache Resolved")) -o.default = "1" -o:depends({dns_mode = "dns2socks"}) -o:depends({dns_mode = "pdnsd"}) -o:depends({dns_mode = "v2ray", v2ray_dns_mode = "tcp"}) -o:depends({dns_mode = "v2ray", v2ray_dns_mode = "doh"}) -o:depends({dns_mode = "xray", v2ray_dns_mode = "tcp"}) -o:depends({dns_mode = "xray", v2ray_dns_mode = "doh"}) -o.rmempty = false - -if has_chnlist and api.is_finded("chinadns-ng") then - o = s:taboption("DNS", Flag, "chinadns_ng", translate("ChinaDNS-NG"), translate("The effect is better, but will increase the memory.")) - o.default = "0" - o:depends({dns_mode = "dns2socks"}) - o:depends({dns_mode = "pdnsd"}) - o:depends({dns_mode = "v2ray", v2ray_dns_mode = "tcp"}) - o:depends({dns_mode = "v2ray", v2ray_dns_mode = "doh"}) - o:depends({dns_mode = "xray", v2ray_dns_mode = "tcp"}) - o:depends({dns_mode = "xray", v2ray_dns_mode = "doh"}) - o:depends({dns_mode = "udp"}) -end - -o = s:taboption("DNS", Button, "clear_ipset", translate("Clear IPSET"), translate("Try this feature if the rule modification does not take effect.")) -o.inputstyle = "remove" -function o.write(e, e) - luci.sys.call("/usr/share/" .. appname .. "/iptables.sh flush_ipset > /dev/null 2>&1 &") - luci.http.redirect(api.url("log")) -end - -s:tab("Proxy", translate("Mode")) - ----- TCP Default Proxy Mode -tcp_proxy_mode = s:taboption("Proxy", ListValue, "tcp_proxy_mode", "TCP " .. translate("Default") .. translate("Proxy Mode")) --- o.description = translate("If not available, try clearing the cache.") -tcp_proxy_mode:value("disable", translate("No Proxy")) -tcp_proxy_mode:value("global", translate("Global Proxy")) -tcp_proxy_mode:value("gfwlist", translate("GFW List")) -tcp_proxy_mode:value("chnroute", translate("Not China List")) -if has_chnlist then - tcp_proxy_mode:value("returnhome", translate("China List")) -end -tcp_proxy_mode:value("direct/proxy", translate("Only use direct/proxy list")) -tcp_proxy_mode.default = "chnroute" ---tcp_proxy_mode.validate = redir_mode_validate - ----- UDP Default Proxy Mode -udp_proxy_mode = s:taboption("Proxy", ListValue, "udp_proxy_mode", "UDP " .. translate("Default") .. translate("Proxy Mode")) -udp_proxy_mode:value("disable", translate("No Proxy")) -udp_proxy_mode:value("global", translate("Global Proxy")) -udp_proxy_mode:value("gfwlist", translate("GFW List")) -udp_proxy_mode:value("chnroute", translate("Not China List")) -if has_chnlist then - udp_proxy_mode:value("returnhome", translate("China List")) -end -udp_proxy_mode:value("direct/proxy", translate("Only use direct/proxy list")) -udp_proxy_mode.default = "chnroute" ---udp_proxy_mode.validate = redir_mode_validate - ----- Localhost TCP Proxy Mode -localhost_tcp_proxy_mode = s:taboption("Proxy", ListValue, "localhost_tcp_proxy_mode", translate("Router Localhost") .. " TCP " .. translate("Proxy Mode")) --- o.description = translate("The server client can also use this rule to scientifically surf the Internet.") -localhost_tcp_proxy_mode:value("default", translatef("Same as the %s default proxy mode", "TCP")) -localhost_tcp_proxy_mode:value("global", translate("Global Proxy")) -localhost_tcp_proxy_mode:value("gfwlist", translate("GFW List")) -localhost_tcp_proxy_mode:value("chnroute", translate("Not China List")) -if has_chnlist then - localhost_tcp_proxy_mode:value("returnhome", translate("China List")) -end -localhost_tcp_proxy_mode:value("disable", translate("No Proxy")) -localhost_tcp_proxy_mode:value("direct/proxy", translate("Only use direct/proxy list")) -localhost_tcp_proxy_mode.default = "default" ---localhost_tcp_proxy_mode.validate = redir_mode_validate - ----- Localhost UDP Proxy Mode -localhost_udp_proxy_mode = s:taboption("Proxy", ListValue, "localhost_udp_proxy_mode", translate("Router Localhost") .. " UDP " .. translate("Proxy Mode")) -localhost_udp_proxy_mode:value("default", translatef("Same as the %s default proxy mode", "UDP")) -localhost_udp_proxy_mode:value("global", translate("Global Proxy")) -localhost_udp_proxy_mode:value("gfwlist", translate("GFW List")) -localhost_udp_proxy_mode:value("chnroute", translate("Not China List")) -if has_chnlist then - localhost_udp_proxy_mode:value("returnhome", translate("China List")) -end -localhost_udp_proxy_mode:value("disable", translate("No Proxy")) -localhost_udp_proxy_mode:value("direct/proxy", translate("Only use direct/proxy list")) -localhost_udp_proxy_mode.default = "default" -localhost_udp_proxy_mode.validate = redir_mode_validate - -tips = s:taboption("Proxy", DummyValue, "tips", " ") -tips.rawhtml = true -tips.cfgvalue = function(t, n) - return string.format('%s', api.url("acl"), translate("Want different devices to use different proxy modes/ports/nodes? Please use access control.")) -end - -s:tab("log", translate("Log")) -o = s:taboption("log", Flag, "close_log_tcp", translatef("%s Node Log Close", "TCP")) -o.rmempty = false - -o = s:taboption("log", Flag, "close_log_udp", translatef("%s Node Log Close", "UDP")) -o.rmempty = false - -loglevel = s:taboption("log", ListValue, "loglevel", "V2ray/Xray" .. translate("Log Level")) -loglevel.default = "warning" -loglevel:value("debug") -loglevel:value("info") -loglevel:value("warning") -loglevel:value("error") - -trojan_loglevel = s:taboption("log", ListValue, "trojan_loglevel", "Trojan" .. translate("Log Level")) -trojan_loglevel.default = "2" -trojan_loglevel:value("0", "all") -trojan_loglevel:value("1", "info") -trojan_loglevel:value("2", "warn") -trojan_loglevel:value("3", "error") -trojan_loglevel:value("4", "fatal") - -s:tab("faq", "FAQ") - -o = s:taboption("faq", DummyValue, "") -o.template = appname .. "/global/faq" - --- [[ Socks Server ]]-- -o = s:taboption("Main", Flag, "socks_enabled", "Socks " .. translate("Main switch")) -o.rmempty = false - -s = m:section(TypedSection, "socks", translate("Socks Config")) -s.anonymous = true -s.addremove = true -s.template = "cbi/tblsection" -function s.create(e, t) - TypedSection.create(e, api.gen_uuid()) -end - -o = s:option(DummyValue, "status", translate("Status")) -o.rawhtml = true -o.cfgvalue = function(t, n) - return string.format('
', n) -end - ----- Enable -o = s:option(Flag, "enabled", translate("Enable")) -o.default = 1 -o.rmempty = false - -socks_node = s:option(ListValue, "node", translate("Socks Node")) -socks_node:value("tcp", translate("Same as the tcp node")) - -local n = 0 -uci:foreach(appname, "socks", function(s) - if s[".name"] == section then - return false - end - n = n + 1 -end) - -o = s:option(Value, "port", "Socks " .. translate("Listen Port")) -o.default = n + 1080 -o.datatype = "port" -o.rmempty = false - -if has_v2ray or has_xray then - o = s:option(Value, "http_port", "HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use")) - o.default = 0 - o.datatype = "port" -end - -for k, v in pairs(nodes_table) do - tcp_node:value(v.id, v["remark"]) - udp_node:value(v.id, v["remark"]) - if v.type == "Socks" then - if has_v2ray or has_xray then - socks_node:value(v.id, v["remark"]) - end - else - socks_node:value(v.id, v["remark"]) - end -end - -m:append(Template(appname .. "/global/footer")) - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/haproxy.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/haproxy.lua deleted file mode 100644 index a1270087..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/haproxy.lua +++ /dev/null @@ -1,121 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local sys = api.sys -local net = require "luci.model.network".init() -local datatypes = api.datatypes - -local nodes_table = {} -for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" then - nodes_table[#nodes_table + 1] = { - id = e[".name"], - obj = e, - remarks = e["remark"] - } - end -end - -m = Map(appname) - --- [[ Haproxy Settings ]]-- -s = m:section(TypedSection, "global_haproxy") -s.anonymous = true - -s:append(Template(appname .. "/haproxy/status")) - ----- Balancing Enable -o = s:option(Flag, "balancing_enable", translate("Enable Load Balancing")) -o.rmempty = false -o.default = false - ----- Console Username -o = s:option(Value, "console_user", translate("Console Username")) -o.default = "" -o:depends("balancing_enable", true) - ----- Console Password -o = s:option(Value, "console_password", translate("Console Password")) -o.password = true -o.default = "" -o:depends("balancing_enable", true) - ----- Console Port -o = s:option(Value, "console_port", translate("Console Port"), translate( - "In the browser input routing IP plus port access, such as:192.168.1.1:1188")) -o.default = "1188" -o:depends("balancing_enable", true) - --- [[ Balancing Settings ]]-- -s = m:section(TypedSection, "haproxy_config", "", - "" .. - translate("Add a node, Export Of Multi WAN Only support Multi Wan. Load specific gravity range 1-256. Multiple primary servers can be load balanced, standby will only be enabled when the primary server is offline! Multiple groups can be set, Haproxy port same one for each group.") .. - "\n" .. translate("Note that the node configuration parameters for load balancing must be consistent, otherwise problems can arise!") .. - "") -s.template = "cbi/tblsection" -s.sortable = true -s.anonymous = true -s.addremove = true - -s.create = function(e, t) - TypedSection.create(e, api.gen_uuid()) -end - -s.remove = function(self, section) - for k, v in pairs(self.children) do - v.rmempty = true - v.validate = nil - end - TypedSection.remove(self, section) -end - ----- Enable -o = s:option(Flag, "enabled", translate("Enable")) -o.default = 1 -o.rmempty = false - ----- Node Address -o = s:option(Value, "lbss", translate("Node Address")) -for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end -o.rmempty = false -o.validate = function(self, value) - if not value then return nil end - local t = m:get(value) or nil - if t and t[".type"] == "nodes" then - return value - end - if datatypes.hostport(value) or datatypes.ip4addrport(value) then - return value - end - if api.is_ipv6addrport(value) then - return value - end - return nil, value -end - ----- Haproxy Port -o = s:option(Value, "haproxy_port", translate("Haproxy Port")) -o.datatype = "port" -o.default = 1181 -o.rmempty = false - ----- Node Weight -o = s:option(Value, "lbweight", translate("Node Weight")) -o.datatype = "uinteger" -o.default = 5 -o.rmempty = false - ----- Export -o = s:option(ListValue, "export", translate("Export Of Multi WAN")) -o:value(0, translate("Auto")) -local wa = require "luci.tools.webadmin" -wa.cbi_add_networks(o) -o.default = 0 -o.rmempty = false - ----- Mode -o = s:option(ListValue, "backup", translate("Mode")) -o:value(0, translate("Primary")) -o:value(1, translate("Standby")) -o.rmempty = false - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/log.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/log.lua deleted file mode 100644 index 5580e17a..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/log.lua +++ /dev/null @@ -1,8 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname - -f = SimpleForm(appname) -f.reset = false -f.submit = false -f:append(Template(appname .. "/log/log")) -return f diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua deleted file mode 100644 index 20134b1a..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua +++ /dev/null @@ -1,876 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local uci = api.uci - -local ss_encrypt_method_list = { - "rc4-md5", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", - "aes-192-ctr", "aes-256-ctr", "bf-cfb", "salsa20", "chacha20", "chacha20-ietf", - "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305" -} - -local ss_rust_encrypt_method_list = { - "plain", "none", - "aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305" -} - -local ssr_encrypt_method_list = { - "none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb", - "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", - "bf-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb", - "cast5-cfb", "des-cfb", "idea-cfb", "seed-cfb", "salsa20", "chacha20", - "chacha20-ietf" -} - -local ssr_protocol_list = { - "origin", "verify_simple", "verify_deflate", "verify_sha1", "auth_simple", - "auth_sha1", "auth_sha1_v2", "auth_sha1_v4", "auth_aes128_md5", - "auth_aes128_sha1", "auth_chain_a", "auth_chain_b", "auth_chain_c", - "auth_chain_d", "auth_chain_e", "auth_chain_f" -} -local ssr_obfs_list = { - "plain", "http_simple", "http_post", "random_head", "tls_simple", - "tls1.0_session_auth", "tls1.2_ticket_auth" -} - -local v_ss_encrypt_method_list = { - "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305" -} - -local x_ss_encrypt_method_list = { - "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305" -} - -local security_list = {"none", "auto", "aes-128-gcm", "chacha20-poly1305", "zero"} - -local header_type_list = { - "none", "srtp", "utp", "wechat-video", "dtls", "wireguard" -} -local encrypt_methods_ss_aead = { - "chacha20-ietf-poly1305", - "aes-128-gcm", - "aes-256-gcm", -} - -m = Map(appname, translate("Node Config")) -m.redirect = api.url() - -s = m:section(NamedSection, arg[1], "nodes", "") -s.addremove = false -s.dynamic = false - -share = s:option(DummyValue, "passwall", " ") -share.rawhtml = true -share.template = "passwall/node_list/link_share_man" -share.value = arg[1] - -remarks = s:option(Value, "remarks", translate("Node Remarks")) -remarks.default = translate("Remarks") -remarks.rmempty = false - -type = s:option(ListValue, "type", translate("Type")) -if api.is_finded("ipt2socks") then - type:value("Socks", translate("Socks")) -end -if api.is_finded("ss-redir") then - type:value("SS", translate("Shadowsocks Libev")) -end -if api.is_finded("sslocal") then - type:value("SS-Rust", translate("Shadowsocks Rust")) -end -if api.is_finded("ssr-redir") then - type:value("SSR", translate("ShadowsocksR Libev")) -end -if api.is_finded("v2ray") then - type:value("V2ray", translate("V2ray")) -end -if api.is_finded("xray") then - type:value("Xray", translate("Xray")) -end -if api.is_finded("brook") then - type:value("Brook", translate("Brook")) -end ---[[ -if api.is_finded("trojan-plus") or api.is_finded("trojan") then - type:value("Trojan", translate("Trojan")) -end -]]-- -if api.is_finded("trojan-plus") then - type:value("Trojan-Plus", translate("Trojan-Plus")) -end -if api.is_finded("trojan-go") then - type:value("Trojan-Go", translate("Trojan-Go")) -end -if api.is_finded("naive") then - type:value("Naiveproxy", translate("NaiveProxy")) -end -if api.is_finded("hysteria") then - type:value("Hysteria", translate("Hysteria")) -end - -protocol = s:option(ListValue, "protocol", translate("Protocol")) -protocol:value("vmess", translate("Vmess")) -protocol:value("vless", translate("VLESS")) -protocol:value("http", translate("HTTP")) -protocol:value("socks", translate("Socks")) -protocol:value("shadowsocks", translate("Shadowsocks")) -protocol:value("trojan", translate("Trojan")) -protocol:value("_balancing", translate("Balancing")) -protocol:value("_shunt", translate("Shunt")) -protocol:depends("type", "V2ray") -protocol:depends("type", "Xray") - -local nodes_table = {} -for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" then - nodes_table[#nodes_table + 1] = { - id = e[".name"], - remarks = e["remark"] - } - end -end - --- 负载均衡列表 -balancing_node = s:option(DynamicList, "balancing_node", translate("Load balancing node list"), translate("Load balancing node list, document")) -for k, v in pairs(nodes_table) do balancing_node:value(v.id, v.remarks) end -balancing_node:depends("protocol", "_balancing") - --- 分流 -uci:foreach(appname, "shunt_rules", function(e) - o = s:option(ListValue, e[".name"], string.format('* %s', api.url("shunt_rules", e[".name"]), translate(e.remarks))) - o:value("nil", translate("Close")) - o:value("_default", translate("Default")) - o:value("_direct", translate("Direct Connection")) - o:value("_blackhole", translate("Blackhole")) - o:depends("protocol", "_shunt") - - if #nodes_table > 0 then - _proxy_tag = s:option(ListValue, e[".name"] .. "_proxy_tag", string.format('* %s', translate(e.remarks) .. " " .. translate("Preproxy"))) - _proxy_tag:value("nil", translate("Close")) - _proxy_tag:value("default", translate("Default")) - _proxy_tag:value("main", translate("Default Preproxy")) - _proxy_tag.default = "nil" - - for k, v in pairs(nodes_table) do - o:value(v.id, v.remarks) - _proxy_tag:depends(e[".name"], v.id) - end - end -end) - -shunt_tips = s:option(DummyValue, "shunt_tips", " ") -shunt_tips.rawhtml = true -shunt_tips.cfgvalue = function(t, n) - return string.format('%s', translate("No shunt rules? Click me to go to add.")) -end -shunt_tips:depends("protocol", "_shunt") - -default_node = s:option(ListValue, "default_node", string.format('* %s', translate("Default"))) -default_node:value("_direct", translate("Direct Connection")) -default_node:value("_blackhole", translate("Blackhole")) -for k, v in pairs(nodes_table) do default_node:value(v.id, v.remarks) end -default_node:depends("protocol", "_shunt") - -if #nodes_table > 0 then - o = s:option(ListValue, "main_node", string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node.")) - o:value("nil", translate("Close")) - for k, v in pairs(nodes_table) do - o:value(v.id, v.remarks) - o:depends("default_node", v.id) - end -end - -domainStrategy = s:option(ListValue, "domainStrategy", translate("Domain Strategy")) -domainStrategy:value("AsIs") -domainStrategy:value("IPIfNonMatch") -domainStrategy:value("IPOnDemand") -domainStrategy.default = "IPOnDemand" -domainStrategy.description = "
  • " .. translate("'AsIs': Only use domain for routing. Default value.") -.. "
  • " .. translate("'IPIfNonMatch': When no rule matches current domain, resolves it into IP addresses (A or AAAA records) and try all rules again.") -.. "
  • " .. translate("'IPOnDemand': As long as there is a IP-based rule, resolves the domain into IP immediately.") -.. "
" -domainStrategy:depends("protocol", "_balancing") -domainStrategy:depends("protocol", "_shunt") - -domainMatcher = s:option(ListValue, "domainMatcher", translate("Domain matcher")) -domainMatcher:value("hybrid") -domainMatcher:value("linear") -domainMatcher:depends("protocol", "_balancing") -domainMatcher:depends("protocol", "_shunt") - - --- Brook协议 -brook_protocol = s:option(ListValue, "brook_protocol", translate("Protocol")) -brook_protocol:value("client", translate("Brook")) -brook_protocol:value("wsclient", translate("WebSocket")) -brook_protocol:depends("type", "Brook") -function brook_protocol.cfgvalue(self, section) - return m:get(section, "protocol") -end -function brook_protocol.write(self, section, value) - m:set(section, "protocol", value) -end - -brook_tls = s:option(Flag, "brook_tls", translate("Use TLS")) -brook_tls:depends("brook_protocol", "wsclient") - --- Naiveproxy协议 -naiveproxy_protocol = s:option(ListValue, "naiveproxy_protocol", translate("Protocol")) -naiveproxy_protocol:value("https", translate("HTTPS")) -naiveproxy_protocol:value("quic", translate("QUIC")) -naiveproxy_protocol:depends("type", "Naiveproxy") -function naiveproxy_protocol.cfgvalue(self, section) - return m:get(section, "protocol") -end -function naiveproxy_protocol.write(self, section, value) - m:set(section, "protocol", value) -end - -address = s:option(Value, "address", translate("Address (Support Domain Name)")) -address.rmempty = false -address:depends("type", "Socks") -address:depends("type", "SS") -address:depends("type", "SS-Rust") -address:depends("type", "SSR") -address:depends("type", "Brook") -address:depends("type", "Trojan") -address:depends("type", "Trojan-Plus") -address:depends("type", "Trojan-Go") -address:depends("type", "Naiveproxy") -address:depends("type", "Hysteria") -address:depends({ type = "V2ray", protocol = "vmess" }) -address:depends({ type = "V2ray", protocol = "vless" }) -address:depends({ type = "V2ray", protocol = "http" }) -address:depends({ type = "V2ray", protocol = "socks" }) -address:depends({ type = "V2ray", protocol = "shadowsocks" }) -address:depends({ type = "V2ray", protocol = "trojan" }) -address:depends({ type = "Xray", protocol = "vmess" }) -address:depends({ type = "Xray", protocol = "vless" }) -address:depends({ type = "Xray", protocol = "http" }) -address:depends({ type = "Xray", protocol = "socks" }) -address:depends({ type = "Xray", protocol = "shadowsocks" }) -address:depends({ type = "Xray", protocol = "trojan" }) - ---[[ -use_ipv6 = s:option(Flag, "use_ipv6", translate("Use IPv6")) -use_ipv6.default = 0 -use_ipv6:depends("type", "Socks") -use_ipv6:depends("type", "SS") -use_ipv6:depends("type", "SS-Rust") -use_ipv6:depends("type", "SSR") -use_ipv6:depends("type", "Brook") -use_ipv6:depends("type", "Trojan") -use_ipv6:depends("type", "Trojan-Plus") -use_ipv6:depends("type", "Trojan-Go") -use_ipv6:depends("type", "Hysteria") -use_ipv6:depends({ type = "V2ray", protocol = "vmess" }) -use_ipv6:depends({ type = "V2ray", protocol = "vless" }) -use_ipv6:depends({ type = "V2ray", protocol = "http" }) -use_ipv6:depends({ type = "V2ray", protocol = "socks" }) -use_ipv6:depends({ type = "V2ray", protocol = "shadowsocks" }) -use_ipv6:depends({ type = "V2ray", protocol = "trojan" }) -use_ipv6:depends({ type = "Xray", protocol = "vmess" }) -use_ipv6:depends({ type = "Xray", protocol = "vless" }) -use_ipv6:depends({ type = "Xray", protocol = "http" }) -use_ipv6:depends({ type = "Xray", protocol = "socks" }) -use_ipv6:depends({ type = "Xray", protocol = "shadowsocks" }) -use_ipv6:depends({ type = "Xray", protocol = "trojan" }) ---]] - -port = s:option(Value, "port", translate("Port")) -port.datatype = "port" -port.rmempty = false -port:depends("type", "Socks") -port:depends("type", "SS") -port:depends("type", "SS-Rust") -port:depends("type", "SSR") -port:depends("type", "Brook") -port:depends("type", "Trojan") -port:depends("type", "Trojan-Plus") -port:depends("type", "Trojan-Go") -port:depends("type", "Naiveproxy") -port:depends("type", "Hysteria") -port:depends({ type = "V2ray", protocol = "vmess" }) -port:depends({ type = "V2ray", protocol = "vless" }) -port:depends({ type = "V2ray", protocol = "http" }) -port:depends({ type = "V2ray", protocol = "socks" }) -port:depends({ type = "V2ray", protocol = "shadowsocks" }) -port:depends({ type = "V2ray", protocol = "trojan" }) -port:depends({ type = "Xray", protocol = "vmess" }) -port:depends({ type = "Xray", protocol = "vless" }) -port:depends({ type = "Xray", protocol = "http" }) -port:depends({ type = "Xray", protocol = "socks" }) -port:depends({ type = "Xray", protocol = "shadowsocks" }) -port:depends({ type = "Xray", protocol = "trojan" }) - -username = s:option(Value, "username", translate("Username")) -username:depends("type", "Socks") -username:depends("type", "Naiveproxy") -username:depends({ type = "V2ray", protocol = "http" }) -username:depends({ type = "V2ray", protocol = "socks" }) -username:depends({ type = "Xray", protocol = "http" }) -username:depends({ type = "Xray", protocol = "socks" }) - -password = s:option(Value, "password", translate("Password")) -password.password = true -password:depends("type", "Socks") -password:depends("type", "SS") -password:depends("type", "SS-Rust") -password:depends("type", "SSR") -password:depends("type", "Brook") -password:depends("type", "Trojan") -password:depends("type", "Trojan-Plus") -password:depends("type", "Trojan-Go") -password:depends("type", "Naiveproxy") -password:depends({ type = "V2ray", protocol = "http" }) -password:depends({ type = "V2ray", protocol = "socks" }) -password:depends({ type = "V2ray", protocol = "shadowsocks" }) -password:depends({ type = "V2ray", protocol = "trojan" }) -password:depends({ type = "Xray", protocol = "http" }) -password:depends({ type = "Xray", protocol = "socks" }) -password:depends({ type = "Xray", protocol = "shadowsocks" }) -password:depends({ type = "Xray", protocol = "trojan" }) - -hysteria_protocol = s:option(ListValue, "hysteria_protocol", translate("Protocol")) -hysteria_protocol:value("udp", "UDP") -hysteria_protocol:value("faketcp", "faketcp") -hysteria_protocol:value("wechat-video", "wechat-video") -hysteria_protocol:depends("type", "Hysteria") -function hysteria_protocol.cfgvalue(self, section) - return m:get(section, "protocol") -end -function hysteria_protocol.write(self, section, value) - m:set(section, "protocol", value) -end - -hysteria_obfs = s:option(Value, "hysteria_obfs", translate("Obfs Password")) -hysteria_obfs:depends("type", "Hysteria") - -hysteria_auth_type = s:option(ListValue, "hysteria_auth_type", translate("Auth Type")) -hysteria_auth_type:value("disable", translate("Disable")) -hysteria_auth_type:value("string", translate("STRING")) -hysteria_auth_type:value("base64", translate("BASE64")) -hysteria_auth_type:depends("type", "Hysteria") - -hysteria_auth_password = s:option(Value, "hysteria_auth_password", translate("Auth Password")) -hysteria_auth_password.password = true -hysteria_auth_password:depends("hysteria_auth_type", "string") -hysteria_auth_password:depends("hysteria_auth_type", "base64") - -hysteria_alpn = s:option(Value, "hysteria_alpn", translate("QUIC TLS ALPN")) -hysteria_alpn:depends("type", "Hysteria") - -ss_encrypt_method = s:option(Value, "ss_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(ss_encrypt_method_list) do ss_encrypt_method:value(t) end -ss_encrypt_method:depends("type", "SS") -function ss_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function ss_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -ss_rust_encrypt_method = s:option(Value, "ss_rust_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(ss_rust_encrypt_method_list) do ss_rust_encrypt_method:value(t) end -ss_rust_encrypt_method:depends("type", "SS-Rust") -function ss_rust_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function ss_rust_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -ssr_encrypt_method = s:option(Value, "ssr_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(ssr_encrypt_method_list) do ssr_encrypt_method:value(t) end -ssr_encrypt_method:depends("type", "SSR") -function ssr_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function ssr_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -security = s:option(ListValue, "security", translate("Encrypt Method")) -for a, t in ipairs(security_list) do security:value(t) end -security:depends({ type = "V2ray", protocol = "vmess" }) -security:depends({ type = "Xray", protocol = "vmess" }) - -encryption = s:option(Value, "encryption", translate("Encrypt Method")) -encryption.default = "none" -encryption:value("none") -encryption:depends({ type = "V2ray", protocol = "vless" }) -encryption:depends({ type = "Xray", protocol = "vless" }) - -v_ss_encrypt_method = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(v_ss_encrypt_method_list) do v_ss_encrypt_method:value(t) end -v_ss_encrypt_method:depends({ type = "V2ray", protocol = "shadowsocks" }) -function v_ss_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function v_ss_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -x_ss_encrypt_method = s:option(ListValue, "x_ss_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(x_ss_encrypt_method_list) do x_ss_encrypt_method:value(t) end -x_ss_encrypt_method:depends({ type = "Xray", protocol = "shadowsocks" }) -function x_ss_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function x_ss_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -iv_check = s:option(Flag, "iv_check", translate("IV Check")) -iv_check:depends({ type = "V2ray", protocol = "shadowsocks" }) -iv_check:depends({ type = "Xray", protocol = "shadowsocks" }) - -ssr_protocol = s:option(Value, "ssr_protocol", translate("Protocol")) -for a, t in ipairs(ssr_protocol_list) do ssr_protocol:value(t) end -ssr_protocol:depends("type", "SSR") -function ssr_protocol.cfgvalue(self, section) - return m:get(section, "protocol") -end -function ssr_protocol.write(self, section, value) - m:set(section, "protocol", value) -end - -protocol_param = s:option(Value, "protocol_param", translate("Protocol_param")) -protocol_param:depends("type", "SSR") - -obfs = s:option(Value, "obfs", translate("Obfs")) -for a, t in ipairs(ssr_obfs_list) do obfs:value(t) end -obfs:depends("type", "SSR") - -obfs_param = s:option(Value, "obfs_param", translate("Obfs_param")) -obfs_param:depends("type", "SSR") - -timeout = s:option(Value, "timeout", translate("Connection Timeout")) -timeout.datatype = "uinteger" -timeout.default = 300 -timeout:depends("type", "SS") -timeout:depends("type", "SS-Rust") -timeout:depends("type", "SSR") - -tcp_fast_open = s:option(ListValue, "tcp_fast_open", translate("TCP Fast Open"), translate("Need node support required")) -tcp_fast_open:value("false") -tcp_fast_open:value("true") -tcp_fast_open:depends("type", "SS") -tcp_fast_open:depends("type", "SS-Rust") -tcp_fast_open:depends("type", "SSR") -tcp_fast_open:depends("type", "Trojan") -tcp_fast_open:depends("type", "Trojan-Plus") -tcp_fast_open:depends("type", "Trojan-Go") - -ss_plugin = s:option(ListValue, "ss_plugin", translate("plugin")) -ss_plugin:value("none", translate("none")) -if api.is_finded("xray-plugin") then ss_plugin:value("xray-plugin") end -if api.is_finded("v2ray-plugin") then ss_plugin:value("v2ray-plugin") end -if api.is_finded("obfs-local") then ss_plugin:value("obfs-local") end -ss_plugin:depends("type", "SS") -ss_plugin:depends("type", "SS-Rust") -function ss_plugin.cfgvalue(self, section) - return m:get(section, "plugin") -end -function ss_plugin.write(self, section, value) - m:set(section, "plugin", value) -end - -ss_plugin_opts = s:option(Value, "ss_plugin_opts", translate("opts")) -ss_plugin_opts:depends("ss_plugin", "xray-plugin") -ss_plugin_opts:depends("ss_plugin", "v2ray-plugin") -ss_plugin_opts:depends("ss_plugin", "obfs-local") -function ss_plugin_opts.cfgvalue(self, section) - return m:get(section, "plugin_opts") -end -function ss_plugin_opts.write(self, section, value) - m:set(section, "plugin_opts", value) -end - -use_kcp = s:option(Flag, "use_kcp", translate("Use") .. "Kcptun", - "" .. translate("Please confirm whether the Kcptun is installed. If not, please go to Rule Update download installation.") .. "") -use_kcp.default = 0 -use_kcp:depends("type", "SS") -use_kcp:depends("type", "SS-Rust") -use_kcp:depends("type", "SSR") - -kcp_server = s:option(Value, "kcp_server", translate("Kcptun Server")) -kcp_server.placeholder = translate("Default:Current Server") -kcp_server:depends("use_kcp", "1") - -kcp_port = s:option(Value, "kcp_port", translate("Kcptun Port")) -kcp_port.datatype = "port" -kcp_port:depends("use_kcp", "1") - -kcp_opts = s:option(TextValue, "kcp_opts", translate("Kcptun Config"), translate("--crypt aes192 --key abc123 --mtu 1350 --sndwnd 128 --rcvwnd 1024 --mode fast")) -kcp_opts.placeholder = "--crypt aes192 --key abc123 --mtu 1350 --sndwnd 128 --rcvwnd 1024 --mode fast" -kcp_opts:depends("use_kcp", "1") - -uuid = s:option(Value, "uuid", translate("ID")) -uuid.password = true -uuid:depends({ type = "V2ray", protocol = "vmess" }) -uuid:depends({ type = "V2ray", protocol = "vless" }) -uuid:depends({ type = "Xray", protocol = "vmess" }) -uuid:depends({ type = "Xray", protocol = "vless" }) - -tls = s:option(Flag, "tls", translate("TLS")) -tls.default = 0 -tls.validate = function(self, value, t) - if value then - local type = type:formvalue(t) or "" - if value == "0" and (type == "Trojan" or type == "Trojan-Plus") then - return nil, translate("Original Trojan only supported 'tls', please choose 'tls'.") - end - return value - end -end -tls:depends({ type = "V2ray", protocol = "vmess" }) -tls:depends({ type = "V2ray", protocol = "vless" }) -tls:depends({ type = "V2ray", protocol = "socks" }) -tls:depends({ type = "V2ray", protocol = "trojan" }) -tls:depends({ type = "V2ray", protocol = "shadowsocks" }) -tls:depends({ type = "Xray", protocol = "vmess" }) -tls:depends({ type = "Xray", protocol = "vless" }) -tls:depends({ type = "Xray", protocol = "socks" }) -tls:depends({ type = "Xray", protocol = "trojan" }) -tls:depends({ type = "Xray", protocol = "shadowsocks" }) -tls:depends("type", "Trojan") -tls:depends("type", "Trojan-Plus") -tls:depends("type", "Trojan-Go") - -xtls = s:option(Flag, "xtls", translate("XTLS")) -xtls.default = 0 -xtls:depends({ type = "Xray", protocol = "vless", tls = true }) -xtls:depends({ type = "Xray", protocol = "trojan", tls = true }) - -flow = s:option(Value, "flow", translate("flow")) -flow.default = "xtls-rprx-direct" -flow:value("xtls-rprx-origin") -flow:value("xtls-rprx-origin-udp443") -flow:value("xtls-rprx-direct") -flow:value("xtls-rprx-direct-udp443") -flow:value("xtls-rprx-splice") -flow:value("xtls-rprx-splice-udp443") -flow:depends("xtls", true) - -alpn = s:option(ListValue, "alpn", translate("alpn")) -alpn.default = "default" -alpn:value("default", translate("Default")) -alpn:value("h2,http/1.1") -alpn:value("h2") -alpn:value("http/1.1") -alpn:depends({ type = "V2ray", tls = true }) -alpn:depends({ type = "Xray", tls = true }) - --- [[ TLS部分 ]] -- -tls_sessionTicket = s:option(Flag, "tls_sessionTicket", translate("Session Ticket")) -tls_sessionTicket.default = "0" -tls_sessionTicket:depends({ type = "Trojan", tls = true }) -tls_sessionTicket:depends({ type = "Trojan-Plus", tls = true }) -tls_sessionTicket:depends({ type = "Trojan-Go", tls = true }) - -trojan_go_fingerprint = s:option(ListValue, "trojan_go_fingerprint", translate("Finger Print")) -trojan_go_fingerprint:value("disable", translate("Disable")) -trojan_go_fingerprint:value("firefox") -trojan_go_fingerprint:value("chrome") -trojan_go_fingerprint:value("ios") -trojan_go_fingerprint.default = "disable" -trojan_go_fingerprint:depends({ type = "Trojan-Go", tls = true }) -function trojan_go_fingerprint.cfgvalue(self, section) - return m:get(section, "fingerprint") -end -function trojan_go_fingerprint.write(self, section, value) - m:set(section, "fingerprint", value) -end - -tls_serverName = s:option(Value, "tls_serverName", translate("Domain")) -tls_serverName:depends("tls", true) -tls_serverName:depends("type", "Hysteria") - -tls_allowInsecure = s:option(Flag, "tls_allowInsecure", translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped.")) -tls_allowInsecure.default = "0" -tls_allowInsecure:depends("tls", true) -tls_allowInsecure:depends("type", "Hysteria") - -xray_fingerprint = s:option(ListValue, "xray_fingerprint", translate("Finger Print")) -xray_fingerprint:value("disable", translate("Disable")) -xray_fingerprint:value("chrome") -xray_fingerprint:value("firefox") -xray_fingerprint:value("safari") -xray_fingerprint:value("randomized") -xray_fingerprint.default = "disable" -xray_fingerprint:depends({ type = "Xray", tls = true, xtls = false }) -function xray_fingerprint.cfgvalue(self, section) - return m:get(section, "fingerprint") -end -function xray_fingerprint.write(self, section, value) - m:set(section, "fingerprint", value) -end - -trojan_transport = s:option(ListValue, "trojan_transport", translate("Transport")) -trojan_transport:value("original", translate("Original")) -trojan_transport:value("ws", "WebSocket") -trojan_transport.default = "original" -trojan_transport:depends("type", "Trojan-Go") - -trojan_plugin = s:option(ListValue, "plugin_type", translate("Transport Plugin")) -trojan_plugin:value("plaintext", "Plain Text") -trojan_plugin:value("shadowsocks", "ShadowSocks") -trojan_plugin:value("other", "Other") -trojan_plugin.default = "plaintext" -trojan_plugin:depends({ tls = false, trojan_transport = "original" }) - -trojan_plugin_cmd = s:option(Value, "plugin_cmd", translate("Plugin Binary")) -trojan_plugin_cmd.placeholder = "eg: /usr/bin/v2ray-plugin" -trojan_plugin_cmd:depends({ plugin_type = "shadowsocks" }) -trojan_plugin_cmd:depends({ plugin_type = "other" }) - -trojan_plugin_op = s:option(Value, "plugin_option", translate("Plugin Option")) -trojan_plugin_op.placeholder = "eg: obfs=http;obfs-host=www.baidu.com" -trojan_plugin_op:depends({ plugin_type = "shadowsocks" }) -trojan_plugin_op:depends({ plugin_type = "other" }) - -trojan_plugin_arg = s:option(DynamicList, "plugin_arg", translate("Plugin Option Args")) -trojan_plugin_arg.placeholder = "eg: [\"-config\", \"test.json\"]" -trojan_plugin_arg:depends({ plugin_type = "shadowsocks" }) -trojan_plugin_arg:depends({ plugin_type = "other" }) - -transport = s:option(ListValue, "transport", translate("Transport")) -transport:value("tcp", "TCP") -transport:value("mkcp", "mKCP") -transport:value("ws", "WebSocket") -transport:value("h2", "HTTP/2") -transport:value("ds", "DomainSocket") -transport:value("quic", "QUIC") -transport:value("grpc", "gRPC") -transport:depends({ type = "V2ray", protocol = "vmess" }) -transport:depends({ type = "V2ray", protocol = "vless" }) -transport:depends({ type = "V2ray", protocol = "socks" }) -transport:depends({ type = "V2ray", protocol = "shadowsocks" }) -transport:depends({ type = "V2ray", protocol = "trojan" }) -transport:depends({ type = "Xray", protocol = "vmess" }) -transport:depends({ type = "Xray", protocol = "vless" }) -transport:depends({ type = "Xray", protocol = "socks" }) -transport:depends({ type = "Xray", protocol = "shadowsocks" }) -transport:depends({ type = "Xray", protocol = "trojan" }) - ---[[ -ss_transport = s:option(ListValue, "ss_transport", translate("Transport")) -ss_transport:value("ws", "WebSocket") -ss_transport:value("h2", "HTTP/2") -ss_transport:value("h2+ws", "HTTP/2 & WebSocket") -ss_transport:depends({ type = "V2ray", protocol = "shadowsocks" }) -ss_transport:depends({ type = "Xray", protocol = "shadowsocks" }) -]]-- - --- [[ TCP部分 ]]-- - --- TCP伪装 -tcp_guise = s:option(ListValue, "tcp_guise", translate("Camouflage Type")) -tcp_guise:value("none", "none") -tcp_guise:value("http", "http") -tcp_guise:depends("transport", "tcp") - --- HTTP域名 -tcp_guise_http_host = s:option(DynamicList, "tcp_guise_http_host", translate("HTTP Host")) -tcp_guise_http_host:depends("tcp_guise", "http") - --- HTTP路径 -tcp_guise_http_path = s:option(DynamicList, "tcp_guise_http_path", translate("HTTP Path")) -tcp_guise_http_path:depends("tcp_guise", "http") - --- [[ mKCP部分 ]]-- - -mkcp_guise = s:option(ListValue, "mkcp_guise", translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)')) -for a, t in ipairs(header_type_list) do mkcp_guise:value(t) end -mkcp_guise:depends("transport", "mkcp") - -mkcp_mtu = s:option(Value, "mkcp_mtu", translate("KCP MTU")) -mkcp_mtu.default = "1350" -mkcp_mtu:depends("transport", "mkcp") - -mkcp_tti = s:option(Value, "mkcp_tti", translate("KCP TTI")) -mkcp_tti.default = "20" -mkcp_tti:depends("transport", "mkcp") - -mkcp_uplinkCapacity = s:option(Value, "mkcp_uplinkCapacity", translate("KCP uplinkCapacity")) -mkcp_uplinkCapacity.default = "5" -mkcp_uplinkCapacity:depends("transport", "mkcp") - -mkcp_downlinkCapacity = s:option(Value, "mkcp_downlinkCapacity", translate("KCP downlinkCapacity")) -mkcp_downlinkCapacity.default = "20" -mkcp_downlinkCapacity:depends("transport", "mkcp") - -mkcp_congestion = s:option(Flag, "mkcp_congestion", translate("KCP Congestion")) -mkcp_congestion:depends("transport", "mkcp") - -mkcp_readBufferSize = s:option(Value, "mkcp_readBufferSize", translate("KCP readBufferSize")) -mkcp_readBufferSize.default = "1" -mkcp_readBufferSize:depends("transport", "mkcp") - -mkcp_writeBufferSize = s:option(Value, "mkcp_writeBufferSize", translate("KCP writeBufferSize")) -mkcp_writeBufferSize.default = "1" -mkcp_writeBufferSize:depends("transport", "mkcp") - -mkcp_seed = s:option(Value, "mkcp_seed", translate("KCP Seed")) -mkcp_seed:depends("transport", "mkcp") - --- [[ WebSocket部分 ]]-- -ws_host = s:option(Value, "ws_host", translate("WebSocket Host")) -ws_host:depends("transport", "ws") -ws_host:depends("ss_transport", "ws") -ws_host:depends("trojan_transport", "ws") - -ws_path = s:option(Value, "ws_path", translate("WebSocket Path")) -ws_path:depends("transport", "ws") -ws_path:depends("ss_transport", "ws") -ws_path:depends("trojan_transport", "ws") -ws_path:depends({ type = "Brook", brook_protocol = "wsclient" }) - -ws_enableEarlyData = s:option(Flag, "ws_enableEarlyData", translate("Enable early data")) -ws_enableEarlyData:depends("transport", "ws") - -ws_maxEarlyData = s:option(Value, "ws_maxEarlyData", translate("Early data length")) -ws_maxEarlyData.default = "1024" -ws_maxEarlyData:depends("ws_enableEarlyData", true) -function ws_maxEarlyData.cfgvalue(self, section) - return m:get(section, "ws_maxEarlyData") -end -function ws_maxEarlyData.write(self, section, value) - m:set(section, "ws_maxEarlyData", value) -end - --- [[ HTTP/2部分 ]]-- -h2_host = s:option(Value, "h2_host", translate("HTTP/2 Host")) -h2_host:depends("transport", "h2") -h2_host:depends("ss_transport", "h2") - -h2_path = s:option(Value, "h2_path", translate("HTTP/2 Path")) -h2_path:depends("transport", "h2") -h2_path:depends("ss_transport", "h2") - -h2_health_check = s:option(Flag, "h2_health_check", translate("Health check")) -h2_health_check:depends({ type = "Xray", transport = "h2"}) - -h2_read_idle_timeout = s:option(Value, "h2_read_idle_timeout", translate("Idle timeout")) -h2_read_idle_timeout.default = "10" -h2_read_idle_timeout:depends("h2_health_check", true) - -h2_health_check_timeout = s:option(Value, "h2_health_check_timeout", translate("Health check timeout")) -h2_health_check_timeout.default = "15" -h2_health_check_timeout:depends("h2_health_check", true) - --- [[ DomainSocket部分 ]]-- -ds_path = s:option(Value, "ds_path", "Path", translate("A legal file path. This file must not exist before running.")) -ds_path:depends("transport", "ds") - --- [[ QUIC部分 ]]-- -quic_security = s:option(ListValue, "quic_security", translate("Encrypt Method")) -quic_security:value("none") -quic_security:value("aes-128-gcm") -quic_security:value("chacha20-poly1305") -quic_security:depends("transport", "quic") - -quic_key = s:option(Value, "quic_key", translate("Encrypt Method") .. translate("Key")) -quic_key:depends("transport", "quic") - -quic_guise = s:option(ListValue, "quic_guise", translate("Camouflage Type")) -for a, t in ipairs(header_type_list) do quic_guise:value(t) end -quic_guise:depends("transport", "quic") - --- [[ gRPC部分 ]]-- -grpc_serviceName = s:option(Value, "grpc_serviceName", "ServiceName") -grpc_serviceName:depends("transport", "grpc") - -grpc_mode = s:option(ListValue, "grpc_mode", "gRPC " .. translate("Transfer mode")) -grpc_mode:value("gun") -grpc_mode:value("multi") -grpc_mode:depends({ type = "Xray", transport = "grpc"}) - -grpc_health_check = s:option(Flag, "grpc_health_check", translate("Health check")) -grpc_health_check:depends({ type = "Xray", transport = "grpc"}) - -grpc_idle_timeout = s:option(Value, "grpc_idle_timeout", translate("Idle timeout")) -grpc_idle_timeout.default = "10" -grpc_idle_timeout:depends("grpc_health_check", true) - -grpc_health_check_timeout = s:option(Value, "grpc_health_check_timeout", translate("Health check timeout")) -grpc_health_check_timeout.default = "20" -grpc_health_check_timeout:depends("grpc_health_check", true) - -grpc_permit_without_stream = s:option(Flag, "grpc_permit_without_stream", translate("Permit without stream")) -grpc_permit_without_stream.default = "0" -grpc_permit_without_stream:depends("grpc_health_check", true) - -grpc_initial_windows_size = s:option(Value, "grpc_initial_windows_size", translate("Initial Windows Size")) -grpc_initial_windows_size.default = "0" -grpc_initial_windows_size:depends({ type = "Xray", transport = "grpc"}) - --- [[ Trojan-Go Shadowsocks2 ]] -- -ss_aead = s:option(Flag, "ss_aead", translate("Shadowsocks secondary encryption")) -ss_aead:depends("type", "Trojan-Go") -ss_aead.default = "0" - -ss_aead_method = s:option(ListValue, "ss_aead_method", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ss_aead) do ss_aead_method:value(v, v) end -ss_aead_method.default = "aes-128-gcm" -ss_aead_method:depends("ss_aead", "1") - -ss_aead_pwd = s:option(Value, "ss_aead_pwd", translate("Password")) -ss_aead_pwd.password = true -ss_aead_pwd:depends("ss_aead", "1") - --- [[ Trojan-Go Mux ]]-- -mux = s:option(Flag, "smux", translate("Smux")) -mux:depends("type", "Trojan-Go") - --- [[ Mux ]]-- -mux = s:option(Flag, "mux", translate("Mux")) -mux:depends({ type = "V2ray", protocol = "vmess" }) -mux:depends({ type = "V2ray", protocol = "vless", xtls = false }) -mux:depends({ type = "V2ray", protocol = "http" }) -mux:depends({ type = "V2ray", protocol = "socks" }) -mux:depends({ type = "V2ray", protocol = "shadowsocks" }) -mux:depends({ type = "V2ray", protocol = "trojan" }) -mux:depends({ type = "Xray", protocol = "vmess" }) -mux:depends({ type = "Xray", protocol = "vless", xtls = false }) -mux:depends({ type = "Xray", protocol = "http" }) -mux:depends({ type = "Xray", protocol = "socks" }) -mux:depends({ type = "Xray", protocol = "shadowsocks" }) -mux:depends({ type = "Xray", protocol = "trojan" }) - -mux_concurrency = s:option(Value, "mux_concurrency", translate("Mux concurrency")) -mux_concurrency.default = 8 -mux_concurrency:depends("mux", true) -mux_concurrency:depends("smux", true) - -smux_idle_timeout = s:option(Value, "smux_idle_timeout", translate("Mux idle timeout")) -smux_idle_timeout.default = 60 -smux_idle_timeout:depends("smux", true) - -hysteria_up_mbps = s:option(Value, "hysteria_up_mbps", translate("Max upload Mbps")) -hysteria_up_mbps.default = "10" -hysteria_up_mbps:depends("type", "Hysteria") - -hysteria_down_mbps = s:option(Value, "hysteria_down_mbps", translate("Max download Mbps")) -hysteria_down_mbps.default = "50" -hysteria_down_mbps:depends("type", "Hysteria") - -hysteria_recv_window_conn = s:option(Value, "hysteria_recv_window_conn", translate("QUIC stream receive window")) -hysteria_recv_window_conn:depends("type", "Hysteria") - -hysteria_recv_window = s:option(Value, "hysteria_recv_window", translate("QUIC connection receive window")) -hysteria_recv_window:depends("type", "Hysteria") - -hysteria_disable_mtu_discovery = s:option(Flag, "hysteria_disable_mtu_discovery", translate("Disable MTU detection")) -hysteria_disable_mtu_discovery:depends("type", "Hysteria") - -protocol.validate = function(self, value) - if value == "_shunt" or value == "_balancing" then - address.rmempty = true - port.rmempty = true - end - return value -end - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua deleted file mode 100644 index ccf5ee66..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua +++ /dev/null @@ -1,145 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local sys = api.sys -local datatypes = api.datatypes - -m = Map(appname) - --- [[ Other Settings ]]-- -s = m:section(TypedSection, "global_other") -s.anonymous = true - -o = s:option(MultiValue, "nodes_ping", " ") -o:value("auto_ping", translate("Auto Ping"), translate("This will automatically ping the node for latency")) -o:value("tcping", translate("Tcping"), translate("This will use tcping replace ping detection of node")) -o:value("info", translate("Show server address and port"), translate("Show server address and port")) - --- [[ Add the node via the link ]]-- -s:append(Template(appname .. "/node_list/link_add_node")) - -local nodes_ping = m:get("@global_other[0]", "nodes_ping") or "" - --- [[ Node List ]]-- -s = m:section(TypedSection, "nodes") -s.anonymous = true -s.addremove = true -s.template = "cbi/tblsection" -s.extedit = api.url("node_config", "%s") -function s.create(e, t) - local uuid = api.gen_uuid() - t = uuid - TypedSection.create(e, t) - luci.http.redirect(e.extedit:format(t)) -end - -function s.remove(e, t) - m.uci:foreach(appname, "socks", function(s) - if s["node"] == t then - m:del(s[".name"]) - end - end) - m.uci:foreach(appname, "haproxy_config", function(s) - if s["lbss"] and s["lbss"] == t then - m:del(s[".name"]) - end - end) - m.uci:foreach(appname, "acl_rule", function(s) - if s["tcp_node"] and s["tcp_node"] == t then - m:set(s[".name"], "tcp_node", "default") - end - if s["udp_node"] and s["udp_node"] == t then - m:set(s[".name"], "udp_node", "default") - end - end) - for k, v in ipairs(m:get("@auto_switch[0]", "tcp_node") or {}) do - if v and v == t then - sys.call(string.format("uci -q del_list %s.@auto_switch[0].tcp_node='%s'", appname, v)) - end - end - TypedSection.remove(e, t) - local new_node = "nil" - local node0 = m:get("@nodes[0]") or nil - if node0 then - new_node = node0[".name"] - end - if (m:get("@global[0]", "tcp_node") or "nil") == t then - m:set('@global[0]', "tcp_node", new_node) - end - if (m:get("@global[0]", "udp_node") or "nil") == t then - m:set('@global[0]', "udp_node", new_node) - end -end - -s.sortable = true --- 简洁模式 -o = s:option(DummyValue, "add_from", "") -o.cfgvalue = function(t, n) - local v = Value.cfgvalue(t, n) - if v and v ~= '' then - local group = m:get(n, "group") or "" - if group ~= "" then - v = v .. " " .. group - end - return v - else - return '' - end -end -o = s:option(DummyValue, "remarks", translate("Remarks")) -o.rawhtml = true -o.cfgvalue = function(t, n) - local str = "" - local is_sub = m:get(n, "is_sub") or "" - local group = m:get(n, "group") or "" - local remarks = m:get(n, "remarks") or "" - local type = m:get(n, "type") or "" - str = str .. string.format("", appname, n, type) - if type == "V2ray" or type == "Xray" then - local protocol = m:get(n, "protocol") - if protocol == "_balancing" then - protocol = translate("Balancing") - elseif protocol == "_shunt" then - protocol = translate("Shunt") - elseif protocol == "vmess" then - protocol = "VMess" - elseif protocol == "vless" then - protocol = "VLESS" - else - protocol = protocol:gsub("^%l",string.upper) - end - type = type .. " " .. protocol - end - local address = m:get(n, "address") or "" - local port = m:get(n, "port") or "" - str = str .. translate(type) .. ":" .. remarks - if address ~= "" and port ~= "" then - if nodes_ping:find("info") then - if datatypes.ip6addr(address) then - str = str .. string.format("([%s]:%s)", address, port) - else - str = str .. string.format("(%s:%s)", address, port) - end - end - str = str .. string.format("", appname, n, address) - str = str .. string.format("", appname, n, port) - end - return str -end - ----- Ping -o = s:option(DummyValue, "ping") -o.width = "8%" -o.rawhtml = true -o.cfgvalue = function(t, n) - local result = "---" - if not nodes_ping:find("auto_ping") then - result = string.format('Ping', n) - else - result = string.format('---', n) - end - return result -end - -m:append(Template(appname .. "/node_list/node_list")) - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua deleted file mode 100644 index 71be3cc4..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua +++ /dev/null @@ -1,142 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local has_ss = api.is_finded("ss-redir") -local has_ss_rust = api.is_finded("sslocal") -local has_trojan_plus = api.is_finded("trojan-plus") -local has_v2ray = api.is_finded("v2ray") -local has_xray = api.is_finded("xray") -local has_trojan_go = api.is_finded("trojan-go") -local ss_aead_type = {} -local trojan_type = {} -if has_ss then - ss_aead_type[#ss_aead_type + 1] = "shadowsocks-libev" -end -if has_ss_rust then - ss_aead_type[#ss_aead_type + 1] = "shadowsocks-rust" -end -if has_trojan_plus then - trojan_type[#trojan_type + 1] = "trojan-plus" -end -if has_v2ray then - trojan_type[#trojan_type + 1] = "v2ray" - ss_aead_type[#ss_aead_type + 1] = "v2ray" -end -if has_xray then - trojan_type[#trojan_type + 1] = "xray" - ss_aead_type[#ss_aead_type + 1] = "xray" -end -if has_trojan_go then - trojan_type[#trojan_type + 1] = "trojan-go" -end - -m = Map(appname) - --- [[ Subscribe Settings ]]-- -s = m:section(TypedSection, "global_subscribe", "") -s.anonymous = true - ----- Subscribe via proxy -o = s:option(Flag, "subscribe_proxy", translate("Subscribe via proxy")) -o.default = 0 -o.rmempty = false - -o = s:option(ListValue, "filter_keyword_mode", translate("Filter keyword Mode")) -o:value("0", translate("Close")) -o:value("1", translate("Discard List")) -o:value("2", translate("Keep List")) -o:value("3", translate("Discard List,But Keep List First")) -o:value("4", translate("Keep List,But Discard List First")) - -o = s:option(DynamicList, "filter_discard_list", translate("Discard List")) - -o = s:option(DynamicList, "filter_keep_list", translate("Keep List")) - -if #ss_aead_type > 0 then - o = s:option(ListValue, "ss_aead_type", translate("SS AEAD Node Use Type")) - for key, value in pairs(ss_aead_type) do - o:value(value, translate(value:gsub("^%l",string.upper))) - end -end - -if #trojan_type > 0 then - o = s:option(ListValue, "trojan_type", translate("Trojan Node Use Type")) - for key, value in pairs(trojan_type) do - o:value(value, translate(value:gsub("^%l",string.upper))) - end -end - ----- Subscribe Delete All -o = s:option(Button, "_stop", translate("Delete All Subscribe Node")) -o.inputstyle = "remove" -function o.write(e, e) - luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua truncate > /dev/null 2>&1") -end - -o = s:option(Button, "_update", translate("Manual subscription All")) -o.inputstyle = "apply" -function o.write(t, n) - luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start > /dev/null 2>&1 &") - luci.http.redirect(api.url("log")) -end - -s = m:section(TypedSection, "subscribe_list", "", "" .. translate("Please input the subscription url first, save and submit before manual subscription.") .. "") -s.addremove = true -s.anonymous = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = api.url("node_subscribe_config", "%s") -function s.create(e, t) - local id = TypedSection.create(e, t) - luci.http.redirect(e.extedit:format(id)) -end - -o = s:option(Value, "remark", translate("Remarks")) -o.width = "auto" -o.rmempty = false -o.validate = function(self, value, t) - if value then - local count = 0 - m.uci:foreach(appname, "subscribe_list", function(e) - if e[".name"] ~= t and e["remark"] == value then - count = count + 1 - end - end) - if count > 0 then - return nil, translate("This remark already exists, please change a new remark.") - end - return value - end -end - -o = s:option(DummyValue, "_node_count") -o.rawhtml = true -o.cfgvalue = function(t, n) - local remark = m:get(n, "remark") or "" - local num = 0 - m.uci:foreach(appname, "nodes", function(s) - if s["add_from"] ~= "" and s["add_from"] == remark then - num = num + 1 - end - end) - return string.format("%s", remark .. " " .. translate("Node num") .. ": " .. num, num) -end - -o = s:option(Value, "url", translate("Subscribe URL")) -o.width = "auto" -o.rmempty = false - -o = s:option(Button, "_remove", translate("Delete the subscribed node")) -o.inputstyle = "remove" -function o.write(t, n) - local remark = m:get(n, "remark") or "" - luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua truncate " .. remark .. " > /dev/null 2>&1") -end - -o = s:option(Button, "_update", translate("Manual subscription")) -o.inputstyle = "apply" -function o.write(t, n) - luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start " .. n .. " > /dev/null 2>&1 &") - luci.http.redirect(api.url("log")) -end - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua deleted file mode 100644 index 402ba48e..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua +++ /dev/null @@ -1,110 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local sys = api.sys -local has_ss = api.is_finded("ss-redir") -local has_ss_rust = api.is_finded("sslocal") -local has_trojan_plus = api.is_finded("trojan-plus") -local has_v2ray = api.is_finded("v2ray") -local has_xray = api.is_finded("xray") -local has_trojan_go = api.is_finded("trojan-go") -local ss_aead_type = {} -local trojan_type = {} -if has_ss then - ss_aead_type[#ss_aead_type + 1] = "shadowsocks-libev" -end -if has_ss_rust then - ss_aead_type[#ss_aead_type + 1] = "shadowsocks-rust" -end -if has_trojan_plus then - trojan_type[#trojan_type + 1] = "trojan-plus" -end -if has_v2ray then - trojan_type[#trojan_type + 1] = "v2ray" - ss_aead_type[#ss_aead_type + 1] = "v2ray" -end -if has_xray then - trojan_type[#trojan_type + 1] = "xray" - ss_aead_type[#ss_aead_type + 1] = "xray" -end -if has_trojan_go then - trojan_type[#trojan_type + 1] = "trojan-go" -end - -m = Map(appname) -m.redirect = api.url("node_subscribe") - -s = m:section(NamedSection, arg[1]) -s.addremove = false -s.dynamic = false - -o = s:option(Value, "remark", translate("Subscribe Remark")) -o.rmempty = false - -o = s:option(TextValue, "url", translate("Subscribe URL")) -o.rows = 5 -o.rmempty = false - -o = s:option(Flag, "allowInsecure", translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped.")) -o.default = "1" -o.rmempty = false - -o = s:option(ListValue, "filter_keyword_mode", translate("Filter keyword Mode")) -o.default = "5" -o:value("0", translate("Close")) -o:value("1", translate("Discard List")) -o:value("2", translate("Keep List")) -o:value("3", translate("Discard List,But Keep List First")) -o:value("4", translate("Keep List,But Discard List First")) -o:value("5", translate("Use global config")) - -o = s:option(DynamicList, "filter_discard_list", translate("Discard List")) -o:depends("filter_keyword_mode", "1") -o:depends("filter_keyword_mode", "3") -o:depends("filter_keyword_mode", "4") - -o = s:option(DynamicList, "filter_keep_list", translate("Keep List")) -o:depends("filter_keyword_mode", "2") -o:depends("filter_keyword_mode", "3") -o:depends("filter_keyword_mode", "4") - -if #ss_aead_type > 0 then - o = s:option(ListValue, "ss_aead_type", translate("SS AEAD Node Use Type")) - o.default = "global" - o:value("global", translate("Use global config")) - for key, value in pairs(ss_aead_type) do - o:value(value, translate(value:gsub("^%l",string.upper))) - end -end - -if #trojan_type > 0 then - o = s:option(ListValue, "trojan_type", translate("Trojan Node Use Type")) - o.default = "global" - o:value("global", translate("Use global config")) - for key, value in pairs(trojan_type) do - o:value(value, translate(value:gsub("^%l",string.upper))) - end -end - ----- Enable auto update subscribe -o = s:option(Flag, "auto_update", translate("Enable auto update subscribe")) -o.default = 0 -o.rmempty = false - ----- Week update rules -o = s:option(ListValue, "week_update", translate("Week update rules")) -o:value(7, translate("Every day")) -for e = 1, 6 do o:value(e, translate("Week") .. e) end -o:value(0, translate("Week") .. translate("day")) -o.default = 0 -o:depends("auto_update", true) - ----- Day update rules -o = s:option(ListValue, "time_update", translate("Day update rules")) -for e = 0, 23 do o:value(e, e .. translate("oclock")) end -o.default = 0 -o:depends("auto_update", true) - -o = s:option(Value, "user_agent", translate("User-Agent")) -o.default = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36" - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua deleted file mode 100644 index a8793bba..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua +++ /dev/null @@ -1,147 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname - -m = Map(appname) - --- [[ Delay Settings ]]-- -s = m:section(TypedSection, "global_delay", translate("Delay Settings")) -s.anonymous = true -s.addremove = false - ----- Delay Start -o = s:option(Value, "start_delay", translate("Delay Start"), - translate("Units:seconds")) -o.default = "1" -o.rmempty = true - ----- Open and close Daemon -o = s:option(Flag, "start_daemon", translate("Open and close Daemon")) -o.default = 1 -o.rmempty = false - ---[[ ----- Open and close automatically -o = s:option(Flag, "auto_on", translate("Open and close automatically")) -o.default = 0 -o.rmempty = false - ----- Automatically turn off time -o = s:option(ListValue, "time_off", translate("Automatically turn off time")) -o.default = nil -o:depends("auto_on", true) -o:value(nil, translate("Disable")) -for e = 0, 23 do o:value(e, e .. translate("oclock")) end - ----- Automatically turn on time -o = s:option(ListValue, "time_on", translate("Automatically turn on time")) -o.default = nil -o:depends("auto_on", true) -o:value(nil, translate("Disable")) -for e = 0, 23 do o:value(e, e .. translate("oclock")) end - ----- Automatically restart time -o = s:option(ListValue, "time_restart", translate("Automatically restart time")) -o.default = nil -o:depends("auto_on", true) -o:value(nil, translate("Disable")) -for e = 0, 23 do o:value(e, e .. translate("oclock")) end ---]] - --- [[ Forwarding Settings ]]-- -s = m:section(TypedSection, "global_forwarding", - translate("Forwarding Settings")) -s.anonymous = true -s.addremove = false - ----- TCP No Redir Ports -o = s:option(Value, "tcp_no_redir_ports", translate("TCP No Redir Ports")) -o.default = "disable" -o:value("disable", translate("No patterns are used")) -o:value("1:65535", translate("All")) - ----- UDP No Redir Ports -o = s:option(Value, "udp_no_redir_ports", translate("UDP No Redir Ports"), - "" .. translate( - "Fill in the ports you don't want to be forwarded by the agent, with the highest priority.") .. - "") -o.default = "disable" -o:value("disable", translate("No patterns are used")) -o:value("1:65535", translate("All")) - ----- TCP Redir Ports -o = s:option(Value, "tcp_redir_ports", translate("TCP Redir Ports")) -o.default = "22,25,53,143,465,587,853,993,995,80,443" -o:value("1:65535", translate("All")) -o:value("22,25,53,143,465,587,853,993,995,80,443", translate("Common Use")) -o:value("80,443", translate("Only Web")) -o:value("80:65535", "80 " .. translate("or more")) -o:value("1:443", "443 " .. translate("or less")) - ----- UDP Redir Ports -o = s:option(Value, "udp_redir_ports", translate("UDP Redir Ports")) -o.default = "1:65535" -o:value("1:65535", translate("All")) -o:value("53", "DNS") - -if os.execute("lsmod | grep -i REDIRECT >/dev/null") == 0 and os.execute("lsmod | grep -i TPROXY >/dev/null") == 0 then - o = s:option(ListValue, "tcp_proxy_way", translate("TCP Proxy Way")) - o.default = "redirect" - o:value("redirect", "REDIRECT") - o:value("tproxy", "TPROXY") - o:depends("ipv6_tproxy", false) - - o = s:option(ListValue, "_tcp_proxy_way", translate("TCP Proxy Way")) - o.default = "tproxy" - o:value("tproxy", "TPROXY") - o:depends("ipv6_tproxy", true) - o.write = function(self, section, value) - return self.map:set(section, "tcp_proxy_way", value) - end - - ---- IPv6 TProxy - o = s:option(Flag, "ipv6_tproxy", translate("IPv6 TProxy"), - "" .. translate( - "Experimental feature. Make sure that your node supports IPv6.") .. - "") - o.default = 0 - o.rmempty = false -end - -o = s:option(Flag, "accept_icmp", translate("Hijacking ICMP (PING)")) -o.default = 0 - -o = s:option(Flag, "accept_icmpv6", translate("Hijacking ICMPv6 (IPv6 PING)")) -o:depends("ipv6_tproxy", true) -o.default = 0 - ---[[ ----- TCP Redir Port -o = s:option(Value, "tcp_redir_port", translate("TCP Redir Port")) -o.datatype = "port" -o.default = 1041 -o.rmempty = true - ----- UDP Redir Port -o = s:option(Value, "udp_redir_port", translate("UDP Redir Port")) -o.datatype = "port" -o.default = 1051 -o.rmempty = true - ----- Kcptun Port -o = s:option(Value, "kcptun_port", translate("Kcptun Port")) -o.datatype = "port" -o.default = 12948 -o.rmempty = true ---]] - --- [[ Other Settings ]]-- -s = m:section(TypedSection, "global_other", translate("Other Settings")) -s.anonymous = true -s.addremove = false - -o = s:option(MultiValue, "status", translate("Status info")) -o:value("big_icon", translate("Big icon")) -- 大图标 -o:value("show_check_port", translate("Show node check")) -- 显示节点检测 -o:value("show_ip111", translate("Show Show IP111")) -- 显示IP111 - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua deleted file mode 100644 index 1303ce6f..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua +++ /dev/null @@ -1,91 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local has_v2ray = api.is_finded("v2ray") -local has_xray = api.is_finded("xray") - -m = Map(appname) --- [[ Rule Settings ]]-- -s = m:section(TypedSection, "global_rules", translate("Rule status")) -s.anonymous = true - ---[[ -o = s:option(Flag, "adblock", translate("Enable adblock")) -o.rmempty = false -]]-- - ----- gfwlist URL -o = s:option(DynamicList, "gfwlist_url", translate("GFW domains(gfwlist) Update URL")) -o:value("https://cdn.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@release/gfwlist.txt", translate("v2fly/domain-list-community")) -o:value("https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt", translate("Loyalsoldier/v2ray-rules-dat")) -o:value("https://cdn.jsdelivr.net/gh/Loukky/gfwlist-by-loukky/gfwlist.txt", translate("Loukky/gfwlist-by-loukky")) -o:value("https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt", translate("gfwlist/gfwlist")) -o.default = "https://cdn.jsdelivr.net/gh/Loukky/gfwlist-by-loukky/gfwlist.txt" - -----chnroute URL -o = s:option(DynamicList, "chnroute_url", translate("China IPs(chnroute) Update URL")) -o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN")) -o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR")) -o:value("https://cdn.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN")) -o:value("https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN")) -o.default = "https://ispip.clang.cn/all_cn.txt" - -----chnroute6 URL -o = s:option(DynamicList, "chnroute6_url", translate("China IPv6s(chnroute6) Update URL")) -o:value("https://ispip.clang.cn/all_cn_ipv6.txt", translate("Clang.CN.IPv6")) -o.default = "https://ispip.clang.cn/all_cn_ipv6.txt" - -----chnlist URL -o = s:option(DynamicList, "chnlist_url", translate("China List(Chnlist) Update URL")) -o:value("https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf", translate("felixonmars/domains.china")) -o:value("https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf", translate("felixonmars/apple.china")) -o:value("https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/google.china.conf", translate("felixonmars/google.china")) - -s:append(Template(appname .. "/rule/rule_version")) - ----- Auto Update -o = s:option(Flag, "auto_update", translate("Enable auto update rules")) -o.default = 0 -o.rmempty = false - ----- Week Update -o = s:option(ListValue, "week_update", translate("Week update rules")) -o:value(7, translate("Every day")) -for e = 1, 6 do o:value(e, translate("Week") .. e) end -o:value(0, translate("Week") .. translate("day")) -o.default = 0 -o:depends("auto_update", true) - ----- Time Update -o = s:option(ListValue, "time_update", translate("Day update rules")) -for e = 0, 23 do o:value(e, e .. translate("oclock")) end -o.default = 0 -o:depends("auto_update", true) - -if has_v2ray or has_xray then - o = s:option(Value, "v2ray_location_asset", translate("Location of V2ray/Xray asset"), translate("This variable specifies a directory where geoip.dat and geosite.dat files are.")) - o.default = "/usr/share/v2ray/" - o.rmempty = false - - s = m:section(TypedSection, "shunt_rules", "V2ray/Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "") - s.template = "cbi/tblsection" - s.anonymous = false - s.addremove = true - s.sortable = true - s.extedit = api.url("shunt_rules", "%s") - function s.create(e, t) - TypedSection.create(e, t) - luci.http.redirect(e.extedit:format(t)) - end - function s.remove(e, t) - m.uci:foreach(appname, "nodes", function(s) - if s["protocol"] and s["protocol"] == "_shunt" then - m:del(s[".name"], t) - end - end) - TypedSection.remove(e, t) - end - - o = s:option(DummyValue, "remarks", translate("Remarks")) -end - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule_list.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule_list.lua deleted file mode 100644 index b2bfdf7e..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule_list.lua +++ /dev/null @@ -1,205 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local fs = api.fs -local datatypes = api.datatypes -local path = string.format("/usr/share/%s/rules/", appname) -local route_hosts_path = "/etc/" - -m = Map(appname) - --- [[ Rule List Settings ]]-- -s = m:section(TypedSection, "global_rules") -s.anonymous = true - -s:tab("direct_list", translate("Direct List")) -s:tab("proxy_list", translate("Proxy List")) -s:tab("block_list", translate("Block List")) -s:tab("lan_ip_list", translate("Lan IP List")) -s:tab("route_hosts", translate("Route Hosts")) - ----- Direct Hosts -local direct_host = path .. "direct_host" -o = s:taboption("direct_list", TextValue, "direct_host", "", "" .. translate("Join the direct hosts list of domain names will not proxy.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(direct_host) or "" end -o.write = function(self, section, value) fs.writefile(direct_host, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(direct_host, "") end -o.validate = function(self, value) - local hosts= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end) - for index, host in ipairs(hosts) do - if host:find("#") and host:find("#") == 1 then - return value - end - if not datatypes.hostname(host) then - return nil, host .. " " .. translate("Not valid domain name, please re-enter!") - end - end - return value -end - ----- Direct IP -local direct_ip = path .. "direct_ip" -o = s:taboption("direct_list", TextValue, "direct_ip", "", "" .. translate("These had been joined ip addresses will not proxy. Please input the ip address or ip address segment,every line can input only one ip address. For example: 192.168.0.0/24 or 223.5.5.5.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(direct_ip) or "" end -o.write = function(self, section, value) fs.writefile(direct_ip, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(direct_ip, "") end -o.validate = function(self, value) - local ipmasks= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) - for index, ipmask in ipairs(ipmasks) do - if ipmask:find("#") and ipmask:find("#") == 1 then - return value - end - if not ( datatypes.ipmask4(ipmask) or datatypes.ipmask6(ipmask) ) then - return nil, ipmask .. " " .. translate("Not valid IP format, please re-enter!") - end - end - return value -end - ----- Proxy Hosts -local proxy_host = path .. "proxy_host" -o = s:taboption("proxy_list", TextValue, "proxy_host", "", "" .. translate("These had been joined websites will use proxy. Please input the domain names of websites, every line can input only one website domain. For example: google.com.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(proxy_host) or "" end -o.write = function(self, section, value) fs.writefile(proxy_host, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(proxy_host, "") end -o.validate = function(self, value) - local hosts= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end) - for index, host in ipairs(hosts) do - if host:find("#") and host:find("#") == 1 then - return value - end - if not datatypes.hostname(host) then - return nil, host .. " " .. translate("Not valid domain name, please re-enter!") - end - end - return value -end - ----- Proxy IP -local proxy_ip = path .. "proxy_ip" -o = s:taboption("proxy_list", TextValue, "proxy_ip", "", "" .. translate("These had been joined ip addresses will use proxy. Please input the ip address or ip address segment, every line can input only one ip address. For example: 35.24.0.0/24 or 8.8.4.4.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(proxy_ip) or "" end -o.write = function(self, section, value) fs.writefile(proxy_ip, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(proxy_ip, "") end -o.validate = function(self, value) - local ipmasks= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) - for index, ipmask in ipairs(ipmasks) do - if ipmask:find("#") and ipmask:find("#") == 1 then - return value - end - if not ( datatypes.ipmask4(ipmask) or datatypes.ipmask6(ipmask) ) then - return nil, ipmask .. " " .. translate("Not valid IP format, please re-enter!") - end - end - return value -end - ----- Block Hosts -local block_host = path .. "block_host" -o = s:taboption("block_list", TextValue, "block_host", "", "" .. translate("These had been joined websites will be block. Please input the domain names of websites, every line can input only one website domain. For example: twitter.com.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(block_host) or "" end -o.write = function(self, section, value) fs.writefile(block_host, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(block_host, "") end -o.validate = function(self, value) - local hosts= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end) - for index, host in ipairs(hosts) do - if host:find("#") and host:find("#") == 1 then - return value - end - if not datatypes.hostname(host) then - return nil, host .. " " .. translate("Not valid domain name, please re-enter!") - end - end - return value -end - ----- Block IP -local block_ip = path .. "block_ip" -o = s:taboption("block_list", TextValue, "block_ip", "", "" .. translate("These had been joined ip addresses will be block. Please input the ip address or ip address segment, every line can input only one ip address.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(block_ip) or "" end -o.write = function(self, section, value) fs.writefile(block_ip, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(block_ip, "") end -o.validate = function(self, value) - local ipmasks= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) - for index, ipmask in ipairs(ipmasks) do - if ipmask:find("#") and ipmask:find("#") == 1 then - return value - end - if not ( datatypes.ipmask4(ipmask) or datatypes.ipmask6(ipmask) ) then - return nil, ipmask .. " " .. translate("Not valid IP format, please re-enter!") - end - end - return value -end - ----- Lan IPv4 -local lanlist_ipv4 = path .. "lanlist_ipv4" -o = s:taboption("lan_ip_list", TextValue, "lanlist_ipv4", "", "" .. translate("The list is the IPv4 LAN IP list, which represents the direct connection IP of the LAN. If you need the LAN IP in the proxy list, please clear it from the list. Do not modify this list by default.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(lanlist_ipv4) or "" end -o.write = function(self, section, value) fs.writefile(lanlist_ipv4, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(lanlist_ipv4, "") end -o.validate = function(self, value) - local ipmasks= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) - for index, ipmask in ipairs(ipmasks) do - if ipmask:find("#") and ipmask:find("#") == 1 then - return value - end - if not datatypes.ipmask4(ipmask) then - return nil, ipmask .. " " .. translate("Not valid IPv4 format, please re-enter!") - end - end - return value -end - ----- Lan IPv6 -local lanlist_ipv6 = path .. "lanlist_ipv6" -o = s:taboption("lan_ip_list", TextValue, "lanlist_ipv6", "", "" .. translate("The list is the IPv6 LAN IP list, which represents the direct connection IP of the LAN. If you need the LAN IP in the proxy list, please clear it from the list. Do not modify this list by default.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(lanlist_ipv6) or "" end -o.write = function(self, section, value) fs.writefile(lanlist_ipv6, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(lanlist_ipv6, "") end -o.validate = function(self, value) - local ipmasks= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) - for index, ipmask in ipairs(ipmasks) do - if ipmask:find("#") and ipmask:find("#") == 1 then - return value - end - if not datatypes.ipmask6(ipmask) then - return nil, ipmask .. " " .. translate("Not valid IPv6 format, please re-enter!") - end - end - return value -end - ----- Route Hosts -local hosts = route_hosts_path .. "hosts" -o = s:taboption("route_hosts", TextValue, "hosts", "", "" .. translate("Configure routing etc/hosts file, if you don't know what you are doing, please don't change the content.") .. "") -o.rows = 15 -o.wrap = "off" -o.cfgvalue = function(self, section) return fs.readfile(hosts) or "" end -o.write = function(self, section, value) fs.writefile(hosts, value:gsub("\r\n", "\n")) end -o.remove = function(self, section, value) fs.writefile(hosts, "") end - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua deleted file mode 100644 index b2e9a8fa..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua +++ /dev/null @@ -1,79 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" -local appname = api.appname -local datatypes = api.datatypes - -m = Map(appname, "V2ray/Xray " .. translate("Shunt Rule")) -m.redirect = api.url() - -s = m:section(NamedSection, arg[1], "shunt_rules", "") -s.addremove = false -s.dynamic = false - -remarks = s:option(Value, "remarks", translate("Remarks")) -remarks.default = arg[1] -remarks.rmempty = false - -protocol = s:option(MultiValue, "protocol", translate("Protocol")) -protocol:value("http") -protocol:value("tls") -protocol:value("bittorrent") - -domain_list = s:option(TextValue, "domain_list", translate("Domain")) -domain_list.rows = 10 -domain_list.wrap = "off" -domain_list.validate = function(self, value) - local hosts= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(hosts, w) end) - for index, host in ipairs(hosts) do - local flag = 1 - local tmp_host = host - if host:find("regexp:") and host:find("regexp:") == 1 then - flag = 0 - elseif host:find("domain:.") and host:find("domain:.") == 1 then - tmp_host = host:gsub("domain:", "") - elseif host:find("full:.") and host:find("full:.") == 1 then - tmp_host = host:gsub("full:", "") - elseif host:find("geosite:") and host:find("geosite:") == 1 then - flag = 0 - elseif host:find("ext:") and host:find("ext:") == 1 then - flag = 0 - end - if flag == 1 then - if not datatypes.hostname(tmp_host) then - return nil, tmp_host .. " " .. translate("Not valid domain name, please re-enter!") - end - end - end - return value -end -domain_list.description = "
  • " .. translate("Plaintext: If this string matches any part of the targeting domain, this rule takes effet. Example: rule 'sina.com' matches targeting domain 'sina.com', 'sina.com.cn' and 'www.sina.com', but not 'sina.cn'.") -.. "
  • " .. translate("Regular expression: Begining with 'regexp:', the rest is a regular expression. When the regexp matches targeting domain, this rule takes effect. Example: rule 'regexp:\\.goo.*\\.com$' matches 'www.google.com' and 'fonts.googleapis.com', but not 'google.com'.") -.. "
  • " .. translate("Subdomain (recommended): Begining with 'domain:' and the rest is a domain. When the targeting domain is exactly the value, or is a subdomain of the value, this rule takes effect. Example: rule 'domain:v2ray.com' matches 'www.v2ray.com', 'v2ray.com', but not 'xv2ray.com'.") -.. "
  • " .. translate("Full domain: Begining with 'full:' and the rest is a domain. When the targeting domain is exactly the value, the rule takes effect. Example: rule 'domain:v2ray.com' matches 'v2ray.com', but not 'www.v2ray.com'.") -.. "
  • " .. translate("Pre-defined domain list: Begining with 'geosite:' and the rest is a name, such as geosite:google or geosite:cn.") -.. "
  • " .. translate("Domains from file: Such as 'ext:file:tag'. The value must begin with ext: (lowercase), and followed by filename and tag. The file is placed in resource directory, and has the same format of geosite.dat. The tag must exist in the file.") -.. "
" -ip_list = s:option(TextValue, "ip_list", "IP") -ip_list.rows = 10 -ip_list.wrap = "off" -ip_list.validate = function(self, value) - local ipmasks= {} - string.gsub(value, '[^' .. "\r\n" .. ']+', function(w) table.insert(ipmasks, w) end) - for index, ipmask in ipairs(ipmasks) do - if ipmask:find("geoip:") and ipmask:find("geoip:") == 1 then - elseif ipmask:find("ext:") and ipmask:find("ext:") == 1 then - else - if not (datatypes.ipmask4(ipmask) or datatypes.ipmask6(ipmask)) then - return nil, ipmask .. " " .. translate("Not valid IP format, please re-enter!") - end - end - end - return value -end -ip_list.description = "
  • " .. translate("IP: such as '127.0.0.1'.") -.. "
  • " .. translate("CIDR: such as '127.0.0.0/8'.") -.. "
  • " .. translate("GeoIP: such as 'geoip:cn'. It begins with geoip: (lower case) and followed by two letter of country code.") -.. "
  • " .. translate("IPs from file: Such as 'ext:file:tag'. The value must begin with ext: (lowercase), and followed by filename and tag. The file is placed in resource directory, and has the same format of geoip.dat. The tag must exist in the file.") -.. "
" - -return m diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua deleted file mode 100755 index 93e8a3c5..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/lua - -local action = arg[1] -local api = require "luci.model.cbi.passwall.api.api" -local sys = api.sys -local uci = api.uci -local jsonc = api.jsonc - -local CONFIG = "passwall_server" -local CONFIG_PATH = "/tmp/etc/" .. CONFIG -local LOG_APP_FILE = "/tmp/log/" .. CONFIG .. ".log" -local TMP_BIN_PATH = CONFIG_PATH .. "/bin" -local require_dir = "luci.model.cbi.passwall.server.api." - -local function log(...) - local f, err = io.open(LOG_APP_FILE, "a") - if f and err == nil then - local str = os.date("%Y-%m-%d %H:%M:%S: ") .. table.concat({...}, " ") - f:write(str .. "\n") - f:close() - end -end - -local function cmd(cmd) - sys.call(cmd) -end - -local function ln_run(s, d, command, output) - if not output then - output = "/dev/null" - end - d = TMP_BIN_PATH .. "/" .. d - cmd(string.format('[ ! -f "%s" ] && ln -s %s %s 2>/dev/null', d, s, d)) - return string.format("%s >%s 2>&1 &", d .. " " ..command, output) -end - -local function gen_include() - cmd(string.format("echo '#!/bin/sh' > /tmp/etc/%s.include", CONFIG)) - local function extract_rules(n, a) - local _ipt = "iptables" - if n == "6" then - _ipt = "ip6tables" - end - local result = "*" .. a - result = result .. "\n" .. sys.exec(_ipt .. '-save -t ' .. a .. ' | grep "PSW-SERVER" | sed -e "s/^-A \\(INPUT\\)/-I \\1 1/"') - result = result .. "COMMIT" - return result - end - local f, err = io.open("/tmp/etc/" .. CONFIG .. ".include", "a") - if f and err == nil then - f:write('iptables-save -c | grep -v "PSW-SERVER" | iptables-restore -c' .. "\n") - f:write('iptables-restore -n <<-EOT' .. "\n") - f:write(extract_rules("4", "filter") .. "\n") - f:write("EOT" .. "\n") - f:write('ip6tables-save -c | grep -v "PSW-SERVER" | ip6tables-restore -c' .. "\n") - f:write('ip6tables-restore -n <<-EOT' .. "\n") - f:write(extract_rules("6", "filter") .. "\n") - f:write("EOT" .. "\n") - f:close() - end -end - -local function start() - local enabled = tonumber(uci:get(CONFIG, "@global[0]", "enable") or 0) - if enabled == nil or enabled == 0 then - return - end - cmd(string.format("mkdir -p %s %s", CONFIG_PATH, TMP_BIN_PATH)) - cmd(string.format("touch %s", LOG_APP_FILE)) - cmd("iptables -N PSW-SERVER") - cmd("iptables -I INPUT -j PSW-SERVER") - cmd("ip6tables -N PSW-SERVER") - cmd("ip6tables -I INPUT -j PSW-SERVER") - uci:foreach(CONFIG, "user", function(user) - local id = user[".name"] - local enable = user.enable - if enable and tonumber(enable) == 1 then - local enable_log = user.log - local log_path = nil - if enable_log and enable_log == "1" then - log_path = CONFIG_PATH .. "/" .. id .. ".log" - else - log_path = nil - end - local remarks = user.remarks - local port = tonumber(user.port) - local bin - local config = {} - local config_file = CONFIG_PATH .. "/" .. id .. ".json" - local udp_forward = 1 - local type = user.type or "" - if type == "Socks" then - local auth = "" - if user.auth and user.auth == "1" then - local username = user.username or "" - local password = user.password or "" - if username ~= "" and password ~= "" then - username = "-u " .. username - password = "-P " .. password - auth = username .. " " .. password - end - end - bin = ln_run("/usr/bin/microsocks", "microsocks_" .. id, string.format("-i :: -p %s %s", port, auth), log_path) - elseif type == "SS" or type == "SSR" then - config = require(require_dir .. "shadowsocks").gen_config(user) - local udp_param = "" - udp_forward = tonumber(user.udp_forward) or 1 - if udp_forward == 1 then - udp_param = "-u" - end - type = type:lower() - bin = ln_run("/usr/bin/" .. type .. "-server", type .. "-server", "-c " .. config_file .. " " .. udp_param, log_path) - elseif type == "V2ray" then - config = require(require_dir .. "v2ray").gen_config(user) - bin = ln_run(api.get_v2ray_path(), "v2ray", "-config=" .. config_file, log_path) - elseif type == "Xray" then - config = require(require_dir .. "v2ray").gen_config(user) - bin = ln_run(api.get_xray_path(), "xray", "-config=" .. config_file, log_path) - elseif type == "Trojan" then - config = require(require_dir .. "trojan").gen_config(user) - bin = ln_run("/usr/sbin/trojan", "trojan", "-c " .. config_file, log_path) - elseif type == "Trojan-Plus" then - config = require(require_dir .. "trojan").gen_config(user) - bin = ln_run("/usr/sbin/trojan-plus", "trojan-plus", "-c " .. config_file, log_path) - elseif type == "Trojan-Go" then - config = require(require_dir .. "trojan").gen_config(user) - bin = ln_run(api.get_trojan_go_path(), "trojan-go", "-config " .. config_file, log_path) - elseif type == "Brook" then - local brook_protocol = user.protocol - local brook_password = user.password - local brook_path = user.ws_path or "/ws" - local brook_path_arg = "" - if brook_protocol == "wsserver" and brook_path then - brook_path_arg = " --path " .. brook_path - end - bin = ln_run(api.get_brook_path(), "brook_" .. id, string.format("--debug %s -l :%s -p %s%s", brook_protocol, port, brook_password, brook_path_arg), log_path) - elseif type == "Hysteria" then - config = require(require_dir .. "hysteria").gen_config(user) - bin = ln_run(api.get_hysteria_path(), "hysteria", "-c " .. config_file .. " server", log_path) - end - - if next(config) then - local f, err = io.open(config_file, "w") - if f and err == nil then - f:write(jsonc.stringify(config, 1)) - f:close() - end - log(string.format("%s %s 生成配置文件并运行 - %s", remarks, port, config_file)) - end - - if bin then - cmd(bin) - end - - local bind_local = user.bind_local or 0 - if bind_local and tonumber(bind_local) ~= 1 then - cmd(string.format('iptables -A PSW-SERVER -p tcp --dport %s -m comment --comment "%s" -j ACCEPT', port, remarks)) - cmd(string.format('ip6tables -A PSW-SERVER -p tcp --dport %s -m comment --comment "%s" -j ACCEPT', port, remarks)) - if udp_forward == 1 then - cmd(string.format('iptables -A PSW-SERVER -p udp --dport %s -m comment --comment "%s" -j ACCEPT', port, remarks)) - cmd(string.format('ip6tables -A PSW-SERVER -p udp --dport %s -m comment --comment "%s" -j ACCEPT', port, remarks)) - end - end - end - end) - gen_include() -end - -local function stop() - cmd(string.format("top -bn1 | grep -v 'grep' | grep '%s/' | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1", CONFIG_PATH)) - cmd("iptables -D INPUT -j PSW-SERVER 2>/dev/null") - cmd("iptables -F PSW-SERVER 2>/dev/null") - cmd("iptables -X PSW-SERVER 2>/dev/null") - cmd("ip6tables -D INPUT -j PSW-SERVER 2>/dev/null") - cmd("ip6tables -F PSW-SERVER 2>/dev/null") - cmd("ip6tables -X PSW-SERVER 2>/dev/null") - cmd(string.format("rm -rf %s %s /tmp/etc/%s.include", CONFIG_PATH, LOG_APP_FILE, CONFIG)) -end - -if action then - if action == "start" then - start() - elseif action == "stop" then - stop() - end -end \ No newline at end of file diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/hysteria.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/hysteria.lua deleted file mode 100644 index 0fdf8939..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/hysteria.lua +++ /dev/null @@ -1,24 +0,0 @@ -module("luci.model.cbi.passwall.server.api.hysteria", package.seeall) -function gen_config(user) - local config = { - listen = ":" .. user.port, - protocol = user.protocol or "udp", - obfs = user.hysteria_obfs, - cert = user.tls_certificateFile, - key = user.tls_keyFile, - auth = (user.hysteria_auth_type == "string") and { - mode = "password", - config = { - password = user.hysteria_auth_password - } - } or nil, - disable_udp = (user.hysteria_udp == "0") and true or false, - alpn = user.hysteria_alpn or nil, - up_mbps = tonumber(user.hysteria_up_mbps) or 10, - down_mbps = tonumber(user.hysteria_down_mbps) or 50, - recv_window_conn = (user.hysteria_recv_window_conn) and tonumber(user.hysteria_recv_window_conn) or nil, - recv_window = (user.hysteria_recv_window) and tonumber(user.hysteria_recv_window) or nil, - disable_mtu_discovery = (user.hysteria_disable_mtu_discovery) and true or false - } - return config -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua deleted file mode 100644 index fdd18e0e..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/shadowsocks.lua +++ /dev/null @@ -1,19 +0,0 @@ -module("luci.model.cbi.passwall.server.api.shadowsocks", package.seeall) -function gen_config(user) - local config = {} - config.server = {"[::0]", "0.0.0.0"} - config.server_port = tonumber(user.port) - config.password = user.password - config.timeout = tonumber(user.timeout) - config.fast_open = (user.tcp_fast_open and user.tcp_fast_open == "1") and true or false - config.method = user.method - - if user.type == "SSR" then - config.protocol = user.protocol - config.protocol_param = user.protocol_param - config.obfs = user.obfs - config.obfs_param = user.obfs_param - end - - return config -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/trojan.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/trojan.lua deleted file mode 100644 index 466d1204..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/trojan.lua +++ /dev/null @@ -1,61 +0,0 @@ -module("luci.model.cbi.passwall.server.api.trojan", package.seeall) -function gen_config(user) - local cipher = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA" - local cipher13 = "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384" - local config = { - run_type = "server", - local_addr = "::", - local_port = tonumber(user.port), - remote_addr = (user.remote_enable == "1" and user.remote_address) and user.remote_address or nil, - remote_port = (user.remote_enable == "1" and user.remote_port) and tonumber(user.remote_port) or nil, - password = user.uuid, - log_level = (user.log and user.log == "1") and tonumber(user.loglevel) or 5, - ssl = { - cert = user.tls_certificateFile, - key = user.tls_keyFile, - key_password = "", - cipher = cipher, - cipher_tls13 = cipher13, - prefer_server_cipher = true, - reuse_session = true, - session_ticket = (user.tls_sessionTicket == "1") and true or false, - session_timeout = 600, - plain_http_response = "", - curves = "", - dhparam = "" - }, - tcp = { - prefer_ipv4 = false, - no_delay = true, - keep_alive = true, - reuse_port = false, - fast_open = (user.tcp_fast_open and user.tcp_fast_open == "1") and true or false, - fast_open_qlen = 20 - } - } - if user.type == "Trojan-Go" then - config.ssl.cipher = nil - config.ssl.cipher_tls13 = nil - config.udp_timeout = 60 - config.disable_http_check = true - config.transport_plugin = ((user.tls == nil or user.tls ~= "1") and user.trojan_transport == "original") and { - enabled = user.plugin_type ~= nil, - type = user.plugin_type or "plaintext", - command = user.plugin_type ~= "plaintext" and user.plugin_cmd or nil, - option = user.plugin_type ~= "plaintext" and user.plugin_option or nil, - arg = user.plugin_type ~= "plaintext" and { user.plugin_arg } or nil, - env = {} - } or nil - config.websocket = (user.trojan_transport == 'ws') and { - enabled = true, - path = user.ws_path or "/", - host = user.ws_host or "" - } or nil - config.shadowsocks = (user.ss_aead == "1") and { - enabled = true, - method = user.ss_aead_method or "aes_128_gcm", - password = user.ss_aead_pwd or "" - } or nil - end - return config -end \ No newline at end of file diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua deleted file mode 100644 index 729d9f20..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua +++ /dev/null @@ -1,246 +0,0 @@ -module("luci.model.cbi.passwall.server.api.v2ray", package.seeall) -local uci = require"luci.model.uci".cursor() - -function gen_config(user) - local settings = nil - local routing = nil - local outbounds = { - {protocol = "freedom", tag = "direct"}, {protocol = "blackhole", tag = "blocked"} - } - - if user.protocol == "vmess" or user.protocol == "vless" then - if user.uuid then - local clients = {} - for i = 1, #user.uuid do - clients[i] = { - id = user.uuid[i], - flow = ("1" == user.xtls) and user.flow or nil - } - end - settings = { - clients = clients, - decryption = user.decryption or "none" - } - end - elseif user.protocol == "socks" then - settings = { - udp = ("1" == user.udp_forward) and true or false, - auth = ("1" == user.auth) and "password" or "noauth", - accounts = ("1" == user.auth) and { - { - user = user.username, - pass = user.password - } - } or nil - } - elseif user.protocol == "http" then - settings = { - allowTransparent = false, - accounts = ("1" == user.auth) and { - { - user = user.username, - pass = user.password - } - } or nil - } - user.transport = "tcp" - user.tcp_guise = "none" - elseif user.protocol == "shadowsocks" then - settings = { - method = user.method, - password = user.password, - ivCheck = ("1" == user.iv_check) and true or false, - network = user.ss_network or "TCP,UDP" - } - elseif user.protocol == "trojan" then - if user.uuid then - local clients = {} - for i = 1, #user.uuid do - clients[i] = { - flow = ("1" == user.xtls) and user.flow or nil, - password = user.uuid[i], - } - end - settings = { - clients = clients - } - end - elseif user.protocol == "mtproto" then - settings = { - users = { - { - secret = (user.password == nil) and "" or user.password - } - } - } - elseif user.protocol == "dokodemo-door" then - settings = { - network = user.d_protocol, - address = user.d_address, - port = tonumber(user.d_port) - } - end - - if user.fallback and user.fallback == "1" then - local fallbacks = {} - for i = 1, #user.fallback_list do - local fallbackStr = user.fallback_list[i] - if fallbackStr then - local tmp = {} - string.gsub(fallbackStr, '[^' .. "," .. ']+', function(w) - table.insert(tmp, w) - end) - local dest = tmp[1] or "" - local path = tmp[2] - if dest:find("%.") then - else - dest = tonumber(dest) - end - fallbacks[i] = { - path = path, - dest = dest, - xver = 1 - } - end - end - settings.fallbacks = fallbacks - end - - routing = { - domainStrategy = "IPOnDemand", - rules = { - { - type = "field", - ip = {"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"}, - outboundTag = (user.accept_lan == nil or user.accept_lan == "0") and "blocked" or "direct" - } - } - } - - if user.transit_node and user.transit_node ~= "nil" then - local transit_node_t = uci:get_all("passwall", user.transit_node) - if user.transit_node == "_socks" or user.transit_node == "_http" then - transit_node_t = { - type = user.type, - protocol = user.transit_node:gsub("_", ""), - transport = "tcp", - address = user.transit_node_address, - port = user.transit_node_port, - username = (user.transit_node_username and user.transit_node_username ~= "") and user.transit_node_username or nil, - password = (user.transit_node_password and user.transit_node_password ~= "") and user.transit_node_password or nil, - } - end - local outbound = require("luci.model.cbi.passwall.api.gen_v2ray").gen_outbound(transit_node_t, "transit") - if outbound then - table.insert(outbounds, 1, outbound) - end - end - - local config = { - log = { - -- error = "/tmp/etc/passwall_server/log/" .. user[".name"] .. ".log", - loglevel = ("1" == user.log) and user.loglevel or "none" - }, - -- 传入连接 - inbounds = { - { - listen = (user.bind_local == "1") and "127.0.0.1" or nil, - port = tonumber(user.port), - protocol = user.protocol, - settings = settings, - streamSettings = { - network = user.transport, - security = "none", - xtlsSettings = ("1" == user.tls and "1" == user.xtls) and { - disableSystemRoot = false, - certificates = { - { - certificateFile = user.tls_certificateFile, - keyFile = user.tls_keyFile - } - } - } or nil, - tlsSettings = ("1" == user.tls) and { - disableSystemRoot = false, - certificates = { - { - certificateFile = user.tls_certificateFile, - keyFile = user.tls_keyFile - } - } - } or nil, - tcpSettings = (user.transport == "tcp") and { - acceptProxyProtocol = (user.acceptProxyProtocol and user.acceptProxyProtocol == "1") and true or false, - header = { - type = user.tcp_guise, - request = (user.tcp_guise == "http") and { - path = user.tcp_guise_http_path or {"/"}, - headers = { - Host = user.tcp_guise_http_host or {} - } - } or nil - } - } or nil, - kcpSettings = (user.transport == "mkcp") and { - mtu = tonumber(user.mkcp_mtu), - tti = tonumber(user.mkcp_tti), - uplinkCapacity = tonumber(user.mkcp_uplinkCapacity), - downlinkCapacity = tonumber(user.mkcp_downlinkCapacity), - congestion = (user.mkcp_congestion == "1") and true or false, - readBufferSize = tonumber(user.mkcp_readBufferSize), - writeBufferSize = tonumber(user.mkcp_writeBufferSize), - seed = (user.mkcp_seed and user.mkcp_seed ~= "") and user.mkcp_seed or nil, - header = {type = user.mkcp_guise} - } or nil, - wsSettings = (user.transport == "ws") and { - acceptProxyProtocol = (user.acceptProxyProtocol and user.acceptProxyProtocol == "1") and true or false, - headers = (user.ws_host) and {Host = user.ws_host} or nil, - path = user.ws_path - } or nil, - httpSettings = (user.transport == "h2") and { - path = user.h2_path, host = user.h2_host - } or nil, - dsSettings = (user.transport == "ds") and { - path = user.ds_path - } or nil, - quicSettings = (user.transport == "quic") and { - security = user.quic_security, - key = user.quic_key, - header = {type = user.quic_guise} - } or nil, - grpcSettings = (user.transport == "grpc") and { - serviceName = user.grpc_serviceName - } or nil - } - } - }, - -- 传出连接 - outbounds = outbounds, - routing = routing - } - - local alpn = {} - if user.alpn then - string.gsub(user.alpn, '[^' .. "," .. ']+', function(w) - table.insert(alpn, w) - end) - end - if alpn and #alpn > 0 then - if config.inbounds[1].streamSettings.tlsSettings then - config.inbounds[1].streamSettings.tlsSettings.alpn = alpn - end - if config.inbounds[1].streamSettings.xtlsSettings then - config.inbounds[1].streamSettings.xtlsSettings.alpn = alpn - end - end - - if "1" == user.tls then - config.inbounds[1].streamSettings.security = "tls" - if user.type == "Xray" and user.xtls and user.xtls == "1" then - config.inbounds[1].streamSettings.security = "xtls" - config.inbounds[1].streamSettings.tlsSettings = nil - end - end - - return config -end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua deleted file mode 100644 index 042ff093..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua +++ /dev/null @@ -1,73 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" - -m = Map("passwall_server", translate("Server-Side")) - -t = m:section(NamedSection, "global", "global") -t.anonymous = true -t.addremove = false - -e = t:option(Flag, "enable", translate("Enable")) -e.rmempty = false - -t = m:section(TypedSection, "user", translate("Users Manager")) -t.anonymous = true -t.addremove = true -t.sortable = true -t.template = "cbi/tblsection" -t.extedit = api.url("server_user", "%s") -function t.create(e, t) - local uuid = api.gen_uuid() - t = uuid - TypedSection.create(e, t) - luci.http.redirect(e.extedit:format(t)) -end -function t.remove(e, t) - e.map.proceed = true - e.map:del(t) - luci.http.redirect(api.url("server")) -end - -e = t:option(Flag, "enable", translate("Enable")) -e.width = "5%" -e.rmempty = false - -e = t:option(DummyValue, "status", translate("Status")) -e.rawhtml = true -e.cfgvalue = function(t, n) - return string.format('%s', translate("Collecting data...")) -end - -e = t:option(DummyValue, "remarks", translate("Remarks")) -e.width = "15%" - ----- Type -e = t:option(DummyValue, "type", translate("Type")) -e.cfgvalue = function(t, n) - local v = Value.cfgvalue(t, n) - if v then - if v == "V2ray" or v == "Xray" then - local protocol = m:get(n, "protocol") - if protocol == "vmess" then - protocol = "VMess" - elseif protocol == "vless" then - protocol = "VLESS" - else - protocol = protocol:gsub("^%l",string.upper) - end - return v .. " -> " .. protocol - end - return v - end -end - -e = t:option(DummyValue, "port", translate("Port")) - -e = t:option(Flag, "log", translate("Log")) -e.default = "1" -e.rmempty = false - -m:append(Template("passwall/server/log")) - -m:append(Template("passwall/server/users_list_status")) -return m - diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua deleted file mode 100644 index 0bf18836..00000000 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua +++ /dev/null @@ -1,730 +0,0 @@ -local api = require "luci.model.cbi.passwall.api.api" - -local ss_encrypt_method_list = { - "rc4-md5", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", - "aes-192-ctr", "aes-256-ctr", "bf-cfb", "camellia-128-cfb", - "camellia-192-cfb", "camellia-256-cfb", "salsa20", "chacha20", - "chacha20-ietf", -- aead - "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305" -} - -local ssr_encrypt_method_list = { - "none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb", - "aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", - "bf-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb", - "cast5-cfb", "des-cfb", "idea-cfb", "seed-cfb", "salsa20", "chacha20", - "chacha20-ietf" -} - -local ssr_protocol_list = { - "origin", "verify_simple", "verify_deflate", "verify_sha1", "auth_simple", - "auth_sha1", "auth_sha1_v2", "auth_sha1_v4", "auth_aes128_md5", - "auth_aes128_sha1", "auth_chain_a", "auth_chain_b", "auth_chain_c", - "auth_chain_d", "auth_chain_e", "auth_chain_f" -} -local ssr_obfs_list = { - "plain", "http_simple", "http_post", "random_head", "tls_simple", - "tls1.0_session_auth", "tls1.2_ticket_auth" -} - -local v_ss_encrypt_method_list = { - "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305" -} - -local x_ss_encrypt_method_list = { - "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305" -} - -local header_type_list = { - "none", "srtp", "utp", "wechat-video", "dtls", "wireguard" -} - -local encrypt_methods_ss_aead = { - "chacha20-ietf-poly1305", - "aes-128-gcm", - "aes-256-gcm", -} - -m = Map("passwall_server", translate("Server Config")) -m.redirect = api.url("server") - -s = m:section(NamedSection, arg[1], "user", "") -s.addremove = false -s.dynamic = false - -enable = s:option(Flag, "enable", translate("Enable")) -enable.default = "1" -enable.rmempty = false - -remarks = s:option(Value, "remarks", translate("Remarks")) -remarks.default = translate("Remarks") -remarks.rmempty = false - -type = s:option(ListValue, "type", translate("Type")) -if api.is_finded("microsocks") then - type:value("Socks", translate("Socks")) -end -if api.is_finded("ss-server") then - type:value("SS", translate("Shadowsocks")) -end -if api.is_finded("ssr-server") then - type:value("SSR", translate("ShadowsocksR")) -end -if api.is_finded("v2ray") then - type:value("V2ray", translate("V2ray")) -end -if api.is_finded("xray") then - type:value("Xray", translate("Xray")) -end -if api.is_finded("brook") then - type:value("Brook", translate("Brook")) -end ---[[ -if api.is_finded("trojan-plus") or api.is_finded("trojan") then - type:value("Trojan", translate("Trojan")) -end -]]-- -if api.is_finded("trojan-plus") then - type:value("Trojan-Plus", translate("Trojan-Plus")) -end -if api.is_finded("trojan-go") then - type:value("Trojan-Go", translate("Trojan-Go")) -end -if api.is_finded("hysteria") then - type:value("Hysteria", translate("Hysteria")) -end - -protocol = s:option(ListValue, "protocol", translate("Protocol")) -protocol:value("vmess", "Vmess") -protocol:value("vless", "VLESS") -protocol:value("http", "HTTP") -protocol:value("socks", "Socks") -protocol:value("shadowsocks", "Shadowsocks") -protocol:value("trojan", "Trojan") -protocol:value("mtproto", "MTProto") -protocol:value("dokodemo-door", "dokodemo-door") -protocol:depends("type", "V2ray") -protocol:depends("type", "Xray") - --- Brook协议 -brook_protocol = s:option(ListValue, "brook_protocol", translate("Protocol")) -brook_protocol:value("server", "Brook") -brook_protocol:value("wsserver", "WebSocket") -brook_protocol:depends("type", "Brook") -function brook_protocol.cfgvalue(self, section) - return m:get(section, "protocol") -end -function brook_protocol.write(self, section, value) - m:set(section, "protocol", value) -end - ---brook_tls = s:option(Flag, "brook_tls", translate("Use TLS")) ---brook_tls:depends("brook_protocol", "wsserver") - -port = s:option(Value, "port", translate("Listen Port")) -port.datatype = "port" -port.rmempty = false - -auth = s:option(Flag, "auth", translate("Auth")) -auth.validate = function(self, value, t) - if value and value == "1" then - local user_v = username:formvalue(t) or "" - local pass_v = password:formvalue(t) or "" - if user_v == "" or pass_v == "" then - return nil, translate("Username and Password must be used together!") - end - end - return value -end -auth:depends("type", "Socks") -auth:depends({ type = "V2ray", protocol = "socks" }) -auth:depends({ type = "V2ray", protocol = "http" }) -auth:depends({ type = "Xray", protocol = "socks" }) -auth:depends({ type = "Xray", protocol = "http" }) - -username = s:option(Value, "username", translate("Username")) -username:depends("auth", true) - -password = s:option(Value, "password", translate("Password")) -password.password = true -password:depends("auth", true) -password:depends("type", "SS") -password:depends("type", "SSR") -password:depends("type", "Brook") -password:depends({ type = "V2ray", protocol = "shadowsocks" }) -password:depends({ type = "Xray", protocol = "shadowsocks" }) - -mtproto_password = s:option(Value, "mtproto_password", translate("Password"), translate("The MTProto protocol must be 32 characters and can only contain characters from 0 to 9 and a to f.")) -mtproto_password:depends({ type = "V2ray", protocol = "mtproto" }) -mtproto_password:depends({ type = "Xray", protocol = "mtproto" }) -mtproto_password.default = arg[1] -function mtproto_password.cfgvalue(self, section) - return m:get(section, "password") -end -function mtproto_password.write(self, section, value) - m:set(section, "password", value) -end - -d_protocol = s:option(ListValue, "d_protocol", translate("Destination protocol")) -d_protocol:value("tcp", "TCP") -d_protocol:value("udp", "UDP") -d_protocol:value("tcp,udp", "TCP,UDP") -d_protocol:depends({ type = "V2ray", protocol = "dokodemo-door" }) -d_protocol:depends({ type = "Xray", protocol = "dokodemo-door" }) - -d_address = s:option(Value, "d_address", translate("Destination address")) -d_address:depends({ type = "V2ray", protocol = "dokodemo-door" }) -d_address:depends({ type = "Xray", protocol = "dokodemo-door" }) - -d_port = s:option(Value, "d_port", translate("Destination port")) -d_port.datatype = "port" -d_port:depends({ type = "V2ray", protocol = "dokodemo-door" }) -d_port:depends({ type = "Xray", protocol = "dokodemo-door" }) - -decryption = s:option(Value, "decryption", translate("Encrypt Method")) -decryption.default = "none" -decryption:depends({ type = "V2ray", protocol = "vless" }) -decryption:depends({ type = "Xray", protocol = "vless" }) - -hysteria_protocol = s:option(ListValue, "hysteria_protocol", translate("Protocol")) -hysteria_protocol:value("udp", "UDP") -hysteria_protocol:value("faketcp", "faketcp") -hysteria_protocol:value("wechat-video", "wechat-video") -hysteria_protocol:depends("type", "Hysteria") -function hysteria_protocol.cfgvalue(self, section) - return m:get(section, "protocol") -end -function hysteria_protocol.write(self, section, value) - m:set(section, "protocol", value) -end - -hysteria_obfs = s:option(Value, "hysteria_obfs", translate("Obfs Password")) -hysteria_obfs:depends("type", "Hysteria") - -hysteria_auth_type = s:option(ListValue, "hysteria_auth_type", translate("Auth Type")) -hysteria_auth_type:value("disable", translate("Disable")) -hysteria_auth_type:value("string", translate("STRING")) -hysteria_auth_type:depends("type", "Hysteria") - -hysteria_auth_password = s:option(Value, "hysteria_auth_password", translate("Auth Password")) -hysteria_auth_password.password = true -hysteria_auth_password:depends("hysteria_auth_type", "string") - -hysteria_alpn = s:option(Value, "hysteria_alpn", translate("QUIC TLS ALPN")) -hysteria_alpn:depends("type", "Hysteria") - -hysteria_udp = s:option(Flag, "hysteria_udp", translate("UDP")) -hysteria_udp.default = "1" -hysteria_udp:depends("type", "Hysteria") - -hysteria_up_mbps = s:option(Value, "hysteria_up_mbps", translate("Max upload Mbps")) -hysteria_up_mbps.default = "10" -hysteria_up_mbps:depends("type", "Hysteria") - -hysteria_down_mbps = s:option(Value, "hysteria_down_mbps", translate("Max download Mbps")) -hysteria_down_mbps.default = "50" -hysteria_down_mbps:depends("type", "Hysteria") - -hysteria_recv_window_conn = s:option(Value, "hysteria_recv_window_conn", translate("QUIC stream receive window")) -hysteria_recv_window_conn:depends("type", "Hysteria") - -hysteria_recv_window = s:option(Value, "hysteria_recv_window", translate("QUIC connection receive window")) -hysteria_recv_window:depends("type", "Hysteria") - -hysteria_disable_mtu_discovery = s:option(Flag, "hysteria_disable_mtu_discovery", translate("Disable MTU detection")) -hysteria_disable_mtu_discovery:depends("type", "Hysteria") - -ss_encrypt_method = s:option(ListValue, "ss_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(ss_encrypt_method_list) do ss_encrypt_method:value(t) end -ss_encrypt_method:depends("type", "SS") -function ss_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function ss_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -ssr_encrypt_method = s:option(ListValue, "ssr_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(ssr_encrypt_method_list) do ssr_encrypt_method:value(t) end -ssr_encrypt_method:depends("type", "SSR") -function ssr_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function ssr_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -v_ss_encrypt_method = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(v_ss_encrypt_method_list) do v_ss_encrypt_method:value(t) end -v_ss_encrypt_method:depends({ type = "V2ray", protocol = "shadowsocks" }) -function v_ss_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function v_ss_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -x_ss_encrypt_method = s:option(ListValue, "x_ss_encrypt_method", translate("Encrypt Method")) -for a, t in ipairs(x_ss_encrypt_method_list) do x_ss_encrypt_method:value(t) end -x_ss_encrypt_method:depends({ type = "Xray", protocol = "shadowsocks" }) -function x_ss_encrypt_method.cfgvalue(self, section) - return m:get(section, "method") -end -function x_ss_encrypt_method.write(self, section, value) - m:set(section, "method", value) -end - -iv_check = s:option(Flag, "iv_check", translate("IV Check")) -iv_check:depends({ type = "V2ray", protocol = "shadowsocks" }) -iv_check:depends({ type = "Xray", protocol = "shadowsocks" }) - -ss_network = s:option(ListValue, "ss_network", translate("Transport")) -ss_network.default = "tcp,udp" -ss_network:value("tcp", "TCP") -ss_network:value("udp", "UDP") -ss_network:value("tcp,udp", "TCP,UDP") -ss_network:depends({ type = "V2ray", protocol = "shadowsocks" }) -ss_network:depends({ type = "Xray", protocol = "shadowsocks" }) - -ssr_protocol = s:option(ListValue, "ssr_protocol", translate("Protocol")) -for a, t in ipairs(ssr_protocol_list) do ssr_protocol:value(t) end -ssr_protocol:depends("type", "SSR") -function ssr_protocol.cfgvalue(self, section) - return m:get(section, "protocol") -end -function ssr_protocol.write(self, section, value) - m:set(section, "protocol", value) -end - -protocol_param = s:option(Value, "protocol_param", translate("Protocol_param")) -protocol_param:depends("type", "SSR") - -obfs = s:option(ListValue, "obfs", translate("Obfs")) -for a, t in ipairs(ssr_obfs_list) do obfs:value(t) end -obfs:depends("type", "SSR") - -obfs_param = s:option(Value, "obfs_param", translate("Obfs_param")) -obfs_param:depends("type", "SSR") - -timeout = s:option(Value, "timeout", translate("Connection Timeout")) -timeout.datatype = "uinteger" -timeout.default = 300 -timeout:depends("type", "SS") -timeout:depends("type", "SSR") - -udp_forward = s:option(Flag, "udp_forward", translate("UDP Forward")) -udp_forward.default = "1" -udp_forward.rmempty = false -udp_forward:depends("type", "SSR") -udp_forward:depends({ type = "V2ray", protocol = "socks" }) -udp_forward:depends({ type = "Xray", protocol = "socks" }) - -uuid = s:option(DynamicList, "uuid", translate("ID") .. "/" .. translate("Password")) -for i = 1, 3 do - uuid:value(api.gen_uuid(1)) -end -uuid:depends({ type = "V2ray", protocol = "vmess" }) -uuid:depends({ type = "V2ray", protocol = "vless" }) -uuid:depends({ type = "V2ray", protocol = "trojan" }) -uuid:depends({ type = "Xray", protocol = "vmess" }) -uuid:depends({ type = "Xray", protocol = "vless" }) -uuid:depends({ type = "Xray", protocol = "trojan" }) -uuid:depends("type", "Trojan") -uuid:depends("type", "Trojan-Go") -uuid:depends("type", "Trojan-Plus") - -tls = s:option(Flag, "tls", translate("TLS")) -tls.default = 0 -tls.validate = function(self, value, t) - if value then - local type = type:formvalue(t) or "" - if value == "0" and (type == "Trojan" or type == "Trojan-Plus") then - return nil, translate("Original Trojan only supported 'tls', please choose 'tls'.") - end - if value == "1" then - local ca = tls_certificateFile:formvalue(t) or "" - local key = tls_keyFile:formvalue(t) or "" - if ca == "" or key == "" then - return nil, translate("Public key and Private key path can not be empty!") - end - end - return value - end -end -tls:depends({ type = "V2ray", protocol = "vmess" }) -tls:depends({ type = "V2ray", protocol = "vless" }) -tls:depends({ type = "V2ray", protocol = "socks" }) -tls:depends({ type = "V2ray", protocol = "shadowsocks" }) -tls:depends({ type = "V2ray", protocol = "trojan" }) -tls:depends({ type = "Xray", protocol = "vmess" }) -tls:depends({ type = "Xray", protocol = "vless" }) -tls:depends({ type = "Xray", protocol = "socks" }) -tls:depends({ type = "Xray", protocol = "shadowsocks" }) -tls:depends({ type = "Xray", protocol = "trojan" }) -tls:depends("type", "Trojan") -tls:depends("type", "Trojan-Plus") -tls:depends("type", "Trojan-Go") - -xtls = s:option(Flag, "xtls", translate("XTLS")) -xtls.default = 0 -xtls:depends({ type = "Xray", protocol = "vless", tls = true }) -xtls:depends({ type = "Xray", protocol = "trojan", tls = true }) - -flow = s:option(Value, "flow", translate("flow")) -flow.default = "xtls-rprx-direct" -flow:value("xtls-rprx-origin") -flow:value("xtls-rprx-origin-udp443") -flow:value("xtls-rprx-direct") -flow:value("xtls-rprx-direct-udp443") -flow:depends("xtls", true) - -alpn = s:option(ListValue, "alpn", translate("alpn")) -alpn.default = "h2,http/1.1" -alpn:value("h2,http/1.1") -alpn:value("h2") -alpn:value("http/1.1") -alpn:depends({ type = "V2ray", tls = true }) -alpn:depends({ type = "Xray", tls = true }) - --- [[ TLS部分 ]] -- - -tls_certificateFile = s:option(FileUpload, "tls_certificateFile", translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem") -tls_certificateFile.validate = function(self, value, t) - if value and value ~= "" then - if not nixio.fs.access(value) then - return nil, translate("Can't find this file!") - else - return value - end - end - return nil -end -tls_certificateFile.default = "/etc/config/ssl/" .. arg[1] .. ".pem" -tls_certificateFile:depends("tls", true) -tls_certificateFile:depends("type", "Hysteria") - -tls_keyFile = s:option(FileUpload, "tls_keyFile", translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key") -tls_keyFile.validate = function(self, value, t) - if value and value ~= "" then - if not nixio.fs.access(value) then - return nil, translate("Can't find this file!") - else - return value - end - end - return nil -end -tls_keyFile.default = "/etc/config/ssl/" .. arg[1] .. ".key" -tls_keyFile:depends("tls", true) -tls_keyFile:depends("type", "Hysteria") - -tls_sessionTicket = s:option(Flag, "tls_sessionTicket", translate("Session Ticket")) -tls_sessionTicket.default = "0" -tls_sessionTicket:depends({ type = "Trojan", tls = true }) -tls_sessionTicket:depends({ type = "Trojan-Plus", tls = true }) -tls_sessionTicket:depends({ type = "Trojan-Go", tls = true }) - -transport = s:option(ListValue, "transport", translate("Transport")) -transport:value("tcp", "TCP") -transport:value("mkcp", "mKCP") -transport:value("ws", "WebSocket") -transport:value("h2", "HTTP/2") -transport:value("ds", "DomainSocket") -transport:value("quic", "QUIC") -transport:value("grpc", "gRPC") -transport:depends({ type = "V2ray", protocol = "vmess" }) -transport:depends({ type = "V2ray", protocol = "vless" }) -transport:depends({ type = "V2ray", protocol = "socks" }) -transport:depends({ type = "V2ray", protocol = "shadowsocks" }) -transport:depends({ type = "V2ray", protocol = "trojan" }) -transport:depends({ type = "Xray", protocol = "vmess" }) -transport:depends({ type = "Xray", protocol = "vless" }) -transport:depends({ type = "Xray", protocol = "socks" }) -transport:depends({ type = "Xray", protocol = "shadowsocks" }) -transport:depends({ type = "Xray", protocol = "trojan" }) - -trojan_transport = s:option(ListValue, "trojan_transport", translate("Transport")) -trojan_transport:value("original", translate("Original")) -trojan_transport:value("ws", "WebSocket") -trojan_transport.default = "original" -trojan_transport:depends("type", "Trojan-Go") - -trojan_plugin = s:option(ListValue, "plugin_type", translate("Transport Plugin")) -trojan_plugin:value("plaintext", "Plain Text") -trojan_plugin:value("shadowsocks", "ShadowSocks") -trojan_plugin:value("other", "Other") -trojan_plugin.default = "plaintext" -trojan_plugin:depends({ tls = false, trojan_transport = "original" }) - -trojan_plugin_cmd = s:option(Value, "plugin_cmd", translate("Plugin Binary")) -trojan_plugin_cmd.placeholder = "eg: /usr/bin/v2ray-plugin" -trojan_plugin_cmd:depends({ plugin_type = "shadowsocks" }) -trojan_plugin_cmd:depends({ plugin_type = "other" }) - -trojan_plugin_op = s:option(Value, "plugin_option", translate("Plugin Option")) -trojan_plugin_op.placeholder = "eg: obfs=http;obfs-host=www.baidu.com" -trojan_plugin_op:depends({ plugin_type = "shadowsocks" }) -trojan_plugin_op:depends({ plugin_type = "other" }) - -trojan_plugin_arg = s:option(DynamicList, "plugin_arg", translate("Plugin Option Args")) -trojan_plugin_arg.placeholder = "eg: [\"-config\", \"test.json\"]" -trojan_plugin_arg:depends({ plugin_type = "shadowsocks" }) -trojan_plugin_arg:depends({ plugin_type = "other" }) - --- [[ WebSocket部分 ]]-- - -ws_host = s:option(Value, "ws_host", translate("WebSocket Host")) -ws_host:depends("transport", "ws") -ws_host:depends("ss_transport", "ws") -ws_host:depends("trojan_transport", "ws") - -ws_path = s:option(Value, "ws_path", translate("WebSocket Path")) -ws_path:depends("transport", "ws") -ws_path:depends("ss_transport", "ws") -ws_path:depends("trojan_transport", "ws") -ws_path:depends({ type = "Brook", brook_protocol = "wsserver" }) - --- [[ HTTP/2部分 ]]-- - -h2_host = s:option(Value, "h2_host", translate("HTTP/2 Host")) -h2_host:depends("transport", "h2") -h2_host:depends("ss_transport", "h2") -h2_host:depends("trojan_transport", "h2") - -h2_path = s:option(Value, "h2_path", translate("HTTP/2 Path")) -h2_path:depends("transport", "h2") -h2_path:depends("ss_transport", "h2") -h2_path:depends("trojan_transport", "h2") - --- [[ TCP部分 ]]-- - --- TCP伪装 -tcp_guise = s:option(ListValue, "tcp_guise", translate("Camouflage Type")) -tcp_guise:value("none", "none") -tcp_guise:value("http", "http") -tcp_guise:depends("transport", "tcp") - --- HTTP域名 -tcp_guise_http_host = s:option(DynamicList, "tcp_guise_http_host", translate("HTTP Host")) -tcp_guise_http_host:depends("tcp_guise", "http") - --- HTTP路径 -tcp_guise_http_path = s:option(DynamicList, "tcp_guise_http_path", translate("HTTP Path")) -tcp_guise_http_path:depends("tcp_guise", "http") - --- [[ mKCP部分 ]]-- - -mkcp_guise = s:option(ListValue, "mkcp_guise", translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)')) -for a, t in ipairs(header_type_list) do mkcp_guise:value(t) end -mkcp_guise:depends("transport", "mkcp") - -mkcp_mtu = s:option(Value, "mkcp_mtu", translate("KCP MTU")) -mkcp_mtu.default = "1350" -mkcp_mtu:depends("transport", "mkcp") - -mkcp_tti = s:option(Value, "mkcp_tti", translate("KCP TTI")) -mkcp_tti.default = "20" -mkcp_tti:depends("transport", "mkcp") - -mkcp_uplinkCapacity = s:option(Value, "mkcp_uplinkCapacity", translate("KCP uplinkCapacity")) -mkcp_uplinkCapacity.default = "5" -mkcp_uplinkCapacity:depends("transport", "mkcp") - -mkcp_downlinkCapacity = s:option(Value, "mkcp_downlinkCapacity", translate("KCP downlinkCapacity")) -mkcp_downlinkCapacity.default = "20" -mkcp_downlinkCapacity:depends("transport", "mkcp") - -mkcp_congestion = s:option(Flag, "mkcp_congestion", translate("KCP Congestion")) -mkcp_congestion:depends("transport", "mkcp") - -mkcp_readBufferSize = s:option(Value, "mkcp_readBufferSize", translate("KCP readBufferSize")) -mkcp_readBufferSize.default = "1" -mkcp_readBufferSize:depends("transport", "mkcp") - -mkcp_writeBufferSize = s:option(Value, "mkcp_writeBufferSize", translate("KCP writeBufferSize")) -mkcp_writeBufferSize.default = "1" -mkcp_writeBufferSize:depends("transport", "mkcp") - -mkcp_seed = s:option(Value, "mkcp_seed", translate("KCP Seed")) -mkcp_seed:depends("transport", "mkcp") - --- [[ DomainSocket部分 ]]-- - -ds_path = s:option(Value, "ds_path", "Path", translate("A legal file path. This file must not exist before running.")) -ds_path:depends("transport", "ds") - --- [[ QUIC部分 ]]-- -quic_security = s:option(ListValue, "quic_security", translate("Encrypt Method")) -quic_security:value("none") -quic_security:value("aes-128-gcm") -quic_security:value("chacha20-poly1305") -quic_security:depends("transport", "quic") - -quic_key = s:option(Value, "quic_key", translate("Encrypt Method") .. translate("Key")) -quic_key:depends("transport", "quic") - -quic_guise = s:option(ListValue, "quic_guise", translate("Camouflage Type")) -for a, t in ipairs(header_type_list) do quic_guise:value(t) end -quic_guise:depends("transport", "quic") - --- [[ gRPC部分 ]]-- -grpc_serviceName = s:option(Value, "grpc_serviceName", "ServiceName") -grpc_serviceName:depends("transport", "grpc") - -acceptProxyProtocol = s:option(Flag, "acceptProxyProtocol", translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used.")) -acceptProxyProtocol:depends({ type = "V2ray", transport = "tcp" }) -acceptProxyProtocol:depends({ type = "V2ray", transport = "ws" }) -acceptProxyProtocol:depends({ type = "Xray", transport = "tcp" }) -acceptProxyProtocol:depends({ type = "Xray", transport = "ws" }) - --- [[ Fallback部分 ]]-- -fallback = s:option(Flag, "fallback", translate("Fallback")) -fallback:depends({ type = "V2ray", protocol = "vless", transport = "tcp" }) -fallback:depends({ type = "V2ray", protocol = "trojan", transport = "tcp" }) -fallback:depends({ type = "Xray", protocol = "vless", transport = "tcp" }) -fallback:depends({ type = "Xray", protocol = "trojan", transport = "tcp" }) - ---[[ -fallback_alpn = s:option(Value, "fallback_alpn", "Fallback alpn") -fallback_alpn:depends("fallback", true) - -fallback_path = s:option(Value, "fallback_path", "Fallback path") -fallback_path:depends("fallback", true) - -fallback_dest = s:option(Value, "fallback_dest", "Fallback dest") -fallback_dest:depends("fallback", true) - -fallback_xver = s:option(Value, "fallback_xver", "Fallback xver") -fallback_xver.default = 0 -fallback_xver:depends("fallback", true) -]]-- - -fallback_list = s:option(DynamicList, "fallback_list", "Fallback", translate("dest,path")) -fallback_list:depends("fallback", true) - -ss_aead = s:option(Flag, "ss_aead", translate("Shadowsocks secondary encryption")) -ss_aead:depends("type", "Trojan-Go") -ss_aead.default = "0" - -ss_aead_method = s:option(ListValue, "ss_aead_method", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ss_aead) do ss_aead_method:value(v, v) end -ss_aead_method.default = "aes-128-gcm" -ss_aead_method:depends("ss_aead", true) - -ss_aead_pwd = s:option(Value, "ss_aead_pwd", translate("Password")) -ss_aead_pwd.password = true -ss_aead_pwd:depends("ss_aead", true) - -tcp_fast_open = s:option(Flag, "tcp_fast_open", translate("TCP Fast Open")) -tcp_fast_open.default = "0" -tcp_fast_open:depends("type", "SS") -tcp_fast_open:depends("type", "SSR") -tcp_fast_open:depends("type", "Trojan") -tcp_fast_open:depends("type", "Trojan-Plus") -tcp_fast_open:depends("type", "Trojan-Go") - -remote_enable = s:option(Flag, "remote_enable", translate("Enable Remote"), translate("You can forward to Nginx/Caddy/V2ray/Xray WebSocket and more.")) -remote_enable.default = "1" -remote_enable.rmempty = false -remote_enable:depends("type", "Trojan") -remote_enable:depends("type", "Trojan-Plus") -remote_enable:depends("type", "Trojan-Go") - -remote_address = s:option(Value, "remote_address", translate("Remote Address")) -remote_address.default = "127.0.0.1" -remote_address:depends("remote_enable", 1) - -remote_port = s:option(Value, "remote_port", translate("Remote Port")) -remote_port.datatype = "port" -remote_port.default = "80" -remote_port:depends("remote_enable", 1) - -bind_local = s:option(Flag, "bind_local", translate("Bind Local"), translate("When selected, it can only be accessed locally, It is recommended to turn on when using reverse proxies or be fallback.")) -bind_local.default = "0" -bind_local:depends("type", "V2ray") -bind_local:depends("type", "Xray") - -accept_lan = s:option(Flag, "accept_lan", translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!")) -accept_lan.default = "0" -accept_lan:depends({ type = "V2ray", protocol = "vmess" }) -accept_lan:depends({ type = "V2ray", protocol = "vless" }) -accept_lan:depends({ type = "V2ray", protocol = "http" }) -accept_lan:depends({ type = "V2ray", protocol = "socks" }) -accept_lan:depends({ type = "V2ray", protocol = "shadowsocks" }) -accept_lan:depends({ type = "V2ray", protocol = "trojan" }) -accept_lan:depends({ type = "Xray", protocol = "vmess" }) -accept_lan:depends({ type = "Xray", protocol = "vless" }) -accept_lan:depends({ type = "Xray", protocol = "http" }) -accept_lan:depends({ type = "Xray", protocol = "socks" }) -accept_lan:depends({ type = "Xray", protocol = "shadowsocks" }) -accept_lan:depends({ type = "Xray", protocol = "trojan" }) - -local nodes_table = {} -for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" and (e.type == "V2ray" or e.type == "Xray") then - nodes_table[#nodes_table + 1] = { - id = e[".name"], - remarks = e["remark"] - } - end -end - -transit_node = s:option(ListValue, "transit_node", translate("transit node")) -transit_node:value("nil", translate("Close")) -transit_node:value("_socks", translate("Custom Socks")) -transit_node:value("_http", translate("Custom HTTP")) -for k, v in pairs(nodes_table) do transit_node:value(v.id, v.remarks) end -transit_node.default = "nil" -transit_node:depends("type", "V2ray") -transit_node:depends("type", "Xray") - -transit_node_address = s:option(Value, "transit_node_address", translate("Address (Support Domain Name)")) -transit_node_address:depends("transit_node", "_socks") -transit_node_address:depends("transit_node", "_http") - -transit_node_port = s:option(Value, "transit_node_port", translate("Port")) -transit_node_port.datatype = "port" -transit_node_port:depends("transit_node", "_socks") -transit_node_port:depends("transit_node", "_http") - -transit_node_username = s:option(Value, "transit_node_username", translate("Username")) -transit_node_username:depends("transit_node", "_socks") -transit_node_username:depends("transit_node", "_http") - -transit_node_password = s:option(Value, "transit_node_password", translate("Password")) -transit_node_password.password = true -transit_node_password:depends("transit_node", "_socks") -transit_node_password:depends("transit_node", "_http") - -log = s:option(Flag, "log", translate("Log")) -log.default = "1" -log.rmempty = false - -loglevel = s:option(ListValue, "loglevel", translate("Log Level")) -loglevel.default = "warning" -loglevel:value("debug") -loglevel:value("info") -loglevel:value("warning") -loglevel:value("error") -loglevel:depends({ type = "V2ray", log = true }) -loglevel:depends({ type = "Xray", log = true }) - -trojan_loglevel = s:option(ListValue, "trojan_loglevel", translate("Log Level")) -trojan_loglevel.default = "2" -trojan_loglevel:value("0", "all") -trojan_loglevel:value("1", "info") -trojan_loglevel:value("2", "warn") -trojan_loglevel:value("3", "error") -trojan_loglevel:value("4", "fatal") -function trojan_loglevel.cfgvalue(self, section) - return m:get(section, "loglevel") -end -function trojan_loglevel.write(self, section, value) - m:set(section, "loglevel", value) -end -trojan_loglevel:depends({ type = "Trojan", log = true }) -trojan_loglevel:depends({ type = "Trojan-Plus", log = true }) -trojan_loglevel:depends({ type = "Trojan-Go", log = true }) - -return m diff --git a/luci-app-passwall/luasrc/view/passwall/app_update/brook_version.htm b/luci-app-passwall/luasrc/view/passwall/app_update/brook_version.htm deleted file mode 100644 index 9a728809..00000000 --- a/luci-app-passwall/luasrc/view/passwall/app_update/brook_version.htm +++ /dev/null @@ -1,159 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local brook_version = api.get_brook_version() --%> - - - -
- -
-
- 【 <%=brook_version ~="" and brook_version or translate("Null") %> 】 - - -
-
-
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/app_update/hysteria_version.htm b/luci-app-passwall/luasrc/view/passwall/app_update/hysteria_version.htm deleted file mode 100644 index 7201994c..00000000 --- a/luci-app-passwall/luasrc/view/passwall/app_update/hysteria_version.htm +++ /dev/null @@ -1,159 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local hysteria_version = api.get_hysteria_version() --%> - - - -
- -
-
- 【 <%=hysteria_version ~="" and hysteria_version or translate("Null") %> 】 - - -
-
-
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/app_update/kcptun_version.htm b/luci-app-passwall/luasrc/view/passwall/app_update/kcptun_version.htm deleted file mode 100644 index fdc12df2..00000000 --- a/luci-app-passwall/luasrc/view/passwall/app_update/kcptun_version.htm +++ /dev/null @@ -1,175 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local kcptun_version = api.get_kcptun_version() --%> - - - -
- -
-
- 【 <%=kcptun_version ~="" and kcptun_version or translate("Null") %> 】 - - -
-
-
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/app_update/trojan_go_version.htm b/luci-app-passwall/luasrc/view/passwall/app_update/trojan_go_version.htm deleted file mode 100644 index b7b181c3..00000000 --- a/luci-app-passwall/luasrc/view/passwall/app_update/trojan_go_version.htm +++ /dev/null @@ -1,175 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local trojan_go_version = api.get_trojan_go_version() --%> - - - -
- -
-
- 【 <%=trojan_go_version ~="" and trojan_go_version or translate("Null") %> 】 - - -
-
-
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/app_update/v2ray_version.htm b/luci-app-passwall/luasrc/view/passwall/app_update/v2ray_version.htm deleted file mode 100644 index ef46b9e5..00000000 --- a/luci-app-passwall/luasrc/view/passwall/app_update/v2ray_version.htm +++ /dev/null @@ -1,175 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local v2ray_version = api.get_v2ray_version() --%> - - - -
- -
-
- 【 <%=v2ray_version ~="" and v2ray_version or translate("Null") %> 】 - - -
-
-
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/app_update/xray_version.htm b/luci-app-passwall/luasrc/view/passwall/app_update/xray_version.htm deleted file mode 100644 index 06d706c5..00000000 --- a/luci-app-passwall/luasrc/view/passwall/app_update/xray_version.htm +++ /dev/null @@ -1,175 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local xray_version = api.get_xray_version() --%> - - - -
- -
-
- 【 <%=xray_version ~="" and xray_version or translate("Null") %> 】 - - -
-
-
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/auto_switch/footer.htm b/luci-app-passwall/luasrc/view/passwall/auto_switch/footer.htm deleted file mode 100644 index cf672e22..00000000 --- a/luci-app-passwall/luasrc/view/passwall/auto_switch/footer.htm +++ /dev/null @@ -1,22 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" --%> - - - - \ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/global/faq.htm b/luci-app-passwall/luasrc/view/passwall/global/faq.htm deleted file mode 100644 index 14a19339..00000000 --- a/luci-app-passwall/luasrc/view/passwall/global/faq.htm +++ /dev/null @@ -1,43 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" --%> -
-
-
    <%:About DNS issues:%> -
  • 1. <%:Some browsers may have built-in DNS, be sure to close. Example: Chrome. Settings - Security and Privacy - Security - Use secure DNS disabled.%>
  • -
  • 2. <%:Sometimes after restart, you can not internet, especially the GFW mode. At this time, close all browsers (important), Windows Client, please `ipconfig / flushdns`. Please close the WiFi on the phone, cut the flight mode and then cut back.%>
  • -
  • 3. <%:The client DNS and the default gateway must point to this router.%>
  • -
  • 4. <%:If you have a wrong DNS process, the consequences are at your own risk!%>
  • -
-
-
-
- - \ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/global/footer.htm b/luci-app-passwall/luasrc/view/passwall/global/footer.htm deleted file mode 100644 index 6fd10b51..00000000 --- a/luci-app-passwall/luasrc/view/passwall/global/footer.htm +++ /dev/null @@ -1,155 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local auto_switch = api.uci_get_type("auto_switch", "enable", 0) --%> - \ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/global/status.htm b/luci-app-passwall/luasrc/view/passwall/global/status.htm deleted file mode 100644 index 90c5c202..00000000 --- a/luci-app-passwall/luasrc/view/passwall/global/status.htm +++ /dev/null @@ -1,351 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local status = api.uci_get_type("global_other", "status", "") --%> - - - -
- - <%:Running Status%> - -
-
-
-
-
- -
-
-
-

TCP
<%:NOT RUNNING%>

-
-
-
-
-
-
-
- -
-
-
-

UDP
<%:NOT RUNNING%>

-
-
-
-
-
-
-
- -
-
-
-

DNS
<%:NOT RUNNING%>

-
-
-
-
-
-
-
- -
-
-
-

<%:Load Balancing%>
<%:NOT RUNNING%>

-
-
-
-
-
-
-
- -
-
-
-

<%:Baidu Connection%>
<%:Touch Check%>

-
-
-
-
-
-
-
- -
-
-
-

<%:Google Connection%>
<%:Touch Check%>

-
-
-
-
-
-
-
- -
-
-
-

<%:GitHub Connection%>
<%:Touch Check%>

-
-
-
-
-
-
-
- -
-
-
-

<%:Instagram Connection%>
<%:Touch Check%>

-
-
-
- <% if status:find("show_check_port") then %> -
check" onclick="check_port(this)"> -
-
-
- -
-
-
-

<%:Node Check%>
<%:Touch Check%>

- -
-
-
- <% end %> - <% if status:find("show_ip111") then %> -
check" onclick="javascript:window.open('http://www.ip111.cn/','target');"> -
-
-
- -
-
-
-

IP111.cn
<%:Touch Check%>

-
-
-
- <% end %> -
- -
diff --git a/luci-app-passwall/luasrc/view/passwall/global/status2.htm b/luci-app-passwall/luasrc/view/passwall/global/status2.htm deleted file mode 100644 index abbabff0..00000000 --- a/luci-app-passwall/luasrc/view/passwall/global/status2.htm +++ /dev/null @@ -1,257 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local status = api.uci_get_type("global_other", "status", "") --%> - - - -
- - <%:Running Status%> - -
-
- -
- <%:Collecting data...%> -
-
- -
- -
- <%:Collecting data...%> -
-
- - <% if api.is_finded("haproxy") then %> -
- -
- <%:Collecting data...%> -
-
- <% end %> - -
- -
- <%:Collecting data...%> -
-
- -
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
- <% if status:find("show_check_port") then %> -
- -
- - - -
-
- <% end %> - <% if status:find("show_ip111") then %> -
- -
- -
-
- <% end %> -
-
- - diff --git a/luci-app-passwall/luasrc/view/passwall/haproxy/status.htm b/luci-app-passwall/luasrc/view/passwall/haproxy/status.htm deleted file mode 100644 index 91fcf1e2..00000000 --- a/luci-app-passwall/luasrc/view/passwall/haproxy/status.htm +++ /dev/null @@ -1,26 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" -local console_port = api.uci_get_type("global_haproxy", "console_port", "") --%> -

- - diff --git a/luci-app-passwall/luasrc/view/passwall/log/log.htm b/luci-app-passwall/luasrc/view/passwall/log/log.htm deleted file mode 100644 index fcf81669..00000000 --- a/luci-app-passwall/luasrc/view/passwall/log/log.htm +++ /dev/null @@ -1,30 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" --%> - -
- - -
diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm b/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm deleted file mode 100644 index 6894947e..00000000 --- a/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm +++ /dev/null @@ -1,106 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" --%> - - - - - - - -
- -
- - - - - - -
-
-
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm deleted file mode 100644 index 1fdcda5a..00000000 --- a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm +++ /dev/null @@ -1,887 +0,0 @@ -<%+cbi/valueheader%> -<% -local api = require "luci.model.cbi.passwall.api.api" -local has_v2ray = api.is_finded("v2ray") -local has_xray = api.is_finded("xray") --%> - - - - -<%+cbi/valuefooter%> diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm b/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm deleted file mode 100644 index e51c5740..00000000 --- a/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm +++ /dev/null @@ -1,448 +0,0 @@ -<% --- Copyright (C) 2018-2020 L-WRT Team --- Copyright (C) 2021 xiaorouji -local api = require "luci.model.cbi.passwall.api.api" --%> - - - - - -
-
-
<%:You choose node is:%>
-
- - - -
-
-
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/rule/rule_version.htm b/luci-app-passwall/luasrc/view/passwall/rule/rule_version.htm deleted file mode 100644 index c0256c71..00000000 --- a/luci-app-passwall/luasrc/view/passwall/rule/rule_version.htm +++ /dev/null @@ -1,76 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" - -local gfwlist_update = api.uci_get_type("global_rules", "gfwlist_update", "1") == "1" and "checked='checked'" or "" -local chnroute_update = api.uci_get_type("global_rules", "chnroute_update", "1") == "1" and "checked='checked'" or "" -local chnroute6_update = api.uci_get_type("global_rules", "chnroute6_update", "1") == "1" and "checked='checked'" or "" -local chnlist_update = api.uci_get_type("global_rules", "chnlist_update", "1") == "1" and "checked='checked'" or "" -local geoip_update = api.uci_get_type("global_rules", "geoip_update", "1") == "1" and "checked='checked'" or "" -local geosite_update = api.uci_get_type("global_rules", "geosite_update", "1") == "1" and "checked='checked'" or "" --%> - - -
- -
-
- - - - - - - -
-
-
diff --git a/luci-app-passwall/luasrc/view/passwall/server/log.htm b/luci-app-passwall/luasrc/view/passwall/server/log.htm deleted file mode 100644 index 0164f81d..00000000 --- a/luci-app-passwall/luasrc/view/passwall/server/log.htm +++ /dev/null @@ -1,34 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" --%> - -
- - <%:Logs%> - - - -
\ No newline at end of file diff --git a/luci-app-passwall/luasrc/view/passwall/server/users_list_status.htm b/luci-app-passwall/luasrc/view/passwall/server/users_list_status.htm deleted file mode 100644 index d6dbddef..00000000 --- a/luci-app-passwall/luasrc/view/passwall/server/users_list_status.htm +++ /dev/null @@ -1,38 +0,0 @@ -<% -local api = require "luci.model.cbi.passwall.api.api" --%> - \ No newline at end of file diff --git a/luci-app-passwall/po/zh-cn/passwall.po b/luci-app-passwall/po/zh-cn/passwall.po deleted file mode 100644 index 83339763..00000000 --- a/luci-app-passwall/po/zh-cn/passwall.po +++ /dev/null @@ -1,1385 +0,0 @@ -msgid "Pass Wall" -msgstr "PassWall" - -msgid "Auto" -msgstr "自动" - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "Working..." -msgstr "连接正常" - -msgid "Problem detected!" -msgstr "连接失败" - -msgid "Very Fast" -msgstr "非常快" - -msgid "Fast" -msgstr "很快" - -msgid "General" -msgstr "一般般" - -msgid "Slow" -msgstr "很慢" - -msgid "Very Slow" -msgstr "非常慢" - -msgid "Touch Check" -msgstr "点我检测" - -msgid "Kernel Unsupported" -msgstr "内核不支持" - -msgid "Use IPv6" -msgstr "使用IPv6" - -msgid "Parsing IP" -msgstr "域名解析IP" - -msgid "TCP Server" -msgstr "TCP服务器" - -msgid "UDP Server" -msgstr "UDP服务器" - -msgid "Main Settings" -msgstr "节点选择" - -msgid "Basic Settings" -msgstr "基本设置" - -msgid "Node List" -msgstr "节点列表" - -msgid "Other Settings" -msgstr "高级设置" - -msgid "Load Balancing" -msgstr "负载均衡" - -msgid "Enter interface" -msgstr "进入界面" - -msgid "Rule Manage" -msgstr "规则管理" - -msgid "Rule List" -msgstr "规则列表" - -msgid "Access control" -msgstr "访问控制" - -msgid "Watch Logs" -msgstr "查看日志" - -msgid "Node Config" -msgstr "节点配置" - -msgid "Running Status" -msgstr "运行状态" - -msgid "Baidu Connection" -msgstr "百度连接" - -msgid "Google Connection" -msgstr "谷歌连接" - -msgid "GitHub Connection" -msgstr "GitHub连接" - -msgid "Instagram Connection" -msgstr "Instagram连接" - -msgid "Node Check" -msgstr "节点检测" - -msgid "Check..." -msgstr "检测中..." - -msgid "Clear" -msgstr "清除" - -msgid "Main switch" -msgstr "主开关" - -msgid "TCP Node" -msgstr "TCP节点" - -msgid "UDP Node" -msgstr "UDP节点" - -msgid "Edit Current Node" -msgstr "编辑当前节点" - -msgid "Socks Config" -msgstr "Socks配置" - -msgid "Socks Node" -msgstr "Socks节点" - -msgid "Listen Port" -msgstr "监听端口" - -msgid "0 is not use" -msgstr "0为不使用" - -msgid "Same as the tcp node" -msgstr "与TCP节点相同" - -msgid "Current node: %s" -msgstr "当前节点:%s" - -msgid "For proxy specific list." -msgstr "用于代理特定的列表。" - -msgid "For proxy game network, DNS hijack etc." -msgstr "用于代理游戏或DNS劫持等..." - -msgid "DNS Shunt" -msgstr "DNS分流" - -msgid "Domestic group name" -msgstr "国内分组名" - -msgid "You only need to configure domestic DNS packets in SmartDNS and set it redirect or as Dnsmasq upstream, and fill in the domestic DNS group name here." -msgstr "你只需要在SmartDNS配置好国内DNS分组,并设置重定向或作为Dnsmasq上游,此处填入国内DNS分组名。" - -msgid "Filter Mode" -msgstr "过滤模式" - -msgid "TCP node must be '%s' type to use FakeDNS." -msgstr "TCP节点必须是 '%s' 类型才能使用 FakeDNS。" - -msgid "Remote DNS" -msgstr "远程DNS" - -msgid "IP:Port mode acceptable, multi value split with english comma." -msgstr "接受 IP:Port 形式的输入,多个以英文逗号分隔。" - -msgid "If you use dns2socks, only the first one is valid." -msgstr "如果使用dns2socks,只有第一个生效。" - -msgid "Ali" -msgstr "阿里" - -msgid "Baidu" -msgstr "百度" - -msgid "Resolver For The List Proxied" -msgstr "解析被代理的域名列表" - -msgid "Requery DNS By %s" -msgstr "通过%s请求DNS" - -msgid "Socks Server" -msgstr "Socks服务器" - -msgid "Misconfigured" -msgstr "配置不当" - -msgid "Make sure socks service is available on this address." -msgstr "请确保此Socks服务可用。" - -msgid "Format must be:" -msgstr "格式必须为:" - -msgid "DoH request address" -msgstr "DoH 请求地址" - -msgid "China list or gfwlist cannot be used together with outside China list!" -msgstr "中国列表不能和中国列表外或防火墙表一起使用!" - -msgid "Cache Resolved" -msgstr "缓存解析结果" - -msgid "Notify the DNS server when the DNS query is notified, the location of the client (cannot be a private IP address)." -msgstr "用于 DNS 查询时通知 DNS 服务器,客户端所在的地理位置(不能是私有 IP 地址)。" - -msgid "This feature requires the DNS server to support the Edns Client Subnet (RFC7871)." -msgstr "此功能需要 DNS 服务器支持 EDNS Client Subnet(RFC7871)。" - -msgid "Query Strategy" -msgstr "查询策略" - -msgid "When the accessed domain name does not exist in the rule list, the default DNS used." -msgstr "当访问的域名不存在规则列表中,使用的默认DNS。" - -msgid "The effect is better, but will increase the memory." -msgstr "效果更好,但会增加内存使用。" - -msgid "Filter Proxy Host IPv6" -msgstr "过滤代理域名 IPv6" - -msgid "Experimental feature." -msgstr "实验性功能。" - -msgid "Clear IPSET" -msgstr "清空 IPSET" - -msgid "Try this feature if the rule modification does not take effect." -msgstr "如果修改规则后没有生效,请尝试此功能。" - -msgid "The server client can also use this rule to scientifically surf the Internet." -msgstr "本机服务器的客户端也可以使用这个代理模式上网。" - -msgid "About DNS issues:" -msgstr "关于DNS问题:" - -msgid "Some browsers may have built-in DNS, be sure to close. Example: Chrome. Settings - Security and Privacy - Security - Use secure DNS disabled." -msgstr "部分浏览器可能有内置的DNS,请务必关闭。如:chrome。 设置 - 安全和隐私设置 - 使用安全 DNS 关闭。" - -msgid "Sometimes after restart, you can not internet, especially the GFW mode. At this time, close all browsers (important), Windows Client, please `ipconfig / flushdns`. Please close the WiFi on the phone, cut the flight mode and then cut back." -msgstr "有时候重启后,上不了,尤其是GFW模式。这时请先关闭所有浏览器(重要),Windows客户端请`ipconfig/flushdns`。手机端请关闭WIFI,切一下飞行模式再切回来。" - -msgid "The client DNS and the default gateway must point to this router." -msgstr "客户端DNS和默认网关必须指向本路由器。" - -msgid "If you have a wrong DNS process, the consequences are at your own risk!" -msgstr "如果你自行配置了错误的DNS流程,后果自负!" - -msgid "You can use load balancing for failover." -msgstr "可以使用负载均衡实现故障切换功能。" - -msgid "Restore the default configuration method. Input example in the address bar:" -msgstr "恢复默认配置方法,地址栏输入例:" - -msgid "Hide menu method, input example in the address bar:" -msgstr "隐藏菜单方法,地址栏输入例:" - -msgid "After the hidden to the display, input example in the address bar:" -msgstr "当你隐藏后想再次显示,地址栏输入例:" - -msgid "Are you sure to reset?" -msgstr "你确定要恢复吗?" - -msgid "Are you sure to hide?" -msgstr "你确定要隐藏吗?" - -msgid "DNS Export Of Multi WAN" -msgstr "国内DNS指定解析出口" - -msgid "Node Export Of Multi WAN" -msgstr "节点指定出口" - -msgid "Only support Multi Wan." -msgstr "只有多线接入才有效。" - -msgid "Not Specify" -msgstr "不指定" - -msgid "custom" -msgstr "自定义" - -msgid "Process" -msgstr "进程" - -msgid "1 Process" -msgstr "单进程" - -msgid "Proxy Mode" -msgstr "代理模式" - -msgid "%s Proxy Mode" -msgstr "%s 代理模式" - -msgid "If not available, try clearing the cache." -msgstr "如果无法使用,请尝试清除缓存。" - -msgid "No Proxy" -msgstr "不代理" - -msgid "Global Proxy" -msgstr "全局代理" - -msgid "GFW List" -msgstr "GFW列表" - -msgid "Not China List" -msgstr "中国列表以外" - -msgid "Game Mode" -msgstr "游戏模式" - -msgid "China List" -msgstr "中国列表" - -msgid "Only use direct/proxy list" -msgstr "仅使用直连/代理列表" - -msgid "Localhost" -msgstr "本机" - -msgid "Router Localhost" -msgstr "路由器自身" - -msgid "Danger" -msgstr "危险" - -msgid "Same as the %s default proxy mode" -msgstr "与 %s 默认代理模式相同" - -msgid "Want different devices to use different proxy modes/ports/nodes? Please use access control." -msgstr "希望不同设备使用不同的代理模式/端口/节点?请使用访问控制。" - -msgid "Operation" -msgstr "操作" - -msgid "Add Node" -msgstr "添加节点" - -msgid "Add the node via the link" -msgstr "通过链接添加节点" - -msgid "SS/SSR/Vmess/VLESS/Trojan Link" -msgstr "SS/SSR/Vmess/VLESS/Trojan链接" - -msgid "Please enter the correct link, ss:// ssr:// vmess:// vless:// trojan://" -msgstr "请输入正确的链接,ss:// ssr:// vmess:// vless:// trojan://" - -msgid "Clear all nodes" -msgstr "清空所有节点" - -msgid "Are you sure to clear all nodes?" -msgstr "你确定要清空所有节点吗?" - -msgid "Error" -msgstr "错误" - -msgid "Delete select nodes" -msgstr "删除选择的节点" - -msgid "To Top" -msgstr "置顶" - -msgid "Select" -msgstr "选择" - -msgid "DeSelect" -msgstr "反选" - -msgid "Select all" -msgstr "全选" - -msgid "DeSelect all" -msgstr "全不选" - -msgid "Are you sure to delete select nodes?" -msgstr "你确定要删除选择的节点吗?" - -msgid "You no select nodes !" -msgstr "你没有选择任何节点!" - -msgid "Are you sure set to" -msgstr "你确定要设为" - -msgid "the server?" -msgstr "服务器吗?" - -msgid "You choose node is:" -msgstr "你选择的节点是:" - -msgid "Timeout" -msgstr "超时" - -msgid "Node Remarks" -msgstr "节点备注" - -msgid "Add Mode" -msgstr "添加方式" - -msgid "Type" -msgstr "类型" - -msgid "Balancing" -msgstr "负载均衡" - -msgid "Xray_balancing" -msgstr "Xray 负载均衡" - -msgid "V2ray_balancing" -msgstr "V2ray 负载均衡" - -msgid "Shunt" -msgstr "分流" - -msgid "Xray_shunt" -msgstr "Xray 分流" - -msgid "V2ray_shunt" -msgstr "V2ray 分流" - -msgid "Preproxy" -msgstr "前置代理" - -msgid "Direct Connection" -msgstr "直连" - -msgid "Blackhole" -msgstr "黑洞" - -msgid "Default Preproxy" -msgstr "默认前置代理" - -msgid "No shunt rules? Click me to go to add." -msgstr "没有分流规则?点我前往去添加。" - -msgid "When using, localhost will connect this node first and then use this node to connect the default node." -msgstr "当使用时,本机将首先连接到此节点,然后再使用此节点连接到默认节点落地。" - -msgid "Domain Strategy" -msgstr "域名解析策略" - -msgid "Domain matcher" -msgstr "域名匹配算法" - -msgid "'AsIs': Only use domain for routing. Default value." -msgstr "AsIs:只使用域名进行路由选择。默认值。" - -msgid "'IPIfNonMatch': When no rule matches current domain, resolves it into IP addresses (A or AAAA records) and try all rules again." -msgstr "IPIfNonMatch:当域名没有匹配任何规则时,将域名解析成 IP(A 记录或 AAAA 记录)再次进行匹配。" - -msgid "'IPOnDemand': As long as there is a IP-based rule, resolves the domain into IP immediately." -msgstr "IPOnDemand:当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配。" - -msgid "Load balancing node list" -msgstr "负载均衡节点列表" - -msgid "Load balancing node list, document" -msgstr "负载均衡节点列表,文档原理" - -msgid "From Share URL" -msgstr "导入分享URL" - -msgid "Build Share URL" -msgstr "导出分享URL" - -msgid "Import Finished" -msgstr "导入完成:" - -msgid "Not a supported scheme:" -msgstr "不支持这种样式的:" - -msgid "Invalid Share URL Format" -msgstr "无效的分享URL信息" - -msgid "Paste Share URL Here" -msgstr "在此处粘贴分享信息" - -msgid "Share URL to clipboard unable." -msgstr "无法分享URL到剪贴板。" - -msgid "Share URL to clipboard successfully." -msgstr "成功复制分享URL到剪贴板。" - -msgid "Faltal on get option, please help in debug:" -msgstr "代码错误,请协助捉虫:" - -msgid "Faltal on set option, please help in debug:" -msgstr "代码错误,请协助捉虫:" - -msgid "Address" -msgstr "地址" - -msgid "Address (Support Domain Name)" -msgstr "地址(支持域名)" - -msgid "Trojan Verify Cert" -msgstr "验证证书" - -msgid "Trojan Cert Path" -msgstr "证书路径" - -msgid "Finger Print" -msgstr "指纹伪造" - -msgid "Original" -msgstr "原版" - -msgid "Transport Plugin" -msgstr "传输层插件" - -msgid "Shadowsocks secondary encryption" -msgstr "Shadowsocks 二次加密" - -msgid "Obfs Password" -msgstr "混淆密码" - -msgid "Auth Type" -msgstr "认证类型" - -msgid "Auth Password" -msgstr "认证密码" - -msgid "Max upload Mbps" -msgstr "最大上行(Mbps)" - -msgid "Max download Mbps" -msgstr "最大下行(Mbps)" - -msgid "QUIC stream receive window" -msgstr "QUIC 流接收窗口" - -msgid "QUIC connection receive window" -msgstr "QUIC 连接接收窗口" - -msgid "Disable MTU detection" -msgstr "禁用 MTU 检测" - -msgid "Encrypt Method" -msgstr "加密" - -msgid "Kcptun Switch" -msgstr "Kcptun开关" - -msgid "Latency" -msgstr "延迟" - -msgid "Show Add Mode" -msgstr "显示添加方式" - -msgid "Show Group" -msgstr "显示组" - -msgid "Group" -msgstr "组" - -msgid "Auto Ping" -msgstr "自动Ping" - -msgid "This will automatically ping the node for latency" -msgstr "选中后保存应用后即自动Ping节点" - -msgid "Use TCP Detection delay" -msgstr "使用TCP检测延迟" - -msgid "This will use tcping replace ping detection of node" -msgstr "选中后保存应用后即使用tcping替换ping检测节点" - -msgid "Concise display nodes" -msgstr "简洁显示节点" - -msgid "Show server address and port" -msgstr "显示服务器地址和端口" - -msgid "Node num" -msgstr "节点数量" - -msgid "Self add" -msgstr "自添" - -msgid "Apply" -msgstr "应用" - -msgid "Use" -msgstr "使用" - -msgid "Copy" -msgstr "复制" - -msgid "Delay Settings" -msgstr "定时配置" - -msgid "Open and close Daemon" -msgstr "启动守护进程" - -msgid "Delay Start" -msgstr "开机时延时启动" - -msgid "Units:seconds" -msgstr "单位:秒" - -msgid "Units:minutes" -msgstr "单位:分钟" - -msgid "Open and close automatically" -msgstr "定时自动开关" - -msgid "Automatically turn off time" -msgstr "自动关闭时间" - -msgid "Automatically turn on time" -msgstr "自动开启时间" - -msgid "Automatically restart time" -msgstr "自动重启时间" - -msgid "Forwarding Settings" -msgstr "转发配置" - -msgid "TCP No Redir Ports" -msgstr "TCP不转发端口" - -msgid "UDP No Redir Ports" -msgstr "UDP不转发端口" - -msgid "Fill in the ports you don't want to be forwarded by the agent, with the highest priority." -msgstr "填写你不希望被代理转发的端口,优先级最高。" - -msgid "TCP Redir Ports" -msgstr "TCP转发端口" - -msgid "UDP Redir Ports" -msgstr "UDP转发端口" - -msgid "No patterns are used" -msgstr "不使用" - -msgid "All" -msgstr "所有" - -msgid "Common Use" -msgstr "常用的" - -msgid "Only Web" -msgstr "仅网页" - -msgid "or more" -msgstr "及以上" - -msgid "or less" -msgstr "及以下" - -msgid "Default" -msgstr "默认" - -msgid "Close" -msgstr "关闭" - -msgid "Hijacking ICMP (PING)" -msgstr "劫持ICMP (PING)" - -msgid "Hijacking ICMPv6 (IPv6 PING)" -msgstr "劫持ICMPv6 (IPv6 PING)" - -msgid "TCP Proxy Way" -msgstr "TCP代理方式" - -msgid "Proxy Settings" -msgstr "代理配置" - -msgid "TCP Redir Port" -msgstr "TCP透明代理端口" - -msgid "UDP Redir Port" -msgstr "UDP透明代理端口" - -msgid "Socks Proxy Port" -msgstr "Socks代理端口" - -msgid "Kcptun Port" -msgstr "Kcptun端口" - -msgid "Custom Dnsmasq" -msgstr "自定义Dnsmasq设置" - -msgid "Setting a parameter error will cause dnsmasq fail to start." -msgstr "参数设置错误将会导致Dnsmasq无法启动。" - -msgid "Auto Switch" -msgstr "自动切换" - -msgid "When there is no server, an automatic reconnect scheme is used" -msgstr "当没有服务器时,则使用自动重连方案" - -msgid "How often to test" -msgstr "多久检测一次" - -msgid "Timeout seconds" -msgstr "超时秒数" - -msgid "Timeout retry num" -msgstr "超时重试次数" - -msgid "Automatic switching cannot be used when this option is checked" -msgstr "当勾选此选项时,不能使用自动切换" - -msgid "Main node" -msgstr "主节点" - -msgid "List of backup nodes" -msgstr "备用节点的列表" - -msgid "Restore Switch" -msgstr "恢复切换" - -msgid "When detects main node is available, switch back to the main node." -msgstr "当检测到主节点可用时,切换回主节点。" - -msgid "If the main node is V2ray/Xray shunt" -msgstr "如果主节点是V2ray/Xray分流" - -msgid "Switch it" -msgstr "切掉它" - -msgid "Applying to the default node" -msgstr "应用于默认节点" - -msgid "Applying to the default preproxy node" -msgstr "应用于默认前置节点" - -msgid "Add nodes to the standby node list by keywords" -msgstr "通过关键字添加节点到备用节点列表" - -msgid "Delete nodes in the standby node list by keywords" -msgstr "通过关键字删除备用节点列表的节点" - -msgid "Please enter the node keyword, pay attention to distinguish between spaces, uppercase and lowercase." -msgstr "请输入节点关键字,注意区分空格、大写和小写。" - -msgid "Configure this node with 127.0.0.1: this port" -msgstr "使用127.0.0.1和此端口配置节点" - -msgid "Enable Load Balancing" -msgstr "开启负载均衡" - -msgid "Console Username" -msgstr "控制台账号" - -msgid "Console Password" -msgstr "控制台密码" - -msgid "Console Port" -msgstr "控制台端口" - -msgid "In the browser input routing IP plus port access, such as:192.168.1.1:1188" -msgstr "在浏览器输入路由IP加端口访问,如:192.168.1.1:1188" - -msgid "Haproxy Port" -msgstr "负载均衡端口" - -msgid "Add a node, Export Of Multi WAN Only support Multi Wan. Load specific gravity range 1-256. Multiple primary servers can be load balanced, standby will only be enabled when the primary server is offline! Multiple groups can be set, Haproxy port same one for each group." -msgstr "添加节点,指定出口功能是为多WAN用户准备的。负载比重范围1-256。多个主服务器可以负载均衡,备用只有在主服务器离线时才会启用!可以设置多个组,负载均衡端口相同则为一组。" - -msgid "Note that the node configuration parameters for load balancing must be consistent, otherwise problems can arise!" -msgstr "注意,负载均衡的节点配置参数必须一致,否则会出问题!" - -msgid "Node" -msgstr "节点" - -msgid "Node Address" -msgstr "节点地址" - -msgid "Node Port" -msgstr "节点端口" - -msgid "Node Weight" -msgstr "负载比重" - -msgid "Export Of Multi WAN" -msgstr "多WAN指定出口" - -msgid "Main" -msgstr "主要" - -msgid "Mode" -msgstr "模式" - -msgid "Primary" -msgstr "主要" - -msgid "Standby" -msgstr "备用" - -msgid "Manually update" -msgstr "手动更新" - -msgid "Enable custom URL" -msgstr "启用自定义规则地址" - -msgid "GFW domains(gfwlist) Update URL" -msgstr "防火墙域名列表(gfwlist)更新URL" - -msgid "China IPs(chnroute) Update URL" -msgstr "中国IP段(chnroute)更新URL" - -msgid "China IPv6s(chnroute6) Update URL" -msgstr "中国IPv6段(chnroute6)更新URL" - -msgid "China List(Chnlist) Update URL" -msgstr "中国域名列表(Chnlist)更新URL" - -msgid "Rule status" -msgstr "规则版本" - -msgid "Enable auto update rules" -msgstr "开启自动更新规则" - -msgid "Week update rules" -msgstr "更新时间星期" - -msgid "Day update rules" -msgstr "更新时间小时" - -msgid "Every day" -msgstr "每天" - -msgid "day" -msgstr "日" - -msgid "Week" -msgstr "周" - -msgid "oclock" -msgstr "点" - -msgid "Location of V2ray/Xray asset" -msgstr "V2ray/Xray 资源文件目录" - -msgid "This variable specifies a directory where geoip.dat and geosite.dat files are." -msgstr "此变量指定geoip.dat和geosite.dat文件所在的目录。" - -msgid "Shunt Rule" -msgstr "分流规则" - -msgid "Please note attention to the priority, the higher the order, the higher the priority." -msgstr "请注意优先级问题,排序越上面优先级越高。" - -msgid "Update..." -msgstr "更新中" - -msgid "It is the latest version" -msgstr "已是最新版本" - -msgid "Update successful" -msgstr "更新成功" - -msgid "Click to update" -msgstr "点击更新" - -msgid "Updating..." -msgstr "更新中" - -msgid "Unexpected error" -msgstr "意外错误" - -msgid "Updating, are you sure to close?" -msgstr "正在更新,你确认要关闭吗?" - -msgid "Downloading..." -msgstr "下载中" - -msgid "Unpacking..." -msgstr "解压中" - -msgid "Moving..." -msgstr "移动中" - -msgid "App Update" -msgstr "组件更新" - -msgid "Please confirm that your firmware supports FPU." -msgstr "请确认你的固件支持FPU。" - -msgid "if you want to run from memory, change the path, /tmp beginning then save the application and update it manually." -msgstr "如果你希望从内存中运行,请更改路径,/tmp 开头,然后保存应用后,再手动更新。" - -msgid "Make sure there is enough space to install %s" -msgstr "确保有足够的空间安装 %s" - -msgid "App Path" -msgstr "程序路径" - -msgid "%s App Path" -msgstr "%s 程序路径" - -msgid "%s Client App Path" -msgstr "%s 客户端程序路径" - -msgid "Trojan-Go Version API" -msgstr "Trojan-Go 版本 API" - -msgid "alternate API URL for version checking" -msgstr "用于版本检查的 API URL" - -msgid "Node Subscribe" -msgstr "节点订阅" - -msgid "Subscribe Remark" -msgstr "订阅备注(机场)" - -msgid "Subscribe URL" -msgstr "订阅网址" - -msgid "Please input the subscription url first, save and submit before manual subscription." -msgstr "请输入订阅网址保存应用后再手动订阅。" - -msgid "Subscribe via proxy" -msgstr "通过代理订阅" - -msgid "Enable auto update subscribe" -msgstr "开启自动更新订阅" - -msgid "Manual subscription" -msgstr "手动订阅" - -msgid "Delete All Subscribe Node" -msgstr "删除所有订阅节点" - -msgid "Delete the subscribed node" -msgstr "删除已订阅的节点" - -msgid "Manual subscription All" -msgstr "手动订阅全部" - -msgid "This remark already exists, please change a new remark." -msgstr "此备注已存在,请改一个新的备注。" - -msgid "Filter keyword Mode" -msgstr "过滤关键字模式" - -msgid "Discard List" -msgstr "丢弃列表" - -msgid "Keep List" -msgstr "保留列表" - -msgid "Discard List,But Keep List First" -msgstr "丢弃列表,但保留列表优先" - -msgid "Keep List,But Discard List First" -msgstr "保留列表,但丢弃列表优先" - -msgid "Use global config" -msgstr "使用全局配置" - -msgid "User-Agent" -msgstr "用户代理(User-Agent)" - -msgid "Add" -msgstr "添加" - -msgid "ACLs" -msgstr "访问控制" - -msgid "ACLs is a tools which used to designate specific IP proxy mode." -msgstr "访问控制列表是用于指定特殊IP代理模式的工具。" - -msgid "Example:" -msgstr "例:" - -msgid "IP range" -msgstr "IP 范围" - -msgid "Remarks" -msgstr "备注" - -msgid "Direct List" -msgstr "直连列表" - -msgid "Proxy List" -msgstr "代理列表" - -msgid "Block List" -msgstr "屏蔽列表" - -msgid "Lan IP List" -msgstr "局域网IP列表" - -msgid "Route Hosts" -msgstr "路由Hosts文件" - -msgid "Join the direct hosts list of domain names will not proxy." -msgstr "加入的域名不走代理,对所有模式有效。且优先级最高。" - -msgid "These had been joined ip addresses will not proxy. Please input the ip address or ip address segment,every line can input only one ip address. For example: 192.168.0.0/24 or 223.5.5.5." -msgstr "加入的IP段不走代理,对所有模式有效。且优先级最高。可输入IP地址或地址段,如:192.168.0.0/24或223.5.5.5,每个地址段一行。" - -msgid "These had been joined websites will use proxy. Please input the domain names of websites, every line can input only one website domain. For example: google.com." -msgstr "加入的域名将走代理。输入网站域名,如:google.com,每个地址段一行。" - -msgid "These had been joined ip addresses will use proxy. Please input the ip address or ip address segment, every line can input only one ip address. For example: 35.24.0.0/24 or 8.8.4.4." -msgstr "加入的IP段将走代理。可输入IP地址或地址段,如:35.24.0.0/24或8.8.4.4,每个地址段一行。" - -msgid "These had been joined websites will be block. Please input the domain names of websites, every line can input only one website domain. For example: twitter.com." -msgstr "加入的域名将屏蔽。输入网站域名,如:twitter.com,每个地址段一行。" - -msgid "The list is the IPv4 LAN IP list, which represents the direct connection IP of the LAN. If you need the LAN IP in the proxy list, please clear it from the list. Do not modify this list by default." -msgstr "列表中为IPv4的局域网IP列表,代表局域网直连IP。如果需要代理列表中的局域网IP,请将其在该列表中清除,并将其添加到代理列表中。默认情况下不要修改这个列表。" - -msgid "The list is the IPv6 LAN IP list, which represents the direct connection IP of the LAN. If you need the LAN IP in the proxy list, please clear it from the list. Do not modify this list by default." -msgstr "列表中为IPv6的局域网IP列表,代表局域网直连IP。如果需要代理列表中的局域网IP,请将其在该列表中清除,并将其添加到代理列表中。默认情况下不要修改这个列表。" - -msgid "Configure routing etc/hosts file, if you don't know what you are doing, please don't change the content." -msgstr "配置路由etc/hosts文件,如果你不知道自己在做什么,请不要改动内容。" - -msgid "These had been joined ip addresses will be block. Please input the ip address or ip address segment, every line can input only one ip address." -msgstr "加入的IP段将屏蔽。可输入IP地址或地址段,每个地址段一行。" - -msgid "Not valid domain name, please re-enter!" -msgstr "不是有效域名,请重新输入!" - -msgid "Not valid IP format, please re-enter!" -msgstr "不是有效IP格式,请重新输入!" - -msgid "Not valid IPv4 format, please re-enter!" -msgstr "不是有效IPv4格式,请重新输入!" - -msgid "Not valid IPv6 format, please re-enter!" -msgstr "不是有效IPv6格式,请重新输入!" - -msgid "Not true format, please re-enter!" -msgstr "不是正确的格式,请重新输入!" - -msgid "Plaintext: If this string matches any part of the targeting domain, this rule takes effet. Example: rule 'sina.com' matches targeting domain 'sina.com', 'sina.com.cn' and 'www.sina.com', but not 'sina.cn'." -msgstr "纯字符串: 当此字符串匹配目标域名中任意部分,该规则生效。比如'sina.com'可以匹配'sina.com'、'sina.com.cn'和'www.sina.com',但不匹配'sina.cn'。" - -msgid "Regular expression: Begining with 'regexp:', the rest is a regular expression. When the regexp matches targeting domain, this rule takes effect. Example: rule 'regexp:\\.goo.*\\.com$' matches 'www.google.com' and 'fonts.googleapis.com', but not 'google.com'." -msgstr "正则表达式: 由'regexp:'开始,余下部分是一个正则表达式。当此正则表达式匹配目标域名时,该规则生效。例如'regexp:\\.goo.*\\.com$'匹配'www.google.com'、'fonts.googleapis.com',但不匹配'google.com'。" - -msgid "Subdomain (recommended): Begining with 'domain:' and the rest is a domain. When the targeting domain is exactly the value, or is a subdomain of the value, this rule takes effect. Example: rule 'domain:v2ray.com' matches 'www.v2ray.com', 'v2ray.com', but not 'xv2ray.com'." -msgstr "子域名 (推荐): 由'domain:'开始,余下部分是一个域名。当此域名是目标域名或其子域名时,该规则生效。例如'domain:v2ray.com'匹配'www.v2ray.com'、'v2ray.com',但不匹配'xv2ray.com'。" - -msgid "Full domain: Begining with 'full:' and the rest is a domain. When the targeting domain is exactly the value, the rule takes effect. Example: rule 'domain:v2ray.com' matches 'v2ray.com', but not 'www.v2ray.com'." -msgstr "完整匹配: 由'full:'开始,余下部分是一个域名。当此域名完整匹配目标域名时,该规则生效。例如'full:v2ray.com'匹配'v2ray.com'但不匹配'www.v2ray.com'。" - -msgid "Pre-defined domain list: Begining with 'geosite:' and the rest is a name, such as geosite:google or geosite:cn." -msgstr "预定义域名列表:由'geosite:'开头,余下部分是一个名称,如geosite:google或者geosite:cn。" - -msgid "Domains from file: Such as 'ext:file:tag'. The value must begin with ext: (lowercase), and followed by filename and tag. The file is placed in resource directory, and has the same format of geosite.dat. The tag must exist in the file." -msgstr "从文件中加载域名: 形如'ext:file:tag',必须以ext:(小写)开头,后面跟文件名和标签,文件存放在资源目录中,文件格式与geosite.dat相同,标签必须在文件中存在。" - -msgid "IP: such as '127.0.0.1'." -msgstr "IP: 形如'127.0.0.1'。" - -msgid "CIDR: such as '127.0.0.0/8'." -msgstr "CIDR: 形如'10.0.0.0/8'." - -msgid "GeoIP: such as 'geoip:cn'. It begins with geoip: (lower case) and followed by two letter of country code." -msgstr "GeoIP: 形如'geoip:cn',必须以geoip:(小写)开头,后面跟双字符国家代码,支持几乎所有可以上网的国家。" - -msgid "IPs from file: Such as 'ext:file:tag'. The value must begin with ext: (lowercase), and followed by filename and tag. The file is placed in resource directory, and has the same format of geoip.dat. The tag must exist in the file." -msgstr "从文件中加载 IP: 形如'ext:file:tag',必须以ext:(小写)开头,后面跟文件名和标签,文件存放在资源目录中,文件格式与geoip.dat相同标签必须在文件中存在。" - -msgid "Clear logs" -msgstr "清空日志" - -msgid "Need node support required" -msgstr "需要节点支持" - -msgid "HAProxy cannot be used with KCP." -msgstr "HAProxy不能和KCP一起使用" - -msgid "Password" -msgstr "密码" - -msgid "IV Check" -msgstr "IV 检查" - -msgid "Connection Timeout" -msgstr "连接超时时间" - -msgid "Local Port" -msgstr "本地端口" - -msgid "TCP Fast Open" -msgstr "TCP快速打开" - -msgid "Need node support required" -msgstr "需要节点支持" - -msgid "plugin" -msgstr "插件" - -msgid "opts" -msgstr "插件选项" - -msgid "Protocol" -msgstr "协议名称" - -msgid "Protocol_param" -msgstr "协议参数" - -msgid "Obfs" -msgstr "混淆" - -msgid "Obfs_param" -msgstr "混淆参数" - -msgid "Plugin Name" -msgstr "插件名称" - -msgid "Plugin Arguments" -msgstr "插件参数" - -msgid "Use Kcptun" -msgstr "使用Kcptun" - -msgid "Please confirm whether the Kcptun is installed. If not, please go to Rule Update download installation." -msgstr "请确认Kcptun是否已安装,若没有请到自动更新下载安装。" - -msgid "Kcptun Server" -msgstr "Kcptun服务器" - -msgid "Default:Current Server" -msgstr "留空则使用当前服务器" - -msgid "Kcptun Config" -msgstr "Kcptun参数配置" - -msgid "--crypt aes192 --key abc123 --mtu 1350 --sndwnd 128 --rcvwnd 1024 --mode fast" -msgstr "参数中无需配置服务器IP和本地端口,需要配置的参数和格式如:--crypt aes192 --key abc123 --mtu 1350 --sndwnd 128 --rcvwnd 1024 --mode fast" - -msgid "Brook Protocol" -msgstr "Brook协议" - -msgid "Use TLS" -msgstr "使用TLS" - -msgid "Naiveproxy Protocol" -msgstr "Naiveproxy协议" - -msgid "V2ray Protocol" -msgstr "V2ray协议" - -msgid "User Level" -msgstr "用户等级(level)" - -msgid "Transport" -msgstr "传输方式" - -msgid "Camouflage Type" -msgstr "伪装类型" - -msgid "Transport Layer Encryption" -msgstr "传输层加密" - -msgid "Whether or not transport layer encryption is enabled, \"none\" for unencrypted, \"tls\" for using TLS, \"xtls\" for using XTLS." -msgstr "是否启入传输层加密,支持的选项有 \"none\" 表示不加密,\"tls\" 表示使用 TLS,\"xtls\" 表示使用 XTLS。" - -msgid "Original Trojan only supported 'tls', please choose 'tls'." -msgstr "原版Trojan只支持'tls',请选择'tls'。" - -msgid "Transfer mode" -msgstr "传输模式" - -msgid "Domain" -msgstr "域名" - -msgid "allowInsecure" -msgstr "允许不安全连接" - -msgid "Whether unsafe connections are allowed. When checked, Certificate validation will be skipped." -msgstr "是否允许不安全连接。当勾选时,将跳过证书验证。" - -msgid "SS AEAD Node Use Type" -msgstr "SS AEAD节点使用类型" - -msgid "Trojan Node Use Type" -msgstr "Trojan节点使用类型" - -msgid "
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)" -msgstr "
none:默认值,不进行伪装,发送的数据是没有特征的数据包。
srtp:伪装成 SRTP 数据包,会被识别为视频通话数据(如 FaceTime)。
utp:伪装成 uTP 数据包,会被识别为 BT 下载数据。
wechat-video:伪装成微信视频通话的数据包。
dtls:伪装成 DTLS 1.2 数据包。
wireguard:伪装成 WireGuard 数据包。(并不是真正的 WireGuard 协议)" - -msgid "A legal file path. This file must not exist before running." -msgstr "一个合法的文件路径。在运行之前,这个文件必须不存在。" - -msgid "Auth" -msgstr "身份认证" - -msgid "Socks for authentication" -msgstr "Socks认证方式" - -msgid "Socks protocol authentication, support anonymous and password." -msgstr "Socks 协议的认证方式,支持匿名方式和账号密码方式。" - -msgid "anonymous" -msgstr "匿名" - -msgid "User Password" -msgstr "账号密码" - -msgid "Username and Password must be used together!" -msgstr "账号和密码必须同时使用!" - -msgid "Node Number" -msgstr "节点数量" - -msgid "You can only set up a maximum of %s nodes for the time being, Used for access control." -msgstr "目前最多只能设置%s个节点,用于给访问控制使用。" - -msgid "IPv6 TProxy" -msgstr "IPv6透明代理(TProxy)" - -msgid "Experimental feature. Make sure that your node supports IPv6." -msgstr "实验特性,请确保你的节点支持IPv6" - -msgid "Status info" -msgstr "状态信息" - -msgid "Big icon" -msgstr "大图标" - -msgid "Show node check" -msgstr "显示节点检测" - -msgid "Show Show IP111" -msgstr "显示IP111" - -msgid "The MTProto protocol must be 32 characters and can only contain characters from 0 to 9 and a to f." -msgstr "MTProto 协议必须为 32 个字符,仅可包含 0 到 9 和 a 到 f 之间的字符。" - -msgid "Destination protocol" -msgstr "目标协议" - -msgid "Destination address" -msgstr "目标地址" - -msgid "Destination port" -msgstr "目标端口" - -msgid "Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used." -msgstr "是否接收 PROXY protocol,当该节点要被回落或被代理转发时,必须启用,否则不能使用。" - -msgid "transit node" -msgstr "中转到此节点" - -msgid "Custom Socks" -msgstr "自定义 Socks" - -msgid "Custom HTTP" -msgstr "自定义 HTTP" - -msgid "Bind Local" -msgstr "本机监听" - -msgid "When selected, it can only be accessed locally, It is recommended to turn on when using reverse proxies or be fallback." -msgstr "当勾选时,只能由本机访问此端口,当想被反向代理或被回落时建议勾选此项。" - -msgid "Accept LAN Access" -msgstr "接受局域网访问" - -msgid "When selected, it can accessed lan , this will not be safe!" -msgstr "当勾选时,可以直接访问局域网,这将不安全!(非特殊情况不建议开启)" - -msgid "Enable Remote" -msgstr "启用转发" - -msgid "You can forward to Nginx/Caddy/V2ray/Xray WebSocket and more." -msgstr "您可以转发到Nginx/Caddy/V2ray/Xray WebSocket等。" - -msgid "Remote Address" -msgstr "远程地址" - -msgid "Remote Port" -msgstr "远程端口" - -msgid "as:" -msgstr "如:" - -msgid "Public key absolute path" -msgstr "公钥文件绝对路径" - -msgid "Private key absolute path" -msgstr "私钥文件绝对路径" - -msgid "Can't find this file!" -msgstr "找不到这个文件!" - -msgid "Public key and Private key path can not be empty!" -msgstr "公钥和私钥文件路径不能为空!" - -msgid "Server-Side" -msgstr "服务器端" - -msgid "Server Config" -msgstr "服务器配置" - -msgid "Users Manager" -msgstr "用户管理" - -msgid "Logs" -msgstr "日志" - -msgid "Log" -msgstr "日志" - -msgid "%s Node Log Close" -msgstr "%s 节点日志关闭" - -msgid "Log Level" -msgstr "日志等级" - -msgid "Not enabled log" -msgstr "未启用日志" - -msgid "UDP Forward" -msgstr "UDP转发" - -msgid "DNS Settings" -msgstr "DNS设置" - -msgid "Null" -msgstr "无" - -msgid "You did not fill in the %s path. Please save and apply then update manually." -msgstr "您没有填写 %s 路径。请保存应用后再手动更新。" - -msgid "Not installed unzip, Can't unzip!" -msgstr "未安装unzip,无法解压。" - -msgid "Can't determine ARCH, or ARCH not supported." -msgstr "无法确认ARCH架构,或是不支持。" - -msgid "Get remote version info failed." -msgstr "获取远程版本信息失败。" - -msgid "New version found, but failed to get new version download url." -msgstr "发现新版本,但未能获得新版本的下载地址。" - -msgid "Download url is required." -msgstr "请指定下载地址。" - -msgid "File download failed or timed out: %s" -msgstr "文件下载失败或超时:%s" - -msgid "File path required." -msgstr "请指定文件路径。" - -msgid "%s not enough space." -msgstr "%s 空间不足。" - -msgid "Can't find client in file: %s" -msgstr "无法在文件中找到客户端:%s" - -msgid "Client file is required." -msgstr "请指定客户端文件。" - -msgid "The client file is not suitable for current device." -msgstr "客户端文件不适合当前设备。" - -msgid "Can't move new file to path: %s" -msgstr "无法移动新文件到:%s" - -msgid "Mux concurrency" -msgstr "最大并发连接数" - -msgid "Mux idle timeout" -msgstr "最大闲置时间" - -msgid "Enable early data" -msgstr "启用前置数据" - -msgid "Early data length" -msgstr "前置数据最大长度" - -msgid "Health check" -msgstr "健康检查" - -msgid "Idle timeout" -msgstr "闲置时间" - -msgid "Health check timeout" -msgstr "检查超时时间" - -msgid "Permit without stream" -msgstr "无子连接时的健康检查" - -msgid "Initial Windows Size" -msgstr "初始窗口大小" diff --git a/luci-app-passwall/po/zh_Hans b/luci-app-passwall/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-passwall/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-passwall/root/etc/config/passwall_server b/luci-app-passwall/root/etc/config/passwall_server deleted file mode 100644 index c9526cb2..00000000 --- a/luci-app-passwall/root/etc/config/passwall_server +++ /dev/null @@ -1,4 +0,0 @@ - -config global 'global' - option enable '0' - diff --git a/luci-app-passwall/root/etc/init.d/passwall b/luci-app-passwall/root/etc/init.d/passwall deleted file mode 100755 index 0767a502..00000000 --- a/luci-app-passwall/root/etc/init.d/passwall +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=99 -STOP=15 - -CONFIG=passwall -APP_FILE=/usr/share/${CONFIG}/app.sh -LOCK_FILE_DIR=/var/lock -LOCK_FILE=${LOCK_FILE_DIR}/${CONFIG}.lock - -set_lock() { - [ ! -d "$LOCK_FILE_DIR" ] && mkdir -p $LOCK_FILE_DIR - exec 999>"$LOCK_FILE" - flock -xn 999 -} - -unset_lock() { - flock -u 999 - rm -rf "$LOCK_FILE" -} - -unlock() { - failcount=1 - while [ "$failcount" -le 10 ]; do - if [ -f "$LOCK_FILE" ]; then - let "failcount++" - sleep 1s - [ "$failcount" -ge 10 ] && unset_lock - else - break - fi - done -} - -boot() { - $APP_FILE boot -} - -start() { - set_lock - [ $? == 1 ] && $APP_FILE echolog "脚本已经在运行,不重复运行,退出." && exit 0 - $APP_FILE start - unset_lock -} - -stop() { - unlock - set_lock - [ $? == 1 ] && $APP_FILE echolog "停止脚本等待超时,不重复运行,退出." && exit 0 - $APP_FILE stop - unset_lock -} - -restart() { - set_lock - [ $? == 1 ] && $APP_FILE echolog "脚本已经在运行,不重复运行,退出." && exit 0 - $APP_FILE stop - $APP_FILE start - unset_lock -} - -disable() { - rm -f "$IPKG_INSTROOT"/etc/rc.d/S??zzz_${CONFIG} - rm -f "$IPKG_INSTROOT"/etc/rc.d/K??zzz_${CONFIG} -} - -enable() { - err=1 - [ "$START" ] && \ - ln -sf "../init.d/${CONFIG}" "$IPKG_INSTROOT/etc/rc.d/S${START}zzz_${CONFIG}" && \ - err=0 - [ "$STOP" ] && \ - ln -sf "../init.d/${CONFIG}" "$IPKG_INSTROOT/etc/rc.d/K${STOP}zzz_${CONFIG}" && \ - err=0 - return $err -} - -enabled() { - [ -x "$IPKG_INSTROOT/etc/rc.d/S${START}zzz_${CONFIG}" ] -} diff --git a/luci-app-passwall/root/etc/init.d/passwall_server b/luci-app-passwall/root/etc/init.d/passwall_server deleted file mode 100755 index 08bc7646..00000000 --- a/luci-app-passwall/root/etc/init.d/passwall_server +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=99 - -start() { - lua /usr/lib/lua/luci/model/cbi/passwall/server/api/app.lua start -} - -stop() { - lua /usr/lib/lua/luci/model/cbi/passwall/server/api/app.lua stop -} - -restart() { - stop - start -} \ No newline at end of file diff --git a/luci-app-passwall/root/etc/uci-defaults/luci-passwall b/luci-app-passwall/root/etc/uci-defaults/luci-passwall deleted file mode 100755 index cc39c00a..00000000 --- a/luci-app-passwall/root/etc/uci-defaults/luci-passwall +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - set dhcp.@dnsmasq[0].localuse=1 - commit dhcp - delete ucitrack.@passwall[-1] - add ucitrack passwall - set ucitrack.@passwall[-1].init=passwall - commit ucitrack - delete firewall.passwall - set firewall.passwall=include - set firewall.passwall.type=script - set firewall.passwall.path=/var/etc/passwall.include - set firewall.passwall.reload=1 - commit firewall - delete ucitrack.@passwall_server[-1] - add ucitrack passwall_server - set ucitrack.@passwall_server[-1].init=passwall_server - commit ucitrack - delete firewall.passwall_server - set firewall.passwall_server=include - set firewall.passwall_server.type=script - set firewall.passwall_server.path=/var/etc/passwall_server.include - set firewall.passwall_server.reload=1 - commit firewall - set uhttpd.main.max_requests=50 - commit uhttpd -EOF - -[ ! -s "/etc/config/passwall" ] && cp -f /usr/share/passwall/0_default_config /etc/config/passwall -touch /etc/config/passwall_show >/dev/null 2>&1 -rm -f /tmp/luci-indexcache -rm -rf /tmp/luci-modulecache/ -killall -HUP rpcd 2>/dev/null -exit 0 diff --git a/luci-app-passwall/root/usr/share/passwall/0_default_config b/luci-app-passwall/root/usr/share/passwall/0_default_config deleted file mode 100644 index 96938c11..00000000 --- a/luci-app-passwall/root/usr/share/passwall/0_default_config +++ /dev/null @@ -1,149 +0,0 @@ - -config global - option enabled '0' - option socks_enabled '0' - option tcp_node 'nil' - option udp_node 'nil' - option dns_mode 'pdnsd' - option dns_forward '1.1.1.1' - option filter_proxy_ipv6 '0' - option tcp_proxy_mode 'chnroute' - option udp_proxy_mode 'chnroute' - option localhost_tcp_proxy_mode 'default' - option localhost_udp_proxy_mode 'default' - option close_log_tcp '0' - option close_log_udp '0' - option loglevel 'error' - option trojan_loglevel '4' - -config global_haproxy - option balancing_enable '0' - -config global_delay - option auto_on '0' - option start_daemon '0' - option start_delay '1' - -config global_forwarding - option process '0' - option tcp_no_redir_ports 'disable' - option udp_no_redir_ports '53,80,443' - option tcp_redir_ports '22,25,53,143,465,587,853,993,995,80,443' - option udp_redir_ports '1:65535' - option accept_icmp '0' - option tcp_proxy_way 'redirect' - option ipv6_tproxy '0' - -config global_other - option status 'big_icon show_check_port show_ip111' - option nodes_ping 'auto_ping tcping' - -config global_rules - option auto_update '0' - option chnlist_update '1' - option chnroute_update '1' - option chnroute6_update '1' - option gfwlist_update '1' - option geosite_update '0' - option geoip_update '0' - list gfwlist_url 'https://cdn.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@release/gfwlist.txt' - list chnroute_url 'https://ispip.clang.cn/all_cn.txt' - list chnroute6_url 'https://ispip.clang.cn/all_cn_ipv6.txt' - list chnlist_url 'https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf' - list chnlist_url 'https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf' - list chnlist_url 'https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/google.china.conf' - option v2ray_location_asset '/usr/share/v2ray/' - -config global_app - option v2ray_file '/usr/bin/v2ray' - option xray_file '/usr/bin/xray' - option trojan_go_file '/usr/bin/trojan-go' - option kcptun_client_file '/usr/bin/kcptun-client' - option brook_file '/usr/bin/brook' - option hysteria_file '/usr/bin/hysteria' - -config global_subscribe - option subscribe_proxy '0' - option filter_keyword_mode '1' - list filter_discard_list '过期时间' - list filter_discard_list '剩余流量' - list filter_discard_list 'QQ群' - list filter_discard_list '官网' - -config auto_switch - option enable '0' - option testing_time '1' - option connect_timeout '3' - option retry_num '3' - option shunt_logic '1' - -config nodes '696cd32c1d5149ee95fd1b3accbad6df' - option remarks '分流总节点' - option type 'Xray' - option protocol '_shunt' - option AD 'nil' - option BT '_direct' - option Telegram 'nil' - option YouTube 'nil' - option Netflix 'nil' - option TVB 'nil' - option China 'nil' - option default_node 'nil' - option domainStrategy 'IPIfNonMatch' - -config shunt_rules 'AD' - option remarks 'AD' - option domain_list 'geosite:category-ads' - -config shunt_rules 'BT' - option remarks 'BT' - option protocol 'bittorrent' - -config shunt_rules 'Telegram' - option remarks 'Telegram' - option ip_list '149.154.160.0/20 -91.108.4.0/22 -91.108.56.0/24 -109.239.140.0/24 -67.198.55.0/24' - -config shunt_rules 'YouTube' - option remarks 'YouTube' - option domain_list 'youtube -youtube.com -youtu.be -googlevideo.com -ytimg.com -gvt2.com' - -config shunt_rules 'Netflix' - option remarks 'Netflix' - option domain_list 'fast.com -netflix -netflix.com -netflix.net -nflxso.net -nflxext.com -nflximg.com -nflximg.net -nflxvideo.net -netflixdnstest0.com -netflixdnstest1.com -netflixdnstest2.com -netflixdnstest3.com -netflixdnstest4.com -netflixdnstest5.com -netflixdnstest6.com -netflixdnstest7.com -netflixdnstest8.com -netflixdnstest9.com' - -config shunt_rules 'TVB' - option remarks 'TVB' - option domain_list 'tvb.com -mytvsuper.com' - -config shunt_rules 'China' - option remarks 'China' - option domain_list 'geosite:cn' - option ip_list 'geoip:cn' diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh deleted file mode 100755 index 4a622dd5..00000000 --- a/luci-app-passwall/root/usr/share/passwall/app.sh +++ /dev/null @@ -1,1509 +0,0 @@ -#!/bin/sh -# Copyright (C) 2018-2020 L-WRT Team -# Copyright (C) 2021 xiaorouji - -. $IPKG_INSTROOT/lib/functions.sh -. $IPKG_INSTROOT/lib/functions/service.sh - -CONFIG=passwall -TMP_PATH=/tmp/etc/$CONFIG -TMP_BIN_PATH=$TMP_PATH/bin -TMP_SCRIPT_FUNC_PATH=$TMP_PATH/script_func -TMP_ID_PATH=$TMP_PATH/id -TMP_PORT_PATH=$TMP_PATH/port -TMP_ROUTE_PATH=$TMP_PATH/route -TMP_ACL_PATH=$TMP_PATH/acl -TMP_PATH2=/tmp/etc/${CONFIG}_tmp -DNSMASQ_PATH=/etc/dnsmasq.d -TMP_DNSMASQ_PATH=/tmp/dnsmasq.d/passwall -LOG_FILE=/tmp/log/$CONFIG.log -APP_PATH=/usr/share/$CONFIG -RULES_PATH=/usr/share/${CONFIG}/rules -DNS_N=dnsmasq -DNS_PORT=7913 -TUN_DNS="127.0.0.1#${DNS_PORT}" -LOCAL_DNS=119.29.29.29 -DEFAULT_DNS= -NO_PROXY=0 -PROXY_IPV6=0 -PROXY_IPV6_UDP=0 -resolve_dns=0 -use_tcp_node_resolve_dns=0 -use_udp_node_resolve_dns=0 -LUA_API_PATH=/usr/lib/lua/luci/model/cbi/$CONFIG/api -API_GEN_SS=$LUA_API_PATH/gen_shadowsocks.lua -API_GEN_V2RAY=$LUA_API_PATH/gen_v2ray.lua -API_GEN_V2RAY_PROTO=$LUA_API_PATH/gen_v2ray_proto.lua -API_GEN_TROJAN=$LUA_API_PATH/gen_trojan.lua -API_GEN_NAIVE=$LUA_API_PATH/gen_naiveproxy.lua -API_GEN_HYSTERIA=$LUA_API_PATH/gen_hysteria.lua - -echolog() { - local d="$(date "+%Y-%m-%d %H:%M:%S")" - echo -e "$d: $*" >>$LOG_FILE -} - -config_get_type() { - local ret=$(uci -q get "${CONFIG}.${1}" 2>/dev/null) - echo "${ret:=$2}" -} - -config_n_get() { - local ret=$(uci -q get "${CONFIG}.${1}.${2}" 2>/dev/null) - echo "${ret:=$3}" -} - -config_t_get() { - local index=${4:-0} - local ret=$(uci -q get "${CONFIG}.@${1}[${index}].${2}" 2>/dev/null) - echo "${ret:=${3}}" -} - -get_enabled_anonymous_secs() { - uci -q show "${CONFIG}" | grep "${1}\[.*\.enabled='1'" | cut -d '.' -sf2 -} - -get_host_ip() { - local host=$2 - local count=$3 - [ -z "$count" ] && count=3 - local isip="" - local ip=$host - if [ "$1" == "ipv6" ]; then - isip=$(echo $host | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}") - if [ -n "$isip" ]; then - isip=$(echo $host | cut -d '[' -f2 | cut -d ']' -f1) - else - isip=$(echo $host | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}") - fi - else - isip=$(echo $host | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}") - fi - [ -z "$isip" ] && { - local t=4 - [ "$1" == "ipv6" ] && t=6 - local vpsrip=$(resolveip -$t -t $count $host | awk 'NR==1{print}') - ip=$vpsrip - } - echo $ip -} - -get_node_host_ip() { - local ip - local address=$(config_n_get $1 address) - [ -n "$address" ] && { - local use_ipv6=$(config_n_get $1 use_ipv6) - local network_type="ipv4" - [ "$use_ipv6" == "1" ] && network_type="ipv6" - ip=$(get_host_ip $network_type $address) - } - echo $ip -} - -get_ip_port_from() { - local __host=${1}; shift 1 - local __ipv=${1}; shift 1 - local __portv=${1}; shift 1 - local __ucipriority=${1}; shift 1 - - local val1 val2 - if [ -n "${__ucipriority}" ]; then - val2=$(config_n_get ${__host} port $(echo $__host | sed -n 's/^.*[:#]\([0-9]*\)$/\1/p')) - val1=$(config_n_get ${__host} address "${__host%%${val2:+[:#]${val2}*}}") - else - val2=$(echo $__host | sed -n 's/^.*[:#]\([0-9]*\)$/\1/p') - val1="${__host%%${val2:+[:#]${val2}*}}" - fi - eval "${__ipv}=\"$val1\"; ${__portv}=\"$val2\"" -} - -host_from_url(){ - local f=${1} - - ## Remove protocol part of url ## - f="${f##http://}" - f="${f##https://}" - f="${f##ftp://}" - f="${f##sftp://}" - - ## Remove username and/or username:password part of URL ## - f="${f##*:*@}" - f="${f##*@}" - - ## Remove rest of urls ## - f="${f%%/*}" - echo "${f%%:*}" -} - -hosts_foreach() { - local __hosts - eval "__hosts=\$${1}"; shift 1 - local __func=${1}; shift 1 - local __default_port=${1}; shift 1 - local __ret=1 - - [ -z "${__hosts}" ] && return 0 - local __ip __port - for __host in $(echo $__hosts | sed 's/[ ,]/\n/g'); do - get_ip_port_from "$__host" "__ip" "__port" - eval "$__func \"${__host}\" \"\${__ip}\" \"\${__port:-${__default_port}}\" \"$@\"" - __ret=$? - [ ${__ret} -ge ${ERROR_NO_CATCH:-1} ] && return ${__ret} - done -} - -check_host() { - local f=${1} - a=$(echo $f | grep "\/") - [ -n "$a" ] && return 1 - # 判断是否包含汉字~ - local tmp=$(echo -n $f | awk '{print gensub(/[!-~]/,"","g",$0)}') - [ -n "$tmp" ] && return 1 - return 0 -} - -get_first_dns() { - local __hosts_val=${1}; shift 1 - __first() { - [ -z "${2}" ] && return 0 - echo "${2}#${3}" - return 1 - } - eval "hosts_foreach \"${__hosts_val}\" __first \"$@\"" -} - -get_last_dns() { - local __hosts_val=${1}; shift 1 - local __first __last - __every() { - [ -z "${2}" ] && return 0 - __last="${2}#${3}" - __first=${__first:-${__last}} - } - eval "hosts_foreach \"${__hosts_val}\" __every \"$@\"" - [ "${__first}" == "${__last}" ] || echo "${__last}" -} - -check_port_exists() { - port=$1 - protocol=$2 - [ -n "$protocol" ] || protocol="tcp,udp" - result= - if [ "$protocol" = "tcp" ]; then - result=$(netstat -tln | grep -c ":$port ") - elif [ "$protocol" = "udp" ]; then - result=$(netstat -uln | grep -c ":$port ") - elif [ "$protocol" = "tcp,udp" ]; then - result=$(netstat -tuln | grep -c ":$port ") - fi - echo "${result}" -} - -get_new_port() { - port=$1 - [ "$port" == "auto" ] && port=2082 - protocol=$(echo $2 | tr 'A-Z' 'a-z') - result=$(check_port_exists $port $protocol) - if [ "$result" != 0 ]; then - temp= - if [ "$port" -lt 65535 ]; then - temp=$(expr $port + 1) - elif [ "$port" -gt 1 ]; then - temp=$(expr $port - 1) - fi - get_new_port $temp $protocol - else - echo $port - fi -} - -first_type() { - local path_name=${1} - type -t -p "/bin/${path_name}" -p "${TMP_BIN_PATH}/${path_name}" -p "${path_name}" "$@" | head -n1 -} - -eval_set_val() { - for i in $@; do - for j in $i; do - eval $j - done - done -} - -eval_unset_val() { - for i in $@; do - for j in $i; do - eval unset j - done - done -} - -ln_run() { - local file_func=${1} - local ln_name=${2} - local output=${3} - - shift 3; - if [ "${file_func%%/*}" != "${file_func}" ]; then - [ ! -L "${file_func}" ] && { - ln -s "${file_func}" "${TMP_BIN_PATH}/${ln_name}" >/dev/null 2>&1 - file_func="${TMP_BIN_PATH}/${ln_name}" - } - [ -x "${file_func}" ] || echolog " - $(readlink ${file_func}) 没有执行权限,无法启动:${file_func} $*" - fi - #echo "${file_func} $*" >&2 - [ -n "${file_func}" ] || echolog " - 找不到 ${ln_name},无法启动..." - ${file_func:-echolog " - ${ln_name}"} "$@" >${output} 2>&1 & -} - -lua_api() { - local func=${1} - [ -z "${func}" ] && { - echo "nil" - return - } - echo $(lua -e "local api = require 'luci.model.cbi.passwall.api.api' print(api.${func})") -} - -run_ipt2socks() { - local flag redir_type tcp_tproxy local_port socks_address socks_port socks_username socks_password log_file - local _extra_param="" - eval_set_val $@ - [ -n "$log_file" ] || log_file="/dev/null" - socks_address=$(get_host_ip "ipv4" ${socks_address}) - [ -n "$socks_username" ] && [ -n "$socks_password" ] && _extra_param="${_extra_param} -a $socks_username -k $socks_password" - [ -n "$tcp_tproxy" ] || _extra_param="${_extra_param} -R" - case "$redir_type" in - UDP) - flag="${flag}_UDP" - _extra_param="${_extra_param} -U" - ;; - TCP) - flag="${flag}_TCP" - _extra_param="${_extra_param} -T" - ;; - esac - _extra_param="${_extra_param} -v" - ln_run "$(first_type ipt2socks)" "ipt2socks_${flag}" $log_file -l $local_port -b 0.0.0.0 -s $socks_address -p $socks_port ${_extra_param} -} - -run_v2ray() { - local flag node proxy_way redir_type redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password log_file config_file - local _extra_param="" - local proto="tcp,udp" - eval_set_val $@ - local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z') - if [ "$type" != "v2ray" ] && [ "$type" != "xray" ]; then - return 1 - fi - [ -n "$log_file" ] || log_file="/dev/null" - [ -n "$socks_username" ] && [ -n "$socks_password" ] && _extra_param="${_extra_param} -local_socks_username $socks_username -local_socks_password $socks_password" - [ -n "$http_username" ] && [ -n "$http_password" ] && _extra_param="${_extra_param} -local_http_username $http_username -local_http_password $http_password" - case "$redir_type" in - UDP) - flag="${flag}_UDP" - proto="udp" - proxy_way="tproxy" - ;; - TCP) - flag="${flag}_TCP" - proto="tcp" - proxy_way=$tcp_proxy_way - ;; - esac - lua $API_GEN_V2RAY -node $node -proto $proto -redir_port $redir_port -proxy_way $proxy_way -local_socks_address $socks_address -local_socks_port $socks_port -local_http_address $http_address -local_http_port $http_port ${_extra_param} > $config_file - ln_run "$(first_type $(config_t_get global_app ${type}_file) ${type})" ${type} $log_file -config="$config_file" -} - -run_dns2socks() { - local flag socks socks_address socks_port socks_username socks_password listen_address listen_port dns cache log_file - local _extra_param="" - eval_set_val $@ - [ -n "$flag" ] && flag="_${flag}" - [ -n "$log_file" ] || log_file="/dev/null" - dns=$(get_first_dns dns 53 | sed 's/#/:/g') - [ -n "$socks" ] && { - socks=$(echo $socks | sed "s/#/:/g") - socks_address=$(echo $socks | awk -F ':' '{print $1}') - socks_port=$(echo $socks | awk -F ':' '{print $2}') - } - [ -n "$socks_username" ] && [ -n "$socks_password" ] && _extra_param="${_extra_param} /u $socks_username /p $socks_password" - [ -z "$cache" ] && cache=1 - [ "$cache" = "0" ] && _extra_param="${_extra_param} /d" - ln_run "$(first_type dns2socks)" "dns2socks${flag}" $log_file ${_extra_param} "${socks_address}:${socks_port}" "${dns}" "${listen_address}:${listen_port}" -} - -run_v2ray_dns_socks() { - local flag type socks_address socks_port socks_username socks_password listen_address listen_port dns_proto dns_tcp_server doh dns_client_ip dns_query_strategy log_file config_file - eval_set_val $@ - [ -z "$type" ] && { - local bin=$(first_type $(config_t_get global_app v2ray_file) v2ray) - if [ -n "$bin" ]; then - type="v2ray" - else - bin=$(first_type $(config_t_get global_app xray_file) xray) - [ -n "$bin" ] && type="xray" - fi - } - [ -z "$type" ] && return 1 - [ -n "$log_file" ] || log_file="/dev/null" - local _extra_param="-dns_listen_port ${listen_port} -dns_socks_address ${socks_address} -dns_socks_port ${socks_port}" - [ -n "${dns_query_strategy}" ] && _extra_param="${_extra_param} -dns_query_strategy ${dns_query_strategy}" - [ -n "${dns_client_ip}" ] && _extra_param="${_extra_param} -dns_client_ip ${dns_client_ip}" - if [ "$dns_proto" = "tcp" ]; then - local _dns_forward=$(get_first_dns dns_tcp_server 53 | sed 's/#/:/g') - local _dns_address=$(echo ${_dns_forward} | awk -F ':' '{print $1}') - _extra_param="${_extra_param} -dns_server ${_dns_address} -dns_tcp_server tcp://${_dns_forward}" - elif [ "$dns_proto" = "doh" ]; then - _doh_url=$(echo $doh | awk -F ',' '{print $1}') - _doh_host_port=$(echo $_doh_url | sed "s/https:\/\///g" | awk -F '/' '{print $1}') - _doh_host=$(echo $_doh_host_port | awk -F ':' '{print $1}') - _doh_port=$(echo $_doh_host_port | awk -F ':' '{print $2}') - _doh_bootstrap=$(echo $doh | cut -d ',' -sf 2-) - _extra_param="${_extra_param} -dns_server ${_doh_bootstrap} -doh_url ${_doh_url} -doh_host ${_doh_host}" - fi - lua $API_GEN_V2RAY ${_extra_param} > $config_file - ln_run "$(first_type $(config_t_get global_app ${type}_file) ${type})" ${type} $log_file -config="$config_file" -} - -run_socks() { - local flag node bind socks_port config_file http_port http_config_file relay_port log_file - eval_set_val $@ - [ -n "$http_port" ] || http_port=0 - [ -n "$http_config_file" ] || http_config_file="nil" - [ -n "$log_file" ] || log_file="/dev/null" - local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z') - local remarks=$(config_n_get $node remarks) - local server_host=$(config_n_get $node address) - local port=$(config_n_get $node port) - [ -n "$relay_port" ] && { - server_host="127.0.0.1" - port=$relay_port - } - local error_msg tmp - - if [ -n "$server_host" ] && [ -n "$port" ]; then - check_host $server_host - [ $? != 0 ] && { - echolog " - Socks节点:[$remarks]${server_host} 是非法的服务器地址,无法启动!" - return 1 - } - tmp="${server_host}:${port}" - else - error_msg="某种原因,此 Socks 服务的相关配置已失联,启动中止!" - fi - - if ([ "$type" == "v2ray" ] || [ "$type" == "xray" ]) && ([ -n "$(config_n_get $node balancing_node)" ] || [ "$(config_n_get $node default_node)" != "_direct" -a "$(config_n_get $node default_node)" != "_blackhole" ]); then - unset error_msg - fi - - [ -n "${error_msg}" ] && { - [ "$bind" != "127.0.0.1" ] && echolog " - Socks节点:[$remarks]${tmp},启动中止 ${bind}:${socks_port} ${error_msg}" - return 1 - } - [ "$bind" != "127.0.0.1" ] && echolog " - Socks节点:[$remarks]${tmp},启动 ${bind}:${socks_port}" - - case "$type" in - socks) - local bin=$(first_type $(config_t_get global_app v2ray_file) v2ray) - if [ -n "$bin" ]; then - type="v2ray" - else - bin=$(first_type $(config_t_get global_app xray_file) xray) - [ -n "$bin" ] && type="xray" - fi - [ -z "$type" ] && return 1 - local _socks_address=$(config_n_get $node address) - local _socks_port=$(config_n_get $node port) - local _socks_username=$(config_n_get $node username) - local _socks_password=$(config_n_get $node password) - [ "$http_port" != "0" ] && { - local _extra_param="-local_http_port $http_port" - config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g") - } - lua $API_GEN_V2RAY_PROTO -local_socks_port $socks_port ${_extra_param} -server_proto socks -server_address ${_socks_address} -server_port ${_socks_port} -server_username ${_socks_username} -server_password ${_socks_password} > $config_file - ln_run "$bin" $type $log_file -config="$config_file" - ;; - v2ray|\ - xray) - [ "$http_port" != "0" ] && { - local _extra_param="-local_http_port $http_port" - config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g") - } - lua $API_GEN_V2RAY -node $node -local_socks_port $socks_port ${_extra_param} > $config_file - ln_run "$(first_type $(config_t_get global_app ${type}_file) ${type})" ${type} $log_file -config="$config_file" - ;; - trojan-go) - lua $API_GEN_TROJAN -node $node -run_type client -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $port > $config_file - ln_run "$(first_type $(config_t_get global_app trojan_go_file) trojan-go)" trojan-go $log_file -config "$config_file" - ;; - trojan*) - lua $API_GEN_TROJAN -node $node -run_type client -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $port > $config_file - ln_run "$(first_type ${type})" "${type}" $log_file -c "$config_file" - ;; - naiveproxy) - lua $API_GEN_NAIVE -node $node -run_type socks -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $port > $config_file - ln_run "$(first_type naive)" naive $log_file "$config_file" - ;; - brook) - local protocol=$(config_n_get $node protocol client) - local prefix="" - [ "$protocol" == "wsclient" ] && { - prefix="ws://" - local brook_tls=$(config_n_get $node brook_tls 0) - [ "$brook_tls" == "1" ] && { - prefix="wss://" - protocol="wssclient" - } - local ws_path=$(config_n_get $node ws_path "/ws") - } - server_host=${prefix}${server_host} - ln_run "$(first_type $(config_t_get global_app brook_file) brook)" "brook_SOCKS_${flag}" $log_file "$protocol" --socks5 "$bind:$socks_port" -s "${server_host}:${port}${ws_path}" -p "$(config_n_get $node password)" - ;; - ssr) - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $socks_port -server_host $server_host -server_port $port > $config_file - ln_run "$(first_type ssr-local)" "ssr-local" $log_file -c "$config_file" -v -u - ;; - ss) - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $socks_port -server_host $server_host -server_port $port -mode tcp_and_udp > $config_file - ln_run "$(first_type ss-local)" "ss-local" $log_file -c "$config_file" -v - ;; - ss-rust) - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $socks_port -server_host $server_host -server_port $port -protocol socks -mode tcp_and_udp > $config_file - ln_run "$(first_type sslocal)" "sslocal" $log_file -c "$config_file" -v - ;; - hysteria) - lua $API_GEN_HYSTERIA -node $node -local_socks_port $socks_port > $config_file - ln_run "$(first_type $(config_t_get global_app hysteria_file))" "hysteria" $log_file -c "$config_file" client - ;; - esac - - # http to socks - [ "$type" != "v2ray" ] && [ "$type" != "xray" ] && [ "$type" != "socks" ] && [ "$http_port" != "0" ] && [ "$http_config_file" != "nil" ] && { - local bin=$(first_type $(config_t_get global_app v2ray_file) v2ray) - if [ -n "$bin" ]; then - type="v2ray" - else - bin=$(first_type $(config_t_get global_app xray_file) xray) - [ -n "$bin" ] && type="xray" - fi - [ -z "$type" ] && return 1 - lua $API_GEN_V2RAY_PROTO -local_http_port $http_port -server_proto socks -server_address "127.0.0.1" -server_port $socks_port -server_username $_username -server_password $_password > $http_config_file - ln_run "$bin" ${type} /dev/null -config="$http_config_file" - } -} - -run_redir() { - local node bind local_port config_file REDIR_TYPE log_file - eval_set_val $@ - [ -n "$log_file" ] || log_file="/dev/null" - local redir_type=$(echo $REDIR_TYPE | tr 'A-Z' 'a-z') - local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z') - local close_log=$(config_t_get global close_log_${redir_type} 1) - [ "$close_log" = "1" ] && log_file="/dev/null" - local remarks=$(config_n_get $node remarks) - local server_host=$(config_n_get $node address) - local port=$(config_n_get $node port) - [ -n "$server_host" ] && [ -n "$port" ] && { - check_host $server_host - [ $? != 0 ] && { - echolog "${REDIR_TYPE}节点:[$remarks]${server_host} 是非法的服务器地址,无法启动!" - return 1 - } - [ "$bind" != "127.0.0.1" ] && echolog "${REDIR_TYPE}节点:[$remarks]${server_host}:${port},监听端口:$local_port" - } - eval ${REDIR_TYPE}_NODE_PORT=$port - - case "$REDIR_TYPE" in - UDP) - case "$type" in - socks) - local _socks_address=$(config_n_get $node address) - _socks_address=$(get_host_ip "ipv4" ${_socks_address}) - local _socks_port=$(config_n_get $node port) - local _socks_username=$(config_n_get $node username) - local _socks_password=$(config_n_get $node password) - [ -n "${_socks_username}" ] && [ -n "${_socks_password}" ] && local _extra_param="-a ${_socks_username} -k ${_socks_password}" - ln_run "$(first_type ipt2socks)" "ipt2socks_UDP" $log_file -l $local_port -b 0.0.0.0 -s ${_socks_address} -p ${_socks_port} ${_extra_param} -U -v - ;; - v2ray|\ - xray) - local loglevel=$(config_t_get global loglevel "warning") - lua $API_GEN_V2RAY -node $node -proto udp -redir_port $local_port -proxy_way tproxy -loglevel $loglevel > $config_file - ln_run "$(first_type $(config_t_get global_app ${type}_file) ${type})" ${type} $log_file -config="$config_file" - ;; - trojan-go) - local loglevel=$(config_t_get global trojan_loglevel "2") - lua $API_GEN_TROJAN -node $node -run_type nat -local_addr "0.0.0.0" -local_port $local_port -loglevel $loglevel > $config_file - ln_run "$(first_type $(config_t_get global_app trojan_go_file) trojan-go)" trojan-go $log_file -config "$config_file" - ;; - trojan*) - local loglevel=$(config_t_get global trojan_loglevel "2") - lua $API_GEN_TROJAN -node $node -run_type nat -local_addr "0.0.0.0" -local_port $local_port -loglevel $loglevel > $config_file - ln_run "$(first_type ${type})" "${type}" $log_file -c "$config_file" - ;; - naiveproxy) - echolog "Naiveproxy不支持UDP转发!" - ;; - brook) - local protocol=$(config_n_get $node protocol client) - if [ "$protocol" == "wsclient" ]; then - echolog "Brook的WebSocket不支持UDP转发!" - else - ln_run "$(first_type $(config_t_get global_app brook_file) brook)" "brook_UDP" $log_file tproxy -l ":$local_port" -s "$server_host:$port" -p "$(config_n_get $node password)" --doNotRunScripts - fi - ;; - ssr) - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port > $config_file - ln_run "$(first_type ssr-redir)" "ssr-redir" $log_file -c "$config_file" -v -U - ;; - ss) - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port -mode udp_only > $config_file - ln_run "$(first_type ss-redir)" "ss-redir" $log_file -c "$config_file" -v - ;; - ss-rust) - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port -protocol redir -mode udp_only > $config_file - ln_run "$(first_type sslocal)" "sslocal" $log_file -c "$config_file" -v - ;; - hysteria) - lua $API_GEN_HYSTERIA -node $node -local_udp_redir_port $local_port > $config_file - ln_run "$(first_type $(config_t_get global_app hysteria_file))" "hysteria" $log_file -c "$config_file" client - ;; - esac - ;; - TCP) - if [ $PROXY_IPV6 == "1" ]; then - echolog "开启实验性IPv6透明代理(TProxy),请确认您的节点及类型支持IPv6!" - if [ $type != "v2ray" ]; then - PROXY_IPV6_UDP=1 - else - echolog "节点类型:$type暂未支持IPv6 UDP代理!" - fi - fi - local kcptun_use=$(config_n_get $node use_kcp 0) - if [ "$kcptun_use" == "1" ]; then - local kcptun_server_host=$(config_n_get $node kcp_server) - local network_type="ipv4" - local kcptun_port=$(config_n_get $node kcp_port) - local kcptun_config="$(config_n_get $node kcp_opts)" - if [ -z "$kcptun_port" -o -z "$kcptun_config" ]; then - echolog "Kcptun未配置参数,错误!" - return 1 - fi - if [ -n "$kcptun_port" -a -n "$kcptun_config" ]; then - local run_kcptun_ip=$server_host - [ -n "$kcptun_server_host" ] && run_kcptun_ip=$(get_host_ip $network_type $kcptun_server_host) - KCPTUN_REDIR_PORT=$(get_new_port $KCPTUN_REDIR_PORT tcp) - kcptun_params="-l 0.0.0.0:$KCPTUN_REDIR_PORT -r $run_kcptun_ip:$kcptun_port $kcptun_config" - ln_run "$(first_type $(config_t_get global_app kcptun_client_file) kcptun-client)" "kcptun_TCP" $log_file $kcptun_params - fi - fi - - if [ "$tcp_proxy_way" = "redirect" ]; then - can_ipt=$(echo "$REDIRECT_LIST" | grep "$type") - elif [ "$tcp_proxy_way" = "tproxy" ]; then - can_ipt=$(echo "$TPROXY_LIST" | grep "$type") - fi - [ -z "$can_ipt" ] && type="socks" - - case "$type" in - socks) - _socks_flag=1 - _socks_address=$(config_n_get $node address) - _socks_address=$(get_host_ip "ipv4" ${_socks_address}) - _socks_port=$(config_n_get $node port) - _socks_username=$(config_n_get $node username) - _socks_password=$(config_n_get $node password) - [ -z "$can_ipt" ] && { - local _config_file=$config_file - _config_file=$(echo ${_config_file} | sed "s/TCP/SOCKS_${node}/g") - local _port=$(get_new_port 2080) - run_socks flag="TCP" node=$node bind=127.0.0.1 socks_port=${_port} config_file=${_config_file} - _socks_address=127.0.0.1 - _socks_port=${_port} - unset _socks_username - unset _socks_password - } - ;; - v2ray|\ - xray) - local loglevel=$(config_t_get global loglevel "warning") - local proto="-proto tcp" - local _extra_param="" - [ "$tcp_node_socks" = "1" ] && { - local socks_param="-local_socks_port $tcp_node_socks_port" - _extra_param="${_extra_param} ${socks_param}" - config_file=$(echo $config_file | sed "s/TCP/TCP_SOCKS_$tcp_node_socks_id/g") - } - [ "$tcp_node_http" = "1" ] && { - local http_param="-local_http_port $tcp_node_http_port" - _extra_param="${_extra_param} ${http_param}" - config_file=$(echo $config_file | sed "s/TCP/TCP_HTTP_$tcp_node_http_id/g") - } - [ "$TCP_UDP" = "1" ] && { - config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") - proto="-proto tcp,udp" - UDP_REDIR_PORT=$TCP_REDIR_PORT - UDP_NODE="nil" - } - _extra_param="${_extra_param} ${proto}" - _extra_param="${_extra_param} -route_only 1" - [ "${DNS_MODE}" = "v2ray" -o "${DNS_MODE}" = "xray" ] && { - local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp) - [ "$(config_t_get global dns_by)" = "tcp" -o "${v2ray_dns_mode}" = "fakedns" ] && { - config_file=$(echo $config_file | sed "s/.json/_DNS.json/g") - resolve_dns=1 - local dns_query_strategy=$(config_t_get global dns_query_strategy UseIPv4) - _extra_param="${_extra_param} -dns_query_strategy ${dns_query_strategy}" - local _dns_client_ip=$(config_t_get global dns_client_ip) - [ -n "${_dns_client_ip}" ] && _extra_param="${_extra_param} -dns_client_ip ${_dns_client_ip}" - [ "${DNS_CACHE}" == "0" ] && _extra_param="${_extra_param} -dns_cache 0" - case "$v2ray_dns_mode" in - tcp) - local dns_forward=$(get_first_dns DNS_FORWARD 53 | sed 's/#/:/g') - local dns_address=$(echo $dns_forward | awk -F ':' '{print $1}') - _extra_param="${_extra_param} -dns_listen_port ${dns_listen_port} -dns_server ${dns_address} -dns_tcp_server tcp://${dns_forward}" - echolog " - 域名解析 DNS Over TCP..." - ;; - doh) - up_trust_doh=$(config_t_get global up_trust_doh "https://cloudflare-dns.com/dns-query,1.1.1.1") - _doh_url=$(echo $up_trust_doh | awk -F ',' '{print $1}') - _doh_host_port=$(echo $_doh_url | sed "s/https:\/\///g" | awk -F '/' '{print $1}') - _doh_host=$(echo $_doh_host_port | awk -F ':' '{print $1}') - _doh_port=$(echo $_doh_host_port | awk -F ':' '{print $2}') - _doh_bootstrap=$(echo $up_trust_doh | cut -d ',' -sf 2-) - _extra_param="${_extra_param} -dns_listen_port ${dns_listen_port} -dns_server ${_doh_bootstrap} -doh_url ${_doh_url} -doh_host ${_doh_host}" - unset _doh_url _doh_port _doh_bootstrap - echolog " - 域名解析 DNS Over HTTPS..." - ;; - fakedns) - fakedns=1 - CHINADNS_NG=0 - _extra_param="${_extra_param} -dns_listen_port ${dns_listen_port} -dns_fakedns 1" - echolog " - 域名解析 Fake DNS..." - ;; - esac - } - } - lua $API_GEN_V2RAY -node $node -redir_port $local_port -proxy_way $tcp_proxy_way -loglevel $loglevel ${_extra_param} > $config_file - ln_run "$(first_type $(config_t_get global_app ${type}_file) ${type})" ${type} $log_file -config="$config_file" - ;; - trojan-go) - [ "$TCP_UDP" = "1" ] && { - config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") - UDP_REDIR_PORT=$TCP_REDIR_PORT - UDP_NODE="nil" - } - local loglevel=$(config_t_get global trojan_loglevel "2") - lua $API_GEN_TROJAN -node $node -run_type nat -local_addr "0.0.0.0" -local_port $local_port -loglevel $loglevel > $config_file - ln_run "$(first_type $(config_t_get global_app trojan_go_file) trojan-go)" trojan-go $log_file -config "$config_file" - ;; - trojan*) - [ "$tcp_proxy_way" = "tproxy" ] && lua_tproxy_arg="-use_tproxy true" - [ "$TCP_UDP" = "1" ] && { - config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") - UDP_REDIR_PORT=$TCP_REDIR_PORT - UDP_NODE="nil" - } - local loglevel=$(config_t_get global trojan_loglevel "2") - lua $API_GEN_TROJAN -node $node -run_type nat -local_addr "0.0.0.0" -local_port $local_port -loglevel $loglevel $lua_tproxy_arg > $config_file - ln_run "$(first_type ${type})" "${type}" $log_file -c "$config_file" - ;; - naiveproxy) - lua $API_GEN_NAIVE -node $node -run_type redir -local_addr "0.0.0.0" -local_port $local_port > $config_file - ln_run "$(first_type naive)" naive $log_file "$config_file" - ;; - brook) - local server_ip=$server_host - local protocol=$(config_n_get $node protocol client) - local prefix="" - [ "$protocol" == "wsclient" ] && { - prefix="ws://" - local brook_tls=$(config_n_get $node brook_tls 0) - [ "$brook_tls" == "1" ] && prefix="wss://" - local ws_path=$(config_n_get $node ws_path "/ws") - } - [ "$kcptun_use" == "1" ] && { - server_ip=127.0.0.1 - port=$KCPTUN_REDIR_PORT - } - server_ip=${prefix}${server_ip} - ln_run "$(first_type $(config_t_get global_app brook_file) brook)" "brook_TCP" $log_file tproxy -l ":$local_port" -s "${server_ip}:${port}${ws_path}" -p "$(config_n_get $node password)" --doNotRunScripts - ;; - ssr) - [ "$tcp_proxy_way" = "tproxy" ] && lua_tproxy_arg="-tcp_tproxy true" - if [ "$kcptun_use" == "1" ]; then - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port -server_host "127.0.0.1" -server_port $KCPTUN_REDIR_PORT $lua_tproxy_arg > $config_file - else - [ "$TCP_UDP" = "1" ] && { - config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") - UDP_REDIR_PORT=$TCP_REDIR_PORT - UDP_NODE="nil" - _extra_param="-u" - } - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port $lua_tproxy_arg > $config_file - fi - ln_run "$(first_type ssr-redir)" "ssr-redir" $log_file -c "$config_file" -v ${_extra_param} - ;; - ss) - [ "$tcp_proxy_way" = "tproxy" ] && lua_tproxy_arg="-tcp_tproxy true" - lua_mode_arg="-mode tcp_only" - if [ "$kcptun_use" == "1" ]; then - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port -server_host "127.0.0.1" -server_port $KCPTUN_REDIR_PORT $lua_mode_arg $lua_tproxy_arg > $config_file - else - [ "$TCP_UDP" = "1" ] && { - config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") - UDP_REDIR_PORT=$TCP_REDIR_PORT - UDP_NODE="nil" - lua_mode_arg="-mode tcp_and_udp" - } - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port $lua_mode_arg $lua_tproxy_arg > $config_file - fi - ln_run "$(first_type ss-redir)" "ss-redir" $log_file -c "$config_file" -v - ;; - ss-rust) - [ "$tcp_proxy_way" = "tproxy" ] && lua_tproxy_arg="-tcp_tproxy true" - lua_mode_arg="-mode tcp_only" - if [ "$kcptun_use" == "1" ]; then - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port -server_host "127.0.0.1" -server_port $KCPTUN_REDIR_PORT -protocol redir $lua_mode_arg $lua_tproxy_arg > $config_file - else - [ "$TCP_UDP" = "1" ] && { - config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") - UDP_REDIR_PORT=$TCP_REDIR_PORT - UDP_NODE="nil" - lua_mode_arg="-mode tcp_and_udp" - } - lua $API_GEN_SS -node $node -local_addr "0.0.0.0" -local_port $local_port -protocol redir $lua_mode_arg $lua_tproxy_arg > $config_file - fi - ln_run "$(first_type sslocal)" "sslocal" $log_file -c "$config_file" -v - ;; - hysteria) - [ "$TCP_UDP" = "1" ] && { - config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") - UDP_REDIR_PORT=$TCP_REDIR_PORT - UDP_NODE="nil" - _extra_param="-local_udp_redir_port $local_port" - } - lua $API_GEN_HYSTERIA -node $node -local_tcp_redir_port $local_port ${_extra_param} > $config_file - ln_run "$(first_type $(config_t_get global_app hysteria_file))" "hysteria" $log_file -c "$config_file" client - ;; - esac - if [ -n "${_socks_flag}" ]; then - local _flag="TCP" - local _extra_param="-T" - [ "$TCP_UDP" = "1" ] && { - _flag="TCP_UDP" - _extra_param="" - UDP_REDIR_PORT=$TCP_REDIR_PORT - UDP_NODE="nil" - } - local _socks_tproxy="-R" - [ "$tcp_proxy_way" = "tproxy" ] && _socks_tproxy="" - _extra_param="${_extra_param} ${_socks_tproxy}" - [ -n "${_socks_username}" ] && [ -n "${_socks_password}" ] && _extra_param="-a ${_socks_username} -k ${_socks_password} ${_extra_param}" - ln_run "$(first_type ipt2socks)" "ipt2socks_${_flag}" $log_file -l $local_port -b 0.0.0.0 -s ${_socks_address} -p ${_socks_port} ${_extra_param} -v - fi - - ([ "$type" != "v2ray" ] && [ "$type" != "xray" ]) && { - [ "$tcp_node_socks" = "1" ] && { - local port=$tcp_node_socks_port - local config_file=$TMP_PATH/SOCKS_$tcp_node_socks_id.json - local log_file=$TMP_PATH/SOCKS_$tcp_node_socks_id.log - local http_port=0 - local http_config_file=$TMP_PATH/HTTP2SOCKS_$tcp_node_http_id.json - [ "$tcp_node_http" = "1" ] && { - http_port=$tcp_node_http_port - } - run_socks flag=$tcp_node_socks_id node=$node bind=0.0.0.0 socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file - } - } - ;; - esac - return 0 -} - -node_switch() { - [ -n "$1" -a -n "$2" ] && { - [ -n "$4" ] && LOG_FILE="/dev/null" - local node=$2 - pgrep -af "$TMP_PATH" | awk -v P1="$1" 'BEGIN{IGNORECASE=1}$0~P1 && !/acl\/|acl_/{print $1}' | xargs kill -9 >/dev/null 2>&1 - rm -rf $TMP_PATH/${1}* - local config_file=$TMP_PATH/${1}.json - local log_file=$TMP_PATH/${1}.log - local port=$(cat $TMP_PORT_PATH/${1}) - - [ "$SOCKS_ENABLED" = "1" ] && { - local ids=$(uci show $CONFIG | grep "=socks" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}') - for id in $ids; do - [ "$(config_n_get $id enabled 0)" == "0" ] && continue - [ "$(config_n_get $id node nil)" != "tcp" ] && continue - local socks_port=$(config_n_get $id port) - local http_port=$(config_n_get $id http_port 0) - pgrep -af "${TMP_PATH}.*${id}" | awk 'BEGIN{IGNORECASE=1}/SOCKS/{print $1}' | xargs kill -9 >/dev/null 2>&1 - tcp_node_socks=1 - tcp_node_socks_port=$socks_port - tcp_node_socks_id=$id - [ "$http_port" != "0" ] && { - tcp_node_http=1 - tcp_node_http_port=$http_port - tcp_node_http_id=$id - } - break - done - } - - [ "$3" != "0" ] && { - local tcp_node=$(config_t_get global tcp_node nil) - [ "$(config_n_get $tcp_node protocol nil)" = "_shunt" ] && { - if [ "$3" == "1" ]; then - uci set $CONFIG.$tcp_node.default_node="$node" - elif [ "$3" == "2" ]; then - uci set $CONFIG.$tcp_node.main_node="$node" - fi - uci commit $CONFIG - } - node=$tcp_node - } - - run_redir node=$node bind=0.0.0.0 local_port=$port config_file=$config_file REDIR_TYPE=$1 log_file=$log_file - echo $node > $TMP_ID_PATH/${1} - - [ "$3" != "0" ] && [ "$(config_n_get $node protocol nil)" = "_shunt" ] && { - echo $(config_n_get $node default_node nil) > $TMP_ID_PATH/${1}_default - echo $(config_n_get $node main_node nil) > $TMP_ID_PATH/${1}_main - uci commit $CONFIG - } - - [ "$1" = "TCP" ] && { - [ "$(config_t_get global udp_node nil)" = "tcp" ] && [ "$UDP_REDIR_PORT" != "$TCP_REDIR_PORT" ] && { - pgrep -af "$TMP_PATH" | awk 'BEGIN{IGNORECASE=1}/UDP/ && !/acl\/|acl_/{print $1}' | xargs kill -9 >/dev/null 2>&1 - UDP_NODE=$node - start_redir UDP - } - } - - #local node_net=$(echo $1 | tr 'A-Z' 'a-z') - #uci set $CONFIG.@global[0].${node_net}_node=$node - #uci commit $CONFIG - source $APP_PATH/helper_${DNS_N}.sh logic_restart no_log=1 - } -} - -start_redir() { - eval node=\$${1}_NODE - if [ "$node" != "nil" ]; then - TYPE=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z') - local config_file=$TMP_PATH/${1}.json - local log_file=$TMP_PATH/${1}.log - eval current_port=\$${1}_REDIR_PORT - local port=$(echo $(get_new_port $current_port $1)) - eval ${1}_REDIR=$port - run_redir node=$node bind=0.0.0.0 local_port=$port config_file=$config_file REDIR_TYPE=$1 log_file=$log_file - #eval ip=\$${1}_NODE_IP - echo $port > $TMP_PORT_PATH/${1} - echo $node > $TMP_ID_PATH/${1} - [ "$(config_n_get $node protocol nil)" = "_shunt" ] && { - local default_node=$(config_n_get $node default_node nil) - local main_node=$(config_n_get $node main_node nil) - echo $default_node > $TMP_ID_PATH/${1}_default - echo $main_node > $TMP_ID_PATH/${1}_main - } - else - [ "$1" = "UDP" ] && [ "$TCP_UDP" = "1" ] && return - echolog "${1}节点没有选择或为空,不代理${1}。" - fi -} - -start_socks() { - [ "$SOCKS_ENABLED" = "1" ] && { - local ids=$(uci show $CONFIG | grep "=socks" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}') - [ -n "$ids" ] && { - echolog "分析 Socks 服务的节点配置..." - for id in $ids; do - local enabled=$(config_n_get $id enabled 0) - [ "$enabled" == "0" ] && continue - local node=$(config_n_get $id node nil) - [ "$node" == "nil" ] && continue - local port=$(config_n_get $id port) - local config_file=$TMP_PATH/SOCKS_${id}.json - local log_file=$TMP_PATH/SOCKS_${id}.log - local http_port=$(config_n_get $id http_port 0) - local http_config_file=$TMP_PATH/HTTP2SOCKS_${id}.json - [ "$node" == "tcp" ] && { - tcp_node_socks=1 - tcp_node_socks_port=$port - tcp_node_socks_id=$id - [ "$http_port" != "0" ] && { - tcp_node_http=1 - tcp_node_http_port=$http_port - tcp_node_http_id=$id - } - continue - } - run_socks flag=$id node=$node bind=0.0.0.0 socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file - echo "run_socks flag=$id node=$node bind=0.0.0.0 socks_port=$port config_file=$config_file http_port=$http_port http_config_file=$http_config_file" > $TMP_SCRIPT_FUNC_PATH/SOCKS_${id} - echo $node > $TMP_ID_PATH/SOCKS_${id} - done - } - } -} - -clean_log() { - logsnum=$(cat $LOG_FILE 2>/dev/null | wc -l) - [ "$logsnum" -gt 1000 ] && { - echo "" > $LOG_FILE - echolog "日志文件过长,清空处理!" - } -} - -clean_crontab() { - touch /etc/crontabs/root - #sed -i "/${CONFIG}/d" /etc/crontabs/root >/dev/null 2>&1 - sed -i "/$(echo "/etc/init.d/${CONFIG}" | sed 's#\/#\\\/#g')/d" /etc/crontabs/root >/dev/null 2>&1 - sed -i "/$(echo "lua ${APP_PATH}/rule_update.lua log" | sed 's#\/#\\\/#g')/d" /etc/crontabs/root >/dev/null 2>&1 - sed -i "/$(echo "lua ${APP_PATH}/subscribe.lua start" | sed 's#\/#\\\/#g')/d" /etc/crontabs/root >/dev/null 2>&1 -} - -start_crontab() { - clean_crontab - [ "$ENABLED" != 1 ] && { - /etc/init.d/cron restart - return - } - auto_on=$(config_t_get global_delay auto_on 0) - if [ "$auto_on" = "1" ]; then - time_off=$(config_t_get global_delay time_off) - time_on=$(config_t_get global_delay time_on) - time_restart=$(config_t_get global_delay time_restart) - [ -z "$time_off" -o "$time_off" != "nil" ] && { - echo "0 $time_off * * * /etc/init.d/$CONFIG stop" >>/etc/crontabs/root - echolog "配置定时任务:每天 $time_off 点关闭服务。" - } - [ -z "$time_on" -o "$time_on" != "nil" ] && { - echo "0 $time_on * * * /etc/init.d/$CONFIG start" >>/etc/crontabs/root - echolog "配置定时任务:每天 $time_on 点开启服务。" - } - [ -z "$time_restart" -o "$time_restart" != "nil" ] && { - echo "0 $time_restart * * * /etc/init.d/$CONFIG restart" >>/etc/crontabs/root - echolog "配置定时任务:每天 $time_restart 点重启服务。" - } - fi - - autoupdate=$(config_t_get global_rules auto_update) - weekupdate=$(config_t_get global_rules week_update) - dayupdate=$(config_t_get global_rules time_update) - if [ "$autoupdate" = "1" ]; then - local t="0 $dayupdate * * $weekupdate" - [ "$weekupdate" = "7" ] && t="0 $dayupdate * * *" - echo "$t lua $APP_PATH/rule_update.lua log > /dev/null 2>&1 &" >>/etc/crontabs/root - echolog "配置定时任务:自动更新规则。" - fi - - TMP_SUB_PATH=$TMP_PATH/sub_crontabs - mkdir -p $TMP_SUB_PATH - for item in $(uci show ${CONFIG} | grep "=subscribe_list" | cut -d '.' -sf 2 | cut -d '=' -sf 1); do - if [ "$(config_n_get $item auto_update 0)" = "1" ]; then - cfgid=$(uci show ${CONFIG}.$item | head -n 1 | cut -d '.' -sf 2 | cut -d '=' -sf 1) - remark=$(config_n_get $item remark) - week_update=$(config_n_get $item week_update) - time_update=$(config_n_get $item time_update) - echo "$cfgid" >> $TMP_SUB_PATH/${week_update}_${time_update} - echolog "配置定时任务:自动更新【$remark】订阅。" - fi - done - - [ -d "${TMP_SUB_PATH}" ] && { - for name in $(ls ${TMP_SUB_PATH}); do - week_update=$(echo $name | awk -F '_' '{print $1}') - time_update=$(echo $name | awk -F '_' '{print $2}') - local t="0 $time_update * * $week_update" - [ "$week_update" = "7" ] && t="0 $time_update * * *" - cfgids=$(echo -n $(cat ${TMP_SUB_PATH}/${name}) | sed 's# #,#g') - echo "$t lua $APP_PATH/subscribe.lua start $cfgids > /dev/null 2>&1 &" >>/etc/crontabs/root - done - rm -rf $TMP_SUB_PATH - } - - if [ "$NO_PROXY" == 0 ]; then - start_daemon=$(config_t_get global_delay start_daemon 0) - [ "$start_daemon" = "1" ] && $APP_PATH/monitor.sh > /dev/null 2>&1 & - - AUTO_SWITCH_ENABLE=$(config_t_get auto_switch enable 0) - [ "$AUTO_SWITCH_ENABLE" = "1" ] && $APP_PATH/test.sh > /dev/null 2>&1 & - else - echolog "运行于非代理模式,仅允许服务启停的定时任务。" - fi - - /etc/init.d/cron restart -} - -stop_crontab() { - clean_crontab - /etc/init.d/cron restart - #echolog "清除定时执行命令。" -} - -start_dns() { - TUN_DNS="127.0.0.1#${dns_listen_port}" - - echolog "过滤服务配置:准备接管域名解析..." - - case "$DNS_MODE" in - dns2socks) - local dns2socks_socks_server=$(echo $(config_t_get global socks_server 127.0.0.1:1080) | sed "s/#/:/g") - local dns2socks_forward=$(get_first_dns DNS_FORWARD 53 | sed 's/#/:/g') - run_dns2socks socks=$dns2socks_socks_server listen_address=127.0.0.1 listen_port=${dns_listen_port} dns=$dns2socks_forward cache=$DNS_CACHE - echolog " - 域名解析:dns2socks(127.0.0.1:${dns_listen_port}),${dns2socks_socks_server} -> ${dns2socks_forward}" - ;; - v2ray|\ - xray) - [ "${resolve_dns}" == "0" ] && { - [ "${DNS_CACHE}" == "0" ] && local _extra_param="-dns_cache 0" - local dns_query_strategy=$(config_t_get global dns_query_strategy UseIPv4) - _extra_param="${_extra_param} -dns_query_strategy ${dns_query_strategy}" - local _dns_client_ip=$(config_t_get global dns_client_ip) - [ -n "${_dns_client_ip}" ] && _extra_param="${_extra_param} -dns_client_ip ${_dns_client_ip}" - local dns_by=$(config_t_get global dns_by "tcp") - if [ "${dns_by}" = "tcp" ]; then - use_tcp_node_resolve_dns=1 - elif [ "${dns_by}" = "socks" ]; then - use_tcp_node_resolve_dns=0 - local socks_server=$(echo $(config_t_get global socks_server 127.0.0.1:1080) | sed "s/#/:/g") - local socks_address=$(echo $socks_server | awk -F ':' '{print $1}') - local socks_port=$(echo $socks_server | awk -F ':' '{print $2}') - _extra_param="${_extra_param} -dns_socks_address ${socks_address} -dns_socks_port ${socks_port}" - fi - local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp) - case "$v2ray_dns_mode" in - tcp) - local dns_forward=$(get_first_dns DNS_FORWARD 53 | sed 's/#/:/g') - local dns_address=$(echo $dns_forward | awk -F ':' '{print $1}') - lua $API_GEN_V2RAY -dns_listen_port "${dns_listen_port}" -dns_server "${dns_address}" -dns_tcp_server "tcp://${dns_forward}" ${_extra_param} > $TMP_PATH/DNS.json - echolog " - 域名解析 DNS Over TCP..." - ;; - doh) - up_trust_doh=$(config_t_get global up_trust_doh "https://cloudflare-dns.com/dns-query,1.1.1.1") - _doh_url=$(echo $up_trust_doh | awk -F ',' '{print $1}') - _doh_host_port=$(echo $_doh_url | sed "s/https:\/\///g" | awk -F '/' '{print $1}') - _doh_host=$(echo $_doh_host_port | awk -F ':' '{print $1}') - _doh_port=$(echo $_doh_host_port | awk -F ':' '{print $2}') - _doh_bootstrap=$(echo $up_trust_doh | cut -d ',' -sf 2-) - - if [ "${dns_by}" = "tcp" ]; then - DNS_FORWARD="" - _doh_bootstrap_dns=$(echo $_doh_bootstrap | sed "s/,/ /g") - for _dns in $_doh_bootstrap_dns; do - _dns=$(echo $_dns | awk -F ':' '{print $1}'):${_doh_port:-443} - [ -n "$DNS_FORWARD" ] && DNS_FORWARD=${DNS_FORWARD},${_dns} || DNS_FORWARD=${_dns} - done - unset _dns _doh_bootstrap_dns - fi - lua $API_GEN_V2RAY -dns_listen_port "${dns_listen_port}" -dns_server "${_doh_bootstrap}" -doh_url "${_doh_url}" -doh_host "${_doh_host}" ${_extra_param} > $TMP_PATH/DNS.json - unset _doh_url _doh_port _doh_bootstrap - echolog " - 域名解析 DNS Over HTTPS..." - ;; - esac - ln_run "$(first_type $(config_t_get global_app ${DNS_MODE}_file) ${DNS_MODE})" ${DNS_MODE} $TMP_PATH/DNS.log -config="$TMP_PATH/DNS.json" - } - ;; - pdnsd) - use_tcp_node_resolve_dns=1 - gen_pdnsd_config "${dns_listen_port}" "${DNS_FORWARD}" "${DNS_CACHE}" - ln_run "$(first_type pdnsd)" pdnsd "/dev/null" --daemon -c "${TMP_PATH}/pdnsd/pdnsd.conf" -d - echolog " - 域名解析:pdnsd + 使用(TCP节点)解析域名..." - ;; - udp) - use_udp_node_resolve_dns=1 - TUN_DNS="$(echo ${DNS_FORWARD} | sed 's/#/:/g' | sed -E 's/\:([^:]+)$/#\1/g')" - echolog " - 域名解析:使用UDP协议请求DNS($TUN_DNS)..." - ;; - esac - - [ "${use_tcp_node_resolve_dns}" = "1" ] && echolog " * 请确认上游 DNS 支持 TCP 查询,如非直连地址,确保 TCP 代理打开,并且已经正确转发!" - [ "${use_udp_node_resolve_dns}" = "1" ] && echolog " * 要求代理 DNS 请求,如上游 DNS 非直连地址,确保 UDP 代理打开,并且已经正确转发!" - - case "$DNS_SHUNT" in - smartdns) - local group_domestic=$(config_t_get global group_domestic) - CHINADNS_NG=0 - source $APP_PATH/helper_smartdns.sh add DNS_MODE=$DNS_MODE SMARTDNS_CONF=/tmp/etc/smartdns/$CONFIG.conf REMOTE_FAKEDNS=$fakedns DEFAULT_DNS=$DEFAULT_DNS LOCAL_GROUP=$group_domestic TUN_DNS=$TUN_DNS TCP_NODE=$TCP_NODE PROXY_MODE=${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE} NO_PROXY_IPV6=${filter_proxy_ipv6} - source $APP_PATH/helper_smartdns.sh restart - echolog " - 域名解析:使用SmartDNS,请确保配置正常。" - ;; - esac - - [ -n "$chnlist" ] && [ "$CHINADNS_NG" = "1" ] && [ -n "$(first_type chinadns-ng)" ] && [ -s "${RULES_PATH}/chnlist" ] && { - china_ng_listen_port=$(expr $dns_listen_port + 1) - china_ng_listen="127.0.0.1#${china_ng_listen_port}" - china_ng_chn=$(echo -n $(echo "${LOCAL_DNS}" | sed "s/,/\n/g" | head -n2) | tr " " ",") - china_ng_gfw="${TUN_DNS}" - echolog " | - (chinadns-ng) 最高支持4级域名过滤..." - - local gfwlist_param="${TMP_PATH}/chinadns_gfwlist" - [ -s "${RULES_PATH}/gfwlist" ] && cp -a "${RULES_PATH}/gfwlist" "${gfwlist_param}" - local chnlist_param="${TMP_PATH}/chinadns_chnlist" - [ -s "${RULES_PATH}/chnlist" ] && cp -a "${RULES_PATH}/chnlist" "${chnlist_param}" - - [ -s "${RULES_PATH}/proxy_host" ] && { - cat "${RULES_PATH}/proxy_host" | tr -s '\n' | grep -v "^#" | sort -u >> "${gfwlist_param}" - echolog " | - [$?](chinadns-ng) 代理域名表合并到防火墙域名表" - } - [ -s "${RULES_PATH}/direct_host" ] && { - cat "${RULES_PATH}/direct_host" | tr -s '\n' | grep -v "^#" | sort -u >> "${chnlist_param}" - echolog " | - [$?](chinadns-ng) 域名白名单合并到中国域名表" - } - chnlist_param=${chnlist_param:+-m "${chnlist_param}" -M} - local log_path="${TMP_PATH}/chinadns-ng.log" - log_path="/dev/null" - ln_run "$(first_type chinadns-ng)" chinadns-ng "$log_path" -v -b 0.0.0.0 -l "${china_ng_listen_port}" ${china_ng_chn:+-c "${china_ng_chn}"} ${chnlist_param} ${china_ng_gfw:+-t "${china_ng_gfw}"} ${gfwlist_param:+-g "${gfwlist_param}"} -f - echolog " + 过滤服务:ChinaDNS-NG(:${china_ng_listen_port}):国内DNS:${china_ng_chn},可信DNS:${china_ng_gfw}" - } - - [ "$DNS_SHUNT" = "dnsmasq" ] && { - source $APP_PATH/helper_dnsmasq.sh stretch - source $APP_PATH/helper_dnsmasq.sh add DNS_MODE=$DNS_MODE TMP_DNSMASQ_PATH=$TMP_DNSMASQ_PATH DNSMASQ_CONF_FILE=/tmp/dnsmasq.d/dnsmasq-passwall.conf REMOTE_FAKEDNS=$fakedns DEFAULT_DNS=$DEFAULT_DNS LOCAL_DNS=$LOCAL_DNS TUN_DNS=$TUN_DNS CHINADNS_DNS=$china_ng_listen TCP_NODE=$TCP_NODE PROXY_MODE=${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE} NO_PROXY_IPV6=${filter_proxy_ipv6} - } -} - -gen_pdnsd_config() { - local listen_port=${1} - local up_dns=${2} - local cache=${3} - local pdnsd_dir=${TMP_PATH}/pdnsd - local perm_cache=2048 - local _cache="on" - local query_method="tcp_only" - local reject_ipv6_dns= - [ "${cache}" = "0" ] && _cache="off" && perm_cache=0 - - mkdir -p "${pdnsd_dir}" - touch "${pdnsd_dir}/pdnsd.cache" - chown -R root.nogroup "${pdnsd_dir}" - if [ $PROXY_IPV6 == "0" ]; then - reject_ipv6_dns=$(cat <<- 'EOF' - - reject = ::/0; - reject_policy = negate; - EOF - ) - fi - cat > "${pdnsd_dir}/pdnsd.conf" <<-EOF - global { - perm_cache = $perm_cache; - cache_dir = "$pdnsd_dir"; - run_as = "root"; - server_ip = 127.0.0.1; - server_port = ${listen_port}; - status_ctl = on; - query_method = ${query_method}; - min_ttl = 1h; - max_ttl = 1w; - timeout = 10; - par_queries = 2; - neg_domain_pol = off; - udpbufsize = 1024; - proc_limit = 2; - procq_limit = 8; - } - - EOF - echolog " + [$?]Pdnsd (127.0.0.1:${listen_port})..." - - append_pdnsd_updns() { - [ -z "${2}" ] && echolog " | - 略过错误 : ${1}" && return 0 - cat >> $pdnsd_dir/pdnsd.conf <<-EOF - server { - label = "node-${2}_${3}"; - ip = ${2}; - edns_query = on; - port = ${3}; - timeout = 4; - interval = 10m; - uptest = none; - purge_cache = off; - proxy_only = on; - caching = $_cache;${reject_ipv6_dns} - } - EOF - echolog " | - [$?]上游DNS:${2}:${3}" - } - hosts_foreach up_dns append_pdnsd_updns 53 -} - -add_ip2route() { - local ip=$(get_host_ip "ipv4" $1) - [ -z "$ip" ] && { - echolog " - 无法解析[${1}],路由表添加失败!" - return 1 - } - local remarks="${1}" - [ "$remarks" != "$ip" ] && remarks="${1}(${ip})" - - . /lib/functions/network.sh - local gateway device - network_get_gateway gateway "$2" - network_get_device device "$2" - [ -z "${device}" ] && device="$2" - - if [ -n "${gateway}" ]; then - route add -host ${ip} gw ${gateway} dev ${device} >/dev/null 2>&1 - echo "$ip" >> $TMP_ROUTE_PATH/${device} - echolog " - [${remarks}]添加到接口[${device}]路由表成功!" - else - echolog " - [${remarks}]添加到接口[${device}]路由表失功!原因是找不到[${device}]网关。" - fi -} - -delete_ip2route() { - [ -d "${TMP_ROUTE_PATH}" ] && { - for interface in $(ls ${TMP_ROUTE_PATH}); do - for ip in $(cat ${TMP_ROUTE_PATH}/${interface}); do - route del -host ${ip} dev ${interface} >/dev/null 2>&1 - done - done - } -} - -start_haproxy() { - local haproxy_path haproxy_file item items lport sort_items - - [ "$(config_t_get global_haproxy balancing_enable 0)" != "1" ] && return - echolog "HAPROXY 负载均衡..." - - haproxy_path=${TMP_PATH}/haproxy - mkdir -p "${haproxy_path}" - haproxy_file=${haproxy_path}/config.cfg - cat <<-EOF > "${haproxy_file}" - global - log 127.0.0.1 local2 - chroot ${haproxy_path} - maxconn 60000 - stats socket ${haproxy_path}/haproxy.sock - daemon - - defaults - mode tcp - log global - option tcplog - option dontlognull - option http-server-close - #option forwardfor except 127.0.0.0/8 - option redispatch - retries 2 - timeout http-request 10s - timeout queue 1m - timeout connect 10s - timeout client 1m - timeout server 1m - timeout http-keep-alive 10s - timeout check 10s - maxconn 3000 - - EOF - - items=$(uci show ${CONFIG} | grep "=haproxy_config" | cut -d '.' -sf 2 | cut -d '=' -sf 1) - for item in $items; do - lport=$(config_n_get ${item} haproxy_port 0) - [ "${lport}" = "0" ] && echolog " - 丢弃1个明显无效的节点" && continue - sort_items="${sort_items}${IFS}${lport} ${item}" - done - - items=$(echo "${sort_items}" | sort -n | cut -d ' ' -sf 2) - - unset lport - local haproxy_port lbss lbweight export backup remark - local msg bip bport hasvalid bbackup failcount interface - for item in ${items}; do - unset haproxy_port bbackup - - eval $(uci -q show "${CONFIG}.${item}" | cut -d '.' -sf 3-) - [ "$enabled" = "1" ] || continue - get_ip_port_from "$lbss" bip bport 1 - - [ -z "$haproxy_port" ] || [ -z "$bip" ] && echolog " - 丢弃1个明显无效的节点" && continue - [ "$backup" = "1" ] && bbackup="backup" - remark=$(echo $bip | sed "s/\[//g" | sed "s/\]//g") - - [ "$lport" = "${haproxy_port}" ] || { - hasvalid="1" - lport=${haproxy_port} - echolog " + 入口 0.0.0.0:${lport}..." - cat <<-EOF >> "${haproxy_file}" - listen $lport - mode tcp - bind 0.0.0.0:$lport - EOF - } - - cat <<-EOF >> "${haproxy_file}" - server $remark:$bport $bip:$bport weight $lbweight check inter 1500 rise 1 fall 3 $bbackup - EOF - - if [ "$export" != "0" ]; then - add_ip2route ${bip} ${export} > /dev/null 2>&1 & - fi - - haproxy_items="${haproxy_items}${IFS}${bip}:${bport}" - echolog " | - 出口节点:${bip}:${bport},权重:${lbweight}" - done - - # 控制台配置 - local console_port=$(config_t_get global_haproxy console_port) - local console_user=$(config_t_get global_haproxy console_user) - local console_password=$(config_t_get global_haproxy console_password) - local auth="" - [ -n "$console_user" ] && [ -n "$console_password" ] && auth="stats auth $console_user:$console_password" - cat <<-EOF >> "${haproxy_file}" - - listen console - bind 0.0.0.0:$console_port - mode http - stats refresh 30s - stats uri / - stats admin if TRUE - $auth - EOF - - [ "${hasvalid}" != "1" ] && echolog " - 没有发现任何有效节点信息,不启动。" && return 0 - ln_run "$(first_type haproxy)" haproxy "/dev/null" -f "${haproxy_file}" - echolog " * 控制台端口:${console_port}/,${auth:-公开}" -} - -kill_all() { - kill -9 $(pidof "$@") >/dev/null 2>&1 -} - -boot() { - [ "$ENABLED" == 1 ] && { - local delay=$(config_t_get global_delay start_delay 1) - if [ "$delay" -gt 0 ]; then - echolog "执行启动延时 $delay 秒后再启动!" - sleep $delay && start >/dev/null 2>&1 & - else - start - fi - } - return 0 -} - -start() { - ulimit -n 65535 - start_haproxy - start_socks - - [ "$NO_PROXY" == 1 ] || { - if [ -z "$(command -v iptables)" ] && [ -z "$(command -v ipset)" ]; then - echolog "系统未安装iptables或ipset,无法透明代理!" - else - start_redir TCP - start_redir UDP - start_dns - source $APP_PATH/iptables.sh start - source $APP_PATH/helper_${DNS_N}.sh logic_restart - fi - } - start_crontab - echolog "运行完成!\n" -} - -stop() { - clean_log - source $APP_PATH/iptables.sh stop - delete_ip2route - kill_all v2ray-plugin obfs-local - pgrep -f "sleep.*(6s|9s|58s)" | xargs kill -9 >/dev/null 2>&1 - pgrep -af "${CONFIG}/" | awk '! /app\.sh|subscribe\.lua|rule_update\.lua/{print $1}' | xargs kill -9 >/dev/null 2>&1 - unset V2RAY_LOCATION_ASSET - unset XRAY_LOCATION_ASSET - stop_crontab - source $APP_PATH/helper_smartdns.sh del - source $APP_PATH/helper_smartdns.sh restart no_log=1 - source $APP_PATH/helper_dnsmasq.sh del - source $APP_PATH/helper_dnsmasq.sh restart no_log=1 - rm -rf ${TMP_PATH} - rm -rf /tmp/lock/${CONFIG}_script.lock - echolog "清空并关闭相关程序和缓存完成。" - exit 0 -} - -ENABLED=$(config_t_get global enabled 0) -SOCKS_ENABLED=$(config_t_get global socks_enabled 0) -TCP_REDIR_PORT=1041 -TCP_NODE=$(config_t_get global tcp_node nil) -UDP_REDIR_PORT=1051 -UDP_NODE=$(config_t_get global udp_node nil) -TCP_UDP=0 -[ "$UDP_NODE" == "tcp" ] && { - UDP_NODE=$TCP_NODE - TCP_UDP=1 -} -[ "$ENABLED" != 1 ] && NO_PROXY=1 -[ "$TCP_NODE" == "nil" -a "$UDP_NODE" == "nil" ] && NO_PROXY=1 -[ "$(config_get_type $TCP_NODE nil)" == "nil" -a "$(config_get_type $UDP_NODE nil)" == "nil" ] && NO_PROXY=1 -tcp_proxy_way=$(config_t_get global_forwarding tcp_proxy_way redirect) -REDIRECT_LIST="socks ss ss-rust ssr v2ray xray trojan-plus trojan-go naiveproxy" -TPROXY_LIST="socks ss ss-rust ssr v2ray xray trojan-plus brook trojan-go hysteria" -KCPTUN_REDIR_PORT=$(config_t_get global_forwarding kcptun_port 12948) -RESOLVFILE=/tmp/resolv.conf.d/resolv.conf.auto -[ -f "${RESOLVFILE}" ] && [ -s "${RESOLVFILE}" ] || RESOLVFILE=/tmp/resolv.conf.auto -TCP_REDIR_PORTS=$(config_t_get global_forwarding tcp_redir_ports '80,443') -UDP_REDIR_PORTS=$(config_t_get global_forwarding udp_redir_ports '1:65535') -TCP_NO_REDIR_PORTS=$(config_t_get global_forwarding tcp_no_redir_ports 'disable') -UDP_NO_REDIR_PORTS=$(config_t_get global_forwarding udp_no_redir_ports 'disable') -TCP_PROXY_MODE=$(config_t_get global tcp_proxy_mode chnroute) -UDP_PROXY_MODE=$(config_t_get global udp_proxy_mode chnroute) -LOCALHOST_TCP_PROXY_MODE=$(config_t_get global localhost_tcp_proxy_mode default) -LOCALHOST_UDP_PROXY_MODE=$(config_t_get global localhost_udp_proxy_mode default) -[ "$LOCALHOST_TCP_PROXY_MODE" == "default" ] && LOCALHOST_TCP_PROXY_MODE=$TCP_PROXY_MODE -[ "$LOCALHOST_UDP_PROXY_MODE" == "default" ] && LOCALHOST_UDP_PROXY_MODE=$UDP_PROXY_MODE -global=$(echo "${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE}${UDP_PROXY_MODE}${LOCALHOST_UDP_PROXY_MODE}" | grep "global") -returnhome=$(echo "${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE}${UDP_PROXY_MODE}${LOCALHOST_UDP_PROXY_MODE}" | grep "returnhome") -chnlist=$(echo "${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE}${UDP_PROXY_MODE}${LOCALHOST_UDP_PROXY_MODE}" | grep "chnroute") -gfwlist=$(echo "${TCP_PROXY_MODE}${LOCALHOST_TCP_PROXY_MODE}${UDP_PROXY_MODE}${LOCALHOST_UDP_PROXY_MODE}" | grep "gfwlist") -DNS_SHUNT=$(config_t_get global dns_shunt dnsmasq) -[ -z "$(first_type $DNS_SHUNT)" ] && DNS_SHUNT="dnsmasq" -DNS_MODE=$(config_t_get global dns_mode pdnsd) -DNS_FORWARD=$(config_t_get global dns_forward 1.1.1.1:53 | sed 's/#/:/g' | sed -E 's/\:([^:]+)$/#\1/g') -DNS_CACHE=$(config_t_get global dns_cache 0) -CHINADNS_NG=$(config_t_get global chinadns_ng 0) -filter_proxy_ipv6=$(config_t_get global filter_proxy_ipv6 0) -dns_listen_port=${DNS_PORT} - -DEFAULT_DNS=$(uci show dhcp | grep "@dnsmasq" | grep "\.server=" | awk -F '=' '{print $2}' | sed "s/'//g" | tr ' ' '\n' | grep -v "\/" | head -2 | sed ':label;N;s/\n/,/;b label') -[ -z "${DEFAULT_DNS}" ] && DEFAULT_DNS=$(echo -n $(sed -n 's/^nameserver[ \t]*\([^ ]*\)$/\1/p' "${RESOLVFILE}" | grep -v -E "0.0.0.0|127.0.0.1|::" | head -2) | tr ' ' ',') -LOCAL_DNS="${DEFAULT_DNS:-119.29.29.29}" - -PROXY_IPV6=$(config_t_get global_forwarding ipv6_tproxy 0) - -export V2RAY_LOCATION_ASSET=$(config_t_get global_rules v2ray_location_asset "/usr/share/v2ray/") -export XRAY_LOCATION_ASSET=$V2RAY_LOCATION_ASSET -mkdir -p /tmp/etc $TMP_PATH $TMP_BIN_PATH $TMP_SCRIPT_FUNC_PATH $TMP_ID_PATH $TMP_PORT_PATH $TMP_ROUTE_PATH $TMP_ACL_PATH $TMP_PATH2 - -arg1=$1 -shift -case $arg1 in -get_new_port) - get_new_port $@ - ;; -run_socks) - run_socks $@ - ;; -run_redir) - run_redir $@ - ;; -node_switch) - node_switch $@ - ;; -echolog) - echolog $@ - ;; -stop) - stop - ;; -start) - start - ;; -boot) - boot - ;; -esac diff --git a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.sh b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.sh deleted file mode 100755 index 6d81e065..00000000 --- a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.sh +++ /dev/null @@ -1,311 +0,0 @@ -#!/bin/sh - -stretch() { - #zhenduiluanshezhiDNSderen - local dnsmasq_server=$(uci -q get dhcp.@dnsmasq[0].server) - local dnsmasq_noresolv=$(uci -q get dhcp.@dnsmasq[0].noresolv) - local _flag - for server in $dnsmasq_server; do - [ -z "$(echo $server | grep '\/')" ] && _flag=1 - done - [ -z "$_flag" ] && [ "$dnsmasq_noresolv" = "1" ] && { - uci -q delete dhcp.@dnsmasq[0].noresolv - uci -q set dhcp.@dnsmasq[0].resolvfile="$RESOLVFILE" - uci commit dhcp - } -} - -backup_servers() { - DNSMASQ_DNS=$(uci show dhcp | grep "@dnsmasq" | grep ".server=" | awk -F '=' '{print $2}' | sed "s/'//g" | tr ' ' ',') - if [ -n "${DNSMASQ_DNS}" ]; then - uci -q set $CONFIG.@global[0].dnsmasq_servers="${DNSMASQ_DNS}" - uci commit $CONFIG - fi -} - -restore_servers() { - OLD_SERVER=$(uci -q get $CONFIG.@global[0].dnsmasq_servers | tr "," " ") - for server in $OLD_SERVER; do - uci -q del_list dhcp.@dnsmasq[0].server=$server - uci -q add_list dhcp.@dnsmasq[0].server=$server - done - uci commit dhcp - uci -q delete $CONFIG.@global[0].dnsmasq_servers - uci commit $CONFIG -} - -logic_restart() { - local no_log - eval_set_val $@ - _LOG_FILE=$LOG_FILE - [ -n "$no_log" ] && LOG_FILE="/dev/null" - if [ -f "$TMP_PATH/default_DNS" ]; then - backup_servers - #sed -i "/list server/d" /etc/config/dhcp >/dev/null 2>&1 - for server in $(uci -q get dhcp.@dnsmasq[0].server); do - [ -n "$(echo $server | grep '\/')" ] || uci -q del_list dhcp.@dnsmasq[0].server="$server" - done - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - restore_servers - else - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - fi - echolog "重启 dnsmasq 服务" - LOG_FILE=${_LOG_FILE} -} - -restart() { - local no_log - eval_set_val $@ - _LOG_FILE=$LOG_FILE - [ -n "$no_log" ] && LOG_FILE="/dev/null" - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - echolog "重启 dnsmasq 服务" - LOG_FILE=${_LOG_FILE} -} - -gen_items() { - local ipsets dnss outf ipsetoutf - eval_set_val $@ - - awk -v ipsets="${ipsets}" -v dnss="${dnss}" -v outf="${outf}" -v ipsetoutf="${ipsetoutf}" ' - BEGIN { - if(outf == "") outf="/dev/stdout"; - if(ipsetoutf == "") ipsetoutf=outf; - split(dnss, dns, ","); setdns=length(dns)>0; setlist=length(ipsets)>0; - if(setdns) for(i in dns) if(length(dns[i])==0) delete dns[i]; - fail=1; - } - ! /^$/&&!/^#/ { - fail=0 - if(setdns) for(i in dns) printf("server=/.%s/%s\n", $0, dns[i]) >>outf; - if(setlist) printf("ipset=/.%s/%s\n", $0, ipsets) >>ipsetoutf; - } - END {fflush(outf); close(outf); fflush(ipsetoutf); close(ipsetoutf); exit(fail);} - ' -} - -gen_address_items() { - local address=${1}; shift 1 - local outf=${1}; shift 1 - - awk -v address="${address}" -v outf="${outf}" ' - BEGIN { - if(outf == "") outf="/dev/stdout"; - if(address == "") address="0.0.0.0,::"; - split(address, ad, ","); setad=length(ad)>0; - if(setad) for(i in ad) if(length(ad[i])==0) delete ad[i]; - fail=1; - } - ! /^$/&&!/^#/ { - fail=0 - if(setad) for(i in ad) printf("address=/.%s/%s\n", $0, ad[i]) >>outf; - } - END {fflush(outf); close(outf); exit(fail);} - ' -} - -ipset_merge() { - awk '{gsub(/ipset=\//,""); gsub(/\//," ");key=$1;value=$2;if (sum[key] != "") {sum[key]=sum[key]","value} else {sum[key]=sum[key]value}} END{for(i in sum) print "ipset=/"i"/"sum[i]}' "${1}/ipset.conf" > "${1}/ipset.conf2" - mv -f "${1}/ipset.conf2" "${1}/ipset.conf" -} - -add() { - local fwd_dns item servers msg - local DNS_MODE TMP_DNSMASQ_PATH DNSMASQ_CONF_FILE DEFAULT_DNS LOCAL_DNS TUN_DNS REMOTE_FAKEDNS CHINADNS_DNS TCP_NODE PROXY_MODE NO_LOGIC_LOG NO_PROXY_IPV6 - eval_set_val $@ - _LOG_FILE=$LOG_FILE - [ -n "$NO_LOGIC_LOG" ] && LOG_FILE="/dev/null" - global=$(echo "${PROXY_MODE}" | grep "global") - returnhome=$(echo "${PROXY_MODE}" | grep "returnhome") - chnlist=$(echo "${PROXY_MODE}" | grep "chnroute") - gfwlist=$(echo "${PROXY_MODE}" | grep "gfwlist") - mkdir -p "${TMP_DNSMASQ_PATH}" "${DNSMASQ_PATH}" "/tmp/dnsmasq.d" - count_hosts_str="!" - - #屏蔽列表 - [ -s "${RULES_PATH}/block_host" ] && { - cat "${RULES_PATH}/block_host" | tr -s '\n' | grep -v "^#" | sort -u | gen_address_items address="0.0.0.0" outf="${TMP_DNSMASQ_PATH}/00-block_host.conf" - } - - #始终用国内DNS解析节点域名 - fwd_dns="${LOCAL_DNS}" - servers=$(uci show "${CONFIG}" | grep ".address=" | cut -d "'" -f 2) - hosts_foreach "servers" host_from_url | grep '[a-zA-Z]$' | sort -u | gen_items ipsets="vpsiplist,vpsiplist6" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/10-vpsiplist_host.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - echolog " - [$?]节点列表中的域名(vpsiplist):${fwd_dns:-默认}" - - #始终用国内DNS解析直连(白名单)列表 - [ -s "${RULES_PATH}/direct_host" ] && { - fwd_dns="${LOCAL_DNS}" - #[ -n "$CHINADNS_DNS" ] && unset fwd_dns - cat "${RULES_PATH}/direct_host" | tr -s '\n' | grep -v "^#" | sort -u | gen_items ipsets="whitelist,whitelist6" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/11-direct_host.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - echolog " - [$?]域名白名单(whitelist):${fwd_dns:-默认}" - } - - subscribe_list="" - for item in $(get_enabled_anonymous_secs "@subscribe_list"); do - host=$(host_from_url "$(config_n_get ${item} url)") - subscribe_list="${subscribe_list}\n${host}" - done - [ -n "$subscribe_list" ] && { - if [ "$(config_t_get global_subscribe subscribe_proxy 0)" = "0" ]; then - #如果没有开启通过代理订阅 - fwd_dns="${LOCAL_DNS}" - echo -e "$subscribe_list" | sort -u | gen_items ipsets="whitelist,whitelist6" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/12-subscribe.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - echolog " - [$?]节点订阅域名(whitelist):${fwd_dns:-默认}" - else - #如果开启了通过代理订阅 - fwd_dns="${TUN_DNS}" - local ipset_flag="blacklist,blacklist6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="blacklist" - echo -e "$subscribe_list" | sort -u | gen_address_items address="::" outf="${TMP_DNSMASQ_PATH}/91-subscribe-noipv6.conf" - fi - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - echo -e "$subscribe_list" | sort -u | gen_items ipsets="${ipset_flag}" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/91-subscribe.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - echolog " - [$?]节点订阅域名(blacklist):${fwd_dns:-默认}" - fi - } - - #始终使用远程DNS解析代理(黑名单)列表 - [ -s "${RULES_PATH}/proxy_host" ] && { - local ipset_flag="blacklist,blacklist6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="blacklist" - cat "${RULES_PATH}/proxy_host" | tr -s '\n' | grep -v "^#" | sort -u | gen_address_items address="::" outf="${TMP_DNSMASQ_PATH}/97-proxy_host-noipv6.conf" - fi - fwd_dns="${TUN_DNS}" - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - cat "${RULES_PATH}/proxy_host" | tr -s '\n' | grep -v "^#" | sort -u | gen_items ipsets="${ipset_flag}" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/97-proxy_host.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - echolog " - [$?]代理域名表(blacklist):${fwd_dns:-默认}" - } - - #分流规则 - [ "$(config_n_get $TCP_NODE protocol)" = "_shunt" ] && { - fwd_dns="${TUN_DNS}" - msg_dns="${fwd_dns}" - local default_node_id=$(config_n_get $TCP_NODE default_node _direct) - local shunt_ids=$(uci show $CONFIG | grep "=shunt_rules" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}') - for shunt_id in $shunt_ids; do - local shunt_node_id=$(config_n_get $TCP_NODE ${shunt_id} nil) - [ "$shunt_node_id" = "nil" ] && continue - [ "$shunt_node_id" = "_default" ] && shunt_node_id=$default_node_id - [ "$shunt_node_id" = "_blackhole" ] && continue - local str=$(echo -n $(config_n_get $shunt_id domain_list | grep -v 'regexp:\|geosite:\|ext:' | sed 's/domain:\|full:\|//g' | tr -s "\r\n" "\n" | sort -u) | sed "s/ /|/g") - [ -n "$str" ] && count_hosts_str="${count_hosts_str}|${str}" - [ "$shunt_node_id" = "_direct" ] && { - [ -n "$str" ] && echo $str | sed "s/|/\n/g" | gen_items ipsets="whitelist,whitelist6" "${LOCAL_DNS}" "${TMP_DNSMASQ_PATH}/13-shunt_host.conf" - msg_dns="${LOCAL_DNS}" - continue - } - local shunt_node=$(config_n_get $shunt_node_id address nil) - [ "$shunt_node" = "nil" ] && continue - - [ -n "$str" ] && { - local ipset_flag="shuntlist,shuntlist6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="shuntlist" - echo $str | sed "s/|/\n/g" | gen_address_items address="::" outf="${TMP_DNSMASQ_PATH}/98-shunt_host-noipv6.conf" - fi - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - echo $str | sed "s/|/\n/g" | gen_items ipsets="${ipset_flag}" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/98-shunt_host.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - msg_dns="${fwd_dns}" - } - done - echolog " - [$?]V2ray/Xray分流规则(shuntlist):${msg_dns:-默认}" - } - - [ -s "${RULES_PATH}/direct_host" ] && direct_hosts_str="$(echo -n $(cat ${RULES_PATH}/direct_host | tr -s '\n' | grep -v "^#" | sort -u) | sed "s/ /|/g")" - [ -s "${RULES_PATH}/proxy_host" ] && proxy_hosts_str="$(echo -n $(cat ${RULES_PATH}/proxy_host | tr -s '\n' | grep -v "^#" | sort -u) | sed "s/ /|/g")" - [ -n "$direct_hosts_str" ] && count_hosts_str="${count_hosts_str}|${direct_hosts_str}" - [ -n "$proxy_hosts_str" ] && count_hosts_str="${count_hosts_str}|${proxy_hosts_str}" - - #如果没有使用回国模式 - if [ -z "${returnhome}" ]; then - # GFW 模式 - [ -s "${RULES_PATH}/gfwlist" ] && { - grep -v -E "$count_hosts_str" "${RULES_PATH}/gfwlist" > "${TMP_PATH}/gfwlist" - - local ipset_flag="gfwlist,gfwlist6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="gfwlist" - sort -u "${TMP_PATH}/gfwlist" | gen_address_items address="::" outf="${TMP_DNSMASQ_PATH}/99-gfwlist-noipv6.conf" - fi - fwd_dns="${TUN_DNS}" - [ -n "$CHINADNS_DNS" ] && unset fwd_dns - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - sort -u "${TMP_PATH}/gfwlist" | gen_items ipsets="${ipset_flag}" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/99-gfwlist.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - echolog " - [$?]防火墙域名表(gfwlist):${fwd_dns:-默认}" - rm -f "${TMP_PATH}/gfwlist" - } - - # 中国列表以外 模式 - [ -n "${CHINADNS_DNS}" ] && { - fwd_dns="${LOCAL_DNS}" - [ -n "$CHINADNS_DNS" ] && unset fwd_dns - [ -s "${RULES_PATH}/chnlist" ] && { - grep -v -E "$count_hosts_str" "${RULES_PATH}/chnlist" | gen_items ipsets="chnroute,chnroute6" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/19-chinalist_host.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - echolog " - [$?]中国域名表(chnroute):${fwd_dns:-默认}" - } - } - else - #回国模式 - [ -s "${RULES_PATH}/chnlist" ] && { - grep -v -E "$count_hosts_str" "${RULES_PATH}/chnlist" > "${TMP_PATH}/chnlist" - - local ipset_flag="chnroute,chnroute6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="chnroute" - sort -u "${TMP_PATH}/chnlist" | gen_address_items address="::" outf="${TMP_DNSMASQ_PATH}/99-chinalist_host-noipv6.conf" - fi - fwd_dns="${TUN_DNS}" - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - sort -u "${TMP_PATH}/chnlist" | gen_items ipsets="${ipset_flag}" dnss="${fwd_dns}" outf="${TMP_DNSMASQ_PATH}/99-chinalist_host.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" - echolog " - [$?]中国域名表(chnroute):${fwd_dns:-默认}" - rm -f "${TMP_PATH}/chnlist" - } - fi - - ipset_merge ${TMP_DNSMASQ_PATH} - - echo "conf-dir=${TMP_DNSMASQ_PATH}" > $DNSMASQ_CONF_FILE - [ -n "${CHINADNS_DNS}" ] && { - echo "${DEFAULT_DNS}" > $TMP_PATH/default_DNS - cat <<-EOF >> $DNSMASQ_CONF_FILE - server=${CHINADNS_DNS} - all-servers - no-poll - no-resolv - EOF - echolog " - [$?]以上所列以外及默认(ChinaDNS-NG):${CHINADNS_DNS}" - } - echolog " - PassWall必须依赖于Dnsmasq,如果你自行配置了错误的DNS流程,将会导致域名(直连/代理域名)分流失效!!!" - LOG_FILE=${_LOG_FILE} -} - -del() { - rm -rf /tmp/dnsmasq.d/dnsmasq-$CONFIG.conf - rm -rf $DNSMASQ_PATH/dnsmasq-$CONFIG.conf - rm -rf $TMP_DNSMASQ_PATH -} - -arg1=$1 -shift -case $arg1 in -stretch) - stretch $@ - ;; -add) - add $@ - ;; -del) - del $@ - ;; -restart) - restart $@ - ;; -logic_restart) - logic_restart $@ - ;; -*) ;; -esac diff --git a/luci-app-passwall/root/usr/share/passwall/helper_smartdns.sh b/luci-app-passwall/root/usr/share/passwall/helper_smartdns.sh deleted file mode 100755 index f1421607..00000000 --- a/luci-app-passwall/root/usr/share/passwall/helper_smartdns.sh +++ /dev/null @@ -1,224 +0,0 @@ -#!/bin/sh - -restart() { - local no_log - eval_set_val $@ - _LOG_FILE=$LOG_FILE - [ -n "$no_log" ] && LOG_FILE="/dev/null" - rm -rf /tmp/smartdns.cache - /etc/init.d/smartdns reload >/dev/null 2>&1 - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - LOG_FILE=${_LOG_FILE} -} - -gen_items() { - local ipsets group address speed_check_mode outf - eval_set_val $@ - - awk -v ipsets="${ipsets}" -v group="${group}" -v speed_check_mode="${speed_check_mode}" -v address="${address}" -v outf="${outf}" ' - BEGIN { - if(outf == "") outf="/dev/stdout"; - if(group != "") group=" -n " group; - if(ipsets != "") ipsets=" -p " ipsets; - if(speed_check_mode != "") speed_check_mode=" -c " speed_check_mode; - if(address != "") address=" -a " address; - fail=1; - } - ! /^$/&&!/^#/ { - fail=0 - printf("domain-rules /%s/ %s%s%s%s\n", $0, group, ipsets, address, speed_check_mode) >>outf; - } - END {fflush(outf); close(outf); exit(fail);} - ' -} - -gen_address_items() { - local address=${1}; shift 1 - local outf=${1}; shift 1 - - awk -v address="${address}" -v outf="${outf}" ' - BEGIN { - if(outf == "") outf="/dev/stdout"; - setaddress=length(address)>0; - fail=1; - } - ! /^$/&&!/^#/ { - fail=0 - if(setaddress) printf("address /%s/%s\n", $0, address) >>outf; - } - END {fflush(outf); close(outf); exit(fail);} - ' -} - -add() { - local fwd_dns fwd_group item servers msg - local DNS_MODE SMARTDNS_CONF DNSMASQ_CONF_FILE DEFAULT_DNS LOCAL_GROUP REMOTE_GROUP REMOTE_FAKEDNS TUN_DNS TCP_NODE PROXY_MODE NO_LOGIC_LOG NO_PROXY_IPV6 - eval_set_val $@ - _LOG_FILE=$LOG_FILE - [ -n "$NO_LOGIC_LOG" ] && LOG_FILE="/dev/null" - global=$(echo "${PROXY_MODE}" | grep "global") - returnhome=$(echo "${PROXY_MODE}" | grep "returnhome") - chnlist=$(echo "${PROXY_MODE}" | grep "chnroute") - gfwlist=$(echo "${PROXY_MODE}" | grep "gfwlist") - touch ${SMARTDNS_CONF} - count_hosts_str="!" - [ -z "${REMOTE_GROUP}" ] && { - REMOTE_GROUP="${CONFIG}_proxy" - [ -n "${TUN_DNS}" ] && TUN_DNS="$(echo ${TUN_DNS} | sed 's/#/:/g')" - echo "server ${TUN_DNS} -group ${REMOTE_GROUP} -exclude-default-group" >> ${SMARTDNS_CONF} - } - - #屏蔽列表 - [ -s "${RULES_PATH}/block_host" ] && { - cat "${RULES_PATH}/block_host" | tr -s '\n' | grep -v "^#" | sort -u | gen_address_items "-" "${SMARTDNS_CONF}" - } - - #始终用国内DNS解析节点域名 - servers=$(uci show "${CONFIG}" | grep ".address=" | cut -d "'" -f 2) - hosts_foreach "servers" host_from_url | grep '[a-zA-Z]$' | sort -u | gen_items ipsets="#4:vpsiplist,#6:vpsiplist6" group="${LOCAL_GROUP}" outf="${SMARTDNS_CONF}" - echolog " - [$?]节点列表中的域名(vpsiplist)使用分组:${LOCAL_GROUP:-默认}" - - #始终用国内DNS解析直连(白名单)列表 - [ -s "${RULES_PATH}/direct_host" ] && { - cat "${RULES_PATH}/direct_host" | tr -s '\n' | grep -v "^#" | sort -u | gen_items ipsets="#4:whitelist,#6:whitelist6" group="${LOCAL_GROUP}" outf="${SMARTDNS_CONF}" - echolog " - [$?]域名白名单(whitelist)使用分组:${LOCAL_GROUP:-默认}" - } - - subscribe_list="" - for item in $(get_enabled_anonymous_secs "@subscribe_list"); do - host=$(host_from_url "$(config_n_get ${item} url)") - subscribe_list="${subscribe_list}\n${host}" - done - [ -n "$subscribe_list" ] && { - if [ "$(config_t_get global_subscribe subscribe_proxy 0)" = "0" ]; then - #如果没有开启通过代理订阅 - echo -e "$subscribe_list" | sort -u | gen_items ipsets="#4:whitelist,#6:whitelist6" group="${LOCAL_GROUP}" outf="${SMARTDNS_CONF}" - echolog " - [$?]节点订阅域名(whitelist)使用分组:${LOCAL_GROUP:-默认}" - else - #如果开启了通过代理订阅 - local ipset_flag="#4:blacklist,#6:blacklist6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="#4:blacklist" - address="#6" - fi - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - echo -e "$subscribe_list" | sort -u | gen_items ipsets="${ipset_flag}" group="${REMOTE_GROUP}" address="${address}" speed_check_mode="none" outf="${SMARTDNS_CONF}" - echolog " - [$?]节点订阅域名(blacklist)使用分组:${REMOTE_GROUP}" - fi - } - - #始终使用远程DNS解析代理(黑名单)列表 - [ -s "${RULES_PATH}/proxy_host" ] && { - local ipset_flag="#4:blacklist,#6:blacklist6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="#4:blacklist" - address="#6" - fi - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - cat "${RULES_PATH}/proxy_host" | tr -s '\n' | grep -v "^#" | sort -u | gen_items ipsets="${ipset_flag}" group="${REMOTE_GROUP}" address="${address}" speed_check_mode="none" outf="${SMARTDNS_CONF}" - echolog " - [$?]代理域名表(blacklist)使用分组:${REMOTE_GROUP}" - } - - #分流规则 - [ "$(config_n_get $TCP_NODE protocol)" = "_shunt" ] && { - local default_node_id=$(config_n_get $TCP_NODE default_node _direct) - local shunt_ids=$(uci show $CONFIG | grep "=shunt_rules" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}') - for shunt_id in $shunt_ids; do - local shunt_node_id=$(config_n_get $TCP_NODE ${shunt_id} nil) - [ "$shunt_node_id" = "nil" ] && continue - [ "$shunt_node_id" = "_default" ] && shunt_node_id=$default_node_id - [ "$shunt_node_id" = "_blackhole" ] && continue - local str=$(echo -n $(config_n_get $shunt_id domain_list | grep -v 'regexp:\|geosite:\|ext:' | sed 's/domain:\|full:\|//g' | tr -s "\r\n" "\n" | sort -u) | sed "s/ /|/g") - [ -n "$str" ] && count_hosts_str="${count_hosts_str}|${str}" - [ "$shunt_node_id" = "_direct" ] && { - [ -n "$str" ] && echo $str | sed "s/|/\n/g" | gen_items ipsets="#4:whitelist,#6:whitelist6" group="${LOCAL_GROUP}" outf="${SMARTDNS_CONF}" - msg_dns="${LOCAL_GROUP}" - continue - } - local shunt_node=$(config_n_get $shunt_node_id address nil) - [ "$shunt_node" = "nil" ] && continue - - [ -n "$str" ] && { - local ipset_flag="#4:shuntlist,#6:shuntlist6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="#4:shuntlist" - address="#6" - fi - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - echo $str | sed "s/|/\n/g" | gen_items ipsets="${ipset_flag}" group="${REMOTE_GROUP}" address="${address}" speed_check_mode="none" outf="${SMARTDNS_CONF}" - msg_dns="${REMOTE_GROUP}" - } - done - echolog " - [$?]V2ray/Xray分流规则(shuntlist):${msg_dns:-默认}" - } - - [ -s "${RULES_PATH}/direct_host" ] && direct_hosts_str="$(echo -n $(cat ${RULES_PATH}/direct_host | tr -s '\n' | grep -v "^#" | sort -u) | sed "s/ /|/g")" - [ -s "${RULES_PATH}/proxy_host" ] && proxy_hosts_str="$(echo -n $(cat ${RULES_PATH}/proxy_host | tr -s '\n' | grep -v "^#" | sort -u) | sed "s/ /|/g")" - [ -n "$direct_hosts_str" ] && count_hosts_str="${count_hosts_str}|${direct_hosts_str}" - [ -n "$proxy_hosts_str" ] && count_hosts_str="${count_hosts_str}|${proxy_hosts_str}" - - #如果没有使用回国模式 - if [ -z "${returnhome}" ]; then - # GFW 模式 - [ -s "${RULES_PATH}/gfwlist" ] && { - grep -v -E "$count_hosts_str" "${RULES_PATH}/gfwlist" > "${TMP_PATH}/gfwlist" - - local ipset_flag="#4:gfwlist,#6:gfwlist6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="#4:gfwlist" - address="#6" - fi - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - sort -u "${TMP_PATH}/gfwlist" | gen_items ipsets="${ipset_flag}" group="${REMOTE_GROUP}" address="${address}" speed_check_mode="none" outf="${SMARTDNS_CONF}" - echolog " - [$?]防火墙域名表(gfwlist)使用分组:${REMOTE_GROUP}" - rm -f "${TMP_PATH}/gfwlist" - } - - # 中国列表以外 模式 - [ -s "${RULES_PATH}/chnlist" ] && [ -n "${chnlist}" ] && { - grep -v -E "$count_hosts_str" "${RULES_PATH}/chnlist" | gen_items ipsets="#4:chnroute,#6:chnroute6" group="${LOCAL_GROUP}" outf="${SMARTDNS_CONF}" - echolog " - [$?]中国域名表(chnroute)使用分组:${LOCAL_GROUP:-默认}" - } - else - #回国模式 - [ -s "${RULES_PATH}/chnlist" ] && { - grep -v -E "$count_hosts_str" "${RULES_PATH}/chnlist" > "${TMP_PATH}/chnlist" - - local ipset_flag="#4:chnroute,#6:chnroute6" - if [ "${NO_PROXY_IPV6}" = "1" ]; then - ipset_flag="#4:chnroute" - address="#6" - fi - [ -n "${REMOTE_FAKEDNS}" ] && unset ipset_flag - sort -u "${TMP_PATH}/chnlist" | gen_items ipsets="${ipset_flag}" group="${REMOTE_GROUP}" address="${address}" speed_check_mode="none" outf="${SMARTDNS_CONF}" - echolog " - [$?]中国域名表(chnroute)使用分组:${REMOTE_GROUP}" - rm -f "${TMP_PATH}/chnlist" - } - fi - - echo "conf-file ${SMARTDNS_CONF}" >> /etc/smartdns/custom.conf - echolog " - 请让SmartDNS作为Dnsmasq的上游或重定向!" - LOG_FILE=${_LOG_FILE} -} - -del() { - rm -rf /tmp/etc/smartdns/passwall.conf - sed -i "/passwall/d" /etc/smartdns/custom.conf >/dev/null 2>&1 - rm -rf /tmp/smartdns.cache - /etc/init.d/smartdns reload -} - -arg1=$1 -shift -case $arg1 in -add) - add $@ - ;; -del) - del $@ - ;; -restart) - restart $@ - ;; -*) ;; -esac diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh deleted file mode 100755 index 70d00ad6..00000000 --- a/luci-app-passwall/root/usr/share/passwall/iptables.sh +++ /dev/null @@ -1,1117 +0,0 @@ -#!/bin/sh - -IPSET_LANIPLIST="laniplist" -IPSET_VPSIPLIST="vpsiplist" -IPSET_SHUNTLIST="shuntlist" -IPSET_GFW="gfwlist" -IPSET_CHN="chnroute" -IPSET_BLACKLIST="blacklist" -IPSET_WHITELIST="whitelist" -IPSET_BLOCKLIST="blocklist" - -IPSET_LANIPLIST6="laniplist6" -IPSET_VPSIPLIST6="vpsiplist6" -IPSET_SHUNTLIST6="shuntlist6" -IPSET_GFW6="gfwlist6" -IPSET_CHN6="chnroute6" -IPSET_BLACKLIST6="blacklist6" -IPSET_WHITELIST6="whitelist6" -IPSET_BLOCKLIST6="blocklist6" - -FORCE_INDEX=2 - -ipt_n="iptables -t nat -w" -ipt_m="iptables -t mangle -w" -ip6t_n="ip6tables -t nat -w" -ip6t_m="ip6tables -t mangle -w" -[ -z "$(lsmod | grep 'ip6table_nat')" ] && ip6t_n="eval #$ip6t_n" -[ -z "$(lsmod | grep 'ip6table_mangle')" ] && ip6t_m="eval #$ip6t_m" -FWI=$(uci -q get firewall.passwall.path 2>/dev/null) -FAKE_IP=198.18.0.0/16 - -factor() { - if [ -z "$1" ] || [ -z "$2" ]; then - echo "" - elif [ "$1" == "1:65535" ]; then - echo "" - else - echo "$2 $1" - fi -} - -dst() { - echo "-m set $2 --match-set $1 dst" -} - -comment() { - local name=$(echo $1 | sed 's/ /_/g') - echo "-m comment --comment '$name'" -} - -destroy_ipset() { - for i in "$@"; do - ipset -q -F $i - ipset -q -X $i - done -} - -RULE_LAST_INDEX() { - [ $# -ge 3 ] || { - echolog "索引列举方式不正确(iptables),终止执行!" - exit 1 - } - local ipt_tmp=${1}; shift - local chain=${1}; shift - local list=${1}; shift - local default=${1:-0}; shift - local _index=$($ipt_tmp -n -L $chain --line-numbers 2>/dev/null | grep "$list" | head -n 1 | awk '{print $1}') - echo "${_index:-${default}}" -} - -REDIRECT() { - local s="-j REDIRECT" - [ -n "$1" ] && { - local s="$s --to-ports $1" - [ "$2" == "TPROXY" ] && s="-j TPROXY --tproxy-mark 0x1/0x1 --on-port $1" - [ "$2" == "MARK" ] && s="-j MARK --set-mark $1" - } - echo $s -} - -get_redirect_ipt() { - case "$1" in - disable) - echo "-j RETURN" - ;; - global) - echo "$(REDIRECT $2 $3)" - ;; - gfwlist) - echo "$(dst $IPSET_GFW) $(REDIRECT $2 $3)" - ;; - chnroute) - echo "$(dst $IPSET_CHN !) $(REDIRECT $2 $3)" - ;; - returnhome) - echo "$(dst $IPSET_CHN) $(REDIRECT $2 $3)" - ;; - direct/proxy) - echo "-j RETURN" - ;; - esac -} - -get_redirect_ip6t() { - case "$1" in - disable) - echo "-j RETURN" - ;; - global) - echo "$(REDIRECT $2 $3)" - ;; - gfwlist) - echo "$(dst $IPSET_GFW6) $(REDIRECT $2 $3)" - ;; - chnroute) - echo "$(dst $IPSET_CHN6 !) $(REDIRECT $2 $3)" - ;; - returnhome) - echo "$(dst $IPSET_CHN6) $(REDIRECT $2 $3)" - ;; - direct/proxy) - echo "-j RETURN" - ;; - esac -} - -get_action_chain_name() { - case "$1" in - disable) - echo "不代理" - ;; - global) - echo "全局代理" - ;; - gfwlist) - echo "防火墙列表" - ;; - chnroute) - echo "中国列表以外" - ;; - returnhome) - echo "中国列表" - ;; - direct/proxy) - echo "仅使用直连/代理列表" - ;; - esac -} - -gen_laniplist() { - cat $RULES_PATH/lanlist_ipv4 | tr -s '\n' | grep -v "^#" -} - -gen_laniplist_6() { - cat $RULES_PATH/lanlist_ipv6 | tr -s '\n' | grep -v "^#" -} - -load_acl() { - local items=$(uci show ${CONFIG} | grep "=acl_rule" | cut -d '.' -sf 2 | cut -d '=' -sf 1) - [ -n "$items" ] && { - local item - local socks_port redir_port dns_port dnsmasq_port - local ipt_tmp msg msg2 - socks_port=11100 - redir_port=11200 - dns_port=11300 - dnsmasq_port=11400 - echolog "访问控制:" - for item in $items; do - local enabled sid remarks sources tcp_proxy_mode udp_proxy_mode tcp_no_redir_ports udp_no_redir_ports tcp_redir_ports udp_redir_ports tcp_node udp_node dns_mode dns_forward v2ray_dns_mode dns_doh dns_client_ip dns_query_strategy - local _ip _mac _iprange _ipset _ip_or_mac rule_list tcp_port udp_port tcp_node_remark udp_node_remark config_file - sid=$(uci -q show "${CONFIG}.${item}" | grep "=acl_rule" | awk -F '=' '{print $1}' | awk -F '.' '{print $2}') - eval $(uci -q show "${CONFIG}.${item}" | cut -d'.' -sf 3-) - [ "$enabled" = "1" ] || continue - - [ -z "${sources}" ] && continue - for s in $sources; do - is_iprange=$(lua_api "iprange(\"${s}\")") - if [ "${is_iprange}" = "true" ]; then - rule_list="${rule_list}\niprange:${s}" - elif [ -n "$(echo ${s} | grep '^ipset:')" ]; then - rule_list="${rule_list}\nipset:${s}" - else - _ip_or_mac=$(lua_api "ip_or_mac(\"${s}\")") - if [ "${_ip_or_mac}" = "ip" ]; then - rule_list="${rule_list}\nip:${s}" - elif [ "${_ip_or_mac}" = "mac" ]; then - rule_list="${rule_list}\nmac:${s}" - fi - fi - done - [ -z "${rule_list}" ] && continue - - tcp_proxy_mode=${tcp_proxy_mode:-default} - udp_proxy_mode=${udp_proxy_mode:-default} - tcp_no_redir_ports=${tcp_no_redir_ports:-default} - udp_no_redir_ports=${udp_no_redir_ports:-default} - tcp_redir_ports=${tcp_redir_ports:-default} - udp_redir_ports=${udp_redir_ports:-default} - tcp_node=${tcp_node:-default} - udp_node=${udp_node:-default} - dns_mode=${dns_mode:-dns2socks} - dns_forward=${dns_forward:-1.1.1.1} - [ "$dns_mode" = "v2ray" -o "$dns_mode" = "xray" ] && { - [ "$v2ray_dns_mode" = "doh" ] && dns_forward=${dns_doh:-https://cloudflare-dns.com/dns-query,1.1.1.1} - } - [ "$tcp_proxy_mode" = "default" ] && tcp_proxy_mode=$TCP_PROXY_MODE - [ "$udp_proxy_mode" = "default" ] && udp_proxy_mode=$UDP_PROXY_MODE - [ "$tcp_no_redir_ports" = "default" ] && tcp_no_redir_ports=$TCP_NO_REDIR_PORTS - [ "$udp_no_redir_ports" = "default" ] && udp_no_redir_ports=$UDP_NO_REDIR_PORTS - [ "$tcp_redir_ports" = "default" ] && tcp_redir_ports=$TCP_REDIR_PORTS - [ "$udp_redir_ports" = "default" ] && udp_redir_ports=$UDP_REDIR_PORTS - [ "$tcp_node" != "nil" ] && { - if [ "$tcp_node" = "default" ]; then - tcp_node=$TCP_NODE - tcp_port=$TCP_REDIR_PORT - else - [ "$(config_get_type $tcp_node nil)" = "nodes" ] && { - run_dns() { - local _dns_port - [ -n $1 ] && _dns_port=$1 - [ -z ${_dns_port} ] && { - dns_port=$(get_new_port $(expr $dns_port + 1)) - _dns_port=$dns_port - if [ "$dns_mode" = "dns2socks" ]; then - run_dns2socks flag=acl_${sid} socks_address=127.0.0.1 socks_port=$socks_port listen_address=0.0.0.0 listen_port=${_dns_port} dns=$dns_forward cache=1 - elif [ "$dns_mode" = "v2ray" -o "$dns_mode" = "xray" ]; then - config_file=$TMP_ACL_PATH/${tcp_node}_SOCKS_${socks_port}_DNS.json - run_v2ray_dns_socks flag=acl_${sid} type=$dns_mode socks_address=127.0.0.1 socks_port=$socks_port listen_address=0.0.0.0 listen_port=${_dns_port} dns_proto=${v2ray_dns_mode} dns_tcp_server=${dns_forward} doh="${dns_forward}" dns_client_ip=${dns_client_ip} dns_query_strategy=${dns_query_strategy} config_file=$config_file - fi - eval node_${tcp_node}_$(echo -n "${dns_forward}" | md5sum | cut -d " " -f1)=${_dns_port} - } - - dnsmasq_port=$(get_new_port $(expr $dnsmasq_port + 1)) - redirect_dns_port=$dnsmasq_port - mkdir -p $TMP_ACL_PATH/$sid - echo "port=${dnsmasq_port}" >> $TMP_ACL_PATH/$sid/dnsmasq.conf - echo "conf-dir=${TMP_ACL_PATH}/${sid}/dnsmasq.d" >> $TMP_ACL_PATH/$sid/dnsmasq.conf - d_server=127.0.0.1 - [ "$tcp_proxy_mode" = "global" ] && d_server=${d_server}#${_dns_port} - echo "server=${d_server}" >> $TMP_ACL_PATH/$sid/dnsmasq.conf - source $APP_PATH/helper_${DNS_N}.sh add DNS_MODE=$dns_mode TMP_DNSMASQ_PATH=$TMP_ACL_PATH/$sid/dnsmasq.d DNSMASQ_CONF_FILE=/dev/null LOCAL_DNS=$LOCAL_DNS TUN_DNS=127.0.0.1#${_dns_port} TCP_NODE=$tcp_node PROXY_MODE=${tcp_proxy_mode} NO_LOGIC_LOG=1 NO_PROXY_IPV6=${filter_proxy_ipv6} - ln_run "$(first_type dnsmasq)" "dnsmasq_${sid}" "/dev/null" -C $TMP_ACL_PATH/$sid/dnsmasq.conf -x $TMP_ACL_PATH/$sid/dnsmasq.pid - eval node_${tcp_node}_$(echo -n "${tcp_proxy_mode}${dns_forward}" | md5sum | cut -d " " -f1)=${dnsmasq_port} - } - if [ "$tcp_node" = "$TCP_NODE" ]; then - tcp_port=$TCP_REDIR_PORT - else - _redir_port=$(eval echo \${node_${tcp_node}_redir_port}) - _socks_port=$(eval echo \${node_${tcp_node}_socks_port}) - if [ -n "${_socks_port}" ] && [ -n "${_redir_port}" ]; then - socks_port=${_socks_port} - tcp_port=${_redir_port} - _dnsmasq_port=$(eval echo \${node_${tcp_node}_$(echo -n "${tcp_proxy_mode}${dns_forward}" | md5sum | cut -d " " -f1)}) - if [ -z "${_dnsmasq_port}" ]; then - _dns_port=$(eval echo \${node_${tcp_node}_$(echo -n "${dns_forward}" | md5sum | cut -d " " -f1)}) - run_dns ${_dns_port} - else - redirect_dns_port=${_dnsmasq_port} - fi - else - socks_port=$(get_new_port $(expr $socks_port + 1)) - eval node_${tcp_node}_socks_port=$socks_port - redir_port=$(get_new_port $(expr $redir_port + 1)) - eval node_${tcp_node}_redir_port=$redir_port - tcp_port=$redir_port - config_file=$TMP_ACL_PATH/${tcp_node}_SOCKS_${socks_port}.json - - local type=$(echo $(config_n_get $tcp_node type) | tr 'A-Z' 'a-z') - if [ -n "${type}" ] && ([ "${type}" = "v2ray" ] || [ "${type}" = "xray" ]); then - config_file=$(echo $config_file | sed "s/SOCKS/TCP_UDP_SOCKS/g") - run_v2ray flag=$tcp_node node=$tcp_node redir_port=$redir_port socks_address=127.0.0.1 socks_port=$socks_port config_file=$config_file - else - run_socks flag=$tcp_node node=$tcp_node bind=127.0.0.1 socks_port=$socks_port config_file=$config_file - local log_file=$TMP_ACL_PATH/ipt2socks_${tcp_node}_${redir_port}.log - log_file="/dev/null" - run_ipt2socks flag=acl_${tcp_node} tcp_tproxy=${is_tproxy} local_port=$redir_port socks_address=127.0.0.1 socks_port=$socks_port log_file=$log_file - fi - run_dns - fi - filter_node $tcp_node TCP > /dev/null 2>&1 & - filter_node $tcp_node UDP > /dev/null 2>&1 & - fi - } - fi - tcp_node_remark=$(config_n_get $tcp_node remarks) - } - [ "$udp_node" != "nil" ] && { - [ "$udp_node" = "tcp" ] && udp_node=$tcp_node - if [ "$udp_node" = "default" ]; then - udp_node=$UDP_NODE - [ "$TCP_UDP" = "1" ] && [ "$udp_node" = "nil" ] && udp_node=$TCP_NODE - udp_port=$UDP_REDIR_PORT - else - [ "$(config_get_type $udp_node nil)" = "nodes" ] && { - if [ "$udp_node" = "$UDP_NODE" ]; then - udp_port=$UDP_REDIR_PORT - else - _redir_port=$(eval echo \${node_${udp_node}_redir_port}) - _socks_port=$(eval echo \${node_${udp_node}_socks_port}) - if [ -n "${_socks_port}" ] && [ -n "${_redir_port}" ]; then - socks_port=${_socks_port} - udp_port=${_redir_port} - else - socks_port=$(get_new_port $(expr $socks_port + 1)) - eval node_${udp_node}_socks_port=$socks_port - redir_port=$(get_new_port $(expr $redir_port + 1)) - eval node_${udp_node}_redir_port=$redir_port - udp_port=$redir_port - config_file=$TMP_ACL_PATH/${udp_node}_SOCKS_${socks_port}.json - - local type=$(echo $(config_n_get $udp_node type) | tr 'A-Z' 'a-z') - if [ -n "${type}" ] && ([ "${type}" = "v2ray" ] || [ "${type}" = "xray" ]); then - config_file=$(echo $config_file | sed "s/SOCKS/TCP_UDP_SOCKS/g") - run_v2ray flag=$udp_node node=$udp_node redir_port=$redir_port socks_address=127.0.0.1 socks_port=$socks_port config_file=$config_file - else - run_socks flag=$udp_node node=$udp_node bind=127.0.0.1 socks_port=$socks_port config_file=$config_file - local log_file=$TMP_ACL_PATH/ipt2socks_${udp_node}_${redir_port}.log - log_file="/dev/null" - run_ipt2socks flag=acl_${udp_node} local_port=$redir_port socks_address=127.0.0.1 socks_port=$socks_port log_file=$log_file - fi - fi - filter_node $udp_node TCP > /dev/null 2>&1 & - filter_node $udp_node UDP > /dev/null 2>&1 & - fi - } - fi - udp_node_remark=$(config_n_get $udp_node remarks) - } - - for i in $(echo -e ${rule_list}); do - if [ -n "$(echo ${i} | grep '^iprange:')" ]; then - _iprange=$(echo ${i} | sed 's#iprange:##g') - _ipt_source=$(factor ${_iprange} "-m iprange --src-range") - msg="备注【$remarks】,IP range【${_iprange}】," - elif [ -n "$(echo ${i} | grep '^ipset:')" ]; then - _ipset=$(echo ${i} | sed 's#ipset:##g') - _ipt_source="-m set --match-set ${_ipset} src" - msg="备注【$remarks】,IPset【${_ipset}】," - elif [ -n "$(echo ${i} | grep '^ip:')" ]; then - _ip=$(echo ${i} | sed 's#ip:##g') - _ipt_source=$(factor ${_ip} "-s") - msg="备注【$remarks】,IP【${_ip}】," - elif [ -n "$(echo ${i} | grep '^mac:')" ]; then - _mac=$(echo ${i} | sed 's#mac:##g') - _ipt_source=$(factor ${_mac} "-m mac --mac-source") - msg="备注【$remarks】,MAC【${_mac}】," - else - continue - fi - - ipt_tmp=$ipt_n - [ -n "${is_tproxy}" ] && ipt_tmp=$ipt_m - - [ -n "$tcp_port" ] && { - if [ "$tcp_proxy_mode" != "disable" ]; then - [ -n "$redirect_dns_port" ] && $ipt_n -A PSW_REDIRECT $(comment "$remarks") -p udp ${_ipt_source} --dport 53 -j REDIRECT --to-ports $redirect_dns_port - msg2="${msg}使用TCP节点[$tcp_node_remark] [$(get_action_chain_name $tcp_proxy_mode)]" - if [ -n "${is_tproxy}" ]; then - msg2="${msg2}(TPROXY:${tcp_port})代理" - ipt_tmp=$ipt_m - else - msg2="${msg2}(REDIRECT:${tcp_port})代理" - fi - [ "$tcp_no_redir_ports" != "disable" ] && { - $ipt_tmp -A PSW $(comment "$remarks") ${_ipt_source} -p tcp -m multiport --dport $tcp_no_redir_ports -j RETURN - $ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p tcp -m multiport --dport $tcp_no_redir_ports -j RETURN 2>/dev/null - msg2="${msg2}[$?]除${tcp_no_redir_ports}外的" - } - msg2="${msg2}所有端口" - $ipt_tmp -A PSW $(comment "$remarks") -p tcp ${_ipt_source} -d $FAKE_IP $(REDIRECT $tcp_port $is_tproxy) - $ipt_tmp -A PSW $(comment "$remarks") -p tcp ${_ipt_source} $(factor $tcp_redir_ports "-m multiport --dport") $(dst $IPSET_SHUNTLIST) $(REDIRECT $tcp_port $is_tproxy) - $ipt_tmp -A PSW $(comment "$remarks") -p tcp ${_ipt_source} $(factor $tcp_redir_ports "-m multiport --dport") $(dst $IPSET_BLACKLIST) $(REDIRECT $tcp_port $is_tproxy) - $ipt_tmp -A PSW $(comment "$remarks") -p tcp ${_ipt_source} $(factor $tcp_redir_ports "-m multiport --dport") $(get_redirect_ipt $tcp_proxy_mode $tcp_port $is_tproxy) - - [ "$accept_icmp" = "1" ] && { - $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} -d $FAKE_IP $(REDIRECT) - $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(dst $IPSET_SHUNTLIST) $(REDIRECT) - $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(dst $IPSET_BLACKLIST) $(REDIRECT) - $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(get_redirect_ipt $tcp_proxy_mode) - } - - if [ "$PROXY_IPV6" == "1" ]; then - $ip6t_m -A PSW $(comment "$remarks") -p tcp ${_ipt_source} $(factor $tcp_redir_ports "-m multiport --dport") $(dst $IPSET_SHUNTLIST6) $(REDIRECT $tcp_port TPROXY) 2>/dev/null - $ip6t_m -A PSW $(comment "$remarks") -p tcp ${_ipt_source} $(factor $tcp_redir_ports "-m multiport --dport") $(dst $IPSET_BLACKLIST6) $(REDIRECT $tcp_port TPROXY) 2>/dev/null - $ip6t_m -A PSW $(comment "$remarks") -p tcp ${_ipt_source} $(factor $tcp_redir_ports "-m multiport --dport") $(get_redirect_ip6t $tcp_proxy_mode $tcp_port TPROXY) 2>/dev/null - [ "$accept_icmpv6" = "1" ] && $ip6t_n -A PSW $(comment "$remarks") -p ipv6-icmp ${_ipt_source} $(get_redirect_ip6t $tcp_proxy_mode) 2>/dev/null - fi - else - msg2="${msg}不代理TCP" - fi - echolog " - ${msg2}" - } - - $ipt_tmp -A PSW $(comment "$remarks") ${_ipt_source} -p tcp -j RETURN - $ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p tcp -j RETURN 2>/dev/null - - [ -n "$udp_port" ] && { - if [ "$udp_proxy_mode" != "disable" ]; then - msg2="${msg}使用UDP节点[$udp_node_remark] [$(get_action_chain_name $udp_proxy_mode)]" - msg2="${msg2}(TPROXY:${udp_port})代理" - [ "$udp_no_redir_ports" != "disable" ] && { - $ipt_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp -m multiport --dport $udp_no_redir_ports -j RETURN - $ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp -m multiport --dport $udp_no_redir_ports -j RETURN 2>/dev/null - msg2="${msg2}[$?]除${udp_no_redir_ports}外的" - } - msg2="${msg2}所有端口" - $ipt_m -A PSW $(comment "$remarks") -p udp ${_ipt_source} -d $FAKE_IP $(REDIRECT $udp_port TPROXY) - $ipt_m -A PSW $(comment "$remarks") -p udp ${_ipt_source} $(factor $udp_redir_ports "-m multiport --dport") $(dst $IPSET_SHUNTLIST) $(REDIRECT $udp_port TPROXY) - $ipt_m -A PSW $(comment "$remarks") -p udp ${_ipt_source} $(factor $udp_redir_ports "-m multiport --dport") $(dst $IPSET_BLACKLIST) $(REDIRECT $udp_port TPROXY) - $ipt_m -A PSW $(comment "$remarks") -p udp ${_ipt_source} $(factor $udp_redir_ports "-m multiport --dport") $(get_redirect_ipt $udp_proxy_mode $udp_port TPROXY) - - if [ "$PROXY_IPV6_UDP" == "1" ]; then - $ip6t_m -A PSW $(comment "$remarks") -p udp ${_ipt_source} $(factor $udp_redir_ports "-m multiport --dport") $(dst $IPSET_SHUNTLIST6) $(REDIRECT $udp_port TPROXY) 2>/dev/null - $ip6t_m -A PSW $(comment "$remarks") -p udp ${_ipt_source} $(factor $udp_redir_ports "-m multiport --dport") $(dst $IPSET_BLACKLIST6) $(REDIRECT $udp_port TPROXY) 2>/dev/null - $ip6t_m -A PSW $(comment "$remarks") -p udp ${_ipt_source} $(factor $udp_redir_ports "-m multiport --dport") $(get_redirect_ip6t $udp_proxy_mode $udp_port TPROXY) 2>/dev/null - fi - else - msg2="${msg}不代理UDP" - fi - echolog " - ${msg2}" - } - $ipt_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp -j RETURN - $ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp -j RETURN 2>/dev/null - done - unset enabled sid remarks sources tcp_proxy_mode udp_proxy_mode tcp_no_redir_ports udp_no_redir_ports tcp_redir_ports udp_redir_ports tcp_node udp_node dns_mode dns_forward v2ray_dns_mode dns_doh dns_client_ip dns_query_strategy - unset _ip _mac _iprange _ipset _ip_or_mac rule_list tcp_port udp_port tcp_node_remark udp_node_remark config_file - unset ipt_tmp msg msg2 - unset redirect_dns_port - done - unset socks_port redir_port dns_port dnsmasq_port - unset ipt_tmp msg msg2 - } - - # 加载TCP默认代理模式 - local ipt_tmp=$ipt_n - if [ "$TCP_PROXY_MODE" != "disable" ]; then - [ "$TCP_NO_REDIR_PORTS" != "disable" ] && { - $ipt_tmp -A PSW $(comment "默认") -p tcp -m multiport --dport $TCP_NO_REDIR_PORTS -j RETURN - $ip6t_m -A PSW $(comment "默认") -p tcp -m multiport --dport $TCP_NO_REDIR_PORTS -j RETURN - } - - ipt_tmp=$ipt_n - [ "$TCP_NODE" != "nil" ] && { - msg="TCP默认代理:使用TCP节点[$(config_n_get $TCP_NODE remarks)] [$(get_action_chain_name $TCP_PROXY_MODE)]" - if [ -n "${is_tproxy}" ]; then - ipt_tmp=$ipt_m - msg="${msg}(TPROXY:${TCP_REDIR_PORT})代理" - else - msg="${msg}(REDIRECT:${TCP_REDIR_PORT})代理" - fi - [ "$TCP_NO_REDIR_PORTS" != "disable" ] && msg="${msg}除${TCP_NO_REDIR_PORTS}外的" - msg="${msg}所有端口" - $ipt_tmp -A PSW $(comment "默认") -p tcp -d $FAKE_IP $(REDIRECT $TCP_REDIR_PORT $is_tproxy) - $ipt_tmp -A PSW $(comment "默认") -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST) $(REDIRECT $TCP_REDIR_PORT $is_tproxy) - $ipt_tmp -A PSW $(comment "默认") -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST) $(REDIRECT $TCP_REDIR_PORT $is_tproxy) - $ipt_tmp -A PSW $(comment "默认") -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ipt $TCP_PROXY_MODE $TCP_REDIR_PORT $is_tproxy) - - [ "$accept_icmp" = "1" ] && { - $ipt_n -A PSW $(comment "默认") -p icmp -d $FAKE_IP $(REDIRECT) - $ipt_n -A PSW $(comment "默认") -p icmp $(dst $IPSET_SHUNTLIST) $(REDIRECT) - $ipt_n -A PSW $(comment "默认") -p icmp $(dst $IPSET_BLACKLIST) $(REDIRECT) - $ipt_n -A PSW $(comment "默认") -p icmp $(get_redirect_ipt $TCP_PROXY_MODE) - } - - if [ "$PROXY_IPV6" == "1" ]; then - $ip6t_m -A PSW $(comment "默认") -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST6) $(REDIRECT $TCP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "默认") -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST6) $(REDIRECT $TCP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "默认") -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ip6t $TCP_PROXY_MODE $TCP_REDIR_PORT TPROXY) - [ "$accept_icmpv6" = "1" ] && $ip6t_n -A PSW $(comment "默认") -p ipv6-icmp $(get_redirect_ip6t $TCP_PROXY_MODE) - fi - - echolog "${msg}" - } - fi - $ipt_n -A PSW $(comment "默认") -p tcp -j RETURN - $ipt_m -A PSW $(comment "默认") -p tcp -j RETURN - $ip6t_m -A PSW $(comment "默认") -p tcp -j RETURN - - # 加载UDP默认代理模式 - if [ "$UDP_PROXY_MODE" != "disable" ]; then - [ "$UDP_NO_REDIR_PORTS" != "disable" ] && { - $ipt_m -A PSW $(comment "默认") -p udp -m multiport --dport $UDP_NO_REDIR_PORTS -j RETURN - $ip6t_m -A PSW $(comment "默认") -p udp -m multiport --dport $UDP_NO_REDIR_PORTS -j RETURN - } - - [ "$UDP_NODE" != "nil" -o "$TCP_UDP" = "1" ] && { - [ "$TCP_UDP" = "1" ] && [ "$UDP_NODE" = "nil" ] && UDP_NODE=$TCP_NODE - msg="UDP默认代理:使用UDP节点[$(config_n_get $UDP_NODE remarks)] [$(get_action_chain_name $UDP_PROXY_MODE)](TPROXY:${UDP_REDIR_PORT})代理" - [ "$UDP_NO_REDIR_PORTS" != "disable" ] && msg="${msg}除${UDP_NO_REDIR_PORTS}外的" - msg="${msg}所有端口" - $ipt_m -A PSW $(comment "默认") -p udp -d $FAKE_IP $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "默认") -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST) $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "默认") -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST) $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "默认") -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ipt $UDP_PROXY_MODE $UDP_REDIR_PORT TPROXY) - - if [ "$PROXY_IPV6_UDP" == "1" ]; then - $ip6t_m -A PSW $(comment "默认") -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST6) $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "默认") -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST6) $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "默认") -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ip6t $UDP_PROXY_MODE $UDP_REDIR_PORT TPROXY) - fi - - echolog "${msg}" - } - fi - $ipt_m -A PSW $(comment "默认") -p udp -j RETURN - $ip6t_m -A PSW $(comment "默认") -p udp -j RETURN -} - -filter_haproxy() { - for item in ${haproxy_items}; do - local ip=$(get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1) - ipset -q add $IPSET_VPSIPLIST $ip - done - echolog "加入负载均衡的节点到ipset[$IPSET_VPSIPLIST]直连完成" -} - -filter_vpsip() { - uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSIPLIST &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R - uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSIPLIST6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R - echolog "加入所有节点到ipset[$IPSET_VPSIPLIST]直连完成" -} - -filter_node() { - local proxy_node=${1} - local stream=$(echo ${2} | tr 'A-Z' 'a-z') - local proxy_port=${3} - - filter_rules() { - local node=${1} - local stream=${2} - local _proxy=${3} - local _port=${4} - local _is_tproxy ipt_tmp msg msg2 - - if [ -n "$node" ] && [ "$node" != "nil" ]; then - local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z') - local address=$(config_n_get $node address) - local port=$(config_n_get $node port) - ipt_tmp=$ipt_n - _is_tproxy=${is_tproxy} - [ "$stream" == "udp" ] && _is_tproxy="TPROXY" - if [ -n "${_is_tproxy}" ]; then - ipt_tmp=$ipt_m - msg="TPROXY" - else - msg="REDIRECT" - fi - else - echolog " - 节点配置不正常,略过" - return 0 - fi - - local ADD_INDEX=$FORCE_INDEX - for _ipt in 4 6; do - [ "$_ipt" == "4" ] && _ipt=$ipt_tmp - [ "$_ipt" == "6" ] && _ipt=$ip6t_m - $_ipt -n -L PSW_OUTPUT | grep -q "${address}:${port}" - if [ $? -ne 0 ]; then - unset dst_rule - local dst_rule=$(REDIRECT 1 MARK) - msg2="按规则路由(${msg})" - [ "$_ipt" == "$ipt_m" -o "$_ipt" == "$ip6t_m" ] || { - dst_rule=$(REDIRECT $_port) - msg2="套娃使用(${msg}:${port} -> ${_port})" - } - [ -n "$_proxy" ] && [ "$_proxy" == "1" ] && [ -n "$_port" ] || { - ADD_INDEX=$(RULE_LAST_INDEX "$_ipt" PSW_OUT_PUT "$IPSET_VPSIPLIST" $FORCE_INDEX) - dst_rule=" -j RETURN" - msg2="直连代理" - } - $_ipt -I PSW_OUTPUT $ADD_INDEX $(comment "${address}:${port}") -p $stream -d $address --dport $port $dst_rule 2>/dev/null - else - msg2="已配置过的节点," - fi - done - msg="[$?]$(echo ${2} | tr 'a-z' 'A-Z')${msg2}使用链${ADD_INDEX},节点(${type}):${address}:${port}" - #echolog " - ${msg}" - } - - local proxy_protocol=$(config_n_get $proxy_node protocol) - local proxy_type=$(echo $(config_n_get $proxy_node type nil) | tr 'A-Z' 'a-z') - [ "$proxy_type" == "nil" ] && echolog " - 节点配置不正常,略过!:${proxy_node}" && return 0 - if [ "$proxy_protocol" == "_balancing" ]; then - #echolog " - 多节点负载均衡(${proxy_type})..." - proxy_node=$(config_n_get $proxy_node balancing_node) - for _node in $proxy_node; do - filter_rules "$_node" "$stream" - done - elif [ "$proxy_protocol" == "_shunt" ]; then - #echolog " - 按请求目的地址分流(${proxy_type})..." - local default_node=$(config_n_get $proxy_node default_node _direct) - local main_node=$(config_n_get $proxy_node main_node nil) - if [ "$main_node" != "nil" ]; then - filter_rules $main_node $stream - else - if [ "$default_node" != "_direct" ] && [ "$default_node" != "_blackhole" ]; then - filter_rules $default_node $stream - fi - fi -:</dev/null | grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort -u | grep -v 0.0.0.0 | grep -v 127.0.0.1) - [ -n "$ISP_DNS" ] && { - #echolog "处理 ISP DNS 例外..." - for ispip in $ISP_DNS; do - ipset -! add $IPSET_WHITELIST $ispip >/dev/null 2>&1 & - #echolog " - 追加到白名单:${ispip}" - done - } - - local ISP_DNS6=$(cat $RESOLVFILE 2>/dev/null | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | awk -F % '{print $1}' | awk -F " " '{print $2}'| sort -u | grep -v -Fx ::1 | grep -v -Fx ::) - [ -n "$ISP_DNS" ] && { - #echolog "处理 ISP IPv6 DNS 例外..." - for ispip6 in $ISP_DNS; do - ipset -! add $IPSET_WHITELIST6 $ispip6 >/dev/null 2>&1 & - #echolog " - 追加到白名单:${ispip6}" - done - } - - # 过滤所有节点IP - filter_vpsip > /dev/null 2>&1 & - filter_haproxy > /dev/null 2>&1 & - - accept_icmp=$(config_t_get global_forwarding accept_icmp 0) - accept_icmpv6=$(config_t_get global_forwarding accept_icmpv6 0) - - local tcp_proxy_way=$(config_t_get global_forwarding tcp_proxy_way redirect) - if [ "$tcp_proxy_way" = "redirect" ]; then - unset is_tproxy - elif [ "$tcp_proxy_way" = "tproxy" ]; then - is_tproxy="TPROXY" - fi - - $ipt_n -N PSW - $ipt_n -A PSW $(dst $IPSET_LANIPLIST) -j RETURN - $ipt_n -A PSW $(dst $IPSET_VPSIPLIST) -j RETURN - $ipt_n -A PSW $(dst $IPSET_WHITELIST) -j RETURN - $ipt_n -A PSW -m mark --mark 0xff -j RETURN - - PR_INDEX=$(RULE_LAST_INDEX "$ipt_n" PREROUTING prerouting_rule 1) - PR_INDEX=$((PR_INDEX + 1)) - [ "$accept_icmp" = "1" ] && $ipt_n -I PREROUTING $PR_INDEX -p icmp -j PSW - [ -z "${is_tproxy}" ] && $ipt_n -I PREROUTING $PR_INDEX -p tcp -j PSW - unset PR_INDEX - - $ipt_n -N PSW_OUTPUT - $ipt_n -A PSW_OUTPUT $(dst $IPSET_LANIPLIST) -j RETURN - $ipt_n -A PSW_OUTPUT $(dst $IPSET_VPSIPLIST) -j RETURN - $ipt_n -A PSW_OUTPUT $(dst $IPSET_WHITELIST) -j RETURN - $ipt_n -A PSW_OUTPUT -m mark --mark 0xff -j RETURN - - $ipt_n -N PSW_REDIRECT - $ipt_n -I PREROUTING 1 -j PSW_REDIRECT - - $ipt_m -N PSW_DIVERT - $ipt_m -A PSW_DIVERT -j MARK --set-mark 1 - $ipt_m -A PSW_DIVERT -j ACCEPT - - PR_INDEX=$(RULE_LAST_INDEX "$ipt_m" PREROUTING mwan3 1) - $ipt_m -I PREROUTING $PR_INDEX -p tcp -m socket -j PSW_DIVERT - - $ipt_m -N PSW - $ipt_m -A PSW $(dst $IPSET_LANIPLIST) -j RETURN - $ipt_m -A PSW $(dst $IPSET_VPSIPLIST) -j RETURN - $ipt_m -A PSW $(dst $IPSET_WHITELIST) -j RETURN - $ipt_m -A PSW -m mark --mark 0xff -j RETURN - $ipt_m -A PSW $(dst $IPSET_BLOCKLIST) -j DROP - - PR_INDEX=$((PR_INDEX + 1)) - $ipt_m -I PREROUTING $PR_INDEX -j PSW - unset PR_INDEX - - $ipt_m -N PSW_OUTPUT - $ipt_m -A PSW_OUTPUT $(dst $IPSET_LANIPLIST) -j RETURN - $ipt_m -A PSW_OUTPUT $(dst $IPSET_VPSIPLIST) -j RETURN - $ipt_m -A PSW_OUTPUT $(dst $IPSET_WHITELIST) -j RETURN - $ipt_m -A PSW_OUTPUT -m mark --mark 0xff -j RETURN - $ipt_m -A PSW_OUTPUT $(dst $IPSET_BLOCKLIST) -j DROP - - ip rule add fwmark 1 lookup 100 - ip route add local 0.0.0.0/0 dev lo table 100 - - [ "$accept_icmpv6" = "1" ] && { - $ip6t_n -N PSW - $ip6t_n -A PSW $(dst $IPSET_LANIPLIST6) -j RETURN - $ip6t_n -A PSW $(dst $IPSET_VPSIPLIST6) -j RETURN - $ip6t_n -A PSW $(dst $IPSET_WHITELIST6) -j RETURN - $ip6t_n -A PSW -m mark --mark 0xff -j RETURN - $ip6t_n -A PREROUTING -p ipv6-icmp -j PSW - - $ip6t_n -N PSW_OUTPUT - $ip6t_n -A PSW_OUTPUT $(dst $IPSET_LANIPLIST6) -j RETURN - $ip6t_n -A PSW_OUTPUT $(dst $IPSET_VPSIPLIST6) -j RETURN - $ip6t_n -A PSW_OUTPUT $(dst $IPSET_WHITELIST6) -j RETURN - $ip6t_n -A PSW_OUTPUT -m mark --mark 0xff -j RETURN - } - - $ip6t_m -N PSW_DIVERT - $ip6t_m -A PSW_DIVERT -j MARK --set-mark 1 - $ip6t_m -A PSW_DIVERT -j ACCEPT - - PR_INDEX=$(RULE_LAST_INDEX "$ip6t_m" PREROUTING mwan3 1) - $ip6t_m -I PREROUTING $PR_INDEX -p tcp -m socket -j PSW_DIVERT - - $ip6t_m -N PSW - $ip6t_m -A PSW $(dst $IPSET_LANIPLIST6) -j RETURN - $ip6t_m -A PSW $(dst $IPSET_VPSIPLIST6) -j RETURN - $ip6t_m -A PSW $(dst $IPSET_WHITELIST6) -j RETURN - $ip6t_m -A PSW -m mark --mark 0xff -j RETURN - $ip6t_m -A PSW $(dst $IPSET_BLOCKLIST6) -j DROP - - PR_INDEX=$((PR_INDEX + 1)) - $ip6t_m -I PREROUTING $PR_INDEX -j PSW - unset PR_INDEX - - $ip6t_m -N PSW_OUTPUT - $ip6t_m -A PSW_OUTPUT $(dst $IPSET_LANIPLIST6) -j RETURN - $ip6t_m -A PSW_OUTPUT $(dst $IPSET_VPSIPLIST6) -j RETURN - $ip6t_m -A PSW_OUTPUT $(dst $IPSET_WHITELIST6) -j RETURN - $ip6t_m -A PSW_OUTPUT -m mark --mark 0xff -j RETURN - $ip6t_m -A PSW_OUTPUT $(dst $IPSET_BLOCKLIST6) -j DROP - $ip6t_m -A OUTPUT -j PSW_OUTPUT - - ip -6 rule add fwmark 1 table 100 - ip -6 route add local ::/0 dev lo table 100 - - # 加载路由器自身代理 TCP - if [ "$TCP_NODE" != "nil" ]; then - local ipt_tmp=$ipt_n - local blist_r=$(REDIRECT $TCP_REDIR_PORT) - local p_r=$(get_redirect_ipt $LOCALHOST_TCP_PROXY_MODE $TCP_REDIR_PORT) - echolog "加载路由器自身 TCP 代理..." - - if [ -n "${is_tproxy}" ]; then - echolog " - 启用 TPROXY 模式" - ipt_tmp=$ipt_m - blist_r=$(REDIRECT 1 MARK) - p_r=$(get_redirect_ipt $LOCALHOST_TCP_PROXY_MODE 1 MARK) - fi - - [ "$accept_icmp" = "1" ] && { - $ipt_n -A OUTPUT -p icmp -j PSW_OUTPUT - $ipt_n -A PSW_OUTPUT -p icmp -d $FAKE_IP $(REDIRECT) - $ipt_n -A PSW_OUTPUT -p icmp $(dst $IPSET_SHUNTLIST) $(REDIRECT) - $ipt_n -A PSW_OUTPUT -p icmp $(dst $IPSET_BLACKLIST) $(REDIRECT) - $ipt_n -A PSW_OUTPUT -p icmp $(get_redirect_ipt $TCP_PROXY_MODE ) - } - - [ "$accept_icmpv6" = "1" ] && { - $ip6t_n -A OUTPUT -p ipv6-icmp -j PSW_OUTPUT - $ip6t_n -A PSW_OUTPUT -p ipv6-icmp $(get_redirect_ip6t $TCP_PROXY_MODE) - } - - _proxy_tcp_access() { - [ -n "${2}" ] || return 0 - ipset -q test $IPSET_LANIPLIST ${2} - [ $? -eq 0 ] && { - echolog " - 上游 DNS 服务器 ${2} 已在直接访问的列表中,不强制向 TCP 代理转发对该服务器 TCP/${3} 端口的访问" - return 0 - } - if [ -n "${is_tproxy}" ]; then - $ipt_m -I PSW_OUTPUT -p tcp -d ${2} --dport ${3} $(REDIRECT 1 MARK) - $ipt_m -I PSW $(comment "本机") -p tcp -i lo -d ${2} --dport ${3} $(REDIRECT $TCP_REDIR_PORT TPROXY) - else - $ipt_n -I PSW_OUTPUT -p tcp -d ${2} --dport ${3} $(REDIRECT $TCP_REDIR_PORT) - fi - echolog " - [$?]将上游 DNS 服务器 ${2}:${3} 加入到路由器自身代理的 TCP 转发链" - } - - [ "$use_tcp_node_resolve_dns" == 1 ] && hosts_foreach DNS_FORWARD _proxy_tcp_access 53 - $ipt_tmp -A OUTPUT -p tcp -j PSW_OUTPUT - [ "$TCP_NO_REDIR_PORTS" != "disable" ] && { - $ipt_tmp -A PSW_OUTPUT -p tcp -m multiport --dport $TCP_NO_REDIR_PORTS -j RETURN - $ipt_tmp -A PSW_OUTPUT -p tcp -m multiport --sport $TCP_NO_REDIR_PORTS -j RETURN - $ip6t_m -A PSW_OUTPUT -p tcp -m multiport --dport $TCP_NO_REDIR_PORTS -j RETURN - $ip6t_m -A PSW_OUTPUT -p tcp -m multiport --sport $TCP_NO_REDIR_PORTS -j RETURN - echolog " - [$?]不代理TCP 端口:$TCP_NO_REDIR_PORTS" - } - - $ipt_tmp -A PSW_OUTPUT -p tcp -d $FAKE_IP $blist_r - $ipt_tmp -A PSW_OUTPUT -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST) $blist_r - $ipt_tmp -A PSW_OUTPUT -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST) $blist_r - $ipt_tmp -A PSW_OUTPUT -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $p_r - - if [ -n "${is_tproxy}" ]; then - $ipt_m -A PSW $(comment "本机") -p tcp -i lo -d $FAKE_IP $(REDIRECT $TCP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "本机") -p tcp -i lo $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST) $(REDIRECT $TCP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "本机") -p tcp -i lo $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST) $(REDIRECT $TCP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "本机") -p tcp -i lo $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ipt $LOCALHOST_TCP_PROXY_MODE $TCP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "本机") -p tcp -i lo -j RETURN - fi - - if [ "$PROXY_IPV6" == "1" ]; then - $ip6t_m -A PSW_OUTPUT -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST6) $(REDIRECT 1 MARK) - $ip6t_m -A PSW_OUTPUT -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST6) $(REDIRECT 1 MARK) - $ip6t_m -A PSW_OUTPUT -p tcp $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ip6t $LOCALHOST_TCP_PROXY_MODE 1 MARK) - - $ip6t_m -A PSW $(comment "本机") -p tcp -i lo $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST6) $(REDIRECT $TCP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "本机") -p tcp -i lo $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST6) $(REDIRECT $TCP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "本机") -p tcp -i lo $(factor $TCP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ip6t $LOCALHOST_TCP_PROXY_MODE $TCP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "本机") -p tcp -i lo -j RETURN - fi - fi - - # 过滤Socks节点 - [ "$SOCKS_ENABLED" = "1" ] && { - local ids=$(uci show $CONFIG | grep "=socks" | awk -F '.' '{print $2}' | awk -F '=' '{print $1}') - #echolog "分析 Socks 服务所使用节点..." - local id enabled node port msg num - for id in $ids; do - enabled=$(config_n_get $id enabled 0) - [ "$enabled" == "1" ] || continue - node=$(config_n_get $id node nil) - port=$(config_n_get $id port 0) - msg="Socks 服务 [:${port}]" - if [ "$node" == "nil" ] || [ "$port" == "0" ]; then - msg="${msg} 未配置完全,略过" - elif [ "$(echo $node | grep ^tcp)" ]; then - #eval "node=\${TCP_NODE}" - #msg="${msg} 使用与 TCP 代理自动切换${num} 相同的节点,延后处理" - continue - else - filter_node $node TCP > /dev/null 2>&1 & - filter_node $node UDP > /dev/null 2>&1 & - fi - #echolog " - ${msg}" - done - } - - # 处理轮换节点的分流或套娃 - local node port stream switch - for stream in TCP UDP; do - eval "node=\${${stream}_NODE}" - eval "port=\${${stream}_REDIR_PORT}" - #echolog "分析 $stream 代理自动切换..." - [ "$node" == "tcp" ] && [ "$stream" == "UDP" ] && { - eval "node=\${TCP_NODE}" - eval "port=\${TCP_REDIR_PORT}" - } - if [ "$node" != "nil" ]; then - filter_node $node $stream $port > /dev/null 2>&1 & - fi - done - - # 加载路由器自身代理 UDP - if [ "$UDP_NODE" != "nil" -o "$TCP_UDP" = "1" ]; then - echolog "加载路由器自身 UDP 代理..." - _proxy_udp_access() { - [ -n "${2}" ] || return 0 - ipset -q test $IPSET_LANIPLIST ${2} - [ $? == 0 ] && { - echolog " - 上游 DNS 服务器 ${2} 已在直接访问的列表中,不强制向 UDP 代理转发对该服务器 UDP/${3} 端口的访问" - return 0 - } - $ipt_m -I PSW_OUTPUT -p udp -d ${2} --dport ${3} $(REDIRECT 1 MARK) - $ipt_m -I PSW $(comment "本机") -p udp -i lo -d ${2} --dport ${3} $(REDIRECT $UDP_REDIR_PORT TPROXY) - echolog " - [$?]将上游 DNS 服务器 ${2}:${3} 加入到路由器自身代理的 UDP 转发链" - } - [ "$use_udp_node_resolve_dns" == 1 ] && hosts_foreach DNS_FORWARD _proxy_udp_access 53 - $ipt_m -A OUTPUT -p udp -j PSW_OUTPUT - [ "$UDP_NO_REDIR_PORTS" != "disable" ] && { - $ipt_m -A PSW_OUTPUT -p udp -m multiport --dport $UDP_NO_REDIR_PORTS -j RETURN - $ipt_m -A PSW_OUTPUT -p udp -m multiport --sport $UDP_NO_REDIR_PORTS -j RETURN - $ip6t_m -A PSW_OUTPUT -p udp -m multiport --dport $UDP_NO_REDIR_PORTS -j RETURN - $ip6t_m -A PSW_OUTPUT -p udp -m multiport --sport $UDP_NO_REDIR_PORTS -j RETURN - echolog " - [$?]不代理 UDP 端口:$UDP_NO_REDIR_PORTS" - } - $ipt_m -A PSW_OUTPUT -p udp -d $FAKE_IP $(REDIRECT 1 MARK) - $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST) $(REDIRECT 1 MARK) - $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST) $(REDIRECT 1 MARK) - $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ipt $LOCALHOST_UDP_PROXY_MODE 1 MARK) - - $ipt_m -A PSW $(comment "本机") -p udp -i lo -d $FAKE_IP $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "本机") -p udp -i lo $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST) $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "本机") -p udp -i lo $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST) $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "本机") -p udp -i lo $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ipt $LOCALHOST_UDP_PROXY_MODE $UDP_REDIR_PORT TPROXY) - $ipt_m -A PSW $(comment "本机") -p udp -i lo -j RETURN - - if [ "$PROXY_IPV6_UDP" == "1" ]; then - $ip6t_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST6) $(REDIRECT 1 MARK) - $ip6t_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST6) $(REDIRECT 1 MARK) - $ip6t_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ip6t $LOCALHOST_UDP_PROXY_MODE 1 MARK) - - $ip6t_m -A PSW $(comment "本机") -p udp -i lo $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST6) $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "本机") -p udp -i lo $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST6) $(REDIRECT $UDP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "本机") -p udp -i lo $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(get_redirect_ip6t $LOCALHOST_UDP_PROXY_MODE $UDP_REDIR_PORT TPROXY) - $ip6t_m -A PSW $(comment "本机") -p udp -i lo -j RETURN - fi - fi - - # 加载ACLS - load_acl - - # dns_hijack "force" - - echolog "防火墙规则加载完成!" -} - -del_firewall_rule() { - for ipt in "$ipt_n" "$ipt_m" "$ip6t_n" "$ip6t_m"; do - for chain in "PREROUTING" "OUTPUT"; do - for i in $(seq 1 $($ipt -nL $chain | grep -c PSW)); do - local index=$($ipt --line-number -nL $chain | grep PSW | head -1 | awk '{print $1}') - $ipt -D $chain $index 2>/dev/null - done - done - for chain in "PSW" "PSW_OUTPUT" "PSW_DIVERT" "PSW_REDIRECT"; do - $ipt -F $chain 2>/dev/null - $ipt -X $chain 2>/dev/null - done - done - - ip rule del fwmark 1 lookup 100 2>/dev/null - ip route del local 0.0.0.0/0 dev lo table 100 2>/dev/null - - ip -6 rule del fwmark 1 table 100 2>/dev/null - ip -6 route del local ::/0 dev lo table 100 2>/dev/null - - destroy_ipset $IPSET_LANIPLIST - destroy_ipset $IPSET_VPSIPLIST - #destroy_ipset $IPSET_SHUNTLIST - #destroy_ipset $IPSET_GFW - #destroy_ipset $IPSET_CHN - #destroy_ipset $IPSET_BLACKLIST - destroy_ipset $IPSET_BLOCKLIST - destroy_ipset $IPSET_WHITELIST - - destroy_ipset $IPSET_LANIPLIST6 - destroy_ipset $IPSET_VPSIPLIST6 - #destroy_ipset $IPSET_SHUNTLIST6 - #destroy_ipset $IPSET_GFW6 - #destroy_ipset $IPSET_CHN6 - #destroy_ipset $IPSET_BLACKLIST6 - destroy_ipset $IPSET_BLOCKLIST6 - destroy_ipset $IPSET_WHITELIST6 - - echolog "删除相关防火墙规则完成。" -} - -flush_ipset() { - del_firewall_rule - destroy_ipset $IPSET_VPSIPLIST $IPSET_SHUNTLIST $IPSET_GFW $IPSET_CHN $IPSET_BLACKLIST $IPSET_BLOCKLIST $IPSET_WHITELIST $IPSET_LANIPLIST - destroy_ipset $IPSET_VPSIPLIST6 $IPSET_SHUNTLIST6 $IPSET_GFW6 $IPSET_CHN6 $IPSET_BLACKLIST6 $IPSET_BLOCKLIST6 $IPSET_WHITELIST6 $IPSET_LANIPLIST6 - /etc/init.d/passwall reload -} - -flush_include() { - echo '#!/bin/sh' >$FWI -} - -gen_include() { - flush_include - extract_rules() { - local _ipt="iptables" - [ "$1" == "6" ] && _ipt="ip6tables" - - echo "*$2" - ${_ipt}-save -t $2 | grep "PSW" | grep -v "\-j PSW$" | grep -v "socket \-j PSW_DIVERT$" | sed -e "s/^-A \(OUTPUT\|PREROUTING\)/-I \1 1/" - echo 'COMMIT' - } - cat <<-EOF >> $FWI - iptables-save -c | grep -v "PSW" | iptables-restore -c - iptables-restore -n <<-EOT - $(extract_rules 4 nat) - $(extract_rules 4 mangle) - EOT - ip6tables-save -c | grep -v "PSW" | ip6tables-restore -c - ip6tables-restore -n <<-EOT - $(extract_rules 6 nat) - $(extract_rules 6 mangle) - EOT - - PR_INDEX=\$(/usr/share/passwall/iptables.sh RULE_LAST_INDEX "$ipt_n" PREROUTING prerouting_rule 1) - PR_INDEX=\$((PR_INDEX + 1)) - [ "$accept_icmp" = "1" ] && $ipt_n -I PREROUTING \$PR_INDEX -p icmp -j PSW - [ -z "${is_tproxy}" ] && $ipt_n -I PREROUTING \$PR_INDEX -p tcp -j PSW - - PR_INDEX=\$(/usr/share/passwall/iptables.sh RULE_LAST_INDEX "$ipt_m" PREROUTING mwan3 1) - $ipt_m -I PREROUTING \$PR_INDEX -p tcp -m socket -j PSW_DIVERT - - PR_INDEX=\$((PR_INDEX + 1)) - $ipt_m -I PREROUTING \$PR_INDEX -j PSW - - [ "$accept_icmpv6" = "1" ] && $ip6t_n -A PREROUTING -p ipv6-icmp -j PSW - - PR_INDEX=\$(/usr/share/passwall/iptables.sh RULE_LAST_INDEX "$ip6t_m" PREROUTING mwan3 1) - $ip6t_m -I PREROUTING \$PR_INDEX -p tcp -m socket -j PSW_DIVERT - - PR_INDEX=\$((PR_INDEX + 1)) - $ip6t_m -I PREROUTING \$PR_INDEX -j PSW - EOF - return 0 -} - -start() { - add_firewall_rule - gen_include -} - -stop() { - del_firewall_rule - flush_include -} - -case $1 in -RULE_LAST_INDEX) - shift - RULE_LAST_INDEX "$@" - ;; -flush_ipset) - flush_ipset - ;; -stop) - stop - ;; -start) - start - ;; -*) ;; -esac diff --git a/luci-app-passwall/root/usr/share/passwall/monitor.sh b/luci-app-passwall/root/usr/share/passwall/monitor.sh deleted file mode 100755 index 4c5dd958..00000000 --- a/luci-app-passwall/root/usr/share/passwall/monitor.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/sh - -CONFIG=passwall -TMP_PATH=/tmp/etc/$CONFIG -TMP_BIN_PATH=$TMP_PATH/bin -TMP_SCRIPT_FUNC_PATH=$TMP_PATH/script_func -TMP_ID_PATH=$TMP_PATH/id -LOCK_FILE_DIR=/tmp/lock -LOCK_FILE=${LOCK_FILE_DIR}/${CONFIG}_script.lock - -config_n_get() { - local ret=$(uci -q get $CONFIG.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -config_t_get() { - local index=0 - [ -n "$4" ] && index=$4 - local ret=$(uci -q get $CONFIG.@$1[$index].$2 2>/dev/null) - echo ${ret:=$3} -} - -ENABLED=$(config_t_get global enabled 0) -[ "$ENABLED" != 1 ] && return 1 -ENABLED=$(config_t_get global_delay start_daemon 0) -[ "$ENABLED" != 1 ] && return 1 -sleep 58s -while [ "$ENABLED" -eq 1 ]; do - [ -f "$LOCK_FILE" ] && { - sleep 6s - continue - } - touch $LOCK_FILE - - #TCP - [ -f "$TMP_ID_PATH/TCP" ] && { - TCP_NODE=$(cat $TMP_ID_PATH/TCP) - if [ "$TCP_NODE" != "nil" ]; then - #kcptun - use_kcp=$(config_n_get $TCP_NODE use_kcp 0) - if [ $use_kcp -gt 0 ]; then - icount=$(pgrep -af "$TMP_BIN_PATH/kcptun.*(tcp|TCP)" | grep -v -E 'acl/|acl_' | wc -l) - if [ $icount = 0 ]; then - /etc/init.d/$CONFIG restart - exit 0 - fi - fi - icount=$(pgrep -af "$TMP_BIN_PATH.*(tcp|TCP)" | grep -v -E 'kcptun|acl/|acl_' | wc -l) - if [ $icount = 0 ]; then - /etc/init.d/$CONFIG restart - exit 0 - fi - fi - } - - #udp - [ -f "$TMP_ID_PATH/UDP" ] && { - UDP_NODE=$(cat $TMP_ID_PATH/UDP) - if [ "$UDP_NODE" != "nil" ]; then - [ "$UDP_NODE" == "tcp" ] && UDP_NODE=$TCP_NODE - icount=$(pgrep -af "$TMP_BIN_PATH.*(udp|UDP)" | grep -v -E 'acl/|acl_' | wc -l) - if [ $icount = 0 ]; then - /etc/init.d/$CONFIG restart - exit 0 - fi - fi - } - - #dns - dns_mode=$(config_t_get global dns_mode) - if [ "$dns_mode" == "pdnsd" ] || [ "$dns_mode" == "dns2socks" ] || [ "$dns_mode" == "v2ray" ] || [ "$dns_mode" == "xray" ]; then - icount=$(netstat -apn | grep 7913 | wc -l) - if [ $icount = 0 ]; then - /etc/init.d/$CONFIG restart - exit 0 - fi - fi - - [ -f "$TMP_BIN_PATH/chinadns-ng" ] && { - if ! pgrep -x "$TMP_BIN_PATH/chinadns-ng" > /dev/null 2>&1; then - /etc/init.d/$CONFIG restart - exit 0 - fi - } - - #haproxy - use_haproxy=$(config_t_get global_haproxy balancing_enable 0) - if [ $use_haproxy -gt 0 ]; then - if ! pgrep -x "$TMP_BIN_PATH/haproxy" > /dev/null 2>&1; then - /etc/init.d/$CONFIG restart - exit 0 - fi - fi - - #socks - for filename in $(ls ${TMP_SCRIPT_FUNC_PATH} | grep "SOCKS_*"); do - cfgid=$(echo $filename | awk -F 'SOCKS_' '{print $2}') - icount=$(pgrep -af "$TMP_BIN_PATH.*$cfgid" | grep -i 'socks' | wc -l) - if [ $icount = 0 ]; then - cmd=$(cat ${TMP_SCRIPT_FUNC_PATH}/${filename}) - /usr/share/${CONFIG}/app.sh ${cmd} - fi - done - - rm -f $LOCK_FILE - sleep 58s -done diff --git a/luci-app-passwall/root/usr/share/passwall/rule_update.lua b/luci-app-passwall/root/usr/share/passwall/rule_update.lua deleted file mode 100755 index d4ba811e..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rule_update.lua +++ /dev/null @@ -1,420 +0,0 @@ -#!/usr/bin/lua - -require 'nixio' -require 'luci.sys' -local luci = luci -local ucic = luci.model.uci.cursor() -local jsonc = require "luci.jsonc" -local i18n = require "luci.i18n" -local name = 'passwall' -local arg1 = arg[1] -local b64decode = nixio.bin.b64decode - -local rule_path = "/usr/share/" .. name .. "/rules" -local reboot = 0 -local gfwlist_update = 0 -local chnroute_update = 0 -local chnroute6_update = 0 -local chnlist_update = 0 -local geoip_update = 0 -local geosite_update = 0 - --- match comments/title/whitelist/ip address/excluded_domain -local comment_pattern = "^[!\\[@]+" -local ip_pattern = "^%d+%.%d+%.%d+%.%d+" -local ip4_ipset_pattern = "^%d+%.%d+%.%d+%.%d+[%/][%d]+$" -local ip6_ipset_pattern = ":-[%x]+%:+[%x]-[%/][%d]+$" -local domain_pattern = "([%w%-%_]+%.[%w%.%-%_]+)[%/%*]*" -local excluded_domain = {"apple.com","sina.cn","sina.com.cn","baidu.com","byr.cn","jlike.com","weibo.com","zhongsou.com","youdao.com","sogou.com","so.com","soso.com","aliyun.com","taobao.com","jd.com","qq.com","bing.com"} - -local gfwlist_url = ucic:get(name, "@global_rules[0]", "gfwlist_url") or {"https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt"} -local chnroute_url = ucic:get(name, "@global_rules[0]", "chnroute_url") or {"https://ispip.clang.cn/all_cn.txt"} -local chnroute6_url = ucic:get(name, "@global_rules[0]", "chnroute6_url") or {"https://ispip.clang.cn/all_cn_ipv6.txt"} -local chnlist_url = ucic:get(name, "@global_rules[0]", "chnlist_url") or {"https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf","https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf","https://cdn.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/google.china.conf"} -local geoip_api = "https://api.github.com/repos/Loyalsoldier/v2ray-rules-dat/releases/latest" -local geosite_api = "https://api.github.com/repos/Loyalsoldier/v2ray-rules-dat/releases/latest" -local v2ray_asset_location = ucic:get_first(name, 'global_rules', "v2ray_location_asset", "/usr/share/v2ray/") - -local log = function(...) - if arg1 then - local result = os.date("%Y-%m-%d %H:%M:%S: ") .. table.concat({...}, " ") - if arg1 == "log" then - local f, err = io.open("/tmp/log/passwall.log", "a") - if f and err == nil then - f:write(result .. "\n") - f:close() - end - elseif arg1 == "print" then - print(result) - end - end -end - --- base64decoding -local function base64Decode(text) - local raw = text - if not text then return '' end - text = text:gsub("%z", "") - text = text:gsub("%c", "") - text = text:gsub("_", "/") - text = text:gsub("-", "+") - local mod4 = #text % 4 - text = text .. string.sub('====', mod4 + 1) - local result = b64decode(text) - if result then - return result:gsub("%z", "") - else - return raw - end -end - --- trim -local function trim(text) - if not text or text == "" then return "" end - return (string.gsub(text, "^%s*(.-)%s*$", "%1")) -end - --- curl -local function curl(url, file) - local cmd = "curl -skL -w %{http_code} --retry 3 --connect-timeout 3 '" .. url .. "'" - if file then - cmd = cmd .. " -o " .. file - end - local stdout = luci.sys.exec(cmd) - - if file then - return tonumber(trim(stdout)) - else - return trim(stdout) - end -end - ---check excluded domain -local function check_excluded_domain(value) - for k,v in ipairs(excluded_domain) do - if value:find(v) then - return true - end - end -end - -local function line_count(file_path) - local num = 0 - for _ in io.lines(file_path) do - num = num + 1 - end - return num; -end - ---fetch rule -local function fetch_rule(rule_name,rule_type,url,exclude_domain) - local sret = 200 - local sret_tmp = 0 - local domains = {} - local file_tmp = "/tmp/" ..rule_name.. "_tmp" - local download_file_tmp = "/tmp/" ..rule_name.. "_dl" - local unsort_file_tmp = "/tmp/" ..rule_name.. "_unsort" - - log(rule_name.. " 开始更新...") - for k,v in ipairs(url) do - sret_tmp = curl(v, download_file_tmp..k) - if sret_tmp == 200 then - if rule_name == "gfwlist" then - local domains = {} - local gfwlist = io.open(download_file_tmp..k, "r") - local decode = base64Decode(gfwlist:read("*all")) - gfwlist:close() - - gfwlist = io.open(download_file_tmp..k, "w") - gfwlist:write(decode) - gfwlist:close() - end - - if rule_type == "domain" and exclude_domain == true then - for line in io.lines(download_file_tmp..k) do - if not (string.find(line, comment_pattern) or string.find(line, ip_pattern) or check_excluded_domain(line)) then - local start, finish, match = string.find(line, domain_pattern) - if (start) then - domains[match] = true - end - end - end - - elseif rule_type == "domain" then - for line in io.lines(download_file_tmp..k) do - if not (string.find(line, comment_pattern) or string.find(line, ip_pattern)) then - local start, finish, match = string.find(line, domain_pattern) - if (start) then - domains[match] = true - end - end - end - - elseif rule_type == "ip4" then - local out = io.open(unsort_file_tmp, "a") - for line in io.lines(download_file_tmp..k) do - local start, finish, match = string.find(line, ip4_ipset_pattern) - if (start) then - out:write(string.format("%s\n", line)) - end - end - out:close() - - elseif rule_type == "ip6" then - local out = io.open(unsort_file_tmp, "a") - for line in io.lines(download_file_tmp..k) do - local start, finish, match = string.find(line, ip6_ipset_pattern) - if (start) then - out:write(string.format("%s\n", line)) - end - end - out:close() - - end - os.remove(download_file_tmp..k) - else - sret = 0 - log(rule_name.. " 第" ..k.. "条规则:" ..v.. "下载失败!") - end - end - - if sret == 200 then - if rule_type == "domain" then - local out = io.open(unsort_file_tmp, "w") - for k,v in pairs(domains) do - out:write(string.format("%s\n", k)) - end - out:close() - end - luci.sys.call("cat " ..unsort_file_tmp.. " | sort -u > "..file_tmp) - os.remove(unsort_file_tmp) - end - - if sret == 200 then - local old_md5 = luci.sys.exec("echo -n $(md5sum " .. rule_path .. "/" ..rule_name.. " | awk '{print $1}')") - local new_md5 = luci.sys.exec("echo -n $([ -f '" ..file_tmp.. "' ] && md5sum " ..file_tmp.." | awk '{print $1}')") - if old_md5 ~= new_md5 then - local count = line_count(file_tmp) - luci.sys.exec("mv -f "..file_tmp .. " " ..rule_path .. "/" ..rule_name) - reboot = 1 - log(rule_name.. " 更新成功,总规则数 " ..count.. " 条。") - else - log(rule_name.. " 版本一致,无需更新。") - end - else - log(rule_name.. " 文件下载失败!") - end - os.remove(file_tmp) - return 0 -end - -local function fetch_gfwlist() - fetch_rule("gfwlist","domain",gfwlist_url,true) -end - -local function fetch_chnroute() - fetch_rule("chnroute","ip4",chnroute_url,false) -end - -local function fetch_chnroute6() - fetch_rule("chnroute6","ip6",chnroute6_url,false) -end - -local function fetch_chnlist() - fetch_rule("chnlist","domain",chnlist_url,false) -end - ---获取geoip -local function fetch_geoip() - --请求geoip - xpcall(function() - local json_str = curl(geoip_api) - local json = jsonc.parse(json_str) - if json.tag_name and json.assets then - for _, v in ipairs(json.assets) do - if v.name and v.name == "geoip.dat.sha256sum" then - local sret = curl(v.browser_download_url, "/tmp/geoip.dat.sha256sum") - if sret == 200 then - local f = io.open("/tmp/geoip.dat.sha256sum", "r") - local content = f:read() - f:close() - f = io.open("/tmp/geoip.dat.sha256sum", "w") - f:write(content:gsub("geoip.dat", "/tmp/geoip.dat"), "") - f:close() - - if nixio.fs.access(v2ray_asset_location .. "geoip.dat") then - luci.sys.call(string.format("cp -f %s %s", v2ray_asset_location .. "geoip.dat", "/tmp/geoip.dat")) - if luci.sys.call('sha256sum -c /tmp/geoip.dat.sha256sum > /dev/null 2>&1') == 0 then - log("geoip 版本一致,无需更新。") - return 1 - end - end - for _2, v2 in ipairs(json.assets) do - if v2.name and v2.name == "geoip.dat" then - sret = curl(v2.browser_download_url, "/tmp/geoip.dat") - if luci.sys.call('sha256sum -c /tmp/geoip.dat.sha256sum > /dev/null 2>&1') == 0 then - luci.sys.call(string.format("mkdir -p %s && cp -f %s %s", v2ray_asset_location, "/tmp/geoip.dat", v2ray_asset_location .. "geoip.dat")) - reboot = 1 - log("geoip 更新成功。") - return 1 - else - log("geoip 更新失败,请稍后再试。") - end - break - end - end - end - break - end - end - end - end, - function(e) - end) - - return 0 -end - ---获取geosite -local function fetch_geosite() - --请求geosite - xpcall(function() - local json_str = curl(geosite_api) - local json = jsonc.parse(json_str) - if json.tag_name and json.assets then - for _, v in ipairs(json.assets) do - if v.name and v.name == "geosite.dat.sha256sum" then - local sret = curl(v.browser_download_url, "/tmp/geosite.dat.sha256sum") - if sret == 200 then - local f = io.open("/tmp/geosite.dat.sha256sum", "r") - local content = f:read() - f:close() - f = io.open("/tmp/geosite.dat.sha256sum", "w") - f:write(content:gsub("geosite.dat", "/tmp/geosite.dat"), "") - f:close() - - if nixio.fs.access(v2ray_asset_location .. "geosite.dat") then - luci.sys.call(string.format("cp -f %s %s", v2ray_asset_location .. "geosite.dat", "/tmp/geosite.dat")) - if luci.sys.call('sha256sum -c /tmp/geosite.dat.sha256sum > /dev/null 2>&1') == 0 then - log("geosite 版本一致,无需更新。") - return 1 - end - end - for _2, v2 in ipairs(json.assets) do - if v2.name and v2.name == "geosite.dat" then - sret = curl(v2.browser_download_url, "/tmp/geosite.dat") - if luci.sys.call('sha256sum -c /tmp/geosite.dat.sha256sum > /dev/null 2>&1') == 0 then - luci.sys.call(string.format("mkdir -p %s && cp -f %s %s", v2ray_asset_location, "/tmp/geosite.dat", v2ray_asset_location .. "geosite.dat")) - reboot = 1 - log("geosite 更新成功。") - return 1 - else - log("geosite 更新失败,请稍后再试。") - end - break - end - end - end - break - end - end - end - end, - function(e) - end) - - return 0 -end - -if arg[2] then - if arg[2]:find("gfwlist") then - gfwlist_update = 1 - end - if arg[2]:find("chnroute") then - chnroute_update = 1 - end - if arg[2]:find("chnroute6") then - chnroute6_update = 1 - end - if arg[2]:find("chnlist") then - chnlist_update = 1 - end - if arg[2]:find("geoip") then - geoip_update = 1 - end - if arg[2]:find("geosite") then - geosite_update = 1 - end -else - gfwlist_update = ucic:get_first(name, 'global_rules', "gfwlist_update", 1) - chnroute_update = ucic:get_first(name, 'global_rules', "chnroute_update", 1) - chnroute6_update = ucic:get_first(name, 'global_rules', "chnroute6_update", 1) - chnlist_update = ucic:get_first(name, 'global_rules', "chnlist_update", 1) - geoip_update = ucic:get_first(name, 'global_rules', "geoip_update", 1) - geosite_update = ucic:get_first(name, 'global_rules', "geosite_update", 1) -end -if gfwlist_update == 0 and chnroute_update == 0 and chnroute6_update == 0 and chnlist_update == 0 and geoip_update == 0 and geosite_update == 0 then - os.exit(0) -end - -log("开始更新规则...") -if tonumber(gfwlist_update) == 1 then - xpcall(fetch_gfwlist,function(e) - log(e) - log(debug.traceback()) - log('更新gfwlist发生错误...') - end) -end - -if tonumber(chnroute_update) == 1 then - xpcall(fetch_chnroute,function(e) - log(e) - log(debug.traceback()) - log('更新chnroute发生错误...') - end) -end - -if tonumber(chnroute6_update) == 1 then - xpcall(fetch_chnroute6,function(e) - log(e) - log(debug.traceback()) - log('更新chnroute6发生错误...') - end) -end - -if tonumber(chnlist_update) == 1 then - xpcall(fetch_chnlist,function(e) - log(e) - log(debug.traceback()) - log('更新chnlist发生错误...') - end) -end - -if tonumber(geoip_update) == 1 then - log("geoip 开始更新...") - local status = fetch_geoip() - os.remove("/tmp/geoip.dat") - os.remove("/tmp/geoip.dat.sha256sum") -end - -if tonumber(geosite_update) == 1 then - log("geosite 开始更新...") - local status = fetch_geosite() - os.remove("/tmp/geosite.dat") - os.remove("/tmp/geosite.dat.sha256sum") -end - -ucic:set(name, ucic:get_first(name, 'global_rules'), "gfwlist_update", gfwlist_update) -ucic:set(name, ucic:get_first(name, 'global_rules'), "chnroute_update", chnroute_update) -ucic:set(name, ucic:get_first(name, 'global_rules'), "chnroute6_update", chnroute6_update) -ucic:set(name, ucic:get_first(name, 'global_rules'), "chnlist_update", chnlist_update) -ucic:set(name, ucic:get_first(name, 'global_rules'), "geoip_update", geoip_update) -ucic:set(name, ucic:get_first(name, 'global_rules'), "geosite_update", geosite_update) -ucic:save(name) -luci.sys.call("uci commit " .. name) - -if reboot == 1 then - log("重启服务,应用新的规则。") - luci.sys.call("/usr/share/" .. name .. "/iptables.sh flush_ipset > /dev/null 2>&1 &") -end -log("规则更新完毕...") diff --git a/luci-app-passwall/root/usr/share/passwall/rules/block_host b/luci-app-passwall/root/usr/share/passwall/rules/block_host deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-passwall/root/usr/share/passwall/rules/block_ip b/luci-app-passwall/root/usr/share/passwall/rules/block_ip deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-passwall/root/usr/share/passwall/rules/chnlist b/luci-app-passwall/root/usr/share/passwall/rules/chnlist deleted file mode 100644 index 8593a509..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/chnlist +++ /dev/null @@ -1,68011 +0,0 @@ -0-100.com -0-6.com -00.net -000.link -00000.host -00042.com -00058.com -0006266.com -0007.net -000714.xyz -000dn.com -000e.com -000wx.com -001.com -001133.app -0012482.com -001cndc.com -001daima.com -001en.com -001jm.com -001job.com -001kd.com -001pp.com -001tech.com -001town.com -00290777.com -002lzj.com -0033.com -0037wan.com -00394.net -003store.com -004218.com -004678.com -00544.com -0056.cc -0061.com.au -00615.net -00791.com -007hd.com -007manhua.com -007qu.com -007shoes.com -007swz.com -007yx.com -008008008.cc -008008789.com -00817.com -0082tv.com -0082tv.net -008321.com -00852wm.com -00853.la -0086crane.com -0086l.com -0086org.com -0088-0880.com -0088dns.com -008gj.com -009.com -0098118.com -00991901.com -0099524.com -009y.com -00bx.com -00cdn.com -00cdn.xyz -00cf.com -00cha.com -00cha.net -00ic.com -00it.net -00ksw.net -00lewen.com -00red.com -00tera.com -00txt.com -00wv.com -01-123.com -01-cf.com -010123456.com -010155.net -0101shop.com -01095113.com -010bianhu.com -010bjzs.com -010byyy.com -010cns.com -010dsmzyy.com -010hetongls.com -010jianzhan.com -010jing-pc.com -010lf.com -0110m.com -0119.com -0123401234.com -0123456789.biz -0123456789.com -0135135.com -01368.com -01368u.com -013767.com -0138.com -013888.com -014.cc -014999k.com -016272.com -016sf.com -01bz.wang -01caijing.com -01faxing.com -01happy.com -01home.com -01hour.com -01hr.com -01hrheibei.com -01isp.com -01isp.net -01jzw.com -01ke.com -01ki.com -01p.com -01retail.com -01rv.com -01tao.com -01teacher.com -01tingshu.com -01ue.com -01w.com -01water.com -01wb.com -01wed.com -01yo.com -01yun.com -01zhuanche.com -020.com -020.net -0208.com -020banjia.net -020h.com -020job.com -020ym.com -020zp.net -021-atp.com -021-cz.com -021-tp.com -021-zszx.com -021.com -021.net -0214.com -0214vip.com -02156506666.net -02163.com -021bolang.com -021clean.com -021dianyuan.com -021dzjx.com -021east.com -021fx.com -021gjhb.com -021hly.org -021ja.com -021jingwei.com -021jingwu.com -021js.com -021lawfirm.com -021networks.com -021phone.com -021ren.com -021sports.com -021tk.com -021yongzhuo.com -021zu.com -022003.com -0221155.com -0222z6.com -022china.com -022ee.com -022meishu.com -022s.com -022shui.com -022sunny.com -022v.com -023086.com -02345678.com -023buy.com -023che.com -023cq.cc -023dir.com -023dns.com -023gayss.com -023gaywz.com -023gmdk.com -023lvyou.com -023sm.com -023up.com -023wg.com -023yts.com -023zp.com -0243811.com -0243855.com -0245.cc -0245.org -024888.net -02489.com -024anfang.com -024bj.com -024bxkj.com -024eps.com -024feida.com -024frde.com -024fuchan.com -024fuwu.com -024fzy.com -024grc.com -024heyi.com -024hh.com -024hp.com -024hpg.com -024huada.com -024zihai.com -024zol.com -024zxw.com -02516.com -025ct.com -025ebaidu.com -025kaiyi.com -025nj.com -025sc.com -025xingshi.net -025xl.com -025zp.com -026idc.com -0270.cc -02712122.com -02727.com -02766667777.com -027accp.com -027aige.com -027art.com -027cgb.com -027chuxun.com -027cloud.com -027down.com -027eat.com -027fcyy.com -027hcss.com -027hhl.com -027hpedu.com -027hpit.com -027htxt.com -027hxj.com -027hxzy.com -027hy.com -027idc.com -027jsxh.com -027jz.cc -027one.com -027qyy.com -027tc.net -027tianle.com -027tianlong.com -027tytpf.com -027wcbyy.com -027xf.com -027yunwei.com -027yx.com -027zhan.com -027zpw.com -0283home.com -028brother.com -028hema.com -028hr.org -028ip.com -028kuaidai.com -028office.com -028pxw.com -029558.com -029900.com -029jiuda.com -029judao.com -029k.com -029lintong.com -029rencai.com -029shw.com -029weichen.com -029wsw.com -029yjy.com -029yljj.com -029yuezi.com -029zp.com -029zx.net -02edu.com -02kdid.com -02lu.com -02o.pw -02shu.cc -02shu.com -02wan.com -02wq.com -030303.com -030mall.com -0310cn.com -0310it.com -0311wifi.com -0312of.com -0314.online -0316.cc -031v.com -032069.com -0328.com -033033.com -0335e.com -0335wl.com -03412.com -03414.com -034666.com -0349.info -035110000.com -0351data.com -0351fdc.com -0352fang.com -0352g.com -0355fk.com -0356f.com -0357hz.com -0368.com -036yx.com -0371wang.com -037201.com -037398.com -0375art.com -0376news.com -0377cw.com -0378zz.com -0379home.com -0379pfw.com -03964.com -03dq.com -03k.org -03nq.com -0411.com -041188888.com -0411e.com -0411hd.com -041234b.com -0417gou.com -0421wcbzk.com -0427.com -0430.com -0431cn.com -0437.com -044045.com -04486.com -0452e.com -0453.com -0455zd.com -0460.com -0470a.com -0470fcw.com -0471fcw.com -0472.com -0479xx.com -05087.com -051058.com -0510syedu.com -0511w.com -0512118114.com -0512bis.com -0512fangchan.com -0512pearl.com -0512s.com -0512xiangcheng.com -0512zp.com -0513.net -0513.org -0513011.com -0513syedu.com -0513zs.com -0514.com -0514rj.com -051591.com -0515auto.com -0515syedu.com -0515yc.tv -0516k.com -0517.net -0517999.com -0517cw.com -0517w.com -0519114.net -051jk.com -05236.com -0523tx.net -0523zp.com -0523zz.com -05273.com -0527zz.com -052yx.com -0531.com -053135.com -0531jb.com -0531soso.com -0531welt.com -0531wt.com -0532.com -0533.com -0535-0411.com -0536qz.com -0537yz.com -0539fc.com -053c.com -054057.com -0543hr.com -0546dsw.com -0546fdc.com -0550.com -055110.com -055178.com -0551fangchan.com -0551hfhybdf.com -0551wl.com -0552jie.com -05532.com -0553fang.com -0553zsw.com -0554news.com -0554zp.com -0555dsw.com -0555fc.com -0558.la -0558zp.com -0559fc.com -0561house.com -0563job.com -0566cn.net -0566fc.com -0566job.com -057.com -0570fc.com -0570zs.com -057191.com -0571dns.com -0571ok.com -0573fang.com -0573ren.com -0574bbs.com -0574nbjg.com -05752008.com -0575bbs.com -0575dsw.com -0575life.com -0575xf.com -0576dsw.com -0577-it.com -0577cnw.com -0577home.net -0577hr.com -0577job.com -0577qiche.com -0578rencai.com -0578zhaopin.com -0579com.com -0579fw.com -058lm.com -0591job.com -05927.com -0592dsw.com -0592jj.com -0592xl.com -05935.com -0593666.com -0594.com -0595job.com -0595rc.com -0596fc.com -0597kk.com -0597ok.com -0597seo.com -0597zp.com -0598777.com -0598job.com -0598rc.com -0599yx.com -05bk.com -05bq.com -05cg.com -05eg.com -05info.com -05vm.com -05wan.com -062616.com -063108.com -0632idc.com -0634.com -06362.com -065201.com -0660hf.com -0663.net -0663job.com -0668.com -068632.com -06abc.com -06climate.com -06dns.com -06game.com -06jm.com -06peng.com -07.la -0701news.com -070210.com -0704tv.com -07073.com -07073h5.com -07073sy.com -07073vr.com -0712fang.com -0712zpw.com -071333.com -0713fang.com -0714news.com -0715fc.com -0715rc.com -0715zp.com -0716fw.com -0716mr.com -07177.com -0717ad.com -0718.cc -071811.cc -0719house.com -0722fc.com -0722zs.com -0724c.com -0728f.com -0730188.com -0730news.com -073122.com -0731a.com -0731cfw.com -0731fdc.com -0731i.com -0731jiaju.com -0731job.com -0731pgy.com -0731rj.com -0731tg.com -0731wan.com -0731zcgs.com -0733news.com -0734zpw.com -0735.com -07358.com -0735jz.com -0735zx.com -0735zz.com -0736fdc.com -0736zz.com -0737rencai.com -0738.cc -0738rc.com -0738www.com -0739tt.com -073img.com -07430743.com -0744tv.com -0745tuan.com -0746news.com -0750rc.com -075238.com -0752qc.com -0755400.com -075577777.com -0755888.com -0755bdqn.com -0755caibao.com -0755car.com -0755haoyu.com -0755hz.com -0755pr.com -0755rc.com -0755si.com -0755ws.com -0755zb.com -0756hhr.com -0756home.com -0756idc.com -0756seo.com -0756tong.com -0757fc.com -0757p.com -0757rc.com -0758net.com -0759job.com -0759k.com -0759yc.com -0760.com -0760bw.com -0760rc.com -076299.com -0762uu.com -0763f.com -0763home.com -0763zuche.com -076650.com -0768.gd -0769che.com -0769net.com -0769sun.com -0769sx.com -0769yp.com -0771.tel -0771bc.com -0771rc.com -0772fang.com -0772job.com -0775fcw.com -0775jzw.com -07890.com -0791look.com -0791quanquan.com -0792jj.net -0792u.com -079768.com -0797rs.com -079y.com -07cn.com -07ren.com -07swz.com -07yue.com -0813fs.com -08172.hk -0817tv.com -0817xm.com -0818tuan.com -0826j.com -082808.com -0832h.com -0832mh.com -083332.com -0835.com -0835meiya.com -0838.com -0838che.com -085.com -0852diaoyu.com -0852job.com -0853rc.com -0854job.com -0855job.com -0856job.com -0857job.com -0859job.com -086580.com -086jx.com -086kd.com -086mai.com -0871gc.com -0890.com -08946.com -0898.net -08980898.com -0898100.com -089858.com -0898888.com -0898cc.com -0898cfw.com -0898hq.com -0898mmf.com -0898qw.com -0898xbfc.com -089u.com -08an.com -08c6.com -08cdn.com -08cms.com -08g.cc -08ky.com -08px.com -0907yy.vip -090expo.com -0912app.com -0914cn.com -0915home.com -091601.com -0916auto.com -0916jzw.com -0917.com -0917e.com -0919123.com -093.com -093.tv -0937js.com -0938net.com -093nd9.com -09418.com -09451.com -094j35.com -095196555.com -0951job.com -09635.com -0967ll.com -09685.com -096hg.com -0991dj.com -0991net.com -0992.cc -09ge.com -09rw.com -09shijue.com -09t55.com -0bug.org -0car0.com -0ctrl.com -0d.work -0daily.com -0dayhack.net -0dayku.com -0dj.net -0duxs.com -0easy.com -0fenbei.com -0fw.net -0g1s.com -0gouche.com -0ju.cc -0kee.com -0rg.pw -0rl.cc -0s8s.com -0x0.biz -0x0.ooo -0x100.club -0x3.me -0x5.me -0x6.me -0x7.me -0x9.me -0xaa55.com -0xff000000.com -0xffffff.org -0xsky.com -0xue.com -0y856.com -1-111-1.com -1-123.com -1-b.tc -1-cs.net -1-du.net -1-yuan.net -1.cc -1.cm -1.cms.s81c.com -1.www.s81c.com -100-tong.com -100.com -100.me -1000.com -10000.com -10000.sh -10000idc.net -10000ja.net -10000job.com -10000link.com -10000shequ.com -10000tc.com -10000yao.com -10001wan.com -1000360.com -10006.info -1000ci.net -1000eb.net -1000fr.net -1000fun.com -1000kan.cc -1000phone.com -1000phone.net -1000plan.org -1000thinktank.com -1000tm.net -1000tuan.com -1000uc.com -1000xuexi.com -1000zhu.com -10010.com -10010400.net -10010hb.net -10010js.com -10010ll.com -10010nm.com -10010vip.cloud -1001g.com -1001hw.com -1001p.com -100580.com -100669.com -1008011.com -1008120.com -10086.win -1008610086.com -10086web.com -100allin.com -100alpha.com -100ask.net -100ask.org -100audio.com -100ayrc.com -100b.cc -100bt.com -100chou.com -100chui.com -100cjc.com -100credit.com -100cup.com -100cyrc.com -100data.com -100du.com -100e.com -100ehui.com -100eshu.com -100exam.com -100fang.com -100font.com -100ftv.com -100hdy.com -100how.com -100huts.com -100ip.net -100jiapu.com -100jm.net -100ksw.com -100legend.com -100loujia.com -100lw.com -100market.net -100md.com -100mian.com -100msh.net -100niangudu.com -100njz.com -100nkrc.com -100pd.cc -100pd.com -100ppi.com -100rjrc.com -100run.com -100shop.com -100skin.com -100steps.net -100stone.com -100sucai.com -100szy.com -100t.com -100tal.com -100tmt.com -100toutiao.com -100try.com -100txt.com -100txy.com -100ulife.com -100wa.com -100web.store -100weidu.com -100wen.cc -100wen.com -100wsanguo.com -100x100w.com -100xfrc.com -100xhs.com -100xiao.com -100xin.com -100xuexi.com -100ye.net -100yigui.com -100yingcai.com -100yiyao.com -100yue.com -100zhuang.com -100zp.com -101.com -10100000.com -10101111.com -10101111cdn.com -101055.com -1010jiajiao.com -1010jz.com -1010pic.com -1010school.com -1010sh.com -101505.com -10155.com -1015600.com -10185.com -101hr.com -101jiajiao.com -101jm.net -101weiqi.com -1020m.com -1024.com -1024.ink -1024g.com -1024ie.com -1024nic.com -1024sj.com -1024sou.com -1024ss.com -1024tools.com -10260.com -102cw.com -102no.com -102pay.com -103153.com -1032.com -10333.com -1035.mobi -1040jy.com -10419.net -105a.com -105mr.com -105zx.com -106.com -10639888.com -1065m.com -106666.cc -1066888.com -106903.com -1073.com -107788.com -1078899.com -107room.com -1080prmvb.com -108101.xyz -108105.xyz -108198.com -10852.com -10852a.com -10865.com -108cun.com -108pk.com -108qi.com -108sq.com -108tian.com -109.com -10909.com -1090ys.com -109863.com -109876543210.com -10bests.com -10besty.com -10danteng.com -10fang.com -10gt.com -10hghg.com -10huan.com -10idc.com -10isp.com -10min.club -10moons.com -10pinping.com -10pkpk.com -10qianwan.com -10s1.com -10sea.com -10soo.com -10tiao.com -10uv.net -10vps.com -10yan.com -10yougame.com -10zk.com -110.com -11000011.com -1109.com -110hack.com -110kj.com -110tm.com -110zhibo.com -1111.buzz -1111.com -111111111.com -11111s.info -111155268.com -1111biao.com -1113.cc -11160066.com -111com.net -111g.com -111jz.com -111qqz.com -111tt.icu -111yao.com -112112.com -1122.com -11222.com -1122dh.com -1123095.com -1124.cc -1128.org -112812.com -1128job.com -112seo.com -112wan.com -1131.cc -11315.com -1133.cc -113989.com -113dh.com -113ya.com -114-91.com -114.114.114.114 -1140086.com -114160.com -11467.com -114best.com -114cb.com -114cbd.com -114chn.com -114desk.com -114dev.com -114dg.com -114dhc.com -114dns.com -114dns.net -114god.com -114hrb.com -114huoche.com -114hzw.com -114ic.com -114ic.net -114jc.com -114jcw.com -114jia.net -114la.com -114ljc.com -114mall.com -114menhu.com -114mo.com -114my.net -114oc.com -114park.com -114photo.com -114piaowu.com -114pinpai.com -114px.com -114qy.com -114s.com -114sf.com -114shouji.com -114study.com -114work.com -114yygh.com -114zhibo.com -114zpw.com -114zw.la -114zw.org -115.com -11544.com -1155.com -1155871.com -1156dns.com -115800.com -1158pk.com -115cdn.net -115img.com -115jk.com -115z.com -1163.com -1166.com -11665.com -11684.com -116cd.com -116kj.com -116yx.com -11773.com -117play.com -117show.com -118114.net -1188.com -1189.tv -118cha.com -118cy.com -118jm.com -118pan.com -118qikan.com -118study.com -118wa.com -119.cc -119120.org -119958.com -119hn.com -119tx.com -119you.com -11chuangye.com -11dns.com -11dream.net -11fldxn.com -11flow.com -11g.com -11gai.com -11h5.com -11job.com -11k.cc -11kf.net -11lx.com -11p88.com -11pdf.com -11player.com -11qp94.com -11space.com -11sun.com -11wyx.com -11xotn7p.com -11ziyun.com -120-job.com -120.net -12011.org -120185.com -120444.com -120ask.com -120askimages.com -120bjgcyy.org -120btc.com -120dxb.com -120fd.com -120gz.com -120hpyy.com -120kaoshi.com -120kid.com -120kq.com -120top.com -120x.net -121121.net -12114job.com -12114rc.com -1212.com -12120.net -1213.me -121314.com -121ask.com -121mu.com -121xia.com -12225.com -12226.com -12227.com -122park.com -123-789.com -123-biyezheng.org -123.cc -123.com -12306.com -12306bypass.com -12308.com -123123.net -12317.com -12317wan.com -1231818.com -12333.com -12333ask.com -12333si.com -1234.cx -1234001.com -1234365r.com -123456.la -123456789.tv -123456img.com -12345good.com -12345good.net -12345szzx.com -12348.net -12349.net -1234biao.com -1234i.com -1234n.com -1234wu.com -1234wu.net -1234ye.com -1234yes.com -12354.com -12355.net -1236.com -12365auto.com -12366.com -12366.net -12366ca.com -12366cn.com -12366ns.com -123ad.com -123admin.com -123aoe.com -123baofeng.com -123bo.com -123buyu.com -123buyu.net -123cha.com -123du.cc -123ems.com -123fc.com -123haitao.com -123hala.com -123hao.com -123hdp.com -123huodong.com -123lihun.com -123meiyan.com -123nice.net -123novel.com -123qibu.com -123qy.com -123slg.com -123ths.com -123u.com -123wangsu.com -123webgame.com -123xun.com -123xyq.com -125.la -12530.com -12540.org -12580.com -12580.net -12580.tv -12580emall.com -12580jnh.com -12580study.com -12581258.com -125a.net -125edu.com -125job.com -125mx.com -125p.com -125uu.com -125visa.com -125y.com -126.am -126.com -126.fm -126.la -126.net -126blog.com -126doc.com -126g.com -126qiye.com -126shu.com -126ts.com -126x.com -126z.net -127.net -1278721.com -12799.com -127tv.com -127xx.com -128456.com -1288.tv -128ic.com -128qd.com -128uu.com -12988.net -129w.com -12edu.com -12gang.com -12h5.com -12jn.com -12ky.com -12pk.com -12sporting.com -12tiku.com -12tv.net -12yao.com -12ym.com -12ystar.com -13.gs -130158.com -131.com -13112.com -1314520sz.com -131458.com -1314mylove.com -1314study.com -1314wallet.com -1314zf.com -131cc.com -1322.com -1325.com -132lawyer.com -1332vp.com -13377608388.com -133998.com -133china.com -133jz.com -13400.com -13482896776.com -135-139.com -135019.com -135031.com -1351.com -135309.com -135650.com -1356789.com -1356net.com -135958.com -135995.com -135bianjiqi.com -135box.com -135editor.com -135edu.com -135fa.com -135plat.com -135top.com -135yuedu.com -136.com -1360.com -136136.com -13636.com -136fc.com -136hr.com -13707.net -13720.com -1374.com -1377.com -137home.com -13800.net -138gzs.com -138top.com -138txt.com -138vps.com -139.com -139000.com -139018.com -1391.com -13910.com -139130.com -139135.com -1392189.com -13937180868.com -13973.com -139cai.com -139cm.com -139down.com -139life.com -139shop.com -139site.com -139talk.com -139w.com -139wanke.com -139y.com -139zhuti.com -13cg.com -13cr.com -13ejob.com -13fuwu.com -13gm.com -13hangpifa.com -13mobi.com -13ww.net -13xiaoshuoa.com -13yx.com -140414.com -140ed8.com -1415926.com -1415926.mobi -1415926pi.com -14294.com -14498.com -144n.com -144yd.com -1451cn.com -14583.com -147xiaoshuo.com -147xs.com -147xs.org -147xz.com -148-law.com -14866.com -1488.com -148com.com -148la.com -14hj.com -14xd.com -150072.com -150075.com -1502828.com -150cn.com -151.hk -15111223344.com -15153.com -15166.com -151733.com -1518.com -151rs.com -151top.com -151web.com -15211223344.com -152500.com -1529.org -15311223344.com -153g.net -1545ts.com -155.com -155175.com -155idc.com -15666.com -156zy.com -157120.com -15803.com -1586f.com -1588.tv -15880.com -158c.com -158jixie.com -159.com -15cdn.com -15daili.com -15gg.com -15gift.com -15hr.com -15in.com -15lu.com -15ms.com -15pb.cc -15shu.net -15solo.com -15str.com -15tianqi.com -15w.com -15wz.com -15xdd.com -15xs.com -15yan.com -15yc.com -15yl.com -160.com -160.me -160edu.net -160yx.com -161580.com -1616.net -16163.com -1616dh.com -1616n.com -1618.com -161gg.com -162.com -1626.com -163.cm -163.com -163.fm -163.gg -163.lu -163.net -1633.com -1633d.com -163663.com -163686.com -1637.com -163cdn.com -163cp.com -163cs.com -163data.net -163fen.com -163jiasu.com -163k.cc -163k.com -163lady.com -163mu.com -163ns.com -163pinglun.com -163py.com -163ren.com -163wh.com -163yu.com -163yun.com -164580.com -16466.com -165123.com -16587.com -16595.com -166.com -166.net -166161.com -1666.com -1668.net -1669la.com -166cai.com -166ks.net -166sh.com -166xs.cc -166zw.com -16768.com -16789.net -16816.com -16838.com -1684.cc -1684sm.com -1688.com -16881616.com -16885.com -16886000.com -16888.com -1688988.com -1688cdn.com -1688eric.com -1688la.com -1688na.com -1688s.com -1688yinhua.com -1688zhuce.com -16899168.com -168cb.com -168chaogu.com -168dc.com -168dns.com -168f.info -168g.com -168hs.com -168job.com -168kk.com -168kn.com -168lyq.com -168pd.com -168rcw.com -168tcw.com -168tea.com -168tex.com -168tochina.com -168w.cc -168yyzj.com -168zcw.com -169.com -169163.com -169369.com -1696.com -16999.com -169gold.net -169it.com -169kang.com -169qk.com -169t.com -16boke.com -16fan.com -16game.net -16hyt.com -16ker.com -16kxsw.com -16lao.com -16lo.com -16manhua.com -16p.com -16pic.com -16rd.com -16sucai.com -16tree.com -16tz.com -16wl.cc -16xcw.com -16xx8.com -16xz.com -17.com -170.com -17025.org -170hi.com -170mv.com -170tao.com -17167.com -1716dy.com -17173.com -17173cdn.com -17173ie.com -17173v.com -17173yx.com -1717518.com -1717kf.com -1717pk.com -1717zy.com -1718001.com -1718china.com -1718world.com -171tax.com -171win.net -171zz.com -17207.com -172222.com -17284.net -172tt.com -173.com -1732.com -1732.net -17348.com -17350.com -17351.com -17369.com -173daxue.com -173eg.com -173fc.com -173funny.com -173iot.com -173kan.com -173kw.com -173on.com -173sy.com -173um.com -173uu.com -173zy.com -17446.com -17558.net -17566.com -1758.com -175club.com -175game.com -175ha.com -175kh.com -175pt.com -175pt.net -175wan.com -175wx.com -17611.com -176616.com -17666.mobi -17673.com -1768.com -176878.com -176quan.com -1773.com -1778.com -177817.com -178-go.com -178.com -178198.com -178448.com -178517.com -1787.ink -178800.cc -17888.com -178bird.com -178bit.com -178du.com -178hui.com -178linux.com -178online.com -178pt.com -178rw.com -179.com -179179.com -17937.net -1794game.com -1797wan.com -17986.net -17989.com -17admob.com -17ai.me -17avr.com -17b.net -17bang.ren -17bdc.com -17bianji.com -17byh.com -17cai.com -17caifu.com -17cdn.com -17ce.com -17chacn.com -17chuang.cc -17coding.info -17cx.com -17daili.com -17dao.com -17dap.com -17dm.com -17doubao.com -17dp.com -17emarketing.com -17fanwen.com -17fee.com -17fengguo.com -17fengyou.com -17fifa.com -17firefox.com -17font.com -17forex.com -17g.com -17game.com -17gaoda.com -17getfun.com -17gwx.com -17haibao.com -17heli.com -17house.com -17hpl.com -17huang.com -17itou.com -17ivr.com -17jita.com -17k.com -17kf.cc -17kgk.com -17kgl.com -17kjs.com -17kk.cc -17koko.com -17kouyu.com -17kshu.net -17kuxun.com -17kxgame.com -17kxs8.com -17kyun.com -17lewan.net -17liuxue.com -17ll.com -17luyouqi.com -17m3.com -17maimaimai.com -17meiwen.com -17mf.com -17miyou.com -17mqw.com -17mr.org -17ms.com -17neo.com -17oh.com -17ok.com -17oko.com -17palyba.com -17pr.com -17python.com -17qcc.com -17qread.com -17rd.com -17rd.net -17read.com -17sct.com -17shouhui.com -17sucai.com -17syi.com -17sysj.com -17tanwan.com -17taotaoa.com -17taotaob.com -17taotaoba.com -17taotaoc.com -17tcw.com -17tigan.com -17track.net -17tui.cc -17tx.com -17u.com -17u.net -17u1u.com -17u7.com -17ugo.com -17uhui.com -17uhui.net -17ukulele.com -17uoo.com -17usoft.com -17usoft.net -17uxi.com -17v5.com -17vsell.com -17wan7.com -17wanba.com -17wanxiao.com -17wclass.com -17weike.com -17weixing.com -17wendao.com -17win.com -17ww.cc -17xgame.com -17xie.com -17xlm.com -17xsj.com -17xueba.com -17xxl.com -17ya.com -17yaoqu.com -17yc.com -17ym.org -17you.com -17yucai.com -17yund.com -17yy.com -17yyba.com -17zhaogong.com -17zhidao.com -17zhiliao.com -17zhuangxiu.com -17ziti.com -17zixue.com -17zub.com -17zuoye.com -17zuoye.net -17zwd.com -18.cm -180102.com -180268900.com -18095.com -180qt.com -181230.com -18183.com -181839.com -1818hm.com -181ps.com -181ue.com -182208.com -183me.com -183post.com -183read.com -18488.com -185185.com -186078.com -1866.tv -18665348887.com -186688.com -1872.net -187801.com -188.com -188158.com -1884933.com -18856.com -188628.com -1886zuche.com -1888.com.mo -188app.xyz -188bifen.com -188cf.net -188diaoche.com -188doc.com -188hi.com -188lanxi.com -188mb.com -188naicha.com -188seo.com -188soft.com -188wan.com -188yd.com -1892139.com -1895m.com -189cha.com -189cube.com -189ebuy.com -189jxt.com -189key.com -189qas.com -189read.com -189read.net -189sec.com -189smarthome.com -189store.com -189works.com -189yo.com -189young.com -18caijing.com -18chonglou.com -18cp.vip -18dao.com -18dao.org -18daxue.com -18dx.com -18guanjia.com -18kf.net -18ladys.com -18link.com -18lipin.com -18o8.com -18ph.com -18qiang.com -18shuwu.com -18shuwu.net -18touch.com -18vps.com -18wk.com -18xs.org -18yangzhi.com -18yl.com -18zg.com -18zhuanqian.com -18zw.com -1905.com -1905kk.com -190757.com -191.com -19196.com -1919game.net -192ly.com -1931.com -1937cn.com -193839.com -193sa.com -1947.cc -1949idc.com -195155.com -195855.com -19687.com -197946.com -197c.com -198254.com -19831110.com -198358.com -198424.com -198503.xyz -198526.com -198526.net -1985cd.com -1985t.com -1987.name -1988.tv -19888.tv -1988wp.com -1988zp.com -198game.com -198game.net -198w.net -199508.com -1997sty.com -1998mall.com -1999019.com -1999dns.com -1999year.com -199it.com -199u2.com -199yt.com -199zw.com -19kan.com -19lou.com -19lou.tw -19mi.net -19ued.com -19where.com -19xsf.com -19yxw.com -19zhan.com -1an.com -1aq.com -1b23.com -1biaozhun.com -1biqu.com -1bus.net -1cae.com -1caifu.com -1caitong.com -1cbn.com -1checker.com -1cloudsp.com -1cnmedia.com -1cno.com -1cnw.com -1d18b.com -1d1d100.com -1d9z.com -1dao99.com -1dfa.com -1diaocha.com -1diary.me -1domedia.com -1drj.com -1drv.ws -1dufish.com -1dume.com -1dusou.com -1dutm.com -1f11.com -1fenda.com -1foo.com -1fqw.com -1g1g.com -1g31.com -1gbru.com -1gesem.com -1ggame.com -1gjh.com -1haigtm.com -1hangye.com -1hcang.com -1hhd.com -1hkt.com -1hshop.com -1huamu.com -1i580.com -1iptv.com -1j1x.net -1jduan.com -1jiaa.com -1jiajie.com -1jian.fun -1juzi.com -1k2k.com -1ka123.com -1kapp.com -1ke.net -1kejian.com -1kg.org -1kj.com -1kj.tv -1kkk.com -1kmxc.com -1kongzhifa.com -1ksz.com -1kuang.com -1kx.me -1kxun.com -1ky.biz -1lan.tv -1lewen.com -1look.tv -1lou.com -1lzs.com -1m.net -1m3d.com -1m6.cc -1m85.com -1mall.com -1mao.cc -1mayi.com -1meiyiliao.com -1mfg.com -1miba.com -1mifudao.com -1mingpian.com -1mishu.com -1mit.com -1mm8.com -1mod.org -1more.com -1mpi.com -1mtime.com -1mushroom.com -1mxian.com -1n11.com -1nami.com -1news.cc -1nongjing.com -1nsou.com -1nyz.com -1o26.com -1p1g.com -1peixun.com -1pm2.com -1ppt.com -1px.wang -1q2q.com -1qa.link -1qfa.com -1qianbao.com -1qwe3r.com -1qyl.com -1r1g.com -1rtb.com -1safety.cc -1sapp.com -1shang.com -1shangbiao.com -1sheng.com -1shoucang.com -1sj.tv -1sohu.com -1stacks.net -1stchip.com -1stjc.com -1t1t.com -1tai.com -1tdw.com -1techan.com -1textile.com -1thx.com -1tieba.com -1ting.com -1tjob.com -1tong.com -1tu-design.com -1tu.com -1tu1.com -1uke.com -1uuc.com -1v1offcn.com -1vp.me -1wandian.com -1wang.com -1wii.com -1x3x.com -1xiezuo.com -1xz.com -1y.com -1y0g.com -1y2y.com -1yabc.com -1yaoda.com -1yb.co -1yd.me -1yee.com -1ykh.com -1yltao.com -1yun.cc -1yyg.com -1zhangdan.com -1zhao.org -1zhe.com -1zhengji.com -1ziyou.com -1zjob.com -1zr.com -1zsoft.com -1zu.com -1zw.com -2-01-5830-0005.cdx.cedexis.net -2-class.com -2-mm.net -2.gy -20.com -200.net -2000200.com -2000888.com -2000dns.com -2000new.com -2000y.net -2002000.xyz -200218.com -2003dns.com -20063365.com -2006q.com -2008php.com -2008red.com -2008zjj.com -2009.name -200call.com -200wan.com -200y.com -201061.com -201201.com -20130123.com -2013xp.com -2014.mobi -2014w7.com -201551.com -2016ruanwen.com -2016win10.com -20174555.com -20176699.com -2017taoke.com -2018jsybh.com -2018zjjly.com -2019cdac.com -2019zjj.com -2020071703.com -202030.com -2020zjj.com -2021.com -2029.cc -202m.com -202wan.com -2048sj.com -204u.com -205.com -206dy.com -2088062.com -2088063.com -208xs.com -2095114.com -20biquge.com -20ju.com -20qu.com -20tc.com -20xs.cc -20xue.com -20z.com -21-mars.com -21-rent.com -21-sun.com -2100xs.com -210166.com -210997.com -210z.com -2115.com -211600.com -211ic.com -211lx.com -211zph.com -212300.com -2125.com -21263.net -2128.net -2133.com -21373.com -2144.com -2144gy.com -214yx.com -21511fff.com -2155.com -217.net -217play.com -217wo.com -218257.com -218318.com -218573.com -218953.com -218996.com -2197079.com -21bcr.com -21bowu.com -21cake.com -21cbr.com -21ccnn.com -21cd.com -21ce.cc -21cn.com -21cn.net -21cnev.com -21cnimg.com -21cnjy.com -21cnjy.net -21cnlunwen.com -21cos.com -21cp.cc -21cp.com -21ctest.com -21dagong.com -21datasheet.com -21dianyuan.com -21edu8.com -21ejob.com -21eline.com -21epub.com -21fid.com -21food.com -21hh.com -21hubei.com -21hubei.net -21hulian.com -21ic.com -21icsearch.com -21ido.com -21jingji.com -21jrr.com -21js.com -21kan.com -21ks.net -21kunpeng.com -21ld.com -21maoyi.com -21mcu.com -21mingshi.com -21mmo.com -21momo.com -21na.com -21nowart.com -21ou.com -21our.com -21qa.net -21qphr.com -21rcw.com -21rv.com -21shhr.com -21shipin.com -21shte.net -21smov.com -21so.com -21softs.com -21spv.com -21sq.org -21tb.com -21tea.com -21tjsports.com -21tx.com -21tyn.com -21uv.com -21vbluecloud.com -21viacloud.com -21vianet.com -21voa.com -21wecan.com -21wenju.com -21wmd.com -21ww.cc -21xc.com -21xianhua.com -21xl.info -21xuema.com -21yod.com -21yq.com -21ytv.com -21yunwei.com -21zbs.com -21zixun.com -21znw.com -22-dns.com -22.com -221234.xyz -2213.com -221316.com -221400job.com -22145.com -221532.com -221576.com -2217.com -221700.com -222.com -222255268.com -222bz.com -222i.net -223.com -223.so -22332008.com -2239.com -224.com -22442400.com -2247.com -224700.com -224922.com -225721.com -2258.com -22588888.com -2264125.com -2264197.com -2265.com -226500.com -226531.com -226y.com -2280.com -2281wa.ren -2288.org -2295.com -2298.com -22baobei.com -22dm.com -22doc.com -22edu.com -22eez.com -22evil.com -22ff.com -22hd.com -22hyk.com -22ja.com -22k9.com -22lianmeng.com -22lrc.com -22m6.com -22mt.in -22n.com -22net.com -22plc.com -22shop.com -22tianbo.com -22vd.com -22zryx.com -22zw.com -22zy.net -2300sjz.com -230596.com -230book.com -230tm.com -231122.com -231327.com -2323u.com -2323wan.com -232485.com -232929.com -233.com -233000.com -2333u.com -23356.com -233863.com -2339.com -233d.net -233i.me -233o.net -233py.com -233wo.com -233ww.net -233xiao.com -233xyx.com -234.com -2344.com -2345.cc -2345.com -2345.gd -2345.net -23456v.com -2345a.com -2345ac.com -2345cdn.net -2345daohang.com -2345download.com -2345ff.com -2345licai.com -2345mbrowser.com -2345soso.com -234du.com -234f.com -2356.com -236400.com -236501.xyz -2366.com -2366app.com -23673.com -236z.com -237y.com -238.com -2380.in -2380.ml -239900.com -23bei.com -23book.com -23class.com -23code.com -23cpc.com -23do.com -23du.com -23ee.net -23hh.net -23job.net -23kmm.com -23ks.com -23lvxing.com -23qb.com -23qb.net -23sk.com -23txt.com -23us.cc -23us.la -23us.so -23us.tv -23us23us.com -23wow.com -23wx.cc -23wx.io -23wx.la -23wxw.com -23xs.cc -23xs.tv -23xsba.cc -23xsw.cc -23yy.com -240yx.com -243ty.com -244101.cc -246546.com -2478.com -248.com -2481e.com -248xyx.com -249m.com -24beta.com -24haowan.com -24hmb.com -24hxf.net -24jz.com -24k99.com -24ker.com -24kplus.com -24kwx.com -24maker.com -24money.com -24om.com -24pay.net -24timemap.com -24u7tos.com -2500.tv -25000li.com -2500city.com -2500fang.com -2500sz.com -250sy.cc -251633.com -2529.com -2529212.com -253.com -253952.com -253u.com -2541.com -254game.com -255616.com -2556r.com -25591.com -2566u8.com -256app.com -256game.com -25752.com -258.com -258288.com -25838yn.com -25847.com -25863.com -2588.tv -25892.com -258c31.com -258ch.com -258fuwu.com -258jituan.com -258sd.com -258zw.com -25992.com -259go.com -25az.com -25dx.com -25game.com -25ku.com -25mao.com -25nc.com -25pp.com -25pyg.com -25un.com -25vi.com -25wy.com -25xm.com -25xt.com -25yi.com -25yz.com -26-degree.com -260.net -263.com -263.net -263em.com -263fc.com -263idc.com -263idc.net -263vps.com -263xmail.com -263y.com -263ytx.com -263zw.com -264006.com -265.com -2656000.com -265660.com -26595.com -265g.com -265o.com -265ps.com -265tv.com -266.la -266555c.com -266wan.com -2678.com -267gg.com -268275.com -26830.com -268363.com -268593.com -2686.com -268612.com -2688.com -268888.net -268v.com -269.net -26923.com -26abc.com -26ef.com -26host.com -26joy.com -26ksw.com -26lady.com -26tc.com -26wp.com -26youxi.com -26yx.com -270top.com -27270.com -2727u.com -273u.com -275st.com -277sy.com -279.com -2799web.com -279wo.com -27aichi.com -27dt.com -27dy.com -27dyy.com -27k.cc -27l.com -27lmfq.com -27lvpai.com -27tj.com -27ws.com -27yx.com -28.com -2800.so -280xs.com -281010.com -28123.com -2827.com -2828dy.com -28493.com -285868.com -2858999.com -285u.com -288288dy.com -288966.com -288idc.com -289.com -2898.com -28beiduo.com -28hotel.com -28ka.com -28kai.cc -28khy.com -28rv.com -28sn.com -28tui.com -28u.org -28weixinqun.com -28xg.com -28xl.com -28y.com -28y3.com -28yj.com -2918.com -29293.com -2929gou.com -293.net -29365.bet -2952.cc -29663.com -296u.com -29797.com -298.name -2980.com -2981.com -298app1.com -2990.com -299906.com -29dnue.com -29gl.com -29xf.com -29yx.com -2abc8.com -2av7.com -2baxb.me -2bkw.com -2broear.com -2brui.com -2btu.com -2caipiao.com -2ccc.com -2chcn.com -2cloo.com -2cname.com -2cor9.com -2cp.com -2cq.com -2cto.com -2cycd.com -2cyxw.com -2cyzx.com -2d3d5d.net -2dan.cc -2danji.com -2df.me -2dfire.com -2dfire.info -2di.cc -2dianying.net -2du.net -2dyou.com -2f.com -2fc5.com -2fz1.com -2gei.com -2gxw.com -2hanju.com -2hanjutv.com -2haohr.com -2heng.xin -2hua.com -2i0vw.com -2ibook.com -2ic.cc -2ita.com -2j88.com -2jianli.com -2k2k.com -2kandy.com -2ktq.com -2ktvb.com -2kxs.org -2kz.net -2liang.net -2lieqi.com -2loveyou.com -2m2j.com -2mdn.net -2mjob.com -2mould.com -2or3m.com -2p.com -2pcdn.com -2pmob.com -2q10.com -2q1q.com -2qbb.com -2r3r.com -2rich.net -2shihui.net -2shoujie.com -2shu8.cc -2sitebbs.com -2smtc.com -2sx.net -2tianxin.com -2tx.com -2uxs.com -2v8d.com -2vc00.com -2w.cm -2weima.com -2xiazai.com -2y9y.com -2yuanma.com -2yuanyy.com -2yun.com -2yup.com -2zfzly.com -2zhk.com -2zimu.com -2zzzzzz.com -30.com -30.net -3000.com -300011facai.xyz -300033.info -3000api.com -3000idc.com -3000soft.net -3000test.com -3000xs.com -3001.net -300113.com -300400.net -300624.com -300avs.com -300hu.com -300p.com -300ppt.com -300zi.com -301688.com -301773.com -301mba.com -301nn.com -301tz.cc -301zhuanfa.com -30200t.com -30200x.com -3023.com -3033c.com -306t.com -308308.com -309yy.com -30c.org -30cgy.com -30cn.net -30dj.com -30ka.com -30nl.net -30play.com -30px.com -30tqyb.com -30w.net -30xz.com -31.com -310game.com -310s-2520.com -310tv.com -310win.com -311100.com -311wan.com -312168.com -312green.com -312yy.com -313.com -3131tyc.com -313515.com -31365y.com -3145.com -314pay.com -3150315.com -315034.com -3158.com -315banzhao.com -315che.com -315fangwei.com -315hyw.com -315i.com -315online.com -315sc.org -315tech.com -315wangdai.com -315weishi.com -315z.net -315zqgl.com -315zw.com -315zww.com -31609.com -317608.com -317hu.com -3188.la -318ek.com -31966.net -3198.com -3199.com -319n.com -31alu.com -31bear.com -31bxg.com -31byq.com -31bzjx.com -31cg.com -31expo.com -31fabu.com -31food.com -31games.com -31gcjx.com -31gear.com -31huiyi.com -31jc.com -31jf.com -31jgj.com -31jiaju.com -31jmw.com -31jxw.com -31knit.com -31mada.com -31martech.com -31meijia.com -31mold.com -31myhome.com -31pump.com -31rzp.com -31seal.com -31sjjx.com -31spjx.com -31taoci.com -31wj.com -31xj.com -31xjd.com -31xs.com -31xs.net -31xs.org -31yarn.com -31yj.com -31zscl.com -320106.com -3207.com -3208.net -320921.com -321200.com -321274.com -321ba.com -321cad.com -321cy.com -321dai.com -321fenx.com -321go.com -321kaishi.com -321key.com -321mh.com -321zou.com -322wl.com -3230.com -3234.com -323507.com -324.com -3250mh.com -3259.com -32800.com -3289.com -328f.com -32bh.com -32ka.com -32r.com -32wan.com -32yx.com -33.com -330123456.com -3304399.com -3304399.net -33105.com -331234.xyz -3312345.com -331ka.com -3320.net -3321.com -3322.cc -3322.net -3322.org -3323.com -3323399.com -332831.com -333-555.com -3331909.com -3332025.com -3332219.com -3332235.com -3332358.com -3332600.com -33331.com -333333.com -3335665.com -33360.com -3336637.com -3336639.com -3336653.com -3336657.com -333666999.club -3336672.com -3336673.com -3336683.com -3336691.com -3337726.com -3337729.com -3337736.com -3337739.com -3337751.com -3337756.com -3337765.com -3337780.com -3337781.com -3337782.com -3337783.com -3337785.com -3338613.com -3338635.com -3338637.com -3338651.com -3338653.com -3338656.com -3338659.com -3338675.com -3338808.com -3338863.com -3339auto.com -333ck.com -333cn.com -333job.com -333ku.com -333lh.cc -333racing.com -333y3.com -334433.xyz -3344u.com -33519.com -3361.com -3366.com -3366.net -336655.com -3366722.com -336688.net -3366img.com -3367.com -337000.com -337y.com -338336.com -3387.com -3389dh.com -3393.com -33app.net -33bus.com -33cp.com -33hei.com -33ip.com -33iq.com -33jianzhi.com -33jzw.com -33ly.com -33map.com -33map.net -33oncall.com -33or.com -33sp.com -33trip.com -33xs.com -33yq.com -34.com -341666666.com -3456.com -3456.tv -34580.com -345fk.com -345k.com -345kam.com -3464.com -3499.co -34dm.com -34ey.cc -34job.com -34l.com -34wl.com -34xiaoshuo.com -35.com -350.com -350.net -3500.com -350200.com -350abc.net -350bbs.net -3511.net -352.com -3520.net -352200.com -3525.com -35321.com -3533.com -3551.com -355xx.com -356123.com -35666c.com -35667.com -356688.com -3566t.com -357.com -357global.com -358.com -35941.com -3595.com -35ba.com -35dalu.com -35dxs.com -35free.net -35go.net -35hw.com -35inter.com -35kds.com -35mei.com -35nic.com -35pic.com -35q.com -35rc.com -35vvv.com -35zww.com -36.la -360-bo.tv -360-g.net -360-game.net -360.cm -360.com -360.net -3600.com -3600.net -3600d.com -3600du.com -360114.com -360118.com -36099.com -360abc.com -360aiyi.com -360anyu.com -360bifen.net -360biji.com -360bike.net -360buy.com -360buyimg.com -360byd.com -360bzl.com -360caifu.com -360cdn.com -360changshi.com -360che.com -360chezhan.com -360cloudwaf.com -360daikuan.com -360dao.com -360ddj.com -360doc.com -360doc1.net -360doc2.net -360doc26.net -360doc28.net -360doc31.net -360doc33.net -360doc35.net -360doc7.net -360docs.net -360doo.com -360down.com -360drift.com -360drm.com -360edu.com -360eet.com -360eol.com -360fdc.com -360gann.com -360gogreen.com -360gtm.com -360guanai.com -360gyc.com -360haoyao.com -360hapi.com -360hitao.com -360hqb.com -360huzhubao.com -360hx.com -360hy.com -360hyzj.com -360ibm.com -360ic.com -360img.cc -360insurancemall.com -360ito.com -360jbw.com -360jk.com -360jq.com -360jrkt.com -360js.com -360jzhm.com -360kad.com -360kan.com -360kb.com -360kuai.com -360kuaixue.com -360kxr.com -360lj.com -360log.com -360longyan.com -360lvyouwang.com -360midi.com -360mkt.com -360os.com -360panyun.com -360powder.com -360qc.com -360qd.com -360qhcdn.com -360qikan.com -360qikan.net -360qws.com -360safe.com -360safedns.com -360sdn.com -360shipu.com -360shouji.com -360shouzhuan.com -360shuashua.com -360sides.com -360sok.com -360stamp.com -360top.com -360totalsecurity.com -360tpcdn.com -360u9.com -360uu.com -360vcloud.com -360vipshop.com -360vps.com -360vrzy.com -360wbl.com -360webcache.com -360weizhan.com -360wscdn.com -360wxw.com -360wyw.com -360wzb.com -360wzws.com -360xh.com -360xiaos.com -360xiehui.com -360xixi.com -360xkw.com -360yfw.com -360youtu.com -360yun.org -360zhai.com -360zhuizhu.com -360zhyx.com -360zimeiti.com -361.cm -361757.com -3618med.com -361a.com -361dai.com -361games.com -361mogame.com -361ser.com -361sport.com -361tuan.com -361way.com -362.cc -363.com -363322014.com -363lm.com -363u.com -364000.com -365128.com -365135.com -36543.com -365500.com -365708.com -36578.com -365960.com -365art.com -365auto.com -365autogo.com -365azw.com -365bj.com -365book.net -365care.com -365cgw.com -365chanlun.com -365che.net -365cyd.net -365daan.com -365dhw.com -365diandao.com -365digitalonline.com -365ditu.com -365dmp.com -365dxlw.com -365editor.com -365eme.com -365essay.com -365exam.com -365f.com -365gangqin.com -365haoshu.com -365heart.com -365htk.com -365huaer.com -365huifu.com -365huo.com -365ibank.com -365icl.com -365ime.com -365inews.com -365j.com -365jcw.com -365jia.com -365jiating.com -365jilin.com -365jq.com -365jw.com -365jz.com -365kan.tv -365kandian.com -365key.com -365master.com -365mini.com -365pcbuy.com -365pk.com -365pp.com -365pr.net -365pub.com -365rili.com -365sec.com -365shequ.com -365sky.com -365ta.com -365tex.com -365ttcz.com -365webcall.com -365wenku.com -365world.com -365xiaoyanzi.com -365xiazai.com -365xuet.com -365xxy.com -365yg.com -365you.com -365yyd.com -365zn.com -365zzd.com -3663.com -366300.com -366ec.com -366translation.com -36706.com -3673.com -367783.net -368mall.com -368tea.com -369110.xyz -3694c.com -369785.com -3699.cc -36992.com -3699wan.com -369beauty.com -369wenku.com -369xxw.com -36code.com -36dianping.com -36dj.com -36hjob.com -36jr.com -36kr.com -36kr.net -36krcdn.com -36krcnd.com -36mh.com -36nu.com -36sfw.com -36tr.com -36ve.net -36w.co -36yc.com -36yh.com -36zhen.com -37.com -370fd.com -370fd.net -371.com -3710167.com -371414.com -37163.com -37168.com -371fangte.com -371house.com -371love.com -371site.com -371zhongyi.com -37201.com -3721cha.com -3721ps.com -3722.com -3727.cc -37274.com -373.com -373135.com -373294.com -3733.com -3737.com -3737g.com -3737k.com -3737tyc.com -373820.com -373978.com -373best.com -373f.com -373house.com -373net.com -373yx.com -375263.com -375buy.com -375vip.com -37770559.com -378699.com -37937.com -3798.com -379941.com -379942.com -37bjw.com -37cos.com -37cs.com -37cu.com -37cy.com -37dh.com -37game2.com -37gogo.com -37gowan.com -37hr.com -37k.com -37live.com -37med.com -37pps.com -37see.com -37tang.com -37wan.com -37wan.net -37wanimg.com -37women.com -37www.com -37yue.com -37yzy.com -37zone.com -3800.cx -380852.com -380871.com -3817.com -381pk.com -38238r.com -3829.com -3837.cc -3839.com -3839app.com -3839app.net -3839img.com -3839pic.com -3839vc.com -3839video.com -383yun.com -3843zz.com -387a.com -3887.com -388kam.com -3892222.com -3895566.com -3899.net -38blog.com -38ejed.com -38fan.com -38hack.com -38hot.net -38hp.com -38hzt.com -38mhw.com -38shishang.com -38xf.com -38xinbo.com -38zj.com -39.net -391065.com -3911.com -391k.com -3937.com -3964.com -39655.com -3975.com -3975ad.com -3975ad.xyz -3975app.com -3975cdn.com -3977s.com -39ask.net -39clean.com -39cs.com -39dg.com -39ej7e.com -39fei.com -39fengliao.com -39h83s.com -39health.com -39hp.com -39jks.com -39kf.com -39kfw.com -39kx.com -39meitu.com -39mo.com -39shubao.com -39sk.com -39txt.com -39ws.com -39yst.com -3a4.net -3a4b5c.com -3aok.com -3avox.com -3b2o.com -3bu.com -3bwx.com -3c2p.com -3chongmen.com -3cjob.com -3conline.com -3cpp.org -3cvrc.com -3cwork.com -3cwu.com -3d-stereovision.com -3d2000.com -3d2013.com -3d2s.com -3d56.net -3d66.com -3daima.com -3dbuyu.com -3dbuyu.net -3dch.net -3ddayin.net -3ddl.net -3ddl.org -3deazer.com -3demoo.com -3dfc.com -3dfrom.com -3dgenomics.org -3dhao.com -3dhat.com -3dhoo.com -3dinlife.com -3dinnet.com -3dkezhan.com -3dkk.com -3dkoukou.com -3dkunshan.com -3dllc.cc -3dlvyou.com -3dly.com -3dmax8.com -3dmaxvip.com -3dmgame.com -3dmgame.hk -3dmgame.net -3dmo.com -3dmomoda.com -3dmumu.com -3dnew.com -3doe.com -3dsc.com -3dsjw.com -3dsnail.com -3dtank.com -3dtvbits.org -3dwebyx.com -3dwwwgame.com -3dxia.com -3dxt.com -3dxuan.com -3dxy.com -3dzyw.com -3e.net -3eyes.org -3fang.com -3fantizi.com -3g-edu.org -3g210.com -3g2win.com -3g3h.org -3g567.com -3g899.net -3gcomet.com -3gdisk.com -3glasses.com -3gmimo.com -3gods.com -3gogogo.com -3gosc.com -3gpda.net -3gpk.net -3gsou.com -3gu.com -3gus.com -3h3.com -3haow.com -3hbox.com -3hgui.com -3j4.com -3jdh.com -3jidi.com -3jke.com -3jrx.com -3k.com -3k3cn.com -3ke.cc -3kid.com -3kk.com -3kmq.com -3ko.com -3kongjian.com -3kr.com -3laohu.com -3laz.com -3lbrand.com -3lian.com -3lii.com -3lsoft.com -3mbang.com -3mh0yvx.com -3miao.net -3miii.com -3mtw.com -3n110.com -3nian.com -3png.com -3poo.com -3q2008.com -3qhouse.com -3qwe.com -3qzone.com -3r66.com -3renhe.net -3rkr.com -3rxing.org -3s.work -3s001.com -3s3w.com -3s78.com -3sbase.com -3scard.com -3shuwu.com -3snews.net -3songshu.com -3stl.com -3tilabs.com -3u.com -3uol.com -3us.com -3uww.cc -3v.do -3vjia.com -3vjuyuan.com -3vkj.net -3vlm.net -3vsheji.com -3wads.com -3wap.cc -3wcoffee.com -3wfocus.com -3wht.com -3wmm.com -3wnb.com -3wsw.com -3wzhaopin.com -3x88.net -3xgd.com -3xiazai.com -3y7h.com -3yoqu.com -3yx.com -3z.cc -3zhijk.com -3zmuseum.com -3zxsw.com -4-xiang.com -4.cm -400-lighting.com -400.com -4000278400.com -4000500521.com -4000600534.com -4000690600.com -4000730138.com -4000892990.com -4001006.com -4001006666.com -4001113900.com -4001581581.com -4001890001.com -4001961200.com -400301.com -400516.com -4006024680.com -4006026717.com -4006055885.com -4006216888.com -4006287387.com -4006339177.com -4006620996.com -4006666688.com -4006695539.com -4006906600.com -4007108885.net -4007112366.com -4007hao.com -4008000000.com -4008005216.com -4008060066.com -4008075595.com -4008103103.com -4008107107.com -4008109886.com -4008117117.com -4008123123.com -4008600011.com -4008800016.com -4008863456.com -4008885166.com -4008885818.com -4009515151.com -4009870870.com -4009991000.com -400cx.com -400gb.com -400iu.com -400jk.com -400jz.com -400lyw.com -400num.com -400qikan.com -400vv.com -400web.com -402333b.com -40279.com -4040001.com -40407.com -404600.com -404forest.com -404mzk.com -404v.com -404wan.com -405400.com -406yx.com -407wan.com -4080dyy.com -40fenzhong.com -40manhua.com -40ya.com -41188.com -411au.com -4124.com -414.com -4143.cc -41443.com -41717.net -4177.com -418999.com -41fa6.icu -41fa8.icu -41fa9.icu -41game.com -41gw.com -41huiyi.com -41ms.com -41tp.com -41wan.com -41xt.com -42069.com -421.co -42144.com -423down.com -4243.net -425300.co -425yx.com -42651.com -426g.com -429006.com -42927bj.com -42927gz.com -42927xz.com -42hq.com -42trip.com -42xz.com -4311.com -4321.com -432520.com -43321.cc -43423manhua.com -435000.com -435200.com -435214.com -4355.com -4366.com -436675.com -4377.com -4377info.com -437zhifu.com -439.cc -4399-xyx.com -4399.com -4399.net -43999yx.com -4399api.com -4399api.net -4399biule.com -4399data.com -4399dmw.com -4399doc.com -4399er.com -4399hhh.com -4399i.net -4399j.com -4399pk.com -4399sj.com -4399swf.com -4399sy.com -4399wanju.com -4399youpai.com -43c55.com -43img.com -43ns.com -43zhubao.com -444333.xyz -444475.com -4444s.vip -44485.com -4449992.com -4480.cc -44800.cc -4492.com -4493.com -44971.com -44dt.com -44england.com -44hyk.com -44pd.com -44pq.cc -44pq.co -44te.com -44vs.com -453600.net -455261.com -45575.com -456.net -4567.tv -4567w.com -456ss.com -457.com -457777c.com -457920.com -458hospital.com -458kq.com -459.org -45app.com -45eee.com -45fan.com -45io.com -45ns.com -45r.com -45win.com -45xie.com -45zw.cc -462546.com -46412.com -4647.org -4658.net -466.com -4662000.com -46644.com -4671580.net -46771313.com -467835.com -4699a.com -46design.com -46kavp.com -46mlsv.com -46z5j5.xyz -47365.com -4738.com -47473.com -474b.com -4765.com -4779.com -47819.com -47gs.com -47jh.com -47ks.com -47zu.com -48.com -4823bbb.com -4846.com -48575.com -485ka.com -4864678.com -4869.cc -48855268.com -48905.com -48hao.net -49321.com -49358.com -49363.com -4948.com -4949567.com -49644913.com -496601.com -497-img.com -497.com -498.net -499-img.com -49app.com -49pic.com -49wanwan.com -49you.com -49yu.com -4a40.com -4apx.com -4aqq.com -4async.com -4bvf.com -4c57.org -4c8t.com -4ci.cc -4cnzz.com -4cun.com -4d4c.com -4dai.com -4db.com -4dtime.com -4everdns.com -4f89.com -4fang.net -4fcom.net -4gfy.com -4ggogo.com -4gh6.com -4glte.org -4gqp.com -4gtoefl.com -4h6s.com -4hgame.com -4hou.com -4hpy.com -4inlook.com -4jplus.com -4k123.com -4kbizhi.com -4khi.com -4kong.com -4kya.com -4kyy.com -4l.hk -4lzx.com -4paradigm.com -4px.com -4pyun.com -4q5q.com -4qx.net -4sjob.com -4sscrm.com -4thetooth.com -4u4v.net -4w8.net -4wad.com -4xiazai.com -4xseo.com -4y4.net -4ye.cc -4yt.net -4yx.com -5-link.com -5.hn -50-jia.com -500.com -5000.com -50004.com -5000yan.com -50018.com -500boss.com -500cache.com -500d.me -500doc.com -500gm.com -500px.me -500sucai.com -500talk.com -500tb.com -500wan.com -500wancache.com -500zhongcai.com -5011.net -501wan.com -50215.com -503118.com -50331.net -503error.com -504pk.com -5054399.com -5054399.net -505gg.com -505uu.com -5066.net -5068.com -5068yx.com -506fhq.com -507777.cc -508843.com -50970.com -50bangzh.com -50fff.net -50pk.com -50pkpk.com -50sht.com -50tu.com -50union.com -50vm.com -50yc.com -50yin.com -50zera.com -50zw.co -50zw.com -50zw.la -50zww.net -51-cf.com -51-jia.com -51-n.com -51.am -51.com -51.design -51.la -51.net -5100.net -51008.com -510560.com -510ka.com -510yh.cc -511.la -511023.com -51110.com -51119.com -51168.tv -5117.com -511718.com -5117tools.com -5118.com -5118img.com -511god.net -511mv.com -511wan.com -511yj.com -5120.com -5120bb.com -51240.com -51269017.com -512play.com -512wx.com -5132.com -513523.com -5137.cc -51386.com -513c51.com -513hjs.com -514193.com -514200.com -51485148.com -51508.com -5151.com -51511.com -515158.com -5151doc.com -5151sc.com -5153.com -51555.net -51569.com -5156edu.com -5156rcw.com -515app.com -515car.com -515fa.com -515ha.com -515ppt.com -51658042.com -51661182.com -51663.net -5166ys.com -516a.com -516edu.com -516ly.com -516tx.com -5173.com -5173cdn.com -517best.com -517dv.com -517ee.com -517hotel.com -517huizhou.com -517huwai.com -517idc.com -517japan.com -517kk.cc -517lppz.com -517ming.com -517mr.com -517rcw.com -517sc.com -517tez.com -517w.com -517xc.com -517zp.com -5184.com -51845.com -5184edu.com -5184pass.com -5185.cc -51864.com -5187g.com -5188.com -5188ab.com -518ad.com -519.best -519397.com -51969.com -51985.net -5199.cc -5199.com -5199658.com -519rv.com -51ade.com -51ads.com -51adxfly.com -51aimei.com -51aistar.com -51aiwan.com -51anidea.com -51ape.com -51app.com -51ask.org -51asm.com -51aspx.com -51auto.com -51autogo.com -51autoimg.com -51awifi.com -51babybuy.com -51baigong.com -51banban.com -51banhui.com -51baoku.com -51baoshui.com -51baoxiu.com -51baozhanggui.com -51bbo.com -51bdtime.com -51besttea.com -51bi.com -51biaoqing.com -51biz.com -51bjrc.com -51bmb.com -51bonli.com -51bos.com -51bras.com -51btceth.com -51btv.com -51bushou.com -51businessview.com -51buy.com -51bxg.com -51bzi.com -51cacg.com -51callcenter.com -51callu.net -51camel.com -51ccdn.com -51cdcs.com -51cdn.com -51chang.com -51changdu.com -51changdu.xyz -51changmi.com -51changshi.com -51changxie.com -51chaoban.com -51checai.com -51chongdian.net -51chost.com -51chuguo.org -51chuli.com -51cir.com -51cjyy.com -51cma.org -51code.com -51cok.com -51comp.com -51coolpad.com -51cpm.com -51credit.com -51csr.com -51css.com -51cto.com -51cube.com -51cunzheng.com -51cxd.com -51daao.com -51dai.com -51daifu.com -51daima.com -51dangpu.com -51daquan.com -51daxueedu.com -51dc.com -51devapp.com -51diangu.com -51din.com -51dingxiao.com -51ditu.com -51dmq.com -51dns.com -51dojoy.com -51dongshi.com -51down.vip -51dpub.com -51drv.com -51dtv.com -51dugou.com -51dumo.com -51dzrc.com -51dzt.com -51dzw.com -51ean.com -51ebo.com -51ebooks.com -51edu.com -51eduline.com -51eim.com -51ejz.com -51ekt.com -51ele.net -51emo.com -51en.com -51epei.com -51eshop.com -51etong.com -51eway.com -51eyun.com -51f.com -51facai.com -51fangan.com -51fankui.com -51fanli.com -51fanli.net -51fdc.com -51feels.com -51feibao.com -51findshop.com -51flrc.com -51fmzg.com -51fpg.com -51fubei.com -51fucai.com -51fund.com -51fxkj.com -51fxzq.com -51fytx.com -51g3.com -51g3.net -51g4.com -51gaifang.com -51gcw.com -51geeks.com -51gfl.com -51gfw.com -51ggd.com -51ggwu.com -51gh.net -51gif.com -51give.org -51gjie.com -51gjj.com -51gme.com -51golife.com -51gongjijin.com -51gouke.com -51goupiao.com -51gowan.com -51gran.com -51great.org -51growup.com -51gsl.com -51guanhuai.com -51guoji.com -51h5.com -51hanghai.com -51hangkong.com -51hanhua.com -51haofu.com -51haojob.com -51hcb.com -51hchc.com -51hcie.com -51hcw.com -51hei.com -51hejia.com -51hika.com -51hjgt.com -51hjk.com -51hlife.net -51hosting.com -51hostonline.com -51hsw.com -51huahong.com -51huanhuan.com -51huaxin.net -51huaya.com -51hunningtu.com -51hvac.com -51hwzy.com -51ias.com -51ibm.com -51idc.com -51ielts.com -51ifind.com -51ifonts.com -51img1.com -51img2.com -51img3.com -51img5.com -51imo.com -51ios.net -51itapp.com -51itstudy.com -51iwifi.com -51ixuejiao.com -51jam.com -51jiabo.com -51jiameng.com -51jianxie.com -51jiaxiao.com -51jiecai.com -51jiemeng.com -51jingke.com -51jingying.com -51jinhuan.com -51jishu.com -51jiuhuo.com -51job.com -51jobcdn.com -51jobdns.com -51joyfish.com -51js.com -51jt.com -51jucaimi.com -51julebu.com -51junshi.com -51juzhai.com -51jyrc.com -51jyzs.com -51kahui.com -51kaiye.com -51kanong.com -51kaowang.com -51kaxun.com -51kehui.com -51kids.com -51kik.com -51kt.com -51ktbyte.com -51kupai.com -51kupin.com -51kywang.com -51la.net -51labour.com -51laizhe.com -51langtu.com -51ldb.com -51ldzx.com -51lexing.com -51lg.com -51lifes.com -51lingji.com -51liucheng.com -51ljms.com -51lucy.com -51lunwenwang.com -51luying.com -51lvh.com -51lyrc.com -51mag.com -51maimiao.com -51maiquan.com -51marryyou.com -51mdq.com -51meigu.com -51meiliao.com -51meishu.com -51microshop.com -51miit.com -51mike.com -51minbingtuan.net -51miz.com -51mkf.com -51mockup.com -51modo.cc -51mokao.com -51mole.com -51moot.net -51mrp.com -51mta.com -51mtw.com -51nac.com -51nazhun.pub -51nb.com -51nicelearn.com -51niux.com -51nod.com -51nuoqi.com -51nwt.com -51ofc.com -51offer.com -51okf.com -51onb.com -51oneone.com -51onion.com -51only.com -51open.net -51opone.com -51ops.com -51osos.com -51pao.net -51papers.com -51pbnet.com -51pec.com -51peptide.com -51pgzs.com -51php.com -51piaozi.com -51pibu.com -51pigai.com -51ping.com -51pintan.com -51pinwei.com -51pjys.com -51pla.com -51pocket.com -51pocket.net -51pos.com -51pot.com -51pptmoban.com -51psj.com -51puer.com -51qc.com -51qc.net -51qianduan.com -51qianguo.com -51qianvisa.com -51qicheng.com -51qilv.com -51qingjiao.com -51qinxue.com -51qqt.com -51qtg.com -51qub.com -51qudao888.com -51qudong.net -51qufx.com -51qumi.com -51qupu.com -51quzhe.com -51rc.com -51rcsl.com -51read.site -51reboot.com -51rencai.com -51render.com -51renpin.com -51renxing.com -51report.com -51rong.com -51rp.com -51rry.com -51rz.com -51rz.org -51sai.com -51sanhu.com -51scb.com -51sdjob.com -51search.net -51seer.com -51self.com -51serive.com -51sgg.cc -51share.net -51shebao.com -51shebao.org -51sheyuan.com -51shiping.com -51shop.ink -51shoubei.com -51shoufei.net -51shoushi.com -51shubiao.com -51shuobo.com -51shyc.com -51signing.com -51simple.com -51sjk.com -51sky.net -51sole.com -51songguo.com -51speeds.com -51spjx.com -51suitui.com -51sxue.com -51syoo.com -51talk.com -51talkenglish.com -51tanbao.com -51tao.com -51taonan.com -51taoshi.com -51taowei.com -51taoyang.com -51tb.me -51test.net -51testing.com -51testing.net -51testing.org -51tfb.com -51tiangou.com -51tie.com -51tietu.net -51tijian.com -51ting.com -51tingyi.com -51toefl.com -51tonglu.com -51tools.info -51toro.com -51touch.com -51toufang.com -51tour.com -51touxiang.com -51tra.com -51tracking.com -51ttxue.com -51tuiyi.com -51tunhuo.com -51tuodao.com -51tuz.com -51tv.com -51tv.net -51tvbao.com -51tvrom.com -51tyty.com -51tz.com -51uc.com -51ukf.com -51uyi.com -51uyun.com -51vhost.net -51vimeo.com -51vip.biz -51vs.com -51vv.com -51wan.com -51wangdai.com -51wanquan.com -51wcity.com -51web.com -51websec.com -51weihu.com -51wendang.com -51wf.com -51wincai.com -51windows.net -51wj.com -51wjrc.com -51wnl-cq.com -51wnl.com -51wofang.com -51world.win -51wp.com -51wtp.com -51wxjz.com -51wydj.com -51wyfl.com -51wyrc.com -51wzg.com -51wzxz.com -51xbl.com -51xbx.com -51xcrc.com -51xgjd.com -51xiancheng.com -51xianwan.com -51xiaohua.com -51xiaolu.com -51xie.com -51xingjy.com -51xpj.com -51xue8.com -51xuetang.com -51xuewen.com -51xuexiaoyi.com -51xumei.com -51xxs.com -51xxziyuan.com -51y5.com -51y5.net -51yabei.com -51yala.com -51yam.com -51yangsheng.com -51yanwang.com -51yasai.com -51yes.com -51yey.com -51yhdai.com -51yilu.com -51yip.com -51yjsteel.com -51ykb.com -51yonggao.com -51you.com -51youcai.com -51youdian.com -51yougo.com -51youth.com -51youz.com -51ys.com -51ysrc.com -51yuansu.com -51yue.net -51yuepin.com -51yueqian.com -51yuexin.com -51yund.com -51yundong.me -51yunli.com -51yuu.com -51zan.com -51zbz.com -51zbz.net -51zd.net -51zhangdan.com -51zhantai.com -51zhaobizhi.com -51zheduoduo.com -51zhengxin.com -51zhi.com -51zhishang.com -51zhiyuan.net -51zhizhao.com -51zhucai.com -51zhujia.com -51zishentang.com -51zixuewang.com -51zjxm.com -51zmt.net -51zpyc.com -51zr.com -51zsjc.com -51ztzj.com -51zupu.com -51zx.com -51zxw.net -51zyrc.com -51zyzy.com -51zzl.com -52-ic.com -520.com -520.net -5200.net -5200cc.com -5200e.com -5200wx.com -520101.com -520520520520520.com -520520bo.com -520730.com -5207758.com -52088.cc -52091w.com -520990.com -520apk.com -520cai.net -520cc.com -520cfc.com -520discount.com -520fx.com -520hhht.com -520im.com -520it.com -520jiabo.com -520jita.com -520lbl.com -520ldf.com -520link.com -520love520.com -520meirenyu.com -520meirong.com -520mingmei.com -520mojing.com -520mwx.com -520sz.com -520wawa.com -520way.com -520wenshen.com -520xbw.com -520xiazai.com -520xp.com -520xst.com -520yidui.com -520z-2.com -520zg.net -520zuowens.com -52112.com -52114.org -52115211.com -5211game.com -52177.com -521che.com -521logo.com -521qw.com -521rmb.com -521ro.com -521szlx.com -521tieba.com -521up.com -52237377.com -522g.com -523333.com -5234444.com -52372.com -523touzi.com -523us.com -523xs.com -525.life -5251.net -5252e.com -5253.com -5254.com -5257.com -5258.net -5258da.com -525jmall.com -5262.com -52676.com -526net.com -527578.com -5277.com -527meeting.com -527pk.com -527u.com -5281.com -52841819.com -528500.com -528529.com -52892.com -528day.com -5293.com -5299shop.com -529c31.com -52ae.cc -52ai.com -52ali88.com -52analysis.com -52article.com -52as.com -52asus.com -52asy.xyz -52audio.com -52ayw.com -52bar.com -52bendi.com -52biquge.com -52bji.com -52bjy.com -52blackberry.com -52bookshop.com -52bqg.com -52bss.com -52bus.com -52by.com -52cake.net -52ch.net -52che.com -52cik.com -52ckd.com -52click.net -52codes.net -52da.com -52daohang.com -52debug.net -52design.com -52dfg.com -52dgs.net -52digua.com -52dmtp.com -52dns.com -52doc.com -52dr.net -52dtv.com -52dyy.com -52dzc.com -52dzxy.com -52ebook.com -52edy.com -52enku.com -52fangzi.com -52flac.com -52fuqing.com -52fuqu.com -52game.org -52gg.com -52ggd.com -52ghai.com -52grz.com -52guixi.com -52gvim.com -52hardware.com -52hejia.com -52help.net -52hibuy.com -52hotel.net -52hrtt.com -52hrttpic.com -52hxw.com -52ig.net -52ij.com -52im.net -52investing.com -52inwet.com -52itstyle.com -52itstyle.vip -52jbh.com -52jbj.com -52jdyy.com -52jialejia.com -52jiaoshi.com -52jingsai.com -52jisu.com -52jrjy.com -52js8.com -52jscn.com -52jt.net -52jubensha.com -52jxt.com -52jying.com -52kanxiaoshuo.com -52kb365.com -52kfly.com -52khs.com -52laodong.com -52liaoshen.com -52life.cc -52linglong.com -52linux.tech -52lion.com -52lishi.com -52lvyou.com -52mac.com -52maicong.com -52mba.com -52mengdong.com -52mhw.com -52miji.com -52miniapps.com -52ml.net -52mtc.com -52muyou.com -52njl.com -52njl.net -52op.net -52opencourse.com -52pachong.com -52pcfree.com -52ph.com -52pi.com -52pi.net -52pictu.com -52pjb.net -52pk.com -52pk.net -52pkvr.com -52playpc.com -52podcast.com -52pojie.com -52ppt.com -52print.com -52qixiang.com -52qj.com -52qmct.com -52qqba.com -52qudao.com -52queji.com -52qumao.com -52ra3.com -52rd.com -52rd.net -52rental.com -52samsung.com -52sddz.com -52shangou.com -52shici.com -52shijing.com -52shipping.com -52shouyu.com -52shuw.cc -52shuxue.com -52sichou.com -52soji.com -52solution.com -52souji.net -52souluo.com -52soutu.com -52survey.com -52svip.cc -52svn.com -52sykb.com -52t1.com -52tc.co -52tc.info -52tech.tech -52tgfc.com -52tian.net -52tiny.com -52toys.com -52tps.com -52tq.net -52tql.com -52tt.com -52udl.com -52ugame.xyz -52unicode.com -52uyn.com -52vr.com -52vrdy.com -52waha.com -52wana.com -52wanh5.cc -52wendang.com -52wlw.com -52wmb.com -52wubi.com -52xiaomian.com -52xiaoshuowang.com -52xiaoyuan.net -52xie.com -52xinmiao.com -52xintaidu.com -52xinyou.com -52xitong.com -52xiuxian.com -52xiyou.com -52xpp.com -52xtxs.com -52xyz.com -52yawa.com -52yesu.com -52yh.com -52yifei.com -52ykjob.com -52youju.com -52youpiao.com -52youtu.com -52ywan.com -52yww.com -52yxyx.com -52z.com -52zhaopin.com -52zhizuo.com -52zhushan.com -52zixue.com -52zuji.net -52zwxs.com -52zx.cc -52zx.net -52zxw.com -52zy.com -52zzl.com -53.net -531314.com -5317wan.com -531dns.com -5321vip.com -533.com -533.net -5334.com -5336.com -5338.org -533y.com -53431.com -53471.com -535300.net -53531dcg.com -535o.com -5360jx.com -53617686.com -5366.com -53666.org -5367.com -536wx.com -537.com -5379yx.com -537a.com -538618.com -5395.com -5399.com -53chewu.com -53dns.org -53info.com -53iq.com -53kf.com -53kjw.com -53miji.com -53nic.com -53r.com -53shop.com -53shubiao.com -53tct.com -53xjd.com -53yao.com -53yu.com -53zw.net -54.com -54114.com -5433.com -545c.com -5460.net -5499.com -54admin.net -54benniao.com -54bk.com -54bt.com -54doctor.net -54doctors.net -54hacker.com -54hcz.com -54heb.com -54hei.com -54im.com -54jj.com -54jkw.com -54job.com -54kefu.net -54lol.com -54manong.com -54md.com -54op.com -54share.com -54tf.com -54traveler.com -54tusi.com -54up.net -54yt.net -54yuqing.com -54zm.com -55.cc -55.la -55015.com -550400.com -5504ll.com -5507p.com -551335.net -55178.com -55188.com -551house.com -552283.com -5523.com -55332147.com -55344.com -5548.net -555000d3.com -5551557.com -5551650.com -5551933.com -5552009.com -55555tao.com -555dy.fun -555yst.com -555zw.com -5566.net -5567.cc -5567.me -557.net -5577.com -55779.xyz -5588.tv -5599.com -55cc.cc -55coin.com -55dai.com -55dian.com -55doc.com -55duanzi.com -55dushu.com -55dx.com -55e5.com -55haitao.com -55hl.com -55hl.net -55home.com -55hyk.com -55i8.com -55idc.com -55jisu.com -55jj.com -55la.com -55lady.net -55lewen.com -55shantao.com -55tag.com -55tuan.com -55tuanimg.com -55wz.com -55xiazai.com -55y5.com -55you.com -55zm.com -56-7.com -56.com -560.im -56015.com -560la.com -560xs.com -5611.com -56135.com -5617.com -5628l.com -5629.com -5636.com -56360.com -564.cc -5648.cc -56506666.com -5654.com -565880.com -566.com -566855.com -5669.com -566job.com -5676.com -5678.net -5678la.com -567idc.com -567j.xyz -567w.xyz -5684.com -569.com -5694.com -56a.com -56ads.com -56beijing.org -56ca.com -56care.com -56china.com -56clte.org -56da.com -56dagong.com -56dichan.com -56dr.com -56en.com -56ggb.com -56gk.com -56golf.com -56img.com -56img.net -56imgs.com -56kad.com -56laile.com -56md.com -56ml.com -56mp.com -56pan.com -56php.com -56qq.com -56show.com -56shuba.cc -56shuku.org -56steel.com -56tchr.com -56tj.com -56uu.com -56wen.com -56ye.net -56zzx.com -57.net -57023.com -571400.net -571free.com -571xz.com -5721.net -5755.com -576.com -57608.com -57616.com -57665.com -5768.com -576tv.com -57821.com -579609.com -57ac.com -57auto.com -57dj.com -57dp.com -57ee.net -57fx.com -57gif.com -57go.com -57lai.com -57px.com -57qy.com -57sc.com -57tibet.com -57tuan.com -57us.com -57uu.com -57wo.com -57yy.site -57zhe.com -58.com -5800.com -580114.com -580168.com -580590.com -580ban.com -580eda.net -580jz.net -580k.com -580tequan.com -58199.com -582582.com -582hr.com -583go.com -5858.com -58611.net -5866.com -587c51.com -58801hn.com -5884.com -5887.com -5888.tv -588991.com -588art.com -588ku.com -58921.com -5898yun.com -58abb.com -58bangmang.com -58baogao.com -58bo.com -58buy.com -58che.com -58cloud.com -58coin.com -58corp.com -58cyjm.com -58czt.com -58dadi.com -58daojia.com -58display.com -58dm.com -58fangdai.com -58fenlei.com -58food.com -58game.com -58gameup.com -58ganji.com -58gush.com -58house.com -58huoban.com -58hzb.com -58img.com -58insure.com -58iwan.com -58jb.com -58jixie.com -58jurenqi.com -58kad.com -58kaifa.com -58kanshu.cc -58kasch.com -58kuaipai.com -58kuku.com -58meizhuo.com -58moneys.com -58moto.com -58net.com -58pic.com -58picc.com -58q8.com -58qz.com -58supin.com -58trz.com -58tyh.com -58ubk.com -58wan.com -58wangwei.com -58wanwan.com -58wzb.com -58xinrui.com -58xs.com -58xs.la -58xs.tw -58xuexi.com -58yiji.com -58yuefu.com -58yuesao.com -58zhuiju.com -58zpw.com -59008gg.com -5906333.com -590m.com -59120.com -591234x.com -591522.com -59168.net -59178.com -5918dyw.com -5918s.com -591918.com -591change.com -591cto.com -591hx.com -591lh.com -591master.com -591moto.com -591vr.com -591wed.com -591wsh.com -591wy.com -591yhw.com -5923d.com -5925car.com -592zn.com -59313313.com -593555b.com -59370.com -593yx.com -5947.net -59490.com -5956pp.com -595818.com -595led.com -596fc.com -597.com -59706.com -597rcw.com -59881.com -598991.com -598g.com -598rc.com -599.com -5999.tv -599ku.com -59b2b.com -59di.com -59dun.com -59edu.com -59hs.com -59iedu.com -59na.com -59pk.net -59store.com -59w.net -59wj.com -59yx.com -5a49.com -5a8.org -5aaa.com -5acbd.com -5adanhao.com -5ag.net -5agk.com -5ailiwu.com -5aivideo.com -5aiyoo.com -5ajob.com -5alw.com -5any.com -5atxt.com -5axxw.com -5azy.com -5bite.com -5biying.com -5bug.wang -5caicloud.com -5ce.com -5ceimg.com -5cgo.com -5cocoi.com -5cpod.com -5d2ede2.com -5d6d.com -5d6d.net -5dashi.com -5dfp.com -5dfsd2.com -5ding.com -5djbb.com -5djiaren.com -5djpg.com -5dmail.net -5down.net -5dplay.net -5ds.com -5duo.com -5eplay.com -5etv.com -5ewin.com -5fen.com -5fun.com -5fwan.com -5gcg.com -5ggm.com -5goto.com -5gwan.com -5gy.com -5h.com -5ha.net -5hanjutv.com -5hb.org -5helpyou.com -5hrc.com -5hte21mz.com -5i-training.net -5i.com -5i5aj.com -5i5j.com -5i5t.com -5i9u.com -5iag.com -5iag.net -5iape.com -5ibc.net -5ibear.com -5icaipu.com -5icbs.com -5ichecker.com -5ichong.com -5icomment.com -5icool.com -5idc.com -5idev.com -5idhl.com -5idream.net -5idy.com -5iec.com -5ifapiao.com -5ifit.com -5iflying.com -5ifund.com -5ifxw.com -5igen.com -5igupiao.com -5ihome.net -5ikang.com -5iln.com -5ilog.com -5imeishi.com -5imoban.net -5imomo.com -5imx.com -5imxbbs.com -5iok.com -5iops.com -5ip9.com -5ipatent.com -5ipkwan.com -5ips.net -5iqiqu.com -5isanguo.com -5isohu.com -5its.com -5iucn.com -5ixs.net -5ixuexiwang.com -5iyq.com -5iyxw.net -5j.com -5jin.org -5jjc.net -5jjdw.com -5jli.com -5joys.com -5jwl.com -5jzw.com -5k5m.com -5kbox.com -5kcrm.com -5kcrm.net -5kda.com -5khouse.com -5lanren.com -5lbw.com -5lejob.com -5lux.com -5m5m5m.com -5m68.com -5mapk.com -5minsgold.com -5mrk.com -5nd.com -5ndy.com -5ooq.com -5pao.com -5pb.net -5plus1.net -5pop.com -5ppt.net -5pub.com -5q.com -5qmall.com -5qwan.com -5qzone.net -5r1.net -5read.com -5ritt.com -5rs.me -5s4f.com -5sai.com -5sdy.cc -5sdy.com -5se34.com -5see.com -5seestar.com -5sem.com -5sha.com -5sharing.com -5snow.com -5stmt.com -5sw.com -5tangs.com -5teacher.com -5thhospital.com -5thspace.net -5thspace.org -5tps.com -5tps.vip -5txl.com -5u18.com -5u3d.com -5u588.com -5u5u5u5u.com -5u71.com -5ugaizhuang.com -5uks.com -5upm.com -5usport.com -5uu.us -5uu6.com -5uu8.com -5v55.com -5w.com -5w123.com -5w52.com -5w5w.com -5wanpk.com -5wanq.com -5weinisi.com -5wx.org -5xcg.com -5xiang0.com -5xiaobo.com -5xini.com -5xml.com -5xts.com -5xue.com -5xuni.com -5y100.com -5y51.com -5y6s.com -5y89.com -5ydj.com -5yhua.org -5yi.com -5ykj.com -5you.com -5youchou.com -5yun.org -5zai.com -5zg.com -5zhibo.com -5zzu.com -6-china.com -6.gy -60.cm -600052.com -60012.com -600525.net -600895.com -600zi.com -601601.com -602.com -602img.com -603ee.com -6046.net -605-zy.com -605dns.com -605zy.co -6070.tv -6071.com -607777.cc -607p.com -6080d.com -6080j.com -6080k.com -6090b.com -60dj.com -60eee.net -60malaysia.com -60mil.com -60nm.com -60tui.com -61.com -61.life -610115.com -610213.net -612.com -6120aa.com -6122.net -612345.com -612459.com -6137.net -615c.com -61611.net -616114.com -6164.com -61658.com -6168511.com -616pic.com -616wan.com -618344.com -618351.com -6186.com -6187wo.com -618cj.com -618day.com -618hr.com -618ky.com -61916.com -619k.com -61baobao.com -61bb.com -61bbw.com -61co.com -61diy.com -61draw.com -61ertong.com -61gequ.com -61haodian.com -61hr.com -61ic.com -61info.com -61k.com -61kezhan.com -61mami.com -61mc.com -61sheji.com -61sou.com -61tg.com -61vps.com -61ww.com -61xiangce.com -62.com -6210k.com -623k.com -626688.com -62669.com -626china.org -626x.com -62730.com -628.com -629600.com -62a.net -62game.com -630book.com -630shu.net -632.com -63243.com -6328.net -632news.com -6383.com -639311.com -6399868.com -63diy.com -63pe.com -63pic.com -63qingyou.com -63tl.com -63ys.com -63yx.com -641.com -6417000.com -642online.com -64365.com -64518.com -6453.net -64538.net -645w.com -646000.com -6463.com -64644444.com -648sy.com -64ba.com -64dns.com -64ds.com -64gua.com -64ma.com -64mv.com -64pay.com -64w.cc -651700.com -6528.com -6533.org -654.com -654320.com -6543210.com -654321wan.com -654h.com -655a.com -655u.com -655yx.com -656463.com -65688qp.com -65875.com -659595.com -65house.com -65mhxy.com -65singapore.com -65wan.com -65xs.net -6600.org -660pp.com -660x.com -66123123.com -66152.com -66163.com -66168.net -66173yx.com -661832.com -662city.com -662p.com -6631.com -663395.net -66378.com -66460.com -6655.la -6656pk.com -6660333.com -6661666.net -6665.com -6665890.com -666629b.com -6666519.net -666666.so -6669667.com -666baicai.com -666gps.com -666idc.com -666pic.com -666shuwu.com -666wan.com -666wan.net -666xinxin.com -6673p.com -6677000.com -667744.com -6677493.com -6678net.com -66825.com -668559.com -66868.com -6686x1.com -6688.com -66889.net -668895.com -6688pay.com -668app.com -668lw.com -668map.com -668news.com -6695.com -6699.jp -669pic.com -669play.com -669ye.com -66beian.com -66call.com -66cn.com -66diqiu.com -66ds.net -66dt.com -66house.com -66ip.com -66jiedai.com -66liu.com -66mh2.cc -66mobi.com -66money.com -66mz8.com -66nao.com -66nh.com -66perfect.com -66php.com -66play.com -66rou.com -66rpg.com -66ruian.com -66shouyou.com -66sj.com -66sy.com -66team.com -66test.com -66to.net -66tv.tv -66u.com -66ui.com -66vod.net -66wc.com -66weiyou.com -66wz.com -66xh.com -66xue.com -66you.com -66zhang.com -66zhizu.com -66zhuang.com -66zw.com -67.com -67017.com -6711.com -6711img.com -676.com -676z.com -6787.com -67876.com -67883.com -67888.com -6789.com -6789.net -678922c.com -6789che.com -6789go.com -678edu.net -678hyw.com -678ie.com -678pdf.com -678py.com -67cdn.com -67danji.com -67gu.com -67joy.com -67lm.com -67mb.com -67mo.com -67wanwan.com -67yes.com -680.com -68120120.com -6816.com -682.com -68211.com -6822.com -6844.com -6868.com -6868shop.com -686fw.com -688799a.com -688n.com -6899wan.com -68eg.com -68gainian.com -68ge.com -68h5.com -68hanchen.com -68hr.com -68jt.com -68pk10.com -68play.com -68team.com -68web.net -68websoft.com -68youhui.com -69005a.com -6903.com -69260.com -6934.net -693836.com -693975.com -6949.com -695157.com -695175.com -695275.com -695828.com -695ljg.com -698wan.com -69916666.com -699g.com -699h5.com -699pic.com -699xs.com -69cy.net -69fenxiang.com -69hr.com -69jianzhi.com -69ps.com -69shu.org -69xiu.com -69yc.com -69ys.com -6a.com -6aas.com -6abc.net -6acm.com -6an8.com -6api.net -6apt.com -6b3b.com -6c6c.com -6cang.com -6ccn.com -6cit.com -6cnzz.com -6d4d5.com -6d4g.com -6dad.com -6dafu.com -6dan.com -6diy.com -6ds.me -6du.in -6duoyu.com -6dvip.com -6eat.com -6edigital.com -6eys.com -6fanyi.com -6fcsj.com -6fok.com -6fwq.com -6g5fd1a.com -6gh4.com -6ght.com -6hgame.com -6hwan.com -6ih6.vip -6iit.com -6jianshi.com -6jworld.com -6k6g.com -6k9k.com -6kw.com -6laohu.com -6lk.net -6m5m.com -6mao.com -6mh7.com -6miii.com -6miu.com -6miu.net -6miv.com -6mxs.com -6pifa.net -6plat.org -6pmcn.com -6puppy.xyz -6renyou.com -6rooms.com -6s4qki.com -6s54.com -6say.com -6sfg.com -6sq.net -6stmmo.com -6t12.com -6tennis.com -6thhosp.com -6tiantian.com -6tie.com -6v.com -6v68.com -6vps.net -6wan.com -6wtx.com -6xd.com -6xigema.com -6xw.com -6yoo.com -6yu6.com -6yuexi.com -6yxk.com -6yyy7.com -6zu.com -7-hotel.com -7-vk.com -7-wx.com -700bike.com -700so.com -700static.com -700store.com -701.com -7017k.com -701sou.com -703804.com -705112.com -7068.cc -70689.com -7080edu.com -7082.com -708990.com -70dh.com -70dir.com -70god.com -70mao.com -70ppt.com -70qn.com -70soft.com -70wei.com -70wx.com -70ym.com -70yx.com -71.com -71.net -710071.net -71133.com -7116dns.com -711pr.com -712.com -7120.com -712100.com -71360.com -7139.com -714.hk -715083.com -7152223.com -715300.com -71668.net -71714.com -7172737.com -7176.com -7190.cc -719000.com -71908.com -7192.com -71acg.com -71acg.net -71baomu.com -71baomu.net -71dm.com -71du.com -71e.com -71edge.com -71gif.com -71http.com -71k.com -71lady.com -71lady.net -71one.net -71p.net -71study.com -71txt.com -71wl.com -71xe.com -71zs.com -72.com -720582.com -720pmovie.com -720static.com -720think.com -720ui.com -720yes.com -720yun.com -720yuntu.com -720zh.com -7211.com -72177.com -724001.com -7255.com -726033.com -726p.com -7273.com -7280.com -7298.com -72bn.com -72book.com -72byte.com -72bz.com -72ce.com -72crm.com -72crm.net -72crm.org -72dj.com -72dns.com -72dns.net -72dy.com -72e.net -72en.com -72g.com -72la.com -72laodian.com -72link.com -72sc.com -72xf.com -72xit.com -72xuan.com -72yun.com -72zx.com -731c.com -731yz.com -73232yx.com -732732.com -734969.com -7360.cc -737.com -73789.com -7384tv.com -7399t.com -73bc.com -73card.com -73zw.com -74.com -7412557.com -741978.com -7428.net -744zy.com -7474.com -7477.com -747wan.com -749997.com -74cms.com -74hy.com -74ig.com -74ir.com -75111.net -75184.com -75271.com -75367.com -75510010.com -75614.com -756u.com -7574.com -75757.com -757dy.com -7580.ltd -75n474.com -75team.com -75xyx.com -7618.com -761a.com -761w.com -762rc.com -764100.com -7654.com -7659.com -765i.com -765q.com -766.com -7663.com -76676.com -766z.com -7676.com -7677wan.com -767stock.com -76868.com -76963.com -769car.com -76al.com -76baobao.com -76dongdong.com -76e.org -76jie.com -76ju.com -76wu.com -76xh.com -76xs.com -76y.com -76zu.com -7708zf02.com -770921.com -7711.com -77119159.com -771633.com -77169.com -77169.net -7717wan.com -7723.com -7724.com -77248a.com -7724yx.com -7725.com -7729.com -77313.com -77348k.com -7735.net -773buy.com -77495.com -77521.com -7756.org -7759.com -7766.info -7766.org -77745.com -777524.com -7775367.com -777684a.com -777lala.com -777moban.com -777n.com -778669.com -7788.com -7788js.com -7788sky.com -7788tools.com -7788xj.com -7789.com -778buy.cc -778buy.com -7794.com -77991.com -7799520.com -77acg.com -77bx.com -77ds.com -77ebooks.com -77hei.com -77l.com -77music.com -77mv.com -77nt.com -77piano.com -77tianqi.com -77vcd.com -77xmd.com -77xsw.la -77y4.com -77ys.com -77zn.com -78.com -780.com -78114422.com -78187.com -782yx.com -78300.com -78302.com -78360.net -7849.com -785959.vip -7878hk.com -7881.com -788511.com -788899.com -788v.com -78901.net -789294.cc -789314.cc -789gg.com -789hi.com -789msw.com -789zy.cc -78bar.com -78books.com -78dian.com -78diy.com -78dm.net -78ee.com -78fz.com -78gk.com -78hr.com -78oa.com -78pan.com -78te.com -78tp.com -78zph.com -79.com -793360.com -7937.com -7940.com -79432.com -794579.com -7958.net -7964b.com -7979u.com -797sun.com -797xj.com -7988wan.com -798com.com -798edu.com -798ydh.com -798youxi.com -799.net -799281.com -7999.com -7999.tv -799job.com -79cha.com -79da.com -79tao.com -79tui.com -79yougame.com -79yx.com -79yx.net -7a31jmf.com -7a8k.com -7acg.com -7ahr.com -7analytics.com -7b2.com -7c.com -7caiyun.com -7capp.com -7ccj.com -7cen.com -7chacha.com -7cloud.shop -7cmz.com -7cname.com -7colorblog.com -7cxk.com -7dah8.com -7dapei.com -7dianw.com -7didc.com -7do.net -7down.com -7down.net -7dsp.com -7dsw.com -7dtest.com -7dtime.com -7dugo.com -7e.hk -7east.com -7edown.com -7fei.com -7fgame.com -7flowers.com -7forz.com -7fresh.com -7fun.org -7gz.com -7hcn.com -7help.net -7ho.com -7hon.com -7huang.org -7hxsxs.com -7i2.com -7iaoshou.com -7icp.com -7ipr.com -7jia.com -7jia2.com -7jiaqi.com -7jjjj.com -7jk.com -7jubao.com -7junshi.com -7k35.com -7k7k.com -7ka.co -7kk.com -7kla.com -7kww.net -7kxs.com -7kzw.com -7littlemen.com -7liwu.com -7lk.com -7lw.com -7mah2.com -7mgame.com -7mo.cc -7modifier.com -7moe.com -7moor-fs1.com -7moor-fs2.com -7moor.com -7msj.com -7mx.com -7na7.com -7nepal.com -7net.cc -7oh.net -7pa.com -7pc8.com -7pei.com -7po.com -7q5.com -7qile.com -7r7z.com -7road.com -7road.net -7runto.com -7rv.net -7sbook.com -7scs.com -7sdn.com -7sheji.com -7sj.com -7su.com -7t9.com -7tapp.com -7tgame.com -7tou.com -7tt3333.com -7usa.net -7v6.net -7vk.com -7wa.cc -7wan.com -7wenku.com -7wenta.com -7wenyi.com -7wkw.com -7wnews.com -7wsh.com -7wsh.net -7wx.org -7x24cc.com -7x24s.com -7xdown.com -7xfilm.com -7y5.net -7y7.com -7yc.com -7youxi.com -7yue.pro -7yueji.com -7yun.com -7yzone.com -7zgame.com -7zhan.com -7zhibo.com -7zhou.com -7zm.com -8-008.com -8-host.com -80.com -80.hk -80000.cc -800020308.com -8000ad.com -800400.net -800423.com -800535.com -8006506.com -8006511.com -8006tu.com -800820.net -8008202191.com -800app.com -800bamboo.com -800best.com -800bestex.com -800cdn.com -800du.com -800hr.com -800li.net -800lie.com -800lj.com -800mei.net -800pai.com -800pharm.com -800t.net -800tu.com -800ux.com -800vod.com -800xs.net -800you.com -800youhuo.com -801167.com -8013v111.com -802013.com -802203.com -807.com -80710.com -80800.vip -8080i.com -8081.net -80881.com -808cdn.com -808w.com -8090.com -8090.pk -8090.so -8090120.com -8090app.com -8090cdn.com -8090mt.com -8090vision.com -8090xx.com -8090yx.com -8090yxs.com -809803.com -809926.net -80baicai.biz -80bi.com -80data.net -80hman.com -80host.com -80iter.com -80juqing.com -80kongjian.com -80kuku.com -80ml.com -80nb.com -80note.com -80paper.com -80s.cm -80s.im -80s.so -80s.tw -80sec.com -80shihua.com -80sjy.net -80tian.com -80txt.com -80txt.la -80vps.com -80xb.com -80xs.la -80ym.com -80yunying.com -80zhan.com -810236.com -810251.com -8108188.com -810840.com -811xs.com -812361.com -81265.net -81312.com -81329999.net -815good.com -815ybw.com -81629.com -81677.com -8169.com -817398.com -81761.com -817711.com -818.com -818it.com -818ps.com -818rmb.com -818tu.com -81999.org -81comdns.com -81dk.com -81it.com -81js.net -81kx.com -81tech.com -81toutiao.com -81tt.net -81xy.com -81yy.cc -81zw.co -81zw.com -81zw.us -8203app.com -8211.com -82222919.com -82250856.com -822644.com -82326999.com -82335966.com -8234567.com -8246.net -8264.com -826rc.com -826wan.com -82859.com -82871.com -8289880.com -828g.com -82a.net -82ip.com -82ky.com -82pk.com -82ucc.com -82xs.com -83133.com -832200.com -8325.com -8329555.com -8329607.com -833833833.net -8339.org -83480900.com -834sy.com -83666.com -83681111.com -837711.com -838.cc -83823.net -83830.com -838dz.com -8395670.com -83990567.com -83dd.com -83edu.net -83h87d.com -83jie.com -83om.com -84.com -84.vc -8421.com -84384d.com -84399.com -844a.com -844dns.net -844wan.com -84519.com -84684.net -8477.com -848.com -8498899.com -849959.com -84dwc.com -84fk.com -84ktv.com -84lm.net -84piao.com -84zcb.com -84zhu.com -85.com -850500.com -8518.com -8521.org -85229666.com -8524999.com -85384.com -853lab.com -8548965.com -854967.com -8558.org -85679999.com -85814.com -85878078.com -858game.com -858guakao.com -85kf.com -86-import.com -86.cc -86010.net -860527.com -860598.com -860816.com -861522.com -86175.com -861817.com -86215.com -86262.com -8633.com -86516.com -865211.com -86590.com -866ds.com -866lvyou.com -8673h.com -867game.com -867wn.com -8682.cc -8684.com -868578.com -8686c.com -86873.com -86888qp.com -8688g.com -86933.com -869d.com -869v.com -86amsdy.com -86campus.com -86clouds.com -86control.com -86ditu.com -86djw.com -86eh.com -86fis.com -86fm.com -86fsp.com -86game.com -86gc.net -86hcdnsuv.com -86hh.com -86hr.com -86hud.com -86huoche.com -86jg.com -86jobs.com -86joy.com -86junshi.com -86kl.com -86kongqi.com -86lawyer.com -86mai.com -86mail.com -86mama.com -86mdo.com -86nb.com -86office.com -86pla.com -86pm25.com -86qc.com -86sb.com -86shouji.com -86szs.com -86tec.com -86uuu.com -86wan.com -86wol.com -86xq.com -86y.org -86zsw.com -87.com -870818.com -8714.com -87188718.com -872.cc -8721.com -872872.com -87311111.com -87535353.com -876web.com -8770000.com -877168.com -877325.com -87794560.com -878009.com -87803.com -87870.com -87994.com -87box.com -87g.com -87money.com -87pk.com -87yy.com -88-z.com -88.com -8800.org -8800808.com -8801.net -880114.com -880303.xyz -880331.net -880735.com -88077777.com -880834.com -880sy.com -880you.com -88106.com -8825.com -8827777.com -8828dl.com -88303887.com -88360.com -8838sl.com -884109.com -884134.com -884358.com -8844.com -88444l.cc -88448.com -8848.com -8848phone.com -885.com -8850006.com -88520.cc -885210.net -8855.org -88582.com -8858a.com -8860.net -8864.com -8864.org -8866.org -886966.com -886abc.com -886bl.com -886vps.com -88765.com -887w.com -888593a.com -8888800000.com -888pic.com -888ppt.com -888rj.com -8890tu.com -8898wz.com -88995799.com -88999.com -8899yyy.vip -889ppt.com -889su.com -889xp.com -88bank.com -88bx.com -88cdn.com -88dj.com -88duomi.com -88dushu.com -88eq.com -88fenxiao.com -88h3.com -88hom.com -88ht.com -88htu.com -88hu.com -88jianshen.com -88klk.com -88koo.com -88lan.com -88lgo.com -88lm.cc -88meishi.com -88mf.com -88ming.net -88ng.com -88pets.com -88popo.com -88rpg.net -88tang.com -88tph.com -88u.com -88wakuang.com -88xiaoshuo.com -88xr.org -88ysg.com -88zb.com -88zb0.com -88zha.com -88zyw.net -89178.com -89303.com -893933.com -8961zx.com -8977567.com -8979.com -898.travel -8988sbd.com -8989118.com -898940.com -898984.com -898tc.com -8999.cc -89dj.com -89ds.com -89hl.com -89uu.com -8a.hk -8ao8ao.com -8aza.com -8b2.net -8bb.com -8bcd9.com -8bears.com -8bei8.com -8bit.xin -8btc-ops.com -8btc.com -8btm.com -8c8h.com -8cheche.com -8cname.com -8cnd.com -8cnet.com -8da.com -8ddao.com -8dexpress.com -8dlive.com -8dn.com -8dol.com -8dp.net -8dream.net -8dudata.com -8dwww.com -8e8z.com -8europe.com -8fenxiang.com -8gov.com -8gw.com -8gyu.com -8hsleep.com -8jdns.net -8jiaoye.com -8jj.cc -8jxn.com -8jzw.cc -8k7k.com -8k8z.com -8kana.com -8kzw.com -8l8e.com -8le8le.com -8lhx.com -8liuxing.com -8lk.com -8llp.com -8mhh.com -8miu.com -8miu.net -8ms.xyz -8mu8.com -8multimill.com -8n6n.com -8njy.com -8o9o.com -8pig.com -8pingce.com -8pu.com -8qwe5.com -8qwx.com -8s123.com -8s8s.com -8she.com -8taobaodian.com -8tgh.com -8ttt8.com -8tupian.com -8twan.com -8u58.com -8uka.com -8uyx.com -8wan.com -8win.net -8wiu.com -8wq.com -8wss.com -8yao.cc -8ybct.com -8ym8.com -8yw.xyz -8yzw.com -8z.net -8zntx.com -8zy.com -9-zhuce.com -9000design.com -9000gou.com -9000idc.com -9000wy.com -900112.com -900501.xyz -900cha.com -900php.com -900ppt.com -900top.com -90123.com -903518.com -90370.com -90432.net -90576.com -906you.com -90880.com -908872.com -90907.com -90a.cc -90bola.cc -90ckm.com -90e.com -90ko.net -90lhd.com -90pan.com -90qh.com -90sheji.com -90sjimg.com -90tank.com -90vm.com -90wmoyu.com -90wx.com -90yang.com -90zm.net -91.com -910app.com -910play.com -91160.com -9118fu.com -911cha.com -911pop.com -911sl.com -911wow.com -911yao.com -911zy.com -912366.com -9125flying.com -912688.com -912k.com -912yx.com -913232.com -9133.com -9136.com -91378.com -913vr.com -913you.com -914.com -91472.com -915.com -915.im -9154wan.com -915658.com -915799.com -9158.com -9158ads.com -9158h5.com -915c.com -916607.com -916m.com -917.com -9170.com -917118.com -917558.com -9178.work -917ka.com -917st.com -9188.com -9188wan.com -918dxs.com -918ka.cc -918rc.com -918ys.net -919.com -9191mr.com -9191net.com -9191zx.com -919377.com -91985.com -91ac.com -91act.com -91aiche.com -91aliyun.com -91all.net -91anjian.com -91art.net -91b2b.com -91baby.com -91bee.com -91boshuo.com -91bushou.com -91caijia.com -91canyin.com -91carnet.com -91cdkey.com -91ceshi.com -91cha.com -91chuxue.com -91cpm.com -91cps.com -91ctc.com -91cy.cc -91czxs.com -91daizhang.com -91danji.com -91data.com -91datong.com -91dba.com -91dbb.com -91dbq.com -91ddcc.com -91ddedu.com -91dena.com -91diany.com -91dict.com -91display.com -91dnso.com -91doujin.com -91dub.com -91duobaoyu.com -91dyl.com -91exam.org -91exiu.com -91feizhuliu.com -91fifa.com -91flac.com -91game.com -91gaoding.com -91goodschool.com -91guzhi.com -91h5.cc -91haiju.com -91haoka.com -91haoke.com -91huayi.com -91huoke.com -91ios.com -91jbz.com -91jf.com -91jiabohui.com -91jiafang.com -91jianguo.com -91jin.com -91jinrong.com -91jinshu.com -91jkj.com -91jkys.com -91jm.com -91jmw.com -91job.com -91join.com -91jsj.com -91juice.com -91kami.com -91kanju.com -91keman.com -91keto.com -91laihama.com -91ld.com -91lda.com -91lewei.com -91liangcai.com -91linux.com -91listen.com -91lx.com -91lxs.com -91maker.com -91mariadb.com -91maths.com -91mitang.com -91money.com -91muzhi.com -91nzh.com -91open.com -91paobao.com -91pdf.com -91pet.net -91php.com -91pic.org -91pkpk.com -91px.com -91qzc.com -91ri.org -91ronghui.com -91rtb.com -91ruyu.com -91safety.com -91sd.com -91sem.cc -91shenshu.com -91smart.net -91soer.com -91soker.com -91sotu.com -91sph.com -91spj.com -91sport.cc -91ssw.com -91student.com -91suan.com -91suke.com -91taobaoquan.com -91taoke.com -91tech.net -91tianqi.com -91ting.net -91tingge.com -91town.com -91tuyatu.com -91tw.net -91tzy.com -91ud.com -91up.com -91vpn.com -91vps.com -91vst.com -91waijiao.com -91wan.com -91wangcai.com -91wangmeng.com -91watches.com -91way.com -91weimi.com -91weiwang.com -91wenmi.com -91wii.com -91wllm.com -91wujia.com -91wutong.com -91wzg.com -91xcm.com -91xhg.com -91xiake.com -91xiazai.com -91xsj.com -91xueshu.com -91xww.com -91xy.com -91y.com -91yao.com -91yian.com -91yinpin.com -91yixun.com -91yk.com -91yong.com -91you.com -91youban.com -91yuedu.com -91yunying.com -91yxbox.com -91zhiwang.com -91zwk.com -91zy.com -92.net -921.com -9211.com -921118.wang -921716.com -9217w.com -9217web.com -921lu.com -922000.com -92220668.com -92220701.com -922c25.com -925ps.com -927.la -927927.com -927953.com -927jx.com -928vbi.com -92913.com -92987.com -9299.net -92anycall.com -92aq.com -92ay.com -92bbs.net -92bizhi.com -92caijing.com -92cloud.com -92cy.cc -92demo.com -92dp.com -92ez.com -92fox.com -92game.net -92gushi.com -92hidc.net -92jiangbei.com -92kaifa.com -92kk.com -92le.com -92lm.com -92lucky.com -92mp.com -92ni.com -92python.com -92sucai.com -92tianjin.com -92to.com -92u93e.com -92wan.com -92wenzhai.com -92wudao.com -92wx.com -92wy.com -92xygame.com -92you.com -9312.net -933.moe -93338c.cc -934dsw.com -9355.com -93636.com -936647.com -936649.com -936u.com -9377.com -9377a.com -9377co.com -9377df.com -9377g.com -9377ja.com -9377ku.com -9377ne.com -9377os.com -9377s.com -9377si.com -9377z.com -938030968.com -93913.com -9396.net -93966.com -93bok.com -93cg.com -93eu.com -93hdw9.com -93hui.com -93jiang.com -93kk.com -93ku.com -93lh.com -93ne.com -93njf0.com -93pk.com -93sdk.com -93soso.com -93tyy.com -93wgames.com -93zp.com -93zw.com -941.so -941jy.com -941mg.com -942ss.com -944.com -94445.com -9448x.com -9453job.com -945idc.com -945n48.com -9466.com -946vr.com -94831.com -9495.com -949678.com -9499.net -94994.com -949949.com -94afx.com -94cb.com -94cto.com -94dreamer.com -94dwc.com -94hdj.com -94he38.com -94hnr.com -94i5.com -94ip.com -94ixs.com -94ji.com -94lm.com -94mxd.com -94nw.com -94oz.com -94php.com -94pm.com -94q.com -94qy.com -94rp.com -94te.com -94uv.com -94xy.com -94you.net -94ys.com -95.com -95021.com -95060.com -95081.com -950901.com -95105369.com -95105555.com -95105556.com -95105899.com -9512.net -951368.com -95158.com -95169.com -95191.com -95195.com -9527cha.com -9527cloud.com -95303.com -95408.com -95504.net -95508.com -95511-8.com -95516.com -95516.net -95526.mobi -9553.com -9557.com -95572.com -95579.com -95588.com -95597.cc -95598pay.com -95599.hk -955yes.com -9560.cc -9564.com -9565.com -9588.com -958jbs.com -959249.com -95949c.com -9596956.com -95amxpj.com -95book.com -95en.com -95epay.com -95fenapp.com -95gq.com -95idc.com -95jr.com -95k.com -95links.com -95name.com -95nw.com -95px.com -95xiu.com -95ye.com -95yijing.com -96005656.com -960123.com -960638.com -96090090.com -960rc.com -9610.com -9611111.com -96160.cc -96189.com -9618968.com -962.net -96211.com -962121.net -962168.com -962222.net -96225.com -962518.com -962600.com -962740.com -96369.net -9637.com -963999.com -964yx.com -96516.net -96520.com -96533.com -9665.com -966599.com -9666sr.com -9669.com -96711jmbm.com -968.com -96804.com -96811.com -96822.com -96845.com -96877.net -968pk.com -969009.com -9696e.com -9697.com -969g.com -96app.com -96bbs.com -96caifu.com -96dp.com -96go.com -96hq.com -96jm.com -96jx.com -96kaifa.com -96kb.com -96lh.net -96lou.com -96ni.net -96pc.com -96pk.com -96plus.com -96sdk.com -96shuba.cc -96sir.com -96ttt.com -96weixin.com -96yx.com -96zxue.com -97-7.com -970655.com -9718.com -9718game.com -9724.com -973.com -973xs.com -97616.net -97775.com -977pk.com -977t.com -97828bb.com -97866.com -9787.com -978clouds.com -978sy.com -97936.com -97973.com -9797ly.com -9799.com -97add.com -97atc.com -97cms.com -97dod.com -97douyin.com -97gg.net -97go.com -97jz.com -97kid.com -97kpb.com -97lk.com -97lp.com -97lpw.com -97ol.com -97rp.com -97ting.com -97ui.com -97uimg.com -97wd.com -97xiaoshuo.com -97xiaoshuo.net -97yrbl.com -98.com -98.ma -9800.com -980cje.com -98158.com -9823df.com -9831.com -984967.com -984g.com -985.so -98523.com -985994.com -985college.com -985sy.com -98654.com -987.com -9870n.com -987app.com -987jx.com -987jx.net -987you.com -988001.com -98809.com -988272.com -988640.com -9898c.com -98a.ink -98ep.com -98fp.com -98jx.com -98mp.com -98nice.com -98one.com -98t.net -98tang.com -98znz.com -99-ss.com -99.com -99083.com -9908qhb.com -99114.com -99118.com -99166.com -9917.com -991726.com -9919.wang -9919345.com -991kang.com -9928.tv -9939.com -993h.com -994wan.com -995120.net -9955365.net -9955993.com -996.com -996.pm -9966.org -9966333.com -9966w.com -996a.com -9973.com -997788.com -998.com -9981seo.com -9981ypk.com -99887w.com -998jk.com -998jx.com -9991.com -999120.net -999178.com -99939.com -999777.com -9998.tv -99988866.xyz -99999net.net -999ask.com -999brain.com -999d.com -999dns.net -999inandon.com -999kan.com -999meiju.tv -999tea.com -999wx.com -999xy.net -99aiji.net -99bdf.com -99biaozhun.com -99bill.com -99bo.cc -99cc.com -99cfw.com -99cloud.net -99daigou.com -99danji.com -99ddd.com -99down.com -99downer.com -99dushu.com -99dw.com -99edu.net -99eo.com -99eyao.com -99fang.com -99fei.net -99fenlei.com -99fund.com -99fund.org -99haoche.com -99haoling.com -99hdf.com -99hkjf.com -99huizhou.com -99ielts.com -99inn.cc -99jianzhu.com -99jiaoshi.com -99k5.com -99kgames.com -99lb.net -99max.me -99mc.com -99meiju.app -99meiju.org -99meiju.tv -99meili.com -99mingxing.com -99mst.com -99music.net -99niu.com -99papa.xyz -99pdf.com -99pet.com -99ppt.com -99pto.com -99qh.com -99qimingzi.com -99qumingzi.com -99read.com -99rom.com -99sky.com -99sun.com -99sushe.com -99vf.com -99vu.com -99weiqi.com -99wuxian.com -99xr.com -99xxg.com -99xyx.com -99yoo.com -99youmeng.com -99ys.com -99zhizhu.com -99zihua.com -99zuowen.com -99zzw.com -9ailai.com -9aimai.com -9air.com -9aoduo.com -9aola.com -9apay.com -9beike.com -9bianli.com -9c9c.cc -9cb.com -9ccapital.com -9ccmsapi.com -9chew.com -9chun.com -9clive.com -9coc.com -9conn.net -9cts.com -9cwx.com -9d19.com -9d4d.com -9damao.com -9damao.net -9day-game.com -9ddm.com -9deli.com -9dfx.com -9dm.net -9do9.com -9douyu.com -9droom.com -9duw.com -9dwork.com -9earth.com -9ehao.com -9eii.com -9ela.com -9ele.com -9enjoy.com -9fav.com -9fbank.com -9first.com -9fpuhui.com -9fs.com -9g.com -9gty.net -9hcom.com -9he.com -9host.org -9ht.com -9icode.net -9icy.com -9idudu.com -9igcw.com -9ihb.com -9ihere.com -9ihome.com -9ihs.com -9ilu.com -9imobi.com -9inx.com -9iphp.com -9ishe.com -9itan.com -9j9y.com -9ji.com -9jiu9jiu.com -9juewu.com -9jx.com -9k51.com -9k9by.com -9k9k.com -9k9ms.com -9kd.com -9kld.com -9ku.com -9kus.com -9le8.com -9linux.com -9liuda.com -9longe.net -9man.com -9mayi.com -9mbv.com -9mi.me -9mi01.com -9miao.com -9miaoxueyuan.com -9mic.com -9msg.com -9nali.com -9now.net -9ok.com -9om.com -9open.com -9orange.com -9qc.com -9qu.com -9qu5.com -9rmb.com -9see.com -9simg.com -9skm.com -9sky.com -9sleep.org -9stor.com -9subi.com -9syw.com -9taobao.com -9thws.com -9to.com -9tong.com -9too.net -9tov.com -9txs.com -9txs.org -9u.net -9upk.com -9v.com -9w9.com -9wee.com -9wee.net -9weihu.com -9wuli.com -9xiazaiqi.com -9xiu.com -9xkd.com -9xu.com -9xwang.com -9yao.com -9yaocn.com -9yc.com -9ye.com -9yjk.com -9yoho.com -9you.com -9you.net -9yread.com -9yuntu.com -9yuonline.com -9ywp.com -9zhen.com -9zhitx.com -9zjob.com -9zonline.com -9zx.com -a-du.net -a-hospital.com -a-jazz.com -a-liai.com -a-map.link -a-sy.com -a0598.com -a0b88.com -a0bi.com -a0c00.com -a0c77.com -a1.mzstatic.com -a1166.com -a135.net -a166.com -a1714.com -a1a.me -a2.mzstatic.com -a2048.com -a21fs.com -a21yishion.com -a234567.com -a2dongman.com -a3.mzstatic.com -a3p4.com -a4.mzstatic.com -a4s6.com -a5.mzstatic.com -a5.net -a5628.com -a5805.com -a5idc.net -a632079.me -a67dy.com -a6a1.com -a7.com -a8.com -a8cd.com -a8f947.com -a8tg.com -a8u.net -a8v5.com -a8z8.com -a9188.com -a9377j.com -a963.com -a9vg.com -aa43z7.com -aa65535.com -aa7.org -aa8828.com -aaahsxb.com -aaal.cc -aaapeixun.com -aaayun.com -aadongman.com -aads-cng.net -aaliyaheartha.com -aamachina.org -aaniao.com -aapy38.com -aaqqw.com -aarch64.me -aardio.com -aaronlam.xyz -aaspt.net -aastartups.com -aatccn.com -aayis.com -ab126.com -ab173.com -ab59.com -ab95569.com -abab.com -abacaipu.com -abang.com -abardeen-online.com -abbooa.com -abbyschoice.net -abbyychina.com -abc-ca.com -abc12366.com -abc188.com -abc360.com -abc369.net -abcache.com -abcbxw.com -abcd5.com -abcdocker.com -abcdv.net -abcfintech.com -abchina.com -abcjiaoyu.com -abcjifang.com -abckantu.com -abclogs.com -abcs8.com -abctang.com -abcve.com -abcxs.com -abcydia.com -abczw.com -abd007.com -abdstem.com -abe-tech.com -abeacon.com -abecage.com -abiechina.com -abiestem.com -abifsey.com -abilie.com -abitcg.com -abiz.com -ablanxue.com -able-elec.com -ableaders.com -ablejeans.com -ablesci.com -ablesky.com -abletive.com -ablman.com -abloz.com -abmau.com -aboatedu.com -aboboo.com -aboilgame.com -aboluojihua.com -aboutcg.com -aboutcg.net -aboutcg.org -aboutgk.com -aboutidc.com -aboutnew.net -aboutnuke.org -aboutyun.com -abovede6.com -abreader.com -abslw.com -abtionb.com -abto.cc -abuquant.com -abusi.net -abuyun.com -ac268.com -ac57.com -acadki.com -acc3.net -acc5.com -accelink.com -accessgood.com -accessibilityunion.org -accessoft.com -accesspath.com -accgame.com -acconsys.com -accopower.com -account.cdnetworks.com -account.samsung.com -accsh.org -accu.cc -accurate-china.com -accyy.com -acde.net -ace-pow.com -acechuang.com -acejoy.com -acelamicro.com -acesheep.com -acewill.net -acftu.org -acfun.cc -acfunchina.com -acfunwiki.org -acg-moe.com -acg.gd -acg.gg -acg.tv -acg17.com -acg183.com -acg18s.com -acg4.com -acg456.com -acg6.com -acgaa.xyz -acgcd.com -acgcp.com -acgdb.com -acgdmzy.com -acgdoge.net -acgface.com -acgist.com -acgn.pw -acgnt.com -acgp.xyz -acgpiping.net -acgqd.com -acgres.com -acgsky.win -acgtofe.com -acgtouch.com -acgvideo.com -acgvr.com -acgw.pw -acgz.xyz -acgzc.com -achsd.com -aci-wh.com -acicfg.com -aciml.com -acing.com -acingame.com -acirno.com -acjw.net -ackeline.com -aclqc.com -acmcoder.com -acmicpc.info -acmoba.com -acmsearch.com -acmx.xyz -acnow.net -aco-musical.com -aconf.org -aconline.com -acoolread.com -acpf-cn.org -acq42.com -across-mbox.com -acrpc.com -acshoes.com -acsrq.com -act-telecom.com -actacams.com -actamath.com -actcn.net -actime.net -actions-semi.com -actionsky.com -activeclub.net -activepower.net -actom.me -actoys.com -actranslation.com -actself.me -actuive.com -acucn.com -acumoxj.com -acuworld.net -acwifi.net -acwing.com -acznw.com -ad-cn.net -ad-gone.com -ad-goods.com -ad-mex.com -ad-safe.com -ad-survey.com -ad-young.com -ad110.com -ad12345.com -ad321.cc -ad5.com -ad518.com -ad7.com -ad778.com -adamlu.net -adanxing.com -adapay.tech -adarrive.com -adashuo.com -adaxin.com -adbats.com -adbxb.com -adc-expo.com -adccd.com -adcdn.com -adcdownload.apple.com -adcdownload.apple.com.akadns.net -adconfer.com -addaad.com -addgog.com -addinghome.com -addnewer.com -addoom.com -addpv.com -addsxz.com -adeaz.com -adebang.com -adeline.cc -adesk.com -adfeiwo.com -adflying.com -adfortest.com -adfuns.com -adfyt.com -adg-dental.com -adgomob.com -adhei.com -adhhome.com -adhimalayandi.com -adhubbj.xyz -adhudong.com -adiexpress.com -adiic.com -adinall.com -adinallcdn.com -adjie.com -adjucai.com -adjumo.com -adjuz.com -adl888.com -adl999.com -adlefee.com -adlefei.com -adluckin.com -adlvyou.com -admai.com -admaimai.com -admamax.com -admasterto.com -admin.edu.pl -admin10000.com -admin168.net -admin5.com -admin5.net -admin6.com -admin60.com -admin88.com -adminportal.cdnetworks.com -adminso.com -admintony.com -adminxue.com -adminxy.com -admire.so -admpub.com -admqr.com -adnineplus.com -adnmb.com -adnmb1.com -adnmb2.com -adnmb3.com -adnyg.com -adobe55.com -adobeae.com -adobeedu.com -adobetop.com -adoceans.com -adoregeek.com -adpchina.com -adpgsc.com -adplusx.com -adpolestar.net -adportion.com -adquan.com -ads8.com -adsage.com -adsagedsp.com -adsame.com -adscover.com -adservice.google.com -adsjdy.com -adslr.com -adsmogo.com -adsmogo.mobi -adsmogo.net -adsmogo.org -adssaas.com -adssap.com -adsspr.com -adsunflower.com -adt100.com -adtaipo.com -adtchrome.com -adtime.com -adtiming.com -adtmm.com -adubest.com -adunicorn.com -adunioncode.com -adunite.com -adups.com -adutou.com -adutp.com -advgbid.com -adview.com -advuser.com -adwangmai.com -adwep.com -adwetec.com -adwintech.com -adwo.com -adwuhu.com -adx.ms -adxhi.com -adxiaozi.com -adxiny.com -adxmq.com -adxpand.com -adxqd.com -adxvip.com -adyun.com -adzh.com -adzhongdian.com -adzop.com -adzshd.com -ae-people.com -ae256.com -ae60.com -aebiz.net -aec188.com -aecichina.com -aeenets.com -aegcar.com -aegins.net -aehyok.com -aemedia.org -aendc.com -aeo-cctv.com -aeonbuy.com -aeonlifes.com -aepku.com -aerfaying.com -aerochina.net -aes01.com -aesdrink.com -aesml.com -aesucai.com -aevit.xyz -aex88.com -af360.com -afanti100.com -afarway.com -afcec.com -afdian.net -afdiancdn.com -afdsc.com -afdvr.com -afengseo.com -afengsoft.com -afenxi.com -affecthing.com -affu.net -afgame.com -afie.xin -afilmb.com -afjk.com -afjob88.com -afoxsshadow.com -afrazanna.com -afriendx.com -afshanghai.org -aft1v1.com -afu.io -afuchina.com -afunan.com -afunapp.com -afzhan.com -ag17.wang -ag365.com -ag8vip6.com -agalwood.net -agamepower.com -agcloudcs.com -agctc.com -age-spa.com -age.tv -age06.com -agefans.app -agenge.com -agenow.com -agentzh.org -agfoodpartnership.com -aghcdn.com -agile-china.com -agileex.com -aginomoto.com -agiso.com -agnezanna.com -agoodme.com -agora.io -agrantsem.com -agri35.com -agrittex.com -agrochemshow.com -agrodt.com -agrofairs.com -agrokingcn.com -agrosg.com -agrowingchina.com -agucn.com -aguo.com -agxs.net -ah-inter.com -ah-px.com -ah12333.com -ah163.com -ah3c.com -ah477.com -ah499.com -ah5166.com -ah8.cc -ah9yu.com -ahacpp.com -ahalei.com -ahanxun.com -ahao.moe -ahaohao.com -ahauto.com -ahbb.cc -ahbys.com -ahbztv.com -ahbzyy.com -ahc.ink -ahcaijing.com -ahcaw.com -ahchanyi.com -ahcjhjj.com -ahcnb.com -ahdsez.com -ahdzfp.com -aheading.com -ahfbz.com -ahfdcb.com -ahfensitong.com -ahglj.com -ahgssh.com -ahhanmi.com -ahhdb.com -ahhhjx.com -ahhouse.com -ahhtzx.com -ahhwdp.com -ahhxcm.com -ahjdq.com -ahjem.com -ahjgxy.com -ahjk.com -ahjtxx.com -ahjyec.com -ahjyzb.com -ahjzjy.com -ahjzw.com -ahkemi.com -ahkende.com -ahkjksw.com -ahkjw.com -ahkxsoft.com -ahlib.com -ahlife.com -ahljnews.com -ahmayun.com -ahmky.com -ahmup.com -ahnews.org -ahougn.com -ahphi.com -ahqmdq.com -ahqnrc.com -ahrefa.com -ahrunzi.com -ahscl.com -ahshsz.com -ahshuhua.net -ahsjxjy.com -ahsyj.com -ahsylsy.com -ahteacher.com -ahtlbyby.com -ahtlgc.com -ahtrain.com -ahu.cc -ahuano.com -ahudows.com -ahuyi.com -ahwwnews.com -ahwxcs.com -ahxwkj.com -ahydnet.com -ahydwy.com -ahyessoft.com -ahyouan.com -ahyouth.com -ahzs10000.com -ai-cai.com -ai-factory.com -ai-indestry.com -ai-qingchang.com -ai-start.com -ai-thinker.com -ai.cc -ai.mr -ai012.com -ai2hao.com -ai7.com -ai7.org -ai895.com -ai9475.com -aiagain.com -aiagain.net -aiai6.com -aiaisz.xyz -aiaiu.com -aiaor.com -aiba.com -aibaimm.com -aibang.com -aibang5.com -aibaov.com -aibeidian.com -aibing.cc -aibo123.com -aibooks.cc -aibosha.com -aibusy.com -aicai.com -aicaicdn.com -aicaike.com -aicdn.com -aicdn4.com -aicdn5.com -aichaicp.com -aichaoxing.com -aichawu.com -aicheren.com -aichunjing.com -aiclicash.com -aiclk.com -aicloud.com -aicode.cc -aicoinstorge.com -aicsnet.com -aicu8.com -aicunfu.com -aidafen.com -aidai.com -aidaily.com -aidaiz.com -aidalan.com -aidangbao.com -aidanji.com -aidaxing.com -aidaxue.com -aideep.com -aidg.cc -aidianji.net -aidiao.com -aidigger.com -aidigong.com -aidimedia.com -aidingbuding.com -aidisida.com -aidlearning.net -aidog.com -aidong.me -aidoor.net -aidouer.net -aidpaper.com -aidrive.com -aiduoka.com -aiduwenxue.com -aiec-alliance.com -aiegle.com -aiemy.com -aier021.com -aier0755.com -aierchina.com -aierfano.com -aiezu.com -aifamu.com -aifanfan.com -aifang.com -aifangke.com -aifanr.net -aifanyi.net -aifbr.com -aifcdn.com -aifei8.net -aifengjie.com -aifont.com -aifu10.com -aifu360.com -aigame100.com -aiganggu.com -aige010.com -aigei.com -aigewc.com -aigo.com -aigodiy.com -aigou.com -aigtek.com -aigupiao.com -aigzg.com -aihaisi.com -aihala.com -aihandu.com -aihanfu.com -aihanfu.net -aihangtian.com -aihao.cc -aihao.org -aihecong.com -aihehuo.com -aihelp.net -aihuahua.net -aihuajia.com -aihuaju.com -aihuau.com -aihuishou.com -aihundan.com -aihuo.cc -aii-alliance.org -aiijournal.com -aiimg.com -aiimooc.com -aiioii.com -aiizen.net -aijc.net -aiji66.com -aijianji.com -aijigeci.com -aijikong.com -aijishu.com -aiju.com -aik.com -aikac.com -aikaitao.com -aikaixin.com -aikaiyuan.com -aikan.tv -aikan8.com -aikang.com -aikcms.com -aiketour.com -aikeu.com -aikexi.com -aikf.com -aikucun.com -ailaba.org -ailbaba.me -aileleba.com -ailete.com -ailewan.com -aili.com -ailianbang.com -ailinglei.com -ailinux.net -ailinzhou.com -ailiyun.com -ailom.com -ailongmiao.com -ailuntan.com -ailvxing.com -aimagang.com -aimaoji.com -aimapp.net -aimatech.com -aimatrix.ai -aimeas.com -aimeideni.com -aimeike.tv -aimeit.com -aimikuajinggou.com -aiminer.cc -aimipay.net -aimiplay.com -aimituan.com -aimo.moe -aimodou.net -aimoge.com -aimsen.com -ainfiniteactivity.com -ainiapp.com -ainirobot.com -ainiseo.com -ainiu.net -ainiuwa.com -ainuanbao.com -ainyi.com -aiodt.com -aiotvoice.com -aipai.com -aipark.com -aipear.com -aipenglai.com -aipiaxi.com -aipingxiang.com -aipinko.com -aiprose.com -aips.me -aipuo.com -aipz.com -aipz777.com -aiqianduan.com -aiqianxq.com -aiqin.com -aiqisoft.com -aiqiy.com -aiqiye.cc -aiqiyi.com -aiqiyivip.com -aiqu.com -aiquanjian.com -aiqucn.com -aiqumi.com -aiqzu.net -air-level.com -air-matters.com -air-quality.com -air.cc -airasia.com -airbft.com -airchina.com -airchinacargo.com -airchinagroup.com -airchinaim.com -airchinajet.com -airchinamedia.com -aircn.org -aircourses.com -airdropin.com -airen1314.com -airkunming.com -airmate-china.com -airmb.com -airmobyte.com -airnut.com -airoha.com.tw -airsavvi.com -airspa.net -airstar.com -airtofly.com -airtu.com -airwh.com -aisaohuo.com -aisaw.com -aisbeijing.com -aisearch.cc -aisee.tv -aiseminar.com -aishangcan.com -aishengji.com -aisila.com -aisino.com -aisinogd.com -aisinogz.com -aisixiang.com -aisk.me -aisky.cc -aiskycn.com -aisojie.com -aisoutu.com -aispeech.com -aispreadtech.com -aisy.com -aitaojin.com -aite.xyz -aitebuy.com -aitecar.com -aitemple.com -aiti.fun -aitiancheng.com -aitoushe.com -aitrans.net -aitsw.com -aituan.com -aitupian.com -aituwo.com -aitxt.com -aityp.com -aiurl.com -aiuw.com -aiuxdesign.com -aiuxian.com -aiuxstudio.com -aiviy.com -aiwall.com -aiwan4399.com -aiwan91.com -aiwanba.net -aiwanpai.com -aiwansc.com -aiwawa520.com -aiweibang.com -aiweibk.com -aiweline.com -aiwen.cc -aiwenwo.net -aiwenyi.com -aiworkspace.com -aiwulao.com -aixchina.net -aixcoder.com -aixiaoduo.com -aixiashu.com -aixiatxt.com -aixiawa.com -aixiawx.com -aixiegao.com -aixiezuo.com -aixifan.com -aixigua.com -aixinbaomu.com -aixinquban.com -aixinwu.org -aixinyunfan.com -aixq.com -aixuedai.com -aixuefu.com -aixuejun.com -aixuetang.com -aixuexi.com -aixyz.com -aiyaapp.com -aiyadu.com -aiyangedu.com -aiyanqing.com -aiyaopai.com -aiyichuan.com -aiyidu.com -aiyinghun.com -aiyingli.com -aiyingshi.com -aiykj.com -aiyou.com -aiyou.tv -aiyouman.com -aiyoumi.com -aiyoweia.com -aiyuangong.com -aiyuke.com -aizaoqi.com -aizhan.com -aizhanku.com -aizhenghun.com -aizhengli.com -aizhenrong.com -aizhet.com -aizhi.biz -aizhibaby.com -aizhicn.com -aizhigu.tv -aizhizu.com -aizhuizhui.com -aiziti.net -aizongyi.com -aizuna.com -aizuopin.com -ajaxjs.com -ajaxstu.com -ajbbkf.com -ajcass.org -ajcctv.com -ajclass.com -ajebw.com -ajhchem.com -ajiang.net -ajinga.com -ajiuqian.com -ajkcdn.com -ajkdns2.com -ajkimg.com -ajmide.com -ajpsp.com -ajrcb.com -ajs17.com -aju.space -ajwang.com -ajweishequ.com -ajxlx.com -ajyg.com -ak0.tw -ak1ak1.com -ak47ids.com -akaedu.org -akaifa.com -akaiwl.com -akandou.com -akaxin.com -akbe.com -akbkgame.com -akdanji.com -akerp.com -akey.im -akey.me -akeyun.com -akhtm.com -akhy.com -akinoheya.com -akjunshi.com -akkogear.com -akng.net -akniu.com -aknzb.com -akomr.com -akoofs.com -akppt.net -akq.ee -akr-developers.com -akscan.com -aksxw.com -aku.pub -akuaikan.com -akuziti.com -akyiyou.com -akylq.com -al-jin.com -al8l.com -alabmed.com -alaccountant.com -alacun.com -aladdin-e.com -aladdinnet.com -alading123.com -alai.net -alameal.com -albbzjx.com -albltc.com -aldcup.com -aldeee.com -aldnew.com -aldtop.com -aldwx.com -aledeco-hk.com -aleest.com -alenshaw.com -alertover.com -alexa.sx -alexandraeden.com -alexyan.cc -aleyoo.com -alfeng.com -alfheim.cc -algorithmart.com -ali213.com -ali213.net -ali37.net -ali727.com -aliagain.com -alianhome.com -aliapp.com -aliapp.org -aliavv.com -alibaba-inc.com -alibaba.com -alibaba.net -alibabacloud.com -alibabacorp.com -alibabadns.com -alibabadoctor.com -alibabafapiao.com -alibabagroup.com -alibabaonline.com -alibabapictures.com -alibabaplanet.com -alibabatech.org -alibabaued.com -alibabausercontent.com -alibjyun.com -alibjyun.net -alibole.com -alibuybuy.com -alicall.com -alicdm.com -alicdn.com -alicdngslb.com -alicelj.com -alicloudapi.com -alicloudccp.com -alicloudlayer.com -alicloudsec.com -alicloudwaf.com -alicontainer.com -alidata.org -alidayu.com -alidns.com -aliedge.com -alienfans.net -alientek.com -aliexpress.com -aliexpress.ru -alifabu.com -alifanyi.com -aligames.com -aligaofang.com -aligfwaf.com -alihd.net -alihuahua.com -aliimg.com -alijijinhui.org -alijk.com -alikunlun.com -alikunlun.net -alili.tech -aliliying.com -aliloan.com -alimama.com -alimebot.com -alimmdn.com -alinx.com -alinx.vip -aliog.com -alip.biz -alipanso.com -alipay-eco.com -alipay.com -alipay.hk -alipay.net -alipaycs.com -alipaydev.com -alipaydns.com -alipaylog.com -alipayobjects.com -alipcsec.com -aliplay.com -aliplus.com -aliqiche.com -aliresearch.com -alisoft.com -alisonedwina.com -alisports.com -alitchina.com -alithefox.net -alithon.com -alitrip.com -alitrip.hk -aliued.com -aliunicorn.com -aliuv.com -alivecdn.com -alivl.com -alivv.com -alivv.net -aliway.com -aliwd.com -aliwears.com -aliwx.net -alixiaozhan.com -alixiaozhan.net -alixinwen.com -alixixi.com -alixox.com -aliyiyao.com -aliyue.net -aliyun-cdn.com -aliyun-inc.com -aliyun-ns.com -aliyun-youhui.com -aliyun.com -aliyun.org -aliyun365.com -aliyunbaike.com -aliyuncdn.com -aliyunceng.com -aliyuncs.com -aliyundaiwei.com -aliyunddos0002.com -aliyunddos0005.com -aliyunddos0006.com -aliyunddos0010.com -aliyunddos0018.com -aliyunddos0019.com -aliyunddos0020.com -aliyunddos0023.com -aliyunddos0026.com -aliyunddos0027.com -aliyunddos0029.com -aliyunddos0030.com -aliyunddos1001.com -aliyunddos1002.com -aliyunddos1003.com -aliyunddos1004.com -aliyunddos1005.com -aliyunddos1006.com -aliyunddos1007.com -aliyunddos1009.com -aliyunddos1010.com -aliyunddos1011.com -aliyunddos1012.com -aliyunddos1013.com -aliyunddos1014.com -aliyunddos1015.com -aliyunddos1016.com -aliyunddos1017.com -aliyunddos1018.com -aliyunddos1019.com -aliyunddos1020.com -aliyunddos1021.com -aliyunddos1022.com -aliyunddos1023.com -aliyunddos1025.com -aliyunddos1026.com -aliyunddos1028.com -aliyunddos1029.com -aliyunddos1030.com -aliyundrive.com -aliyunduncc.com -aliyundunwaf.com -aliyunedu.net -aliyunfuwuqi.com -aliyunga0018.com -aliyungf.com -aliyunhn.com -aliyunj.com -aliyunlive.com -aliyunpds.com -aliyunqifu.com -aliyuntest0161.xin -aliyunwaf.com -aliyunwaf1.com -aliyunwaf2.com -aliyunwaf3.com -aliyunwaf4.com -aliyunwaf5.com -aliyunyh.com -alizhaopin.com -alizila.com -alkuyi.com -all-dream.com -all3c.com -all4seiya.net -allappapi.com -allawnfs.com -allawntech.com -allbrightlaw.com -allchinahardware.com -allchips.com -allcitygo.com -allcitysz.net -alldk.com -alldobetter.com -alleadprint.com -allfang.com -allfunnies.com -allhistory.com -allianz360.com -allibook.com -alliedjeep.com -allinfinance.com -allinpay.com -allinpayhb.com -alliread.com -alllget.com -alllook.tv -allmaga.net -allnow.com -allok.wang -alloyteam.com -allpayx.com -allposs.com -allpyra.com -allrace.com -allsenseww.com -allstack.net -allstor.org -alltoall.net -alltobid.com -alltosun.com -alltuu.com -allwin368.com -allwinnertech.com -allwinso.com -allyes.com -allyes.net -allystar.com -alma-intl.com -aloha-ukulele.com -alonemonkey.com -along.party -alongsky.com -alookbrowser.com -alookql.com -alookweb.com -alpaca.run -alpha-browser.com -alpha-star.org -alphabole.com -alphafun.com -alsovalue.com -alswl.com -altstory.com -altxw.com -alu1886.com -aluaa.com -alumni-cn.org -alumni-scut.org -aluntan.com -alwaysdesign.xin -alwaysnb.com -alwindoor.com -alxw.com -alyisheng.com -alyssaeileen.com -alyzq.com -am774.com -am89.com -amaomb.com -amap.com -amarsoft.com -amassfreight.com -amaxchina.com -amazeui.org -amazfit.com -amazingsys.com -amazon1688.com -ambassador-sh.com -ambassadorchina.com -amberbj.com -amberedu.com -ambereduwh.com -ambition-soft.com -ambkct.com -ambow.com -amchamchina.org -amdotibet.com -amec-inc.com -amemv.com -americachineselife.com -americanobgyn.com -ameson.org -amethystum.com -amexpressnetwork.com -amfproject.org -amgbs.com -amgepic.com -amh.sh -amhimalayanet.com -amhl.net -amhnn.com -amicool.net -amif-expo.com -amijiaoyu.com -aminer.org -aminglinux.com -aminoacid-jirong.com -amo9.com -amobbs.com -amon.org -amon1997.com -ampc8.com -ampcn.com -amplesky.com -ampmake.com -ampxl.com -ams-ic.com -amsjsy.com -amsoveasea.com -amssro.net -amsxdc.com -amtron-ic.com -amuletj.com -amuletor.com -amunion.com -amuren.com -amwayapp.com -amwiki.org -amysql.com -amyxun.com -amz123.com -amz520.com -amzcaptain.com -an-ran.com -analysysdata.com -analytics-china.com -analyticskey.com -anandoor.com -anank.ke -ananzu.com -anatuprak.com -anav.com -anbang-life.com -anbanggroup.com -anchengcn.com -anchi-china.com -anchnet.com -ancii.com -ancun.com -and568.com -anda1516.com -andaike.com -andan.me -andefz.com -andeyi1688.com -andhj.com -andisoon.com -andpay.me -andreader.com -android-doc.com -android-studio.org -androidchina.net -androidcookie.com -androidinvest.com -androidmi.com -androidonline.net -androidonlines.com -androidperformance.com -androidvista.com -androidx86.net -andwi.com -andyiac.com -andyron.com -andyx.net -ane56.com -aneasystone.com -anf-z.com -anfan.com -anfang086.com -anfantech.com -anfeng.com -anfensi.com -angeeks.com -angel-game.net -angel-usa.com -angelhome.org -angeljjangnara.com -angell-studio.com -angellsec.com -angelmom.org -angelyeast.com -angelyeast.ru -angesi16.com -angiefans.com -angli.me -anglo-chinese.com -angogotech.net -angroups.com -angruo.com -angrymiao.com -anguanjia.com -angui.org -angwei.net -anhei2.com -anhei3.net -anheng.com -anhkgg.com -anhouse.com -anhuaedu.com -anhui365.net -anhuigwy.org -anhuihouniao.com -anhuihr.com -anhuilife.com -anhuimobile.com -anhuinews.com -anhuiry.com -aniccw.net -aniceapp.com -anicoga.com -anijue.com -animalchina.com -animationcritics.com -animetaste.net -anitama.net -anitoys.com -aniu.so -aniu.tv -anix.xyz -anji-ceva.com -anji-logistics.com -anji-tonghui.com -anji66.net -anjian.com -anjianghu.net -anjimicro.com -anjismart.com -anjuke.com -anjukestatic.com -ankang06.org -ankangrc.com -ankangwang.com -ankebio.com -ankelife.com -ankerjiedian.com -ankevip.com -ankichina.net -ankki.com -anlaiye.com -anlibaby.com -anlink.com -anlogic.com -anlu114.com -anmobc.com -anmoxiansheng.com -anmoyi98.com -ann9.com -annangela.moe -annchain.io -anneishuo.com -annelhair.com -annhe.net -annto.com -anoah.com -anonym-hi.com -anorectal.net -anosmcloud.com -anoyi.com -anqingonline.com -anqn.com -anquan.info -anquan.org -anquan35.com -anquanbao.com -anquanke.com -anquanone.com -anquanquan.info -anquantong.com -anquanxia.com -anquanzhuomian.com -anqunzhi.com -anrayer.com -anren.org -anrenmind.com -anruichina.com -ansgo.com -anshi7.com -anshouji.com -ansiding.com -ansky.com -ansteelgroup.com -ant-clean.com -ant78.com -anta.com -antairui.net -antarx.com -antbuyhot.com -antcloud-miniprogram.com -antcut.com -antdtheme.com -antdv.com -antebao.com -antebo.com -antfin-inc.com -antfin.com -antfortune.com -antgroup.com -anticheatexpert.com -antiy.com -antiy.net -antpedia.com -antpool.com -antriver.com -antrol.com -antrtb.com -antsdaq.com -antspainter.org -antuan.com -antuan365.com -antuan532.com -antuni.com -antutu.com -antutu.net -antuzhi.com -antvr.com -antzk.com -anw.red -anw8.com -anweishi.com -anweizhi.com -anwen.cc -anxcn.com -anxhu.com -anxia.com -anxiaoer.com -anxin.com -anxin360.com -anxin360.net -anxinapk.com -anxindavisa.com -anxindeli.com -anxinlirong.com -anxinmai.com -anxinssl.com -anxinyisheng.com -anxiu.com -anxiw.com -anxjm.com -anxz.com -any123.com -any8.com -anyan.com -anyang100.com -anyangedu.com -anyant.com -anybeen.com -anydd.com -anyelse.com -anyew.com -anyforweb.com -anygame.info -anyiidc.com -anyilv.com -anyka.com -anyknew.com -anymcu.com -anymetre.com -anyoy.com -anyrtc.io -anysdk.com -anysql.net -anytesting.com -anytranscription.com -anyuantec.com -anyunjianzhan.com -anyv.net -anyway.fm -anywlan.com -anywood.com -anyxz.com -anzerclub.com -anzext.com -anzhen.org -anzhi.com -anzhibao.com -anzhitan.com -anzhixun.com -anzhuoapk.com -anzhuotan.com -anzhuowo.com -anzogame.com -anzow.com -ao-hua.com -aoaiao.com -aoao365.com -aoaob.com -aoapp.com -aobacore.com -aobaishi.com -aobo62.com -aobosoft.com -aoc.com -aocde.com -aocdn.com -aoch.com -aoclia.com -aocslb.com -aodabo.tech -aodaliyaqianzheng.com -aoddoll.com -aodeng.cc -aodianyun.com -aodingsy.com -aoedi.com -aoerdz.com -aoetech.com -aofenghuanjing.com -aograph.com -aohuasports.com -aoidf3.com -aojauto.com -aojian.net -aojian2.net -aojiaostudio.com -aojiyingyu.com -aojiyouxue.com -aojiyuke.com -aojoo.com -aoju.net -aokangsports.com -aolai.com -aolaigo.com -aoliday.com -aolylcd.com -aomeng.net -aomoxo.com -aomygod.com -aomygodstatic.com -aonaotu.com -aoofu.com -aoogee.com -aoomoo.com -aoratec.com -aoscdn.com -aosens.com -aoseo.com -aoserp.com -aoshitang.com -aoshowsh.com -aoshu.com -aosong.com -aosoo.com -aoswtc.com -aotian.com -aotocn.com -aotrip.net -aotu.io -aotuzuche.com -aowei.com -aowenmarketing.com -aoxingboli.com -aoxingsujiao.com -aoxintong.com -aoxtv.com -aoya-hk.com -aoyanchang.com -aoye.com -aoyii.com -aoyor.com -aoyotech.com -aoyou.cc -aoyou.com -aoyou365.com -aoyoux.com -aoyuge.com -aoyunque.com -aozehuanbao.com -aozhanls.com -aozhougoufang.com -aozhuanyun.com -ap88.com -apa.me -apabi.com -apachecn.org -apad.pro -apcdianyuan.com -apcdns.net -apclc.com -apcupse.com -apdcdn.com -apdnews.com -ape8.com -apeeri.com -apehorse.com -apeiwan.com -apelearn.com -apesk.com -apetdog.com -apexmic.com -apexyun.com -apeyun.com -apgblogs.com -apgoview.com -aphidic.com -api.bz -apiadmin.org -apiairasia.com -apicase.io -apicloud.com -apicvn.com -apigwtencent.com -apiview.com -apizb.com -apizl.com -apizza.cc -apizza.net -apk3.com -apk8.com -apkevery.com -apkgu.com -apkjam.com -apkplug.com -apkrj.com -apkui.com -apkyx.com -apkzu.com -aplan.tv -aplum-inc.com -aplum.com -apluscap.com -aplusunion.com -apmarry.com -apmbooth.com -apme-magnetics.com -apmvista.com -apnring.com -apollo.auto -apollotop.com -apous.com -apowo.com -apowogame.com -apoyl.com -app-123.com -app-echo.com -app-measurement.com -app-router.com -app-sage.com -app-store.name -app-web-seo-aso.com -app-zh.com -app001.com -app111.com -app111.org -app1116.app -app17.com -app178.com -app2pixel.com -app4cms.net -app86.com -app887.com -appadhoc.com -apparelsos.com -appbi.com -appbk.com -appbocai.com -appbsl.com -appbyme.com -appbz.info -appc1.com -appccc.com -appchina.com -appchizi.com -appcoo.com -appcool.com -appcpa.net -appcpx.com -appcup.com -appdao.com -appdown.info -appdp.com -appduu.com -appeasou.com -appgame.com -appganhuo.com -appgenuine.com -appgz.com -appicplay.com -appjiagu.com -appjzy.com -appkaifa.com -appkefu.com -appkg.com -appldnld.apple.com -appldnld.g.aaplimg.com -apple110.com -apple4.us -apple88.net -apple886.com -appleads-trk.com -appleadstech.com -applebl.com -applehunt.com -appleid.cdn-apple.com -appletuan.com -applex.net -applicationloader.net -applinzi.com -applysquare.com -applysquare.net -appmifile.com -appnode.com -appotronics.com -apppoo.com -appqingshu.com -apprcn.com -appresource.net -apps.apple.com -apps.mzstatic.com -apps.samsung.com -apps121.com -appscan.io -appsflower.com -appshike.com -appsimg.com -appsina.com -appstochina.com -apptao.com -appubang.com -appublisher.com -appurl.cc -appurl.me -appving.com -appvipshop.com -appvv.com -appweiyuan.com -appwill.com -appwuhan.com -appwuhan.net -appxcode.com -appxzz.com -appyao.com -appying.com -appykt.com -appzhonghua.com -appzhu.com -apsgo.com -apt.so -aptchina.com -aptenon.com -apusic.com -apxm.net -aqara.com -aqb.so -aqbxcdn9.com -aqbz.org -aqdcdn.com -aqdesk.com -aqdh.com -aqdkc.com -aqdog.com -aqdstatic.com -aqee.net -aqfen.com -aqhbq.com -aqhuayu.com -aqidb.org -aqioo.com -aqisite.com -aqiyi.com -aqniu.com -aqqcx.com -aqquan.org -aqtd.com -aqtxt.com -aquacity-tj.com -aquanutriera.com -aquanyou.com -aquapipetech.com -aquayee.com -aqueck.com -aqumon.com -aqyun.com -aqyzm.com -aqzpw.com -aqzt.com -aqzyzx.com -ar-max.com -aragexpo.com -arapp.online -arayzou.com -arc-uds.com -arcas-da.com -arccode.net -arcdmi.com -archcollege.com -archcy.com -archermind.com -archeros.com -archerpeng.com -archery8.com -archerysalon.com -archgo.com -archi-motive.com -archiant.com -archidead.net -archina.com -archina.org -archiname.com -archio.pro -architbang.com -archlinuxmips.org -archsummit.com -arcsoftai.com -arctime.org -ardsec.com -areachina.com -areader.com -arebz.com -arefly.com -arenacdn.com -ares.dl.playstation.net -arestech-sz.com -arhieason.com -arhoo.com -aria2.org -ariesmob.com -arinchina.com -aris.la -arisastar.com -arkfeng.xyz -arkn81.com -arkoo.com -arkrdigital.com -arkread.com -arkteam.net -arliki.com -arm001.com -arm9.net -arm9home.net -armbbs.net -armchina.com -armsword.com -armystar.com -arocmag.com -arp.cc -arpg2.com -arpun.com -arrail-dental.com -arrow-tower.com -arrowos.net -art-ba-ba.com -art-child.com -art138.com -art2500.com -art456.com -artacode.com -artbeijing.net -artbookinchina.com -artcns.com -artddu.com -artebuy.com -artech-graphite.com -artfinace.com -artfoxlive.com -artgohome.com -artgoin.com -arthome163.com -arthurchiao.art -arti200.com -artimg.net -artintern.net -artlinkart.com -artliving.tv -artlnk.com -artoolinks.com -artopia-group.com -artp.cc -artplusall.com -artpro.com -artrade.com -artron.net -artronimages.com -artrus.net -arts-kunst.com -artsbuy.com -artsncollections.com -artvisioncg.com -artwe.com -artwer.com -artww.com -artxuanyi.com -artxun.com -arvato-ocs.com -arvinhk.com -aryasec.com -as-doll.com -as-exchange.com -as-hitech.com -as3f.com -as5.com -asaki.me -asao.com -asbeijing.com -asc-wines.com -aschina.org -aschtj.com -asciima.com -asczwa.com -asczxcefsv.com -asd868.com -asdyf.com -asean-china-center.org -aseantradecenter.com -aseoe.com -asfzl.net -asgxsy.com -ashan.org -ashj.com -ashma.info -ashvsash.com -ashvsash.net -asia-dns.com -asiabt.com -asiaci.com -asiacool.com -asiacorp.net -asiae.com -asiaeap.com -asiafactor.com -asiafpd.com -asiaidc.net -asiainfo-sec.com -asiainfo.com -asiainfodata.com -asianewsphoto.com -asiarobot.net -asifadeaway.com -asilu.com -asimi8.com -askceph.com -askci.com -asketchup.com -asklib.com -asklicai.com -askmaclean.com -askpanda.cc -askququ.com -asktao.com -askxt.org -aslzw.com -asm64.com -asnlab.com -asnlab.org -aso.ink -aso100.com -aso114.com -aso120.com -asoasm.com -asomob.com -asoulfan.com -asp163.net -asp168.com -asp300.com -asp8php.com -aspbc.com -aspcool.com -aspire-info.com -aspirecn.com -aspirer.wang -aspku.com -aspnet.tech -aspsky.net -aspx.cc -aspxhome.com -aspxhtml.com -asqql.com -asrmicro.com -asrsingapore.com -assbbs.com -assets-global.viveport.com -assets.analog.com -assets.uxengine.net -assets.volvocars.com -assrt.net -astbbs.com -astestech.com -astfc.com -asthis.net -astorpiano.com -astrocn.org -astron.ac -astronautchina.com -astropulsion.com -asussmart.com -asussz-zp.com -aswetalk.net -asyzonline.com -at-siac.com -at0086.com -at0086.net -at58.com -at78.com -at851.com -at864.com -at98.com -ata-edu.com -ata-test.net -atacchina.com -ataoju.com -ataozx.com -atatech.org -atbug.com -atcc360.com -atchip.com -atcontainer.com -atcpu.com -atctest.org -atelier39.org -atf.com -atfeng.com -atfjk.com -atguigu.com -atguigu.org -athaitao.com -athmapp.com -atianqi.com -atido.com -ating.info -atitsc.com -atiyun.com -atjiang.com -atlas1688.com -atm988.com -atmbox.com -atobo.com -atomhike.com -atomic-art.com -atomwuxi.com -atool.org -atool9.com -atoolbox.net -atop.fun -atpanel.com -atpapapa.com -atriumlee.com -atstudy.com -attakids.com -attri.mobi -attyou.com -atuoyi.com -atwtech.net -atxwm.com -atyun.net -atzjg.net -atzlinux.com -atzuche.com -auak.com -aucanlink.com -aucnln.com -audio160.com -audiobookbay.nl -audiobuy.cc -audiocn.com -audiocn.org -audiofamily.net -audiy.com -audlabs.com -audley-printer.com -augsky.com -augth.com -augurit.com -auiou.com -auly.com -aunapi.com -auniontech.com -aunload.com -aupu.net -aurogon.com -auroivf.com -auromcs.com -ausaview.com -ausbio.com -auscoo.com -ausdn.com -aushinelyn.com -aushy.com -ausny.com -auspous.com -aussino.net -austargroup.com -austarskill.com -austarstudy.com -ausuu.com -auto-beijing.com -auto-ccpit.org -auto-learning.com -auto-made.com -auto-mooc.com -auto-purify.com -auto-wo.com -auto000.com -auto18.com -auto318.com -auto328.com -auto333.com -auto510.com -auto6s.com -auto98.com -autoai.com -autobaidu.com -autobizreview.com -autocamel.com -autochina360.com -autochips.com -autodg.com -autodmp.com -autodry.net -autodwg.com -autoesd.com -autofull.net -autogslb.com -autoharbin.org -autoho.com -autohome.com -autohr.org -autoitx.com -autojingji.com -autojkd.com -autojs.org -autonavi.com -autono1.com -autoparts-yoto.com -autophagy.net -autoplansearch.com -autoprotect365.com -autoqingdao.com -autoshanghai.org -autosmt.net -autospaceplus.com -autosup.com -autozw.com -auwinner.com -auxgroup.com -auyou.com -av-ic.com -av010.com -av199.com -av2.me -av269.com -av380.net -avacvisa.com -avalon.pw -avalon233.com -avanpa.com -avatarmind.com -avatarmobi.com -avc-mr.com -avc-ott.com -avc.com.tw -avdll.com -aves.art -avexchina.com -avgh5.com -avhome.net -avic.com -avic021.com -avicnews.com -avicone.com -avicsec.com -avicui.com -avivaqueen.com -avivasign.com -avlsec.com -avlyun.com -avnpc.com -avoscloud.com -avq360.com -avqrw.com -avrvi.com -avrw.com -avtechcn.com -avtt0033.com -avtt830.com -aw-ol.com -aw.cc -aw99.com -awaimai.com -awaker.net -awaysoft.com -awbang.com -awc618.com -awcloud.com -awcn.cc -aweb.cc -awehunt.com -awemeughun.com -awesome-bruce.me -awinic.com -awjiaju.com -aword.net -awotuan.com -awoyun.com -awsdns-cn-57.com -awsok.com -awspal.com -awstar.net -awtmt.com -awuming.com -awx1.com -ax1x.com -ax2nc4.ren -ax630.com -axatp.com -axbsec.com -axbxw.com -axcf.com -axera-tech.com -axfys.com -axhub.im -axjsw.com -axmag.com -axmro.com -axnsc.com -axshuyuan.com -axtmy.com -axtoutiao.com -axuer.com -axure.org -axure.us -axureshop.com -axureux.com -axureyun.com -axxiaoshuo.com -axyxt.com -axzchou.com -axzlk.com -ay57.com -ay99.net -aycav.com -ayfdc.com -ayfy.com -aygjj.com -ayguge.com -ayibang.com -ayidada.com -ayijx.com -ayilaile.com -ayjs.net -ayqy.net -ayrbs.com -ayuren.com -ayurumen.com -ayushan.com -ayux.net -ayxbk.com -ayxz.com -azber.com -azbingxin.com -azchcdna.com -azchcdnb.com -azchcdng.com -azchcdnj.com -azchcdnm.com -azfashao.com -azg168.com -azhimalayanvh.com -azhituo.com -azhjt.com -azooo.com -azoyacdn.com -azoyagroup.com -azurew.com -azureyun.com -azycjd.com -azyx.com -azz.net -b-chem.com -b-eurochina.com -b-fairy.com -b086.com -b0w.me -b178.com -b1bj.com -b1qg.com -b1uew01f.net -b23.tv -b2b-builder.com -b2b.biz -b2b168.com -b2b168.net -b2b168.org -b2b179.com -b2b6.com -b2b98.net -b2baa.com -b2bic.com -b2bname.com -b2bneican.com -b2bvip.com -b2bvip.net -b2c-seo.com -b2cedu.com -b2q.com -b355.cc -b35ii.com -b3inside.com -b5200.net -b5b6.com -b5esports.me -b5m.com -b612.me -b612kaji.com -b6ss.com -b780.com -b7l.cc -b8yx.com -ba-li.com -ba125.com -ba210.com -baaidu.com -baalchina.net -baba.cc -baba100.com -bababian.com -bababus.com -babaike.com -babaimi.com -babaipu.com -babao.com -babaofan.com -babapi.com -babariji.com -babaxiong.com -babeijiu.com -babidou.com -babidou.net -babihu.com -babsoft.net -baby-bus.com -baby169.net -baby577.com -baby611.com -baby868.com -babybus.com -babybus.org -babycdn.com -babyinhere.com -babymob.com -babymoro.com -babymozart.cc -babyqiming.com -babytree.com -babytreeimg.com -bacao8.com -bacaoo.com -bacaosh.com -bacic5i5j.com -backzero.com -bacocis.com -badls.com -badmintoncn.com -badouxueyuan.com -badu.com -badudns.cc -baertt.com -bafafafa.com -bafangjuhe.com -bafangka.com -bafangwang.com -bagb2b.com -bagesoft.net -bagevent.com -bagew.com -bageyalu.com -bags163.com -bagtree.com -bagualu.net -bagxs.com -bahens.com -bai.com -bai68.com -baibailai.com -baibaoyun.com -baibianwukong.com -baibianyishu.com -baibm.com -baibo8.com -baibu.com -baic-hs.com -baicai.com -baicaio.com -baicaiyouxuan.com -baicaosoft.com -baicells.com -baichanghui.com -baicheng.com -baichenginedu.com -baichuanhd.com -baichuanhudong.com -baicizhan.com -baicizhan.org -baiclouds.com -baicmotor.com -baicmotorsales.com -baicuoa.com -baidajob.com -baidao.com -baidd.com -baidenafu.com -baideye.com -baidinet.com -baidouya.com -baidu-360-yyy-kubo.com -baidu-int.com -baidu-itm.com -baidu-mgame.com -baidu-umoney.com -baidu-wenxue.com -baidu.cc -baidu.cm -baidu.com -baidu.jp -baidu.mobi -baidu.net -baidu.to -baidu1.com -baidu120.cc -baidu123.com -baidu521.com -baiduads.com -baidubaidubaidu.com -baidubaidubaidu.net -baidubce.com -baiduc.com -baiducdnku.com -baiducontent.com -baidudaquan.com -baidufe.com -baidufree.com -baiduhua.com -baidulook.com -baidunongmin.com -baiduonce.com -baiduor.com -baidupan.com -baidupcs.com -baidusobing.com -baidustatic.com -baidutab.com -baidutieba.com -baidutt.com -baiduux.com -baiduv.com -baiduwebgame.com -baiduwpan.com -baiduyun.com -baiduyun.wiki -baiduyundns.com -baiduyundns.net -baiduyunpan.com -baiduyunpan.net -baiduyunsousou.com -baiduyy.com -baiduzhidao.site -baiduzjn.com -baieryk.com -baietu.com -baifan.net -baifendian.com -baifubao.com -baifumeiba.com -baigepo.com -baigeseo.com -baigm.com -baigo.net -baigongbao.com -baihe.com -baiheee.com -baihei.net -baihephoto.com -baihexs.com -baihong.com -baihui.com -baihuikangjt.com -baihuillq.com -baihuoke.com -baihuwang.com -baiila.com -baiinfo.com -baijiacloud.com -baijiahulian.com -baijiasheping.com -baijiasoft.com -baijiayun.com -baijiegroup.com -baijiekj.com -baijiexiu.com -baijincdn.com -baijindai.com -baijingapp.com -baijiu88.com -baijob.com -baijunyao.com -baikalminer.com -baike.biz -baike.com -baiked.com -baikemy.com -baikemy.net -baikezh.com -bailiaijia.com -bailiangroup.com -bailiban.com -bailiguangmang.com -bailitech.com -bailitop.com -bailuqixiu.com -baima.com -baimao-expo.com -baimao.com -baimaohui.net -baimda.com -baimei.com -baimg.com -baimiaoapp.com -baimin.com -baina.com -bainaben.com -baineng.cc -baiozhuntuixing.com -baipu365.com -baiqiaogame.com -baiqishi.com -baiquandai.com -baiquefahuasi.com -baironginc.com -bairuitech.com -baise520.com -baiseyun.com -baishakm.com -baishan-cloud.com -baishan.com -baishancloud.com -baishancloud.org -baishangeek.com -baishicha.com -baishishuju.com -baishixi.xyz -baishudata.com -baishunet.com -baisiker.com -baisu.com -baitaihuge.com -baiteng.org -baithu.com -baitianinfo.com -baitiao.com -baituibao.com -baiu.com -baiud.com -baiudu.com -baiven.com -baiwandz.com -baiwang.com -baiwantuan.com -baiwutong.com -baixiangxiang.com -baixiaosheng.net -baixing.com -baixing.net -baixingcdn.com -baixingfanli.com -baixingjd.com -baixingmall.com -baixingzixun.com -baixiong.online -baixiongz.com -baixiu.org -baixu.com -baiyangwang.com -baiye5.com -baiyewang.com -baiyi181.com -baiyiba.com -baiyinggd.com -baiyingtx.com -baiyintouzi.com -baiyjk.com -baiyou100.com -baiyouo.com -baiyu.tech -baiyuemi.com -baiyunairport.com -baiyundou.net -baiyuno.com -baiyunxitong.com -baiyuxiong.com -baizhan.net -baizhanke.com -baizhenzhu.com -baizhibest.com -baizhiedu.com -baizhixx.com -baizhu.cc -bajiebofang.com -bajiecaiji.com -bajiege.com -bajiehechuang.com -bajintech.com -bajiu.org -bakaawt.com -bakaxl.com -bakbitionb.com -bakchoi.com -bala.cc -baldc.com -baletu.com -balijieji.com -ballgametime.com -ballpure.com -balltv.cc -bama555.com -bamaiwo.com -bamaol.cc -bamaol.com -bamatea.com -bamayigou.com -bamaying.com -bamboo18.com -bamenzhushou.com -bamuyu.com -bananalighter.com -bananau.com -bananaumbrella.com -bananaunder.com -banbaise.com -banbao123.com -banbaowang.com -banbf.com -banciyuan.me -bandaoningmeng.com -bandari.net -bandcevent.com -bandenghui.com -bandengw.com -bandianli.com -bandoristation.com -bandubook.com -banfubbs.com -banfuzg.com -bang5mai.com -bangbang.com -bangbang93.com -bangbangbang.wang -bangbangrent.com -bangboer.net -bangboss.com -bangcle.com -bangdao-tech.com -banggo.com -banghaiwai.com -bangirls.com -bangkebao.com -banglianai.com -bangmai.com -bangnixia.com -bangongdashi.com -bangongyi.com -bangongziyuan.com -bangqi66.com -bangqiu.biz -bangqu.com -bangquan.net -bangrong.com -bangshouwang.com -bangthink.com -bangwo8.com -bangwo8.net -bangxuetang.com -bangyike.com -bangzechem.com -bangzhufu.com -banht.com -banjiajia.com -banjiamao.com -banjuanshu.com -bank-of-china.com -bank-swift-code.info -bankcomm.com -bankcomm.com.mo -bankcomm.com.tw -bankcz.com -bankgz.com -bankhr.com -bankkf.com -bankksw.com -bankofbbg.com -bankofchangsha.com -bankofchina.com -bankofdl.com -bankofliaoyang.net -bankofshanghai.com -bankoftieling.com -bankofyk.com -bankpublish.com -banksteel.com -bankyy.net -banluyoulian.com -banma-inc.com -banma.com -banmajsq.com -banmamedia.com -banmasrf.com -banpie.info -banquanyin.com -banqumusic.com -banri.me -bansha.com -banshier.com -bantangapp.com -bantangbuy.com -banwagong.men -banwojia.com -banxiayue.com -banyou.la -banyuetan.org -banyuetanxcx.com -banyunjuhe.com -banzhuren365.com -banzou.name -banzouku.com -bao-cun.com -bao-fang.com -bao-hulu.com -bao-jian.net -bao100.com -bao12333.com -bao21.com -bao315.com -bao369.com -baobao.com -baobao001.com -baobao18.com -baobao88.com -baobaobang.com -baobaoshu.com -baobaotd.com -baobei360.com -baobeicang.com -baobeigezi.com -baobeihr.com -baobeihuijia.com -baobeita.com -baobeituan.com -baobidai.com -baobookw.com -baocai.com -baocdn.com -baodan360.com -baodaohealth.com -baodaosz.com -baodaren.net -baodigs.com -baodingmeishi.com -baodingtrade.com -baodu.com -baofeng.com -baofeng.net -baofeng365.com -baofengcinema.com -baofengtuandui.com -baofengzixun.com -baofoo.com -baofoo.net -baofu.com -baogang.info -baogao.com -baogao.store -baogaoting.com -baoge.net -baoguangsi.org -baohebao.com -baohuagroup.com -baoimg.net -baojia.com -baojianpu.com -baojiazhijia.com -baojidaily.com -baojiehang.com -baojijob.com -baojinews.com -baojinling.com -baojunev.com -baokan.name -baokan.tv -baoku.com -baokuandi.com -baokutreasury.com -baolaina.cc -baolijuyuancn.com -baoltx.com -baomi.com -baomi365.com -baomiexpo.com -baomihua.com -baoming.com -baomitu.com -baoqin.com -baoqingvip.com -baoruan.com -baoshe.net -baoshuanglong.com -baoshuiguoji.com -baosiair.com -baosight.com -baosteel.com -baostock.com -baotime.com -baotoushizx.com -baotuba.com -baowen8.com -baowu.com -baowugroup.com -baoxian.com -baoxianhai.com -baoxianshichang.com -baoxianzx.com -baoxiaobar.com -baoxinleasing.com -baoxinwen.com -baoxuexi.com -baoyang1.com -baoyang888.com -baoyangcs.com -baoyatu.cc -baoyeah.com -baoyou5.net -baoyt.com -baoyung.com -baoyuntong.com -baoyz.com -baoz.net -baozang.com -baozha.net -baozhayun.cloud -baozhenart.com -baozheng.cc -baozhilin.com -baozhuang.biz -baozhuang5.com -baozhuangren.com -baozifa.com -baozipu.com -baozou.com -baozoudi.com -baozoumanhua.com -baozouribao.com -baozy.com -baping.com -baqima.com -baqiu.com -baquge.com -baquge.tw -barmap.com -baron-bj.com -barretlee.com -bartender.cc -base64.us -base9174.com -basecity.com -basemu.com -basequan.com -basestonedata.com -bashan.com -bashuhuapai.com -bashuku.com -basiccat.org -basicfinder.com -bastengao.com -bat120.com -bathome.net -batian.net -batmanit.com -batplay.com -batpool.com -battery-cert.com -batterydir.com -batterykey.com -battleofballs.com -baudu.com -baufortune.com -bauschlombchina.com -bawagon.com -bawanglongbengye.com -baxi.tv -baxiami.com -baxichina.com -baybox.club -baydn.com -baye.tech -bayescom.com -bayimob.com -bayinfu.com -bayinh.com -bayinmao.com -baytaku.com -bayuegua.com -bayueju.com -bayueweb.com -bayunhome.com -bayxs.com -bazaarjewelrychina.com -bazai.com -bazhan.com -bazhou.com -bazhua.me -bazhuay.com -bazhuayu.cc -bazhuayu.com -bazi.cloud -bazi5.com -bazp.net -bb-edu.com -bb-game.com -bb-pco.com -bb-seo.com -bb06.com -bb179.com -bbanp.com -bbaod.com -bbaqw.com -bbb77qqq.xyz -bbbaaa.com -bbbao.com -bbbb.com -bbbbbb.me -bbbtgo.com -bbbvip.com -bbc-sy.com -bbcmart.com -bbcss.com -bbctop.com -bbcyw.com -bbdservice.com -bbdup.com -bbdzj.com -bbercn.com -bbfstore.com -bbgsite.com -bbgstatic.com -bbicn.com -bbioo.com -bbiquge.com -bbjkw.net -bbk.com -bbkantu.com -bbmar.com -bbmy.net -bbobo.com -bbonfire.com -bbped.com -bbpose.com -bbppav.com -bbqe.com -bbqk.com -bbqmw.net -bbrtv.com -bbs-go.com -bbs1x.net -bbsaso.com -bbsds.com -bbse03.com -bbsheji.com -bbsls.net -bbsmax.com -bbsnet.com -bbsut.com -bbsxp.com -bbtang.info -bbtcaster.com -bbtkid.com -bbtree.com -bbtw.net -bbugifts.com -bbwfish.com -bbwxbbs.com -bbxinwen.com -bbytpjm.com -bbzhh.com -bbzhi.com -bbzplhy.com -bc12345678.com -bcactc.com -bcadx.com -bcb5.com -bcbanzou.com -bcbm55555.com -bcbm66666.com -bcbm688.com -bcbpm.com -bcbvi.com -bccbcdf6shjm.com -bccfw.com -bccn.net -bccnsoft.com -bccv.com -bcczbj.com -bcdaren.com -bcdy.net -bceapp.com -bcebos.com -bcedns.com -bcedns.net -bcedocument.com -bcegc.com -bceimg.com -bcelive.com -bcevod.com -bcitb.com -bcjy123.com -bclsw.com -bcmcdn.com -bcmeng.com -bcoderss.com -bcpcn.com -bcrealm.com -bcreat.com -bcrjl.com -bcsec.org -bcsytv.com -bctest.com -bctmo.com -bcty365.com -bcvbw.com -bcweibo.com -bcwhy.com -bcwxfy.com -bcxgame.com -bcxww.com -bcy.net -bcyimg.com -bczcdn.com -bczs.net -bczx.cc -bd-apaas.com -bd-caict.com -bd-film.cc -bd-film.co -bd-film.com -bd001.net -bd2020.com -bd689.com -bdall.com -bdapark.com -bdatu.com -bdc-rays.com -bdchina.com -bdcloudapi.com -bdclouddns.com -bdf2.com -bdf304.com -bdfkb.com -bdfzcd.net -bdfzgz.net -bdfzxj.net -bdgslb.com -bdhaoye.com -bdhuakan.com -bdi.pub -bdimg.com -bdinfo.net -bditong.com -bdkssc.com -bdkyr.com -bdmp4.com -bdpan.com -bdqn027.com -bdqn666.com -bdqnwh.com -bds-cn.com -bdsgps.com -bdshuang.com -bdsimg.com -bdstatic.com -bdstatlc.com -bdsye.com -bdtic.com -bdtjs.org -bdtkba.com -bdtm.net -bdurl.net -bdwater.com -bdwm.net -bdwork.com -bdx100.com -bdxdnj.com -bdxhj.com -bdxiaodai.com -bdxiguaimg.com -bdxiguastatic.com -bdxiguavod.com -bdxx.net -bdydns.com -bdydns.net -bdysite.com -bdyxzx.com -be-xx.com -be90.com -beacons.gcp.gvt2.com -beacons.gvt2.com -beacons2.gvt2.com -beacons3.gvt2.com -beadwallet.com -bear20.com -bearad.com -bearead.com -beargoo.com -bearjoy.com -bearminers.xyz -bearrental.com -bearyboard.com -bearychat.com -beasure.com -beats-digital.com -beatu.net -beautifullinux.com -beautifulzzzz.com -beautydiarytw.com -bechangedt.com -bedtimepoem.com -beduu.com -bee-ji.com -bee-net.com -beebeepop.com -beebeeto.com -beecook.com -beedancing.com -beego.me -beejson.com -beekka.com -beelink.com -beemarket.tv -beep365.com -beeplay123.com -beervm.club -beervm.xyz -beeshow.tv -beestor.com -beestore.tv -beeui.com -beevideo.tv -beeweart.com -begcl.com -begindcc.com -bego.cc -begoto.com -begowin.com -begup.com -behake.com -behe.com -bei1688.com -beian88.com -beianapi29.com -beianapi30.com -beianidc.com -beianw.net -beibaozq.com -beibei.com -beibeicdn.com -beibj.com -beicdn.com -beichenzheng.net -beidahuang.net -beidamusic.com -beidasoft.com -beidd.com -beidian.com -beidoou.com -beidou.org -beidou66.com -beidouone.com -beidousafety.org -beidousj.com -beidouxingxueche.com -beieryouxi.com -beifabook.com -beifang.net -beifangfoshifen.com -beifangyanxue.net -beifeng.com -beifengwang.com -beifuni.com -beiguorc.com -beihai365.com -beihaidc.com -beihaiting.com -beihuasoft.com -beiidc.com -beijing-hmo.com -beijing-hualian.com -beijing-ip.com -beijing-kids.com -beijing-marathon.com -beijing-time.org -beijing120.com -beijingbang.com -beijingbaomu.com -beijingcenterforthearts.com -beijingfenxiangkeji.com -beijingidc.com -beijingjuyuan.com -beijingkbd.com -beijingnorthstar.com -beijingoperacats.com -beijingrc.com -beijingrc.net -beijingrenyi.com -beijingsheying.net -beijingtongxin.com -beijingtoon.com -beijingwenshendian.com -beijingxinzhuoyue.com -beike21.com -beikeapp.com -beikeba.com -beikeit.com -beikel.net -beikeread.com -beikongyun.com -beileike.com -beiliangshizi.com -beimai.com -beimeigoufang.com -beimeihongfeng.com -beimu.com -beingmate.com -beipy.com -beisen.com -beisencorp.com -beitaichufang.com -beitao8.com -beitown.com -beiwaibest.com -beiwaiclass.com -beiwaiguoji.com -beiwaionline.com -beiwaiqingshao.com -beiweigroup.com -beiwo.com -beiwo.tv -beiww.com -beixingmh.com -beiyanmaoyi.com -beiying.online -beiyongzhan.com -beiyuu.com -beiyxiu.com -beizengtech.com -beizi.biz -beizigen.com -beiziman.com -bej9.com -bejoin.net -bejson.com -belfone.com -belle8.com -belmeng.com -beltandroadforum.org -beltxman.com -bemfa.com -bemhome.com -bemyceo.com -benbenlong.xyz -benbenq.com -benber.com -benbun.com -bendibao.com -bendiw.cc -benellimotor.com -bengbeng.com -bengchedaquan.com -bengden.com -bengfa.biz -benghuai.com -bengku.com -bengou.com -bengtie.com -benhu.cc -benhu.com -benhu01.com -beniao.com -benimg.com -benkejieye.com -benkua.com -benlai.com -benlailife.com -benmu-health.com -bensedl.com -benseshijue.com -benshouji.com -benyh.com -benyht.com -benyouhui.com -benzhb.com -benzhibbs.com -benztu.com -bepal.pro -bequgew.com -bequgezw.com -berlinchan.com -berlinix.com -berqin.com -berrl.com -berrycn.com -berrydigi.com -berryol.com -berui.com -bes.ren -besg-bee.com -beshtech.com -bessystem.com -best-inc.com -best-intl-school.com -best100design.com -best66.me -best73.com -bestapp.us -bestatic.com -bestb2b.com -bestbaijiu.com -bestbeibao.com -bestcake.com -bestcem.com -bestdjb.com -bestdo.com -bestdvd.com.tw -bestebookdownload.com -bestedm.net -bestedm.org -bestexpresser.com -bestfangchan.com -bestfuturevip.com -bestgo.com -besticity.com -bestinwo.com -bestjy.net -bestlee.net -bestmephoto.com -bestopview.com -bestpay.net -bestpeng.com -bestqliang.com -bestshinhwa.com -bestsign.info -bestsign.tech -bestsrc.com -bestswifter.com -besttoneh.com -besttrav.com -bestv6.com -bestvapp.com -bestvist.com -bestwa.com -bestwehotel.com -bestweshop.com -bestzone.org -bet007.com -betaflare.com -betaidc.com -betajy.com -betamao.me -betanews.xyz -betawm.com -betazixun.com -betop-cn.com -betop365.com -betslw15.com -bettbio.com -betteredu.net -betterzip.net -betterzipcn.com -beva.com -bevol.com -bewellbio.com -beyebe.com -beyondbit.com -beyondcompare.cc -beyondcomparepro.com -beyondfund.com -beyonditsm.com -beyonds.com -beyoner.net -bf-z.com -bf35.com -bf92.com -bfcmovie.com -bfdcdn.com -bfdfe.com -bffzb.com -bfimg.com -bfjjw.com -bfjr.com -bfqh.com -bfqifu.com -bfsu-artery.net -bfsutw.com -bftq.com -bfttiao.com -bftv.com -bfvyun.com -bfw.cc -bfyx.com -bfyx.net -bfzhuce.com -bg.v4.a.dl.ws.microsoft.com -bg4.v4.a.dl.ws.microsoft.com -bgbk.org -bgctv.com -bgcyygl.com -bgdeco.com -bgee.cc -bggd.com -bgk100.com -bgl88.com -bgmfans.com -bgmgw.com -bgmlist.com -bgren.com -bgrimm.com -bgsdk.net -bgsdyz.com -bgteach.com -bguai.com -bgwl.net -bgyfhyx.com -bgyjr.com -bh.sb -bh1t.com -bh3.com -bh45.com -bh4dks.com -bh5.com -bhdata.com -bhdns.net -bhfangchan.com -bhgmarketplace.com -bhgxq.com -bhhgallery.com -bhjck.com -bhjysp.com -bhk.mobi -bhnsh.com -bhpiano.com -bhrencai.com -bhuitong.com -bhxww.com -bhzhu203.com -bhzhuji.com -bhzpw.com -bhzyxy.net -biacgn.com -bian-min.com -biancheng.net -biancui.com -bianews.com -bianfeng.com -bianhao6.com -bianjibu.net -bianjiqi.net -bianjiyi.com -bianlidianjiameng.net -bianlifeng.com -bianlun.net -bianmachaxun.com -bianpingyou.com -biantaishuo.com -bianwa.com -bianwanjia.com -bianxianmao.com -bianxianwu.com -bianzhia.com -bianzhihui.com -bianzhile.com -bianzhirensheng.com -biao12.com -biaodan.info -biaodianfu.com -biaoge.com -biaoge.me -biaoju01.com -biaonimeia.com -biaoniu.net -biaopeibao.com -biaoqing.com -biaoqing233.com -biaoqing888.com -biaoqingjia.com -biaoqingmm.com -biaotukeji.com -biaoyi.com -biaoyu.org -biaozhiku.com -biaozhun.org -biaozhun8.com -biaozhuncang.com -biaozhuns.com -biaozhunyisheng.com -biask.com -bibenet.com -bibgame.com -bibibi.net -bibiku.com -bibitie.com -biblibili.com -bibuzhengxing.com -bicn.vip -bid-view.com -bidchance.com -biddingos.com -biddingx.com -bidemi.com -bidewu.com -bidianer.com -bidingxing.com -bidns.net -bidu.com -biduo.cc -biduobao.com -biduoxs.com -bidwhy.com -biebird.com -biede.com -biedoul.com -bieshu.com -bietongfeng.com -bieyangapp.com -bifabu.com -bifeige.com -bifong.com -big-bit.com -big-shanghai.com -bigaaa.net -bigaka.com -bigan.net -bigbaicai.com -bigbenmeng.com -bigbigsun.com -bigbigwork.com -bigc.at -bigcat.com -bigda.com -bigdata-expo.org -bigdata.ren -bigdatabbs.com -bigdatabuy.com -bigdataedu.org -bigdatasafe.org -bigdatastudy.net -bigdiao.cc -bigecko.com -bigehudong.com -bigemao.com -bigengculture.com -bigeniao.com -bigerdata.com -bigertech.com -bigeshuju.com -bigeyes.com -biggerlens.com -biggeryun.com -biggsai.com -bigherdsman.com -bightbc.com -bigjpg.com -bigma.cc -bigniu.com -bignox.com -bigops.com -bigplayers.com -bigqiao.com -bigrnet.com -bigsec.net -bigtree.mobi -biguo100.com -biguolunwen.com -bigwayseo.com -bigwinepot.com -bigwww.com -bigxiao.com -bigzhong.com -bigzhu.com -bihongbo.com -bihoo.com -bihu-static.com -bihu.com -bihubao.com -bii-erg.com -biikan.com -biji.io -biji13.com -bijiago.com -bijiao.org -bijiasso.com -bijiatu.com -bijienetworks.com -bijirim.com -bijiv.com -bijixia.net -bikecool.com -bikehome.net -biketo.com -biketour-giant.com -biknow.com -bilezu.com -bili.com -biliapi.com -biliapi.net -bilibii.com -bilibili.cc -bilibili.co -bilibili.com -bilibili.ru -bilibiligame.net -bilibilihelper.com -bilibilijj.com -bilibiliyoo.com -bilicdn1.com -bilicdn2.com -biligame.com -biligame.net -bilihot.com -biliimg.com -bilimoe.com -bilingling.com -bilinstar.com -bilive.com -bilivideo.com -biliyu.com -bill-jc.com -billchn.com -billionconnect.com -billionseo.com -billowlink.com -billwang.net -bilnn.com -bim-times.com -bim99.org -bimcn.org -bimo.cc -binaryai.net -binaryai.tech -binbinyl.com -bincailiuxue.com -binfen.tv -binfenyingyu.com -bing400.com -bingbing8.com -bingbingyy.com -bingchengwang.com -bingd.com -bingdian001.com -bingdian01.com -bingdong700.com -binglai.net -binglanggu.com -binglingtech.com -binglixue.com -bingofresh.com -bingohuang.com -bingqipu.net -bingsin.com -bingsns.com -bingtuannet.com -bingwang.cc -bingyan.net -bingzhilv.com -binkery.com -binmt.cc -binmtplus.com -binpang.me -binqsoft.com -binstream.live -binuoniu.com -binvul.com -binyin.com -binzhi.com -binzhouquan.com -binzhuang.com -bio-equip.com -bio-fuyang.com -bio-review.com -bio360.net -bioberi.com -biocloud.net -biocome.com -biodiscover.com -biodiscover.net -biogo.net -biohyalux.com -bioktech.com -biolab.xyz -biomasscn.com -bionav.cc -bioon.com -bioon.net -biosren.com -biosrepair.com -biostatistic.net -biotecan.com -bipush.com -bipvcn.com -biqiga.com -biqige.cc -biqigewx.com -biqiudu.com -biqiuge.com -biqiwu.com -biqu6.com -biquan.link -biqubao.com -biqubu.com -biqudd.com -biqudu.com -biqudu.net -biqudu.tv -biqufu.com -biquge.com.tw -biquge.info -biquge.la -biquge.lu -biquge.vip -biquge0.cc -biquge11.com -biquge5200.cc -biquge5200.com -biquge8.com -biquge9.cc -biquge99.cc -biqugebook.com -biqugee.com -biqugeg.com -biqugemm.com -biquger.com -biquges.com -biqugetv.com -biqugew.com -biqugewx.com -biqugex.com -biqugexs.com -biqugexs.la -biqugexsw.com -biqugexsw8.com -biqugexx.com -biqugg.com -biqugu.net -biquguan.com -biqukan.com -biquke.com -biquku.co -biquku.la -biqulou.net -biquluo.com -biqumo.com -biqupai.com -biququ.com -biqusa.com -biqushu.com -biqusoso.com -biquter.xyz -biqutxt.com -biquwo.com -biquwu.cc -biquwx.la -biquyue.com -biquyun.com -biransign.com -bird4d.com -birdbro.com -birdol.com -birdpush.com -bisairi.com -bisenet.com -bishe1234.com -bishen.ink -bishengoffice.com -bisheziliao.com -bishijie.com -bishoujo.moe -bitauto.com -bitautoimg.com -bitautotech.com -bitbank.com -bitbays.com -bitbug.net -bitcellulose.com -bitcongress.com -bitcron.com -bitdata.pro -bitdefender-cn.com -biteabc.com -bitecoin.com -biteedu.com -bitekou.com -bitell.com -bitett.com -bitetui.com -bitfish8.com -bitgo.cc -bitgo.net -bitguai.com -bithosts.net -bithub00.com -bitjia.com -bitky.cc -bitmain.vip -bitmap.cc -bitmap3d.com -bitmingw.com -bitol.net -bitqiu.com -bitscat.org -bitscn.com -bitscn.net -bitsde.com -bitse.com -bitshuo.com -bitsqa.com -bitu360.com -bitvh.com -biubiu.tv -biubiu001.com -biubiubiu.org -bivean.com -biwanshequ.com -bixiabook.com -bixiaobai.com -bixiaxs.net -bixingxing.com -bixinlive.com -bixishang.com -bixu.cc -bixu.me -bixueke.com -biyabi.com -biyage.com -biyangwang.com -biyao.com -biye.net -biye666.com -biyebi.com -biyele.com -biyelunwenjiance.com -biyi.net -biyidc.com -biyingniao.com -biyinjishi.com -biymx.com -biyong007.com -biyoshop.com -biyou.tech -biyoujz.com -biyuns.com -biyuwu.cc -biz-east.com -biz178.com -biz72.com -bizcent.com -bizchallenge.net -bizcharts.net -bizcn.com -bizconfstreaming.com -bizgame.com -bizhi360.com -bizhi88.com -bizhicool.com -bizhidaquan.com -bizhimi.com -bizhiquan.com -bizhitupian.com -bizhizj.com -bizhongchou.com -bizmoto.com -biznewscn.com -bizopsmall.com -bizotrip.com -bizpai.com -bizsn.com -bizsofts.com -bizvane.com -bj-apc.com -bj-big.com -bj-dianxintong.net -bj-dsmzyy.com -bj-ka.com -bj-kpn.com -bj-sagtar.com -bj-sea.com -bj-shouqi.com -bj-sydc.com -bj-tvart.com -bj-zhongying.com -bj-zkhb.com -bj-zywh.com -bj003.com -bj1.api.bing.com -bj1000e.com -bj148.org -bj159zx.com -bj1777.com -bj315.org -bj4066.com -bj51.org -bj5188.com -bj520.com -bj597.com -bj65z.com -bj96007.com -bjadn.net -bjaodidazhong.com -bjatv.com -bjbaodao.net -bjbeifangjx.com -bjbkh.net -bjbtfu.com -bjbus.com -bjbxg8.com -bjbywx.com -bjbzc.com -bjbzszxy.com -bjcae.com -bjcancer.org -bjcankao.com -bjcathay.com -bjcdc.org -bjcec.com -bjceis.com -bjcfzx.com -bjcgtrain.com -bjchild.com -bjcifco.net -bjckkj.com -bjcls.net -bjcma.com -bjcoco.com -bjcomic.net -bjcshy.com -bjcsyg.com -bjcta.net -bjcurio.com -bjcxdf.com -bjcyzg.com -bjdachi.com -bjdbrc.com -bjdcfy.com -bjdfart.com -bjdfxj.com -bjdiaoyu.com -bjdingyi.com -bjdjc.com -bjdllti.com -bjdlzl.com -bjdongxin.com -bjdsppa.com -bjdt360.com -bjeasycom.com -bjepn.com -bjewaytek.com -bjexmail.com -bjexx.com -bjffdz.com -bjffkj.com -bjfsali.com -bjfwbz.org -bjfyw.org -bjg.ink -bjgas.com -bjgemi.com -bjggk.com -bjglxf.com -bjgnjdwx.com -bjgongteng.com -bjgujibaohu.com -bjgwy.org -bjhaiguang.com -bjhdnet.com -bjheadline.com -bjhee.com -bjhengjia.net -bjhj10000.com -bjhmdy.vip -bjhmxx.net -bjhouse.com -bjhrkc.com -bjhscx.com -bjhszp.com -bjhtx.com -bjhtzsgs.com -bjhwbr.com -bjhzkq.com -bjiab.com -bjicjm.com -bjidc.net -bjidit.com -bjinternet.com -bjipwqzx.com -bjiwex.com -bjjabc.com -bjjbsj.com -bjjchf.com -bjjdwx.com -bjjf.cc -bjjfsd.com -bjjhcczgs.com -bjjhwlgs.com -bjjihui.com -bjjiubo.com -bjjkglxh.org -bjjlyl.com -bjjnzf.com -bjjqzyy.com -bjjtat.com -bjjubao.org -bjjzsc.com -bjjzzpt.com -bjk30.com -bjkaihua.com -bjkaihua.net -bjkhzx.com -bjkqj.com -bjkrtwl.com -bjksd120.com -bjl777.com -bjlcs-tech.com -bjlemon.com -bjlevsoft.com -bjlkhd.net -bjlmfq.com -bjlongview.com -bjlot.com -bjlyw.com -bjmailqq.com -bjmama.com -bjmama.net -bjmantis.net -bjmcdh.com -bjmeikao.com -bjmeileju.com -bjmingdi.com -bjmjm.com -bjmslp.com -bjmti.com -bjmyw.com -bjnaxl.com -bjnsr.com -bjp321.com -bjpowernode.com -bjqcjdcj.com -bjqh.org -bjqhgjj.com -bjqichezl.com -bjqingyang.com -bjqyjjlb.com -bjrc.com -bjrcb.com -bjrdhx.com -bjrel.com -bjretech.com -bjreview.com -bjrhxp.com -bjrjgj.com -bjrmysjy.com -bjrtcdn.com -bjrun.com -bjry.com -bjsantakups.com -bjsasc.com -bjsbnet.com -bjscfl.com -bjscivid.org -bjsclp.com -bjscp.com -bjscszh.com -bjsctx.com -bjsdfz.com -bjsdr.org -bjsfrj.com -bjsfyh.com -bjshcw.com -bjsheng.com -bjshijiyu.com -bjsidao.com -bjsjcq.com -bjsjob.com -bjsjwl.com -bjsjxtm.com -bjsly.com -bjsoho.com -bjsound.com -bjsoyo.com -bjspw.com -bjsqgy.com -bjsryc.com -bjssedu.com -bjsspm.com -bjssqt.com -bjsubway.cc -bjsubway.com -bjsudai.com -bjsuewin.com -bjsupor.com -bjswds.org -bjsxljs.com -bjsxt.com -bjsyqw.com -bjszhd.net -bjtata.com -bjtcf.com -bjtelecom.net -bjtitle.com -bjtjr.net -bjtjw.net -bjtjzx.com -bjtlky888.com -bjtobacco.com -bjtonghui.com -bjtopli.com -bjtth.org -bjttsf.com -bjtvnews.com -bjtysd.net -bjtyzh.org -bjunionstar.net -bjuri.com -bjwanjiabao.com -bjweimob.com -bjweizhifu.com -bjwfz.com -bjwhds.com -bjwj2y.com -bjwkzl.com -bjwsk.com -bjwsyy.com -bjwszyxy.com -bjwwhc.com -bjwxhl.com -bjwyseo.com -bjxatq.com -bjxf315.com -bjxiangxiu.com -bjximei.com -bjxinku.com -bjxinyou.com -bjxjyy666.com -bjxwx.com -bjxx.vip -bjxx8.com -bjxydh.com -bjxztqn.com -bjyah.com -bjyczb.com -bjydzy.com -bjyestar.com -bjyhwy.com -bjyqsj.com -bjythd.com -bjyunyu.com -bjywt.com -bjzaxy.com -bjzbkj.com -bjzcha.com -bjzcth.com -bjzg.org -bjzghd.com -bjzgxr.net -bjzhishi.com -bjzhongxinjiancai.com -bjzhongyi.com -bjzjgyl.com -bjzkhs.com -bjzklp.com -bjzmkm.com -bjznnt.com -bjzph.com -bjzqcbook.com -bjzqw.com -bjzs114.com -bjzwzx.com -bjzxcp.com -bjzycd.com -bjzyrxgs.com -bk41.net -bk5u.com -bkclouds.cc -bkdou.com -bkill.net -bkjk-inc.com -bkjpress.com -bkn.cc -bkpcn.com -bkqq.com -bkweek.com -bkxs.net -bkzzy.com -bl.com -bl35.org -bl9k.com -bla01.com -black-unique.com -blackbirdsport.com -blackdir.com -blackeep.com -blackh4t.org -blackholeskins.com -blackist.org -blackmailedslave.com -blackshark.com -blackshow.me -blackswancake.com -blackxl.org -blackyau.cc -blackzs.com -bladewan.com -blakat.cc -blangel-tool.com -blazefire.com -blazefire.net -blbx.com -blctwed.com -bld-hotel.com -bldimg.com -bldz.com -bleege.com -blemall.com -blendercn.org -blenderget.com -blessedbin.com -bliao.com -blibee.com -blibee.net -blimage.com -bliner.me -blingabc.com -blingclubs.com -blinkol.com -blissmall.net -blizzardcn.com -blkkj.com -bln7.com -bln8.com -blnjw.com -block288.com -blockchain.hk -blockchain123.com -blockchainbrother.com -blockchainlabs.org -blockdao.net -blockflow.net -blockmeta.com -blockob.com -blocrepresents.com -blog.htc.com -blog007.com -blog120.com -blog1984.com -blogbus.com -blogchina.com -blogchinese.com -blogcn.co -blogdriver.com -bloger.wang -blogfeng.com -blogfshare.com -bloggern.com -blogjava.net -bloglegal.com -blogqun.com -blogturn.com -blogways.net -blogxuan.com -bloomgamer.com -bloves.com -blpack.com -blqx.com -blqy.com -blskye.com -blszhifa.com -blue-city.com -blue-zero.com -bluebeebox.com -bluecefa.com -blued.com -bluedon.com -bluefeel.com -bluefite.com -bluefocus.com -bluegq.com -bluehao.com -bluehn.com -blueidea.com -bluek.org -bluelettercn.org -bluelightfuse.com -bluelive.me -blueplus.cc -bluesdream.com -bluesharkinfo.com -blueshow.net -blueskykong.com -blueskyschool.net -blueskystudy.com -blueskyxn.com -blueslc.tech -bluestar-pc.com -bluestep.cc -blyol.com -blyun.com -bm001.com -bm023.com -bm024.com -bm2088.com -bm724.com -bm777777.com -bm8.tv -bm8885.com -bm999999.com -bmadx.com -bmatch.tech -bmc-medical.com -bmcx.com -bmdbr.com -bmdxcx.com -bmeol.com -bmfsm.com -bmijs.com -bmlink.com -bmobapp.com -bmobcloud.com -bmobpay.com -bmp.ovh -bmpj.net -bmqb.com -bmqy.net -bmrtech.com -bmshow.com -bmtcled.com -bmw021.com -bmw143.com -bmw8033.com -bn016.com -bn13.com -bnapp.com -bnbcamp.com -bnbsky.com -bnbtrip.com -bnc66.com -bnchina.com -bncwork.com -bnhgsb.com -bnhshiguan.com -bnjyks.com -bnncn.com -bnnd.net -bnq86.com -bnqgsl.com -bnupg.com -bnwin.com -bnxb.com -bnxxjs.com -bnzt88.com -bo-blog.com -bo-yi.com -bo56.com -boai.com -boanying.com -bob-cardif.com -bob-leasing.com -bob2012.com -bobaow.com -bobbns.com -bobcfc.com -bobcoder.cc -bobdirectbank.com -bobidc.com -bobiman.com -boblog.com -bobo.com -bobopic.com -bobopos.com -bobtj.com -bocaidaka.com -boce.com -bocep2c.com -bocichina.com -bocim.com -bocomcc.com -bocommleasing.com -bocommlife.com -bocommtrust.com -bocsolution.com -bodchan.com -bodedu.com -bodekang.com -bodimedia.net -bodoai.com -bodogqm.com -bodu.com -boduhappiness.com -boe.com -boertemc.com -bofangw.com -bofengkj.com -bofyou.com -bog.ac -bogokj.com -bohailife.net -bohaishibei.com -bohaiyun.com -bohe.com -bohuihe.com -bohutmt.com -boiots.com -bojianger.com -bojoy.net -bojun-import.com -bojuwang.com -bokanghui.net -bokao2o.com -boke.com -boke112.com -boke8.net -bokeboke.net -bokecc.com -bokecs.net -bokee.com -bokee.net -bokeren.cc -bokesoft.com -bokesoftware.com -bokeyz.com -bokhra.com -bol-system.com -bolaa.com -bolan.net -bolaninfo.com -bolanjr.com -boldseas.com -bole.me -bolead.com -bolehu.net -bolejiang.com -bolelink.com -bolianpro.com -boll.me -bolo.me -bolopp.com -boloread.com -bolq.com -boluo.com -boluo.link -boluo.org -boluo1122.com -boluogouwu.com -boluomee.com -boluomeet.com -boluoyunyu.com -bom.ai -bom2buy.com -bomanair.com -bomin-china.com -bon-top.com -bon-wine.com -bondlady.com -bongmi.com -bongv.com -bongwell.com -bonkee.net -bonnelivre.com -bonree.com -bonsj.com -bonwai.com -boobooke.com -booea.com -booeoo.com -boohee.com -book118.com -book1234.com -book365.net -book520.com -bookask.com -bookba.net -bookbook.in -bookdao.com -bookdown.net -bookersea.com -booking001.com -bookinlife.net -bookresource.net -books51.com -bookschina.com -bookshadow.com -bookshi.com -bookshoptw.com -bookshuku.com -booksky.cc -booksn.com -booktxt.com -booktxt.io -booktxt.net -bookuu.com -bookxnote.com -bookzx.org -boolan.com -boolaw.com -boole-tech.com -boolean93.com -boomsense.com -boonwin.com -boooba.com -boosj.com -boosyi.com -bootcdn.net -bootcss.com -bootstrapmb.com -booyu-import.com -booz88.com -bopian.com -boqii.com -boqiicdn.com -boquxinxi.com -boraid.org -borderlessbd.com -borlonclan.com -borninsummer.com -bornlead.com -borpor.com -borscon.com -boruiqin.com -boruishijie.com -boruisx.com -boryou.com -bos.xin -bosdsoft.com -bosenrui.com -bosera.com -bosera.com.hk -boshi.tv -boshika.com -boshixitong.com -boshiyl.com -boshungame.com -boshuo.net -bosideng.com -bosideng.me -bosideng.net -bosigame.com -bosondata.net -bosonnlp.com -boss-young.com -bosscdn.com -bossgoo.com -bosshr.com -bosszhipin.com -bosunman.com -botnet.cc -botongr.com -botorange.com -botslab.com -bottos.org -botui.ink -botusg.com -bounb.com -boweifeng.com -bowerp.com -bowin8.com -bowuku.com -bowuzhi.fm -boxgu.com -boxopened.com -boxuegu.com -boxueio.com -boxui.com -boxz.com -boy-toy.net -boy1818.com -boy1904.com -boyaa.com -boyaceo.com -boyais.com -boyamicro.com -boyasoftware.com -boyaxun.com -boydwang.com -boyicn.com -boyingsj.com -boyue.com -boyunso.com -boyuonline.com -bozhihua.com -bozhong.com -bphetaomiao.com -bpimg.com -bppan.com -bpqwxsh.com -bpsemi.com -bpteach.com -bpxxfw.com -bq04.com -bq233.com -bq8xs.com -bqatj.com -bqfy.com -bqg26.com -bqg5.cc -bqg8.cc -bqg8.la -bqgyy.com -bqiapp.com -bqimg.com -bql999.com -bqpoint.com -bqq8.com -bqrank.net -bqrdh.com -bqteng.com -bragood.com -braincf.com -brand4x4.com -brandcn.com -brandvista.com -brandzg.com -brandzw.com -brbtyt.com -breadtrip.com -breakingnewsireland.com -breakyizhan.com -brentron.com -bricktou.com -bridge-image.com -bridgee.net -brighost.com -brightdairy.com -brightfood.com -brire.com -britesemi.com -brlinked.com -broad-ocean.com -broadcasteye.com -broadon.net -broadskytech.com -brogiao.com -bronzesoft.com -brother-cn.net -brother-movie.com -brother66.com -browurl.com -brsiee.com -brtbeacon.com -brtbeacon.net -bruce.wang -bruceit.com -brunoxu.com -brushes8.com -bryonypie.com -brzhang.club -bs-dolfin.net -bs008.com -bs56.net -bsbchina.com -bsbydd.com -bsccdn.com -bsccdn.net -bscdns.com -bscea.org -bscstorage.net -bsd4fz.com -bsdgco.com -bseas.com -bsgcnc.com -bsgslb.com -bsh-tech.com -bsh.com -bshaishu.com -bshare.com -bshjxxkj.com -bsida.com -bsidu.com -bsjhhzs.com -bsjquanwu.com -bsjuhui.com -bskk.com -bskrt.com -bskuav.com -bsmz.net -bspapp.com -bspeizi.com -bspia.com -bsrczpw.com -bsrkt.com -bssrvdns.com -bst24.com -bsteel.net -bstinfo.com -bstjiaoyu.com -bstzcs.com -bsurl.cc -bsyjrb.com -bsyxx.com -bt.cc -bt113.com -bt9527.com -btb8.com -btba.cc -btbat.com -btbctex.com -btbt.tv -btbt4k.com -btby-pump.com -btc114.com -btc116.com -btc1212.com -btc123.com -btc17.com -btc38.com -btc5.net -btc789.com -btcb.com -btcbbs.com -btcbl.com -btcha.com -btcsearch.com -btcside.com -btcsos.com -btcwatch.com -btdad.live -btdog.com -btege.com -btgame.com -btgame01.com -btgang.com -btglotto.com -bthhotels.com -bthlt.com -bthss.com -bthuifu.com -btime.com -btiyu.com -btmao.cc -btmayi.cc -btmeiju.com -btnotes.com -btoo3.com -btophr.com -btorange.com -btpan.com -btpig.com -btplay.net -btrcsc.com -bts.hk -btsabc.org -btschool.net -btsemi.com -btsha.com -btsmth.com -btsmth.org -btsou.org -btspreads.com -btsteel.com -btten.com -bttiantang.cc -bttiantang.com -bttwo.com -btv.org -btvcd.net -btwob.net -btwuji.com -btxl8.com -btyou.com -btzhcc.com -bu-shen.com -buaaer.com -bubalusplus.com -bubu5.com -bubugao.com -bubuko.com -bubukua.com -bubuol.com -bubuzheng.com -bucg.com -bucuo.me -bucuo100.com -budao.com -budao24.com -buddhalikedoge.com -budejie.com -budhano.com -buding.tv -budongnvren.com -budou.com -buduanwang.vip -buduobaobao.com -bufan.com -buffst.com -bug.im -bughd.com -bugku.com -bugnull.com -bugscan.net -bugscaner.com -bugsevent.com -bugtags.com -buguangdeng.com -bugucn.com -bugukj.com -bugumanhua.com -bugutime.com -bugwz.com -bugxia.com -buhuiwan.com -buhuyo.com -build-decor.com -buildface.com -buildhr.com -buildjob.net -buimg.com -bujie.com -bukamanhua.com -bukexue.com -bukeyi.net -bukop.com -bulaisi.com -bulaoge.net -bulebulo.com -bulejie.com -bullcome.com -bullmind.com -buluanmai.com -buluo007.com -bumimi.com -bumiu.com -bundpic.com -bunfly.com -bungba.com -bunze.com -buread.com -burgud.com -burl.cc -burnelltek.com -burongyi.com -buroniworks.com -buruizi.com -bus365.com -bus84.com -busbaoche.com -busdh.com -bushangban.com -bushen365.com -businessconnectchina.com -businessreviewglobal-cdn.com -busionline.com -busiphi.com -busiyi888.com -busnc.com -busytrade.com -but7.com -butair.com -buterp.com -butongshe.com -butonly.com -butterapis.com -buxia.net -buxiugangban.net -buy027.com -buy360.vip -buyanshufa.com -buyaocha.com -buybieshu.com -buycarcn.com -buychuan.com -buycoor.com -buyfine.net -buyhot.vip -buyigang.com -buyiju.com -buyinball.com -buyjk.com -buykee.com -buylabel.com -buysun.net -buysweet.com -buytips.site -buyu46.com -buzhi5.com -buzhibushi.com -buzzads.com -buzzinate.com -bvgv.com -bvimg.com -bvseo.com -bw1006.com -bw30yun.com -bw40.net -bw8848.com -bwae.org -bwangel.me -bwbot.org -bwchinese.com -bwda.net -bwfapiao.com -bwfhmall.com -bwgongye.com -bwgrt.com -bwhero.com -bwhgsb.com -bwie.net -bwjf.com -bwjsw.com -bwlc.net -bwmelon.com -bwptl.com -bwpx.com -bwsoft.net -bwv8.com -bwxsj.com -bx1k.com -bx24k.com -bx58.com -bxb2b.com -bxba.net -bxcc.vip -bxd365.com -bxdaka.com -bxdlkj.com -bxfaka.com -bxgjyc.com -bxgtd.com -bxhaibao.com -bxjob.net -bxkejian.com -bxkxw.com -bxlac.com -bxnjmj.com -bxpedia.com -bxr.im -bxrfund.com -bxsnews.com -bxsychina.com -bxwst.com -bxwx.la -bxwx.org -bxwx.tv -bxwx.us -bxwx520.com -bxwx99.com -bxxy.com -bxycw.com -bxynzz.com -bxyuer.com -bxzhiku.com -bxzxw.com -by-health.com -by56.com -by6sx.com -bybbs.org -bybieyang.com -bybutter.com -bybzj.com -byc168.com -bycmw.com -byd.com -bydit.com -bydowstar.com -byecity.com -byete.com -byf.com -byfcw.com -byfen.com -byfuh.com -byfunds.com -byfzxy.com -bygamesdk.com -bygjhb.com -bygw.net -byhard.com -byhua.com -byi.pw -byjdxy.com -byjgxy.com -byjsjxy.com -byjzwh.com -byjzxy.com -bykjad.com -byloue.com -bylwcc.com -bylwjc.com -bymz.net -bynmc.com -bynsyh.com -byprxy.com -byqcxy.com -byqok.com -byr-navi.com -byr.cc -byr.wiki -byread.com -bysb.net -byshr.com -bysocket.com -bysxfz.com -bytcad.com -byte-gslb.com -byte.online -byte008.com -byteacctimg.com -bytebye.com -bytecdn.com -bytecdntp.com -byted-static.com -byted.org -bytedance.com -bytedance.net -bytedanceapi.com -bytedns.com -bytedns.net -bytedns1.com -bytednsdoc.com -byteedu.com -byteeffecttos.com -bytefae.com -bytefcdn.com -bytegecko.com -bytegoofy.com -bytegslb.com -bytehwm.com -byteimg.com -byteisland.com -bytelb.net -bytemastatic.com -byteorge.com -bytescm.com -bytesfield.com -bytesmanager.com -bytestacks.com -bytetos.com -bytexns.com -bytexservice.com -bytrip.com -byts.com -bytter.com -bytx888.com -bywave.io -byxx.com -byxy.com -byyapp.com -byzhihuo.com -byzlp.com -byzoro.com -byzp.com -bz-e.com -bz163.org -bz55.com -bzcm.net -bzcw8.com -bzd6688.com -bzdao.com -bzddrive.com -bzfwq.com -bzfxw.com -bzgd.com -bzgwl.com -bzkad.com -bzko.com -bzmfxz.com -bzname.com -bznx.net -bzonl.com -bzpc119.com -bzr99.com -bzrb.net -bzrnice.com -bzshw.com -bzsoso.com -bzw315.com -bzxinganghulan.com -bzxinwen.com -bzxz.net -bzxzk.net -bzzss.com -c-119.com -c-3.moe -c-c.com -c-canyin.com -c-cnc.com -c-ctrip.com -c-estbon.com -c-fol.net -c-lion.com -c-lodop.com -c-ps.net -c-sky.com -c-sz.com -c-t.work -c-yl.com -c.admob.com -c.android.clients.google.com -c.citic -c.team -c0594.com -c0ks.com -c1042.com -c1ass.com -c1s.com -c21wuhan.com -c2h4.org -c32356.com -c32869.com -c360dn.com -c366.com -c3acg.com -c3crm.com -c3player.com -c3x.me -c4008.com -c400c.cc -c44ff.com -c4d.live -c4datc.com -c4dba.com -c4dcn.com -c4dpro.com -c4dsky.com -c4hcdn.com -c4ys.com -c4yx.com -c50forum.com -c51rf.com -c53911.com -c571.com -c5game.com -c6.nz -c68.com -c6c.com -c6n708.ren -c73160.com -c75uw72.com -c77c.com -c7c8.com -c7cc.com -c833.com -c9018.com -c969.com -c9cc.com -ca-sme.org -ca001.com -ca002.com -ca003.com -ca168.com -ca39.com -ca800.com -caaa-spacechina.com -caaad.com -caacbook.com -caacsri.com -caaladi.com -caanb.com -caasbuy.com -caasse.com -caayee.com -cabbagelol.net -cabbeen.com -cabee.org -cabhr.com -cabinetbuy.com -cableabc.com -cabling-system.com -cablingteam.com -cabontek.com -cabplink.com -cacfo.com -cacg.cc -cache.pack.google.com -cachekit.com -cachepro.com -cachetime.com -cackui.com -cacpp.com -cacre.org -cacs100.com -cactifans.com -cactifans.org -cactmc.com -cad1688.com -cad8.net -cada.cc -cadcaecam.com -cadict.net -cadmon.net -cadreg.com -cadzhuan.com -cadzj.com -cadzxw.com -caecc.com -caexpo.com -caexpo.org -cafachine.com -cafagame.com -cafamuseum.org -cafebeta.com -cafecole-maison.com -caffeenglish.com -cagesblog.com -cagetest.com -cageystone.com -cago365.com -cagoe.com -cahkms.org -cahuo.com -cai188.com -cai8.net -caian.net -caibaojian.com -caibaopay.com -caibeike.com -caibowen.net -caicaieat.com -caichongwang.com -caicui.com -caidan2.com -caidao1.com -caidao8.com -caidaocloud.com -caidaoli.com -caidian.com -caidianqu.com -caiens.com -caifu.com -caifuxingketang.com -caifuzhongwen.com -caigaowang.com -caigou2003.com -caigoubao.cc -caigoushichang.com -caiguayun.com -caihang.com -caihao.com -caihcom.com -caihezi.com -caihong360.com -caihong5g.com -caihongbashi.net -caihongqi.com -caihongtang.com -caihongto.com -caihuaw.com -caij100.com -caijing28.com -caijing365.com -caijingcaipiao22270.com -caijingche.com -caijingmen.com -caijingmobile.com -caijingwu.com -caijinyuan.com -caijixia.com -caijuanjuan.com -caiku.com -caikuai91.com -caikuan.net -cailele.com -cailianpress.com -cailiao.com -cailiaoniu.com -cailiaoren.com -cailol.com -cailongtong.com -cailutong.com -cailuw.com -caimai.cc -caimaovip.com -caimei365.com -caimogu.net -caimomo.com -cainachina.com -caing.com -cainiao.com -cainiaodoc.com -cainiaojiaocheng.com -cainiaolc.com -cainiaoqidian.com -cainiaoxueyuan.com -cainu.net -caipiaogu.com -caipintu.com -caipopo.com -caipucaipu.com -caipucn.com -caiqiuba.com -cairongquan.com -cairot.com -caisan.io -caishen66.com -caishencai.com -caisheng.net -caishenpo.com -caishenwang.online -caishimv.com -caishuixxi.com -caispace.com -caistv.com -cait.com -caitun.com -caiu8.com -caiweiming.com -caiwu51.com -caiwuchina.com -caixin.com -caixin021.com -caixinfoundation.org -caixun.com -caiyiduo.com -caiyun.com -caiyunai.com -caiyunapp.com -caiyunyi.com -caizhaowang.com -caizhihr.com -caj11.com -caj5.com -cake400.com -cake6.com -calawei.com -calculusdata.com -cali-light.com -calibur.tv -callda.com -callmewhy.com -caloinfo.com -calorietech.com -calt.com -calvinneo.com -cambm.com -cambodiafang.com -cambricon.com -camcap.us -camcard.com -came-online.org -camelsee.com -camera360.com -camgle.com -camnpr.com -campanilechina.com -campus-app.net -campushoy.com -campusphere.net -campusplus.com -campusroom.com -camscanner.com -can-dao.com -can.tv -canaan-creative.com -canasy.com -cancda.net -candou.com -candylab.net -candypay.com -candystars.net -canevent.com -canfire.net -cang.com -cangdu.org -cangfengzhe.com -cangnews.com -cangowin.com -cangpie.com -cangqiongkanshu.com -cangshui.net -cangshutun.com -cangtianbfq.com -cangya.com -canhighcenter.com -canhot.net -caniculab.com -canidc.com -canjiren.net -cankao100.com -cankaoxiaoxi.com -canlyn.com -canmounet.com -canon8.com -canpdu.com -canpoint.net -canrike.com -cansee.net -cansine.com -cansuan.com -cantoge.com -canukiss.me -canvasf.com -canway.net -canwayit.com -canwaysoft.com -canxingmedia.com -canyin.com -canyin168.com -canyin2017.com -canyin375.com -canyin88.com -canyincha.com -canyincy.net -canyinzixun.com -canyon-model.com -canyouchina.com -canyuanzs.com -canzhisz.com -caobao.com -caodan.org -caogen.com -caogen88.com -caohaifeng.com -caohejing.com -caohejing.org -caohua.com -caomeibook.com -caomeishuma.com -caomeixz10.xyz -caomin5168.com -caotama.com -caoxianfc.com -caoxie.com -caoxile.com -caoxiu.net -caoxudong.info -caoyudong.com -capillarytech-cn.com -capitalcloud.net -capitalonline.net -capjoy.com -capsuleshanghai.com -capvision.com -capwhale.com -car0575.com -car2100.com -car2sharechina.com -car365.org -car388.com -carben.me -carbonframe.com -carbonscn.com -carcav.com -carcdn.com -cardbaobao.com -cardcmb.com -cardcn.com -cardhw.pw -cardinfolink.com -cardniu.com -cardniudai.com -cardqu.com -care110.com -careerchina.com -careerqihang.com -careersky.org -careuc.com -cargeer.com -cargo001.com -carimg.com -carking001.com -carltonyu.com -carmov.com -carnegiebj.com -carnoc.com -carodpiano.com -carp56.com -carpela.me -carrobot.com -carrotchou.blog -carrotchou.com -carry6.com -cartoonwin.com -carutoo.com -carvendy.com -carxoo.com -carzd.com -carzyuncle.com -cas01.com -cas2s.com -casarte.com -casboc.com -casctcp.com -case91.com -casece.org -cashtoutiao.com -cashwaytech.com -cashzhan.com -casic-addsino.com -casic-amc.com -casic-t.com -casic.com -casic304.com -casic3s.com -casicloud.com -casicyber.com -casnb.com -casql.com -casqy.com -casszzy.com -castelu.com -casvino.com -casvm.com -casystar.com -cat898.com -catall.com -catalog-tj.com -catfish-cms.com -catfun.tv -catguo.com -cathayagroup.com -cathayfund.com -catjc.com -cato-travel.com -cattsoft.com -catv.net -caua99.com -caup.net -cauvet.com -cav-ad.com -cavca.org -cawae.net -caxa.com -caylor.cc -cazpw.com -cbca.net -cbdio.com -cbdjrsh.org -cbe21.com -cbea.com -cbec365.com -cbes21.com -cbevent.com -cbex.com -cbfau.com -cbfook.com -cbgcloud.com -cbi360.net -cbi88.com -cbice.com -cbide.com -cbiec.com -cbiec.net -cbismb.com -cbj1998.com -cbjuice.com -cbjzw.org -cbmay.com -cbmf.org -cbminfo.com -cbn.me -cbndata.com -cbndata.org -cbnmall.com -cbnri.org -cbnweek.com -cboad.com -cbsrb.com -cbsrc.com -cbtimer.com -cburi.com -cbvac.com -cbw111.com -cbxdxg.com -cbxsw.com -cby.me -cc-1.com -cc-glass.com -cc.co -cc0808.com -cc1021.com -cc11bh.com -cc123.com -cc148.com -cc222.com -cc55k.com -cc7m.com -cc8.cc -ccabchina.com -ccai.cc -ccaiye.com -ccapbook.com -ccapedu.com -ccartd.com -ccarting.com -ccasy.com -ccb.com -ccbfund.com -ccbiji.com -ccbookfair.com -ccbpension.com -ccbride.com -cccaq.com -cccbs.net -ccccl.net -cccdun.com -ccchz.com -cccitu.com -cccity.cc -ccciw.com -cccnec.com -cccollector.com -cccpan.com -cccsql.com -ccctspm.org -cccwww.com -cccyun.cc -ccd86.com -ccdby.com -ccddvr.com -ccdol.com -ccea.pro -cceai.com -cceato.com -ccedisp.com -ccedpw.com -ccee.com -cceea.net -cceep.com -ccefb.com -ccement.com -ccen.net -ccepc.com -cces2006.org -ccets.com -ccfei.com -ccflow.org -ccgaa.com -ccgfie.com -ccgslb.com -ccgslb.net -cchccc.com -cchezhan.com -cchfound.org -cchicc.com -cchongjing.com -cchorse.com -cchorse.net -cchtnet.com -ccian.com -cciatv.com -ccic.com -ccic2.com -cciccloud.com -ccice.com -ccichn.com -ccidcom.com -ccidconsulting.com -ccidcyt.com -cciddata.com -cciddesign.com -ccidedu.com -ccidexpo.com -ccidgroup.com -ccidjinglue.com -ccidnet.com -ccidreport.com -ccidsmart.com -ccidthinktank.com -ccidwise.com -ccieh3c.com -ccieshow.com -ccievide.com -ccigchina.com -ccigmall.com -ccihr.com -ccimz.com -ccipmedia.com -ccipp.org -ccitimes.com -cciup.com -ccjkwjjedu.com -ccjoy.com -ccjoyland.com -ccjt.net -ccjzzj.com -cclcn.com -cclexpo.com -cclimg.com -cclndx.com -cclolcc.com -cclqme.xyz -cclycs.com -cclyun.com -ccm-1.com -ccm99.com -ccmama.com -ccmdl.adobe.com -ccmdls.adobe.com -ccme.cc -ccmfcm.com -ccmmcode.com -ccmnn.com -ccmodel.com -ccmodel.net -ccmw.net -ccn360.com -ccnee.com -ccnew.com -ccnovel.com -ccnpic.com -ccnt.com -ccnubbs.com -ccnulx.com -ccnvpt.com -ccoalnews.com -ccoco.vip -ccoi.ren -ccopyright.com -ccpc.io -ccpc360.com -ccpgssd.com -ccpit-academy.org -ccpit-ah.com -ccpit-ep.org -ccpit-henan.org -ccpit-shaanxi.org -ccpit-sichuan.org -ccpit-sx.org -ccpit-tga.org -ccpit.org -ccpitbingtuan.org -ccpitbj.org -ccpitbm.org -ccpitbuild.org -ccpitcq.org -ccpitecc.com -ccpitfujian.org -ccpitgs.org -ccpitgx.org -ccpithebei.com -ccpithn.org -ccpithrb.org -ccpithz.org -ccpitjinan.org -ccpitjs.org -ccpitlight.org -ccpitln.org -ccpitnb.org -ccpitnmg.org -ccpitqd.org -ccpitsd.com -ccpitsy.org -ccpittex.com -ccpittj.org -ccpitwh.org -ccpitxiamen.org -ccpitxian.org -ccpitxj.org -ccplay.cc -ccpnt.org -ccprec.com -ccproxy.com -ccqtgb.com -ccqyj.com -ccrgt.com -ccrjw.com -ccshao.com -ccshell.com -ccsph.com -ccsw003.com -cct08.com -cct365.net -cctalk.com -cctaw.com -cctb.net -cctbn.com -cctc.cc -cctcce.com -cctcct.com -cctiedu.com -cctime.com -cction.com -cctlife.com -cctocloud.com -cctpress.com -cctry.com -cctsx.com -cctuw.com -cctv-19.com -cctv-22.com -cctv-star.com -cctv.com -cctv18.com -cctv1zhibo.com -cctv4g.com -cctv886.com -cctvcaizhi.com -cctvcdn.net -cctvcj.com -cctvctpc.com -cctvdyt.com -cctvfinance.com -cctvmall.com -cctvpic.com -cctvsdyxl.com -cctvse.net -cctvweishi.com -cctvxf.com -cctvyscj.com -cctw.cc -cctzz.net -ccutchi.com -ccutu.com -ccv160.com -ccv168.com -ccv5.com -ccview.net -ccvnn.com -ccwcw.com -ccwcyw.com -ccwonline.com -ccwonline.net -ccwow.cc -ccwqtv.com -ccwzz.cc -ccxcn.com -ccxcredit.com -ccxinshiji.com -ccxinshijicy.com -ccxinyuedu.com -ccxiyuecare.com -ccxjd.com -ccyjjd.com -ccyts.com -ccyunmai.com -ccyyls.com -ccziben.com -cczihai.com -ccztv.com -cd-cxh.com -cd-kc.com -cd-vv.com -cd-zc.com -cd120.com -cd23f.com -cd37wan.com -cdabon.com -cdadata.com -cdadsj.com -cdaidu.com -cdairport.com -cdajcx.com -cdaten.com -cdbcw.com -cdbdsec.com -cdbjh.com -cdbsfund.com -cdbybo.com -cdccpit.org -cdcgames.net -cdchsj.com -cdchuandong.com -cdcoslm.com -cdcyts.com -cdcz.net -cddgg.com -cddgg.net -cddo8.com -cddscj.com -cddsgk.com -cde-os.com -cdedu.com -cdeledu.com -cdfcn.com -cdfgsanya.com -cdfinger.com -cdfmembers.com -cdfortis.com -cdfytx.com -cdgdad.com -cdggzy.com -cdgjbus.com -cdgmgd.com -cdgtw.net -cdgxfz.com -cdh3c.com -cdhaiguang.com -cdhfund.com -cdhongfu.com -cdhr.net -cdhtnews.com -cdidc.net -cditv.tv -cdjingfeng.com -cdjingying.com -cdjnrc.com -cdjsjx.com -cdjxjy.com -cdjzw.com -cdjzx120.com -cdjzzg.com -cdkf.com -cdkx.net -cdlaobing.com -cdlbyl.com -cdlfvip.com -cdlgame.com -cdlinux.net -cdlkzb.com -cdlxqn.com -cdmcaac.com -cdmfund.org -cdmm.net -cdmoz.org -cdn-789.com -cdn-baidu.net -cdn-cdn.net -cdn-chuang.com -cdn-cn1.apple-mapkit.com -cdn-cn2.apple-mapkit.com -cdn-cn3.apple-mapkit.com -cdn-cn4.apple-mapkit.com -cdn-data-cloud.com -cdn-dns-kubo.com -cdn-files.net -cdn-hotels.com -cdn-ng.net -cdn-speed.com -cdn-v.com -cdn.apple-mapkit.com -cdn.fun -cdn.marketplaceimages.windowsphone.com -cdn.razersynapse.com -cdn.samsung.com -cdn.shanghai.nyu.edu -cdn.zhuji5.com -cdn08.com -cdn1.apple-mapkit.com -cdn1218.com -cdn2.apple-mapkit.com -cdn20.com -cdn20.info -cdn20.org -cdn2000.com -cdn2020.com -cdn3.apple-mapkit.com -cdn30.com -cdn30.org -cdn3344.com -cdn35.com -cdn4.apple-mapkit.com -cdn56.com -cdn86.net -cdn88.cc -cdnaaa.net -cdnbuild.net -cdnbye.com -cdncache.net -cdncache.org -cdncenter.com -cdnchushou.com -cdncl.net -cdncloud.org -cdnclouds.net -cdnczydwl.com -cdndm.com -cdndm5.com -cdndm5.net -cdndo.com -cdnet110.com -cdnff.com -cdngslb.com -cdngslb8.com -cdngtm.com -cdnhwc1.com -cdnhwc2.com -cdnhwc3.com -cdnhwc6.com -cdnhwc7.com -cdni.net -cdnip567.com -cdnjtzy.com -cdnk8.com -cdnle.com -cdnle.net -cdnmama.com -cdnmaster.com -cdnok.com -cdnpan.com -cdnpe.com -cdnren.com -cdnsvc.com -cdntip.com -cdntips.com -cdntips.net -cdnudns.com -cdnunion.com -cdnunion.net -cdnunion.org -cdnvp.com -cdnvpn.net -cdnvue.com -cdnyoyun.com -cdnyt69.com -cdnyzdjj.com -cdooc.com -cdqcnt.com -cdqcp.com -cdqph.com -cdqss.com -cdrbs.net -cdren.com -cdren.net -cdronghai.com -cdrtvu.com -cdruzhu.com -cdryny.com -cds-cdn.v.aaplimg.com -cds.apple.com -cds.apple.com.akadns.net -cdsb.com -cdsb.mobi -cdsenfa.com -cdsglxx.com -cdshangceng.com -cdshijue.com -cdsjjy.com -cdsme.com -cdsns.com -cdsxlc.com -cdt-md.com -cdtaishan.com -cdtianda.com -cdueff.com -cduyzh.com -cdvcloud.com -cdvisor.com -cdweikebaba.com -cdworking.com -cdxrdz.com -cdxsbdz.com -cdxwcx.com -cdyee.com -cdyestar.com -cdygdq.com -cdyichu.com -cdyimei.com -cdyou.net -cdyuanhang.com -cdyushun.com -cdywgou.com -cdyzg.com -cdzcy.net -cdzdgw.com -cdzdhx.com -cdzgh.com -cdzhinan.com -cdzikao.com -cdzimo.com -cdzixun.net -cdzmn.com -cdzspcls.com -cdzszp.com -cdzvan.com -ce-air.com -ce02.net -ce04.com -ce12366.com -ce2293.com -ceair.com -ceairdutyfree.com -ceairgroup.com -ceaj.org -ceamg.com -cebbank.com -cebcn.com -cebpubservice.com -cecb2b.com -cecc-cx.com -ceccen.com -cecdc.com -cece-mall.com -cece.com -cece.la -cecesat.com -cechoice.com -cecisp.com -cecloud.com -cecmath.com -cecom.cc -ceconline.com -ceconlinebbs.com -cecport.cc -cecport.com -cectcc.com -cectv.net -cedachina.org -cedarhd.com -cediy.com -cedock.com -ceecu.com -ceeger.com -ceeie.com -ceeji.net -ceepsp.com -cef114.com -cefc.co -ceh3.com -cehbe.com -cehbh.com -cehbk.com -cehca.com -cehome.com -cehuashen.com -cehui8.com -cei1958.com -ceiaec.org -ceibs.edu -ceibsonline.com -ceic.com -ceiceicei.com -ceicloud.com -ceiea.com -cekid.com -celebpalace.com -celia520.com -celiang.net -cellixsoft.com -cellmean.com -cells-net.com -cells-net.net -celwk.com -cement365.com -cementren.com -ceming.com -cemyun.com -cenbel.com -cenbohao.com -cencs.com -cenray-ic.com -censh.com -centainfo.com -centanet.com -centcc.com -cententcymbals.com -centerm.com -centong.com -centos.bz -centoscn.vip -centralsolomon.com -centrincloud.com -centrixlink.com -century21cn.com -cenwor.com -cenwoy.com -cenxilm.com -cenya.com -ceobiao.com -ceoeo.com -ceoim.com -ceomoo.com -ceook.com -ceoplaza.com -ceotx.com -ceowan.com -ceowww.com -ceoxq.com -cepin.com -ceping.com -cepmh.com -ceppedu.com -ceprei.com -ceprei.org -ceqt.net -cer.net -cerambath.org -ceramicschina.com -cere.cc -cerestools.com -cernet.com -cernet.net -cernet2.net -cersp.com -ceruchina.com -ces-transaction.com -cescnb.com -cesfutures.com -ceshi.com -ceshi112.com -ceshigo.com -ceshigu.com -ceshiren.com -cespc.com -cesses.org -cet-46.com -cetc33.com -cetc36.com -cetc52.com -cetccloud.com -cetccloud.store -cetcio.com -cetcmotor.com -cetcssi.com -cetgps.com -cethik.com -ceunion.com -ceve-market.org -cevsn.com -cezxda.com -cf.com -cf027.com -cf668.com -cf865.com -cfachina.org -cfanclub.net -cfbond.com -cfc365.com -cfca-c.org -cfcdn.org -cfcdn.site -cfcglx.com -cfcp67.com -cfcpn.com -cfcyb.com -cfd-china.com -cfd163.com -cfda.pub -cfdaguanjia.com -cfdp.org -cfdtlee.com -cfeie.com -cfej.net -cfeks.com -cfgjwl.com -cfhi.com -cfhot.com -cfhpc.org -cfido.com -cfiec.net -cfiecdns.net -cfimg.com -cfkq.net -cflm.com -cfm119.com -cfmcc.com -cfmmc.com -cfmoto.com -cfogc.com -cfpa.pw -cfsino.com -cfsl2017.com -cftea.com -cftong.com -cfucn.com -cfund108.com -cfwaf.com -cfxydefsyy.com -cfxyfsyy.com -cfxyjy.com -cfzb.org -cfzq.com -cg-cdn.net -cg-orz.com -cg-vipwebs.com -cg-zwdb.com -cg.am -cg009.com -cg98.com -cgahz.com -cgangs.com -cgartt.com -cgbolo.com -cgboo.com -cgcountry.com -cgdown.com -cgdream.org -cgebook.com -cgejournal.com -cger.com -cgf-csyc.com -cghlj.com -cgiale.com -cgiia.com -cgjoy.com -cgjoy.net -cgke.com -cglnn.com -cglw.com -cgmantou.com -cgmao.com -cgmcc.net -cgmodel.com -cgmol.com -cgnjy.com -cgnmc.com -cgnne.com -cgnovo.com -cgohome.com -cgonet.com -cgown.com -cgpad.com -cgplayer.com -cgplusplus.com -cgptwd.com -cgpx.org -cgris.net -cgsdream.org -cgsec.com -cgsfusion.com -cgsoft.net -cgspread.com -cgstartup.com -cgtblog.com -cgtime.net -cgtn.com -cgtsj.com -cgtsj.org -cgtz.com -cguardian.com -cguiw.com -cguwan.com -cgvoo.com -cgvxingx-zhongjie.com -cgwang.com -cgwell.com -cgwic.com -cgws.com -cgxc.cc -cgxia.com -cgxm.net -cgylke.com -cgylw.com -cgyou.com -cgyouxi.com -cgyu.com -cgzair.com -cgzy.net -cgzyw.com -cgzz8.com -ch-auto.com -ch-water.com -ch.com -ch028.net -ch12333.com -ch318.com -ch999.com -ch999img.com -cha-tm.com -cha001.com -cha086.com -cha127.com -chabeichong.com -chachaba.com -chachaqu.com -chachongba.cc -chachongba.com -chacuo.net -chadan.wang -chadianhua.net -chadianshang.com -chadianshang2.com -chadown.com -chaduo.com -chaej.com -chafanhou.com -chafei.net -chahaotai.com -chaheji.com -chahua.org -chahuilv.com -chahuo.com -chaic.com -chaichefang.com -chaicp.com -chaihezi.com -chaijing.com -chaim.in -chaima.com -chaimage.com -chain-store.net -chaincar.com -chainflag.com -chainknow.com -chainnode.com -chainsdir.com -chainsinn.com -chainsql.net -chainwon.cc -chainwon.com -chairyfish.com -chaishiguan.com -chaitin.com -chajian110.com -chajianmi.com -chajiaotong.com -chajie.com -chajn.org -chakahao.com -chakd.com -chakuaizhao.com -chalangautozone.com -challenge-21c.com -chalwin.com -chamcfae.com -chamei.com -chamiji.com -champconsult.com -champhier.com -champzee.com -chance-ad.com -chandashi.com -changan.biz -changan.com -changancap.com -changandaxiyuancn.com -changanfunds.com -changansuzuki.com -changantaihe.com -changba-ktv.com -changba.com -changbaapi.com -changbaapp.com -changbaimg.com -changbalive.com -changchun-ccpit.com -changchundaxuehs.com -changeol.com -changfon.com -changfubai.com -changhe.tech -changhong.com -changhongdianzi.com -changhongit.com -changhongnet.com -changhuapower.com -changingedu.com -changjiangdata.com -changjiangexpress.com -changjiangtimes.com -changjuyi.com -changker.com -changkunet.com -changliuliang.com -changning.net -changpingquzhongxiyijieheyiyuan.com -changpu3d.com -changqingshu.net -changrongwang.com -changsha-show.com -changshabdc.com -changshang.com -changshiban.com -changtounet.com -changtu.com -changtu8.com -changxie.com -changxingyun.com -changyan.com -changyifan.com -changyin-lab.com -changyou.com -changyouke.com -changyoyo.com -changyueba.com -changzhinews.com -chanjet.com -chanluntan.com -chanmama.com -channelbeyond.com -channeleffect.com -channingsun.bid -chanpay.com -chanpin.biz -chanpin100.com -chanpinban.com -chanpindashi.com -chanshiyu.com -chansige.com -chanumber.com -chanway.net -chanyeren.com -chanzhi.org -chanzuimei.com -chaoart.com -chaochaojin.com -chaofan.wang -chaofan365.com -chaofan86.com -chaofanaishangyu.com -chaofanshuma.com -chaofenxiang.vip -chaoji.com -chaojialin.com -chaojibiaoge.com -chaojideng.com -chaojifan.com -chaojifangyu.com -chaojilian.net -chaojilock.com -chaojishipin.com -chaojixiaobaicai.club -chaojiying.com -chaojiyun.com -chaojizuowen.com -chaolady.com -chaolean.com -chaolen.com -chaoliutai.com -chaolongbus.com -chaomengdata.com -chaomi.cc -chaomo25.com -chaonanrc.com -chaonei.com -chaonengjie.com -chaonenglu.com -chaoren.com -chaoshanren.com -chaoshen.cc -chaoshengboliuliangji.com -chaoskeh.com -chaosu.com -chaosuduokai.com -chaosw.com -chaotag.com -chaov.com -chaowaihui.com -chaowaihui.net -chaoxin.com -chaoxing.com -chaoxz.com -chaoyindj.com -chaoyisy.com -chaoyuelm.com -chaoyuesd.com -chaoyuyun.com -chaozhiedu.com -chaozhoudaily.com -chaozhuo.net -chaozuo.com -chapangzhan.com -chapaofan.com -chaping.tv -chappell1811.com -chapuw.com -chargerlab.com -chargerlink.com -charmelady.com -charmingglobe.com -chartboost-china.com -chashebao.com -chatm.com -chatnos.com -chawenti.com -chawenyi.com -chawo.com -chaxinyu.net -chaxunfapiao.com -chayangge.com -chaye.com -chayeo.com -chayu.com -chayueshebao.com -chayuqing.com -chazc.com -chazhaokan.com -chazhilan.com -chazidian.com -chazishop.com -chaziwang.com -chaziyu.com -chazuo.com -chazuo.net -chazuowang.com -chbaojie.com -chbcnet.com -chbtc.com -chcedo.com -chcnav.com -chcoin.com -chczz.com -chda.net -chdajob.com -chdelphin.com -chdtv.net -che.com -che0.com -che12.com -che127.com -che168.com -che300.com -che6che5.com -cheaa.com -cheapermai.com -cheapyou.com -cheari.com -chebaba.com -chebada.com -chebao360.com -checheboke.com -chechong.com -check.cc -checkin.gstatic.com -checkip.biz -checkip.pw -checkoo.com -checkpass.net -chedan5.com -chediandian.com -cheduo.com -cheerfun.dev -cheerjoy.com -cheersee.com -cheersofa.com -cheerspublishing.com -cheerupmail.com -chefafa.com -chefans.com -chefugao.com -cheguanyi.com -chegud.com -cheguo.com -chehang168.com -chehejia.com -chehubao.com -chehui.com -chekb.com -chekucafe.com -chelun.com -chem17.com -chem31.com -chem36.com -chem365.net -chem960.com -chem99.com -chemalink.net -chemao.com -chemayi.com -chemcp.com -chemcyber.com -chemdrug.com -chemicalbook.com -chemishu.com -chemm.com -chemmade.com -chemnet.com -chemrc.com -chemsb.com -chemsrc.com -chemyq.com -chen7782.com -chenag.com -chenall.net -chenanz.com -chenapp.com -chende.net -cheng-nuo.com -cheng-sen.com -cheng95.com -cheng95.net -chengadx.com -chengailvsuo.com -chengbanren02.com -chengchuanren.com -chengdebank.com -chengdechina.com -chengder.com -chengdu-expat.com -chengdulvshi.net -chengdun.com -chengedeco.com -chengezhao.com -chengfeilong.com -chenggua.com -chengguw.com -chengjieos.com -chengjing.com -chengkao365.com -chenglang.net -chenglangyun.com -chenglin.name -chengliwang.com -chenglou.net -chengpeiquan.com -chengrang.com -chengrengaokaobaoming.com -chengshidingxiang.com -chengshiluntan.com -chengshiw.com -chengshizg.com -chengshu.com -chengsmart.com -chengtu.com -chenguangblog.com -chengxiangqian.com -chengxinyouxuan.com -chengxuan.com -chengyangnews.com -chengyangyang.com -chengye-capital.com -chengyin.org -chengyiqq.vip -chengyuw.com -chengyuwb.com -chengzhongmugu.wang -chengzi520.com -chengzijianzhan.cc -chengzijianzhan.com -chengzivr.com -chenhaiyue.com -chenhr.com -chenhui.org -chenii.com -chenjia.me -chenjie.info -chenjiehua.me -chenjunlu.com -chenksoft.com -chenlb.com -chenlianfu.com -chenlinux.com -chenlongyx.com -chenmomo.com -chenpeng.info -chenplus.com -chenpot.com -chenqiego.com -chenruixuan.com -chenshipin.com -chensonglin.net -chenty.com -chenxi-sh.com -chenxinghb.com -chenxm.cc -chenxuehu.com -chenxuhou.com -chenxunyun.com -cheny.org -chenyaorong.com -chenyea.com -chenyistyle.com -chenyongjun.vip -chenyuan588.com -chenyuanjian.com -chenyudong.com -chenzao.com -chenzhicheng.com -chenzhongkj.com -chenzhongtech.com -cheonhyeong.com -cheoo.com -cheoz.com -chepin88.com -chepinnet.com -chepoo.com -cherongzi.com -cherriespie.com -cherymanuals.com -cheshi-img.com -cheshi.com -cheshi18.com -cheshirex.com -cheshouye.com -chestar.net -chesthospital.com -chesudi.com -chesusu.com -chetuanwang.net -chetuobang.com -chetx.com -chetxia.com -chevip.com -chewen.com -chexiang.com -chexiaopang.com -chexin.cc -chexiu.com -chexun.com -chexun.net -cheyaoshi.com -cheyian.com -cheyipai.com -cheyishang.com -cheyisou.com -cheyo.net -cheyoo.com -cheyou123.com -cheyun.com -cheyuu.com -chez360.com -chezhanri.com -chezhibao.com -chezhu1.com -chezhuzhinan.com -chezizhu.com -chgcis.com -chgcw.com -chgjedu.com -chgreenway.com -chhblog.com -chhua.com -chhzm.com -chi2ko.com -chi588.com -chiang.fun -chibaole.com -chichou.me -chichuang.com -chidaolian.com -chidaoni.com -chidaoni.net -chidown.com -chidudata.com -chiefmore.com -chieftin.org -chifenghualvlvxingshe.com -chihaigames.com -chihe.so -chiheba.com -chiji-h5.com -chijianfeng.com -childjia.com -childlib.org -chillyroom.com -chilunyc.com -chiluyingxiao.com -chimatong.com -chimee.org -chimelong.com -chimezi.com -china-10.com -china-3.com -china-315.com -china-ah.com -china-asahi.com -china-asm.com -china-b.com -china-caa.org -china-cas.org -china-cba.net -china-cbn.com -china-cbs.com -china-ccie.com -china-ccw.com -china-cdt.com -china-ceco.com -china-ced.com -china-cfa.org -china-changjiang.net -china-channel.com -china-chuwei.com -china-cicc.org -china-clearing.com -china-cloud.com -china-co.com -china-coc.org -china-cold.com -china-consulate.org -china-csdz.com -china-csm.org -china-customs.com -china-cw.com -china-d.com -china-def.com -china-designer.com -china-drm.net -china-ef.com -china-efe.org -china-eia.com -china-embassy.org -china-engine.net -china-entercom.com -china-enterprise.com -china-epa.com -china-epc.org -china-erzhong.com -china-experts.com -china-fire.com -china-flash.com -china-flower.com -china-g.com -china-galaxy-inv.com -china-gehang.com -china-genius.com -china-gold.com -china-goldcard.com -china-highway.com -china-holiday.com -china-hongfei.com -china-hrg.com -china-huaxue.com -china-huazhou.com -china-hzd.com -china-insurance.com -china-invests.net -china-isotope.com -china-jm.org -china-kaihua.com -china-kaoshi.com -china-key.com -china-kids-expo.com -china-lawoffice.com -china-led.net -china-lushan.com -china-lzmj.com -china-m2m.com -china-moutai.com -china-nengyuan.com -china-nlp.com -china-nysw.com -china-obgyn.net -china-packcon.com -china-pcba.com -china-pharmacy.com -china-pops.net -china-pub.com -china-qiao.com -china-reform.org -china-ric.com -china-riscv.com -china-russia.org -china-see.com -china-seeq.com -china-share.com -china-shimo.com -china-show.net -china-shufajia.com -china-sites.com -china-slate.com -china-sorsa.org -china-spacenews.com -china-sss.com -china-toy-edu.org -china-toy-expo.com -china-twofoundation.com -china-up.com -china-vcom.com -china-vision.org -china-vo.org -china-wanlin.com -china-warping.com -china-waste.com -china-wss.com -china-zbycg.com -china-zikao.com -china.com -china.mintel.com -china.uxengine.net -china001.com -china12365.com -china17.net -china1baogao.com -china1f.com -china2000.org -china35.com -china356.com -china360.net -china3gpp.com -china4a.org -china50plus.com -china5e.com -china60.com -china618.com -china6688.com -china724.com -china777.org -china95.net -china9s.com -china9y.com -chinaacc.com -chinaadec.com -chinaaet.com -chinaagrisci.com -chinaairer.com -chinaalex.com -chinaamc.com -chinaamuse.com -chinaanonymous.com -chinaapp.org -chinaar.com -chinaartificialstone.com -chinaasc.org -chinaaseanenv.org -chinaaseantrade.com -chinaasic.com -chinaautosupplier.com -chinaaviationdaily.com -chinab4c.com -chinabaike.com -chinabaiker.com -chinabaogao.com -chinabaokan.com -chinabaoke.net -chinabathware.com -chinabbtravel.com -chinabda.org -chinabdh.com -chinabdt.com -chinabeer.net -chinabenson.com -chinabeston.com -chinabgao.com -chinabidding.com -chinabiddingzb.com -chinabigdata.com -chinabike.net -chinabimdata.org -chinabmi.com -chinabn.org -chinabookinternational.org -chinabreed.com -chinabug.net -chinabus.info -chinabuses.com -chinabym.com -chinabyte.com -chinabzp.com -chinac.com -chinac3.com -chinacace.org -chinacache.cedexis.com -chinacache.com -chinacache.net -chinacaipu.com -chinacaj.net -chinacamel.com -chinacampus.org -chinacarbide.com -chinacarz.com -chinacasa.org -chinaccm.com -chinaccnet.com -chinaccnet.net -chinaccsi.com -chinacct.org -chinacdlm.com -chinaceot.com -chinaceotv.com -chinacfi.net -chinacfo.net -chinacft.org -chinachemnet.com -chinachilun.org -chinachugui.com -chinacics.org -chinacil.com -chinacir.com -chinacity.net -chinacitywater.org -chinackf.net -chinacleanexpo.com -chinaclip.net -chinacma.org -chinacmo.com -chinacnr.com -chinacoal.com -chinacomix.com -chinaconch.com -chinaconsulatesf.org -chinaconveyor.com -chinacosco.com -chinacourt.org -chinacpda.com -chinacpda.org -chinacpec.com -chinacpx.com -chinacqsb.com -chinacrane.net -chinacreator.com -chinacrumpler.com -chinacses.org -chinacsf.com -chinactv.com -chinaculture.org -chinacxgd.com -chinacxjs.org -chinacyzf.org -chinadafen.com -chinadailyglobal.com -chinadance.com -chinadart.com -chinadatatrading.com -chinaday.com -chinadazhaxie.com -chinadds.net -chinadegi.com -chinadengshi.com -chinadentalshow.com -chinadep.com -chinadeveloper.net -chinadiaoyou.com -chinadigit.org -chinadmoz.org -chinadns.org -chinadoudi.com -chinadrtv.com -chinadsl.net -chinadysj.com -chinadyt.com -chinadz.com -chinadzyl.com -chinae.net -chinaeastlaw.com -chinaecnet.com -chinaecotech.org -chinaeda.org -chinaedu.com -chinaedu.net -chinaedunet.com -chinaedunewsw.com -chinaefu.net -chinaehs.net -chinaeic.net -chinaeinet.com -chinaeinv.com -chinaemed.com -chinaequity.net -chinaerman.com -chinaesm.com -chinaexam.org -chinaexpo365.com -chinaeye.com -chinafanyi.com -chinafarad.com -chinaffmpeg.com -chinafiber.com -chinafic.org -chinafilm.com -chinafilms.net -chinafinancenet.com -chinafinanceonline.com -chinafishtv.com -chinafix.com -chinaflashmarket.com -chinaflier.com -chinafoodj.com -chinaforklift.com -chinafpd.net -chinafph.com -chinafpma.org -chinaftat.org -chinafudaoban.com -chinagames.net -chinagayles.com -chinagb.net -chinagb.org -chinagba.com -chinagcd.com -chinagcp.org -chinagdg.com -chinagiftsfair.com -chinagoldcoin.net -chinagoldgroup.com -chinagolfshow.com -chinagp.net -chinagps.cc -chinagrid.net -chinagrowthcapital.com -chinagungho.org -chinaguyao.com -chinagwy.org -chinagwyw.org -chinagzn.com -chinagznw.com -chinahacker.com -chinaham.com -chinahao.com -chinaharp.com -chinahazelnut.com -chinahbnet.com -chinahightech.com -chinahighway.com -chinahkidc.net -chinahlwyy.com -chinahnjs.com -chinahorse.org -chinahost.org -chinahotel.com -chinahpa.org -chinahqjjw.com -chinahr.com -chinahrd.net -chinahrgy.com -chinahrt.com -chinahte.com -chinahtz.com -chinahuben.com -chinahumanrights.org -chinahvacr.com -chinahw.net -chinahydro.com -chinahyyj.com -chinai.shop -chinaidaa.org -chinaidcnet.net -chinaidns.com -chinaido.com -chinaielts.org -chinaiern.com -chinaiia.com -chinainout.com -chinaiol.com -chinaios.com -chinaipmagazine.com -chinaipo.com -chinaiprlaw.com -chinairn.com -chinairr.org -chinaitcapital.com -chinaitlab.com -chinaitpower.com -chinajan.com -chinajcz.com -chinajeweler.com -chinajjz.com -chinajnhb.com -chinajoinin.com -chinajoy.net -chinajs120.com -chinajsxx.com -chinajungong.com -chinajuva.com -chinajyxdh.com -chinajzqc.com -chinakaoyan.com -chinakaratedo.org -chinakidville.com -chinakingland.com -chinakingo.com -chinakongzi.org -chinaks.net -chinaksi.com -chinakyzl.com -chinalabexpo.com -chinalabs.com -chinalancoo.com -chinalandpress.com -chinalao.com -chinalawbook.com -chinalawedu.com -chinalawinfo.com -chinalawyeryn.com -chinaleather.org -chinaledger.com -chinaleeper.com -chinalibs.net -chinalicensing.org -chinalicensingexpo.com -chinalifang.com -chinalims.net -chinalincoln.com -chinalink-sh.net -chinalink.tv -chinalinuxpub.com -chinalions.com -chinalm.org -chinalongmai.net -chinalsjt.com -chinalubricant.com -chinalure.com -chinalushan.com -chinaluxus.com -chinalxnet.com -chinamae.com -chinamags.org -chinamap.com -chinamarintec.com -chinamaven.com -chinambn.com -chinamca.com -chinamcache.com -chinamcloud.com -chinameasure.com -chinameat.org -chinameidu.com -chinamendu.com -chinamenwang.com -chinamerger.com -chinametro.net -chinameyer.com -chinamfi.net -chinamining.com -chinamission.be -chinamlmcc.com -chinamobile.com -chinamobilesz.com -chinamost.net -chinamsa.org -chinamsr.com -chinamusical.net -chinamusicbusinessnews.com -chinamworld.com -chinamypp.com -chinanbb.com -chinanet-sh.com -chinanet.cc -chinanet88.com -chinanetcenter.com -chinanetidc.com -chinanetsun-dns.com -chinanetsun.com -chinaneweast.com -chinanews.com -chinaningbo.com -chinanmi.com -chinaobp.com -chinaoct.com -chinaonward.net -chinaopc.org -chinaopen.com -chinaops.org -chinaopticsvalley.com -chinaore.com -chinaosx.com -chinaosx.net -chinaott.net -chinaowps.com -chinapastel.com -chinapay.com -chinape168.com -chinapen.org -chinapet.com -chinapet.net -chinapharm.net -chinaphoto.cc -chinapipe.net -chinaplat.com -chinapm.org -chinapnr.com -chinapoesy.com -chinaports.com -chinapost-life.com -chinapowerbi.com -chinapp.com -chinapptx.com -chinaprint.org -chinaproaudio.com -chinapsy.com -chinapubmed.net -chinaqi.net -chinaqingtian.com -chinaqipeihui.com -chinaqking.com -chinaql.org -chinaqoe.net -chinaquickpcb.com -chinaqw.com -chinarayying.com -chinardr.com -chinardr.net -chinaredstar.com -chinaren.com -chinareports.org -chinarootdesign.com -chinartlaw.com -chinarun.com -chinarzfh.com -chinasa.net -chinasaat.com -chinasafety.net -chinasanc.com -chinasatcom.com -chinasb.org -chinasbj.net -chinasbsp.com -chinasciencejournal.com -chinascopefinancial.com -chinascrum.org -chinascsoft.com -chinasexq.com -chinashadt.com -chinashangpinku.com -chinashj.com -chinashop.cc -chinashpp.com -chinasi.com -chinasie.com -chinasilk.com -chinasiwei.com -chinasky.net -chinasmartpay.com -chinasnow.net -chinasnw.com -chinaso.com -chinasofti.com -chinasoftinc.com -chinasoftosg.com -chinasosuo.cc -chinasou.com -chinasoushang.com -chinaspringtown.com -chinassl.com -chinassl.net -chinasspp.com -chinastoneforest.com -chinastor.com -chinasufa.com -chinasupercloud.com -chinaswim.com -chinaswitch.com -chinasws.com -chinasydw.org -chinatai.com -chinataiwan.org -chinatalent.org -chinatarena.com -chinatat.com -chinatechinsights.com -chinatelecom-ec.com -chinatelecom.com.mo -chinatelecomiot.com -chinatelling.com -chinatet.com -chinatex.com -chinatex.net -chinatex.org -chinatibetnews.com -chinaticket.com -chinatietong.com -chinatikfans.com -chinatimber.org -chinatimes.cc -chinatiner.com -chinatiredealer.com -chinatmic.com -chinatopbrands.net -chinatourguide.com -chinatpm.com -chinatpm.net -chinatranslation.net -chinatravel.net -chinatraveldepot.com -chinatruck.org -chinatrucks.com -chinatsi.com -chinatsp.com -chinattl.com -chinatungsten.com -chinatupai.com -chinatv-net.com -chinatvc.com -chinatyco.com -chinaufo.com -chinaui.com -chinauidesign.com -chinauma.com -chinaums.com -chinaun.net -chinaunicom-a.com -chinaunicom.com -chinauniforms.com -chinaunionpay.com -chinauniversalasset.com -chinaunix.com -chinaunix.net -chinaunix.org -chinauo.com -chinauos.com -chinauos.net -chinauos.org -chinaups.com -chinaus-maker.org -chinaus.com -chinauso.com -chinavalin.com -chinavalue.net -chinavcpe.com -chinavfx.net -chinavid.com -chinavideo.org -chinavipsoft.com -chinavisual.com -chinavivaki.com -chinavnet.com -chinavoa.com -chinavr.net -chinawaiyu.com -chinawanda.com -chinawatchnet.com -chinawbk.com -chinawbsyxh.com -chinawch.com -chinawebber.com -chinawebmap.com -chinaweiyu.com -chinawenben.com -chinawenwang.com -chinawie.com -chinawiserv.com -chinawitmedia.com -chinawoodnet.com -chinawpn.com -chinawr.net -chinawudang.com -chinawutong.com -chinawutong.net -chinawuyuan.com -chinaxiaokang.com -chinaxinge.com -chinaxinport.com -chinaxpp.com -chinaxq.com -chinaxqf.com -chinaxueqian.com -chinaxwcb.com -chinaxzrc.com -chinayigou.com -chinayigui.com -chinayk.com -chinaymc.com -chinayouji.com -chinayuanwang.com -chinayyjx.com -chinayyo.com -chinayzyh.com -chinaz.com -chinaz.net -chinazhiqing.org -chinazichan.com -chinazikao.com -chinazjph.com -chinazjy.com -chinaznj.com -chinazns.com -chinaznyj.com -chinazov.com -chinazwds.com -chinazwds.org -chinazxt.com -chinazyjr.com -chinca.org -chindiaforum.com -chine-info.com -chinee.com -chinese-luxury.com -chinese-no1.com -chineseacc.com -chineseafs.org -chineseall.com -chinesecio.com -chineseconsulate.org -chineseembassy.org -chinesehongker.com -chinesejk.com -chinesejy.com -chineselaw.com -chinesemooc.org -chineserose.com -chinesetown.net -chingkun.com -chingli.com -chingmi.com -chinlingo.com -chinput.com -chint.com -chint.net -chipcoo.com -chipcreation.com -chipdance.com -chiphell.com -chiplayout.net -chipmanufacturing.org -chiponeic.com -chipown.com -chiprf.com -chipsbank.com -chipsec.com -chipsgo.com -chipsir.com -chipup.com -chipwing.com -chipwings.com -chiq-cloud.com -chiralquest.com -chisai.tech -chisc.net -chiselchina.com -chiser.cc -chishine3d.com -chishoes.com -chitanda.me -chitu.com -chitu101.com -chitu103.com -chitu104.com -chitu107.com -chivast.com -chivox.com -chivoxapp.com -chiwayedu.com -chixing.net -chixingkeji.com -chixm.com -chiyuebing.com -chiyuekj.com -chiyuewenhua.com -chizhouchacha.com -chizhoujob.com -chizhouren.com -chiznews.com -chjso.com -chkj365.com -chklingw.com -chlahb.com -chloe99.com -chmecc.org -chmed.net -chmgames.com -chmia.org -chn0769.com -chn112.com -chn168.com -chnart.com -chnau99999.com -chnbook.org -chnci.com -chncia.org -chncomic.com -chncpa.org -chncwds.com -chndesign.com -chndsnews.com -chndtb.com -chnews.net -chnfi.com -chnfund.com -chngalaxy.com -chngc.net -chnjet.com -chnlanker.com -chnlib.com -chnmodel.com -chnmus.net -chnmusic.org -chnp2p.com -chnpac.com -chnpec.com -chnpic.net -chnppmuseum.com -chnroad.com -chnsuv.com -chocolatehappyland.com -chofn.com -chofn.net -chofn.org -chofnipr.com -choiceform.com -chong-wu.net -chong4.net -chongai.co -chongchi.com -chongchuang.biz -chongdeedu.com -chongdiantou.com -chonghi.com -chongmingzhuce.com -chongqingdongjin.com -chongsoft.com -chongwu.cc -chongwujiaoyi.com -chongwuxiang.com -chongya.com -chongyacdn.com -chongyitang.org -chongzhi.com -chonka.com -chotee.com -chouchoujiang.com -choujue.net -choukang.com -choupangxia.com -chouqinshuwu.com -chouqu.com -chouti.cc -chouti.com -chplayer.com -chqgwy.org -chrent.com -chrice.net -chrieschina.com -chris-tina.com -chrisyue.com -chrmn.com -chrom-china.com -chromecj.com -chromedownloads.net -chromefor.com -chromeliulanqi.com -chroyoo.com -chrstatic.com -chs.so -chshcms.com -chshouyu.com -chsqh.com -chste.com -chtf.com -chtfund.com -chtgc.com -chtpe.com -chtse.com -chtwm.com -chuaiguo.com -chuairan.com -chuaizhe.com -chuanbofanyi.com -chuanbojia.com -chuanboyi.com -chuandaizc.com -chuandong.com -chuang.pro -chuangbie.com -chuangcache.com -chuangcdn.com -chuangchangnet.com -chuangcifang.com -chuangd.com -chuangduyouyue.com -chuangen.com -chuangfeixin.com -chuangjiangx.com -chuangkem.com -chuangkeup.com -chuangkit.com -chuanglian.net -chuanglinggame.com -chuangluo.com -chuangread.com -chuangshifurui.com -chuangshileather.com -chuangshizhenghe.com -chuangtoo.com -chuangx.org -chuangxin.com -chuangxinapi.com -chuangxinbeidou.com -chuangxinoa.com -chuangye.com -chuangye98.com -chuangyebaba.com -chuangyejia.com -chuangyejia.vip -chuangyejian.com -chuangyejmw.com -chuangyepu.com -chuangyezhu.com -chuangyijisu.com -chuangyimao.com -chuangyouqi.com -chuangyunet.com -chuangzaoshi.com -chuanjiaoban.com -chuanke.com -chuanmeixing.com -chuanmeizy.com -chuannan.net -chuanqi.com -chuanqian999.com -chuanshanqundao.com -chuansongme.com -chuantec.com -chuantou.org -chuanxincao.net -chuanye.com -chuanying365.com -chuanying520.com -chuanyinpx.com -chuapp.com -chubaodai.com -chubh.com -chucaotang.com -chucaotang.net -chuchuguwen.com -chuchujie.com -chudaoyou.com -chudeer.com -chudian365.com -chufaba.me -chufw.com -chuge8.com -chuguo78.com -chuguofeng.com -chuguohao.com -chuhoi.com -chuimg.com -chuinet.com -chuixue.net -chuiyue.com -chuji8.com -chuju750.com -chujuan.net -chukong-inc.com -chukou1.com -chukuangren.com -chule.cc -chulouwang.com -chumacdn.com -chumanapp.com -chumenwenwen.com -chumo028.com -chunbo.com -chunboimg.com -chuncui.net -chuncuinet.com -chundakj99.com -chundi.com -chundi.org -chunengauto.com -chunfengapp.com -chunge188.com -chungeseo.com -chungkwong.cc -chunhingplasticbags.com -chunhui12.com -chunjingtech.com -chunjiws.com -chunmi.com -chunqiuwang.com -chunshuitang.com -chunshuizhijia.com -chunsuns.com -chuntiansongart.com -chunxuanmao.com -chunyiscdk.com -chunyu.me -chunyu.mobi -chunyuyisheng.com -chunzaichengnan.com -chuqimen.com -chuquan.me -chureng.com -churenjixie.com -chusan.com -chuseo.com -chushan.com -chushang027.com -chushibiao5.com -chushihome.com -chushiji.com -chushou.tv -chushu123.com -chutianlaser.com -chutianzhinu.com -chuwi.com -chuxiangyi.com -chuxindata.com -chuxingyouhui.com -chuxinhudong.com -chuxinm.com -chuxueyun.com -chuying.org -chuyouke.com -chuyu.me -chuzhaobiao.com -chvv.com -chw365.com -chwlsq.com -chxlm.com -chxyq.com -chyangwa.net -chydafuse.com -chyfh.com -chyoukj.com -chysoft.net -chyw.pub -chyxx.com -chzhkeji.com -chzhw.com -chzybj.com -ci123.com -ci52.com -ci800.com -ciamiecn.com -ciaoca.com -ciatcm.org -cibfintech.com -cibn.cc -cibn.com -cibntv.net -ciboedu.org -cibonet.com -cibresearch.com -cibuser.com -cicaf.com -cicc.com -ciccfund.com -ciccphoto.com -ciceme.com -cicet.net -ciciec.com -cicmag.com -cicphoto.com -cict.com -cicw.org -cidgroup.com -cidi.ai -cidiancn.com -cidianwang.com -cidschina.com -cidugushi.com -ciec-expo.com -ciect.com -cieet.com -cietac-hb.org -cietac-sc.org -cietac.org -cifalshanghai.org -cifco.net -cifm.com -cifnews.com -cifoo.com -ciftis.org -cigarambassador.com -cigbiexpo.com -cignacmb.com -cihai123.com -cihexpo.com -ciia-if.org -ciicgat.com -ciidoo.com -ciie.org -ciif-expo.com -ciiip.com -ciimg.com -cijilu.com -ciku5.com -cili001.com -cili123.pw -cili8.xyz -ciliba.buzz -ciliba.life -ciliba5.xyz -ciliguanjia.cyou -cilin.org -cilogo.com -cim2025.net -cimamotor.com -cimc.com -ciming-bj.com -ciming-shop.com -ciming.com -cimingaoya.com -cimingsy.com -cimingyc.com -cimsic.com -cimtshow.com -cinasoft.com -cindasc.com -cindasoft.com -cinehello.com -cingta.com -ciniao.me -cinsee.com -cinyi.com -cio114.com -cio360.net -cioage.com -ciotimes.com -ciotour.com -ciou.com -cip.cc -cipgtrans.com -ciplawyer.com -cippe.net -ciprun.com -cipscom.com -cipunited.com -ciqinghui.com -cirmall.com -cirno9.net -cirs-reach.com -cirunzhang.com -cismag.net -cismef.com -cisskwt.com -citahub.com -citexpo.org -citiais.com -citic-cid.com -citic.com -citicbank.com -citicbankuser.com -citiccard.com -citicguoanbn.com -citicnetworks.com -citics.com -citicsf.com -citicsinfo.com -citicsqh.com -citicsteel.com -citidigital.com -citisa.org -citiz.net -citreport.com -cits-sz.net -cits0871.com -cits2.com -citscq.com -citscsc.com -citsgbt.com -citshq.com -citssh.com -citszz.com -cittc.net -citure.net -citvc.com -city8.com -city84.com -citydh.com -citygf.com -cityhui.com -citylinker.com -citysbs.com -citysz.net -citytogo.com -cityup.org -citywo.com -cityy.com -civilcn.com -civilness.com -civiw.com -ciweek.com -ciweekly.com -ciwei.me -ciwei.net -ciweimao.com -ciweishixi.com -ciweiyuedui.com -ciwong.com -ciwork.net -cixibank.com -cixiedu.net -ciyew.com -ciyocon.com -ciyuan.men -cizip.com -cj-elec.com -cjavapy.com -cjcjw.com -cjcp.org -cjdby.net -cjdcw.com -cjdropshipping.com -cjdx1.com -cjeduw.com -cjftb.com -cjgcedu.com -cjhb168.com -cjhospital.com -cjhxfund.com -cjienc.com -cjiit.com -cjjhb.com -cjjjs.com -cjjnff.com -cjk3d.net -cjkcgs.com -cjkhd.com -cjkj.ink -cjkz.com -cjlap.com -cjlhs.com -cjm.so -cjmakeding.com -cjmit.com -cjmx.com -cjn.com -cjnis.com -cjol.com -cjolimg.com -cjrcsc.com -cjs-lwh.love -cjsc.com -cjting.me -cjveg.com -cjxz.com -cjyun.club -cjyun.org -cjyyw.com -cjzkw.com -cjzy.net -cjzzc.com -ck100.com -ck180.net -ckair.com -ckck.vip -ckd.cc -ckd.im -ckd.so -ckd8.com -ckdzb.com -ckefu.com -ckernel.org -ckeyedu.com -ckgcjl.com -ckimg.com -ckjr001.com -ckmov.com -ckook.com -ckplayer.com -ckpoo.com -cksd888.com -cksic.com -ckuai.com -ckxsw.com -ckxx.net -ckzhijiaedu.com -cl-acg.com -cl-clw.com -cl-hs.com -cl-kongtiao.com -cl0438.com -cl1-cdn.origin-apple.com.akadns.net -cl1.apple.com -cl2-cn.apple.com -cl2.apple.com -cl2.apple.com.edgekey.net.globalredir.akadns.net -cl2009.com -cl3-cdn.origin-apple.com.akadns.net -cl3.apple.com -cl3000.com -cl4-cdn.origin-apple.com.akadns.net -cl4-cn.apple.com -cl4.apple.com -cl5-cdn.origin-apple.com.akadns.net -cl5.apple.com -cl597.com -clabso.com -clady.cc -claiks.com -clanzx.net -claritywallpaper.com -class01.com -classmateer.com -clayidols.com -claymore.wang -clb6.net -clboss.com -clbu.club -clcindex.com -clclibrary.com -clcmw.com -clcyd.com -clean-cn.com -cleaninfo.com -clear-sz.com -clear888.com -clearaki.com -clearcrane.com -clearsky360.com -clewm.net -clewx.com -clf.red -clfile.com -clgc88.com -cli.im -click-v.com -click369.com -clicksdiy.com -clickserve.dartsearch.net -clicksun.net -clickwifi.net -client51.com -clientflow.apple.com -clientflow.apple.com.akadns.net -clientservices.googleapis.com -cliffordtrading.com -cliim.com -cliim.net -clinicmed.net -clink-ads.xyz -clinkworld.com -cliport.com -cljmmm123.com -clled.com -clloz.com -clngaa.com -clocklab.tech -cloopen.com -cloopen.net -cloopm.com -closertb.site -clostone.com -clotfun.online -clotfun.xyz -clotheshr.com -clothjob.com -clothr.com -clouclip.com -cloud-cube.net -cloud-dns.net -cloud-dns.vip -cloud-frame.com -cloud-links.net -cloud-neofussvr.sslcs.cdngc.net -cloud-sun.com -cloudacc-inc.com -cloudajs.org -cloudangelfunds.com -cloudbility.com -cloudcc.com -cloudcdn.net -cloudcdns.com -cloudcdns.net -cloudcross.com -cloudcsp.com -clouddcs.com -clouddiffuse.xyz -clouddn.com -clouddream.net -cloudflarea.com -cloudgap.net -cloudgfw.com -cloudgfw.net -cloudglb.com -cloudglb.net -cloudgoing.com -cloudguarding.com -cloudhosts.xyz -cloudhua.com -cloudhvacr.com -cloudinnov.com -cloudinward.com -cloudiplc.com -cloudkirin.com -cloudleft.com -cloudlet.info -cloudmap.hk -cloudmes.io -cloudminds.com -cloudnapps.com -cloudp.cc -cloudpense.com -cloudpnr.com -cloudpre.org -cloudroom.com -cloudsation.com -cloudsea.org -cloudsee.com -cloudseeplus.com -cloudseetech.com -cloudserver01.com -cloudsgis.com -cloudsohu.net -cloudstack-china.org -cloudtcp.net -cloudtomicro.com -cloudtopo.com -cloudtrans.com -cloudtui.com -cloudv.cdnetworks.com -cloudvast.com -cloudvdn.com -cloudvip1.com -cloudvogue.com -cloudvse.com -cloudwise.com -cloudxns.com -cloudyee.com -cloudyo.net -cloudyouku.com -clpga.org -clsn.io -clssn.com -cltt.org -clubweixin.samsung.com -clusterdnsserver.com -clx360.com -clyric.com -clz.me -clzqlhj.com -clzycld.com -cm-analysis.com -cm-iov.com -cm233.com -cm3721.com -cmacredit.org -cmaif.com -cmall.com -cmanuf.com -cmb-leasing.com -cmbajia.com -cmbbao.com -cmbchina.biz -cmbchina.com -cmbchina.net -cmbimg.com -cmbuy10086.com -cmbwinglungbank.com -cmc168.com -cmcc-ecs.com -cmcc.in -cmcm.com -cmcm5.cc -cmcm5.com -cmcm55.cc -cmcmcdn.com -cmd5.com -cmd5.la -cmd5.org -cmda.net -cmdb.xyz -cmdrh.com -cmdschool.org -cmdw.vip -cmdy2020.com -cmechina.net -cmejob.com -cmenergyshipping.com -cmes.org -cmetamap.com -cmfchina.com -cmfish.com -cmfspay.com -cmft.com -cmfu.com -cmgame.com -cmge.com -cmgos.com -cmgrasp.com -cmhello.com -cmia.info -cmicapm.com -cmidc.net -cming.com -cmiyu.com -cmjz.net -cmljs.org -cmmim.com -cmnet-speed.com -cmnxt.com -cmo.so -cmoct.com -cmodes.com -cmol.com -cmpassport.com -cmpay.com -cmread.com -cmri.cc -cms.ibm.com -cms1924.org -cmsblogs.com -cmschina.com -cmscmc.org -cmseasy.cc -cmsfg.com -cmsjournal.net -cmskcrm.com -cmsky.com -cmsn.biz -cmspapp77.com -cmstop.com -cmswj.com -cmsyuanma.com -cmt178.com -cmt7.com -cmtdi.com -cmtech.net -cmu1h.com -cmuliang.com -cmvtc.com -cmwb.com -cmwin.com -cmxrcw.com -cmxwsj.com -cmzd.com -cmzj.net -cmzy168.com -cmzyk.com -cn-bowei.com -cn-c114.net -cn-em.com -cn-fe.com -cn-healthcare.com -cn-java.com -cn-lcd.com -cn-msedge.net -cn-mw.com -cn-office.com -cn-psy.com -cn-railway.net -cn-roofexpert.com -cn-soft.com -cn-truck.com -cn-visa.com -cn-xbn.com -cn-zhentai.com -cn.bing.com -cn.bing.net -cn.img.stb.s-msn.com -cn.msi.com -cn.net -cn.pandora.net -cn.vc -cn.windowssearch.com -cn0-6.com -cn00.com -cn006.com -cn010w.com -cn0434.com -cn0556.com -cn0713.com -cn0851.com -cn0917.com -cn12333.com -cn12365.org -cn168.com -cn18k.com -cn2-cn2.com -cn20.com -cn21edu.com -cn22.net -cn2che.com -cn314.com -cn357.com -cn360cn.com -cn365c.com -cn365d.com -cn365e.com -cn3k5.com -cn3v.net -cn3wm.com -cn4e.com -cn51.com -cn5135.com -cn539.com -cn68.com -cn6szx.com -cn716.com -cn8fre.com -cn99.com -cn9f.com -cna5.com -cnaaa15.com -cnaaa6.com -cnaaa7.com -cnaaa9.com -cnacg.cc -cnad.com -cnaf.com -cnagcoin.com -cnaho.com -cnaicpa.org -cnaidai.com -cnaidc.com -cnaifm.com -cnair.com -cnal.com -cname-cdn.com -cname-url.com -cname123.net -cnamegslb.com -cnantennas.com -cnanzhi.com -cnaomeng.com -cnautofinance.com -cnautonews.com -cnbabylon.com -cnball.net -cnbanbao.com -cnbaowen.net -cnbct.org -cnbeta.com -cnbetacdn.com -cnbetnew.com -cnbidding.com -cnbigcloud.com -cnbiocell.com -cnbis.com -cnbis.org -cnbizmedia.com -cnbksy.com -cnbkw.com -cnblogs.com -cnblogsc.com -cnblogse.com -cnbluebox.com -cnbmys.com -cnbntv.com -cnboat.com -cnbooks.org -cnbp.net -cnbuses.com -cnbw114.com -cnbzlf.com -cnbzol.com -cnbzs.com -cnc-gd.net -cnca.net -cncc.bingj.com -cnccac.com -cnccchina.com -cncdn.com -cncdzn.com -cncelab.com -cnceo.com -cncgw.org -cnchainnet.com -cnchanran.com -cncheng.com -cnchezhan.com -cnchu.com -cncico.com -cnciyuan.com -cncjmjg.com -cncloud.com -cncmrn.com -cncms.com -cncn.com -cncn.net -cncnbd.com -cncncloud.com -cncncn.com -cncnet.net -cncnki.com -cncolour.com -cncondom.com -cncookernet.com -cncoolm.com -cncopter.com -cncotton.com -cncourt.org -cncraftinfo.com -cncrk.com -cncrony.com -cncrypt.com -cncsj.net -cnctui.com -cnczjy.com -cnd8.com -cndao.com -cndata.com -cndatacom.com -cndds.com -cndesign.com -cndfilm.com -cndhotels.com -cndids.com -cndingxi.com -cndip.com -cndjyswlw.com -cndkc.net -cndns.com -cndns5.com -cndog.net -cndoornet.com -cndoors.com -cndrynet.com -cndsnet.com -cndss.net -cndtlab.com -cndtour.com -cndw.com -cndy.org -cndzq.com -cndzys.com -cnecc.com -cnedres.org -cneeex.com -cnelc.com -cnelecom.net -cnelite.org -cneln.net -cnemb.com -cnena.com -cnenergy.org -cneol-dns.net -cnep001.com -cnepaper.com -cnepaper.net -cnerlang.com -cnern.org -cnesf.com -cnetea.net -cnetec.com -cnetsec.com -cneuol.com -cnevi.com -cnexp.net -cnexps.com -cneyoo.com -cnezsoft.com -cnfanews.com -cnfantasia.com -cnfaxie.org -cnfczn.com -cnfdlt.com -cnfeat.com -cnfeelings.com -cnfeol.com -cnffi.com -cnfiberhome.com -cnfilternet.com -cnfina.com -cnfirst.org -cnfish.com -cnfisher.com -cnfla.com -cnfmp.net -cnfol.com -cnfol.hk -cnfolimg.com -cnforever.com -cnforex.com -cnfpzz.com -cnfq.com -cnfqy.com -cnfrag.com -cnfruit.com -cnfsae.com -cnfuyin.org -cnfxj.org -cnfygy.com -cnfyyj.com -cnfzflw.com -cngal.org -cngaosu.com -cngb.org -cngba.com -cngbdl.com -cngdwx.com -cnggt120.com -cngin.com -cngnu.net -cngold.org -cngoldres.com -cngrain.com -cngreenfield.com -cngrok.com -cngui.com -cngulu.com -cnh5.net -cnhacker.com -cnhaio.com -cnhalo.net -cnhan.com -cnhandan.com -cnhangpaiw.com -cnhanxing.com -cnhaoshengyi.com -cnhaskell.com -cnhbgt.com -cnhbstock.com -cnhd.com -cnhetianyu.com -cnhhl.com -cnhls.com -cnhlsxe.com -cnhm.net -cnhmsq.com -cnhnb.com -cnhongke.org -cnhonker.com -cnhowotruck.com -cnhsjz.com -cnhszx.com -cnhuadong.net -cnhuanya.com -cnhubei.com -cnhutong.com -cnhvacrnet.com -cnhwjt.com -cnhzz.com -cniaas.com -cniao5.com -cniao8.com -cnibx.com -cnicif.com -cnidea.net -cnimg.elex.com -cninfo.net -cninnovatel.com -cninternetdownloadmanager.com -cnipa-gd.com -cnipa-hb.com -cnipa-pesc.com -cnipa-sc.com -cnipa-tj.com -cnipai.com -cnipr.com -cnisland.com -cnisp.org -cnit-research.com -cnitblog.com -cniteyes.com -cniti.com -cnitom.com -cnitpm.com -cnjccrusher.com -cnjcs.com -cnjdz.net -cnjiaju.com -cnjidan.com -cnjingbu.com -cnjingchu.com -cnjiwang.com -cnjiyin.com -cnjj.com -cnjjl.com -cnjjsd.com -cnjjwb.com -cnjlc.com -cnjnsb.com -cnjob.com -cnjoel.com -cnjournals.com -cnjpetr.org -cnjunzilan.com -cnjxol.com -cnjyky.com -cnjywl.com -cnjzb.com -cnjzjj.com -cnk8.com -cnkaile.com -cnkang.com -cnkefa.com -cnkeyboard.com -cnkeyboard.net -cnki.mobi -cnki.net -cnki.vip -cnkicheck.info -cnkicheck.org -cnkiki.net -cnkinect.com -cnkiorg.com -cnkirito.moe -cnkis.net -cnkitop.com -cnkivip.net -cnkix.com -cnkizw.com -cnklog.com -cnknowledge.com -cnkok.com -cnkore.com -cnkuai.com -cnky.net -cnlangier.com -cnlaw.net -cnledw.com -cnlhzb.com -cnlianjie.com -cnlid.net -cnlight.com -cnlightnet.com -cnlinfo.net -cnlist.com -cnlist.org -cnlive.com -cnliveimg.com -cnllz.com -cnlogo8.com -cnlty.com -cnluqiao.com -cnmanhua.com -cnmattson.com -cnmcom.com -cnmdy.com -cnmeishu.com -cnmeiwei.com -cnmia.org -cnmill.com -cnmineqs.net -cnmo.com -cnmobile.net -cnmods.org -cnmoi.org -cnmsl.net -cnmsn.net -cnmstl.net -cnmtpt.com -cnmxk.com -cnmysql.com -cnnaihuo.com -cnnb.com -cnnbfdc.com -cnndns.com -cnnerv.com -cnnetsec.com -cnnewss.com -cnnfootballclub.com -cnnmol.com -cnnorip.org -cnnot.com -cnnovels.com -cnnpz.com -cnns.net -cnntt.com -cnnuo.com -cnobol.com -cnodejs.org -cnoee.com -cnoenet.com -cnohd.com -cnoic.com -cnoil.com -cnokcn.com -cnol.cc -cnolnic.com -cnolnic.net -cnonline.org -cnookr.com -cnool.net -cnophol.com -cnops.xyz -cnosr.com -cnoswiki.com -cnoutdoor.com -cnpaf.net -cnpatent.com -cnpc-hy.com -cnpenjing.com -cnpereading.com -cnpet.cc -cnpghouse.com -cnphar.net -cnpharm.com -cnphotos.net -cnphp.info -cnpickups.com -cnpkm.com -cnplugins.com -cnpmjs.org -cnpolitics.org -cnponer.com -cnpou.com -cnpowdernet.com -cnpowdertech.com -cnpps.org -cnprofit.com -cnpubg.com -cnpusi.com -cnpv.com -cnpython.com -cnpythoner.com -cnqc.com -cnqd.net -cnqiang.com -cnqiaoxiang.com -cnqichun.com -cnqjc.com -cnqjw.com -cnqr.org -cnquanjing.com -cnradio.com -cnrainbird.com -cnraksmart.com -cnrancher.com -cnratchet.com -cnrceo.com -cnrcloudfm.com -cnrdm.com -cnreagent.com -cnree.com -cnrencai.com -cnrepair.com -cnrepark.com -cnrexue.com -cnrmall.com -cnrmobile.com -cnrouter.com -cnrunda.com -cnrv.io -cns.hk -cnsaes.org -cnsal.com -cnsat.net -cnsav.com -cnsb.org -cnsc8.com -cnsce.net -cnscee.com -cnscfa.com -cnscore.com -cnsdjxw.com -cnsdtv.com -cnsdzb.com -cnseay.com -cnsecer.com -cnseeq.com -cnsesan.com -cnsfk.com -cnshipnet.com -cnsikao.com -cnsilkworm.com -cnsimin.com -cnskyit.com -cnsnpj.com -cnso.org -cnsoc.org -cnsoe.com -cnsoftbei.com -cnsoftnews.com -cnsolomo.com -cnsourcing.org -cnspeed.com -cnspeedtest.com -cnspeedtest.net -cnsphoto.com -cnstea.com -cnstock.com -cnsun.cc -cnsun.net -cnsuning.com -cnsunp.com -cnsuv.com -cnsyhz.com -cnsynews.com -cnsyyx.com -cntagore.com -cntaiping.com -cntan.net -cntapp.com -cntexjob.com -cntheory.com -cntiaoliao.com -cntofu.com -cntopgear.com -cntoplead.com -cntourwh.com -cntrades.com -cntranslators.com -cntronics.com -cntuw.com -cntv.com -cntwg.com -cntxw.com -cnuninet.net -cnutcon.com -cnuuu.com -cnv168.com -cnvcs.com -cnvf.com -cnvps.com -cnvr-expo.com -cnvultr.com -cnwa.com -cnwage.com -cnwaking.com -cnwaternews.com -cnwb.net -cnwdjj.com -cnwdsy.com -cnwear.com -cnwebe.com -cnweblog.com -cnwebshow.com -cnweilo.com -cnwen.net -cnwenshi.net -cnwest.com -cnwhc.com -cnwhotel.com -cnwindows.com -cnwinenews.com -cnwnews.com -cnwtn.com -cnwxw.com -cnxad.com -cnxct.com -cnxds.com -cnxhacker.com -cnxiangyan.com -cnxiantao.com -cnxianzai.com -cnxiaoyuan.com -cnxibu.com -cnxile.com -cnxingoplastics.com -cnxishui.net -cnxk.com -cnxklm.com -cnxnmy.com -cnxuntu.com -cnyanglao.com -cnyicheng.com -cnyigui.com -cnyings.com -cnyipu.com -cnyouhao.com -cnys.com -cnyu.com -cnyugan.com -cnyuming.com -cnyw.net -cnywinfo.com -cnyxs.com -cnzao.com -cnzazhi.net -cnzhanting.com -cnzhanzhang.com -cnzhengmu.com -cnzhibo.com -cnzhiyuanhui.com -cnzjol.com -cnzlapp.com -cnzsqh.com -cnzsyz.com -cnzweal.com -cnzxsoft.com -cnzyao.com -cnzz.com -cnzz.net -cnzznn.com -cnzznz.com -co-effort.com -co-inclusion.org -co-mall.net -co188.com -co188cdn.com -coalcn.com -coantec.com -coaoo.com -coatingol.com -cobbersz.com -cobenet.com -cobkl.com -cocas.cc -cocblo.com -cocccc.vip -coccccc.cc -cocimg.com -coco413.com -cocoachina.com -cocodiy.com -cocomanga.com -cocomanhua.com -coconuet.com -cocophp.com -cocoren.com -cocos.com -cocos.org -cocos2d-x.org -cocos2d.org -cocos2dev.com -cocos2dx.net -cocosbcx.net -cocostudio.org -cocounion.com -cocss.com -codante.org -code-by.org -code.sh -code4apk.com -code668.com -codeaha.com -codebe.org -codebus.net -codebye.com -codecoke.com -codedefault.com -codedocs.net -codedq.net -codedream.xin -codeforge.com -codehy.com -codeisbug.com -codejie.net -codekissyoung.com -codekk.com -codeku.me -codelover.link -codemany.com -codemart.com -codemm.net -codeok.com -codepiano.com -codepku.com -codeplayer.vip -codepub.com -coder.work -coder100.com -coder4.com -coder55.com -coderbee.net -coderclock.com -codercto.com -coderdock.com -coderhuo.tech -coderli.com -coderplanets.com -coderprepares.com -codersec.net -coderxing.com -coderyuan.com -coderzh.com -codes51.com -codesec.net -codesky.net -codesoft.hk -codesoftchina.com -codesoso.com -codespu.com -codess.cc -codetc.com -codeweblog.com -codewenda.com -codewoody.com -codezyw.com -coding-newsletter.com -coding-pages.com -coding.me -coding.net -coding.red -codingapp.com -codingbelief.com -codingboy.com -codingdao.com -codingdict.com -codingke.com -codinglabs.org -codingplayboy.com -codingpy.com -codingserf.com -codingsky.com -codingwhy.com -codingyang.com -codoon.com -codooncdn.com -codrim.net -cofco.com -cofcosp.com -cofeed.com -cofess.com -coffee-script.org -coffee08.com -cofly.com -cogcpa.org -cogitosoft.com -cogobuy.com -cogonline.com -cohim.com -coilmx.com -coin007.com -coin163.com -coinall.live -coinall.ltd -coincola.net -coincsd.com -coinnice.com -coinsky.com -coinvs.com -cojia.net -cokemine.com -cokll.com -col.ink -colabug.com -coladrive.com -colafile.com -colahotpot.com -colasmart.com -coldfunction.com -coldlar.com -colineapp.com -colipu.com -colobu.com -color365.com -colorbird.com -colorfulltech.net -colorgg.com -coloros.com -coloros.net -colorv.com -colourfulchina.com -colourhs.com -colourlife.com -com-dy1-youku.com -com-h-bilibili.com -com-h-pptv.com -com-h-sina.com -com-rail.com -com.fi -com.tv -com21.com -com4loves.com -comac.cc -comba.xyz -combomen.com -combpm.com -combss.com -comebond.com -comefilm.com -comeken.com -comet.cc -comeyes.com -comfortzone.hk -comiai.com -comic520.com -comicdd.com -comicer.com -comicfans.net -comiclub.com -comicocn.com -comicst.com -comicv.com -comicyu.com -comidu.com -comiis.com -comingchina.com -comingspace.com -comlan.com -comlbs.com -commchina.net -communicatte.com -comnetix.com -comocloud.net -companydns.com -compassedu.hk -compevt.com -compgoo.com -compressor-pld.com -comra.org -comsenz-service.com -comsenz.com -comseoer.com -comsharp.com -comsol.com -comvps.com -conbagroup.com -conchdesktop.com -concox.net -configuration.apple.com -configuration.apple.com.akadns.net -confuciusinstitute.net -cong9184.com -congm.in -congrongfund.com -congyicn.com -congzao.com -congzhi.com -connectivitycheck.gstatic.com -connector-systems.com -conoha.vip -conohavps.com -conpak.com.hk -conpersh.com -conshow.com -console-integration.cdnetworks.com -console.cdnetworks.com -contentchina.com -contentchina.net -contiez.com -conuo.com -convergemob.com -convertlab.com -conwos.com -conyedit.com -coobar.com -coocaa.com -coocaatv.com -coocare.com -cooch3d.com -coocox.org -coodir.com -coodub.com -coofans.com -cooffee.net -coohua.com -cookbookchina.com -cookcai.com -cookie4you.com -cookietang.com -cool-admin.com -cool-de.com -cool80.com -coolact.net -coolaf.com -coolapk.com -coolapkmarket.com -coolbook.cc -coolbuy.com -coolchuan.com -coolcode.org -coolcode.tech -coolcoolcloud.com -cooldock.com -cooldu.com -cooleasy.net -coolecho.net -coolfd.com -coolgamebox.com -coolgua.net -coolguang.com -coolkit.cc -coolkk.net -coolling.net -coolnull.com -coolook.org -coolool.com -coolpad.com -coolqi.com -coolrar.com -coolsc.net -coolsdream.com -coolsite360.com -coolsphoto.com -cooluc.com -coolwarmsy.com -coolwp.com -coolxap.com -coolxcloud.com -coolyun.com -coolzou.com -coomix.net -cooo.us -coooz.com -coopb2b.com -coophone.com -coorain.net -coorfeon.com -cootek.com -cootekos.com -cootekservice.com -coovbbs.com -coovee.com -coovee.net -cooxs.com -coozhi.com -cop.cdnetworks.com -copyan.com -copyedu.com -copyfuture.com -copymanga.info -copymanga.net -copymanga.org -cor-games.com -corachic.com -coralsec.com -corebai.com -coreldrawchina.com -corp.google.com -corpautohome.com -corpease.net -corpize.com -corpring.com -corpus4u.org -cos-show.com -cosco.com -coscon.com -coscoshipping.com -cosedm.com -cosfund.com -coshelper.com -coshi.cc -coship.com -cosize.com -cosmoplat.com -cosoar.com -cosplay8.com -cosplayla.com -cosyjoy.com -coubei.com -counect.com -couns.com -couplefish.com -coupon996.com -couponmaster.store -coursegraph.com -covcec.com -coventrynv.com -coverweb.cc -covinda.com -covtv.com -cowarobot.com -cowlevel.net -cowtransfer.com -coyuk.com -cozumpartisi.com -cp127w.com -cp365.org -cp455.com -cpajia.com -cpass.com -cpatrk.net -cpbao.com -cpc.cc -cpcccac.com -cpcni.net -cpcw.com -cpcwe.com -cpdad.com -cpdaily.com -cpdyj.com -cpecc.net -cpeol.net -cpgzh.com -cphoto.net -cphoto.org -cpiano.com -cpiaoju.com -cpiccdn.com -cpicsz.com -cpihualai.com -cpitsh.org -cpjltx.com -cplchain.com -cpnic.com -cpo.xyz -cpo2o.com -cpolar.com -cpolar.io -cpolive.com -cpooo.com -cpp-prog.com -cpp114.com -cppblog.com -cppcns.com -cppentry.com -cppfoto.com -cpph.com -cppinfo.com -cpplay.com -cpplive.com -cppoc.com -cpppc.org -cpppf.org -cppwh.com -cps1688.com -cps800.com -cps88.cc -cpsbeijing.org -cpsct.com -cpsenglish.com -cptae.com -cpu668.com -cpubbs.com -cpupack.com -cpvjob.com -cpxco.net -cpxsxk.com -cpython.org -cq-wnl.com -cq.cm -cq315house.com -cq3a.com -cq5135.com -cq6.com -cq6969.com -cqaaa.com -cqae.com -cqaso.com -cqbdfeng.com -cqbm2007.com -cqbnedu.com -cqbnrc.com -cqbntv.com -cqbuchouhua.com -cqbyer.net -cqbys.com -cqcaee.com -cqcatr.com -cqcb.com -cqcbank.com -cqccn.com -cqchzx.com -cqcklib.com -cqcoal.com -cqcp.net -cqcqcq.com -cqcsic.com -cqcsrc.com -cqcxdl.com -cqcy.com -cqcyls.com -cqdadi.com -cqdai.com -cqdailynews.com -cqddnap.com -cqddzx.com -cqdent.com -cqdting.com -cqdzw.com -cqedo.com -cqemme.com -cqfire.com -cqfuzhuang.com -cqfzb.org -cqgc.com -cqggzy.com -cqgmfw.com -cqgz.com -cqh2o.com -cqhansa.com -cqhaotang.com -cqhcbk.com -cqhimalayanky.com -cqhkcdns.com -cqhpoldi.com -cqhxgf.com -cqhxzb.com -cqhyd.com -cqhydraulic.com -cqhyky.com -cqindex.com -cqivip.com -cqjbrc.com -cqjet.com -cqjiaz.com -cqjj.net -cqjjlsy.com -cqjjnet.com -cqjnw.org -cqjob.com -cqjsxx.com -cqjy.com -cqkdtui.com -cqkdtui1.com -cqkeb.com -cqkhg.com -cqkjwx.com -cqklsm.com -cqkqinfo.com -cqkundian.com -cqkx.com -cqkytq.com -cqleba.com -cqlglg.com -cqliving.com -cqlp.com -cqlyckj.com -cqmama.net -cqmas.com -cqmcu.com -cqmj.org -cqmjkjzx.com -cqmmgo.com -cqmw.com -cqnc.cc -cqncnews.com -cqnews.net -cqnhn.com -cqnu0001.com -cqpa.org -cqpbx.com -cqph.com -cqpix.com -cqpost.com -cqqc3.com -cqqigao.com -cqqiyi.com -cqqnb.net -cqqp.com -cqqsl.com -cqqsyy.com -cqqzgrh.com -cqrc.net -cqrcb.com -cqscmy.net -cqshangceng.com -cqshenou.com -cqskl.com -cqslib.org -cqslsc.com -cqsms.net -cqsoft.org -cqsxedu.com -cqsy.org -cqt8.com -cqtally.co -cqtally.com -cqtea.com -cqtransit.com -cqtresearch.com -cqttech.com -cquae.com -cquc.net -cqudp.com -cqvip.com -cqvip.vip -cqw.cc -cqwangwo.com -cqwenbo.com -cqwin.com -cqwulong.net -cqxdfpr.com -cqxh120.com -cqxiehe.com -cqxingyun.com -cqxxzwj.com -cqxyfl.com -cqyc.net -cqyestar.com -cqyeze.com -cqyfgs.com -cqyingang.com -cqyouloft.com -cqyu.com -cqyzqsy.com -cqzhanguan.com -cqzhongxingyuan.com -cqzk.net -cqzls.com -cqzq6.com -cqzww.com -cqzyx.net -cqzz.net -cr-expo.com -cr-nielsen.com -cr11gcsgd.com -cr11gee.com -cr173.com -cr175.com -cr18g.com -cr19gj.com -cr6868.com -crabchina.com -crackersta.com -craftcontact.com -crandom.com -crazepony.com -crazydyz.cc -crazyenglish.org -crazyflasher.com -crazyphper.com -crazypm.com -crbbav.com -crbbpp.com -crbeverage.com -crc.com.hk -crc.hk -crc81.com -crcapital.info -crcrfsp.com -crct.com -cre.net -cread.com -creatby.com -createcdigital.com -creati5.com -crec4.com -crec4mc.com -crecg.com -crecu.com -credibleglass.com -credit-cras.com -creditcn.com -creditsailing.com -creditxb.com -creke.net -creo-support.com -crestgps.com -crestv.com -crewcn.com -crfchina.com -crfsdi.com -crgecent.com -crgy.com -cric.com -cric2009.com -cricbigdata.com -crifst.com -crimoon.net -crispstata.com -crjfw.com -crl.globalsign.net -crl.kaspersky.com -crl.pki.goog -crlcn.com -crlf0710.com -crlg.com -crm.cc -crm1001.com -crmch.com -crmclick.com -crmeb.com -crmeb.net -crmg-ms.com -crmgz.com -crmip.com -crmrj.net -crmvscrm.com -crnds.com -crnews.net -crodigy.com -crossmo.com -crossoverchina.com -crosswaycn.com -crowya.com -crpaas.com -crrcgc.cc -crs811.com -crsc.cc -crsky.com -crsn168.com -crvic.org -crxdl.com -cryptape.com -crystalcg.com -crystaledu.com -cryuantafund.com -cryy120.com -cs-air.com -cs-ceo.com -cs-cjl.com -cs-show.com -cs0799.com -cs090.com -cs1212.xyz -cs12333.com -cs27.com -cs2c.com -cs2ccloud.com -cs30.net -cs528.com -cs53.com -csadec.com -csaimall.com -csair.com -csairdutyfree.com -csairholiday.com -csairshop.com -csapa.org -csaspx.com -csau.com -csbdkj.com -csbidding.com -csbnj.net -csc108.com -csc86.com -cscan.co -cscatv.com -cscdf.org -cscec.com -cscec1b.net -cscec5b3.com -cscecst.com -cscsf.com -cscyw.com -csdc.info -csdeshang.com -csdh.com -csdian.net -csdjy.com -csdn.com -csdn.net -csdndx.com -csdndx.net -csdnxiazai.xyz -csdqp.com -csdxcw.com -csdyx.com -csea767.com -csebank.com -csehms.com -csflgg.com -csfqw.com -csftyy.com -csgm168.com -csgpc.org -csgwbn.com -csharpkit.com -cshixi.com -cshnkj.com -cshu360.com -cshxdc.com -cshzw.com -csi.gstatic.com -csiaexpo.com -csic-711.com -csic-ljtech.com -csic612.com -csic6801.com -csic76.com -csiccq.com -csicmakers.com -csiea.net -csj309.vip -csjcs.com -csjplatform.com -csjwang.com -csjyzq.com -cskule.com -cskxjk.com -cslfans.com -cslou.com -cslyrc.com -csmall.com -csmama.net -csmar.com -csmbcx.com -csmc-cloud.com -csmscon.com -csnbgsh.com -cspda.net -cspengbo.com -cspiii.com -cspro.org -cspruc.com -cspxw.com -csqc.cc -csqnews.com -csrcare.com -csrcbank.com -csrcsc.com -csrda.com -csres.com -csrgm.com -csrme.com -csrpme.com -css-js.com -css.network -css6.com -css88.com -cssa-swansea.com -cssaaa.com -csseplastic.com -cssf.com -cssf.net -cssforest.org -cssfz.com -cssg-ahi.com -cssgxmj.com -cssj.fun -csslcloud.net -cssmagic.net -cssmoban.com -cssmxx.com -cssplus.org -cssq33.com -cssqt.com -csstoday.net -csswgq.com -cssxt.com -cssyq.com -cssyzxx.com -cstat.apple.com -cstccloud.org -cstcloud.net -cstcq.com -cstea.org -cstech.ltd -csteelnews.com -cstimer.net -csto.com -cstong.net -cstriker1407.info -csuboy.com -csuedu.com -csundec.com -csvclub.org -csvsc.com -csvw.com -csw18.com -csweigou.com -cswsadlab.com -csxcdj.com -csxdf.com -csxingfutemple.org -csxnews.com -csxsjc.com -csxtedu.com -csxww.com -csyangchen.com -csyestar.com -csytv.com -cszb556.com -cszexin.com -cszit.com -cszsjy.com -cszx.com -cszybdf.com -cszykt.com -cszywl.net -cszzjc.com -ct-cdm.com -ct-laser.com -ct10000.com -ct108.com -ct597.com -ctaca.com -ctags.net -ctans.com -ctaoci.com -ctaweb.org -ctb50.com -ctbjia888.com -ctc100.com -ctcefive.com -ctcmo.com -ctcnn.com -ctcnpa.com -ctcontents.com -ctcwri.org -ctdc-itshare.org -ctdcn.com -ctdisk.com -ctdns.net -ctdsb.com -ctdsb.net -cteaw.com -ctecdcs.com -ctex.org -ctfile.com -ctfile.net -ctflife.com -ctfmall.com -ctfo.com -ctfund.com -ctghealthy.com -ctghr.com -ctguqmx.com -cthnet.com -cthuwork.com -cthuwork.net -cthy.com -cti-cert.com -ctibet.com -ctiforum.com -ctiku.com -ctils.com -ctime.com -ctisd.com -ctjin.com -ctjsoft.com -ctlcdn.com -ctldl.windowsupdate.com -ctlife.tv -ctmon.com -ctn1986.com -ctnz.net -ctobsnssdk.com -ctocio.com -ctoclub.com -ctoutiao.com -ctrip-lvyou.com -ctrip-ttd.hk -ctrip.co.id -ctrip.co.kr -ctrip.com -ctrip.my -ctrip.sg -ctripa.com -ctripbiz.com -ctripbuy.hk -ctripcorp.com -ctripgslb.com -ctripins.com -ctripqa.com -ctrmi.com -ctrtb.com -ctsbw.com -ctsec.com -ctsho.com -ctsscs.com -ctssr.com -ctsto.com -ctszh.com -cttip.org -cttq.com -cttsd.com -cttv.co -ctvpost.com -ctvwx.com -ctwxc.com -ctxyw.com -ctycdn.com -ctyo.com -ctzrnet.com -cu-air.com -cu321.com -cuaa.net -cuan.la -cuantianhou.net -cuav.net -cubead.com -cubejoy.com -cubie.cc -cucdc.com -cuchost.com -cuctv.com -cudaojia.com -cuebzzy.com -cuelog.com -cufe-ifc.org -cufeyk.com -cufou.com -cug2313.com -cugstore.com -cuihu100.com -cuihuan.net -cuijunwei.com -cuimm.com -cuiniaoedu.com -cuiniuhui.com -cuipengfei.me -cuipixiong.com -cuiqingcai.com -cuirushi.com -cuishuai.cc -cuiuc.com -cuiweijuxing.com -cuixx.com -cuiyongjian.com -cuizl.com -cuketest.com -cul-studies.com -culaiwan.com -cumtenn.com -cumulon.com -cun58.com -cunan.com -cuncun8.com -cuncunle.com -cuncx.com -cunminyi.com -cunnar.com -cunyoulu.com -cunzj.com -cuobiezi.net -cuour-edu.com -cuour.com -cuour.org -cupdapp.com -cupdata.com -cupdns.com -cupinn.com -cuplayer.com -cureedit.com -curlc.com -curryhuang.com -cusdvs.net -custeel.com -cut35.com -cutecomm.com -cutefishos.com -cuteng.com -cutercounter.com -cuteximi.com -cutout.pro -cutowallpaper.com -cutv.com -cuuhn.com -cuyoo.com -cuzz.site -cvchina.info -cvchome.com -cvcri.com -cvicse.com -cvicseks.com -cvmart.net -cvnad.com -cvonet.com -cvp-platform.com -cvrobot.net -cvte.com -cvtvcn.com -cw100.com -cwbpsi.com -cwddd.com -cwdma.org -cwebgame.com -cwems.com -cwestc.com -cwmining.com -cwq.com -cwqu.com -cwroom.com -cwyan.com -cwziyouren.com -cx312.com -cx580.com -cx930.net -cxacg.com -cxas.com -cxbz958.com -cxc233.com -cxcc.me -cxcyds.com -cxd-auto.com -cxdq.com -cxfuwu.com -cxgame.net -cxh99.com -cxhl365.net -cxhr.com -cximg.com -cxkjjy.com -cxmld.com -cxmms.com -cxmt.com -cxmtc.net -cxsw3d.com -cxta.com -cxthhhhh.com -cxtuku.com -cxtxt.com -cxvn.com -cxw.com -cxwl.com -cxwt103.com -cxwt104.com -cxwt105.com -cxwt106.com -cxwt113.com -cxwwhyc.com -cxxjs.com -cxy61.com -cxy7.com -cxybl.com -cxyd.net -cxyfjy.com -cxyl.org -cxylfc.com -cxymsg.com -cxyob.com -cxytiandi.com -cxyxiaowu.com -cxyxwl.com -cxyym.com -cxz.com -cxz3d.com -cxzg.com -cxzudwk.com -cxzw.com -cxzww.com -cy-cdn.com -cy-email.com -cy.com -cy12301.com -cy1990.com -cy2009.com -cy52.com -cy52.org -cy580.com -cy865.com -cy88.com -cy887.com -cy899.com -cyagen.com -cyanhillcapital.com -cyb-bot.com -cyb-cie.com -cyb520.com -cyb800.com -cyberway-china.net -cybtc.com -cybtc.info -cybtc.net -cycares.com -cychaiqian.com -cyclingchina.net -cyclone-robotics.com -cyclonemoto.com -cycnet.com -cycoi.com -cycoo.com -cycyuan.com -cydf.com -cydiakk.com -cydiami.com -cydow.com -cydp5.com -cyedu.org -cyegushi.com -cyepai.com -cyfeng.com -cyfengchao.com -cyhd.net -cyhm.com -cyhone.com -cyht168.com -cyhx98.com -cyidc.cc -cyikao.com -cyjcloud.com -cyjn.net -cyjnsy.com -cyjzzd.com -cyk-cable.com -cylong.com -cymh8.com -cynee.net -cynovan.com -cyol.com -cyol.net -cyou-inc.com -cyoupic.com -cypatent.com -cypmedia.com -cypresstel.com -cyprestar.com -cyqyzx.com -cyruc.com -cysq.com -cyss19.com -cysua.com -cytcard.com -cytcm.com -cyts.com -cytsgroup.com -cytsls.com -cytstibet.com -cyttc.org -cyudun.net -cyuew.com -cyuyan100.com -cywetc.com -cyy18.com -cyyizuo.com -cyypscl.com -cyyself.name -cyysjm.com -cyyz.org -cyzm.net -cz-hffm.com -cz-toshiba.com -cz-yk.com -cz.cc -cz2sc.com -cz365.com -cz8.com -cz89.com -czainuo.com -czb365.com -czbanbantong.com -czbank.com -czbanmutian.com -czbq.net -czbtv.com -czbx18.com -czcac.com -czcarbon.com -czchuanlin.com -czcid.com -czcqly.com -czctech.com -czcyme.com -czdingming.com -czdrbz.com -czds.net -czedu.com -czepb.com -czfcw.com -czfdc.com -czfesco-mg.com -czggsj.com -czgjj.com -czgjj.net -czgongzuo.com -czie.net -czifi.org -czitc.com -czjake.com -czjdu.com -czjpw.com -czjsy.com -czkbdq.net -czkingdee.com -czlxgc.net -czmc.com -cznewcom.com -czongyi.com -czopen.com -czpoly.com -czrj.com -czrxw.com -czry888.com -czsbtjx.com -czse7cxw.xyz -czshipyard.com -czsljky.com -czsrc.com -czssx.com -cztour.com -cztv.com -cztv.tv -cztvcloud.com -czur.com -czvv.com -czvv.net -czwsg5.com -czxixi.com -czxsss.com -czxy.com -czyhq.com -czyjgd.com -czyooda.com -czyxba.com -czzcm.com -czzsw.com -czzy-edu.com -d-controls.com -d-ctrip.com -d-heaven.com -d-prototype.com -d.cg -d03jd.com -d0evi1.com -d1222.com -d17.cc -d1cm.com -d1com.com -d1cy.com -d1ev.com -d1fm.com -d1h.net -d1lx.com -d1net.com -d1sm.net -d1tele.com -d1xf.net -d1xn.com -d1xtw.com -d1xz.net -d1ye.com -d20.net -d2fan.com -d2fbf.com -d2film.com -d2kdi2ss.com -d2mzb.com -d2scdn.com -d2shost.com -d3ch.com -d3cn.net -d3dweb.com -d3f.com -d3iz9md.com -d3skg.com -d3tt.com -d3zone.com -d4000.com -d586.com -d5h.net -d5power.com -d5wx.com -d65d6.com -d77777777.com -d7baike.net -d7ol.com -d7vg.com -d8th.com -da-qian.com -da-quan.net -da88.net -daanbar.com -daba.com -dabache.org -dabaicai.com -dabaicai.org -dabaicai.pw -dabaicai.shop -dabaigongju.com -daban001.com -dabangm.com -dabangp.com -dabangq.com -dabao123.com -dabaoku.com -dabieshu.com -dabin69.com -dabingseo.com -dabjy.com -daboluo.net -dabusi.com -dacai.com -dacankao.com -dacankao.net -dachanet.com -dachenglaw.com -dachengnet.com -dachengzi.net -dachuizichan.com -dachuw.com -dachuw.net -dadaabc.com -dadaabcc.com -dadabew.com -dadagame.com -dadagem.xyz -dadaizi.com -dadajiasu.com -dadajuan.com -dadakan.com -dadaojiayuan.com -dadayou.com -dadclab.com -daddymami.net -dadetong.com -dadianstudio.com -dadicinema.com -dadighost.com -dadijilu.com -dadipedia.com -dadiwang.com -dadizq.com -dadou.com -dadoubao.com -dadunet.com -daf-rs.com -dafa53.com -dafa888-0.com -dafaji.com -dafang24.com -dafangya.com -dafanshu.com -dafayu.com -dafhr.com -dafork.com -dafuhao-ol.com -dafy.com -dagangcheng.com -dagongcredit.com -dagongnet.com -daguangnews.com -daguu.com -daguzhe.com -dahainan.com -dahaiyang.com -dahanghaiol.com -dahangzhou.com -dahanwl.com -dahanyu.com -daheapp.com -dahecc.com -dahecube.com -dahei.com -dahelj.com -daheng-image.com -daheng-imaging.com -daheng-imavision.com -dahengit.com -dahepark.com -dahepiao.com -daheshui.com -dahongba.net -dahongpaochaye.com -dahouduan.com -dahua8.com -dahuaab.com -dahuaddns.com -dahuangmei.com -dahuatech.com -dahuawang.com -dahuifuwu.com -dahuitu.net -dahulu.com -dahuoji.biz -dai35.com -dai361.com -dai911.com -daibi.com -daichanger.com -daichuqu.com -daicuo.cc -daicuo.co -daicuo.net -daicuo.vip -daicuo.wang -daidaitong.com -daidaitv.com -daidongxi.com -daijinquanaliyun.com -daijun.com -daikela.com -daikuan.com -daikuane.com -daili666.net -dailian.info -dailianqun.com -dailiantong.com -dailianzj.com -dailiba.com -dailijizhang.cc -dailiqing.net -dailnkm.com -dailuopan.com -dailyeconomic.com -dailygn.com -dailyheadlines.cc -dailyqd.com -daimabiji.com -daimadog.com -daimafans.com -daimajia.com -daimajiaoliu.com -daimajiayuan.com -daimami.com -daimasucai.com -daimg.com -daimiyun.com -daishangqian.com -daishu.com -daishujiankang.com -daishutijian.com -daiwoqu.com -daixiaobao.com -daixiaomi.com -daixiaorui.com -daiyanbao.com -daiyanmama.com -daizhuzai.com -daizitouxiang.com -daji.com -dajiabao.com -dajiachou.com -dajiadaohang.com -dajiadu8.com -dajialaikan.com -dajialawyer.com -dajianet.com -dajiang365.com -dajiangcp.com -dajiangsai.org -dajiangtai.com -dajianhui.com -dajiashequ.com -dajiashuo.com -dajiatou.com -dajiazhao.com -dajiazhongyi.com -dajie.com -dajieimg.com -dajiezhu.com -dajixie.com -dajke.com -dajuntech.com -dajuyuan.net -dajuyuanyanchu.com -daka.app -daka.net -daka5837.com -dakage.com -dakahr.com -dakamao8.com -dakang-energy.com -dakao8.com -dakao8.net -dakaruanwen.com -dakawm.cc -dakawm.net -dakayi.cc -dakele.com -dalaba.com -dali163.com -dalianair-china.com -dalianiso.com -daliapp.net -daling.com -dalinggong.com -dalings.com -dalipan.com -dalongkeji.com -dalongyun.com -daluma.com -daluo.com -daluwang.net -damaibs.com -damatu1.com -damddos.com -dameisheng.com -dameiweb.com -dameiyunduan.com -dameng.com -damengxiang.me -damingweb.com -damndigital.com -damotea.com -damoyang.com -damuchong.com -damuzzz.com -dan665.com -danaicha.com -danale.com -danbaise.com -dance365.com -dancf.com -dancihu.com -dancingcg.com -dandanjiang.tv -dandanman.com -dandanplay.net -dandantang.com -dandanz.com -dandinghuayi.com -dandongbank.com -dandoudou.com -danews.cc -dang-jian.com -dang3.com -dangan168.com -dangaoss.com -dangbei.com -dangbei.net -dangbeiprojector.com -dangcdn.com -dangdang.com -danghongyun.com -danghuan.com -dangjian.com -dangjianwang.com -dangpu.com -dangran.me -dangtianle.com -dangwan.com -dangzhi.com -dangzhi.net -danhua.org -danhuaer.com -danhw.com -daniao.org -daniate.com -daningcenter.com -daningdaning.com -daniuit.com -daniujiaoyu.com -danji100.com -danji8.com -danjiali.com -danjuanapp.com -danjuanfunds.com -danke.com -dankegongyu.com -dankexiaoyuan.com -danlan.org -danlirencomedy.com -danlu.net -danmaku.live -danmakupie.com -danmei.la -danming-ic.com -danmo.com -danmu.com -dannysite.com -danotest.com -danpin.com -danqi.com -danqingshaonian.com -danrenzheng.com -danseshu.com -danteng.me -dantuvc.com -danxia.com -danxin.net -danyang.com -danzhaowang.com -dao345.com -dao42.com -dao50.com -dao6.net -daoapp.io -daoapp.me -daochu66.com -daocloud.io -daocloudapp.com -daodao.com -daodaojizhang.com -daodaoliang.com -daodian100.com -daodianfu.com -daododo.com -daoduoduo.com -daofengdj.com -daofenggame.com -daofengyx.com -daogeziyuan.com -daogoubang.com -daoguo.com -daohang4.com -daohang88.com -daohangtx.com -daohui.net -daoisms.org -daojia.com -daojiale.com -daokers.com -daokeyuedu.com -daokoudai.com -daokouren.org -daomengad.com -daonazhuce.com -daonchina.com -daoqin.net -daoqm.com -daoscript.org -daoshidianping.com -daoshui.com -daotin.com -daotudashi.com -daovoice.io -daoxiangcun.com -daoxila.com -daoxila.net -daoyouz.com -daoyu8.com -daozhao.com -dapaizixun.com -dapan.com -dapei.cc -dapengjiaoyu.com -dapenti.com -dapiniu.com -dapmax.com -dappdiscover.com -dapu.com -daqi.com -daqianduan.com -daqiangpco.com -daqids.com -daqihui.com -daqiso.com -daqsoft.com -daquan.com -darczpw.com -darevip.com -darkmi.com -darmao.com -darongcheng.com -darryring.com -darshchemicals.com -dartchina.com -dartou.com -daruan.com -darwinlearns.com -dashangcloud.com -dashanghaizhuce.com -dashangu.com -dashedm.com -dashen520.com -dashengji.com -dashenglaile.com -dashengpan.com -dashenquan.com -dashentv.com -dashenxiaoshuo.com -dashet.com -dashgame.com -dashi.com -dashikou.com -dashitech.com -dashiyou.com -dashoucloud.com -dashuju123.com -dashuye.com -dasougu.com -dasoujia.com -dassm.com -dasung.com -dasungtech.com -data380.com -data985.com -datacaciques.com -datacname.com -datadragon.net -dataesb.com -dataeye.com -datagear.tech -datagrand.com -datahubtrack.com -dataie.com -dataman-inc.com -datang.com -datang.net -datangnxp.com -datangweishi.com -datangzww.com -dataodu.com -dataoke.com -dataprajna.net -datarelab.com -datarj.com -datasecurity.htcsense.com -datasheet5.com -datasl.com -datasoldier.net -datastoragesummit.com -datatang.com -datathinking.com -datathinking.net -datatist.com -dataunion.net -datayes.com -datazt.com -datebao.com -datesdata.com -datia-inspect.com -datianmen.com -datongtaxi.com -datouwang.com -datuc.com -dav01.com -davdian.com -davinfo.com -davvar.com -dawaner.net -dawantian.com -daweibro.com -daweisoft.com -daweixinke.com -dawenming.com -dawenxue.net -dawenxue.org -dawndiy.com -dawnlab.me -dawuxia.net -dawx.com -dawx.net -daxi.com -daxia.com -daxia520.com -daxiaamu.com -daxiangdaili.com -daxianghuyu.com -daxiangqun.net -daxiit.com -daxuecn.com -daxueit.com -daxuepc.com -daxueshengqiandai.com -daxueshi.com -daxuesou.com -daxuewa.com -daxuewang.com -dayaguqin.com -dayangmotorcycle.com -dayanmei.com -dayanzai.me -dayar.com -dayday.plus -daydayup123.com -dayee.com -dayhao.com -dayhr.com -dayichang.com -dayifund.org -dayila.net -dayima.com -dayin.com -dayin.la -dayinhu.com -dayinjiqudong.com -dayinjizhijia.com -dayinpai.com -dayinpiano.com -dayinqudong.com -dayitong.net -dayong.name -dayoo.com -dayou123.com -dayoufeng.com -dayrui.com -daytokens.com -dayu-valve.com -dayu.com -dayuad.com -dayuansouti.com -dayue8.com -dayugame.net -dayugslb.com -dayukeji.com -dayuntongzhou.com -dayup.org -dazahui123.com -dazhan123.com -dazhangfang.com -dazhaoad.com -dazhaopeibang.com -dazhe5.com -dazhenzimiao.com -dazhewa.com -dazhongbanben.com -dazhonghr.com -dazhoudz8.com -dazhoushan.com -dazhuangwang.com -dazhuanlan.com -dazibo.com -dazidian.net -dazijia.com -dazpin.com -daztoutiao.com -dazu666.com -dazui.com -db-cache.com -db-nw.com -dbank.com -dbankcdn.com -dbankcloud.asia -dbankcloud.com -dbankcloud.eu -dbankedge.net -dbaxiaoyu.com -dbbqb.com -dbccv.com -dbcdh.com -dbcsq.com -dbcxz1.com -dbcxz1.net -dbdna.com -dbfansub.com -dbfen.com -dbgeek.org -dbh123.net -dbkan.com -dblgf.com -dblwww.com -dbm-sh.com -dbmailserver.com -dbmall.com -dbmeinv.com -dbqf.xyz -dbscar.com -dbshop.net -dbt-coin.com -dbyb.org -dbytwl.com -dbzgia.com -dc-cn.com -dcarimg.com -dcarstatic.com -dcb123.com -dcdapp.com -dcement.com -dcetax.com -dcgsi.com -dcharm.com -dcic-china.com -dcits.com -dcjdj.com -dcjianghu.com -dcloud.io -dcloudlive.com -dcloudstc.com -dcmagcn.com -dcpfb.com -dcsapi.com -dcsdn.com -dcsjw.com -dcsme.org -dcv.so -dcwj168.com -dcxnews.com -dczou.com -dd-advisor.com -dd-cdn.origin-apple.com.akadns.net -dd-img.com -dd.net -dd128.com -dd2007.com -dd321.com -dd373.com -dd4.com -dd6300.fun -dd66778899.com -dd8828.com -ddbig.com -ddbiquge.cc -ddbiquge.com -ddbiu.com -ddchong.com -ddcode.net -ddd-china.com -dddazhe.com -ddddns.net -dddso.com -dddwan.com -dde-desktop.org -ddepin.com -ddfans.com -ddfchina.com -ddgjjj.com -ddguanhuai.com -ddiaas.com -ddianle.com -ddianshang.com -ddimg.mobi -ddimg.net -dding.net -ddjjzz.com -ddjk.com -ddk-alink.com -ddkids.com -ddkt365.com -ddkwxd.com -ddky.com -ddle.cc -ddlequ.com -ddlives.com -ddmap.com -ddmapimg.com -ddmeishi.com -ddmer.com -ddnddn.com -ddnode.com -ddns-only.xyz -ddns.tokyo -ddnsto.com -ddong.com -ddooo.com -ddos.com -ddos2naive.com -ddosc.com -ddosendns.com -ddosimg7bfqw5tk3z2cvisjge.com -ddoswafcdn.xyz -ddove.com -ddpa.com -ddpai.com -ddport.com -ddqcw.com -ddsaas.com -ddske.com -ddstarapp.com -ddswcm.com -ddsy.com -ddtaba.com -ddtugame.com -ddtui.com -ddun.com -ddurl.to -dduser.mobi -dduwork.com -ddweilai.com -ddwhm.com -ddwzh.com -ddxq.mobi -ddxs.cc -ddxstxt8.com -ddyun.com -ddyun123.com -ddyvip.com -ddz.com -ddzhj.com -ddztv.com -ddzuqin.com -de-moe.org -de.net -de0.cc -de123.net -de1919.com -de518.com -deaconhousewuxi.com -deadnine.com -deahu.com -dealsmake.com -deansys.com -dear520dear.com -dearda.com -dearedu.com -dearisland.com -dearloc.com -dearprinter.com -deartree.com -deathearth.com -debao.com -debo-info.com -debug.moe -debugdump.com -debuggap.com -debugger.wiki -debugo.com -debugtalk.com -debuycn.com -decard.com -decentcapital.com -decerp.cc -dechong.site -dechua.com -decorcn.com -decwhy.com -dede168.com -dede58.com -dedecms51.com -dedecmsplus.com -dededao.com -dedeeims.com -dedejs.com -dedemao.com -dedesos.com -dedeyun.com -dedezhuji.com -deehai.com -deemob.com -deemos.com -deepai.com -deepano.com -deepaso.com -deepba.com -deepbluenetwork.com -deepcloudsdp.com -deepdevelop.com -deepepg.com -deepermobile.com -deepin.com -deepin.org -deepinghost.com -deepinmind.com -deepinos.org -deepleaper.com -deeplearn.me -deepoon.com -deepsheet.net -deepvision.ai -deepzz.com -deerchao.net -deerex.com -deerma.com -defcoding.com -defectink.com -deheheng.com -deheng.com -dehsm.com -dehua.net -dehuaca.com -deifei.com -deifgs.com -deikuo.com -dekeego.com -dektw.com -delanauto.com -deli-tools.com -delib2b.com -delibao.com -delicloud.com -delikaixi.com -delinklab.com -delishi.com -deliwenku.com -deliworld.com -delixi-electric.com -dell027.com -dellemc-solution.com -delunyk.com -demage.com -demaxiya.com -demgs.com -demix.cc -demlution.com -demo8.com -democome.com -demodashi.com -demogic.com -demohour.com -demoso.net -demososo.com -denachina.com -denganliang.com -dengb.com -dengbi.cc -dengbi8.com -dengcuo.com -dengfeilong.com -denghao.org -denghaoxuan.com -denghuo.com -dengkanwen.com -dengliye.com -denglu.cc -dengmoe.com -dengpeng.me -dengshiyuanyi.com -dengta120.com -dengtacj.com -dengtadaka.com -dengxiaolong.com -dengxiaopingnet.com -dengyong.cc -denic.de -denic.net -denocn.org -dentistshow.com -denuoexpo.com -deosin.com -dep-star.com -dephir.com -depin.com -deppon.com -deppxp.net -deqingbank.com -deqinglaw.com -derekchou.com -derenbs.com -derwer.com -derzh.com -des8.com -desaysv.com -deshui.wang -design006.com -designboard.cc -designsketchskill.com -designuuu.com -desk9.com -deskcar.com -deskcity.com -deskcity.org -deskguanjia.com -deskier.com -desktopcal.com -desktopqa.com -desktx.com -deskwc.com -despiertocfilms.com -destoon.com -detian-chem.com -detu.com -detuyun.com -dev-dh.com -dev798.com -dev996.com -devask.net -devclub.cc -develenv.com -developer.dji.com -developer.microsoft.com -devemi.com -devework.com -devexception.com -devexel-tech.com -devexel.com -devexpresscn.com -devio.org -devkang.com -devopen.club -devops-master.com -devpss.com -devqinwei.com -devsiki.com -devtang.com -devzeng.com -devzhang.com -dewmobile.net -dewu.com -dewumall.com -dexcoder.com -dexian.mobi -dexingrv.com -dexinsg.com -dexuee.com -dexunyun.com -deyang5.com -deyatech.com -deyayk.com -deyi.com -deyi.net -deyijijin.org -deyioo.com -deyiso.com -deyoulife.com -deyun.fun -deyunxiangsheng.com -deyurumen.com -dezhi.com -dezhong365.com -dezhongmobi.com -dezhoudaily.com -dezhouqh.com -df77.com -df81.com -df9377.com -dfafei.com -dfbgv.com -dfcfs.com -dfcfw.com -dfcx-bj.com -dfdaily.com -dfddd.com -dfdjy.net -dfdtt.com -dfedu.com -dfgzqc.com -dfham.com -dfhdw.com -dfhon.com -dfhtjn.com -dfkcgs.com -dfkhgj.com -dfmc.com -dfmcastrol.com -dfmingya.com -dfpk.com -dfrcb.com -dfs168.com -dfs800.com -dfshurufa.com -dfshw.com -dfsjr.com -dfsrcw.com -dfss-club.com -dfstw.com -dfsyjm.com -dftoutiao.com -dftq.net -dftzj.com -dfv5.net -dfxq.com -dfxwdc.com -dfyanyi.com -dfyapp.com -dfyl-luxgen.com -dfyoo.com -dfysw.net -dfyuan.com -dfyydl.com -dfyzx.com -dfzmzyc.com -dg-360lhx.com -dg-hanxin.com -dg-huawei.com -dg-mall.com -dg11185.com -dg114.com -dg121.com -dgbfzz88.com -dgch.net -dgchangan.com -dgddh.xyz -dgdxs.com -dgg.net -dggdf.com -dggdk.com -dgggs.com -dggjqw.com -dggkj.com -dggvip.net -dghqmotor.com -dginfo.com -dgjiuqi.com -dgjoy.co -dgjs123.com -dgjxmk.com -dgjyw.com -dgksxx.com -dglpool.com -dgmama.net -dgmaoken.com -dgmmbb.com -dgn.cc -dgod.net -dgptjob.com -dgq2018.com -dgqjj.com -dgrbcj.com -dgsbtjx.com -dgsltx.com -dgsme.org -dgssmy.com -dgt-factory.com -dgtle.com -dgtpcj.com -dgtuoyue.com -dgwap.com -dgwoto.com -dgwtrl.com -dgxbjg.com -dgxue.com -dgyejia.com -dgygpx.com -dgykz.com -dgyldjy.com -dgym519.com -dgyuanyi.com -dgzhihongjx.com -dgzhisen.com -dgzj.com -dgzsgjg.com -dgzz1.com -dgzzm.com -dh.cx -dh01.com -dh0580.com -dh5idnf.com -dh7373.com -dh7999.com -dh818.com -dh9191.com -dh975.com -dh978.com -dhb168.com -dhcc.wang -dhfeng.com -dhhqfw.com -dhifi.com -dhimavision.com -dhjt.com -dhkq120.com -dhkqmz.com -dhkqyy.com -dhmeri.com -dhq898.com -dhqtech.com -dhrcbank.com -dhrest.com -dht5867.com -dhwooden.com -dhygw20.com -dhygw2999.com -dhygw488.com -dhyjaqa.com -dhyz.net -dhzw.cc -di3fang.com -di3fang.vip -diablohu.com -diaidi.com -diaigame.com -diamondfsd.com -dian-ai.com -dian-stable.com -dian-ying.com -dian.so -dian123.com -dian321.com -dian5.com -diananjia.com -dianapp.com -dianbo.org -dianbobao.com -dianbook.cc -dianbucuo.com -diancaijun.com -dianchacha.com -diandainfo.com -diandanbao.com -diandao.org -diandaxia.com -diandazuoye.com -diandian.com -diandianshu.com -diandianwaimai.com -diandianyou.com -diandianys.com -diandianzhe.com -diandianzu.com -diandong.com -diandongche.biz -dianfengcms.com -dianfuji.com -diangan.org -diangon.com -diangong8.com -diangongwu.com -dianhen.com -dianhi.com -dianhong.com -dianhou.com -dianji007.com -dianjianggame.com -dianjiliuliang.com -dianjin123.com -dianjinghu.com -dianjingzhe.com -dianjinzs.com -dianjiqi.com -diankeji.com -dianlancg.com -dianler.com -dianli.com -dianli08.com -dianliang8.com -dianliaoapp.com -dianlujitao.com -dianlut.com -dianm.cc -dianmiaoshou.com -dianmoney.com -diannaoban.com -diannaodian.com -diannaokepu.com -diannaoxianka.com -dianopen.com -dianou.com -dianpifa.com -dianping.com -dianpingba.com -dianqiweixiu.net -dianqizazhi.com -dianranart.com -dianrong.com -dianru.com -dianru.net -diansan.com -dianshang.com -dianshanghy.com -dianshangyi.com -dianshi.com -dianshige.com -dianshihome.com -dianshijia.com -dianshimo.com -diantoushi.com -diantui.net -dianview.com -dianwanhezi.com -dianwannan.com -dianwoba.com -dianwoda.com -dianwoyou.com -dianwuque.com -dianxiaobao.net -dianxin.net -dianxinnews.com -dianxinos.com -dianyingjie.com -dianyingshow.com -dianyingwenxue.com -dianyinjidiao.com -dianyong123.com -dianyongqi.com -dianyuan.com -dianyuanic.net -dianyue8.com -dianyuesh.com -dianzhanggui.net -dianzhangzhipin.com -dianzheli.com -dianzhentan.com -dianzhi.com -dianziaihaozhe.com -dianzis.com -dianzixuexi.com -diaoao.com -diaoben.com -diaochapai.com -diaochapai.net -diaocn.com -diaoding.biz -diaojiang.com -diaokeji.net -diaosi.net -diaosiweb.net -diaosu9.com -diaosu98.com -diaosunet.com -diaox2.com -diaoy.com -diaoyan360.com -diaoyanbao.com -diaoyou.com -diaoyoupai.com -diaoyu.com -diaoyu123.com -diaoyu365.com -diaoyubo.com -diaoyula.com -diaoyur.com -diaoyuren.com -diaoyuwang.com -diaoyuweng.com -diaoyuwo.com -diary365.net -diaxue.com -dib66.com -dibaotong.com -dibcn.com -diboot.com -dic123.com -dichan.com -dichanlao.com -dichanren.com -dichedai.com -dictall.com -dida110.com -dida365.com -didacar.com -didachuxing.com -didao.com -didapinche.com -didatravel.com -didaxing.com -didialift.com -didiapp.com -didichuxing.com -dididadidi.com -dididapiao.com -dididawo.com -didiling.com -didipay.com -didiqiche.com -didispace.com -didistatic.com -didiwuxian.com -didixk.com -didiyun.com -didiyunapi.com -didown.com -didu86.com -diducoder.com -diebaosoft.com -diebian.net -dieclock.com -diediao.com -diediao123.com -diemameishi.com -diemoe.net -dieniao.com -dierkezhan.com -diershoubing.com -dietfd.com -diexia.com -difanapp.com -digcredit.com -digforfire.net -digforfire.org -digg58.com -digi-uniclick.net -digi-wo.com -digirepub.com -digisky.com -digitalchina.com -digitalcq.com -digitaling.com -digitalvolvo.com -digitalwuhan.com -digitalwuhan.net -digitlink.net -digitser.net -digiwin.com -digiwork.com -digod.com -digpage.com -digu.com -digu365.com -digua.com -diguage.com -diguan.wang -diguff.com -diguobbs.com -digwow.net -dihuikj.com -diiqu.com -dijiahealth.com -dijingchao.com -dijinlianmeng.com -dijiuban.com -dijunsm.com -diketattoo.com -dili360.com -dili365.com -dililitv.com -dim0.com -dimeng.net -dimensionalzone.com -dimpurr.com -dimsmary.tech -dinais.com -dindin.com -dingdanggj.com -dingdangsheji.com -dingdean.com -dingdian.la -dingdianku.com -dingdiansk.com -dingdianzw.com -dingding.com -dingding.xin -dingding2014.com -dingdingdoctor.com -dingdingkaike.com -dingdone.com -dingdongcloud.com -dingdongqb.com -dingdongxiaoqu.com -dingfang123.com -dinggou.org -dinghaiec.com -dinghuaren.com -dinghuihuojia.com -dinghuoche.com -dingip.com -dingkeji.com -dinglc.com -dinglia.com -dingliangame.com -dingliss.com -dingqidong.com -dingsheng.com -dingshifa.com -dingso.com -dingtalent.com -dingtalk.com -dingtalkapps.com -dingtangzqx.com -dingteam.com -dingxiang-inc.com -dingxin66.com -dingxinhui.com -dingxuewen.com -dingyantec.com -dingyueads.com -dingzhijl.com -diningcity.asia -dinzd.com -dioenglish.com -dionly.com -diougens.net -dious.cc -dipaispa.com -dipan.com -dipephoto.com -dipont.com -diqi.net -diqi.sh -diqibu.com -diqishu.com -diqiujiayuan.com -diqiuw.com -diqu114.com -diqua.com -dir001.com -directui.com -discourse-studies.com -discoversources.com -discuz.chat -discuz.com -discuz.net -discuz.org -discuzfans.net -discuzlab.com -dishen.com -dishuge.com -dishuizhijia.com -diskgenius.com -diskgirl.com -disksing.com -dismall.com -disneybox.com -ditan360.com -ditan369.com -dithub.com -ditian-tech.com -ditietu.com -ditiezu.com -ditiezu.net -ditu.live.com -ditu100.net -dituge.com -dituhui.com -dituwuyou.com -diudou.com -diugai.com -diushouji.com -div.io -divcss5.com -diwork.com -dixiao.org -dixintong.com -diybcq.com -diybuy.net -diycode.cc -diydoutu.com -diyer.so -diygogogo.com -diygw.com -diyhi.com -diyicai.com -diyidan.com -diyidan.net -diyifanwen.com -diyifanwen.net -diyigaokao.com -diyihuifu.com -diyijuzi.com -diyinews.com -diyippt.com -diyiredian.com -diyishijian.com -diyitech.com -diyiwl.wang -diyixiazai.com -diyixitong.com -diyiyou.com -diyiyunshi.com -diyiziti.com -diyju.com -diymianmo.com -diynova.com -diypda.com -diyring.cc -diytrade.com -diyvm.com -diywoju.com -diyworld.com -diywz.com -diyyh.com -diyzhuye.com -dizhi.xin -dizzylab.net -dj.net -dj10.com -dj134.com -dj175.com -dj34.com -dj3721.net -dj63.com -dj88.com -dj89.com -dj97.com -djbh.net -djbstatic.com -djbx.com -djcc.com -djcp099.com -djdkk.com -djduoduo.com -djec.net -djeconomic.com -djf.com -djhgyy.com -djiavip.com -djjlseo.com -djjw.com -djkk.com -djkpai.com -djkxl.com -djlmvip.com -djlsoft.net -djrcl.com -djsh5.com -djstechpc.com -djstg.com -dju8.com -djw51.com -djwcp.com -djwxw.com -djye.com -djyjob.com -djysx.com -djyyh.com -djzbl.com -djzhj.com -djzhx.com -djzr88.com -dkdangle.com -dkjiaoyang.com -dklogs.net -dkmol.net -dkpdd.com -dky.cc -dkybpc.com -dkys.org -dl-origin.ubnt.com -dl-rc.com -dl.delivery.mp.microsoft.com -dl.djicdn.com -dl.google.com -dl.l.google.com -dl.ubnt.com -dl0728.com -dl158.net -dl24gjb.com -dl2link.com -dl321.net -dl767.net -dl8z.com -dlangchina.com -dlbh.net -dlbljy.com -dlbyg.com -dlcaic.com -dlcdnets.asus.com -dld.com -dld56.com -dldlsw.com -dledu.com -dlfederal.com -dlg029.com -dlgaoji.com -dlgcpvc.com -dlgwbn.com -dlidli.wang -dljrw.com -dljs.net -dll01.com -dllake.com -dllcm.com -dllhook.com -dllku.com -dllzj.com -dlmonita.com -dlmzk.com -dlnap.com -dlosri.com -dlpuwan.com -dlrjtz.com -dlrkb.com -dlrspace.com -dlsjcsb.com -dlsqb.com -dlssa.com -dlsstax.com -dlsunworld.com -dlszywz.com -dltm.net -dltobacco.com -dltsfh.com -dltubu.com -dlvalve.com -dlxgjy.com -dlxk.com -dlxww.com -dlyestar.com -dlyilian.com -dlzb.com -dlztb.com -dlzyc.com -dlzycf.com -dm004.net -dm0571.com -dm176.com -dm190.com -dm300.com -dm321.com -dm321.net -dm4mm.com -dm5.com -dm77.com -dm789.com -dm9.com -dmacg.net -dmaku.com -dmall.com -dmallcdn.com -dmbcdn.com -dmcbs.com -dmcdn.com -dmcgas.com -dmchina1.com -dmcoders.com -dmd968.com -dmeg88.com -dmeiti.com -dmeiti.net -dmeng.net -dmfuns.com -dmgapp.com -dmgeek.com -dmgpark.com -dmguo.com -dmhlj.com -dmhmusic.com -dmiug.com -dmjtxt.com -dmlei.com -dmmds.com -dmozdir.org -dmpans.com -dmqapp.com -dmread.com -dmrtb.com -dmssc.net -dmtg.com -dmyy.cc -dmyz.org -dmyzw.com -dmzfa.com -dmzj.com -dmzx.com -dn.com -dn1234.com -dn580.com -dn8188.com -dnbbn.com -dnbbs.com -dnbcw.info -dnbiz.com -dncheng.com -dndci.com -dndiy.net -dnf8.com -dnfly.net -dnfziliao.com -dngjxx.com -dngswin7.com -dngsxitong.com -dngz.net -dnion.com -dnjishu.com -dnjs8.com -dnjsb.com -dnmall.com -dnnskin.net -dnnunion.com -dnparking.com -dnpz.net -dnpz123.com -dnqc.com -dns-diy.com -dns-diy.net -dns-dns.net -dns-sky.com -dns-url.com -dns-vip.net -dns.com -dns.la -dns.pub -dns002.com -dns0755.net -dns100.net -dns102.com -dns110.com -dns123.net -dns12345.com -dns2008.com -dns383.com -dns456456123.com -dns567.com -dns6132.com -dns6868.com -dns800.com -dns999999.com -dnsabc-a.com -dnsabc-b.com -dnsabc-f.com -dnsabc-g.com -dnsapple.com -dnsapple.net -dnscnc.com -dnsddos.com -dnsdiy.com -dnsdizhi.com -dnsdun.com -dnsdun.net -dnsfamily.com -dnsfang.com -dnsff.com -dnsfwq.com -dnsgtm.com -dnsgulf.net -dnshot.net -dnshwx.com -dnsinside.net -dnsip.net -dnsis.net -dnsjia.com -dnsmeasurement.com -dnsmsn.com -dnsng.net -dnsnn.com -dnsns5.com -dnsns6.com -dnsnw.com -dnsor.com -dnsoray.net -dnsour.com -dnspai.com -dnspig.com -dnsplus.co -dnspod.com -dnspod.net -dnspood.net -dnsppdd.com -dnsrw.com -dnss.me -dnss.vip -dnssina.com -dnsum.com -dnsurl.net -dnsv1.com -dnsv1.net -dnsv2.com -dnsv3.com -dnsv4.com -dnsv5.com -dnsv8.net -dnsvcache.com -dnsvhost.com -dnswa.com -dnswhk.com -dnswind.net -dnsx365.com -dnszh.com -dnxp.net -dnxtc.net -dnzhuti.com -dnzjds.com -do-shi.com -do1024.com -do123.net -do1618.com -do1999.com -doabit.com -dobest.com -dobirduser.com -dobunkan.com -doc163.com -doc88.com -doccamera.com -docer.com -docexcel.net -docin365.com -dockerinfo.net -dockone.io -doclass.com -docools.com -docpe.com -docs.cdnetworks.com -docs.djicdn.com -docs.microsoft.com -docs.oracle.com -docschina.org -docsou.com -doctorcom.com -documents.cdnetworks.com -docx88.com -doczhi.com -doczj.com -dodashang.com -dodjoy.com -dodo.link -dodo8.com -dodobook.me -dodobook.net -dodoca.com -dodoeasy.com -dodoedu.com -dodoh5.com -dodonew.com -dodovip.com -doergob.com -doershow.com -dofanyi.com -dofund.com -dog126.com -dogecdn.com -dogecloud.com -dogedoge.com -dogfight360.com -doglobal.net -dogmr.com -dogwhere.com -dogyun.com -doh.pub -dohuo.com -doido.com -doit.am -doitim.com -doki8.com -doko.com -dolanzz.com -dolcn.com -dole.club -dolfincdnx.com -dolfindns.net -doll-leaves.com -doll-zone.com -dollun.com -dolphin-browser.com -dolphin.com -dolphinphp.com -domaingz.com -domarketing.org -domengle.com -dominoh.com -domobcdn.com -domobnetwork.com -domolo.com -domp4.cc -domp4.com -domyshop.com -doname.com -doncc.org -donews.com -dong-shou.com -dong-xu.com -dongannews.com -dongao.com -dongbao120.com -dongbeishifandaxue.com -dongbucaijing.com -dongcai.net -dongcaibaoxian.com -dongchaba.com -dongchedi.com -dongcheng120.com -dongchenghotels.com -dongdalou.com -dongdao.net -dongdongaijia.com -dongdongwenda.com -dongdongyx.com -dongdongzu.com -dongdui.com -dongeedu.com -dongeejiao.com -dongfang-wh.com -dongfang.com -dongfang77.com -dongfangfj.com -dongfangfuli.com -dongfangnews.com -dongfangtech.net -dongfeng-honda-elysion.com -dongfeng-honda-gienia.com -dongfeng-honda-greiz.com -dongfeng-honda-inspire.com -dongfeng-honda-jade.com -dongfeng-honda-ur-v.com -dongfeng-honda-xr-v.com -dongfeng-honda.com -dongfeng-nissan.com -dongfeng.net -dongfengtrucks.com -dongfund.com -dongganboy.com -dongge.com -donghaifunds.com -donghao.org -donghengjt.com -donghongqiao.com -donghuaxsp.com -donghulvdao.com -dongjinyu.com -dongjun.cc -dongke.org -dongkelun.com -dongkouren.com -donglingying.cc -donglishuzhai.net -dongliw.com -donglizhixin.com -dongman.fm -dongmansoft.com -dongmanwang.com -dongmanxingkong.com -dongmiban.com -dongnanmaifeng.com -dongni100.com -dongniao.net -dongnienglish.com -dongniyingyu.com -dongoog.com -dongputech.com -dongqil.com -dongqiniqin.com -dongqiudi.com -dongqiudi.net -dongsenzs.com -dongshenghuiyang.com -dongshou.com -dongsport.com -dongtaijt.com -dongting.com -dongtu.com -dongua.com -dongwm.com -dongxi.net -dongxingkonggu.com -dongxuyitai.com -dongyaods.com -dongyin.net -dongzhougroup.com -dongzhuoyao.com -donhonet.net -donkey4u.com -donvv.com -doodoobird.com -doofull.com -dooioo.com -dookhub.com -dooland.com -doomii.com -dooo.cc -doooor.com -door-expo.com -dooreb.com -doorhr.com -dopa.com -dopic.net -dora-control.cdnetworks.com -dora-family.com -dorapp.com -doraunion.com -dormforce.net -dorrr.com -dortail.com -doserv.com -doshome.com -dosnap.com -dospy.com -dossav.com -dossen.com -dostor.com -dot.pub -dota2rpg.com -dota2tester.com -dotamax.com -dotcpp.com -doteck.com -dotgate.com -dotinapp.com -dotty-china.com -dou.bz -dou.li -douban.co -douban.com -douban.fm -doubanio.com -doubaojf.com -doubean.com -doubi.ren -doubimeizhi.com -doubimm.net -doubleclick.net -douboshi.net -doubozhibo.com -douc.cc -doucang.com -douco.com -doudang.com -doudehui.com -doudier.com -doudons.com -doudou.com -doudou.in -doudou3.com -doudou911.com -doudouad.com -doudouba.com -doudoubianli.com -doudoubird.com -doudoudm.com -doufan.tv -doufl.com -doufm.net -douglassclub.com -douguo.com -douguo.net -douhan.li -douhaogongyu.com -douhaomei.com -douhua.net -douhuar.com -douhuibuy.com -douikan.com -doukantv.com -doukeji.com -doulai.com -doulaicha.com -doulaidu.cc -doulaidu.com -doulaidu8.cc -douliao.net -douluodalu123.com -douluodalu3.com -doumengkeji.mobi -doumi.com -doumistatic.com -doumobfour.club -doumobsix.site -doumobtech.online -dounimei.net -doupai.cc -doupir.com -doupobook.com -doupocangqiong1.com -douqi.com -doushen.com -doutian.me -doutukeji.com -doutushe.com -douwanweb.com -douxiaotoutiao.com -douxie.com -douya2.com -douyaobuy.com -douyapu.com -douyar.com -douyi.com -douyin.com -douyincdn.com -douyinpic.com -douyinstatic.com -douyinvideo.net -douyinvod.com -douyinxiaodian10.com -douyou100.com -douyu.com -douyu.tv -douyuscdn.com -douyutv.com -douzi.com -douzihuyu.com -dovechina.com -dovesky.com -dovov.com -dowater.com -dowebok.com -dowei.com -doweidu.com -dowell-health.com -dowhere.com -down0.com -down123.cc -down123.me -down1997.com -down7788.com -downbei.com -downcc.com -downclass.com -downerapi.com -downfi.com -downg.com -downi9.com -downjoy.com -downkr.com -downkuai.com -download.developer.apple.com -download.microsoft.com -download.visualstudio.microsoft.com -download.windowsupdate.com -downloadcenter.samsung.com -downloadla.pro -downok.com -downol.com -downos.com -downpp.com -downsave.com -downuc.com -downun.com -downv.com -downxia.com -downxy.com -downya.com -downyi.com -downza.com -downzai.com -downzz.com -dowv.com -doxue.com -doyee.com -doyoe.com -doyoo.net -doyoudo.com -doyouhike.net -dozer.cc -dozview.com -dp.image-gmkt.com -dp2px.com -dp2u.com -dpcafc.com -dpcq1.net -dpcyjt.com -dper.com -dpfile.com -dplor.com -dplord.com -dplslab.com -dpqct.com -dprktimes.com -dptech.com -dptechnology.net -dpwl.net -dpxq.com -dq123.com -dq18.com -dq247.com -dq3c.com -dq99.net -dqccc.cc -dqccc.com -dqcccc.com -dqdaily.com -dqdgame.com -dqguo.com -dqhui.com -dqiis.com -dqiong.com -dqjob88.com -dqpi.net -dqrailing.com -dqshdj.com -dqshjt.com -dqyfapiao.com -dr009.com -dr668.com -drageasy.com -dragon-guide.net -dragon-hotel.com -dragonballcn.com -dragoncg.com -dragonest.com -dragonnewsru.com -dragonsea-china.com -dragontrail.com -dragonwell-jdk.io -drakeet.me -dramx.com -drartisan.com -drasy.net -draveness.me -drawyoo.com -drcact.com -drcg8.com -drclvs.com -drcuiyutao.com -drdrq.com -dre8.com -dream.ren -dream1986.com -dream4ever.org -dreamcast.hk -dreamchasercapital.com -dreamersall.com -dreamershop.com -dreamine.com -dreamkite.net -dreamo100.com -dreamofchinese.com -dreamore.com -dreampiggy.com -dreams-travel.com -dreamsky.me -dreamswood.com -dreamsz.net -dreawer.com -drgou.com -drhudong.com -drice.cc -drip.im -dripcar.com -driverdevelop.com -drivergenius.com -driversdown.com -driverzeng.com -drivethelife.com -drli.group -drlmeng.com -drm-x.com -drm-x.net -drmj.org -droi.com -droibaas.com -dropboxchina.com -dropsec.xyz -drouma.com -drpneu.com -drscrewdriver.com -drtyf.com -drugfuture.com -druggcp.net -drumchina.com -drupal001.com -drupalla.com -drupalproject.org -drupaluser.org -drvics.com -drvsky.com -drwfggc.com -ds-360.com -ds023.com -ds123456.com -ds5f.com -dsblog.net -dscbs.com -dsdbearing.com -dsdjclub.com -dsfdc.com -dsfof.com -dsgho.com -dshigao.com -dshjfh.com -dshrc.com -dskb.co -dslp168.com -dsmyiyuan.com -dsmzyy.com -dsmzyy120.com -dsn300.com -dsonekey.com -dsook.com -dsp.com -dspliuliang.com -dspwhy.com -dsq.com -dsqin.com -dssz.com -dstfsbc.com -dsti.net -dstoutiao.com -dswjcms.com -dswmt.com -dswzxh.com -dsxdn.com -dsyjz0755.com -dszw.net -dtcash.com -dtcj.com -dtcms.net -dtcoalmine.com -dtcxw.com -dtdiefa.com -dtdream.com -dtdxcw.com -dtfcw.com -dtftsm.com -dthrb.com -dtidc.com -dtime.com -dtmao.cc -dtmuban.com -dtqiufa.com -dtrcb.com -dts007.com -dtshot.com -dtstack.com -dtstatic.com -dttc-icp.com -dttt.net -dtu1.vip -dturl.cc -dtuyun.com -dtxmw.com -dtxn.net -dtxww.com -dtysky.moe -dtyzg.com -du00.com -du114.com -du175.com -du1du.org -du7.com -du7.org -du8.com -duai.com -dualaid.com -duan.red -duanjn.com -duanjuzi.com -duanlonggang.com -duanmale.com -duanmeiwen.com -duanqu.com -duanrong.com -duanshu.com -duantian.com -duanwenxue.com -duanwxue.com -duanxin321.com -duanxin520.com -duanyoutv.vip -duanzao001.com -duanzhihu.com -duanzikuaizui.com -duapp.com -duba.com -duba.net -dubbo.io -dubiwang.com -dubprince.com -dubyc.com -duchang.org -dudong.com -duduaa.com -dudubashi.com -dududu.la -dudumeijia.com -duduyu.net -duelcn.com -dugoogle.com -duguoxue.com -duguying.net -duhao.net -dui.ai -dui1dui.com -dui88.com -duia.com -duiai.com -duihuan123.com -duihuashijie.com -duikuang.com -duimg.com -duimin.com -duiopen.com -duitang.com -duitianhe.com -duizhuang.com -dujiaoshou.org -dujiapin.com -dujin.org -dujiza.com -dukechiang.com -dukharo.com -dukuai.com -dulesocks.com -dullong.com -dullr.com -dulouw.com -dumanhua.com -dumasecurity.com -dumasoftware.com -dumeiwen.com -dumi0898.com -dumili.com -dumou.com -dumpapp.com -dunjiaodu.com -dunkhome.com -dunlve.com -duobaoqibin.com -duobei.com -duobeiyun.com -duobeiyun.net -duoben.net -duobiji.com -duocaitou.com -duochang.cc -duodaa.com -duodada.com -duodaoertong.com -duodian.com -duoduo123.com -duoduobaba.com -duoduocdn.com -duoduodashi.com -duoduotv.com -duoduoyin.com -duoduoyouli888.com -duoduozb.com -duoduozhifu.com -duoente.net -duoerpharmacy.com -duofull.com -duogouhui.com -duohou.net -duohui.co -duoic.com -duojiaochong.com -duokaiwang.com -duokan.com -duokanbox.com -duokebao.net -duokebo.com -duoketuan.com -duoku.com -duolabao.com -duolabaocdn.com -duoladayin.com -duolaima.com -duolapiao.com -duolduo.com -duole.com -duolebo.com -duolegame.com -duolerong.com -duolingptfe.com -duolunmoma.org -duoluodeyu.com -duoluohua.com -duoluosb.com -duomai.com -duomeiti.co -duomi.com -duomi.me -duomiapp.com -duomicheng.com -duomijuan.com -duomiyou.com -duomni.com -duomu.tv -duopao.com -duoqu.com -duorenwei.com -duorou.com -duosai.com -duose.com -duosenfashion.com -duoshoubang.com -duoshuo.com -duososo.com -duosq.com -duost.com -duotai.net -duote.com -duotoupiao.com -duotuwang.com -duouoo.com -duowan.com -duowanns.com -duoxinqi.com -duoxj.com -duoyewu.com -duoyi.com -duoyinsu.com -duoyoumi.com -duozhi.com -duozhishidai.com -duozhuayu.com -duozhuayu.net -duoziwang.com -dup2.org -dupv.com -dushewang.com -dushicn.com -dushijia.com -dushiliren.net -dushitiyan.com -dushiyufu.com -dushu.com -dushu.io -dushu263.com -dushu365.com -dushu369.com -dushudaren.com -dushuge.net -dushuzhe.com -dushuzhong.com -dushw.com -dustess.com -dustit.me -dusulang.com -dusuu.com -dute.me -dutenews.com -dutils.com -dutor.net -dutory.com -dutype.com -duuchin.com -duunion.com -duwenfei.com -duwenxue.com -duwenz.com -duwenzhang.com -duxiaoman.com -duxiaomanfintech.com -duxiaoshuo.com -duxinjianli.com -duxiu.com -duyandb.com -duyao001.com -duyidu.com -duyixing.com -duzelong.com -duzhe.com -duzhebao.com -duzhoumo.com -dv37.com -dv58.com -dvagent.com -dvbbs.net -dvbcn.com -dvcms.com -dvd85.com -dvd94.com -dvdc100.com -dvdjy.com -dvmama.com -dvmission.com -dvr163.com -dvrdydns.com -dvvvs.com -dw.la -dwfei.com -dwhub.net -dwinput.com -dwion.com -dwjoy.com -dwmoniqi.com -dwntme.com -dwnxy.com -dwq.com -dwqcw.com -dwrh.net -dwsedu.com -dwstatic.com -dwstock.com -dwt.life -dwtedx.com -dwz.date -dwz.lc -dwz.mk -dx-job.com -dx-tech.com -dx00.net -dx04131.com -dx114118.com -dx168.com -dxbei.com -dxclinics.com -dxcm.net -dxda.com -dxdlw.com -dxecs.com -dxf5.com -dxf6.com -dxias.com -dxjs.com -dxlfile.com -dxmpay.com -dxmstatic.com -dxnf.xyz -dxpei.com -dxpmedia.com -dxqyy.com -dxrc.com -dxs96.com -dxsaxw.com -dxsbb.com -dxsclass.com -dxsdb.com -dxsng.com -dxsport.com -dxsvr.com -dxszx.com -dxton.com -dxwei.com -dxxnews.com -dxxps.com -dxxxfl.com -dxy.com -dxy.me -dxy.net -dxyan.org -dxyb.com -dxycdn.com -dxyrc.com -dxzq.net -dxztc.com -dxzx.com -dxzy163.com -dy.cm -dy008.com -dy1905.net -dy2018.com -dy2018.net -dy880.com -dybeta.com -dycar.net -dycars.com -dycdn.com -dycf.net -dycmjkgl.com -dycool.com -dydata.io -dydt.net -dydytt.com -dydytt.net -dyee.org -dyfc.net -dyg-hec.com -dygang.com -dygang.net -dygangs.com -dygf.com -dygod.com -dygod.org -dyhhy.cc -dyhjw.com -dyhr88.com -dyhxgame.com -dyhzj.com -dyj.cc -dyjqd.com -dykj.site -dylc.com -dylxx.net -dyly.com -dyonr.com -dypai.com -dyqc.com -dyrbw.com -dyrcb.net -dyrjjt.com -dyrt168.com -dysxxw.com -dytechnolog.com -dytol.com -dytt.net -dytt2019.net -dytt789.com -dytt7899.com -dytt8.com -dytt8.net -dyw0.com -dyxldjy.com -dyxsdwm.com -dyxtw.com -dyxuexin.com -dyxw.com -dyxz.la -dyymwy.com -dyynong.net -dyys.com -dyysoft.net -dyzdx.com -dyzxw.org -dz-z.com -dz.tt -dz11.com -dz19.net -dz1982.com -dz31hao.com -dz666.com -dz746.com -dz88.com -dz88.la -dzbake.com -dzbarcode.com -dzbchina.com -dzblxx.com -dzboligang.com -dzcgtgcl.com -dzcj.tv -dzcjw.com -dzcmedu.com -dzdgsm.com -dzdiy.com -dzdoll.com -dzdu.com -dzfc.com -dzfxh.com -dzgoo.com -dzgwg.com -dzgxq.com -dzhaoj.com -dzhope.com -dzhqexpo.com -dzjcp998.com -dzjrc.com -dzkbw.com -dzlaa.com -dzllzg.com -dzmdq.com -dzmhospital.com -dzng.com -dzoptics.com -dzpk.com -dzqu.com -dzr120.com -dzrbs.com -dzrlvy.com -dzsaas.com -dzsaascdn.com -dzsc.com -dzsfx.com -dzsg.com -dzshengchi.com -dzsm.com -dzsrcw.com -dzssy.com -dztcbj.com -dztcfj.com -dztchun.com -dztcjt.com -dztcnm.com -dztv.tv -dzty365.com -dzvv.com -dzwebs.net -dzwindows.com -dzwww.com -dzwww.net -dzxwnews.com -dzxxzy.com -dzynyy.com -dzyqc.com -dzyqh.com -dzysclite.com -dzyule.com -dzyysb.com -dzz.cc -dzzgsw.com -dzzoffice.com -e-10031.com -e-3lue.com -e-baby.tw -e-bidding.org -e-bq.com -e-bq.org -e-buychina.com -e-celap.com -e-chinalife.com -e-cloudstore.com -e-cookies.net -e-cuc.com -e-cwinfo.com -e-cyb.com -e-dache.com -e-deehoo.com -e-eway.com -e-fangtong.com -e-flyinc.com -e-ging.com -e-ging.net -e-gooo.com -e-hongw.com -e-investingguide.com -e-jjj.com -e-jlt.com -e-kawai.com -e-lifemall.com -e-lining.com -e-lock.xin -e-mallchina.com -e-micromacro.com -e-muzeo.com -e-nci.com -e-net.hk -e-onekey.com -e-picclife.com -e-pointchina.com -e-ruikd.com -e-sleb.com -e-sscard.com -e-tiller.com -e-tui.net -e0514.com -e0575.com -e0734.com -e077.com -e118114.com -e12345.com -e12e.com -e139.com -e1988.com -e21cn.com -e22a.com -e24c.com -e253.com -e2capp.com -e2esoft.com -e2say.com -e360e.com -e365.org -e365mall.com -e3cloud.com -e3ol.com -e4008.com -e4asoft.com -e521.com -e5421.com -e546.net -e5618.com -e5n.com -e66666.com -e68cname.com -e7890.com -e7e6.net -e7e7e7.com -e7ly.com -e7wei.com -e836g.com -e890.com -e8ud3.com -e8zw.com -e9377f.com -e9898.com -e99999.com -ea-retina.com -ea3w.com -eabax.com -eabds.com -eachinfo.com -eachnet.com -eachsee.com -eaeb.com -eaes-seari.com -eafifaonline2.com -eaglexiang.org -eahui.com -eaibot.com -eaka365.com -eal-ceair.com -eallcn.com -eallerp.com -eallone.com -eamimi.com -eamn.net -earth2037.com -earthedu.com -earthstar-cloud.com -easck.com -eascs.com -easeapi.com -easeeyes.com -easemob.com -easerun.com -easeslb.com -easetuner.com -easeus.com -easeyedelivery.com -easilysend.com -easiu.com -east.net -east263.com -eastall.com -eastbest.com -eastchinafair.com -eastcom-sw.com -eastcom.com -eastcompeace.com -eastcoms.com -eastday.com -eastdesign.net -eastdigit.com -eastdushi.com -easteat.com -eastent.com -easternalong.com -eastforever.com -eastftp.net -eastfu.com -easthome.com -eastib.com -eastled.com -eastlending.com -eastmannplastics.com -eastmoney.com -eastmoneyfutures.com -eastmoneyloans.com -eastobacco.com -eastpharm.com -eastsilver.com -eastsoo.com -eastsunintl.com -eastups.com -eastwinn.com -easy-all.net -easy-china.com -easy-linkholiday.com -easy-mock.com -easy2world.com -easy361.com -easy888.com -easyai.tech -easyaq.com -easyaq.org -easyar.com -easyarvr.com -easybug.org -easycolor.cc -easydarwin.org -easyder.com -easydoc.xyz -easyfami.com -easyfang.com -easyfapiao.com -easygametime.com -easyhaitao.com -easyhexo.com -easyhin.com -easyjf.com -easylaa.com -easyliao.com -easyliao.net -easylink.io -easylinkin.com -easylinkin.net -easymks.com -easymorse.com -easymule.com -easynet.vip -easypayx.com -easypcmac.com -easyreadtech.com -easyrecovery.cc -easyrecovery.net -easyrecoverychina.com -easyrecoverycn.com -easysofthome.com -easyswoole.com -easytalkee.com -easytifen.com -easytimetv.com -easytite.com -easytocn.com -easytouch.com -easytrip.com -easyzw.com -eatonchn.com -eaydu.com -eayou.com -eayuan.com -eayyou.com -eazytec-cloud.com -eb163.com -eb80.com -ebadu.com -ebadu.net -ebaifo.com -ebaina.com -ebama.net -ebangchina.com -ebanma.com -ebanshu.net -ebaoquan.org -ebasset.com -ebchina.com -ebchinatech.com -ebdan.net -ebdoor.com -ebeta.org -ebfcn.com -ebibi.com -ebigear.com -ebingqilin.com -ebiobuy.com -ebioe.com -ebiogo.com -ebioweb.com -ebjfinance.com -ebkj.net -eblockschina.com -ebnew.com -ebocert.com -ebook.name -ebookbao.net -ebookcn.com -ebookmen.com -ebopark.com -eboxmaker.com -ebrun.com -ebscn.com -ebseek.com -ebtang.com -ebtrust.com -ebuckler.com -ebuy31.com -ebways.com -ec-ae.com -ec-cloudtech.com -ec-founder.com -ec-world.com -ec.com -ec0715.com -ec3s.com -ec51.com -ec517.com -ec66.com -ecadi.com -ecaidian.com -ecaihr.com -ecaray.com -ecare365.com -ecartoon.net -ecasesoft.com -ecbcamp.com -ecboo.com -eccang.com -eccbb.com -eccc-china.com -eccdnx.com -eccn.com -eccnmall.com -ecco-market.com -ecctaa.com -ecdpower.net -ecduo.com -eceibs.com -eceibs.net -eceibs20.com -ecej.com -ecer.com -eces66.com -ecgci.com -ecgoods.com -echanceyun.com -echangwang.com -echangye.com -echao8.com -echargenet.com -echarpile.com -echashi.com -echatsoft.com -echead.com -echiele.com -echinacareers.com -echinacities.com -echinagov.com -echinatobacco.com -echo-isoftstone.com -echo188.com -echojb.com -echomod.com -echoteen.com -echuandan.com -eciawards.org -ecice06.com -ecig100.com -ecigm.com -ecitic.com -ecjson.com -ecjtu.net -eckjzx.com -ecloud.hk -eclyw.com -ecmagnet.com -ecmoban.com -ecnsea.com -ecnudec.com -ecoalchina.com -ecochuse.com -ecocn.org -ecombdimg.com -ecombdstatic.com -ecomoter.com -ecookinn.com -ecool.site -ecoplastech.com -ecoprint.tech -ecorr.org -ecouser.net -ecovacs.com -ecp888.com -ecparty.net -ecphk.com -ecppn.com -ecqun.com -ecrrc.com -ecs004.com -ecs6.com -ecsage.net -ecshop.com -ecshop123.com -ecsits.com -ecsponline.com -ecuc123.net -ecustmde.com -ecvv.com -ecwan77.net -ecydm.com -ecyj.net -ecyti.com -ed2000.com -ed2kers.com -ed2kfile.com -ed2kk.com -eda-china.com -eda1024.com -eda365.com -eda365.net -eda8.com -edabbs.com -edaboss.com -edacn.net -edadoc.com -edagit.com -edai.com -edaibo.com -edaidb.com -edaili.com -edaixi.com -edaizhijia.com -edajin.com -edajob.com -edanji.com -edaocha.com -edatahome.com -edatop.com -edawiki.com -edb-tech.com -edcba.com -eddic.net -eddycjy.com -ede35.com -edenhermosa.com -edgesrv.com -edhic.com -edianchi.com -edianshang.com -edianzu.com -ediclot.com -edieai.com -edifier.com -edingtou.com -edingzhuan.com -edinuan.com -edirect.asia -ediuschina.com -edk24.com -edmcn.net -ednrc.com -edns.com -edodocs.com -edogantt.com -edojia.com -edojs.com -edong.com -edongeejiao.com -edongli.net -edongyun.com -edowning.net -edqgk.com -edragongame.com -edrawsoft.com -edsionte.com -edspay.com -edt2017.com -edt2018.com -edtsoft.com -edu-book.com -edu-chineseembassy-uk.org -edu-cj.com -edu-job.org -edu-nw.com -edu-shanghai.net -edu.com -edu03.com -edu0851.com -edu201.com -edu24o1.com -edu24ol.com -edu510.com -edu5a.com -edu63.com -edu777.com -edu80.com -edu84.com -edu84.net -edu88.com -eduartisan.com -educg.net -educhicago.org -educhn.net -educoder.net -edudc.net -eduease.com -eduego.com -eduei.com -eduglobal.com -eduglobalchina.com -eduiso.com -edujia.com -edujunyi.com -edumail.pub -eduour.com -edupm.com -eduqz.net -edurck.com -edushi.com -edusoho.com -edusoho.net -edutao.com -edutime.net -edutt.com -eduu.com -eduuu.com -eduwenzheng.com -eduwest.com -eduwg.com -eduwo.com -eduwx.com -eduxiao.com -eduyf.com -eduyo.com -eduzhai.net -eduzhi.com -eduzhixin.com -edward-han.com -edwiv.com -ee1234.com -ee68.com -ee8828.com -eebbk.com -eebbk.net -eebest.com -eeblog.net -eeboard.com -eechina.com -eecn.cc -eecnt.com -eecourse.com -eecso.com -eedns.com -eeduol.com -eee-eee.com -eee114.com -eee4.com -eee5701.com -eeedri.com -eeedu.net -eeeee.com -eeeen.com -eeeetop.com -eeeff.com -eeeknow.com -eeelw.com -eeeqi.net -eeetb.com -eefans.com -eefcdn.com -eeff.net -eefocus.com -eehu.com -eeio99.com -eeioe.com -eelly.com -eeloves.com -eenot.com -eeook.com -eeparking.com -eeq8.com -eeqiu.com -eeskill.com -eeso.net -eetoday.com -eetop.com -eetop.wang -eetrend.com -eetrust.com -eeussf.com -eeworld.com -eeworm.com -eexing.com -eeyaa.net -eeybo.com -eeyxs.com -eeyy.com -ef-cdn.com -ef-school.com -ef360.com -ef360.net -ef82.com -ef9377.com -efala.net -efang.tv -efapiao.com -efashionchina.com -efe.cc -efengji.org -efesco.com -eff-soft.com -effapp.com -effecthub.com -effevo.com -efficient.hk -effirst.com -efly.cc -eflybird.com -eflycloud.com -eflydns.net -efmac.org -efnchina.com -efotile.com -efount.com -efoxconn.com -efpp.com -efucms.com -efueloil.com -efwang.com -efwh.com -efy-tech.com -efyt6.com -egainnews.com -egaoxiu.com -egbgedu.com -egfcare.com -egg-born.org -egg.htcsense.com -eggjs.org -eggscute.com -eggtt.com -eghnmj.xyz -egonetworks.org -egongzheng.com -egoonet.com -egotops.com -egou.com -egou0515.com -egouo.net -egouz.com -egovsum.com -egreatworld.com -egret-labs.org -egret.com -egsea.com -egshuyuan.com -ehafo.com -ehaier.com -ehaimao.com -ehaiwang.com -ehangtian.com -ehaoyao.com -ehaoyao.us -ehclglobal.com -ehcoo.com -ehealthcareforum.com -ehedco.com -ehiman.com -ehinvest.hk -ehome5.com -ehome8.com -ehomeclouds.com -ehomeday.com -ehometu.com -ehouse411.com -ehousechina.com -ehoutai.com -ehowbuy.com -ehowbuy.net -ehsy.com -ehtttop.com -ehualu.com -ehuatai.com -ehub.net -ehui.net -ehujia.com -ehuoke.com -ehuoyan.com -ehust.net -ehuzhu.com -ehvacr.com -ei6nd.com -eia0.net -eiabbs.net -eickaopei.com -eicodesign.com -eicp.net -eidlink.com -eigentech.ai -eigenvr.com -eightbridge.com -eightedu.com -eigpay.com -eiicn.com -eiimg.com -eiisys.com -eilieili.cc -eimoney.com -eindex.me -einkcn.com -eintone.com -eiot.com -eiray.com -eis100.com -eisoo.com -eistudy.com -eit0571.com -ej38.com -ejamad.com -ejcms.com -ejcop.com -ejdyin.com -ejee.com -ejeegroup.com -ejfeng.com -ejiacn.com -ejianji.com -ejianmedia.com -ejiayu.com -ejie.me -ejinqiao.com -ejinshan.net -ejion.net -ejiyao.com -ejmrh.com -ejoy.com -ejoy365hk.com -ejoy99.com -ejoychina.com -ejrfood.com -ejttp.com -eju.com -ejudata.com -ejunshi.com -ek6.com -ekaidian.com -ekan001.com -ekang99.com -ekaobang.com -ekaoyan.com -ekaoyan365.com -ekclubinternational.com -ekesoo.com -eketong.com -eku.cc -ekuaibao.com -ekuapi.com -elabinfo.com -elanso.com -elanw.com -elbmodel.com -eldawa.com -ele.me -ele.to -ele001.com -ele12.com -elecfans.com -elecfans.net -elecinfo.com -elecrystal.com -elecshop.com -elefang.com -eleme.io -elemecdn.com -element3ds.com -elementfresh.com -elenchina.com -elenet.me -elephant-base.com -elesos.com -elex-tech.net -elexcon.com -elfartworld.com -elfjs.com -elgnet.com -elht.com -elian5.com -elianhong.com -elianmeng.vip -elichtmedia.com -elikeme.com -elikeme.net -elitecrm.com -elitejlb.com -eliushi.com -elkpi.com -ellechina.com -ellemen.com -elliotxing.com -ellll.com -elmerlxy.com -eloancn.com -elong-edm.com -elong.com -elong.net -elongshine.com -elongstatic.com -elpcon.com -els001.com -elsenow.com -elsiehoney.com -elsyhw.com -eltws.com -eluosidy.com -eluxiu.com -elvgufen.com -elvhome.com -elvshi.com -elvxing.net -elxk.com -emacs-china.org -emadao.com -emaileds.com -emailflame.com -emailxqq.com -emakerzone.com -emall.site -emall001.com -emao.com -emao.net -emarbox.com -emas-poc.com -emaup.com -embbnux.com -embcom.net -embed.cc -embedfire.com -embedhq.org -embedsky.com -embedtrain.org -embedu.org -embedunion.com -embedway.com -embest-tech.com -embexperts.com -embryform.com -embsky.com -emcbj.com -emcbtc.com -emcite.com -emcsosin.com -emdl.ws.microsoft.com -emea.cdnetworks.com -emeixs.com -emeor.com -emepu.com -emindos.org -emjob.com -emlinix.com -emlog.net -emohe.com -emojidaquan.com -emojimobile.com -emojiwiz.com -empos.net -emrl0z.com -ems-audio.com -ems517.com -emshost.com -emsym.com -emtana.com -emtronix.com -emtx.com -emu999.net -emuban.com -emuch.net -emufan.com -emugif.com -emui.com -emuia.com -emulatedlab.com -emumax.com -emushroom.net -emwan.com -emyard.com -en-sem.com -en.tm -en51.com -en8848.com -en998.com -ename-dns.net -ename.com -ename.net -enamourmall.com -enappstore.com -enbowang.com -enbrands.com -enci-world.com -enec.net -enelcn.com -enen6.com -enet360.com -enetedu.com -enfi.vip -enfodesk.com -enfogrowth.com -eng24.com -eng888.com -engeniustec.com -englishtownpromotion.com -engloncar.com -engpx.com -enguo.com -engz.net -enicn.com -enjoy.link -enjoy1992.com -enjoy3c.com -enjoydiy.com -enjoyfe.com -enjoykorea.net -enjoymeet.com -enjoyyue.com -enjoyz.com -enkichen.com -enkiorder.com -enkj.com -enlightent.com -enlistsecurely.com -enlistsecureup.com -enmajor.com -enmonster.com -enmotech.com -enmsb.com -enmuo.com -ennresearch.com -ennweekly.com -enoya.com -enpapers.com -enqoo.com -enread.com -enroo.com -enroobbs.com -enrz.com -enscg.com -enshide.com -enshifdc.com -enshijob.com -enstylement.com -ent120.com -entboost.com -enterdesk.com -enunix.com -envisioncn.com -enyamusical.com -enzj.com -eoaoo.com -eoeandroid.com -eoemarket.com -eoemarket.net -eoffcn.com -eoffice-mart.com -eoivisa.com -eol8.com -eolinker.com -eomoy.com -eoncon.com -eonun.com -eooioo.com -eoopoo.com -eooqoo.com -eoouoo.com -eoozoo.com -eoriver.com -eosantpool.com -eospark.com -eovas.net -ep-china.net -epaas.net -epailive.com -epalfish.com -epama.com -epanshi.com -epbiao.com -epchina.com -epciu.com -epcnn.com -epcsw.com -epday.com -epeaksport.com -epeiyin.com -epet.com -epetbar.com -epetpet.com -epexpo-asia.com -ephen.me -ephoton.me -epichust.com -epinautomation.com -epinduo.com -epinga.com -epinv.com -epjike.com -epjob88.com -epjyw.com -epkey.com -eplove.com -epmao.com -epoos.com -epqiming.com -eprezi.com -eps114.com -epschool.net -epub360.com -epubchina.com -epubit.com -epweike.com -epwitkey.com -epwk.com -epwksx.com -epzcw.com -eqbyc.com -eqding.com -eqh5.com -eqidi.com -eqie.com -eqifa.com -eqigou.com -eqingdan.com -eqiseo.com -eqishare.com -eqixiu.com -eqq9.com -equn.com -eqxiu.com -eqxiu.mobi -eqxiu.tv -eqxiul.com -eqxiuzhan.com -eqyn.com -eqz.cc -eraclean.com -eran123.com -eranet.com -ercc.cc -erdaicms.com -erdangjiade.com -erdianzhang.com -erdong.site -erdosrcb.com -ere3j2e001.com -erentalcarpro.com -ereuiib.com -erfdhiu.com -erg2008.com -ergecdn.com -ergedd.com -ergengtech.com -ergengtv.com -ergouzi.fun -erhaojie.com -ericfu.me -erichfund.com -erji.com -erji.net -erke.com -erldoc.com -erlo.vip -erlou.com -ermao.com -ermiao.com -ernaonet.com -ernest.me -ernxzc.com -eroacg.com -erongda.com -erongdu.com -erpcoo.com -errenzhuan.cc -ershenghuo.net -ershicimi.com -ershouhui.com -ert7.com -ertongkongjian.com -ertongtuku.com -ertongyouleshebei.com -erun360.com -erutluv.com -erxe.club -erya100.com -eryajf.net -eryuapp.com -eryyutu.com -es-soccer.com -es123.com -es9e.com -esa2000.com -esafenet.com -esavip.com -esbag.com -escdn.com -escjy.net -esclass.com -esdaxiagu.com -esde.cc -esduu.com -esemseo.com -esensoft.com -esfimg.com -eshangxian.com -eshanyao.com -eshenan.com -eshenlin.com -eshimin.com -eshiyun.info -eshop-switch.com -eshopb2c.com -eshow365.com -eshufa.com -eshukan.com -eshuu.com -eshzp.com -esinidc.com -esj365.com -esk365.com -eskgn.com -esky8.com -eskysky.com -eslosity.com -esmartwave.com -esnai.com -esnai.net -esoboy.com -eson.org -esoo.org -esouou.com -esouti.com -esoyu.com -esp-4u.com -espier.mobi -espnlol.com -essaystar.com -essca.com -essclick.com -essdc.com -essemi.com -ession.com -essjj.com -essyy.com -estory365.com -estrongs.com -estudychinese.com -esugimoto.com -esun21.com -esun88.com -esuniao.com -esunny.com -eswin.com -esxqk.com -eszmall.com -esztsg.org -esztyg.com -eszwdx.com -et59.com -etao.com -etaog.com -etaxcn.com -etccenter.com -etcchebao.com -etcsd.com -etdown.net -etelux.com -eternalsakura.com -eternalsakura13.com -eternalsys.com -etest8.com -eteste.com -etf.group -etf88.com -eth6.org -ethainan.com -ethan.pub -ethercap.com -ethern.me -ethfans.org -etiantian.com -etiantian.net -etiantian.org -etiaoliao.com -etimeusa.com -etiv.me -etjournals.com -etlong.com -etmchina.com -etmoc.com -etmt1.com -eto9.com -etocrm.com -etomlink.com -etongdai.com -etongguan.com -etonkidd.com -etoote.com -etoplive.com -etosun.com -etoubao.com -etowz.com -etpass.com -etrack01.com -etrack02.com -etrack03.com -etrack04.com -etrack05.com -etrack07.com -etrack08.com -etranshare.com -etrd.org -ets100.com -etsc-tech.com -etsoon.com -etsstar.com -etstock.net -ettbl.org -ettdnsv.com -ettol.com -ettshop.com -etu3.com -etu6.com -etuan.com -etudu.com -etuonet.com -etyy.com -etyyy.com -etz927.com -etzuqiu.com -eu4cn.com -eub-inc.com -euci-software.com -eudic.net -eueueu.com -eugnnn.com -eui.cc -euibe.com -eulike.com -eulixos.com -eureka.name -eurochinesedaily.com -eusercenter.com -ev123.com -ev123.net -ev3ds.com -eva-game.com -eva001.com -evaad.com -evacg.co -evacg.com -evancg.com -evask360.com -evcar.com -evcard.com -evcard.vip -evdays.com -eve.moe -eventdove.com -events2.djicdn.com -everdns.com -evereasycom.com -everedit.net -everet.org -evergrande.com -evergrandeauto.com -everknight.net -evernakedcake.com -eversino.com -everstar.xyz -everstray.com -evervc.com -everychina.com -everydo.com -everyinch.net -everyouthtech.com -evestemptation.com -evewan.com -evfchina.com -evget.com -evhui.com -evideocloud.net -evideostb.com -evilbinary.org -evilcos.me -evileyesaint.com -evketang.com -evlo.us -evlook.com -evoc.com -evotrue.com -evzhidao.com -ew9z.com -ewaga.com -ewang.com -ewanshang.com -ewarecomputer.com -ewatt.com -ewceo.com -ewdcloud.com -ewdtx.com -ewebeditor.net -ewebsoft.com -ewebweb.com -ewecha.com -ewei.com -eweiqi.com -ewenyan.com -ewide.net -ewidecloud.com -ewidewater.com -ewin007.com -ewinall.com -ewind.us -ewinnet.com -ewku.com -ewoka.com -ewomail.com -eworksglobal.com -eworldship.com -ewp051.com -ewpeinfo.com -ewqcxz.com -ewstudy.com -ewt.cc -ewtang.com -ewteacher.com -ewuqa.com -ex-silver.com -ex-starch.com -exam58.com -exam76.com -exam8.com -examcoo.com -examda.com -examebook.com -examk.com -exampx.com -examw.com -exands.com -exaphotons.com -exasic.com -exbot.net -exbulk.com -excake.com -excalibur.link -excaliburdx.com -excbio.com -excean.com -excel8.com -excel880.com -excel99.com -excelcn.com -excelhome.net -excelpx.com -exceltip.net -exchangecn.com -exchen.net -exdoll.com -exezhanqun.com -exfree.com -exhera.com -exiaoba.com -exinee.com -exiqu.com -exmailqq.com -exmrw.com -exnpk.com -exntech.com -exo-mk.com -expai.com -expba.com -expdns.net -expiredns.net -expirenotification.com -expirepausedns.com -expku.com -expo-china.com -expobbs.com -expoeye.net -exponingbo.com -expoon.com -expoooo.com -expotu.com -expowindow.com -expresscompanynetwork.com -expreview.com -expsky.com -exsvc.net -ext2fsd.com -extfans.com -exthin.net -extmail.org -extremep2p.com -extron-tech.com -extstars.com -exuanfang.cc -exuanpin.com -exuanshi.com -exuekt.com -exuezhe.com -exv9.com -exxstar.com -exxvip.com -exziyuan.com -ey-app.com -ey99.com -eyangguang.com -eyangmedia.com -eyao168.com -eyaobei.com -eyasglobal.com -eyasgloble.com -eycans.com -eydata.net -eye024.com -eye027.com -eye0712.com -eye0731.com -eye0746.com -eyee.com -eyejin.com -eyeofcloud.com -eyeofcloud.net -eyepetizer.net -eyesar.com -eyeshenzhen.com -eyeuc.com -eyexp.com -eyhsj.com -eyoodns.com -eyou.com -eyou.net -eyoucms.com -eyoujj.com -eyourbusiness.com -eyrefree.org -eyuangong.com -eyuanzhou.com -eyuconnect.com -eyugame.com -eyunidc.com -eyunker.com -eyunmy.com -eyunsou.com -eyunzhu.com -eyurumen.com -eyuyan.com -eyuyan.la -eyuyao.com -eywedu.com -eywedu.net -eywedu.org -eyy168.com -eyy8.vip -ez-leaf.com -ezagoo.com -ezaiai.com -ezbuypay.com -ezca.org -ezcname.com -ezcpt.com -ezcun.com -ezdcw.com -ezdmw.com -ezdnscenter.com -ezeroshop.com -ezhangdan.com -ezhangu.com -ezhaobiao.com -ezhdd.com -ezhicai.com -ezhijiantuoluo.com -ezhun.com -ezitong.com -ezlippi.com -ezliushao.com -ezloo.com -ezlost.com -eznowdns.com -eznowdns.net -ezpaychain.com -ezqhdz.com -ezrpro.com -ezsmth.com -eztcn.com -eztest.org -eztg.com -eztvnet.com -eztxw.com -ezubao.com -ezucoo.com -ezwan.com -ezwebtest.com -f-0.cc -f-stack.org -f.cx -f008.com -f0580.com -f1-shanghai.com -f139.com -f1688.com -f1zd.com -f2e.im -f2qu.com -f2time.com -f2zd.com -f315.cc -f32365.com -f3322.net -f3322.org -f41g.com -f513.com -f537.com -f5432.com -f54321.com -f5gh.com -f5sd.com -f5yx.com -f773.com -f7777.net -f8fm.com -fa-today.com -fa597.com -faakee.com -fabang.com -fabao365.com -fabaofoundation.com -fabco-air.asia -fabiao.com -fabiao.net -fabiaoqing.com -fabigbig.com -fabu114.com -faburuanwen.com -facai1000.cc -facang.com -face100.net -face2ai.com -faceboer.com -facecloud.net -faceh5.com -facehufu.com -faceid.com -faceminiproject.online -faceplusplus.com -faceu.mobi -faceu.net -faceui.com -faceunity.com -facri.com -factj.com -factube.com -fad123.com -fadada.com -fadaren.com -fadesky.com -fadfunds.com -fadianying.com -fadior.cc -fadsc.com -fadui.com -fafa9.com -fafa986.com -fafaku.com -fafawang.com -fafeng.com -fafuli.com -fagaoshi.com -fageka.com -fagua.net -fahai.com -fahao8.com -faidev.cc -faidns.com -faioo.com -faipod.com -fairguard.net -fairguard.tech -fairyever.com -fairygui.com -fairysoftware.com -fairytest.com -faisco.com -faisys.com -faiusr.com -faiusrd.com -faiww.com -fajiayun.com -fajjj.com -faka.cat -fala114.com -falomall.com -faloo.com -famanoder.com -famecl.com -fameile.net -famen88.com -famens.com -famensi.com -famicn.com -famige.com -familykoloro.com -familylifemag.com -famiyou.com -famulei.com -fan-lun.com -fan-xun.com -fan-yong.com -fan88.com -fanai.com -fancai.com -fanchongling.com -fanchuanxiao.net -fancyapi.com -fancydsp.com -fancyecommerce.com -fandaojian.com -fandengds.com -fandian.com -fandongxi.com -fanfannet.com -fanfou.com -fang-zhou.com -fang.com -fang027.com -fang33.com -fang668.com -fang99.cc -fang99.com -fangbaoqiang.net -fangbei.org -fangbianle.com -fangbx.com -fangcang.com -fangchan.com -fangchan0573.com -fangchanhz.com -fangchip.com -fangcloud.com -fangcs.net -fangdaijisuanqi.com -fangdaijisuanqi.net -fangdd.com -fangdede.com -fangdichanceo.com -fangdr.com -fangfa.net -fangfaku.net -fangfanwang.com -fanghaofang.com -fanghouguo.com -fanghuafu.com -fanghuihui.com -fanging.com -fangjia.com -fangjiadp.com -fangjial.com -fangjs.com -fangkebao.cc -fangkeduo.net -fangketong.net -fangkewang.com -fangkuaiwang.com -fangkuaiyi.com -fangle.com -fanglimei.com -fanglist.com -fanglitong.com -fangmeileju.com -fangqk.com -fangshanzi.com -fangshuitan888.com -fangsi.net -fangstar.com -fangtan007.com -fangtangtv.com -fangte.com -fangtingzfc.com -fangtoo.com -fangtoon.com -fangtuwang.com -fangtw.com -fangtx.com -fangwei315.com -fangweima.com -fangwuzaixian.com -fangxiaoer.com -fangxin.com -fangxinbao.com -fangxinmai.com -fangxinzhuomian.com -fangxuela.com -fangyb.com -fangyi.com -fangying.tv -fangyou.com -fangyouquan.com -fangyuan365.com -fangyuange.com -fangyunlin.com -fangzd.com -fangzhipeng.com -fangzhur.com -fangzongguan.com -fanhai-hk.com -fanhai8.com -fanhaobai.com -fanhaojia.org -fanhaoyue.com -fanhonghua.net -fanhougame.com -fanhuan.com -fanhuan.org -faniuwenda.com -fanjian.net -fanjian8.com -fanjianhome.com -fanjinyan.com -fanli.com -fanli001.net -fanlibang.com -fanlibei.com -fanlicome.com -fanligame.com -fanlihe.com -fanlijinfu.com -fanlisaas.com -fanlitou.com -fanmugua.net -fannaojiputi.com -fanpusoft.com -fanqiang.com -fanqianzhushou.com -fanqie.im -fanqier.com -fanqiesoq.com -fanqietuan.com -fanqieui.com -fanqievv.com -fanqiewin10.com -fanquanba.com -fanquanwang.com -fanque.cc -fanrenshucheng.com -fanruan.com -fans1.com -fans8.com -fansgu.com -fanshicekong.com -fanshuapp.com -fanshui.net -fanshuvideo.com -fanshuxiaobao.com -fanshuxiaozu.com -fansiji.com -fansimg.com -fansjoy.net -fansobattery.com -fansoon.com -fansx.com -fansyes.com -fantablade.com -fantaiai.com -fantanggame.com -fantatech.com -fantawild.com -fante.com -fanten123.com -fantizi5.com -fantong.com -fanuchdf.com -fanw8.com -fanwe.com -fanwen118.com -fanwenbaike.com -fanwenq.com -fanwenvip.com -fanwenzhan.com -fanxian.com -fanxiang.com -fanxiaocuo.com -fanxiaojian.com -fanxihui.com -fanxing.com -fanxuefei.com -fany-eda.com -fany-online.com -fanyantao.com -fanyeda.com -fanyedu.com -fanyeong.com -fanyi.com -fanyibase.com -fanyigou.com -fanyigou.net -fanyijia.com -fanyiqi.net -fanyishang.com -fanypcb.com -fanyu.com -fanyueciyuan.info -fanyuip.com -fanzehua.com -fanzhiyang.com -fapharm.com -fapiao.com -fapiao365.com -fapiaobang.com -faqrobot.org -far123.com -far2000.com -faradayfuturecn.com -fareastcontainers.com -farenhui.com -farennews.com -farerdak.com -farisl.com -farll.com -farmkd.com -farmsec.com -farsee2.com -fashaoyou.net -fasheng.org -fashengba.com -fashion-virus.com -fashuounion.com -fasionchan.com -fast.im -fastadmin.net -fastadx.com -fastapi.net -fastcdn.com -fastcname.com -fastdo.cc -fastgit.org -fastgz.com -fastidea.cc -fastidea.me -fastio.tech -fastliii.com -fastmirror.org -fastmis.com -fastmock.site -fastmovie88.com -fastmyna.com -fastonetech.com -fastreportcn.com -fastsoc.com -fastsoso.cc -fastwebcdn.com -fat999.com -fatedier.com -fatiao.pro -fatjiong.com -fatkun.com -fatsoon.com -fatvg.com -favdeb.com -favolist.com -favopen.com -favorites.ren -faw-benteng.com -faw-mazda.com -faw-vw.com -fawaitui.com -fawan.com -fawen8.com -fawulu.com -faxdns.com -faxdns.net -faxingchina.com -faxingcn.com -faxingnet.com -faxingsj.com -faxingtp.com -faxingtupian.com -faxingzhan.com -faxiufang.com -faxsun.com -faxuan.net -fayea.com -fayifa.com -fayiyi.com -fayurumen.com -fazhijx.com -fazj.org -fb.mu -fb111.com -fbabi.com -fbaichuan.com -fbicdn.com -fbirdsmall.com -fblife.com -fbook.net -fbsjedu.com -fbuy365.com -fbxslw.com -fc-kf.com -fc0531.com -fc0633.com -fc12319.com -fc2.red -fc2live.pw -fc571.com -fc811.com -fcachinagsdp.com -fcai.com -fcb16888.com -fcbox.com -fcchbj.com -fccs.com -fcczp.com -fcg51.com -fcgsnews.com -fcgtt.com -fcheche.com -fcjob.net -fcjob88.com -fcloudpaas.com -fcnes.com -fcpiao.com -fcrc114.com -fcsc.com -fcsjw.com -fcvvip.com -fcww19.com -fcxjiuyuan.com -fcxxh.org -fcyhw.com -fcz360.com -fczx.com -fd-trust.com -fd167.com -fd597.com -fd7c.com -fdcing.com -fdcyun.com -fdczbstatic.com -fdddf.com -fdeent.org -fdemo.com -fdevops.com -fdjyw.com -fdjzu.com -fdkjgz.com -fdkm88.com -fdlly.com -fdlt.net -fdmgj.com -fdpx.com -fdqh360.com -fds.so -fdsr.org -fduky.com -fdzq.com -fe-cable.com -fe2x.cc -fe347.com -fe520.com -fearlazy.com -feaye.com -febug.com -fecable-gz.com -fecmall.com -fecn.net -fecshop.com -fedte.cc -feeclouds.com -feedou.com -feedsky.com -feedss.com -feeey.com -feehi.com -feekr.com -feelcars.com -feelchat.net -feelcode.net -feelec.net -feeliu.com -feemoo.vip -feepan.com -feesoon.com -feeyan.com -feeye.com -feeyeah.com -feeyo.com -feeyun.com -fegine.com -feheadline.com -fei123.com -fei580.com -feiair.com -feibaojianshen.com -feibaokeji.com -feibisi.com -feibisi.org -feibit.com -feibo.com -feichangzhuan.com -feichi.site -feicool.com -feicui168.com -feicuiedu.com -feicuiwuyu.com -feidaep.com -feidavalve.com -feidee.com -feidee.net -feidieshuo.com -feidou.com -feie.work -feierlaiedu.com -feifanblog.com -feifandesign.com -feifanindustry.com -feifantxt.net -feifanwangg.com -feifei.com -feifeiboke.com -feifeicms.co -feifeixitong.com -feiffy.cc -feifustudio.com -feige.ee -feihu.me -feihuo.com -feihutaoke.com -feiin.com -feiji666nihao.com -feijizu.com -feikanu.net -feikongbao.com -feiku.com -feiliao.com -feiliks.com -feilong.me -feilu.cc -feilvway.com -feimalv.com -feimanzb.com -feimao666.com -feimaoyun.com -feimosheji.com -feiniao.name -feiniaomy.com -feiniu.com -feiniubus.com -feinno.com -feiphp.com -feipin.com -feiq18.com -feirar.com -feiren.com -feisan.net -feishucdn.com -feisu.com -feitian001.com -feitianwu7.com -feitsui.com -feixiaoquan.com -feixiong.tv -feixuege.com -feixueteam.net -feiyang.com -feiyangedu.com -feiyicheng.com -feiyiproxy.com -feiyit.com -feiyng.com -feiyu.com -feiyuapi.com -feiyuemu.com -feiyuhk.com -feiyuteam.com -feizan.com -feizao.tv -feizhaojun.com -feizhu.com -feizhupan.com -fekonmotor.com -felearn.com -feling.net -felink.com -felix021.com -femba.net -femrice.com -fenbaner.net -fenbei.com -fenbeijinfu.com -fenbi.com -fenbishufa.com -fenby.com -fencescn.com -fenduotie.com -fenfen.com -fenfenriji.com -fenfenwz.com -fenfenzh.cc -feng.com -feng1.com -fengakj.com -fengbao.com -fengbaowo.com -fengbolive.com -fengbuy.com -fengcheco.com -fengchizixun.com -fengchj.com -fengchuanba.com -fengchusheng.com -fengcms.com -fengcx.com -fengdu.com -fengdzq.com -fengedu.com -fengeek.com -fengeini.com -fengex.com -fengfeng.cc -fenggeba.com -fenghenever.com -fenghuaju.cc -fenghui.tv -fenghuidongman.com -fenghuoyunji.com -fengiling.com -fengimg.com -fengj.com -fengji.me -fengji.net -fengjing.com -fengjinshuo.com -fengjr.com -fengjunzi.com -fengkongcloud.com -fengkuangzaoren.com -fengkui.net -fengli.com -fengli.su -fenglinjiu.com -fengmanginfo.com -fengmaniu.com -fengmeng.net -fengmi.tv -fengmk2.com -fengniao.com -fengniaocaijing.com -fengniaohuanjing.com -fengniaojr.com -fengone.com -fengpengjun.com -fengpintech.com -fengqiyc.com -fengqu.com -fengread.com -fengshangweekly.com -fengshui22.com -fengshui22.net -fengsung.com -fengtai.tv -fengtalk.com -fengting.io -fengtouwang.com -fengwanyx.com -fengwenyi.com -fengwo.com -fengxianghuawu.com -fengxianrc.com -fengxiaotx.com -fengxuan.co -fengyan.cc -fengyitong.name -fengyu.cc -fengyu.moe -fengyuansufen.com -fengyuncx.com -fengyunpdf.com -fengyushan.com -fengyx.com -fengzhangame.net -fengzigame.com -fengzixbs.com -fenha.net -fenhao.me -fenking.club -fenlei168.com -fenlei265.com -fenleidao.com -fenleitong.com -fenliu.net -fennessy.hk -fenqihome.com -fenqile.com -fenqix.com -fenqubiao.com -fens.me -fensebook.com -fenshua123.com -fensishenghuo.com -fenxi.cc -fenxi.com -fenxi.org -fenxiangdashi.com -fenxianglife.com -fenxiyi.com -fenxuekeji.com -fenying.net -fenyu.net -fenyucn.com -fenzhi.com -fenzijr.com -feotech.com -fequan.com -ferlie.net -fersese.com -fescoadecco.com -fescogroup.com -festaint.com -fetiononline.com -feverassets.net -fevte.com -feydj.com -ff14.org -ff54.ink -ff63.com -ff8828.com -ffan.com -ffasp.com -ffcell.com -ffdns.net -ffeeii.com -ffepower.com -ffff.cc -fffzgh.com -ffhre.com -ffis.me -ffjd1.com -ffmarket.com -ffmulu.com -ffpedia.com -ffpk-cdn.xyz -ffplay.net -ffquan.com -ffsgame.com -ffsky.com -fft.plus -fft123.com -ffxiv.tk -ffxiv.xin -ffyd8.com -ffyinxiang.com -fg.cc -fgeekcloud.com -fghi34.com -fgidna.com -fgkj.cc -fgmgb888.com -fgo.wiki -fgowiki.com -fgvisa.net -fh1551.com -fh21static.com -fh77.com -fh77.net -fh86.com -fhadmin.org -fhd001.com -fhdjh.com -fhdq.net -fhg90.com -fhhgj.com -fhkioskmodules.com -fhldns.com -fhlun.com -fhlyou.com -fhmion.com -fhoverseas.com -fhrl2018.com -fhrlw.com -fhsas.com -fhtj.com -fhtlw.com -fhtre.com -fhwlgs.com -fhycs.com -fhyx.com -fhyx.hk -fi94.com -fiberhome.com -fiberhomegroup.com -fibocom.com -fibodata.com -fibrlink.net -fidding.me -fiehff.com -fieldschina.com -fiery-data.com -fifsky.com -figoc.pw -fiiimg.com -fiinote.com -fiio.net -filcochina.com -file001.com -filediag.com -fillersmart.com -fillseo.com -films666.com -fim34s.com -fimmu.com -fimvisual.com -fin-shine.com -finacerun.com -finaltheory.me -financeun.com -financialstreetforum.com -finansbankservices.net -finchain.info -finchina.com -finctive.com -finderweb.net -findhro.com -findic.com -findic.kr -findic.tw -findic.us -finditandzip.ga -findlawimg.com -findme.wang -findoout.com -findshu.net -findxk.com -findyou.xin -findzd.com -finebi.com -fineidc.com -finer2.com -finereport.com -finereporthelp.com -finetopix.com -finetopix.net -fineui.com -fineway.com -finger66.com -fingerstylechina.com -fingertc.com -fingu.com -fingu.net -finlayliu.com -finndy.com -finogeeks.com -finshell-cib.com -fintechinchina.com -fintechquan.com -finupfriends.com -finupgroup.com -finzfin.com -finzjr.com -fiphoenix.com -fir.vip -firadio.net -fire233.com -fire2333.com -firebase-settings.crashlytics.com -firebirdprint.com -fireemblem.net -fireemulator.com -fireflyacg.com -firefoxbug.com -firefoxcn.com -firekylin.org -firemail.wang -firetry.com -firhq.com -firoyang.org -firshort.com -firstdrs.com -firstfood-cn.com -firstgw.com -firstheartbeat.net -firstlinkapp.com -firstp2p.com -firstproduction.net -firstrow-sports.com -firstsolver.com -fish2bird.com -fish3000.com -fish960.com -fishapi.com -fishcn.com -fisherac.com -fishing-sinkers.com -fishingbar.net -fishingjoy.com -fishings.biz -fishlee.net -fishmobi.com -fishtui.com -fit-start.co -fit-time.com -fitbbs.com -fitoneapp.com -fiuchina.com -fivestarsolar.com -fixsub.net -fiyta.com -fj-atfz.com -fj-jm.com -fj007.com -fj10010.com -fj173.net -fj263.com -fj96336.com -fj987.com -fjanlian.com -fjber.com -fjbgwl.com -fjccdn.net -fjcesuo.com -fjcoop.com -fjcqjy.com -fjcy10010.com -fjcyl.org -fjdaily.com -fjdh.com -fjdnf.com -fjeca.com -fjedu.com -fjfoxiang.com -fjgdwl.com -fjgwy.org -fjhrss.com -fjhun.com -fjhxbank.com -fjhxcaee.com -fjii.com -fjjcjy.com -fjjsp01.com -fjjszg.com -fjjyt.net -fjkqyy.com -fjlh.com -fjly.com -fjmlh.com -fjmstc.com -fjmwjx.com -fjnacc.com -fjndwb.com -fjnet.com -fjotic.com -fjpta.com -fjreading.com -fjsdfz.org -fjsdn.com -fjsen.com -fjsfa.org -fjsfy.com -fjsj.com -fjsjs.com -fjstfc.com -fjtelecom.com -fjtgyxa.vip -fjtianya.com -fjtn.com -fjtv.net -fjty1688.com -fjutu.com -fjvs.org -fjxiehe.com -fjxisuzi.com -fjxn.com -fjybt.com -fjycw.com -fjyy.org -fjzixun.com -fjzol.com -fk100.com -fk2019.com -fkblog.org -fkcaijing.com -fkdmg.com -fkdxg.com -fkesfg.com -fkjie.com -fkw.com -fkw100.com -fkxs.net -fkxxyz.com -fkyuer.com -fkyun.com -fkzgz.com -fl-game.net -fl0632.com -fl168.com -fl365.com -fl5.co -fla38.com -flac.today -flac123.com -flachina.com -flacro.me -flamesky.org -flamingcold.com -flaredup.com -flash127.com -flash8.net -flash8f.com -flashdemo.net -flashempire.com -flashgame163.com -flashgene.com -flashget.com -flashgoing.com -flashmemoryworld.com -flashv8.com -flashwar.com -flashwing.net -flatshare365.com -flawcache.com -flduo.com -flexifont.com -fleyun.com -flgwx.com -flidc.net -fliggy.com -fliggy.hk -flintos.com -flip.fun -fliplus.com -flmjx.com -flnet.com -flnetiot.com -flo52.com -flomoapp.com -flooc.com -floorb2b.com -florentiavillage.com -floverow.com -flowbet365.com -flower-med.com -flower188.com -flower33.com -flowerpassword.com -flowever.net -flowportal.com -floyou.com -flpsz.com -flstudiochina.com -fltacn.com -fltau.com -fltcsb.com -fltrp.com -fluke-ig.com -flutterchina.club -flvcd.com -flvsp.com -flvurl.net -flxc.net -flxdns.com -flxz.com -fly1999.com -fly3949.com -fly63.com -flyacat.com -flybridal.com -flyco.com -flycode.co -flycua.com -flydigi.com -flyenglish.com -flyert.com -flyertea.com -flyertrip.com -flyfish8.com -flyfishx.com -flyfunny.com -flygon.net -flyguest.com -flyine.net -flyme.com -flymeos.com -flyml.net -flymobi.biz -flypy.com -flysnow.org -flytexpress.com -flyxg.com -flyzen.com -flyzy.com -flyzyblog.net -flzc.com -flzhan.com -flzsdq.com -fm0754.com -fm120.com -fm4399.com -fm520.com -fm918.net -fm960.net -fmbimg.com -fmcoprc.gov.mo -fmeibao.com -fminers.com -fmketang.com -fmpan.com -fmsh.com -fmtol.com -fmwei.com -fmwhahaha.com -fmy90.com -fn-mart.com -fn-tech.com -fn.com -fnetlink.com -fnf-foods.com -fngz01.com -fnji.com -fnjiasu.com -fnjsq.com -fnkq.com -fnmz.com -fnnsh.com -fnrcw.com -fnrczp.com -fnysb.com -fnyy.net -fnyy666.com -fnzoo.com -fo12.com -fob123.com -fobshanghai.com -focalhot.com -fochot.com -focus-eloan.com -focus-fusion.com -focuschina.com -focussend.com -fodang.org -fodian.net -fodizi.com -fodlab.com -fodoco.com -fogangtong.com -fokan88.com -folieyun.com -folluo.me -foloda.com -folou.com -fomen123.com -foneplatform.com -fongmong.com -fonrex.com -fonsoft.net -fonsview.com -font.im -font168.com -font5.com -font6.com -fontke.com -fonts.googleapis.com -fonts.gstatic.com -foodbk.com -foodjx.com -foodmate.net -foods1.com -foodsc.net -foodspace.net -foodszs.com -foodu14.com -fooher.com -foojoo.com -fookwood.com -fookyik.com -fooleap.org -foolyun.com -foooooot.com -fooww.com -for-compass.com -for-mail.com -for-she.com -for512.com -for68.com -forbeschina.com -forbest.site -forbetty.com -forbugs.net -forbuyers.com -forcemz.net -ford.com -fordgo.com -forenose.com -forerunnercollege.com -foreseamall.com -foresl.com -forestfood.com -forestpest.org -forestpolice.org -forevercd007.com -foreveross.com -forgame.com -forgotfun.org -forindata.com -forkeji.com -forlinx.com -form-create.com -formtalk.net -formysql.com -fornature.com -forrealbio.com -forrerri.com -forsakenyc.xyz -forsigner.com -forsou.com -forthxu.com -fortiortech.com -fortunebill.com -fortunebs.net -fortunevc.com -forwardgroup.com -forwe.store -foryone.com -foryougroup.com -fos.cc -foscam.com -foshanaosibo.com -foshanmuseum.com -foshannet.com -foshannews.com -foshannews.net -fosss.org -fosun-uhi.com -fosun.com -fotao.name -fotao9.com -fotilestyle.com -foto8.net -fotoe.com -fotomore.com -fotoplace.cc -fotosay.com -fototuan.com -foufu.com -fouleide.com -founder.com -founderbn.com -foundercentury.com -foundereagle.com -founderff.com -founderfu.com -founderic.com -founderinternational.com -founderit.com -founderpcb.com -founderpod.com -foundersc.com -foundersz.com -foundertech.com -foundertype.com -founderuc.com -foundgame.com -foundpdf.com -founei.com -founpad.com -fountask.com -fovmy.com -fox-studio.net -fox008.com -fox688.com -fox800.xyz -foxconn.com -foxera.com -foxmail.com -foxphp.com -foxtable.com -foxweixin.com -foxwho.com -foxwq.com -foxzld.com -foyuan.net -fpdisplay.com -fpgabbs.com -fpgaw.com -fphis.com -fphs5.com -fpliu.com -fpoll.net -fps7.com -fpsv.com -fpwap.com -fq597.com -fqapps.com -fqgj.net -fqis.xin -fql.cc -fqpai.com -fqsszx.com -fqxs.org -fqzww.com -fr-odc.samsungapps.com -fr-trading.com -fr2007.com -fr8npi.com -fractal-technology.com -francissoung.com -francochinois.com -frankorz.com -frankway.net -franzsandner.com -frbao.com -frdic.com -fread.com -free-api.com -free-e.net -free-eyepro.com -free.mk -free789.com -freebsdchina.org -freebuf.com -freecplus.net -freedgo.com -freefrp.net -freegeeker.com -freehome25.net -freehpcg.com -freeibook.com -freeidea.win -freejishu.com -freekaobo.com -freekaoyan.com -freekeyan.com -freelycode.com -freemancn.com -freemindworld.com -freemoban.com -freemojo.com -freemudgame.com -freeoa.net -freeqingnovel.com -freericheyes.com -freeshoppingchina.com -freessl.org -freetstar.com -freetvro.com -freeuid.com -freewhale.net -freeydch.com -freeyun.com -freezl.net -frensworkz.com -freqchina.com -fresh-ideas.cc -freshhema.com -freshnewsnet.com -frhelper.com -friendeye.com -fright-tattoo.com -fringe-zero.com -friok.com -frjie.com -frlh168.com -fro14.com -frombyte.com -fromgeek.com -fromhomelearn.com -fromwiz.com -frontenddev.org -frontjs.com -frontopen.com -frontwize.com -frostming.com -frostwell.cc -frostwell.net -frostwing98.com -fruitday.com -frysb.com -frytea.com -fs-ade.com -fs.microsoft.com -fs008.net -fs0757.com -fs121.com -fs23.com -fs31.com -fs315.org -fs7000.com -fsaligzf.com -fsbankonline.com -fsbus.com -fsc555.com -fscinda.com -fsclzs.com -fsdhub.com -fsecity.com -fsesa.com -fsgejian.com -fsgzhg.com -fshd.com -fshzg.com -fsigc.com -fsjiaju.com -fsjoy.com -fskmp.com -fsky.pro -fsl.to -fslgz.com -fsllq.com -fslsg.com -fsmama.com -fsmeeting.com -fsmy88888.com -fsoptronics.com -fspage.com -fspbg.com -fspcdn.com -fsq3626.com -fssfs.com -fsshenneng.com -fstcb.com -fswl66.com -fsxchina.com -fsxdwy.com -fsxsj.net -fsymltc.com -fsyule.net -ft12.com -ft22.com -ftaro.com -ftbj.net -ftcauction.com -ftfast.com -ftium4.com -ftnormal00ab.com -ftnormal00ak.com -ftnormal01as.com -ftoul.com -ftqq.com -ftrsit.com -ftsafe.com -ftsfund.com -ftsm-vip.com -ftt.me -ftuan.com -ftxad.com -ftxgame.com -ftxsoccer.com -ftxzq.com -ftzn.net -fu57.com -fubao.org -fubaofei.com -fuchaoqun.com -fuckingdata.com -fudaiapp.com -fudanglp.com -fudanmed.com -fudanpress.com -fudian-bank.com -fuedf.org -fufeng-group.com -fufuok.com -fugetech.com -fugui.net -fuhai360.com -fuhancapital.com -fuhanziben.com -fuhaodaquan.org -fuhaoku.com -fuhaozi.com -fuheng.org -fuhuibao.club -fui.im -fuimg.com -fuiou.com -fuioupay.com -fujiabin.com -fujianlaser.com -fujianqq.com -fujianrc.com -fujiansme.com -fujieace.com -fujincenter.com -fujinli.com -fujunjie.com -fuka.cc -fukebi.com -fukeha.com -fulantv.com -fulevmy.com -fuli.la -fuli1024.com -fuli404.net -fuliansheng.com -fuliao.com -fuliapps.com -fuliba2020.net -fuliba2021.net -fulibbs.com -fulibest.com -fulichao.com -fulijd.com -fulimin.org -fulin.org -fulinedu.com -fuling.com -fulingwx.com -fuliti.com -fuliw.net -fuljk.com -full-way.com -fulllinks.com -fullstack.love -fulu.com -fumake.com -fuman8.net -fumanyou.cc -fumi.com -fumu.com -fumubang.com -fumuhui.com -fun.tv -fun48.com -funchat.cc -functionads.com -fund001.com -fundebug.com -fundebug.net -fundog.cc -fundrive.com -funeralchain.com -funfungolf.com -funinput.com -funiutang.net -funjsq.com -funletu.com -funliving.com -funmovie.cc -funnulldns.com -funnycore.com -funnypicsbox.com -funnyplaying.com -funshion.com -funshion.net -funshipin.com -funtimebbs.com -funtoygame.com -funvge.com -funwear.com -funxun.com -funyqq.com -fuqian.la -fuqiangw.com -furenkeji.com -furongedu.com -furrychina.com -furuijiaju.vip -fusaide.com -fusion.design -fusroda.io -fute.com -futonghb.com -futu5.com -futuhk.com -futuku.com -futuniuniu.com -futunn.com -futureengineer.org -futureprize.org -futurescircle.com -futurescontest.com -fututrade.com -fuwa.org -fuwaliuxue.com -fuwit.com -fuwo.com -fuwuce.com -fuwuqinet.com -fuwuqu.com -fuxiaohei.me -fuxinbank.com -fuxing56.com -fuxingtech.com -fuxingwang.com -fuxunpay.com -fuyangseo.com -fuyangtv.com -fuych.net -fuyinchina.com -fuyou888.com -fuyoubank.com -fuyoukache.com -fuyuan5.com -fuyuandian.com -fuyuncc.com -fuyuncun.com -fuyundata.com -fuyuzhe.com -fuz.cc -fuzadu.com -fuzamei.com -fuzangtang.com -fuzeetech.com -fuzegame.com -fuzhimao.com -fuzhongvisa.com -fuzhugo.com -fuzihao.org -fv99.com -fview.com -fvti.com -fw-biotech.com -fw4.co -fw4.me -fwcranes.com -fwdq.com -fwdq.net -fwdqw.com -fwhzxxgbyy.com -fwjia.com -fwmob.com -fwqbdn.com -fwqtg.net -fwqzx.com -fwsir.com -fwtoys.com -fwxgx.com -fwzjia.com -fx120.net -fx168api.com -fx168vip.com -fx273.com -fx3q.com -fx678.com -fx678.net -fx678red.com -fx968.com -fxbaogao.com -fxcccbbs.com -fxclass.net -fxcns.com -fxcsxb.com -fxcw.com -fxdiv.com -fxdm.net -fxdp.com -fxian.org -fxiaoke.com -fxk8.com -fxlbb.com -fxltsbl.com -fxm.so -fxmoe.com -fxo2opt.com -fxpan.com -fxsw.net -fxtrip.com -fxtrips.com -fxw.la -fxwfx.com -fxwst.com -fxxw.net -fxxww.net -fxxz.com -fxyfmp.com -fxyibai.com -fxzhj.com -fxzhjapp.com -fxzpfyy.com -fxzygc.com -fy-data.com -fy-game.com -fy-team.com -fy027.com -fy169.net -fy558.com -fy65.com -fy98.com -fybiji.com -fybooks.com -fybxw.com -fycarto.com -fychinago.com -fydeos.com -fydisk.com -fydmodel.com -fydqw.com -fyeds0.com -fyeds1.com -fyeds2.com -fyeds3.com -fyeds4.com -fyeds5.com -fyeds6.com -fyeds7.com -fyeds8.com -fyeds9.com -fyfch.com -fygame.com -fygdrs.com -fygsoft.com -fyigou.com -fyjsz.net -fynas.com -fynews.net -fynode.tk -fyq99.com -fyrcbk.com -fyrexian.com -fyrsks.com -fyrwzz.com -fysjlogo.com -fysns.com -fytcw.com -fytxonline.com -fytz.net -fyuanpack.com -fyvart.com -fywx.cc -fyyy.com -fyzku.com -fz0512.com -fz222.com -fz2sc.com -fz597.com -fzbm.com -fzbtv.com -fzccpit.org -fzcyjh.com -fzdmag.com -fzengine.com -fzf.com -fzfapp.com -fzfzjx.com -fzg360.com -fzita.com -fzithome.com -fzjxw.com -fzl7.com -fzlawyers.net -fzlbar.com -fzlft.com -fzlol.com -fzmama.net -fzmeetdecor.com -fzn.cc -fzpig.com -fzqcbz.com -fzrsrc.com -fzshbx.org -fzshoukuanji.com -fzsjob.com -fzswy.com -fztxylgy.com -fzwcn.com -fzxiaomange.com -fzxyyqd.com -fzyfan.com -fzyfan.net -fzyfs.net -fzzqcdn.com -fzzrlh.com -g-emall.com -g-photography.net -g-var.com -g1.gstatic.com -g12345.com -g12e.com -g168.net -g188.net -g1c5.com -g1d.net -g1f5.com -g2.gstatic.com -g2.link -g207.com -g2g1.com -g2h3.com -g2us.com -g2work.com -g312.com -g32365.com -g3d.org -g3img.com -g3user.com -g5h4.com -g72.com -g7430.com -g77775555.com -g77776666.com -g88885555.com -g88886666.com -g8f8.com -ga0.me -ga001.com -ga25.com -gaapqcloud.com -gabiplay.com -gac-capital.com -gac-nio.com -gacfca.com -gacfcasales.com -gacfiatauto.com -gack.citic -gaclib.net -gacmotor.com -gacsofinco.com -gaeadata.com -gaeamobile.net -gafata.com -gafei.com -gaga.me -gagaga.tech -gagahi.com -gagalee.ink -gai.net -gaiamount.com -gaibar.com -gainda.net -gainet.com -gaingreat.com -gaini.net -gainscha.com -gaitu.com -gaituba.com -gaitubao.com -gaitubao.net -gaixue.com -gaizhui.com -galaxix.com -galaxy-immi.com -galaxyappstore.com -galaxyasset.com -galaxyfont.com -galaxyinfo.com -galaxymacau.com -galaxyns.net -galeo.me -galgamezs.com -galiaoba.com -gallopgazelle.com -galstars.net -galsun.com -galudisu.info -gamdream.com -game-as.com -game-props.com -game-reign.com -game-yx.com -game1126.com -game12315.com -game13.com -game141.com -game2.com -game234.com -game345.com -game3vs7novel.com -game4343.com -game5.com -game5399.com -game5iw.com -game798.com -game900.com -game9g.com -gameabc.com -gameabc2.com -gamebar.com -gamebbm.com -gamebean.com -gamebean.net -gamebee.net -gamebto.com -gamecat.fun -gamecomb.com -gamecps.com -gamed9.com -gamedashi.com -gameditu.com -gameegg.com -gameexp.com -gamefk.com -gamefm.com -gamefv.com -gamehui.com -gameinns.com -gameiy.com -gamejym.com -gamekee.com -gameley.com -gameloop.com -gameloveman.com -gamemale.com -gamemei.com -gameol.com -gamepf.com -gamept.com -gamerboom.com -gameres.com -gamerey.com -gamerhome.net -gamerlol.com -gamermake.com -gamersky.com -gamerstorm.com -gameservice.com -gamesh.com -gamesifu.com -gamesir.com -gametanzi.com -gametaptap.com -gametdd.com -gamethk.com -gametrees.com -gamett.net -gametu.net -gamevvip.com -gamewifi.net -gamexdd.com -gamexhb.com -gamexz.com -gameyisi.com -gameyj.com -gamfe.com -gammatimes.com -gamutsoft.com -gamux.org -gan-ren.com -ganggeban123.com -ganggg.com -ganghaowang.com -ganglonggou.com -gangpaibao.com -gangqinpu.com -gangzai.online -ganhuoche.com -ganhuodaquan.com -ganji.com -ganjiangrc.com -ganjistatic1.com -ganjistatic2.com -gank-studio.com -gank.io -gankang.com -gankgames.com -gankh5.com -ganlv.org -ganlvji.com -ganniu.com -ganqi.com -ganqi.net -ganso.net -gansuci.com -gansunet.com -gansuyunshi.com -ganxi666.com -ganxianw.com -ganxianzhi.win -ganzhe.com -ganzhishi.com -gao.com -gao3d.com -gao4.com -gao7.com -gao7gao8.com -gaobata.com -gaobei.com -gaobiao.net -gaobo.name -gaocegege.com -gaochengnews.net -gaochun.info -gaodabio.com -gaodage.com -gaodalei.com -gaode.com -gaodilicai.com -gaoding.com -gaoduanqianzheng.com -gaodugj.com -gaodun.com -gaodunwangxiao.com -gaofang.cloud -gaofangcache.com -gaofangz.com -gaofeib2c.com -gaofeie.com -gaofen.com -gaofenplatform.com -gaoguai.com -gaoguangcn.com -gaogulou.com -gaohaipeng.com -gaohangip.com -gaohbook.net -gaohr.com -gaoimg.com -gaoji.ren -gaojiaju.net -gaojianli.me -gaojie.com -gaojihealth.com -gaokao.com -gaokao365.com -gaokao789.com -gaokaobaoming.com -gaokaohelp.com -gaokaopai.com -gaokaoq.com -gaokaozhiku.com -gaokeyan.com -gaokin.com -gaokowl.com -gaokw.com -gaokzx.com -gaolouimg.com -gaomaomao.com -gaomeig.com -gaomeluo.com -gaomon.net -gaopaiwood.com -gaopeng.com -gaoqing.fm -gaoqing.la -gaoqingdianshi.com -gaoqingpai.com -gaoqiwenda.com -gaoqixhb.com -gaore.com -gaosan.com -gaosboy.com -gaoshou.me -gaoshouvr.com -gaoshouyou.com -gaosiedu.com -gaosivip.com -gaosouyi.com -gaosu.com -gaosudu.com -gaotang.cc -gaotie.net -gaotieshike.com -gaotu006.club -gaotu100.com -gaoxiao88.net -gaoxiaobang.com -gaoxiaojob.com -gaoxiaovod.com -gaoxin123.com -gaoxinbao.xyz -gaoxinkc.com -gaoyizaixian.com -gaoyong666.com -gaoyoujob.com -gaoyy.com -gaozeyuan.com -gaozhaiedu.com -gaozhiip.com -gaozhongwuli.com -gaozhouba.com -gap.hk -gapitech.com -gara.cc -garden-aquarium.com -gardencn.com -garmuri.com -garnoc.com -garphy.com -garply.com -gas-analyzers.com -gasfw.com -gasgoo.com -gashr.com -gasshow.com -gaszx.com -gate-dhgames.com -gateface.com -gatewang.com -gather-dns.com -gathernames.com -gaussianoptics.com -gavindesign.com -gaxrmyy.com -gbase8a.com -gbasebi.com -gbdex.com -gbgba.com -gbhome.com -gbiac.net -gbicdn.com -gbicom.com -gblhgk.com -gblj365.com -gbofd.com -gboooo.com -gbpjam.com -gbsou.com -gbt88.com -gbtags.com -gbtranswins.com -gbw114.com -gc-repair.com -gc-zb.com -gc1616.com -gc39.com -gc5.cc -gc600.com -gccdn.net -gcchina.com -gccmgw.com -gcdcrs.com -gcgd.net -gcgds.com -gchao.com -gche8.com -gcihotel.net -gcimg.net -gcjc.com -gcjr.com -gcjx123.com -gcl-et.com -gcloudcs.com -gcloudgbs.com -gcloudsdk.com -gclxry.com -gcmc.cc -gcoreinc.com -gcores.com -gcstorage.com -gcsz.net -gcyts.com -gczp.cc -gczx.cc -gczyg.com -gd-china.com -gd-hskj.com -gd-id.com -gd-linux.com -gd-linux.org -gd1580.com -gd165.com -gd2000.org -gd32.com -gd3n.com -gd563.com -gda086.com -gdadjs.com -gdadri.com -gdadsly.com -gdatacube.net -gdbhnk.com -gdbljd.com -gdbyhtl.net -gdccsc.com -gdcct.com -gdcic.net -gdcom.wang -gdcoop.com -gdcrj.com -gdcts.com -gdctsvisa.com -gdcx.net -gdcyl.org -gddarf.com -gddata.net -gddg.cc -gddhn.com -gdebidding.com -gdefair.com -gdems.com -gdevops.com -gdforestry.com -gdfplaza.com -gdgcep.com -gdggkf.com -gdgudong.com -gdgwyw.com -gdhaoma.com -gdhbsh.com -gdhouqin.com -gdhuan.com -gdhy0668.com -gdie.com -gdimmi.com -gdinfo.net -gdiso.com -gdjdxy.com -gdjinge.com -gdjn.org -gdjqwl.com -gdjyw.com -gdkaman.com -gdkepler.com -gdkjb.com -gdkjw.com -gdkszx.com -gdkz88.com -gdlins.com -gdlppow.com -gdlsgz.com -gdmappress.com -gdmingshizx.com -gdmm.com -gdmoa.org -gdmschina.com -gdmseduol.com -gdmuseum.com -gdmxjy.com -gdong.com -gdou.com -gdpanshi.com -gdpycy02.com -gdqynews.com -gdrc.com -gdrc360.com -gdrc365.com -gdrcu.com -gdrfyy.com -gds-services.com -gdscse.net -gdscw.com -gdsincom.com -gdsoq.com -gdsports.net -gdsrcw.com -gdssl.image-gmkt.com -gdstlab.com -gdswine.com -gdsxgd.com -gdszjgdj.org -gdszpdt.com -gdtai.com -gdtaihao.com -gdtex.com -gdtextbook.com -gdtimg.com -gdtnio.com -gdtone.com -gdtoolkit.com -gdtrafficad.com -gdtravel.com -gdttc.com -gdtz888.com -gdunis.com -gdupi.com -gdvolunteer.net -gdwca.com -gdwlgp.com -gdwlife.com -gdwxmz.com -gdxgt.com -gdxxb.com -gdyjs.com -gdysdz.com -gdyunyin.net -gdyxc.com -gdzbs.com -gdzhlh.com -gdzhongshan.com -gdzj8.com -gdzp.org -gdzs2018.cc -gdzs2018.vip -gdzsxx.com -gdztck.com -gdzuoxie.com -gdzzz.com -ge-garden.net -ge100.com -geakr.com -geality.com -geapu.com -gearkr.com -geautos.com -gebi1.com -gebilaoshi.com -gebiqu.com -gec123.com -geci345.com -gecimi.com -geciwang.net -gedou8.com -gedoumi.com -gedu.org -geeboo.com -geebook.com -geedai.com -geedu.com -geeetech.com -geeeu.com -geejing.com -geek-docs.com -geek-era.com -geek-papa.com -geek-share.com -geek-workshop.com -geekbang.org -geekbangtech.com -geekcar.com -geekdigging.com -geekdream.com -geekercloud.com -geekerconsulting.com -geekersq.cc -geekfan.net -geekfans.com -geekhub.com -geekiron.com -geekjc.com -geekluo.com -geekmaker.com -geekman.vip -geekmar.xyz -geekniu.com -geekori.com -geekotg.com -geekpark.net -geekpwn.org -geeksblog.cc -geektutu.com -geeku.net -geekwom.com -geekxue.com -geekzu.org -geely.com -geement.com -geeqee.com -geermunews.com -geesee.com -geeseteam.com -geetest.com -geewaza.com -geexek.com -geeyep.com -geezn.com -gegejia.com -gegeyingshi.com -geicloud.com -geihuasuan.com -geihui.com -geilicdn.com -geilijiasu.com -geimian.com -geindex.com -geiniwan.com -geishost.com -geisnic.com -geitu.net -geizan.cc -gejian.net -gejiawen.com -gejiba.com -gelics.com -gelonghui.com -gelu.me -gemchina.com -gemdale.com -gemgsx.com -gemii.cc -gemini-galaxy.com -gemini530.net -geminight.com -gempay.com -gempoll.com -gemuedu.com -genbaike.com -genban.org -gendantong.com -genekong.com -geneskies.com -genetalks.com -geneworldcn.com -gengnie.com -gengwen.net -geniatech.com -genrace.com -genscript.com -gensee.com -genshuixue.com -gentags.com -gentags.net -genymotion.net -genzhuang.org -geo-prism-cn.htcsense.com -geo-prism.htcsense.com -geo.kaspersky.com -geo2k.com -geogsci.com -geohey.com -geoidc.com -geospatialsmart.com -geotmt.com -gepresearch.com -gepubbs.com -gepush.com -gequ77.com -gequdaquan.net -geren-jianli.com -gerenjianli.com -gerhard-china.com -geruihuate.com -gesanghua.org -gesep.com -geshui.com -geshui100.com -geshuiw.com -gesuo.com -get.vip -get233.com -getbingo.net -getbs.com -getcai.com -getcn.net -gethover.com -getiis.com -getip.name -getkwai.com -getlema.com -getmarkman.com -getquicker.net -getsurfboard.com -getteamyi.com -getui.com -getui.net -getuikit.net -getulab.com -getvidi.co -getyii.com -gewai-cnc.com -gewala.com -gewara.com -gewu.vc -gexiao.me -gexing.com -gexing.me -gexings.com -gexingshuo.com -gexingzipai.com -geyan123.com -geyanw.com -geyo.com -geyoukj.com -gezhixq.net -gezida.com -gezila.com -gf-funds.com -gf.cc -gfan.com -gfanstore.com -gfbhgz.com -gfcdn.shop -gfcdn.xyz -gfcvisa.com -gfd178.com -gfdns.net -gfdsa.net -gfedu.com -gffirm.com -gffwq.com -gfglb.com -gfhj.com -gfjl.org -gfnormal01ac.com -gfnormal01aq.com -gfnormal02ak.com -gfnormal03ab.com -gfnormal03aj.com -gfnormal04ac.com -gfnormal04ad.com -gfnormal04ar.com -gfnormal06aa.com -gfnormal07ak.com -gfnormal07ar.com -gfnormal07at.com -gfrtrttweet.com -gftuan.com -gfun.me -gfund.com -gfvip00ao.com -gfvip04af.com -gfvip05ad.com -gfvip07ap.com -gfvip08ad.com -gfvip08ao.com -gfvip08ar.com -gfvip09ac.com -gfvip09aj.com -gfvip09an.com -gfvip09aq.com -gfvip09at.com -gfxaa.com -gfxcamp.com -gfxtr1.com -gfxy.com -gfzj.us -gg-ev.com -gg-lb.com -gg-led.com -gg1994.com -gg8828.com -ggac.net -ggcida.com -ggcj.com -ggcykf.com -ggda365.com -ggemo.com -ggerg.com -ggeye.com -ggg.cool -ggj88.com -ggjrw.com -ggjstz.com -gglenglish.com -ggmm777.com -ggmmqq.com -ggmzy1.com -ggo.la -ggo.net -ggpeixun.com -ggqule.com -ggqx.com -ggsafe.com -ggsq.cc -ggwan.com -ggweb.net -ggxt.net -ggxxe.com -ggytc.com -ggzgg.com -ggzuhao.com -gh5e.vip -gh6.org -gh8s.com -ghatg.com -ghboke.com -ghgy.com -ghgy.net -ghlearning.com -ghmba.com -ghmcchina.com -ghmp4.com -gho5.com -gholover.com -ghost008.com -ghost11.com -ghost123.com -ghost64.com -ghostchina.com -ghostsf.com -ghostw7.com -ghostwin10.net -ghostwin7.net -ghostxp2.com -ghostxp6.com -ghostxpsp3.net -ghostxx.com -ghproxy.com -ghpym.com -ghrlib.com -ghs.net -ghsmpwalmart.com -ght.me -ghui.me -ghwgame.com -ghxi.com -ghyg.com -ghzhushou.com -ghzs.com -ghzs666.com -giabbs.com -giaimg.com -giant-cycling-lifestyle.com -giantcdn.com -gibcp.com -giccoo.com -gicp.net -giexya.com -gif-china.cc -gif5.net -gifcool.com -giffox.com -gifhome.com -gifms.com -gifshow.com -giftsbeijing.com -gifu-pr.com -giga-da.com -gigabyte.com -gigaget.com -giiso.com -gildata.com -gilieye.com -giltbridge.com -giltworld.com -gimcyun.com -gimhoy.com -gimmgimm.com -gimoo.net -gio.ren -giocdn.com -gionee.com -gionee.net -giordano.com -giraff3.com -girlbt.com -girls-frontline.com -girlw.net -giscafer.com -giser.net -giserdqy.com -gispark.com -gissaas.com -gissky.net -git-star.com -gitbook.net -gitcafe.net -gitclone.com -gitcode.net -gitee.com -githang.com -githubusercontents.com -gitissue.com -gitlib.com -gitlore.com -gitnavi.com -gitnoteapp.com -gitnova.com -gitos.net -gitsea.com -gitv.tv -gityuan.com -giuem.com -giveda.com -giveme5.cc -giyu8.com -gizwits.com -gj515.com -gjalk.com -gjb9001b.com -gjbaek.ren -gjcdn.vip -gjceshi9.com -gjfax.com -gjgov.com -gjgwy.net -gjgwy.org -gjgzpw.com -gjjcxw.com -gjjnhb.com -gjnlyd.com -gjpdh.com -gjsj.com -gjtjjp.com -gjw.com -gjw123.com -gjxh.org -gjyys.com -gjzy.com -gk-net.com -gk-z.com -gk.link -gk027.com -gk100.com -gk114.com -gk99.com -gkbbapp.com -gkczgs.com -gkdgz.com -gkeydoor.com -gkfb.com -gkkxd.com -gkmhq.com -gkmotor.com -gkong.com -gkoudai.com -gkpass.com -gkshuju.com -gkstk.com -gktianshanjd.com -gkwo.net -gkxd.com -gkzhan.com -gkzj.net -gkzxw.com -gl-data.com -gl-inet.com -gl258.com -glab.online -glabuy.com -glamever.com -glamourred.com -glanimaltrade.com -glanu.com -glasseasy.com -glawyer.net -glb3.com -glb6.com -glbdns.com -glbdqn.com -glcanyin.net -glcct.com -gldtztc.com -gleasy.com -glface.com -glgczk.com -glgoo.com -glgoo.net -glgoo.org -glhospital.com -glike.me -glinfo.com -gljrkj.com -gllue.com -gllue.me -gllue.net -glmama.com -glmapper.com -glmei.net -global-download.acer.com -global-harbor.com -global-idc.net -global-jf.com -global-scsl.com -global-trade-center.com -globalaccentchinese.com -globalbuy.cc -globalcompressor.com -globaldangdang.hk -globaletrust.com -globalhardwares.com -globalimporter.net -globalizex.com -globalmarket.com -globalmil.com -globalpingbao.com -globalscanner.com -globalsign.com -globalslb.net -globalsources.com -globalstech.com -globeauto.org -globeedu.com -globeimmi.com -globerexpress.com -globlevip.com -globrand.com -globrand.net -glodon.com -glofang.com -glorymobi.com -gloryre.com -gloryview.com -glorze.com -glosku.com -glqh.com -glshimg.com -gltattoo.com -gltjk.com -gltop.com -glvs.com -glxlawyer.com -glyf168.com -glzhuang.com -glzip.com -glzj88.com -glzy8.com -gm193.com -gm2007.com -gm825.com -gm86.com -gm88.com -gm99game.net -gmacsaic.com -gmanhua.com -gmb2b.com -gmcc.net -gmcchina.net -gmdun.com -gmecity.com -gmed.cc -gmem.cc -gmem.site -gmgc.info -gmgcongress.com -gmgdc.com -gmgm668.com -gmhysj.com -gmilesquan.com -gming.org -gmiot.net -gmjk.com -gmm01.com -gmmch5.com -gmmicro.com -gmmsj.com -gmonline-all.com -gmpanel.com -gmrmyy.com -gms-lighting.com -gmsjf.com -gmssl.org -gmt-china.org -gmtv.cc -gmugmu.com -gmwtp.com -gmwuf.com -gmyl.com -gmzhushou.com -gmzi.com -gn00.com -gn168.com -gnaixx.cc -gname-dns.com -gndaily.com -gnehr.com -gnetis.com -gng92.com -gnhpc.com -gnrcbank.com -gnss.help -gnssinfo.com -gnssopenlab.org -gnvip.net -gnway.com -go-gddq.com -go-goal.com -go.cc -go007.com -go108.com -go24k.com -go2aaron.com -go2eu.com -go2hn.com -go2map.com -go2tu.com -go2yd.com -go300.com -goalan.net -goalhi.com -goalmobi.com -goapk.com -gobanma.com -gobelike.net -gobivc.com -gocarjourney.com -gocashback.com -gocea.net -goceshi.com -gocheck.net -gochego.com -gocn.vip -god51.com -godaily.org -godasai.com -godbach.com -godbiao.com -godblessyuan.com -goddelivery.com -goddessxzns.com -godeve.com -godic.net -godida.com -godiscoder.com -godiy8.com -godloveworld.com -godo.pub -godoor.com -godotdotdot.com -godpan.me -godrry.com -godruoyi.com -godsheepteam.com -godsignal.com -godwolf.com -goeasy.io -goepe.com -goertek.com -goetheslz.com -goflac.com -goframe.org -gogbuy.com -gogo-le.com -gogo.so -gogo123.com -gogoauc.com -gogobids.com -gogofly.com -gogojiang.com -gogolinux.com -gogooffer.com -gogopzh.com -gogoqq.com -gogoup.com -gohighfund.com -goho.co -gohoedu.com -gohom.win -gohomesafe.org -gohong.com -gohugo.org -going-link.com -gojiaju.com -goke.com -gokols.com -gokuai.com -golangapi.com -golanger.com -golangtc.com -golangweb.com -golaravel.com -gold-v.com -gold58.com -gold678.com -goldapple.name -goldav.net -goldbj.com -goldbox.vip -golden-book.com -golden-infor.com -goldenad.net -goldenholiday.com -goldenhome.cc -goldenname.com -goldentom.com -goldgrid.com -goldhoe.com -goldke.com -goldlvshi.com -goldmantis.com -goldmarkrealestate.com -goldstonepack.com -goldsunchn.com -goldtoutiao.com -golf568.com -golfvv.com -golink.com -golinksworld.com -golive-tv.com -golivetv.tv -gomeart.com -gomecloud.com -gomegj.com -gomeholdings.com -gomehome.com -gomeplus.com -gomesell.com -gomo.com -gonever.com -gong123.com -gongbaike.com -gongboshi.com -gongchang.com -gongchengbing.com -gongchou.com -gongfubb.com -gongheshengshi.com -gongjiao.com -gongjiaomi.com -gongju.com -gongju5.com -gongjuji.net -gongjumi.com -gongkaoleida.com -gongkong.com -gongkong001.com -gongkongbpo.com -gongkongedu.com -gongkongke.com -gongkongmall.com -gongl8.com -gonglin91.com -gongmutang.com -gongnou.com -gongpin.net -gongpingjia.com -gongshang120.com -gongshe99.com -gongshi8.com -gongsibao.com -gongsijiaoyi.com -gongsizhijia.com -gongwuxing.com -gongxiangcj.com -gongxiao8.com -gongxinbang.com -gongxuku.com -gongye360.com -gongyeku.com -gongyelian.com -gongyeyun.com -gongyicn.org -gongyijijinhui-info.com -gongyingshi.com -gongyishibao.com -gongyixiang.com -gongyoumishu.com -gongzhonghaozhushou.com -gongzi.org -gongzicp.com -gongzifu.com -gongzuoshouji.net -gongzuoyun.org -gonsun.com -gonvvama.net -gonxhn.com -goo17.com -gooagoo.com -gooann.com -good-display.com -good-fine.com -good-import.com -good.cc -good1230.com -good321.net -goodaiai.com -goodapk.com -goodapp.net -goodbaby.com -goodbabygroup.com -goodbaike.com -goodbook100.com -goodcti.com -gooddr.com -gooddu.com -goodealwigs.com -goodera8.com -goodev.org -goodgupiao.com -goodid.com -goodix.com -goodjd.com -goodjili.com -goodjzjg.com -goodkejian.com -goodlucknet.com -goodnic.net -goodprogrammer.org -goodrain.com -goods-brand.com -goodstudydayup.com -goodtea.cc -goodtp.com -goofish.com -google-analytics.com -googleadservices.com -googleanalytics.com -googlebridge.com -googlefonts.net -googleoptimize.com -googlesyndication.com -googletagmanager.com -googletagservices.com -googlevip8.com -googlevoice.org -googleyixia.com -googpc.com -goojer.com -goolink.org -gooo8.com -gooogua.com -gooooal.com -goooob.com -gooood.hk -goootech.com -goootu.com -goosai.com -goosail.com -gooseeker.com -goosetalk.com -gooxi.com -gooyo.com -goozp.com -gopedu.com -gopiaowu.com -goplaycn.com -goplayervideo.com -gorichox.com -gorouter.info -gorse.com -goryun.com -goshijia.com -gosinoic.com -gospelwin.com -gosuncdn.com -gosunm.com -goten.com -gotocdn.com -gotodn.com -gotohz.com -gotohzrb.com -gotoip.net -gotoip1.com -gotoip11.com -gotoip2.com -gotoip3.com -gotoip4.com -gotoip55.com -gotojp.net -gotokeep.com -gotonav.com -gotonets.com -gotoubi.com -gotozhuan.com -gotran.com -gotvg.com -gou.com -gou5juan.com -gouai.com -gouchezj.com -goufang.com -goufq.com -goug.com -gougoujp.com -gougousc.com -gougoutxt.com -gouhai.com -gouhaowang.com -gouhuasuan.shop -goukuai.com -goulew.com -goulong.com -goumee.com -goumin.com -gounahaozi.org -goupuzi.com -goushh.com -gouso.com -gousu.com -goutanzi.com -gouwanmei.com -gouwubang.com -gouwuke.com -gouwumai.com -gouwuwang988.com -gouwuyu.com -govfz.com -govmade.com -gow100.com -gowa.club -gowan8.com -goweb2.net -goweb3.net -gowincms.com -gowinlease.com -gowinxp.com -gowithmi.com -goyihu.com -goyoo.com -goyouhuima.com -gozap.com -gp-cdn.net -gp-tm.com -gp123.cc -gp1903.com -gp1907.com -gp1908.com -gp1909.com -gp1910.com -gp241.com -gp259.com -gp451.com -gp51.com -gp88888.com -gp891.com -gpai.net -gpautobid.com -gpbeta.com -gpcgd.com -gpcqjy.com -gpcxw.com -gpd.hk -gpdi.com -gper.club -gpio.me -gpl-express.com -gplayspace.com -gplqdb.com -gpnewtech.com -gppapp.com -gps8.com -gpslook.net -gpsoo.net -gpsspg.com -gpsuu.com -gpticket.org -gpxxz.com -gpxygpfx.com -gpxz.com -gpzbs.com -gqak.com -gqgkj.com -gqhmt.com -gqjd.net -gqk.tv -gqm168.com -gqooh.com -gqqsm.com -gqsoso.com -gqt168.com -gqtpw.com -gqyy8.com -gqzctsj.com -gqzzw.com -grablan.com -grabsun.com -gracece.com -gracg.com -gradaimmi.com -gradgroup.com -gradgroup.net -grainedu.com -grainstorage.net -gran.work -grandinsight.com -grandomics.com -grapchina.org -graphene.tv -graphmovie.com -graueneko.xyz -gray-ice.com -grcbank.com -grchina.com -gre.vip -greatbit.com -greatopensource.com -greatops.net -greatroma.com -greatsk.com -greatssp.com -greatstargroup.com -greatstartools.com -greatwalldns.com -greatwallships.com -gree-jd.com -gree.com -greebox.com -green-android.org -green12306.com -greenbodhi.com -greenchengjian.com -greencompute.org -greendh.com -greenhtml.com -greenhua.com -greenism.net -greenlandsc.com -greentomail.com -greenxf.com -gretf.com -greycdn.net -greyli.com -grfy.net -grfyw.com -grg2013.com -grgbanking.com -grge23.com -grgsecurity.com -grgvision.com -grgyintong.com -gridsum.com -gridsumdissector.com -gridy.com -grieom.com -grikin.com -grinm.com -grirem.com -grizcom.com -grmxdy.com -gro2004.com -gro2005.com -groad.net -groovyfilmes.com -grouk.com -group-purchasing.com -group.citic -groupjx.com -grouplus.com -growingio.com -grt-china.com -gruntjs.net -grvape.com -gryu.net -grzmz.com -gs-loc-cn.apple.com -gs-loc.apple.com -gs.ww.np.dl.playstation.net -gs14.com -gs2.ww.prod.dl.playstation.net -gs265.com -gs307.com -gsadds.com -gsafcct.com -gsbankchina.com -gsbankmall.com -gscaijing.com -gscidc.net -gsdk.tv -gsdlcn.com -gsdpw.com -gsflcp.com -gsgs10086.com -gshhqy.com -gsi24.com -gsicpa.net -gsjie.com -gsjpy.com -gsjtky.com -gsjy.net -gsktraining.com -gskyty.com -gslxrc.com -gsmpers.com -gsmyi.com -gsp10-ssl-cn.ls.apple.com -gsp11-cn.ls.apple.com -gsp12-cn.ls.apple.com -gsp13-cn.ls.apple.com -gsp4-cn.ls.apple.com -gsp4-cn.ls.apple.com.edgekey.net -gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net -gsp5-cn.ls.apple.com -gsp85-cn-ssl.ls.apple.com -gspaceteam.com -gspcc.com -gspe19-cn-ssl.ls.apple.com -gspe19-cn.ls-apple.com.akadns.net -gspe19-cn.ls.apple.com -gspe21-ssl.ls.apple.com -gspe21.ls.apple.com -gspe35-ssl.ls.apple.com -gsqx.com -gsrcu.com -gsrecv.com -gssdlv.com -gssfgk.com -gsstaf.com -gst-china.net -gstarcad.com -gstaticadssl.l.google.com -gstdt.com -gston.cc -gstonegames.com -gsxcdn.com -gsxservice.com -gsxtj.com -gsxzq.com -gsyuanquan.com -gszhuli.com -gszlyy.com -gszph.com -gt-oil.com -gt-semi.com -gt520.com -gtadata.com -gtags.net -gtan.com -gtanhao.com -gtaxqh.com -gtcedu.com -gtcim.com -gtdlife.com -gtdstudy.com -gter.net -gtfund.com -gtgres.com -gtibee.com -gtimg.com -gtja-allianz.com -gtja.com -gtjadev.com -gtjaqh.com -gtjazg.com -gtk2.com -gtlrxt.com -gtm-a1b2.com -gtm-a1b3.com -gtm-a1b4.com -gtm-a1b6.com -gtm-a1b7.com -gtm-a2b3.com -gtm-a2b4.com -gtm-a2b6.com -gtm-a2b7.com -gtm-a3b1.com -gtm-a3b5.com -gtm-a3b6.com -gtm-a3b7.com -gtm-a4b1.com -gtm-a4b4.com -gtm-a4b8.com -gtm-a4b9.com -gtm-a5b4.com -gtm-i1d6.com -gtm-i1d9.com -gtm.oasisfeng.com -gtmlufax.com -gtn9.com -gtnqk.com -gto365.com -gtobal.com -gttof2020.com -gttxidc.com -gtuanb.com -gtuu.com -gtxp2.com -gtzy123.com -gu166.com -gu360.net -guabu.com -guahao-inc.com -guahao.com -guahaoe.com -guahaowang.com -guaihaha.com -guaihaha.net -guaihou.com -guaikemov.com -guaili.org -guailuo.com -guailuzi.com -guainiuwang.com -guaiwola.com -guaixun.com -guajibao.club -guajibao.me -guajibaola.com -guajob.com -guakaoba.com -gualemang.com -guan.wang -guan5.com -guanaitong.com -guanchangcun.com -guanchao.site -guandan.com -guandang.net -guandata.com -guandianle.com -guandongphoto.com -guandongyucang.com -guang.com -guangbo.net -guangchangwu.net -guangchilieche.com -guangdauser.com -guangdianyun.tv -guangdiu.com -guangfeng.com -guanggao.com -guanggu100.com -guanggua.com -guanghe.tv -guanghuayigou.com -guangjiaohui888.com -guangjie5u.com -guangjieba.com -guangka.com -guangkatf.com -guangli88.com -guanglunshiji.com -guangminggame.com -guangmingjx.com -guangsuss.com -guanguser.com -guangwaifu.com -guangwangye.com -guangweihui.com -guangxigrc.com -guangxindai.com -guangxiyou.com -guangyaguang.com -guangyinglvxing.com -guangyuai.com -guangyv.com -guangzhitui.com -guangzhou-logistics.com -guangzhou-marathon.com -guanhuaju.com -guanjia2.com -guanjiabo.net -guanjiajf.com -guanjianfeng.com -guankou.net -guanli360.com -guanli66.com -guanlixinli.com -guanmeikj.com -guannews.com -guannin.com -guanplus.com -guanqifeier.com -guanrenjiaoyu.com -guanshangsq.com -guanshangyu.cc -guanshi.net -guanshuzw.com -guantaicn.com -guanting.com -guanvip8.com -guanwang.com -guanwangdaquan.com -guanwangshijie.com -guanwangyun.com -guanwawa.com -guanxiaokai.com -guanyiyun.com -guanzhongrc.com -guanzhu.mobi -guanzhulian.com -guapaijia.com -guardrailchina.com -guazhuan.com -guazi-apps.com -guazi.com -guazipai.com -guazistatic.com -guazixs.com -gubo.net -gubo.org -gucciblog.net -gucheng.com -gucn.com -gucun.info -gucunpark.net -gudage.cc -gudaiba.com -gudaovision.com -gudi.cc -gudianhr.com -guduodata.com -guer.org -guestops.com -gufeiposuiji.com -gufengge.org -gufengmh.com -gufengmh8.com -gufengmh9.com -guge.tw -gugeanzhuangqi.com -gugeapps.net -gugexs.com -gugong.net -gugooe.com -gugu5.com -gugud.com -guguread.com -gugutm.com -gugutown.com -guguyu.com -guguzhu.com -guhai66.com -gui333.com -gui66.com -guibi.com -guibook.com -guibuyu.org -guidechem.com -guiderank-app.com -guiderank.org -guifan110.com -guifun.com -guigu.org -guiguzhongguo.com -guiheyue.com -guihua.com -guihuayun.com -guihuazixun.com -guiji.com -guijinshu.com -guikeyun.com -guilin.la -guilinhd.com -guilinlife.com -guilintravel.com -guimengning.com -guimi.com -guimilu.com -guimipay.net -guisd.com -guitarchina.com -guitarpro.cc -guixue.com -guizeco.com -guizheng.net -gujianba.com -gujianzhixiang.com -gujiushu.com -gukaifu.com -gukaihu.com -gukun.com -gulandscape.com -gullmap.com -gulltour.com -gulou120.com -gulu.tv -gulu001.com -gulugj.com -gulutea.com -gumang.com -gumaor.com -gumo.pro -gunfans.net -guntian.com -guo.com -guo7.com -guo98.com -guoanaz.com -guoanqi.com -guoaso.com -guobaihui.com -guobaoyou.com -guobensd.com -guobiao99.com -guoboshi.com -guocaiqinghai.com -guocuijingju.com -guodafdc.com -guodegang.org -guodingnet.com -guodu.com -guodu.hk -guoers.com -guofen.com -guofenchaxun.com -guofenchaxun.net -guoguo-app.com -guohanlawfirm.com -guohead.com -guohuapharm.com -guoji.biz -guojianglive.com -guojieba.com -guojimami.com -guojing-tech.com -guojixuexiao.org -guojixumu.com -guojj.com -guojucloud.com -guojusoft.com -guokr.com -guokr.io -guokr.net -guoku.com -guolaiwanba.com -guoli.com -guoliangjie.com -guolianglab.org -guolier.com -guolin.tech -guoluonews.com -guolv.com -guomai.cc -guomii.com -guomu.com -guopc.com -guopeiwang.com -guopi8.com -guopika.com -guoping123.com -guoqinwang.com -guorentao.com -guorongfei.com -guoruiinfo.com -guoruijx.com -guoshi.com -guoshudq.com -guotv.com -guowaidiaocha.com -guowaitianqi.com -guowenku.com -guoxingjun.com -guoxinqh.com -guoxue.com -guoxue123.com -guoxuemeng.com -guoxuemi.com -guoxuwang.com -guoyang.cc -guoyanni.com -guoyi360.com -guoyice.com -guoyitangtt.com -guoyu.com -guozaoke.com -guozeyu.com -guozh.net -guozhihua.net -guozhivip.com -guozhiyouq.com -guozhongxin.com -guozi.org -guoziyx.com -gupaoedu.com -gupei.com -gupen.com -gupiao111.com -gupiao135.com -gupiao3.com -gupiao8.com -gupiaowajue.com -gupiaozhidao.com -gupowang.com -gupt.net -gupuu.com -guqiankun.com -guqiu.com -guqu.net -gurudigger.com -gurukeji.com -gush88.com -gushequ.com -gushfx.com -gushi.ci -gushi.com -gushicimingju.com -gushidaquan.cc -gushiju.net -gushimi.org -gushufang.com -gusiyuan.com -gusuwang.com -gutianfood.com -gutou.com -gutouwang.net -guwan.com -guweimin.com -guwenxs.com -guwu121.com -guxunw.com -guyouzhan.com -guyuenglish.com -guyungame.com -guzaosf.com -guzhangting.com -guzhifengds.com -guzhiwang.com -guziyy.com -gvacdn.com -gvi-tech.com -gvlocalization.com -gw-dv.net -gw-ec.com -gw2field.com -gw2sc.com -gw8888.com -gwamcc.com -gwapi.net -gwauto.com -gwclouds.net -gwdang.com -gweike.com -gwell.cc -gwidc.com -gwj-test.com -gwm-global.com -gwmfc.com -gwmsoft.com -gwname.com -gworg.com -gwoversea.com -gwyoo.com -gwyou.com -gwypxw.com -gwyzk.com -gwzwfw.com -gx-newmedia.com -gx34.com -gx8899.com -gxaedu.com -gxaj.com -gxar.com -gxb.io -gxb2b.net -gxbaidutg.com -gxbcsh.com -gxbf.net -gxbys.com -gxbyw.com -gxc-coin.com -gxcards.com -gxcic.net -gxdahua.com -gxdianhua.com -gxdmw.com -gxehiil.bar -gxeqx.com -gxfdcw.com -gxfin.com -gxfxwh.com -gxganju.com -gxgkcat.com -gxgzlm.com -gxhl.com -gxhma.com -gxhouse.com -gxhxmy88.com -gxhzxw.com -gxiang.net -gxiang.org -gxibvc.net -gxicpa.com -gxidc.com -gxind.com -gxjgdj.com -gxjtaq.com -gxjznet.com -gxkjbg.com -gxkjdns.com -gxkjec.com -gxkjjt.com -gxlcms.com -gxlxs2008.net -gxmenjin.com -gxmlyjy.com -gxmmkt.com -gxnas.com -gxnnxmhb.com -gxp.cc -gxpfyy.com -gxqcw.com -gxqs.org -gxrc.com -gxsell.com -gxshuairun.com -gxskm.com -gxsky.com -gxtodo.com -gxtstatic.com -gxw98.com -gxwmcu.com -gxwsxx.com -gxxgle.com -gxxiaotutu.com -gxxmyjs.com -gxycwy.com -gxylxtc.com -gxyxlx.com -gxzjy.com -gxzmrl.com -gxzpw.org -gy-center.net -gy-fuji.com -gy.com -gy7n.com -gy818.com -gyb086.com -gycode.com -gydongli.com -gyersf.com -gyguohua.com -gyhj.org -gyip.net -gyljc.com -gymama.com -gymbo-online.com -gymsj.com -gyncb.net -gynsh.net -gypserver.com -gyqcw.com -gyr.cc -gysk.com -gysou.com -gysq.org -gystatic.com -gytcwb.com -gytsg.net -gytsjk.com -gytsm.com -gyuancdn.com -gywlwh.com -gywygl.com -gyxdkjdl.com -gyxuan.com -gyypw.com -gyyqcloud.com -gyzfbz.net -gyzy.com -gyzyfw.com -gz-cmc.com -gz-cube.com -gz-data.com -gz-gz.com -gz-hongxin.com -gz-lodihair.com -gz-notary.com -gz-oe.com -gz-station.com -gz-tylx.com -gz007.net -gz121.com -gz12301.com -gz300.com -gz360.com -gz4399.com -gz4u.net -gz5.com -gz528.com -gz85.com -gz91.com -gz9d.com -gzasiatech.net -gzasp.net -gzate.com -gzaune.com -gzbaibian.net -gzbaozhilin.com -gzbio.net -gzbmw.com -gzbzsport.com -gzchupai.com -gzcl999.com -gzcn.net -gzcppa.com -gzcycling.com -gzdai.com -gzdaily.com -gzdata.net -gzdayang.com -gzdbx.com -gzdingyu.com -gzdinuan.com -gzdsw.com -gzdysx.com -gzenxx.com -gzesap.com -gzexpo.com -gzfilm.com -gzfsnet.com -gzfxkwl.com -gzgc120.com -gzgdwl.com -gzguard12th.com -gzgxkj.com -gzhakj.com -gzhangcha.com -gzhaoxiang.net -gzhatao.com -gzhc365.com -gzhdcs.com -gzhhr.com -gzhifi.com -gzhphb.com -gzhshoulu.wang -gzhtg.com -gzhtinfo.com -gzhuake.cc -gzhxpw.com -gzhzcj.com -gzhzgwyw.com -gzidc.com -gzif.net -gzittc.net -gzj568.com -gzjingsha.com -gzjisikj.com -gzjkzzp.com -gzjpad.com -gzjqd.com -gzjtjx.com -gzjtjy.com -gzjunyu.com -gzjuqi.com -gzjykj.com -gzjzc.com -gzkz88.com -gzlingli.com -gzlujiao.com -gzlz307.com -gzlzfm.com -gzmama.com -gzmath.com -gzmediaclick.com -gzmiyuan.com -gzmjhzs.com -gzmri.com -gzmtr.com -gzmxol.com -gzncstudios.com -gznemo.com -gznet.com -gzngn.com -gznote.com -gznxbank.com -gzpeite.com -gzpinda.com -gzpma.com -gzprobig.com -gzpts.com -gzpy120.net -gzqbd.com -gzqiche.com -gzqunsheng.com -gzqwkj.com -gzqxxz.net -gzrishun.com -gzrmw.com -gzrobot.com -gzrobots.com -gzrsa.com -gzshandi.com -gzshangshan.net -gzshujuhui.com -gzsjyzx.com -gzsjzx.com -gzsmove.com -gzspeedtest.com -gzstv.com -gzsuiti.com -gzsums.net -gzsww.com -gzsy06.com -gzsy07.com -gzszgas.com -gzszk.com -gztaiyou.com -gztcdj.com -gztfgame.com -gzthrc.com -gztopkt.com -gztour.org -gztv.com -gztwkadokawa.com -gztxedu.com -gztz120.com -gzuc.net -gzuni.com -gzw.net -gzwanbao.com -gzwangshang.com -gzwarriortech.com -gzwcds.com -gzwcjs.com -gzweicai.com -gzweix.com -gzwot.com -gzwrit.com -gzxdf.com -gzxf35.com -gzxftz.com -gzxhdyc.com -gzxiaopeng.com -gzxict.com -gzxidu.com -gzxjzc.com -gzxszf.com -gzxulang.com -gzxwtjy.com -gzycdy.com -gzyct.com -gzyeah.com -gzyitop.com -gzylxixin.com -gzyouai.com -gzysbpay.com -gzyszy.com -gzyucai.com -gzzbgs.com -gzzg.org -gzzhitu.com -gzzkzsw.com -gzzlfw.com -gzzlgame.com -gzzoc.com -gzzongsi.com -gzzoo.com -gzzqy.net -gzzswy.com -gzzsxxw.com -gzzy04.com -gzzy05.com -h-college.com -h-five.com -h-heguo.com -h-sea.net -h-shgroup.com -h-ui.net -h-world.com -h-zl.net -h0591.com -h0758.net -h0f.me -h1bz.com -h231.com -h2ero.com -h2ex.com -h2os.com -h2vm.com -h3c.com -h3c.com.hk -h3dns.net -h3ue2s.com -h3yun.com -h4.cc -h41s.com -h4399.com -h4kdxs.com -h5-share.com -h5-x.com -h5.net -h5120.com -h51h.com -h55u.com -h5abc.com -h5aiwan.com -h5anli.com -h5app.com -h5avu.com -h5ay.com -h5data.com -h5ds.com -h5eco.com -h5gamecdn.club -h5in.net -h5jun.com -h5king.com -h5ky.com -h5le.com -h5mc.com -h5mgd.com -h5mota.com -h5mugeda.com -h5no1.com -h5po.com -h5shuo.com -h5tpl.com -h5uc.com -h5war.com -h5youxi.com -h5yunban.com -h6295.com -h6688.com -h6969.com -h6app.com -h7ec.com -h8jx.com -ha97.com -haawking.com -habadog.com -habbygames.com -hac-ker.net -hack-gov.com -hack0nair.me -hack50.com -hack520.com -hackav.com -hackcn.net -hackdig.com -hackerav.com -hackernews.cc -hackertalk.net -hackhome.com -hackhp.com -hackhw.com -hacking-linux.com -hacking8.com -hackline.net -hacknical.com -hackp.com -hackpascal.net -hackrf.net -hackroad.com -hacori.com -hacpai.com -haczjob.com -hadax.com -hadobi.com -hadsky.com -hadyang.com -haers.com -haguan.com -haguotu.com -haguworld.com -haha168.com -haha33.com -haha360.com -haha365.com -haha9911.com -hahack.com -hahadiaoyu.com -hahaha365.com -hahait.com -hahasou.com -hahawen.com -hahayouxi.com -hahour.com -hahtlyy.com -hai0.com -haiana.com -haianbank.com -haianedu.net -haianw.com -haibao.com -haibaobaoxian.com -haibaoyl.com -haibaoyouxi.com -haibeinews.com -haibian.com -haibog.com -haiboinvest.com -haiboyi.com -haicent.com -haichufang.com -haici.com -haicj.com -haidaibao.com -haidaoteam.com -haidaotrip.com -haidaozhu.com -haidii.com -haidilao.com -haidilao.net -haidilao.us -haidimao.com -haidubooks.com -haier.com -haier.hk -haier.net -haiershequ.com -haierubic.com -haieruplus.com -haifangbest.com -haige.com -haigeek.com -haigui001.com -haiguime.com -haijia.org -haijiangzx.com -haijiaonet.com -haijincang.com -haijingfang.cc -haiketrip.com -hailiangedu.com -hailiangip.com -haililiang.com -hailingke.com -hailinzeng.com -hailiys.com -hailuowu.com -haima.me -haima001.com -haimacloud.com -haimawan.com -haimayisheng.com -haimazhuang.com -haimi.com -haimii.com -haiming-cn.com -haimini.com -haina.com -hainachuan.org -hainan.com -hainan.net -hainanairlines.com -hainancom.com -hainancp.com -hainandj.com -hainanfp.com -hainanfz.com -hainanjiuzi.com -hainanparadise.com -hainanpc.net -hainic.com -haining.cc -haining.tv -hainingnews.net -hainiubl.com -hainiuxy.com -hainuotech.com -haiqingyanyu.com -haiqisoft.com -haiqq.com -hair8.net -hairbobo.com -hairunmedia.com -hairunpictures.com -haisapan.com -haisenyouxi8.com -haisheninfo.com -haisheteam.com -haishisheji.com -haishui.cc -haitaibrowser.com -haitaichina.com -haitang123.vip -haitao.co -haitao.com -haitao369.com -haitao8.com -haitaocheng.com -haitaohou.com -haitaoing.com -haitaoit.com -haitaoj.com -haitaolab.com -haitaopd.com -haitaoqq.com -haitaoshen.com -haitaotong.com -haitaozu.org -haitianhome.com -haitl.com -haitongjiaoyu.com -haitou.cc -haitou360.com -haitoujia.com -haitudy.com -haituie.com -haitum.com -haituncun.com -haitundr.com -haitunshenghuo.com -haituntui.com -haitunvoice.com -haituoqi.com -haitutech.com -haiwailoushi.com -haiwaimoney.com -haiwaioo.com -haiwaituiguang.com -haiwaiyou.com -haiwaiyoujia.com -haiwanli.com -haiwanxinxi.com -haiweili.com -haiwell.com -haiwen-law.com -haixiahao.com -haixianlai.net -haixice.com -haixindichan.com -haixinews.com -haixiulive.com -haixiumv.com -haixiutv.com -haixiuvv.com -haixue.com -haixunpr.org -haixunw.com -haiyi701.com -haiying168.com -haiyingshuju.com -haiyue.info -haiyuhe.com -haiyun.me -haiyunx.com -haiyusoft.com -haizhangs.com -haizhixing.net -haizhlink.com -haizhoumo.com -haizhuyx.com -haizitong.com -haizol.com -haku77.com -halade.com -halaha.com -halead.com -halffashion.com -halfrost.com -halixun.com -halloar.com -hallofix.com -hallotw.com -halo.moe -halomobi.com -haluoha.com -hamanw.com -hambut.com -hamir.net -han-tang.cc -han66.com -hanamichi.wiki -hanbaiji.com -hanbaoying.com -hanboshi.com -hanchao9999.com -hancloud.com -hanclouds.com -hand-china.com -handanjob.com -handanw.com -handanyz.com -handbb.com -handday.com -handdiy.com -handfunds.com -handian027.com -handone.com -handu.com -handuyishe.com -hanergy.com -hanergymobileenergy.com -hanfan.cc -hanfei.net -hanfengcars.com -hanfugong.com -hangge.com -hanghaimeng.com -hanghang666.com -hanghangcha.com -hangjiayun.com -hangkong.com -hangmiwang.com -hangomart.com -hangowa.com -hangpu-topsys.com -hanguangbaihuo.com -hanguopai.com -hanguoyou.org -hanguu.com -hangxinyiqi.xin -hangye114.net -hangye365.com -hangyjx.com -hangzhiqiao.com -hangzhoufcw.com -hangzhouluohu.com -hangzhoutianqi114.com -hanhai.net -hanhaiqikan.com -hanhande.com -hanhande.net -hanhuazu.cc -hanjianbing.org -hanjiaying.com -hanjie.biz -hanjjl.com -hanju-tv.org -hanjucc.com -hanjudao.com -hanjutiantang.com -hanjutv.com -hanjutvaa.com -hankeer.org -hankewins.com -hanking.com -hankunlaw.com -hanlefang.net -hanlei.org -hanmadiancan.com -hanmaker.com -hanmanapp.com -hanmanzj.co -hanmanzj.org -hanmeilin.com -hanmi520.com -hannor.com -hanqiweb.co -hanqiweb.com -hanqiweb.net -hanqiweb.red -hanshijiaoye.com -hanshow.com -hanshuliang.com -hansight.com -hansiji.com -hansme.com -hanspub.org -hansrobot.com -hansuku.com -hantang59.com -hantangrx.com -hantangxintong.com -hanterry.com -hantinghotels.com -hanvitools.com -hanvon.com -hanvonmfrs.com -hanvontouch.com -hanweb.com -hanweimetal.com -hanxinbank.com -hanxinsheng.com -hanyanseed.com -hanyi.studio -hanyingtv.com -hanyou.com -hanyouwang.com -hanyucar.com -hanyuehui.site -hanyurumen.com -hanzgrp.com -hanzhifeng.com -hanzhong123.com -hanzify.org -hao-sheng-yi.com -hao.ac -hao.wang -hao007.net -hao0202.com -hao120.cc -hao123-hao123.com -hao123.com -hao123.com.sg -hao123img.com -hao1258.com -hao163.com -hao168.cc -hao181.com -hao184.com -hao1970.com -hao1996.com -hao1cm.com -hao22.com -hao222.com -hao224.com -hao24.com -hao245.com -hao268.com -hao315.cc -hao315.com -hao315.tv -hao3399.com -hao352.com -hao360.com -hao378.com -hao394.com -hao568.com -hao6.com -hao61.net -hao661.com -hao695.com -hao7188.com -hao753.com -hao76.com -hao86.com -hao8dai.com -hao9669.com -hao974.com -haoad.org -haoamc.com -haoayi.xyz -haobanyi.com -haobiaoke.com -haobtc.com -haocai.com -haocai1688.com -haocai777.com -haochang.tv -haochangyou.com -haocheedai.com -haochi123.com -haochu.com -haodaibao.com -haodanku.com -haodaquan.com -haodeplus.com -haodevps.com -haodewap.com -haodewap.net -haodf.com -haodf.org -haodiany.com -haodiaoyu.com -haodingdan.com -haodiy.net -haodns123.cc -haodns999.cc -haodongdong.com -haodou.com -haoduofangs.com -haoduojiaju.com -haoduorou.net -haoest.com -haofajz.com -haofanben.com -haofang.net -haofang365.com -haofang5.com -haofangkankan.com -haofaxing.com -haofenxiao.net -haofly.net -haofz.com -haoge500.com -haogj8.com -haogongzhang.com -haogoshop.com -haogow.com -haogu114.com -haohaizi.com -haohan-data.com -haohanfw.com -haohanguo.com -haohanseo.com -haohaotuan.com -haohaowan.com -haohaoxiu.com -haohaoyx.com -haohaozhu.com -haohaozhu.me -haohead.com -haohiyou.com -haohongfan.com -haoht123.com -haohtml.com -haohuan.com -haohuoa.com -haoii123.com -haoinvest.com -haoiyon.com -haoiyong.com -haoji.me -haojiameng.net -haojiaolian.com -haojiaolian.org -haojing.org -haoju55.com -haojue.com -haojue163.com -haokan123.com -haokan5.com -haokan58.com -haokanbu.com -haokanzhan.com -haokecheng.com -haokejie.com -haokongbu1.com -haokoo.com -haoku.net -haolangtech.com -haolawyer.com -haole.com -haolexiang.com -haolezen.com -haolietou.com -haoliners.net -haolints.com -haoliv.com -haolizi.net -haolvlv.com -haolyy.com -haomagujia.com -haomaimrm.com -haomaishou.com -haomaiyi.com -haomaku.com -haomee.net -haomeili.net -haomijie.com -haomingr.com -haommn.com -haomove.com -haomugua.com -haonames.com -haonic.com -haonongzi.com -haopeixun.com -haopianyi.com -haopinku.com -haoq.tv -haoqiao.com -haoqicat.com -haoqikan.com -haoqixingstem.com -haoqq.com -haoqtv.com -haoquandudu.com -haorc.com -haoread.com -haorencai.net -haorendao.com -haorenka.me -haorooms.com -haoseals.com -haosenchina.com -haoservice.com -haosf.com -haosf5.com -haoshanpu.com -haoshanxi.com -haoshengla.com -haoshengmall.com -haoshenqi.com -haoshetou.net -haoshici.com -haoshipin123.com -haoshiqi.net -haoshsh.com -haoshunjx.com -haoshuo.com -haosijia.com -haosijia.vip -haosix.com -haosou.com -haostay.com -haotb.com -haote.com -haotehui.com -haotianhuyu.com -haotihui.com -haotijin.com -haotoufa.com -haotougao.com -haotougu.com -haotu.net -haotui.com -haotukankan.com -haotxt.com -haouc.com -haowa.com -haowaicaijing.com -haowandeni.com -haowanyou.com -haoweiguang.me -haoweishow.com -haowen100.com -haoword.com -haowu.com -haowu.info -haowu.link -haowui.com -haowuyunji.com -haowuyx.com -haoxg.net -haoxiake.com -haoxiang.org -haoxiaoguo.net -haoxipu.com -haoxitong.com -haoxiyou.com -haoxue.com -haoxuetang99.com -haoxxwang.com -haoxyx.com -haoyangmao8.com -haoyao.com -haoychuang.com -haoyde.com -haoyhq.com -haoyisheng.com -haoyishui.com -haoyong.cc -haoyongapp.com -haoyouqian.com -haoyouyinxiang.com -haoyu.love -haoyuanxiao.com -haoyun13.com -haoyun56.com -haoyunbb.com -haoyunma.com -haoyunmom.com -haoyy168.com -haozai120.com -haozaishop.com -haozhai.com -haozhanhui.com -haozhebao.com -haozhegai.com -haozhexie.com -haozhuangji.com -haozhuodao.com -haozi.org -haozi.xyz -haozip.com -haozjj.com -haozu.com -haozuojia.com -hapi123.net -hapimall.com -hapingapp.com -hapiweb.com -haplat.net -happigo.com -happy24uk.com -happycamp.cc -happycaoyue.com -happychang.net -happycodeboy.com -happyelements.com -happyev.com -happyjuzi.com -happylivelife.com -happymath2009.org -happymmall.com -happynear.wang -happyphonewoods.com -happypingpang.com -happyplaygame.net -happyroll.net -happysky.org -happytrave.com -happyux.com -happywalk.net -happyya.com -hapying.com -haqu.com -harbin-electric.com -harborhousehome.com -hardkr.com -hardspell.com -hareric.com -harlanc.vip -harmay.com -harmight.com -harmony3.com -harmony4s.com -harmonyos.com -haroldrandom.me -harrynull.tech -harrypottermagicawakened.com -harvestcm.com -harvestpawn.com -hasea.com -hasee.com -hasee.net -hashcoding.net -hashfish.net -hashnest.com -hasndq.com -hasoltd.com -hassbian.com -hat358.com -hatdot.com -hatfav.com -hatlonely.com -hatm.vip -hatoem.com -haval-global.com -have.ink -havefun.im -hawbel.com -hax18.com -haxiu.com -haxwx.cc -hayeen.com -hayseen.com -hazq.com -hb-green.com -hb-hengda.com -hb-ly.com -hb-ws.com -hb-wtw.com -hb-zikao.com -hb10000.com -hb10000sale.com -hb114.cc -hb12333.com -hb189.cc -hb189.mobi -hb30.com -hb3rm.com -hb6.org -hb96568.com -hbadei.com -hbanbao.com -hbaowosigd.com -hbap.net -hbbaidu.com -hbbidding.com -hbbsw.vip -hbbutler.com -hbbxpx.com -hbbzyys.org -hbcccm.com -hbccp.org -hbccpit.org -hbcdc.com -hbcg.cc -hbchen.com -hbciqtc.com -hbcjaq.com -hbcjh.net -hbcjlq.com -hbcjw.com -hbcjxx.com -hbcms.com -hbcofco.com -hbcourt.org -hbcsche.com -hbcszb.com -hbctjk.com -hbcyclub.com -hbdangyang.com -hbddrn.com -hbdfdh.com -hbdmia.com -hbdns.org -hbdthy.com -hbdtjqj.com -hbdzcg.com -hbecsc.com -hbeducloud.com -hbekt.com -hbepec.com -hbexqt.com -hbez.net -hbezzx.com -hbfie.org -hbfire.com -hbfnnyw.com -hbfootball.com -hbfy.com -hbfyhb.com -hbfzb.com -hbgajg.com -hbgdwl.com -hbglky.com -hbgonglue.com -hbgrb.net -hbgsetc.com -hbguanwei.com -hbgwy.org -hbgzh.com -hbha027.com -hbhande.com -hbhaolinju.com -hbhaoyi.com -hbhcdn.com -hbhdhd.com -hbhm.net -hbhtcm.com -hbhtxx.com -hbhxbb.com -hbhxqq.com -hbhxrff.com -hbhyychem.com -hbhz.net -hbicpa.org -hbidc.net -hbifeng.com -hbinitiate.com -hbjcgy.com -hbjdxt.com -hbjfscc.com -hbjhc.com -hbjhpx.com -hbjhyh.com -hbjianzhuwang.com -hbjimin.com -hbjinnong.com -hbjjrb.com -hbjk114.com -hbjkjt.com -hbjlhw.com -hbjsinfo.com -hbjubao.com -hbjxjy.org -hbjxjyw.com -hbjxym.com -hbjz12333.com -hbjzx.com -hbjzzx.com -hbkqw.com -hbksw.com -hbky.com -hbla.net -hblady.com -hblccy.com -hblijiehb.com -hbliti.com -hblszq.com -hbltzb.com -hblykj.com -hbm360.com -hbmes.com -hbmmtt.com -hbnews.net -hbnewsoft.com -hbneww.com -hbooker.com -hbousite.com -hbpangu.net -hbpengxi.com -hbpic5.com -hbpictures.com -hbprjx.com -hbptzsbw.com -hbpukang.com -hbpygt.com -hbqnb.com -hbqnxy.com -hbqtgg.com -hbqyj.org -hbqyxy.com -hbrbmedia.com -hbrc.com -hbrcgd.com -hbrchina.org -hbrchinese.org -hbrd.net -hbrebond.com -hbrfxh.com -hbrjcspx.com -hbrqygr.com -hbruicai.com -hbryzx.net -hbrzkj.com -hbs-nd.com -hbsantak.com -hbsccloud.com -hbsdenterprise.com -hbsem.com -hbseo.com -hbsfgk.org -hbshbsh.com -hbshgzx.com -hbshls.com -hbsia.org -hbskw.com -hbslncy.com -hbslndx.com -hbsmservice.com -hbsmw.com -hbsocar.com -hbsoft.net -hbsogdjt.com -hbspcar.com -hbsql.com -hbssfw.com -hbssspot.com -hbsszx.com -hbstars.com -hbsti.com -hbsunlink.com -hbswkj.com -hbswnews.com -hbsydw.org -hbszfw.com -hbsztv.com -hbszzd158.com -hbszzdlssz.com -hbszzk.com -hbszzx.com -hbtcmu.com -hbtcw.com -hbtengniu.com -hbtobacco.com -hbtxbaidu.com -hbtybio.com -hbtycp.com -hbwh.net -hbwhgs.com -hbwhjj.com -hbwhrd.org -hbwjs.com -hbwlyh.com -hbww.org -hbxdf.com -hbxhxkj.com -hbxiyuan.com -hbxtzy.com -hbxyairport.com -hbxytc.com -hbyczk.com -hbyeson.com -hbyidu.com -hbyjfs.com -hbynet.net -hbyoyo.com -hbyspx.com -hbzaxh.com -hbzbw.com -hbzgjx.com -hbzhan.com -hbzhjxzz.com -hbzhonghai.com -hbzjzb.com -hbzknet.com -hbzkw.com -hbzkzx.com -hbzkzxw.com -hbzncz.com -hbzqzx.com -hbzsb.com -hbzuojia.com -hbzxtyq.com -hbzywh.com -hc-byq.com -hc-cdn.com -hc-software.com -hc01.com -hc121.com -hc23.com -hc360-inc.com -hc360.com -hc39.com -hc79.com -hc9.com -hcbbs.com -hcbus.com -hcbuy.com -hcc11.com -hccpcba.com -hcdamai.com -hcdyhr.com -hcgroup.com -hch518.com -hchbblg.com -hchezhu.com -hchlidc.com -hcicloud.com -hcjsk120.com -hcl100.com -hcmiraefund.com -hcocoa.com -hcpzdm.com -hcrjy.com -hcshebao.com -hcsilk.com -hcsindex.org -hcsip.com -hcstzz.com -hctxf.org -hcty.com -hcw.so -hcwiki.com -hcx123.com -hcx99.com -hcxcw.com -hcxy6.com -hcyacg.com -hczc.com -hczhifu.com -hczxmr.com -hczypay.com -hd-tvb.com -hd.gg -hd00.com -hd027.com -hd123.com -hd123.net -hd12333.com -hd199.com -hd199.net -hd288.com -hd3p.com -hd88599.com -hdavchina.com -hdb.com -hdbaichuan.com -hdchd.cc -hdcolorant.com -hdd-group.com -hddhhn.com -hddid.com -hddznet.com -hdem12.com -hdfimg.com -hdgogogo.com -hdh.im -hdhgzx.com -hdhospital.com -hdhui.com -hdingsheng.com -hdj.me -hdjay.com -hdjr.org -hdjwww.com -hdlcdns.com -hdlchina.com -hdletv.com -hdlogo.com -hdltest.com -hdmayi.com -hdmnw.com -hdmooncake.com -hdmtv168.com -hdmv.org -hdpfans.com -hdpyqa.com -hdpyqc.com -hdpyqd.com -hdscg.com -hdsdyyy.com -hdslb.com -hdslb.net -hdtgtm.com -hdthjy.com -hdtmedia.com -hduofen.com -hdurl.me -hduzplus.xyz -hdwbsaas.com -hdyouxi.com -hdypw.com -hdzp.com -hdzxyy.com -he-nan.com -he-one.com -he11oworld.com -he1j.com -he2d.com -he9630.com -heacn.net -head-way.com -headns.com -headphoneclub.com -healthcareol.net -healthjd.com -healthr.com -healthych.com -healthyun.com -hearstchina.com -heart-game.com -heartide.com -heartinsti.com -hebangdianzi.com -hebaodai.com -hebauto.com -hebbank.com -hebbr.com -hebca.com -hebcar.com -hebchkj.com -hebcsr.org -hebdh.com -hebei.cm -hebeidns.com -hebeifeimeng.com -hebeigwy.org -hebeijd.com -hebeinongzi.com -hebeisy.com -hebeiyichen.com -hebeizhouji.com -hebgtjt.com -hebiw.com -hebjxw.com -hebl.name -hebmusic.com -hebnx.com -hebolaw.com -hebotc.com -hebradio.com -hebsg.net -hebshanggu.com -hebtv.com -hebxtjx.com -hec-al.com -hec-changjiang.com -hecai360.com -hecaijing.com -hecdn.com -hecdn.net -hechaku.com -hechangquan.com -hechengbb.com -heclouds.com -heconns.com -hecpharm.com -hedaotang.net -hedgehogrock.com -heduibu.com -heduwang.com -heeeeeh.com -heerit.com -hefei.cc -hefeizp.com -hegii.com -hegouvip.com -hegsryjq.com -heheba.com -hehesheng.com -heheshouyou.com -hehesy.com -hehewan.com -hehouse.com -hei7.net -heibai.org -heibaimanhua.com -heicha.com -heicheng51.com -heidiankeji.com -heigaga.com -heiguang.com -heiguang.net -heiguisf.com -heijiao.net -heijiazi.com -heijin.org -heikexs.com -heilanhome.com -heilaot.com -heilei.com -heilqt.com -heiluo.com -heima.com -heima8.com -heimaba.com -heimabao.com -heimac.net -heimacode.com -heimadao.com -heimadata.com -heimai666.com -heimajijin.com -heimancc.com -heimaol.com -heimaoseo.org -heimaoseojishu.com -heimaoshe.com -heimayijiancai.com -heimaying.com -heimeiai.com -heimeng.net -heimizhou.com -heiniubao.com -heinote.com -heirenlei.com -heisener.com -heisha.net -heishao.net -heishenhua.com -heisiwang.com -heitao.com -heitao.me -heitao2014.com -heixi.com -heiyaheiya.com -heiyan.com -heiyan.la -heiyan.org -heiyange.com -heiyanimg.com -heiyanwang.com -heiying.cc -heiyuewan.com -heiyunxitong.com -heizhushoes.com -heizuan.com -hejiajinrong.com -hejies.com -hejinchuitou.net -hejiu2016.com -hejizhan.com -hejun.com -heketai.com -hekouxin.com -heku.org -hel168.com -helensbar.com -helianhealth.com -helight.info -helijia.com -helingqi.com -helishi.net -helishun.com -heliuyan.com -heliweb.net -helixcommunity.org -hello-code.com -hello-inc.com -hello-mom.com -hello1010.com -hellobanma.com -hellobi.com -hellobike.com -hellobiye.com -hellobtc.com -hellocq.net -hellodive.com -hellof1.com -helloflask.com -hellogame.net -hellogithub.com -hellogslb.com -hellohuohu.com -helloimg.com -hellojava.com -hellokang.net -hellokid.com -hellokidvip.com -hellomeowlab.com -hellonitrack.com -helloradio.org -hellorf.com -hellotalk8.com -helloweba.com -helloweba.net -hellowebfont.com -helloyao.com -helong.info -help-hope.org -helper-sys.com -helperaddress.com -helplib.com -helpmeng.com -helpton.com -heluowenhua.net -hemabt.com -hemadaili.com -hemajy.com -hemamax.com -hemaos.com -hemayouxi.com -hemayun.com -hemayx.com -hempelgroup.com -hen360.com -henan100.com -henanart.com -henanfucai.com -henangeli.com -henanjianling.com -henanjubao.com -henanlvyi.com -henanpige.com -henansenli.com -henanxiaochi.com -henanyouth.com -henbt.com -hencin.com -hencoder.com -hengancaifu.com -hengannet.com -hengbogroup.com -hengcaotang.com -hengchang6.com -hengdayun.com -hengdianfilm.com -hengdianworld.com -hengdongli.com -hengdu.cc -hengdulaw.com -hengfujz.com -hengjiafish.net -hengqian.com -hengqijy.com -hengqikuaiji.com -hengshenggongyi.net -hengshuilaobaigan.net -hengtai-law.com -hengtiansoft.com -hengtianyun.com -hengwenzhendangqi.com -hengxiangtaji.com -hengxinjinshu.com -hengyan.com -hengyer.com -hengyidai.com -hengyoux.com -henhaoji.com -henjay724.com -henkuai.com -henmimang.com -henri.ren -henxisoft.com -henzan.com -henzanapp.com -hepaidai.com -hepalink.com -hepan.com -hepan.org -hepawang.com -hepmall.com -hepost.com -hequnshebei.com -hercity.com -hercules-micro.com -herdsric.com -here120.com -hereisdownload.com -hermesguanwang.com -heroad-data.com -heroestactics.com -heroicyang.com -herosanctuary.com -heroskate.com -herostart.com -herowind.com -heroworld.net -hertzhu.com -heshui.com -hetao101.com -hetaoa.com -hetaoapis.com -hetaobiancheng.com -hetaocdn.com -hetaointernal.com -hetaolin.com -hetianyu.cc -hetusoft.com -heu8.com -heweather.com -heweather.net -hewebgl.com -hewei.in -hexagonsemi.com -hexianrc.com -hexiaoxiang.com -hexicomtech.com -hexie168.com -hexilai.com -hexindai.com -hexinli.org -hexmeet.com -hexun.com -heyang.cc -heyang365.com -heycan.com -heycode.com -heydayinfo.com -heygugu.com -heyguo.com -heyi.com -heyinguanli.com -heymore.com -heyou51.com -heyoutz.com -heyplus.com -heyreport.com -heyria.com -heytap.com -heytapcs.com -heytapdownload.com -heytapimage.com -heytapmobi.com -heytea.com -heyuan5.com -heyuyhw.com -heywoodsminiprogram.com -heywow.net -hez70.com -heze.cc -hezebus.com -hezeribao.com -hezhenzi.com -hezhonglaw.com -hezhoubbs.com -hezi.com -hezibook.com -hezibuluo.com -hezxs.com -hf-dhj.com -hf-iflysse.com -hf10000.com -hf12345.vip -hf365.com -hf777.com -hfbaogao.com -hfbeta.com -hfbz.com -hfcyh.com -hffund.com -hfgjj.com -hfhouse.com -hfhyw.com -hfi-health.com -hfjy.com -hfkeheng.com -hfkj0754.com -hfkktt.com -hflwy.com -hflz.com -hfmama.com -hfmckj.com -hfmoney.com -hfqzdz.com -hfray.com -hfrc.net -hfrcbc.com -hfrqh.com -hfrsggff.com -hfsava.com -hfsid.com -hfssw.com -hfswcz.com -hftfund.com -hftogo.com -hftycj.com -hfwx.net -hfx.link -hfx.net -hfyestar.com -hfyjgg.com -hfykd.com -hfyt365.com -hg-daigou.com -hg-z.com -hg12333.com -hg1946.vip -hg28a7.com -hg32x.com -hg5177.com -hg5677.org -hg58.pw -hg6262.biz -hg67822.com -hg707.com -hg7799.net -hg87.com -hg8880.org -hga833.cc -hga994.com -hgaas.com -hgame.com -hgbang.com -hgcyh.com -hgdgcxy.com -hgdjw.net -hgfdcscxx.com -hgfdrf.com -hghhh.com -hgimage.com -hgitv.com -hgjart.com -hgjt.net -hgjx.com -hglaser.com -hgmai.com -hgmhu.com -hgmmav.com -hgnc.net -hgvip804.com -hgy413.com -hgyjs.com -hgyx.cc -hgzdq.com -hgzk.com -hgzkb.com -hgzrc.com -hh-gltd.com -hh010.com -hh04.com -hh1488.com -hhailuo.com -hhbg123.com -hhcmjt.com -hhcn.com -hhczy.com -hhdx120.com -hhfbqzgs.com -hhfg.org -hhfxw.com -hhgslb.com -hhh233.net -hhh885.com -hhhai.com -hhhoo.com -hhhstz.com -hhhtnews.com -hhhtscf.com -hhjtwl.com -hhl1916.com -hhmm0.com -hhpj.net -hhrcard.com -hhrdc.com -hhrhl.vip -hhrtu.com -hhtravel.com -hhvv.com -hhxdkj.com -hhxin.com -hhycdai.com -hhycdk.com -hhygame.com -hhygames.com -hhyungu.com -hi-54.com -hi-books.com -hi-gtd.com -hi-lead.com -hi-linux.com -hi-roy.com -hi-spider.com -hi0755.net -hi138.com -hi1718.com -hi2000.com -hi2000.net -hi8090.com -hiapk.com -hiavr.com -hibea.com -hibixin.com -hibt.net -hibtc.org -hibuzz.net -hiby.com -hibymusic.com -hic.cloud -hicamelia.com -hicat.net -hicdma.com -hiceon.com -hichao.com -hichina.com -hicling.com -hicloud.com -hiconey.com -hicoo.net -hicosmo.com -hicp.net -hicss.net -hiczp.com -hidesigncloud.com -hideystudio.com -hiditie.com -hidva.com -hienshi.com -hiersun-hdp.com -hiersun-ido.com -hiersun-zuanjindian.com -hiesquire.com -hifi168.com -hificat.com -hifidiy.net -hififf.com -hifime.net -hifini.com -hifiok.com -hifishes.com -hifishuo.com -hifiveai.com -hifly.mobi -hifly.tv -hifmcloud.com -hifpga.com -hifreud.com -hifuntv.com -higame123.com -higeshi.com -highdigitizing.com -highgg.com -highgo.com -highlightoptics.com -highlm.com -highsharp.com -hightopo.com -highwayguitar.com -higon.com -higrid.net -hihell.com -hihocoder.com -hihonor.com -hihope.org -hiido.com -hiigame.net -hiimii.com -hiing.net -hijiaoshi.com -hijoys.com -hikailink.com -hikcreate.com -hiklife.com -hikoon.com -hikops.com -hikparking.com -hikrobotics.com -hikstor.com -hikvision-jl.com -hikvision.com -hikyun.com -hilarryxu.com -hiliad.com -hilistentome.com -hillstonenet.com -hillyton.com -hiloong.com -hilunwen.com -himaker.com -himawari-japan.com -himeidian.com -himengyou.com -himigame.com -himiku.com -himofi.com -himovie.net -himy2.com -hinabian.com -hinavi.net -hindlish.com -hinew8.com -hinpy.com -hiopensource.com -hioug.com -hioyun.com -hiparking.com -hipcam.net -hiphop8.com -hipiao.com -hippoanimation.com -hippter.com -hipring.net -hipu.com -hiram.wang -hirede.com -hiregistry.com -hireye.com -hiroop.com -hirosspac.com -hirossz.com -his.sh -hiscene.com -hisense-home.com -hisense-plaza.com -hisense-syxs.com -hisense.com -hisensehitachi.com -hisensesmarthome.com -hishendeng.com -hisilicon.com -hisiphp.com -hislota.com -hismarttv.com -hisoft.com -hisofts.com -hisonracking.com -hisports.com -histarter.com -histriver.com -hisupplier.com -hit180.com -hitachi-helc.com -hitalk.com -hitalkers.com -hitevision-solution.com -hitfmfans.com -hitgk.com -hitnology.com -hitokoto.us -hitouch.com -hitsword.org -hitui.com -hitutu.com -hitux.com -hituyu.com -hitv.com -hiuo08jnsoo00bytu32shcs555aa1564dvfguiio0o0885432.com -hivecn.net -hiveview.com -hivi.com -hivictor.net -hiwafer.com -hiwbb.com -hiwebgl.com -hiwechats.com -hiwemeet.com -hiwenku.com -hiwifi.com -hiworld.com -hixgo.com -hixianchang.com -hixiaoman.com -hiyd.com -hiyongche.com -hiyouib.com -hiyouqu.com -hizg.org -hizhu.com -hizip.net -hizj.net -hizuan.net -hizyw.com -hj-mail.com -hj.vc -hj776.com -hjagent.com -hjapi.com -hjbbs.com -hjbxw.com -hjchee.com -hjcjifen.com -hjclass.com -hjd123.com -hjdict.com -hjdns.com -hjdns.net -hjdzn.com -hjenglish.com -hjgcd.com -hjgjmy.com -hjhanjy.com -hjhrcloud.com -hjiesuan.com -hjjg.com -hjjh.com -hjjs.org -hjkhjkl.com -hjmdjd.com -hjplw.com -hjpp.net -hjr-exchange.com -hjsjs.com -hjtag.com -hjwblog.com -hjwsky.com -hjwxcps.com -hjxsjx.com -hjy1314.com -hjyanxue.com -hjyedu88.com -hjygame.com -hjyl.org -hjz518.com -hk-island.hk -hk-vstart.com -hk.uy -hk5.cc -hk515.net -hkaco.com -hkance.com -hkance.xyz -hkanews.com -hkbchina.com -hkcd.com -hkcgart.com -hkcna.hk -hkcts.com -hkctshotels.com -hkctsmembers.com -hkfc.hk -hkfe.hk -hkfljt.com -hkgcr.com -hkhanji.com -hkjapp.com -hkkaoyan.com -hkklock.com -hkkuaiyixiu.com -hklego.com -hklongbang.com -hkm168.com -hkmjd.com -hkpanamie.com -hkpep.com -hkproperty.com -hkqbh.com -hkscxh.com -hkskyloyd.com -hkstv.tv -hkt4.com -hktzschool.com -hkvisa.net -hkvisen.com -hkwb.net -hkxbjt.com -hkxen.com -hkyykq.com -hkzcdn.com -hkzlcm.com -hl-brushes.com -hl95.com -hlapi.com -hlbeixiu.com -hld-marathon.com -hldbtv.com -hldgp.com -hldnews.com -hldqjx.com -hldsjsjx.com -hlej.com -hlfssh.com -hlgad.com -hlgdata.com -hlgnet.com -hlgnet.net -hlhmf.com -hlideal.com -hlj-aptech.com -hljjjb.com -hljjxrc.com -hljjytkj.com -hljnzy.net -hljpost.com -hljradio.com -hljrcc.com -hljsfjy.com -hljszjxhw.com -hljtv.com -hljucm.net -hljyestar.com -hljyqnj.com -hljzhenpin.com -hlkncse.com -hlmseo.com -hlnmg.com -hloong.com -hlpretty.net -hlread.com -hlsdq.com -hlsm.net -hltcy.com -hlwidc.com -hlxsykd.com -hlxxq.com -hlxy.com -hly.com -hlybar.com -hlytec.com -hlyy.in -hlzq.com -hlzsgw.com -hm-3223.net -hm-yc.com -hm120.com -hm16888.net -hm648.com -hm86.com -hmecw.com -hmgj.com -hmh3.com -hminvestment.com -hmlan.com -hmldds.com -hmltec.com -hmnst.com -hmpic.xyz -hmplay.com -hmsce.org -hmsem.com -hmsemi.com -hmseo.net -hmsxw.com -hmting.com -hmxw.com -hmyz.com -hmz.com -hmzone.com -hmzs.net -hmzx163.com -hn-pc.com -hn165.com -hn5a.com -hn96520.com -hnaccp.com -hnaee.com -hnagroup.com -hnair.com -hnair.net -hnaiya.com -hnangel.com -hnaorui.com -hnapay.com -hnayg.com -hnbaili.net -hnbits.com -hnbljy.com -hnbwsd.com -hnccpit.org -hnchuncheng.com -hncloud.com -hncourt.org -hncreate.com -hncsdayu.com -hncsmjzs.com -hncsmtr.com -hncsvod.com -hndbs.com -hndca.com -hndfbg.com -hndnews.com -hndpx.com -hndtl.com -hnehome.net -hnemb.com -hnetn.com -hnfa.org -hnfapiao.com -hnfaren.com -hnfjwh.com -hnfjz.com -hnfyqmj.com -hngbjy.com -hngbw.com -hnggzy.com -hngh.org -hngican.com -hngoldcorp.com -hngou.com -hngwg.com -hngwmt.com -hngyzx.org -hnh.cc -hnhaitian.com -hnhaofang.com -hnhllv.net -hnhnled.com -hnhxxk.com -hniec.org -hniois.com -hnisca.org -hniso.net -hnisvc.com -hnjg.com -hnjing.com -hnjing.net -hnjkjn.com -hnjkw.net -hnjn.net -hnjshzy.com -hnkeji999.com -hnkljnxh.com -hnklnf.com -hnks.com -hnksln.com -hnktgame.com -hnkuaifawu.com -hnlat.com -hnlbdl.com -hnleisu.com -hnliangku.com -hnlzhd.com -hnlzw.net -hnmdtv.com -hnmgjr.com -hnmj.vip -hnmsw.com -hnmuseum.com -hnnx.com -hnnxs.com -hnnzwhyy.com -hnoceanrace.com -hnol.net -hnpet.net -hnpfw.com -hnpolice.com -hnpost.com -hnqfseed.com -hnquxing.com -hnquyou.com -hnrcsc.com -hnrcsc.net -hnrich.net -hnrmb.com -hnsfdc.com -hnshengben.com -hnsimeng.com -hnsiwei.com -hnsjgl.com -hnsktc.com -hnsmj.org -hnsss.com -hnst.org -hnstguolu.net -hnsy386.com -hnsyda.com -hnsyu.net -hnteacher.net -hntengn.com -hntianduo.com -hnticai.com -hntobacco.com -hntv.tv -hntvjiaotong.com -hnweimeng.net -hnwisecom.com -hnwlcm.com -hnwlxh.net -hnwtv.com -hnwz8.com -hnxfpfb.com -hnxgzg.com -hnxmxit.com -hnxuntang.com -hnxyjt.com -hnydmq.com -hnyfkj.com -hnyh.net -hnyingfang.com -hnyinhan.com -hnykcs.com -hnyouneng.com -hnyuandian.com -hnyuanyou.com -hnyumantang.com -hnyunji.com -hnyunww.com -hnyunzhiyi.com -hnyyss.com -hnzhaobiao.com -hnzjdc.com -hnzjfcw.com -hnzjgfw.com -hnzjip.com -hnzjzx.org -hnzqw.com -hnztfs.com -hnzxyy.com -hnzytp.com -hnzyzx.com -hoau.net -hobalab.com -hobbiestree.com -hobr.site -hocode.com -hodiasflavor.com -hodoop.com -hoehub.com -hogesoft.com -hoho.tv -hoho666.com -hohode.com -hojeje.com -hokori.online -holaq.com -holdhr.com -holdsteel.com -holegots.com -holiland.com -holleykingkong.com -hollischuang.com -hollycrm.com -hollysys.com -hollyuc.com -holoem.com -hologres.io -holteksupport.com -holyxiongan.com -home-assistant.cc -home-cn.htcsense.com -home.htcsense.com -home0311.com -home0538.com -home0668.com -home133.com -home178.com -home4love.com -home616.com -home77.com -homeartschina.com -homebehind.com -homecdn.com -homecloud-lab.com -homed.me -homedo.com -homeinframes.com -homeinmists.com -homeinns.com -homeking365.com -homekingcdn.com -homekoo.com -homekoocdn.com -homelnns.com -hometeda.com -hometex114.com -hometexjoin.com -homevv.com -homeyao.com -homezz.com -hommk.com -homolo.com -homolo.net -homylogistics.com -honda-sundiro.com -hondooy.com -hondsen.com -hong-lawfirm.com -hong-shun.com -hong.ren -hongbao.show -hongbaorili.com -hongbeibang.com -hongbizi.org -hongbocheng.com -hongbowang.net -hongchalin.com -hongchaping.com -hongdaym.com -hongdefund.com -hongdezk.com -hongdian.com -hongdoufm.com -hongdoulive.com -hongen.com -hongfen.org -honggancn.com -honggebang.com -honghailt.com -honghanda.com -honghe-tech.com -hongheiku.com -honghonghu.com -honghuotai.com -hongjiang.info -hongjiejia.com -hongjing.com -hongjingedu.com -hongjiu66.com -hongkang-life.com -hongkou.net -hongku.com -hongkunjinfu.com -honglulan.com -hongmen.com -hongmoka.com -hongniang.com -hongpig.com -hongqi.tv -hongqipress.com -hongrenzhuang.site -hongru.com -hongsehuoxian.com -hongsejiqing.com -hongshi-tech.com -hongshn.xyz -hongshu.com -hongshunet.com -hongsungifts.com -hongt.com -hongtongad.com -hongtu.net -hongtuwang.com -hongxiaolong.com -hongxin18.com -hongxinbao.com -hongxingzn.com -hongxiu.cc -hongxiu.com -hongyan.info -hongyanliren.com -hongyaxuan.com -hongyeshuzhai.com -hongyicd.net -hongyingfangshui.com -hongyue.com -hongyunlww.com -hongyunvren.com -hongze.net -hongzhoukan.com -hongztl.com -honkaiimpact3.com -honorfair.com -honpery.com -honpu.com -honsuntec.com -honycapital.com -honyuan.net -hoodinn.com -hoodong.com -hooenergy.com -hoofei.com -hoogge.com -hookbase.com -hookdll.com -hoolai.com -hoolaigames.com -hoolee8.com -hoolinks.com -hoolo.tv -hoop-archi.com -hoop8.com -hoopchina.com -hoopugames.net -hoosho.com -hooshong.com -hooyagames.com -hooyoo.com -hope-tarsus.com -hopebank.com -hopebeauty.com -hopecool.com -hopehook.com -hoperun.com -hopetrip.com.hk -hophingfood.com -hori3d.com -horion.com -horizon.ai -horizonfuelcell.com -horizonrcg.com -horn-yacht.com -horsa.org -horti-expo2019.com -horti-expo2019.org -hortor.net -hortor002.com -hortor005.com -hortor020.com -hortorgames.com -hosizoraworks.org -hosjjk.com -hospmall.com -host666.net -hostadm.net -hostbuf.com -hostdie.com -hostelxian.com -hostker.com -hostkvm.com -hostloc.com -hostmsu.ru -hostproph.com -hostxen.com -hostyun.com -hotalk.com -hotcbit.org -hotdb.com -hotdeeplink.com -hotdic.com -hoteamsoft.com -hoteastday.com -hotelcis.com -hoteldig.com -hotelgg.com -hotelvi.com -hotelyunos.com -hotent.com -hotent.xyz -hotgamehl.com -hotkd.com -hotkey123.com -hotkidclub.com -hotking.com -hotmisl.com -hotoos.com -hotpotpro.com -hotpub.com -hotread.com -hotsales.net -hotssp.com -hotstoday.com -hottechsemi.com -hottui.com -hotwind.net -hotwindbox.com -houbank.com -houcaller.com -houdao.net -houdask.com -houdunwang.com -houge.biz -hougonw.com -houkai.com -houmags.com -houpuwang.com -houqinbao.com -houqun.me -houqun.net -houquner.com -houruitouzi.com -house086.com -house178.com -house365.com -house5.net -house510.com -house86.com -housebaby.com -housedp.com -housenhe.com -housesg365.com -housoo.com -houxue.com -houyicaiji.com -houzhibo.com -hoverlees.com -hovertree.com -hovfree.com -how234.com -howardwchen.com -howbuy.com -howelllighting.com -howjoin.com -howsci.com -howsoftworks.net -howtoing.com -howzhi.com -hoxing.com -hoxue.com -hoyakeji.com -hozin.com -hp-marathon.com -hp123.com -hp888.com -hpcanon.com -hpccake.com -hpcoo.com -hpoi.net -hpool.online -hprt.com -hprx.com -hpstore.cc -hpuoj.com -hpwu.com -hpwxc.com -hpx05.com -hpy93.com -hpyk.com -hq114.net -hq2011.com -hq28g.com -hq52.com -hq88.com -hqart.net -hqbd.com -hqbnb.com -hqbpc.com -hqbsh.com -hqbuy.com -hqbuycdn.com -hqc-china.com -hqcanyin.com -hqchip.com -hqck.net -hqcr.com -hqdlsn.com -hqepay.com -hqew.com -hqew.net -hqewimg.com -hqgq.com -hqh5.com -hqhl.net -hqhot.com -hqidi.com -hqjy.com -hqkjfrp.com -hqpcb.com -hqps.com -hqresearch.org -hqwhw.com -hqwx.com -hqwy.com -hqyj.com -hqyjsuccess.com -hqys.net -hqytgyh.com -hqyun.com -hqyxjy.com -hqz.com -hqzbcn.com -hr-channel.com -hr-mp.com -hr-self.com -hr.cc -hr0715.com -hr1000.com -hr135.com -hr2003.com -hr2trainer.com -hr369.com -hr448.com -hr510.com -hr5156.com -hr668.com -hr9000.com -hr987.com -hran.me -hrayw.com -hrbaodian.com -hrbar.com -hrbciming.com -hrbeduy.com -hrbesd.com -hrbmama.com -hrbmilan.com -hrbpay.com -hrbrc.com -hrbslh.com -hrbswx.com -hrbzdty.com -hrcfc.com -hrchina.cc -hrday.com -href.lu -hrexam.com -hrfc.net -hrflc.com -hrfoods.com -hrgrobotics.com -hrhuiyi.com -hrhy365.com -hrintl.com.hk -hrloo.com -hrm100.com -hrmarket.net -hroot.co -hroot.com -hrpackage.com -hrrukou.com -hrs100.com -hrsalon.org -hrsay.com -hrsee.com -hrteachu.com -hrtechchina.com -hrtn.net -hrtx.com -hrxiongan.com -hrzy.cc -hs-fe.com -hs-outlets.com -hs.net -hs10000.com -hs13z.net -hs186.com -hs313.info -hs65.com -hs950.com -hsakyy.com -hsanhl.com -hsbdc.com -hsboss.com -hscbw.com -hsdatalab.com -hsdcw.com -hsddyy.com -hsdhw.com -hsdmall.com -hsehome.com -hsehome.org -hsez.net -hsf88.com -hsfund.com -hsgjj.com -hsgjysj.com -hsgsy.com -hshh.org -hshotel.com -hshs.com -hshton.com -hshuiyi.com -hshw.com -hshy.net -hshymanor.com -hsigus.com -hsiii.com -hsjingcheng.com -hsjk.com -hsjkaoyan.com -hsjss.com -hslj.net -hsmc.com -hsmdb.com -hsmob.com -hsmrt.com -hsoow.com -hspress.net -hsr2013.com -hssdg.com -hssdk.com -hssdtest.com -hssemi.com -hssenglish.com -hssjyj.com -hsslab.com -hssrc.com -hsstr.com -hssxhd.com -hssyxx.com -hsszfx.com -hsszkjg.com -hst.com -hst1966.net -hstechsz.com -hstong.com -hsutimes.com -hsw2013.com -hsweb.me -hswkzy.com -hswnjz.com -hsxiang.com -hsxxad.com -hsybyh.com -hsyfcenter.com -hsysupply.com -hsyuntai.com -hsyyf.me -hszhizhen.net -hszk.org -hszlcn.com -hszqxs.com -hszsfz.com -hsztbzx.com -hszy8.com -hszzsyzx.net -hszzzx.net -ht-cao.com -ht-saae.com -ht-sonic.com -ht001.com -ht88.com -ht9.com -htanwang.com -htbaba.com -htback.com -htbenet.net -htc-media.com -htcbbs.net -htcis.net -htciy.com -htcxfund.com -htd2000.com -htdata.com -hteacher.net -hteos.com -htexam.com -htexam.net -htfcn.com -htfoxit.com -htfutures.com -htgj.com -htgjjl.com -htguosheng.com -htgwf.com -hthl.net -htidc.com -htinfor.com -htinns.com -htinnsjm.com -htjs.net -htjsq.com -htkaoyan.com -htky365.com -html51.com -html5cn.org -html5code.net -html5dw.com -html5plus.org -html5train.com -html5tricks.com -htmleaf.com -htmlplusplus.com -htmlsucai.com -htnice.com -htpc1.com -htqyy.com -htr-mold.com -htranslate.com -htsc.com -htsec.com -htsgh5.com -htstzm.com -htt5.com -httingshu.com -httpcn.com -httprunner.org -hturl.cc -htuwenming.com -htv009.com -htvaas.com -htwed.com -htx.cc -htxxpx.com -htxyin.com -htyou.com -htys.cc -htyunwang.com -htzdj.com -htzyw.com -hu.com -hua-lan.com -hua-yong.com -hua.com -huaaiangel.com -huaaosoft.com -huaaotech.com -huaat.com -huabaike.com -huaban.com -huabanimg.com -huabanpro.com -huabeipay.com -huabian.com -huabo.net -huabokeji.com -huacaomu.com -huacaoshumu.net -huacemedia.com -huacenter.com -huachenit.com -huachenyuanyang.com -huaci.cc -huacnlee.com -huacolor.com -huada120.com -huadan.com -huadehyd.com -huadiandanbao.com -huadonghospital.com -huadongmedia.com -huadoo.com -huadream.com -huaduocai.net -huadx.com -huaease.net -huaer.cc -huafeiw.com -huafeng-food.com -huafeng.com -huafens.com -huafer.cc -huaguoshan.com -huahanart.com -huahua567.com -huahua777.com -huahuacaocao.com -huahuakon.com -huahuo.com -huaibaobei.com -huaibei.com -huaidan1.com -huaien.com -huaihai.tv -huaijiufu.com -huaimi.com -huain.com -huainanhai.com -huainanren.net -huainet.com -huaipu.net -huaisimida.com -huajia.cc -huajia2000.com -huajiakeji.com -huajialishe.com -huajianmed.com -huajiao.com -huajie8.com -huajifen.com -huajin100.com -huajing-inf.com -huajuan.net -huajuanyun.com -huajx.com -huakai.me -huake-weixin.com -huake360.com -huakebosi.com -huakeyun.com -hualady.com -hualala.com -hualet.org -hualiandressing.com -hualianxin.com -hualongxiang.com -hualu5.com -hualumedia.com -hualv.com -huamanlou.cc -huameiyuezi.com -huami.com -huamoe.com -huan-tai.com -huan.tv -huanbao-world.com -huanbao.com -huanbaoscx.com -huanbeiloan.com -huancaicp.com -huandie.com -huang-jerryc.com -huang-ou.com -huangbaoche.com -huangbowei.com -huangchun.net -huangdao.com -huangdaojiri.org -huangdc.com -huangea.com -huanggao.net -huanggaofang.com -huangh.com -huanghaicollege.com -huanghanlian.com -huanghecaifu.com -huanghepiao.com -huanghouyz.com -huangjiemin.com -huangjunying.com -huanglei.me -huangli.com -huangliangbo.com -huangniu.in -huangpucn.com -huangqi1688.com -huangshaotian.com -huangsw.com -huangwei.me -huangwei.pro -huangxinwei.com -huangxubo.me -huangye88.com -huangye88.net -huangyixiaoshuo.com -huangyunkun.com -huangz.me -huangze.net -huanhaoba.com -huanhuanhuishou.com -huanhuba.com -huaniaoy.com -huanidc.com -huanjinghaojia.com -huanjutang.com -huanjuyun.com -huankkk.com -huanlang.com -huanle.com -huanle800.com -huanleap.com -huanlecdn.com -huanlefish.com -huanleguang.com -huanlejia.vip -huanletang.com -huanlingxiuxian.com -huanlj.com -huanmusic.com -huanpingge.com -huanqiu.com -huanqiuauto.com -huanqiukexue.com -huanqiumil.com -huanqiuw.com -huanqiuyimin.com -huanqu-tec.com -huanrong2010.com -huanshoulv.com -huante.com -huantest.com -huanwen.com -huanxi.com -huanxia.com -huanxiongdd.com -huanxiyl.com -huanyingzq.com -huanyou365.com -huanyouji.com -huanyudns.com -huanyutv.com -huaoe.com -huaon.com -huapiaoliang.com -huaqidigital.com -huaqin.com -huaqinchi.com -huaquandian.wang -huaraytech.com -huarenyizhan.com -huarong2006.com -huarongdao.com -huarongled.com -huaruicom.com -huas.co -huasehui.com -huash.com -huashangcf.com -huashangtop.com -huashen-edu.com -huasheng100.com -huashengdaili.com -huashengls.com -huashenll.com -huashi6.com -huashilm.com -huashitong.net -huashphoto.com -huashu-inc.com -huasyun.com -huatai-pb.com -huatengsci.com -huati365.com -huatian.net -huatu.com -huatugz.com -huatuo007.com -huatuowenda.com -huatuoyf.com -huaue.com -huawan.com -huawangzhixun.com -huawanyun.com -huawei-3com.com -huawei.com -huaweicloud-dns.com -huaweicloud-dns.net -huaweicloud-dns.org -huaweicloud.com -huaweicloudwaf.com -huaweidevice.com -huaweidun.com -huaweimall.com -huaweimarine.com -huaweimossel.com -huaweirom.com -huaweisafedns.com -huaweistatic.com -huaweisymantec.com -huaweiuniversity.com -huaweizdl.com -huawenfanyi.com -huawenonline.com -huawenwin.com -huaxi.net -huaxi100.com -huaxia.com -huaxia77.com -huaxiaci.com -huaxiaf.com -huaxiangdiao.com -huaxiazi.com -huaxincem.com -huaxing.com -huaxinnianhua.com -huaxirc.com -huaxiu.ink -huaxj.net -huaxuezoo.com -huayala.com -huayanghui.net -huayanxiu.com -huayanxiu.net -huayiauto.com -huayicn.com -huayidiaosu.com -huayilawyers.com -huayimedia.com -huayiming.com -huayinjapan.com -huayiwork.com -huayoumengze.com -huayoutianyu.com -huayuanlcd.com -huayuannongji.com -huayue119.com -huayuebaobao.com -huayuejob.com -huayun.com -huayunshuzi.com -huayunyy.com -huayushufang.com -huayuzj.com -huazhen2008.com -huazhen2008.net -huazhengcaiwu.com -huazhenjiaoyu.com -huazhongcar.com -huazhongcnc.com -huazhonghua.com -huazhongtimes.com -huazhu.com -huazhuanapp.com -huazhucorp.com -hubao.cc -hubcyts.com -hubei-design.com -hubei88.com -hubeibbs.net -hubeici.com -hubeidaily.net -hubeihome.net -hubeiip.com -hubeipbx.com -hubeisafety.org -hubeiwsd.com -hubeixuekao.com -hubeiyanjiusheng.com -hubeiyongtai.com -hubokan.com -hubpd.com -hubu.com -hububbs.com -hubulab.com -hubwiz.com -hubzs.com -hucdn.com -huceo.com -huchao.me -huchaowei.com -hucheng100.com -hudai.com -hudbbs.com -hudong.com -hudongad.com -hudongba.com -hudongcdn.com -hudongku.net -hudunsoft.com -huduntech.com -huelead.com -hufangyun.com -hugaoba.com -hugd.com -hugecdn168.com -hugeland.com -huhabao.com -huhanyong.com -huhoo.com -huhoo.net -huhua.net -huhuang.net -huhuhiiuio.com -huhuvr.com -hui-ben.com -hui-chao.com -hui.net -hui10.com -hui10.net -hui100.com -hui20.com -hui43.com -hui712.com -hui800.com -hui800.net -huians.com -huibo.com -huicaiba.com -huicaishui.net -huiche100.com -huicheimg.com -huichengip.com -huichewang.com -huichexiang.net -huicx7.com -huidang.com -huideyecai.com -huidu.com -huidu.net -huiemall.com -huieyes.com -huifachina.com -huifarm.com -huifenqi.com -huifudashi.com -huifusihai.com -huifutz.com -huifuyimin.com -huigao-magnetics.com -huigetv.com -huigezi.org -huihaicenter.com -huihaicn.com -huihedian.com -huihua365.com -huihua8.com -huihuaren.com -huihuarensheng.com -huihui.moe -huihuitech.net -huiian.com -huiji.wiki -huijiame.com -huijiaoyun.com -huijidata.com -huijiewei.com -huijimall.com -huijistatic.com -huijitrans.com -huijiwiki.com -huijucn.com -huila88.com -huilan.com -huilanyujia.com -huilianyi.com -huiliubao.com -huilm.com -huilog.com -huilongsen.com -huilv168.com -huilvwang.com -huilvwu.com -huim.com -huimaiche.com -huiman.net -huimaw.com -huimee.com -huimee.net -huimeisports.com -huimengya.com -huimin111.com -huimingcn.com -huinaimei.com -huing.net -huion.com -huiqiangkeji.com -huirendai.com -huiris.com -huiruanzhijia.com -huishangbao.com -huishangol.com -huishenghuo888888.com -huishengqianzhushou.com -huishoubao.com -huishoushang.com -huishuaka.com -huishuang.xyz -huisituo.com -huisky.com -huisou.com -huisouimg.com -huisuoping.com -huitao.net -huitaoba.com -huitaodang.com -huitaoyouhui.com -huitongqingsuan.com -huitoubj.com -huitouche.com -huitouyu.com -huitouzi.com -huitu.com -huitun.com -huiurl.com -huivo.com -huiwo.com -huiword.com -huixiang360.com -huixiangtiandi.com -huixiaoer.com -huixiaoer.net -huixing.hk -huixingsoft.com -huixinli.com -huixinyt.com -huixinyun.com -huixuanjiasu.com -huiyan315.com -huiyankan.com -huiyaohuyu.com -huiyep.com -huiyi8.com -huiyiabc.com -huiyinxun.com -huiyisheji.com -huiyizhuo.com -huiyou.com -huiyuandao.com -huiyuanyy.com -huiyumedia.com -huize.com -huizecdn.com -huizhan-inc.com -huizhaofang.com -huizhek.com -huizhekou.net -huizhijiaxun.com -huizhimob.com -huizhonghengxing.com -huizhouf.com -huiziyuan.net -huizuche.com -huizuoyuezi.com -hujia.org -hujiang.com -hujingyuan.com -hujiuzhou.com -hujuntao.com -huke88.com -hukou021.com -hukoushanghai.com -hulai.com -hulamao.com -hulanap.com -huliangongyu.com -hulianmaibo.com -hulinhong.com -huliqun.com -huliyx.com -hulkdev.com -huluboshi.com -huluhour.com -huluip.tech -huluo.com -hulusaas.com -hulusi.com -huluwa365.com -huluwa8.com -huluxia.com -huluxia.net -huluzc.com -humanrights-china.org -humengyun.com -humensec.com -huming.com -hunancatv.com -hunanedu.net -hunanpta.com -hunantv.com -hunanwb.com -hunanzhibo.com -hunbei.com -hunbei1.com -hunbei4.com -hunbei5.com -hunbohui.info -hunbys.com -huncct.com -hunche.net -hunchelaila.com -hundredcent.com -hundsun.com -hundun.net -hundx.com -hunger-valley.com -hunjuwang.com -hunli100.com -hunlihu.com -hunlihunli.com -hunliji.com -hunlimao.com -hunmiao.com -hunshitong.net -hunt007.com -huntchance.com -huntic.com -huntkey.com -huntkeydiy.com -hunuo.com -hunyinxuetang.com -hunyinyiyuan.com -huo-cun.com -huo119.com -huoban.com -huobanjs.com -huobanmall.com -huobanxietong.com -huobaoyx.com -huobi.io -huocai.com -huocc.com -huochai.mobi -huochaihe.cc -huoche.com -huoche.net -huoche.wiki -huochepiao.com -huochepiao.net -huodao.hk -huoding.com -huodong.org -huodonghezi.com -huodonghui.net -huodongjia.com -huodongju.com -huodongju.net -huodongquan.net -huodongshu.com -huodongwang.com -huodongxing.com -huoduan.com -huofar.com -huofutp.com -huoguopaihang.com -huogz.com -huohoo.com -huohu123.com -huohuo.com -huohuolife.com -huoji.com -huoju365.com -huojua.com -huojuli.com -huokebao.net -huokesoft.com -huolala.co -huolan.net -huolea.com -huoli.com -huolinhe.com -huolishaonianwang.com -huolug.com -huomao.com -huomao.tv -huomaotv.com -huomaow.com -huomaqun.com -huoming.com -huoqiuapp.com -huosdk.com -huoshan.cc -huoshan.club -huoshan.com -huoshanimg.com -huoshanstatic.com -huoshansxy.com -huoshanvod.com -huoshanzhibo.com -huoshen.com -huoshen.net -huosu.com -huosubtc.com -huotan.com -huowan.com -huoxiaoer.net -huoxing24.com -huoxingba.com -huoxingzi.com -huoxun.com -huoyan.com -huoyan.io -huoyanio.com -huoying666.com -huoyuandl.com -huozw.com -hupan.com -hupo.com -hupo.tv -hupu.com -hupu.tv -hupucdn.com -hurongclub.com -hurun.net -husenji.com -hushangcaifu.com -hust-laser.com -hust-snde.com -hust.cc -hust.online -hustcad.com -hustduyan.com -hustgroup.com -hustlife.com -hustlzp.com -hustnews.com -hustoj.com -hustonline.net -hustp.com -hustunique.com -hustwenhua.net -hustxb.com -husubao.com -hutaojie.com -hutaolinight.com -hutaow.com -hutong-school.com -hutoufeng.net -hutoulang.com -hutu.me -hutui9.com -hutuii.com -hutuoweb.com -hutusi.com -huuhoo.com -huwaibbs.com -huway.com -huweihuang.com -huweishen.com -huxiaofan.com -huxiaoshi.com -huxinqk.com -huxiu.com -huxiu.link -huxiucdn.com -huya.com -huyahaha.com -huyanapp.com -huyanbao.com -huyaohui.com -huyaruanwen.com -huyn.com -huynet.com -huyou78.com -huyouxiong.com -huyuncdn.com -huyuxx.com -huzcoop.com -huzhan.com -huzhao1.com -huzheng.org -huzhifeng.com -huzhongxin.com -huzhoumuseum.com -huzicaotang.com -huzs.net -huzu.com -hvac001.com -hvacstar.com -hvdiy.com -hvtong.com -hw-ai.com -hw-tm.com -hw100k.com -hw3static.com -hw555.com -hw99.com -hwactive.com -hwadmin.com -hwangda.com -hwanjia.com -hwasmart.com -hwbs.com -hwccpc.com -hwcloudlive.com -hwclouds-dns.com -hwclouds-dns.net -hwclouds.com -hwclouds.mobi -hwclouds.net -hwcrazy.com -hwdef.com -hwehs.com -hweimall.com -hwfcw.com -hwgmthree.com -hwht.com -hwjyw.com -hwlantian.com -hwlpz.com -hwrecruit.com -hwsem.com -hwtelcloud.com -hwtrip.com -hwtxfilm.com -hwwt2.com -hwwt8.com -hwxda.com -hwxjp.com -hwxnet.com -hwxuanliuqi.com -hwzyjt.com -hx008.net -hx110.com -hx2car.com -hx2cars.com -hx3366.net -hx36.net -hx8886.com -hx95.com -hx99.net -hx9999.com -hxage.com -hxbdf120.com -hxbdxled.com -hxbsth.com -hxbxw.com -hxcdn.net -hxchem.net -hxcpp83.com -hxct.com -hxdi.com -hxdkfp.com -hxdkj88.com -hxen.com -hxepawn.com -hxfilm.com -hxfjw.com -hxgame.net -hxgqw.com -hxgs.net -hxgwott.com -hxhost.com -hxinq.com -hxjbcdn.com -hxjbh.com -hxjiqi.com -hxjlhn.com -hxjwang.com -hxland.com -hxlsw.com -hxltad.com -hxmeishi.com -hxnews.com -hxppw.com -hxqc.com -hxqnj.org -hxqwx.com -hxrc.com -hxs168.com -hxsd.com -hxsd.tv -hxsec.com -hxshuizu.com -hxshx.com -hxsme.org -hxt-semitech.com -hxthjy.com -hxtk.com -hxwglm.com -hxxdsb.com -hxxkw.org -hxxl6.com -hxyg.org -hxyjw.com -hxys.com -hxytea.com -hxytw.com -hxyxsj.com -hxzdhn.com -hxzxg.com -hy-cgp.com -hy-la.com -hy-zr.com -hy01888.com -hy05190134.com -hy123.com -hy2046.com -hy233.tv -hy628.com -hy8881.com -hyahm.com -hyb2b.com -hybbtree.com -hycdn.com -hycfw.com -hycgy.com -hyckjic.com -hydarts.com -hydbest.com -hydcd.com -hyds360.com -hydz999.com -hydzfp.com -hyedu.com -hyext.com -hyfutures.com -hyggfx.com -hygl.org -hygoldcup.com -hygy361.com -hyhcdn.com -hyhjbh.com -hyhl66.com -hyhro.com -hyhuo.com -hyhygame.com -hyimmi.com -hyipchina.com -hyj999.com -hyjesc.com -hyjgxx.com -hyjp.net -hykang.com -hykbl.com -hykcsoft.com -hylname.com -hym68.com -hymom.com -hynews.net -hynixic.com -hynpay.com -hyocr.com -hyouda.com -hypefolio.com -hyper.sh -hypergryph.com -hypersilicon.com -hypnos04.com -hyrainbow.com -hysdknb.com -hysec.com -hysseo.com -hysteeltube.com -hyt368.com -hytcshare.com -hytd.com -hytera.com -hytic.net -hyundai-hmtc.com -hyundaibeijing.com -hyuuhit.com -hywly.com -hyx1314.xyz -hyxdj.com -hyxrzs.com -hyyf.net -hyyic.com -hyyoa.com -hyyyny.com -hyz86.com -hyzcservice.com -hyzm.cc -hyznjs.com -hyzqxsb.com -hz-etest.com -hz-gn.com -hz-hospital.com -hz-winone.com -hz-xin.com -hz100msh.com -hz1cm.com -hz5800.com -hz66.com -hzaee.com -hzairport.com -hzamcare.com -hzbenet.com -hzbh.com -hzbike.com -hzbluebutterfly.com -hzbook.com -hzbxm.com -hzc.com -hzccb.net -hzccnet.com -hzcekong.com -hzcnc.com -hzcopyright.com -hzcourse.com -hzcuizhai.com -hzdajiangdong.com -hzdauto.com -hzdjr.com -hzdledu.com -hzdx.com -hzecsemir.com -hzeg.com -hzfangwang.com -hzfc.cc -hzfucai.net -hzgh.org -hzgjj.com -hzgrow.com -hzguojiao.com -hzgxr.com -hzh1.com -hzhanbo.com -hzhfzx.com -hzhike.com -hzhltec.com -hzhmktwx.com -hzhr.com -hzhuangxiang.com -hzhuanqu.com -hzhuaxindianzishangwu.com -hzhx.com -hzins.com -hzins.net -hzjbzg.com -hzjingxian.com -hzjinsen.com -hzjizhun.com -hzjlxx.com -hzjmjl.com -hzjqhy.com -hzjs56.com -hzjunxing.com -hzjushan.com -hzkayo.com -hzljlyy.com -hzlug.org -hzmama.net -hzman.net -hzmantu.com -hzmba.com -hzmogo.com -hzmylike.com -hzncc.com -hznews.com -hznsh.com -hznzcn.com -hzou.net -hzpgc.com -hzpzs.net -hzqimiao.com -hzqiuxue.com -hzqz.net -hzr1.com -hzrc.com -hzredream.com -hzrobam.com -hzsaifang.com -hzsaso.com -hzsbz.com -hzsdfsyxx.com -hzsgjj.com -hzshudian.com -hzstad88.com -hzti.com -hztosz.com -hztraining.com -hzvillas.com -hzwer.com -hzwindpower.com -hzwmw.com -hzwsjyjt.com -hzwtech.com -hzwxq.com -hzwyh.com -hzxhymc.com -hzxiyuege.com -hzxsjgxx.com -hzxyns.com -hzy182.xyz -hzyestar.com -hzyhzp.com -hzylpco.com -hzymjx.com -hzyoka.com -hzypro.com -hzyqkb.com -hzyuanshan.com -hzyuedu.com -hzyuewan.com -hzyz.net -hzzhaobiao.com -hzzkj.net -hzzp.com -hzzqs.com -hzzsbbs.com -hzzsfs.com -i-27.name -i-520.net -i-ab.com -i-bei.com -i-bigdatas.net -i-calorie.com -i-click.com -i-element.org -i-ev.com -i-excellence.com -i-hifi.com -i-jim.com -i-kan.me -i-lewan.com -i-ll.cc -i-manji.com -i-matcher.com -i-md.com -i-modec.com -i-mofang.com -i-morefun.com -i-nano2021.com -i-now.com -i-oranges.com -i-same.com -i-shu.com -i-size.com -i-study.net -i-tongfang.com -i-tv.com -i-xinnuo.com -i-xoron.com -i.dell.com -i0349.com -i05b.com -i0746.com -i075.com -i0898.org -i100e.com -i11r.com -i121.net -i1515.com -i1758.com -i1766.com -i2abc.com -i2ya.com -i360mall.com -i3abox.com -i3done.com -i3dpworld.com -i3geek.com -i3gt.com -i3smot.com -i3v.cc -i3youlun.com -i3yuan.com -i3zh.com -i4px.com -i4t.com -i51game.com -i52tt.com -i5399.com -i5738.com -i5i6.net -i5mai.com -i6879.com -i7aot4.com -i7box.com -i7fh.com -i7gg.com -i7play.com -i7wx.com -i8001.com -i8cn.com -i8gua.com -i8i8i8.com -i8tq.com -i9.org -i91pv.com -i9star.com -i9wang.com -ia-shenzhen.com -iacblog.com -iadmob.com -iadmore.com -iadsdk.apple.com -iaeac.org -iaikx.com -iakmai.com -ialicdn.com -ialloc.com -ialloc.org -iambanban.com -iambocai.com -iameduwork.com -iamfisher.net -iamhippo.com -iamjzs.com -iamle.com -iamlintao.com -iamshuaidi.com -iamsujie.com -iamtxt.com -iamue.com -iamverycute.com -iamwr.com -iamxiaoming.net -iamxk.com -ianvisa.com -iaoso.com -iaoyou.com -iapolo.com -iapp4me.com -iapple123.com -iappler.net -iapppay.com -iapps.im -iappstoday.com -iars-wuhan.com -iartmoney.com -iartsee.com -iask-media.com -iask.com -iask.in -iaskbus.com -iaskhot.com -iat-auto.com -iautodraw.com -iavira.com -iaviva.com -iaxure.com -iazhi.com -ib-china.com -ib07.com -ibaba88.com -ibabyp2p.com -ibadboy.net -ibailve.com -ibaizhu.com -ibanbu.com -ibangkf.com -ibangquan.com -ibanma.net -ibanquan.com -ibantang.com -ibanyu.com -ibaotu.com -ibaoxiu.net -ibaozou.com -ibayapp.com -ibbwhat.com -ibcar.net -ibcde.com -ibczy.com -ibeifeng.com -ibeiig.com -ibeiliao.com -ibeiou.com -ibenxi.com -ibestapp.com -ibestfanli.com -ibestservice.com -ibestv.com -ibeta.me -ibgbuy.com -ibianqu.com -ibiaozhi.com -ibicn.com -ibidian.com -ibiji.com -ibimawen.com -ibimuyu.com -ibingniao.com -ibiquge.net -ibiquke.com -ibireme.com -ibixiaxs.com -ibjq.wang -ibkcn.com -ibl520.com -iblimg.com -ibloger.net -iblue.com -iblue.me -ibluefrog.com -ibluesocial.com -ibmwclub.com -ibook8.com -ibooker.cc -ibookstar.com -ibornclinic.com -iboxpay.com -ibr.cc -ibrainproject.org -ibreader.com -ibroadlink.com -ibruce.info -ibscdn.com -ibtba.cc -ibtmao.com -ibtsat.com -ibtyun.com -ibuick.com -ibuscloud.com -ibuspan.com -ibuying.com -ibw.cc -ic-ldo.com -ic-valley.com -ic2china.com -ic37.com -ic72.com -ic98.com -ic9cube.com -ica-alliance.org -icaeconf.com -icafe28.net -icafe8.com -icafe8.net -icaidao.com -icaifu.com -icaile.com -ican-contest.org -icandata.com -icangshu111.com -icanzc.com -icaoye.com -icardfinancial.com -icaredbd.com -icasiso.com -icastlewar.com -icax.org -icbc-ltd.com -icbuy.com -icc.one -icc365.com -iccchina.com -iccessh.org -iccgame.com -iccgame.net -icchaoren.com -iccidchaxun.com -iccircle.com -iccsmart.com -iccsz.com -iccwi.net -icdn2.com -icdol.com -icdream.com -icdt-conf.com -ice.work -ice1000.org -iceasy.com -icebear.me -icebound.cc -iceflowsoft.com -icefoxgame.com -iceinto.com -icekr.com -icekylin.online -icemle.org -iceshi.org -icesimba.com -icevpn.org -icewingcc.com -icfans.com -icfcc.com -icfqs.com -icfusions.com -icgoo.net -icgu.com -icgvisa.com -ich8.com -ichacha.com -ichacha.net -ichang8.com -ichangbaishan.com -ichangtou.com -ichanyu.com -ichaoshangyue.com -ichaotu.com -icharm.me -ichat800.com -ichdata.com -ichehaopei.com -ichehome.com -ichenfei.com -ichengyun.net -ichennan.com -ichinaceo.com -ichinaenergy.com -ichishu.com -ichong123.com -ichuanglan.com -ichuangwei.com -ichuangye.com -ichuanyi.com -ichunqiu.com -ichunt.com -ichushang.com -ichzh.com -iciba.com -icicicic.com -icifit.com -icignacmb.com -icinfo.net -icirculation.com -icitymobile.com -icixun.com -iciyuan.com -icjiemi.com -ickeep.com -icketang.com -ickey.cc -ickimg.com -iclicash.com -iclickstatic.com -icloud-cdn.icloud.com.akadns.net -icloud.cdn-apple.com -icloudgslb.com -icloudnews.net -iclouds.work -icmade.com -icme14.org -icminer.com -icmsdev.com -icmyk.cc -icnjob.com -icnkr.com -icnote.com -icntv.tv -icnws.com -icoa.vip -icoat.cc -icoc.bz -icoc.cc -icoc.in -icoc.me -icocg.com -icode9.com -icodelogic.com -icoderobot.com -icofchina.com -icom5g.com -iconfans.com -iconfans.org -iconntech.com -icoolen.com -icoou.com -icoremail.net -icos8.com -icosky.com -icourse163.com -icourse163.org -icourt.cc -icp100.net -icp21.com -icpcdn.com -icpcw.com -icpdaili.com -icphu.com -icpisp.net -icrazyidea.com -icroom.com -icrosschina.com -icshanghai.com -icsisia.com -icslx.com -icsoc.net -icson.com -icss.me -icstreet.com -icswb.com -ict361.com -ictcsr.org -ictehi.com -ictest8.com -ictlce.com -ictown.com -ictpaas.com -ictun.com -ictuniv.com -icver.com -icvip.com -icxbk.com -icxinli.com -icy-capital.com -icyif.com -icyip.com -iczhiku.com -iczhiyu.com -iczoom.com -id-bear.com -id-linking.com -id6.me -idabai.com -idachu.com -idafen.com -idafoo.com -idaima.com -idangdai.com -idanpianji.com -idaocao.com -idataway.com -idaxiang.org -idaybreak.com -idbhost.com -idc-icp.com -idc.moe -idc.sh -idc002.com -idc021.com -idc029.com -idc123.com -idc180.com -idc20.com -idc218.com -idc31.com -idc4.com -idc400.com -idc45.com -idc789.com -idc886.com -idc917.com -idc96.com -idc96.net -idcay.com -idcbest.com -idcbest.hk -idccenter.net -idccom.net -idccun.com -idceb.com -idcfengye.com -idchh.com -idchz.com -idcicp.com -idcicpdns.com -idcjf.com -idcjia.net -idckx.com -idcoffer.com -idcquan.com -idcsec.com -idcser.com -idcsh.com -idcsh.net -idcsped.com -idcspy.com -idcspy.net -idcss.com -idctq.com -idcug.com -idcum.net -idcun.com -idcuw.com -idcvendor.com -idcvip.net -idcwn.com -idcys.com -idcyunwei.org -idea-king.org -idea1986.com -ideacms.net -ideagou.com -idealshanghai.com -ideanote.cc -ideaparfums.com -ideappt.com -ideasandroid.com -ideazhao.com -ideebank.com -ideepin.com -ideng.com -idesktopcal.com -idevz.org -idgvc.com -idianchou.com -idianfa.com -idianshijia.com -idig8.com -idigi.net -idkaiu.com -idler-et.com -idmchina.net -idmzj.com -idn100.com -idname.com -idnscloud.com -ido-love.com -ido114.com -ido512.com -idoacg.com -idoall.org -idocbank.com -idocv.com -idol001.com -idolranking.info -idolyx.com -idom.me -idomb.com -idongde.com -idongdong.com -idongniu.com -idongte.com -idosend.com -idotools.com -idouba.net -idoupiao.com -idourl.com -idouyinstatic.com -idouyinvod.com -idouzi.com -idoyun.com -idqqimg.com -idreamschool.com -idreamsky.com -idreamsoft.com -idrools.com -idrwl.com -idscn.com -idscn.net -idsky.net -idspub.net -idsuipai.com -idtcdn.com -idtechwh.com -idting.com -idu9.com -idudo.com -iduo8.com -iduochong.com -iduoha.com -iduokan.net -idushu.com -idwzx.com -idyjy.com -idyzs.com -idzcp.com -idzoom.com -ie027.com -ie3.cc -ie515.com -ie525.com -ie815.com -ie915.com -ie935.com -ie977.com -ieasn.com -ieasy123.com -ieatlu.xyz -ieayoio.com -iebyte.com -iecdn.com -iecidc.com -iecie.com -iecity.com -iecnews.com -iecnu.com -iecool.com -iedon.com -ieduchina.com -ieduw.com -ieechina.com -ieeewifi.com -ieeod0.com -ieepa.org -iefang.com -iegcom.com -iegee.net -iegourl.com -iejiu.com -ieliulanqi.com -ielts68.com -ieltschn.com -iemblog.com -ienjoys.com -ienjoys.mobi -ierhou.com -iermu.com -iershoushu.com -iesdouyin.com -ieshu.com -iessay100.com -ietdata.com -iewb.net -iewie.org -iewzx.com -iexx.com -iezuo.com -ifabao.com -ifabiao.com -ifaclub.com -ifahao.com -ifanbei.com -ifangarden.com -ifanggo.com -ifangka.com -ifanjian.net -ifanr.com -ifanr.in -ifanrusercontent.com -ifareast.com -ifatrabbit.com -ifavart.com -ifaxin.com -ifaxin.org -ifc58.com -ifchange.com -ifeimo.com -ifeng.com -ifeng.fm -ifeng.name -ifengcdn.com -ifenghui.com -ifengimg.com -ifengli.com -ifenglian.com -ifengniao.net -ifengo.com -ifengpai.com -ifengtui.com -ifenguo.com -ifengweekly.com -ifengwoo.com -ifensi.com -ifenso.net -ifenxi.com -ifere.com -ifeve.com -ifindever.com -ifindhs.com -ifintechnews.com -ifiretech.com -ifitbox.com -ifjing.com -iflyhealth.com -iflying.com -iflyink.com -iflyos.vip -iflyread.com -iflyrec.com -iflyresearch.com -iflysec.com -iflytek.com -iflytektstd.com -ifma-china.org -ifmicro.com -ifmtech.com -ifmx.cc -iforce-media.com -iforl.com -ifoxfactory.com -ifreecdn.com -ifreecomm.com -ifreedom001.com -ifreepsd.com -ifreetalk.com -ifreeurl.com -ifreewallpaper.com -ifresh.mobi -ifromvr.com -ifseclabs.com -iftell.com -ifttl.com -ifukua.com -ifulelol.com -ifumanhua.net -ifundstore.com -ifunmac.com -ifunvip.com -ifutest.com -ifutureworks.com -ifval.com -ifxsb.com -ifxtx.com -ifzxs.cc -igame007.com -igame58.com -igamecj.com -igao7.com -igaoda.com -igarden365.com -igbox.net -igdmfg.com -igdzc.com -igea-un.org -igeak.com -igeekbar.com -igeidao.com -igelou.com -igenetech.com -igengmei.com -igerun.com -igeshui.com -igetget.com -igetui.com -igevin.info -igexin.com -igigo.net -igo180.com -igo998.com -igome.com -igomkt.com -igooma.com -igoyx.com -igreatdream.com -igslb.net -iguanyu.com -iguazutraffic.xyz -iguder.com -iguitar.me -igumo.cc -igunsd.xyz -iguoguo.net -iguopin.com -iguoplay.com -iguowan.com -iguxuan.com -igwfmc.com -ihacksoft.com -ihaier.co -ihaier.com -ihaima.com -ihaiu.com -ihalf.co -ihanghai.com -ihanhua.com -ihani.tv -ihanshi.com -ihaoge.net -ihaoxi.com -ihaozhuo.com -ihappy.vip -ihaveu.com -ihaveu.net -ihdt.tv -ihebi.info -ihecc.org -ihei5.com -iheima.com -iheima.net -ihengheng.com -ihenji.com -ihepa.com -ihetou.com -ihewro.com -ihggccampaign.com -ihhubei.com -ihint.me -ihisce.com -ihitui.com -ihjiu.com -ihktv.com -ihlnews.com -ihomefnt.com -ihomesoft.net -ihoms.com -ihongma.com -ihongpan.com -ihongqiqu.com -ihongyou.com -ihonker.org -ihou.com -ihr360.com -ihref.com -ihrscloud.com -ihuaben.com -ihuajian.net -ihuan.me -ihuanling.com -ihuayou.net -ihuazhan.net -ihui.com -ihuidian.com -ihuigo.com -ihuikou.net -ihuipao.com -ihuiu.com -ihuman.com -ihumand.com -ihungyi.com -ihuochaihe.com -ihuoqiu.com -ihuoyan.com -ihuyi.com -ihuzuan.com -ihwrm.com -ihx.cc -ihxlife.com -ihykb.com -ihypo.net -ihzzy.com -ii.cc -ii010.com -ii090.com -ii74.com -ii77.com -iiad.com -iianews.com -iiaq.net -iibechina.com -iibq.com -iicp.net -iidns.com -iiexe.com -iifab.com -iigs9.com -iii80.com -iiiff.com -iiiimg.com -iiijk.com -iiilab.com -iiiview.net -iiiyan.com -iikeji.com -iikuzhan.com -iikx.com -iincn.net -iiong.com -iireadiness.com -iirii.com -iis3.com -iis7.com -iischool.com -iisicp.com -iisp.com -iissbbs.com -iissnan.com -iitcp.com -iitoutiao.com -iivey.com -iiycy.com -iiyi.com -iiyibbs.com -ijac.net -ijh.cc -ijia360.com -ijiandao.com -ijiangyin.com -ijianji.com -ijiatv.com -ijie.com -ijiedian.com -ijiela.com -ijindun.com -ijingdi.com -ijinshan.com -ijinzhuan.com -ijishu.cc -ijita.com -ijiujiao.com -ijiwei.com -ijiwen.com -ijizhi.com -ijjnews.com -ijnqc.com -ijogame.com -ijq.tv -ijrou.com -ijsp.net -ijtoo.com -ijuanshi.com -ijuer.com -ijuhepay.com -ijunhai.com -ijunxun.com -ijutou.net -ijuwu.com -ijzhang.com -ik123.com -ik3cloud.com -ikafan.com -ikaixun.com -ikaka.com -ikakuedu.com -ikanchai.com -ikandian.com -ikang.com -ikantu365.com -ikaoguo.com -ikaolaa.com -ikcd.net -ikcest.org -ikcrm.com -ikcw.com -ike-global.com -ikeguang.com -ikemeng.com -ikepu.com -ikjtao.com -ikjzd.com -ikmt.net -ikonfx.com -ikongjian.com -ikongjun.com -ikonke.com -ikoo8.com -ikozn.com -iksea.com -iku8.com -ikuai8-wifi.com -ikuai8.com -ikuailian.com -ikuaiy.net -ikuajing.com -ikuvn.com -ikx.me -ikxin.com -il8r.com -ilab-x.com -ilaic.org -ilaisa.com -ilaitui.com -ilancai.com -ilanluo.com -ilanni.com -ilanx.net -ilanx0.net -ilaw66.com -ilawpress.com -ilazycat.com -ileci.com -ileedarson.com -ileehoo.com -ilego.club -ilewan.com -iliangcang.com -ilibrand.com -ilidubj.net -ilife69.com -ilifesmart.com -ilingdai.com -ilinkee.com -ilinki.net -ilinkone.com -ilinux.xyz -ilinuxkernel.com -ilinyi.net -ilishi.com -ilishi.net -ilitu.com -iliuliu.com -ilixiangguo.com -iliyu.com -ilkeji.com -ilkwork.com -illumpaper.com -ilmgq.com -ilohas.com -iloli.bid -ilongre.com -ilongterm.com -iloveanan.com -ilovefishc.com -ilovelvxing.com -iloveyou14.com -iloveyouxi.com -ilovezuan.com -iloxp.com -ilqsh.com -ilsungf.com -ilucking.com -ilucong.net -ilufan.com -iluoy.com -iluoyang.com -iluqi.com -ilustrepro.com -iluvatar.ai -ilv6.com -ilvping.com -ilxdh.com -im-ad.com -im-cc.com -im170.com -im286.com -im286.net -im298.com -im2maker.com -im323.com -im520.com -im577.com -im5i.com -im87.net -imac.hk -imaccn.com -imaegoo.com -imageaccelerate.com -imageedu.com -imagefz.com -imagehub.cc -imagelol.com -imageoss.com -imagepy.org -images-cache.com -images.apple.com -images.apple.com.akadns.net -images.apple.com.edgekey.net.globalredir.akadns.net -images.benchmarkemail.com -images.samsung.com -imageter.com -imagetotxt.com -imaginde.com -imagineadtech.com -imags-google.com -imahui.com -imaibo.net -imaijia.com -imaitu.com -imalljoy.com -imandarin.net -imanhuaw.com -imanhuaw.net -imaojiang.com -imarketchina.com -imaschina.com -imasdk.googleapis.com -imatchic.com -imatlas.com -imaycon.com -imayitxt.com -imazingchina.com -imbackr.com -imbeer.com -imblog.in -imbtk.com -imbusy.me -imcaviare.com -imcec.org -imcn.me -imdac.org -imdadui.com -imdaike.com -imdo.co -imdou.net -imdst.com -imedao.com -imedicalai.com -imedp.com -imeete.com -imeete.net -imeibian.com -imeidb.com -imeihei.com -imeiju.cc -imeijutt.com -imeishike.com -imeitou.com -imekaku.com -imeme.tv -imesong.com -imever.me -imeyahair.com -imfirewall.com -img-space.com -img-sys.com -img.samsungapps.com -img005.com -img168.net -img16888.com -img4399.com -img898.com -imgcdc.com -imgcdn2.com -imgchr.com -imgeek.org -imgii.com -imglefeng.com -imglink.win -imgo.tv -imgscdn.com -imgsha.com -imgshangman.com -imgsina.com -imgtu.com -imgu.cc -imhan.com -imhanjie.com -imhaowa.com -imhdr.com -imhuasheng.com -imhuchao.com -imhunk.com -imiaobige.com -imibaby.net -imicang.com -imiker.com -imindmap.cc -iminho.me -iminisd.com -imipy.com -imitui.com -imjiayin.com -imkerwin.com -imkevinyang.com -imkira.com -imlaidian.com -imlcl.com -imlgm.com -imlianai.com -imliuyi.com -imliyan.com -immi520.com -immiexpo.com -immivip.com -immomo.com -immomogame.com -immusician.com -immusoul.com -immwall.com -imnerd.org -imnight.com -imobile-ent.com -imobon.com -imochen.com -imochy.com -imoduo.com -imoe.me -imoeer.com -imofan.com -imoffice.com -imok01.com -imolink.com -imomoe.ai -imomoe.com -imomoe.in -imomoe.io -imomoe.jp -imooc.com -imoocc.com -imoodou.com -imoonfm.com -imooo.com -imopan.com -imotao.com -imoxiu.com -imp3.net -imperfectionstudio.com -imperial-vision.com -impk.cc -impk113.com -impnails.com -impng.com -impopper.com -importnew.com -impta.com -imqq.com -imqueenapp.com -imququ.com -imrfresh.com -imshell.com -imshusheng.com -imsilkroad.com -imsle.com -imspm.com -imsun.net -imsxm.com -imtmp.net -imtuan.com -imtvs.cc -imuke.com -imuo.com -imushan.com -imuum.com -imvictor.tech -imw.me -imwaco.com -imwallet.com -imweb.io -imwexpo.com -imwork.net -imxh.com -imxingzhe.com -imxpan.com -imxyd.com -imycdn.com -imydl.com -imydl.tech -imydns.net -imyip.net -imys.net -imyshare.com -imyuedu.com -imzhongxin.com -imzhou.com -in-en.com -in001.com -in189.com -in66.com -in6way.com -in800.com -in955.com -inabr.com -inad.com -inanrenbang.com -inapian.com -inass.org -inbeijing.org -inbilin.com -inbooker.com -inc365.com -incake.net -incensechina.com -incloudexpo.com -incoto.com -incsg.com -ind-app-comp.com -ind9ed.com -indaboom.com -indexedu.com -indexedu.net -indiancn.com -indics.com -indiehacker.im -indielight.net -indienova.com -indier.com -indmi.com -indongfang.com -induta.com -indvaan.com -ineice.com -inengyuan.com -inesa-it.com -inetgoes.com -inetnoc.com -inewhope.com -inewland.com -inewoffice.com -inewpower.com -inewya.com -inezha.com -infarts.net -infertilitybridge.com -infineon-autoeco.com -infinitescript.com -infinityarts.net -infinitynewtab.com -info.cc -info10.com -info110.com -info35.com -infobidding.com -infobigdata.com -infocomm-journal.com -infoier.com -infoipwest.com -infong.net -infoobs.com -infoqstatic.com -inforbus.com -inforguard.net -informrack.com -inforsec.org -infoshow.net -infosoft.cc -infovc.com -infowuxi.com -infoxa.com -infoxgame.com -infoxmation.com -infzm.com -ing10bbs.com -ing2ing.com -ingageapp.com -ingcore.com -ingdan.com -ingenic.com -ingkee.com -ingping.com -inhdd.com -inhe.net -inhi.kim -inhuawei.com -ini3e.com -inibiru.com -inicoapp.com -inidc.net -inimc.com -ininin.com -init-p01md-lb.push-apple.com.akadns.net -init-p01md.apple.com -init-p01st-lb.push-apple.com.akadns.net -init-p01st.push.apple.com -init-s01st-lb.push-apple.com.akadns.net -init-s01st.push.apple.com -initialview.com -initnil.com -inja.com -inkankan.com -inkanke.com -inkcn.com -inke.com -inke.tv -inkeygo.com -inkonote.com -inktok.com -inkuai.com -inlaylink.com -inlishui.com -inlovektv.com -inlsd.org -inmeng.net -inmuu.com -inneed.club -innjia.com -innlym.me -innocomn.com -innojoy.com -innotechx.com -innotron.com -innovatedigital.com -innovidcn.com -innovisgroup.com -innsue.com -innvitor.com -inoherb.com -inoneh5.com -inoteexpress.com -inovance-automotive.com -inpandora.com -inpla.net -inplayable.com -inputmore.com -inqan.com -inrice.com -inrugao.com -insarticle.com -inshiqi.com -insnail.com -inspur.com -inspuronline.com -inspurpower.com -instafogging.com -insun-china.com -insuns.com -inswindow.com -insxz.com -int-agri.com -int800.com -intaek.com -intcache.net -intdmp.com -intekey.com -intel-space.com -intelcupid.com -intelligentmanufactory.com -intelvisioncn.com -inter12.org -inter1908.net -interactivebrokers.hk -interbator.com -internationalbrand.net -internbird.com -internet-dns.com -internet7.vip -internetcaff.com -internetke.com -internettrademark.com -internetworld.cloud -intertid.com -interval.im -intiea.org -intio.org -intl-hzc.com -intlgame.com -intlscdn.com -intmedic.com -intmian.com -intnet.net -intohard.com -intopet.com -intovfx.com -intowz.com -intozgc.com -intple.com -intsavi.com -intsig.net -intsweet.com -intwho.com -intwk.com -inuobi.com -inveno.com -inverter.so -invescogreatwall.com -investank.com -investguider.com -investoday.net -investorscn.com -investstkitts.org -inwaishe.com -inwatch.cc -inxedu.com -inyuapp.com -inzone-auto.com -inzotek.com -ioa365.com -ioage.com -iocrest.com -ioeyjsb.com -ioffershow.com -ioffice100.com -ioio.in -ioio.pw -ioiox.com -iok.la -iol8.com -iomsew.com -ioneball.com -ionewu.com -ionic.wang -ionichina.com -ionicliquid.org -iooeoo.com -iopenhec.com -ioperat.com -ioqq.com -ios1234.com -iosapps.itunes.g.aaplimg.com -iosappx.com -iosask.com -iosfengwo.com -iosinit.com -iosmu.com -iosre.com -ioswift.org -iot-online.com -iot1001.com -iot101.com -iot688.com -iotachem.com -iotbay.com -iotexpo.org -iotfair.net -iotku.com -iotmag.com -iotpai.com -iotwrt.com -iotxing.com -iovweek.com -iowiki.com -ip-china.org -ip-guard.net -ip.fm -ip008.com -ip138.com -ip168.com -ip192.com -ip33.com -ip3366.net -ip518.com -ip668o.com -ip669.com -ip87.com -ipadown.com -ipadview.com -ipagame.net -ipaiban.com -ipail.com -ipalfish.com -ipalmap.com -ipampas.com -ipanda.com -ipandao.com -ipandata.com -ipangcai.com -ipanshi.com -ipaomi.com -ipaotuan.com -ipason.com -ipay.so -ipcc.com -ipcchain.org -ipcfun.com -ipchaxun.com -ipchina.com -ipcmen.com -ipcool.info -ipcorecatalog.com -ipcwifi.com -ipcxz.com -ipdaili.com -ipddz.com -ipdftool.com -ipdianhua.com -ipdsms.com -ipduoduo.cc -ipduoduo.com -ipease.net -ipehua.com -ipengchen.com -ipengtai.com -iper2.com -ipexp.com -ipfeibiao.com -ipfen.com -ipfsbit.com -ipgoal.com -iph123.com -iphone-ld.apple.com -iphonediule.com -iphp8.com -ipianchang.com -ipin.com -ipinba.com -ipingyao.com -ipinyou.com -ipip.net -ipktv.com -ipku.cc -ipku.com -iplascloud.com -iplaypy.com -iplaysoft.com -ipmay.com -ipmph.com -ipo.hk -ipo.la -ipo3.com -ipoceo.com -iposeidongame.com -ipple.net -ipplus360.com -ippzone.com -ipr114.net -ipr123.com -ipr66.com -iprchn.com -iprdaily.com -ipresst.com -iprun.com -ips8.com -ipsir.net -ipssh.net -iptalent.com -iptrm.com -ipuu.net -ipuyuan.com -ipv4.host -ipv6.la -ipv6dp.com -ipyker.com -ipyy.com -iq123.com -iqalliance.org -iqcrj.com -iqdii.com -iqdnet.com -iqianbang.com -iqianggou.com -iqianjin.com -iqianyue.com -iqidian.com -iqihang.com -iqilu.com -iqilun.com -iqinbao.com -iqing.com -iqingdao.com -iqingren.com -iqingua.com -iqishu.la -iqiwx.com -iqiyi.com -iqiyih5.com -iqiyipic.com -iqshw.com -iquanba.com -iquanfen.com -iquanwai.com -iqucai.com -iqujing.com -iquncha.com -iqunix.com -iqunix.store -iqupdate.com -iquwang.com -iqxbf.com -iqxedu.com -iqycamp.com -iranshao.com -iraoping.com -iray.me -ircmnr.com -ireader.com -ireadercity.com -ireaderm.net -ireadweek.com -ireadyit.com -irealbest.com -irealtech.com -irecyclingtimes.com -iredwhale.com -irelxtech.com -iresearchad.com -iresearchchina.com -irest.tv -irising.me -irlianmeng.com -irockbunny.com -irockwill.com -iroing.com -ironfishchina.com -irongbei.com -ironghui.com -irootech.com -irpmgcmd.com -irs01.com -irs01.net -irs03.com -irskj.com -iruad.com -iruanmi.com -iruidian.com -iruixing.com -irukou.com -irunyan.com -is-programmer.com -is1-ssl.mzstatic.com -is1.mzstatic.com -is2-ssl.mzstatic.com -is2.mzstatic.com -is26.com -is3-ssl.mzstatic.com -is3.mzstatic.com -is36.com -is4-ssl.mzstatic.com -is4.mzstatic.com -is5-ssl.mzstatic.com -is5.mzstatic.com -isaced.com -isamanhua.com -isaonian.com -isay365.com -isbdai.org -iscrv.com -isdox.com -iseedog.com -isenruan.com -iseoku.com -isf.ink -isfashion.com -isfirst.net -ish168.com -ishaanxi.com -ishala.com -ishang.net -ishangman.com -ishangtong.com -ishangu.com -ishangzu.com -ishanshan.com -ishansong.com -ishaohuang.com -ishare20.net -isharebest.com -isharepc.com -isheely.com -isheet.net -isheji5.com -ishenbao.com -ishenping.com -ishenyou.com -ishhuo.com -ishici.com -ishipoffshore.com -ishoujizhuan.com -ishowchina.com -ishowx.com -ishubao.org -ishugui.com -ishuhui.com -ishuhui.net -ishuirong.com -ishuiyun.com -ishumei.com -ishuocha.com -ishuqi.com -ishuse.com -isigu.com -isilicontech.com -isinosig.com -isixue.com -iskcd.com -iskryou.com -isky000.com -iskylinem.com -iskysoft.com -iskytree.net -iskyworth.com -islide.cc -isluo.com -ismartgo.com -ismartware.com -ismdeep.com -isme.pub -isming.me -iso-est.com -iso-iso9000.com -isobar.tech -isoft-linux.org -isoftstone.com -isoftwind.com -isoo.cc -isorange.com -isoshu.com -isoucai.com -isoyes.com -isoying.com -isoyu.com -isp.cx -ispeaken.com -ispecial.xyz -isport2008.com -ispservice.cc -isqhy.com -isrcb.com -isscloud.com -issconline.com -issedu365.com -isthnew.com -istpei.com -istrongcloud.com -istudyinchina.org -istylepdf.com -isudaji.com -isuike.com -isumiao.com -isummi.com -isun.org -isux.us -isuzhou.me -isvee.com -isvjcloud.com -isvjd.com -isw-ex.com -iswifting.com -it-api.com -it-bound.com -it-crazy.net -it-home.org -it-shit.com -it.link -it007.com -it086.net -it1069.com -it120.cc -it1352.com -it163.com -it165.net -it168.com -it2021.com -it3588.com -it376.com -it399.com -it525.com -it528.com -it578.com -it610.com -it666.com -it689.com -it69.net -it707.com -it7e.com -it7t.com -it918.com -it985.com -it9g.com -itaboola.com -itaic.org -itaiping.com -itakeeasy.com -italyclassico.com -italycn.com -itamt.com -itangbole.com -itangyuan.com -itanlian.com -itanzi.com -itao.com -itaoke.org -itaokecms.com -itaotuo.com -itavcn.com -itazhi.com -itbegin.com -itbeihe.com -itbiaoju.com -itbilu.com -itbkz.com -itblw.com -itbole.com -itbook5.com -itboth.com -itbour.com -itboy.net -itbulu.com -itbuy.com -itbyc.com -itbyte.net -itcacfo.com -itchaguan.com -itcodemonkey.com -itcpn.net -itczh.com -itdaan.com -itdabao.com -itdcw.com -itdhz.com -itdiffer.com -itdks.com -itdlc.com -itdoor.net -itdos.com -itdos.net -iteblog.com -itechate.com -itechol.com -itedou.com -iteedu.com -iteer.net -itek-training.com -itelly.net -itellyou.com -itensoft.com -iter168.com -itest.info -itetc.org -itexamprep.com -iteye.com -itfanr.cc -itfans.net -itfeed.com -itfenghui.com -itfly.net -itfw5.com -itgd.net -itgeeker.net -itgege.com -itgemini.net -itgo.me -itgochina.com -itgoodboy.com -ithaowai.com -ithard.com -ithat.net -itheat.com -itheima.com -ithelei.com -ithenticatecn.com -ithome.com -ithome.net -ithor.com -ithor.net -ithothub.com -ithov.com -itiankong.com -itiankong.net -itiexue.net -itiger.com -itigergrowth.com -itilxf.com -itilzj.com -itimep.com -itingwa.com -itit.io -itiyan.net -itiyun.com -itjk.me -itjoy.net -itjspx.com -itjuzi.com -itkeyword.com -itkoala.com -itkoudai.com -itlu.org -itluantan.com -itmanbu.com -itmind.net -itminus.com -itmo.com -itmoocs.com -itmop.com -itmsm.com -itmuch.com -itmyhome.com -itnan.net -itnb.cc -itnec.org -itnihao.com -itniwota.com -itnpc.com -itnpyfwshe.com -itnxs.com -itocp.com -itoec.org -itogame.com -itokit.com -itokoo.com -itonghui.com -itopbaby.com -itopers.com -itophis.com -itopic.org -itopplay.com -itopsdk.com -itotaku.net -itotii.com -itouchchina.com -itougu.com -itoumi.com -itoutiao.co -itoutiaoimg.com -itoutiaostatic.com -itouxian.com -itouzi.com -itpaidui.com -itpeo.net -itpon.com -itpow.com -itppi.org -itpub.net -itpux.com -itpux.net -itpwd.com -itrace.cc -itran.cc -itranslater.com -itrid.com -itrip.com -itruelife.com -itruke.com -itry.com -its114.com -itscoder.com -itshai.com -itsiwei.com -itsk.com -itslaw.com -itsmephoto.net -itsogo.net -itsoku.com -itsun.com -itsvse.com -ittribalwo.com -ituad.com -ituba.cc -itugo.com -ituibar.com -ituite.com -itunes-apple.com.akadns.net -itunes.apple.com -itunesconnect.apple.com -itushuo.com -itutu.tv -ituu.net -itwanger.com -itwlw.com -itwork.club -itwulin.com -itxe.net -itxiao.com -itxinwen.com -itxm.net -itxst.com -itxuexi.com -itxueyuan.com -itxueyuan.org -itxuye.com -ityears.com -itying.com -ityouknow.com -itypen.com -ityuan.com -ityxb.com -itzcdn.com -itzh.org -itzhp.com -itziy.com -itzjj.com -itzm.com -itzmx.com -itzmx.net -iu18.com -iu25.com -iu95522.com -iuban.com -iucars.com -iucdn.com -iudodo.com -iueux.com -iufida.com -iuinns.com -iuni.com -iuniware.com -iuoooo.com -iuplus.com -iuuu9.com -iuynfg.com -ivali.com -ivan.xin -ivcheng.com -ivemusic.net -ivideostar.com -iviewui.com -ivixivi.com -ivmoe.com -ivocaloid.com -ivsky.com -ivu4e.com -ivvajob.com -ivwen.com -ivy-school.org -ivybaby.me -ivycoffee.com -ivydad.com -ivydom.com -ivypub.org -ivyschools.com -ivysun.net -ivywing.me -iwala.net -iwan0.com -iwan4399.com -iwanbei.com -iwanboy.com -iwangding.com -iwangnan.com -iwanoutdoor.com -iwanvr.com -iwanws.com -iwanyl.com -iwapan.com -iwasai.com -iwatch365.com -iwatch365.net -iwcoo.com -iwebad.com -iwebchoice.com -iwecan.net -iweeeb.com -iweek.ly -iweekapi.com -iweidu.net -iweishow.com -iweizhijia.com -iweju.com -iwellen.com -iwencai.com -iwenson.com -iwgame.com -iwhgao.com -iwhr.com -iwin10.cc -iwin10.com -iwin10.net -iwingchina.com -iwiscloud.com -iwjw.com -iwncomm.com -iwordnet.com -iworm.net -iwoshang.com -iwpai.com -iwshang.com -iwucha.com -iwwwwwi.com -iwxapi.com -iwyv.com -iwyvi.com -iwzwy.com -ixb.cc -ixbd.net -ixbren.net -ixcv.com -ixdc.org -ixfc.net -ixiangche.com -ixiangyu.com -ixianlai.com -ixianzong.com -ixiao9.com -ixiaochengxu.cc -ixiaolu.com -ixiaowai.com -ixiatxt.com -ixibeiren.com -ixieme.com -ixigua.com -ixiguan.com -ixiguavideo.com -iximo.com -ixinglu.com -ixingpan.com -ixinmanzhishe.com -ixinqing.com -ixintui.com -ixinwei.com -ixiqi.com -ixiqin.com -ixiumei.com -ixiupet.com -ixixili.com -ixizang.com -ixmu.net -ixniang.com -ixpub.net -ixs.la -ixsch.com -ixu.me -ixueshu.com -ixueyi.com -ixxm.com -iy51.com -iyakuhin-mall.com -iyangcong.com -iyaou.com -iyaxi.com -iyaxin.com -iyaya.com -iyaya.info -iyazhu.com -iyb.tm -iycdm.com -iycsky.com -iycwl.com -iyd.wang -iydsj.com -iydu.net -iyeeda.com -iyeele.com -iyenei.com -iyingdi.com -iyingji.com -iyiou.com -iyiqi.com -iyishengyuan.com -iyiyun.com -iyizhai.com -iyocloud.com -iyong.com -iyooread.com -iyoowi.com -iyoucai.com -iyoudui.com -iyouguoo.com -iyouhun.com -iyoujia.com -iyoujiao.net -iyoule.com -iyouman.com -iyouqian.com -iyouxia.com -iyouxun.com -iytc.net -iythf.com -iyuedan.com -iyuedian.com -iyunbao.com -iyunbiao.com -iyunmai.com -iyunshu.com -iyuntian.com -iyunv.com -iyunyue.com -iyunzk.com -iyuxy.com -iyx668.com -iyxku.com -iyyin.com -iyz168.com -iz55.com -izacholsm.com -izaodao.com -izazamall.com -izestchina.com -izhangchu.com -izhangheng.com -izhaohe.com -izhaowo.com -izhenxin.com -izheteng.com -izhihuicheng.net -izhihuo.com -izhikang.com -izhiliao.com -izhiqun.com -izhishi.com -izhongxia.com -izhuanfa.com -izhuce.com -izihun.com -iziyo.com -izjj.com -izmm.me -izmzg.com -izshare.net -izt6.com -izt8.com -iztwp.com -iztyy.com -izuche.com -izuchecdn.com -izuiyou.com -izumicn.com -j-h-k.com -j-smu.com -j1.com -j1health.com -j1sc.com -j3pz.com -j66.net -j7994.com -j888s.xyz -j9p.com -jaadee.com -jaadee.net -jabizb.com -jacklm2.com -jacklm3.com -jackon.me -jackslab.org -jackxiang.com -jacky-blog.com -jackyang.me -jackyyf.com -jackzhu.com -jadetowerccrc.com -jae.sh -jaeapp.com -jaeosc.com -jafeney.com -jajqj.com -jakegame.com -jakehu.me -jakting.com -jalan.space -jalorsoft.com -jamespan.me -jamidol.com -jammyfm.com -jamoxi.com -jampotgames.com -jamxio.com -janbao.net -jandan.com -jandan.net -jane7.com -janezt.com -janmeng.com -janpn.com -janrain.biz -janxing.com -jappstore.com -jarencai.com -jarhu.com -jartto.wang -jarvisw.com -jasolar.com -jason-z.com -jasongj.com -jasperxu.com -jasve.com -jatd.org -java-er.com -java1234.com -java2000.net -java2008.com -java2class.net -javaapk.com -javaboy.org -javacui.com -javadoop.com -javaear.com -javaer.xyz -javaeye.com -javafxchina.net -javanav.com -javashuo.com -javatang.com -javaweb.shop -javawind.net -javaxxz.com -javazhiyin.com -javazx.com -javbuy.xyz -javier.io -javitamedical.com -jaxcx.com -jaycn.com -jayfc.com -jayfu.tk -jayjw.com -jayme.net -jaytrn.com -jazzyear.com -jb-hacker.com -jb1000.com -jb51.cc -jb51.net -jbaier023.com -jbaobao.com -jbb.one -jbcz.tv -jbdown.com -jbedu.org -jbelf.com -jbfoundry.com -jbhdq.com -jbl100.com -jblts.com -jbpbox.com -jbqipa.com -jbryun.com -jbxy.com -jbzj.com -jbzwread.com -jbzyk.com -jbzyw.com -jc-ai.com -jc-dl.net -jc-saas.com -jc-space.com -jc0531.com -jc170.com -jc315.com -jc35.com -jc56.com -jc85.com -jcbctv.com -jccsoc.com -jccug.com -jcedu.org -jcf94.com -jcgcn.com -jchelec.com -jchl.com -jchla.com -jchxmc.com -jcjpt.com -jcku.com -jcloud-cache.com -jcloud-cdn.com -jcloud.com -jcloudcache.com -jcloudcs.com -jcloudec.com -jcloudedge.com -jcloudgslb.com -jcloudimg.com -jcloudlb.com -jcloudstatic.com -jclps.com -jcmob.net -jcmtxs.com -jcnano.com -jcnk120.com -jcodecraeer.com -jcpeixun.com -jcqczb.com -jcqzw.com -jcrb.com -jcsb.com -jcsfs.com -jcsjt.com -jcssyxh.com -jctmj.net -jctrans.com -jctuku.com -jcu.cc -jcwcn.com -jcwgk.com -jcwxiao.com -jcyes.com -jcyipong.com -jcyx2019.com -jczhijia.com -jczhiyao.com -jd-88.com -jd-app.com -jd-bbs.com -jd-df.com -jd-ex.com -jd-fm.com -jd-tv.com -jd.co -jd.com -jd.hk -jd100.com -jd2img.com -jd360.hk -jd5.com -jdair.net -jdajf.com -jdallianz.com -jdb100.com -jdbbs.com -jdbbx.com -jdbpcb.com -jdbusiness.com -jdcache.com -jdcapital.com -jdccie.com -jdcdn.com -jdcf88.com -jdcjsr.com -jdcloud-oss.com -jdcloud-scdn.net -jdcloud.com -jdcloudcache.com -jdcloudcache.net -jdcloudedge.com -jdcloudnaming.net -jdcloudstatic.net -jdcloudstatus.net -jdcloudwaf.com -jdcq.net -jdctky.com -jdd-hub.com -jdd.com -jddaw.com -jddb.net -jdddata.com -jddebug.com -jddglobal.com -jddj.com -jddmoto.com -jdedu.net -jdfcloud.com -jdfhq.com -jdfschool.com -jdgslb.com -jdgwdq.com -jdhhmd.com -jdhonline.com -jdhyplay.com -jdiy.club -jdjingmai.com -jdjob88.com -jdjrdns.com -jdjygold.com -jdjys.com -jdkcb.com -jdkindle.com -jdl.com -jdluosi.com -jdlxzx.com -jdnettv.com -jdnews.net -jdon.com -jdpay.com -jdpaydns.com -jdplay.com -jdsinspection.com -jdtjy.com -jdvisa.com -jdw001.com -jdwan.com -jdwgame.com -jdwl.com -jdworldwide.com -jdwx.cc -jdwx.info -jdwxmagazine.com -jdwxs.com -jdwxwz.com -jdxc.net -jdxcw.com -jdxfw.com -jdxlt.com -jdxs5200.net -jdxzz.com -jdy.com -jdy8848.com -jdycdn.com -jdyou.com -jdypf.com -jdzbth.com -jdzdeyy.com -jdzeduyun.com -jdzj.com -jdzjdz.com -jdzmc.com -jdzol.com -jdzol.net -jeacar.com -jeagine.com -jeanphy.online -jeanssalon.com -jeasyui.net -jedi-games.com -jedoo.com -jeebei.com -jeecg.com -jeecg.org -jeecms.com -jeee.ltd -jeejen.com -jeekun.com -jeeplus.org -jeepshoe.net -jeepxie.net -jeesci.com -jeesite.com -jeeyaa.com -jefang.com -jeffdesign.net -jeffjade.com -jeffstudio.net -jegotrip.com -jehudf.com -jelivor.com -jelleybrown.com -jellow.club -jellow.site -jellymoo.com -jellythink.com -jenglishj.com -jeongen.com -jeoshi.com -jerehedu.com -jerei.com -jerryzou.com -jescard.com -jesgoo.com -jesselauristonlivermore.com -jesselivermore.com -jestq.com -jethoo.com -jetmobo.com -jetneed.com -jetsum.com -jetsum.net -jevictek.com -jewellworld.com -jewelryseeds.com -jexus.org -jeyi.com -jf2688.com -jf9p.com -jfbcb.com -jfbuilding.com -jfcaifu.com -jfcdns.com -jfcgf.com -jfdaily.com -jfdown.com -jfduoduo.com -jfdwy.com -jfedu.net -jfenz.com -jfewle.com -jfffabc.com -jfh.com -jfinal.com -jfinfo.com -jfocus.net -jfq.com -jfrogchina.com -jfscd.com -jfshare.com -jfsky.com -jfstatic.com -jfuwu.com -jfxqczl.com -jfydgame.com -jfyiyao.com -jfz.com -jfzhiyao.com -jgaoxiao.com -jgcqgf.com -jgdq.org -jgdun.com -jgew3d.com -jgg09.com -jggame.net -jggjj.com -jgjh.com -jgscct.com -jgsdaily.com -jgshwx.com -jgtc315.com -jguo.com -jgvnews.com -jgwsoft.com -jgxlzd.com -jgy.com -jgyflqc.com -jgyljt.com -jgzx.org -jgzyw.com -jh3j.com -jh8k.com -jhbst.com -jhcb.net -jhcms.com -jhctbank.com -jhdqz.com -jhdxjk.com -jhfcuav.com -jhfgg.com -jhfl.com -jhforever.com -jhgtgb.com -jhgzn.net -jhlengku.com -jhm2012.com -jhnsh.com -jhnsyh.com -jhonge.net -jhonse.com -jhpz58.com -jhqshfly.com -jhrcbank.com -jhsbggw.com -jhsctv.com -jhsdai.com -jhsfojiao.com -jhsjtxx.com -jhssapp.com -jht868.com -jhtcgroup.com -jhua168.com -jhwaimai.com -jhwl444.com -jhwrsq.com -jhxms.com -jhyongyou.com -ji-qi.com -ji36.net -ji7.com -jia-he-jia.com -jia.com -jia360.com -jia400.com -jiaads.com -jiaapps.com -jiabangcnc.com -jiabasha.com -jiacai001.com -jiadezhixin.com -jiadingqiang.com -jiaduijiaoyou.com -jiae.com -jiafang168.com -jiafenqi.com -jiagedan.com -jiageip.vip -jiagle.com -jiagou1216.com -jiagouyun.com -jiaguhome.com -jiagulun.com -jiaheu.com -jiahongjingmao.com -jiahuacinema.com -jiahuaming.com -jiahuism.com -jiain.net -jiaji.com -jiaji28.net -jiajia.tv -jiajiakt.com -jiajianhudong.com -jiajiao114.com -jiajiaoban.com -jiaju-hy.com -jiaju.cc -jiaju.com -jiaju100.com -jiajucj.com -jiajuketang.com -jiajumi.com -jiajuol.com -jiakaobaodian.com -jiakaodashi.com -jiakeshuma.com -jialaxin.cc -jialebao.cc -jialez.com -jialidun.com -jialingmm.net -jializyw.com -jiameng.com -jiameng001.com -jiamengdp.com -jiamengfei.com -jiamengwoba.com -jiamiantech.com -jiaming.pro -jiaminghi.com -jiamisoft.com -jiamofang.net -jian.net -jianada-qianzheng.com -jianai360.com -jianan5.com -jianbaizhan.com -jianbaolife.com -jianbh.com -jianbihua.org -jianbihua360.com -jianbihuadq.com -jianbing.com -jiancai.com -jianchacha.com -jianchihu.net -jianchiyundong.com -jiandaima.com -jiandan.net -jiandana.com -jiandansousuo.com -jiandanxinli.com -jiandaopay.com -jiandaoyun.com -jiandati.com -jiandiao.com -jiando.com -jiandudu.com -jiane86.com -jianeryi.com -jianfei.com -jianfei.net -jianfeiba.com -jianfeibaike.com -jianfeidaren.com -jianfengstudio.com -jiangbeishuicheng.com -jiangchaochina.com -jiangcp.com -jiangduoduo.com -jianghaihao.com -jianghao.wang -jianghehuagong.com -jianghui.xyz -jiangjiaolong.com -jiangkk.com -jiangmin.com -jiangpaipinpai.com -jiangqx.com -jiangroom.com -jiangruyi.com -jiangshanlihong.com -jiangshi.org -jiangshi99.com -jiangsugqt.org -jiangsugwy.org -jianguo.tv -jianguo02.com -jianguoyun.com -jiangwang.net -jiangweishan.com -jiangxianli.com -jiangxindaojia.com -jiangxindc.com -jiangxinlingdu.com -jiangxiol.com -jiangxipiaoliu.com -jiangzi.com -jianhaobao.com -jianhen.net -jianhui.org -jianhui666.com -jianianle.com -jianick.com -jianjian.tv -jianjiaobuluo.com -jianjie8.com -jiankang.com -jiankangchangshou.net -jiankanghebei.com -jiankangju.com -jiankangkuaile99.com -jianke.cc -jianke.com -jianke.net -jiankeba.com -jiankong.com -jiankong58.com -jiankongbao.com -jianlaixiaoshuo.com -jianlc.com -jianlc.net -jianli-sky.com -jianli9.com -jianliao.com -jianliben.com -jianlika.com -jianliw.com -jianlixiu.com -jianloubao.com -jianluote.net -jianniang.com -jianpage.com -jianpaimeiye.com -jianpu8.com -jianpu99.net -jianq.com -jianqiaochina.com -jianshe99.com -jianshen8.com -jianshenmi.com -jianshiapp.com -jianshiduo.com -jianshu.com -jianshu.io -jianshu.tech -jianshuapi.com -jianshukeji.com -jiantizi.com -jiantuku.com -jianwang360.com -jianweitv.com -jianxin-tech.com -jianxun.io -jianyi.net -jianyu360.com -jianyuebg.com -jianyujiasu.com -jianyuweb.com -jianyv.com -jianzhanapp.com -jianzhanbao.net -jianzhangongsi.com -jianzhi.net -jianzhi8.com -jianzhiba.net -jianzhijiaoyu.com -jianzhikeji.com -jianzhila.net -jianzhimao.com -jianzhiwang.com -jianzhiwangzhan.com -jianzhiweike.net -jianzhiyixin.com -jianzhu2008.com -jiao4.com -jiaoben.net -jiaobuser.com -jiaochengzhijia.com -jiaodafu.net -jiaodian.pub -jiaodong.net -jiaofei123.com -jiaohuilian.com -jiaoliuqu.com -jiaomai.com -jiaoman.cc -jiaonan.net -jiaonizuocai.com -jiaoping.com -jiaoran.net -jiaoshouhuayuan.com -jiaoshouwang.com -jiaosm.com -jiaotou.org -jiaoyimao.com -jiaoyin.com -jiaoyitu.com -jiaoyixia.com -jiaoyizhu.com -jiaoyudao.com -jiaoyuwo.com -jiapin.com -jiapu.tv -jiapujidi.com -jiapuvip.com -jiaren.org -jiarenvip.com -jiarui.cc -jiasale.com -jiasao.net -jiashuangkuaizi.com -jiashule.com -jiaston.com -jiasuba.com -jiasubook.com -jiasudu666.com -jiasule.com -jiasule.net -jiasule.org -jiataoyuan.com -jiathis.com -jiatui.com -jiatx.com -jiawentrans.com -jiawin.com -jiaxiaozhijia.com -jiaxichina.net -jiaxin-industry.com -jiaxincloud.com -jiaxingren.com -jiaxiweb.com -jiaxuejiyin.com -jiayans.net -jiayi56.com -jiayin618.com -jiayinleasing.com -jiayiss.com -jiayongluyou.com -jiayouhaoche.com -jiayouxueba.com -jiayu0x.com -jiayuan-law.com -jiayuan.com -jiayuguanhotel.com -jiazhao.com -jiazhongkeji.com -jiazhoulvke.com -jiazhua.com -jiazhuang.com -jiazhuang6.com -jiazijun.com -jiazile.com -jiazuo.cc -jibai.com -jibencaozuo.com -jibing57.com -jibite.fun -jicaifund.com -jice.io -jichangbus.com -jichangdaba.com -jiche.com -jicheng.net -jichibang2019.com -jicholding.com -jichuangke.com -jiclip.com -jidacheng.com -jidaihome.com -jidao.ren -jidaola.com -jide.com -jidekan.com -jideos.com -jidi.com -jidujiao.com -jiduu.com -jie0.com -jie518.com -jiebaodz.com -jiecao.com -jiecaojingxuan.com -jiechupm.com -jiedaibao.com -jiediankeji.com -jiedianqian.com -jiefadg.com -jiefuku.com -jiegames.com -jiegeng.com -jiehuisoft.com -jiehun021.com -jiehun027.com -jiehunmishu.com -jiejing.fun -jiejingku.net -jiekenmould.com -jiekon.com -jiekou.com -jielibj.com -jieligo.net -jielong-printing.com -jielongguanjia.com -jiemeng.tw -jiemeng8.com -jiemian.com -jiemo.net -jiemo8.com -jiemodui.com -jiemoselect.com -jiepaids.com -jiepang.com -jiepei.com -jiepeng023.com -jieqi.com -jieqinwang.com -jieseba.org -jieshimt8.com -jieshu.me -jieshui8.com -jieshuwang.com -jieti5.com -jietu365.com -jietuosh.com -jietusoft.com -jiexi.la -jiexi8.com -jiexiyouxuan.com -jieyou.com -jieyoujob.com -jieyue.net -jiez238.com -jiezhu123.com -jifang360.com -jifang365.com -jifangcheng.com -jifenapp.com -jifenfu.net -jifengdm.com -jifenh.com -jifenzhong.com -jigao616.com -jiguangcdn.com -jiguangdaili.com -jiguangdanci.com -jiguangkejigongsi.com -jiguo.com -jihai8.com -jihaoba.com -jiheyun.com -jihone.com -jihot.com -jihuachina.com -jihuanshe.com -jihui.io -jihuoma.com -jijia.com -jijiagames.com -jijiangzhi.com -jijidown.com -jijigugu.club -jijikb.com -jijing.site -jijinhao.com -jijuduo.com -jikabao.com -jikaicai.com -jike.city -jike.info -jikedaohang.com -jikedata.com -jikefan.com -jikejiazhuang.com -jikejidi.com -jikemac.com -jikexiu.com -jikexueyuan.com -jikipedia.com -jilailawyer.com -jileniao.net -jiliguala.com -jiliguara.xyz -jilingban.com -jilingwy.org -jilinpujiyiyuan.com -jilinwula.com -jiliyun.com -jillbanging.com -jilong-chem.com -jimeng.mobi -jimi168.com -jimicn.com -jimifashion.com -jimilier.com -jimiru-bj.com -jimistore.com -jimmylv.info -jimonet.cc -jimu.com -jimubox.com -jimuc.com -jimucake.com -jimucc.com -jimufund.com -jimujiazx.com -jin10.com -jin10x.com -jin24k.com -jinanguanggao.com -jinantxw.com -jinanxww.com -jinbaiteng.com -jinbaobeiqiming.com -jinbaoidc.com -jinbaonet.com -jinbei.com -jinbiaohui.com -jinbifun.com -jinbikan.com -jinbilianmeng.com -jinbitou.net -jinbuguo.com -jincaicaiwu.com -jinchaodengji.com -jinchuan2014.com -jinchuang.org -jinchutou.com -jincin.com -jincon.com -jindanlicai.com -jindaodao.com -jindian120.com -jindianweb.com -jindingfm.com -jindun007.net -jindunfan.com -jinduoduo.net -jinenrunze.com -jinfangka.com -jinfengkou.com -jinfengpaint.com -jinfengwine.com -jinfuzi.com -jing-xian.com -jingbotech.com -jingc.com -jingcai360.net -jingchang.tv -jingchengcb.com -jingchengwl.com -jingchurc.com -jingdaka.com -jingdata.com -jingdian230.com -jingdianjiu.com -jingdianju.com -jingdianlaoge.com -jingdianxitong.com -jingdiao.com -jingdigital.com -jingdong.com -jingdongdaili.com -jingdongyouxuan.com -jingdw.com -jingfentui.com -jingguan.ai -jinghaishop.com -jinghangapps.com -jinghua.com -jinghujiaoyu.com -jingjia.org -jingjiamicro.com -jingjiang.com -jingjiawang.com -jingjie360.com -jingjiezhileng.com -jingjiu.com -jingkan.net -jingkids.com -jinglawyer.com -jinglingbiaozhu.com -jinglong0769.com -jingmaoyuanxin.com -jingme.net -jingmeiti.com -jingniukeji.com -jingoal.com -jingos.com -jingp.com -jingpai.com -jingpaidang.com -jingpinke.com -jingpinwenku.com -jingpt.com -jingrongshuan.com -jingruigroup.com -jingsh.com -jingshibianhuren.com -jingshuiqicai.com -jingsocial.com -jingsoo.com -jingtanggame.com -jingtuitui.com -jingtum.com -jingua168.com -jingujie.com -jingutrust.com -jingwei.com -jingwei.link -jingwuhui.com -jingxi.com -jingxianglawfirm.com -jingxinad.com -jingxingseo.com -jingxuanwang.com -jingy8.com -jingyakt.com -jingyan8.cc -jingyanben.com -jingyanbus.com -jingyanshu.com -jingyanzhinan.com -jingyeqian.com -jingyi186.com -jingying.com -jingyougz.com -jingytech.com -jingyu.com -jingyuan.com -jingyuelaw.com -jingyuxiaoban.com -jingyuyun.com -jingzhan1688.com -jingzhe.me -jingzhengu.com -jingzhiyuanyi.com -jingzong.org -jinhaidai.com -jinhe-energy.com -jinhengjgj.com -jinher.com -jinheshiye.com -jinhuatv.com -jinhuazhe.com -jinhuicorp.com -jinhuizhibo.com -jinhusns.com -jinianbi.com -jiniance8.com -jinjiang.com -jinjianginns.com -jinjingquan.com -jinju8.com -jinjunmei.net -jinkagou.com -jinkan.org -jinke3d.com -jinkejoy.com -jinkongjianshe.com -jinkosolar.com -jinku.com -jinlaiba.com -jinlanqihua.com -jinlianchu.com -jinligou.com -jinlila.com -jinlinghotel.com -jinlinghotels.com -jinliniuan.com -jinlishenghuo.com -jinliyu.cc -jinlong-jiaxiao.com -jinmaojie.com -jinmaopartners.com -jinmenrc.com -jinmi.com -jinmogame.com -jinmuinfo.com -jinnianduoda.com -jinnong.cc -jinpengeye.com -jinphui.com -jinqiexia.com -jinqunla.com -jinridandong.com -jinriguanzhu.cc -jinrishici.com -jinritemai.com -jinrong-online.com -jinrongbaguanv.com -jinrongren.net -jinrongwang.net -jinrui-tech.com -jinruimedia.com -jins-cn.com -jins365.com -jinsdk.com -jinse.com -jinsebook.com -jinsedihao.com -jinsehuaqin.com -jinshakemei.com -jinshangcaijing.com -jinshangdai.cc -jinshangdai.com -jinshanju.com -jinshare.com -jinshisoft.com -jinshuju.co -jinshuju.com -jinshuju.net -jinshuju.org -jinshujuapp.com -jinshujucdn.com -jinshujufiles.com -jinshun.com -jinsiwei.com -jintaimall.com -jintajituan.com -jintang114.org -jinti.com -jintiango.com -jintianjihao.com -jintiankansha.me -jintianpaper1.com -jintonghua.com -jintoushou.com -jintoutiao.com -jinwaimai.com -jinwin.net -jinxianglian.net -jinxidao.com -jinxinqh.com -jinxiu8.com -jinxiuzhilv.com -jinxuliang.com -jinxun.cc -jinyaco.com -jinyi2008.com -jinyindao.com -jinying.com -jinyongwang.com -jinyoukai.com -jinyueya.com -jinyunfood.com -jinyunweb.com -jinyuzd.cc -jinzhandaily.com -jinzheled.com -jinzhidagl.com -jinzhoubank.com -jinzhucaifu.com -jinzhuguo.com -jinzjy.com -jinzunjy.com -jioluo.com -jiongcun.com -jiongdm.com -jiongji.com -jiongyaya.com -jiou.me -jiouyun.com -jipays.com -jipingacg.com -jipinwww.com -jipukeji.com -jiqid.com -jiqie.com -jiqike.com -jiqirenku.com -jiqizhixin.com -jirengu.com -jirou.com -jirou.org -jirry.me -jisapower.com -jisec.com -jishi3.com -jishicn.com -jishida.vip -jishuchi.com -jishukong.com -jishuqq.com -jishutuan.com -jishux.com -jisi17.com -jisilu.com -jisu-cnd.com -jisuacg.com -jisuan.mobi -jisuanke.com -jisuanqinet.com -jisuanzt.com -jisuapi.com -jisuchaxun.com -jisuchou.com -jisuclouds.com -jisucn.com -jisufeifei.com -jisuim.com -jisuimg.com -jisujie.com -jisukandian.com -jisuoffice.com -jisupdf.com -jisupdfeditor.com -jisupdftoword.com -jisupe.com -jisuqianbao.com -jisutodo.com -jisutp.com -jisutui.vip -jisuwebapp.com -jisuxia.com -jisuye.com -jisuyilaixingpiyan.com -jita.im -jita5.com -jitailian.com -jitaqupu.com -jitashe.org -jitavip.com -jitay.com -jiterzzzz.com -jitiku.com -jitongtianxia.com -jitu5.com -jituofuture.com -jituwang.com -jiub.ren -jiubuhua.com -jiucaicaijing.com -jiucaigongshe.com -jiuchet.shop -jiuchutong.com -jiucool.org -jiuday.com -jiudianjiu.com -jiudianyuedu.com -jiuding18.com -jiudingcapital.com -jiudingdalv.com -jiugang.com -jiugangbid.com -jiuguanfm.com -jiuhetx.com -jiuhuang.com -jiuhuar.com -jiuhuashan.cc -jiujiange.com -jiujiui.com -jiujiunn.com -jiujiups.com -jiujiuwan.com -jiujiuwj.com -jiujiuyingshi.com -jiujiuyunhui.com -jiuku.com -jiulesy.com -jiulingwan.com -jiulishi.com -jiumaojiu.com -jiumaster.com -jiumei.com -jiumei8.com -jiunile.com -jiupaicn.com -jiupaicom.com -jiupin8.com -jiuq.com -jiurong.com -jiushiadx.com -jiushikou.com -jiushixing.com -jiushu.net -jiushui.tv -jiusi.net -jiusihengyuan.com -jiusitm.com -jiusongjiankang.com -jiutu.net -jiututa.com -jiuwa.net -jiuwan.com -jiuwei.net -jiuxian.com -jiuxianfeng.com -jiuxihuan.net -jiuxinban.com -jiuxing.com -jiuyan.info -jiuyao666.com -jiuyi2005.com -jiuyiliebian.com -jiuyingnet.com -jiuyingwangluo.com -jiuys.com -jiuyuehuyu.com -jiuyuu.com -jiuzhaigou-china.com -jiuzheng.com -jiuzhilan.com -jiuzhinews.com -jiuzhu999.com -jiuzungame.com -jiwa123.com -jiwanjiwan.com -jiweichengzhu.com -jiwu.com -jiwudai.com -jixiangbaiwei.com -jixiangjili.com -jixiangyou.com -jixianku.com -jixie100.net -jixie5.com -jixiewz.com -jixingzs168.com -jixuanw.com -jixunjsq.com -jixunlyq.com -jiyifa.com -jiyili.net -jiyin-tech.com -jiyin2020.com -jiyingw.net -jiyixcx.com -jiyiyq.com -jiyou-tech.com -jiyoujia.com -jiyouwang.com -jiyuncn.com -jiyuqiao.com -jizhan.com -jizhangapp.com -jizhangzhuce.com -jizhiba.com -jizhidsp.com -jizhiyingxiao.net -jizhiyouke.com -jizhuba.com -jizhuomi.com -jizhutaoke.com -jiziyy.com -jizunnet.com -jj-inn.com -jj-tv.com -jj20.com -jj3721.com -jj55.com -jj59.com -jj831.com -jjapk.com -jjb-static.com -jjbang.com -jjbank.net -jjbbs.com -jjbhn.com -jjbisai.com -jjblove.com -jjbnews.xyz -jjccb.com -jjcdn.com -jjcoffetel.cc -jjcoffetels.com -jjcpchina.com -jjcto.com -jjdc.net -jjdede.com -jjdiaoyu.com -jjdzc.com -jjecn.com -jjfinder.com -jjg630.com -jjgsxc.com -jjhgamedns.com -jjhh.com -jjhsd.com -jjhuifu.com -jjhuigou.com -jjhuoyan.com -jjhyxh.com -jjidc.com -jjiehao.com -jjinfo.com -jjisp.com -jjj.ee -jjjaaa.com -jjjg.co -jjjoystudios.com -jjjsgczbtb.com -jjjtimes.com -jjkeq.com -jjkk.org -jjkucunxie.com -jjldbk.com -jjlsd.com -jjmatch.com -jjmh.com -jjmj.tv -jjmkids.com -jjmmw.com -jjnz.com -jjonline.org -jjplane.com -jjppt.com -jjqj.net -jjrfw.com -jjrjd.com -jjsedu.org -jjshang.com -jjsip.com -jjtfyjy.com -jjtianshangi.com -jjtonline.com -jjtqnews.com -jjtravel.com -jjttjx.com -jjunj.com -jjvod.tv -jjw.com -jjword.com -jjwxc.com -jjwxc.net -jjwxc.org -jjx88.net -jjxj.org -jjxsw.la -jjxwzk.org -jjxyls.com -jjy118.com -jjygym.com -jjyl12349.com -jjyx.com -jjyy.me -jjzdm.com -jjzfgjj.com -jjzl800.com -jk-px.com -jk126.com -jk130.com -jk2h.com -jk37du.com -jk3a.com -jk51.com -jk520.net -jk724.com -jk8090.com -jkangbao.com -jkbexp.com -jkc8.com -jkcorkpads.com -jkcsjd.com -jkdsz.com -jkeabc.com -jkgood.com -jkidc.com -jkimg.net -jkjzt.com -jkpan.cc -jkpj.com -jktcom.com -jktong.com -jkx.cc -jkxds.net -jkydt.com -jkyeo.com -jkys5.com -jkzhilu.com -jkzl.com -jl0435.com -jl54.org -jl852.com -jladi.com -jlakes.org -jlbtrip.com -jlc-gw.com -jlc.com -jlccpit.com -jlcerp.com -jlforging.com -jlfzb.com -jlg86.com -jlgyjj.com -jljbbs.com -jljgdj.org -jlkj.cc -jllihua.com -jlmhw.com -jlonline.com -jlpay.com -jlpzj.net -jlq.com -jlr360.com -jlsdzgckcy.com -jlsemi.com -jlspr.com -jltyjxzz.com -jlwlyx.com -jlwubi.com -jlxfw.com -jlyes.com -jlytjx.com -jlzkb.com -jlzsoft.com -jlzyz.com -jm1ph.com -jm2046.com -jm3q.com -jm678.com -jmabroad.com -jmads.net -jmbbs.com -jmd-china.com -jmdedu.com -jmeii.com -jmeishe.com -jmf0.com -jmf6.com -jmfans.com -jmgle.com -jmgo.com -jmhapp.com -jmhd8.com -jmicd.com -jmjc.tech -jmjiuchang.com -jmjxc.com -jmkjmob2.xyz -jmkjmob5.xyz -jmkx.com -jmlk.co -jmmuseum.com -jmonline.org -jmqy.com -jmrsksj.org -jmsqw.com -jmstatic.com -jmtd0531.com -jmtsg.com -jmxfw.com -jmxw.net -jmykw.com -jmyna.net -jmzcgs.com -jmzns.com -jn-bank.com -jn001.com -jn123456.com -jn1535.com -jnaoliyuan.com -jnbbbyy.com -jnbnzk.com -jncarw.com -jncgzl.com -jncjqgs.com -jncqj.com -jncyx.com -jndajj.com -jndasjjx.com -jndssd.com -jndwyy.com -jnesc.com -jnhcjzlw.com -jnhouse.com -jnjbrother.com -jnjj.com -jnjylh.com -jnkason.com -jnky.com -jnlab.com -jnlc.com -jnliyu.com -jnlou.net -jnltgm.com -jnltwy.com -jnmama.com -jnmami.com -jnnc.com -jnnews.tv -jnqccw.com -jnrain.com -jnsdgz.com -jnshu.com -jnsino.com -jnstdc.com -jntianjin.club -jntinchina.com -jntyhl.com -jnw.cc -jnwb.net -jnxiuchuan.com -jnxmycnc.com -jnyestar.com -jnzcsyj.com -jnzfwz.com -jnzheming.com -jnzhonglidjc.com -jnzixun.com -jnzycw.com -joaquinchou.com -job0768.com -job10000.com -job1001.com -job120.com -job168.com -job256.com -job263.com -job36.com -job4ee.com -job510.com -job5156.com -job592.com -job910.com -job9151.com -job98.com -job992.com -job9981.com -jobbole.com -jobcdp.com -jobcn.com -jobdeer.com -jobdogame.com -jobeast.com -jobgojob.com -jobguangfu.com -jobhb.com -jobi5.com -jobkoo.com -jobksd.com -jobpin.com -jobreading.net -jobsalon.net -jobsdigg.com -jobsitechina.com -jobsun.com -jobtong.com -jobui.com -jobuy.com -jobvvv.com -jobyp.com -jocat.com -jocelynlaura.com -joe92.com -joenchen.com -johhan.com -johnardo.com -johnwatsondev.com -joiest.com -joindata.net -joinf.com -joiningss.com -joinkchem.com -joinquant.com -joinsen.com -joint-harvest.com -jointforce.com -joinusad.com -joinwaylawfirm.com -joinwee.com -jojju.com -jojoin.com -jojoreading.com -joker.li -jolimark.com -jomodns.com -jomoxc.com -jonahome.net -jone.wang -jonllen.com -jonny.vip -jonsbo.com -joobot.com -joojcc.com -joojtech.com -joojzz.com -joomob.com -joooz.com -joouoo.com -joowhee.com -joox.com -jooyoo.net -jooyuu.com -joozone.com -joqoo.com -josephcz.xyz -joshuais.me -josncdn.com -jotop.net -jotrin.com -jouav.com -joudou.com -jourlib.org -journalmc.com -journeyui.com -jourserv.com -jouypub.com -jovcloud.com -jovetech.com -jowto.com -joy9178.com -joyact.com -joyami.com -joyany.com -joyapi.com -joycbd.com -joydin.com -joyes.com -joyfire.net -joyglue.com -joying.com -joyj.com -joyk.com -joylife.hk -joymeng.com -joynb.net -joyncleon.com -joyocean.org -joyohub.com -joyoung.com -joyowo.com -joyque.com -joyshebao.com -joysight.com -joyslink.com -joysung.com -joytrav.com -joytraveller.com -joyu.com -joyulf.com -joyuyx.com -joywii.net -joywok.com -joyyang.com -joyzlan.com -jp-moco.com -jp.com -jp14.com -jpanj.com -jpbeta.net -jpeen.com -jpegonline.com -jperation.com -jpg.cm -jphot.net -jpjc315.com -jpjww.com -jpkcnet.com -jpkix.com -jpmsg.com -jppeony.com -jpqp888.com -jpshuntong.com -jpsmile.com -jptaiyo.com -jpthome.com -jpush.io -jpushoa.com -jpuyy.com -jpwb.cc -jpwb.net -jpwind.com -jpwindow.com -jpwxapp.com -jpxzm.com -jpyoo.com -jpyssc.com -jpzyfx.com -jq-school.com -jq22.com -jq960.com -jqbyby.com -jqcool.net -jqdto.com -jqdzw.com -jqfax.com -jqgc.com -jqgcw.com -jqhtml.com -jqpress.com -jqr.com -jqr5.com -jqrkc.com -jqrzhijia.com -jqsite.com -jqskygame.com -jquee.com -jquery123.com -jqueryajax.com -jqueryfuns.com -jquerywidget.com -jqw.com -jqw0099.com -jqwater.com -jqzhu.com -jqzhuangshi.com -jqzjop.com -jqzw.com -jr-soft.com -jr123.com -jr18.com -jrdzj.cc -jrecchina.com -jrexam.com -jrgang.com -jrhdg.com -jrj.com -jrjhg.com -jrjingshan.com -jrjr.com -jrkantv.com -jrlady.com -jrmf360.com -jrpxw.com -jrqiwen.com -jrqzw.net -jrsmw.com -jrszw.com -jrteck.com -jrtj120.com -jrwenku.com -jrxjnet.com -jrxzj.com -jryghq.com -jrysdq.com -jryzt.com -jrzj.com -jrzp.com -js-aerfa.com -js-ceo.com -js-code.com -js-screen.com -js-weilong.com -js.design -js04999.com -js0573.com -js11183.com -js118114.com -js165.com -js178.com -js3.org -js3n.com -js53777.com -js66649.com -js7xc.com -js8.in -js811.com -js96008.com -js99cf.com -jsahj.com -jsbc.com -jsbexam.com -jsbgj.com -jsceou.com -jsche.net -jschengta.com -jschunxing.com -jscj.com -jsckjqr.com -jsclearing.com -jscmjt.com -jscnc.net -jscqt.com -jscssimg.com -jscts.com -jsczyjg.com -jsd.cc -jsdaima.com -jsddlzz.com -jsdthx.com -jsdujuan.com -jsdushi.net -jseepub.com -jseie.org -jseoptics.com -jser.com -jser.io -jsfengchao.com -jsfof.com -jsform.com -jsform3.com -jsfw8.com -jsfycdn3.com -jsgbds.com -jsgc168.com -jsgcbank.com -jsgh.org -jsgho.net -jsgjksl.com -jsgrb.com -jsguolv.com -jsgyrcb.com -jshaman.com -jsharer.com -jshasl.com -jshbank.com -jshddq.net -jshmrcb.com -jshnh.com -jshqjt.com -jshrconsult.com -jshsoft.com -jshuabo.com -jshuachen.com -jshy.com -jshylm.com -jsimg.cc -jsinfo.net -jsiteec.org -jsjclykz.com -jsjdrcb.com -jsjdzf.com -jsjinfu.com -jsjjy.com -jsjkx.com -jsjlzxw.com -jsjs.cc -jsjs.org -jsjyrcb.com -jskaiborui.com -jskdjd.com -jskpcg.org -jskwt.com -jsldweb.com -jslegal.com -jslottery.com -jsls1.com -jslwzk.com -jslxs.com -jsly001.com -jsmaochang.com -jsmian.com -jsmjys.com -jsmo.xin -jsmsg.com -jsmxw.com -jsncke.com -jsningyi.com -jsnx.net -jsnxs.com -jsocr.com -json-json.com -jsonin.com -jsonnode.com -jsososo.com -jsp51.com -jspang.com -jspatch.com -jspcn.net -jspeople.com -jspxcms.com -jsq001.com -jsq886.com -jsqlawer.com -jsqq.net -jsqt.com -jsr9.com -jsrcu.com -jsrrcb.com -jsrsrc.com -jsrtzx.com -jsruiyin.com -jsrun.net -jsrun.pro -jsrxjt.com -jss580.org -jssalt.com -jssdk.net -jssfx.com -jssgw.com -jsshow.net -jssj.cc -jssjys.com -jssnrcb.com -jsswordshop.com -jssytc.com -jstdtncj.com -jstfdz.com -jstoo.com -jstour.com -jstoys.net -jstucdn.com -jstv.com -jstxdm.com -jstxrcb.net -jstycn.com -jstzjy.net -jstzrcb.com -jsw988.com -jswebcall.com -jswku.com -jswmw.com -jswspocapi.com -jsxat788.com -jsxcra.com -jsxfedu.com -jsxhrb.com -jsxhrcb.com -jsxhw.org -jsxiaoguo.com -jsycsy.com -jsyd10086.net -jsyfkj.com -jsyihaotong.com -jsyks.com -jsypin.com -jsypj.com -jsyun.cc -jsyxrcb.com -jszb123.com -jszbtb.com -jszbug.com -jszbw.com -jszg.org -jszgjt.net -jszhaobiao.com -jszks.com -jszks.net -jszygs.com -jt-yun.com -jt62.com -jt996.com -jtamc.com -jtbole.com -jtggame.com -jtgzfw.com -jthailang.com -jthcsx.com -jthl.net -jtimg.com -jtjr99.com -jtlw.com -jtm.pub -jtnsh.com -jtnxs.com -jtstudy.com -jttv.net -jtv123.com -jtyjy.com -jtyy.com -ju33.com -ju51.com -ju81.cc -juandou.com -juangua.com -juanlaoda.com -juanpi.com -juanpimao.com -juanshangwang.com -juanyunkeji.com -juapp5.com -juaq.com -jubaopay.com -jubaopeng5555.com -jubaozang.com -juben68.com -juben98.com -juc365.com -jucanw.com -jucelin.com -jucheng01.net -juchuangbio.com -jucong.com -judouapp.com -juduo.cc -juduoping.com -jue.so -jue1.com -juecan.com -juedui100.com -jueduilingyu.com -juehuo.com -juejin.im -juejinchain.com -juejinqifu.com -juemei.com -juemuren4449.com -jueok.com -juesheng.com -jueshinan.com -jueshitangmen.info -juewei.com -juexiang.com -juezhao123.com -jufaanli.com -jufengshang.com -jufidc.com -jufoinfo.com -jufxf.com -juhangye.com -juhaof.com -juhaokan.org -juhe.com -juhemulu.com -juheweb.com -juheying.com -juhome.net -juhuasuan.com -juhuisuan.com -jui.org -juicefs.com -juimg.com -juiuns.com -jujayoupin.com -juji.tv -jujiangkk.com -jujiaobaby.com -jujiaonet.com -jujiaonet1.com -jujias.com -jujienet.com -jujin8.com -jujiu8.com -jujoy.com -jujuanpi.com -jujumao.com -jujusky.com -jujuwan.com -jukandiannews.com -jukebao.com -jukebao123.com -jukejia.com -juketool.com -jukuu.com -julaibao.com -julanhp.com -julecn.com -julefun.com -juliacn.com -juliancj.com -juliang8.com -juliangyinqing.com -julianhd.net -julihun.com -julive.com -julur.com -julyapp.com -julyclyde.org -julydate.com -julyedu.com -julysong.com -jumaicms.com -jumaizhijia.com -jumanhua.com -jumei.com -jumeiglobal.com -jumeinet.com -jumengren.com -jumi-cdn.com -jumi.com -jumi18.com -jumin.cc -juming-xz.com -juming.com -jumore.com -jumorenews.com -jump2006.com -jumpjumpcat.com -jumple.com -jumppo.com -jumpserver.org -jumpstar-tech.com -jumpw.com -jumpwgame.com -jumpwo.com -jun360.com -jun4.com -junankeji.com -jundacheng.com -jundui.net -jundushan.com -junews.net -juneyao.com -juneyaoair.com -juneyaoairlines.com -jungebb.com -junhe.com -junhongjc.com -junhuisoft.com -juniu.tv -junjiahao.com -junjichu.net -junjing.net -junjunfudao.com -junka.com -junlee.net -junlongtech.com -junmidao.com -junmin.org -junmoseo.com -junnanhao.com -junph.com -junpin.com -junpin360.com -junpinhui.com -junpinzhi.com -junqing.ren -junqing360.com -junren.net -junrongdai.com -junsangs.com -junsaozg.com -junshencm.com -junshi.com -junshi81.com -junshi881.com -junshidao.com -junshier.com -junshifuxin.com -junshijia.com -junshis.com -junshishu.com -junshitx.com -junsw.com -junsz.com -juntongtian.com -junwei1000.com -junwu262.com -junxilinux.com -junyao.tech -junying.com -junyougame.com -junyudns.com -junyuewl.com -junyuxuan.com -junzhuan.com -junziboxue.com -junzimen.com -junziqian.com -juooo.com -jupup.com -juqi.com -juqingjuqing.com -juqiwang.net -juren.com -jurenqi.com -jurongfangchan.com -jurongrencai.com -juseey.com -jusfoun.com -jusha.com -jushewang.com -jushigj.com -jushike.net -jushikk.com -jushiwangedu.com -jushuo.com -jussevent.com -jusstickets.com -just4coding.com -just4fun.ml -just4fun.site -just998.com -justalkcloud.com -justbilt.com -justbon.com -justdo.tv -justdojava.com -justep.com -justering.com -justjavac.com -justpodmedia.com -justsy.com -justwe.site -justyle.cc -justylepro.com -jutao.com -jutean.com -jutingshop.com -jutoudang.com -jutoula.com -jutuilian.com -juturn.com -juvefans.com -juwa.net -juwan.com -juwangmedia.com -juwanshe.com -juweixin.com -juxia.com -juxiangyou.com -juxin.tv -juxinfu.com -juxing-edu.com -juxingyi.com -juxinhuizhi.com -juyanbao.com -juyoufan.net -juyouqu.com -juyouquan.net -juyoutv.cc -juyouxuan.vip -juyuancaiyin.com -juzhen.com -juzhen.io -juzhiyuan.com -juzhongjoy.com -juzicy.com -juzifenqi.com -juzilab.com -juzilicai.com -juzimi.com -juzioo.com -juziseo.com -juzisy.com -juzivr.com -juzix.io -juziyinyue.com -juzizhoutou.net -jv-bao.com -jvcxp.com -jvmai.com -jvrong.com -jvshi.net -jvyou.net -jw100.net -jwappgc.com -jwbl.com -jwdedu.com -jwdili.com -jwdns.com -jwetech.com -jwfun.com -jwipc.com -jwl100.com -jwnote.com -jwshy.com -jwview.com -jwwey.com -jwx365.com -jwxlschool.com -jwyun.net -jx-bank.com -jx-nc.com -jx09.com -jx3mogu.com -jx3pve.com -jx3tong.com -jx3yymj.com -jxage.com -jxal.net -jxalt.com -jxbin.com -jxc4.com -jxcaipu.com -jxcb.net -jxccb.com -jxcf.org -jxcsedu.com -jxcua.com -jxdiguo.com -jxdkzz.net -jxdown.com -jxdyf.com -jxedt.com -jxedu.net -jxeduyun.com -jxetv.com -jxexpressway.com -jxf57.com -jxf75.com -jxfcls.com -jxg1.com -jxgdw.com -jxgxbd.com -jxhyshiye.com -jxiaolan.com -jxicloud.com -jxidc.net -jximage.com -jxjdgy.com -jxjee.com -jxjhkq.com -jxjia.net -jxjob.net -jxjyzy.com -jxkjzb.com -jxkp.com -jxlgjd.com -jxlhz.com -jxlwgame.com -jxmlkd.com -jxndxuebao.com -jxnxs.com -jxold.com -jxorg.com -jxpta.com -jxpz888.com -jxqcw.com -jxqgpx.com -jxrencai.com -jxrjzx.com -jxrsrc.com -jxrtv.com -jxrtvu.com -jxscct.com -jxsd-sz.com -jxsgfzx.com -jxshangyou.com -jxsllw.com -jxslsyy.com -jxsqw.com -jxsrfdc.com -jxsthgz.com -jxsxdp.com -jxtech.net -jxtobo.com -jxtvshop.com -jxtyzx.org -jxtzw.com -jxunicom.com -jxw123.com -jxwmanage.com -jxwz.net -jxxdf.com -jxxfzx.com -jxxhdn.com -jxxhsd.com -jxxyqm.com -jxyrzdh.com -jxysg.net -jxysyz.com -jxyworld.com -jxzyx.com -jy0604.com -jy0832.com -jy1.me -jy135.com -jy1991.com -jyacht.com -jyaochi.com -jyb8.com -jybase.net -jyblife.com -jyc99.com -jycbank.com -jycinema.com -jycloudgslb.com -jycloudgslb.net -jydc.com -jydoc.com -jyeoo.com -jyeoo.net -jyepc.com -jyfscl.com -jyfund.com -jyg-lighting.com -jygame.net -jyguagua.com -jygz.com -jyh007.com -jyhlo0.com -jyhmz.com -jyhyfintax.com -jyimg.com -jyip.net -jyjjc.com -jyjxlt2009.net -jyltx.com -jylw.com -jymkt.com -jymys.com -jynews.net -jyoptical.com -jypc.org -jypecdn3.com -jyqkx.com -jyqxz2015.com -jyrd.com -jyrlzy.com -jysd.com -jysld.com -jysq.net -jyss.net -jysyzk.com -jyteasy.com -jyuvip.com -jyxdyzx.com -jyyun.com -jyz99.com -jyzysp.com -jyzzx.com -jz-cert.com -jz-job.com -jz.cc -jz.com -jz0045.com -jz0574.com -jz08.com -jz100.com -jz177.com -jz182.com -jz2005.com -jz51598.com -jz5u.com -jz5u.net -jz6.com -jz68888.com -jzant.com -jzb.com -jzbar.net -jzbdc.com -jzcbank.com -jzchou.com -jzclassroom.com -jzcxptm.com -jzcyrl.com -jzdhyl.com -jzedu24.com -jzerp.com -jzgcjsysjzz.com -jzgcjszz.com -jzgwind.com -jzhfz.com -jzhxgg.com -jzic.com -jzita.com -jzjtop.com -jzke.com -jzkjjt.com -jzkuaiji.com -jzmob.com -jzmsmj.com -jzmt.net -jznqp.net -jznyjt.com -jzongguan.com -jzrb.com -jzrc.net -jzrsrc.com -jzsc.net -jzsc8.com -jzsgzmhjyxgs.com -jzshequ.com -jzsjyksy.com -jzsxinyudianqi.com -jzsyishu.com -jztdc.com -jztdj.com -jztey.com -jztggs.com -jztmgy.com -jztoo.com -jztsjx.com -jztsoft.com -jztvxmt.com -jztylxx.com -jztzw.net -jzvip.cc -jzwcom.com -jzxs.com -jzxue.com -jzyx.com -jzzhw.com -jzzx.com -jzzxlm.com -jzzy666.com -k-day.com -k-kbox.com -k-res.net -k-xian.com -k0898.com -k0rz3n.com -k11kuriosity.com -k12.vip -k125.com -k12zx.com -k165.com -k18.com -k18882.com -k1u.com -k259.com -k2938.com -k2ma.com -k345.cc -k366.com -k369.com -k3851.com -k3887.com -k4nz.com -k518.com -k6271.com -k666.com -k6uk.com -k73.com -k780.com -k7kf.com -k8008.com -k8ba.com -k8bd.com -k8dream.com -k8jdw.com -k8sj.com -k8smeetup.com -k8stech.net -k8w.wang -k913.com -ka20.com -ka5188.com -ka58.net -kaadas.com -kaayou.com -kaayun.com -kaba365.com -kabasiji.com -kabitu.com -kaboy.net -kada.com -kadang.com -kadingding.com -kaesoon.com -kafka.cc -kagirl.net -kai-ying.com -kaiba315.com -kaibo5888.com -kaiboda.org -kaiboer.com -kaichengschool.com -kaidanbao.com -kaidianbang.com -kaieconblog.net -kaifabang.com -kaifae.com -kaifage.com -kaifakuai.com -kaifamei.com -kaifangkecheng.com -kaifapiao.com -kaifaxueyuan.com -kaifenghenan.com -kaifu.com -kaifuzq.com -kaige68.com -kaihei.co -kaihui.com -kaihuia.com -kaijia.com -kaijia.me -kaijiaweishi.com -kaikeba.com -kailing.pub -kaimanhua.com -kaimg.com -kaimigou.com -kaimulu.com -kaipan88.com -kaipanla.com -kaiqiancq.com -kaishigo.com -kaishikan.com -kaishilou.com -kaishuhezi.com -kaishustory.com -kaitianad.com -kaivps.com -kaiwind.com -kaixin.com -kaixin00.com -kaixin001.com -kaixin5.net -kaixinbao.com -kaixindou.net -kaixinguopiaowu.net -kaixinhui.com -kaixinhui.net -kaixinlu.com -kaixinly.com -kaixinpaopao.com -kaixintang.com -kaixue.io -kaiyanapp.com -kaiyiluye.com -kaiyuan.com -kaiyuan.me -kaiyuangroup.cc -kaiyuanhi.com -kaiyuanhotels.com -kaiyuanzg.com -kajicam.com -kaka.com -kaka3.com -kakadm.com -kakalili.com -kakamobi.com -kakatv1.com -kakazy-yun.com -kalading.com -kalazan.com -kalcaddle.com -kalegou.com -kalingling.com -kaluli.com -kameng.com -kamenwang.com -kamidm.com -kamidox.com -kamopos.com -kan.cc -kan0512.com -kan300.com -kan84.net -kan98.com -kanbaobei.com -kanbardata.com -kanbing.net -kanbox.com -kanchao.com -kandian.com -kandian.net -kandianshi.com -kandzww.com -kanfangapp.com -kanfangjilu.com -kanfaxing.com -kanfeidie.com -kanfou.net -kangaiweishi.com -kangame.tv -kangbaifoundation.com -kangbatv.com -kangbidz.com -kangchun.com -kangdajiuzhou.com -kangdaoai.com -kangepian.com -kanggou.com -kanggui.com -kanghao123.com -kanghu.net -kanghuayun.com -kanghui.com -kanghuwang.com -kangkang.work -kanglaohui.com -kangle.net -kanglingjiu.com -kanglu.com -kangqite.com -kangre.com -kanguo.com -kanguowai.com -kangxi55wlsf.com -kangxin.com -kangyueshi.com -kangze.com -kangzhi.com -kanhaiwai.com -kanimg.com -kaniuquan.com -kanjia.com -kanjian.com -kanjianlishi.com -kanjianxinli.com -kanjuqing.com -kanjuwo.com -kankan365.cc -kankancity.com -kankanews.com -kankanmi.com -kankannews.com -kankanzhijian.com -kanketv.com -kankun-smartplug.com -kanluzhe.com -kanman.com -kanmeinv.com -kanmx.com -kannb.com -kanqibao.com -kanqiye.com -kanqq.com -kanqu.com -kansdk.com -kansea.com -kanseen.com -kanshaa.com -kanshangji.com -kanshangjie.com -kanshu.com -kanshu.la -kanshu5.la -kanshu8.net -kanshuapp.com -kanshuge.com -kanshuhai.com -kanshula.com -kanshuwangzhan.com -kansp.com -kantao.net -kantiantang.com -kantsuu.com -kantu.com -kanwby.com -kanxiqu.com -kanxsw.com -kanxue.com -kanzhen666.com -kanzhun.com -kao8.cc -kaobeitu.com -kaocat.com -kaochong.com -kaoder.com -kaodianer.com -kaogua.com -kaojionline.com -kaola.com -kaola.com.hk -kaola100.com -kaolacdn.com -kaolafm.com -kaolafm.net -kaolayy.com -kaolazhengxin.com -kaopu001.com -kaopubao.com -kaopubao.net -kaopuj.com -kaopuwangzhuan.com -kaopuyun.com -kaopuyun.net -kaoqin.com -kaoqintong.net -kaoqinyi.com -kaoruo.com -kaoshi110.net -kaoshi365.com -kaoshib.com -kaoshibaike.com -kaoshibao.com -kaoshibb.com -kaoshidian.com -kaoshishenqi.net -kaoshizixun.com -kaowana.com -kaowang.com -kaoyan.com -kaoyan.org -kaoyan001.com -kaoyan1v1.com -kaoyanbox.net -kaoyancas.com -kaoyancas.net -kaoyangaofen.com -kaoyango.com -kaoyanjun.com -kaoyanzhijia.org -kaoyaya.com -kaozhiye.com -kapai8.com -kaquanbao.com -kargocard.com -karlzhou.com -karrytech.com -kartlover.com -karuimall.com -kascend.com -kashen.com -kashen8.com -kasora.moe -kasscloud.com -kasumi.club -katcin.com -katongji.com -katvr.com -katyusha.net -kaven.xyz -kawahdinosaur.com -kayege.info -kayoudi.com -kaytrip.com -kaytune.com -kazaff.me -kazakcnr.com -kazhifu.com -kb.cc -kb9.com -kbdfans.com -kbdyw.com -kbengine.org -kbgogo.com -kbgok.com -kbiao.me -kbiquge.com -kblcdn.com -kbrightlaw.com -kbscloud.com -kbw2018.com -kbyun.com -kcdns.net -kcdnvip.com -kchance.com -kchuhai.com -kcjl365.com -kcjyyjzzs.com -kcjzsc.com -kcloudidc.com -kcrcb.com -kcwiki.org -kcyuri.com -kd028.com -kd120.com -kd128.com -kd185.com -kd9000.com -kdatacenter.com -kdbbx.com -kdd.cc -kddushu.com -kdebell.com -kdfax.com -kdige.com -kdmobi.com -kdniao.com -kdpt.net -kdroid.club -kdroid.org -kdslife.com -kdt.im -kdued.com -kdweibo.com -kdx.mobi -kdzwy.com -kdzxedu.com -ke.com -ke01.com -ke6.com -ke86.com -ke8u.com -keaidian.com -keaiq.com -kean1688.com -kebango.com -kebingzao.com -kechenggezi.com -kechuang.org -kechuangfu.com -keda-digital.com -keda-u.com -keda.com -kedang.net -keddoo.com -kede.com -kede.com.hk -kedi.cc -kedou.com -keede.com -keen8.com -keenonrobot.com -keensky.com -keenwon.com -keep.city -keep.com -keepc.com -keepcdn.com -keepyoga.com -keerdapower.com -keerworld.com -keewin.com -kefeng.wang -kefusoft.com -kefutoutiao.com -kefuzu.com -kege.com -kegood.com -kehanedu.com -kehou.com -kehu51.com -kehuda.com -keinsci.com -kejet.com -kejet.net -keji100.net -kejiabj.com -kejian.design -kejianyi.com -kejietextile.com -kejihai.com -kejijie.net -kejik.com -kejilie.com -kejimeixue.com -kejimt.com -kejingyuan.com -kejiqi.com -kejitai.com -kejiwang.cc -kejiwanjia.com -kejixun.com -kejudati.com -kekaku.com -kekaoxing.com -kekaoyun.com -keke289.com -kekebaby.com -kekedj.com -kekejp.com -kekenet.com -kekepx.com -kekeshici.com -kekexueba.com -kekiss.com -kekoku.com -kele8.com -kelepi.com -keleqiu.com -keleyi.com -kelibiao.com -kellen.wang -kelon.com -kelphome.com -kelu.org -kema66.com -kemaicrm.com -keman.com -kemanyun.com -kemasheying.com -kemov.com -ken.io -ken74.com -kename.com -kendocn.com -kendryte.com -kenfor.com -kenfor.net -kengatoki.com -kengdie.com -kengso.com -kengwan.com -keniu.com -keniub.com -kenkapacking.com -kenshin.wang -kenshu.cc -kentepa.com -kentier.com -kenuonet.com -kenweini.com -kenwen.com -kenxn.com -kenxv.com -kepingtong.com -kepuchina.org -kepusky.com -kepuyanxue.com -ker58.com -kerlala.com -kermitym.com -kernel.cc -kernelgo.org -kernelnote.com -kerneltravel.net -keruibell.com -kerunzh-edu.com -keruotv.com -kerust.com -keruyun.com -keruyun.net -kesci.com -kescoode.com -kesense.com -keshizhongguo.com -kesion.com -keslb.com -kesucorp.com -kesum.com -ketangpai.com -ketuimage.com -kevincc.xyz -kevinems.com -kevinhewu.com -kevinjiang.info -kevinlq.com -kewail.com -kewu.cc -kexianggroup.com -kexin001.com -kexing100.com -kexinguoji.com -kexinyun.org -kexu.com -kexue.com -kexue.fm -kexuezixunzzs.com -keyan.life -keyboardancer.com -keycom-ip.com -keydatas.com -keydot.net -keygotech.com -keyigroup.com -keyingwb.com -keylol.com -keymoe.com -keyoou.com -keyray-hk.com -keyshot.cc -keyuhome.com -keyunsoft.com -keyyou.net -kezhaozhao.com -kezool.com -kf.ai -kf25.com -kf3msfm.com -kf4137.com -kf5.com -kf911.com -kfadx.tech -kfang.xin -kfc28.com -kfcdn.com -kfcha.com -kfcms.com -kfd3sm2c.com -kfd9999.com -kfdcc.com -kfhmyy.com -kfj.cc -kfjd.com -kfqrc.com -kfw001.com -kfyao.com -kfzimg.com -kg-gold.com -kg.com -kgdt.work -kgfanr.com -kgimg.com -kgogame.com -kgula.com -kguowai.com -khdatasolutions.com -khdmw.com -khesport.com -khews.com -khlysc.com -khotyn.com -khqihuo.com -khs1994.com -khysct.com -ki-pa.com -kiaic.com -kibey.com -kibinggroup.com -kibo.tech -kid17.com -kidscoding8.com -kidsdown.com -kidseq.net -kidsyun.com -kidulte.com -kidulty.com -kiees.com -kihgwe.com -kiiik.com -kiijoy.com -kiimg.com -kikicici.com -kikitamap.com -kikoplay.fun -kikyoar.com -kililife.com -killdb.com -kilvn.com -kimiss.com -kimiss.net -kimiter.com -kimleo.net -kimnote.com -kimqi.net -kimsom.com -kina.cc -kinboy.wang -kindeditor.net -kindle-china.org -kindle114.com -kindle8.cc -kindlehub.mobi -kindlelib.com -kindleport.com -kindlepush.com -kinefinity.com -king-capital.com -kingandwood.com -kingball.net -kingborn.org -kingbos.com -kingbrother.com -kingcheergame.com -kingclouddns.com -kingdee-soft.com -kingdee.com -kingdee.com.tw -kingdee.org -kingdeemall.com -kingdeestar.com -kingdeeyun.com -kingdeezx.com -kingdelgc.com -kingdomfishing.com -kingdun.net -kingexplorer.com -kinggoo.com -kinggrid.com -kingidc.net -kingkaid.com -kingland119.com -kinglandtech.net -kinglassquartz.com -kingnare.com -kingnet.com -kingnetdc.com -kingnettech.com -kingoit.com -kingosoft.com -kingreader.com -kingrein.com -kingroot.net -kings3d.com -kingsemi.com -kingsoft-office-service.com -kingsoft.com -kingsoft.net -kingsoftstore.com -kingst.org -kingstarfintech.com -kingstarmedical.com -kingwam.com -kingwisoft.com -kingyon.com -kingysu.com -kinhom.com -kinpan.com -kinqee.com -kintiger.com -kinval.com -kinzoncap.com -kirgen.com -kirikira.com -kirimasharo.com -kirin-tech.com -kirincloud.net -kirinmach.com -kirinvm.com -kischess.com -kisdee.com -kiss688.com -kisskisso.com -kissyui.com -kiswo.com -kit-lee.me -kiteshow.com -kits029.com -kitstown.com -kittyyoo.com -kiujq.com -kiwa-tech.com -kiwenlau.com -kiwisec.com -kj-hospital.com -kj-pcb.com -kj1555.com -kj1d.com -kj3.com -kj5544.com -kjb2c.com -kjbnm.xyz -kjcad.net -kjcdn.com -kjcgzh.com -kjchina.com -kjcity.com -kjcxpp.com -kjdb.org -kjeport.com -kjiuye.com -kjj.com -kjkd.com -kjkp.com -kjks.net -kjkxun.com -kjltxn.com -kjnkj.club -kjr365.com -kjsng.com -kjson.com -kjsv.com -kjt.com -kjw.cc -kjwlxt.com -kjycx.com -kjyicdn.com -kjzxtk.com -kk.com -kk.net -kk169.com -kk2w.cc -kk30.com -kk3g.net -kk50.com -kk7b.com -kkapp.com -kkbuyu8.com -kkcache.com -kkcache.net -kkcaicai.com -kkcapture.com -kkcdn.net -kkcha.com -kkcodes.com -kkcoo.com -kkdict.com -kkdownload.com -kkeye.com -kkfor.com -kkguan.com -kkh-global.com -kkid.vip -kkidc.com -kkk5.com -kkkd.com -kkkkba.com -kkkmh.com -kkkwww.com -kklishi.com -kklxj.com -kkmaoyi.com -kkmh.com -kkminer.com -kkmop.com -kknn.com -kkqb.net -kkr5.com -kkredian.com -kkredian.xyz -kks.me -kksmg.com -kksofts.com -kkt.com -kktijian.com -kktv1.com -kktv5.com -kktv8.com -kkuu.com -kkvv77.com -kkx.net -kkyoo.com -kkyuedu.com -kkzj.com -kl1l5.com -kl321.com -kl688.com -kl800.com -klandk.com -klchemicals.com -kldjy.com -kldm.ru -klhuyan.com -klianfa.com -klicen.com -klinlee.com -kljiyou.com -kllife.com -klmh5.com -klmhw.com -klmnf.com -klmybbs.com -klmygjj.com -klmyssn.com -klniu.com -klqian.com -klshou.com -kltdo.com -kltong.com -klub11.com -klunf.com -klvtu.com -klxuexi.com -km.com -km169.net -km18.net -km1818.com -kmaa40.com -kmail.com -kmapp.net -kmcaishui.com -kmcenter.org -kmcits.com -kmcits0655.com -kmcxedu.com -kmdgpark.com -kmdn.net -kmdns.net -kmeecc.com -kmeitu.com -kmf.com -kmfangxun.com -kmg-jd.com -kmguolv.com -kmhgold.com -kmipo.net -kmlcl.com -kmlhh.com -kmmama.com -kmplayercn.com -kmtarena.net -kmw.com -kmway.com -kmxg.net -kmxkh.com -kmxyj.com -kmyestar.com -kmzx.org -kn120.com -kneng.net -knewbi.com -knewhy.com -knewone.com -knewsmart.com -knotesapp.com -know88.com -knowgive.com -knowhow-china.com -knowncoin.com -knownpcb.com -knownsec.com -knowsafe.com -knowsurface.com -knowyourself.cc -knoya.com -knsheng.com -knsyxw.com -knzlcq.com -koal.com -koalacam.net -koaladoit.com -koalareading.com -kobold1855.com -koboldgame.com -kobox.tv -kocla.com -kodcloud.com -kodmp.com -koduo.com -koeicn.com -kofficemart.com -kofuf.com -kofunion.net -koiclub.net -koijp.com -koikreative.com -koinocn.com -koippt.com -kokojia.com -kole8.com -kolrank.com -kolstore.com -komect.com -kometo.com -konekomoe.com -konfan.net -kongapi.com -kongdao.com -kongdi.net -kongduan.com -kongfou.net -kongfz.com -kongge.com -konggu.net -kongjianjia.com -kongjie.com -kongjun.com -konglei.com -kongming-inc.com -kongnar.com -kongqingquan.com -kongquecheng.com -kongqueyuzd.cc -kongrong.com -kongsun-hldgs.com -kongtiao365.com -kongyixueyuan.com -kongzhi.net -kongzhong.com -konka.com -konkamobile.com -konkek2.com -konotaku.com -konshan.com -kooaoo.com -koocdn.com -koodudu.com -koofang.com -koofun.com -kookong.com -koolbao.com -koolcenter.com -kooldns.com -koolearn.com -koolproxy.com -koolyun.com -koopass.com -koorun.com -kooshui.com -kooteam.com -koouoo.com -koovin.com -koovoo.com -koowo.com -kooxoo.com -kooyx.com -koplayer.com -koreabt.com -koreaxing.com -korimscdn.com -korirl.com -kotei-info.com -kotex-km.com -koto.com -kotoo.com -koubei.com -koubeiblog.com -koubeikc.com -koucai365.com -koudai.com -koudai8.com -koudaibaobao.com -koudaigou.net -koudailc.com -koudaili.com -koudaionline.com -koudaionline.net -koudaipe.com -koudaitiku.com -koudaitong.com -koudashijie.com -koudin.com -kouer.com -kouer.net -kouke5.com -koukousky.com -koukuko.com -koumakan.cc -kouqiang1.com -kouqing.com -koushare.com -kousou.cc -kouss.com -kouyu100.com -kouzi.com -kowa-dental.com -kowa103.com -koyuki.cc -kpbgw.com -kpblw.com -kpjushi.com -kpkpw.com -kplanet.vip -kpqtw.com -kprepublic.com -kpsfloor.com -kpzip.com -kpzip.net -kpzs.com -kq36.com -kq39.com -kq520.net -kq81.com -kq88.com -kqcfcw.com -kqgeo.com -kqidong.com -kqiwen.com -kqiwen.net -kqj123.com -kqqy.com -kqzjw.com -kqzlzx.com -kr-cell.com -kr.com -kr126.com -krahag.com -krbamboo.com -krdlw.com -krdrama.com -kriszhang.com -krjkkj.com -krpano.tech -krshadow.com -krszf.com -krwz.com -krxo588peycx.com -krzer.com -krzzjn.com -ks-cdn.com -ks-cdn1.com -ks-live.com -ks-lxjy.com -ks-spring.com -ks1688.com -ks321.com -ks365.org -ks51.com -ks5u.com -ksair.com.tw -ksapisrv.com -ksaxx.com -ksbao.cc -ksbao.com -kscac.com -kscdns.com -ksdkcks.com -ksdlp.com -ksdown.com -ksdq0514.com -ksense.com -ksfang.com -ksgnr.com -kshitachi.com -kshot.com -ksjgs.com -kskino.com -ksks001.com -ksldg.com -ksmobile.com -ksmom.com -ksnows.com -ksops.com -ksord.com -ksosoft.com -kspkg.com -ksqdq.com -ksren.com -ksria.com -ksrong.com -ksseg.com -kstao.com -kstz1.com -ksudi.com -ksupdate.com -ksydx.com -ksyiqiwan.com -ksyna.com -ksyuki.com -ksyun.com -ksyunad.com -ksyuncdn-k1.com -ksyuncdn.com -ksyungslb.com -ksyunv5.com -ksyunwaf.com -kszhuanjia.com -kt007.com -kt250.com -kt286.com -kt40.com -kt5u.com -ktanx.com -ktbiao.com -ktfdsb.com -kting.info -ktjd.net -ktkj.com -ktkt.com -ktlshu.vip -ktlstbg.com -ktmap.com -ktpf.cc -ktplay.com -ktsee.com -kttpdq.com -ktvc8.com -ktvdaren.com -ktvme.com -ktvsky.com -ktvxg.com -ktxuexi.com -ku2048.net -ku25.com -ku3721.com -ku6.com -ku6.net -ku6cdn.com -ku6img.com -ku82.com -ku86.com -ku8ku8.com -ku90.com -ku9377.com -kuabaobao.com -kuacg.com -kuafugame.com -kuai-fei.com -kuai-ying.com -kuai.ma -kuai65.com -kuai7.com -kuai8.com -kuaibbs.com -kuaibiancheng.com -kuaibiao2000.com -kuaibowang.net -kuaibuw.com -kuaicad.com -kuaichale.com -kuaidadi.com -kuaidaili.com -kuaidajian.com -kuaidi.com -kuaidi100.com -kuaidihelp.com -kuaidil.com -kuaidizs.com -kuaiduwen.com -kuaiex.com -kuaifa.mobi -kuaifaka.com -kuaifawu.com -kuaifeng.com -kuaigames.com -kuaigeng.com -kuaihaodai.com -kuaihou.com -kuaihz.com -kuaiji.cm -kuaiji.com -kuaiji.so -kuaiji66.com -kuaijilunwen.com -kuaijinniu.com -kuaijiren.com -kuaijishizi.com -kuaijisishu.com -kuaijitong.com -kuaijizheng365.com -kuaikanad.com -kuaikanmanhua.com -kuaikq.com -kuaikuaicloud.com -kuaikuaidai.com -kuaikuaihuoche.com -kuaikuaiyu.com -kuaila.com -kuaile-u.com -kuaile800.com -kuailelunwen.com -kuailesh.com -kuailetongyao.com -kuaileworld.com -kuailexinli.com -kuailexs.com -kuailezu.com -kuailiyu.com -kuailiyu.net -kuaimi.com -kuaipandata.com -kuaipao8.com -kuaipeilian.com -kuaipng.com -kuaiqin.com -kuaiqin.net -kuaiqun.org -kuaishebao.com -kuaishou.com -kuaishouapp.com -kuaishouba.com -kuaishoupay.com -kuaishouzt.com -kuaishubao.com -kuaisujiasu.net -kuaitijian.com -kuaitu666.com -kuaiwan.com -kuaiwanwo.com -kuaixiazai.com -kuaiyan.com -kuaiyiad.com -kuaiyilicai.com -kuaiyingxiao88.com -kuaiyoujia.com -kuaiyouxi.com -kuaiyu.com -kuaiyunds.com -kuaizhan.com -kuaizhang.com -kuaizhe.com -kuaizhihui.com -kuaizi.co -kuaizip.com -kuaizitech.com -kuaizitech.net -kuaizq.com -kuaizy.com -kuajing.com -kuajing.hk -kuajingyan.com -kuakao.com -kuakao.net -kuaming.com -kuandao.com -kuang-chi.com -kuang-chi.org -kuangchan.biz -kuangjijia.com -kuangjiwan.com -kuangming.com -kuangren.cc -kuangrendao.com -kuangwan.tv -kuangxiangit.com -kuangyi.com -kuanye.net -kuark.com -kuashou.com -kubey.cc -kubicode.me -kubikeji.com -kubiops.com -kubo-360-tudou.com -kubozy-cdn-baidu.com -kuche.com -kuchuan.com -kudasuye.com -kudiannao.com -kudianqi.com -kudiaoyu.com -kudingyu.com -kuface.com -kufangwuyou.com -kufaxian.com -kuge.cc -kugou.com -kugou.la -kugou.net -kuguopush.com -kugz.net -kuhii.com -kuhua.net -kuicc.com -kuihuo.com -kuiniuca.com -kuishiba.com -kuishuling.com -kujiale.com -kujiang.com -kujingling.com -kuk8.com -kukahome.com -kukasofa.com -kuke.com -kuke99.com -kukecloud.com -kukseo.com -kuku9.com -kukuchuangxiang1.com -kukuchuangxiang4.com -kukud.net -kukudesk.com -kukumai.com -kukupao.com -kukupig.com -kukuplay.com -kukushouyou.com -kukushow.com -kukuspeak.com -kukuw.com -kukuxiu.com -kuleiman.com -kulemi.com -kulengvps.com -kuletco.com -kuli.ren -kuliqiang.com -kuliwang.net -kuman.com -kuman56.com -kumankeji.net -kumaoyun.com -kumifeng.com -kungfucloud.com -kungfuenglish.com -kungge.com -kunguankeji.com -kunkkawu.com -kunleen.com -kunlun-cdn.com -kunlunaq.com -kunlunar.com -kunlunca.com -kunluncan.com -kunlunce.com -kunlunea.com -kunlungem.com -kunlungr.com -kunlunhuf.com -kunlunjue.com -kunlunle.com -kunlunli.com -kunlunno.com -kunlunpi.com -kunlunra.com -kunlunsa.com -kunlunsc.com -kunlunsl.com -kunlunso.com -kunlunta.com -kunlunvi.com -kunlunwe.com -kunmingbc.com -kunmingkanghui.com -kunnisser.com -kunpo.cc -kunshanidc.com -kuntaihotel.com -kunx.org -kunyueyun.com -kuo-yi.com -kuodie.com -kuoo8.com -kuoruan.com -kuosanyun.com -kuosheng.net -kuotu.com -kuozhan.net -kupao.com -kuparts.com -kupoo.com -kuqin.com -kurogame.com -kurokingdom.com -kurukurumi.com -kusdk.com -kushenchina.net -kushou.com -kushuzw.com -kusouji.com -kutianxia.com -kutj.com -kutongji.com -kutoo8.com -kutsg.com -kutu66.com -kutuan.com -kuuhuu.com -kuuke.com -kuwan8.com -kuwanapp.com -kuwanbang.com -kuwen.net -kuwew.com -kuwuu.com -kuxiaoji.com -kuxuexi.com -kuyh.com -kuyibu.com -kuyin123.com -kuyinyun.com -kuyiso.com -kuyoo.com -kuyubox.com -kuyumall.com -kuyun.com -kuyun1.com -kuzhengame.com -kvecc.com -kvemm.com -kvenjoy.com -kvezz.com -kviso.com -kvkft.com -kvogues.com -kvov.com -kvov.org -kwaicdn.com -kwaisczway7r4tz7m8.com -kwaishop.com -kwaixiaodian.com -kwaiying.com -kwaizt.com -kwenku.com -kwimgs.com -kwin.wang -kwin.xyz -kwkf.com -kwting.com -kwtzn.com -kwx.gd -kwxjh.net -kx001.com -kx1d.com -kx516.com -kx7p.com -kxapp.com -kxapps.com -kxbaidu.com -kxbld.com -kxbox.com -kxceping.com -kxdaili.com -kxdao.com -kxdpm.com -kxdw.com -kxewpz.com -kxfsw.com -kxgcw.com -kxgdyw.com -kxiaoshuo77.com -kxinyk.com -kxji.com -kxjlt.org -kxnboat.com -kxpay.net -kxt.com -kxting.com -kxtoo.com -kxtry.com -kxtui.com -kxtwz.com -kxvuv.com -kxwan.com -kxxsc.com -kxxxl.com -kxyike.com -kxzmw.com -ky-express.com -ky958.com -kybapp.com -kybapp.net -kybimg.com -kyboye.com -kydev.net -kye-erp.com -kyemall.com -kyhere.com -kyhs.me -kyidc.net -kyimg.com -kyjxy.com -kylc.com -kyleduo.com -kyleslight.net -kylienet.com -kyligence.io -kylin-os.com -kylinlot.com -kylinmobi.com -kylinos.com -kylinpet.com -kymco.cc -kymjs.com -kynix.com -kyoceraconnect.com -kyp565.com -kyppt.com -kyqcfj.com -kytijian.com -kyw4y0s.com -kyxdloan.com -kyy6.com -kyyj.net -kyzf.net -kyzyj.com -kz8yx.com -kza.cc -kzj365.com -kzlgd.com -kzore.com -kzt.cc -kztpms.com -kzwr.com -l2h.site -l36h.com -l5550.com -l68.net -l77777777.com -l7audiolab.com -l99.com -la-mo.com -la31.com -lab-z.com -labagd.com -labahao.com -labajun.com -labbang.com -labbase.net -labfan.com -labgogo.com -laborlawtime.com -labtoday.net -labview.help -labxing.com -lacesar.com -lache.me -lactec.net -ladiyoga.com -ladjzs.com -ladouban.com -lady177.com -lady361.com -lady8844.com -lady98.com -ladybirdedu.com -ladymetro.com -ladystr.com -ladywu.net -ladyyu.com -lafaso.com -lafhzx.com -lagou.com -lagouevents.com -lagoujobs.com -lagowang.com -lahm2018.com -lahuashanbx.com -lai-ai.com -laiba.shop -laibokeji.com -laichou.com -laichuanfeng.com -laidacai.com -laidianba.net -laidiannet.com -laidingba.com -laidou.wang -laidudu.com -laifeng.com -laifu.net -laifudao.com -laigame7.net -laihema.com -laihua.com -laijiawen.com -laijiudu.com -laijiuye.com -laikan.com -laikanxing.com -laikanxs.com -laiketui.com -lailaihui.com -lailook.net -laily.net -laima-tech.com -laimaidi.com -laimaika.net -laipai8.com -laiqi.net -laiqukankan.com -laird-tek.com -laishuge.com -laishui.info -laisj.com -laituia.com -laituijian.net -laiwang.com -laiwo.com -laiwu.net -laiwumedia.com -laixiukeji.com -laixueedu.com -laixuexi.cc -laiyetxt.com -laiyexs.com -laiyifen.com -laiyikeji.net -laiyinpai.com -laiyoushu.com -laiyouxi.com -laizee.com -laizhouba.net -laizhuan.com -laizi.net -lajixs.com -lakala.com -lakecn.com -laker.me -lakwdian.com -lalala.lol -lalkk.com -lalunalove.com -lamabang.com -lamahui.com -lamaison-arting.com -lamajie.com -lamall.com -lamaqun.com -lamateam.com -lamaying.com -lambda.hk -lamiu.com -lamost.org -lampchina.net -lampholder.cc -lampouomo.com -lamyu.com -lan-bridge.com -lan-lin.com -lan1001.com -lanbozb.com -lanbts.com -lanbu.net -lancdn.com -lancn.net -lanconvey.com -landa-solenoid.com -landai.com -landchina.com -landed.cc -landi.com -landian.la -landian.vip -landiannews.com -landing-med.com -landingbj.com -landizs.com -landjs.com -landraco.com -landray.com -landscapecn.com -landtu.com -landui.com -landzestate.com -lanecn.com -lanfanapp.com -lanfeicastle.com -lanfeitech.com -lanfeiwine.com -lanfeng.net -lanfw.com -lang8.net -langao.com -langchao.com -langchengzhixin.com -langda.cc -langfang.com -langfangfc.com -langfly.com -langke.com -langke.tv -langlang.cc -langlangchinese.com -langlangjiajiao.com -langlib.com -langlinking.com -langlive.com -langlvseo.com -langmanzg.com -langmanzw.com -langmeijy.net -langongju.com -langren001.com -langren8.com -langrencard.com -langrenclub.com -langtaojin.com -langtze.com -languangdy.com -langya.org -langya3.com -langyabang.com -langyuseo.com -langzi.fun -lanhaicaijing.com -lanhaijiye.com -lanhaiweb.net -lanhaizhi.com -lanhii.com -lanhu.com -lanhuapp.com -lanhuhu.com -lanhusoft.com -lanindex.com -lanjie520.com -lanjing5.com -lanjinger.com -lanjingfm.com -lanjingtmt.com -lanketd.com -lanlanlife.com -lanlicai.com -lanlv.com -lanmao.com -lanmaos.com -lanmit.com -lanou3g.com -lanqb.com -lanqi.com -lanqiao.org -lanqibing.com -lanqiuzu.com -lanreelh.com -lanren9.com -lanrenbijia.com -lanrenclub.com -lanrenexcel.com -lanrenkaifa.com -lanrenmb.com -lanrentingshu.cc -lanrentuku.com -lanrenzhaofang.com -lanrenzhijia.com -lanrenzhoumo.com -lansedongli.com -lanseyujie.com -lansha.tv -lanshanweb.com -lanshizi.com -lantaoyu.com -lantian-hotel.com -lantian.tv -lantinglou.com -lantingmingjia.com -lantunyouxi.com -lanuss.com -lanvige.com -lanxicy.com -lanxinbase.com -lanxiniu.com -lanxiongsports.com -lanxum.com -lanyg.com -lanyingwang.com -lanyuanxiaoyao.com -lanyunbrand.com -lanyus.com -lanyusf.com -lanzhisky.com -lanzhouunicom.com -lanzhouyangsheng.com -lanzhuwh.com -lanzou.com -lanzoug.com -lanzoui.com -lanzoup.com -lanzouq.com -lanzoux.com -lanzun.net -lao9123.com -laob.me -laobaigan-hs.com -laobandq.com -laobanfa.com -laobangban.com -laobanmail.com -laobingmi.com -laobuluo.com -laobuxie.com -laocen.com -laod.wang -laodao.cc -laodong.me -laodong66.com -laodongfa.com -laoduo.net -laofu.online -laofuxi.com -laoge.xyz -laogongshuo.com -laogu.cc -laogu.com -laogu.wang -laogumincj.com -laohanzong.com -laohanzong1.com -laohe360.net -laohu.com -laohu8.com -laohuabao.com -laohuangli.net -laohucaijing.com -laohutao.com -laohuyun.com -laojilu.com -laojiuxitong.com -laoke.com -laolai.com -laolaile521.com -laolaosi.com -laoliang.net -laoliboke.com -laolieren.shop -laolinow.com -laoluoshouji.net -laomaotao.net -laomaotao.org -laomaotaopan.com -laomn.com -laomoo.net -laomudong.cc -laonanren.cc -laoniushuju.com -laoqiange.club -laoqiange.com -laoqianzhuang.com -laoqu123.net -laoren.com -laosiji.com -laosunit.com -laotiaomao.com -laowangappxy.xyz -laowangshengge.com -laowuxx.com -laoxiezi.com -laoxuehost.com -laoxuehost.net -laoxuezhuji.com -laoy.net -laoyaoba.com -laoyoujiaju.com -laoyouzhibo.com -laoyuanji.com -laoyuegou.com -laoyuge.com -laoyuji.com -laozizhu.com -laozongyi.com -laozu.com -laozuo.org -lapin365.com -lapland.name -laqiangu.com -laravel-admin.org -larenla.com -large.net -larkapp.com -larksuite.com -larmb.com -laruence.com -laryoo.com -las1001boda.com -lascn.net -laser568.com -laserfair.com -lashou.com -lashouimg.com -lastdream.net -lasy.site -latchss.com -lategege.com -latelee.org -latexstudio.net -latiaozixun.com -latiaozixun.net -latin100.com -lativ.com -latoooo.com -lattebank.com -lattecake.com -lavago.com -lavandehotels.com -lavapm.com -lavaradio.com -law-lib.com -law-star.com -lawbridge.org -lawbus.net -lawinfochina.com -lawlingyun.com -lawnewscn.com -laws5.com -lawschina.com -lawtimeimg.com -lawxin.com -lawxp.com -lawyee.com -lawyee.net -lawyee.org -lawyer027.com -lawyerbridge.com -lawyermr.com -lawyershanghai.net -lawyersuperman.com -layabox.com -layui-inc.com -layui.com -layuicdn.com -lazada.co.id -lazada.co.th -lazada.com -lazada.com.my -lazada.com.ph -lazada.sg -lazada.vn -lazybios.com -lazylorna.com -lbagan.com -lbal168.com -lbbniu.com -lbd99.com -lbddd.com -lbdyzj.com -lbdz.cc -lbesec.com -lbgoo.com -lbinin.com -lbkrs.com -lbl520.com -lboyue.com -lbwbw.com -lbx.cc -lbx777.com -lbxcn.com -lbxdrugs.com -lbxueyuan.com -lbyczf.com -lbzuo.com -lc-cn-n1-npxfk.com -lc-cn-n1-shared.com -lc-cn-n1-thovg.com -lc-news.com -lc123.net -lc787.com -lcbdf.net -lcbtv.com -lccareer.com -lccdn.net -lcchn.com -lccmw.com -lccz.com -lcddjm.com -lcdhome.net -lcdushi.com -lcdwiki.com -lcfby.com -lcfile.com -lcfs0769.com -lcfw.co -lcgod.com -lchot.com -lcjfz.com -lcjh.com -lckeshun.com -lckiss.com -lcloc.com -lcofjp.com -lcouncil.com -lcpxxx.net -lcrcbank.com -lcread.com -lcshzgy.com -lcsrmyy.com -lcux.net -lcxwfc.com -lcyp.net -lczm.com -lczyy.com -ld0766.com -ld12366.com -ldcache.net -ldcang.com -ldd.me -lddengine.com -lddgo.net -ldeng.com -ldjx.cc -ldmap.net -ldmnq.com -ldnovel.com -ldplayer.net -ldqxn.com -ldshj.com -ldsink.com -ldtui.com -ldxsfw.com -ldycdn.com -ldygo.com -ldyh666.com -le-feng.com -le.com -le5le.com -le890.com -leachchen.com -leacol.com -lead-expo.com -leadal.com -leadal.net -leadbbs.com -leadcoretech.com -leader-tech.net -leadercf.com -leaderhero.com -leadermall.com -leadge.com -leadong.com -leaforbook.com -leafword.com -leagcard.com -leagsoft.com -leangoo.com -leankun.com -leanote.com -leanote.org -leansoftx.com -leanwind.com -leap-pc.com -leapahead.vip -leapfive.com -leapmie.com -leapmotor.com -learn-quantum.com -learndiary.com -learnfans.com -learnfuture.com -learning-archive.org -learnku.com -learsun.com -leb-china.com -lebang.com -lebang.net -lebogame.net -leboweb.com -lecai.com -lecake.com -lechain.com -lechange.com -leche.com -lechebang.com -lechinepay.com -lecloud.com -lecoinfrancais.org -leconginfo.com -lecoo.com -lecoo8.com -lecuntao.com -leda13.com -ledaiyu.com -ledanji.com -ledao.so -ledboke.com -ledcax.com -ledchina-sh.com -ledctl.com -lede.com -ledhxgc.com -ledianduo.com -lediaocha.com -ledo.com -ledsdk.com -ledth.com -ledu.com -ledu365.com -leduimg.com -leduotv.com -lee130.com -leeco.com -leefanmr.com -leehon.com -leeif.me -leeiio.me -leenzhu.com -leeon.me -leepoint.net -leesou.com -leetcode-cn.com -leetcodechina.com -leevy.net -leewiart.com -leeyegy.com -leeyuoxs.com -lefeng.com -lefengmoving.com -lefengtuku.com -lefinance.com -leftfm.com -leftlady.com -leftso.com -legend-go.com -legendh5.com -legendsec.com -legendtkl.com -legoflow.com -legou456.com -legowechat.com -legu.cc -legu168.com -leguyu.com -leha.com -lehaitv.com -lehe.com -lehecai.com -lehihi.com -leho.com -lehu.host -lehuadisplay.com -lehuipay.com -lehuiso.com -leibei.cc -leida310.com -leidian.com -leidianip.com -leiduhuaya.com -leifengshi120.com -leigod.com -leihuo.net -leikeji.com -leikw.com -leileiluoluo.com -leilong158.com -leimi.com -leimingtech.com -leimingtelab.com -leimudata.com -leiniao.com -leiniao365.com -leining-shield.com -leiouxiong.com -leipengkai.com -leiphone.com -leiqunjs.com -leirenw.com -leishen-lidar.com -leisoon.com -leisu.com -leisu123.com -leisurelypanda.com -leiting.com -leitingcn.com -leitingjunshi.com -leiue.com -leiyunge.com -leiyunge.net -lejiachao.com -lejian.com -lejianweike.com -lejiaolexue.com -lejj.com -lejlb.com -lejlc.com -leju.com -lejucaifu.com -lejuliang.com -lejunwl.com -lekannews.com -lekevr.com -lekoukou.com -lekpass.com -lelai.com -lele1688.com -leleda.com -leledp.com -leleketang.com -lelelala.net -lelepyq.com -leleren.com -leletv.com -leletv.net -lelevod.com -lelewl.com -lemai.com -lemaker.com -lemall.com -lemedu.com -lemeitu.com -lemfix.com -lemo360.com -lemobar.com -lemonyd.com -lemonyule.com -lemote.com -lempstack.com -lenget.com -lenggirl.com -lengqing.org -lengxiaohua.com -lengziyuan.com -lengzzz.com -lening100.com -leniugame.com -leniy.org -lenizhu.com -lenosoft.net -lenovator.com -lenovogame.com -lenovohci.com -lenovohit.com -lenovohuishang.com -lenovoimage.com -lenovomm.com -lenovomobile.com -lenovonetapp.com -lenovonowgo.com -lenovots.com -lenovouat.com -lenovowap.com -lenovows.com -lensuo.com -lenzhao.com -leo96.com -leoao-inc.com -leoao.com -leobian.com -leoboard.com -leocode.net -leonblog.net -leonshadow.com -leosirius.fun -leozwang.com -lepaiok.com -lepaowang.com -leqian.com -lequ.com -lequ7.com -lequgo.com -lequxs.com -lequyuanyi.com -lequz.com -leqv.online -lerengu.com -lergao.com -lers123.com -lers168.com -lers168.net -lerye.com -leshanvc.com -leshi123.cc -leshou.com -leshow.com -leshu.com -leshuazf.com -leshuwu.com -leslie-cheung.com -lesofaka.com -lesoncooking.com -lesports.com -lesscss.net -lessisbetter.site -lesun.org -letabc.com -letaikeji.com -letao.com -letfind.com -leting.io -letoom.com -letou8.com -lets-study.com -letsebuy.com -letsfilm.org -letsgaga.com -lettercloud.net -letuinet.com -letuknowit.com -letushu.com -letv-cdn.com -letv.com -letv8.com -letv8.net -letvapp.net -letvcdn.com -letvcloud.com -letvimg.com -letvlb.com -letvps.com -letwind.com -letwx.com -letyo.com -leuok.com -levect.com -leviding.com -levy.work -lewaila.com -lewaimai.com -lewanduo.com -lewang.ltd -leweicn.com -lewen.la -lewen55.com -lewen88.com -lewenba.cc -lewenn.com -lewenxsw.com -lewifi.com -lewode.com -lexapro-web.com -lexar.com -lexiang-asset.com -lexiangjian.com -lexiangla.com -lexin.com -lexinchina.com -lexue.com -lexue8.com -lexueying.com -lexun.com -lexun365.com -lexzr.com -leyantech.com -leyaoyao.com -leyaoyao.org -leyard.com -leybc.com -leyifan.com -leying.com -leying.org -leying365.com -leyingtt.com -leyishandong.com -leyixue.com -leyohotel.com -leyoucp.com -leyoujia.com -leyouquan.com -leyuanbaby.com -leyubox.com -leyue100.com -leyun001.com -leyungame.com -leyunge.com -leyuz.com -leyvo.com -lezai.com -lezhi.com -lezhi99.com -lezhibo.com -lezhieducation.com -lezhiot.com -lezhiyun.com -lezhuan.com -lezhuan168.com -lezhuan365.com -lezi.com -lezyo.com -lf-tools.net -lf127.net -lfan.net -lfang.com -lfbxw.com -lfcmw.com -lfex.com -lfhacks.com -lfhygl.com -lfidc.net -lfkjgh.com -lfksqzj.com -lflucky.com -lfppt.com -lftdzd.com -lfungame.com -lfwin.com -lfwtc.com -lfx20.com -lfyzjck.com -lg1024.com -lg199.com -lg473.com -lg5.com -lgctshanghai.com -lgdisplayproduct.com -lgdlife.com -lgexam.com -lghsrh.com -lgmjg.com -lgo100.com -lgole.com -lgpic.com -lgstatic.com -lguohe.com -lgzikao.com -lh-lx.com -lh168.net -lh310.com -lh75.com -lhao88.com -lhave.com -lhdxz.com -lhdyfc.com -lhflh.com -lhggjd.org -lhh.la -lhlqw.com -lhm8.com -lhrbszb.com -lhs-arts.org -lhs11.com -lhsdad.com -lhsoso.com -lhtjyy.com -lhtyyt.com -lhwill.com -lhwytj.com -lhy1.xyz -lhy2.xyz -lhy4.xyz -lhzq.com -li-ca.com -li-ning.com -li63.com -li91.com -liageren.com -lialip.com -lialiu.com -lianaibashi.com -lianaibiji.com -lianbijr.com -lianchuang.com -liancsoft.com -liandaomobi.com -liandaquan.com -liang.com -liangchan.net -liangchanba.com -liangduiban.com -liangjan.com -liangjian.com -liangjianghu.com -liangka.vip -liangkun.net -liangle.com -lianglong.org -liangongshequ.com -liangpinriyu.com -liangqikeji.com -liangshangou.com -liangshuang.name -liangshunet.com -liangxinyao.com -liangxu.wang -liangyadong.com -liangyi.com -liangyunchang.com -liangzhishu.com -liangziseo.com -liangzl.com -lianhaikeji.com -lianhecang.com -lianjia.com -lianjixia.com -liankaa.com -liankebio.com -liankexing.com -lianle.com -lianlianlvyou.com -lianlianpay.com -lianliantaoshop.com -lianlife.com -lianmeng.la -lianmeng.link -lianmenhu.com -lianmishu.com -lianpingd.com -lianpuie.com -lianqi.net -lianshangbing.com -lianshijie.com -liansuo.com -liantai.cc -liantianhong.com -liantu.com -liantuobank.com -lianty.com -lianwangtech.com -lianwen.com -lianwifi.com -lianwo8.com -lianxiangcloud.com -lianxianjia.com -lianxinapp.com -lianxueqiu.com -lianyezy.com -lianyi.com -lianyu.com -lianzhong.com -lianzhongmingyuan.com -lianzhongyun.com -lianzhuli.com -liao98.com -liaocao.com -liaocheng.cc -liaochuo.com -liaocy.net -liaodanqi.me -liaogu.com -liaogx.com -liaohuqiu.net -liaoing.com -liaokeyu.com -liaokong.com -liaoliao.com -liaosam.com -liaoshenrc.com -liaotiangou.com -liaotuo.org -liaow0316.com -liaowei.info -liaoxuefeng.com -liaozhai.tv -lib4d.com -lib520.com -liba.com -libaclub.com -libai.com -liball.me -libaopay.com -libaoyun.com -libchina.com -libinx.com -libisky.com -libomarathon.com -libreofficechina.org -libsou.com -libtop.com -libvideo.com -lic-bcbc.com -licai.com -licai18.com -licaie.com -licaifan.com -licaigc.com -licaike.com -licaiker.com -licaimofang.com -licat.com -lichangtai.com -lichangtao.com -lichengdai.com -lichengwu.net -lichenjy.com -lichensafe.com -licomsh.com -licqi.com -licstar.net -lid1688.com -lidakang.com -lidaoliang.com -lidaren.com -lidazhuang.com -lidecloud.com -lidepower.com -lidetc.com -lidewen.com -liding.me -lidodo.com -lidoooo.com -liebao.live -liebaoidc.com -liebiao.com -liebrother.com -liechan.com -liefangzhe.com -liegou.org -lieguo.com -lieguozhi.com -liehu.tv -liehunwang.com -liehuo.net -liehuo.org -liejin99.com -lieju.com -lielb.com -lielema.com -lieluobo.com -liemingwang.com -lienew.com -liepin.com -liepincc.com -liepinoverseas.com -lieqi.com -liesauer.net -lietou-edm.com -lietou-static.com -lietou.com -lietou007.com -lietuwang.com -liewen.cc -liewen.la -liexing-ai.com -liexing.com -lieyou.com -lieyuncapital.com -lieyuncj.com -lieyunwang.com -lif8.com -lifan.com -life365.com -lifeall.com -lifeeu.com -lifegatemedicine.com -lifeibo.com -lifeng.in -lifeng.net -lifeofguangzhou.com -lifesense.com -lifetm.com -lifetmt.com -lifevc.com -lifevccdn.com -lifeweeker.com -lifeweekly.cc -lifeyk.com -lifox.net -lifushop.com -ligerui.com -lighos.com -light3moon.com -lightalk.com -lightcss.com -lightfire.cc -lightgx.com -lightingchina.com -lightinit.com -lightky.com -lightlygame.com -lightnovel.us -lightonus.com -lightpassport.com -lightplan.cc -lighttp.com -lightyy.com -liguda.com -liguhd.com -liguosong.com -lihaihong.com -lihaoquan.me -lihaoshuyuan.com -lihtao.com -lihua.com -lihuia.com -lihun66.com -lijiateng.com -lijiejie.com -lijigang.com -lijingquan.net -lijishi.com -lijizhong.com -liju123.com -likamao.com -likangwei.com -likeacg.com -likecha.com -likechuxing.com -likecs.com -likeface.com -likefar.com -likefont.com -likeji.net -likejianzhan.com -likeshare-tech.com -likeshuo.com -liketm.com -liketry.com -likewed.com -liking.site -likingfit.com -likuli.com -likuso.com -lilifenxiang1.com -lilinwei.com -lilishare.com -lilisi.com -lilithgame.com -lilithgames.com -lilosrv.com -liluotech.com -lilvb.com -lily-collection.com -lilyenglish.com -lilysamericandiner.com -lilysgame.com -limax.com -limboy.com -limei.com -limian.com -limikeji.com -liminglight.com -liminjie714.com -liminwang.com -limless.com -limoer.cc -limufang.com -linakesi.com -linban.com -linchuanschool.com -lincoc.com -lindiankanshu.com -linduwang.com -line0.com -linecg.com -linecg.net -linekong.com -linelayout.com -linewell.com -linewow.com -linezing.com -linfan.com -lingaoren.com -lingb.net -lingbao-e.com -lingcaixinyuan.com -lingd.cc -lingd.com -lingdai.name -lingdi.net -lingdiankanshu.co -lingdianksw.com -lingdonghuyu.com -lingdunwang.com -lingduohome.com -lingdz.com -lingfei.wang -lingfengyun.com -lingganjia.com -linghit.com -lingji666.com -lingjiaocheng.com -lingjing.com -lingjiptai.com -lingjoin.com -lingkaba.com -lingki.net -lingkou.com -lingla.com -linglingkaimen.com -linglongart.com -linglongtech.com -linglu666.com -lingmovie.com -lingnanpass.com -lingocn.com -lingosail.com -lingphone.net -lingquanb.com -lingqujz.com -lingrengame.com -lingrn.com -lingshangkaihua.com -lingshi.com -lingsky.com -lingtaoke.com -lingtiao.com -lingtool.com -lingtu.com -lingtuan.com -lingw.net -lingwu66.com -lingxi360.com -lingxianmulu.com -lingxicloud.com -lingxiu580.com -lingxmall.com -lingxunyun.com -lingyi.org -lingyiliebian.com -lingyinsi.com -lingyuecloud.com -lingyuewx.com -lingyun.net -lingyun5.com -lingyutxt.com -lingzhanwenhua.com -lingzhilab.com -lingzhitech.com -lingzhtech.com -linhao99.com -linhere.com -linhuiba.com -lining.com -lining0806.com -linjia.me -linjie.org -linjin.net -linjunet.com -linjunlong.com -link27.com -link2lib.com -link2shops.com -linkadsapi.com -linkbroad.com -linkbux.com -linkchant.com -linkchic.com -linked-f.com -linkedbyx.com -linkedhope.com -linkedin-event.com -linkedkeeper.com -linkedme.cc -linkedsee.com -linker.cc -linkernetworks.com -linkfinancier.com -linkfun.org -linkh5.com -linkh5.xyz -linkhaitao.com -linkheer.com -linkingme.com -linkist.net -linknewideas.com -linkpro.tech -linkrall-trk.com -linkresearcher.com -linkscue.com -linksfin.com -linksgood.com -linkshop.com -linksoon.net -linkstars.com -linktech.hk -linktom.com -linktom.net -linktt.com -linkunbin.com -linkvans.com -linkwebll.com -linlin.com -linlizone.com -linlongyun.com -linlongyx.com -linni.com -linnsea.com -linnyou.com -linovel.co -linovel.net -linovelib.com -linpx.com -linqu.tv -linquan.info -linquan.name -linqujob.com -linroid.com -linruanwangluo.com -linshang.com -linshigong.com -linstitute.net -lintey.com -lintongrc.com -linuo-paradigma.com -linuser.com -linux-code.com -linux-ren.org -linux.zone -linux178.com -linux265.com -linux5.net -linux6.com -linuxba.com -linuxbaike.com -linuxbaodian.com -linuxboy.net -linuxcool.com -linuxdaxue.com -linuxde.net -linuxdiyf.com -linuxdot.net -linuxdown.net -linuxea.com -linuxeden.com -linuxeye.com -linuxfly.org -linuxgogo.com -linuxidc.com -linuxidc.net -linuxkiss.com -linuxmi.com -linuxpanda.tech -linuxpk.com -linuxplus.org -linuxprobe.com -linuxrumen.com -linuxsight.com -linuxsir.com -linuxso.com -linuxsong.org -linuxtone.org -linuxyan.com -linuxyunwei.com -linuxyw.com -linweiyuan.com -linwenfa.com -linx-info.com -linxingyang.net -linyezhandidi.com -linyi.com -linyi.net -linyilongyuan.com -linyiren.com -linzhuotech.com -linzhuxin.com -linzl.com -lion1ou.tech -lionaka.com -lionelliu.com -lionmobo.com -lipai365.com -lipf.tech -lipian.com -lipiji.com -lipilianghang.com -lipin.com -lipin010.com -lipinduihuan.com -lippt.com -liqihuoke.com -liqijt.com -liqile.com -liqinyi.com -liqu.com -liquidnetwork.com -liqunshop.com -liqwei.com -lirenling.com -liriansu.com -liroi.com -lirui.name -lis99.com -lisa33xiaoq.net -lisdn.com -lisen.me -lishi.com -lishi5.com -lishi6.com -lishibu.com -lishichunqiu.com -lishiip.com -lishiming.net -lishiren.com -lishixinzhi.com -lishizhishi.com -lishouhong.com -lishuhang.me -lishui.com -lisizhang.com -lisp123.com -listarypro.com -listeneer.com -listenerri.com -listentide.com -listentoworld.com -listenvod.com -litaow.com -litecoin.ink -litecoin.ren -litefeel.com -litets.com -liticool.club -litilala.site -litilala.xyz -litipumps.com -lititop.group -litpo.com -litten.me -little-sun.com -littleboy.net -littleee.com -littlehero.xyz -littlekid.online -littleroost.net -littlesheep.com -littleswan.com -liu-kevin.com -liubaiapp.com -liubangapp.com -liubiji.com -liubo.live -liucaijiu.com -liuchengtu.com -liuchengtu.net -liuchengxu.org -liuchuo.net -liudanking.com -liudatxt.com -liudon.org -liudu.com -liudu9.com -liugejava.com -liugezhou.online -liugj.com -liugm.com -liuguofeng.com -liuhaipeng.com -liuhaolin.com -liuhu.net -liujiajia.me -liujiangblog.com -liujiasj.com -liujijun.com -liujto.com -liujunworld.com -liujy.com -liukebao.com -liulan7.net -liulanmi.com -liulanqi.com -liulanqi.net -liulantao.com -liulian.com -liuliangcanmou.com -liuliangdada.com -liulianggo.com -liuliangjie.com -liulianglf.com -liuliangzu.com -liulianqi123.com -liulianyu.com -liuliguo.com -liulin.cc -liulinblog.com -liulishuo.com -liulishuo.work -liulv.net -liumapp.com -liumeinet.com -liumh.com -liumwei.org -liumx.com -liunews.com -liunian.info -liunianbanxia.com -liushidong.com -liushuba.com -liusuping.com -liut.xyz -liuts.com -liuxianan.com -liuxiaofan.com -liuxiaolingtong.com -liuxing.com -liuxinzhou.com -liuxiting.com -liuxuchao.com -liuxue.com -liuxue114.com -liuxue360.com -liuxue51.net -liuxue86.com -liuxuegang.site -liuxuehksg.com -liuxuehr.com -liuxuekw.com -liuxuesmd.com -liuxuetown.com -liuxuewenshuwang.com -liuxueyun.com -liuxx.com -liuyanbaike.com -liuyang.com -liuyangfcw.com -liuyanzhao.com -liuyifei.cc -liuyingqiang.com -liuzhichao.com -liuzhixiang.com -liuzhoushide.com -liuzk.com -liuzongyang.com -liuzuo.com -liuzy88.com -live-era.com -live800.com -liveapp.ink -livechina.com -livecourse.com -liveinau.com -liveincy.com -liveme.com -livemediav.com -livemook.com -lives.one -livesone.net -livesupport24x7.com -liveuc.net -liveupdate01.asus.com -livevideostack.com -livinglabs.cc -livku.com -livotre.com -liwai.com -liwei.red -liweijia.com -liweiliang.com -liwenxin.com -liwenzhou.com -liwinon.com -liwngad.com -liwuhy.com -liwumaoapp.com -liwushuo.com -lixcx.com -lixiang.com -lixiangshu.net -lixianhezi.com -lixianhua.com -lixiaocrm.com -lixiaolai.com -lixiaomeng.net -lixiaoskb.com -lixiaoyun.com -lixiaozhe.com -lixin.co -lixinapp.com -lixingguang.com -lixiphp.com -lixuan360.com -liyangbit.com -liyangliang.me -liyangtuopan.com -liyangweb.com -liyanmobi.com -liyaochao.com -liyingfei.com -liyongseo.com -liyu8.com -liyuanheng.com -liyuanhospital.com -liyue.name -liyujn.com -lizaike.com -lizhaoblog.com -lizhaoxiang.com -lizhehaozhongyi.com -lizhenwang.com -lizhi.com -lizhi.fm -lizhi.io -lizhi001.com -lizhi110.com -lizhi77.com -lizhidaren.com -lizhifilm.com -lizhifm.com -lizhijitang.com -lizhiqiang.name -lizhiweike.com -lizhixia.com -lizhongyi.com -lizi.com -lizi.tw -liziqiche.com -lj-bank.com -lj168.com -ljbao.net -ljcdn.com -ljcoop.com -ljemail.org -ljhis.com -ljhks.com -ljhks.net -ljia.com -ljia.net -ljimg.com -ljjgdj.org -ljjhfc.com -ljlcd.com -ljmeng.site -ljsdk.com -ljt365.com -ljtx.com -ljwit.com -ljxww.com -ljzfin.com -lkcgyl.com -lkcoffee.com -lkcsgo.com -lkgame.com -lkgshq.com -lkjl.com -lkjujm.com -lkkcdn.com -lkker.com -lkkued.com -lkmcdk.com -lkme.cc -lkong.net -lkxianglong.net -lkyou.com -ll-hao123.com -ll11.com -llbetter.com -llcat.tech -llever.com -llewan.com -llgjx.com -llgkm.com -llgo.work -llidc.com -lljgame.com -lljgxx.com -llku.com -llqdh.com -lls.moe -llsapp.com -llscdn.com -llsops.com -llss.us -llsserver.com -llssite.com -llsstaging.com -lltaohuaxiang.com -lltllt.com -lltoken.com -llwin.com -llwt.ink -llycloud.com -llzg.com -llzw888.com -lm213.com -lm284.com -lm335.com -lm343.com -lm685.com -lm811.com -lm832.com -lm865.com -lm995.com -lm9999.com -lmacc.com -lmanmo.com -lmbang.com -lmbest.com -lmbld.com -lmbus.com -lmdk01.com -lmdouble.com -lmf9.com -lmgouwu.com -lmjtgs.com -lmjx.net -lmlc.com -lmlym.com -lmm8.com -lmsail.com -lmth2013.com -lmtw.com -lmtxz1.com -lmview.com -lmwgame.com -lmwlhh.com -lmwljz.com -lmxxxz.com -lmyd5.com -lmyjsq.com -lnamphp.com -lncldapi.com -lncnw.com -lndao.com -lndhdx.com -lndzxy.com -lnemci.com -lnest.com -lnfw.net -lnfzb.com -lngqt.com -lngwyw.com -lnicc-dl.com -lnicp.com -lninfo.com -lnitec.com -lnjzxy.com -lnk0.com -lnkdata.com -lnlotto.com -lnmp.org -lnok.net -lnpjw.com -lnrcu.com -lnrsks.com -lnslymy.com -lntenghui.com -lntvu.com -lntycp.com -lnvsystem.com -lnyhrlzy.com -lnyyzyxy.com -lnzikao.com -lnzsks.com -lo97.com -locatran.com -locez.com -lockfans.com -lockscreenimg.com -lockty.com -locnavi.com -locojoy.com -locoso.com -locoy.com -locoyposter.com -locren.com -loctek.com -locvps.com -lodashjs.com -loesspie.com -loexu.com -lofficielchina.net -loftcn.com -lofter.com -loftshine.com -log4d.com -log4geek.cc -logacg.com -logclub.com -logdu.com -loghao.com -logi-inno.com -logicdsp.com -login.cdnetworks.com -logo-emblem.com -logo123.net -logo33.com -logo520.com -logo888.com -logoaa.com -logobiaozhi.com -logodao.com -logodashi.com -logohhh.com -logoly.pro -logonc.com -logopay.com -logoquan.com -logoshe.com -logosheji.com -logosj.com -logowu.com -logozhan.com -logozhizuowang.com -logphp.com -logwing.com -lohaa.com -lohalink.com -lohaslady.com -loho88.com -loj.ac -loji.com -lokyi.name -lol123.net -lol99.com -loldan.com -loldk.com -loldytt.com -loldytt.org -loldytt.tv -lolgo.net -lolhd.com -loli.cd -loli.ee -loli.my -lolico.moe -loliloli.moe -loliloli.net -lolip.net -lolitaf.com -lolitawardrobe.com -loliyun.vip -loljy.com -lolkeng.com -lolmanhua.com -lolmax.com -lolmf.com -lolmz.com -loltmall.com -lolyculture.net -lomoment.com -lomu.me -lon3d.com -loncent.com -loncin.com -loncinindustries.com -london9999.com -londonermacao.com -lonelystar.org -lonery.com -lonfu.org -long-tv.com -long5.com -long7.com -longaa.com -longanlaw.com -longau.com -longcai.com -longcheer.com -longchen80.com -longchengtg.com -longcity.net -longclouds.com -longcore.com -longdai.com -longdear.com -longdezhu.com -longdian.com -longdoer.com -longfor.com -longfu360.com -longger.net -longguanjia.so -longhoo.net -longhu.net -longhua.net -longhuiren.com -longhuvip.com -longigroup.com -longjcun.com -longjiazuo.com -longk.com -longmaosoft.com -longmaotianxia.com -longmarchspace.com -longmeng.com -longmenmingche.com -longmiao.wang -longmotto.com -longmushengwu.com -longqikeji.com -longquan-baojian.com -longquecdn.com -longre.com -longren.com -longruo.com -longsan.com -longseek.com -longshangrc.com -longsheng.com -longsheng.org -longsheng988.com -longshine.com -longsok.com -longsto.com -longsunhenges.com -longsys.com -longtaifoods.com -longtaitouxiaoshuo.com -longtaiwj.com -longtanshuw.net -longtask.com -longtengwang.com -longtugame.com -longtuohy.com -longu.com -longwang.cc -longwenedu.com -longwiki.org -longwin.org -longwindspg.com -longwisepr.com -longxi-tech.net -longxianwen.net -longxuan.ren -longygo.com -longyin.net -longyu.cc -longyucq.com -longyuedu.com -longyusheng.org -longzhongtv.com -longzhu.com -longzhu.tv -longzhulive.com -longzu.com -lonlife.org -lontiumsemi.com -loocall.com -loodd.com -looeen.com -looeo.com -looeoo.com -loogfa.com -loohuo.com -look8.com -lookao.com -lookbaby.com -lookbc.com -lookbravo.com -lookchem.com -lookcss.com -lookdiv.com -lookgame.com -looking-car.com -lookr.cc -looktm.com -looktmt.com -lookvin.com -loome.net -loonapp.com -loongnix.com -loongnix.org -loongshine.com -loongsin.com -loongson.org -loongsonclub.com -looooker.com -loopjump.com -looquan.com -loorain.com -loosun.com -looyu.com -looyuoms.com -looyush.com -lopetech.net -lophoctienganh.org -lopkino.com -lopopoo.com -lorefree.com -losala.com -losking.com -lossyou.com -lostali.com -lostphp.com -lostsakura.com -lotevision.com -lotlab.org -lotour.com -lotour.net -lotpc.com -lotpen.com -lotsmv.com -lotusair.net -lotusdata.com -lotuseed.com -lotut.com -loubobooo.com -louding.com -louishan.com -louislivi.com -louisvv.com -loukee.com -loukky.com -loulansheji.com -loulanwang.com -loupan.com -louqun.com -loushi12.com -lousj.com -lousw.com -louyue.com -love.tv -love1992.com -love21cn.com -love3721.com -love616.com -love778.com -love85g.com -lovean.com -loveapp.com -lovebizhi.com -lovecia.com -loveforvenus.com -lovehaimi.com -lovehhy.net -lovehifi.com -loveineurope.com -loveinhere.com -lovejavascript.com -lovejia.win -lovelacelee.com -loveliao.com -lovelive.tools -lovelixiang.com -lovemojito.com -loveniwed.com -lovenovelapp.com -loveota.com -lovepd.com -loveqindy.com -loverili.com -lovesec.com -lovesoo.org -lovestu.com -loveteemo.com -loveuav.com -loveunix.net -lovev.com -lovewith.me -lovewj.info -lovewusun.com -loveyisheng.com -lovezhangjunning.com -lovezhuoyou.com -lovfp.com -lovgiin.com -lovology.com -lovstone.com -lowpew.com -lowsfish.com -lowucity.com -loxpo.com -loxue.com -loyaltychina.com -loyar.com -loyo.cc -lpcheng.com -lpllol.com -lply.net -lppz.com -lprcx.com -lpswz.com -lptiyu.com -lpwnice.com -lpxin.com -lpxinjuhui.com -lpxt.com -lq-bm.com -lq328.com -lq5u.com -lqabr.com -lqalm.com -lqbj.com -lqbj66.com -lqbld.com -lqbyj.com -lqgc.net -lqgcb.com -lqgrdj.com -lqhigo.com -lqhualang.com -lqjob88.com -lqpsj.com -lqqm.com -lqrcb.com -lqxshop.com -lqyaopin.com -lqzh.me -lqztbzx.com -lqzwdj.com -lr-amm.com -lr-link.com -lrc99.com -lrcb.net -lrcgc.com -lrcku.com -lrdzt.com -lread.net -lrenwang.com -lrhold.net -lrist.com -lrkdzx.com -lrs001.com -lrscloud2.com -lrscloud3.com -lrswl.com -lrts.me -lrwoman.com -ls-17.com -ls-gb.com -ls-marathon.com -ls0513.com -ls1018.com -ls12.me -ls666.com -lsbankchina.com -lsbchina.com -lsbin.com -lsccb.com -lsfyw.net -lsg3.com -lsgrandtheatre.com -lsgsgs.com -lsgw.com -lsgzn.com -lshou.com -lshv8.com -lsij3km.com -lsj.ac -lsjacg.com -lsjczj.com -lsjgcx.com -lsjlp8.com -lsjrcdn.com -lsjsm.com -lsjtfinance.com -lsjvps.com -lsjxck.com -lsjyy3800.com -lskejisoft.com -lskyf.com -lslkkyj.com -lsnetlib.com -lsoos.com -lspjy.com -lsq6.com -lsqifu.com -lssen.com -lssggzy.com -lstazl.com -lstest.com -lsttapp.com -lsttnews.com -lsun.net -lsuoled.com -lsup.net -lsw315.com -lswld.com -lswlsw.com -lsxz.org -lsywtc.com -lszj.com -lszjyj.com -lszp.cc -lt-tree.com -lt-uv.com -lt3c.com -ltaaa.com -ltaaa.net -ltd.com -ltesting.net -ltfwzs.com -lthack.com -ltimg.net -ltkdj.com -ltlovezh.com -ltmei.com -ltmp.cc -ltnic.com -ltp-cloud.com -ltp.ai -ltplayer.com -ltsf.com -ltswxy.com -lttconn.com -ltteach.com -lttvip.com -ltwkw.com -ltxjob.com -lty.fun -ltzsjt.com -lu.com -lu35.com -lu4n.com -lua.ren -luaninfo.com -luanren.com -luastudio.net -lubandata.com -lubanjianye.com -lubanpm.com -lubanshop.com -lubanso.com -lubansoft.com -lubanu.com -lubanway.com -lubiao.com -lubotv.com -luchinfo2.com -luciaz.me -luck4ever.net -luckeeinc.com -luckfriend.com -luckincoffee.co -luckincoffee.com -luckincoffeecdn.com -lucklnk.com -luckyair.net -luckycoding.com -luckycoffee.com -luckyjia.com -luckyxp.net -lucode.net -lucoder.com -lucy365.com -lucydraw.com -ludake.com -ludashi.com -ludeqi.com -ludiban.com -ludou.org -luduzww.com -luedian.com -luexiao.com -luexpo.com -luezhi.com -lufangjia.com -lufax.com -lufaxcdn.com -luffycity.com -luftweb.com -lufuli.com -lufunds.com -lugir.com -lugutown521.com -luhao198.com -luhehospital.com -luhongfu.com -luics.com -lujiang56.com -lujianxin.com -lujingtao.com -lujq.me -lujun9972.win -lukachen.com -lukaplayer.com -lukeer.com -lukiya.com -lukou.com -lukuanart.com -lul8.com -lulala.com -lulaohan.com -lulu77.com -lulufind.com -lum114.com -lumai.net -lumajia.com -lumanman1688.com -lumi258.com -lumiaxu.com -lumit.org -lumiunited.com -lumyhouse.com -lunar2013.com -lunchong.com -lunkuokeji.com -lunlishi.com -lunwenchachong.org -lunwendj.com -lunwenschool.com -lunwenstudy.com -lunwentianxia.com -lunwentong.com -lunwenxiazai.com -lunxia.com -lunzima.net -luo8.com -luobo020.com -luobo360.com -luobocai.com -luobojianzhan.com -luobotou.org -luobowin10.com -luobowin8.com -luoboxia.com -luochen.com -luocheng.org -luochenyl.com -luochenzhimu.com -luochunhui.com -luodaoyi.com -luodian.com -luodiying.net -luodw.cc -luody.info -luofan.net -luogu.org -luohanyu.cc -luohuedu.net -luointo.com -luojiji.com -luojilab.com -luojituili.com -luokuang.com -luolai.com -luolai.tech -luolei.org -luomapan.com -luomi.com -luoohu.com -luooqi.com -luoqiu.com -luoqiuxs.com -luoqiuzw.com -luoqiuzww.com -luosi.com -luosimao.com -luotiannews.com -luotianyi.org -luowave.com -luoxiang.com -luoxudong.com -luoxue.com -luoyechenfei.com -luoying66.com -luoyuanhang.com -luozhongxu.com -luozongle.com -lup2p.com -lupaworld.com -lupeng88.com -luqidong.com -lure123.com -lurefans.com -lurelogs.com -lurenshuwx.com -lusen.com -lushaojun.com -lushu.com -lusongsong.com -lussac.net -luster3ds.com -lustervision.com -lutao.com -luv66.com -luways.com -luwei.me -luweitech.com -lux88.com -luxe.co -luxee.com -luxemon.com -luxianpo.com -luxiao.com -luxiwang.com -luxiyun.com -luxst.com -luxtarget.com -luxuqing.com -luxury-theme.com -luyady.com -luyanghui.com -luyewooden.com -luyinla.com -luyouqi.biz -luyouqi.com -luyouxia.com -luyuanqj.com -luzexi.com -lv74.com -lv96.com -lvanol.com -lvbaishun.com -lvbuo.com -lvchanghuanbao.com -lvchayun.com -lvchazhiboapp.com -lvchehui.com -lvcheng.com -lvchicar.com -lvcrown.com -lvdoutang.com -lvfang.cc -lvfl.net -lvgaud.ga -lvgou.com -lvguang.net -lvhezi.com -lvhuadai.com -lvjinsuo.com -lvkun.site -lvlian5.com -lvluowang.com -lvlvlvyou.com -lvmae.com -lvmama.com -lvmama.ink -lvmotou.com -lvnanbao.com -lvpai114.com -lvping.com -lvren.com -lvruan.com -lvrui.io -lvsanxia.com -lvse.com -lvsetxt.com -lvshedesign.com -lvshi567.com -lvshicixi.com -lvshiminglu.com -lvshou.com -lvshouwe.com -lvshunfang.com -lvshunmuseum.org -lvsongguo.com -lvtao.net -lvtu-vision.com -lvtu.com -lvtu8.com -lvtudiandian.com -lvwan365.com -lvwang.com -lvwenhan.com -lvwo.com -lvxing.net -lvya.com -lvye.com -lvye.org -lvyestudy.com -lvyetong.com -lvyidoor.com -lvyou114.com -lvyou5.net -lvyou521.com -lvyoubaotech.com -lvyoubei.com -lvyougl.com -lvyouw.net -lvyuanpam.com -lvyuetravel.com -lvzheng.com -lw0591.com -lw208.com -lw23.com -lw54.com -lwcj.com -lwd3699.com -lwdjc.com -lweasy.com -lwedu.com -lwen.org -lwfengji.net -lwfjmj.com -lwgsw.com -lwhouse.com -lwinl.com -lwinst.com -lwkz.cc -lwlm.com -lwons.com -lwork.com -lwqwq.com -lwrcb.com -lwsay.com -lwswxs.com -lwtxt.cc -lwurl.to -lwxgds.com -lwxiaoshuo.com -lwxs.org -lwxs9.com -lwxs99.com -lwxstxt.com -lx-led.com -lx.cok.elexapp.com -lx.pub -lx138.com -lx167.com -lx3.cok.elexapp.com -lx598.com -lxbbt.com -lxckj.com -lxcvc.com -lxdms.com -lxdns.com -lxdns.info -lxdns.net -lxdns.org -lxf.me -lxi.me -lxin007.com -lxjep.com -lxjk999.com -lxlggo.com -lxly168.com -lxmiyu.com -lxplass.com -lxs123.com -lxsales.com -lxsjm.com -lxw1234.com -lxway.com -lxway.net -lxws.net -lxxh.cc -lxxh1.com -lxxm.com -lxy.me -lxybaike.com -lxyes.com -lxyl539.com -ly-sky.com -ly.com -ly200-cdn.com -ly200.com -ly39zx.com -ly522.com -ly6080.com -lyancafe.com -lyancoffee.com -lyangchuanbo.com -lyaudio.com -lyblog.net -lybol.com -lybus.com -lycgs.com -lycheer.net -lychevy.com -lycndq.com -lyd6688.com -lydct.com -lydezx.net -lydhb888.com -lydsy.com -lyecs.com -lyfff.com -lyg.live -lyg001.com -lyg01.net -lyg321.com -lyg800.com -lygdfrcb.com -lygfdc.com -lyghi.com -lygmedia.com -lygnews.com -lygou.cc -lygrffw.com -lygsyyijia.com -lygzamzam.com -lyhanda.com -lyhero.com -lyhuadu.com -lyjiayi.com -lyjxwl.com -lylddz2021.com -lylryy.com -lymil.com -lymlgj.com -lynkco.com -lynlzqy.com -lynr.com -lyobs.com -lypd.com -lypdl.com -lyps.net -lypyxx.com -lyqugee.com -lyragosa.com -lyrc.cc -lyric-robot.com -lyricsv.app -lyshgk.com -lysk.net -lysqdx.com -lysqzs.com -lysteel.com -lythw.com -lytning.xyz -lytoufang.com -lytpw.com -lyun.me -lyunweb.com -lyvnee.com -lywenlv.com -lywf.me -lywww.com -lywxww.com -lyxyxx.com -lyy99.com -lyyapp.com -lyyourc.com -lyyrsy.com -lyyzfx.net -lyz810.com -lyzfgjj.com -lyzhujia.com -lyzp100.com -lz160.net -lz310.com -lz520.net -lzabcd.com -lzafny.com -lzane.com -lzbank.com -lzc369.com -lzcbnews.com -lzccb.com -lzcqt.com -lzdxeuck.com -lzeweb.com -lzfcjys.com -lzfjq.com -lzgxq.com -lzhongdian.com -lzhpo.com -lzhygame.com -lzjdbjc.com -lzjoy.com -lzlbdm.com -lzlj.com -lzmoyin.com -lzmy123.com -lzqsyxx.com -lzsmedia.com -lzsq.net -lztv.tv -lztvnet.com -lztx123.com -lzvw.com -lzw.me -lzwifi.com -lzxdly.com -lzxgo.com -lzyun.vip -lzzyad.com -lzzzf.com -m-finder.com -m-rainbow.com -m.biz -m.dji.com -m.sohu -m.travelzoo.com -m0.hk -m0816.com -m096.com -m1315.com -m176.net -m18.com -m1905.com -m1910.com -m1938.com -m1ok.com -m1page.com -m1world.com -m2ez.com -m2mzy.com -m3guo.com -m3u8.tv -m448.com -m4yy.com -m598.com -m5bn.com -m5stack.com -m6.ai -m6go.com -m78.co -m818.com -m8cool.com -m90cc.com -m937.com -ma-china.com -ma16.com -ma3office.com -mabangerp.com -mabibook.com -mabiji.com -mabotech.com -mac189.com -mac69.com -macabc.com -macaihong.net -macapp.so -macapp8.com -macappbox.com -macappx.com -macauinternationalclubbingshow.com -macaumonthly.net -maccura.com -macdaxue.com -macflow.net -mach4s.com -machaojin.com -machenike.com -machine-information.com -machine-visions.com -machine35.com -machine365.com -machunjie.com -macidea.com -macjb.com -mackentan.com -mackext.com -macno1.com -macocn.com -macosgame.com -macoshome.com -macpeers.com -macrocheng.com -macrosan.com -macrosilicon.com -macrounion.com -macrowing.com -macrr.com -macsc.com -macshuo.com -macsky.net -macsofter.com -macv.com -macw.com -macwk.com -macxf.com -macxin.com -macz.com -maczd.com -maczhi.com -maczj.com -madaicaifu.com -madailicai.com -made-in-china.com -madefuns.com -madeqr.com -madio.net -madisonboom.com -madku.com -madmalls.com -madouer.com -madouka.com -madown.com -madserving.com -maemo.cc -mafangwo.com -mafenggo.com -mafengs.com -mafengvwo.com -mafengwo.com -mafengwo.ink -mafengwo.net -mafenword.com -maff.com -mafutian.net -mag10000.com -mag998.com -magcloud.net -magecorn.com -magedu.com -magentochina.org -magewell.com -magi.com -magicboxgame.com -magicdata.io -magicleaders.com -magicnetmall.com -magicwatchface.com -magicwinmail.com -magicyourlife101.com -magook.com -magsci.org -maguang.net -magvision.com -mahetao.org -mahoupao.com -mahoupao.net -mahua.com -mahuadns.com -mahuarili.com -mahuatalk.com -mai.com -maianhao.com -maibasa.com -maibw.net -maicdn.com -maicha365.com -maichawang.com -maiche.com -maiche168.com -maichuang.net -maicuole.com -maidangao.com -maidengju.net -maidi.me -maidige.com -maidixun.com -maidoc.com -maidou.com -maiduo.com -maienguoji.com -maifjb.com -maigevoice.com -maigoo.com -maigv.com -maihanji.com -maihaoche.com -maihehd.com -maihenghb.com -maijia.com -maijiaba.com -maijiabashi.com -maijiakan.com -maijichuang.net -maijx.com -maikenu.com -mail-qq.com -mail163.com -maila88.com -mailbusinfo.com -mailehudong.com -mailejifen.com -mailpanda.com -mailshanguo.com -maimaimaiw.com -maimemo.com -maimemostatus.com -maimengjun.com -maimiaotech.com -maimn.com -maimowang.com -maimuban.com -mainaer.com -maine1688.com -mainone.com -maintao.com -mainvyou.com -mainwww.com -maipu.com -maiquan.me -mairoot.com -mairuan.com -mairuier.com -maiscrm.com -maishashop.com -maishebei.com -maishitv.com -maishou88.com -maishoudang.com -maishoumm.com -maisifenqi.com -maisorn.com -maisry.net -maisu.vip -maisucai.com -maitao.com -maitaods.com -maitaowang.com -maitianqinzi.com -maitianquan.com -maitix.com -maitix.net -maitoufa.org -maitu.cc -maituan.com -maitube.com -maiwe.com -maiweikj.com -maixhub.com -maixiaba.com -maixj.net -maixuewen.com -maixunlei.com -maiya91.com -maiyaole.com -maiymai.com -maizhi.com -maiziedu.com -maizijf.com -maizim.com -maizipo.com -maizitime.com -maizuo.com -majia99.com -majiamen.com -majianwei.com -majing.io -majorsec.com -majorserving.com -majsoul.com -maka.im -maka.mobi -makaevent.com -makaidong.com -makaiqian.com -make8.com -makeapp.co -makecn.net -makedie.me -makeding.com -makefang.com -makefont.com -makejinrong.com -makelove.la -makepic.net -makepolo.com -makepolo.net -maker8.com -makerbio.com -makerfun.org -maketion.com -makeweiyuan.com -makezixun.com -makingvfx.com -makuwang.com -malabeibei.com -malagis.com -malait.com -maldiveszh.com -maldun.com -males120.com -maliapi.com -maliquankai.com -mall-builder.com -mall.com -mallchina.net -mallcoo.net -mallhaha.com -mallocfree.com -mallshow.net -mallstaroa.com -mallzhe.com -mallzto.com -malmam.com -malong.com -maltm.com -malu.me -mama100.com -mamacn.com -mamahao.com -mamahuo.com -mamcharge.com -mamecn.com -mamicode.com -mamilist.com -mamioo.com -mamipush.com -mamsh.org -managershare.com -manben.com -manboker.com -mandao-tech.com -mandaodm.com -mandarincapital.net -mandarinedu.org -mandarinhouse.com -mandian.com -mandudu.com -manduhu.com -manduwu.com -manew.com -manewvr.com -manfen.net -manfen5.com -mangadig.com -mangafuna.xyz -mangafunc.fun -mangake.com -mangege.com -mangg.com -mangg.net -mangguo.com -mangguo.org -mangguo168.com -mangocity.com -mangoebike.com -mangogame.com -mangrovetreesanya.com -mangtuhuyu.com -manguo42.com -mangxia.com -mangxuewang.com -mangzitian.com -manhua1.com -manhua123.net -manhua365.com -manhua456.com -manhuaba.cc -manhuabei.com -manhuacheng.com -manhuadao.com -manhuadaohang.com -manhuadb.com -manhuafen.com -manhualang.com -manhuama.net -manhuang.org -manhuaniu.com -manhuapi.com -manhuaren.com -manhuatai.com -manhuayang.com -manibnb.com -maninmusic.com -manjiwang.com -manlinggame.com -manlongye.com -manluoni.com -manluotuo.com -manmanapp.com -manmanbuy.com -manmango.com -manmankan.com -manmu.net -mannkit.com -manogk.com -manong.io -manongdao.com -manonggu.com -manongjc.com -manongs.com -manongzj.com -manosp.com -manpianyi.com -manrong.win -manshitea.com -mantouji.net -mantusy.com -manwuxian123.com -manxiu-law.com -many88.com -manyanu.com -manyjs.com -manylaw.com -manyoo.net -manyou.com -manyoujing.net -manzhan.com -manzhan8.com -manzj.net -manzuo.com -mao-shen.com -mao.bz -mao.li -mao999.com -maobotv.com -maobugames.com -maodou.com -maodouapp.com -maoerduo2018.com -maoflag.net -maofly.com -maogx.win -maoha.com -maohaha.com -maohuashiye.com -maoken.com -maokz.com -maoln.com -maomaoche.com -maomaojie.com -maomaow.com -maomaoxue.com -maopuyouxi.com -maoqitian.com -maoqiuapp.com -maoshimei.com -maotaizuichen.com -maotuying.com -maowow.com -maoxiaotong.net -maoxinhang.com -maoxun.net -maoyan.com -maoyi.biz -maoyia.com -maoyidi.com -maoyiw.com -maoyiwang.com -maoyouhui.cc -maoyuncloud.com -maoyundns.com -maozhuar.com -maozhuashow.com -mapabc.com -mapbar.com -mapeng.net -mapgis.com -mapgun.com -mapks.com -maple-game.com -maplebeats.com -maplef.net -mappn.com -maqingxi.com -maqinnews.com -marakaro.com -mararun.com -marcores.com -marioall.com -marioin.com -markdown.xyz -markdream.com -marketiva-platform.com -marketreportchina.com -markhoo.com -markjour.com -markmall.com -markmiao.com -marknum.com -markonreview.com -markorchem.com -marksmile.com -maro6.com -maroon91.com -marry5.com -marry80.com -marsfancy.com -marstor.com -marstv.com -martech365.com -martincl2.me -marveldental.net -maryek.net -mas-omkj.com -mas10010.com -mas300275.com -masadora.jp -masadora.net -masamaso.com -mascaw.com -masdiy.com -masdjy.com -masej.com -mashangmai.com -mashangshijie.com -mass-evo.com -massclouds.com -masscrunch.com -mastergo.com -masterlab.vip -mastersay.com -mastersim123.com -mastertimes.net -mastodonhub.com -mastudio.org -masyi.com -mat-test.com -matao.com -matchday.cc -matchvs.com -math168.com -mathchina.net -mathfan.com -mathoe.com -mathpretty.com -mati.hk -maticsoft.com -matlabsky.com -matocloud.com -matongwu.com -matongxue.com -matools.com -matouwang.com -matpool.com -matt33.com -mattge.com -mattressmachinery.net -mauu.me -mavuz.com -mawei.live -mawen.co -mawentao.com -max-c.com -max232.net -maxent-inc.com -maxgj.net -maxhub.com -maxhub.vip -maxiang.info -maxiang.io -maxitas.com -maxjia.com -maxket.com -maxlicheng.com -maxok.com -maxpda.com -maxreader.net -maxscend.com -maxstv.com -maxthon.com -maxthonimg.com -maxuscloud.com -maxvinch.com -maxwealthfund.com -maxwi.com -maxxipoint.com -may.ltd -maya-r.com -maya09.com -mayahuashi.com -mayatu.com -maybe2016.com -maybeiwill.me -maycur.com -maydayfans.com -maydeal.com -mayi.com -mayiangel.com -mayicms.com -mayidui.net -mayihot.com -mayihr.com -mayijieqian.com -mayima.net -mayinews.com -mayishebao.com -mayishoubei.com -mayitek.com -mayitxt.com -mayiw.com -mayiwenku.com -mayiyx.com -mayizhuanlan.com -mayou18.com -maysunmedia.com -mayswind.net -mayun1.com -maywant.com -maywonenergy.com -mazakii.com -mazey.net -mazhan.com -mazida.com -maziyou.com -mb-go.com -mb5u.com -mbabao.com -mbabycare.com -mbachina.com -mbajyz.com -mbalib.com -mbalunwen.net -mbanggo.com -mbaobao.com -mbaoxian.net -mbazl.com -mbb0760.com -mbcjapan.net -mbcloud.com -mbgo.com -mbinary.xyz -mbokee.com -mboxone.com -mbsky.com -mbtsg.com -mbxt.net -mc-ccpit.com -mc-test.com -mc-xborder.com -mc.fyi -mc123.cc -mc26.com -mc361.com -mc91.com -mcake.com -mcarding.com -mcbbs.net -mcbrother.com -mccaee.com -mcchcdn.com -mcchina.com -mcchou.com -mccuu.com -mcdchina.net -mcdsusan.com -mcdusiv.com -mcdvisa.com -mcearnmore.com -mcfun.tv -mcfuzhu.net -mch5k.com -mchat.com -mchifi.com -mcjcjx.com -mcjd.net -mcmssc.com -mcnqipdujs.com -mcooks.com -mcool.com -mcpemaster.com -mcpmaid.com -mcqyy.com -mcsafebox.com -mcshiyan.com -mcsjtz.com -mct01.com -mcu-home.com -mcufan.com -mcuisp.com -mcujl.com -mcusky.com -mcuzone.com -mcuzx.net -mcwshop.com -mcx666.com -mcyhfl.com -mcyo.pw -mczyz.com -mdaxue.com -mdbig.com -mdbimg.com -mdckj.com -mdcui.com -mdddy.com -mdeasydiagnosis.com -mdeditor.com -mdeer.com -mdfull.com -mdhjs.com -mdinjn.com -mditie.com -mdj2y.com -mdjhxgjyc.com -mdjyadi.com -mdjyouth.com -mdmmm.com -mdnice.com -mdo52.com -mdouyin.com -mdpda.com -mdsyzx.com -mdtu.com -mduckstudio.com -mdvdns.com -mdvoo.com -mdy-edu.com -mdybk.com -me-city.com -me361.com -me4399.com -me97.com -meadin.com -meaninggame.com -meazhi.com -meb.com -meban.cc -mec027.com -mechatim.com -mechr.com -mechrevo.com -meckodo.com -mecoxlane.com -med-water.com -med126.com -med66.com -meda.cc -medai360.com -medeming.com -mediafq.com -mediatek.com -mediav.com -mediawords.org -mediaxinan.com -mediecogroup.com -medimg.org -meditic.com -meditrusthealth.com -mediumin.net -medky.net -medlinker.com -medlinker.net -medme.net -medmeeting.org -medsci-tech.com -medstarcorp.com -medtion.com -meechao.com -meefon.com -meegoe.com -meeket.com -meet99.com -meetfave.com -meethall.com -meetlawyer.com -meetsite.com -meetwhale.com -meetzoom.net -meeuapp.net -mefeng.net -megaemoji.com -megajoy.com -megoal.org -megobike.com -megomap.com -megou8.com -meguo.com -megvii.com -mei.com -mei1.info -meia.me -meianjuwang.com -meiaoju.com -meibai14.com -meibaninc.com -meibanlu.com -meibaolicarpet.com -meibg.com -meibo.tv -meican.com -meicanstatic.com -meichibao.com -meichuanmei.com -meichubang.com -meidaojia.com -meidebi.com -meideng.net -meierbei.com -meifajie.com -meifang8.com -meifazu.com -meifengyigou.com -meigeinc.com -meigong8.com -meigongla.com -meigongyun.com -meiguanjia.net -meiguiwxw.com -meiguo-qianzheng.com -meiguoxiaoxue.com -meiguozhuji.com -meigushe.com -meih5.com -meih5.net -meihaotoutiao.com -meihaoxiangwang.com -meihaoxueyuan.com -meiheups.com -meihom.com -meihouyun.com -meihu99.com -meihua.info -meihuainfo.com -meihuappt.com -meihuboyue.com -meihudong.com -meihutong.com -meijia66.com -meijiacun.com -meijiaedu.com -meijiahuanxin.com -meijialove.com -meijiecao.net -meijiedaka.com -meijiehang.com -meijiehezi.com -meijieu.com -meijiexia.com -meijiezaixian.com -meijiezaixian.net -meijingjie.com -meijiu.com -meiju111.com -meijuba.com -meijucenter.com -meijufans.com -meijuniao.com -meijuniao.net -meijuq.com -meijutt.com -meijutt.tv -meijuxia.com -meijuxia.vip -meijuxq.com -meijuzhan.com -meijuzj.com -meikankeji.com -meike-shoes.com -meike15.com -meikeda.net -meiku123.com -meilanfangdajuyuan.org -meilecui.com -meili-inc.com -meilibaobao.com -meilijia.com -meiling.com -meiling360.com -meiliqueen.com -meilishuo.com -meilishuo.net -meilisite.com -meiliwan.com -meiliworks.com -meiliwu.com -meilunmeijia.com -meilvtong.com -meimeidu.com -meimeio.com -meimi.cc -meimingteng.com -meingrace.com -meinv.com -meip0.me -meip4.me -meipai.com -meipian.me -meipian2.com -meipuapp.com -meiqia.com -meiqiantu.com -meiqiausercontent.com -meiqinedu.com -meiqiu.me -meiquankejib.com -meiquankejih.com -meirenshang.com -meiridazhe.com -meirids.com -meirishangxin.com -meirishentie.com -meiritv.net -meiriyiwen.com -meirong.net -meirongshanghai.com -meisaitu.com -meisfuture.com -meishai.com -meishanren.com -meishe-app.com -meisheapp.com -meishesdk.com -meishi.cc -meishi13.com -meishichina.com -meishij.net -meishijr.com -meishilife.com -meishiqin.com -meishiwangluo.com -meishow.com -meishubao.com -meishui.com -meishuquan.net -meisubq.com -meisupic.com -meitaixianlan.com -meitangdehulu.com -meitegou.com -meitianhui.com -meitibijia.com -meitironghe.org -meitu.com -meitu.store -meituan.com -meituan.net -meituba.com -meitubase.com -meitudata.com -meitumobile.com -meitun.com -meituncdn.com -meitushop.com -meitustat.com -meituyun.com -meituyunji.com -meiwai.net -meiweis.com -meiweishudan.com -meiwenfen.com -meiwenting.com -meixie.com -meixincdn.com -meixiong5.com -meixueyuan.com -meiyaapp.com -meiyan.com -meiyedana.com -meiyen.com -meiyi.ai -meiyinji.vip -meiyixia.com -meiyixinrui.com -meiyou.com -meiyue.com -meiyuxiuxiu.com -meizhanggui.cc -meizhejie.com -meizhou.com -meizhou.net -meizitu.net -meizu.com -meizu.com.hk -meizu.net -mejoybaby.com -meke-shanghai.com -meke8.com -meldingcloud.com -melodyhome.com -melon.cdnetworks.com -melote.com -melove.net -memacx.com -memagames.com -memewan.com -memeyule.com -memorieslab.com -memorycarddeal.com -memoryhere.com -mems.me -memsconsulting.com -memseminar.com -memsensor.com -memuu.com -men.ci -menchuang.biz -meng2u.com -meng3.com -meng800.com -mengat.com -mengchenghui.com -mengdian.com -mengdie.com -mengdodo.com -menggang.com -menghunli.com -mengjiagames.com -mengjianjiemeng.com -mengjiayouxi.com -mengkang.net -menglan.com -menglangroup.com -menglechong.com -menglegame.com -menglei.info -menglong.me -mengma.com -mengma021.com -mengniang.tv -mengniu99.com -mengqiuju.com -mengsang.com -mengshihm.com -mengso.com -mengtian.com -mengtu.cc -mengtuiapp.com -mengwuji.net -mengxi.com -mengxiangeka.com -mengyoo.com -mengyou.org -mengyuzhe.com -mengzhou.com -mengzhuangxiu.com -mengzhuboke.com -mengzone.com -menhood.wang -menksoft.com -menle.com -menpiao.com -menqiu.com -menubarx.app -menwee.com -menww.com -menwww.com -menxue.com -menyuannews.com -meovse.com -meowcat.org -mepai.me -mepcec.com -meplayplay.com -mequn.com -mercedes-benzarena.com -mergeek.com -merklechina.com -mescroll.com -meshang.net -meshiot.com -mesince.com -mesresearch.com -mesu-cdn.apple.com.akadns.net -mesu-china.apple.com.akadns.net -mesu.apple.com -mesule.com -met.red -met169.com -metacd.com -metajs.info -metal-min.com -metalchina.com -meten.com -meteni.com -metenk12.com -metersbonwe.com -metersbonwe.net -metin520.com -metlifezeng.com -metnews.net -metro-3d.com -metroer.com -metrofastpass.com -metrolife.mobi -metstr.com -mew.fun -mewhoo.com -mexue.com -mexxum.com -meyet.net -mezw.com -mezzp.com -mf-y.com -mf8.biz -mf927.com -mf999.com -mfbgz.com -mfbuluo.com -mfcad.com -mfcad.net -mfcpx.com -mfcteda.com -mfexcel.com -mfisp.com -mfjmedia.com -mfk.com -mfpad.com -mfpjrj.com -mfqqx.com -mfqyw.com -mftianshanam.com -mftvideo.com -mfzdb.com -mfzxcs.com -mg-cdn.com -mg-pen.com -mg21.com -mg3721.com -mg67.com -mgc-games.com -mgd5.com -mgenware.com -mgff.com -mgl9.com -mglip.com -mgogo.com -mgous.com -mgplay.com.tw -mgpyh.com -mgsdk.com -mgslb.com -mgtv.com -mgtvzy2.com -mgw999.com -mgwxw.com -mgwyx.com -mgxzsy.com -mgyapp.com -mgyxw.net -mgyyw.com -mgzf.com -mgzgmyzz.com -mgzhibo.com -mgzxzs.com -mh1234.com -mh160.com -mh456.com -mh51.com -mh868.com -mhacn.com -mhaoma.com -mhbras.com -mhdns.com -mhealth100.com -mhecy.com -mhg001.cc -mhhf.net -mhi-ac.com -mhimg.com -mhpdf.com -mhsf.com -mht.la -mhtclub.com -mhtml5.com -mhv2.net -mhwck.com -mhwmm.com -mhwy2.com -mhxk.com -mhxqiu.com -mhxzhkl.com -mhyun.net -mhz1.com -mhzd.cc -mhzd.net -mi-ae.net -mi-dun.com -mi-fds.net -mi-idc.com -mi-img.com -mi.com -mi1.cc -mi6fx.com -mia.com -mian4.net -mianbao.com -mianbaodianying.com -mianbaoduo.com -mianbaoimg.com -mianbaotou.com -miandanbx.com -mianfeidianhua.net -mianfeiic.com -mianfeiwendang.com -mianhuatang.cc -mianhuatang.la -mianjue.com -mianjuvip.com -mianshi365.com -mianshui365.com -miantiao.me -mianwai.com -mianxiangxue.com -miao-lang.com -miao.su -miaobe.com -miaoche.com -miaodiyun.com -miaofaxian.com -miaogao.net -miaogu.com -miaohealth.net -miaokaiyun.com -miaole1024.com -miaomaicar.com -miaomiaoxue.com -miaomiaoz.com -miaomiaozhe.com -miaomore.com -miaopai.com -miaopin8.com -miaoquantuan.com -miaoshou.com -miaoshou.net -miaoshoucdn.com -miaoshuwu.com -miaoshuzhai.com -miaostreet.com -miaov.com -miaoweijianfei.com -miaowugo.com -miaowutech.com -miaoxiakuan.com -miaoxiazai.com -miaozao.com -miaozhen.com -miaozhun.com -miaxis.net -miazhiyou.com -mibaoge.com -mibaostore.com -mibaoxian.com -mibimibi.com -mibokids.com -mibugs.com -mic-s.com -micai.com -micaiying.com -micblo.com -michael-j.net -michaelapp.com -micheal.wang -michelam.com -michong.com -michplay.com -miclle.com -mico.io -micro-bee.com -micro-servs.com -microad-cn.com -microad-z.com -microbell.com -microbt.com -microcai.org -microcardio.com -microdiag.com -microdreams.com -microfotos.com -microland-design.com -microlensyh.com -microlz.com -micromouse.tech -microrui.net -microvcard.com -microvirt.com -microvoip.com -microwu.com -microyan.com -micstatic.com -micw.com -midaapi.com -midadata.com -midaijihua.com -midainc.com -midasbuy.com -midday.me -midea.com -midea.com.tr -midicn.com -midifan.com -midifan.org -midiyinyue.com -midlele.com -midonline.net -midsummer.cc -miduiedu.com -midukanshu.com -miduoke.net -midureader.com -midway.run -midwayjs.org -miecod.com -miejw.com -miemie.la -miensi.com -mier123.com -miercn.com -mierhuo.com -mieseng.com -mieyisi.com -mifangba.com -mifanli.com -mifanlicdn.com -mifei.com -mifen517.com -mifengv.com -mifengvv.com -mifengxiuchang.com -mifengzhibo.com -mifispark.com -migame.vip -migelab.com -migroom.com -migucloud.com -migufun.com -migutv.com -miguvideo.com -miguyu.com -mihan.cc -mihayo.com -mihayou.com -mihoyo.com -mihtool.com -mihua.net -mihuashi.com -mihuguan.com -mihui365.com -mihuwa.com -miicp.com -miidc.com -miidi.net -miidii.tech -miidol.com -miiee.com -miinaa.com -miit-icdc.org -miitip.org -mij.cc -miji8.com -mijiadns.com -mijiannet.com -mijiayoupin.com -mijishe.com -mijisou.com -mijwed.com -mika123.com -mika18.com -mikannovel.com -mikechen.cc -mikecrm.com -mikemiao111.com -mikesent-awareness-02.com -mikesent.net -mikewootc.com -mikoshu.me -miku.ink -miku4567.com -mikuac.com -mikublog.com -mikucdn.com -mikuclub.fun -milan-bride.com -milanvip.com -mileage.vip -milejia.com -miletu.com -milfuns.com -miliantech.com -miliao.com -milido.vip -milihua.com -milike.com -miliol.com -miliol.org -milipictures.com -miliyo.com -milkjpg.com -milkplayer.com -milliway-ic.com -millll.net -millnovel.com -milnews.com -milo-star.com -miloktv.com -miloli.info -milu.com -milvzn.com -mima.club -mimaru.me -mimgame.com -mimi456.com -mimi518.com -mimidi.com -mimiteng.com -mimixiaoke.com -mimo51.com -mimoe.cc -mimoprint.com -mimouse.net -mimtao.com -mimvp.com -minapp.com -mincache.com -mincdn.com -mincoder.com -mindai.com -mindhave.com -mindmanager.cc -mindmanagerchina.com -mindmapper.cc -mindmeters.com -mindmm.com -mindopu.com -mindpin.com -mindray.com -mindstore.io -minecraftxz.com -mineplugin.org -miner.tools -minerbbs.com -minerfun.com -minerhome.com -minesage.com -minewtech.com -ming80.com -mingbaoxinwen.com -mingbianji.com -mingcalc.com -mingchaoonline.com -mingchaoyouxi.com -mingcloud.net -mingczh.com -mingda.net -mingdanwang.com -mingdao.com -mingdao.net -mingdao8.com -mingdaocloud.com -mingdongman.com -mingin.com -mingjian.com -mingjinglu.com -minglian.com -mingliu8.com -mingliwenhua.com -mingluji.com -mingmen-tech.com -mingpian.biz -mingqingxiaoshuo.com -mingqizhongyi.com -mingren888.com -mingrenteahouse.com -mingrenxiang.com -mingricctv.com -mingritouban.com -mingshiedu.com -mingshijt.com -mingsoft.net -mingtaokeji.com -mingtian.com -mingtian6.com -mingtrip.com -mingxiaodai.com -mingxing.com -mingxingku.com -mingxinglai.com -mingyannet.com -mingyantong.com -mingyaohui.com -mingyaweb.com -mingyi.com -mingyihui.net -mingyuanfund.com -mingyuanyun.com -mingyueqingfengshe.com -mingyuezw.com -mingzhuxiaoshuo.com -mingzihui.com -mingzw.net -minhang.cc -minhangshi.com -minhow.com -mini-audio.com -mini-program.net -mini5cn-1.opera-mini.net -mini5cn.opera-mini.net -miniadx.com -miniaixue.com -miniblink.net -minidaxue.com -minidso.com -minieye.cc -minieye.tech -minigui.com -minigui.org -minihaowan.com -miniluck.com -miningconf.org -mininglamp.com -miniso.com -minisoyo.com -ministudy.com -minitiao.com -minitos.com -miniui.com -miniwangdai.com -minixiazai.com -minniansoft.com -minor-tech.com -minqingguancha.com -minra.com -minrank.com -minretail.com -minshengec.com -mintaibank.com -mintaylor.com -mintmuse.com -mints-id.com -minunix.com -minxindai.com -minxing365.com -minxue.net -minzu56.net -miot-spec.org -mipacc.com -mipang.com -mipangwang.com -mipay.com -mipcdn.com -mipengine.org -miplus.cloud -mipujia.com -miquapp.com -mir2world.com -mir4399.com -miraclevision.net -mirari.cc -mirgaga.net -mirxat.com -misaka.center -misall.com -miscd.com -misclogic.com -mishangkeji.com -misiiyoo.com -miskcoo.com -mispos.cc -missevan.com -missfresh.net -missku.com -missquq.com -misstar.com -missyuan.net -misuland.com -mitang.com -mitangbao.com -mitaozhibo.org -mite5.com -miteno.com -miteo.net -mitilove.com -mitiplus.com -mittrchina.com -miui.com -miutour.com -miutrip.com -miwifi.com -mix.moe -mixbao.com -mixcapp.com -mixdo.net -mixgslb.com -mixian88.com -miximixi.net -mixin.cc -mixiong.tv -mixrnb.com -mixunds.com -mixvvideo.com -miy.cc -miyabaobei.com -miyabaobei.hk -miyaboke.com -miyanlife.com -miyapay.com -miyouu.com -miyuangz.com -miyupu.com -miyushu.com -mizhe.com -mizhenhao.com -mizhimedia.com -mizholdings.com -mizhuanba.com -mizone.cc -mizuiren.com -mj85.com -mjasoft.com -mjceo.com -mjh5.com -mjia.cc -mjjcn.com -mjjq.com -mjju.net -mjjxkj.com -mjkqj.com -mjlong.com -mjmj8.net -mjmjm.com -mjmobi.com -mjoys.com -mjrui.com -mjtom.com -mjyun.com -mjyx.com -mjzj.com -mjzymh.com -mk-yiliao.com -mk2048.com -mkaliez.com -mkaq.org -mkb0898.com -mkbld.com -mkf.com -mkjump.com -mklimg.com -mknn.net -mkshell.com -mkszxh.com -mktcreator.com -mktdatatech.com -mktzr.com -mkuai.net -mkvcn.com -mkwhat.com -mkzcdn.com -mkzhan.com -mkzhou.com -mkzoo.com -ml-cg.com -ml-kq.com -mlairport.com -mlbuy.com -mlgame.wang -mlgj.com -mlibaba.com -mlinks.cc -mlito.com -mlj130.com -mlj194.com -mlj36.com -mlj55.com -mljixie.com -mljr.com -mlkmba.com -mlkxs.com -mlkxshop.com -mlmcms.com -mlmfcn.com -mlnk.me -mlnrz.com -mlnsoft.net -mlocso.com -mlog.club -mlogcn.com -mlrzsj.com -mlsub.net -mlt01.com -mlwanwan.com -mlwed.com -mlwu.net -mlxks.com -mlycdn.com -mlyfc.net -mlyfcyy.com -mlzcn.com -mm.com -mm111.net -mm12581.com -mm131.kim -mm138.com -mm2hservices.com -mm2uu.com -mm52.com -mm7920.com -mm8mm8.com -mm957.com -mmall.com -mmaqa.com -mmarket.com -mmb.to -mmbang.com -mmbang.info -mmbang.net -mmbao.com -mmbest.com -mmbjq.com -mmbread.com -mmc-data.com -mmcxu.com -mmfad.com -mmfang.cc -mmfbm.com -mmfi.net -mmfj.com -mmgl.net -mmgogo.com -mmhktv.com -mmi-shanghai.com -mmia.com -mmim8.com -mmimm.com -mmiyue.com -mmkkiivv.com -mmloo.com -mmm.io -mmmiao.com -mmmmmmm.com -mmmtea.net -mmonly.cc -mmosite.com -mmscoo.com -mmsfw.com -mmsk.com -mmstat.com -mmtcw.com -mmtrix.com -mmtrixcnc.com -mmtrixcnet.com -mmtrixopt.com -mmtsg.com -mmuaa.com -mmwan.cc -mmww.com -mmxiaowu.com -mmy.la -mmybt.com -mmycdn.com -mmyfilm.com -mmzh.com -mn-soft.com -mn21.com -mnancheng.com -mnbvtgv.com -mndsoft.com -mng0303.com -mng044.com -mnihyc.com -mnjj.group -mnkan.com -mnlscz.com -mnoswqa.com -mnpz8.com -mnwww.com -mnxz8.com -mo-yu.com -mo298.com -mo2g.com -mo9.com -moage.com -mob.com -mob55.com -mobaders.com -moban.com -mobanhao.com -mobanjing.com -mobanku.com -mobanlane.com -mobanma.com -mobanpai.com -mobantiankong.com -mobantianxia.com -mobantianxia.net -mobantu.com -mobanwang.com -mobartsgame.com -mobawan.com -mobayke.com -mobayx.com -mobcastlead.com -mobcent.com -mobdatas.com -mobeehome.com -mobeiwenhua.com -mobgi.com -mobibao.com -mobibrw.com -mobike.com -mobile-ease.com -mobileanjian.com -mobilebone.org -mobiledissector.com -mobilegamebase.com -mobilegamecdn.com -mobilelegends.com -mobileppp.com -mobiletrain.org -mobileztgame.com -mobiw.com -mobjz.com -mobkeeper.com -mobking.biz -mobo168.com -moboage.com -moboplayer.com -moborobo.com -mobotap.com -mobring.co -mobrtb.com -mobstarry.com -mobtou.com -mobvoi.com -mocache.com -mocartoon.com -mockingbot.com -mockjs.com -mockplus.com -mockuai.com -mocn.cc -mocuz.com -modao.cc -modao.com -modao.io -modb.pro -modeng178.com -modernsky.com -modernweekly.com -modian.com -modoer.com -modooplay.com -modulesocean.com -moduovr.com -moduseo.com -modusnb.com -modxz.com -moe.im -moe123.com -moe123.net -moe123.org -moe321.com -moeamv.com -moeblog.vip -moeclub.org -moecoder.com -moeelf.com -moefactory.com -moefantasy.com -moefou.org -moehu.org -moehui.com -moeid.com -moejam.com -moejj.com -moejp.com -moemiao.net -moenis.com -moeover.com -moerail.ml -moerkeji.net -moerlong.com -moesola.com -moetas.com -moetu.org -moetuji.com -moew.xyz -moeyue.com -moezu.com -moezx.cc -mofa.com -mofanbaby.com -mofang.com -mofang.jp -mofangge.com -mofanghr.com -mofangshe.com -mofangyu.com -mofavideo.com -mofazhu.com -mofenglife.com -mofile.com -mofishgames.com -mofoun.com -mofunenglish.com -mogoedit.com -mogohd.com -mogoroom.com -mogu.com -mogu.io -mogubill.com -mogucdn.com -moguf.com -mogujia.com -mogujie.com -mogujie.org -mogumiao.com -moguproxy.com -mogustore.com -mogutong.com -moguupd5.com -moguv.com -moguvet.com -moguyun.com -moh.cc -moh7.com -moh8.com -moheqq.com -mohou.com -mohu.org -mohuanhua.com -moihu.com -moimg.net -moioi.com -moith.com -moji.com -moji001.com -moji002.com -mojicb.com -mojicdn.com -mojichina.com -mojidong.com -mojieai.com -mojitest.com -mojocube.com -mojuedu.com -mokahr.com -mokalady.com -mokaoba.com -mokatyper.com -mokayuedu.com -mokezhan.com -mokiee.com -moko.cc -moks.cc -molbase.com -molbase.net -molegu.com -molei.net -molerose.com -molibaike.com -molibiancheng.com -molie.com -molihe.cc -molinsoft.com -moliplayer.com -moliqiji.com -molixiangce.com -molizm.com -molloc.com -moltentec.com -momdm.com -momentcdn.net -momhui.com -momishi.com -momo9.me -momobako.com -momocdn.com -momochufang.com -momooyo.com -momoshifu.com -momotn.com -momoyoyo.com -momzs.com -moneydai.com -moneydata.hk -moneygz.com -moneyslow.com -mongochina.com -monhun.fun -monidai.com -monizl.com -monknow.com -monph.com -monseng.com -monsooncvs.com -monsterlin.com -montage-tech.com -monteamor.com -monternet.com -monthdate.com -montnets.com -monv.com -monxin.com -moocollege.com -moodmoon.com -moodoon.com -moogos.com -moojing.com -moojnn.com -moomcherry.com -moomoo.com -moonbasa.com -moonbook.com -mooncell.wiki -moonfly.net -mooninbox.com -moonlian.com -moonsec.com -moontc.com -moonx.ai -moooc.cc -mooooc.com -moootooo.com -moore.live -moore.ren -moore8.com -moorecat.com -mooreelite.com -mooreiot.com -mooreren.com -moowo.com -mop.com -mopaas.com -mopaasapp.com -mopair-erm.net -mopcn.com -mopei8.com -moper.me -mopiaoyao.com -mopicer.com -mopoint.com -mopsky.com -moqifei.com -moqikaka.com -moqilin.net -moqing.com -moqipobing.com -moqu8.com -moquu.com -morechinese.cc -moreck.com -morefood.com -moreless.io -morequick.net -moresing.com -moretickets.com -morevfx.com -morewis.com -morewiscloud.com -morigames.com -morihei.net -moring.pw -morketing.com -morning.work -morningcore.com -morninghan.com -morningwhistle.com -morstar.net -moseacg.com -moseeker.com -mosesenglish.com -mosgcj.com -mosheng520.com -moshizhinan.com -moshou.com -moshuanghua.com -moshuqiqiu.com -mosifel.com -mosoga.net -mossle.com -mostch.com -mostsd.com -motanku.com -motherchildren.com -motie.com -motieimg.com -motilive.com -motimaster.com -motionhubtuto.com -motisky.com -moto-one.com.hk -moto8.com -motrix.app -mottoin.com -motuo2.com -motuowei.com -mouldbbs.com -mouldnews.com -moulem.com -moumi.com -mounriver.com -mounstar.com -mountor.net -mounui.com -mousycoder.com -mout.me -moutaichina.com -movcam.com -movcms.com -movesee.com -movesky.net -moviemore.com -movit-tech.com -mowan123.com -mowowo.com -mowuhe.com -mox.moe -moxdao.com -moxfive.xyz -moxiai.com -moxian.com -moxiaofei.com -moxiaoqihuoguo.com -moxing.net -moxingyun.com -moxiu.com -moxiu.net -moxiwh4.com -moyangmoyang.com -moyann.com -moyazhenzhu.com -moye.me -moyimusic.com -moyoutang.com -moyoyo.com -moyuba.com -moyublog.com -moyugroup.com -moyumedia.com -moz8.com -mozhan.com -mozheanquan.com -mozhedun.com -mozhenhau.com -mozhes.com -mozichina.com -mozigu.net -mozillaonline.com -mozillazg.com -mp4ba.com -mp4cn.com -mp4er.cc -mp4ju.com -mp4so.com -mpaascloud.com -mpacc.net -mpaidata.com -mpdaogou.com -mpdsj.com -mpfmall.com -mphdx.com -mpiano.com -mplife.com -mplus.tech -mpopkart.com -mpos.ren -mpweixin.net -mpxiaomi.net -mpxiaoshuo.com -mpxx.net -mqant.com -mqcoffee.com -mqego.com -mquanquan.com -mqwds.cc -mqxww.com -mr-ping.com -mr77.com -mr91.com -mrabit.com -mrbanana.com -mrbluyee.com -mrcjcn.com -mrcrm.com -mrcywang.com -mrdede.com -mrentea.com -mrevisa.com -mrhallacg.com -mrjiang.com -mrjjxw.com -mrkevin.net -mro9.com -mrpyq.com -mrqf.com -mrshuhua.net -mrsta.com -mrsu.me -mrtbc.com -mrw.so -mrwish.net -mrzhenggang.com -mrzl.com -mrzs.net -ms211.com -ms315.com -ms6666111.com -mscbsc.com -mschcdn.com -mscto.com -msddp.com -msdelectron.com -msfpay.com -msfxt.com -msgcarry.com -msgr.dlservice.microsoft.com -msgruser.dlservice.microsoft.com -msgtjj.com -mshandong.com -mshc2018.com -mshengb.com -mshot.com -mshouyou.com -mshxw.com -msits.com -msjcqm.com -msjxxz.com -mskjf.com -msl.la -mslzz.com -msmartlife.com -msmbjp.com -msoso.com -mspharm.com -mspring.org -msrtvu.net -msstatic.com -mstarsemi.com -mstchina.com -msunland.com -msvod.cc -msweekly.com -msxf.com -msxf.net -msxfmall.com -msxh.com -msxiaobing.com -msymjz.com -msyos.com -mszmapp.com -mszq.com -mszsx.com -mszxyh.com -mt-bbs.com -mt-spirit.com -mt-wire.com -mt30.com -mtad828.com -mtasia.net -mtavip.com -mtblj.com -mtchome.com -mtcm006.com -mtcnsoft.com -mtcop.com -mtcsys.com -mtcx99.com -mtdpgame.com -mtdx.net -mtedu.com -mtestin.com -mtf.wiki -mtgchina.com -mti100.com -mtiancity.com -mtianshitong.com -mtide.net -mtime.com -mtimeimg.com -mting.info -mtizt.com -mtk.com.tw -mtkan.net -mtkdy.com -mtketang.com -mtksj.com -mtktk.com -mtm.mo -mtmos.com -mtmss.com -mtmssdn.com -mtmssdn0.com -mtnets.com -mtnets.net -mtoilet.com -mtoou.info -mtr8.com -mtrendgroup.com -mtscj.com -mtty.com -mtu46.com -mtunique.com -mtv123.com -mtw.so -mtwine.com -mtwl.net -mtxgx.com -mtxyx.com -mtyee.com -mtyun.com -mtzbs.com -mtzc100.com -mtzcjy.com -mtzmyjf.com -mtzuichen.com -mtzxgf.com -mu8.cc -mubie.net -mubu.com -mubu.io -mubucm.com -mucaipin.com -mucf.cc -mucfc.com -muchangqing.com -muchlab.com -muchong.com -muchrank.com -mudiao360.com -mudongguang.com -mudoudou.net -mudu.tv -mufengyue.com -muftc.com -mugeda.com -muguaddy.com -muhai.net -muhoujiemi.com -muimg.com -mujj.us -mukewang.com -mukool.com -mulazim.com -mulinf99.com -mum.cc -mumayi.com -mumu01.com -mumumoo.com -muniao.com -murdermysterypa.com -murl.tv -muryi.net -muse-ui.org -mushafa.net -mushapi.com -mushroomchina.com -music.apple.com -music163.com -music4x.com -musicbody.net -musicchina-expo.com -musicdu.com -musiceol.com -musicsky.org -musikid.com -musiness.vip -muslimwww.com -mustups.net -musyder.com -mutouxb.com -mutualhunter.com -mutuoluo.com -muwai.com -mux5.com -muxin.fun -muxiulin.com -muxufang.com -muyangkuaibao.com -muyee.com -muyewx.com -muyii.com -muying.com -muyingjie.com -muyingzhijia.com -muyishu.com -muyuanfoods.com -muzhi.us -muzhibus.com -muzhigame.com -muzhiwan.com -muzi999.com -muzijie.com -muzili.xyz -muzisoft.com -mvben.com -mvc188.com -mvhere.com -mvmpg.com -mvnjar.com -mvoicer.com -mvote.net -mvpdj.com -mvpsky.com -mvyxws.com -mw.com -mw1950.com -mwadx.com -mwave.tech -mwcloudcdn.com -mwcloudcdn.info -mwcname.com -mweda.com -mwjournalchina.com -mwjx.com -mwrf.net -mwrfchina.org -mwrftech.com -mwyzhcdn.com -mx175.com -mx3g.com -mxarts.com -mxchip.com -mxddp.com -mxde.com -mxguan.com -mxhaitao.com -mxhichina.com -mxifund.com -mxingkong.net -mxjinchao.com -mxjtedu.com -mxjyxx.com -mxk.cc -mxlvniao.com -mxnavi.com -mxnfq.com -mxnxs.com -mxomo.com -mxqe.com -mxria.com -mxs.com -mxslly.com -mxsyzen.com -mxtcn.com -mxtrk.com -mxtronics.com -mxw3.com -mxyn.com -mxzsjt.com -mxzx123.net -mxzzzs.com -my-3dcad.com -my-host.cc -my-summit.com -my.st.com -my0511.com -my0513.com -my0538.com -my0551.com -my0792.com -my0832.com -my089.com -my120.org -my1616.net -my1688.shop -my253537.com -my285.com -my2852.com -my2space.com -my2w.com -my399.com -my3w.com -my419.com -my4399.com -my51a.com -my5m.com -my5v.com -my607.com -my68.com -my7475.com -my7v.com -my88316666.com -my9166.com -my9527.com -my97.net -myagric.com -myaijarvis.com -myalert.info -myalicdn.com -myanjian.com -myanmarembassy.com -myantu.com -myapks.com -myapp.com -myarowanas.com -myauth.us -mybank.cc -mybdqn.com -mybjx.net -mybosc.com -myboyan.com -mybwallet.com -mybxg.com -mycaigou.com -mycaijing.com -mycaixun.com -mycar168.com -mycaraok.com -mycardgame.net -mycat.io -mychemy.com -mychery.com -mychery.net -mychinaevent.com -mychunyan.net -mycleanmymac.com -myclub2.com -mycnc.org -mycodes.net -mycollect.net -mycolorway.com -mycoov.com -mycos.cc -mycos.com -mycos.net -mycos.org -mycoser.com -mycospxk.com -mycoss.com -mycoss.net -mycoss.org -mycrtb.com -mydadao.com -mydao.net -mydbfx.com -mydcyj.com -mydebook.com -mydeershow.com -mydf.net -mydical.com -mydict.org -mydigi.net -mydigit.net -mydiyclub.com -mydll.org -mydnns.com -mydns8.com -mydnser.com -mydnspod.net -mydnsw.com -mydoc.io -mydown.com -mydown168.com -mydreamplus.com -mydrivers.com -myeclipsecn.com -myekp.net -myezdns.com -myf6.com -myfans.cc -myfcomic.com -myfirstwon.com -myfrfr.com -myfun.com -myfun7.com -myfund.com -mygame66.com -mygame82.com -mygame88.com -mygjp.com -mygobatv.com -mygolbs.com -myguancha.com -mygx.net -mygzb.com -myhack58.com -myhaowai.com -myhard.com -myhayo.com -myhexin.com -myhongzuan.com -myhostadmin.net -myhuahuo.com -myhuaweicloud.com -myhuilv.com -myhwclouds.com -myicloud.vip -myie.me -myie9.com -myip.la -myiplay.com -myir-tech.com -myirtech.com -myitit.com -myjhxl.com -myjianzhu.com -myjishu.com -myjob.com -myjob500.com -myjoit.com -myjoy777.com -myk3.com -mykqyy.com -mylbabao.com -mylegist.com -mylguoji.com -mylhospital.com -mylhz.com -mylibs.org -mylike.cc -mylike.com -mylikechat.com -mylikesz.com -mylikeyk.com -mylink.ink -mylitboy.com -mylmad.com -mylotushealth.com -mylovehome.com -mym001.com -mymaitian.com -mymanhua.com -mymetal.net -mymhotel.com -myminapp.com -mymofun.com -mymoive.com -mymova.com -mynb8.com -mynee.com -myoas.com -myodatech.com -myoldtime.com -myonlystar.com -myopenwrt.org -myoppo.com -myoschain.com -myottad.com -myouth.net -myp2pcam.com -myp2pch.net -mypal.wang -mypcera.com -mypcrun.com -mypethome.com -mypian.com -mypiao.com -mypitaya.com -mypity.com -mypm.net -myprad.com -mypscloud.com -mypsy365.com -myptpt.com -myqcloud.com -myqcloud.net -myqee.com -myqiantu.com -myqqjd.com -myra2.com -myrb.net -myreadme.com -myrice.com -myriptide.com -myrtb.net -myrunners.com -myruru.com -mysanco.com -myscore.org -mysemlife.com -myshow800.com -myshown.com -myshu.org -myshxz.com -mysinablog.com -mysinamail.com -mysipo.com -mysixue.com -mysmth.net -mysodao.com -mysongktv.com -mysore-yoga.com -myspain.org -mysqlab.net -mysqlops.com -mysqlpub.com -myssl.com -mystao.com -mysteel.com -mysteel.net -mysteelcdn.com -mysteelcms.com -mystudyerte.com -mysubmail.com -mysupa.com -mysuperbest.com -mysuperdns.com -mysvw.com -myt126.com -mytanwan.com -mythbird.com -mythcall.com -mythcare.com -mythidea.com -mythroad.net -mythsman.com -mythware.com -mythware.net -mytijian.com -mytju.com -mytokenpocket.vip -mytrix.me -mytv365.com -mytvbt.com -mytvgame.com -myuall.com -myubbs.com -myuclass.com -myujob.com -myun.tv -myunke.com -myunying.com -myushan.com -myvoyo.com -mywakao.com -mywang.net -mywayboo.net -myweimai.com -mywh.com -mywll.com -mywood.cc -myxypt.com -myyishu.com -myyj.net -myyoudao.com -myyx618.com -myyx915.com -myyzd.com -myzaker.com -myzebravip.com -myzhiniu.com -myzhongjin.com -myznh.com -myzte.com -mz-oneacg.com -mz-sys.com -mz5k.vip -mzbei.com -mzboss.com -mzeat.com -mzeyes.com -mzfile.com -mzfxw.com -mzgtuan.com -mzh.ren -mzhb.com -mzhfm.com -mzhujia.com -mzi8.com -mzjmedia.com -mzmjapp.com -mzone.site -mzread.com -mzres.com -mzsky.cc -mzsmn.com -mztgame.com -mztzzx.com -mzuan.com -mzwu.com -mzxwz.com -mzyfz.com -mzyun.ren -mzzjw.com -n-bros.net -n-mobile.com -n0808.com -n12345.com -n12xar123.xyz -n21.cc -n2v.net -n3ko.co -n3sd.com -n423.com -n459.com -n77777777.com -n802.com -n9cn.net -n9z.net -naadou.com -nadianshi.com -nafanlong.com -nagain.com -nagcloudcs.com -nahan.org -nahuayuan.com -nahuo.com -nahuo9.com -nai.la -nai.si -nai8.me -naibabiji.com -naibago.com -naicha99.com -naichabiao.com -naichagang.com -naifei.pro -naigirl.com -naikanxs.com -naimei.com -nainiuapp.com -naiping.net -naitang.com -naiveblue.com -naiyou.cc -najiaoluo.com -nakedhub.com -nakedsail.com -nakevip.com -nalanxi.com -nalichi.com -name1688.com -name2012.com -name5566.com -namedq.com -nameidi.com -namepre.com -namesilopro.com -namibox.com -namipan.com -namitiyu.com -namoc.org -nanadao.com -nanapro.org -nanbeiyou.com -nanbushenghuo.com -nandagang.cc -nandasoft.com -nandu.com -nanerjia.com -nanerlee.me -nanfu.com -nanguache.com -nangualin.com -nanhaitoday.com -nanhe111.com -nanhua.net -nanhufund.com -nanhuhr.com -nanhumingyue.com -nanhutravel.com -nani.online -nanjiaosuo.com -nanjingchenxi.com -nanjinghuojia.net -nanjingkaishan.com -nanjingtianqi114.com -nanjingui.com -nanjixiong.com -nankaimba.org -nanlebbs.com -nanlive.com -nanningjie.com -nanoer.net -nanopi.org -nanputuo.com -nanqi.org -nanrenbang.in -nanrenge.net -nanrentu.cc -nanrenvip1.com -nanrenvip2021.xyz -nanrenwa.com -nanrenwo.net -nanshan.biz -nanshanski.com -nanshifaxing.com -nantaihu.com -nantongbike.com -nantonghua.net -nantongle.com -nanxueqx.com -nanxunjob.com -nanyangcable.com -nanyuanyinfong.com -nanyuetong.com -nanzhao1.com -naobiao.com -naoda.net -naoffer.com -naonaola.com -naozhong.net -napiantian.com -naquan.com -narkii.com -narrowad.com -naruto.red -naruto4u.com -narutom.com -nas2x.com -nas66.com -nasgetinfo.com -nashwork.com -nasimobi.com -nasiosoft.com -naslike.com -nat123.com -natamoo.com -natappfree.cc -natbbs.com -natertech.com -nationalchip.com -nationsky.com -nationstech.com -naturali.io -nature-museum.net -naturesvariety-china.com -natywish.com -nauac.com -navchina.com -navimentum.com -navinfo.com -naxcx.com -naxide.com -nayao.com -nayatec.com -nayei.com -nb-medicalsystem.com -nb301.xyz -nb591.com -nb888888.com -nba008.com -nbabm.com -nbahero.com -nbahi.com -nbahjx.com -nbayaobasketballclub.com -nbazww.com -nbbeer.com -nbbiao.com -nbchao.com -nbcsgo.com -nbcyl.com -nbdeli.com -nbdeli.net -nbdisco.com -nbdskj.com -nbegame.com -nbegame.net -nbenl.com -nbfox.com -nbgdjt.com -nbhao.org -nbhky.com -nbimer.com -nbimg.com -nbjhawl.com -nbjlw.com -nbjnw.com -nbjzjn.com -nbkc-rp.com -nbmai.com -nbmao.com -nbmedicalsystem.com -nbow.net -nboxnas.com -nbpolytheatre.com -nbrj.com -nbsason.com -nbshuoxue.com -nbsqbank.com -nbt.ren -nbtarena.com -nbudp.com -nbunicom.com -nbwaf.net -nbwan.net -nbwb.net -nbwbw.com -nbweekly.com -nbyang.com -nbyeda.com -nbz4jc2j.com -ncacg.org -ncartfoundation.org -ncdxbbs.com -ncfcsa.org -ncfcw.net -ncfgroup.com -ncfstatic.com -ncfwx.com -ncfxwhjjh.com -ncfz.com -nchq.cc -nciku.com -nciyuan.com -ncjld.com -ncmem.com -ncnynl.com -ncpa-classic.com -ncpqh.com -ncpssd.org -ncq8.com -ncrica.org -ncu.me -ncvtinfo.com -ncvtmi.com -ncwyxh.com -ncxb.com -ncyinghuochong.net -ncyunqi.com -nczfgjj.com -nczfj.com -nd090.com -nd15.com -nd56.com -nd68.com -nddaily.com -nddnrm.com -ndfsl.com -ndh21.com -ndhys.com -ndmh.com -ndnslab.com -ndoo.net -ndscsoft.com -ndser.net -ndtinfo.net -nduoa.com -nduotuan.com -ndvs87d.com -ndzsx.com -ne21.com -neaechina.com -nearcharge.com -nearsnet.com -nease.net -neat-reader.com -neavo.me -nebulogy.com -nedaex.com -nedigitals.com -needexam.com -needma.com -needyouknow.com -neegle.net -neeq.cc -neets.cc -neeu.com -negroupedu.org -neigou.com -neihan8.com -neihanshequ.com -neimengguyongli.com -neitui.com -neitui.me -neituixiaowangzi.com -nelkshuhe.com -nellit.net -nengapp.com -nenggeimall.com -nengshida.com -nengyongma.com -nengzuo.com -nenup.com -neo.org -neoap.com -neobiochina.com -neoease.com -neoease.org -neofussvr.sslcs.cdngc.net -neojos.com -neokylinschool.com -neolee.com -neolix.net -neoremind.com -nepconchina.com -nepian.com -neptcn.com -ner98.com -nercel.com -nerocn.com -nesbbs.com -nestgene.com -nestlechinese.com -nesxc.com -net-add.com -net-swift.com -net0516.com -net111.info -net114.com -net130.com -net199.com -net2345.net -net263.com -net3q.com -net767.com -net9.org -netac.com -netat.net -netbarcn.net -netbian.com -netcan666.com -netcnnet.net -netcoc.com -netcolor.com -netconst.com -netcoretec.com -netded.com -netdzb.com -netease.com -netease.im -neteasegames.com -netentsec.com -netesee.com -netgamecar.com -netiler.com -netinbag.com -netinfi.com -netinfi.net -netitest.com -netkao.com -netnoease.com -netok.cc -netpi.me -netposa.com -netqd.com -netqin.com -netqon.com -netsmell.com -netsoz.com -netspreading.com -netstatic.net -netsun.com -nettsz.com -nettvl.com -nettvl.net -networkbench.com -networkbrand.com -netzonesoft.com -neu-reality.com -neucrack.com -neuedu.com -neuhm.com -neunn.com -neupeer.com -neusncp.com -neusoft.com -neutrontek.com -neuwill.com -neuzs.com -nev-battery.org -new-mobi.com -new-more.com -new-thread.com -new1cloud.com -newacademic.net -newadblock.com -newadx.com -newaircloud.com -newapi.com -newasp.net -newayz.com -newbandeng.com -newbanker.com -newbd.com -newbe.pro -newbeebook.com -newbiefly.com -newbmiao.com -newbolunesport.com -newcapec.net -newcger.com -newchainbase.com -newchieve.com -newchinalife.com -newclasses.org -newclouddenfender.com -newcosemi.com -newdao.net -newday.me -newdefend.com -newdiediao.com -newdon.net -newdruginfo.com -newdu.com -newdun.com -newdun.net -newdur.com -newer2001.com -newfavor.net -newgamer.com -newhopeagri.com -newhopegroup.com -newhtml.net -newhua.com -newistock.com -newjson.com -newlandaidc.com -newlifex.com -newmaker.com -newman.mobi -newmargin.com -newnanbao.com -newnewle.com -newoasis.cc -newoer.com -newoo.com -neworiental.org -nework360.com -neworld.org -neworldedu.org -neworldjp.com -newperiod.net -news18a.com -news606.com -newsafe.xyz -newsccn.com -newscctv.net -newsdao.com -newseasoft.com -newsgd.com -newsgu.com -newsing.com -newskj.com -newskj.org -newsmth.com -newsmy-car.com -newsmy.com -newsmyshop.com -newsn.net -newspluse.com -newssc.net -newssc.org -newstarpress.com -newstartsoft.com -newstjk.com -newsv5.com -newsxc.com -newsyc.com -newtalentaward.com -newtonghua.com -newtop100.com -newtouch-elec.com -newtrip.com -newume.com -newvfx.com -newxing.com -newxitong.com -newxue.com -newyx.net -newzgc.com -newzhizao.com -nexmoe.com -nexon.to -next-union.com -nextday.im -nextjoy.com -nexto2o.com -nextpcb.com -nextrt.com -nextsee.com -nexttao.com -nexttix.net -nextyu.com -nexus.dell.com -nfa5.com -nfc315.com -nfcic.com -nfcmag.com -nffund.com -nflchina.com -nfmedia.com -nfmrtfv.com -nfpeople.com -nfs-china.com -nfs-wuxi.com -nfschina.com -nfwin.com -nfyk.com -nfzhouyi.com -nfzmbrand.com -ng-alain.com -nga.wiki -ngabbs.com -ngacn.cc -ngacn.com -ngarihealth.com -ngbbs.com -ngcgears.com -ngctransmission.com -ngfans.net -ngh6.com -nginstar.net -ngjjtg.com -ngloom.me -ngnice.com -ngocn.net -ngoos.org -ngportal.cdnetworks.com -ngrok.wang -ngui.cc -ngxfence.net -ngxfence.org -nh.com -nhaidu.net -nhbhpx.club -nhdmd.com -nhganggeban.com -nhnexpo.com -nhnsc.com -nhnst.com -nhooo.com -nhstu.com -nhxz.com -nhygkj.com -nhzedu.com -nhzj.com -nhzs.com -ni8.com -nianbin.com -nianhuiba.com -nianw.com -nianzhi.cc -niaobee.com -niaobulashi.com -niaocms.com -niaogebiji.com -niaola.com -niaoyun.com -niba.com -nibaguai.com -nibaku.com -nibiye.com -nic.de -nic.ren -nic.wang -nicaifu.com -nice-app.com -nice1688.com -nicebing.com -nicecdn.com -nicefilm.com -niceimg.net -niceisp.com -nicekid.com -nicelabel.cc -nicelinks.site -niceloo.com -niceonegame.com -nicescale.com -nicetuan.net -nicky1605.com -nicolaszhao.com -niconiconi.cc -nidianwobang.com -nidong.com -nie.io -nielsenccdata.tv -nies.org -niexiaotao.com -nieyou.com -nifengz.com -nightwishcn.com -nihao.net -nihaotw.com -nihaowang.com -nihaowua.com -nihontu-cn.com -nihuwo.net -niiwoo.com -nikanpian.com -nikefree-run.net -nikest.com -nikkiup2u2.com -nilai.com -nilegu.com -niliu.me -nilmap.com -nima.wang -nimzx.com -ninebot.com -ninecoign.com -ninepart.com -nineroad.com -ninesix.cc -ninestargroup.com -ningbo-airport.com -ningbocarnival.com -ningbocat.com -ningbofy.com -ningbotm.net -ningdo.com -ninghao.net -ningidc.com -ningkangyuan.com -ningkekeji.com -ningmengdou.com -ningmengyun.com -ningmoe.com -ningoo.net -ningto.com -nington.com -ningxingxing.com -ningxinm1.com -ninjacn.com -ninjadq.com -ninjamustdie.com -ninze.com -nio.com -nioapis.com -nipei.com -nipic.com -nishuoa.com -nisure.net -nitaitag.com -nitianxieshen.com -nitutu.com -niu-ba.com -niu.com -niua.com -niuacc.com -niuap.com -niubafa.com -niubb.com -niubb.net -niubi114.com -niubilai.com -niubilety.com -niubiquan.com -niubixia.com -niuboli.com -niucache.com -niucdn.com -niuche.com -niucodata.com -niudai120.com -niudingfeng.com -niug8.com -niugame.net -niugp.com -niuguwang.com -niuhudong.com -niujinniu.com -niukk.com -niuliangyun.com -niuniufund.com -niuniutui.com -niuniuwan.com -niupinhui.com -niupu.com -niuqia.com -niurenqushi.com -niuschools.com -niushe.com -niutoushe.com -niutrans.com -niutrip.com -niutuku.com -niuwap2p.com -niuwk.com -niuxgame77.com -niuxiao.net -niuxiaoq.com -niuxyun.com -niuxz.com -niuyan.com -niuyou5.com -niuyuan.com -niuza.com -niuzhu.com -niuzhuan-test.com -nivtc.com -niwodai.com -niwodai.net -niwoning.com -niwota.com -niwoxuexi.com -nixiba.com -nixwang.com -nizhan888.com -nizhanw.com -nizi88.com -nizkeyboard.com -nizuixing.com -nj-bl.com -nj-fst.com -nj-marathon.org -njaeqjx.com -njbaisou.com -njc100.com -njcdata.com -njcedu.com -njcgs.com -njcitygas.com -njctkj.com -njcw.com -njd1.com -njdapaidang.com -njdewo.com -njdfwb.com -njfeiming.com -njfenghao.com -njgb.com -njgep.com -njgjj.com -njhaiwai.com -njhengyou.com -njhgame.com -njhszoo.com -njhwsk.com -njibhu.com -njjn.com -njjsyy.com -njjuntong.com -njkefayuan.com -njl114.com -njliaohua.com -njlike.com -njlingyun.com -njlzsx.net -njmama.com -njmuseum.com -njnutz.com -njqxrc.com -njrc365.com -njrx.cc -njsd-china.org -njshengyuanli.com -njsjz.com -njskps.com -njsxbw.com -njuaplusplus.com -njuftp.org -njupt-sacc.com -njw88.com -njwfgs.com -njwww.net -njxsmaofa.com -njxsmfyh.com -njxsmz.com -njxzwh.com -njyayishipin.net -njycwy.com -njyingtaoya.com -njyongji.com -njyydl.com -njzb.net -njzc025.com -njzdsp.com -njzhongyuan.com -njzhzx.net -njzztyl.com -nk84.com -nkscdn.com -nktaba.com -nktxv.com -nkyp.com -nlark.com -nlinkline.com -nljb.net -nlnln.com -nlpjob.com -nlscan.com -nlv2.com -nlxn.com -nly6.com -nlypx.com -nlzpy.com -nm8yx.com -nmbgjx.com -nmet168.com -nmgd.com -nmgdw.com -nmgfood.net -nmgfrank.com -nmggyy.com -nmgjzjn.com -nmgkjzx.com -nmglawyer.com -nmgrwjz.com -nmgwyw.org -nmgyjszx.com -nmgyljs.com -nmhfw.com -nmhrjy.com -nmimi.com -nmkjxy.com -nmmwz.com -nmszjy.com -nmtyxy.com -nmvps.com -nmweidian.com -nmysyey.com -nmyygs.com -nmzc02.com -nmzh.net -nmzol.com -nn.ci -nn.com -nn92.com -nncc626.com -nncgs.com -nncj.com -nndims.com -nnduyi.com -nngdjt.com -nngjjx.com -nnhaocheng.com -nnit30.com -nnjioko.com -nnjt.com -nnlib.com -nnmama.com -nnmutong.com -nnn666.com -nnnews.net -nnsbbs.com -nnsc6.com -nnsky.com -nnszwl.com -nnt0.net -nntlj.com -nntskq.com -nnudream.com -nnwb.com -nnweding.com -nnylf168.com -nnynrc.com -nnzsxblaw.com -noah-dream.com -noahedu.com -noahsnail.com -noahteck.com -nobanus.com -nocang.com -nocare.com -noclyt.com -nocode-tech.com -nocode.com -noddl.me -node.beer -nodeasy.com -nodeclass.com -nodeedge.com -nodeing.com -nodejs999.com -nodekey.com -nodepacific.com -noeic.com -nohken-sdy.com -nohup.cc -nokia-sbell.com -nokia.la -nokia88.com -nolanchou.com -nolovr.com -nomax.vip -nome.com -nonganxian.com -nongcun5.com -nongfen.com -nongfuspring.com -nongji1688.com -nongji360.com -nongjia888.com -nongjiaba.com -nongjitong.com -nongjx.com -nongli.com -nongli.net -nongli114.com -nonglirili.net -nongmintv.com -nongnet.com -nongplay.com -nongquan.net -nongshang.com -nongshijie.com -nongxinyin.com -nonobank.com -nonozone.net -noobcoder.club -noobyy.com -noodba.com -noogel.xyz -noontec.com -noops.me -nooshen.com -nopis.org -noposion.com -noq.cc -nor-land.com -nordfxs.com -nordicways.com -nordikr.com -nordritools.com -norinco.com -norincogroup-ebuy.com -norlinked.com -normcore.com -normstar.net -northdm.com -northdy.com -northgun.com -northidc.net -northtimes.com -nosec.org -nosuchfield.com -not3.com -notadd.com -note52.com -notedeep.com -noteniu.com -notetech.org -notrisk.com -novaicare.com -novalide.com -novapps.com -novastargame.net -novel-supertv.com -novemideas.com -novotimes.com -novtium.com -now-cn.net -now-do.com -nowapi.com -nowbeta.com -nowchip.com -nowcoder.com -nowcoder.net -nowec.com -nowo.com -nowodds.com -nowre.com -nows.fun -nowscore.com -nowshipin.com -nowxz.com -nowyingshi.com -noxgroup.com -noxue.com -noxxxx.com -noyes88.com -npbdp.com -npc233.com -npcgo.com -npcka.com -nphoto.net -nplusgroup.com -nplusgroup.net -npodevelopment.org -npoll.net -npp.cc -npxsw.com -npyun.com -npz.com -nq.com -nq6.com -nr-esc.com -nrdzqwd.com -nrec.com -nren8.com -nrsfh.com -nrsg.net -nruan.com -nrzsjk.com -ns1.ge -ns1.hk -ns168.net -ns2.ge -ns203.com -ns365.net -ns5n.com -ns8d.com -ns96.com -nsbeta.info -nscloudwaf.com -nscscc.org -nseac.com -nsecsoft.com -nsfocus.com -nsfocus.net -nsforce.net -nshen.net -nshzpks.com -nsini.com -nsisfans.com -nsnodes.com -nsns8.com -nsoad.com -nsoft.vip -nsrfww.com -nsrjlb.com -nss.im -nssd.org -nsshare.com -nsstream.com -nstom.net -nstooll.com -nsw88.com -nsw99.com -nswyun.com -nsydt.com -nszmz.com -nt.cc -ntalker.com -ntaow.com -ntce.com -ntcfy.com -ntdvf.com -ntechw.com -ntefyxq.com -ntejiazheng.com -ntes53.com -ntfabu.com -ntfsformac.cc -nthfw.com -ntjoy.com -ntjrchina.com -ntjymall.com -ntneuro.org -ntp.felixc.at -ntpcb.com -ntqcct.com -ntrcb.com -ntryjd.net -nttui.com -ntuiw.cc -ntuiw.com -ntwikis.com -ntwzy.com -ntzhoas.com -nu1l.com -nuan.io -nuandao.com -nuanjiayuan.com -nuanmaoer.com -nuanshi100.com -nuanyuehanxing.com -nubb.com -nubee.cc -nubia.cc -nubia.com -nucc.com -nucleisys.com -nuecidc.com -nuedcchina.com -nufans.net -nuicdc.org -nullice.com -nullno.com -num1dns.com -numseed.com -nunu8.com -nuobeiliao.com -nuodefund.com -nuoder.com -nuoha.vip -nuoji.com -nuojiugo.com -nuokui.com -nuomi.com -nuomicikoi.com -nuomiphp.com -nuonuo.com -nuozhan.com -nuozhensh.com -nuqk.com -nutjs.com -nutriease.com -nutsbp.com -nutspace.com -nutz.io -nutzam.com -nuubao.com -nuuxie.com -nuvoltatech.com -nuvoton-m0.com -nuvoton-mcu.com -nuxue.com -nv2118.com -nvcam.net -nvcong.com -nvdiao.com -nvidia-china.com -nvliren.com -nvloo.com -nvren.com -nvren55.com -nvsay.com -nvsheng.com -nvshengjie.com -nvshuyun.com -nvtnet.com -nvude3.com -nvwu.com -nvzhanshen.com -nvzhubo.cc -nvziwu.com -nw-host.com -nwbbs.com -nwct.me -nwdlink.com -nweon.com -nwtongcheng.com -nx.cm -nx5.com -nxadmin.com -nxcells.com -nxdns.net -nxecaiji.com -nxengine.com -nxez.com -nxflcp.com -nxflv.com -nxggzyjy.org -nxgjbyy.com -nxgqt.org -nxgtjt.com -nxhscxkj.com -nxin.com -nxit.us -nxly766.com -nxnet.net -nxnews.net -nxnresearch.com -nxol.net -nxpic.org -nxrrvmy.com -nxsks.com -nxtianshangb.com -nxty88.com -nxwly.com -nxyoute.com -nxyqs.com -nxyuanjing.com -ny-yy.com -ny83.com -ny8z.net -ny913.com -nyaa.io -nyaacat.com -nyasama.com -nyato.com -nybai.com -nybaidu.net -nyckidsclub.com -nyk688.com -nync.com -nypd520.com -nyrsksw.com -nysmfc.com -nyyzjg.com -nyzydz.com -nz86.com -nzbdw.com -nzchina.com -nzsiteres.com -nzw-china.com -nzwgs.com -o--o.win -o-netcom.com -o-sky.com -o-star.cc -o136.com -o2123.com -o2ee.com -o2mania.com -o2moment.com -o2o4.com -o2obill.com -o2oevent.com -o2oexpo.com -o2osd.com -o2ting.com -o2yhq.com -o37o.net -o3ndix.com -o4on.vip -o7h.net -o8ak.com -o8dlu8.com -o8tv.com -oa025.com -oa0351.com -oa169.com -oa25.org -oa8000.com -oabg.net -oabus.net -oacn.org -oact.net -oadz.com -oahelp.com -oahelp.net -oameibang.com -oaqi.com -oatos.com -oauto.com -oawhy.com -obagame.com -obesu.com -obins.net -obj6.com -objccn.io -objcer.com -objcoding.com -obkoro1.com -obkprint.com -obohe.com -obolee.com -oborad.com -oborr.com -obowin.com -obsapp.net -obyee.com -ocar.tv -ocd120.com -oceanbase.com -oceanbot-steam.com -oceancnc.com -oceanengine.com -oceanlau.com -oceanol.com -oceeq.com -ochukai.me -ocimg.com -oclkj.com -ocooca.com -ocpan.org -ocri-genomics.org -ocrmaker.com -ocsp-lb.apple.com.akadns.net -ocsp.apple.com -ocsp.globalsign.com -ocsp.pki.goog -ocsp.us.cdnetworks.com -ocsp2.globalsign.com -oct-asia.com -oct-cts.com -oct-sh.com -octbay.com -octeast.com -octeshow.com -octholding.com -octhotels.com -octinn.com -octjstz.com -octlink.com -octmami.com -octo.fm -octoparse.com -octopgo.com -octopusgame.com -octre.com -octscc.com -octwuhan.com -oculist.net -oculusss.pro -odao.com -odict.net -odinichina.com -odinjc.com -odinliu.com -oealy.com -oeasy.org -oecr.com -oeebee.com -oeeee.com -oejournal.org -oelove.com -oemol.com -oemresource.com -oemsnavi.com -oeob.net -oesell.com -oetsi.com -ofcard.com -offcn.com -offer-wow.com -offerstrack.net -office-cn.net -office-peixun.com -office26.com -office68.com -officecdn.microsoft.com -officectrl.com -officedoyen.com -officeedit.com -officejc.net -officese.com -officeweb365.com -officewj.com -officexr.com -officezhushou.com -officezu.com -offodd.com -ofgame.net -ofidc.com -ofmonkey.com -ofo.com -ofo.so -ofpay.com -ofuns.com -ofweek.com -ofyoo.com -ogaoxiao.com -ogccdn.com -oh.sb -oh100.com -ohaotian.com -ohipic.com -ohoohh.com -ohqly.com -ohtly.com -ohtpc.com -ohtvu.com -ohwit.com -ohwyaa.com -oi-wiki.org -oiaqye7985.com -oicat.com -oicq88.com -oicqzone.com -oicto.com -oidchina.org -oigps.com -oilchem.net -oilepay.com -oilhr.com -oiuwe.com -ok-meeting.com -ok06.com -ok1616.com -ok165.com -ok1912.com -ok206.com -ok22.org -ok365.com -ok3w.net -ok5188.net -ok86.com -ok8809.com -ok9624.com -ok9803.com -oka-vip.com -okad.com -okaoyan.com -okayapi.com -okbao.com -okbase.net -okbike.net -okbmf.com -okbuy.com -okbuycdn.com -okcard.com -okchang.com -okchexian.com -okdai.com -okdd.net -okemu.com -okex.vip -okex.win -okexcn.com -okeycar.com -okfri.com -okgj.com -okhimalayanzi.com -okhqb.com -okidc.com -okidc.net -okideaad.com -okii.com -okinfo.org -okjike.com -okjk.co -okjoys.com -okki.com -okkkk.com -oklink.com -oklx.com -okmart.com -okmeeting.com -okmeike.com -okmyapp.com -okng.com -okoer.com -okooe.com -okooo.com -okoooimg.com -okpush.com -okrecovery.com -okskills.com -oksmk.com -oksun.com -oksvn.com -oktools.net -oktools.xyz -oktranslation.com -okuer.com -okweb.info -okwuyou.com -okxr.com -okz.com -okz.ltd -okzhaosheng.com -okzuowenxs.com -ol-cdn.com -ol-img.com -ol3vs.com -olabo.net -olacio.com -olami.ai -olcdn.com -oldboyedu.com -oldcat.me -oldcp.com -oldding.net -olddriver.website -oldking.net -oldpan.me -oleony.com -olinone.com -oliver.ren -oliveryang.net -oliyi.com -ollomall.com -olloop.com -olmy8.com -olymtech.com -omacloud.com -omayse.com -omchain.com -omd99.com -omdnchina.com -omegatravel.net -omegaxyz.com -ometal.com -omiaozu.com -omicsclass.com -omicshare.net -omifanyi.com -omlzx.com -omlzz.com -ommoo.com -omni-pharma.com -omooo.net -omos88.com -omowork.com -ompchina.net -omsheji.com -omuying.com -on-sun.com -onaliyun.com -oncanyin.com -onccc.com -onceai.com -onceoa.com -onche.net -oncity.cc -one-all.com -one-arts.com -one-lab.net -one918.com -onealert.com -oneapm.com -oneasp.com -onebiji.com -onecoder.site -oneconnectft.com -onedi.net -onedict.com -onedns.net -onefoot365.com -onegreen.net -onehang.com -onehome.me -onein.com -oneinstack.com -onekey.cc -onekeyghost.com -onekeyrom.com -onemanhua.com -onemex.com -onemob.mobi -onemovie.com -onemsdn.com -oneniceapp.com -onenoter.com -onephper.com -onepiecevip.com -oneplus.com -oneplusbbs.com -oneplusmobile.com -ones.ai -onescorpion.com -oneshao.com -onesight.com -onespace.cc -onethingcloud.com -onethingpcs.com -onetog.com -onetwo.ren -oneuos.com -onev.cat -onevcat.com -oneway.mobi -onewedesign.com -onewo.com -onewrt.com -onewsimg.com -onewsvod.com -onex.im -onexinli.com -onexmail.com -oneyac.com -onezapp.com -onezh.com -onijiang.com -onjobedu.com -online-edu.org -onlinecn.com -onlinedown.net -onlinekr.com -onlinenic.net -onlinesjtu.com -onlinexijiang.com -onlinknews.com -only4.work -onlycatch.com -onlyedu.com -onlyeduit.com -onlyidc.com -onlyjiehun.com -onlylady.com -onlyling.com -onlyliuxue.com -onlyou.com -onlyred.net -onlyrubberparts.com -onlystem.com -onlytss.com -onlywem.com -onlyyou.com -onmpw.com -ono-bbb.com -onqc.com -ontheroadstore.com -onthink.com -ontvb.com -onyealink.com -oo14.com -oobao.net -oocct.com -oocl.com -ooclab.com -ooe.la -oogcw.com -oogps.com -oohdear.com -oolap.com -oollttqq.com -oomake.com -ooniu.com -ooogo.com -ooopic.com -ooopn.com -ooppoo.com -oouee.com -ooxx.me -ooxxc.com -op86.net -opahnet.com -opark.com -opatseg.com -opcns.net -opcool.com -opd2c.com -opdown.com -open-falcon.com -open-falcon.org -open-open.com -open189.net -openanolis.org -openasic.org -openbayes.com -opencas.org -opencourt.vip -opendrivers.com -openeda.com -openedv.com -openerp.hk -openeuler.org -opengslb.com -openinstall.io -openke.net -openlab.cc -openlab.co -openlanguage.com -openlink.cc -openloong.org -openloongson.org -openluat.com -openlyenter.com -openos.org -openpcba.com -openqa.com -openredcloud.com -openresty.com -openresty.org -openrice.com -opensc.co -openset.wang -opensoce.com -openthos.com -openthos.org -openv.com -openwbs.com -openwrt.pro -openxiaoniu.com -openxinfo.com -operachina.com -opfibre.com -opjmw1.ren -oplay.net -opmaterial.com -opp2.com -oppein.com -opplestore.com -oppo.com -oppo518.net -oppoer.me -oppofind.com -oppomobile.com -oppopay.com -opposhop.in -opposhore.com -opqnext.com -oprtb.com -ops.ci -opsapp.com -opskb.com -opskumu.com -opslinux.com -opsnote.com -opstool.com -optaim.com -optbbs.com -opticsjournal.net -opticsx.org -optimix.asia -optimized-ai.com -optinetchina.com -optol.net -opvip.com -opwill.com -opxincai.com -opython.com -opzoon.com -oq68.com -oq78.com -oqss.com -or-sun.com -oracledatabase12g.com -oracleoaec.net -oradbca.com -oraev.com -oralpractice.com -orange2h.com -orangeapk.com -orangelive.tv -orangepi.org -orangetech.ltd -orangevip.com -orasos.com -oray.com -oray.net -oraybox.com -oraycn.com -orayer.com -orayimg.com -orbitmes.com -orcadt.com -orchome.com -orcode.com -ordosbank.com -orgcc.com -orgleaf.com -orgnitu.net -orient-fund.com -orient-safety.com -orientalgame.com.tw -orientalhorse.com -orientalpatek.com -orientalpearltower.com -orientalwisdom.com -orientcasa.com -orientfoods.net -orientgolf.com -orientpc.com -orienttumor.com -orientwalt.com -originalkindergarten.com -origincn.com -originlee.com -originoo.com -orihard.com -oritive.com -orleto.com -ornglad.com -orpheus.ink -orsoon.com -orspr.com -orsun.cc -orvibo.com -orz.asia -orz.moe -orz123.com -orz520.com -orzbook.com -orzice.com -orzjoy.com -os-easy.com -os-v.com -os7blue.com -osall.com -osbccdn.com -osbean.com -osbzr.com -oscarma.com -oscartutor.com -oscarzhoud.com -oscdn.apple.com -oscdn.origin-apple.com.akadns.net -oschina.com -oschina.io -oschina.net -osechina.com -osedu.net -oseminfo.com -oserror.com -oseye.net -osfipin.com -osg.so -osgchina.org -oshadan.com -oshoplive.com -oshwhub.com -osjiaju.com -osk-clean.com -osmsg.com -osmy.net -osnt.wang -oso6.com -ososn.com -osp.io -ospp.com -oss-cn-beijing-aliyuncs.com -oss.link -oss.so -osschina.com -ossxp.com -ostools.net -osvlabs.com -oswdj.com -oswhy.com -osx.cx -osyum.com -osyunwei.com -otcgd.com -otcms.com -otkglass.com -otms.com -otome.me -otomedream.com -otosaas.com -otovc.com -otp-express.com -otpub.com -ott4china.com -ottcn.com -ottcn.help -ottshopping.net -otype.com -ou99.com -ouapi.com -oubk.com -ouchgzee.com -oudapay.com -oudeqi.com -oudiscover.com -ouerrepair.com -oufa-travel.com -oufengblog.com -oufusoft.com -ougannike.com -ougei.com -ougepiano.com -ouhua.info -ouj.com -oujistore.com -oukan.online -ouklqd.com -oulvnet.com -oumengke.com -ounh.org -ouo.us -ouoou.com -ouou.com -ouou.icu -ouougo.com -oupeng.com -oupengcloud.net -oupuzw.com -our-sky.com -our100.net -our360vr.com -ourail.com -ourats.com -ouravr.com -ourcdns.com -ourcm.net -ourcoders.com -ourdomains.com -ourdvs.com -ourdvs.info -ourdvs.net -ourdvsss.com -oureman.com -ourgame.com -ourglb0.com -ourglb0.info -ourglb0.net -ourglb0.org -ourhlb.com -ourhlb.info -ourhlb.org -ourhy.net -ourjay.com -ourjg.com -ourjiangsu.com -ourjs.com -ourjz.com -ourku.com -ourl.co -ourlife365.com -ourlinc.com -ourpalm.com -ourplay.net -ourren.com -oursakura.com -oursec1.com -oursec2.com -ourselec.com -ourseo.net -oursketch.com -oursmc.com -ourtour.com -ourtxt.net -ourwebat.com -ourwebcdn.com -ourwebcdn.info -ourwebcdn.net -ourwebcdn.org -ourwebhttps.com -ourwebpic.com -ourwebpic.info -ourwebpic.org -oushangstyle.com -oushinet.com -oushivoyages.com -ousns.net -outlets365.com -ouvps.com -ouxutong.com -ouyabosi.com -ouyada.com -ouyaoxiazai.com -ouyeel.com -ouyi.fit -ouyingyimin.com -ouzhougoufang.com -ovalechina.com -ovbook.com -ovcreative.com -ovdream.com -ovear.info -oversearecruit.com -overtrue.me -overturechina.com -ovicnet.com -ovital.com -ovital.net -ovoawh.com -ovopark.com -ovopic.com -ovscdns.com -ovscdns.net -ovuems.com -ovupre.com -ovuwork.com -ovwin.com -owecn.com -owendswang.com -owllook.net -owmy.ga -owner-api.teslamotors.com -owomoe.net -owspace.com -owulia.com -ox11.com -oxbridgedu.org -oxerr.net -oxiaohua.com -oxrm.com -oxygenos.com -oxyry.com -oycode.com -oyeahgame.com -oyekeji.com -oyohyee.com -oyonyou.com -oyoozo.com -oyoumo.com -oywine.com -oyyj-oys.org -oz138.com -ozm.net -ozrot.com -ozzyad.com -p-dragon.com -p-e-china.com -p.cdn.persaas.dell.com -p1.com -p12345.com -p138.com -p2220.com -p2cdn.com -p2hp.com -p2p.com -p2p001.com -p2p178.com -p2pbbs.net -p2pchina.com -p2pcq.com -p2peye.com -p2peye.net -p2pguancha.com -p2phx.com -p2pjd.com -p2pjj.com -p2psearcher.org -p2psearchers.com -p2ptouhang.com -p2pxing.com -p2pxsj.com -p31.net -p3k3.com -p491gt.com -p4pp.com -p512.com -p5w.net -p8games.com -p99998888.com -pa18.com -pa1pa.com -paahu.com -paascloud.net -paat.com -pabulika.com -pacdn.com -paceroom.net -pacgatelaw.com -package-design.net -packtom.com -packty.com -pactera.com -padasuo.net -padding.me -paddlepaddle.org -paddlewaver.com -paedu.net -pagead-googlehosted.l.google.com -pageadmin.net -pagechoice.com -pagechoice.net -pagurian.com -pahaoche.com -pahou.com -pahx.com -pahys.com -pai-hang-bang.com -paibanxia.com -paichen.net -paidai.com -paidai.org -paidanzi.com -paidui.com -paiduidai.com -paihang114.com -paihang360.com -paihb.com -paihotels.cc -paiky.net -pailixiang.com -paimaprint.com -paiming.net -paintinghere.org -paipai.com -paipai123.com -paipaibang.com -paipaiimg.com -paipaitxt.com -paipianbang.com -paiqy.com -pairmb.com -paisen.site -paishanglai.net -paishi.com -paiwo.co -paixie.net -paixin.com -paiyiws.com -paizhe.com -paizi.com -pajkb.com -palace-international.com -palanceli.com -palm-h.com -palmestore.com -palmjoys.com -palmtrends.com -palmyou.com -pamau.com -pamss.net -pan-elektron.com -pan131.com -pan58.com -pan8.net -panabit.com -panbaidu.com -pancake.apple.com -pancake.cdn-apple.com.akadns.net -panchuang.net -pancishe.com -panda-home.com -panda.tv -panda321.com -panda98.com -pandadastudio.com -pandafoundation.org -pandahelp.vip -pandaimg.com -pandainc.cc -pandaminer.com -pandara.xyz -pandateacher.com -pandatv.com -pandoe.com -pandolia.net -pandownload.com -pandoxie.com -panduoduo.net -panduoduo.online -panfn.com -pangbu.com -pangcheng.com -pangci.cc -pangdly.com -pangdo.com -panggugu.com -panghuasheng.com -pangku.com -pangmao56.com -pangmaovc.com -pangoing.com -pangolin-dsp-toutiao.com -pangolin-sdk-toutiao-b.com -pangolin-sdk-toutiao.com -pangomicro.com -pangong88.com -pangqiu.com -pangshu.com -pangukj.com -panguso.com -pangxieke.com -pangzhan.net -panjindamibest.com -panjunwen.com -panku.cc -panmeme.com -pannacloud.com -panoeade.com -panoramastock.com -panpanr.com -panpay.com -panqibao.com -panshi101.com -panshianquan.com -panshixk.com -panshiyun.com -panshizz.com -panshy.com -pansino-solutions.com -pansj.cc -pansoso.com -pansou.com -pantrysbest.com -pantum.com -panweizeng.com -panyun.com -paoao.net -paobuqu.com -paochefang.com -paodoo.com -paofugroup.com -paojiao.com -paolanhuanbao.com -paomo.com -paomou.com -paopao.com -paopaoche.net -paopaohd.com -paopaox.com -paoshuba.cc -paoxq.com -paoxue.com -papa21.com -papa91.com -papaao.com -papaao.xyz -papaao1.com -papaao2.com -papaao3.com -papaao4.com -papaao5.com -papaao6.com -papaao7.com -papaao8.com -papajohnshanghai.com -papapoi.com -papaquan.com -paparecipe.net -papegames.com -paper.tv -paper211.com -paperask.com -paperbert.com -paperbus.com -paperbye.com -paperccb.com -paperclipclub.net -papercool.com -papereasy.com -papergod.com -paperisok.com -paperok.com -paperonce.org -paperopen.com -paperpass.com -paperpi.com -paperrater.net -paperright.com -papersay.com -papersee.com -papertime.cc -papertime.shop -papertime.vip -paperweekly.site -paperword.com -paperwrite.net -paperyy.com -papocket.com -paquapp.com -parallelsras.com -paratera.com -parawikis.com -parduscycle.com -parentshk.com -paris-bride.com -paris-sengfu.net -parkbees.com -parkchina.net -parkdaily.com -parkingjet.com -parkingquickly.com -parkmecn.com -parkviewgreen.com -parnassusdata.com -parryqiu.com -parsein.com -partinchina.com -partner.cdnetworks.com -partner.globalsign.com -parwix.com -pass7.cc -passby.me -passdesign.net -passer-by.com -passport.lenovo.com -passwordkeyboard.com -pat-edu.org -patachina.org -patchallin.com -patchew.org -patent-cn.com -patent9.com -patexplorer.com -patindex.com -patmm.com -patsev.com -patsnapglobal.com -paul.pub -pautoclub.com -paxdn.com -paxgl.com -paydxm.com -payeco.com -paylf.com -paymax.cc -paympay.com -payrao.com -paysapi.com -paytend.com -payxinyi.com -pb89.com -pbbpp4u.com -pbcan.com -pbcdn.com -pbhz.com -pblie.com -pbootcms.com -pbsidc.com -pbsvpn.com -pbtdl.com -pbtxt.com -pc-fly.com -pc02.com -pc120.com -pc120tv.com -pc18.net -pc34.com -pc51.com -pc521.net -pc5210.com -pc6.com -pc6a.com -pc70.com -pc811.com -pc840.com -pc841.com -pc9.com -pcaposter.com -pcb-hl.com -pcb-si.com -pcb3.com -pcb818.com -pcbask.com -pcbba.com -pcbbar.com -pcbbbs.com -pcbdoor.com -pcbeta.com -pcbhunt.com -pcbiot.com -pcbjob.com -pcbookcn.com -pcbres.com -pcbserve.com -pcbsheji.com -pcbtech.net -pcbtime.com -pccpa.hk -pccppc.com -pcdog.com -pcdrv.com -pceggs.com -pceva.net -pcfreetime.com -pcfuns.com -pcgeshi.com -pcgogo.com -pcgta.cc -pchome.com -pchome.net -pchpic.net -pciiss.com -pcitc.com -pcme.info -pcmgr-global.com -pcmoe.net -pcnsh.com -pcoic.com -pcp-china.com -pcpop.com -pcsee.org -pct86.com -pctowap.com -pctu.net -pctutu.com -pctutu.net -pctvx.com -pcviva.com -pcw365.com -pcwenti.com -pcwl.com -pcyangguangban.com -pd-sts.com -pd120.com -pd17.com -pd521.com -pdazw.com -pdbeta.com -pdcuo.com -pdd.net -pddcdn.com -pddeu.com -pddpic.com -pddugc.com -pdf-lib.org -pdf-tech.com -pdf.la -pdf00.com -pdf100.net -pdf1122.com -pdf5.net -pdfac.com -pdfbianji.com -pdfdo.com -pdfdowell.com -pdfexpert.cc -pdffsy.com -pdffx.com -pdfjia.com -pdflibr.com -pdfwang.com -pdfxd.com -pdfzj.com -pdgzf.com -pdidc.com -pdim.gs -pdm.so -pdosgk.com -pdown.org -pdrcfw.com -pdreading.com -pdryx.com -pdscb.com -pdsggzy.com -pdsgjj.com -pdskgb.com -pdsxww.com -pdszhtl.com -pdty123.com -pdvisa.com -pdxx.net -pe.vc -pe62.com -pe8.com -pe898.com -pea3nut.com -pea3nut.info -pea3nut.org -peace-read.com -peaceticket.com -peak-labs.com -pear.hk -pearlinpalm.com -pearvideo.com -peasrch.com -pec365.com -pediy.com -pedli.com -peento.com -peepic.com -peersafe.com.sg -peidu.com -peihao.space -peikua.com -peilian.com -peilian365.com -peilili.com -peiluyou.com -peiqiang.net -peise.net -peixun.net -peixun5.com -peixune.com -peixunmatou.com -peixunxue.com -peiyin.net -peiyinge.com -peiyou.com -peiyouwang.com -peizi.com -peizi0371.com -peizizhishu.com -pemap.com -pending-renewal-domain.com -pendoapp.com -peng001.com -pengchengenergy.com -pengfu.com -penging.com -pengjuan.com -pengke.com -penglaiu.com -penglei.name -pengpeng.com -pengpeng.la -pengqi.club -pengqian.win -pengrl.com -pengshengcaishui.com -pengxun1.com -pengyaou.com -pengyou.com -pengyoufx.com -pengyoujia.me -pengyoukan.com -pengyuwei.net -penhuijiqi.com -pentalaser.com -pentaq.com -penxiangge.com -peonyta.com -people-squared.com -peopleapp.com -peopleart.tv -peopledailypress.com -peoplenews.eu -peoplerail.com -peopleyuqing.com -pepcn.com -pepprpvc.vip -pepresource.com -perfect-input.com -perfect-is-shit.com -perfect99.com -perfectdiary.com -peropero.net -personpsy.org -perspectivar.com -pes-china.com -pesiv.com -pesyun.com -pet82.com -pet86.com -peter-zhou.com -petersonlian.com -petkit.com -petkoo.com -petmrs.com -petnakanojo.com -petpcb.com -petroren.com -pets12345.com -pettime.info -pettwo.com -pewld.com -pewsc.com -pexue.com -pf110.com -pf168.com -pf178.com -pf999.net -pfan123.com -pfchai.com -pfhoo.com -pfmcchina.org -pfwx.com -pg-leak.com -pg114.net -pg9997.com -pgbee.com -pgc.tv -pgcog.com -pgjcqm.com -pgl-world.com -pglstatp-toutiao.com -pgnan.com -pgsql.tech -pgsqldb.com -pgsqldb.org -pgyer.com -pgygho.com -pgyidc.com -pgysoft.com -pgzs.com -pgzx.net -phalapi.net -pharmcube.com -phaser-china.com -phb123.com -phdwu.com -phedu.net -phenixos.com -phezzan.com -phicomm.com -phida.net -philipswechat.com -philm.cc -phlexing.com -phnamedns.com -phnixpool.com -pho.so -phobos.apple.com -phodal.com -phoemix.net -phoenixos.com -phoenixtea.org -phoenixtv.com -phoent.com -phoer.net -phome.net -phone580.com -phonecoolgame.com -phonegap.me -phonegap100.com -phonekr.com -phopic.com -photo0086.com -photo3050.com -photoartiz.com -photocnc.com -photocome.com -photohn.com -photoint.net -photoneray.com -photopai.com -photops.com -photosanxia.com -photowoo.com -photoyunnan.com -photozoomchina.com -phouses.com -php-master.com -php-note.com -php-oa.com -php-z.com -php168.com -php2.cc -php230.com -php318.com -php7.site -phpbbchina.com -phpbloger.com -phpchina.com -phpcj.org -phpcom.net -phpcomposer.com -phpconchina.com -phpcoo.com -phpcto.org -phpddt.com -phpdr.net -phpe.net -phpernote.com -phperxuqin.com -phperz.com -phpfans.net -phpfdc.com -phpfs.com -phpha.com -phphub.org -phpjiami.com -phpjiayuan.com -phpkaiyuancms.com -phpkhbd.com -phpkoo.com -phpok.com -phpor.net -phppx.com -phprpc.org -phpsong.com -phpspider.org -phpstat.net -phpstudy.net -phpstudyimg.com -phpv.net -phpvar.com -phpvod.com -phpweb.net -phpweblog.net -phpwind.com -phpwind.net -phpxs.com -phpxy.com -phpyuan.com -phpyun.com -phys.net -physicalchina.vip -phyt88.com -phyy.com -phyy1.com -pi7.com -piadu.com -pianhd.com -pianke.me -pianohl.com -pianona.com -pianoun.com -piantou.net -pianwan.com -pianyim.com -pianyit.com -pianyiwan.com -pianyuan.net -pianziweb.com -piao.com -piao88.com -piao88.net -piao95.com -piaobuy.com -piaochong.com -piaodaren.com -piaode.ren -piaodown.com -piaohua.com -piaohuafl.com -piaojubao.com -piaoliang.com -piaolianghuay.com -piaoniu.com -piaoquantv.com -piaoshen.com -piaotian.org -piaotian.us -piaotian5.com -piaotongyun.com -piaowutong.cc -piaoxian.net -piaoxingqiu.com -piaoyang.tk -piaoyi.org -piaoyun.net -piaoyunwu.com -piaozhilan.com -piaozone.com -piasy.com -pic138.com -pic16.com -pic21.com -pic720.com -picatown.com -picc.com -piccamc.com -picchealth.com -piccjs.com -picooc.com -picosmos.net -picp.io -picp.net -pictureknow.com -picup.shop -picxiaobai.com -picyq.com -pidcn.com -pieeco.com -piekee.com -piekee.net -pieshua.com -pifa333.com -pifukezaixian.com -pig.ai -pig4cloud.com -pig66.com -pigai.org -pigcms.com -pigjian.com -pigqq.com -pigx.vip -pigxv.com -pigzz.com -pihitech.com -piikee.net -piimg.com -piios.com -piis.pw -pikacn.com -pikatao.com -pilaipiwang.com -pili-zz.net -pilibaba.com -pilidns.com -pilifu.com -pilifx.com -pimei.com -pin-color.net -pin-qu.com -pin18pin.com -pin5i.com -pinbaitai.com -pinbang.com -pinbayun.com -pincai.com -pincai360.com -pinchain.com -pinduoduo.com -pinduoduo.net -pineprint.com -ping-jia.net -ping-qu.com -ping.ubnt.com -pingan.com -pingan.com.hk -pingancdn.com -pinganfang.com -pinganwj.com -pinganyun.com -pingapple.com -pingcap.com -pingcoo.com -pingfangx.com -pingfenbang.com -pinggu.com -pinggu.org -pingguobaoxiu.com -pingguodj.com -pingguolv.com -pinghe.com -pinghui-cn.com -pingjiata.com -pingnanlearning.com -pingnuosoft.com -pingpang.info -pingpangwang.com -pingpingw.com -pingpingze.com -pingplusplus.com -pingpongx.com -pingshu8.com -pingshuku.com -pingshuocoal.com -pingstart.com -pingtan6.com -pingtandao.com -pinguangapp.com -pinguo.us -pingwest.com -pingxiaow.com -pingxonline.com -pingxuan123.com -pingxx.com -pingyin.cc -pingyou.cc -pingyumarathon.com -pinhaohuo.com -pinhecha.com -pinhuba.com -pinhui001.com -pinidea.co -pinjiaolian.com -pinjie.cc -pinkecity.com -pinkertech.com -pinkobaby.com -pinkoichina.com -pinla.com -pinlian.net -pinmanduo.com -pinmie.com -pinmuch.com -pinpai1.com -pinpaidadao.com -pinpailiu.com -pinpailun.com -pinpaiv.com -pinruan.net -pinshan.com -pinshiwen.com -pinshu.cc -pinshu.com -pinsilianzu1.com -pintour.com -pintu360.com -pintuan.com -pintuer.com -pintuxiu.net -pinuc.com -pinwenba.com -pinyuan.cc -pinyuew.com -pinyuncloud.com -pinzhikeji.net -pinzs.com -pioneerlinux.com -pioneersci.com -pioneertimes.net -pipa.com -pipacdn.com -pipacoding.com -pipahealth.com -pipapai.com -pipaw.com -pipaw.net -pipedetect.com -pipikou.com -pipimp3.com -pipipan.com -pipipifa.com -pipiti.com -pipix.com -pipiyys.com -pipsemi.com -piqs.com -pisx.com -pites.cc -pitess.cc -piworker.com -pix2code.net -pixelauth.com -pixhey.com -pixivacg.com -pixivic.com -pixivic.net -piyingke.com -piyipiba.com -pj-road.com -pj.com -pj00001.com -pj155.com -pjbest.com -pjf.name -pjhome.net -pjhubs.com -pjialin.com -pjjs2.com -pjjyzx.com -pjnoi.com -pjob.net -pjrcn.com -pjtime.com -pjtx.net -pk052.com -pk106.com -pk10fh.com -pk1352.com -pk1xia.com -pk2234.com -pk361.com -pk532.com -pk571.com -pk995.com -pkbeta.com -pkbff.com -pkbigdata.com -pkbkok.com -pkdyplayer.com -pkfj.xyz -pkgklk.com -pki-goog.l.google.com -pkm360.com -pkmmo.com -pko123.com -pkoplink.com -pkpk.com -pkpky.com -pkpmsoft.com -pkq2016.com -pksfc.com -pksky.com -pku-hit.com -pku-lvxin.com -pku666.com -pkubr.com -pkucat.com -pkufh.com -pkulaw.com -pkulaws.com -pkurc.com -pkusky.com -pkusp.com -pkuszh.com -pkvs.com -pkzx.com -plaidc.com -plalzhang.com -planckled.com -planetmeican.com -planoi.com -plantextra.com -plantname.xyz -plantower.com -plas2006.com -plateno.cc -plateno.com -platenogroup.com -platinum-traveller.com -platinumchina.com -play-analytics.com -play68.com -play700.com -play86.com -play910.com -playbeta.net -playcomet.jp -playcrab.com -playcvn.com -playfifa.com -playlu.com -playnail.com -playpangu.com -playpi.org -playsm.com -playstudy.com -playtai.com -playtai.net -playuav.com -playwonderful.com -playwx.com -playyx.com -plcdn.net -plcent.com -plcloud.com -plcsq.com -pldba.com -plesk-cn.com -plexjiasuqi.com -plob.org -plotcup.com -plqdf.com -plsmspx.com -plsub.com -pluosi.com -plures.net -plusgantt.com -plusplustu.com -plutuspay.com -pluvet.com -plycd.com -plyz.net -pm-summit.org -pm222.com -pm25.com -pm25.in -pm265.com -pm28.com -pm360.com -pm360.net -pmacasia.com -pmcaff.com -pmdak.com -pmdaniu.com -pmec.net -pmichina.org -pmish-tech.com -pmkiki.com -pmovie.com -pmparkchina.com -pmppcc.net -pmptuan.com -pmquanzi.com -pmr66.com -pmsra.com -pmtalk.club -pmtoo.com -pmtown.com -pmway.com -pmxprecision.com -pmxsd.com -pmyes.com -pmyuanxing.com -pn66.com -pnetp.org -pngbag.com -pngui.com -pnlyy.com -pnol.net -pnp8.com -pnwww.com -pnxs.com -pnzpw.com -pobaby.net -pobasoft.com -pobiji001.com -poboo.com -pocc.cc -pocketdigi.com -pocketuni.net -pocomagnetic.com -pocosite.com -pocsuite.org -podinns.com -poem88.com -poemaster.com -poemlife.com -pohaier.com -pohover.com -poikm.com -poizon.com -poj.org -pojaa.com -pojd700.cc -pokemmc.com -pokemon-unitepgame.com -pokemon.name -pokermate.net -poketec.com -pokooo.com -polaris-vc.com -polarws.moe -polarxiong.com -polaxiong.com -polayoutu.com -polebrief.com -polingba.com -poluoluo.com -polycent.com -polycn.com -polycom-china.com -polycom-jl.com -polyhotel.com -polyhz.com -polytheatre.com -polytheatresz.com -polyv.net -polywuye.com -pomears.com -pomoho.com -ponley.com -ponycool.com -ponytest.com -ponytestqd.com -ponytestsh.com -ponytestsz.com -poo1.club -pooban.com -poobbs.com -poocg.com -poocg.me -pooioo.com -pook.com -pooluo.com -poorren.com -pooy.net -pop-bags.com -pop-fashion.com -pop-shoe.com -pop136.com -pop800.com -popasp.com -popdg.com -popgo.org -popiano.org -popkart.tv -popkx.com -popmart.com -popmsg.com -popoho.com -popoxiu.com -poppace.com -poppur.com -popqiu.com -popsoft.com -popu.org -popumed.com -poputar.com -popziti.com -poqsoft.com -porlockz.com -porschesky.com -portablesoft.org -portalcdn.cdnetworks.com -ports-intl.com -pos.gold -posbar.com -poseidon.dl.playstation.net -poseidong.com -posfree.com -positivisten.com -posn.net -post183.net -postcha.com -posterlabs.com -postgres.fun -postgresqlchina.com -postjson.com -postpony.com -posuiji168.com -potevio.com -potianji.net -potplayer.org -potplayercn.com -pouchcontainer.io -poukao.com -poweizu.com -power-bd.com -power-sensor.com -powerbibbs.com -powercdn.com -powerde.com -powereasy.net -poweric-china.com -powerlaw.ai -powerleadercdn.com -powerleaderidc.com -powerskystudio.com -powervision.me -powerxene.com -powzamedia.com -poxiaotv.com -pozou.com -pp-sp.com -pp-xxgd.com -pp.cc -pp00.com -pp100.com -pp130.com -pp1o.com -pp25.com -pp250.com -pp51.com -pp6.cc -pp63.com -pp66.cc -pp70.com -pp8.com -pp9570.com -pp9l.com -ppaikd.com -ppbizon.com -ppcall.com -ppchuguan.com -ppcn.net -ppcode.com -ppcost.com -ppdai.com -ppdaicdn.com -ppdd.com -ppdesk.com -ppdqk.com -ppduck.com -ppfeng.com -ppfw.org -ppgame.com -pphimalayanrt.com -ppio.cloud -ppj.io -ppkankan01.com -ppkanshu.com -ppkao.com -pplib.net -pplive.com -ppliwu.com -pplock.com -ppm2.com -ppmake.com -ppmm.org -ppmoney.com -ppmoney.net -ppnames.com -pppet.net -pppie.com -pppoevps.com -pppoo.com -ppppgps.com -ppppic.com -ppqq.net -pps.tv -ppsao.com -ppsimg.com -ppslsa.com -ppsoftw.com -ppspain.com -ppsport.com -ppstream.com -ppstream.net -ppstv.com -ppswan.com -ppt118.com -ppt123.net -ppt360.com -ppt920.com -pptair.com -pptake.com -pptbest.com -pptboss.com -pptbz.com -pptelf.com -ppthi-hoo.com -pptjia.com -pptmall.net -pptmao.com -pptmind.com -pptok.com -pptschool.com -pptshop.com -pptstore.net -pptv.com -pptvyun.com -pptxy.com -ppurl.com -ppvi.net -ppvod.net -ppwan.com -ppwwyyxx.com -ppxclub.com -ppxhw.com -ppxs.net -ppxwo.com -ppys.net -ppys5.com -ppzhan.com -ppzhilian.com -ppzuche.com -ppzuowen.com -pqdtcn.com -pqpo.me -pqt-bearing.com -pqyhigh.com -pqylow.com -pqymiddle.com -pqzhichan.com -prcedu.com -prcee.org -pre-sence.com -precise-test.com -precision-biz.com -prefer-tyl.site -prefershare.com -preludeid.com -premedglobal.com -press-sci.com -prestolite-bj.com -prfc-cn.com -prfog.com -prfuxl.xyz -pricl.com -primegoalgroup.com -primerachina.com -primeton.com -princeblog.com -princeuk.org -print86.com -printer-china.com -printerwhy.net -printhome.com -printlake.com -prior24.com -prismcdn.com -privateadx.com -privatess.win -privspace.net -prjdrj.com -pro6e.com -procar.cc -process-safety-lab.com -processon.com -prod-support.apple-support.akadns.net -product1.djicdn.com -productivity.wiki -proginn.com -programfan.com -programmer.group -programschool.com -progressingeography.com -prohui.com -project-oa.com -projectaker.com -projector-window.com -projky.com -prolto.com -promisingedu.com -promoadx.com -propsad.com -proresearch.org -protect-file.com -prototype.im -providence-chemicals.com -prowritingteam.com -proxyipa.com -proya-group.com -proya.com -proyy.com -prts.wiki -przhushou.com -przwt.com -ps265.com -ps314.com -psbc.com -psc4d.com -psd.net -psd8.com -psdiv.com -pse-meti.com -psgui.com -psing.tech -psjay.com -psjxty.com -psnine.com -psoneart.com -pssclub.com -pstatp.com -pstips.net -pstxg.com -psy-1.com -psyapp.com -psychcn.com -psychspace.com -psysh.com -psyzg.com -pszx.com -pszxw.com -pszyzxh.org -pt-bus.com -pt-link.com -pt008.com -pt80.com -pt80.net -ptalking.com -ptausercontent.com -ptbus.com -ptc-asia.com -ptcloud.info -ptcxmy.com -ptd100.com -ptd99.com -ptdsh.com -ptfdc.com -ptfish.com -pthc1.com -pthc8.com -pthxuexi.com -ptimg.org -ptkill.com -ptleju.com -ptmind.com -ptorch.com -ptotour.com -ptpcp.com -ptteng.com -ptweixin.com -ptxz.com -ptyg.com -ptyly.com -ptyqm.com -pua.hk -pua001.com -puaas.com -puahome.com -puaihospital.net -puasu.com -puata.info -pubchn.com -pubg8x.com -publiccms.com -pubmed007.com -pubone.cc -pubsage.com -pubukeji.com -pubuo.com -pubyun.com -puchake.com -pucms.com -pudaquan.com -pudn.com -pudongwater.com -puduoduo123.com -puduzhai.com -puem.org -puercha.cc -puercn.com -puertea.com -pufa5.org -pufei.net -pufei.org -pufei8.com -puhuacapital.com -puhuahui.com -puiedu.com -puji114.com -pujia8.com -pujiaba.com -pujiahh.com -pukinte.com -pulisi.com -pullword.com -pullywood.com -pulsigame.com -pumpvip.com -punaide.com -punakong.com -punchbox.info -punchbox.org -puoke.com -pupuapi.com -pupugo.com -pupumall.com -pupumall.net -pupurazzi.com -pupuwang.com -purcotton.com -purcow.com -pureage.info -pureasme.com -purecpp.org -pureh2b.com -purenyy.com -puronglong.com -puroyal.com -pusa123.com -push2u.com -pushauction.com -pushenbbs.com -pushgrid.net -pushjoy.com -pushthink.com -pushtime.net -puss7.com -putao.so -putaoa.com -putaocdn.com -putaogame.com -putaojiu.com -putclub.com -putdb.com -putian508.com -putiandai.com -putitt.com -putonsoft.com -putop.net -puusa.net -puwenlong.com -puworld.com -puyuecs.com -puyuehui.com -puyurumen.com -puzeyf.com -pv001.net -pv265.com -pv4b.com -pvc123.com -pvkj.com -pvmama.com -pvpin.com -pw1999.com -pw88.com -pwmis.com -pwmqr.com -pwp.ink -pwrd.com -pwsannong.com -px0571.com -px5a.com -pxb7.com -pxcn168.com -pxdsm.com -pxemba.com -pxr0.com -pxsky.net -pxtsc.com -pxtu.com -pxtx.com -pxx.io -py-axa.com -py.com -py1314.com -py168.com -py3study.com -py40.com -py6.com -py94.com -pyadx.com -pyasfunds.com -pychina.org -pycxjj.com -pyddd.com -pyer.site -pygdzhcs.com -pyguanf.com -pyhead.com -pyjia.com -pyjsh.com -pyk868.com -pyker.com -pylhotel.com -pylist.com -pyneo.com -pynote.net -pyou.com -pysmei.com -pystarter.com -pytgo.com -python-china.com -python88.com -pythonav.com -pythonclub.org -pythondoc.com -pythoner.com -pythonheidong.com -pythonpub.com -pythontab.com -pythontip.com -pytorchtutorial.com -pyxjiang.com -pyxk.com -pyxww.com -pyydhg.com -pyyiyou.com -pyynsm.com -pyyx.com -pz6.com -pz6682.com -pzds.com -pzhccb.com -pzhht.com -pzjdimg.com -pzjiadian.com -pzlink.com -pznews.com -pznrfsy.com -pznsh.com -pzoom.com -pztuan.com -q-5.net -q-dazzle.com -q-supreme.com -q1.com -q1qfc323.com -q1qq2.com -q2ak.com -q2d.com -q2zy.com -q3060.com -q5.com -q578.com -q68.com -q6haqi.com -q6u.com -q77777777.com -qacn.net -qalex.com -qaqgame.com -qast.com -qaxanyu.com -qaxcloudwaf.com -qaxwzws.com -qazxsdc.com -qb5.tw -qb5200.co -qb5200.tw -qbangmang.com -qbao.com -qbaobei.com -qbaoting.com -qbb6.com -qbdcc.com -qbdgame.com -qbeenslee.com -qbitai.com -qbj8.com -qbjrxs.com -qbox.me -qbox.net -qbtlk.com -qbview.com -qbwu.net -qbxs5.com -qbxz.com -qc-dds.net -qc-hr.com -qc027.com -qc178.com -qc188.com -qc56.org -qc6.com -qcc.com -qccip.com -qccost.com -qccr.com -qccrm.com -qcdrp.com -qcds.com -qcenglish.com -qcgcj.com -qchem.pw -qches.com -qchouses.com -qcjkjg.com -qcjslm.com -qckuaizhi.com -qcloud.com -qcloud.la -qcloudcdn.com -qcloudcjgj.com -qcloudimg.com -qcloudmail.com -qcloudwzgj.com -qcloudzygj.com -qcmoke.site -qcmrjx.com -qcmuzhi.com -qcoco.com -qconbeijing.com -qconshanghai.com -qcplay.com -qcq3.com -qcql.com -qcr.cc -qcr365.com -qcrlapp.com -qcsdn.com -qcsj.com -qcstudy.com -qctsw.com -qcwan.com -qcwdpt.com -qcwhw.com -qcwlpay.com -qcwlseo.com -qcwxjs.com -qcwyxx.com -qcy.com -qcymall.com -qcyoung.com -qd-metro.com -qd256.com -qd315.net -qdac.cc -qdaeon.com -qdaiduo.com -qdaily.com -qdairlines.com -qdbdsk.com -qdcaijing.com -qdccb.com -qdccdl.com -qdcdn.com -qdcdpjw.com -qdcent.com -qdcu.com -qdcypf.com -qdcz.com -qddown.com -qdds.net -qdfuns.com -qdgege.com -qdgw.com -qdgxqrc.com -qdgxzg.com -qdhantang.com -qdhsty.com -qdingnet.com -qdjiejie.com -qdjimo.com -qdjjwsjf.com -qdjnbgjj.com -qdjxhz.com -qdkebang.com -qdkingst.com -qdkongtiao.com -qdlanrun.com -qdliye.com -qdlongre.com -qdmama.net -qdmcxh.com -qdmm.com -qdnsyh.com -qdooc.com -qdpdjx.com -qdppc.com -qdpr.com -qdqihang.com -qdqunweite.com -qdsay.com -qdsbx.com -qdsdds.com -qdshitangchengbao.com -qdsntsg.com -qdsysj.com -qdtgood.com -qdthgs.com -qdtongxinedu.net -qdtvu.com -qdtz.com -qdwenxue.com -qdwght.com -qdwsb.com -qdxfgy.com -qdxtcw.com -qdyijiamei.com -qdymjy.com -qdyudie.com -qdyxbyy.com -qdzhengkang.com -qdzmm.com -qdznjt.com -qdzxyy.com -qdzz.com -qechu.com -qeebike.com -qeefee.com -qeegee.com -qeejoo.com -qeeka.com -qeeniao.com -qeerd.com -qefee.com -qefeng.com -qeto.com -qf.rs -qf027.com -qfang.com -qfangimg.com -qfcm.net -qfedu.com -qfeiche.com -qfgolang.com -qfihdr.com -qfpay.com -qfq.me -qfrxyl.com -qfsxjf.com -qfsyj.com -qftouch.com -qfun.com -qg.net -qg108.com -qgbzyzl.com -qgcyjq.org -qgdyc.net -qgdz222.com -qgenius.com -qgpx.com -qgren.com -qgsydw.com -qgtql.com -qguiyang.com -qgvps.com -qgw.tm -qgwsp.com -qgxl.org -qgysj.org -qgzzz.com -qh-cdn.com -qh-lb.com -qh.dlservice.microsoft.com -qh.la -qh0534.net -qh24.com -qh5800.com -qhass.org -qhbtv.com -qhcdn.com -qhchcb.com -qhclass.com -qhd.net -qhdatongnews.com -qhdczzs.com -qhdfxkj.com -qhdgjj.com -qhdjcbj.com -qhdnews.com -qhdren.com -qhdymdc.com -qhea.com -qhee-ma.com -qhee.com -qhfax.com -qhfx.net -qhgxq.com -qhgy.net -qhimg.com -qhimgs0.com -qhimgs1.com -qhimgs3.com -qhimgs4.com -qhimi.com -qhjyks.com -qhkyfund.com -qhlhfund.com -qhlingwang.com -qhlly.com -qhm123.com -qhmed.com -qhmsg.com -qhnews.com -qhnode.com -qhong.net -qhpcc.com -qhpk.net -qhpta.com -qhrcsc.com -qhres.com -qhres2.com -qhscw.net -qhserver.com -qhsetup.com -qhsklw.com -qhstatic.com -qhstv.com -qhsxf.net -qhtibetan.com -qhtycp.com -qhupdate.com -qhwh.com -qhwmw.com -qhxiaoshuo.com -qhxmlyts.com -qhxyms.com -qhxz.com -qhyccd.com -qhyedu.com -qhyzzzs.com -qi-che.com -qi-ju.com -qi-wen.com -qiachu.com -qiaiou.com -qiak.com -qiakr.com -qialol.com -qian-gua.com -qian10.net -qianba.com -qianbao.com -qianbao666.com -qianbaocard.com -qianbaohr.com -qiancheng.me -qianchengriben.com -qiandaqian.com -qiandd.com -qianduan.com -qianduanblog.com -qianduanfan.com -qiandw.com -qianfan123.com -qianfan365.com -qianfangzy.com -qianfanyun.com -qiang100.com -qiangchezu.com -qiangchuan.com -qianggen.com -qianggongzhang.com -qianggou5.com -qiangidc.vip -qiangka.com -qianglihuifu.com -qiangmi.com -qiangqiang5.com -qianhai12315.com -qianhaiaiaitie.com -qianhaibs.com -qianhuanhulian.com -qianhuaweb.com -qianhujz.com -qianinfo.com -qianjia.com -qianjiayue.com -qianjin5.com -qianjing.com -qianjins.com -qianju.org -qianka.com -qiankun.su -qianliao.net -qianliao.tv -qianliaowang.com -qianlima.com -qianlimafile.com -qianlinkj.com -qianlong.com -qianlongnews.com -qianluxiaoshuo.com -qianmaiapp.com -qianmaidao.com -qianmi.com -qianmingyun.com -qianmo.info -qianmoqi.com -qianmu.org -qianniu.com -qianpailive.com -qianpen.com -qianpin.com -qianqi.net -qianqian.com -qianqiankeji.xyz -qianqiantao.com -qianqianxs.com -qianqu.cc -qianquduo.com -qianrenge.cc -qianrihong.net -qianrong.me -qiansw.com -qiantucdn.com -qianvisa.com -qianw.com -qianwa.com -qianwee.com -qianxiangbank.com -qianxibj.net -qianxin.com -qianxinet.com -qianxs.com -qianxun.com -qianyan.biz -qianyan001.com -qianyu56.com -qianyuangx.com -qianyue999.com -qianyuwang.com -qianzhan.com -qianzhan123.com -qianzhengbanliliucheng.com -qianzhengdaiban.com -qianzhu8.com -qiao024.com -qiao88.com -qiaobo.net -qiaobutang.com -qiaochucn.com -qiaodan.com -qiaofangyun.com -qiaofanxin.com -qiaohu.com -qiaohuapp.com -qiaohuisland.com -qiaohumall.com -qiaojiang.tv -qiaomi.com -qiaomukeji.com -qiaoshenghuo.com -qiaotu.com -qiaoxuanhong.com -qiaoyi.org -qiaoyou020.com -qiaqa.com -qiaqiafood.com -qiawei.com -qibang123.com -qibingdaojia.com -qibo168.com -qibookw.com -qibosoft.com -qibuluo.com -qibuzw.com -qicaispace.com -qicaitechan.com -qicaixianhua.com -qicaizz.com -qichacha.co -qichacha.com -qichacha.net -qichamao.com -qichecailiao.com -qichechaoren.com -qichegeyin.com -qichehot.com -qichetong.com -qichexin.com -qichezhan.net -qichuang.com -qichuangidc.com -qicn.net -qicolor.com -qicp.net -qicp.vip -qida100.com -qidasoft.com -qidewang.com -qidian.com -qidiandasheng.com -qidianjob.com -qidianla.com -qidiantu.com -qidic.com -qidisheng.com -qidisheng.net -qidiwang.com -qidong.co -qidong.name -qidongyx.com -qidou.com -qiduocloud.com -qiduowei.com -qiecdn.com -qieerxi.com -qieman.com -qiepai.com -qieseo.com -qieta.com -qietu6.com -qieying.com -qieyou.com -qieyuedu.com -qiezip.com -qifake.com -qifangw.com -qifeiye.com -qifub.com -qifuedu.com -qifun.com -qifuwang.com -qigongworld.net -qiguo.com -qiguoread.com -qihaoip.com -qihaxiaoshuo.com -qihihi.com -qihoo.com -qihoo.net -qihu.com -qihucdn.com -qihuiwang.com -qihuor.com -qihuorumen.com -qii404.me -qiigame.com -qiiii.net -qijee.com -qiji.tech -qijiadianzi.com -qijianzs.com -qijiapay.com -qijiarui-test.com -qijilvxing.com -qijishow.com -qijizuopin.com -qijoe.com -qijuan.com -qijuib.com -qik339.com -qikan.com -qikan123.com -qikanol.com -qikanw.com -qikegu.com -qikoo.com -qikqiak.com -qiku-cloud.com -qiku.com -qikuailianwang.com -qikucdn.com -qikula.com -qilang.net -qilanxiaozhu.co -qilanxiaozhu.net -qilecms.com -qilinchess.com -qilindao.com -qiling.org -qilingames.com -qilinxuan.net -qilong.com -qilongtan.com -qiluhospital.com -qiluhua.com -qiluivf.com -qiluyidian.mobi -qiluyidian.net -qima-inc.com -qiman5.com -qiman6.com -qimaren.com -qimengshangwu.com -qimi.com -qiming.info -qiming868.com -qimingcx.com -qimingdao.com -qimingpian.com -qimingvc.com -qimingventures.com -qimingwang123.com -qimingzi.net -qimiwang.com -qimo.biz -qimodesign.com -qimser.com -qin.com -qin08.com -qiname.net -qinbei.com -qinbing.com -qinbing114.com -qinblog.net -qincai.com -qincaigame.com -qinchacha.com -qinchu123.com -qinco.net -qineasy.com -qinfan.xyz -qinfukai.com -qing-shan.com -qing.su -qing5.com -qingbh.com -qingcache.com -qingcdn.com -qingchifan.com -qingchu.com -qingchunbank.com -qingchunyoufan.com -qingcigame.com -qingclass.cc -qingclass.com -qingclasscdn.com -qingcloud.com -qingdaochina.org -qingdaograndtheatre.com -qingdaogxt.com -qingdaomaidige.com -qingdaomedia.com -qingdaomuseum.com -qingdaonews.com -qingdaoren.com -qingdaoticai.com -qingdou.net -qingfanqie.com -qingflow.com -qingfo.com -qingfuyun.com -qingfuzaixian.com -qingge100.com -qinggl.com -qingguo.com -qinghe.tv -qingheluo.com -qinghua.cc -qinghua2017.com -qinghua5.com -qinghuaonline.com -qinghuaxuezi.com -qinghuo.net -qingjiaocloud.com -qingju.com -qingkan.tw -qingkeji.com -qingkuaipdf.com -qinglanji.com -qingliange.com -qinglin.net -qingliulan.com -qinglm.com -qinglue.net -qingman5.com -qingmang.mobi -qingmayun.com -qingmei.me -qingmo.com -qingmob.com -qingnianlvxing.com -qingnianwang.com -qingpanduola.com -qingpinji.com -qingqikeji.com -qingqin.com -qingquwu.net -qingrenw.com -qingruanit.net -qingshow.net -qingsj.com -qingsong123.com -qingsongchou.com -qingstor.com -qingsuancn.com -qingsucai.com -qingsword.com -qingtaoke.com -qingtengzhilian.com -qingtian16265.com -qingtiancms.net -qingtin.com -qingting.fm -qingting123.com -qingtingfm.com -qingtingip.com -qinguanjia.com -qingwawa.com -qingwk.com -qingxiaoyun.com -qingxuetang.com -qingyougames.com -qingyungou.com -qingzhanshi.com -qingzhiwenku.com -qingzhouaote.com -qingzhu.co -qiniao.com -qiniu.com -qiniu.in -qiniu.io -qiniuapi.com -qiniucdn.com -qiniudn.com -qiniudns.com -qiniukodo.com -qiniup.com -qiniupkg.com -qiniutek.com -qiniuts.com -qinlake.com -qinms.com -qinpu.com -qinqiang.org -qinqin.com -qinqinxiaobao.com -qinsmoon.com -qinto.com -qinwanghui.com -qinxue.com -qinxue100.com -qinxue365.com -qinxuye.me -qinyi.net -qinzc.me -qinzhe.com -qinzhou8.com -qinzi7.com -qinzidna.com -qinziheng.com -qiongdy.com -qionghaif.com -qiongming.com -qiongri.com -qipacao.com -qipaifan.com -qipamaijia.com -qipeiren.com -qipeisyj.com -qipeng.com -qiqici.com -qiqids.com -qiqilm.com -qiqipu.com -qiqipu.tv -qiqiuyu.com -qiqiuyun.net -qiqivv.com -qiqiww.com -qiqu.la -qiquhudong.com -qiqutang.com -qiquting.com -qire123.com -qiredy.com -qiremanhua.com -qirexiaoshuo.com -qirui.com -qisbook.com -qishenga.com -qishixitong.com -qishixunmei.com -qishu.cc -qishu.co -qishu.tw -qishunbao.com -qisool.com -qisuu.la -qita.love -qitete.com -qiti88.com -qitian.biz -qitiancom.com -qitoon.com -qiu-ai.com -qiubiaoqing.com -qiucinews.com -qiudao.net -qiudian.net -qiufaqf.com -qiufengblog.com -qiugonglue.com -qiugouxinxi.net -qiujiaoyou.net -qiujieyl.com -qiujuer.net -qiujunya.com -qiukuixinxi.com -qiumei100.com -qiumeiapp.com -qiumibao.com -qiumijia.com -qiuquan.cc -qiushi.com -qiushibaike.com -qiushibang.com -qiushile.com -qiushu.cc -qiushubang.com -qiushuge.net -qiushuzw.com -qiusuoge.com -qiutianaimeili.com -qiuweili.com -qiuwu.net -qiuxue360.com -qiuyexitong.com -qiuyueban.com -qiuyuewenxue.com -qiuyumi.com -qiuzhang.com -qiuzhijiangtang.com -qiuziti.com -qiuziyuan.net -qivsod.com -qiwen001.com -qiwen007.com -qiwen8.com -qiwendi.com -qiwenhui.com -qixia.ltd -qixiandoc.com -qixifuren.com -qixin.com -qixin007.com -qixin18.com -qixincha.com -qixing123.com -qixing318.com -qixingcdn.com -qixingcr.com -qixingquan.com -qixingtang.com -qixoo.com -qixuan520.com -qiyabi.vip -qiye.la -qiye.net -qiye163.com -qiye8848.com -qiyegongqiu.com -qiyegongqiu.net -qiyegu.com -qiyeku.com -qiyenet.net -qiyeshangpu.com -qiyeshangpu.net -qiyetuozhan.com -qiyeweixin.com -qiyewenhua.net -qiyexinyong.org -qiyexun.com -qiyexxw.com -qiyeyouxiang.net -qiyi.com -qiyicc.com -qiyimusic.com -qiyipic.com -qiyou.com -qiyouji.com -qiyoujiage.com -qiyouwang.com -qiyouworld.com -qiyouyuan.com -qiytech.com -qiyuange.com -qiyucloud.com -qiyue.com -qiyuebio.com -qiyuesuo.com -qiyujiasu.com -qiyukf.com -qiyukf.net -qiyukid.com -qiyunbook.com -qiyuntong.com -qiyunworld.com -qiyutianxia.com -qizhanming.com -qizheplay.com -qizhihaotian.com -qizhuyun.com -qizi.la -qizuang.com -qj023.com -qj258.com -qj26.com -qjbian.com -qjcz.com -qjdywhyq.com -qjfy.com -qjherb.com -qjhlw.com -qjhm.net -qji.cc -qjimage.com -qjishu.com -qjkc.net -qjmotor.com -qjrc.com -qjren.com -qjsb88.com -qjshe.com -qjsmartech.com -qjtrip.com -qjwhzs.com -qjxgold.com -qjy168.com -qjystang.com -qk365.com -qkagame.com -qkan.com -qkang.com -qkblh.com -qkcdn.com -qkeke.com -qkhtml.com -qkkjd.com -qkl123.com -qknown.com -qksw.com -qktoutiao.com -qktsw.vip -qkvop.com -qkzj.com -ql-cellbank.com -ql18.mobi -ql1d.com -ql47.com -ql789.com -qlbchina.com -qlchat.com -qlcoder.com -qldzj.com -qlgpy.com -qlidc.com -qljgw.com -qll-times.com -qlmoney.com -qlotc.net -qlpe8.com -qlpw.net -qlrc.com -qls.fun -qlteacher.com -qluu.com -qlwmw.com -qlxiaozhan.com -qlxol.com -qm000.com -qm120.com -qm989.com -qmacro.com -qmail.com -qmango.com -qmcaifu.com -qmcmw.com -qmconfig.com -qmei.me -qmei.vip -qmengyun.com -qmht.com -qmht.mobi -qmitao.com -qmqm.net -qmrobot.com -qmsjmfb.com -qmtj.net -qmtk.com -qmtv.com -qmwtp.com -qmz5.com -qmzs.com -qnbar.com -qnche.com -qncye.com -qncye.net -qncyw.com -qndb.net -qnfuli.com -qngslb.com -qnhuifu.com -qnjslm.com -qnl1.com -qnmlgb.tech -qnmsq.com -qnqcdn.com -qnqcdn.net -qnsb.com -qnsdk.com -qnssl.com -qntz.cc -qnvod.net -qnydns.com -qnydns.net -qooboo.com -qoocc.com -qooic.com -qookar.com -qosq.com -qp110.com -qp2c.com -qp46.com -qp832.com -qp8u.com -qpb187.com -qpdiy.com -qpgame.com -qplus.com -qpoc.com -qpstar.com -qpx.com -qpxiaoshuo.com -qpzq.net -qq-xmail.com -qq.cc -qq.ci -qq.com -qq.do -qq.net -qq.tc -qq123.xin -qq163.cc -qq163.com -qq163.tv -qq190.com -qq2009.com -qq214.com -qq387.com -qq5.com -qq52o.me -qq545.com -qq5818.com -qq717.com -qq7c.com -qq8868.com -qq933.com -qqahz.net -qqaiqin.com -qqaishu.com -qqan.com -qqapk.com -qqba.com -qqbaobao.com -qqbiaoqing.com -qqbiaoqing8.com -qqbibile.com -qqbite.com -qqcedsrc.com -qqcf.com -qqcg.com -qqchu.com -qqcjw.com -qqdcw.com -qqdeveloper.com -qqdiannao.com -qqdiannaoguanjiadl.com -qqdna.com -qqdswl.com -qqe2.com -qqenglish.com -qqeo.com -qqfangke.com -qqgb.com -qqgd.com -qqgexing.com -qqgx.com -qqgyhk.com -qqhao123.com -qqhaoniu.com -qqhbx.com -qqhelper.net -qqhot.com -qqhuhu.com -qqixk.com -qqjay.com -qqje.com -qqjia.com -qqjishuwang.com -qqjjsj.com -qqju.com -qqjyo.com -qqkqw.com -qqkrmotors.com -qqku.com -qqkuyou.com -qqkw.net -qqleju.com -qqlin.net -qqlyjt.com -qqm98.com -qqma.com -qqmail.com -qqmcc.org -qqmofasi.com -qqmoke.com -qqmtc.com -qqmusic.com -qqnn.net -qqodjn.com -qqokk.com -qqopenapp.com -qqpao.com -qqpifu.com -qqppt.com -qqq.tv -qqqiyemail.com -qqqnm.com -qqqq.com -qqqqqqqqqqqqq.com -qqread.com -qqride.com -qqrizhi.com -qqro.com -qqshark.com -qqshidao.com -qqshuoshuo.com -qqsk.com -qqsm.com -qqsort.com -qqssly.com -qqstudent.com -qqsurvey.net -qqt6.com -qqteacher.com -qqtest.com -qqtf.com -qqtlr.com -qqtn.com -qqtouxiangzq.com -qqtss.net -qqttxx.com -qqtu8.com -qqtz.com -qqu.cc -qqumall.com -qqurl.com -qquu8.com -qqvv88.com -qqwaw.com -qqwechat.com -qqwmly.com -qqwmx.com -qqwtb.com -qqwwr.com -qqwx6.xyz -qqwx8.xyz -qqwxmail.com -qqwys.net -qqxifan.com -qqxmail.com -qqxs.cc -qqxs.la -qqxs5200.com -qqxsnew.com -qqxsw.co -qqxsw.info -qqxsw.la -qqxww.com -qqxy100.com -qqxzb-img.com -qqxzb.com -qqy189.com -qqyewu.com -qqymail.com -qqyou.com -qqyouju.com -qqywf.com -qqyy.com -qqyyx.com -qqzby.net -qqzhi.com -qqzi.net -qqzl.cc -qqzonecn.com -qqzong.com -qqzsh.com -qqzshc.com -qqzuankuo.com -qqzzz.net -qr25.com -qrcdn.com -qrcpu.com -qrmanhua.com -qrtest.com -qrx.cc -qs12315.com -qs7ly.com -qs921.com -qsacg.vip -qsbank.cc -qsbbs.net -qsbdc.com -qsboy.com -qschou.com -qsebao.com -qseeking.com -qsfcw.com -qshang.com -qsmyhsg.vip -qspfw.com -qspfwadmin.com -qss-lb.com -qssec.com -qstatic.com -qstbg.com -qstsking.com -qsw.la -qsw521.com -qswhcb.com -qswzayy.com -qsxi.com -qszs.com -qszt.com -qszt.net -qt-ly.com -qt56yun.com -qt6.com -qt86.com -qtadb.com -qtav.org -qtbcw.com -qtbig.com -qtccolor.com -qtcn.org -qtconcerthall.com -qtdebug.com -qtdream.com -qter.org -qtfy30.com -qthmedia.com -qthnews.com -qtimes.net -qtj5.com -qtlcdn.com -qtlcdncn.info -qtlcn.com -qtlglb.com -qtlglb.info -qtlgslbcn.info -qtluyuan.com -qtlxjy.com -qtmojo.com -qtonghua.com -qtrun.com -qtshe.com -qtshu.com -qtshu.la -qttc.net -qtulou.com -qtumist.com -qtwm.com -qtx.com -qtxt.net -qtyd.com -qu02.com -qu114.com -qu247.com -qu99.com -qua.com -qualisports.cc -quan.mx -quan007.com -quan365.com -quan99.net -quanbailing.com -quanben.com -quanbenwu.com -quancai360.com -quandangdang.net -quandashi.com -quanduoduo.com -quanfangtongvip.com -quanfeng.tech -quanguoban.com -quanji.com -quanji.la -quanji.net -quanji55.com -quanjiao.net -quanjing.com -quanjingke.com -quankan.tv -quanke8.com -quanlaoda.com -quanlaodaonline.com -quanlego.com -quanmaihuyu.com -quanmama.com -quanmamaimg.com -quanmeipai.com -quanmin.la -quanmin.tv -quanmin110.com -quanminbagua.com -quanminbb.com -quanmingjiexi.com -quanminyanxuan.com -quanqiuwa.com -quanquanapp.net -quanr.com -quanriai.com -quansheng-group.com -quanshi.com -quanshishequ.com -quanshu.net -quanshuge.com -quanshuwan.com -quansucloud.com -quantacn.com -quantao100.com -quantaoyougou.com -quantiku.org -quantil.com -quantone.com -quantuantuan.com -quantum-info.com -quanwai.wang -quanweili.com -quanxi.cc -quanxiangyun.com -quanxiaoshuo.com -quanyin.xyz -quanzhanketang.com -quanzhi.com -quanzhifu.net -quanzhoudaqin.com -quanziapp.com -quarkbook.com -quarkers.com -quasarchs.com -quazero.com -quba360.com -qubaike.com -qubaishu.com -qucai.com -qucaiad.com -qucaidd.com -qucaigg.com -quce001.com -quceaiqing.com -quchao.net -quchaogu.com -quchew.com -quclouds.com -qudao.com -qudao.info -qudao168.com -qudaowuyou.com -qudaowuyou04.com -qudingshui.com -qudong.com -qudong51.net -qududu.net -qudushu.com -quduwu.com -quduzixun.com -quegame.com -quegoo.com -queji.tw -queqiaoba.com -querylist.cc -queshao.com -queshu.com -questyle.com -questyleaudio.com -queyang.com -qufair.com -qufaya.com -qufeisoft.com -qufengo.com -qufenqi.com -qugongdi.com -quhaidiao.com -quhua.com -quhuaxue.com -quhubei.com -quhuichang.net -quick-x.com -quickapi.net -quickbass.com -quickcan.com -quickddns.com -quickjoy.com -quicksdk.com -quicksdk.net -quickswan.com -quilimen.com -quimg.com -quji.com -qujianpan.com -qujinhuo.com -qujishu.com -qujunde.com -qukaa.com -qukan.cc -qukanshu.com -qukantoutiao.net -qukantx.com -quklive.com -qukuai.com -qukuaila.com -qukuailiant.com -qukuba.com -qulishi.com -qulv.com -qumaishu.com -qumaiyao.com -qumifeng.com -quming66.com -qumingdashi.com -qumingxing.com -qumitech.com -qun.hk -quna.com -qunachi.com -qunaer.com -qunale888.com -qunar.com -qunar.ink -qunarcdn.com -qunarzz.com -qunba.com -quncrm.com -qunfenxiang.net -qungame.com -qungong.com -qunhai.net -qunhei.com -qunhequnhe.com -qunjielong.com -qunkeng.com -qunliao.info -qunmi.vip -qunniao.com -qunqun.mobi -qunsou.co -quntuishou.com -qunxingvc.com -qunyingkeji.com -qunzh.com -qunzou.com -quora123.com -qupaibei.com -qupaicloud.com -qupeiyin.com -qupf.com -qupuji.com -quqi.com -quqiaoqiao.com -quqike.com -quqiuhun.com -ququabc.com -ququyou.com -ququzhu.com -qusanxia.com -qusem.com -qushimeiti.com -qushiw.com -qushixi.net -qutanme.com -qutaojiao.com -qutaovip.com -qutego.com -quthing.com -qutoutiao.net -qutouwang.com -qutu.com -qutuiwa.com -quumii.com -quunion.com -quvisa.com -quw1234.icu -quwan.com -quwan.fun -quwangming.com -quweikm.com -quweiting.com -quweiwu.com -quwenqing.com -quwenqushi.com -quwentxw.com -quwj.com -quwm.com -quword.com -quwuxian.com -quxds.com -quxia.com -quxianchang.com -quxiangtou.com -quxianzhuan.com -quxiaoyuan.com -quxingdong.com -quxiu.com -quxuan.com -quxuetang.net -quyaoya.com -quyinginc.com -quyiyuan.com -quyouhui.net -quyu.net -quyuansu.com -quyundong.com -quzhiboapp.com -quzhuanpan.com -quzhuanxiang.com -quzz88.com -quzzgames.com -qvip.net -qvkanwen.com -qvlz.com -qvpublish.com -qvxo.com -qw.cc -qwdacy.com -qweather.com -qweather.net -qwertali.pw -qwertdd.pw -qwertgg.pw -qwgt.com -qwimm.com -qwolf.com -qwomcrm.com -qwpeo.net -qwpo2018.com -qwpr3.com -qwpr38.com -qwq.moe -qwqk.net -qwqoffice.com -qwspcz.com -qwsy.com -qwupoq.com -qwxcs.com -qwxsw.com -qx1000.com -qx10086.net -qx100years.com -qx121.com -qx162.com -qxbnkj.com -qxbx.com -qxcdn.cc -qxcu.com -qxghost.com -qxiu.com -qxka.com -qxkp.net -qxlib.com -qxnav.com -qxnecn.com -qxnic.com -qxnzx.com -qxrisk.com -qxs.la -qxslyfjq.com -qxswk.com -qxueyou.com -qxw.cc -qxwl21.com -qxwz.com -qxxsjk.com -qxyaoc.com -qxzc.net -qxzxp.com -qy-office.com -qy-qq.com -qy.net -qy01.com -qy266.com -qy6.com -qy6.net -qyaaaa.com -qybook.net -qyc2008.com -qycn.com -qycn.net -qycn.org -qydaili.com -qydimg.com -qydmz.com -qydns1.com -qyec.com -qyer.com -qyerstatic.com -qyfwc.com -qyglzz.com -qygzbxpt.com -qyham.com -qyhl.net -qyi.io -qyiliao.com -qyjpzx.com -qykh2009.com -qyle1.com -qyled.xyz -qymgc.com -qyous.com -qyrb.com -qysd.net -qysfl.com -qyt1902.com -qyt321.com -qytdesign.com -qytxhy.com -qyule.org -qyvqg.com -qywl777.com -qywqc.com -qyxxpd.com -qyyqyj.com -qyzc.net -qyzjc.com -qz100.com -qz123.com -qz828.com -qz930.com -qz96811.com -qzbbs.com -qzbigstone.com -qzbonline.com -qzbuxi.com -qzccbank.com -qzchkj.com -qzcklm.com -qzdigg.com -qzdwz.com -qzfxyy.com -qzhlkj.net -qzhmzx.com -qzhyxx.com -qzjcd.com -qzjkw.net -qzjlw.com -qzjzb.com -qzkey.com -qzlo.com -qzmixun.com -qznews360.com -qzobao.com -qzone.cc -qzone.com -qzoneapp.com -qzqstudio.com -qzrbx.com -qzrc.com -qzrx.net -qzshangwu.com -qzwb.com -qzxx.com -qzyb.com -qzze.com -qzzn.com -qzzres.com -qzzsbx.com -r-bride.com -r-s-services.com -r-tms.net -r12345.com -r147emh.com -r1x1.com -r1y.com -r220.cc -r2coding.com -r2g.net -r2yx.com -r337iz6.com -r51.net -r5k.com -r5tao.com -r77777777.com -r9q6.vip -rabbitpre.com -rabbitpre.me -race604.com -racing-china.com -racktom.com -radicalmail.net -radida.com -radio1964.com -radiotj.com -radiowar.org -radius-america.com -raeblog.com -ragbear.com -raidc.com -raidcn.com -rail-transit.com -railcn.net -rails365.net -railwayfan.net -rain8.com -rainasmoon.com -rainbond.com -rainbow.one -rainbowcn.com -rainbowred.com -rainbowsoft.org -raindi.net -raineggplant.com -rainersu.club -rainhz.com -rainlain.com -rainmanfloor.com -rainyun.com -raisecom.com -raisinsta.com -raiyi.com -rajax.me -rajjzs.com -rakinda-xm.com -ralf.ren -ramadaplaza-ovwh.com -ramostear.com -ran-wen.com -ran10.com -rangercd.com -rangnihaokan.com -ranhou.com -rankaiyx.com -ranknowcn.com -ranling.com -rannabio.com -rantu.com -ranwen.la -ranwen.tw -ranwena.com -ranwenxs.com -ranwenzw.com -ranyi.net -ranzhi.net -ranzhi.org -raoke.net -raonie.com -raorao.com -rap8.com -rapidppt.com -rapoo.com -rapospectre.com -rarcbank.com -rarelit.net -rashost.com -raspigeek.com -rastargame.com -rata-catering.com -ratina.org -rationmcu.com -ratodo.com -ratoo.net -ratuo.com -ray-joy.com -ray8.cc -raychase.net -raychien.site -raycom-inv.com -raycuslaser.com -raydonet.com -raygame3.com -raygame4.com -rayjoy.com -raymx-micro.com -rayoptek.com -rayps.com -rayrjx.com -raysilicon.com -raythonsoft.com -raytoon.net -rayu.me -rayuu.com -rayyo.com -rayyzx.com -razonyang.com -razrlele.com -raztb.com -rb400.com -rbcty.com -rbischina.org -rbqq.com -rbyair.com -rbz1672.com -rbzygs.com -rc.cc -rc0792.com -rc114.com -rc3cr.com -rccchina.com -rccoder.net -rcdang.com -rcdio.com -rcdn.fun -rcfans.com -rcgus.com -rchhps.com -rchudong.com -rclbbs.com -rcpx.cc -rcss88.com -rcuts.com -rcw0375.com -rcwl.net -rcyd.net -rczfang.com -rczp.org -rd-game.com -rd351.com -rdamicro.com -rdbom.com -rdbuy.com -rddoc.com -rdezbie.com -rdgz.org -rdidc.com -rdnsdb.com -rdplat.com -rdsdk.com -rdsvsh.com -rdtuijian.com -rdwork.com -rdxmt.com -rdyhly.net -rdyjs.com -rdzhijia.com -rdzjw.com -rdzs.com -rdzx.net -reachace.com -react-china.org -react.mobi -read678.com -read8.net -read8.org -readboy.com -readceo.com -readdsp.com -readend.net -readers365.com -readfree.net -readgps.com -readhb.com -readhr360.com -readhub.me -readlishi.com -readm.tech -readmail.net -readmeok.com -readmorejoy.com -readnovel.com -readpaper.com -readpaul.com -readten.net -readu.net -readwithu.com -ready4go.com -readzq.com -reaer.com -reai120.com -reaicomic.com -realclouds.org -realdatamed.com -realforcechina.com -realjf.com -reallct.com -really100.net -reallylife.com -realmebbs.com -realmedy.com -realor.net -realsee.com -realshark.com -realsun.com -realtorforce.ca -realxen.com -reasonclub.com -rebatesme.com -rebcenter.com -rebo5566.com -rebohu.com -rebooo.com -reborncodinglife.com -recaptcha.net -recgo.com -rechaos.com -rechuandao.com -recolighting.com -recordjapan.net -recovery-transfer.com -recoye.com -recuvachina.com -recycle366.com -red54.com -redatoms.com -redbaby.com -redcome.com -redcross-hx.com -redcross-sha.org -redefine.ltd -redflag-linux.com -redhai.com -redhome.cc -redhongan.com -redianduanzi.com -redianmao.com -redianyule.com -redianzixun.com -rediao.com -redicecn.com -redidc.com -redirector.gvt1.com -redisbook.com -redisdoc.com -redisfans.com -redisguide.com -redisinaction.com -redjun.com -rednetdns.com -redocn.com -redoop.com -redpact.com -redphon.com -redquan.com -redream.com -redrock.team -redsh.com -redshu.com -redstaraward.org -redsun-rp.com -redyue.com -redyue.org -reedii.com -reedoun.com -reeidc.com -reeiss.com -reeji.com -reekly.com -reenoo.com -reenoo.net -reeoo.com -refeng.net -refined-x.com -reformdata.org -refractorywin.com -reg007.com -regioninfo-pa.googleapis.com -regishome.com -reglogo.net -regtm.com -rehtt.com -rehuwang.com -rejoiceblog.com -rejushe.com -rekonquer.com -rekoo.com -rekoo.net -rela.me -relangba.com -relianfit.com -reloadbuzz.com -relxtech.com -remaijie.net -remapcity.com -remark.dance -remax-bj.com -remehealth.com -rememtek.com -remen88.com -remoteaps.com -remotedu.com -renaren.com -rencaiaaa.com -rencaijob.com -rendajingjiluntan.com -rendease.com -rendefpc.com -renderbus.com -renderincloud.com -rendna.com -renhence.com -renji.com -renjian.com -renjiaoshe.com -renjiyiyuan.com -renlijia.com -renliwo.com -renlong1688.com -renmaiku.com -renmaitong.com -renminkaiguan.com -renniaofei.com -renping.cc -renqibaohe.com -renren-inc.com -renren.com -renren.io -renren3d.com -renrenbang.com -renrenbeidiao.com -renrenche.com -renrencou.com -renrendai.com -renrendoc.com -renrenfinance.com -renrenhuigo.com -renrening.com -renrenmoney.com -renrenso.com -renrensousuo.com -renrenstudy.com -renrentou.com -renrentrack.com -renrentui.com -renrenyee.com -renrk.com -renrzx.com -rensheng123.com -rensheng2.com -rensheng5.com -rent.work -rentiantech.com -rentixuewei.com -renwen.com -renwole.com -renwuyi.com -renxingwang.com -renyaohua.com -renyufei.com -renzha.net -reocar.com -repai.com -repaiapp.com -repanso.com -repian.com -repianimg.com -replays.net -res0w.com -resclassaction.com -reserve-prime.apple.com -resheji.com -resistor.today -resouxs.com -resowolf.com -respect-lab.com -respondaudio.com -respusher.com -resuly.me -retalltech.com -retey.net -retiehe.com -retouchpics.com -retow.com -return.net -returnc.com -reverselove.com -rew65.com -reworlder.com -rewuwang.com -rexcdn.com -rexdf.org -rexinyisheng.com -rexsee.com -rexuedongman.com -rexueqingchun.com -reyinapp.com -reyoo.com -reyun.com -rezhishi.net -rf-gsm.com -rf.hk -rf.tm -rfaexpo.com -rfchina.com -rfchost.com -rfcreader.com -rfctyy.com -rfdl88.com -rfdy.hk -rfeyao.com -rffan.info -rffanlab.com -rfhhzx.com -rfidcardcube.com -rfidchina.org -rfidtech.cc -rfk.com -rfmwave.com -rfsister.com -rfthunder.com -rg950.com -rgb128.com -rgdhgdf.com -rgfc.net -rgoo.com -rgrcb.com -rgslb.com -rgyun.com -rgznworld.com -rh98.com -rhce.cc -rhhz.net -rhjyw.com -rhkj.com -rhsj520.com -rhusen03.com -rhyjcy.com -rhyme.cc -ri-china.com -riaway.com -ribaoapi.com -ribaow.com -ribenbang.com -ribencun.com -ribenshi.com -riboseyim.com -ricebook.com -ricefish.io -ricequant.com -rich-chang.com -rich-futures.com -rich-healthcare.com -richeninfo.com -richiecn.com -richinfer.net -richkays.com -richong.com -richtj.com -ricklj.com -rickyfabrics.com -rickyid.com -rickysu.com -ricterz.me -rightknights.com -rightpaddle.com -rigol.com -rigouwang.com -riitao.com -riji001.com -rijigu.com -rijiwang.com -riju.tv -rijutv.co -rijutv.com -rikka.app -rilvtong.com -rilzob.com -rimiedu.com -ringdoll.com -rinlink.com -ripic.xyz -rippleos.com -risc-v1.com -riscv-mcu.com -risecd.net -risecenter.com -risechina.org -riselinkedu.com -risenb.com -risencn.com -risesoft.net -risfond.com -rishao.com -rishiqing.com -rishuncn.com -riskivy.com -risunsolar.com -riswing.com -ritaomeng.com -ritarpower.com -ritering.com -rivergame.net -riyuanma.com -riyuba.com -riyuexing.org -riyuezhuan.com -riyugo.com -riyujob.com -riyurumen.com -rizhao9.com -rizhaochuanqi.com -rizhaociming.com -rizhi.xyz -rizhiyi.com -rizhuji.com -rizi168.com -rj-bai.com -rj889.net -rjdk.org -rjghome.com -rjh0.com -rjhcsoft.com -rjoy.com -rjreducer.com -rjres.com -rjs.com -rjsjmbwx.com -rjsos.com -rjty.com -rjypay.com -rjzxw.com -rkanr.com -rkdatabase.com -rkeji.com -rkgaming.com -rksec.com -rkvir.com -rl-consult.com -rlair.net -rlbl888.com -rlhn.xyz -rlkj.com -rlsofa.net -rlwyjf.com -rlydw.com -rlyl.net -rm-static.djicdn.com -rm96.com -rmb.sh -rmcteam.org -rmdhtyc.com -rmhospital.com -rmjtxw.com -rmlxx.com -rmryun.com -rmsznet.com -rmttjkw.com -rmxiongan.com -rmylsc.com -rmzs.net -rmzt.com -rmzxb.com -rn-hswh.com -rnfengwo.com -rngtest.com -roadjava.com -roadoor.com -robam.com -robei.com -roboo.com -robook.com -robot-china.com -robotedu.org -robotplaces.com -rock-chips.com -rockbrain.net -rockemb.com -rockerfm.com -rockjitui.com -rockmanlab.net -rockru.com -rocky.hk -rockyaero.com -rockyenglish.com -roclee.com -roddypy.com -roffar.com -rohm-chip.com -roidmi.com -rojewel.com -rokid.com -rokidcdn.com -rokub.com -roland-china.com -rollupjs.com -rom100.com -romanting.com -romeng.men -romhui.com -romjd.com -romleyuan.com -romphone.net -romzhijia.net -romzhushou.com -romzj.com -roncoo.com -rong.io -rong24.com -rong360.com -ronganjx.com -rongba.com -rongbiz.com -rongbiz.net -rongbst.com -rongcfg.com -rongchain.com -rongchenjx.com -rongdewang.com -rongechain.com -ronghope.com -ronghub.com -ronghuiad.com -ronghuisign.com -rongji.com -rongjinsuo.com -rongledz.com -ronglianmeng.net -rongmayisheng.com -rongnav.com -rongroad.com -rongshiedu.com -rongshu.com -rongshuxia.com -rongstone.com -rongtai-china.com -rongyao666.com -rongyi.com -rongyiju.com -rongyitou.com -rongzhitong.com -rongzhongleasing.com -rongzhongloan.com -rongzi.com -rongzibei.com -ronnylove.com -rontgens.com -roobo.com -roodoo.net -roof325.com -roogames.com -room365.com -roomse.com -roosur.com -root-servers.world -root1111.com -rootcloud.com -rootguide.org -rootk.com -rootop.org -rootopen.com -rootzhushou.com -roouoo.com -roov.org -ror-game.com -rorotoo.com -ros-lab.com -rosabc.com -rosaryshelties.com -rosecmsc.com -rosedata.com -rosefinchfund.com -roshanca.com -rosinson.com -rossoarts.com -rossoarts.net -rossroma.com -roswiki.com -roszj.com -rotom-x.com -rouding.com -rouju.org -roukabz.com -round-in.com -roundexpo.com -roundyule.com -roushidongwu.com -rousin.com -router.fun -router.tw -routeryun.com -routewize.com -routingeye.com -rouwen.net -rouzip.com -rowcan.com -royalpay.com.au -royole.com -royotech.com -rp-pet.com -rpg99.com -rpgmoba.com -rpjrb.com -rpo5156.com -rqi17.com -rqjrb.com -rqshbp.net -rqz1.com -rqzjzs.com -rr-sc.com -rr.tv -rr365.com -rrb365.com -rrbay.com -rrbts.org -rrbus.com -rrcimg.com -rrcp.com -rrd.me -rrdaj.com -rree.com -rrfed.com -rrfmn.com -rrhuodong.com -rrimg.com -rritcn.com -rrjc.com -rrjump.com -rrkf.com -rrkvip.com -rrky.com -rrkyw.com -rrl360.com -rrliuxue.com -rrmeiju.com -rrmj.tv -rrppt.com -rrr.me -rrrdai.com -rrrhteam.com -rrrrdaimao.com -rrs.com -rrscdn.com -rrsub.com -rrsub.net -rrswl.com -rrting.net -rrtsangel.com -rrty.tv -rruu.com -rruu.net -rrxh5.cc -rrxiu.cc -rrxiu.me -rrxiu.net -rrys.tv -rrysapp.com -rrzuji.com -rrzxw.net -rs05.com -rs485.net -rscala.com -rscloudmart.com -rsdgd.com -rsdwg.com -rsdyy.com -rsng.net -rso.wang -rsp.ink -rss.ink -rsscc.com -rssmeet.com -rssmv.com -rsty77.com -rsw163.com -rszfg.com -rt-blend.com -rt-thread.io -rt-thread.org -rtb5.com -rtbasia.com -rtcdeveloper.com -rtfcode.com -rtfcpa.com -rtfund.com -rthpc.com -rtjxssj.com -rtmap.com -rtrrx.com -rtsac.org -rtxapp.com -rtxplugins.com -rtxuc.com -ru4.com -ruaimi.com -ruandy.com -ruanfujia.com -ruanhaiqin.com -ruanjiandown.com -ruanjianwuxian.com -ruankao.com -ruanko.com -ruanman.net -ruanmei.com -ruanmou.net -ruanno1.com -ruantiku.com -ruanwen.la -ruanwenclass.com -ruanwenkezhan.com -ruanwenlala.com -ruanyuan.net -rubaoo.com -ruby-china.com -rubybrides.com -rubyconfchina.org -rubyer.me -ruchee.com -rueinet.com -rufei.ren -rufengda.com -rufengso.net -ruffood.com -rufida.com -rugao35.com -ruguoapp.com -ruhnn.com -rui2.net -ruian.com -ruibai.com -ruibaixiang.com -ruichuangfagao.com -ruicitijian.com -ruidaedu.com -ruideppt.com -ruideppt.net -ruidongcloud.com -ruidroid.xyz -ruiguandental.com -ruiguanrobot.com -ruihaimeifeng.com -ruihuo.com -ruiii.com -ruijienetworks.com -ruijiery.com -ruijinintl.com -ruikesearch.com -ruiqicanyin.com -ruiruigeblog.com -ruiscz.com -ruisizt.com -ruisky.com -ruitairt.com -ruiwant.com -ruiwen.com -ruixing.cc -ruixuesoft.com -ruixueys.com -ruixunidc.com -ruixunidc.net -ruiyang-ra.com -ruiyunit.com -ruizhiy.com -ruizong-gz.com -rujiazg.com -ruketang.com -rulejianzhan.com -rulesofsurvivalgame.com -rum8.perf.linkedin.com -runcmd.com -runcome.com -runde666.net -rundejy.com -rundongex.com -runexception.com -runforrun.com -runfox.com -runhe.org -runhuayou.biz -runidc.com -runjf.com -runker.net -runker.online -runmang.com -runnar.com -runnerbar.com -runningcheese.com -runningls.com -runnoob.com -runoob.com -runpho.com -runsisi.com -runsky.com -runtianhotel.com -runtime.pw -runtimeedu.com -runtimewh.com -runtonggroup.com -runtronic.com -runwith.cc -runzhize.com -runzi.cc -ruochu.com -ruodian360.com -ruofan.me -ruokuai.com -ruoren.com -ruoshui.com -ruoxia.com -ruoyi.vip -ruozedata.com -ruqimobility.com -rushb.net -rushivr.com -rushmail.com -rusinge.com -russellluo.com -rustdesk.com -ruthus.com -ruubypay.com -ruuxee.com -ruvar.com -ruvisas.com -ruyahui.com -ruyig.com -ruyile.com -ruyimjg.com -ruyiqiming.com -ruyishi.com -ruyo.net -ruyu.com -ruyuexs.com -ruzw.com -rv2go.com -rvfdp.com -rvmcu.com -rwtext.com -rwxqfbj.com -rwxwl.com -rxbj.com -rxdsj.com -rxgl.net -rxhui.com -rxian.com -rxjhbaby.com -rxjt.co -rxjy.com -rxshc.com -rxys.com -ryanbencapital.com -ryanc.cc -ryanyuanao.xyz -rybbaby.com -ryc360.com -rydth5.com -ryeex.com -ryjiaoyu.com -rylinkworld.com -rymooc.com -rypeixun.com -rysdline.com -rytad.com -rytx.com -ryweike.com -rywsem.com -ryxxff.com -ryyyx.com -rz.com -rz31.com -rzcdc.com -rzcdz2.com -rzfanyi.com -rzhuaqiangu.com -rzlib.net -rzline.com -rzok.net -rzszp.com -rzx.me -rzxdjy.com -rzyjyl.com -s-02.com -s-dom.net -s-ns.com -s-reader.com -s-sgames.com -s-ts.net -s.mzstatic.com -s06661.com -s135.com -s163.com -s1979.com -s1craft.com -s2cinc.com -s4g5.com -s4yd.com -s5217.net -s575.com -s5tx.com -s60sky.com -s6qq.com -s72c.com -s8dj.com -s8j.com -s8x1.com -s8xs.com -s936.com -s9523.com -s955s.com -s95r.com -s98s2.com -s9jk.com -s9yun.com -sa-ec.com -sa-log.com -sa20.com -saas88.com -saasddos.com -saasruanjian.com -saasv.com -saaswaf.com -saayaa.com -sablog.net -sac-china.com -sacdr.net -sact-digital.com -sadhen.com -sae-china.org -saebbs.com -safebrowsing-cache.google.com -safebrowsing.googleapis.com -safecenter.com -safehoo.com -safejmp.com -safenext.com -safestdns.com -safewiki.org -safp.com -sagetrc.com -sagocloud.com -sahcqmu.com -saibeiip.com -saibeinews.com -saibo.com -saic-gm.com -saicdt.com -saicgmac.com -saicgroup.com -saicjg.com -saicmaxus.com -saicmobility.com -saicmotor.com -saicyun.com -saidawang.com -saiday.com -saier.me -saifou.com -saifutong.com -saigao.fun -saihuahong.com -saihuitong.com -saike.com -saikr.com -sail.name -sail2world.com -saili.science -sailingyun.com -saimogroup.com -sainacoffee.com -saintcos.hk -saintic.com -saipujianshen.com -saipujiaoyu.com -sairaicc.com -sairui020.com -saite-xdc.com -saitjr.com -saiyouedu.net -saiyunyx.com -sakway.com -saladns.com -salasolo.com -saleoilpaintings.com -salogs.com -salomerebecca.com -salonglong.com -salongweb.com -salonwith.com -samanlehua.com -samebar.com -samhotele.com -saming.com -samirchen.com -samsunganycar.com -samsungfiberoptics.com -samsunghealthcn.com -samsungyx.com -samwell.net -samyuong.com -samzhe.com -san-health.net -san-sheng.net -sanban18.com -sancanal.com -sanctpalace.com -sancunrenjian.org -sandaha.com -sandai.net -sandaile.com -sandbean.com -sandcomp.com -sandeepin.com -sandianzhong.com -sandingtv.com -sandrarene.com -sandslee.com -sandsresortsmacao.com -sanduoyun.com -sandworld.net -sandwych.com -sandy2.com -sanen.online -sanfen.me -sanfen666.com -sanfengyun.com -sanfo.com -sanfu.com -sangfor.com -sangfor.net -sangfor.org -sangfordns.com -sangongzai.net -sangsir.com -sanguobbs.com -sanguocard.com -sanguoh5.com -sanguohero.com -sanguosha.com -sanguozz.com -sanhao.com -sanhaofushi.com -sanhaostreet.com -sanhe-scale.com -sanhong.org -sanhucidiao.cc -sanjiang.com -sanjiangpm.com -sanjiaoniu.com -sanjiasoft.com -sanjieke.com -sanjinjiake.com -sanjun.com -sankaijian.com -sankgo.com -sankougift.com -sankuai.com -sanlan123.com -sannongejia.com -sanpowergroup.com -sanpuzhiyao.com -sanqin.com -sanqindaily.com -sanqinyou.com -sanqiu.org -sanquan.com -sansancloud.com -sansanyun.com -sanshengcao.com -sansky.net -santaihu.com -santelvxing.com -santezjy.com -santiwang.com -santiyun.com -santongit.com -santostang.com -santsang.com -sanweimoxing.com -sanweiyiti.org -sanwen.com -sanwen.net -sanwen8.com -sanwer.com -sanxia-china.com -sanxiamarathon.com -sanxiapharm.com -sanxige.com -sanxinbook.com -sanxiw.com -sanxu88.com -sanya100.com -sanyachloe.com -sanyafz.com -sanyamotor.com -sanyanblockchain.com -sanyaotc.com -sanyastar.com -sanyatour.com -sanye.cx -sanyexin.com -sanygroup.com -sanyhi.com -sanyibao.com -sanyipos.com -sanyoutj.com -sanyuanbaobao.com -sanyuantc.com -sanyuesha.com -sanzang5.com -sanzang5.net -sanzangwang.com -sanzei.com -sao-ma.com -sao.so -saohu191.com -saoic.com -saomadang.com -saopu.com -saoso.com -saowen.net -sap-nj.com -sap1000.com -sap1200.com -sapjx.com -saraba1st.com -sarft.net -sass.hk -sasschina.com -sasscss.com -sasseur.com -satrip.com -saturnbird.com -saveen.com -savokiss.com -savouer.com -sawenow.com -sayabear.com -sayloving.com -saywash.com -sb1152.com -sbanfu.com -sbanzu.com -sbc-mcc.com -sbc398.com -sbc665.com -sbeira.com -sbgl.net -sbh15.com -sbiquge.com -sbk-h5.com -sbkh5.com -sbkk8.com -sblunwen.com -sbo8.com -sbr-info.com -sbrj.net -sbt123.com -sbwml.net -sbwxz.com -sbzj.com -sc-jiaoyu.com -sc-vis.com -sc.gg -sc115.com -sc119.cc -sc157.com -sc1588.com -sc1618.com -sc2c.com -sc2car.com -sc2p.com -sc2yun.com -sc666.com -sc823.com -sc946.com -scacm.com -scaffi.com -scala.cool -scanv.com -scarbbs.com -scarclinic-cn.com -scatwang.com -scbaidu.com -scbao.com -scbxmr.com -scbyx.net -scbz.org -scbz120.com -scc.ssacdn.com -scccyts.com -sccin.com -scclssj.com -sccm.cc -sccnn.com -sccq.net -sccsfxdq.com -sccts.com -sccwz.com -scdakj.com -scdbzzw.com -scdn1e8v.com -scdnf80r.com -scdng.com -scdng8js.com -scdnj3in.com -scdnl3bk.com -scdnl9cm.com -scdnmogt.com -scdno5zl.com -scdnrvy1.com -scdnucc5.com -scdnurea.com -scdnygb7.com -scdri.com -scdzmw.com -scedu.net -sceeo.com -scfaying.com -scflcp.com -scflgc.com -scfzbs.com -scgc.net -scgckj.com -scgglm.com -scgh114.com -scghseed.com -scgis.net -scgra.com -scgzzg.com -schengle.com -schezi.com -schneidercampus.com -scholarmate.com -scholat.com -schoolgater.com -schove.com -schrb.com -schwarzeni.com -schwr.com -sci-hub.ee -sci-hub.ren -sci-hub.shop -sci-hub.tf -sci99.com -scichina.com -scicn.net -scidict.org -sciencemeta.com -scientrans.com -scies.org -scifans.com -scigy.com -scihubtw.tw -sciimg.com -scijuyi.com -scimao.com -scinno-cn.com -scinormem.com -scipaper.net -sciping.com -sciscanpub.com -scisky.com -scistor.com -scitycase.com -sciyard.com -sciyon.com -scjhyq.com -scjjrb.com -scjtaq.com -scjyzb.net -scjzjyjc.com -scjzy.net -sclf.org -sclinktech.com -scmenhu.com -scmeye.com -scmor.com -scmroad.com -scmsky.com -scmttec.com -scmylike.com -scnjnews.com -scntv.com -sco-marathon.com -scodereview.com -scoee.com -scommander.com -scoregg.com -scp-wiki-cn.org -scpgroup.com -scpic8.com -scplt.com -scqcp.com -scrcu.com -scrdzf.com -scrmtech.com -scrsw.net -scrtf.com -scrumcn.com -scscms.com -scsdns.com -scsdzxh.org -scsgk.com -scsjnxh.org -scsstjt.com -sctaixin.com -sctbc.net -sctcd.com -sctobacco.com -sctv.com -sctvf.com -scufida.com -scujj.com -scusec.org -scutcm.com -scutde.net -scutef.org -scutsee.com -scuvc.com -scw123.com -scw98.com -scweixiao.com -scwj.net -scwlylqx.com -scwy.net -scxdf.com -scxnyl.com -scxyoa.com -scycxh.com -scymob.com -scyongqin.com -scytyy.net -sczg.com -sczgzb.com -sczj.org -sczl123.com -sczlb.com -sczlcts.com -sczprc.com -sczshz.net -sczsie.com -sczsxx.com -sczw.com -sczycp.com -sczyh30.com -sd-blb.com -sd-cellbank.com -sd-ex.com -sd-sma.com -sd-xd.net -sd-ysjt.com -sd11185.com -sd173.com -sd235.net -sd5g.com -sda1.dev -sdailong.com -sdaoyou.com -sdbao.com -sdbeta.com -sdbykqn.com -sdbys.com -sdca119.com -sdchem.net -sdchina.com -sdchn.com -sdcqjy.com -sdctech.net -sdcydl.com -sdd17.com -sddagongrubber.com -sddcp.com -sddermyy.com -sddeznsm.com -sddh.online -sddlys.com -sde6.com -sdebank.com -sdeca.org -sdecloud.com -sdenews.com -sdeqs.com -sderp.com -sdewj.com -sdey.net -sdfcp.com -sdfcxw.com -sdfhyl.com -sdfll.com -sdfmgg.com -sdg-china.com -sdgdxt.com -sdgh.net -sdgho.com -sdgt1985.com -sdgude.com -sdguguo.com -sdguoxinqz.com -sdgw.com -sdgwy.org -sdhangmoguan.com -sdhk2008.com -sdhoukang.com -sdhsie.com -sdhtws.com -sdhuxiji.com -sdhxnykj.com -sdiandian.com -sdiborn.com -sdicin.com -sdicvc.com -sdifenzhou.com -sdiread.com -sditol.com -sdj-tech.com -sdjcw.com -sdjinlan.com -sdjinwang.com -sdjnwx.com -sdjtcx.com -sdjushu.com -sdkclick.com -sdkclickurl.com -sdklh.com -sdknext.com -sdksrv.com -sdlangkun.com -sdlgzy.com -sdlinqu.com -sdlldj.com -sdlocw.com -sdlongli.com -sdlvxing.com -sdly35.com -sdmic.com -sdmyzsgs.com -sdnfv.org -sdnjsbc.com -sdnlab.com -sdnxs.com -sdnysc.com -sdo-shabake.com -sdo.com -sdodo.com -sdongpo.com -sdoprofile.com -sdpku.com -sdpmcnc.com -sdqifushebei.com -sdqlkr.com -sdqmy.com -sdqoi2d.com -sdrcu.com -sdsgwy.com -sdshshb.com -sdshulifang.com -sdshyl.com -sdsitong.com -sdsmefina.com -sdsszt.com -sdtdata.com -sdtsrf.com -sdtuomei.com -sdtvjiankang.com -sdtxmq.com -sduod.com -sdutacm.org -sdv8dvj.com -sdwanping.com -sdwdxl.com -sdwenlian.com -sdwgyy.com -sdx.microsoft.com -sdxczn.com -sdxietong.com -sdxitong.com -sdxjpc.com -sdxvisa.com -sdxwy168.com -sdxyxhj.com -sdxzt.com -sdyinshuachang.com -sdyizhibi.com -sdylsc.com -sdyndcjx.com -sdynr.com -sdyuanbao.com -sdyy.org -sdyyebh010.com -sdyypt.net -sdzbcg.com -sdzdmjg.com -sdzhidian.com -sdzjsy.com -sdzk.co -se77en.cc -se7enzone.com -sea-group.org -sea-gullmall.com -sea789.com -seagulllocker.com -seaheart.cc -sealand-scan.com -sealand100.com -sealeadbattery.com -sealyun.com -seamanhome.com -seandou.com -seaning.com -seanxp.com -seanya.com -seanyxie.com -seapard.com -search1990.com -search616.com -searcheasy.net -searchforit8.com -searchpstatp.com -searchtb.com -seasouthgy.com -seassoon.com -seastarasset.com -seasungame.com -seavo.com -seayao.net -seayee.com -sebastianblade.com -sebigdata.com -seblong.com -sebug.net -sec-wiki.com -secaibi.com -secange.com -secbug.cc -secbug.org -secdoctor.com -secdriver.com -secfree.com -secisland.com -secist.com -seclover.com -secoo.com -secooart.com -secooimg.com -secpulse.com -secretgardenresorts.com -secretmine.net -secrss.com -secrui.com -secsilo.com -sectigochina.com -secu100.net -secun.com -secure.globalsign.com -security.cdnetworks.com -securitycn.net -securityfrontline.org -securitypaper.org -secutimes.com -secwk.com -secwx.com -sed3.com -see-far.com -see-source.com -seea.red -seeapp.com -seeb.red -seebug.org -seebyleegee.com -seecmedia.net -seecsee.com -seed-china.com -seedasdan.org -seeddsp.com -seedit.cc -seedit.com -seedland.cc -seedsufe.com -seefarger.com -seegif.com -seek114.com -seekbetter.me -seekchem.com -seekfunbook.com -seekonly.net -seekpetm.com -seekplay.online -seelvyou.com -seemmo.com -seemoread.com -seentao.com -seer520.com -seersee.com -seeseed.com -seeshentech.com -seetao.com -seewellintl.net -seewo.com -seewoedu.com -seexpo.com -seeyii.com -seeyon.com -seeyonoversea.com -seeyouhealth.com -seeyouyima.com -seezy.com -sefonsoft.com -segahome.com -segmentfault.com -segmentfault.net -segotep.com -segwayrobotics.com -sehuiyao34.com -sehuiyao49.xyz -sehy66.com -seidns.com -seinfeldtv.com -seisman.info -sejai.com -sejie16.xyz -sejie9.xyz -sekede.net -sekorm.com -selboo.com -selfinflatingballoon.com -selfservicechina.com -selinuxplus.com -sell66.com -sellingexpress.net -selypan.com -sem123.com -semeye.com -semgg.com -semgz.com -semicic.com -semidata.info -semiee.com -semielite.com -semiinsights.com -semiway.com -semlinker.com -sempk.com -semplus.org -semptian.com -semvseo.com -sencdn.com -sencha-china.com -send2boox.com -senda360.com -sendbp.com -sendcloud.net -sendcloud.org -sendocn.com -sendong.com -sends.cc -senenwood.com -senfengg.com -sengguo.com -senguo.cc -senguo.com -sengxian.com -seniverse.com -senleo.com -senlujj.com -senmi88.com -senmiaoschool.com -senorsen.com -senra.me -sensate.hk -sense-hk.com -senselock.com -senseluxury.com -sensertek.com -sensetime.com -senseyun.com -sensorsdatavip.com -sensorshome.com -senszx.com -sentaijs.com -sentetuwen.com -sentsin.com -sentuxueyuan.com -senyuanhi.com -senyuanzhonggong.com -seo-6.com -seo-820.com -seo-wuhan.com -seo.tm -seo123.net -seo628.com -seo8.org -seo8o.com -seoccc.com -seocun.com -seocxw.com -seodaniel.com -seofangfa.com -seohet.com -seohuizhou.com -seoniao.com -seopath.net -seopre.com -seosn.com -seosrx.net -seosteven.com -seotcs.com -seowdw.com -seowenda.net -seowhy.com -seoxiaosai.com -seoxuetang.com -seoyu.net -seozhuanjia.com -seozyw.com -sepact.com -sepri.com -septinn.com -septwolves.com -sepu.net -sequ.biz -sequoiadb.com -sercomm.com -serholiu.com -servasoft.com -serverless.ink -servicemesher.com -servicewechat.com -servingcdn.com -sesamestreetenglishchina.com -seseacg.com -sesier.com -sesliritim.com -sesubox.com -seteuid0.com -seuic.com -sevdot.com -seven7777.eu -sevencdn.com -sevenseas-china.com -sewise.com -sexytea2013.com -sf-airlines.com -sf-bearing.com -sf-card.com -sf-companion.com -sf-dsc.com -sf-express.com -sf-financial.com -sf-pay.com -sf-saas.com -sf-zs.net -sf.gg -sf007.com -sf024.com -sf6710.com -sfacg.com -sfantree.com -sfb-100.com -sfbest.com -sfccn.com -sfcdn.org -sfddj.com -sfgj.org -sfgy.org -sfht.com -sfhxdfgl.com -sfile2012.com -sfitcdp.com -sfjdml.com -sfkedu.com -sfkj.vip -sflep.com -sflqw.com -sfmianhua.com -sforest.in -sfpgmk.com -sfplay.net -sfwxf.com -sfyb.com -sfygroup.com -sfystatic.com -sfyy120.com -sfzj123.com -sg-micro.com -sg.work -sg120.com -sg169.com -sg560.com -sg668.com -sg8.cc -sg91.net -sg92.com -sgamer.com -sgcctd.com -sgcctop.com -sgchinese.com -sgchinese.org -sgcn.com -sgcyjy.com -sgda.cc -sgdmobile.com -sge.sh -sghnny.com -sgjwb.com -sgllk.com -sglxcn.com -sgmlink.com -sgmwlu.com -sgmwsales.com -sgnet.cc -sgnongkang.com -sgou.com -sgpy08.com -sgshero.com -sgshuangfa.com -sgsxw.com -sguo.com -sgwk.info -sgyaogan.com -sgzhee.com -sgzm.com -sh-3ai.com -sh-an.com -sh-arpm.com -sh-aurora.net -sh-baolai.com -sh-cyclerace.org -sh-deem.com -sh-dent.com -sh-dls.com -sh-eastwes.com -sh-ekeyboard.org -sh-gmc.com -sh-henian.com -sh-hilead.com -sh-holiday.com -sh-huifeng.com -sh-hywin.com -sh-investment.net -sh-ryjx.com -sh-service.com -sh-surface.com -sh-tangfeng.com -sh-warwick.com -sh-xinao.com -sh-yajia.com -sh-ybxhz.com -sh-yuy.com -sh-zbfm.com -sh.com -sh112.com -sh1122.com -sh414.com -sh5y.com -sh7.com -sh85gk.com -sh8y.com -sh9130.com -sh9yuan.com -sha-cun.com -sha-steel.com -sha2255.com -sha2299.com -sha2777.com -sha7000.com -sha990.com -shaanxirk.com -shabc.net -shaca.net -shachong8.com -shacumox.com -shaddockfishing.com -shadow-forum.com -shadowedu.net -shadowq.com -shaduizi.com -shafa.com -shafaguanjia.com -shahaizi.com -shaidc.com -shailema.com -shairport.com -shaisino.com -shaiwang.org -shaizai.com -shallserve.cc -shamiao.com -shan-san.com -shan.com -shanai365.com -shanbay.com -shanbotv.com -shanda960.com -shandagames.com -shandaz.com -shandianhuifu.com -shandianpan.com -shandianyidai.com -shandjj.com -shandongair.com -shandonghaiyang.com -shandongjuli.com -shandongruixiang.com -shandongsannong.com -shandongyunpin.com -shandw.com -shang-tai.com -shang0898.com -shang168.com -shangbaolai.com -shangbiao.com -shangbw.com -shangc.net -shangcaifanyi.com -shangdandan.com -shangdaotong.com -shangdiguo.com -shangdingxin.com -shangdixinxi.com -shangdu.com -shangdu.info -shangdumall.com -shangduo-ihome.com -shangeedu.com -shangeseo.com -shangfayuan.com -shangfox.com -shanggame.com -shanghai-air.com -shanghai-channel.com -shanghai-electric.com -shanghai-intex.com -shanghai-map.net -shanghaiairport.com -shanghaiboji.com -shanghaicaiyi.com -shanghaichannel.net -shanghaiconcerthall.org -shanghaicup.com -shanghaidaily.com -shanghaidisneyresort.com -shanghaiferry.com -shanghaihino.com -shanghaiiot.org -shanghaik11.com -shanghaimart.com -shanghaimuseum.net -shanghainb.com -shanghaining.com -shanghaipower.com -shanghairanking.com -shanghairc.com -shanghairemax.com -shanghairolexmasters.com -shanghaishuangyanpi.com -shanghaitianqi114.com -shanghaitower.com -shanghaixs.com -shanghaiyueshang.com -shanghaizaojia.com -shanghaizhenji.com -shangji998.com -shangjialianpage6.win -shangjilian.com -shangjinuu.com -shanglv51.com -shangmayuan.com -shangmeijiu.com -shangpin.com -shangpintong.com -shangpo.com -shangpusou.com -shangpuzhan.com -shangqiulvxing.com -shangquanquan.com -shangque.com -shangrao-marathon.com -shangshaban.com -shangshangke.me -shangshi360.com -shangshici.com -shangshu.cc -shangtao.net -shangtao360.com -shangtianapp.com -shangtongda.com -shanguansoft.com -shangusec.net -shangwb.com -shangwu168.com -shangxueba.com -shangyejihua.com -shangyekj.com -shangyeluoji.com -shangyexin.com -shangyexinzhi.com -shangyouze.com -shangyubank.com -shangyuer.com -shangzhang.com -shangzhibo.tv -shanhaizhanji.com -shanhe.cc -shanhu99.com -shanhuojiaoyi.com -shanhuu.com -shanhuxueyuan.com -shanjinqh.com -shankejingling.com -shanliao.com -shanlink.com -shanliulian.com -shanmao.me -shannon-sys.com -shannonai.com -shanp.com -shanpow.com -shanqb.com -shanqu.cc -shanse8.com -shanshoufu.com -shantoumama.com -shanweinews.net -shanxicloud.net -shanxidiy.com -shanximuseum.com -shanxiol.com -shanxiumao.com -shanxiuxia.com -shanxuenet.com -shanyemangfu.com -shanyetang.com -shanyeyuanliang.com -shanyhs.com -shanyishanmei.com -shanyougame.com -shanzhaiwang.net -shanzhen.com -shanzhen.me -shanzhonglei.com -shaodts.net -shaoerbc.org -shaoerbianchengwang.com -shaogood.com -shaokang.org -shaoke.com -shaolintagou.com -shaolinwy.com -shaoqun.com -shaoshilei.com -shaoxianchong.com -shaoxing330.com -shaoyee.com -shaozi.info -shaozimama.com -shaphc.org -shaqing.com -shaqm.com -share1diantong.com -share2dlink.com -share2uu.com -sharecharger.com -sharecore.net -sharedaka.com -shareditor.com -sharegog.com -shareinstall.com -shareinstall.net -sharejs.com -shareoneplanet.org -sharetao.com -sharetome.com -sharetrace.com -sharevdi.com -sharewaf.com -sharewithu.com -sharing-water.com -sharkselection.com -sharonroalind.com -sharpbai.com -shartu.com -shawdo.com -shawdubie.com -shawnzeng.com -shayangnala.com -shayugg.com -shayujizhang.com -shbaimeng.com -shbangde.com -shbars.com -shbbq.net -shbear.com -shbicycle.com -shbj.com -shbnrj.com -shbobo.com -shbyer.com -shcaoan.com -shcas.net -shcc-horizon.com -shccineg.com -shccio.com -shcell.org -shchengsan.com -shchhukou.com -shchjj.com -shclearing.com -shcljoy.com -shcngz.com -shcs2010.com -shcsdq.com -shcsup.com -shcxzxgs.com -shcymc.com -shdctp.com -shdjt.com -shdrkj.com -shdsd.com -shdzby168.com -shdzfp.com -she.vc -shebao.net -shebao5.com -shebao520.com -shebaotong.com -shebaoyizhan.com -shebiaotm.com -sheboo.com -sheca.com -shedejie.com -shedoor.com -shedunews.com -sheencity.com -sheepmats.com -sheepsun.com -sheetgit.com -sheeyi.com -shehuo.me -sheinet.com -sheizhiwo.com -sheji.com -shejibao.com -shejiben.com -shejidaren.com -shejigh.com -shejijia.com -shejijingsai.com -shejiku.net -shejipi.com -shejiqun.com -shejis.com -shejiwo.net -shejiye.com -shejizhaji.com -sheketiandi.com -shekou.com -shelive.net -shellsec.com -sheluyou.com -shelwee.com -shen-hua.com -shen1shen.com -shenanhui.com -shenbao.org -shenbiedu.com -shenbinghang.com -shenchai.com -shenchuang.com -shencut.com -shendamachine.com -shendoow.com -shendu.com -shendugho.com -shenduliaojie.com -shenduwin10.com -shenduwin8.com -sheng-huo.org -shengangzc.com -shengbangshenghua.com -shengbaoluo.com -shengbenzixun.com -shengcai.net -shengcaijinrong.com -shengdan.com -shengdaprint.com -shengdianhuadg.com -shengdianhuadk.com -shengejing.com -shengfanwang.com -shenghan.org -shenghefilms.com -shengheplastic.com -shenghui56.com -shenghuojia.com -shenghuorili.com -shenghuowo.com -shenghuozhe.net -shengjing360.com -shengjoy.com -shengli.com -shengming.net -shengminsy.com -shengpay.com -shengqian51.com -shengqianlianmeng.net -shengqugames.com -shengsci.com -shengtaireli.com -shengtian.com -shengtongedu.com -shenguang.com -shengwu01.com -shengxiao.net -shengxin.ren -shengxinquan.net -shengyeji.com -shengyidi.com -shengynan.com -shengzehr.com -shengzhaoli.com -shengzhouyigou.com -shenhaiedu.com -shenhexin.com -shenhexin.vip -shenhua.cc -shenhuagushi.net -shenjian.io -shenkexin.com -shenkong.net -shenlanbao.com -shenliyang.com -shenma.com -shenmadsp.com -shenmamov.cc -shenmayouxi.com -shenmou.com -shenmufeiyang0912.com -shenou.com -shenpinwu.com -shenqhy.com -shenqibuy.com -shenquol.com -shenrennn.com -shenrongda.com -shenruan.org -shenshi777.com -shenshiads.com -shenshouwl.com -shenshouyouxi.com -shenshu.info -shenshuo.net -shenshuw.com -shentongdata.com -shenweimicro.com -shenweisupport.com -shenwud.com -shenxianhua.com -shenxianyu.cc -shenxingnet.com -shenyangoffice.com -shenyecg.com -shenyehd.com -shenyequ.com -shenyou.tv -shenyunlaw.com -shenzan.com -shenzaole.com -shenzhekou.com -shenzhen-world.com -shenzhenair.com -shenzhenmarathon.org -shenzhenshouxin.com -shenzhenshui.com -shenzhentong.com -shenzhentour.com -shenzhenware.com -shepai1688.com -sheqjx.com -shequfu.com -shequfu.net -shequnguanjia.com -sher.vip -sherc.net -sheshui.com -sheui.com -sheup.net -shevdc.org -shexiannet.com -shexun.net -sheyi8.com -sheying001.net -sheyingtg.com -shezhan88.com -shfangshui.com -shfcw.com -shfdyk.com -shfft.com -shfilmmuseum.org -shfinancialnews.com -shfq.com -shfrp.com -shftth.com -shgaaz.com -shgao.com -shgaoxin.net -shgci.com -shgjj.com -shgsic.com -shgskj.com -shgyg.com -shhanqiao.com -shhbm.com -shheywow.com -shhgzf.com -shhonghu.com -shhorse.com -shhssts.com -shhuangding.com -shhuayi.com -shhuihai.com -shhuu.com -shhws.com -shhxf119.com -shhyhy.com -shhzcj.com -shi-ci.com -shi-ming.com -shi78.com -shibaihui.org -shibeike.com -shibeiou.com -shibor.org -shicai.biz -shicaidai.com -shicaids.com -shichangbu.com -shichuedu.com -shici.store -shicishe.com -shiciting.com -shiciyun.com -shida66.com -shidaedu.vip -shidaiyuhu.com -shidapx.com -shidastudy.com -shidi.org -shidiao136.com -shidiao18.com -shidu.com -shidz.com -shielday.com -shifen.com -shifendaojia.com -shifeng.com -shifenyuedu.com -shigaoshan.com -shigoog.com -shiguangkey.com -shiguangxu.com -shiguangyouju.com -shiguanvip.com -shij001.com -shijiala.com -shijian.cc -shijianla.com -shijiaok.com -shijibenteng.com -shijicloud.com -shijie2.com -shijiebang.com -shijiebao.vip -shijieditu.net -shijiehuarenbao.com -shijiemap.com -shijiemingren.com -shijieshangzuihaodeyuyan.com -shijiexia.com -shijieyouxi.com -shijieyunlian.com -shijihr.com -shijihulian.com -shijiong.com -shijiudao.com -shijuba.com -shijue.me -shijueju.com -shikang.net -shikee.com -shiku.co -shilawyer.com -shileizcc.com -shilian.com -shilian.net -shilipai.net -shilitie.net -shiliupo.com -shimano-fishchina.com -shiminjiaju.com -shimo.im -shimo.run -shimodev.com -shimolife.com -shimonote.com -shimonote.net -shimowendang.com -shineenergy.com -shinelink.vip -shinelon.com -shinemediaworld.com -shinerayad.com -shineu.com -shineway.com -shinewing.com -shineyie.com -shinianonline.com -shiningmidas.com -shinsoukun.com -shinybbs.info -shinycg.com -shinyway.org -shiove.com -ship56.net -shipengliang.com -shipfinder.com -shipgce.com -shiphr.com -ships66.com -shipsc.org -shiptux.com -shipuxiu.com -shipxy.com -shiqi.me -shiqichan.com -shiqichuban.com -shiqidu.com -shiqu.com -shiqumao.com -shiqutech.com -shirannegar.com -shirleyruby.com -shirleyyean.com -shishagame.com -shishangfengyun.com -shishike.com -shisongya.com -shitac.com -shitianxia.vip -shitibaodian.com -shitongaf.com -shitou.com -shitouboy.com -shitourom.com -shiwan.com -shiwangyun.com -shiweisemi.com -shiwenhua.org -shixian.com -shixiaojin.com -shixibiaozhi.com -shixijob.net -shixin.com -shixingceping.com -shixinhua.com -shixiseng.com -shixiu.net -shixiu.org -shixun.co -shixunsuda.com -shixunwl.com -shiyan.com -shiyanbar.com -shiyanbar.net -shiyanbbs.com -shiyanhospital.com -shiyanjia.com -shiyanlou.com -shiye.org -shiyebian.net -shiyebian.org -shiyi.co -shiyi11.com -shiyibao.com -shiyicunxiao.com -shiyiyx.com -shiyongjun.biz -shiyousan.com -shiyu.pro -shiyue.com -shiyuegame.com -shiyunlaile.com -shizhuonet.com -shjdc.com -shjdceo.com -shjgu.com -shjgxy.net -shjh120.com -shjhjc.com -shjinting.com -shjob.work -shjoycity.com -shjsit.com -shjt.net -shjxfc.com -shjyou.com -shkegai.net -shkkl.com -shkuangjing.com -shkypump.com -shl56.com -shlandscape.com -shlawserve.com -shlcd.com -shld.com -shlhwlkj.com -shlitree.com -shlll.net -shlmth.com -shlpk.com -shlungu.com -shmama.net -shmarathon.com -shmds.com -shmedia.tech -shmet.com -shmetro.com -shmiaosai.com -shmljm.com -shmnyy.com -shmog.org -shmulan.com -shmusic.org -shmxcz.org -shmy365.com -shmyapi.com -shmylike.co -shmylike.com -shnaer.com -shnb12315.com -shnczq.org -shneweye.com -shnosbbs.com -shnsyh.com -shnti.com -shoasis.net -shobserver.com -shockerli.net -shoegaze.com -shoeshr.com -shojo.cc -shokan.org -shokw.com -shomyq.com -shoot.photo -shootmedia.net -shop.globalsign.com -shop2255.com -shop2cn.com -shopbackdrop.com -shopbop.ink -shopchaoren.com -shoperm.com -shopin.net -shopj.net -shopjyh.com -shoplineimg.co -shopmaxmb.com -shopnc.net -shoprobam.com -shopxo.net -shopyy.com -shortof.com -shoubaodan.com -shoubiaobaojia.com -shouce.ren -shouce365.com -shouchaobao.com -shouchaobaoquan.com -shoucheng123.com -shoucw.com -shoudayy.net -shoudian.com -shoudian.info -shoudian.org -shouduit.com -shoudujuchangcn.com -shoudurc.com -shoufm.com -shougongke.com -shouhoubang.com -shouji.com -shouji10086.com -shouji315.org -shouji56-img.com -shouji56.com -shoujibao.net -shoujiduoduo.com -shoujihuifu.com -shoujikanshu.cc -shoujimi.com -shoujitouping.com -shoujiwan.com -shouliwang.com -shouluo.me -shoumizhibo.com -shouqianba.com -shouqiev.com -shouqu.me -shoutao.biz -shouxi.com -shouxi88.com -shouxibet.com -shouxieti.com -shouxintec.com -shouyao.com -shouyeren.org -shouyou.com -shouyouba.net -shouyoubus.com -shouyoucdn.com -shouyoujz.com -shouyoumen.com -shouyouqianxian.com -shouyouribao.com -shouyoushenqi.com -shouyoutan.com -shouyoutv.com -shouyouzhijia.net -shouzan365.com -shouzhang.com -shouzhangapp.com -shouzhou365.com -shouzhuanfa.com -shouzhuanzhidao.com -shovesoft.com -show160.com -showapi.com -showapk.com -showchina.org -showcome.net -showdesk.io -showdoc.cc -showerlee.com -showing9.com -showji.com -showjoy.com -showjoy.net -showmebug.com -showself.com -showstart.com -showxiu.com -showxue.com -showxue.org -showyu.com -shoyoo.com -shpanli.com -shpans.com -shpanyou.com -shpd.net -shpgt.com -shpgx.com -shphschool.com -shppa.net -shpuyuxxkj.com -shqcplw.com -shqi7.net -shqingzao.com -shqlty.com -shqmxx.com -shqswlgs.com -shrail.com -shrca.org -shrcb.com -shrcdy.com -shrenq.com -shrenqi.com -shrinkablesleeve.com -shrobotpark.com -shsaic.net -shsbnu.net -shsby.com -shsbzl.com -shsci.org -shsee.com -shshilin.com -shsihua.com -shsipo.com -shsixun.com -shsjb.com -shskapp.com -shsot.com -shspark.com -shspdt.com -shssp.org -shsunedu.com -shsxjy.com -shtdgj.com -shtdsc.com -shtefu.com -shtengshi.com -shtennis.org -shtfqx.com -shtianhe.cc -shtic.com -shtimg.com -shtion.com -shtml.net -shtrhospital.com -shtwjiebao.com -shu-ju.net -shu163.com -shuaacg.com -shuabuapp.com -shuadanfu.com -shuai.so -shuai.win -shuaibo.wang -shuaigay.com -shuaigay.nl -shuaigeshe.com -shuaigetupian.com -shuaihuajun.com -shuaiming.com -shuainiba.com -shuaishou.com -shuaishouzhuang.com -shuaitong.vip -shuajb.com -shuaji.com -shuaji.net -shuajibang.net -shuajibao.com -shuajige.net -shuajizhijia.net -shuame.com -shuanghui.net -shuangkuai.co -shuangtao.com -shuangtv.net -shuangxian.com -shuangxinhui.com -shuangyingsx.com -shuangyuejn.com -shuangzan.com -shuangzheng.org -shuanlongda.site -shuashuaapp.com -shuazhibo.com -shubao201.com -shubao95.com -shubiaob.com -shubulo.com -shubuzi.com -shucaiguaguo.com -shucaixiaoshuo.com -shuchongread.com -shucong.com -shudaizi.org -shudan.vip -shudaxia.com -shudc.com -shuerjia.com -shufa.com -shufaai.com -shufabao.net -shufadashi.com -shufafin.com -shufaji.com -shufami.com -shufashibie.com -shufawu.com -shufazidian.com -shufaziti.com -shufe.com -shuge.la -shuge.net -shuge.org -shuge9.com -shugoo.com -shuguanghuayuan.com -shuguanxs.com -shuhai.com -shuhaidata.com -shuhaisc.com -shuhaitz.com -shuhegroup.com -shuhua66.com -shuhuangla.com -shui-mai.com -shui.moe -shui.org -shui12366.com -shui2014.com -shuicao.cc -shuichachong.com -shuichan.cc -shuichan51.com -shuichuyu.com -shuidichou.com -shuididabingchou.net -shuidigongyi.com -shuidihealth.com -shuidihuzhu.com -shuidihuzhu.net -shuidike.com -shuidishuju.com -shuiditech.com -shuidixy.com -shuiguo.com -shuihulu.com -shuihuoibm.com -shuijing100.com -shuijingcn.com -shuijingka.com -shuijingwanwq.com -shuijingwuyu.com -shuiku8.com -shuiliaosheji.com -shuimiao.net -shuimoyuan.com -shuimujiaju.com -shuimushequ.com -shuinankeji.com -shuini.biz -shuipingzuo.com -shuiqian.cc -shuiwushi.net -shuixyh.com -shuiyinbao.com -shuiyoucam.com -shuizhiyuncaishui.com -shujike.com -shuju.net -shujuba.net -shujubang.com -shujubo.com -shujucun.com -shujupie.com -shujutang.com -shukeba.com -shukeju.com -shukoe.com -shukongwang.com -shukuai.com -shuland.com -shulb.com -shuliao.com -shulidata.com -shulihua.net -shuliyun.com -shuma2.com -shumahezi.com -shumaidata.com -shumeipai.net -shumeipaiba.com -shumenol.com -shumensy.com -shumiao.com -shumiimg.com -shumil.co -shumil.com -shumilou.com -shumilou.org -shumo.com -shundecity.com -shunderen.com -shunfalighting.com -shunfangw.com -shunguang.com -shunmi.com -shunong.com -shunshikj.com -shunshunliuxue.com -shunvzhi.com -shunwang.com -shuo6.com -shuo66.com -shuoba.org -shuobao.com -shuoboku.com -shuodedui.com -shuomingshu.net -shuomingshuku.com -shuosanguo.com -shuosc.org -shuoshuo4.com -shuoshuo9.com -shuoshuokong.com -shuoshuokong.org -shuotiancn2012.com -shuotoutiao.com -shuotxts.com -shuowan.cc -shuowan.com -shuowan.net -shuoxu.com -shuqi.com -shuqiapi.com -shuqiread.com -shuqireader.com -shuqistat.com -shuquge.com -shuqun.com -shuqw.com -shuren100.com -shurenbang.net -shurenyun.com -shushangyun.com -shushao.com -shushi100.com -shushihome.com -shushubuyue.com -shushubuyue.net -shusw.com -shuti.com -shuttle.co -shutxt.com -shuwangxing.com -shuwulou.com -shuxiao.wang -shuyang.tv -shuyangba.com -shuyfdc.com -shuyong.net -shuyouji.vip -shuyuewu.co -shuyun.com -shuzhiduo.com -shuzibao.com -shuziju.com -shuzixiaoyuan.com -shuziyinpin.com -shvlee.com -shwcsh.com -shwdbjgs.com -shweiya.com -shwglm.com -shwpbbs.com -shwqjx.com -shws.org -shwsg.net -shwyky.net -shxb.net -shxbe.com -shxf.net -shxhgzf.com -shxiaoran.com -shxibeiquanshe.com -shxil.com -shxkwck.com -shxpp.com -shxt.com -shxwcb.com -shy99.com -shyanke.com -shydjscl.com -shyestar.com -shyfci.com -shygc.net -shyhhema.com -shyingfu.net -shyjad.com -shykx.com -shykz123456.com -shymte.com -shyonghui.xyz -shyouai.com -shyouth.net -shyrcb.com -shyuanting.com -shyueai.com -shyunwei.net -shyuzhai.com -shyxcm.com -shyxfdc.com -shyxwz.com -shyy6688.com -shyyp.net -shyywz.com -shyz07.com -shyzsd.com -shzbc.com -shzbh.com -shzbkj.com -shzcgs.org -shzf.com -shzfzz.net -shzgd.org -shzgh.org -shzh.net -shzhangji.com -shzhanmeng.com -shzhiyingedu.com -shzhyx.com -shzkb.com -shzq.com -shzsun.com -si-en.com -si-in.com -si.cdn.dell.com -si0769.com -si9377.com -siaedu.net -siaoao.com -sias-sha.com -sibfi.com -sibida.net -sibub2c.com -sic.hk -sicheng.net -sicher-elevator.com -sichina.com -sichuan163.com -sichuanair.com -sichuangwy.org -sicimano.com -sicong.wang -sidatz.com -siddim.com -sidfate.com -siecc.org -sifalu.com -sifangguo.com -sifangvideo.com -sifayun.com -siff.com -sifive-china.com -sifou.com -sifve.com -sigchina.com -sightp.com -siglent.com -siglff.com -sigmachip.com -sigmamed.net -sigmoblive.com -sigu.cc -sigu.me -siguady.com -sigujx.com -siguoya.name -sigure.xyz -sigvc.org -sihai-inc.com -sihaidj.com -sihaimg.com -sihaishuyuan.com -sihaitv.com -sihaiyijia.com -siheal.com -sihuanpharm.com -sihuida.net -sihuisoft.com -siii.xyz -siiic.com -siilu.com -sijiaomao.com -sijijun.com -sijinchuanbo.com -sijitao.net -sike.cc -sikiedu.com -silanggame.com -sileadinc.com -silenceper.com -silianmall.com -siliaobaba.com -siliaokelijixie.com -siliaoycw.com -siling.com -silingge.com -silkpresent.com -silkroadtechnologies.com -silksong.me -sillydong.com -silucar.com -silucg.com -siludao.com -siluecai.com -siluke.cc -siluke.com -siluke.tw -silukeke.com -silusheji.com -siluwu.com -silverlight.dlservice.microsoft.com -silverlighter.net -sim.djicdn.com -sim800.com -simagic.com -simapple.com -simba.pro -simcom.com -simcomm2m.com -simcu.com -simengadx.com -simiam.com -simici3.com -simida.org -simiki.org -simingcun.net -simingtang.com -simon96.online -simope.com -simp.red -simperfect.com -simple-is-better.com -simplecd.cc -simpledatas.com -simplexue.com -simpo-data.com -simu800.com -simul-china.com -simulway.com -simuwang.com -simwe.com -simxhs.com -sina.com -sina.lt -sina.net -sinaapp.com -sinacdn.com -sinacloud.com -sinacloud.net -sinaedge.com -sinahk.net -sinahlj.com -sinaif.com -sinaimg.com -sinaluming.com -sinanet.com -sinanya.com -sinaquyong.com -sinashow.com -sinasinasinasina.com -sinastorage.com -sinasws.com -sinauda.com -sinawallent.com -sinawap.com -sinawf.com -sincetimes.com -sindsun.com -sinesafe.com -sinforcon.com -singbon.com -singcere.net -singdown.com -singee77.com -singfun.com -singhead.com -singhot.com -singlecool.com -singpodcast.com -singread.com -singtaonet.com -sinmeng.com -sino-corrugated.com -sino-cr.com -sino-flexography.com -sino-foldingcarton.com -sino-life.com -sino-manager.com -sino-rainbow.cc -sino-uniontrust.com -sino-web.net -sinoancher.com -sinoassistance.com -sinobaron.com -sinobasalt.com -sinobasedm.com -sinoca.com -sinocars.com -sinocateringexpo.com -sinocax.com -sinochem.com -sinochemb2c.com -sinochemitc.com -sinocul.com -sinoec.net -sinoef.com -sinoergy.com -sinoevin.com -sinofo.com -sinofsx.com -sinogt.com -sinohb.com -sinohotel.com -sinohowe.com -sinohx.com -sinohydro.com -sinoicc.com -sinoinfosec.com -sinoing.net -sinoins.com -sinointeractive.com -sinologyinstitute.com -sinolub.com -sinolube.com -sinomapping.com -sinomaps.com -sinomatin.com -sinomod.com -sinonet.org -sinooceanland.com -sinooilgas.com -sinopec.com -sinopecgroup.com -sinopechyzx.com -sinopecnews.com -sinopecsales.com -sinopecsenmeifj.com -sinopharm.com -sinopharmzl.com -sinophex.com -sinopr.org -sinosig.com -sinosiglife.com -sinostargroup.com -sinosteel.com -sinotf.com -sinotn.com -sinotone.cc -sinotone.net -sinotrans.com -sinovale.com -sinovatio.com -sinovationventures.com -sinovdc.com -sinovoice.com -sinowealth.com -sinowealth.com.hk -sinowel.com -sinoxk.com -sinreweb.com -sinsam.com -sintaytour.com -sintu.com -sinvofund.com -sinvta.com -sinyuee.com -sinzk.com -sipai.com -sipaphoto.com -sipco.com -sipeed.com -sipgl-lcl.com -siphrd.com -sipo-gd.com -sipo-hb.com -sipo-pesc.com -sipo-sc.com -sipo-tj.com -siportal.cdnetworks.com -siposchina.com -siqiangame.com -siqiquan.org -sique.com -sir3.com -sir66.com -siryin.com -sisen.com -sishuok.com -sishuxuefu.com -sisijiyi.com -sisijp.com -sisp-china.com -sisuoyun.com -siswin.com -sitcoffee.com -site-digger.com -siteapp-static.com -siteinfourl.com -sitekc.com -sites120.com -sitezj.com -sithc.com -sitiaoyu.com -sitongedu.org -sitongzixun.com -sitrigroup.com -situdata.com -sivan.in -sivps.com -siwaman.com -siwazyw.cc -siwazyw.tv -siwazyw.xyz -siwazywcdn.com -siwazywcdn2.com -siwazywimg.com -siwei.me -siweidaotu.com -siweidaoxiang.com -siweiearth.com -siweikongjian.net -siweiw.com -siwuprint.com -sixflower.com -sixianchina.com -sixiang.im -sixiangguo.net -sixiju.com -sixstaredu.com -sixu.life -sixuexiazai.com -sixunited.com -siyanhui.com -siyhust.com -siyu522.com -siyu527.com -siyuan.cc -siyuanedu.com -siyuanren.com -siyuefeng.com -siyunxi.com -siyuweb.com -sizeofvoid.net -sizuo.com -sj-lawyer.com -sj11hb.com -sj123.com -sj33.net -sj35hb.com -sj3w.com -sj88.com -sj96615.com -sj998.com -sjawards.com -sjbzx.com -sjcomic.com -sjdzp.com -sjdzp.net -sjetdz.com -sjfcdn.com -sjfpro.com -sjfx.com -sjfzxm.com -sjgnskf.com -sjhcip.com -sjhfrj.com -sjhgo.com -sjhl.cc -sjhy.net -sjifm.com -sjlqgg.com -sjm.life -sjmdh.com -sjmeigao.com -sjmxx.com -sjono.com -sjpcw.com -sjq315.com -sjqkd.com -sjrwzz.com -sjsbk.com -sjsydq.com -sjtiantang.com -sjtickettech.com -sjtjcn.com -sjtug.org -sjtxt.com -sjtxt.la -sjtype.com -sju56.com -sjvi.net -sjwtlm.com -sjwxzy.com -sjwyx.com -sjxinxiwang.com -sjxs.la -sjybsc.com -sjycbl.com -sjyst.net -sjytech.com -sjyx.com -sjyyt.com -sjz.cc -sjzbasha.com -sjzbwx.com -sjzcmw.com -sjzcsw.com -sjzdbs.com -sjzhu.com -sjzhushou.com -sjzkz.com -sjzlg.com -sjzlgz.com -sjzmama.com -sjznews.com -sjzqcrl.com -sjzrbapp.com -sjzsidadianji.com -sjztd.com -sjzwww.com -sjzxtsh.com -sjzyu.com -sjzyz.net -sjzz.cc -sjzzimu.com -sk-mtek.com -sk163.com -sk1999.com -sk2game.com -skatehere.com -skcto.com -skdlabs.com -skeo.net -sketchchina.com -sketchchina.net -sketchcn.com -sketchupbar.com -sketchupbbs.com -skg.com -skhao.net -skieer.com -skight.com -skinme.cc -skip-links.com -skiy.net -skjcsc.com -sklinux.com -skllmd.com -sklse.org -sklxsj.com -skomart.com -skongmx.com -skrshop.tech -sks7.com -sksdwl.com -skusoft.com -skwl.org -skwo.net -sky-deep.com -sky-fire.com -sky-planning.net -sky003.com -sky1shop.com -skyallhere.com -skyao.io -skybig.net -skybluead.com -skybluek.com -skycaiji.com -skycloudsoftware.com -skycn.com -skycn.net -skydust.net -skyeaglee.com -skyecs.com -skyfeather.online -skyfollowsnow.pro -skyfont.com -skyfox.org -skygho.com -skyheng.com -skyju.cc -skykeyjoker.com -skylerzhang.com -skyliteapi.com -skylook.org -skymobiapp.net -skymoons.com -skymoons.net -skynj.com -skype-china.net -skyqzone.com -skyrichpower.com -skyrivers.org -skyrj.com -skysea.com -skysgame.com -skysrt.com -skyts.net -skytv.cc -skyue.com -skywhat.com -skywldh.com -skyworth-ac.com -skyworth-cloud.com -skyworth-ea.com -skyworth-mould.com -skyworth.com -skyworthbox.com -skyworthdigital.com -skyworthds.com -skyworthiot.com -skyworthlighting.com -skyxinli.com -skyyin.org -skyzms.com -sl-360.com -sl.al -sladjust.com -slamtec.com -slanissue.com -slanmedia.com -slassgear.com -slatic.net -slchos.com -sld-cctv.com -sleepboy.com -slegetank.com -slertness.com -slfwq.com -slicercn.com -slieny.com -slimtheme.com -slink8.com -slinli.com -slinuxer.com -sliu.info -sljkj.com -sljypt.com -slkeq.com -slkj.org -slksy.com -sllai.com -slmbio.com -slmwp.com -slogra.com -slooti.com -slpi1.com -slrbs.com -slready.com -slsteel.com -slswx7.com -sltv.net -slupdate.dlservice.microsoft.com -slvdy.com -slwh-dfh.com -slwwedding.com -slzsxx.com -slzww.com -sm-check.com -sm-cq.com -sm-main.com -sm012.com -sm160.com -sm160.net -sm688839.com -sm96596.com -smabaike.com -smallk.net -smallpdfer.com -smallxu.me -smallyuan.com -smarch.com -smarchit.com -smart-idc.net -smart-ptt.com -smart-rise.com -smart4e.com -smartbiyun.com -smartcityzhejiang.com -smartcloudcon.com -smartdeep.com -smartdot.com -smartedm.com -smartemple.com -smartermicro.com -smartfactory-expo.com -smartgaga.com -smartgeek.vip -smartgslb.com -smarthey.com -smarthomecn.com -smartisan.com -smartisanos.com -smartleon.net -smartlifein.com -smartlinku.com -smartmidea.net -smartoct.com -smartpigai.com -smartproxy.me -smartqian.com -smarts.online -smartsenstech.com -smartshe.com -smartsteps.com -smartstudy.com -smartwebee.com -smartx-cn.com -smartx.com -smartyao.com -smarun.com -smaryun.com -smaty.net -smbaike.com -smbais.com -smbinn.com -smbxw.com -smc18.com -smc3s.com -smd88.com -smdcn.net -smdiban.net -smdmark.com -smdyvip.com -sme8718.com -smebb.com -smejs.com -smemo.info -smeoa.com -smesun.com -smfsgs.com -smfyun.com -smggw.com -smgif.com -smgjj.com -smgstar.com -smhdoto.com -smhom1.com -smhyplay.com -smianet.com -smic-sh.com -smics.com -smil888.com -smilec.cc -smilingwhitebear.com -smiseo.com -smjbo.com -smjyfx.com -smkmp.com -smmy365.com -smo-clinplus.com -smo-software.com -smohan.net -smokeliq.com -smoothgroup.cc -smovie168.com -smpeizi.com -smppw.com -sms9.net -smsbao.com -smshx.com -smskb.com -smsx.org -smsyun.cc -smt-dip.com -smt-job.com -smtcdns.com -smtcdns.net -smtchinamag.com -smtcl.com -smtdc.com -smth.org -smthome.net -smtsvs.com -smtvip.com -smucdn.com -smudc.com -smwd.tech -smwenxue.com -smxdiy.com -smxgjj.com -smxgzjy.org -smxs.com -smy01.com -smyfinancial.com -smyhvae.com -smyx.net -smzdm.co -smzdm.com -smzdmimg.com -smzdwan.com -smzwgk.com -smzy.com -snai.edu -snail.com -snail007.com -snailgame.net -snailshub.com -snailsleep.net -snailyun.com -snapemoji.net -snbkf34.com -sncdental.com -sncoda.com -sndhr.com -sndo.com -sneac.com -sneia.org -sngdxsn.com -sngx.ml -snh48.com -snhsnj.bar -sniec.net -snieri.com -snifast.com -snjairport.com -snjbs.com -snjjiu.com -snjrsks.com -snnd.co -snobten.com -snooda.com -snor-china.com -snowballsecurities.com -snowballtech.com -snowdream.tech -snowyimall.com -snrat.com -snren.com -snrtv.com -snrunning.com -sns.io -snsbao.com -snscz.com -snsfun.cc -snsfun.com -snsii.com -snssdk.com -snsteam.club -snsyx.com -snto.com -snupg.com -snwxn.com -snxfcw.com -snxiaowai.com -snxw.com -snysy1.com -snyu.com -snzfj.net -snzgy.com -snzhz.com -so-a.net -so-b.com -so-love.com -so-naver.com -so-t.net -so-voioe.com -so-w.com -so.com -so147.com -so8848.com -soarwatch.com -soba8.com -sobaidupan.com -sobanks.com -sobeian.com -sobereva.com -sobeycache.com -sobeycloud.com -sobot.com -soboten.com -sobug.com -sobuhu.com -socang.com -socansoft.com -socay.com -socchina.net -sochengyi.com -sochips.com -socialark.net -socialbeta.com -socialfishface.com -socialjia.com -socks1688.com -socolar.com -socomic.com -socool-tech.com -socsight.com -sod99.com -sodalife.xyz -sodao.com -sodc8.com -sodeog.com -sodexo-cn.com -sodhef.com -sodino.com -sodocloud.com -sodocs.net -sodu.cc -sody123.com -soeasysdk.com -soeol.com -sofabiao.com -sofang.com -sofangche.com -sofasofa.io -sofastack.tech -sofi-tech.com -sofreight.com -soft10.com -soft128.com -soft2005.com -soft50.com -soft5566.com -soft568.com -soft6.com -soft778.com -soft78.com -soft808.com -soft8899.com -softabc.com -softbanks.net -softbar.com -softbingo.net -softgostop.com -softhead-citavi.com -softhome.cc -softparkinfo.com -softtest.com -softwarechn.com -softwarecn.com -softwarekeyclub.com -softweek.net -softwelt.com -softwhy.com -softwincn.com -softxz.net -softznz.com -sogaa.net -sogame8.com -sogeci.net -sogo.com -sogoke.com -sogood360.com -sogou-inc.com -sogou-op.org -sogou.com -sogou2.com -sogoucdn.com -sogouimecdn.com -sogouw.com -sogouwenwen.com -soharp.com -soho-yiming.com -soho3q.com -sohochina.com -sohonow.com -sohotask.com -sohu-inc.com -sohu.com -sohu.net -sohucs.com -sohuhistory.com -sohunjug.com -sohuns.com -sohusce.com -sohuu.com -soicp.com -sojex.net -sojiang.com -sojiang.net -sojianli.com -sojson.com -sojump.com -sojump.hk -sokoban.ws -soku.com -sokutu.com -solarbe.com -solaridc.com -soldierstory-toys.com -soleilneon.com -solepic.com -solidot.org -soliloquize.org -solo-launcher.com -solochex.com -solodonna.world -solosea.com -solotoon.com -solution9.net -solvso.com -solvyou.com -somanhua.com -somao123.com -somcool.com -somdom.com -someabcd.com -somebus.net -somecoding.com -someet.cc -someibo.com -somepen.com -something8.com -somo.so -somode.com -somsds.com -sonald.me -songchuan12345.com -songcn.com -songguo7.com -songguojiankang.com -songhaifeng.com -songhaoyun.com -songhaozhi.com -songhengnet.com -songjiayang.com -songker.com -songlei.net -songluhome.com -songqili.net -songqinedu.com -songqinnet.com -songruhui.com -songsgames.com -songshitang.com -songshizhao.com -songshu.cc -songshudiandian.com -songshuhui.net -songshushuo.com -songsongruanwen.com -songsongxiongdi.com -songsongyingxiao.com -songsongyun.com -songtaste.com -songxiaocai.com -songyang.net -songyanjiaye.com -songyi.net -songyongzhi.com -songyuan163.com -songzhaopian.com -songzi100.com -songziren.com -sonhoo.com -sonhoo.net -soniu.net -sonkwo.com -sonkwo.hk -sonnewilling.com -sontan.net -sonyue.com -soobb.com -soocang.com -sooele.com -soogif.com -soojs.com -soolco.com -soolun.com -soomal.com -soonwill.com -soonyo.com -sooopu.com -soopat.com -soopay.net -sooshong.com -sooshu.net -soosmart.com -sootoo.com -sooxue.com -sooyisi.com -sooyooj.com -sooyuu.com -soozhu.com -sopaimai.com -sopanxia.com -sopdr.com -soperson.com -soppt.com -sopuning.com -soq.com -soqicrm.com -soquair.com -sorazone.com -sorpack.com -sos919.com -sosaw.com -sosdx.com -sosg.net -soshoo.com -soshoulu.com -soshuwu.com -sosidc.com -soso.com -sosoapi.com -sosobtc.com -sosohaha.com -sosomp.com -sosoo.net -sosoq.org -sosorank.com -sososteel.com -sosotec.com -sosotirp.com -sosowan.com -sosowenwen.com -sosoxian.com -sosoyunpan.com -sosoyy.com -sosuo.name -sotemall.com -sothink.com -sotwm.com -sou-yun.com -souaiche.com -souaus.com -soubct.com -soucai.com -souche-fin.com -souche-inc.com -souche.com -soucod.com -soudao.com -soudoc.com -souduanzu.com -soueast-motor.com -souebao.com -soufang.com -soufoo.com -soufuli.net -soufun.com -soufunimg.com -souge.cc -sougoulvyou.com -sougu001.com -souho.cc -souho.net -souhu.com -souid.com -souidc.com -souidc.org -soukecheng.net -soukf.com -soukuyou.com -soulady.net -soulapp.me -souldee.com -soulgame.mobi -souluo.net -soulv.com -soupan.info -soupf.net -soupian.org -soupingguo.com -soupis.com -soupu.com -soupu.org -soupv.com -souqian.com -souqiu8.com -souqiwang.net -souqupu.com -source3g.com -sourcecodecap.com -sourcedev.cc -sousea.com -soushai.com -soushuking.com -sousou.com -sousoudus.com -sousouyixia.com -soutaowang.com -southbeauty.com -southbeautygroup.com -southcn.com -southei.com -southernfund.com -southgis.com -southmoney.com -southnews.cc -southnews.net -southseagy.com -southyule.com -southzw.com -soutu123.com -soutudi.so -soutushenqi.com -souutu.com -souvr.com -souwifi.com -souwoo.com -souxue8.com -souxuexiao.com -souya.com -souyi.cc -souyidai.com -souyue.mobi -souyunku.com -sov5.com -sovell.com -soven.com -sovxin.com -sowang.com -sowangpan.com -soweather.com -sowin.com -sowu.com -soxs.cc -soxscc.info -soxsok.com -soxuxu.com -soyao.me -soyim.com -soyiyuan.com -soyobo.com -soyohui.com -soyoung.com -soyouso.com -soyunion.com -soyunpan.com -sozdata.com -sozhen.com -sp.cc -sp588.cc -sp588.net -sp84.com -sp910.com -space1688.com -spacechina.com -spacesystech.com -spacexlanding.com -spark-app.store -spark4y.com -sparkandshine.net -sparkgis.com -sparkletour.com -spasvo.com -spawatervip.net -spawor.com -spay365.com -spbo.com -spbo1.com -spbosta.org -spc365.net -spcdntip.com -spcywang.com -spdbh5.com -spdbuser.com -spdcat.com -spdchgj.com -spdex.com -spdiy.com -spdiy.net -spdl.com -spdydns.com -specialcdnstatus.com -speed-dns.cc -speed-idc.com -speedcdns.com -speednt.com -speedpan.net -speedsz.net -speedws.info -speedws.org -speedycloud.cc -speiyou.com -spfmc.com -spforum.net -spgnux.com -sphinxrating.com -sphinxsearch.org -spibj.com -spiiker.com -spin-view.com -spinytech.com -spirit-doll.net -spirithy.com -spischolar.com -spjxcn.com -spl4cn.com -splaybow.com -splayer.org -splayer.work -splmcn.com -spnchinaren.com -spoience.com -spointdesign.com -spongeliu.com -sportk8.com -sportnanoapi.com -sportq.com -sports-idea.com -sportsdt.com -sposter.net -spot.download -spoto.net -spouyashop.com -spplnet.com -sppmc.com -spprec.com -spps.cc -spr-atm.com -sprabbit.com -spreton.com -spring4all.com -springairlines.com -springboot.io -springcloud.cc -springcocoon.com -springtour.com -spriteapp.com -sprzny.com -spswc.com -sptcc.com -sptccn.com -spthome.com -sptxm.com -spush.com -spway.net -spyouxi.com -spzs.com -sq1996.com -sq580.com -sq581.com -sq688.com -sqa-chn.com -sqage.com -sqanju.com -sqbot.vip -sqchunqiu.com -sqdaily.com -sqeatin.com -sqfcw.com -sqfortune.com -sqggzy.com -sqiming.com -sqkb.com -sql110.com -sqlsec.com -sqmingli.com -sqmlw.com -sqrc.net -sqreader.com -sqrtthree.com -sqstudio.com -sqsxs.com -squarecn.com -squarefong.com -squrab.com -sqxy.net -sqzapp.com -sqzw.com -srcb.com -srcbcz.com -srcdict.com -srcmsh.com -srcssc.com -sreanalyze.com -srell.com -srfip.com -srgow.com -srichina.org -sritsoft.com -srjxj.com -srm.dji.com -srrsh.com -srrtvu.com -srssn.com -srtong.com -srun.com -srw00.com -srworld.net -srx3.net -srxww.com -sryjx.com -srzc.com -srzxg.com -srzxjt.com -ss-ceo.com -ss0.me -ss6.co -ss8899888.com -ssart.net -ssaxx.com -ssaya.win -ssbbww.com -ssbgzzs.com -ssby.cc -sscity.org -sscmwl.com -ssdata.com -ssdax.com -ssdfans.com -ssdvd.net -sseinfo.com -ssf.cc -ssggg.com -ssgushi.com -ssine.cc -ssine.ink -ssipex.com -ssjjss.com -ssjjtt.com -ssjlicai.com -ssjxx.com -ssjzw.com -ssky123.com -ssl-google-analytics.l.google.com -ssl.gstatic.com -sslaaa.com -sslceshi.com -sslchaoshi.com -sslchina.com -sslcity.com -ssldun.com -ssleye.com -sslibrary.com -sslnode.com -ssmec.com -ssmoit.com -ssnewyork.com -ssnn.net -ssofair.com -ssoffo.com -ssozz.com -ssp86.com -sspaas.com -sspai.com -sspai.me -sspezz.com -ssports.com -ssports.net -sspsky.com -ssqgx.com -ssqzj.com -ssrcr.com -ssreader.com -ssrrxx.com -ssrtys.com -sss129vip.com -ssscdn.com -sssie.com -ssso.com -sst-ic.com -sst-sd.com -ssuu.cc -ssvob.com -sswchina.com -ssxf.net -ssyar.com -ssyer.com -ssyule.com -ssyxlx.com -ssyzx.net -sszjnc.com -sszzz.com -st001.com -st123.com -st180.com -stackboom.xin -stackcc.com -stackoom.com -stackoverflow.club -stage1st.com -stage3rd.com -stajy.com -standardshop.net -star-boy.com -star-village-ent.com -star1024.com -star7th.com -starbaysoft.com -stardict.net -stardict.org -stardoctor.com -starduster.me -starfivetech.com -stargame.com -staridc.net -starlight-generator.com -starlott.com -starlunwen.org -starming.com -starpainters.net -starparkshenzhen.com -starpiao.com -starrtc.com -starrysurvey.com -starschina.com -starschinalive.com -starsino.com -starsmicrosystem.com -starstech.cc -starstech.tech -starstopic.com -starswar.org -start.htc.com -start.htcsense.com -startcarlife.com -starting2000.com -startogether1.com -startos.com -startos.org -startup-partner.com -starwarschina.com -stat-nba.com -stat18.com -static.cdnetworks.com -staticaa.com -staticdn.net -staticec.com -staticf.com -staticfile.org -statickksmg.com -staticssl.image-gmkt.com -staycu.com -stbieshu.com -stboda.com -stc2002.com -stcash.com -stcmcu.com -stcmcudata.com -stcn.com -stcpsm.com -stcv66.com -stdaily.com -stdard.com -stdicloud.com -stdlibrary.com -stdout.pub -stdwp.com -steambang.com -steamboxs.com -steamchina.com -steamcn.com -steampp.net -steamproxy.net -steamrepcn.com -steamvpn.org -steamxdf.com -stec.net -stedu.net -steelphone.com -steelsearcher.co.kr -steelsearcher.com -stefg.org -stepfpga.com -stevenshi.me -stfile.com -stg8.com -stgairasia.com -stgod.com -stgowan.com -sthforme.com -sthifi.com -sthke.com -stianran.com -stjfw.net -stjunshi.com -stjy.net -stkey.win -stlswm.com -stmaoyi.com -stmbuy.com -stmcu.org -stmybj.com -stnn.cc -stnts.com -sto80.com -stock8m.com -stockhn.com -stocks-sparkline-lb.apple.com.akadns.net -stockstar.com -stockwei.com -stockxp.com -stointl.com -stone168.com -stonebuy.com -stoneios.com -stoneo2o.com -stonepoll.com -stonepoll.net -stoneread.com -stonescloud.com -stoneu.com -stonexp.com -stor-age.com -storagesemicon.com -store.apple.com -store.apple.com.edgekey.net -store.apple.com.edgekey.net.globalredir.akadns.net -store.dji.com -store.nike.com -store.storeimages.apple.com.akadns.net -store.storeimages.cdn-apple.com -storeedgefd.dsx.mp.microsoft.com -storkapp.me -stormorai.com -stormsend1.djicdn.com -story520.com -storyboardworld.com -storyday.com -storyren.com -stourweb.com -stourweb.net -stovol.club -stoyard.com -str-mo.com -strconv.com -strcpy.me -streamaxtech.com -streamcomputing.com -streaming.vn.teslamotors.com -streffy.com -strong-study.com -strongcms.net -strongled.com -stswjx.com -stubbornhuang.com -studa.net -studentboss.com -studioartiz.com -study-kit.com -studyapi.com -studyems.com -studyez.com -studyfr.net -studyget.com -studygolang.com -studyingtours.com -studyintour.com -studyiris.com -studyjamscn.com -studylinux.net -studyofnet.com -studypay.com -studyuser.com -studyvip.com -stuhome.net -stuhui.com -stuliving.com -stuln.com -stupid77.com -stupidet.com -stuq.com -stuq.org -stutimes.com -stvgame.com -styadmin.com -stylecdn.com -stylemode.com -styles-sys.com -stz8.com -su-long.com -suaee.com -suanbanyun.com -suandao.com -suanfazu.com -suangtianw.com -suanguajie.com -suanisp.com -suanjuzi.com -suanli.org -suanlitou.com -suanning.com -suanst.com -suanya.com -suaooo.com -suapp.me -subaonet.com -subaotuan.com -subingkang.com -subinwechat.com -sublimetextcn.com -subline.org -subo.net -subo40.com -subom.net -subond.com -suboyouku.com -suboyun.net -subuy.com -sucai.com -sucaibar.com -sucaidao.com -sucaifengbao.com -sucaifu.com -sucaihuo.com -sucaijishi.com -sucainiu.com -sucaitu.cc -sucaiw.com -such-game.com -suchasplus.com -suchen820.com -suchso.com -sucop.com -sucoupon.com -suda123.com -sudaizhijia.com -sudaoa.com -sudaqq.com -sudidc.com -sudu-67ph.com -sudu-72ub.com -sudu-kay6.com -sudu-pq2y.com -sudu-q6wk.com -sudu-r8gh.com -sudu-sq56.com -sudu-tf42.com -sudu-xu9b.com -sudu123.net -suducha.com -sududa.com -sudupower.net -sudusite.com -sueflower.com -sueon.com -sufangxu.com -sufeinet.com -sufont.com -sugar918.com -sugarcanetechnology.com -sugarforex.com -sugarguo.com -sugarle.com -sugon.com -sugou.com -suhaodian.com -suhuibao.com -suhuishou.com -sui.com -suibianla.com -suibianzhao.com -suibiji.com -suicloud.com -suilengea.com -suileyoo.com -suinian.com -suinikan.com -suiniyi.com -suipq.com -suiqiao.com -suirui.com -suishenyun.net -suishouji.com -suisuihu.com -suisuijiang.com -suixingjia.com -suixw.com -suiyichong.com -suiyiju.com -suiyuanjian.com -suiyueyule.com -suizhoushi.com -suizui.net -sukimad.com -sukiu.net -sukkaw.com -sulabs.net -sulandscape.com -sule.cc -suleapi.com -sulianlian.com -suliaodingzhi.com -sumaart.com -sumaarts.com -sumatang.com -sumavision.com -sumeme.com -sumgotea.com -sumiaowang.com -suming.in -sumly.net -summall.com -summerlight.name -sumory.com -sumrday.net -sumscope.com -sumsz.com -sumygg.com -sun-ada.net -sun-lion.com -sun-wish.com -sun0769.com -sun0769ns.com -sun0816.com -sun66.net -sunater.com -sunbloger.com -sunbo.com -sunbo367.com -sunborngame.com -sunboxsoft.com -sunboyu.com -suncafe.cc -suncco.com -sundan.com -sundns.com -sundray.com -sundxs.com -sunear.net -sunfarms.net -sunfcb.com -sunflyday.com -sunfounder.cc -sunfront.com -sunft.com -sungari1995.com -sungesoft.com -sungoal.org -sungoedu.com -sunhante.com -sunhaojie.com -suninf.net -suning.com -suningcloud.com -suningestate.com -suningholdings.com -sunjian1414.com -sunjidong.net -sunjiwen.com -sunjix.com -sunjs.com -sunland.cc -sunlands.com -sunlands.wang -sunlandstudy.com -sunlandvip.com -sunlandzk.com -sunlife-everbright.com -sunlight-tech.com -sunlightbig.com -sunlogin.com -sunlons.com -sunlordinc.com -sunlune.com -sunmi.com -sunmingxia.com -sunmnet.com -sunnada.com -sunny90.com -sunnyaction.com -sunnychina.com -sunnyos.com -sunnyqi.com -sunnyxx.com -sunofbeaches.com -sunowo.com -sunpala.com -sunpcm.com -sunplusedu.com -sunpma.com -sunpun.com -sunrise-env.com -sunrisedutyfree.com -sunrisenan.com -sunrtb.com -sunsharer.com -sunshe.com -sunshine-power.net -sunshinechn.com -sunsky-online.com -sunstarasia.com -sunstu.com -suntalk-shftz.com -suntop168.com -suntray.com -suntrayoa.com -sunup3d.com -sunupcg.com -sunwayworld.com -sunweiwei.com -sunwinon.com -sunwoda.com -sunwodaenergy.com -sunwy.org -sunxiaoning.com -sunxinfei.com -sunyansong.com -sunyea.com -sunyet.com -sunyingchao.com -sunyixing.com -sunyongfeng.com -sunzhongwei.com -suo.im -suo.nz -suobao8.com -suobuy.com -suofeiya.com -suofeiyashop.com -suoge.net -suorang.com -suorong.com -suoxin5.com -suoyiren.com -supcname.com -supcompute.com -supcon.com -supdri.com -supeeder.com -supei.com -super-mt.com -superboss.cc -superbrowser.hk -superbuy.com -supercrm.com -superdns.net -superfix.com -superforeseer.com -supergslb.com -superhl.com -superjq.com -superlb.net -superlib.com -superlib.net -superlink.mobi -supermap.com -supermap.io -supermapcloud.com -supermapol.com -superpb.com -superpowercn.com -superqq.com -superslide2.com -supersocket.net -superyd.com -superzl.com -supesite.com -supesoft.com -supfast.net -supfree.net -supmeter.com -supmil.com -supmil.net -supoin.com -supool.com -suporpe.com -support-china.apple-support.akadns.net -support-cn.samsung.com -support.apple.com -support.globalsign.com -support.lenovo.com -supumall.com -supuy.com -suqian360.com -suqicloud.com -suqishi.com -suqnn.com -surdoc.net -sure56.com -suremotoo.site -surface-ser.com -surmon.me -sursen.com -sursenelec.com -sursung.com -surtime.com -suruicloud.com -survey-y.com -survey.work -surveyhills.com -surveyunion.com -survivor99.com -sushouka688.com -susong51.com -susongbbs.com -sustc.us -susudm.com -suteidc.com -sutuiapp.com -sutune.me -suuk.org -suukcn.com -suv666.com -suxiaohu.com -suxiazai.com -suxiege.com -suxing.me -suxuenet.com -suxuewang.com -suy.me -suyanw.com -suyuening.com -suyugame.com -suyunbo.tv -suyutech.com -suzhenyi.com -suzhou.cc -suzhoubank.com -suzhouds.com -suzhoulida.com -suzhoushilla.com -suzhousj.com -suzip.com -suzip.net -suzuki-china.com -suzuki-shanghai.com -svenhetin.com -svinsight.com -svip15.com -svipduihuan.com -svlik.com -svmuu.com -svn999.com -svnbucket.com -svnspot.com -svnur4.com -svw-volkswagen.com -svwuc.com -sw-bllp.com -sw0013.com -sw2008.com -sw996.com -swaeab.com -swakopuranium.com -swang8.com -swansea86.com -swansonchina.com -swap.wang -swaqds.com -swarma.net -swarma.org -swatou.com -swbbsc.com -swcatalog-cdn.apple.com.akadns.net -swcatalog.apple.com -swcdn.apple.com -swcdn.g.aaplimg.com -swchina.org -swcpu.com -swdist.apple.com -swdist.apple.com.akadns.net -sweet-data.com -sweetalkos.com -sweetdan.com -sweetlove.cc -sweetmartmarketing.com -sweetread.net -swfc-shanghai.com -swg36.com -swgzs.com -swhysc.com -swift.gg -swift51.com -swifter.tips -swifthumb.com -swiftlet.net -swiftmi.com -swiftstar.net -swijoy.com -switch520.net -swjinsheng.com -swjoy.com -swkong.com -swlhome.com -swlidc.com -swliuxue.com -swlsbj.com -swoft.org -swok.net -swomc.net -swoole-cloud.com -swoole.com -swordair.com -swordart.online -swordnets.net -swordofmorning.com -swordtt.com -swotbbs.com -swothouse.com -swsbw.com -swscan-cdn.apple.com.akadns.net -swscan.apple.com -swsm.net -swsmu.com -swstsg.com -swt0.com -swupdl.adobe.com -swwlotus.com -swwy.com -sx189.com -sx267.com -sxafz.com -sxbang.net -sxbawy.com -sxccb.com -sxcits.com -sxcm.net -sxcntv.com -sxcqzyc.com -sxctf.com -sxcwit.com -sxcyts.com -sxcywy.com -sxd408.com -sxddgxcy.com -sxdkj.com -sxdwsx.com -sxdygbjy.com -sxdzyp.com -sxemc.com -sxepc.com -sxfblog.com -sxfu.org -sxgdtv.com -sxglpx.com -sxgoo.com -sxgq.net -sxgs.com -sxgwyw.org -sxhctv.com -sxhlxy.com -sxhm.com -sxhpthsm.com -sxhr.net -sxhxbank.com -sxiaoshuo.com -sxjagc.com -sxjhzsgc.com -sxjzxww.com -sxkid.com -sxkzxt.com -sxlcdn.com -sxldns.com -sxldtv.com -sxmaps.com -sxmtdz.com -sxncb.com -sxnfss.com -sxnxl.com -sxnycl.com -sxnyzs.com -sxol.com -sxpdf.com -sxpdk.com -sxpjp.com -sxplc.com -sxpmg.com -sxprgc.com -sxpta.com -sxpyzg.com -sxrb.com -sxrbw.com -sxrczx.com -sxrjcspx.com -sxrtv.com -sxsapi.com -sxsgs.com -sxsim.com -sxsimg.com -sxsjgy.com -sxslnews.com -sxsoft.com -sxsruida.com -sxsslz.net -sxszw.net -sxthzs.com -sxtppm.com -sxtvs.com -sxtybook.com -sxuyr2nx.com -sxvt58.com -sxwbs.com -sxwpyx.com -sxwrsa.org -sxww.com -sxxdll.com -sxxiaomeng.com -sxxl.com -sxxt.net -sxxw.net -sxxyfw.com -sxxynews.com -sxy7.com -sxycrb.com -sxyj.net -sxzfcy.com -sxzhaobiao.com -sxzlycl.com -sxzq.com -sxzt.org -sxzydj.com -sy-home.com -sy12306.com -sy25.com -sy2k.com -sy3.com -sy76.com -sybasebbs.com -syberos.com -sybj.com -sycaijing.com -sycdtz.com -sycxzx.net -sydaxxw.com -sydcch.com -sydi.org -sydimg.com -sydjwl.com -sydw8.com -sydwzp.com -sydzconn.com -sydzdiy.com -syf.ink -syfw.com -syg315.com -sygd.com -sygsyq.com -syhccs.com -syhhidc.com -syhhkj.com -syhospital.com -syhtcgf.com -syiptv.com -syitgz.com -syjiancai.com -syjkqzw.com -syjzedu.com -sykong.com -sylixos.com -syltdj.com -symama.com -symtc.com -symuge.com -syn029.com -synacast.com -synball.com -sync.sh -synjones.com -synjones.net -synochip.com -syntao.com -synyan.net -syoits.com -syoker.com -syoogame.com -syoseo.com -syoucn.com -syouhui.com -syouzyo.org -sypao.com -sypole.com -syqingmei.com -syr-sce.com -syrcb.net -sys-ele.com -syscan360.org -sysceo.com -sysclk.com -syscxp.com -sysdyy120.com -sysengi.com -sysfans.com -syshospital.com -syshospital.org -sysmini.com -sysmk120.com -sysrsksy.com -systoon.com -sysush.com -sysuyz.com -sysysjnk.com -sytcke.com -sythealth.com -syttgame.com -sytuku.com -syuan.net -syue.com -sywg.com -sywgy.com -syxj.net -syxwang.com -syxwnet.com -syy07.com -syys8.com -syyx.com -syyyking.com -syzlzz.com -syzoukan.com -sz-3a.com -sz-amdc.com -sz-cerberus.com -sz-changfeng.com -sz-czzc.com -sz-dfl.com -sz-dns.net -sz-edsy.com -sz-etong.com -sz-iflysse.com -sz-jlc.com -sz-lcsc.com -sz-mtr.com -sz-osckj.com -sz-printing.com -sz-skt.com -sz-tianmai.com -sz-trip.com -sz-ua.com -sz-ytq.com -sz0760.com -sz121.com -sz189.com -sz1978.com -sz240.com -sz315.org -sz4db.com -sz5156.com -sz5983.com -sz61.com -sz7h.com -sz836.com -sz886.com -szadst.com -szaeia.com -szaiaitie.com -szaima.com -szairport.com -szaisino.com -szaiten.com -szande.com -szaudio.com -szbbs.org -szbcase.com -szbdyd.com -szbeilu888.com -szbelle.com -szbelle.net -szbiu.com -szbnrj.com -szbwgr.com -szbwgy.com -szbwpt.com -szbym.com -szc.com -szca.com -szcatic.com -szcec.com -szchi.net -szclmd.com -szcno.com -szcompare.com -szcp.com -szcsot.com -szcssx.com -szcsw.com -szcua.org -szcwdz.com -szcy99.com -szczjy.com -szczkjgs.com -szdaily.com -szdc.org -szdcjd.com -szddns.net -szdesigncenter.org -szdiyibo.com -szdn1ms.com -szdxjf.com -szdyx8.com -szeant.com -szeasyin.com -szed.com -szedu.net -szeholiday.com -szelanpo.com -szelight.com -szfa.com -szfachina.org -szfangzhouhd.com -szffmr.com -szfg.net -szflysky.com -szfob.cc -szfuit.com -szfw.org -szfwzl.com -szfyhd.com -szgalaxy.com -szgft.com -szgftz.com -szggzy.com -szgky.com -szgla.com -szguanai.com -szgwsd.com -szgymz.com -szhdlm.com -szhdyic.com -szhetai.com -szhgh.com -szhh8.com -szhiross.com -szhk.app -szhk.com -szhkkd.com -szhlodz.com -szhlsg.com -szhome.com -szhomeimg.com -szhot.com -szhtp.com -szhuace.com -szhufu.com -szhuhang.com -szhulian.com -szhulian.net -szhytrip.com -szider.com -szisland.com -szjcyyy.com -szjhxjt.com -szjjtg.com -szjlwul.com -szjuquan.com -szjyt66.com -szjytx.com -szkb.net -szkingdom.com -szkoa.com -szksqy.com -szlande.com -szlangwei.com -szlc9.com -szlcsc.com -szledia.org -szleezen.com -szlhtram.com -szlianya.net -szlihuam.com -szlilun.com -szlingsheng.com -szlips.com -szlos.com -szlottery.org -szltz.com -szlvbarcode.com -szlwtech.com -szmadigi.com -szmall.com -szmama.com -szmama.net -szmc.net -szmctc.com -szmil.com -szmrcd.com -szmsheng.com -szmslaser.com -szmtzc.com -szmuseum.com -szmynet.com -szmyxc.com -szn360.com -sznews.com -szniego.com -szniushi.com -sznlgg.com -sznmd.com -szns-marathon.com -szol.net -szolxd.com -szonline.net -szp168.com -szpa.com -szpclab.com -szpgzn.com -szpiao.com -szpiaoyi.com -szpichappy.com -szpmi.org -szpowerpms.com -szputy.com -szpxe.com -szqcz.com -szqf.org -szqgzx.com -szqinxindz.com -szqsq.com -szqt.net -szquanli.com -szrcfw.com -szrlqy.com -szrrjc.com -szschj.com -szsci.net -szscree.com -szsczx.com -szseafoodexpo.com -szshequ.org -szshinp.com -szsia.com -szsing.com -szsjtjj.com -szsky.com -szslhssy.com -szsmk.com -szsn.pro -szsq.net -szsti.net -szsunlaser.com -szswt.net -szt365.com -sztaijier.com -sztalent.org -sztanko.com -sztara.com -szteacher.net -szthks.com -sztkc.com -sztongdazulin.com -sztopbrand.com -sztspi.com -sztxcpa.com -szuavia.org -szvca.com -szvft.com -szvi-bo.com -szwb.com -szwblm.com -szwego.com -szweita.com -szwellsun.com -szwfb.com -szwfzs.com -szwgroup.com -szwstui.com -szwwco.com -szxbyx.com -szxdhj.com -szxianchu.com -szxiangjun.com -szxihu.com -szxinghe.net -szxinjiaxin.com -szxinyixin.com -szxlga.com -szxqsx.com -szxsdmy.com -szxuexiao.com -szxxtx.com -szydsxy.com -szyfdz.net -szyhljt.com -szyibei.com -szyin.com -szyingwei.com -szyingzhan.com -szyixiu.net -szyjedu.com -szymweb.com -szyran.com -szysmpay.com -szyuda88.com -szyxwkj.com -szyy0373.com -szyyda.com -szyyt.com -szyyx.com -szzbmy.com -szzfgjj.com -szzfzd.com -szzh365.com -szzhangchu.com -szzs360.com -szzxks.net -szzyqc.net -t-bb.net -t-biao.com -t-cha.com -t-cheshi.com -t-chs.com -t-d.tv -t-firefly.com -t-gafa.com -t-io.org -t-ji.net -t-jiaju.com -t-jiu.com -t-nan.com -t-v.com -t.tt -t00y.com -t027.com -t086.com -t1.ink -t10.com -t105.com -t11.store -t12.com -t123yh.xyz -t1networks.com -t1y4.com -t20000.com -t262.com -t2cn.com -t2df.com -t3315.com -t365777.com -t3pp.com -t5.work -t56.net -t56jy.net -t58b.com -t5a9.com -t5xs.com -t6756.com -t6q.com -t7t71.com -t7w157.com -t85.net -t888w.com -t8f.com -t8tcdn.com -ta26.com -taaas.org -tabalt.net -tachangxing.com -taclsc.org -tadaigou.com -tadiao168.com -tadseeker.com -tadu.com -taeapp.com -tag.gg -taglyst.com -tagmmm.com -tagphi.net -tagtxq.com -taguage.com -taguxdesign.com -tahua.net -tai-liang.com -tai3399.com -tai666666.com -tai87.com -taian.com -taianmedia.com -taiantang.net -taibumall.com -taichangle.com -taichi-app.com -taicihome.com -taidao.net -taidous.com -taidu.com -taidupa.com -taifutj.com -taig.com -taigaoxiao.com -taigongwl.com -taigpro.com -taiguoyu.com -taihaikj.com -taihainet.com -taihaocn.com -taihe.com -taihehospital.com -taihemedia.com -taiho.cc -taihuoniao.com -taihuwang.com -taihuyuan.com -taiji.com -taijicoder.com -taijiny.com -taijio.com -taijs.com -taijutt.com -taijutv.com -taikang.com -taikanglife.com -taikangzhijia.com -taikeji.com -taikongmedia.com -taikr.com -tainicement.net -taipingyangyinshua.com -taiqigame.com -tairan.com -taishangshiwu.com -taishenghb.com -taishengtoys.com -taitaiblog.com -taitaikg.com -taiwandao.tw -taixingren.com -taixsw.com -taiyang888.com -taiyangd.com -taiyanghttp.com -taiyangpo.com -taiyiche.com -taiyiplus.com -taiyougo.net -taiyulink.com -taizibao.com -tajdny.com -tajubao.com -tajyw.net -takungae.com -takungpao.com -tal-rasha.com -taladapp.com -talangy.com -talbrain.com -talebase.com -talebook.org -talentjava.com -talents-tech.com -talentsmag.com -talicai.com -taliove.com -taljdns.com -talk-fun.com -talk007.com -talkgw.com -talkingchina.com -talkingdata.com -talkingdata.net -talklee.com -talkop.com -talkwithtrend.com -talkyun.com -taluo.com -talyscm.com -talzjsj.com -tamaegis.com -tamc8.com -tamersunion.net -tamersunion.org -tamguo.com -tamigroup.com -tamll.com -tamtattoodx.com -tan.cc -tan07.com -tan14.net -tan8.com -tan90.me -tanbaicun.com -tanbo.name -tancdn.com -tanchinese.com -tandehao.com -tandjx.com -tang-lei.com -tang.su -tang8.com -tangcuwang.com -tangdaoya.com -tangdou.com -tangdouimg.com -tangeche.com -tanggu11g.com -tangguoxian.com -tanghushi.com -tangjie.me -tangjiu.com -tangkabj.com -tanglei.name -tangmi.net -tangobrowser.net -tangongye.com -tangqiu.tv -tangrenjv.com -tangruiqian.com -tangsanshu.com -tangshan.cc -tangshijun.com -tangshuang.net -tangshui.net -tangsongys.com -tangsuanradio.com -tangtang.org -tangtanghr.com -tanguan.net -tangux.com -tangwumo.com -tangyingkang.com -tangzhekan2.net -tangzhuan666.com -tangzongchao.com -tanhaibo.net -tanho.com -tanhu.net -tankeai.com -tankmm.com -tankywoo.com -tanling.com -tanluxia.com -tanmer.com -tanmizhi.com -tannet-information.com -tanpoqiuer.com -tanrd.com -tanshudata.com -tansoole.com -tansuotv.com -tantanapp.com -tantu.com -tantu.info -tantuw.com -tanv.com -tanwan.com -tanwan123.net -tanwanyx.com -tanweime.com -tanwuapp.com -tanx.com -tanyihui.com -tanyu.mobi -tanyuantech.com -tanzhouedu.com -tanzhoujiaoyu.com -tanzhouvip.com -tao-jiujiu.com -tao-star.com -tao-studio.net -tao-wu.com -tao008.com -tao123.com -tao168.com -tao2tao.com -tao30.com -tao3c.com -tao616.com -tao800.com -tao8090.com -tao885.com -taoad.com -taoba568.com -taobangban.com -taobao-img.com -taobao.com -taobao.cz -taobao.net -taobao.org -taobao.tw -taobao.wang -taobao1111.com -taobao92.com -taobaocdn.com -taobaocdn.net -taobaoux.com -taobaoweb.co -taobaozxw.com -taobc.com -taobeihai.com -taobeirj.com -taobot.com -taobz.com -taoc.cc -taocece.com -taoche.com -taoci.com -taocloudx.com -taocms.org -taocz.com -taodabai.com -taodake.com -taodangpu.com -taodao.kim -taodaso.com -taodaxiang.com -taodianjia.com -taodiantong.com -taodiqupu.com -taodocs.com -taodu.com -taodudu.cc -taoduyx.com -taofang.com -taofen8.com -taofont.com -taogula.com -taohaobang.com -taohhui.com -taohua.com -taohuaan.net -taohuadao3.com -taohuazu.net -taohuazu.pw -taohui.pub -taohuichang.com -taohuizhou.com -taohuochang.com -taohuren.com -taohwu.com -taoibao.net -taojiji.com -taojin6.com -taojindi.com -taojingame.com -taojinhudong.com -taojinji.com -taojinyi.com -taokaifu.com -taoke.com -taokehome.com -taokewenan.com -taokezhushou.com -taokouling.com -taoku.com -taolusm.com -taolx.com -taomanhua.com -taomee.com -taomeiju.com -taoming.com -taomingyan.com -taonienie.com -taoniu.com -taoniupin.com -taooo.cc -taopiaopiao.com -taopinquan.com -taoq.net -taoqao.com -taoqian123.com -taoquanquan.com -taosdata.com -taosem.com -taoshouyou.com -taoshu.com -taoshudang.com -taosj.com -taotao.com -taotaocar.com -taotaosou.com -taotiwang.com -taotu8.net -taotumowang.com -taotuwu.com -taou.com -taowenxue.com -taowola.com -taoxiaolu.com -taoxiaozhong.com -taoxie.com -taoxv.com -taoyeyou.com -taoyi-support.com -taoyinqing.com -taoyizhu.com -taoyoupin.com -taoyuantravel.com -taozaisheng.com -taozhutu.com -tapapis.com -tapas.net -tapdata.net -tapdb.com -tapdb.net -tapechat.net -tapenjoy.com -tapimg.com -tapotiexie.com -tapque.com -taptap-api.com -taptap.com -taptapcode.com -taptapdada.com -taraniss.com -tarczp.com -tarenacn.com -tarenwang.net -tarsocial.com -tartscenter.com -tasiyun.com -taskcity.com -taskcn.com -taskyou.net -taslgs.com -tasly.com -tastespirit.com -tastones.com -tastysteak.com -tatatimes.com -tatazu.com -taterli.com -tattoo114.com -tattoo77.com -taurus66.com -tavsiktlig.com -tax-edu.net -taxjiangkewang.com -taxnote.org -taxspirit.com -taxwen.com -tayohya.com -tazhe.com -taznsb.com -tb.am -tb51.net -tb58.net -tb888.net -tbadc.com -tbankw.com -tbcache.com -tbdazhe.com -tbdiy.com -tbh5.com -tbhcc.com -tbhelper.com -tbhjgc.com -tbkf.net -tbl-import.com -tblk.me -tbnimg.com -tbq168.com -tbqw.com -tbsandbox.com -tbscp.net -tbsgame.net -tbshops.com -tbsite.net -tbt.cc -tburl.in -tburl.net -tbw-fuzhuang.com -tbw-hufu.com -tbw-xie.com -tbwan.com -tbwbao.com -tbwda.com -tbwfy.com -tbxt.com -tbyfsoft.com -tbyuantu.com -tc-21.com -tc-ds2000.com -tc12580.com -tc199.net -tc9011.com -tc930.com -tcc.so -tccqb.com -tccxfw.com -tcdai.com -tcdbcc.com -tcdnlive.com -tcdnos.com -tcdnv3.com -tcdnvod.com -tcdnvp.com -tcdushi.com -tceic.com -tcfhty.com -tcgcardgame.com -tchbgz.com -tchilde.com -tchzt.com -tciplay.com -tcl.com -tclbusiness.com -tclclouds.com -tclking.com -tcloudbase.com -tcloudbaseapp.com -tcloudfamily.com -tcloudlife.com -tcloudscdn.com -tcloudscdn.net -tcm100.com -tcmfrj.com -tcmygy.com -tcnews.cc -tcnvmms.com -tcp.hk -tcpspc.com -tcqccn.com -tcrcb.com -tcrcsc.com -tcs-y.com -tcsae.org -tcsdzz.com -tcshare.org -tcsnake.com -tcstudents.com -tcstzg.com -tctd.net -tctip.com -tctong.com -tcxfpc-pcb.com -tcxw.cc -tcy365.com -tcylgslb.com -tcz.name -td-tech.com -td22.com -td518.com -td776.com -td98.com -tdatamaster.com -tdbzcl.com -tddmp.com -tddspmall.com -tdfcw.com -tdict.com -tdimg.com -tdldz.com -tdlegg.com -tdnsv1.com -tdnsv2.com -tdnsv3.com -tdnsv5.com -tdnsv6.com -tdnsv8.com -tdpress.com -tduou.com -tdyxmoto.com -tdzyw.com -te5.com -te6.com -tea26.com -tea7.com -tea88gifts.com -teach365.com -teachcn.net -teachercn.com -teacherhou.com -teacti.com -teakki.com -teaku.com -teamall.cc -teambition.com -teambition.net -teambuy.cc -teamlogs.com -teamminus.com -teamotto.net -teamshub.com -teamtopgame.com -teapic.com -teatreexy.com -teazhishi.com -tebaidu.com -teboncapital.com -tecbbs.com -tecenet.com -tech-domain.com -tech-food.com -tech-mx.com -tech-sonic.net -tech1024.com -tech110.net -tech126.com -tech2ipo.com -techan.com -techantong.net -techbeat.net -techbrood.com -techeme.net -techenergize.com -techflow520.com -techgastronomy.com -techgogogo.com -techkedu.com -techmiao.com -technode.com -techoke.com -techsir.com -techuangyi.com -techug.com -techvisum.com -techwalker.com -teclast.com -tecobj.com -tecyle.com -tedaniu.com -teddymobile.net -tedx.net -tee7.com -teein.com -teencn.com -teeqee.com -tefl-china.net -tegongji.com -tegoushe.com -tehui001.com -tehuituan.com -tejiabei.com -tejiaquan.com -tejiawang.com -tektea.com -telaideyouxue.com -teld.net -telefen.com -telehr.com -teleinfoo.com -teleland.net -telfri.net -teliute.org -telking.com -tell520.com -telling.com -telllove520.com -telnet404.com -telojob.com -telu.net -telunsu.net -tem.pw -tem365.com -temaihui88.com -temaiku.com -temox.com -temp.im -tencdns.net -tencent-blackboard.com -tencent-cloud.com -tencent-cloud.net -tencent-gf.com -tencent.com -tencent.com.hk -tencentads.com -tencentclb.com -tencentcloud.com -tencentcloudapi.com -tencentcs.com -tencentdba.com -tencentdevices.com -tencentipv6.com -tencentlog.com -tencentmeeting.com -tencentmind.com -tencentmusic.com -tencentsuite.com -tencentwm.com -tencentyun.com -tenchii.com -tendacn.com -tendawifi.com -tendcode.com -tenddata.com -tenfafa.com -tenganxinxi.com -tengattack.com -tengbai-it.com -tengbo.cc -tengchu.com -tengdinggame.com -tengfang.net -tengfangyun.com -tengfeijob.com -tengfeizhida.com -tengfun.com -tenghen.com -tenglutg.com -tengma123.com -tengmed.com -tengmoney.com -tengshuodz.com -tengwen.com -tengwen001.com -tengxiao.wang -tengxunmail.com -tengxunqiye.com -tengxunqiyeyou.com -tengxunyu.com -tengxunyundaijinquan.com -tengy.com -tengyuejz.com -tengzhihh.com -tengzhipp.com -tengzhuan.com -tenhot.net -teniucaijing.com -teniujinfu.com -tenlonstudio.com -tenlywu.com -tenmh.com -tennisworld.mobi -tennoo.com -tenpay.com -tenqent.com -tensafe.com -tenshi.cc -tensorchip.com -tensornews.net -tenstars.net -tensynad.com -tensynchina.com -tentrue.com -tentx.com -tenxapp.com -tenxcloud.com -tenxcloud.net -teoripendidikan.com -teown.com -tepcb.com -tepintehui.com -terabuy.com -terence2008.info -terencexie.com -teridge.com -terminus.io -terra-master.com -terransforce.com -teruide.net -tese5.com -teshenqi.com -tesolsh.com -tesoon.com -test-edu.net -test404.com -testbird.com -testcoo.com -testeb.com -testerhome.com -testerlife.com -testict.com -testip.xyz -testjj.com -testroad.org -testrust.com -testtao.com -testwo.com -testxy.com -teuhui.com -tex68.com -texclo.net -text.wiki -teyop.com -tezhengma.com -tezhongzhuangbei.com -tezign.com -tf.wiki -tf86.com -tfang.net -tfax.com -tfbcj.com -tfcaijing.com -tfcloud.com -tfclub.com -tfdccn.com -tfedu.net -tff.bz -tfg2.com -tfgame.vip -tfhj.com -tfme.com -tfogc.com -tfol.com -tfrl.net -tfsino.com -tfsmy.com -tfxgt.com -tfysw.com -tfyum.net -tfzcode.com -tg-vision.com -tg-vision.net -tg0123.com -tg1234.com -tg72.com -tgbus.com -tgcid.org -tghello.com -tgirl.cc -tgjh.com -tgking.net -tgljw.com -tglxh.com -tgnet.com -tgovcloud.com -tgshiguan.com -tgyoo.com -tgyun.cc -th-gas.com -th123.com -th38.com -thaiyuehealth.com -thamco.com -thanhong.me -thanhtunghairsalon.com -thankbabe.com -thatinterpreter.net -thatsmags.com -thatsmandarin.com -thbattle.net -thcad.net -thcantech.com -thdb.com -the4can.com -the5fire.com -the9.com -thearenacapital.com -thearyong.com -theateliercouture.com -thebeastshop.com -thebeautools.com -thebeijinger.com -thebeijingnews.com -thechihuo.com -thechois.cc -thecode.me -thecodeway.com -thedatasys.com -theduapp.com -thefatherofsalmon.com -thefifthera.com -thegbdc.com -thegiac.com -theguangdong.com -thehanshow.com -theiei.com -thejamy.com -thejiangmen.com -thejoyrun.com -thelarkcloud.com -thelastsky.com -themebetter.com -themeforwp.net -themeila.com -themex.net -themez.cc -themisweeps.com -then9.com -thenburn.com -thenew123.com -theorychina.org -thepaintstore.net -thestack.net -thethirdmedia.com -thetigerhood.com -thetongji.com -thetype.cloud -thewowa.com -thexnode.com -theyun.com -thfdcsoft.com -thfure.com -thhome.net -thief.im -thinbug.com -thingjs.com -thingtry.com -thinkcmf.com -thinkdream.com -thinkeridea.com -thinkhard.tech -thinkindrupal.com -thinkjs.org -thinksns.com -thinksrc.com -thishealthsummit.com -thisim.net -thisisdongdongqiang.com -thiztech.com -thjunshi.com -thmovie.com -thmz.com -thn21.com -thoughtworkers.org -thrbs.com -threadcn.com -threegorgestours.com -threeol.com -threetong.com -ths123.com -ths8.com -thseoer.com -thstars.com -thstp.com -thsyyxgs.com -thtfpc.com -thtxzyz.com -thumedialab.com -thundercdn.net -thunderflash.net -thunderobot.com -thunderurl.com -thunis.com -thunisoft.com -thunlp.org -thupdi.com -thwiki.cc -thxbxg.com -thxddb.com -thxedu.com -thxflt.com -thxxw.com -thyclub.com -thyoo.com -thyou.com -thz56.com -thzab.com -thzcb.com -thzer.com -thzxhm.com -ti-node.com -ti-solar.com -ti98.com -tian10.com -tianan-cyber.com -tiananmenlvyou.com -tianapi.com -tianbai.net -tianbaosi.com -tiancaiui.com -tiancaixing.com -tianchu.com -tiancipz.com -tiancity.com -tiancitycdn.com -tianda120.com -tiandaoedu.com -tiandi.com -tianditu.com -tianditu.org -tiandizw.com -tianduntech.com -tiandy.com -tianelian.com -tianfeiyu.com -tianfupic.com -tianfus.com -tianfusoftwarepark.com -tianhaijiaodai.com -tianhaohz.com -tianhejiayi.com -tianhongdiaosu.com -tianhongsunshine.com -tianhujy.com -tianji.com -tianji368.com -tianjieleather.com -tianjigame.com -tianjihr.com -tianjimedia.com -tianjin-air.com -tianjingrong.com -tianjinshunma.com -tianjinwe.com -tianjinxs.com -tiankong.com -tiankong.info -tiankonguse.com -tianlaiedu.com -tianlaikge.com -tianlan.net -tianmao.com -tianmaying.com -tianmeng.org -tianmidian.com -tianmin789.com -tianmujiqi.com -tianmupe.com -tianmupr.com -tiann90.com -tianniuyouxi.com -tiannv.com -tianpeng.com -tianpinjie.com -tianpujun.com -tianqi.cc -tianqi.com -tianqi123.com -tianqi321.com -tianqi4.com -tianqi518.com -tianqiaojuyuan.com -tianqiaoyishuzhongxin.org -tianqiapi.com -tianqihoubao.com -tianqijun.com -tianqikb.com -tianqistatic.com -tianqiwang.org -tianrow.com -tianruixinxi.com -tianruiyun.com -tiansenjituan.com -tianshan277.com -tianshangrenjian123.com -tianshengdiyi.com -tianshi.info -tianshi2.net -tianshiaomei.com -tianshiyiyuan.com -tianshouzhi.com -tianshuge.com -tiansin.com -tiantailaw.com -tiantang6.com -tiantangyingshi.tv -tianti.com -tiantian.com -tiantian8.com -tiantiancaipu.com -tiantianfm.com -tiantianfunds.com -tiantianhr.com -tiantianleshuiguo.com -tiantianquce.com -tiantianqutao.com -tiantianring.com -tiantiansoft.com -tiantiantiao.com -tiantianxuexi.com -tiantk.com -tiantonglaw.com -tianvalue.com -tianwenhu.com -tianxia.la -tianxiadianjia.com -tianxiajiameng.com -tianxiang.com -tianxianle.com -tianxiawangxiao.com -tianxiaxiao.net -tianxiaxinyong.com -tianxinfan.com -tianxing.com -tianxinsuye.com -tianya.com -tianya.tv -tianya999.com -tianyablog.com -tianyabook.com -tianyaclub.com -tianyaluedu.com -tianyancha.com -tianyanqifu.com -tianyant.com -tianyaruanwen.com -tianyaui.com -tianyecollege.com -tianyi1368.com -tianyibook.com -tianyihy.net -tianyiidc.com -tianyijue.com -tianyinzaixian.com -tianyiweiya.com -tianyuimg.com -tianzeba.com -tianzhao.net -tianzhuo.com -tianzikj.com -tianziyu.com -tianzongyouxi.com -tiaodao.com -tiaoguangbolimo.com -tiaohao.com -tiaoliao.biz -tiaomu.com -tiaona.com -tiaooo.com -tiaotiaotang.net -tiaozhanbei.net -tiatiatoutiao.com -tibaitong.com -tibet3.com -tibet4wd.com -tibet9.com -tibetanbible.org -tibetannet.com -tibetcn.com -tibetcnr.com -tibetcul.com -tibetculture.net -tibetcyts.com -tibetway.com -ticketdashi.com -ticketmars.com -ticp.io -ticp.net -ticstore.com -tictalk.vip -ticwear.com -tida120.com -tidb.io -tideswing.fun -tidi.mobi -tiduyun.com -tieba.com -tiebaimg.com -tiebamm.com -tiebaobei.com -tiebashop.com -tiedan2019.com -tiegu.com -tiejia123.com -tiejiang.org -tiejiong.com -tiejp.com -tielemao.com -tielingcn.com -tielu.org -tiepishihu.com -tietie.la -tietuku.com -tieweishi.com -tieww.com -tiexie0.wang -tiexing.com -tiexing.net -tiexiuyugudao.com -tiexue.net -tieyi.tm -tieyou.com -tiezhima.com -tiezis.com -tigerbbs.com -tigerbrokers.com -tigerbrokers.net -tigeresop.com -tigerfintech.com -tigersecurities.com -tigeryun.com -tiham.com -tiimg.com -tijian001.com -tijian123.com -tijianbao.com -tijianka.cc -tijianshangmen.com -tijianzhuanjia.com -tikane.com -tikersport.com -tikuol.com -tillcn.com -timanetworks.com -timchen314.com -time-weekly.com -time-year.com -time.izatcloud.net -time2011.com -time8.org -timecoo.com -timedg.com -timenote.cc -timeofdate.com -timeoutbeijing.com -timeoutcn.com -timepill.net -timeread.com -timeread.net -timesdf-hn.com -timetw.com -timev.com -timing360.com -timipc.com -timitime.com -timjx.com -tinderboxx.com -tinfinite.com -ting-tou.com -ting30.com -ting55.com -ting85.com -tingall.com -tingbook.com -tingcd.com -tingchewei.net -tingchina.com -tingclass.com -tingclass.net -tingdegang.com -tingfun.net -tingjiandan.com -tingke8.com -tingliku.com -tingmall.com -tingmimi.net -tingroom.com -tingshubao.com -tingshucn.com -tingshuge.com -tingtao.net -tingwusun.com -tingyulou.com -tingyun.com -tingyunfenxi.com -tinkad.net -tinkerpatch.com -tinman798.net -tinsecret.com -tinsecret.org -tiny-calf.com -tiny4.org -tinyems.com -tinyflare.com -tinygroup.org -tinylab.org -tinyservices.net -tinyyuan.com -tipaipai.com -tipask.com -tipdm.com -tipray.com -tiprpress.com -tips1000.com -tiqiaa.com -tiqianle.com -tired.im -tiruna-cn.com -tisgame.com -tisino.com -tisiwi.com -tisohinge.com -tita.com -titan007.com -titan24.com -titanar.com -titanmatrix.com -titapark.com -tixa.com -tixaapp.com -tixaclub.net -tiyalive.com -tiye.me -tiyeji.com -tiyep.com -tiyii.com -tiyu68.com -tiyudaka.com -tiyufeng.com -tiyule.com -tiyusaishi.com -tiyuxiu.com -tizi.com -tizi365.com -tizoinfo.com -tj-guangxin.com -tj-kingdee.com -tj-model.com -tj-un.com -tj-yijiajing.com -tj-zt.com -tj0573.com -tj20.com -tjabjm.com -tjaide.com -tjashy.com -tjbearing.com -tjbh.com -tjbsq.com -tjbus.com -tjcamp.com -tjcondom.com -tjculture.com -tjdcsd.com -tjdtdd.com -tjdwkj.com -tjdyf.com -tjfer.com -tjflora.com -tjgangkouyiyuan.com -tjgcs.com -tjgdjn.com -tjgtgd.com -tjhukou.com -tjhyzyxy.com -tjinsuo.com -tjitrc.com -tjj.com -tjjapp.com -tjjingjie.com -tjjt360.com -tjjwt.com -tjkpzx.com -tjkx.com -tjkximg.com -tjkyhr.com -tjluohuzhijia.com -tjmama.com -tjmhc.com -tjmuch.com -tjorthop.org -tjpa-china.org -tjpma.org -tjptfhq.com -tjqktgg.com -tjrge.com -tjsjnxh.com -tjst.net -tjstats.com -tjtdhyfs.com -tjtzkj.com -tjufbase.com -tjupdi.com -tjvedu.com -tjwch.com -tjwch.org -tjwenjie.com -tjwj88.com -tjwmschool.net -tjwzy.com -tjxishuai.com -tjxmzd.com -tjxrm.com -tjxxcl.com -tjxxsw.com -tjxz.cc -tjyouai.com -tjyun.com -tjyywjc.com -tjyz.org -tjzb.com -tjzcsj.com -tjzentan.com -tjzfcg.com -tjzhongyiyao.com -tjzrld.com -tjzyec.com -tk-rays.com -tk-xiong.com -tk163.com -tkf.ink -tkg5.com -tkgame.com -tkhealthcare.com -tkoubei.com -tkplusemi.com -tkw.cc -tkxxd.net -tkxzw.com -tky001.com -tl-self.com -tl-shida.com -tl-tek.com -tl-vogue.com -tl88.net -tlbaby.com -tlby120.com -tlbyx.com -tlcharity.com -tlfjw.com -tlfw.net -tlggzyjy.com -tlightsky.com -tlinx.com -tljcw.com -tljob8001.com -tlkzs.com -tlqwine.com -tlrcbk.com -tlsj-hd.com -tlstwy.com -tlte.com -tltesoft.com -tltuan.net -tltzg.com -tlwok.com -tlyy.cc -tm12ji.com -tm312.com -tma-001.com -tmabike.com -tmaill.com -tmall.casa -tmall.com -tmall.hk -tmall.ru -tmallma.com -tmallvvv.com -tmbbs.com -tmcdn.net -tmdm.com -tmeiju.com -tmhong.com -tmhvps.com -tmigoods.com -tmisp.com -tmjob88.com -tmjypx.com -tmkoo.com -tmmini.com -tmqmqj.com -tmrcw.com -tmscnz.com -tmsf.com -tmsgschool.com -tmtforum.com -tmtpost.com -tmtpost.net -tmuaih.com -tmuyun.com -tmwcn.com -tmxmall.com -tmxxw.com -tn2000.com -tn597.com -tnbz.com -tnccdn.com -tnet.hk -tngcjx.com -tnjyfc.com -tnkjmec.com -tnmb.org -tntdown.com -to-future.net -to4f.com -to8to.com -to9.org -to999.com -tobaccobid.com -tobaccochina.com -toberp.com -tobnews.com -tobosu.com -tobosu.net -tobsnssdk.com -tochgo.com -tochinajob.com -tocosc.com -today36524.com -todaycache.net -todayguizhou.com -todayidc.com -todayios.com -todayisp.net -todaynic.com -todebug.com -todesk.com -todoen.com -todokeji.com -todonow.com -todosomeone.com -toec-gdgs.com -toec-iot.com -toec.com -toecsec.com -toecsoft.com -toecxy.com -togj.com -togln.com -togocareer.com -togogo.net -tohic.net -tohkalove.com -tohosting.com -tohosting.net -tohours.com -tohuo.com -toidea.com -tok9.com -token-ad.com -token.im -tokenglish.com -tokeninsight.com -tokenpocket.pro -tokensky.net -tokenview.com -tokenworld.pro -tokimekiclub.org -toktok-mall.com -tol24.com -tom.cat -tom.com -tom163.net -tom61.com -tomap.me -tomatolei.com -tomax.xyz -tomczhen.com -tomdiy.com -tomonline-inc.com -tomotoes.com -tompda.com -tomujiang.com -tomwx.net -tonbao.com -tonehk.com -tonewinner.com -tongbanjie.com -tongbanjie.info -tongbaoyun.com -tongbu.com -tongbulv.com -tongbupan.com -tongbusj.com -tongcaihulian.com -tongchaba.com -tongcheng.cc -tongchouba.com -tongda2000.com -tongdaohui.com -tongdiaogs.com -tongdoutown.com -tongdun.net -tongfangpc.com -tongfengqu.com -tongfu.net -tonggao.info -tongguanbao.net -tonghao.ltd -tonghs.com -tonghuaji.com -tonghuiqiye.com -tongji.com -tongji.net -tongjiai.com -tongjitong.com -tongjiwo.com -tongleer.com -tongli-hrcc.net -tongliangrc.com -tongliaowang.com -tonglu-tour.com -tonglukuaijian.com -tongluyizhao.com -tongmengguo.com -tongpankt.com -tongshanbank.com -tongshuai.com -tongtech.com -tongtianta.site -tongtimes.com -tongtongli.com -tongtool.com -tongwang.net -tongxiang.net -tongxin.com -tongxin.org -tongxinclub.com -tongxinghui.com -tongxinky.com -tongxinmao.com -tongxinteng.com -tongxiong.com -tongxue.com -tongxue365.com -tongyavisa.com -tongye.biz -tongyi.com -tongyidrying.com -tongyongji.net -tongyongpe.com -tongyou188.com -tongyuanos.com -tongyue.com -tongzhuo100.com -tonitech.com -tonnn.com -tonysfarm.com -toobug.net -toocle.com -toodaylab.com -toohiphop.com -tool.cx -tool.la -tool.lu -tool77.com -toolbarqueries.google.com -toolinbox.net -toolmall.com -toolmao.com -toolnb.com -tools.google.com -tools.l.google.com -tools1000.com -tooming.com -toomoss.com -toon.mobi -toonmax.com -toonmaxmedia.com -tooogooo.com -tooopen.com -tooseo.com -tootour.com -toouoo.com -top-iot.com -top100summit.com -top147.com -top1food.com -top2099.com -top263.net -top2fun.com -top3456.com -topacg.com -topber.com -topbester.com -topbiz360.com -topbm.com -topbook.cc -topcfo.net -topcheer.com -topchitu.com -topciic.com -topcj.com -topcrab.com -topcsic.com -topdiaoyu.com -topdodo.com -tope365.com -topeditsci.com -topeet.com -topeetboard.com -topengroup.net -topfisc.com -topflames.com -topfreeweb.net -topgslb.com -topguo.com -topgus.com -tophant.com -tophold.com -tophr.net -tophub.fun -tophub.today -topide.com -topitme.com -topjoy.com -topjoycloud.com -topjuyi.com -topksw.com -topku.com -toplanit.com -toplee.com -toplife.com -toplinks.cc -toploong.com -topmba.mobi -topnews9.com -topomel.com -toppdu.com -topperuse.com -toppiao.net -topproio.com -topqh.net -toprand.com -topsage.com -topscan.com -topsedu.com -topsrx.com -topswim.net -toptastewin.com -topthink.com -topthink.net -toptools100.com -toptourservice.com -topuc.com -topwalk.com -topwanwan.com -topway.org -topwaysoft.com -topys.com -topzj.com -torhea.org -torovo.com -toshiba-gtbs.com -toshiba-semicon-storage.com -toshiba-thpc.com -toshiba-tnis.com -toshow.com -tospur.com -tot.name -totalacg.com -totoro.pub -tou360.com -tou70.com -toubang.tv -toucdn.com -touch4.me -touchev.com -touchpal.com -touchrom.com -touchsprite.com -touchsprite.net -touchstudio.net -touchxd.com -touclick.com -touduyu.com -toufu321.com -toughcoder.net -tougub.com -touhou.cd -touhou.vote -toujidao.com -touker.com -toumiao.com -toupb.com -toupiaoapp.com -tour110.com -tourhr.com -tourjob.net -tourongjia.com -tourongzi.org -tourscool.com -toursforfun.com -tourye.com -toushibao.com -toutiao-xinwen.com -toutiao.com -toutiao.io -toutiao.org -toutiao11.com -toutiao12.com -toutiao13.com -toutiaoapi.com -toutiaoapp.com -toutiaobashi.com -toutiaobus.com -toutiaocdn.com -toutiaocdn.net -toutiaocloud.com -toutiaocloud.net -toutiaoimg.com -toutiaoimg.net -toutiaojc.com -toutiaolite.com -toutiaolite1.com -toutiaonanren.com -toutiaopage.com -toutiaostatic.com -toutiaovod.com -toutiaoyule.com -toutoufc.com -toutoupiao.com -touwenzi.com -touwho.com -touxiang8.com -touying.com -touyouquan.com -touzhibang.com -touzhijia.com -touzi.com -touzid.com -touzikuaibao.com -touzizn.com -tower.im -towinor.com -townsky.com -towntour.net -towords.com -towry.me -toxingwang.com -toybaba.com -toycloud.com -toyean.com -toysir.com -toysuperman.com -tp8.me -tpbook.com -tpkey.com -tplife.com -tplm123.com -tplogincn.com -tpooo.com -tpoxiaozhan.com -tpsxs.com -tpturang.com -tpy10.net -tpy100.com -tpyboard.com -tpywlkj.net -tpyyes.com -tq163.com -tq321.com -tq520.net -tqcj.com -tqcto.com -tqedu.com -tqedu.net -tqiantu.com -tql.ink -tqle.com -tqmall.com -tqmdp.net -tqqa.com -tqsafe.com -tqschool.net -tqybw.net -tr518.com -trace4me.com -tracefact.net -traceint.com -track-roller.com -trackingio.com -trackingmore.com -tracup.com -tracyclass.com -trade-over-world.com -trade-plug.net -trade2cn.com -tradeask.com -tradeleo.com -traderwork.com -tradew.com -tradow.com -tradyau.com -traineexp.com -trainingipv6.com -trait-wholesale.com -tranbanker.com -tranbbs.com -trans4e.com -transcn.org -transformer-cn.com -transfu.com -transfun.net -translate.googleapis.com -translation-dictionary.net -translation.googleapis.com -translationchina.com -transn.com -transnbox.com -transparcel.com -transplendor.com -transportjp.com -transrush.com -transtill.com -transwarp.io -transwiki.org -tratao.com -travel-x.cc -travel6.co.uk -traveldba.com -traveller2.com -travellingwithhotel.com -travellinkdaily.com -travelsky.com -travelsky.net -travelwuhan.com -travelyee.com -trc4.vip -trcoin.com -treation.com -treehousesub.com -treelib.com -treeoncloud.com -treetwins.com -treeyee.com -trejhtyrjetyjetyrkuy-3.xyz -trekin.space -trekiz.com -trend6.com -trendsmen.com -trendtokyo.com -tretars.com -trhj.net -trhos.com -trhui.com -trinitigame.com -trinitigames.net -trioisobardev.com -trip8080.com -tripbaba.com -tripbe.com -tripdv.com -triphr.com -triplexservice.com -trippanda.com -tripsanxia.net -tripsmc.com -tripvivid.com -tripwirechina.com -tripzm.com -triring.com -triumbest.net -trjcn.com -trjcn.net -trjggs.com -trkeyboard.com -troila.com -trojantesting.com -tronixin.com -trpcdn.net -trsoft.vip -trsoft.xin -trsol.com -trt.hk -trtb.net -trueart.com -truebuty.com -trueeyu.com -trueland.net -trueme.net -truemv.com -truerun.com -truesing.com -trufun.net -trusfort.com -trust-one.com -trust400.com -trustasia.com -trustedsign.com -trustexporter.com -trustkernel.com -trustlife.com -trustmover.com -trustmta.com -trustocean.com -trustsoc.com -trustutn.org -trwl.net -try2explore.com -tryenough.com -tryfun.com -tryineapp.com -trylist.net -trymoka.com -trysenz.com -tryurbest.com -tryxue.com -ts-cooling.com -ts-juheng.com -ts100.com -ts108.com -ts166.net -ts168.net -ts16949px.com -ts16949rz.org -ts95.com -tsddu.com -tsdlp.com -tsdm.net -tsdmw.net -tsdxb.com -tsfucai.com -tsg-online.net -tsggwl.com -tshaisen.com -tshe.com -tshe.me -tshiny.com -tshmkj.com -tshtech.com -tsichuan.com -tsinghua-getinfo.com -tsinghuabook.com -tsinghuaic.com -tsinghuaicwx.com -tsinghuajournals.com -tsinghuan.com -tsinghuawoman.com -tsingj.com -tsingming.com -tsingoofoods.com -tsingpost.com -tsingtoo.com -tskscn.com -tskscn.org -tslapinshang.com -tsljzs.com -tslongtai.com -tslsmart.com -tsmtkj.com -tsmxs.com -tsoo.me -tsov.net -tsp189.com -tspsy.com -tspweb.com -tsqt.net -tsqw.com -tsrcw.com -tssakura.com -tsshunxin.com -tssns.net -tsstorry.com -tstdtz.com -tsu.tw -tsw18.com -tswuby.com -tsxcx.xyz -tsybsmz.com -tsyqb.com -tsyzm.com -tsz.com -tszckj.com -tszs360.com -tszyzx.com -tt-bike.com -tt-ly.com -tt116114.com -tt120.org -tt1386.com -tt1h.com -tt286.com -tt56w.com -tt65.org -tt83.xyz -tt86.com -tt96596.com -tt98.com -ttaidu.com -ttbba.com -ttbbss.com -ttbc33.com -ttbcdn.com -ttcad.com -ttcdy.com -ttdailynews.com -ttdown.com -ttdtweb.com -ttdz03.com -ttechhk.com -ttgjx.com -tth1688.com -tthbw.com -tthigo.com -ttic.cc -ttigame.com -ttime.com -ttionya.com -ttjianbao.com -ttkdex.com -ttkefu.com -ttkkuu.com -ttkmj.org -ttkuan.com -ttkxh.com -ttkyy.net -ttll.cc -ttlsa.com -ttlutuan.com -ttmark.com -ttmd5.com -ttmeishi.com -ttmnq.com -ttmv.com -ttn8.com -ttpaicdn.com -ttpaihang.com -ttpaper.com -ttpet.com -ttplayer.com -ttpod.com -ttpp.com -ttq.com -tts8.com -ttsfgyrj.com -ttshengbei.com -ttsmmwb.com -ttsq6.net -ttstream.com -ttsz8.com -ttt.sh -ttthing.com -tttuangou.net -tttxf.com -tttz.com -ttufo.com -ttunion.com -ttuu.com -ttwanjia.com -ttwebview.com -ttwoyun.com -ttwx.com -ttxn.com -ttxs123.net -ttxsapp.com -ttxuanpai.com -ttxunta.com -ttyingqiu.com -ttyjf.com -ttymq.com -ttyongche.com -ttyqm.com -ttys5.com -ttysq.com -ttyyuuoo.com -ttz.com -ttzhongbao.com -ttzhushou.com -ttzw.com -ttzw.tv -ttzx.tv -ttzyw.com -tu11.com -tu520.cc -tu6.la -tu8.cc -tu960.com -tuan800.com -tuan800.net -tuanai.com -tuanche.com -tuancu.com -tuandai.com -tuanduishuo.com -tuanhuiwang.com -tuanidc.net -tuanimg.com -tuanjianjian.com -tuanjiebao.com -tuankezhan.com -tuanlego.com -tuanlin.net -tuanping.com -tuanshan.com -tuanwen.com -tuanxia.com -tuanxue360.com -tuanxue360.net -tuanyx.com -tubachina.com -tubangzhu.com -tubaobao.com -tubaobaoqm.com -tubaoveneer.com -tubaoyz.com -tubebbs.com -tubegetpro.com -tubiaoxiu.com -tuboshu.com -tubutu.com -tucaojie.com -tuchong.com -tuchong.net -tuchuang001.com -tuchuang188.com -tuchuanhuwai.com -tucia.net -tucoo.com -tudai.cc -tudan.cc -tudan.vip -tudou.com -tudouh5.com -tudoupe.com -tudouui.com -tudouxy01.com -tudouyx.com -tudown.com -tudu.com -tudu.im -tuer.me -tugou.com -tugouli.com -tuguaishou.com -tuguoabc.com -tuhaihe.com -tuhaokuai.com -tuhu.com -tuhu.org -tuhu.work -tuhusmart.com -tui-8.com -tui18.com -tui56.com -tuiaaaa.com -tuiabq.com -tuiapple.com -tuiayonghu.com -tuibamboo.com -tuibat.com -tuibench.com -tuiberry.com -tuibit.com -tuicoco.com -tuicool.com -tuidaniu.com -tuidc.com -tuideli.com -tuidove.com -tuidragon.com -tuifeiapi.com -tuifish.com -tuifrog.com -tuiguangdns.com -tuiguangpingtai.com -tuijie.cc -tuikemima.com -tuili.com -tuili8.com -tuilidashi.xin -tuilie.com -tuilisr.com -tuiliu.net -tuiliw.com -tuilixy.net -tuimax.com -tuimob.com -tuimz.com -tuipeanut.com -tuipear.com -tuipenguin.com -tuipine.com -tuipink.com -tuiplay.com -tuipony.com -tuiq.net -tuirabbit.com -tuirice.com -tuishao.net -tuishark.com -tuishiben.com -tuishujun.com -tuisnake.com -tuistone.com -tuitiger.com -tuitui99.com -tuituitang.com -tuiwailian.com -tuixue.online -tuizx.com -tujia.com -tujiacdn.com -tujian.com -tujidu.com -tujie8.com -tujiedianying.com -tujiwar.com -tujixiazai.com -tukaxiu.com -tuke88.com -tukexw.com -tukkk.com -tukong123.com -tuku.cc -tuku.com -tukucc.com -tukumanhua.com -tukuppt.com -tulading.com -tulaoshi.com -tuliaohr.net -tuling123.com -tulingtec.com -tuliren.com -tuliu.com -tumajewelry.com -tumanyi.com -tumeinv.com -tumukeji.com -tumuzhe.com -tuna.wiki -tungshungroup.com -tungsten-alloy.com -tungsten-bar.com -tungsten-copper.com -tungsten-jewellery.com -tungsten-powder.com -tunionfans.com -tuniu.cc -tuniu.com -tuniu.net -tuniu.org -tuniucdn.com -tuniuglobal.com -tuniuins.com -tuniuops.net -tunynet.com -tuo-li.com -tuo-pan.com -tuodanyy.com -tuohuangzu.com -tuoluocaijing.com -tuoluozhuan.net -tuoniaox.com -tuotuozu.com -tuoweisi.com -tuoxiaoshebei.com -tuoyundan.com -tuozhe8.com -tupai.me -tupian114.com -tupian1234.com -tupian365.com -tupiancunchu.com -tupiankucdn.com -tupianzj.com -tupu360.com -tuputech.com -tupuw.com -tuquu.com -turangyq.com -turbomail.org -turingapi.com -turingbook.com -turingcat.com -turingdi.com -turingtopia.com -turnitin.org.in -turnitincn.com -turnitinuk.net -tusapi.com -tusay.net -tuscdn.com -tusdk.com -tushare.org -tushare.pro -tushifu.com -tusholdings.com -tushu001.com -tushu007.com -tushuguan.cc -tushumi.com -tushupan.com -tushupdf.com -tusij.com -tusiot.com -tusooo.com -tuspark.com -tuspass.com -tuspass.net -tusstar.com -tutechanhb.com -tutorialdocs.com -tutu001.com -tutuapp.com -tutucloud.com -tutuera.com -tutuge.me -tutuim.com -tutupan.com -tuvrblog.com -tuwan.com -tuwan21.com -tuwandata.com -tuwangwang.com -tuwenba.com -tuweng.com -tuwenla.com -tuwenzhibo.com -tux.red -tuxiaobei.com -tuxiu.com -tuya.com -tuyacn.com -tuyansuo.com -tuyaya.com -tuyiqi.com -tuyitu.com -tuyiyi.com -tuyoo.com -tuyou.me -tuyoujp.com -tuyoumi.com -tuyouxinxi.net -tuyuantech.com -tuz.im -tuzhan.com -tuzhan.net -tuzhanai.com -tuzhanh5.com -tuzhaozhao.com -tuzhizhijia.com -tuzi123.com -tuzi8.com -tuziyangzhi.com -tv0001.com -tv002.com -tv189.com -tv3w.com -tv432.com -tv5box.com -tvandnet.com -tvapk.com -tvapk.net -tvb1.cc -tvbbj.com -tvblack.com -tvbwind.com -tvcbook.com -tventry.com -tvesou.com -tvfanqie.com -tvflnet.com -tvfuwu.com -tvguo.tv -tvhome.com -tvhuan.com -tvjianshen.com -tvkou.com -tvkuai.com -tvlele.com -tvmao.com -tvmcloud.com -tvmining.com -tvn.cc -tvoao.com -tvos.com -tvscn.com -tvsou.com -tvt.im -tvtsg.com -tvxio.com -tvyouxuan.com -tvzhe.com -tvzn.com -tw2sm.com -twanxi.com -twapk.com -twcad.com -twcczhu.com -twd2.me -twd2.net -twdm.net -tweakcube.com -twguozao.com -twh5.com -twinkleunion.com -twinsel.com -twinsenliang.net -twitterios.com -twk.cc -twlkbt.com -twoarmy.com -twocucao.xyz -twofei.com -tworice.com -twsapp.com -twtstudio.com -twtym.com -twwtn.com -twwtn.net -twyuxin.com -twyxi.com -tx-livetools.com -tx-livetools.wang -tx-trans.com -tx009.com -tx163.com -tx29.com -tx3ka.com -tx5d.com -txbapp.com -txbimg.com -txcbwgg.com -txcdns.com -txcsjlb.com -txdai.com -txdy01.com -txdzs.com -txdzw.com -txfeiyu.com -txffp.com -txfund.com -txga.com -txianning.com -txip8.com -txitech.com -txjszz.com -txlt.com -txlunwenw.com -txmcu.com -txmeiju.com -txon.net -txooo.com -txqcw.net -txrjy.com -txrzx.com -txsc100.com -txsdk.com -txssw.com -txt07.com -txt321.com -txt81.com -txtbbs.com -txtbook.net -txtduo.com -txtreader.org -txttool.com -txtxz.com -txwb.com -txweekly.com -txwestart.com -txwgame.com -txwy.com -txwy.com.tw -txxbxx.com -txxtw16.com -txy8.com -txyapp.com -txyes.com -txylab.com -txzad.com -txzdq.com -txzing.com -ty-im.com -ty-tyre.com -ty2y.com -ty3w.net -ty8866.com -tyalxx.com -tybai.com -tyc100.com -tychio.net -tychou.com -tycits.com -tycmbvb.com -tycqxs.com -tycredit.com -tyee8.com -tyfo.com -tyhjzx.com -tyhuoyun.com -tyi365.com -tyjmmy.com -tyjmqz.com -tyksl.com -tyldclub.com -tyloo3d.com -tymcdn.com -tyn.cc -tyncar.com -tyniu.com -tyouai.com -tyouquan.com -typany.com -type.so -typecho.me -typechodev.com -typecodes.com -typekuon.com -tyr.gift -tyrad.cc -tyrantdb.com -tyread.com -tyriejl.com -tysdmh.com -tysj365.com -tysjyjy.com -tyst88.com -tysurl.com -tyswy.com -tyszy.com -tytlj.com -tytuyoo.com -tytywuliu.com -tyueo.com -tyust.net -tyuyan.com -tyuyan.net -tywbw.com -tywh.com -tywxw.la -tyy6.com -tyymt.com -tyzscl.com -tz-dsp.com -tz-wf.com -tz089.com -tz121.com -tz12306.com -tz1288.com -tz1980.com -tz8.com -tz911.com -tzbank.com -tzbank.net -tzbao.com -tzcul.com -tzdjzu.com -tzesf.com -tzfdc.com -tzfeize.xyz -tzfile.com -tzfuke.com -tzgcjie.com -tzhealth.com -tzhubo.com -tzhwcc.com -tzidc.com -tzidt.com -tzjxl.com -tzkameng.com -tzlib.net -tzm66.com -tzmauto.com -tzres.com -tzrl.com -tzsnw.com -tzsports.com -tzsti.com -tztusi.com -tzvtc.com -tzxgzk.com -tzxingtang.com -tzxwzx.com -tzye123.com -tzyg.org -tzysbwg.com -tzza.net -u-jingling.com -u-link.org -u-om.com -u-qun.com -u-road.com -u-tide.com -u005.com -u14.com -u148.net -u17.com -u17i.com -u17t.com -u193.com -u21a.com -u22e.com -u2j2ha.com -u2sz.com -u3dc.com -u3dcn.com -u3dol.com -u3v3.com -u51.com -u520.net -u5h5.com -u5wan.com -u69cn.com -u6u.com -u77.com -u78.com -u7u9.com -u8sy.com -u8yx.com -u9game.net -u9h.com -u9time.com -u9u8.com -u9u9.com -ua168.com -uadrc.com -uaedata.com -uao-online.com -uao.so -uauc.net -uavvv.com -uawnqe.com -uayangtze-volga.org -ub-os.com -ub.cc -ub666.cc -uban.com -ubangmang.com -ubernihao.com -ubersz.com -ubestkid.com -ubetween.com -ubgame.com -ubicdn.com -ubijoy.com -ubismartparcel.com -ubixai.com -ubja.vip -ubk22.com -ubmconlinereg.com -uboat100.com -ubooo.com -uboxol.com -uboxsale.com -ubs001.com -ubssdic.com -ubtrobot.com -ubuntubar.com -ubuntukylin.com -ubuntukylin.org -ubuntuqa.com -ubuuk.com -uc-union.com -uc108.com -uc123.com -uc129.com -uc138.com -uc1z.com -uc23.net -uc56.com -uc669.com -ucai123.com -ucaiyuan.com -ucaiyun.com -ucancs.com -ucantech.com -ucantech.net -ucardpro.com -ucarinc.com -ucbug.com -uccastore.com -uccheck.net -uccvr.com -ucdchina.com -ucdok.com -ucdrs.net -ucdwhatif.com -ucfly.com -ucfpay.com -uchangdi.com -uchiha.ltd -uchis.com -uchuanbo.com -uchuhimo.me -ucicq.com -ucjoy.com -uckendo.com -ucloudgda.com -ucly.net -ucnano.com -ucnest.com -ucpaas.com -ucpchina.com -ucpopo.com -ucren.com -ucss.ninja -uctrac.com -uctxt.com -ucuctu.com -ucuuc.com -ucw.pub -ucweb.com -ucxinwen.com -ucying.com -uczhidao.com -ucziliao.com -uczzd.com -uczzd.net -udache.com -udalogistic.com -udamall.com -udangjia.com -udashi.com -udaxia.com -udbac.com -udcredit.com -uddtrip.com -udecig.com -udeepin.com -udfex.com -udonmai.com -udpis.com -udrig.com -udsdown.xyz -uebao.com -uebilling.com -uecook.com -ued163.com -uedbox.com -uedhome.net -uedna.com -uedsc.com -uee.me -ueeshop.com -uehtml.com -ueibo.com -uekeer.com -uelike.com -uemo.net -uepei.com -ueren.com -uestcedu.com -uestcguoji.com -ueuz.com -ueview.com -uewaf.com -uf-crm.com -uf-tobacco.com -ufanw.com -ufbar.com -ufcap.com -ufenqi.com -ufhost.com -ufhosted.com -ufida-lcwy.com -ufidaoa.com -ufidawhy.com -ufileos.com -ufirefly.com -ufizl.com -uflowx.com -ufo.club -ufoer.com -ufofxw.com -ufojia.com -ufojoy.com -ufotm.com -ufovps.com -ug15.com -ug888.com -ugainian.com -ugapi.com -ugbb.com -ugcar.com -ugdtimg.com -ugediao.com -uggas.com -uggd.com -ugirls.tv -ugmars.com -ugmjd.com -ugojp.com -ugong.com -ugoshop.com -ugslb.com -ugslb.info -ugslb.net -ugsnx.com -ugubl.net -ugxsd.com -uhgal.com -uhomecp.com -uhomes.com -uhouzz.com -uhuitong.com -ui001.com -ui100day.com -ui4app.com -ui63.com -ui879.com -uibaba.com -uibim.com -uibmm.com -uibobo.com -uibot123.com -uicmall.com -uicom.net -uicool123.com -uid75.com -uidec.com -uidev.tech -uigreat.com -uihacker.com -uiiiuiii.com -uileader.com -uilover.com -uimaker.com -uimix.com -uincall.com -uincall400.com -uincom400.com -uipower.com -uisdc.com -uisheji.com -uishijie.com -uisnetwork.com -uisrc.com -uiste.com -uiu.cc -uiwed.com -ujian.cc -ujinbi.com -ujing.online -ujipin.com -ujiuye.com -ujwang.com -uk-edu.com -uk-odc.samsungapps.com -ukassignment.org -ukeban.com -ukelink.com -ukelink.net -uker.net -ukh5.com -ukongm.com -ukonline2000.com -ukoo.net -ukpass.org -ukpathway.com -ukraine-beauty.com -ukubang.com -ukui.org -ukulelecn.com -ulaaq.com -ulandian.com -ulaojiu.com -ule.com -ule.hk -uleapp.com -ulecdn.com -uleek.net -ulhat.com -uliaobao.com -ulikecam.com -ulikemusic.com -ulinix.com -ulink.cc -uliuli.fun -ulpay.com -ultramanclub.com -ultramanol.com -ulucu.com -ulzdk.com -umaman.com -umbpay.com -umcloud.com -umei.cc -umeng.co -umeng.com -umeng.online -umeng100.com -umengcloud.com -umenglog.com -umetrip.com -umi.im -umiall.com -umihome.com -umilu.com -umindex.com -uminehotel.com -umineiot.com -uminsky.com -umivi.net -umiwi.com -umjicanvas.com -uml-tech.com -umlchina.com -umlife.net -umlonline.org -umowang.com -umpay.com -umr18.club -umrhe.com -ums86.com -umsns.com -umtrack.com -umvsoft.com -un-bug.com -un10086.com -un1c0de.xyz -una-ad.com -unages.com -unblockcn.com -unbuyi.com -uncbd.com -unccr.com -uncle-ad.com -uncledesk.com -unclenoway.com -unclenowayapi.com -unclicks.com -undefined.ltd -underfill.cc -uneed.com -unfish.net -ungifts.com -uni-perfect.com -unibizp.com -unicde.com -unicloud.com -unicomjnwy.com -unicomlife.com -unicompayment.com -unicomspeedtest.com -unicomtest.com -unicon-hibar.com -unicornacg.com -unifull.com -unigress.com -uninf.com -union-4.com -union-game.com -union-rnd.com -union-wifi.com -union178.com -union400.com -union555.com -union968.com -unionclouds.net -unioncyber.net -unionli.com -unionpay.com -unionpay95516.cc -unionpayintl.com -unionpaysecure.com -unionsy.com -uniontech.com -unionwebpay.com -unionzs.com -uniostay.com -uniow.com -uniplayad.com -uniproud.com -uniqueway.com -uniscope.com -unisedu.com -unisemicon.com -unisguard.com -unishy.com -unisoc.com -unisound.com -unispim.com -unisscan.com -unissoft.com -unistc.com -uniswdc.com -unitedbank.ltd -unitedmoney.com -unitek-it.com -uniteyun.com -unitop-apex.com -unity3d8.com -unitymanual.com -uniview.com -uniworldart.com -unixfbi.com -unixhot.com -unixidc.com -unizai.com -unjeep.com -unjmz.com -unjs.com -unlimax.com -unnnnn.com -unnue.com -unohacha.com -unpcn.com -unqu.com -unsemi.com.tw -unspay.com -unsuv.com -unsv.com -unyoo.com -unzg.com -uo12.com -uodoo.com -uoeee.com -uofon.com -uoften.com -uohchina.com -uoj.ac -uoko.com -uomg.com -uono4521.com -uooconline.com -uoocool.com -uooioo.com -uoolu.com -uooss.com -uooyoo.com -uoozi.com -uoschina.com -uoser.org -uouo123.com -uovz.com -up360.com -up4dev.com -up71.com -upai.com -upaidui.com -upairs.com -upaiyun.com -upan.cc -upanboot.com -upanok.com -upanshadu.com -upanso.com -upantool.com -upanxitong.com -upbz.net -upcdn.net -upchina.com -upchinapro.com -upchinaproduct.com -upd.kaspersky.com -update.googleapis.com -updates-http.cdn-apple.com -updates-http.cdn-apple.com.akadns.net -updates.cdn-apple.com -updba.com -updrv.com -upe.net -upecp.com -upesn.com -upho2015.com -uphong.com -upimgku.com -upin.com -upkao.com -uplinux.com -uplookedu.com -uplooking.com -upnb.com -upowerchain.com -uppsd.com -upqzfile.com -upqzfilebk.com -ups-huawei.net -ups.ksmobile.net -ups001.com -upsapp.com -upst86.com -upsunet.com -uptougu.com -upupbug.com -upupfile.com -upupoo.com -upupw.net -upwardsware.com -upwith.me -upx8.com -upyun.com -upzxt.com -uqche.com -uqd1.net -uqee.com -uqeegame.com -uqer.io -uqi.me -uqidong.com -uqidong.net -uqite.com -uqq2.com -uqseo.com -uqude.com -uqulive.com -uqyqcuq.ml -urart.cc -urbanchina.org -urbanmatters.com -urbetter.com -urbetter.net -urcb.com -urcities.com -urfire.com -urgc.net -uri6.com -url.ms -urlos.com -urovo.com -urovoworld.com -urpimp.com -ursb.me -urselect.com -urtrust.com -us-ex.com -us7.com -usa-gti.com -usa-idc.com -usaas.net -usaedu.net -usagaa.com -usahaitao.com -usakongjian.net -usaliuxue.com -usaobb.com -usaphoenixnews.com -usashopcn.com -usbing.com -usbmi.com -usbxyz.com -uscnk.com -uscxm.com -usd-cny.com -usdxz1.com -usdxz1.net -use-trust.com -useaudio.com -usecubes.com -userhostting.com -userresearch.net -useryun.net -useso.com -usewo.com -usfcw.com -ushaqi.com -ushendu.com -ushengame.com -using.club -usingde.com -usingwin.com -usitour.com -usitrip.com -usjuw.com -usnook.com -usocctn.com -usocialplus.com -usoftchina.com -usonetrip.com -uspard.com -ustack.com -ustalk.com -ustc.edu -ustcers.com -ustclug.org -ustui.com -usu8.com -usuredata.com -uszcn.com -ut7.com -ut8d.com -utan.com -utanbaby.com -utbon.com -utc-ic.com -utecbj.com -utepo.com -uthinks.com -utiankong.com -utogame.com -utom.design -utoper.com -utourworld.com -utovr.com -utransm.com -uu.cc -uu.me -uu1.com -uu1314.com -uu178.com -uu361cn.com -uu38.com -uu41.com -uu456.com -uu55.tv -uu66.com -uu89.com -uu898.com -uuaa.net -uuaoz.com -uubiqu.com -uuboos.com -uucolor.com -uudsp.com -uuecs.com -uufund.com -uugai.com -uugame.com -uugtv.com -uuhall.com -uuhimalayanqm.com -uuhy.com -uuid.online -uuimg.com -uuka.vip -uukit.com -uukkuu.com -uulucky.com -uulux.com -uumachine.com -uunice.com -uuns.com -uunt.com -uuoo.com -uupaotui.com -uupark.com -uupee.com -uupei.com -uupoop.com -uupt.com -uuradio.com -uus8.com -uusama.com -uusee.com -uusky.com -uusoo.net -uusos.com -uustory.com -uustv.com -uusucai.com -uutop.com -uutuu.com -uuu9.com -uuudo.com -uuukey.com -uuuo.com -uuutu.com -uuvisa.com -uuvps.com -uuwego.net -uuwow.com -uuwtq.com -uuxn.com -uuxs.net -uuyoyo.com -uuzham.com -uuzhufu.com -uuzo.net -uuzu.com -uuzuonline.com -uuzuonline.net -uuzz.com -uvexperience.com -uvledtek.com -uvov.com -uvu.cc -uvuvv.com -uw3c.com -uw9.net -uwa4d.com -uwan.com -uwan5.com -uwenku.com -uwexp.com -uwin100.com -uworter.com -uwowo.com -ux18.com -ux87.com -ux98.com -uxacn.com -uxahz.com -uxdc.net -uxdc.org -uxianhu.com -uxicp.com -uxigo.com -uxin.com -uxingroup.com -uxiting.com -uxpi.net -uxxsn.com -uya100.com -uyan.cc -uyanip.com -uycnr.com -uyess.com -uyi2.com -uyou.com -uyouqu.com -uyshipin.com -uyueread.com -uyunad.com -uyunbaby.com -uyuyao.com -uyyidc.com -uzai.com -uzaicdn.com -uzer.me -uzhongtou.com -uzing.net -uzise.com -uzshare.com -uzuzuz.com -uzzf.com -v-56.com -v-beautysalon.com -v-danci.com -v-ka.com -v007.net -v114.com -v17go.com -v1bo.com -v1h5.com -v1kd.com -v1lady.com -v1pin.com -v1tuan.com -v1tx.com -v2b3.com -v2ex.cc -v2geek.com -v2kt.com -v2land.net -v2make.com -v3best.com -v3edu.org -v4.cc -v4dwkcv.com -v5.com -v54321.com -v58003.com -v58008.com -v5bjq.com -v5cam.com -v5cg.com -v5dun.net -v5fox.com -v5kf.com -v5music.com -v5pc.com -v5ppt.com -v5tv.com -v66666666.com -v6dp.com -v6lvs.com -v6ok.com -v78q.com -v86.org -v8d8.com -v977.com -v9b5n91.com -va-etong.com -vaakwe.com -vacmic.com -vaecn.com -vaeliu.com -vaikan.com -vaillant2.com -vakku.com -valid.apple.com -valid.origin-apple.com.akadns.net -validform.club -valinbl.com -valinresources.com -value500.com -valuecome.com -valuedshow.com -valuepr.net -valueq.com -valueur.com -valurise.com -vamachina.com -vamaker.com -van-u.com -vanbaolu.com -vance-commerce.com -vanch.net -vancharts.com -vanchhandheld.com -vanchiot.com -vanchip.com -vanchiptech.com -vanchu.com -vancl.com -vandream.com -vanfo.net -vanfun.com -vanggame.com -vangotech.com -vankang.com -vanke.com -vankeservice.com -vankeservice.mobi -vankeweekly.com -vanlinkon.com -vanmai.com -vanmatt.com -vanrui.com -vanterc.com -vants.org -vanzol.com -vapee.com -vapejoin.com -vapps.me -vaptcha.com -vaptcha.net -varena.com -variflight.com -varmilo.com -vart.cc -vartcn.com -vas.ink -vasdaqh.com -vasee.com -vasoon.com -vauoo.com -vbanzs.com -vbbobo.com -vbidc.com -vbiquge.com -vbmcms.com -vboba.com -vbooking.net -vbsemi.com -vbsuvb.com -vbuluo.com -vbuluo99.com -vc800.com -vcb-s.com -vcbeat.net -vcchar.com -vceshi.net -vcg.com -vchangyi.com -vchat5.com -vchatshow.com -vchello.com -vchome.net -vcimg.com -vcinchina.com -vckai.com -vckbase.com -vcloudgtm.com -vclusters.com -vcode.cc -vcomic.com -vcomputes.com -vcooline.com -vcore.hk -vcpic.com -vcredit.com -vcsint.com -vdaye.com -vdfly.com -vdian.com -vdisk.me -vdncloud.com -vdndc.com -vdnplus.com -vdnsv.com -vdolady.com -vdongchina.com -ve70.com -vealandlamar.com -vearne.cc -vecentek.com -vechain.com -vechain.org -vedamobi.com -vedeng.com -veding.com -vediotalk.com -veedrin.com -veelink.com -veeqi.com -veer.com -veervr.tv -veeteam.com -veevlink.com -veguci.com -veikei.com -veilytech.com -veinbase.com -veken.com -velasx.com -velep.com -velocaps.com -vemvm.com -ventoy.net -venucia.com -venustrain.com -vephp.com -verdareto.com -verisilicon.com -verisyno.com -veritrans-link.com -verodillan.com -versaloon.com -vertuonline.com -ververica.com -very9s.net -veryapex.com -verybeaut.com -verycaca.com -verycd.com -verycdn.net -verydns.net -verydoc.net -verydz.com -veryevent.com -verygrass.com -verygslb.com -verygslb.net -veryhappy.pw -veryide.com -veryitman.com -verym.com -veryns.com -veryol.com -verypan.com -verysou.com -verysource.com -verystar.net -veryweibo.com -verywind.com -veryxiang.com -veryys.com -veryzhun.com -vesystem.com -vf5c.com -vfcsz.com -vfinemusic.com -vfocus.net -vftfishing.com -vfund.org -vfx123.com -vfxinfo.net -vg1234.com -vgabc.com -vgbaike.com -vgfav.com -vghall.com -vgjump.com -vglook.com -vgoapp.com -vgooo.com -vgover.com -vgoyun.com -vgtime.com -vhaey.com -vhall.com -vhallyun.com -vhao123.com -vhostgo.com -vhteam.com -vi21.net -vi586.com -via-cert.com -via.com.tw -viaeda.com -vial.cc -viatech.com.tw -viayoo.com -vibaike.com -vibit.cc -vic18.com -vicchen.me -vichamp.com -vicigaming.com -vickn.com -vicovico.com -vicp.cc -vicp.net -vicrab.com -vicsdf.com -vida-bio.com -vidaa.com -vidarsoft.com -viday.org -videaba.com -videocc.net -videofk.com -videohupu.com -videoincloud.com -videoipdata.com -videojj.com -videoyi.com -videoyx.com -videozhishi.com -vidoadsplus.xyz -vienblog.com -viewones.com -viewstock.com -viewtool.com -viewtrans.com -viigee.com -viisan.com -viitalk.com -viixin.com -vijos.org -vikduo.com -vikecn.com -villaday.com -villafrancescatti.com -viltd.com -vimage1.com -vimage2.com -vimage4.com -vimge.com -vimicro.com -vimiix.com -vimiy.com -vimjc.com -vimlinux.com -vims04.com -vimsky.com -vimsucks.com -vin114.net -vinchin.com -vinehoo.com -vinetreetents.com -vingoojuice.com -vingoostation.com -vinjn.com -vinkdong.com -vinllen.com -vinnywang.com -vinoyang.com -violetgo.com -violinerhu.com -violinstudy.net -violinww.com -vip-wifi.com -vip.com -vip120.com -vip1280.net -vip150.com -vip800.com -vip8849.com -vip9982.net -vipbaihe.com -vipbla.com -vipbuluo.com -vipchina.com -vipcn.com -vipcto.com -vipdage.com -vipdy.cc -vipersaudio.com -vipfengfei.com -vipfengxiao.com -vipfinal.com -vipgs.net -vipgslb.com -viphxw.com -vipjingdong.com -vipjr.com -vipkaoyan.net -vipkdy.com -vipkid.com -vipkidresource.com -vipkidstatic.com -vipkj.net -vipkoudai.com -vipleyuan.com -vipliangmei.com -viplux.com -vipmaillist.com -vipmando.com -vipmro.com -vipmro.net -viponlyedu.com -vippluspai.com -vipqlz.com -vips100.com -vipshan.com -vipshop.com -vipshopyao.com -vipsinaapp.com -vipsmt.com -vipstatic.com -vipstore.com -viptail.com -viptarena.com -viptest.net -viptijian.com -vipwaf.com -vipwaf.net -vipwm.cc -vipxap.com -vipxdns.com -vipxdns.info -vipxdns.net -vipyaya.com -vipyl.com -vipyooni.com -vipzhuanli.com -viqq.com -virbox.com -vircloud.net -virscan.org -virtualevent.net -virusdefender.net -visa800.com -visabao.com -visacits.com -visadeguo.com -visaforchina.org -visas.to -visaun.com -visbodyfit.com -viseator.com -vishining.com -visionbang.com -visionbbs.com -visioncloudapi.com -visionly.org -visionsoar.com -visionstar-tech.com -visionunion.com -visionvera.com -visitsz.com -viskem.com -vispp.net -vista123.com -vistastory.com -visualchina.com -visvachina.com -visweet.com -vitagou.com -vitagou.hk -vitamio.org -vitarn.com -vitechliu.com -vitian.vip -vivantecorp.com -vivcms.com -vividict.com -vivijk.com -viviv.com -vivo.com -vivoglobal.com -vivokb.com -viwik.com -vixue.com -viziool.com -vjia.com -vjiazu.com -vjie.com -vjshi.com -vjudge.net -vk6.me -vkaijiang.com -vkehu.com -vkelai.com -vkemai.com -vksoft.com -vku6.com -vkvr.net -vl520.com -vlabstatic.com -vlambda.com -vlan9.com -vlandgroup.com -vlcms.com -vldbd.com -vliang.com -vlifan.com -vlightv.com -vlinkage.com -vlinke.com -vlion.mobi -vlong.tv -vlongbiz.com -vloyal.com -vlzp.com -vm.sg -vmall.com -vmallres.com -vmanhua.com -vmartaw.com -vmdo.net -vmengblog.com -vmeti.com -vmfor.com -vmgirls.com -vmicloud.com -vmoiver.com -vmonkey.mobi -vmovier.cc -vmovier.com -vmoviercdn.com -vmsky.com -vmvps.com -vnet.mobi -vnnox.com -vnoke.com -vnsdl.com -vnsiubvgs.com -vnvshen.com -vnzmi.com -voa365.com -vobao.com -vobao.mobi -vocalmiku.com -voccdn.com -vocinno.com -vodjk.com -vodxc.com -voguego.com -vohringer.com -voicedic.com -voicer.me -voidcc.com -voidking.com -voidme.com -vojs.tv -vokop.com -vol.moe -volccdn.com -volcgslb.com -volcgtm.com -volchina.com -volcimagex.net -volcsiriusbd.com -voldp.com -volit.com -volmoe.com -voltmemo.com -voltsky.com -volumes.cc -von-sh.com -vona.xin -vonets.com -vooec.com -voole.com -voole.net -voora.net -voovle.net -voovlive.com -voovmeeting.com -vortexfun.com -vote8.cc -vote8.com -voyooo.com -vp3u.com -vpadn.com -vpal.com -vpalstatic.com -vpansou.com -vpbus.com -vpcoupons.com -vpcs.com -vpgame.com -vpgcdn.com -vpiaotong.com -vpie.net -vpimg1.com -vpimg2.com -vpimg3.com -vpimg4.com -vplayer.net -vpn39.com -vpnsoft.net -vpquc9rn.com -vps.im -vps.sh -vps234.com -vpsaa.com -vpsaa.net -vpsaff.com -vpscang.com -vpsdawanjia.com -vpsdx.com -vpser.net -vpsjie.com -vpskk.com -vpsmm.com -vpsor.com -vpsqb.com -vpsrb.com -vpsrr.com -vpssir.com -vpsss.net -vpszh.com -vqs.com -vqudo.com -vqudochina.com -vqxfj.bar -vr-cat.com -vr-game.club -vr1000.com -vr186.com -vr42.com -vr5008.com -vrbeing.com -vrbi.viveport.com -vrbig.com -vrbrothers.com -vrcfo.com -vrgame520.com -vrguancha.net -vrjie.com -vrlequ.com -vrltec.com -vrmvip.com -vroan.com -vrpowder.com -vrsat.com -vrshendeng.com -vrvlink.com -vrvmanager.com -vrwuhan.com -vrzb.com -vsaker.com -vsane.com -vsbclub.com -vsbuys.com -vsdhf.com -vsens.com -vshangdaili.com -vshare.com -vsharecloud.com -vsharing.com -vshengsu.com -vshouce.com -vshuoshuo.com -vslai.com -vsledclothes.com -vsnoon.com -vsnoon.net -vsnoon.org -vsnuf.com -vsochina.com -vsocloud.com -vspk.com -vspk.net -vsppt.com -vsread.com -vstab.com -vstart.net -vstecs.com -vstmv.com -vstou.com -vsuch.com -vsun.com -vsyo.com -vtache.com -vte8.com -vteamgroup.com -vtears.com -vtepai.com -vtepai.net -vtibet.com -vtoutiao.cc -vtrois.com -vtuzx.com -vue-js.com -vue5.com -vuejscaff.com -vuepr.icu -vuevideo.net -vulbox.com -vulnhunt.com -vulogcn.com -vultr1.com -vultrcn.com -vultrla.com -vultrvps.com -vunion.net -vurl.link -vutimes.com -vux.li -vv181.com -vv8.com -vv881.com -vv8yx.com -vv91.com -vv9vv.com -vvaii.com -vvbtc.com -vvddcc.com -vvdeal.com -vvdoit.com -vvfeng.com -vvic.com -vvipcdn.com -vvjob.com -vvkaoyan.com -vvmeiju.com -vvo2o.com -vvpncdn.com -vvtor.com -vvup.net -vvv.io -vvvcd.com -vvvdj.com -vvvfans.com -vvzero.com -vwanka.com -vweizhan.com -vwhulian.com -vwvvwv.com -vwwmsd.com -vx.com -vx888.net -vxgua.com -vxia.net -vxiaocheng.com -vxiaoxin.com -vxinyou.com -vxplo.com -vxposed.com -vxsnk.com -vxuey.com -vycool.com -vyg.net -vyin.com -vysj.com -vyuan8.com -vyun.com -vz41.com -vzan.cc -vzan.com -vzhang.net -vzhantong.com -vzhifu.net -vzhou.net -vzhuanba.com -vzhuji.com -vzhuo.com -vzhushou.com -vzidc.com -vzkoo.com -vzmapp.com -vzuu.com -w-e.cc -w0lker.com -w10a.com -w10xitong.com -w10xz.com -w10zj.com -w123w.com -w1365.com -w18.net -w1989.com -w20.net -w218.com -w2bc.com -w2fzu.com -w2gou.com -w2solo.com -w333.com -w351.com -w3cay.com -w3cbus.com -w3cfuns.com -w3chtml.com -w3cl.com -w3cplus.com -w3cschool.cc -w3cshare.com -w3ctalk.com -w3ctech.com -w3cui.com -w3cways.com -w3h5.com -w3help.org -w3pop.com -w3tong.com -w3tt.com -w3xue.com -w7.cc -w7000.com -w8xitong.com -w918.com -wa5.com -wa5as4.com -waaaat.com -waakee.com -wabcw.info -wabuw.com -wacai.com -wacaiyun.com -wacaoren.net -wacdn.com -wacths.com -wadao.net -wader1714.com -wadmz.com -waduanzi.com -waerfa.com -waf.cdnetworks.com -waf.cx -wafcn.com -wafunny.com -waheaven.com -wahlap.com -waibao123.com -waibao12333.com -waibaodashi.com -waibo.wang -waig8.com -waigame.com -waigf.com -waiguaw.com -waiguofang.com -waihm.net -waihui888.com -waihuigu.net -waihuo.com -wailaishop.com -wailianvisa.com -waima.com -waimaiquan.vip -waimao6.com -waimaolangtz.com -waimaoribao.com -waiqin365.com -waisir.com -waitingfy.com -waitsun.com -wajueji.com -wajuejin.com -wakatool.com -wakedata.com -waketu.com -wakeup.fun -wakingsands.com -wakkaa.com -walahe.com -walanwalan.com -walatao.com -walekan.com -wali.com -walibao.com -walidream.com -walimaker.com -walkerdu.com -walknode.com -walkthechat.com -wall321.com -wallba.com -wallcoo.com -wallcoo.net -walle-web.io -wallet.io -walletio.io -wallpapersking.com -wallstcn.com -wallstreetcn.com -wamawama.com -wamila.com -wan.cc -wan.com -wan.wang -wan160.com -wan25.com -wan32.com -wan5d.com -wan68.com -wan7.xin -wan73.com -wan76.com -wan77.com -wan8.com -wan95.com -wanbang365.com -wanbaoju.com -wancai.com -wancaibb.com -wancaiinfo.com -wancaomei.com -wanche100.com -wancheng168.com -wanchengwenku.com -wanchenzg.com -wanchezhijia.com -wand6.com -wanda-cti.com -wanda-gh.com -wanda-group.com -wandacinemas.com -wandafilm.com -wandahotelinvestment.com -wandahotels.com -wandamoviepark.com -wandanqu.com -wandaplazas.com -wandarealm.com -wandasportstravel.com -wandavista.com -wandhi.com -wandianshenme.com -wandodo.com -wandoer.com -wandouip.com -wandoujia.com -wandouys.com -waneziyuan.com -wanfangdata.com -wanfangqikan.com -wanfangs.com -wanfangtech.com -wanfantian.com -wanfn.com -wanfumei.net -wang-li.com -wang-nan.com -wang-russell.cc -wang1314.com -wang1314.net -wang13607.com -wanga.me -wangamela.com -wanganedu.com -wangbixi.com -wangcaigu.com -wangcaio2o.com -wangcaiwang.com -wangcanmou.com -wangchaoren.com -wangchujiang.com -wangchunsheng.com -wangcms.com -wangdaibus.com -wangdaicaifu.com -wangdaidongfang.com -wangdaidp.com -wangdaijiamen.com -wangdaijianwen.com -wangdaijin.com -wangdaileida.com -wangdaizhijia.com -wangdalao.com -wangdali.net -wangdaodao.com -wangdian.wang -wangdianmaster.com -wangdongjie.com -wangeditor.com -wangejiba.com -wangfanwifi.com -wangfujing.com -wanggou.com -wanggou236.com -wanggouyizu.com -wangguai.com -wanghaida.com -wanghairead.com -wanghualang.com -wanghz.com -wangi.cc -wangid.com -wangjianshuo.com -wangjinle.com -wangjubao.com -wangjunwei.com -wangkl.com -wangkx.xyz -wangl903.com -wangle.com -wanglibao.com -wanglids.com -wanglu.info -wangluojianshen.com -wangluoliuxing.com -wangluomeirongyuan.com -wanglutech.com -wanglv.com -wanglv.vip -wangman8.com -wangmeng.com -wangmingkuo.com -wangminping.com -wangmou.com -wangmou.net -wangpan007.com -wangpengcufe.com -wangpiao.com -wangpiao.net -wangpu.net -wangpu365.com -wangpuzhi.com -wangqi.com -wangren.com -wangriyu.wang -wangrongbao.com -wangrunze.com -wangshangfayuan.com -wangshidi.com -wangshu.la -wangshuashua.com -wangshugu.com -wangsongxing.com -wangsu.com -wangsucloud.com -wangting.net -wangtingrui.com -wangtongtong.com -wangtouwang.com -wangtu.com -wangtuizhijia.com -wanguan.com -wangukcn.com -wanguoschool.net -wanguotong.com -wangwango.com -wangwenda.com -wangwo.net -wangxc.club -wangxianyuan.com -wangxiao.com -wangxiao.net -wangxiaobao.cc -wangxiaobao.com -wangxingcs.com -wangxinhao.com -wangxinlicai.com -wangyajie.wang -wangyanpiano.com -wangye.com -wangyin.com -wangyou.com -wangyou2.com -wangyuan.com -wangyuegame.com -wangyutang.com -wangyuwang.com -wangzhan123.net -wangzhan360.com -wangzhan6.com -wangzhanbao.cc -wangzhanbianji.com -wangzhanbus.com -wangzhanchi.com -wangzhanmeng.com -wangzhanzj.com -wangzhe.com -wangzhengzhen.com -wangzhennan.com -wangziru.com -wanh5.com -wanhedoors.com -wanheweb.com -wanhi.com -wanhongji.com -wanhu888.com -wanhuahai.com -wanhuajing.com -wanhui365.com -wanhunet.com -wanimal1983.org -wanjiajinfu.com -wanjiashe.com -wanjidashi.com -wanjiedata.com -wanjiedu.com -wanjuhe.com -wanka5.com -wankacn.com -wanke123.com -wanke798.com -wankr100.com -wankukeji.com -wankuwl.com -wanlaiwang.com -wanlan.vip -wanli.com -wanlitong.com -wanliyouxuan.com -wanmei.com -wanmeila.com -wanmeilink.com -wanmeilr.com -wanmeiyueyu.com -wanmeiyunjiao.com -wanmi.cc -wannaenergy.com -wannaexpresso.com -wannar.com -wannengxiaoge.com -wannengzj.com -wannianli.mobi -wannianli.net -wannuoda.com -wanplus.com -wanqianyun.com -wanquankan.com -wanredian.com -wanrenxing.net -wansege.info -wansf.com -wanshahao.com -wanshanshuju.com -wanshh.com -wanshhh.com -wanshifu.com -wanshitong.com -wanshouyou.net -wanshutech.com -wanshuyun.com -wansongpu.com -wantattoo.com -wantegame.com -wantexe.com -wantgame.net -wantiku.com -wantong-tech.net -wantouzi.net -wantowan.com -wantrack-nj.com -wantshopping.ltd -wantubizhi.com -wantumusic.com -wanvv.com -wanwanol.com -wanweipc.com -wanweixin.com -wanwudezhi.com -wanwushuo.com -wanwuxia.com -wanww.com -wanxiang100.com -wanxiangqihang.com -wanyan.com -wanyiwang.com -wanyol.com -wanyoo.com -wanyoucn.com -wanyouxi7.com -wanyuanxiang.com -wanyuenet.com -wanyuhudong.com -wanyumi.com -wanyunshuju.com -wanyuwang.com -wanyx.com -wanyxbox.com -wanzaidangxia.com -wanzhao.com -wanzhongcar.com -wanzhouhr.com -wanzhoumo.com -wanzhuang.com -wanzhuanhulian.com -wanzhuanlea.com -wanzhuanmobile.com -wanzhucdn.com -wanzhugs.com -wanzi.cc -wanzi.com -wanzjhb.com -wanzuile.com -waoo.cc -wapadv.com -waptt.com -wapzk.net -waqiang.com -warcraftchina.com -warestage.com -wargamecn.com -warmcolor.net -warsongmobile.com -warstudy.com -warsu.com -warting.com -warwickintl.com -was-expo.com -wasair.com -washpayer.com -wasoinfo.com -wasu.com -wasu.tv -watanabe-mayu.com -watch-life.net -watchleader.com -watchstor.com -watchtop.com -water520.com -watercubeart.com -watergasheat.com -watertek.com -watertu.com -watsoniki.com -wauee.com -wauee.net -wave-game.com -wave-optics.com -waveshare.net -wavky.com -wavpub.com -wawa114.com -wawayaya.net -waxrain.com -waxxh.me -wayboosz.com -wayhu.cc -wayhu8.com -wayingyong.com -waylon.wang -waynetechs.com -wayos.com -wayoulegal.com -wayoutv.com -wayoxi.com -waytide.com -waytit.com -wayzim.com -wazhuti.com -wb0311.com -wb133.com -wb321.com -wb699.com -wbangdan.com -wbdacdn.com -wbiao.co -wbiao.com -wbini.com -wbldjy.com -wbljjy.com -wbo529.com -wbolt.com -wbpluto.com -wbpvc.com -wbsp.net -wbsrf.com -wbsz.com -wbtech.com -wbucs.com -wbw.im -wbxgl.com -wbxs8.com -wbyweb.com -wbzol.com -wc44.com -wcd.im -wcfang.com -wch-ic.com -wcjbb.com -wcloud.com -wcmrpx.com -wcsapi.com -wcsfa.com -wcuhdi.com -wcwlmobi.com -wcyecs.com -wczf.net -wd1266.com -wd6667.com -wdace.com -wdashi.com -wdaveh5game.com -wddcn.com -wddream.com -wdfangyi.com -wdfxw.net -wdghy.com -wdh518.com -wdinter.com -wdjimg.com -wdjky.com -wdjl.net -wdku.net -wdliuxue.com -wdlny.com -wdmcake.com -wdmuz.com -wdqh.net -wdres.com -wdshouji.com -wdsjz.com -wdsrc.com -wdstory.com -wdszb.com -wdtianxia.com -wdtlfj.com -wduw.com -wdw6.com -wdw88.com -wdxmzy.com -wdxsk.com -wdxtub.com -wdy33.com -wdy44.com -wdyxgames.com -wdzj.com -wdzj.org -wdzjimages.com -wdzx.com -we.com -we.dji.com -we.game -we.tm -we1130.com -we123.com -we12306.com -we2.name -we2255.com -we2marry.com -we4399.com -we4game.com -we7.cc -weachat.net -weakyon.com -wealink.com -wealinkcdn.com -weand.com -weaoo.com -weaponx.site -weapp.com -weapp.me -wearemanner.com -weareqy.com -weartrends.com -weasing.com -weatherat.com -weathercn.com -weatherdt.com -weatherol.com -weaverdream.com -weaversoftware.com -weavi.com -weaview.com -web-tinker.com -web0518.com -web0898.net -web100.cc -web1800.com -web2060.com -web3.xin -web3389.com -web360.pw -web89.net -web930.com -webacg.com -webaner.com -webank.com -webankcdn.net -webcname.net -webdissector.com -webdiyer.com -webdriver.org -webfalse.com -webfont.com -webfoss.com -webfreecounter.com -webfuwu.com -webgame138.com -webgzs.com -webhek.com -webhivers.com -webjike.com -webkaka.com -webkdcdn.com -webkf.net -webkv.com -webluker.com -webmagic.io -webmeng.net -webmulu.com -webnovel.com -webok.me -webond.net -weboss.hk -webpackjs.com -webpiaoliang.com -webportal.cc -webpowerchina.com -webppd.com -webqxs.com -webrtc.win -webs.so -websbook.com -websem.cc -webseo9.com -webshao.com -webshu.com -webshu.net -websjcdn.com -websjx.com -websjy.com -websocket-test.com -websocket2.com -websocket5.com -websocket6.com -websoft9.com -webterren.com -webullzone.com -webuy.vip -webview.tech -webxgame.com -webxin.com -webxmf.com -webxueyuan.com -webyang.net -wecarepet.com -wecash.net -wecatch.me -wecenter.com -weceshi.com -wechat-data-rescue.com -wechat.ba -wechat.com -wechat.org -wechat007.com -wechat500.com -wechatapp.com -wechatify.net -wechatpay.com.hk -wechatpen.com -weclassroom.com -wecloudx.com -wecrm.com -wecycling.com -wecydia.com -wed027.com -wed6.com -wedate.me -weddingos.com -wedengta.com -wedfairy.com -wedn.net -wedo8.com -wedooapp.com -weebei.com -weebia.com -weedong.com -weefang.com -weeiy.com -weekus.com -weelv.com -weeqoo.com -weeyun.com -wefans.com -wefiler.com -wefinder.com -wefinger.club -wegame.com -wegamex.com.hk -wegene.com -weharvest.com -wehefei.com -weherepost.com -wei2008.com -wei6.com -weiba66.com -weibaiyue.com -weibaji.com -weibanan.com -weibangong.com -weibanzhushou.com -weibenchina.com -weibo.co -weibo.com -weibocdn.com -weibodangan.com -weibohelper.com -weiboi.com -weibopay.com -weibopie.com -weiboreach.com -weiboyi.com -weibusi.net -weica.net -weicaifu.com -weicewang.com -weichaishi.com -weiche.me -weichen.org -weiclicai.com -weico.cc -weico.com -weicot.com -weida888.com -weidanbai.com -weidanci.com -weidaohang.org -weidaoliu.com -weidea.net -weidian.cc -weidian.com -weidian.gg -weidiancdn.com -weidianfans.com -weidiango.com -weidianyuedu.com -weidown.com -weiduhui.com -weidunewtab.com -weiengift.com -weifang168.com -weifei.me -weifenghr.com -weifengke.com -weifengou.com -weifengtang.com -weigang.com -weigongju.org -weigongxue.com -weihai.tv -weihai6.com -weihaicollege.com -weihaipoly.com -weihanli.xyz -weihaobang.com -weihaoyi.com -weihua2.com -weihuangqp.com -weihuazs.com -weihubao.com -weihuijob.com -weihulian.com -weihz.net -weijifan.com -weijinsuo.com -weijinzhuanbb.com -weijinzhuancc.com -weijiu.org -weijiuxin.com -weijj.com -weiju.net -weijuju.com -weijuwhua.com -weikaowu.com -weikasen.com -weikd.com -weike.fm -weikebaba.net -weikeimg.com -weikejianghu.com -weikengtech.com -weikuo.cc -weikuw.com -weilairibao.com -weilaishidai.com -weilaitiku.com -weilaizhaiju.com -weilanhaian.com -weilanliuxue.com -weile.com -weiling520.com -weilingdi.com -weilinovel.net -weilitoutiao.net -weilongshipin.com -weilt.net -weimai.com -weimaqi.net -weimeiba.com -weimeicun.com -weimeifan.net -weimeixi.com -weimiaocaishang.com -weimingcq.com -weimingedu.com -weimingkids.com -weimob.com -weimobdc.com -weimobqa.com -weimobwmc.com -weinisongdu.com -weinovel.cc -weiot.net -weipaitang.com -weiphone.net -weiphp.com -weipinchu.com -weiping.com -weipu.com -weiq.com -weiqi.cc -weiqiaocy.com -weiqiaoyun.com -weiqidaxing.com -weiqinfang.com -weiqingbao.cc -weiqitv.com -weiqudao.net -weiquyx.com -weiren.com -weisanyun.com -weisay.com -weishan.cc -weishang99.net -weishangagent.com -weishangchina.org -weishangshijie.com -weishangye.com -weishangzhonghe.com -weishengka.com -weishi.com -weishi100.com -weishu.me -weisiliang.com -weismarts.com -weistang.com -weisuyun.com -weitehui.com -weitiaozhuan.com -weitiewang.com -weitip.com -weitoupiao.com -weitousuo.com -weituibao.com -weituku.cc -weitunit.com -weituobang.net -weituoshepin.com -weitushe.com -weiwangpu.com -weiwangvip.com -weiwanhudong.com -weiwanjia.com -weiwei123.com -weiweibox.com -weiweiwo.com -weiweixiao.net -weiweixiong.com -weiweiyi.com -weiwenjia.com -weiwuhui.com -weixiangshe.com -weixianmanbu.com -weixianzhuan.com -weixiaoduo.com -weixiaohan.com -weixiaotong.com -weixiaotuoke.tech -weixiaov.club -weixiaov.wang -weixin.com -weixin008.com -weixin111.com -weixin12.com -weixin12315.com -weixinbang.com -weixinbridge.com -weixincall.com -weixingate.com -weixingmap.com -weixingon.com -weixingongzuoshi.com -weixingv.com -weixinhbs.com -weixinhost.com -weixinhow.com -weixinjia.net -weixinjiajia.com -weixinju.com -weixinkd.com -weixinmenu.com -weixinmuban.com -weixinmvp.com -weixinnu.com -weixinpy.com -weixinqing.com -weixinqn.com -weixinquanzi.com -weixinrensheng.com -weixinso.com -weixinsxy.com -weixinyunduan.com -weixistyle.com -weixiu2.com -weixiuka.com -weixue100.com -weixueyuan.net -weixun.com -weixuncj.com -weixunyunduan.net -weixz8.com -weiyan.me -weiyangx.com -weiyapaper.com -weiye.me -weiyes.com -weiyi.com -weiyianws.com -weiyichina.org -weiyiminhenqiang.com -weiyingbao.com -weiyituku.com -weiyoou8.com -weiyoubot.com -weiyours.com -weiyui.com -weiyun.com -weiyun001.com -weiyunchong.com -weiyuntop.com -weiyunyong.com -weizhanabc.com -weizhangjilu.com -weizhangwang.com -weizhanle.com -weizhengbrand.com -weizhenwx.com -weizhilink.com -weizoom.com -wejianzhan.com -wejiazu.com -wejoydata.com -wekbo.com -wekuo.com -welansh.com -welcrm.com -weldzy.com -welefen.com -weleve.com -weliads.com -welian.com -welife001.com -welife100.com -welinkpark.com -well8.com -wellant88.com -wellcoding.com -wellhope.net -wellphp.com -wellpie.com -wellsoon.com -welove520.com -welovead.com -welqua.com -wemdsm.com -wemediacn.com -wemepi.com -wemomo.com -wemunc.org -wemvp.com -wen-lu.me -wenancehua.com -wenancn.com -wenangou.com -wenanzhe.com -wenbita.net -wenbo.cc -wencaischool.com -wenchain.com -wenda100.net -wenda123.com -wenda8.com -wendaifu.com -wendal.net -wendangdaquan.com -wendangku.net -wendangmao.com -wendangmao.net -wendangwang.com -wendangxiazai.com -wendasou.com -wendax.com -wendaxiaowu.com -wenday.com -wendian.com -wendns.com -wendoc.com -wendu.com -wenduedu.com -wendumao.com -wenfangjushe.com -wenfangnet.com -wenfatang.net -wenfuxiang.com -wengbi.com -wengkui.com -wenguang.com -wenguangta.com -wenguanguoji.com -wenguo.com -wengzai.com -wenhaofan.com -wenhua.cc -wenhuabolan.com -wenhui.space -wenidc.com -wenjian.net -wenjiangs.com -wenjingnetwork.com -wenjiwu.com -wenjuan.cc -wenjuan.com -wenjuan.in -wenjuan.link -wenjuan.ltd -wenjuan.net -wenjuan.pub -wenjuanba.com -wenjuanshow.com -wenjunjiang.win -wenjuntech.com -wenjx.com -wenku.net -wenku321.com -wenku365.com -wenku7.com -wenku8.com -wenku8.net -wenkudao.com -wenkudaquan.com -wenkumao.com -wenkuwenku.com -wenkuxiazai.net -wenlc.com -wenlvnews.com -wenmeng.com -wenmi.com -wenneart.com -wenpie.com -wenrouge.com -wenruya.com -wenryxu.com -wensang.com -wenshaktv.com -wenshao-art.com -wenshen.net -wenshen010.com -wenshen8.net -wenshendaka.com -wenshenku.com -wensheno.com -wenshenxiu.com -wenshibaowenbei.com -wenshijiawei.com -wenshitiandi.com -wenshuba.com -wensuocaster.com -wenten.net -wentu.io -wenwen.com -wenwentang.com -wenwo.com -wenwu8.com -wenwuchina.com -wenxi777.com -wenxiang.org -wenxiaoyou.com -wenxingfilter.com -wenxiu.com -wenxiu998.com -wenxiushop.com -wenxue100.com -wenxuedu.com -wenxuem.com -wenxuemi.com -wenxuemi6.com -wenxuemm.com -wenxuetiandi.com -wenyijcc.com -wenyinos.org -wenyoutai.com -wenyu6.com -wenyw.com -wenzaizhibo.com -wenzhaihui.com -wenzhangba.com -wenzhanghui.com -wenzhen8.com -wenzhengwenhua.com -wenzhousx.com -wenzidi.com -wenzon.com -wepiao.com -wepie.com -weplaybubble.com -weplaymore.com -weplus.com -weplus.me -werewolf.mobi -werewolf.online -wesafesoft.com -wesai.com -wesane.com -wesdom.me -weshaketv.com -weshequ.com -weshineapp.com -wesiedu.com -west.xyz -west263.com -west999.com -westbund.com -westcy.com -weste.net -westengine.com -westleadfund.com -westonecloud.com -westpac.group -westsecu.com -westsummitcap.com -wesure100.com -wetherm.com -weti.me -wetogame.com -weton.net -wetouch.net -wetruetech.com -wetsd.com -wetv.vip -wetvinfo.com -wewean.com -wewinpe.com -wex5.com -wexin.com -wey.com -weyee.com -weyhd.com -weyi.cc -weyman.me -weyo.me -wezeit.com -wezhan.hk -wezhan.net -wezhan.us -wezhuiyi.com -wf.pub -wf163.com -wf66.com -wfbaiyou.com -wfbbs.com -wfbrood.com -wfc805.com -wfccb.com -wfdata.club -wfeil.com -wfek.com -wff168.com -wffc120.com -wffengmailin.com -wffms.com -wfhero.online -wfiltericf.com -wfilterngf.com -wfjimg.com -wfkouyaji.com -wflgjx.com -wfluxin.com -wfsdf.com -wfun.com -wfuyu.com -wfwenshigongcheng.com -wfxspc.com -wfxz.com -wfyake.com -wfycjd.com -wfzbjx.com -wfzqhb.com -wfzssz.com -wfztg.com -wfzzz.com -wg900.com -wgcss.com -wgh.me -wghostk.com -wghpdi.com -wgimg.com -wglm.net -wgmf.com -wgnds.com -wgos.com -wgpsec.org -wgsptc.com -wgxcn.com -wgxdxx.com -wgxy.com -wgxy.net -wh-baidu.com -wh-charity.com -wh-china.com -wh-haipu.com -wh-motorshow.com -wh-mx.com -wh10000.com -wh100idc.com -wh111.com -wh119.com -wh12345szzx.com -wh20zx.com -wh2work.com -wh50.com -wh6z.com -wh702g.ren -whadexpo.com -whairport.com -whalecloud.com -whaledu.com -whaleunique.com -whalipaycs.com -whart.net -what21.com -whatbuytoday.com -whatsns.com -whatua.com -whbaishitong.com -whbbs.com -whbc2000.com -whbcrs.com -whbear.com -whbester.com -whbiobank.com -whbjdn.com -whbjyy.com -whbsybj.com -whbts.com -whbtsj.com -whbwj.com -whbws.com -whcat.net -whcbank.com -whcbs.com -whccb.com -whcch802.com -whccwh.com -whcdc.org -whcfs.org -whcgtx.com -whchihuo.com -whckxx.com -whcotton.com -whcrewin.com -whcst.com -whctv.com -whcyit.com -whdaring.com -whdayy.com -whdckj.com -whddgc.com -whdonde.com -whdqhj.com -whdrawing.com -whdsyy.com -whduanwu.com -whdydl.com -whecb.com -whecloud.com -whecn.com -whegj.com -whenchat.net -whenever-online.com -wherxian.com -whetc.com -whevt.com -whewash.com -whfangchanzx.com -whfazun.com -whfcsc.org -whfeiyou.com -whfengli.com -whfflz.com -whflfa.com -whgaodu.com -whgaopeng.com -whggjk.com -whggjtjs.com -whggvc.net -whghfz.com -whghjt.com -whgjjtjx.com -whgk.com -whglory.com -whgmbwg.com -whgmq.com -whgmxy.com -whgszx.com -whgtgh.com -whguo.com -whgwbn.net -whgykg.com -whhbxh.org -whhdcz.com -whhdmt.com -whhdsdq.com -whhengchang.com -whhexin.com -whhk520.com -whhkbyg.com -whhlhj.com -whhnkj.com -whhost.net -whhouse.com -whhpaccp.com -whhsg.com -whhslndx.com -whhuatian.com -whhuiyu.com -whhxny.com -whhxts.com -whhysound.com -whhzhn.com -whhzyj.com -whib.com -whicec.com -whichmba.net -whidc.com -whidy.net -whiee.com -whinfo.net -whir.net -whisperto.net -whitebox.im -whitecat.com -whitegem.net -whitemedia-china.com -whitjy.com -whjbh.com -whjclgs.com -whjcly.com -whjhcz.com -whjiaoy.com -whjjhbj.com -whjm.com -whjmyc.com -whjtxx.com -whjuren.com -whjy.net -whjyx.com -whjzw.net -whjzy.net -whjzyxh.org -whkakaxi.com -whkangte.com -whkc.com -whkingdom.com -whkjz.com -whkpcnc.com -whkt.net -whkyjz.com -whkykj.com -whland.com -whlawyer.net -whldsoft.com -whlido.com -whljyl.com -whlkwy.com -whlongre.com -whlrhd.com -whlxhs.net -whly56.com -whlybzh.com -whlynk.com -whmama.com -whmcwd.com -whmcxh.org -whmeigao.com -whmicrocredit.com -whmj.org -whmlcy.net -whmnrc.com -whmnx.com -whmoocs.com -whmoto.com -whmyjj.org -whmylike.cc -whmylikekq.com -whnatural.com -whnfc.com -whngd.org -whoami.akamai.net -whoceansys.com -whocool.com -whoil.net -whoolala.com -whooyan.com -whosedrop.com -whozen.com -whpantosoft.com -whpanva.com -whplmd.com -whptc.org -whpx.net -whqcbj.com -whqhyg.com -whqiansou027.com -whqtdjy.com -whqunyu.com -whr.cc -whrango.com -whrazf.com -whrcbank.com -whrenai.com -whres.net -whrhkj.com -whrl.net -whrsip.com -whrsj.org -whrtmpay.com -whsdsyy.com -whseoclub.com -whsir.com -whsladz.com -whsladz.net -whsmkg.com -whsoftway.com -whsql.org -whsqsoft.com -whsrc.com -whssxpx.com -whsunmap.com -whsw.net -whsxt.com -whsy.org -whsyy.net -whtbq.com -whtcm.com -whtcm.net -whtdcb.com -whtdsc.com -whtech-sonic.net -whtfzy.com -whtmhh.com -whtongyun.com -whtpi.com -whtqedu.net -whtran.com -whtryine.com -whtsw.org -whtto.com -whttsy.com -whtuff.com -whtxcloud.com -whtzb.org -whu-cveo.com -whu.pt -whualong.com -whudfr.com -whuh-gi.com -whuh.com -whuhzzs.com -whume.com -whuspark.com -whuss.com -whusu.org -whut-px.com -whutech.com -whutosa.com -whuwto.com -whwanshun.com -whwater.com -whwebsite.com -whweo.com -whwkzc.com -whwm.org -whwomensmarathon.com -whwxxy.com -whxc01.com -whxf315.org -whxh.com -whxinhuo.com -whxsnsy.com -whxunw.com -whxy.net -whxyqb.com -whxysz.net -why123.org -whybh2015.com -whycan.com -whyec.com -whyenjoy.com -whyestar.com -whyfcm.com -whyfyc.com -whyicheng.com -whyimingkeji.com -whyinsheng.com -whyinzhimei.com -whyiqitong.com -whyldd.net -whyongwei.com -whyqi.com -whysdomain.com -whyshop.com -whysodiao.com -whysx.com -whyungu.com -whyyy.com -whzb.com -whzblawson.com -whzbtb.com -whzc2008.com -whzdyy.com -whzglc.com -whzh-cw.com -whzhqsg.com -whzhtd.com -whzhzxmr.com -whzjyy.com -whzkb.com -whzlyy.com -whzph.com -whzsrc.com -whzwzk.com -whzwzs.com -whzxht.com -whzxzls.com -whzyblh.com -whzydz.com -whzyht.com -whzyy.net -wiblog.net -wicep.com -wicp.net -wicp.vip -wicresoft.com -widuu.com -wifenxiao.com -wifi.com -wifi03.com -wifi0917.com -wifi188.com -wifi33.com -wifi8.com -wifibanlv.com -wifichain.com -wifidog.pro -wifidown.com -wifigushi.com -wifigx.com -wifiing.net -wifimsl.com -wifire.net -wifishenqi.com -wifiwx.com -wifizj.com -wiitrans.com -wiiyi.com -wiki8.com -wikielife.com -wikiimgs.com -wikimirror.org -wikimoe.com -wikiyuedu.com -wikore.com -wikore.net -wikore.org -wilddog.com -wilddream.net -wildgun.net -will6.com -willcdn.com -willmao.com -willsemi.com -willsfitness.net -willsgym.com -willsun.net -willwin91.com -wiloon.com -wiloop.net -wimetro.com -wimiar.com -win-ke.com -win-man.com -win.hn -win007.com -win1032.com -win1064.com -win10cjb.com -win10com.com -win10gw.com -win10net.com -win10set.com -win10world.com -win10ww.com -win10xitong.com -win10zjb.com -win10zyb.com -win2007.com -win4000.com -win71234.com -win732.com -win789.com -win7999.com -win7china.com -win7en.com -win7i.com -win7qijian.com -win7qjb.com -win7sky.com -win7w.com -win7xzb.com -win7zhuangjiyuan.com -win8.net -win866.com -win8china.com -win8e.com -win8pc.com -win8xiazai.com -win9008.com -winasdaq.com -winbaicai.com -winbaoxian.com -winbic.com -winbjb.com -winbond-ic.com -winbons.com -winbosmart.com -wincheers.com -wincheers.net -wincn.com -wind.moe -wind2021.com -windcoder.com -windever.com -windin.com -windleaf.site -windmsn.com -windows10.pro -windows10zj.com -windows11.pro -windows7adobe.com -windows7en.com -windows7home.com -windowszj.com -windowszj.net -windrunner.me -winds.red -winds2021.com -windsns.com -windtch.com -windworkshop.net -wine-world.com -wine9.com -winegame.net -wineln.com -winemagz.com -winenice.com -wines-info.com -winesinfo.com -winesou.com -wineworld.vip -winex-hk.com -winfang.com -winfanqie.com -winfreeinfo.com -wingconn.com -winglungbank.com -wingsbook.com -wingstudio.org -wingtecher.com -winhong.com -winhyl.com -winicssec.com -winkey17.com -winkingworks.com -winksi.com -winndoo.com -winner9.com -winnermicro.com -winnet.cc -winning11cn.com -winotmk.com -winrobot360.com -winsenseos.com -winshang.com -winshangdata.com -winsing.net -wintalent.com -winteam500.com -winterchen.com -wintimechina.com -wintooo.com -wintopedu.com -winvvv.com -winwebmail.com -winwin7.com -winxp8.com -winxuan.com -winxuancdn.com -winxw.com -wio2o.com -wireless-driver.com -wirelesschina-summit.com -wisburg.com -wisder.net -wisdoing.com -wisdom-braun.com -wisdomcmmi.com -wisdontech.com -wisdr.com -wisdri.com -wise-iot.com -wiseah.com -wiseboke.com -wisecotech.com -wisedoo.com -wisedsp.net -wisedu.com -wiseduc.com -wiseimp.com -wiselong.com -wisenjoy.com -wiseuc.com -wisevector.com -wishbuild.com -wishcad.com -wishcalls.com -wishdown.com -wishisp.com -wisiyilink.com -wismom.com -wison-engineering.com -wison.com -wisrc.com -wistone.com -wiswonder.com -wit-parking.com -wit0.com -wit5.com -witcp.com -with366.com -withae.com -withcdn.com -withiocdn.com -withmedia.net -withpinbox.com -withsccdn.com -withsin.com -withubit.org -withzz.com -witkey.com -witmart.net -witnew.net -witontek.com -witown.com -witspring.com -witt.wang -wiwide.com -wiyeniao.com -wiz03.com -wizarcan.com -wj-hospital.com -wj001.com -wj166.com -wjage.com -wjajw.com -wjasset.com -wjbb.com -wjbk.site -wjceo.com -wjdaily.com -wjdhcms.com -wjdiy.com -wjdiy.net -wjgslb.com -wjhouses.com -wjhtxx.com -wjiaxing.com -wjika.com -wjin.cc -wjinmiao.com -wjjfjt.com -wjkwl.com -wjlkj.com -wjlxmedia.com -wjrcb.com -wjshw.com -wjsou.com -wjsw.com -wjunjie.com -wjwux2.com -wjx.com -wjxcdn.com -wjyanghu.com -wjyh.com -wjyt-china.org -wjyw.com -wjz0098.me -wjzj.vip -wk-foryou.com -wk007.com -wk2.com -wk78.com -wkai.cc -wkanx.com -wkbins.com -wkcmall.com -wkderp.com -wkdty.com -wkecn.com -wkepu.com -wkhub.com -wkimg.com -wklken.me -wklm2018.com -wkmic.com -wkread.com -wksc.com -wkshipark.com -wkzf.com -wkzuche.com -wl.dlservice.microsoft.com -wl369.com -wlanadmin.com -wlanbanlv.com -wlanwifi.net -wlbaike.com -wlbqczk.vip -wlcbnews.com -wlcbw.com -wlcxx.com -wld5.com -wldsb.com -wleye.com -wlhcd.com -wlim.pro -wlinfor.com -wljy8.com -wljyyjy.com -wlkgo.com -wlkst.com -wlmq.com -wlmqgjj.com -wlmqwb.com -wlnh.net -wlphp.com -wlqtpolytheatre.com -wlread.com -wlrjy.com -wlsgjslgy.com -wlshw.com -wlski.com -wlsrenzaocaoping.com -wlstock.com -wlsvt.com -wltieyaoban.com -wlxit.com -wlxmall.com -wlxww.com -wlyfw.com -wlyjbl.com -wlyscl.com -wlzni.com -wlzp.vip -wlzy.tv -wm-imotor.com -wm-motor.com -wm090.com -wm18.com -wmc-bj.net -wmcloud.com -wmcn.com -wmedias.com -wmiao.com -wmiyx.com -wmjk.net -wmjrc.com -wmjygg.net -wmjyqd.net -wmjyszba.com -wmk0099.xyz -wmljw.com -wmlunwen.com -wmnetwork.cc -wmota.htcsense.com -wmp169.com -wmphp.com -wmpic.me -wmpvp.com -wmpyol.com -wms100.com -wmssedu.com -wmsub.com -wmton.com -wmtp.net -wmtxt.com -wmupd.com -wmvideo.com -wmxxgy.com -wmxxgz.com -wmxxwh.com -wmxxxj.com -wmy-ad.com -wmzhe.com -wn1998.com -wn3331.com -wn51.com -wn789.com -wnacg.xyz -wnark.com -wnbsq.com -wndhw.com -wndlkj.com -wnform.com -wnhuifu.com -wniecm.com -wnkj88.com -wnlbs.com -wnlpromain.com -wnlproyunying.com -wnlprozhanxing.com -wnlprozijia.com -wnmqchwl.com -wnn8.com -wnplayer.net -wnrb.net -wns1191.com -wnsqzonebk.com -wnsr391.com -wnssedu.com -wntool.com -wnwb.com -wnzc.com -wnzhuishu.com -wnzy.net -wo-xa.com -wo113.net -wo116114.com -wo123.com -wo170.com -wo186.tv -wo188.win -wo1990.com -wo685.com -wo81.com -wo99.net -woa.com -woaap.com -woaide.com -woaidu.org -woaifanyi.com -woaihuahua.com -woailuo.com -woaipj.com -woaipu.com -woair.com -woaishouban.com -woaixiao.com -woaizuji.com -woaoo.net -wobenben.com -wobiquge.com -wobocn.com -woc88.com -wocai.de -wocaoseo.net -wochacha.com -wochaw.com -wodai.com -wodavip.com -wodcloud.com -wode.im -wode20.com -wodeabc.com -wodecrowd.com -wodedagong.com -wodefanwen.com -wodemeitu.com -wodeoffice.com -wodeshebao.com -wodiancan.net -wodidashi.com -wodingche.com -wodjob.com -wodocx.com -wofang.com -wofang.net -wofangwang.com -wofficebox.com -wofjhs.com -wogame.net -wogoo.com -wohenizaiyiqi.com -wohenok.com -wohxx.com -woi3d.com -woiyu.com -wojiacloud.com -wojiaoni.com -wojilu.com -wok.com -wokeji.com -woko.cc -wolai.com -wolaidai.com -woledy.com -wolegou.net -wolezhibo.com -wolf.cc -wolfcstech.com -wolfgo.com -wolfogre.com -wolife.com -wolighting.com -woliuda.com -wolonge.com -wolongge.com -wolongyin.com -wolongyoule.com -wolongzy.net -wolwo.ltd -wolwobiotech.com -womai.com -womaiapp.com -woman91.com -womeime.com -women-heart.com -womenaiyuedu.com -womenjie.com -wonder.wiki -wondercv.com -wonderful-pr.com -wonderfulsz.com -wonderjk.com -wonderkun.cc -wondermars.com -wondermole.com -wonderscloud.com -wondersgroup.com -wondershare.cc -wondershare.com -wondershare.net -wondersmemory.com -wonderstar027.com -wonei.com -wonerqu.com -wongcw.com -wonggang.com -wongpeace.com -woniu.com -woniu8.com -woniubaoxian.com -woniucloud.com -woniutrip.com -woniuwl.com -wonmay.com -wonmay.net -wonote.com -wonpearl.com -wonplug.net -wonter.net -wonxun.net -woo.im -wooaii.com -woocg.com -wooclouds.com -wood168.com -wood168.net -woodbunny.com -wooddb.com -woodnn.com -wooee.net -wooffice.net -woola.net -wooolab.com -wooqx.com -woordee.com -wooshoes.com -woosmart.com -wooxhome.com -wooyun.org -woozooo.com -wopaiyi.com -wopaper.com -wopaw.com -wopeng.net -wopus.org -woqidege.com -woqifoundation.com -woqu.com -word666.com -wordlm.com -wordpress.la -wordpresshy.com -wordscan.net -workchat.com -workec.com -workehr.com -workerman.net -worklaw.vip -workpcb.com -worksgz.com -worksoho.com -worktile.com -worktilemail.com -workyun.com -world-pass.net -world-trade.org -world68.com -worldcps.com -worldgoodvoices.com -worldh5.com -worldhello.net -worldinout.com -worldlv.com -worldmall365.com -worldmr.net -worldmsports.com -worldofai.com -worldpathclinic.com -worldpowerliftingchina.com -worlduc.com -worldwarner.com -worldwayhk.com -worldwu.com -wosai-inc.com -wosaimg.com -woshao.com -woshipm.com -woshiqian.com -woshitv.com -woshizz.com -woshuo123.com -wosign.com -wosigndoc.com -woskj2.com -wosn.net -woso100.com -wosouyun.com -wotobang.com -wotougao.com -wotrus.com -wotucdn.com -wotula.com -wouju.com -wow-classic.com -wowant.com -wowar.com -wowcat.net -wowchina.com -wowenda.com -wowforex.com -wowodai.com -wowoit.com -wowoohr.com -wowops.com -wowoqq.com -wowoshijie.com -wowotech.net -wowotuan.com -wowoyoo.com -wowoyou.com -wowqu.cc -wowsai.com -wowys.com -woxian.com -woxiaoyun.com -woxihuan.com -woxiu.com -woxuexue.com -woxuyuan.com -woyao998.com -woyaobaoliang.com -woyaofanyi.com -woyaogexing.com -woyaoqiudai.com -woyaosouti.com -woyaozhan.com -woying.com -woyoo.com -woyouche.com -woyouquan.net -wozaijia.com -wozhua.mobi -wozhuan.com -wozhuye.com -woziku.com -wp-china-yes.net -wp-h.com -wp10.cc -wpan123.com -wpceo.com -wpchina.org -wpcnzz.com -wpdaxue.com -wpengapp.com -wper.com -wpgdadatong.com -wpgdadawant.com -wphonelife.com -wphun.com -wping.org -wpjam.com -wpk8.com -wplat.com -wpmee.com -wpmtp.com -wporder.com -wps-office.net -wpscdn.com -wpsdns.com -wpsep.com -wpsgo.com -wpsmail.net -wpsoffice.com -wptao.com -wptrn.com -wpweixin.com -wpxap.com -wpyou.com -wpzhiku.com -wq96f9.com -wqbook.com -wqc.so -wqchat.com -wqcms.com -wqdian.com -wqdian.net -wqetqi.vip -wqetrip.com -wqgp.com -wqhunqing.com -wqiis.com -wqingjian.com -wqketang.com -wqlin.com -wqrlink.tech -wqshui.com -wqxuetang.com -wqyunpan.com -wqzx.net -wrating.com -wrcdn.com -wrfou.com -write-bug.com -writebp.com -wrjzj.com -wrkdih.com -wrltxt.com -wrmjk.com -wrpotter.com -wrsa.net -wrsaea.com -wrtnode.cc -wrtnode.com -wrtsz.com -wrx319.com -ws-dla.com -ws.ksmobile.net -wsaf.net -wsbuluo.com -wsbz008.com -wsc-expo.com -wscdns.com -wscdns.info -wscdns.org -wscloudcdn.com -wscloudcdn.org -wsclouddns.com -wscloudsec.com -wscont1.apps.microsoft.com -wscont2.apps.microsoft.com -wscrm.net -wscso.com -wscstrace.com -wscvdns.com -wscxy.com -wsdcasa.com -wsdccq.com -wsdvs.com -wsdvs.info -wsdvs.org -wse.me -wsecar.com -wseen.com -wselearning.com -wselearning.net -wsfdl.com -wsfdn.com -wsfff.com -wsfnk.com -wsfsy.com -wsgjp.com -wsglb0.com -wsglb0.info -wsglb0.org -wsglw.com -wsgxsp.com -wshang.com -wshangw.net -wshenm.com -wshili.com -wshost.cc -wshoto.com -wshtgame.com -wshttpdns.com -wsisp.com -wsisp.net -wsj186.com -wslcode.com -wslmf.com -wsloan.com -wsltt.com -wsmaoyi.com -wsmaoyi.net -wsonh.com -wsoso.com -wsound.cc -wsoversea.info -wsq.cool -wsqejt.com -wsry18.xyz -wsssec.com -wstx.com -wsview.com -wswebcdn.com -wswebcdn.info -wswebcdn.org -wswebpic.com -wswebpic.info -wswebpic.org -wsxa.com -wsxc.me -wsxcme.com -wsxddg.com -wsy7.com -wsyyxz.com -wszwh.org -wt-px.com -wt168.com -wt8.com -wtaluo.com -wtango.com -wtaovip.com -wtapi.com -wtbds.com -wtdex.com -wtdlq.com -wtdms.com -wting.info -wtmmn.com -wtn5.com -wtobag.com -wtoip.com -wtojob.com -wtoutiao.com -wtown.com -wts999.com -wtsimg.com -wtszx.com -wttms.com -wtwvision.com -wtxcdn.com -wtzw.com -wu-mart.com -wu-mi.com -wu35.com -wu37.com -wu7zhi.com -wuage.com -wuaiso.com -wubaiyi.com -wubaiyi.net -wubazx.online -wubiba.com -wubisheng.net -wubizi.net -wubizigen.net -wubolive.com -wubx.net -wucaiabc.com -wuchajian.com -wuchenxu.com -wuda-website.com -wudage.com -wudang.cc -wudangquan.net -wudangshan.com -wudao.com -wudaotv.com -wudku.com -wudusw.com -wueasy.com -wufafuwu.com -wufangbo.com -wufangzhai.com -wufazhuce.com -wufuba.com -wufun.net -wuguiyunwei.com -wuguoren.com -wuguyufen.com -wugx.net -wuhan-guide.com -wuhan-tour.net -wuhan-travel.com -wuhan.com -wuhan163.com -wuhananyu.com -wuhanart.com -wuhanauto.com -wuhanbaituo.com -wuhanbus.com -wuhancityofdesign.com -wuhandazhaxie.com -wuhaneca.org -wuhanev.com -wuhanfuke120.com -wuhanfukeyy.com -wuhanhengyi.com -wuhanins.com -wuhanjiaojing.com -wuhanjingce.com -wuhankb.com -wuhanly.com -wuhanmarathon.org -wuhanmeigao.com -wuhanmetro.com -wuhanopen.org -wuhanparking.com -wuhanpe.com -wuhanpep.com -wuhanport.com -wuhanrt.com -wuhanrx.com -wuhansailingclub.com -wuhantest.com -wuhantianqi114.com -wuhantianrun.com -wuhantskj.com -wuhanunion.com -wuhanxingfuwan.com -wuhanxyz.com -wuhanyidu.com -wuhanzdq.com -wuhanzhongye.com -wuhao.me -wuhongsheng.com -wuhouhaodian.com -wuhu.cc -wuhuashe.com -wuhubtv.com -wuhusanlian.com -wuhushengwei.com -wui5.com -wuji.com -wujiangtong.com -wujiayi.vip -wujiecaifu.com -wujiehd.com -wujiehuyu.com -wujiexiang.com -wujiexueyuan.com -wujiit.com -wujinimg.com -wujixiaoshuo.com -wujiyou.com -wukong.com -wukong.la -wukongapi.com -wukongchou995.com -wukongkf.com -wukonglicai.com -wukongphp.com -wukongrom.com -wukongshuo.com -wukongtui.com -wukongtv.com -wukongwenda.com -wukuiwang.com -wukur.com -wukypay.com -wul.ai -wulannews.com -wuliannanjing.com -wuliaoo.com -wuliaosi.com -wuliapi.com -wulicdn.com -wuliujia2018.com -wulong365.com -wulvxing.com -wumart.com -wumeishebei.com -wumii.com -wumii.tv -wuming.com -wuqing.cc -wuqiong.info -wuqishike.com -wurenjifanzhi.com -wuruihong.com -wuruo8.com -wuscn.com -wuse.com -wusen.net -wuseng.com -wuseng.net -wuseyun.com -wushang.com -wushangplaza.com -wushen.com -wushuangol.com -wushuangtech.com -wushuhenan.com -wusiwei.com -wusunjiance.net -wusuobuneng.com -wuta-cam.com -wutaishanfojiao.com -wutanyuhuatan.com -wutep.com -wutianqi.com -wutnews.net -wutongguo.com -wutongshanxia.com -wutongtec.com -wutongwan.org -wutongxiang.cc -wutos.com -wutui.pro -wutuojia.com -wuuxiang.com -wuweijob.com -wuweiyou.com -wuwenjun.net -wuwenliang.net -wuwii.com -wuwm-aprg.org -wuxi.com -wuxiairport.com -wuxiamh.com -wuxiangcc.com -wuxiangxing.com -wuxianhaibao.com -wuxianlin.com -wuxiantu.com -wuxiaodi.com -wuxiatools.com -wuxibus.com -wuxijy.com -wuximarathon.com -wuximeidi.com -wuxin.info -wuxinban.com -wuxiqiangheng.com -wuxiwang.net -wuxu92.com -wuyang-honda.com -wuyangplatform.com -wuyazi.com -wuyecao.net -wuyehr.com -wuyida.com -wuyishan.net -wuyou.com -wuyou.net -wuyoufang.com -wuyouhui.net -wuyousy.com -wuys.com -wuyuan.cc -wuyublog.com -wuyueit.com -wuyukang.com -wuyumin.com -wuyuncdn.com -wuzhaiba.com -wuzhenfestival.com -wuzhenpay.com -wuzhenwic.org -wuzhicms.com -wuzhiwei.net -wuzhouqianzheng.com -wuzhuiso.com -wuziya.com -wuzongping.com -wvshare.com -ww2bbs.net -wwc-blog.com -wwe008.com -wwenglish.com -wwenglish.org -wwfchina.org -wwggw.com -wwjia.com -wwleww.com -wwmhdq.com -www-05.ibm.com -www-123490.com -www-175345.com -www-4620.com -www-63608.com -www-api.ibm.com -www-google-analytics.l.google.com -www-googletagmanager.l.google.com -www.adobe.com -www.agoda.com -www.akamai.com -www.amd.com -www.analog.com -www.apple.com -www.apple.com.edgekey.net -www.apple.com.edgekey.net.globalredir.akadns.net -www.bing.com -www.cc -www.cdnetworks.com -www.cg -www.com.my -www.dell-brand.com -www.dell.com -www.dji.com -www.djivideos.com -www.ericsson.com -www.globalsign.com -www.gstatic.com -www.htc.com -www.htcsense.com -www.kaspersky.com -www.linkedin.com -www.microsoft.com -www.nike.com -www.pandora.net -www.redhat.com -www.samsung.com -www.st.com -www.sulwhasoo.com -www.thinkpad.com -www.tzoo-img.com -www.viveport.com -www.volvocars.com -www045789.com -www1.djicdn.com -www2.djicdn.com -www2011india.com -www3.djicdn.com -www37430.com -www4.djicdn.com -www48-365365.com -www5.djicdn.com -www78966.cc -www8.hp.com -www81854.com -wwwatch.in -wwwbuild.net -wwwer.net -wwwic.net -wwwimages.adobe.com -wwwimages2.adobe.com -wwwku.com -wwwwww.vip -wwwwwwwwww.com -wwxcl.com -wx-data.com -wx-youyan.net -wx.com -wx135.com -wx16999.com -wx42.com -wx6.org -wx8s.com -wx939.com -wxagame.com -wxang.com -wxaokai.com -wxapp-union.com -wxappclub.com -wxatech.com -wxavu.com -wxb.com -wxbady.com -wxbdfm.com -wxblockchain.com -wxbm04.com -wxbrandway.com -wxbsgc.com -wxbxkx.com -wxc6115.com -wxcha.com -wxcsgd.com -wxdgjx.com -wxdh001.com -wxdspt.com -wxeditor.com -wxfenxiao.com -wxfls.net -wxfsgj.com -wxgamemini.com -wxgrcpa.com -wxguan.com -wxhand.com -wxhbts.com -wxhon.com -wxhouse.com -wxhu.net -wxhudong.com -wxiao.net -wxiat.com -wxjx123.com -wxlagame.com -wxlongre.com -wxmama.com -wxmcgz.com -wxmetro.net -wxmolegames.com -wxmovie.com -wxnacy.com -wxngh.com -wxnmh.com -wxp114.com -wxphp.com -wxr999.com -wxrb.com -wxreallink.com -wxrrd.com -wxscreen.com -wxsell.com -wxshake.com -wxsky.net -wxsteed.com -wxsyedu.net -wxsywh.com -wxt2020.com -wxthe.com -wxtj10086.com -wxtpb.com -wxuse.com -wxw120.com -wxwzt.com -wxxnhdkj.com -wxy1314.com -wxyxrc.com -wxzzz.com -wy000.com -wy100.com -wy119.com -wy182000.com -wy213.com -wy28.com -wy2sf.com -wyaoqing.com -wyaq.com -wyb168.com -wybbao.com -wybgs.com -wycanyin.com -wycntv.com -wydbw.com -wydljx.com -wydns.com -wyduihua.com -wyh138.com -wying360.com -wyins.net -wykefu.com -wykw.com -wykz.com -wylws.com -wymp4.net -wymp46.com -wyn88.com -wyptk.com -wypxj.com -wyq9.com -wyr.me -wys.net -wysaid.org -wysap.com -wysfgc.com -wysls.com -wysww.vip -wytfsp.com -wytx.net -wytype.com -wyuetec.com -wywy6.com -wywyx.com -wyx365.com -wyxbc.com -wyydsb.xin -wyzc.com -wyzdg.com -wyzhifu.com -wyzlvyou.com -wyzxsd.com -wyzxwk.com -wz01.com -wz120.cc -wz132.com -wz16.net -wz5.com -wzaobao.com -wzcheshi.com -wzciming.com -wzdai.com -wzdjy.com -wzdress.com -wzdsb.net -wzexe.com -wzfg.com -wzfou.com -wzfw.ltd -wzhan.net -wzhealth.com -wzhekou.com -wzhouhui.com -wzhouhui.net -wzhust.com -wzhxlx.com -wzijia.com -wzime.com -wzits.com -wzj9.com -wzjmr.com -wzjxyq.com -wzkouqiang.cc -wzksw.com -wzktys.com -wzlscf.com -wzlt8.com -wzms.com -wzplc.com -wzpo.net -wzpod.com -wzrhjr.com -wzright.com -wzsee.com -wzsky.net -wzstationery.com -wztf121.com -wzwmw.com -wzwqs.com -wzyestar.com -wzyun.net -wzz180809.net -wzz1809.com -wzzww.com -x--w.com -x-bows.com -x-cti.org -x-jishu.com -x-medex.com -x-mol.com -x-plans.com -x0750.com -x0769.com -x118.net -x12plus.com -x158.tv -x1997.net -x1n.xin -x23qb.com -x23us.cc -x23us.me -x23us.us -x23wxw.com -x3366.com -x3china.com -x3cn.com -x431.com -x5dj.com -x64pro.com -x6d.com -x6kj.com -x6tuan.com -x6x8.com -x72y.com -x7sy.com -x81zw.com -x821.com -x86android.com -xa-online.com -xa.com -xa189.net -xa30zx.com -xa9t.com -xaahjy.com -xabbp.com -xabbs.com -xabcdns.com -xabcloud.com -xacbank.com -xacnnic.com -xacyhj.com -xadamai.com -xadiannao.com -xaecong.com -xafc.com -xaffp.com -xafpz.com -xafzjy.com -xagxz.com -xahhp.com -xahkzc.com -xahrly.com -xahunter.com -xaidc.com -xaifin.com -xaigame.com -xainjo.com -xaixs.org -xajjk.com -xajjwy.com -xajob.com -xajr.com -xalanq.com -xalawyer.net -xalhar.net -xalhlf.com -xamama.net -xamjx.com -xampp.cc -xanahotelle.com -xanbhx.com -xanet110.com -xank120.com -xany6.com -xaoji.com -xaonline.com -xaoyao.com -xapcn.com -xaqdrs.com -xaqsl.com -xaredian.com -xargin.com -xarxrljt.com -xaseastar.com -xasff.com -xashangwang.com -xasimonds.com -xasixiongdi.com -xaskm.com -xasqw.com -xasrc.com -xaszjf.com -xatao029.com -xatielu.com -xatongsheng.net -xatvs.com -xatyaviation.com -xatyds.com -xatyyx.com -xatzj.com -xauat-hqc.com -xaudiopro.com -xavua.com -xawb.com -xawbb.com -xawdz.com -xawhz.com -xaxing05.com -xaxinghuo.com -xaybh.com -xayestar.com -xazcit.com -xaztdz.com -xazzg.com -xazzp.com -xazzs.com -xb.dlservice.microsoft.com -xb100.net -xb2s.com -xb5.cc -xbaixing.com -xbaofun.com -xbaquge.com -xbase.cloud -xbatu.com -xbauto.com -xbbei.net -xbceo.com -xbdym.com -xbequge.com -xbeta.info -xbext.com -xbfnet.com -xbfqw.com -xbfzb.com -xbhb.net -xbhub.com -xbhy.com -xbhz.net -xbiao.com -xbidc.com -xbingoz.com -xbiquge.cc -xbiquge.com -xbiquge.la -xbiquge6.com -xbiqugew.com -xbirder.com -xbjianzhan.com -xblds.com -xblyw.com -xbmiaomu.com -xbniao.com -xbongbong.com -xbooklist.com -xbptc.com -xbpz9.com -xbriyu.com -xbrl-cn.org -xbrother.com -xbspace.com -xbsura.com -xbwbh.com -xbwebyun.com -xbxgame.com -xbxwx.org -xbxxb.com -xbxxz.com -xc-fc.com -xc123.net -xc829.com -xc940.com -xcabc.com -xcao.win -xcape.cc -xcar.com -xcarimg.com -xcb-family.com -xcbank.com -xcbcyjm.com -xcczgm.com -xcdesign.net -xcexe.com -xcfee.com -xcfunds.com -xcgjj.com -xcgogo.club -xcgogo.site -xcgp.com -xcgui.com -xchjw.org -xchlxx.com -xchmai.com -xchrc.com -xchuandai.com -xchuxing.com -xcj.com -xcj.pub -xcjd.net -xckszx.com -xclient.info -xcloudbase.com -xcmad.com -xcmg.com -xcmgmall.com -xcmh.cc -xcmh.com -xcn457.com -xcnchinese.com -xcnte.com -xcode.me -xcoder.in -xcodest.me -xcommon.com -xcoodir.com -xcos.cc -xcot.com -xcpapa.site -xcpapa.xyz -xcrxykl.com -xcshaifen.com -xcsinsignia.com -xcstuido.com -xcsyxx.net -xctmr.com -xctsw.com -xcvgame.cc -xcvmbyte.com -xcvxcv.space -xcx-x.com -xcxd-inc.com -xcxs222.com -xcxs520.com -xcxwo.com -xcxx28.com -xcxzl.com -xcy8.com -xcyg.net -xcyo.com -xczzs.com -xd-game.com -xd-tech.com -xd-world.com -xd.com -xd0.com -xd57.com -xdapp.com -xdbcb8.com -xdc.at -xdcdn.com -xdcdn.net -xddhy.com -xddpay.com -xddxs.cc -xddxx102.com -xde.com -xde6.net -xdfckjz.com -xdfkt.com -xdfpr.com -xdgalaxy.com -xdh0808.com -xdhbs.com -xdhcn.com -xdj-sz.com -xdja.com -xdjc.org -xdju.com -xdjy369.com -xdkb.net -xdkcw.com -xdkjchina.com -xdkjjy.com -xdkjpx.com -xdlaa.xyz -xdmnyy.com -xdmssp.com -xdnice.com -xdnote.com -xdnphb.com -xdocin.com -xdoor.cc -xdplt.com -xdpvp.com -xdressy.com -xdrig.com -xds04.com -xdsipo.com -xdtos.com -xduoo.com -xduph.com -xdusz.com -xdwan.com -xdwyx.com -xdxdsz.com -xdxmwang.com -xdyqw.com -xdzdzl.com -xedaojia.com -xedaojia.net -xeeee.net -xeenho.com -xeeok.com -xefan.com -xege.org -xehedu.com -xeknow.com -xeltek-cn.com -xelz.info -xemean.net -xen0n.name -xender.com -xenium.mobi -xenvpser.com -xerlang.com -xesapp.com -xescdn.com -xesdns.com -xesee.com -xesimg.com -xesv5.com -xetimes.com -xetsg.com -xevd.co -xeylon.com -xf-world.org -xf-yun.com -xf.com -xf0797.com -xf09.net -xf119.xin -xf120.com -xf1233.com -xf1433.com -xf24ms.com -xf3z.com -xf4hs.com -xf5z.com -xfabs.com -xfannix.com -xfb315.com -xfc888.com -xfcgs.com -xfconnect.com -xfdown.com -xfeng.me -xffcol.com -xfgjj.com -xfguo.org -xfhx.com -xfinfr.com -xfisher.com -xfisp.com -xfjw.net -xfkou.com -xfliusheng.com -xfnano.com -xfocus.net -xfocus.org -xforceplus.com -xfpass.com -xfplay.com -xfplay.tv -xfsb119.com -xfsd.com -xfsub.com -xft123.com -xftclub.com -xfun233.com -xfwi.com -xfxb.net -xfyousheng.com -xfyun.com -xfzhsf.com -xfztc.com -xfzyun.com -xgamevip.com -xgantt.net -xgcs618.com -xgcsczyc.com -xgcsyg.com -xgd666.com -xgdfz.com -xgdown.com -xgdq.com -xgfz.net -xggjj.com -xghylt.com -xgimi.com -xgj-info.com -xgjxjy.com -xgkwx.com -xglpa.com -xgmeidiya.com -xgo.cc -xgqq.com -xgres.com -xgsdk.com -xgslb.net -xgt2014.com -xgv5.com -xgwx.net -xgxedu.com -xgz.cc -xgzdhj.com -xgzx.org -xh456.com -xhay1122.com -xhbaihehang.com -xhbhr.com -xhblog.com -xhboke.com -xhby.net -xhbycm.net -xhcjtv.com -xhclub.net -xhcpas.com -xhd.org -xhdollar.com -xheditor.com -xhedu.net -xhengshui.com -xhg.com -xhgame.com -xhgm100.com -xhgongsi.com -xhhd6.com -xhhdd.cc -xhhfw.com -xhidc.com -xhj.com -xhjingling.com -xhkt.tv -xhlaowu.com -xhlgfsc.com -xhlyjlb.com -xhma.com -xhmzgbj.com -xhn888.com -xhnews.net -xhostserver.com -xhpfw.com -xhpiano.com -xhqqt.com -xhscdn.com -xhsd.com -xhsfw.com -xhslink.com -xhspx.com -xhsyww.com -xht.com.hk -xhtd291.com -xhuojia.com -xhup.club -xhwhouse.com -xhxa9.com -xhxsw.com -xhxswz.com -xhxw.com -xhy.com -xhy998.com -xhyd.com -xhytd.com -xhzmjs.com -xi-soft.com -xi5jie.com -xi9p.com -xia.me -xia1ge.com -xiaa.net -xiabb.club -xiabingbao.com -xiabor.com -xiabu.com -xiacai.com -xiacaipiao.com -xiachufang.com -xiada.net -xiadele.com -xiadts.com -xiadu.com -xiagaoqing.com -xiagepian.com -xiakeol.com -xialaile.com -xialatong.com -xiald.com -xialingying.cc -xialv.com -xiamag.com -xiamai.net -xiamenair.com -xiamentianqi114.com -xiami.com -xiami.net -xiami77.com -xiamiaopai.com -xiamoyun.com -xiamp4.com -xian-tourism.com -xianba.net -xianbai.me -xianbao.net -xianbdj.com -xianbense.com -xianbey.com -xianchihuo.net -xiancn.com -xiandaiyuwen.com -xiandanjia.com -xiandaohu.net -xianfae.com -xianfeng.net -xianfengex.com -xianfengsg.com -xiang-le.com -xiang5.com -xiang578.com -xiangaiwang.com -xiangange.com -xianganquan.com -xianganyu.com -xiangbinjun.com -xiangbinmeigui.com -xiangbojiubo.com -xiangcaozhaopin.com -xiangcunxiaoshuo.com -xiangdang.net -xiangfan.org -xiangguo.com -xiangguohe.com -xiangha.com -xianghui8.com -xianghunet.com -xianghus.com -xiangkanzs.com -xiangkesi.com -xiangley.com -xianglute.com -xiangmaita.com -xiangmaojx.com -xiangmu.com -xiangni.com -xiangpeach.com -xiangpi.com -xiangqianpos.com -xiangqin7.com -xiangqinplus.com -xiangqiushi.com -xiangqu.com -xiangrikui.co -xiangrikui.com -xiangshang360.com -xiangshangban.com -xiangshanpark.com -xiangshe.com -xiangshengbao.com -xiangshi.cc -xiangshi123.com -xiangshu.net -xiangshuiping.com -xiangsidi.com -xiangsw.com -xiangtaole.com -xiangtatech.com -xiangtuan.xyz -xianguo.com -xianguomall.com -xiangw.com -xiangwangdesh.com -xiangwushuo.com -xiangyang.net -xiangyiai.com -xiangyujiankang.com -xiangyukj.com -xiangyun.so -xiangyunseo.com -xiangzhan.com -xiangzhiren.com -xiangzhuyuan.com -xianjian10.com -xianjiaosuo.com -xianjichina.com -xianjj.com -xiankan.com -xiankankan.com -xianlaigame.com -xianlaihy.com -xianlife.com -xianlu0605.com -xianmin.org -xianms.com -xiannanyou.com -xiannvtu.com -xianpp.com -xianqiao.wang -xianruan.com -xianshiqiba.com -xianshu.com -xianshua.net -xianshuabao.com -xianshufang.com -xiantao.com -xianwangs.cc -xianxiadao.com -xianxiadao.net -xianyang888.com -xianyin.net -xianyuange.com -xianyugame.com -xianyugouwu.com -xianyuso.com -xianyuwang.com -xianyuyouxi.com -xianzhaiwang.com -xianzhanget.com -xianzhi.net -xianzhongwang.com -xiao-an.com -xiao-bo.com -xiao-new.com -xiao-sports.com -xiao6.tv -xiao84.com -xiao89.com -xiaoa.name -xiaobai.com -xiaobaibk.com -xiaobaipan.com -xiaobaishiji.com -xiaobaishixi.com -xiaobaiss.com -xiaobaiupin.com -xiaobaivr.com -xiaobaixitong.com -xiaobangbaoxian.com -xiaobao360.com -xiaobao8.com -xiaobaodt.com -xiaobaoonline.com -xiaobaostudio.com -xiaobd.net -xiaobenzi.com -xiaobingxitong.com -xiaobu121.com -xiaocaoo.com -xiaocaoyun.com -xiaocen.com -xiaoche001.com -xiaoche5.com -xiaochengxucms.com -xiaochiwang.org -xiaochuan010.com -xiaocifang.com -xiaocms.com -xiaocong.tv -xiaodaka.net -xiaodanyang.com -xiaodao.la -xiaodao360.com -xiaodaotv.com -xiaodaozhi.com -xiaodengta.com -xiaodengvip.com -xiaodian.com -xiaodian.in -xiaodian.so -xiaodianpu.com -xiaodianweb.com -xiaodigu.com -xiaodigufz.com -xiaodoubi.com -xiaodoushebao.com -xiaodouzhuan.net -xiaoduoai.com -xiaoduseo.com -xiaodutv.com -xiaody.com -xiaoe-tech.com -xiaoeknow.com -xiaoenai.com -xiaoeryi.com -xiaofangdeng.com -xiaofantian.com -xiaofany.com -xiaofeng.org -xiaogan.com -xiaogj.com -xiaogouh5.com -xiaogr.com -xiaoguikuaipao.com -xiaoguosq.com -xiaoguowenhua.com -xiaogushi.com -xiaoh.me -xiaohansong.com -xiaohb.com -xiaohe-jiankang.com -xiaohe666.com -xiaohei.com -xiaoheima.com -xiaohongchun.com -xiaohongdian.wang -xiaohongshu.com -xiaohongshulvyou.com -xiaohuabaichu.com -xiaohuabuluo.com -xiaohuai.com -xiaohuangji.com -xiaohulu.com -xiaohuochai.cc -xiaohuochai.site -xiaohuwl.com -xiaoj.com -xiaoji.com -xiaoji001.com -xiaojian.site -xiaojianjian.net -xiaojiaoyar.com -xiaojiding.com -xiaojing360.com -xiaojiuwang.com -xiaojl.com -xiaojuchefu.com -xiaojudeng.com -xiaojukeji.com -xiaojun.org -xiaoka.tv -xiaokanba.com -xiaokanglongjiang.com -xiaokao.com -xiaokaxiu.com -xiaokcdn.com -xiaokcehui.com -xiaokeai.com -xiaokeduo.com -xiaokesoso.com -xiaokuihua.net -xiaokusha.com -xiaokyx.com -xiaolai.net -xiaolajiao.com -xiaolanben.com -xiaolantiao.com -xiaolee.net -xiaoliangkou.com -xiaoliebian.com -xiaoliketang.com -xiaolin.in -xiaolinsi.com -xiaolinwl.com -xiaolinyuan.com -xiaolist.com -xiaolixiaoxue.com -xiaolizhuli.com -xiaolu123.com -xiaoluboke.com -xiaoluhaohuo.com -xiaoluyouxuan.com -xiaoma-school.com -xiaoma.com -xiaoma.net -xiaoma.wang -xiaomachuxing.com -xiaomagaojian.com -xiaomaigongkao.com -xiaomaiketang.com -xiaomantu.com -xiaomaomv.com -xiaomaowan.com -xiaomape.com -xiaomashijia.com -xiaomastack.com -xiaomav.com -xiaomaxitong.com -xiaomayi.co -xiaomayi88.com -xiaomei.cc -xiaomeiti.com -xiaomeme.com -xiaomeng1235.com -xiaomi.com -xiaomi.hk -xiaomi.net -xiaomi.tw -xiaomiaozai.com -xiaomicp.com -xiaominet.com -xiaominfo.com -xiaoming.me -xiaomingming.org -xiaomiqiu.com -xiaomiquan.com -xiaomishu.com -xiaomiwujiecao.com -xiaomiyoupin.com -xiaomlove.com -xiaomor.com -xiaomoyao.com -xiaomuji.info -xiaomy.net -xiaomyc.com -xiaonaodai.com -xiaonei.com -xiaoniba.com -xiaoniu66.com -xiaoniu88.com -xiaoniuapp.com -xiaoniuben.com -xiaoniudunkj.com -xiaononfu.com -xiaopan.cc -xiaopangyu.com -xiaopena.com -xiaopeng.com -xiaophy.com -xiaopi.com -xiaopinw.com -xiaopiu.com -xiaoqiandao.com -xiaoqiangge.com -xiaoqiaomm.com -xiaoqijj.com -xiaoqingtou.com -xiaoqinre.com -xiaoqiqiao.com -xiaoqugang.com -xiaoqukuaishou.com -xiaoquyijia.com -xiaorizi.me -xiaorui.cc -xiaoruibao.com -xiaoshe.tk -xiaoshengqi8.com -xiaoshengyiwang.com -xiaoshentui.com -xiaoshijie.com -xiaoshitou123.com -xiaoshituina.vip -xiaoshoubang.org -xiaoshouhudong.com -xiaoshoukuaifa.com -xiaoshouyi.com -xiaoshouzhi.com -xiaoshu168.com -xiaoshujiang.com -xiaoshukaihua.com -xiaoshuo.com -xiaoshuo1-sm.com -xiaoshuo2016.com -xiaoshuo520.com -xiaoshuo530.com -xiaoshuo570.com -xiaoshuoba.com -xiaoshuobi.cc -xiaoshuochen.com -xiaoshuodaquan.com -xiaoshuoli.com -xiaoshuoshu.org -xiaoshuotxt.com -xiaoshuoyd.com -xiaoshuozu.com -xiaoshuwu.vip -xiaoshuxiong.com -xiaositv.com -xiaoso.net -xiaoss.net -xiaot.com -xiaota.com -xiaotee.com -xiaoten.com -xiaotengyouxi.com -xiaotuzhan.com -xiaou2014.com -xiaouguanjia.com -xiaouqyfw.com -xiaoushuo.com -xiaowang.net -xiaowangshen.com -xiaowangyun.com -xiaowanzhou.net -xiaowazi.com -xiaoweigod.com -xiaoweirobot.com -xiaoweizhibo.com -xiaowiba.com -xiaowm.com -xiaoxiaapi.com -xiaoxiangbz.com -xiaoxiangxueyuan.com -xiaoxiangyoupin.com -xiaoxiansheng.com -xiaoxiao.com -xiaoxiaofang.club -xiaoxiaoketang.com -xiaoxiaomo.com -xiaoxiaotong.org -xiaoxiaozi.com -xiaoxichangliu.com -xiaoxicloud.com -xiaoxineye.com -xiaoxinrili.com -xiaoxintoutiao.com -xiaoxintuku.com -xiaoxiongmeishu.com -xiaoxiongyouhao.com -xiaoxue123.com -xiaoxuehelp.com -xiaoyantong.com -xiaoyaobi.com -xiaoyaoyou.com -xiaoyaoyou365.com -xiaoyatong.com -xiaoyayun.com -xiaoyeren.com -xiaoyewuliu.com -xiaoyi.com -xiaoyida.com -xiaoyida.net -xiaoying.co -xiaoying.com -xiaoying.tv -xiaoyiquan.com -xiaoyiwo.net -xiaoyouxi100.com -xiaoyouxiqun.com -xiaoyouzb.net -xiaoyu.com -xiaoyuanjiu.com -xiaoyuanzhao.com -xiaoyuanzhaopin.net -xiaoyuer.com -xiaoyulog.com -xiaoyun.com -xiaoyunquegroup.com -xiaoyusan.com -xiaoyusanchou.com -xiaoyuxitong.com -xiaoyuzhoufm.com -xiaoz.me -xiaoz123.com -xiaozaixiao.com -xiaozehuashi.com -xiaozhan.cc -xiaozhang365.com -xiaozhaolaila.com -xiaozhewz.com -xiaozhibaoxian.com -xiaozhibo.com -xiaozhishi.net -xiaozhiyun.com -xiaozhu.com -xiaozhu2.com -xiaozhua.com -xiaozhuanlan.com -xiaozhuseo.com -xiaozhustatic1.com -xiaozhustatic2.com -xiaozhustatic3.com -xiaozhuvideo.com -xiaozigame.com -xiaozuan8.com -xiaozujian.com -xiaozuowen.net -xiappt.com -xiaqunfeng.cc -xiarikui.com -xiarj.com -xiashu.app -xiataoseo.com -xiatou.com -xiawan8.com -xiawu.com -xiaxiab8.com -xiayige.org -xiayiqu.com -xiayx.com -xiazai.com -xiazai163.com -xiazaiba.com -xiazaibao2.com -xiazaicc.com -xiazaidb.com -xiazaidc.com -xiazaidown.com -xiazaiduo.com -xiazaijidi.com -xiazaima.com -xiazaisoft.com -xiazaiwx.com -xiazaiziti.com -xibaiwang.com -xibao100.com -xibeicanyin.com -xibeidev.com -xibojiaoyu.com -xibsteel.com -xibu168.com -xibulaobohui.com -xibutiyu.com -xicaijing.com -xicaishe.com -xice.wang -xichu.net -xichuangzhu.com -xici.com -xici.net -xicidaili.com -xicp.net -xidea-inc.com -xidesheng.com -xidian.cc -xidibuy.com -xidie.com -xidong.net -xidongv.com -xiduobaby.com -xiduoil.com -xie-jue-tui-xiao.com -xieat.com -xiebao18.com -xieboke.net -xiechao.org -xieche.net -xiecheng.com -xiechuangw.com -xiecuo.com -xiedaimala.com -xiefenxiang.com -xieheedu.com -xiehejx.com -xiehekjkf.com -xiejiahe.com -xiejianji.com -xiejiaxin.com -xiejing.com -xieliqun.com -xier.tech -xiesk.com -xieso.net -xietongbw.com -xietui.com -xiexiaoyuan.com -xiexiebang.com -xiexingcun.com -xiexingme.com -xieyangzhe.com -xieyinwang.com -xiezefan.me -xiezewen.com -xiezhenxian.net -xiezhenye.com -xiezhicehua.com -xieziqiu.net -xiezixiansheng.com -xiezuo100.com -xiezuocat.com -xifan.org -xifangw.com -xifenfei.com -xifenggroup.com -xifengjiuzhaoshang.com -xifengwangzhan.com -xifuquan.com -xifuwa.com -xigeweb.com -xigo.tv -xigua110.com -xigua66.com -xiguabook.com -xiguaimg.com -xiguaji.com -xiguaplayer.com -xiguavideo.net -xigushan.com -xigushan.net -xihachina.com -xihaiannews.com -xihawan8.com -xihuan.me -xihuanfang.com -xihuojie.com -xihusgh.com -xihustateguesthangzhou.com -xiimoon.com -xiji.com -xijiangtv.com -xijing01.com -xijucn.com -xikan.tv -xikii.com -xiladaili.com -xilaiping.com -xilexuan.com -xileyougame.com -xilidou.com -xilinglong.net -xilinjie.com -xilinsi.org -xilish.com -xilu.com -xilvlaw.com -xima.org -xima.tv -ximalaya.com -ximalayaos.com -ximeiapp.com -ximgs.net -ximiplay.com -ximiyouxi.com -ximizi.com -ximopanda.com -ximuw.com -xin.com -xin.xin -xin1234.com -xin3721.com -xin661.com -xinaigame.com -xinaitu.com -xinanidc.com -xinaoyun.com -xinbaby.com -xinbaicai.com -xinbalive.com -xinbaopos.com -xinbear.com -xinbqg.com -xincache.com -xincai.com -xincaiguan.com -xincailiao.com -xincainet.com -xincaitong.net -xincanshu.com -xinceyq.com -xincg.com -xincha.com -xinchacha.com -xinchangol.com -xinchao.com -xinchaoss.com -xinchaoyue.com -xinchego.com -xincheng.com -xinchengzhongbang.com -xincheping.com -xinchukj.com -xincmm.com -xinda22.com -xindaifu.com -xindemarinenews.com -xindexuexi.com -xindi02.site -xindie.net -xindingwealth.com -xindns.com -xindns.mobi -xindon.com -xindong.com -xinduihuan.com -xinduo.com -xinduoad.com -xinerdact.com -xineurope.com -xinfangsheng.com -xinfee.com -xinfei.com -xinfeijituan.com -xinfengxitong.net -xinfenlei.com -xinfu888.com -xinfushe.com -xing73.com -xingaiming.com -xingames.com -xingbangip.com -xingbo.tv -xingchen.com -xingchenjia.com -xingcheshixian.com -xingdaoo.com -xingdatrip.com -xingdi.me -xingdong.co -xingdongliu.com -xinge.com -xingfagroup.com -xingfudu.com -xingfufangdai.com -xingfulizhaofang.com -xingfunancun.com -xingfuu.com -xinggan.com -xinggan.net -xinghao8.xyz -xinghengedu.com -xinghuankj.com -xinghuiyl.com -xinghuo100.com -xinghuo365.com -xinghuogroup.com -xinghuoxiaoshuo.com -xingjuhe.com -xingkeduo.com -xingkong.com -xingkongmt.com -xingkoo.com -xingkuad.com -xinglai.com -xinglinpukang.com -xingmai58.com -xingmao.cc -xingmeihui.com -xingmima.com -xingming.com -xingming.net -xingpan.com -xingpin.com -xingqiu.tv -xingqu11.com -xingren.com -xingrongn.com -xingse.net -xingseapp.com -xingshangnet.com -xingshulin.com -xingshuo.net -xingtac.com -xingtai123.com -xingtan001.com -xingtangzp.com -xingtouzi.com -xingtu.com -xingumin.net -xingxing.com -xingxingmeiyu.com -xingyi.com -xingyigz.com -xingyongli.com -xingyoucai.com -xingyuanhuzhu.com -xingyuehuyu.com -xingyuhuwai.com -xingyunba.com -xingyunxc.com -xingyunxingqiu.wang -xingyusoft.net -xingyuyouxi.com -xingzhang.com -xingzhiedu.net -xingzhilian.net -xingzhiyue.com -xingzuo.com -xingzuo123.com -xingzuo8.com -xingzuo8090.com -xingzuoshu.com -xingzuowu.com -xinhaolian.com -xinhaoqi.net -xinhay.com -xinhexinli.com -xinhongru.com -xinhtz.com -xinhua-news.com -xinhua.org -xinhua08.com -xinhuaapp.com -xinhuacu.com -xinhuamm.net -xinhuanet.com -xinhuanet.ltd -xinhuaphoto.org -xinhuapo.com -xinhuaprs.com -xinhuapub.com -xinhuashe.org -xinhuasuye.com -xinhuatoupiao.com -xinhuawang.com -xinhuaxmt.com -xinhuayimin.com -xinhuazhiyun.com -xinhuipihua.com -xinhuoshuguan.com -xinhushang.org -xiniu.com -xiniu1688.com -xiniu3d.com -xiniugushi.com -xiniuyun.com -xiniuz.com -xinjiadiy.com -xinjiance.com -xinjianggou.com -xinjimo.com -xinjingks.com -xinjisuan.net -xinjizhou.com -xinjunshi.net -xinjunshicn.net -xinkamai.com -xinkb.org -xinkuai.com -xinle366.com -xinli001.cc -xinli001.com -xinli001wx.com -xinliangxiang.com -xinliceping.com -xinlifudao.com -xinlimaoyi.com -xinlinghuayuan.com -xinlingletu.com -xinliwanju.com -xinlixue525.com -xinluex.com -xinluobo.com -xinlvtu.com -xinm123.com -xinmanduo.com -xinmanyuan.com -xinmaopimao.com -xinmei6.com -xinmeihu.com -xinmima.com -xinmuedu.com -xinnet.com -xinniangjie.com -xinnianhua.com -xinnong.com -xinnuoqian.com -xinouhk.com -xinpianchang.com -xinpianyugao.com -xinpinget.com -xinpujie.com -xinpure.com -xinqiannv.com -xinqigu.com -xinqing.com -xinqingdou.cc -xinqingdou.com -xinqiyejia.com -xinqiys.com -xinqtech.com -xinquanedu.com -xinquji.com -xinran1016.com -xinranliu.me -xinray.net -xinrenxinshi.com -xinrong.com -xinrong88.com -xinrui-games.com -xinrui.biz -xinrz.com -xinsanbanbao.com -xinsdn.com -xinshangmeng.com -xinshangshangxin.com -xinshiba.com -xinshijuewp.com -xinshipu.com -xinshishen.com -xinshoucun.com -xinshouzhanzhang.com -xinshula.com -xinshulaile.com -xinshuru.com -xinsilu.com -xinstall.com -xinstatic.com -xinsui.net -xintaileju.com -xintaizhou.com -xintheme.com -xintian.org -xintiao100.com -xintiao80.com -xintiaoyouxi.com -xintongconference.com -xintuiwang.com -xintuofalv.com -xinwangcj.com -xinweiyun.com -xinwen365.com -xinwen520.net -xinwengao.net -xinwenlianbo.cc -xinwenlianbo.tv -xinwenlianbovip.com -xinwentoutiao.net -xinwo.com -xinxianghui.com -xinxianshilb.com -xinxiansk.com -xinxiaochina.com -xinxiaodian.com -xinxiaoqi.com -xinxifabu.net -xinxinapp.net -xinxindai.com -xinxing.org -xinxing100.com -xinxingdaoju.com -xinxingjiaocheng.com -xinxingly.com -xinxinhot.net -xinxinjoy.com -xinxinkeji168.com -xinxinshukong.com -xinxisea.com -xinxuezl.com -xinxunwang.com -xinyali.net -xinyan.com -xinyaoyao.com -xinyayk.com -xinyegang.com -xinyicms.com -xinyifu.net -xinyisemi.com -xinyitt.com -xinyo100.com -xinyongbuy.com -xinyongqingdao.com -xinyou.com -xinyour.com -xinyouw.org -xinyu19.com -xinyuefei.com -xinyueseo.com -xinyukj99.com -xinyunfuwu.com -xinyunji.com -xinyuwanju.com -xinyuwen.com -xinzaoxing.com -xinzengwj.net -xinzheng.cc -xinzhenkj.com -xinzhi.space -xionganzhuce.com -xiongdayq.com -xiongdong.com -xiongmao666.com -xiongmaojinku.com -xiongyin.com -xiongying.com -xiongzhangad.com -xipushuju.net -xipuu.com -xiqb.com -xiqihe.com -xiqingji.com -xiqinrc.com -xiqqq.com -xirang.com -xirenxuan.com -xirikm.net -xishanju.com -xishaoye.com -xishiqu.com -xishiwang.com -xishuai.com -xishuai.net -xishuiw.com -xisj.com -xisslvyou.com -xitao88.com -xitaoinfo.com -xitek.com -xitek.net -xitie.com -xitieba.com -xitmi.com -xitong-tech.com -xitong110.com -xitong520.com -xitong8.com -xitongbuluo.com -xitongcheng.cc -xitongcheng.com -xitongdaquan.net -xitonggho.com -xitonghe.com -xitonghuayuan.net -xitongjiaocheng.com -xitongku.cc -xitongle.com -xitongmen.com -xitongpe.com -xitongqingli.com -xitongtiandi.net -xitongtiankong.com -xitongtu.net -xitongwanjia.com -xitongxz.net -xitongzhijia.net -xitouwang.com -xitu.io -xituan.com -xituju.com -xiu.com -xiu8.com -xiuai.com -xiucai.com -xiuchuang.com -xiudodo.com -xiufaxing.com -xiugei.com -xiugu.com -xiuhome.com -xiuimg.com -xiujiadian.com -xiujukoo.com -xiulian.com -xiuluowang.com -xiulv.com -xiumb.com -xiumi.com -xiumi.us -xiumius.com -xiumucn.com -xiuna.com -xiunian.wang -xiuno.com -xiupin.com -xiushao.com -xiusheji.com -xiusheji.net -xiushuang.com -xiustatic.com -xiutuan.com -xiutv.com -xiuxiandou.com -xiuxiu.com -xiuzhan365.com -xiuzhanwang.com -xivcdn.com -xiwang56.com -xiwangchina.com -xiwangd.com -xiwanglife.com -xiwenquan.com -xiwnn.com -xiwuji.com -xixi520.com -xixiaoyou.com -xixiarc.com -xixibobo.com -xixiclothing.com -xixihd.com -xixijiji.com -xixik.com -xixik.net -xixin123.com -xixipan.com -xixiqiu.com -xixisys.com -xixiwg.com -xiyacs.com -xiyijiang.com -xiyin.life -xiyiqq.com -xiyogo.com -xiyoo.com -xiyou-g.com -xiyou360.net -xiyoucdn.com -xiyouchat.com -xiyouence.com -xiyouji.com -xiyouquan.com -xiyousdk.com -xiyouwebgame.com -xiyow.com -xiyuan.tv -xiyuege.com -xiyun.net -xiyurumen.com -xizanggl.com -xizangguolv.net -xizangqinglv.com -xizangzl.com -xizhang.com -xizhezhe.com -xizhi.com -xizhibei.me -xizi.com -xizike.com -xiziquan.com -xiziwang.net -xj-gr.com -xj-hao.com -xj-zp.com -xj120.com -xj123.info -xj169.com -xj7road.com -xj96596.com -xjabc.net -xjbdf.net -xjbhyx.com -xjbmaker.com -xjbuluo.com -xjc18.com -xjcbt.com -xjcc.net -xjche365.com -xjcmtj.com -xjctc.net -xjdaily.com -xjdkctz.com -xjdpx.com -xjdsb.com -xjdwx.com -xjent.com -xjfda.com -xjfilm.net -xjfine.com -xjflcp.com -xjfzb.com -xjggjy.com -xjgj.com -xjgqt.org -xjgsdm.com -xjgwy.org -xjh.me -xjhgame.net -xjhjsd.com -xjhr.com -xjishu.com -xjisme.com -xjiuai.com -xjiyou.com -xjjjb.com -xjjnjp.org -xjjxc.com -xjltp.com -xjlxw.com -xjlz365.com -xjmglr.com -xjmty.com -xjmw.net -xjorsa.net -xjpdf.com -xjphsd.com -xjrb.net -xjrmyy.com -xjshift.com -xjtour.com -xjtsnews.com -xjtuccjsj.com -xjtucompressor.com -xjtudlc.com -xjwljb.com -xjwork.com -xjwyglw.com -xjxbx.com -xjxmtc.com -xjxy.com -xjyaxin.com -xjyou88.com -xjyqly.com -xjytjt.com -xjzdjx.com -xjzkzx.com -xjzlyy.com -xjzsks.com -xk8090.com -xk89.com -xk9l.com -xkb1.com -xkbsw.com -xkcd.in -xkdmp.com -xker.com -xkhouse.com -xknote.com -xkpx.com -xkqyfw.com -xksafe.com -xkw.com -xkwe.com -xkyn.com -xkyn.net -xkzww.net -xkzzz.com -xl-ai.com -xl-soft.com -xl13.com -xl526.com -xl5bb.com -xl5dd.com -xl5du.com -xl5dw.com -xl699.com -xlcidc.com -xlctyd.com -xlcz.com -xlfans.com -xlgao.com -xlgxapp.com -xlhb.com -xlhtcucc.com -xlimg.net -xlinclass.com -xlisp.net -xljnjy.com -xlkorganic.com -xlkty.com -xllxdg.com -xlm33.com -xlobo.com -xlpan.com -xlrocket.com -xlsemi.com -xlshou.com -xltrip.com -xltzgy.com -xluos.com -xlwxsw.com -xlxzikao.com -xlylf.com -xlyouxi.com -xlys1904.com -xlysauc.com -xlysoft.net -xlzhao.com -xlzx.com -xlzx123.com -xlzxdc.com -xlzyyw.com -xm-ad.com -xm-ais.net -xm-chuang.com -xm-olympic-museum.org -xm0760.wang -xm680.com -xm909.com -xm9m.com -xmadx.net -xmall1.com -xmamiga.com -xmanblog.net -xmantou.com -xmbankonline.com -xmbhw.com -xmbike.com -xmccb.com -xmcdn.com -xmchong.com -xmcimg.com -xmcp.ltd -xmcwh.com -xmcx.net -xmcymg.com -xmd5.com -xmeasygo.com -xmecard.com -xmedchain.com -xmf.com -xmfc.com -xmferry.com -xmfish.com -xmfunny.com -xmgc360.com -xmgps.com -xmgsd.com -xmheitu.com -xmhitek.com -xmhouse.com -xmigc.com -xmindchina.net -xminfoport.com -xmisp.com -xmitic.com -xmj.app -xmjgjy.com -xmjhome.com -xmjiaruan.com -xmjim.com -xmjslh.com -xmjyw.com -xmkanshu.com -xml-data.org -xmlhifi.com -xmlure.com -xmlvbarcode.com -xmmade.com -xmmama.com -xmmodo.com -xmmtoys.com -xmnjdwx.com -xmnovel.com -xmodelmall.com -xmonecode.com -xmpcba.com -xmrbi.com -xmsec.cc -xmshqh.com -xmsixian.com -xmsme.com -xmsmjk.com -xmsoft.com -xmsoushu.com -xmspace.net -xmtbang.com -xmtekic.com -xmttz02.pw -xmtyl.com -xmtyy02.pw -xmtyy04.pw -xmuchong.com -xmuli.tech -xmwan.com -xmwsrc.com -xmwzfcyy.com -xmxdev.com -xmxgame.com -xmxwl.net -xmxwz.com -xmyeditor.com -xmyijing.com -xmyipin.com -xmylhy.com -xmysgame.com -xmysinter.com -xmzdls.com -xmzsyg.com -xmzylh.com -xn--2krw29cdqai43k.com -xn--4gqwb715dj2dewvbilsep42y.com -xn--6rt008ee0k3ua.com -xn--6rt008ee0k3ua.net -xn--7hv285el2dtof.com -xn--dkr447bejn.com -xn--dkr447bejn.net -xn--e9qp53aepg.xn--ses554g -xn--ebr05n.com -xn--eqrt2g.xn--vuq861b -xn--fiq8ituh5mn9d1qbc28lu5dusc.xn--vuq861b -xn--fiqz7g67bsydx1ed00d.com -xn--glr604k.com -xn--it-1r3f.com -xn--ntsp37j.net -xn--nyqx2gbsm8u0b.com -xn--nyw032beqlm2f.com -xn--nyw032beqlm2f.net -xn--q20av2y36ac54a.com -xn--rhq0kz4zzjc7w9a66k.com -xn--rss99n.com -xn--s4t325g.com -xn--w9qy23cc6adz7d.net -xn--wlqw5ebvdhpi5hepihs3c.com -xn--ygtp21bwyedsq.com -xn--zq2aw6m.xyz -xn-ck.com -xn121.com -xn2017.com -xnaidog.com -xnara.org -xnb.me -xncoding.com -xncoo.com -xncredit.com -xndm.tech -xnguke.com -xnh123.com -xnhdgame.com -xninja.org -xnipapp.com -xnjcw.com -xnjjob.com -xnjz.net -xnlkj.com -xnnpc.com -xnongren.com -xnpic.com -xns315.com -xnsla.com -xnsqc.com -xntt.com -xntv.tv -xnw.com -xnwan.com -xnwx2014.net -xny365.com -xnyauto.com -xnye.net -xnzjxx.com -xoao.com -xocoder.com -xoliao.com -xooooa.com -xorpay.com -xoveskincare.com -xoxknct.com -xoxv.net -xoyo.com -xoyobox.com -xoyocdn.com -xoyq.net -xp002.com -xp5.com -xp6000.com -xp666.com -xp74.com -xp85.com -xp868.com -xp933.com -xp9365.com -xpagn.com -xpaper.com -xpaper.net -xpaper.vip -xpath.org -xpc420.com -xpccdn.com -xpcha.com -xpjedu.com -xpjj.net -xpjm.net -xplian.net -xppmh104.com -xppmh111.com -xppmh118.com -xppmh52.com -xppmh94.com -xppmh96.com -xpsheying.com -xpsy.net -xptt.com -xpu93.com -xpw888.com -xpxt.net -xpyx.net -xq0356.com -xq5.com -xqanhui.com -xqb24.com -xqblog.com -xqbxz.com -xqchuxing.com -xqckg.com -xqfunds.com -xqggz.com -xqipu.com -xqishu.com -xqiushu.com -xqjmzc.com -xqjs.net -xqkqk.com -xqnmz.com -xqs360.com -xqsbw.com -xqship.com -xqspx.com -xqtesting.com -xqwww.com -xqyz.net -xrcch.com -xrccp.com -xreacloud.com -xredu.com -xrender.com -xrichengapp.com -xrkapp.com -xrkcdn.com -xrkmonitor.com -xrso.com -xrunda.com -xrwcn.com -xs-servers.com -xs222.tw -xs2500.com -xs321.com -xs386.com -xs3cnc.com -xs52.com -xs7.cc -xs7.la -xs74.com -xs880.com -xs91.net -xs963.com -xsb.tw -xsb120.com -xsbiquge.com -xsbnggzyjyxx.com -xscbs.com -xschu.com -xsdwk.com -xsee.cc -xsery.net -xsesc.com -xsfaya.com -xsfc.com -xshapp.com -xshb.net -xshell.net -xshellcn.com -xshengyan.com -xshenshu.com -xshkvip.com -xshouyi.com -xshrcw.com -xshulin.com -xshuma.com -xshuoba.com -xshuotxt.com -xshwp.com -xsina.net -xsj2021888.com -xsjedu.org -xsjsource.com -xsjtxt.com -xsjwyx.com -xskhome.com -xskyx.net -xslb.me -xsldh.net -xslou.com -xsmaofa.com -xsmnews.com -xsmore.com -xsnsyh.com -xsool.com -xsp0311.com -xspcf.com -xspic.com -xspliter.com -xsrjt.com -xsrtvu.com -xsshuku.com -xssk.net -xsslyjt.com -xsstomy.com -xssz.net -xsteach.com -xsti.net -xstqj.com -xstt5.com -xstx.info -xsu.cc -xsvps.com -xswdcasting.com -xsxkzz.com -xsycps.com -xsyk021.com -xsyqmztg.com -xsyushan.com -xsyxsc.com -xszp.cc -xszrcw.com -xszww.com -xszysc.com -xt-kp.com -xt-tattoo.com -xt12333.com -xt70.com -xt918.com -xtao.me -xtbank.com -xtc-edu.com -xtcaq.com -xtcrm.com -xtdpye.com -xtea.org -xtedu.com -xthc999.com -xthinking.net -xtibet.com -xtjc.com -xtjky.com -xtjxsb.com -xtlkgc.com -xtlog.com -xtmtrj.com -xtongs.com -xtrc.net -xtt95511.bz -xttblog.com -xttongcai.com -xttongji.com -xttsg.com -xttz.com -xtu2.com -xtuan.com -xtuo.net -xtutoring.com -xtyxdq.com -xu1s.com -xu7b.com -xuanad.com -xuanba.com -xuanbiaoqing.com -xuancaizi.com -xuanceo.com -xuancheng.org -xuandan.com -xuande99.com -xuandui.me -xuanfengge.com -xuanfengkeji.com -xuanfuwang.com -xuanhua8.com -xuanhuafb.com -xuanhuange.com -xuanhuange.net -xuanjutong.com -xuanke.com -xuanlishi.com -xuanliwang.com -xuannaer.com -xuanquge.com -xuanqun.com -xuanruanjian.com -xuanshu.com -xuantaikeji.com -xuanwonainiu.com -xuanwu88.com -xuanwumobile.com -xuanwww.com -xuanxiu.cc -xuanxuan.com -xuanxuangame.com -xuanxuantemai.com -xuanxue.com -xuanxueyuan.com -xuanyangxl.com -xuanyouwang.com -xuanyusong.com -xuanzhoubian.com -xubei.com -xuchuang.com -xudan123.com -xudankeji.com -xudongfood.com -xudoodoo.com -xuduan.vip -xue163.net -xue3dmax.com -xue51.com -xue63.com -xueanquan.com -xueba100.com -xuebalib.com -xuebingsi.com -xuebuyuan.com -xuecaijie.com -xuecan.net -xuechebu.com -xuechela.com -xueda.com -xuedi.com -xuedong97.com -xueepay.com -xueersen.com -xueersi.com -xueerxing.com -xuefenxi.com -xuefo.net -xuegaogame.com -xuegeshui.com -xuegongkong.com -xueguoedu.net -xuehai.net -xuehaibjb.com -xuehaoba.com -xuehuacdn.com -xuehuahua.cc -xuehuahua.net -xuehui.com -xuehuile.com -xuehuiwang.com -xueit.com -xuejiehome.com -xuejiqiao.com -xuekeedu.com -xuekuaiji.com -xuekubao.com -xuekuibang.shop -xuelecn.com -xueleku.com -xuelema.com -xueleyun.com -xueli9.com -xuelu.org -xueming.li -xuenb.com -xuepaijie.com -xuepojie.com -xueqiu.com -xueqiu360.com -xuerentang.net -xuesax.com -xueseo.com -xueshandai.com -xueshanlinghu.com -xueshen.net -xueshiboke.com -xueshiyun.com -xueshu.com -xueshu5.com -xueshuda.com -xueshujia.com -xuetangonline.com -xuetangx.com -xuetangzaixian.com -xueti.com -xuetimes.com -xuetu.net -xuetuwuyou.com -xueui.com -xueuisheji.com -xuewangshang.com -xuewangzhan.com -xuewangzhan.net -xuewei.net -xueweijiema.com -xuexb.com -xuexi.la -xuexi365.com -xuexi637.com -xuexiaodaquan.com -xuexiaodaquan.net -xuexiaozhaopin.com -xuexibao.com -xuexigang.com -xuexijilu.com -xuexila.com -xuexili.com -xuexilinux.com -xuexin365.com -xuexiniu.com -xuexitong.com -xuexivip.net -xueyanshe.com -xueyiyun.com -xueyou.org -xueyouyoo.com -xueyuanjun.com -xuezhouyi.com -xuezishi.net -xuezizhai.com -xugaoyang.com -xugucn.com -xuhangzj.com -xuheen.com -xuhehuan.com -xuhot.com -xujianhua.com -xujun.org -xukai.xyz -xuliangwei.com -xulihang.me -xulizui6.com -xulonggame.com -xulv.net -xumenger.com -xuminggang.com -xumingxiang.com -xumurc.com -xun1688.com -xunbao178.com -xunbaozhifu.com -xunbibao.com -xunbin.com -xunbuy.com -xuncaoji.net -xunchabing.com -xundalm.com -xundayun.com -xundns.com -xundns.net -xundns.org -xundupdf.com -xunerjie.com -xunfang.com -xunfeivr.com -xungou.com -xunhuoyi.com -xunhupay.com -xunicard.com -xunihao.net -xunjiecad.com -xunjiepdf.com -xunjieshipin.com -xunjietupian.com -xunkids.com -xunkoo.com -xunlei.com -xunlei.net -xunlei1.com -xunleigang.com -xunleige.com -xunleige520.com -xunleige88.com -xunleihuiyuan.net -xunleiyy.com -xunlew.com -xunli.xyz -xunliandata.com -xunlong.net -xunlong.tv -xunlonghe.net -xunlongsoft.com -xunmb.com -xunmei.net -xunmeinet.com -xunmiweb.com -xunmzone.com -xunqianwang.com -xunruicms.com -xunsearch.com -xunshou.com -xuntou.com -xuntuoguan.com -xunurl.com -xunwan.com -xunwei.org -xunwei.tm -xunxi.com -xunxu.com -xunyixia.com -xunyou.com -xunyou.mobi -xunyun.com -xunzai.com -xunzhuang.net -xunzhuo123.com -xunzi.cc -xuooo.com -xupu.name -xupu120.com -xuqyfw.com -xuruowei.com -xuxian.com -xuxian.me -xuxueli.com -xuxusheng.com -xuyaokeji.com -xuyi.net -xuyilx.com -xuyimin.club -xuyongren.com -xuyuanyi.com -xuzhi.net -xuzhoujob.com -xv5b.com -xvdianchiwang.com -xvision.club -xvista.com -xvna.com -xvv.cc -xw-china.com -xw1806.com -xw360.com -xwadv.com -xwan.com -xwb8.com -xwbank.com -xwcms.net -xwcool.com -xwdsp.com -xweb.vip -xwei.tv -xwhb.com -xwhodesign.com -xwjqr.com -xwjr.com -xwjy.org -xwko.com -xwlmx.com -xwlunwen.com -xwlxw.com -xwood.net -xwsj.org -xwtex.com -xwuad.com -xww360.com -xwxguan.com -xwyun.net -xwz999.com -xwzc.net -xwzxjy.com -xx007.com -xx144.com -xx4a.com -xx5.com -xxadc.com -xxbiquge.com -xxbmm.com -xxbt.com -xxcang.com -xxcig.com -xxcmw.com -xxd.io -xxdao.com -xxfzl.com -xxgj47.com -xxgzmlt.com -xxhd-tech.com -xxhh.com -xxhkt.com -xxhyzd.com -xxingclub.com -xxjcy.com -xxjr.com -xxjrjxc.com -xxjrqc.com -xxka.com -xxko.net -xxkucun.com -xxlcn.com -xxliudsp.com -xxlwin.com -xxm.plus -xxmac.com -xxmanhua.info -xxmh117.com -xxmh21.com -xxmh223.com -xxmh225.com -xxmh226.com -xxmh268.com -xxmh330.com -xxmh460.com -xxmh481.com -xxmh484.com -xxmh673.com -xxmh81.com -xxnets.net -xxnmcd.com -xxoojoke.com -xxorg.com -xxpie.com -xxptcs.com -xxqb5200.com -xxqipai.com -xxqun.com -xxrou.net -xxs8.com -xxsb.com -xxsdfjx.com -xxshu.com -xxskins.com -xxsy.net -xxsywxj.com -xxtaotao.com -xxthemes.com -xxtiao.com -xxtjs.com -xxwenda.com -xxwolo.com -xxxfeng.com -xxxlbox.com -xxxmeng.com -xxxxxbbs.com -xxxzzlm.org -xxycw.com -xxyfgy.com -xxyhzd.com -xxyo.com -xxyw.com -xxzdpf.com -xxzfgjj.com -xxzhushou.com -xy-365.com -xy-asia.com -xy.com -xy1212.com -xy1758.com -xy178.com -xy1989.com -xy3000.com -xy48.net -xy58.net -xy78.com -xy980.net -xyacg.net -xyb100.com -xybsyw.com -xybygw.com -xyc999.com -xycaogen.com -xycareer.com -xycdn.com -xyclawyer.com -xycloud.com -xyclouds.com -xyczero.com -xydcname.com -xydcname.net -xydhl.com -xydxcloud.com -xydxcs.com -xyfc.com -xyfcw.com -xyffsb.com -xyfw.org -xygjx.com -xygmed.com -xygyhd.org -xyhc.com -xyhis.com -xyhlcd.com -xyhospital.com -xyhqsh.com -xyhtml5.com -xyhust-meri.com -xyimg.net -xyinzhe.com -xyj.link -xyj321.com -xyjrw.com -xyjt.org -xylh888.com -xylink.com -xylmf.com -xymcp3.com -xymens.com -xymvip.com -xynbnb.com -xyniubi.com -xynsh.com -xyookj.com -xyous.com -xyppzx.com -xyq.name -xyqb.com -xyqczy.com -xyqka.com -xyrtv.com -xysb.com -xyshu8.com -xyshu8.net -xyssdzrmzf.com -xystatic.com -xystoy.com -xysy.com -xytjcpj.com -xytzg.com -xyun1.com -xyunqi.com -xyvend.com -xyvending.com -xyw.com -xywallet.com -xywm.ltd -xywooden.com -xywy.com -xywyfw.com -xywzs.com -xyx234.com -xyxcables.com -xyxdie.com -xyxinr.com -xyxl.net -xyxsc.com -xyxsns.com -xyxy.com -xyxy.net -xyxy01.com -xyy001.com -xyyh.xyz -xyyksy.com -xyyuedu.com -xyyx82.com -xyz-jm.com -xyz1001.xyz -xyz1412.net -xyz365.vip -xyz456.com -xyz83.com -xyzcdn.net -xyzcn.com -xyzdict.com -xyzggg.com -xyzmdzs.com -xyzone.xyz -xyzs.com -xyzsq.com -xyzysmx.com -xz-juming.com -xz.com -xz577.com -xz6.com -xz6699.com -xz6d.com -xz7.com -xzapi56.com -xzbu.com -xzcblog.com -xzddx.com -xzdzsww.com -xzfile.com -xzggjyzpw.com -xzgjj.com -xzh200c.shop -xzhichang.com -xzhizao.com -xzji.com -xzjqx.date -xzjxtsg.com -xzkd.com -xzking.com -xzlogo.com -xzlres.com -xzltzc.com -xzlyt.com -xzm56.com -xzn56.com -xzoo.org -xzper.com -xzr.kim -xzrj.cc -xzrjsoft.com -xzsec.com -xzsnw.com -xzstatic.com -xzsthj.com -xztyhl.com -xztylfu.com -xztzb.com -xzw.com -xzwwxn.com -xzx.com -xzxiaoshuo.com -xzxw.com -xzyhealth.com -xzzanggong.com -xzzp.net -y-os.net -y.to -y007.com -y0game.com -y1995.com -y2002.com -y261.com -y4dg.cc -y4dg.com -y500.me -y5000.com -y5663.com -y6162.com -y80s.com -y821.cc -y999.com -y9photo.com -ya17.com -ya247.com -yaability.com -yaahe.com -yabo.com -yabo2020.com -yabodns.com -yabolive.com -yaboor.com -yabovip2029.com -yac8.com -yac8.net -yadashi.com -yadgen.com -yadingchi.com -yadingtour.com -yaduo.com -yaeherhealth.com -yaersen.com -yafanpm.com -yafco.com -yafdev.com -yafeilinux.com -yageo.tech -yahacode.com -yahaizi.com -yahei.net -yahoo001.com -yahotab.com -yahuhost.com -yahui.hk -yaitest.com -yaiyuan.com -yajuke.com -yajxc.com -yakool.com -yalayi.net -yalewoo.com -yaliang.net -yalinfeng.com -yalishiyanji.com -yalixinli.com -yalongsi.com -yalqq8976.com -yamadesignlab.com -yamadie.net -yameijie.com -yameisj.com -yamibo.com -yan-wei.net -yanbinghu.com -yanbm.com -yanboguoji.com -yanboyuan.com -yanche315.com -yanchebang.com -yanchengzx.com -yandianying.com -yandui.com -yanedu.com -yanfen.online -yang16.com -yangbing.club -yangcai168.com -yangchebao.cc -yangchenglianhe.com -yangchunjian.com -yangcong.com -yangcong345.com -yangcongchufang.com -yangdongjia.com -yangerxiao.com -yangfannie.com -yangfawen.net -yangfd.com -yangge.me -yangguanjun.com -yangguiweihuo.com -yanghengjun.com -yanghua.com -yanghui.com -yangjian.me -yangjie.li -yangkatie.com -yangkeduo.com -yangki.net -yangkun.net -yanglajiao.com -yanglaocn.com -yanglaofuwu365.com -yanglaozhan.org -yanglee.com -yangli.com -yanglingxi.com -yanglong.pro -yangluojob.com -yangluoxw.com -yangmao.info -yangmaodang.org -yangmaohao.net -yangner.com -yangniupiju.com -yangqianguan.com -yangqimanhua.com -yangqq.com -yangqu.com -yangsam.com -yangshengliang.com -yangshengpu.com -yangshengtt.com -yangshengzhu.com -yangshitianqi.com -yangtaiapp.com -yangtengfei.com -yangtianb.com -yangtianbao.com -yangtse.com -yangtze-volga.org -yangwang.pw -yangwc.com -yangxiang.com -yangxiangming.com -yangxiaojia.me -yangxikun.com -yangxingzhen.com -yangxinlife.com -yangyangla.com -yangyanxing.com -yangyi.vip -yangyi02.com -yangyi08.com -yangyi19.com -yangyingming.com -yangyongquan.com -yangyq.net -yangzhe1991.org -yangzhiping.com -yangzhiriji.com -yangzhix.com -yangzhongchao.com -yangzijiang.com -yangzw.vip -yanhaijing.com -yanjiangwang.com -yanjiao.com -yanjiao.net -yanjiaoapp.com -yanjiaols.com -yanjiaoweixin.com -yanjinews.com -yanjingge.com -yanjiubaogao.com -yanjiushenglw.com -yanjiyou.net -yanjun7858.com -yanjunbo.com -yankanshu.net -yankanzw.com -yankay.com -yanlinghm.com -yanliu.org -yanlutong.com -yanmbjiage.com -yannv.com -yanoda.com -yanpk.com -yanqiao.com -yanqing-888.net -yanqingzhan.net -yansedaquan.com -yanshihua.com -yanshishuo.com -yansudian.com -yantai-chuanpiao.com -yantaibank.net -yantaimarket.com -yantaitech.com -yantubao.com -yantuchina.com -yanue.net -yanunon.com -yanwenzi.com -yanxian.org -yanxintong.com -yanxishe.com -yanxiu.com -yanxuezhang.net -yanxurui.cc -yanyapeng.com -yanyib2b.com -yanyijiameng.com -yanyijingling.com -yanyiwu.com -yanyuzw.com -yanzhiwu.com -yanzoujia.net -yao.com -yao123.com -yao51.com -yaoao.net -yaobo.net -yaochixs.com -yaochufa.com -yaocsoft.com -yaodaojiao.com -yaodou.net -yaofangwang.com -yaofangwang.net -yaofx.net -yaoge123.com -yaoguo.com -yaohaixiao.com -yaohuiji.com -yaohuo.me -yaojiao.tv -yaojibuyu.com -yaojidsfee.com -yaojiedianzi.com -yaojingtang.com -yaokaihui.com -yaolaifen.com -yaolan.com -yaoliwang.com -yaomaiche.com -yaoman.net -yaonano.com -yaoor.com -yaooxx.space -yaopaiming.com -yaopinnet.com -yaoqingwo.com -yaosai.com -yaowan.com -yaowei.info -yaoxianwu.com -yaoyedan.net -yaoying.vip -yaoyl.com -yaoyouke.com -yaoyu.com -yaoyuan.com -yaoyuanba.com -yaozh.com -yaozs.com -yaozui.com -yareiot.com -yarnn.com -yasishuo.com -yasiyasi.com -yasking.org -yasn.com -yasuotu.com -yataishoes.com -yatiku.com -yatiwang.com -yatsenglobal.com -yatsoft.com -yawancaiwu.com -yawenb.com -yawkj.com -yaxi.net -yaxige.com -yaxinde.com -yaxuntuhang.com -yayigou.net -yayihouse.com -yaypool.com -yayu.org -yazhifan.com -yazhougoufang.com -yazibt.com -yazjy.com -yazuo.com -yb1518.com -yb1867.com -yb3.cc -yb983.com -yba120.com -ybaby.com -ybao.org -ybaobx.com -ybbdzp.com -ybbgd.com -ybbxkj.com -ybccb.com -ybccode.com -ybdudu.com -ybe.net -ybhdmob.com -ybi.net -ybin.cc -ybirds.com -ybj.com -ybjasb.com -ybjk.com -ybjtds.net -yblp.com -ybm100.com -ybren.com -ybs120.com -ybtong.com -ybtvyun.com -ybtzjt.com -ybvipdns.com -ybvv.com -ybword.com -ybwzx.com -ybxww.com -ybzkb.com -yc.cc -yc123.com -yc370.com -yc38.com -yc999vip.com -ycandyz.com -ycb.com -ycbright.com -yccdn.com -ycdjy.com -ycdlfw.com -ycdongxu.com -yceshop.com -ycgj.cc -ycgjj.net -ycgslb.com -ychefu.com -ychromedgeie.com -ychxie.com -ychxiex.com -ycig.com -ycigilink.com -yciyun.com -ycjt2007.com -ycjtj.com -ycjyjt.com -ycku.com -yclh6.com -yclunwen.com -ycmbcd.com -ycnuli.com -ycoem.net -ycool.com -ycpack.net -ycpai.com -ycqedu.net -ycrh-tattoo.com -ycrusher.com -ycsgame.com -ycshengwang.com -ycsrc.com -ycsystem.com -yct-tec.com -ycty.org -ycwalker.com -ycwanju.com -ycwb.com -ycwhys.com -ycwtbgsb.com -ycxfgroup.com -ycxhdp.com -ycxjtd.com -ycyggr.com -ycyhhx.com -ycyjkj.com -ycym.com -ycyui.com -yczihua.com -yda513.com -ydaobo.com -ydbimg.com -ydc360.com -yddb88.com -yddn.com -ydh.fun -ydjt1166.com -ydl.com -ydl.wang -ydlbk.com -ydlcdn.com -ydm88.com -ydmel.com -ydmeng.com -ydmob.com -ydmsh.com -ydn5.com -ydnewmedia.com -ydr.me -ydsaso.com -ydsjjs.com -ydstatic.com -ydsyxzx.com -ydtad.com -ydtnotary.com -ydtun.com -ydu6.com -yduav.com -ydui.org -ydvip00ap.com -ydvip00as.com -ydwhgs.com -ydx2.com -ydxxt.com -ydy.com -ydyeducation.com -ydys1688.com -ydyy120.com -ye.com -ye1992.com -ye3.com -ye40.com -yea.im -yead.net -yeah.net -yeahka.com -yeahworld.com -yeai.com -yealink.com -yealinkvc.com -yeapcloud.com -yearnfar.com -yeastar.com -yeax.com -yebaike.com -yebangyu.org -yeboyzq.com -yecdn.com -yedingding.com -yeeaoo.com -yeecall.com -yeecin.com -yeecloud.com -yeedian365.com -yeefeitrip.com -yeefire.com -yeefx.net -yeekit.com -yeelight.com -yeelink.net -yeelogo.com -yeemiao.com -yeemiao.net -yeepay.com -yeepaycdn.com -yeepiao.com -yeeuu.com -yeeyan.com -yeeyan.org -yeeyk.com -yeezhe.com -yef2.vip -yefeiyexs.com -yefu365.com -yegame.com -yegenyou.com -yegong.net -yehetang.com -yeidc.com -yeidc.net -yejienet.com -yejing.biz -yejuu.com -yelanxiaoyu.com -yelinmall.com -yelixiali.com -yelook.com -yemablog.com -yemacaijing.com -yemaili.com -yemaosheji.com -yemaosoft.com -yemayun.com -yemeihuoguo.com -yemet.com -yemi.me -yenisezonmodelleri.com -yeolar.com -yeoner.com -yeree.com -yerhu.com -yes-chinese.com -yes-med.net -yes515.com -yes58.net -yes88.com -yesacc.com -yesaha.com -yesanpole.com -yesapi.net -yesbt.cc -yesdat.com -yesdecor.com -yeseesports.com -yesense.com -yeseread.com -yeshen.com -yeshengarts.com -yeshj.com -yeshu.com -yesidos.com -yesiness.com -yeskn.com -yesky.com -yeslib.com -yeslicake.com -yesmryang.net -yesmyimg.com -yesmywine.com -yesoulchina.com -yespearl.com -yestar.com -yestar1992.com -yestarm.com -yestarvip.com -yeston.net -yestone.com -yesudoo.com -yesuse.net -yeswan.com -yesxia.com -yesxun.com -yetang.com -yetianzi.com -yetingjk.com -yewen.us -yewuyuan.com -yexinggroup.com -yeyaji9.com -yeyday.com -yeyemm.xyz -yeyexx.com -yeyexx8.com -yeyexx9.com -yeyezw.com -yeyimg.com -yeyo.cc -yeyou.com -yeyoucdn.com -yeyoujia.com -yeyulingfeng.com -yeyun.com -yezdm.com -yezhuwq.com -yezhuwuyou.com -yeziting.com -yezixigame.com -yfcache.com -yfcalc.com -yfcdn.net -yfcloud.com -yfcloud.io -yfcmf.net -yfcnn.com -yfdns.net -yfdts.net -yfdurl.com -yfdxs.com -yfdyf.com -yffe.com -yfgj68.com -yfhl.net -yfhxtech.com -yfiot.com -yfjiakao.com -yfklxz.com -yfmhw.com -yfp2p.net -yfpayment.com -yfscdn.com -yfscdn.net -yfservice.com -yftxt.com -yfvb.com -yfway.com -yfwnm.com -yfycrc.com -yfycyboil.com -yg-dk.com -ygc711iq.com -ygct.com -ygdy8.com -ygdy8.net -yge.me -ygei.com -yget.me -yghsh.com -ygibao.com -yginsight.com -ygjj.com -ygjoy.com -ygo.wiki -ygodl.com -ygread.com -ygsdmedia.com -ygshangjie.com -ygsoft.com -ygsub.com -ygtcpa.com -ygwenxue.com -ygym.org -yh31.com -yh596.com -yh598.com -yh99.cc -yhachina.com -yhaow.com -yhbimg.com -yhcko.com -yhcmovie.com -yhcqw.com -yhd.com -yhdfa.com -yhdm5.com -yhdns.net -yhdtns.com -yhetent.com -yhfx.info -yhgo.wang -yhgo8.com -yhidc.com -yhindustrial.com -yhj2000.com -yhj9.com -yhjbox.com -yhjdcom.com -yhkgas.com -yhkingdee.com -yhlbbs.com -yhm11.com -yhmh.vip -yhouse.com -yhq368.com -yhqapp.com -yhqdashi.com -yhqpd.com -yhquan365.com -yhqurl.com -yhrcb.com -yhres.com -yhrtvu.com -yhshapp.com -yhsms.com -yhspy.com -yhsrv.com -yhtools.cc -yhtower.com -yhtx.tv -yhurl.com -yhwomen.com -yhxuexiao.com -yhy50.com -yhyf.cc -yhyshop.com -yhz2000.com -yhz365.com -yhz66.com -yhzdt.com -yhzm.cc -yhzm.com -yhzml.com -yhzuche.com -yhzy365.com -yi-jy.com -yi-programmer.com -yi-you.org -yi114.com -yi2.net -yi588.com -yi6.com -yi7.com -yi958.com -yiai.me -yiaini.com -yianju.ltd -yiapp.com -yibaifen.com -yibaixun.com -yiban.io -yiban1314.com -yibaogao.com -yibei.com -yibencaijing.com -yibenmanhua.com -yibite.com -yicai.com -yicaitangwangzhuan.com -yicamp.com -yichadan.com -yichangly.com -yiche.com -yichemall.com -yichesafe.com -yichuyifan.com -yicipapa.com -yiclear.com -yicongfound.org -yicuba.com -yicx.com -yidaba.com -yidai.com -yidaomobi.com -yidaservice.com -yideamobile.com -yidejia.com -yidejr.com -yidejr.net -yidengxuetang.com -yidian360.com -yidianchina.com -yidiandian-tea.net -yidianer.com -yidianfenqi.com -yidianhulian.com -yidianling.com -yidiansz.com -yidianting.xin -yidianzhidao.com -yidianzixun.com -yidianzx.com -yidmall.com -yidong-food.com -yidonghua.com -yidonglin.com -yidoutang.com -yidu.cc -yidui.me -yidukindle.com -yidumen.com -yidun.com -yiernews.com -yifabao.com -yifake.com -yifanghy.com -yifanmedia.net -yifansuo.com -yifatong.com -yifeisoft.com -yifeiyuan.me -yifen.com -yifeng-mover.com -yifeng.com -yifenghudong.com -yifenghuyu.com -yifengke.com -yifengx.com -yifengxin.org -yifone.com -yifu.net -yifubao.com -yifucj.com -yifuls.com -yifutangvip.net -yifutu.com -yigao.com -yigaosu.com -yige.org -yigecun.com -yigeking.com -yigeqianbao.com -yigerlife.com -yigood.net -yigoonet.com -yigouu.com -yiguanli.net -yigujin.wang -yiguo.com -yiguoimg.com -yihafo.com -yihaikerry.net -yihangen.com -yihao01.com -yihaobc.com -yihaodian.com -yihaodianimg.com -yihaoduozhongduan.com -yihaohuoche.com -yihaojiaju.com -yihaomen.com -yihchina.com -yihe360.com -yihecloud.com -yihedoors.com -yihegold.com -yihong001.com -yihu.com -yihuacomputer.com -yihuimg.com -yihun.com -yii-china.com -yiibai.com -yiibook.com -yiichina.com -yiiheng.com -yiihuu.com -yiii.net -yiiwoo.com -yijia-ai.com -yijia.com -yijiaer.com -yijian119.com -yijiangshan.net -yijianjiaoyu.com -yijianjiexi.com -yijianxiu.com -yijianzj.com -yijiaren888.com -yijie.com -yijiebuyi.com -yijiedai.com -yijiexiaomin.com -yijinghong.com -yijingji.com -yijingying.com -yijintong.net -yijirecovery.com -yijiupeixun.com -yijiupi.com -yijiuplus.com -yijueweb.com -yikang1977.com -yikanxiaoshuo.com -yikanxiaoshuoa.com -yike.io -yikedou.com -yikehome.com -yiketalks.com -yikeweiqi.com -yikexue.com -yikeyz.com -yikm.net -yikuaide.com -yikuaiqu.com -yikuns.com -yikuzy.com -yilan.io -yilan.tv -yilanvaas.com -yile8.com -yilewan.com -yileweb.com -yileyiqi.com -yileyoo.com -yileyunssp.com -yili.com -yilianmeiti.com -yilianqing.com -yilianyixue.com -yilibabyclub.com -yilihuo.com -yilijet.com -yilingshop.com -yilinguoji.com -yilinweb.com -yilong.com -yilongtv.com -yilule.com -yiluzhuanqian.com -yiluzouhao.com -yilvcheng.com -yimaoip.com -yimashijie.com -yimasm.com -yimeima.com -yimenapp.com -yimeng.com -yimengmusic.com -yimenonline.com -yimenyun.net -yimi.com -yimianmian.com -yimiaozhongdemeng.com -yimidida.com -yimihaodi.com -yimikf.com -yimin.biz -yimin168.com -yimincaifu.com -yiminchaoshi.com -yimingzhi.net -yimininfo.com -yiminjiayuan.com -yiminw.com -yimisoft.com -yimitongxue.com -yimity.com -yimiyisu.com -yimizhibo.tv -yimoe.cc -yimutian.com -yinan9.com -yinar.com -yinbaitu.com -yinbin.ink -yinchengpai.com -yinchengwealth.com -yindon.com -yindou.com -yinduabc.com -yindudigital.com -yinduzx.com -yineitong.com -yinfeiy.com -ying-ji.com -yingbishufa.com -yingcankeji.com -yingchaozhibo.com -yingchengnet.com -yingchuang.com -yingchulawyer.com -yingci86.com -yingdev.com -yingdianzi.com -yinge.cc -yinge.tech -yingerchela.com -yingfeiyun.com -yingfeng.me -yinghaicar.com -yinghaozs.com -yinghecloud.com -yingheying.com -yinghezhong.com -yinghualiu.com -yinghub.com -yingjia360.com -yingjianzhijia.com -yingjiesheng.com -yingjiesheng.net -yingjimall.com -yingk.com -yingkelawyer.com -yingle.com -yinglou6.com -yinglunka.com -yingmei.me -yingmi.com -yingmile.com -yingming.net -yingmoo.com -yingpingji.com -yingsheng.com -yingshengyl.com -yingshiborui.com -yingshixiaoshuo.com -yingshiyou.com -yingsoo.com -yingsun.net -yingtai.com -yingtaoai.com -yingtaosiyue.com -yingtaoyun.com -yingtongsz.com -yingucaifu.com -yingujr.com -yinguobing.com -yingupuhui.com -yingwenming.com -yingworks.com -yingwuyuzd.cc -yingxiahome.com -yingxiang.com -yingxiaoo.com -yingxiong.com -yingxuan.io -yingxunkeji.net -yingyang630.com -yingyinglicai.com -yingyongbei.com -yingyonghao8.com -yingyonghui.com -yingyongmiao.com -yingyu.com -yingyurumen.com -yingyushijie.com -yingyuweb.com -yingzaocms.com -yingzheng.com -yingzhongshare.com -yingzt.com -yinhai.com -yinhangchaxun.com -yinhanghanghao.com -yinhangkadata.com -yinhangkahao.com -yinhangkaoshi.net -yinhanglilv.net -yinhangzhaopin.com -yinhe.com -yinheli.com -yinhengli.com -yinher.com -yinheyuedu.com -yinhu.com -yini.org -yinjiaji.com -yinjietd.com -yinka.co -yinker.com -yinlei.net -yinliuba.com -yinmishu.com -yinongtouzi.com -yinpiao.com -yinsha.com -yinshua.cc -yinshua86.com -yinshuiyu.com -yintai.com -yintechi.com -yintop.com -yinuoedu.net -yinuosy.com -yinvmh.com -yinxi.net -yinxiang.com -yinxianggame.com -yinxiangma.com -yinxiangqingyang.com -yinxiao.com -yinxinbh.com -yinxing.com -yinxunbiao.com -yinyue7.com -yinyuegf.com -yinyueke.net -yinyuemeitu.com -yinyuetai.com -yinyueyouxi.com -yinzhijie.com -yinzhizhu.com -yinzifang.com -yinzige.com -yinziji.com -yinzuo100.com -yinzuojianshen.com -yioho.com -yioulai.com -yiovo.com -yipaipian.com -yipanhaocai.com -yipaogan.com -yiparts.com -yipemail.com -yipihuo.com -yipingmi.vip -yipinhr.com -yipinread.com -yipinsucai.com -yipinxia.net -yipuping.com -yiqi.com -yiqianbao.com -yiqianlian.com -yiqiao88.com -yiqibazi.com -yiqibing.com -yiqibuduoduo.com -yiqicesuan.com -yiqifa.com -yiqifa.org -yiqifengtian.com -yiqifin.com -yiqihao.com -yiqijixiang.com -yiqimaila.com -yiqiming88.com -yiqioffice.com -yiqishai.com -yiqishangxueba.com -yiqishanyuan.com -yiqiso.com -yiqisoo.com -yiqisooimg.com -yiqisou.net -yiqiu.org -yiqiuu.com -yiqiv.com -yiqixie.com -yiqixiegushi.com -yiqiyou.com -yiquanhs.com -yiquanseo.com -yiquhai.com -yiqujing.com -yiquxapp.com -yiren001.com -yirendai.com -yirentong.com -yirenzhushou.com -yirimao.com -yirlir.com -yiruantong.com -yiruanwang.com -yirui.net -yiruide.com -yiruikecorp.com -yiruituo.com -yisa.com -yisafe.co -yisanban.com -yisanwu.com -yisell.com -yishalai.com -yisharepdf.site -yishengfanyi.com -yishihui.com -yishion.com -yishion.net -yishixue.com -yishu.com -yishu168.com -yishujie.com -yishuliuxue.com -yishun.net -yishuweipen.com -yishuzhifa.com -yishuzi.com -yishuzi.org -yishuziti.com -yisier.com -yisou.com -yisouti.com -yisouyifa.com -yiss.com -yisu.com -yisu6.com -yisusoft.com -yit.com -yitaifang.com -yitang.org -yitanyun.com -yitaojiayuan.com -yitel.com -yitenggz.com -yitesoft.com -yitianshidai.com -yitianxinda.com -yiticm.com -yitongjiayou.com -yitongmedia.com -yitopapp.com -yituocn.com -yitutech.com -yiupin.com -yiuxiu.com -yivian.com -yivicar.com -yivizd.com -yiwaiart.com -yiwan.com -yiwanggo.net -yiwangml.com -yiwanzhushou.com -yiwealth.com -yiweb.com -yiweilaogumin.com -yiwenyida.com -yiwubuy.com -yiwufair.com -yiwugo.com -yiwugou.com -yiwuku.com -yiwutalk.com -yixao.com -yixi.tv -yixia.com -yixiaoxi.com -yixie8.com -yixiekeji.com -yixieshi.com -yixiin.com -yixin.com -yixin.im -yixin5.com -yixincao.com -yixinfinance.com -yixinfund.com -yixinhuinong.com -yixinplanning.com -yixintui.com -yixinu.com -yixinxin.com -yixiu08.com -yixiuxueyuan.com -yixuan.net -yixue68.com -yixue99.com -yixueks.com -yixuelunwen.com -yixui.com -yixun.com -yiya520.com -yiyaha.com -yiyakq.com -yiyanche.com -yiyangidc.com -yiyaojd.com -yiyaojie.com -yiyatuan.com -yiybb.com -yiye.ai -yiyebang.com -yiyefei.com -yiyesheng.net -yiyewenxs.com -yiyiarts.com -yiyiarts.net -yiyihd.com -yiyimh.com -yiyingt.com -yiyisoft.com -yiyitech.com -yiyiwang.net -yiyiwawa.com -yiyongcad.com -yiyou.org -yiyouhbkj.com -yiyouliao.com -yiyoupay.net -yiyouqi.com -yiyu.com -yiyuanqiang.net -yiyuansoft.com -yiyuantian.com -yiyuanyi.org -yiyuetop.com -yiyult.com -yiyum.com -yiyunweb.com -yiyurumen.com -yiyuzw.com -yiyyy.com -yizaoyiwan.com -yizeijun.com -yizenb.com -yizhanzx.com -yizhchan.com -yizhema.com -yizhi-its.com -yizhibi.com -yizhibo.com -yizhidayu.com -yizhifubj.com -yizhikan.com -yizhishenbi.com -yizhiwechat.com -yizhixiaogame.com -yizimg.com -yizlife.com -yizu.org -yizuocity.com -yj-bank.com -yj-fun.com -yj.ink -yj3g.com -yj93zp.com -yjbys.com -yjcf360.com -yjcp.com -yjdatasos.com -yjfs8.com -yjhyjl.com -yjihua.com -yjk.im -yjldp.com -yjlin4.com -yjopen.com -yjpal.com -yjq.cc -yjrcyw.com -yjro.com -yjrzj.com -yjs-cdn.com -yjs-cdn10.com -yjs111.com -yjscloud.com -yjsjl.org -yjwlo.com -yjwujian.com -yjxsoft.com -yjyghb.com -yjz9.com -yk08.com -yk211.com -ykadx.com -ykanxiaoshuo.com -ykccn.com -ykclass.com -ykdgd.com -ykdmsy.com -ykedu.net -ykimg.com -ykinvestment.com -ykjhdc.com -ykntv.com -ykplg.com -ykpxxx.com -ykq.ink -ykqnl.com -ykread.com -yks365.com -yksq.net -ykstarshine.com -yksuit.com -ykt.io -yktworld.com -yktz.net -ykyao.com -ykydxh.com -ykzr.com -yl1001.com -yladm.com -ylallinone.com -ylbgw1.com -ylcs.cc -yldh.cc -ylfx.com -ylg877.com -ylghsj.com -ylgj.com -ylhaitao.com -ylhh.net -ylhsrsrc.com -ylhuake.com -ylife9.com -ylimg.com -yliyun.com -yljc888.com -yljr.com -ylkc.net -ylkjgame.com -ylmf.cc -ylmf.com -ylmf.net -ylmf888.com -ylmfeng.com -ylmfwin100.net -ylmfwin8.com -ylnetworks.com -yloo.org -ylq.com -ylrb.com -ylrj.com -ylstatic.com -yltpcb.com -ylunion.com -yluu.com -ylwl.cc -ylwood-cn.com -ylws.net -ylwyw.com -ylxbxgtg.com -ylxdtww.com -ylxk.net -ylxw.net -ylyk.com -ylzms.com -ym-trans.com -ym1998.com -ym23.com -ym68.cc -ym75168.com -ymailcampaign.com -ymall.com -ymanz.com -ymaojob.com -ymapp.com -ymark.cc -ymars.com -ymatou.com -ymatou.hk -ymbq301.com -ymcall.com -ymd520.net -ymd88.com -ymeme.com -ymexf.com -ymfhbcj.net -ymfile.com -ymfile01.com -ymgmno.com -ymhudong.com -ymial.com -ymiot.net -ymjm.net -ymkj99.com -ymlfxp.com -ymlinks.com -ymlykj.com -ymm56.com -ymmfa.com -ymmzb.com -ymoxuan.com -ymoxuan.org -ympcb.com -ymq.com -ymraaa.com -ymrcw.vip -yms7.com -ymsteam.com -ymstj.xyz -ymsxq001.xyz -ymsxq002.pw -ymsxq003.pw -ymsxq004.pw -ymsxq005.xyz -ymsxq007.pw -ymsxq009.pw -ymsxq009.xyz -ymsxqcdn.xyz -ymsxqtz01.pw -ymt.com -ymt360.com -ymtc.com -ymtjfxly.com -ymtmt.com -ymvkt.com -ymwl111.com -ymwl234.com -ymxinxi.com -ymxxs.com -ymyun.com -ymyxzz.com -ymzer.com -yn-tobacco.com -yn.com -yn12396.com -yn58.com -yn86.com -ynairport.com -ynb2dca.com -ynbike.net -ynbojie.com -yncuc.net -yncunguan.com -yndaily.com -yndkt.com -yneg-ev.com -yneit.com -ynet.com -ynfabu.com -yngd016.com -ynggzy.com -yngp.com -ynguangsui.com -yngw518.com -yngwyw.org -ynhanfu.com -ynhl.net -ynho.com -ynhouse.com -yni84.com -ynianyongheng.com -ynikon.com -yninfo.com -ynit580.com -ynkcfc.com -ynkmjj.com -ynlibs.com -ynlyfw.com -ynmec.com -ynpxrz.com -ynrayy.com -ynshangji.com -ynshf.com -ynshijian.com -ynsjg.com -ynsjnls.com -ynsqx.com -ynteng.com -yntsg.com -ynwin.com -ynxr.com -ynxxb.com -ynycloud.xyz -ynyes.com -ynyp.com -ynzczs.com -ynzg.org -ynzp.com -ynzy-tobacco.com -yo4399.com -yoagoa.com -yobangbang.com -yobbom.com -yobo360.com -yocajr.com -yocan.net -yochoi.com -yocyxc.com -yodak.net -yodakgroup.com -yodao.com -yodao.net -yodo1.com -yodo1api.com -yoe365.com -yofc.com -yofcjs.com -yofebearing.com -yofijoy.com -yofish.com -yofond.com -yofond.net -yofus.com -yogeev.com -yogorobot.com -yoher.com -yoho.org -yohoblk.com -yohoboys.com -yohobuy.com -yohogirls.com -yoholm.com -yohomars.com -yohoowin.com -yohoshow.com -yohui.com -yojl.net -yojochina.com -yoju360.com -yoju360.net -yoka.com -yokacdn.com -yokagames.com -yokmob.com -yoko66.com -yokong.com -yolanda.hk -yolewa.com -yolexi.com -yolinkmob.com -yoloboo.com -yoloho.com -yomiko.club -yomob.com -yomocode.com -yongaomy.com -yongche.name -yongche.org -yongchengren.com -yonghe1999.com -yongheng.online -yongheng0852.com -yonghongtech.com -yonghuigj.com -yonghuivip.com -yongkao.com -yonglang.co -yonglongdai.com -yongqianbao.com -yongqiaonews.com -yongqischool.net -yongshei.com -yongsheng-sl.com -yongshikj.com -yongsy.com -yongtu.net -yongxinby.com -yongxinggw.com -yongxintex.com -yongzhentang.com -yonho.com -yonlive.com -yonyou.com -yonyouaud.com -yonyoubao.com -yonyouccs.com -yonyoucloud.com -yonyoufinancial.com -yonyoufintech.com -yonyougov.com -yonyouny.com -yonyouoa.com -yonyouscf.com -yonyouup.com -yoo-hn.com -yoo1.com -yoodb.com -yooek.com -yooerjia.com -yoohouse.com -yoojia.com -yooknet.com -yooli.com -yoolin.cc -yoooooooooo.com -yoopu.me -yoouxi.com -yooxun.com -yooxuu.com -yooyoo360.com -yoozai.com -yoozhe.com -yoozword.com -yopai.com -yopoint.cc -yopoint.com -yoptech.com -yopwefun.com -yopwork.com -yoqoo.com -yoqu.net -yorentown.com -york33.com -yoseleather.com -yotta800.com -you-mi.net -you1ke.com -you200.com -youba.com -youba123.com -youban.com -youbangyun.com -youbaoidc.com -youbbs.org -youbeichefu.com -youbh.com -youbian.com -youboy.com -youc.com -youcaizhushou.com -youcao.cc -youcash.com -youcha.net -youchedi.com -youcheyihou.com -youchuhuodong.com -youda8.com -youdaihe.com -youdaili.net -youdaiw.com -youdajx.com -youdanhui.com -youdao.com -youdaojr.com -youdaolvshi.com -youdas.com -youdashidai.com -youdemai.com -youdiancms.com -youdingte.com -youdnser.com -youdu.im -youduzw.com -youdwh.com -youease.net -youedata.com -youeryun.com -youez.com -youfangw.com -youfangzx.com -youfen666.com -youfh.com -youfubao.vip -youfunlab.com -yougababy.com -youganghangmoguan.com -yougaoji.com -yougequn.com -yougou.com -yougou357.com -yougu.tv -youguo.com -youguoquan.com -youguu.com -youhaodongxi.com -youhaosoft.com -youhaosuda.com -youhro.com -youhua.com -youhuaaa.com -youhuafuzhi.com -youhuashu.com -youhugmedia.com -youhundao.com -youhutong.com -youideal.net -youinsh.com -youjiands.net -youjiangzhijia.com -youjiao.com -youjiaus.net -youjiaxiao.com -youjingnetwork.com -youjinyongka.com -youjiuhealth.com -youjoy.tv -youjuke.com -youkake.com -youke.co -youke.com -youke365.site -youkecn.com -youked.com -youkego.com -youkelai.com -youkexueyuan.com -youkongkan.com -youkongwan.com -youku.com -youkua.net -youkudou.com -youkudown.com -youkutv.cc -youlanw.com -youle360.com -youle55.com -youleliwu.com -youlinyouke.com -youlishipin.com -youliv.com -youloft.com -youlong123.com -youlongciqing.com -youlongteng.com -youlu.com -youlu.net -youlu6.com -youluwx.com -youluxe.com -youmacuifen.com -youmai.com -youmaolu.com -youmars.com -youme.im -youmeek.com -youmeng.me -youmenr.com -youmew.com -youmi.net -youmiad.com -youmingdifu.com -youmingdot.com -youminonline.com -youmobi.com -youmodou.com -youmooyouyoung.com -youmuyouxs.com -youneng.com -younet.com -younfor.com -young40.com -youngblog.cc -youngfunding.co.uk -youngor.com -youni.im -younihaokanxiaoshuo.com -youo.net -youoh.com -youonbike.com -youook.com -youpinppt.com -youpinx.com -youpinzhekou.com -youqichuyun.com -youqing8.com -youqinggong.com -youqiwu.com -youqizhan.com -youqo.com -youqu.in -youqu.net -youqudao.com -youranshare.com -yourbin.com -yourcollect.net -yourdream.cc -youren5.com -yourtion.com -youruncloud.com -yousc.com -youscm.com -yousee.com -yousenjiaoyu.com -youshang.com -youshanmeishi.com -yousheng.shop -yousheng8.com -yousheyoujia.com -youshifu.com -youshikoudai.com -youshixiu.com -youshu.cc -youshuba.cc -youshuge.com -yousmyq.com -yousuu.com -yousuyuan.com -youtaidoors.com -youtaidu.com -youtak.com -youthi.com -youtiandi.com -youtianli.com -youtibao.com -youtoart.com -youtoupiao.com -youtu.com -youtuzi.com -youtx.com -youwawa.com -youwei.com -youwinedu.com -youwo.com -youwoxing.net -youwoyou.com -youxi.com -youxi01.com -youxi186.com -youxi369.com -youxi377.com -youxi500.com -youxi528.com -youxi567.com -youxia.com -youxia.org -youxiacg.com -youxiaju.com -youxiake.com -youxiake.net -youxiamotors.com -youxiang03.com -youxiaoad.com -youxiaohou.com -youxiaxiazai.com -youxibao.com -youxibaoku.com -youxicdn.com -youxichaguan.com -youxicheng.net -youxicitang.com -youxicity.com -youxicool.net -youxidaxue.com -youxidr.com -youxiduo.com -youxifan.com -youxigongchang.com -youxigonglue8.com -youxigt.com -youxigu.com -youxiguancha.com -youxih.com -youxihezi.net -youxihun.com -youxij.com -youxike.com -youxila.com -youximao.com -youximt.com -youxin.com -youxingapp.com -youxiniao.com -youxinpai.com -youxipai.com -youxiping.com -youxiputao.com -youxiqiang.com -youxiqun.com -youxishuo.com -youxitexiao.com -youxituoluo.com -youxiuhui.com -youxiula.com -youxiwangguo.com -youxiwugui.com -youxixf.com -youxixj.com -youxizhan.com -youxizhongguo.com -youxizhuang.com -youxuangu.com -youxueke.com -youyacao.com -youyanchu.com -youyannet.com -youyikeji666.com -youyilm.com -youyiqi.com -youyiqiaogou.com -youyizhidao.com -youyo88.com -youyou234.com -youyoudianqi.com -youyouii.com -youyouwin.com -youyuan.com -youyuanapp.com -youyuanw.com -youyudf.com -youyuegame.com -youyueke.com -youyur.com -youyuwei.com -youyuwo.com -youyy.com -youzan.com -youzanyun.com -youzhai.com -youzhan.org -youzhao.com -youzhi.net -youzhicai.com -youzhiwk.com -youzhixueyuan.com -youzhuan.com -youzhuanhua.com -youzi02.com -youzi100.com -youzibank.com -youzibuy.com -youzicoin.com -youzijie.com -youziku.com -youzikuaibao.com -youziqk.com -youzu.com -yovisun.com -yovocloud.com -yovole.com -yovyuan.com -yowooa.com -yoxiha.com -yoximi.com -yoxyok.com -yoya.com -yoyi.tv -yoyiapp.com -yoyo1900.com -yoyojacky.com -yoyojie.com -yoyokko.com -yoyokx.com -yoyone.net -yoyotown.com -yoyou.com -yoyou.net -yoyound.com -yoytang.com -yozodcs.com -yozodoc.com -yozodocs.com -yozooffice.com -yozosoft.com -yozrun.com -yozsc.com -yp007.net -yp1151.com -yp900.com -ypank.com -ypgyyq.com -yph-shop.com -yphuifu.com -ypicw.com -ypjiameng.com -ypk559.com -yplady.com -yplmzx.com -ypmob.com -yppp.shop -ypppt.com -ypshengxian.com -ypstech.com -ypxiaoshuo.com -ypzdw.com -ypzhushou.com -yq027.com -yq1751.com -yq51.com -yq6.cc -yqb.com -yqb920.com -yqbank.com -yqbdt.com -yqbimg.net -yqfml.com -yqh.com -yqh5.com -yqhapp.com -yqhlm.com -yqhy.org -yqhyy.com -yqibook.com -yqie.com -yqjsj.com -yqjtgs.com -yqkk.link -yqkqw.com -yqmb001.com -yqmh.com -yqphh.com -yqptzx.com -yqqlm.vip -yqsbz.com -yqscpt.com -yqsns.com -yqtc.com -yqtxzm.com -yqwyx.xyz -yqxhl.com -yqxiuyoung.com -yqxs.cc -yqyanhong.com -yqzww.la -yqzww.net -yr-info.com -yrcbank.com -yrgu.com -yrmpay.com -yrom.net -yruan.com -yrucd.com -yrw.cc -yrw.com -yrwy.com -yryz.com -yrzjw.com -ys.cc -ys001.com -ys137.com -ys168.com -ys1688.cc -ys2345.com -ys666888.com -ys7.com -ys720.com -ys8.com -ysaedesign.com -ysali.com -yscase.com -yscb.net -ysch.cc -yscq.com -ysdui.com -yse360.cc -ysedu.com -yseeker.com -ysepay.com -ysext.com -ysgtg.com -ysgushi.com -yshp.net -yshsports.com -yshuoba.com -yshyqxx.com -ysicing.me -ysicing.net -ysiis.com -ysjgames.com -ysjkgl.com -ysjpin.com -yslcw.com -yslqo.com -ysmiji.com -ysmine.com -ysoow.com -ysp68.com -ysplay.com -ysppj.com -ysptuan.com -ysrh.com -ysshipu.com -yssm.org -yssm.tv -yssp88.com -ysstech.com -ysszzs.com -ysszzx.com -yst100.net -yst3.com -ysten.com -ystinbox.com -ysug.com -ysw365.com -ysw366.com -ysw68.com -yswebportal.cc -yswh.com -yswlgame.com -yswliot.com -yswpq.com -yswxcn.com -ysx8.com -ysx8.net -ysx8.vip -ysx9999.com -ysxs8.com -ysyhljt.vip -ysyycv.com -yszx99.com -yszyun.com -yszyz.com -yszzlt.com -yt1998.com -yt69.com -yt698.com -yta-tech.com -ytaomb.com -ytaotao.net -ytb.io -ytbbs.com -ytbfilm.com -ytcbh.com -ytcj.com -ytcm.net -ytcos.com -ytcutv.com -ytdaily.com -ytdsdz.com -ytesting.com -ytet.org -ytfuzhen.com -ytghnb.com -ythouse.com -ytjcpj.com -ytkaituo.com -ytlangchao.com -ytlh120.com -ytlvbao.com -ytmedia.tv -ytmer.com -ytnetgame.com -ytoexpress.com -ytoglobal.com -ytop8.com -ytoxl.com -ytpp.com -ytrenyu.com -ytsanchuan.com -ytsjw.net -ytszg.com -ytsznyy.com -ytud.net -ytv3.one -ytxedu.com -ytxsc.com -ytxun.com -ytzhihui.com -ytzq.com -yu-fish.com -yu.gs -yu1u.org -yu72.com -yuanbao.com -yuanbaobaoxian.com -yuanbaohui.com -yuanbin.me -yuancailiao.net -yuancdn.com -yuancefund.com -yuanchengxiezuo.com -yuanchuangchi.com -yuandi.com -yuandiancredit.com -yuandongjixie.com -yuanfeng021.com -yuanfengyazhu.net -yuanfr.com -yuanfudao.biz -yuanfudao.com -yuanfudao.ws -yuangongbao.com -yuanhaitaiji.com -yuanhuikai.com -yuaniis.com -yuanjie.org -yuanjisong.com -yuanjoy.com -yuanjubieshu.com -yuanlai.com -yuanlian365.com -yuanliao.info -yuanlin.com -yuanlin365.com -yuanlin8.com -yuanma.net -yuanmadian.com -yuanmait.com -yuanmas.com -yuanmatao.com -yuanmawu.net -yuanqi46.com -yuanqiao.net -yuanqingsh.com -yuanqitu.com -yuanrenbang.com -yuanrengu.com -yuanrenxue.com -yuanseedu.com -yuansfer.com -yuanshanbx.com -yuanshen.com -yuanshichang.com -yuanshihui.com -yuansouti.com -yuanss.com -yuantengfei.net -yuantengfei.org -yuantiku.com -yuantoushuo.com -yuantu8.com -yuantutech.com -yuanu.com -yuanwanw.com -yuanxifu.net -yuanxuxu.com -yuanyi.biz -yuanyoutao.com -yuanzhexi.com -yuanzidai.com -yuanzige.com -yuanzun.fun -yuanzun5200.com -yuanzun888.com -yuanzunxs.cc -yuapt.com -yubangweb.com -yubnjy.com -yubodata.com -yubohr.com -yuboinfo.com -yubosun.com -yuboyun.com -yucccc.com -yuchai.com -yuchen360.com -yuchengwang.com -yuchenjf.com -yuchenw.com -yuchk.com -yuchu3d.com -yuchuantech.com -yucl.com -yucongding.com -yucoolgame.com -yucui.org -yudanglasses.com -yudaocha.com -yudi.com -yudianda.com -yudiangame.vip -yudouyudou.com -yudwl.com -yue365.com -yue7.com -yuebagu.com -yuebingcheng.com -yuebooemt.com -yuecheng.com -yuedaoec.com -yuedisk.com -yuedu.pro -yuedufang.com -yueduji.com -yuedun.wang -yuedunovel.com -yueduwen.com -yuedyue.com -yuego.net -yuegowu.com -yuehuzhi.com -yueimg.com -yueji.com -yuejianzun.xyz -yuejiayan.com -yuejiewangluo.com -yuejuanbao.com -yuekenet.com -yuekeyun.com -yuelong.info -yueloo.com -yuelu.net -yuelun.com -yueme.tv -yuemei.com -yuenei.com -yuenshui.com -yuenwooping-truelegend.com -yuepaijia.com -yuepaow.net -yuepinwang.com -yueqi.com -yueqiquan.com -yueqiweixiu.com -yueque.com -yuer.com -yuerbao.com -yueru.com -yuesir.com -yuesuoping.com -yuetu.tech -yuetuvip.net -yueweimusic.com -yuewen.com -yuexianck.com -yuexing.com -yuexingfurniture.com -yuexinli.com -yuexinyouxi.com -yuexirc.com -yuexunedu.com -yueyaa.com -yueyanglou.com -yueyat.net -yueyear.com -yueyin99.com -yueyouxs.com -yueyq.com -yueyu114.com -yueyuanzhiye.com -yueyuecms.com -yueyues.com -yueyuevip.com -yueyuez.com -yueyuxuan.com -yueyuzhushou.com -yueyv.com -yuez.me -yufengyangfan.com -yufu365.com -yufuid.com -yugasun.com -yuguo.us -yuguod.com -yuguozw.com -yuheii.com -yuheng.tech -yuhongsl.com -yuhou.com -yuhuijob.com -yuiapi.com -yuike.com -yujia.com -yujiahui.com -yujie.pro -yujunjie.com -yujunren.com -yujzw.com -yukhj.com -yukicomic.com -yukiimall.com -yukuai.com -yukunweb.com -yul8.com -yule116.com -yule263.com -yuledaily.com -yulefm.com -yulehezi.com -yuleie.com -yulejiaodian.com -yulekan.com -yuleredian.com -yuleres.com -yuli.be -yuliechina.com -yulinapp.com -yulingtianxia.com -yulingw.com -yulongjun.com -yuloo.com -yulore.com -yulorepages.com -yulu1.com -yulu5.com -yulucn.com -yuluzhongde.com -yumaoshu.com -yumchina.com -yumenikki.info -yumi.cc -yumi.com -yumiaomiao.com -yumimobi.com -yuming.com -yumingguwen.com -yumingwan.com -yumisp7.com -yumixitong.com -yumstone.com -yun-gu.com -yun-idc.com -yun-img.com -yun-jinrong.com -yun-live.com -yun.pm -yun123.com -yun61.com -yunannet.com -yunaq.com -yunarm.com -yunaw.com -yunba.io -yunban.com -yunbang.net -yunbangcheng.com -yunbei.com -yunbeitech.com -yunbiao.tv -yunbiaosoft.com -yunbiaowulian.com -yunbiji.com -yunbook.vip -yunbook123.com -yuncai5.com -yuncaijing.com -yuncaolll.com -yuncdn.bid -yuncdn263.com -yuncdndun.com -yunceng.com -yuncheng.com -yunchong-powder.com -yunchou.com -yuncii.com -yuncode.net -yunda56.com -yundaex.com -yundangan.com -yundaohuodong.com -yundasys.com -yundianjia.com -yundianseo.com -yundiantech.com -yundns.vip -yundongfang.com -yundonghao.com -yundongit.com -yundousoft.com -yundui.cc -yunduimedia.com -yundun.com -yundun.shop -yunduncdn.com -yunduncdns.com -yunduncname.com -yundunddos.com -yundundns.com -yundunjiasu.com -yunduns.com -yundunwaf.com -yundunwaf1.com -yundunwaf2.com -yundunwaf3.com -yundunwaf4.com -yundunwaf5.com -yunduocrm.com -yunduoke.net -yunduoketang.com -yundzh.com -yunews.net -yunfabiao.com -yunface.com -yunfaka.com -yunfalv.com -yunfan.com -yunfancdn.com -yunfandns.com -yunfangtan.com -yunfannet.com -yunfei89.com -yunfutech.com -yungangbj.com -yungao-ssp.com -yungao.mobi -yungongchang.com -yungoumi.com -yungouos.com -yungousj.net -yunguajibao.com -yungujia.com -yunhaicangshu.com -yunhaike.com -yunhaiqiao.com -yunhedata.com -yunheit.com -yunheka.com -yunhesanwan.com -yunhetong.com -yunhou.com -yunhuasheji.com -yunhucdn.com -yunhulu.org -yunhuotong.net -yunhuzx.com -yunifang.com -yunify.com -yunio.com -yunip.com -yunipo.com -yunji.com -yunjiale.net -yunjian.com -yunjiasu-cdn.net -yunjiasu.com -yunjiasu360.com -yunjiasu666.com -yunjiazheng.com -yunjifarm.com -yunjiglobal.com -yunjiweidian.com -yunjix.com -yunjuwuliu.com -yunkangdoctor.com -yunkawulian.com -yunke.com -yunkeji.com -yunkezan.com -yunkongpingban.com -yunlebao.com -yunlianip.com -yunlianvps.com -yunlibeauty.com -yunlie.net -yunlietou.com -yunliketech.com -yunmai.com -yunmayi.com -yunmd.net -yunmeipai.com -yunmengnet.com -yunmiao.co -yunmishu365.com -yunmoseo.com -yunmoxing.com -yunnandns.com -yunnao.com -yunnex.com -yunnut.com -yunos-tv.com -yunos.com -yunpan.com -yunpankk.com -yunpansou.cc -yunpanx.com -yunpanziyuan.com -yunpei.com -yunpian.com -yunpiao.net -yunpigai.com -yunplus.io -yunpp.com -yunqi.org -yunqi2050.com -yunqiandai.com -yunqikecrm.com -yunqingugm.com -yunqishi.net -yunque360.com -yunque365.com -yunrg.com -yunrongu.com -yunrouter.com -yuns1.net -yunsd.net -yunser.com -yunshan.net -yunshangc.com -yunshanmeicai.com -yunshiketang.xyz -yunshipei.com -yunshipei.net -yunshouji123.com -yunshow.com -yunshuxie.com -yunshuyuan.cc -yunsom.com -yunsong.com -yunstu.net -yunsuan.org -yunsuanzi.com -yunsuo.com -yuntaigo.com -yuntask.com -yuntemai.com -yuntianti.com -yuntingiot.com -yuntongbu.com -yuntongcloud.com -yuntongtech.com -yuntongxun.com -yuntouxiang.com -yuntu.io -yuntuds.com -yunvm.com -yunvs.com -yunwangke.com -yunwei8.com -yunweibang.com -yunweipai.com -yunwenxue.com -yunwins.com -yunwuxian.net -yunxi.tv -yunxi10.com -yunxin123.com -yunxindai.com -yunxindns.com -yunxinfa.com -yunxinshi.com -yunxiu.com -yunxs.com -yunxuetang.com -yunxzb.com -yunyi-dd.com -yunyijk.com -yunyin.org -yunying166.com -yunyingdashu.com -yunyingketang.com -yunyingmiao.com -yunyingpai.com -yunyingxuetang.com -yunyingzhe.com -yunyingzhinan.com -yunyis.com -yunyoufeitian.com -yunyouni.com -yunyu123.com -yunyue.cc -yunyuh5.com -yunzhan365.com -yunzhangfang.com -yunzhanggui.net -yunzhanghu.com -yunzhanxinxi.com -yunzhifankeji.net -yunzhijia.com -yunzhitai.com -yunzhixiyou.com -yunzhizao.net -yunzhu100.com -yunzmall.com -yunzongnet.com -yunzujia.com -yunzz.net -yupiao.info -yupoo.com -yupsky.com -yupu.com -yuqianshu.com -yuqiaolong.com -yuqinge.com -yuquanhosp.com -yuque.com -yureen.com -yurenty.com -yuriimg.com -yusa.me -yushanapp.com -yushengny.com -yushexuetang.com -yushin88.com -yushiquanyang.com -yushu5.com -yushuha.com -yushunews.com -yusi.com -yusi.tv -yusi123.com -yusidunzc.com -yutangqianxdc.com -yuteng.site -yutian.cc -yutianedu.com -yutong.com -yutuwo.com -yuu1.com -yuuboo.net -yuucn.com -yuudnn.com -yuwan-game.com -yuwandian.com -yuwanshe.com -yuweixian.com -yuwell.com -yuwellgroup.com -yuwen360.com -yuwenchaoshi.com -yuwenmi.com -yuwennews.com -yuwenxiandaihua.com -yuxianall.com -yuxiangrc.com -yuxiaolung.com -yuxiaor.com -yuxinba.com -yuxinews.com -yuxingqiu.com -yuxinzhilian.com -yuxip.com -yuxitech.com -yuxungs.com -yuxunzy.com -yuyanpingce.com -yuyantang168.com -yuyicai.com -yuyin.tv -yuyu.com -yuyuangewh.com -yuyue111.com -yuyuema.com -yuyueshop.com -yuyuhunter.com -yuyuntech.com -yuzeli.com -yuzhaimedia.com -yuzhainan.com -yuzhenhai.com -yuzhike.com -yuzhong.net -yuzhongxxw.com -yuzhoutuofu.com -yuzhouwan.com -yuzhua.com -yuzhuagame.com -yuzhuan.com -yuzhulin.com -yuzi.net -yuzzl.com -yveqi.com -yvv.in -yw11.com -yw2005.com -yw40.vip -ywart.com -ywbank.com -ywcbs.com -ywcec.com -ywdier.com -ywditan315.com -ywec.net -ywg7.com -ywies-shpd.com -ywindex.com -ywinf.com -ywky.org -ywlist.com -ywlm.net -ywnds.com -ywnz.com -ywopt.com -ywork.me -ywsawei.com -ywshouyou.com -ywsoftware.com -ywtd.xyz -ywtlfishing.com -ywtrzm.com -ywtx.cc -ywxue.com -ywxzz.com -ywy7.com -ywyanxing.com -yx-g.com -yx-life.com -yx-s.com -yx-s.net -yx.com -yx.rs -yx0599.com -yx090.com -yx10011.com -yx129.com -yx129.net -yx231.com -yx7088.com -yx74.com -yxbao.com -yxbhhbkj.com -yxbox91.com -yxbuluo.com -yxcax.com -yxcc.net -yxcity.com -yxcshui.com -yxcuv.com -yxd1969.com -yxdaily.com -yxdd.com -yxdgc.com -yxdh.com -yxdimg.com -yxdoc.com -yxdown.com -yxdr.com -yxdsgs.com -yxduo.com -yxdwj.com -yxecg.com -yxen.net -yxfw.com -yxfwai.com -yxhenan.com -yxhhdl.com -yxhi.com -yxhqj.com -yxi.cc -yximgs.com -yxin18.com -yxinbao.com -yxit.net -yxixy.com -yxjedu02.com -yxjia.com -yxke12.com -yxkfw.com -yxkjlcd.com -yxlady.com -yxlady.net -yxlink.com -yxlmdl.net -yxm.com -yxmarkets.com -yxmspx.com -yxn.fun -yxool.com -yxou.com -yxpjw.net -yxpk.net -yxpopo.com -yxptfs.com -yxqiche.com -yxrank.com -yxrb.net -yxsc33.com -yxsea.com -yxshgwjy.com -yxsos.com -yxss.com -yxsss.com -yxt-tattoo.com -yxt.com -yxt521.com -yxtvg.com -yxwoo.com -yxxurl.com -yxyfhgc.com -yxyzjx.com -yxz.me -yxzxgy.com -yy-xjy.com -yy.com -yy138.com -yy2169.com -yy2hd.com -yy4080.com -yy591.com -yy6080.org -yy845.com -yyangmob.com -yyasp.net -yybox.cc -yycaf.net -yyccia.com -yycec.com -yyclouds.com -yyclub.org -yycoin.com -yycqc.com -yycro.com -yydbzz.com -yydfwl.com -yydidai.com -yyds.fans -yydzh.com -yyearth.com -yyestar.com -yyetss.com -yyf5.com -yyfangchan.com -yyfax.com -yyfdcw.com -yyfq.com -yyfsb.com -yyg.com -yygjuu.club -yygold.com -yygrammar.com -yygzs.com -yyh.co -yyh.la -yyh2.com -yyhao.com -yyhh.com -yyhhaa.com -yyhn365.com -yyhomer.com -yyjzt.com -yyk100.com -yyk2.com -yykaoo.com -yykepu.com -yykj.org -yylending.com -yylm.org -yymedias.com -yyming2.com -yymoban.com -yyny.me -yypcb.com -yypm.com -yypt.com -yyq.com -yyrtv.com -yystatic.com -yysub.net -yysweb.com -yysycn.com -yytad.com -yytcdn.com -yytek.com -yytgjjk.com -yytingli.com -yyuap.com -yyuasa.com -yywlsj.com -yywords.com -yywt.online -yywz123.com -yywzw.com -yyx168.com -yyxfzy.com -yyxscn.com -yyxt.com -yyxtao.com -yyxwzx.com -yyxx100.com -yyxxgame.com -yyxxgameyw.com -yyy5414.com -yyyeee.com -yyyy.games -yyzai.com -yyzsoft.com -yyzw.com -yyzyytj.com -yyzzsem.com -yz-iot.com -yz-show.com -yz061.com -yz063.com -yz168.cc -yz360.cc -yz3g.net -yz868.com -yzbank.com -yzbo.tv -yzbqzx.net -yzcyjy.com -yzdir.net -yzdn.net -yzfang.com -yzfc8.com -yzfjy.com -yzgjgs.com -yzgnet.com -yzgttm.com -yzhbw.net -yzhli.com -yzhtidc.com -yzintelligence.com -yzinter.com -yzipi.com -yzjbh.com -yzjjw.net -yzjsxy.com -yzkimage.com -yzkjpcb.com -yzmcms.com -yzmcxx.com -yzmg.com -yzmiao03.com -yzmjw.com -yzmoney.com -yznano.com -yznn.com -yzpetfood.com -yzpsb.com -yzrb.com -yzrom.com -yzs.com -yzspdq.com -yzt-tools.com -yztcdn.com -yzwb.com -yzwb.net -yzzks.com -yzzs.cc -yzzzn.com -z-bank.com -z-index.cc -z-inn.com -z-zhuji.com -z.hr -z0.cc -z01.com -z0ukun.com -z1233.com -z12345.com -z2sci.com -z316.com -z3quant.com -z4bbs.com -z4m3.com -z5a.com -z5encrypt.com -z5z4.com -z701.com -z7xz.com -z7ys.com -z8q.cc -za-doctor.com -zablog.me -zac1993.com -zackku.com -zackxu.com -zaduonews.com -zadzs.com -zaeke.com -zahtb.com -zahuibaike.com -zahuishi.com -zai-art.com -zaibei.net -zaichengdu.com -zaidu.la -zaidudu.net -zaiduu.com -zaih.com -zaihuangshi.com -zaijia.com -zaijiawan.com -zailaowo.com -zailouxia.com -zaiminglvsuo.com -zainanjing365.com -zaisd.com -zaitong.net -zaitongxiang.com -zaitouwang.com -zaiwai.com -zaixian-fanyi.com -zaixianfanyi.com -zaixianjianli.com -zaixiankan.net -zaixiankaoshi.com -zaixs.com -zaixuchang.com -zaiyulin.com -zaiyunli.com -zaizai8.com -zaizaofa.com -zakdy.com -zallcn.com -zallfuhui.com -zallgo.com -zallimg.com -zalljinfu.com -zampda.net -zampdmp.com -zampdsp.com -zamplink.net -zamplus.com -zampshare.com -zamptrak.com -zan-shang.com -zanba.com -zanbai.com -zangaifamily.com -zangdiyg.com -zanghaihuatxt.com -zangx.com -zanpic.com -zantainet.com -zanyiba.com -zaobang.com -zaoche168.com -zaodao.net -zaodin.com -zaodula.com -zaofabiao.com -zaofacai.com -zaogai.com -zaojiance.com -zaojiance.net -zaojiao.com -zaojiu.com -zaojv.com -zaojvdashi.com -zaole.net -zaopang.com -zaoshu.so -zaowandushu.com -zaowannews.com -zaoxu.com -zaoyang.org -zaoyouxi.com -zaoys.com -zaozhuanggo.com -zaozuo.com -zastatic.com -zasv.com -zasv.net -zat.cc -zatan.com -zatan8.cc -zatest.com -zatxt.com -zazhi.com -zazhiboss.com -zazhipu.com -zazsz.com -zb-kc.com -zb1.org -zb580.tv -zb7.com -zb8.com -zbai.net -zbapk.com -zbbar.net -zbcrw.com -zbfilm.com -zbfjsj.com -zbgedu.com -zbgl.net -zbgscm.com -zbhouse.com -zbii.com -zbintel.com -zbird.com -zbj.com -zbjdev.com -zbjdr.com -zbjiangsu.com -zbjimg.com -zbjsaas.com -zbjwork.com -zbkszx.net -zbling.com -zblogcn.com -zbluqian.com -zblzm.xyz -zbmcjx.com -zbmx666.com -zbnews.net -zbnxs.com -zbopr.net -zbqlm.com -zbqzy.com -zbrushcn.com -zbuhe.com -zbusa.com -zbwbbs.com -zbwdj.com -zbwg.cc -zbxsoft.com -zbxyh.com -zbytb.com -zbyz.net -zbz.com -zbzaixian.com -zbzdm.com -zbzhandian.com -zbzmtbk.com -zbzw.com -zbzw.la -zc-ha.com -zc-jk.com -zc0.net -zc0317.com -zc181.com -zc532.com -zcaijing.com -zcbjs.com -zcccc.com -zcdog.com -zcdsp.com -zcfc.com -zcfccs.com -zcff.net -zcfirst.com -zcfuhua.com -zcfy.cc -zcgsfy.com -zciii.com -zcimg.com -zcitidc.com -zcitwf.com -zciv.com -zcjxedu.com -zclock.xyz -zcmlc.com -zcmorefun.com -zcoa365.com -zcobrand.com -zcodc.com -zcom.com -zcoming.com -zcooler.com -zcosz.com -zcphp.com -zcppt.com -zcqh.com -zcqss.com -zcread.com -zcry007.com -zcs.cc -zcsbbs.com -zcsblog.com -zcskj.com -zctl.net -zctx.com -zcwlsc.com -zcwxjx.com -zcwz.com -zcxn.com -zcycdn.com -zcyiyao.com -zczj.com -zczy001.com -zd-ddos.com -zd-power.com -zd.hk -zd200572.com -zdao.com -zdaye.com -zdb.io -zdcj.net -zdcjw18.com -zddhr.com -zdding.com -zddream.com -zdexe.com -zdface.com -zdfans.com -zdfans7.com -zdfx.net -zdh168.com -zdh1909.com -zdhaitao.com -zdhkyw.com -zdhnayr.com -zdic.net -zdjyj.com -zdkqyy.com -zdlife.com -zdlink.com -zdlpk.net -zdmimg.com -zdmr.net -zdnscloud.biz -zdnscloud.com -zdnscloud.info -zdnscloud.net -zdomo.com -zdoz.net -zdpeanut.com -zdpvt.com -zdrcrx.com -zdrcw.com -zdsee.com -zdslb.com -zdsr.net -zdwang.com -zdwfy.com -zdworks.com -zdwx.net -zdyrs.com -zdz.la -zdzdm.com -zdzwtesting.com -zdzxtech.com -ze13.com -ze5.com -zeakr.com -zealer.com -zeali.net -zealquest.com -zealsafe.net -zebred.com -zechoriah.com -zechunbengye.com -zedukm.com -zeelis.com -zeesin.com -zego.im -zeguoren.com -zeidei.com -zeisp.com -zeixihuan.com -zejiri.net -zeju.com -zelininfo.com -zelinonline.com -zemismart.com -zemuo.com -zengdefei.com -zengjunpeng.com -zengrong.net -zenha.net -zenixauto.com -zenoven.com -zensakura.com -zentao.net -zentaoms.com -zentaopm.com -zep8.com -zeperd.com -zeq366.net -zeroac.com -zerobreeze.com -zerobyw.com -zerocollege.com -zerogfans.com -zerokeeper.com -zeroling.com -zeruns.tech -zerustech.com -zesidasi.com -zesmob.com -zeststore.com -zetast.com -zeus.dl.playstation.net -zeuux.com -zeuux.org -zexiaoqiao.com -zeyi.cc -zeyouquan.com -zeze.com -zf-8.com -zf3d.com -zfancy.net -zfboke.com -zfcm.net -zfdmkj.com -zff888.com -zfhz.org -zfimg.com -zfkjgw.com -zfl9.com -zfowed.com -zfrmt.com -zfrontier.com -zfsc.com -zfsoft.com -zft.com -zfvnet.com -zfw.me -zfw.net -zfwimg.com -zfyml.com -zg-import.com -zg-imsoft.com -zg114w.com -zg163.net -zg3721.com -zg388.com -zg3china.com -zg45.net -zga81.com -zgaxr.com -zgazxxw.com -zgbenrun.com -zgbigart.com -zgbjyx.com -zgbmcl.com -zgboke.com -zgbywl.com -zgbzad.com -zgc-bigdata.org -zgc-dsa.org -zgcahpw.com -zgcbank.com -zgcbb.com -zgcbzs.com -zgcdiy.com -zgchawang.com -zgchawang.net -zgchrx.com -zgcicc.com -zgcindex.org -zgcjm.org -zgcjpx.com -zgcmlm.com -zgcsa.org -zgcshzz.org -zgcswhcbw.com -zgcups.com -zgddmx.com -zgddwhzb.com -zgdsw.com -zgdwzp.com -zgdxhbkf.com -zgdydyxh.com -zgdzqw.com -zgeci.com -zgflzxzx.org -zgfwgj.com -zgfxnews.com -zgfznews.com -zgg.com -zgg55.com -zggbdsw.net -zggcks.com -zggdjj.com -zggjgy.com -zgglkx.com -zgglyun.com -zggonglue.com -zggqzp.com -zggx.net -zggys.com -zghanlv.com -zghde.com -zghhzx.net -zghotnews.com -zghouse.net -zghtcd.com -zghtedu.com -zghtqk.com -zgjcks.com -zgjf168.com -zgjhjy.com -zgjiemeng.com -zgjinsu.com -zgjjzyjy.org -zgjm.net -zgjm.org -zgjsks.com -zgjtb.com -zgjxcad.com -zgjxf.com -zgjyjj.com -zgkao.com -zgkashi.com -zgkawah.com -zgkfzz.com -zgkjb.com -zgkjcx.com -zgkjw.org -zgkjxww.com -zgkjzx.com -zgkqw.com -zglb.org -zglcyx.com -zgldgbsdshyjy.com -zglipin.com -zgljl2012.com -zglkq.net -zglscom.com -zglww.net -zglxw.com -zglzb.com -zglzh.com -zgmcxw.com -zgmdbw.com -zgmsbw.com -zgmsbweb.com -zgmxl.com -zgncjr.com -zgnfys.com -zgnhzx.com -zgnt.net -zgong.com -zgpingshu.com -zgpj.net -zgpts.com -zgpyhst.com -zgpzz.com -zgqkk.com -zgqw.com -zgqyhzfy.com -zgqywhcbw.com -zgqyzxw.com -zgrdnews.com -zgrlm.com -zgruisai.com -zgsc123.com -zgsclp.com -zgsd.net -zgserver.com -zgshici.com -zgshifu.com -zgshige.com -zgshjj.com -zgshoes.com -zgshq.com -zgshxfw.com -zgsj.com -zgslb.net -zgsmmhw.com -zgsof.com -zgsssss.com -zgsta.com -zgswcn.com -zgsydw.com -zgsynews.com -zgtcqw.com -zgtianqi.com -zgtjq.com -zgtlgs.com -zgtsm.com -zgtuku.com -zgtxw.com -zgtygg.com -zgtzhb.com -zgui.com -zguonew.com -zgw.com -zgwangzhan.com -zgweimeng.com -zgwenku.com -zgwgfw.com -zgwhfe.com -zgwhw.com -zgwlmusic.com -zgwrx.com -zgwt.co -zgwxbbs.com -zgwygl.org -zgxcfx.com -zgxf.org -zgxk.org -zgxqwqh.com -zgxrjy.com -zgxue.com -zgxyzx.net -zgycgc.com -zgycsc.com -zgyeda.com -zgyey.com -zgygsy.com -zgyhys.org -zgyingtong.com -zgyinpin.com -zgyizw.com -zgylqy.com -zgyongxin.com -zgys.net -zgyssyxh.com -zgystsd.com -zgyxsw.org -zgyygl.com -zgzcw.com -zgzcwy.com -zgzfwm.com -zgzjzzs.com -zgzkw.com -zgznh.com -zgzsrc.com -zgzwl.com -zgzy.net -zgzyqccj.com -zgzyqcgw.com -zgzzs.com -zh-itone.com -zh.cc -zh30.com -zh51home.com -zhai14.com -zhai6.com -zhaiba.com -zhaidou.com -zhaifu.cc -zhaifu.co -zhaifu.tv -zhaihai.com -zhaiiker.com -zhaikexueyuan.com -zhaimansky.com -zhainan168.com -zhainanba.net -zhainanbaw.com -zhainanfulishe.com -zhainanhuayuan.com -zhaiqianfeng.com -zhairport.com -zhaisiji.net -zhaixiaoniu.com -zhan.com -zhandaren.com -zhandi.cc -zhandodo.com -zhang.ge -zhang365.com -zhang6.net -zhangchi.art -zhangdanyang.com -zhangdongshengtech.com -zhangdongxuan.com -zhangdu5.net -zhangdu520.com -zhange8.com -zhangfensir.com -zhanggang.net -zhanggao.club -zhanggaoyuan.com -zhanggee.com -zhanghaijun.com -zhanghongliang.com -zhanghuanglong.com -zhangjh.me -zhangjiaoshou.net -zhangjiexiong.com -zhangjinkun.com -zhangjunbk.com -zhangkai.red -zhangle.com -zhangli2015.com -zhangliziyun.com -zhangluya.com -zhanglvtong.com -zhangmen.com -zhangmen.org -zhangmenkid.com -zhangnan.xyz -zhangnq.com -zhangqiaokeyan.com -zhangqiongjie.com -zhangqiu.cc -zhangrunnan.com -zhangsenhao.com -zhangshengrong.com -zhangtielei.com -zhangtu.com -zhangu365.com -zhangweijie.net -zhangwenli.com -zhangxiaoyang.me -zhangxinhuichuan.com -zhangxinhulian.com -zhangxinxu.com -zhangyin.org -zhangyongjun.com -zhangyoubao.com -zhangyoushijie.com -zhangyu.com -zhangyue.com -zhangyue.net -zhangyue01.com -zhangyue02.com -zhangyue03.com -zhangyugg.com -zhangyulive.com -zhangyunling.com -zhangyuqing.me -zhangzhao.me -zhangzhengfan.com -zhangzhongpei.com -zhangzhongwang.com -zhangzhongyun.com -zhangzidao.com -zhangzifan.com -zhangziran.com -zhangzishi.net -zhangzs.com -zhanh.com -zhanhi.com -zhanjindong.com -zhankoo.com -zhanlingol.com -zhanmazj.com -zhanqi.net -zhanqi.tv -zhanqitv.com -zhanqu.im -zhanshaoyi.com -zhanshiren.com -zhanst.com -zhansu.com -zhantai.com -zhantuo.com -zhanxingfang.com -zhanyicg.com -zhanyouyun.com -zhanzhang.net -zhanzhangfu.com -zhaoapple.com -zhaobeidaxiao.com -zhaobeijing.com -zhaobuxiu.com -zhaocaibb.com -zhaocaihr.com -zhaocait.com -zhaocaiyan.com -zhaochafa.com -zhaochangjixie.com -zhaocheyun.com -zhaoda.net -zhaodanji.com -zhaodatu.com -zhaodll.com -zhaofangbang.net -zhaofanguan.com -zhaofile.com -zhaofinger.com -zhaogang.com -zhaogangimg.com -zhaogepu.com -zhaoguoshu.net -zhaohaipeng.com -zhaoj.in -zhaojiao.net -zhaojiaoan.com -zhaojiaxiao.com -zhaokaifeng.com -zhaokao.net -zhaokeli.com -zhaokuaizhao.com -zhaoliangji.com -zhaoliming.net -zhaolongedu.com -zhaomei.ink -zhaomengtu.com -zhaoming.biz -zhaomxd.com -zhaoneibuquan.com -zhaoniupai.com -zhaoonline.com -zhaopianzhibo.com -zhaopin.com -zhaopin668.com -zhaopinbao.me -zhaopingou.com -zhaopins.com -zhaoqianwang.com -zhaoqt.net -zhaoshang.net -zhaoshang100.com -zhaoshang800.com -zhaoshangbang.com -zhaoshangbao.com -zhaoshangdai.com -zhaoshayou.com -zhaosheng.com -zhaosheng365.com -zhaosifang.com -zhaosw.com -zhaotonghang.com -zhaouc.com -zhaouc.net -zhaowenxishi.com -zhaowofanyi.com -zhaowuding.net -zhaoxi.net -zhaoxi.org -zhaoxiaoshuo.com -zhaoxin.com -zhaoxitech.com -zhaoxiuyuan.com -zhaoyanblog.com -zhaoyangmao.com -zhaoyangsem.com -zhaoyangxueyuan.com -zhaoyaojd.com -zhaoyasai.com -zhaoyb.net -zhaoyingtian.com -zhaoyinqian.com -zhaoyuan365.com -zhaoyun.com -zhaozhanxu.com -zhaozhaoqu.com -zhaozhishi.com -zhaozongjie.com -zhatoufa.com -zhbit.com -zhblawyer.com -zhcf001.com -zhcw.com -zhdba.com -zhdclink.com -zhdgps.com -zhdzsw.com -zhe.com -zhe28.com -zhe4000.com -zhe800.com -zhebei.com -zhebiekeji.com -zhedakaoyan.com -zhefengle.com -zhejiangmuseum.com -zhejiangqinghe.com -zhejiangweiniu.com -zhejie.com -zhekouo.com -zhelaoda.com -zheli.com -zheliyangsheng.com -zhen-ao.com -zhen.com -zhenai.com -zhenaoyaoye.com -zhenbi.com -zhenbizi.com -zhenchenglong.com -zhending-chicken.com -zhenfang.me -zhenfund.com -zheng800.com -zhengcaimall.com -zhengcaishangcheng.com -zhengdabm.com -zhengdaotang.com -zhengdichaiqian.com -zhengding.cc -zhengfenduojin.com -zhengguzhishen.com -zhenghangyq.net -zhenghemold.com -zhengjia.com -zhengjiantong.com -zhengjicn.com -zhengjie.com -zhengmeng.net -zhengpinle.com -zhengqingsong.com -zhengruioi.com -zhengshihf.com -zhengshuku.com -zhengtoon.com -zhenguo.com -zhengwutong.com -zhengxiaoling.com -zhengxinbao.com -zhengyaing.win -zhengyee.com -zhengyexing.com -zhengyifeng.com -zhengyinyong.com -zhengyounet.com -zhengzai.tv -zhengzhoubus.com -zhengzhoulvxing.com -zhengzi.me -zhengzihui.com -zhenhaotao.com -zhenhaotv.com -zhenhong56.com -zhenhuajn.xin -zhenhuan888.com -zhenimg.com -zhenjiahuo.com -zhenjiang-marathon.com -zhenleishan.com -zhenlian.online -zhenlinxin.com -zhenlishen.com -zhenniu24.com -zhenpin.com -zhenren.com -zhenrongbao.com -zhensoushu.com -zhentan.la -zhenwu.com -zhenxian.fm -zhenxingkuangchanpin.com -zhenyouhuo.com -zhenyouliao.com -zhenyouweb.com -zhenzanzixun.com -zhepic.com -zhesui.com -zhetao.com -zhetian.org -zheurl.com -zhexi.tech -zhexinit.com -zheyangai.com -zheye.cc -zheye.com -zheyibu.com -zheyouquan.net -zheyouxinxi.com -zhezheai.com -zhezhekan.com -zhezhier.com -zhfc.com -zhfile.com -zhfund.com -zhgc.com -zhgjm.com -zhgl.com -zhgnj.com -zhguoguo.com -zhh.me -zhhainiao.com -zhhrm.com -zhhs-china.com -zhhtxt.com -zhhuahui.com -zhhy-oa.com -zhi-bo.net -zhi-ming.com -zhi-niao.com -zhi.hu -zhi12.com -zhiaikm.com -zhiaimusic.com -zhiannet.com -zhiaxue.com -zhib.net -zhibao2car.com -zhibiao8.com -zhiblue.com -zhibo.at -zhibo.co -zhibo.me -zhibo.tv -zhibo11.com -zhibo8.cc -zhibo8.com -zhiboba.com -zhiboba.org -zhiboqiao.com -zhiboyun.net -zhibs.net -zhibugongzuo.com -zhicaiwang.com -zhicall.com -zhicg.com -zhichanli.com -zhicheng.com -zhichepin.com -zhichikeji.com -zhichiwangluo.com -zhichiweiye.com -zhicho.com -zhichu100.com -zhicms.cc -zhidao91.com -zhidaoanli.com -zhidaoketang.com -zhideedu.com -zhidesoft.com -zhideyimai.com -zhidian3g.com -zhidieyun.com -zhiding0603.com -zhidiy.com -zhidj.com -zhidmai.com -zhiduopc.com -zhidx.com -zhidzhushou.mobi -zhifa.cc -zhifang.com -zhifashengfa.com -zhifeishengwu.com -zhifoukeji.com -zhiftype.com -zhifufu.com -zhifujie.com -zhifure.com -zhifutui.com -zhifuzi.com -zhigao.org -zhigou.com -zhiguagua.com -zhiguang.me -zhigudata.com -zhihe.mobi -zhihejia.com -zhihemobi.com -zhihengwangchen.com -zhihjf.com -zhihone.com -zhihu.com -zhihu.dev -zhihu66.com -zhihudsp.com -zhihuiduijian.com -zhihuiep.com -zhihuihuiwu.com -zhihuiji.com -zhihuinanzhan.com -zhihuirenshe.com -zhihuishitang.net -zhihuishu.com -zhihuiya.com -zhihuizhangyu.com -zhihuizp.com -zhihuoseo.com -zhiji.com -zhijia.com -zhijiang.biz -zhijiangames.com -zhijianhutong.com -zhijiaoyi.com -zhijiapro.com -zhijidoc.com -zhijieketang.com -zhijin.com -zhijinwang.com -zhijl.com -zhijuke.com -zhikao100.com -zhiketong.com -zhiketong.net -zhikubao.net -zhilandaren.com -zhilehuo.com -zhileng.com -zhili-hr.com -zhilian.com -zhilianfm.com -zhiliangren.com -zhilianhttp.com -zhiliaoke.com -zhiliaomj.com -zhilii.com -zhilingshidai.com -zhilong.me -zhilongtech.com -zhiluo.net -zhimacangku.com -zhimace.com -zhimantian.com -zhimaruanjian.com -zhimawenda.com -zhimax.com -zhimg.com -zhimi.com -zhimoe.com -zhinengdayi.com -zhinengshe.com -zhinengxia.com -zhinet.com -zhinews.com -zhiniaotec.com -zhinikefu.com -zhiniu8.com -zhipan.net -zhipeix.com -zhipiaoduixian8.com -zhipin.com -zhipingke.com -zhiqiang.org -zhiqiapp.com -zhiqu.org -zhiquansheng.com -zhiquanxia.com -zhiquyuan.com -zhiread.com -zhiren.com -zhiren.ren -zhirenhr.com -zhiribao.com -zhiru.com -zhirui-inv.com -zhiruyi.com -zhisanzhao.com -zhisheji.com -zhishi.life -zhishichong.com -zhishifenzi.com -zhishihao.com -zhishikoo.com -zhishilin.com -zhishiniu.com -zhishisoft.com -zhishiwu.com -zhishizhan.net -zhishuedu.com -zhishutang.com -zhisiyun.com -zhitongcaijing.com -zhitoudsp.com -zhitouxing.com -zhituad.com -zhitui.com -zhiweidata.com -zhiweilaijiaoyu.com -zhiwo.com -zhiwuwang.com -zhixiaohuoke.com -zhixiaoren.com -zhixiaorenurl.com -zhixin-semi.com -zhixingapp.com -zhixingbus.com -zhixinlu.com -zhixuan.com -zhixue.com -zhixue.org -zhixueyun.com -zhiye.com -zhiyeapp.com -zhiyehaiwai.com -zhiyequan.com -zhiyi.com -zhiyicx.com -zhiyinghui.com -zhiyingtuan.com -zhiyinhao.com -zhiyinlou.com -zhiyinmedia.com -zhiyoo.com -zhiyoubao.com -zhiyuan-group.com -zhiyuanhongda.com -zhiyuanit.com -zhiyuanyun.com -zhiyujit.com -zhiyun168.com -zhizaoye.net -zhizaoyun.com -zhizhang.com -zhizhebuyan.com -zhizhen.com -zhizhi88.com -zhizhibaike.com -zhizhihu.com -zhizhizhi.com -zhizhonghl.com -zhizhoukeji.com -zhizhucms.com -zhizhuwu.com -zhizhuyx.com -zhizihuan.com -zhizihuan.net -zhiziyun.com -zhizunbao668.com -zhizunbo.com -zhizundns.com -zhizunlian.com -zhizunnews.com -zhizuobiao.com -zhizuobiaojiaoyu.com -zhizuoh5.com -zhizuotu.com -zhj9.com -zhjiameng.com -zhjj.org -zhjncb.com -zhjs.cc -zhjypco.com -zhk.me -zhku.com -zhl.com -zhld.com -zhlhh.com -zhliqi.com -zhlseo.com -zhlzw.com -zhmeiwen.com -zhmf.com -zhmold.com -zhmzjl.com -zhmzqi.com -zhnjw.com -zhobang.com -zhong-lv.com -zhong.com -zhong100.com -zhongan.com -zhongan.io -zhonganfengshang.com -zhonganinfo.com -zhongbaounion.com -zhongbingtongxin.com -zhongbowenwu.com -zhongboxinwen.com -zhongchaoyinshua.com -zhongchebaolian.com -zhongchoujia.com -zhongchouke.com -zhongchouyan.com -zhongchuang365.com -zhongchuanjukan.com -zhongda021.com -zhongdaonet.com -zhongdeng.com -zhongdengwang.com -zhongdi168.com -zhongdoulicai.com -zhongfenxian.com -zhongfenxiang.com -zhongfu.net -zhongguancun.com -zhongguobaiyin.com -zhongguoditu.com -zhongguofeng.com -zhongguohao123.com -zhongguohuo.com -zhongguojianmenguan.com -zhongguojie.org -zhongguojie.wang -zhongguojinrongtouziwang.com -zhongguojixiewang.com -zhongguomap.com -zhongguopeixun.net -zhongguose.com -zhongguoseo.net -zhongguoshici.com -zhongguosou.com -zhongguowangshi.com -zhongguoxianhua.com -zhongguoyimin.net -zhongguoym.com -zhongh.com -zhonghaitech.com -zhonghegame.com -zhonghhd.com -zhonghongwang.com -zhonghr.com -zhonghua-pe.com -zhonghuacar.com -zhonghuacpa.com -zhonghuadiancang.com -zhonghuaent.com -zhonghuamba.com -zhonghuameiwang.com -zhonghuanus.com -zhonghuaqiming.com -zhonghuasuan.com -zhonghuawuxia.com -zhonghuayuwenzhishiku.org -zhongjiangapp.com -zhongjie.com -zhongjijidian.com -zhongjintongsheng.com -zhongjitou.com -zhongkao.com -zhongkaohelp.com -zhongkerd.com -zhongkezhuyan.com -zhongkongbancn.com -zhongleny.com -zhonglewz.com -zhonglian.com -zhonglianfactoring.com -zhongliucls.com -zhongliuyiyuan.com -zhonglun.com -zhongman.com -zhongmian.com -zhongmingmao.me -zhongniu.com -zhongpaiwang.com -zhongqixin360.com -zhongrenbang.cc -zhongrongjz.com -zhongruigang.com -zhongruihuacheng.com -zhongruitech.com -zhongshang114.com -zhongshanpark.com -zhongshanyinyuetang.org -zhongshengdai.com -zhongshucan.com -zhongso.com -zhongsou.com -zhongsou.net -zhongtaitrust.com -zhongtieyintong.com -zhongtoufa.net -zhongtuobang.com -zhongwcs.com -zhongwei-info.com -zhongweijy.com -zhongwenhexinqikan.com -zhongwenqing.com -zhongwucan.com -zhongxiangdichan.net -zhongxing123.com -zhongxinwanka.com -zhongxunrunda.com -zhongxuntv.com -zhongyao1.com -zhongyaoyi.com -zhongye.net -zhongyegongkao.com -zhongyemba.com -zhongyidiantong.com -zhongyiiot.com -zhongyiju360.com -zhongyishangwu.com -zhongyoo.com -zhongyouex.com -zhongyougc.com -zhongyunjy.com -zhongzhao.com -zhongzhengzs.com -zhongzhide.com -zhongzhifaqian.com -zhongzhilin.com -zhongzhixin.com -zhongzhoutm.com -zhongzq.com -zhonzhu.com -zhopera.com -zhou1go.com -zhouao.com -zhoubochina.com -zhouchun.net -zhoudaosh.com -zhougong.com -zhouhoulin.com -zhoujiahong.com -zhoujianhui.com -zhoujiping.com -zhoulaoshi.club -zhoulingjie.com -zhour.net -zhoushangren.com -zhouxiao.me -zhouxingchi.info -zhouxuanyu.com -zhouyi.biz -zhouyi.cc -zhouyi.org -zhouyi114.com -zhouyigw.com -zhouyiju.com -zhouyuanchao.com -zhouzhuang.net -zhpanzi.com -zhqyue.com -zhrczp.com -zhrtc.com -zhs6.com -zhsan.com -zhsho.com -zhshw.com -zhskw.com -zhsyb.cc -zhtelecom.com -zhtmid.com -zhtzvip.com -zhu.cm -zhu360.com -zhu7jie.com -zhuainiu.com -zhuaishuan.com -zhuan16.com -zhuanfa.net -zhuanfou.com -zhuang520.com -zhuang666.com -zhuang99.com -zhuangji.net -zhuangjiba.com -zhuangjiyuan.com -zhuangku.com -zhuangle.cc -zhuangniu.net -zhuangpeitu.com -zhuangpin.com -zhuangxiaomi.com -zhuangxiu.com -zhuangxiu22.com -zhuangxiu567.com -zhuangxiu6.com -zhuangxiubao.com -zhuangxiuzhai.com -zhuangyi.com -zhuangzhuang.cf -zhuangzhuang.net -zhuanhuanqi.com -zhuaniao.com -zhuanile.com -zhuankeba.org -zhuanlichaxun.net -zhuanliqiao.com -zhuanmenmian.com -zhuannet.com -zhuanpinyin.com -zhuanqianer.com -zhuansoo.com -zhuanstatic.com -zhuantilan.com -zhuanyejun.com -zhuanyepeixun.com -zhuanyes.com -zhuanyezhidao.com -zhuanyun.cc -zhuanyun123.com -zhuanyuntang.com -zhuanzfx.com -zhuanzhi.ai -zhuanzhi.net -zhuanzhuan.com -zhuanzhuantui.com -zhuanzhuvpn.com -zhuashouru.com -zhuatang.com -zhuatongji.com -zhuax.com -zhuaxia.com -zhuaying.com -zhuayou.com -zhuayoukong.com -zhuazi.com -zhubaijia.com -zhubajie.com -zhubajie.la -zhubangbang.com -zhubao.com -zhubao668.com -zhubaojizhen.com -zhubaoq.com -zhubenjie.com -zhubian.com -zhubiaoju.com -zhubijiao.com -zhubo123.com -zhubogu.com -zhuboqiang.com -zhuceshenzhengongsi.com -zhuceyou.com -zhucezn.com -zhuchao.cc -zhudai.com -zhudianquan.com -zhufaner.com -zhufengpeixun.com -zhufenqi.com -zhufushuo.com -zhuge.com -zhugeapi.com -zhugeapi.net -zhugefang.com -zhugeio.com -zhuhaily.com -zhuhaimy.com -zhuhd.win -zhuhongliang.com -zhuici.com -zhuici.net -zhuiguang.com -zhuihuodong.com -zhuiju1.com -zhuimengzhu.com -zhuiqu.com -zhuishu.tw -zhuishu5.com -zhuishubang.com -zhuishushenqi.com -zhuishuwang.com -zhuiwan.org -zhuixinfan.com -zhuixingwang.com -zhuixue.net -zhuiyi.ai -zhuizhuiimg.com -zhuizhuiyoyo.com -zhuji.com -zhuji.la -zhuji.net -zhujia360.com -zhujian.org -zhujiangbeer.com -zhujiange.com -zhujiangrc.com -zhujiangroad.com -zhujib.com -zhujibank.com -zhujibiji.com -zhujiceping.com -zhujiwiki.com -zhujiwu.com -zhujiyou.com -zhuke.com -zhulang.com -zhulanli.com -zhuli.me -zhulincat.com -zhuliudai.com -zhuliuwu.com -zhulixiaolie.com -zhulogic.com -zhulong.com -zhulou.net -zhulu86.com -zhumengwl.com -zhumu.me -zhuna.net -zhunc.vip -zhundao.net -zhundaoyun.com -zhuniu.com -zhunniao.com -zhuo.com -zhuobufan.com -zhuofan.net -zhuofansoft.com -zhuoguang.net -zhuohuamg.com -zhuojie.cc -zhuokearts.com -zhuoku.com -zhuolin.wang -zhuomilicai.com -zhuomogroup.com -zhuoquapp.com -zhuoqun.info -zhuoshigroup.com -zhuoshixiong.com -zhuotingwl.com -zhuotujiaoyu.com -zhuoxue.cc -zhuoyi.com -zhuoyicp.com -zhuoyigame.com -zhuoyigame.site -zhuoyixuan.com -zhuoyou.com -zhuoyouba.net -zhuoyuanxinfang.com -zhuoyue.wang -zhuoyuebbs.com -zhuoyuechenxing.com -zhuozhengsoft.com -zhuozhoufangchan.com -zhuozhuogame.com -zhupadns.com -zhuqinit.com -zhuqiyang.com -zhuque.me -zhushou001.com -zhushuiwen.com -zhust.com -zhutao.com -zhuti.com -zhuticlub.com -zhutihome.net -zhutix.com -zhutix.net -zhutizhijia.net -zhutools.com -zhutou.com -zhutousan.net -zhuwang.cc -zhuwang360.com -zhuwona.com -zhuxianfei.com -zhuxiaobang.com -zhuxuejy.com -zhuxuncn.com -zhuye.kim -zhuyeshouhushen.com -zhuyitai.com -zhuyixie.com -zhuyst.cc -zhuyuce.com -zhuyunfeng.com -zhuzhai.com -zhuzher.com -zhuzhichao.com -zhuzhouwang.com -zhuzi.me -zhuzihaoke.com -zhw2101024.com -zhwangart.com -zhwdw.com -zhwenku.com -zhwenxue.com -zhwlgzs.com -zhx-mall.com -zhxfei.com -zhxinuser.com -zhxuser.com -zhxww.net -zhxy1z.com -zhy333.com -zhybb.com -zhyccw.com -zhycn.com -zhyd.me -zhyfjj.com -zhyi828.com -zhyingxiao.com -zhyouliang.com -zhyx707.com -zhyxcc.com -zhyymall.com -zhyyz.com -zhzays.com -zhzjw.net -zhzyw.com -zhzyw.org -zhzzx.com -zi-han.net -zi.com -ziben365.com -zicaitou.com -zichabaogao.com -zichanzhihuan.com -zichenit.com -zidan.chat -zidanduanxin.com -zidanduanxin.net -zidian8.com -zidoo.tv -zidootv.com -ziewje.com -zifandiaosu.com -zifeiwuya.com -zige365.com -zigeer.com -ziguhonglan.com -zihai029.com -zihai0351.com -zihai0411.com -zihai0535.com -zihai0591.com -zihai0595.com -zihai0755.com -zihai24.com -zihexin.net -zihu.com -zihua01.com -ziiai.com -ziipoo.com -ziisp.com -zijgdw.com -ziji.cc -zijiayouly.com -zijieapi.com -zijiecdn.com -zijieimg.com -zijinfx.com -zijinji.com -zijinsuo.com -zijiren.net -zijizhang.com -zikao-zikao.com -zikao.gd -zikao365.com -zikao5.com -zikaocqi.com -zikaoshu.net -zikaoshu.vip -zikaosw.com -zike.com -zikeys.com -zikoo.com -ziku123.com -zikui-design.com -zikuinfo.com -zilanwl.com -zilhua.com -zilian8.com -ziliaoge.com -ziliaoh.com -zilongame.com -zilongshanren.com -ziluolanh.com -zimacaihang.com -zimilan.com -zimoapps.com -zimrilink.com -zimu.me -zimukeji.com -zimuku.net -zimushe.com -zimuzimu.com -zimuzu.tv -zine.la -zinewow.com -zing-api.com -zingke.com -zingqi.com -ziniao.com -ziningmeng.com -ziniusoft.com -zintao.com -zintow.com -zip118.com -zipadc.com -zipjpg.com -ziq.com -ziqiangxuetang.com -ziranyixue.com -ziroom.com -ziroomapartment.com -ziroomstay.com -zisea.com -zisen.com -ziseyiliao.com -zisha.com -zishahuyu.com -zishapot.com -zishu010.com -zishuo.com -zishuogif.com -zishuovideo.com -zisia.org -zisuo.com -ziti.so -ziti163.com -zitiao.org -zitiaonc.com -zitichina.com -ziticq.com -zitiguanjia.com -zitijia.com -zitixiazai.org -zituo.net -zivers.com -zivoo.com -ziwanyouxi.com -ziweihuan.com -ziwojianding.net -ziwork.com -ziwoyou.net -ziwufang.com -zixia.com -zixiangsakesi.com -zixiaomao.com -zixigua.com -zixijiaoshi.com -zixike.cc -zixuedao.com -zixuejie.com -zixuekaoshi.net -zixuephp.net -zixunkezhan.com -zixuntop.com -ziy.cc -ziyadiaoyu.com -ziyainfo.com -ziyan666.com -ziyawang.com -ziye114.com -ziyesy.com -ziyexing.com -ziyimall.com -ziyou.com -ziyou.studio -ziyoufa.com -ziyouwu.com -ziyuan.tv -ziyuan605.com -ziyuanbu.com -ziyuangou.com -ziyuanku.com -ziyuanm.com -ziyuanmaow.com -ziyuantun.com -ziyuewentao.com -ziyun.com -ziyuyx.com -zizaike.com -zizhuauto.com -zizhupark.com -zizisi.com -zizizizizi.com -zizzs.com -zj-hhcy.com -zj-idc.com -zj.com -zj01.com -zj123.com -zj12378.com -zj186.com -zj2460.com -zj31.net -zj32.com -zj42.com -zj93zp.com -zj96596.com -zjabank.com -zjaf.net -zjaqxy.com -zjautoparts.com -zjbiz.net -zjbyte.com -zjca.org -zjcb.com -zjcbank.com -zjcdn.com -zjchina.org -zjchuguo.com -zjcic.net -zjciming.com -zjcio.org -zjckw.org -zjcnbank.com -zjcrjzj.com -zjcuhb.com -zjcxbank.com -zjdashi.com -zjdata.net -zjdh.org -zjdomain.com -zjdybank.com -zjdydlc.com -zjdyjob.com -zje.com -zjedps.com -zjedu.org -zjepe.com -zjfdc.net -zjft.com -zjgas.net -zjgjj.com -zjgmdf.com -zjgqt.org -zjgrrb.com -zjgslb.com -zjgt.com -zjguji.com -zjgwy.org -zjgwyw.org -zjgzcpa.com -zjhcbank.com -zjhee.com -zjhejiang.com -zjhim.com -zjhnrb.com -zjhualing.com -zjhui.net -zjhx520.com -zjhyrcb.com -zjhzyg.net -zji.net -zjiis.com -zjimpact.com -zjipc.com -zjj17u.com -zjj21.com -zjjd.org -zjjdamuzhi.com -zjjgcyz.com -zjjlvxing.com -zjjlvyou8264.com -zjjmcly.com -zjjr.com -zjjsbank.com -zjjsit.com -zjjta.com -zjjubao.com -zjjushu.com -zjjy.com -zjjyuntian.com -zjjzyxh.com -zjkangzh.com -zjkccb.com -zjkelan.com -zjkgjj.com -zjkings.com -zjknews.com -zjks.com -zjldrcb.com -zjlottery.com -zjlsbz.com -zjlvjie.com -zjlxtx.com -zjmax.com -zjmi-mall.com -zjmobile.com -zjmoney.com -zjmrhpt.com -zjnad.com -zjnrcb.com -zjolcdn.com -zjoldns.com -zjosm.com -zjpcedu.com -zjphrcb.com -zjpost.com -zjpubservice.com -zjqbj.com -zjqimeng.com -zjqk110.com -zjrc.com -zjrc.net -zjrcu.com -zjrjks.org -zjsaisi.com -zjscdb.com -zjscs.com -zjsight.com -zjsr.com -zjstv.com -zjsxlt.com -zjszbank.com -zjtcn.com -zjtdw.com -zjtlcb.com -zjtntd.com -zjtree.com -zjtxedu.org -zjugis.com -zjujournals.com -zjuqsc.com -zjut.cc -zjutkz.net -zjwater.com -zjwc168.com -zjwk.com -zjwmw.com -zjwxbank.com -zjxc.com -zjxf119.com -zjxhgd.com -zjxpp.com -zjxqyy.com -zjxsbank.com -zjyanxing.com -zjyari.com -zjycpx.com -zjydt.com -zjyiot.com -zjyiqiao.com -zjykjy.com -zjyyang.com -zjyygy.com -zjzdgj.com -zjzfcj.com -zjzg.com -zjzj.org -zjzjhotel.com -zjzs.net -zjzsxb.com -zjzydns.com -zk2013.com -zk528.com -zk5u.com -zk71.com -zkailun.com -zkbedu.com -zkbhj.com -zkck.com -zkcmg.com -zkcrm.com -zkcserv.com -zkcx.com -zkdt.net -zkdzxx.com -zkecopro.com -zkeli.com -zkeys.com -zkgjy.net -zkh360.com -zkhb.group -zkhcsoft.com -zkhcsy.com -zkii.net -zking.com -zkjxt.com -zkl2333.com -zkoffcn.com -zkokh.com -zkread.com -zkroom.com -zksoftwaresz.com -zkteco.com -zkteco.xin -zktimecube.com -zktools.net -zktsg.com -zktw.com -zku.net -zkunet.com -zkungfu.com -zkuyun.com -zkx.cc -zkxblog.com -zkxlkj.net -zkxsw.com -zkxww.com -zkydib.com -zkyouxi.com -zkyxls.com -zkzhkj.com -zkzj.org -zl532.com -zl99.org -zlbaba.com -zlca.org -zlcool.com -zlfedu.com -zlfind.com -zlfls.com -zlg.com -zlgmcu.com -zlgpy.com -zlgsj.com -zlhelp.com -zlhome.com -zlhui.com -zlibs.com -zliiii.com -zlimg.com -zlink-e.com -zlkb.net -zlketang.com -zllife.net -zllyun.com -zlog.cc -zlongad.com -zlongame.com -zlook.com -zlorz.com -zlqh.com -zlqiao.com -zlscn.net -zlservice.net -zlsin.com -zlsnet.com -zlsoft.com -zltianhen.com -zluren.com -zlvod.com -zlw.so -zlygu.com -zm1717.com -zmapp.com -zmaxfilm.com -zmaxhotels.cc -zmbg.com -zmccx.com -zmctc.com -zmdfdc.com -zmdz.com -zmeng.cc -zmeng123.com -zmengzhu.com -zmfx8.com -zmgov.com -zmgrcw.com -zmhkl.com -zmidc.com -zmifi.com -zmingcx.com -zmirrordemo.com -zmister.com -zmjiudian.com -zmlearn.com -zmmdn.com -zmmtu.com -zmndjm.com -zmnds.com -zmnedu.com -zmnoa.com -zmnrz.com -zmobuy.com -zmonster.me -zmpal.com -zmqlh.com -zmren.com -zmrenwu.com -zmrgame.com -zmsc.cc -zmsq.com -zmt.me -zmtiantang.com -zmtpc.com -zmtquan.com -zmumu.com -zmwang.wang -zmwo.com -zmxiaoqu.com -zmxiazai.com -zmxiu.com -zmye5vly.com -zmzapi.com -zmzapi.net -zmzjk.com -zmzjstu.com -zn8.com -znba.net -znbo.com -znczz.com -zndata.com -zndns.com -znds.com -znds.net -zndsbbs.com -zndstec.com -zngm.com -znhospital.com -znhr.com -znimg.com -zniu.cc -znj.com -znjchina.com -znjj.tv -znlzd.com -znpin.com -znqnet.com -znshuru.com -znsjw.com -zntec.net -zntvrom.com -zntx.cc -znvren.com -znwb.com -znyp.com -znyseo.com -znyshurufa.com -znyt.net -znyxb.com -znzbt.com -znznet.net -zo-l.net -zocai.com -zocodev.com -zodiac.wang -zoe360.com -zoebon.com -zoform.com -zofund.com -zohead.com -zoioo.com -zoker.io -zokogo.com -zokstar.com -zol-img.com -zol.com -zollty.com -zolsky.com -zolyol.com -zombiescat.com -zomiu.com -zomvip.com -zomzone.com -zon100.com -zone139.com -zoneben.com -zoneidc.com -zoneker.com -zonemore.com -zonen-tech.com -zonepp.com -zoneve.com -zongcaidarentilihaoya.com -zonghangsl.com -zongheng.com -zonghengche.com -zonghengke.com -zonglai.mobi -zongliwei.com -zongming.net -zongs365.com -zongshenmotor.com -zongtiku.com -zongxiutang.net -zongyiconverge.com -zongyifile.com -zongyigame.com -zongyijia.com -zongyimobile.com -zongyionline.com -zongyiphone.com -zongyixun.com -zonhen.com -zonst.com -zontes.com -zooao.com -zoocer.com -zoofon.com -zoogooy.com -zookingsoft.com -zookparts.com -zoom-china.com -zoom.us -zoomeye.org -zoomlion.com -zoopda.com -zoosnet.net -zoossoft.com -zoossoft.net -zootui.com -zooyoo.cc -zoroli.com -zorrowh.com -zou.la -zou114.com -zoubiao.com -zoucheng.cc -zoucz.com -zoues.com -zoujinvr.com -zoular.com -zoutu.com -zouzhenzhong.com -zouzhiqiang.com -zowoyoo.com -zoyoo.net -zozoka.com -zp.do -zp0716.com -zp0737.com -zp365.com -zp515.com -zpad.cc -zpan.space -zpascal.net -zpaudit.com -zpedu.org -zpfdc.com -zphj1987.com -zpidc.com -zpjiashuo.com -zplayworld.com -zpluz.com -zpm.so -zpm.wiki -zppk.net -zppop.com -zppxba.com -zptong.com -zpzyb.com -zq-scm.com -zq12369.com -zq235.com -zq99y.com -zqbzs.cc -zqcloudgame.com -zqctqcz.com -zqfxj.com -zqgame.com -zqgreen.com -zqic.net -zqjjr.com -zqlian.com -zqlx.com -zqnf.com -zqsign.com -zqsos.com -zqtong.com -zquan.cc -zquan.org -zqvip8.cc -zqwzc.com -zqxinxi.com -zqxsc.com -zqxykj.com -zqzj.org -zqzyxx.com -zrahh.com -zrblog.net -zrbx.com -zrcaifu.com -zrcbank.com -zrfan.com -zring.com -zrj96.com -zrjhwenhua.com -zrmm.com -zrtech.org -zrtg.com -zrthink.com -zrway.com -zrwjk.com -zrxss.com -zry97.com -zrzyb.net -zs-e.com -zs-lzlj.com -zs-rh.com -zs0572.com -zs310.com -zs516.com -zs666.com -zs6y.com -zs8q.com -zsaber.com -zsacg.com -zsafw.com -zsapp.info -zsaxi.com -zsb353.com -zsbeike.com -zsbit.com -zsc.io -zscaishang.com -zsdk.cc -zsdlw.com -zsemall.com -zseoo.com -zsevent.com -zsezt.com -zsf.cool -zsfund.com -zsgd.com -zsgjs.com -zsglrj.com -zsgoodlighting.com -zsh.com -zsh8.com -zshield.net -zshl.com -zshlife.com -zshuoshao.online -zsia.org -zsihuo.com -zsincer.com -zsite.com -zsj18.com -zsjingmi.com -zsjinqi.com -zsjuchuang.com -zsjxwj.com -zskoubei.com -zsksw.net -zslady.com -zsld86.com -zslin.com -zslp021.com -zslyyn12.com -zslyzjj11.com -zsmama.com -zsnchem.com -zsppsj.com -zsptdjy.com -zsr.cc -zsso03.com -zssph.com -zssxczxyey.com -zstack.io -zstczx.com -zstzs.com -zsucai.com -zsucai.net -zsufivehos.com -zsvsz.com -zswcn.com -zsweai.club -zswebao.xyz -zswhtl.com -zsxq.com -zsxq100.com -zsythink.net -zszq.com -zt-express.com -zt-info.com -zt1f.com -ztautoparts.com -ztbest.com -ztcadx.com -ztch.ltd -ztcia.com -ztcj365.com -ztdad.com -zte.net -ztedevice.com -ztedevices.com -ztedu8.com -ztehn.com -ztemap.com -ztems.com -ztestin.com -ztfans.com -ztfssc.com -ztgame.com -ztgy.org -zthxcf.com -ztinfoga.com -ztjoin.com -ztjy61.com -ztjystore.com -ztkm.com -ztky.com -ztmao.com -ztms.net -ztnews.net -zto.com -zto.jp -zto56.com -ztpay.org -ztqqt.com -ztrhmall.com -ztrong.com -ztsafe.com -ztsfc.com -ztt.cc -zttx-exp.com -zttx.com -ztu-crm.com -ztupic.com -ztups.com -ztvcar.com -ztvx8.com -ztww.net -ztxz.cc -ztzy.com -zuan-cheng.com -zuanbi8.com -zuanchuang.org -zuanchuang9.com -zuanke8.com -zuankezu.com -zuanshi.com -zuanshitoupiao.com -zuanshivpn.com -zuantao.cc -zuber.im -zubunet.com -zuche.com -zuchecdn.com -zuciwang.com -zucp.net -zudeapp.com -zudong.com -zufang.com -zufangbao.com -zufangzi.com -zugame.com -zugeliang01.com -zuhaoapp.com -zuhaofa.com -zuhaohao.com -zuhaowan.com -zuhaowan.net -zuhedaikuan.com -zuhuanhao.com -zui.com -zui365.com -zui88.com -zuiben.com -zuibook.com -zuichen.net -zuicool.com -zuidabao.com -zuidaima.com -zuidh.com -zuidongxi.com -zuifengyun.com -zuifuli.com -zuihaodaxue.com -zuihuimai.com -zuihuimai.net -zuiidea.com -zuijiao.net -zuijunshi.com -zuikc.com -zuiku.com -zuikzy.com -zuilingxian.com -zuimeia.com -zuimeiqidai.com -zuimeitianqi.com -zuimeix.com -zuimoban.com -zuiniuwang.com -zuiqiangnixi.com -zuiqiangyingyu.net -zuirede.com -zuishidai.com -zuitang.com -zuitu.com -zuiwan.net -zuixiaoyao.com -zuixinchao.com -zuixingzuo.net -zuixu.com -zuixue.com -zuiyou.com -zuiyougou.com -zuiyouxi.com -zuiyouzhi.com -zujuan.com -zujuanyi.com -zuk.com -zukang88.com -zuker.im -zulijian.com -zulinbao.com -zumbacn.com -zun.com -zun.gd -zun315.com -zun9.com -zunxiangqiming.com -zunxun.com -zunxun.net -zunzou.com -zuobaike.net -zuobin.net -zuocd1.group -zuoche.com -zuocheng.net -zuodanye.com -zuodao.com -zuodashi.com -zuodia.com -zuofanwang.com -zuogj.com -zuohaotu.com -zuohuodong.com -zuoji-scm.com -zuojiachubanshe.com -zuojiaju.com -zuojiawang.com -zuojing.com -zuojj.com -zuopinj.com -zuoqu.com -zuoqudashi.net -zuosa.com -zuoshipin.com -zuotishi.com -zuowen.com -zuowen521.com -zuowen8.com -zuowenck.com -zuowening.com -zuowenjun.com -zuowenku.net -zuowenren.com -zuowens.com -zuowenwang.net -zuowenxue.com -zuowenzhai.com -zuowenzhang.com -zuowenzhitiao.com -zuoxiaolong.com -zuoye5.com -zuoyebang.cc -zuoyebang.com -zuoyehezi.com -zuoyesou.com -zuoyewang.cc -zupig.com -zupuk.com -zupulu.com -zutianke.com -zutiyu.com -zuulee.com -zuxcgames.com -zuyunfei.com -zuyushop.com -zuzheyong.com -zuzhirenshi.com -zuzitech.com -zuzuche.com -zving.com -zvv.me -zvzee.com -zw110.com -zw3e.com -zw3w.com -zw808.com -zw885.com -zwads.com -zwbk.org -zwcad.com -zwcnw.com -zwcsm.com -zwda.com -zwdns.com -zwds.cc -zwdsty.com -zwdu.app -zwdu.com -zwduxs.com -zwechat.com -zwfw.com -zwgeek.com -zwhz.com -zwie2003.com -zwjczx.com -zwjhl.com -zwjk.com -zwjl.com -zwjl.net -zwkf.net -zwoptical.com -zwtianshangm.com -zwtkl8.com -zwtxipr.com -zwwdm.com -zwwltkl.com -zwwx.com -zwzsh.net -zwzyzx.com -zx-casting.com -zx-tour.com -zx0093.com -zx017.com -zx017.net -zx080.com -zx0818.com -zx100.com -zx10000.com -zx110.org -zx181.com -zx350zx.com -zx7b.com -zx8.cc -zx98.com -zxblinux.com -zxbzr.com -zxclqw.com -zxcmk.com -zxcoder.com -zxd.com -zxdb999.com -zxdoo.com -zxdu.net -zxdyo.com -zxdyw.com -zxe-china.com -zxerp.com -zxfvip.com -zxgnz.com -zxgongshui.com -zxgzs.com -zxgzw.com -zxh.site -zxhgroup.com -zxhong.com -zxhsd.com -zxiaoxiang.com -zxicrm.com -zxinc.org -zxinzxw.com -zxip.com -zxjg66.com -zxjsq.net -zxlearning.com -zxlib.com -zxlmx.com -zxmall.com -zxmn2018.com -zxmseed.com -zxmxd.com -zxnic.net -zxnrh.com -zxopen.com -zxpmq.com -zxrtb.com -zxs-coffee.com -zxsg88.com -zxshe.com -zxsmd.com -zxswjx.com -zxsygs.com -zxt2007.com -zxtang.com -zxtjd.com -zxtnetwork.com -zxttax.com -zxw114.com -zxw51.com -zxwcbj.com -zxwindow.com -zxwyouxi.com -zxxk.com -zxxww.com -zxxxkj.com -zxzhijia.com -zxzj.fun -zxzj.me -zxzlf.com -zxzyl.com -zxzyy.com -zy-cam.com -zy2071.com -zy728.com -zyan.cc -zyart.org -zybang.com -zybang1.com -zybird.com -zyboe.com -zybuluo.com -zyc918.com -zyccc.com -zycits.com -zyclps.com -zycmfw.com -zycsc.com -zyctd.com -zycultura.com -zydhgm.com -zydsy.com -zye.cc -zyea.com -zyecp.com -zyexhibition.com -zyeye.net -zyfchina.com -zyfj.com -zygames.com -zyge.net -zygg.cc -zygj.net -zygx.wang -zyh365.com -zyhao.com -zyhbxs.com -zyhcjl.com -zyhh.me -zyhot.com -zyiis.net -zyip.com -zyjoygame.com -zyjyyun.com -zyjz-sh.com -zykjgame.com -zyku.net -zyl.me -zyloushi.com -zymc1.com -zymkcdn.com -zymreal.com -zymxp.com -zyoffice.com -zyoogame.com -zyops.com -zyou100.com -zyoung.me -zyplayer.com -zyq366.com -zyqc.cc -zyqccs.com -zyrj.org -zyrmw.com -zyrnn.com -zyrykbiandao.com -zys.me -zysheji.net -zyt8.com -zytuozhan.com -zytxgame.com -zyucan.com -zyue.com -zyw1040.com -zywxpress.com -zyxr.com -zyxuan.org -zyxzcm.com -zyyda.com -zyyfy.com -zyytcz.com -zyzaojiao.com -zyzg.com -zyzhan.com -zyzhyl.com -zyzj.org -zyzj360.com -zyzjmz.org -zyzkb.net -zyzw.com -zyzxgy.com -zyzxs.com -zz-news.com -zz-qq.com -zz-zigzag.com -zz21.com -zz314.com -zz618.com -zz91.com -zz96269.com -zzay.net -zzbaike.com -zzbbs.com -zzbd.org -zzbq.org -zzbs.org -zzbtv.com -zzcangzhou.com -zzccom.com -zzccyq1.com -zzcm1.com -zzcm2.com -zzcm5.com -zzcodes.net -zzcomm.com -zzcszx.com -zzd.pub -zzdengji.com -zzdh.net -zzdz666.com -zzect.com -zzenglish.net -zzetao.com -zzfcj.com -zzfcw.com -zzfly.net -zzfriend.com -zzgcjyzx.com -zzgdapp.com -zzgjj.com -zzgm.net -zzgryl.com -zzhaofang.com -zzhaoz.com -zzhlzc.com -zzhybz.com -zzidc.com -zzit.org -zzjaz.com -zzjc5.com -zzjunzhi.com -zzjunzhuo.com -zzjxbg.com -zzkiss000.com -zzliot.com -zzllq.com -zzloop.com -zzlz.net -zzm8.com -zzmama.net -zzmscg.com -zzmyt.com -zznah001.com -zzobokj.com -zzpd8.com -zzpuke.com -zzqklm.com -zzqxs.com -zzrbl.com -zzrseng.com -zzsf.com -zzsggzy.com -zzsgjj.com -zzssjx.com -zzsteel.com -zzstep.com -zzt9.com -zztline.com -zztoutiao.net -zztxkj.com -zzvips.com -zzwanshou.com -zzwenxue.com -zzwhtg.com -zzwljc.com -zzwms.com -zzwqqx.com -zzwro.com -zzxdc.com -zzxw.net -zzxy.net -zzyas.com -zzyb.org -zzydb.com -zzyedu.org -zzyichen.net -zzyilou.com -zzyiquan.com -zzyjs.com -zzyjsmba.com -zzyyrl.com -zzyzan.com -zzz4.com -zzzdm.com -zzzj.com -zzzla.com -zzzsxx.com -zzzyb.com -zzzyk.com -zzzzaaaa.com -zzzzhong.com -zzzzmall.com -zzzzzz.me diff --git a/luci-app-passwall/root/usr/share/passwall/rules/chnroute b/luci-app-passwall/root/usr/share/passwall/rules/chnroute deleted file mode 100644 index 6295d44d..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/chnroute +++ /dev/null @@ -1,8622 +0,0 @@ -1.0.1.0/24 -1.0.2.0/23 -1.0.32.0/19 -1.0.8.0/21 -1.1.0.0/24 -1.1.10.0/23 -1.1.12.0/22 -1.1.16.0/20 -1.1.2.0/23 -1.1.32.0/19 -1.1.4.0/22 -1.1.8.0/24 -1.1.9.0/24 -1.10.0.0/21 -1.10.11.0/24 -1.10.12.0/22 -1.10.16.0/20 -1.10.32.0/19 -1.10.64.0/18 -1.10.8.0/23 -1.116.0.0/15 -1.118.0.0/16 -1.119.0.0/17 -1.119.128.0/17 -1.12.0.0/14 -1.180.0.0/14 -1.184.0.0/15 -1.188.0.0/14 -1.192.0.0/13 -1.2.0.0/23 -1.2.10.0/23 -1.2.12.0/22 -1.2.16.0/20 -1.2.2.0/24 -1.2.32.0/19 -1.2.4.0/24 -1.2.5.0/24 -1.2.6.0/23 -1.2.64.0/18 -1.2.8.0/24 -1.2.9.0/24 -1.202.0.0/15 -1.204.0.0/14 -1.24.0.0/13 -1.3.0.0/16 -1.4.1.0/24 -1.4.16.0/20 -1.4.2.0/23 -1.4.32.0/19 -1.4.4.0/24 -1.4.5.0/24 -1.4.6.0/23 -1.4.64.0/18 -1.4.8.0/21 -1.45.0.0/16 -1.48.0.0/15 -1.50.0.0/16 -1.51.0.0/16 -1.56.0.0/13 -1.68.0.0/14 -1.8.0.0/16 -1.80.0.0/13 -1.88.0.0/14 -1.92.0.0/15 -1.94.0.0/15 -101.0.0.0/22 -101.1.0.0/22 -101.101.100.0/24 -101.101.102.0/23 -101.101.104.0/21 -101.101.112.0/20 -101.101.64.0/19 -101.102.100.0/23 -101.102.102.0/24 -101.102.104.0/21 -101.102.112.0/20 -101.102.64.0/19 -101.104.0.0/14 -101.110.116.0/22 -101.110.120.0/21 -101.110.64.0/19 -101.110.96.0/20 -101.120.0.0/14 -101.124.0.0/15 -101.126.0.0/16 -101.128.0.0/22 -101.128.16.0/20 -101.128.32.0/19 -101.128.8.0/21 -101.129.0.0/16 -101.130.0.0/15 -101.132.0.0/14 -101.144.0.0/12 -101.16.0.0/12 -101.192.0.0/14 -101.196.0.0/16 -101.197.0.0/16 -101.198.0.0/15 -101.2.172.0/22 -101.200.0.0/15 -101.203.128.0/19 -101.203.160.0/21 -101.203.172.0/22 -101.203.176.0/20 -101.204.0.0/14 -101.224.0.0/13 -101.232.0.0/15 -101.234.64.0/21 -101.234.76.0/22 -101.234.80.0/20 -101.234.96.0/19 -101.236.0.0/14 -101.240.0.0/14 -101.244.0.0/16 -101.245.0.0/16 -101.246.0.0/15 -101.248.0.0/15 -101.251.0.0/22 -101.251.128.0/17 -101.251.16.0/20 -101.251.32.0/19 -101.251.64.0/18 -101.251.8.0/21 -101.252.0.0/15 -101.254.0.0/16 -101.33.128.0/17 -101.34.0.0/15 -101.36.0.0/18 -101.36.128.0/17 -101.36.64.0/19 -101.37.0.0/16 -101.38.0.0/15 -101.4.0.0/14 -101.40.0.0/15 -101.42.0.0/15 -101.45.0.0/16 -101.46.0.0/15 -101.48.0.0/15 -101.50.12.0/22 -101.50.56.0/22 -101.50.8.0/22 -101.52.0.0/16 -101.53.100.0/22 -101.54.0.0/16 -101.55.224.0/21 -101.64.0.0/13 -101.72.0.0/14 -101.76.0.0/15 -101.78.0.0/22 -101.78.32.0/19 -101.80.0.0/12 -101.96.0.0/21 -101.96.128.0/17 -101.96.16.0/20 -101.96.8.0/22 -101.99.96.0/19 -103.1.168.0/22 -103.1.20.0/22 -103.1.24.0/22 -103.1.72.0/22 -103.1.8.0/22 -103.1.88.0/22 -103.10.0.0/22 -103.10.140.0/22 -103.10.16.0/22 -103.10.84.0/22 -103.100.0.0/22 -103.100.116.0/22 -103.100.140.0/22 -103.100.144.0/22 -103.100.236.0/22 -103.100.240.0/22 -103.100.248.0/22 -103.100.252.0/22 -103.100.32.0/22 -103.100.40.0/22 -103.100.48.0/22 -103.100.52.0/22 -103.100.56.0/22 -103.100.60.0/22 -103.100.64.0/22 -103.100.68.0/22 -103.100.88.0/22 -103.101.12.0/22 -103.101.120.0/22 -103.101.124.0/22 -103.101.144.0/22 -103.101.148.0/22 -103.101.153.0/24 -103.101.180.0/22 -103.101.184.0/22 -103.101.28.0/22 -103.101.4.0/22 -103.101.60.0/22 -103.101.8.0/22 -103.102.168.0/22 -103.102.172.0/22 -103.102.180.0/22 -103.102.184.0/22 -103.102.188.0/22 -103.102.192.0/22 -103.102.196.0/22 -103.102.200.0/22 -103.102.208.0/22 -103.102.212.0/22 -103.102.76.0/22 -103.102.80.0/22 -103.103.12.0/22 -103.103.16.0/22 -103.103.176.0/22 -103.103.188.0/22 -103.103.200.0/22 -103.103.204.0/22 -103.103.220.0/22 -103.103.224.0/22 -103.103.228.0/22 -103.103.232.0/22 -103.103.248.0/22 -103.103.252.0/22 -103.103.36.0/22 -103.103.68.0/22 -103.103.72.0/22 -103.104.0.0/22 -103.104.104.0/22 -103.104.152.0/22 -103.104.168.0/22 -103.104.172.0/22 -103.104.188.0/22 -103.104.198.0/23 -103.104.252.0/22 -103.104.36.0/22 -103.104.4.0/22 -103.104.40.0/22 -103.104.64.0/22 -103.105.0.0/22 -103.105.116.0/22 -103.105.12.0/22 -103.105.132.0/22 -103.105.16.0/22 -103.105.180.0/22 -103.105.184.0/22 -103.105.200.0/22 -103.105.204.0/22 -103.105.220.0/22 -103.105.23.0/24 -103.105.4.0/22 -103.105.60.0/22 -103.106.120.0/22 -103.106.128.0/22 -103.106.132.0/22 -103.106.160.0/22 -103.106.188.0/22 -103.106.196.0/22 -103.106.202.0/23 -103.106.212.0/22 -103.106.244.0/22 -103.106.252.0/22 -103.106.36.0/22 -103.106.40.0/22 -103.106.44.0/22 -103.106.60.0/22 -103.106.68.0/22 -103.106.96.0/22 -103.107.0.0/22 -103.107.108.0/22 -103.107.164.0/22 -103.107.168.0/22 -103.107.188.0/22 -103.107.192.0/22 -103.107.208.0/22 -103.107.212.0/22 -103.107.216.0/22 -103.107.220.0/22 -103.107.28.0/22 -103.107.32.0/22 -103.107.44.0/22 -103.107.72.0/22 -103.107.8.0/24 -103.108.160.0/22 -103.108.164.0/22 -103.108.184.0/23 -103.108.188.0/23 -103.108.192.0/22 -103.108.196.0/22 -103.108.208.0/22 -103.108.212.0/22 -103.108.224.0/22 -103.108.244.0/22 -103.108.251.0/24 -103.108.52.0/22 -103.109.106.0/23 -103.109.20.0/22 -103.109.248.0/22 -103.109.48.0/22 -103.109.88.0/22 -103.11.16.0/22 -103.11.168.0/22 -103.11.180.0/22 -103.110.116.0/22 -103.110.127.0/24 -103.110.128.0/23 -103.110.132.0/22 -103.110.136.0/22 -103.110.152.0/22 -103.110.156.0/22 -103.110.188.0/22 -103.110.204.0/22 -103.110.80.0/23 -103.110.92.0/22 -103.111.172.0/22 -103.111.252.0/22 -103.111.64.0/22 -103.112.108.0/22 -103.112.112.0/22 -103.112.116.0/22 -103.112.140.0/22 -103.112.172.0/22 -103.112.184.0/22 -103.112.208.0/22 -103.112.28.0/22 -103.112.68.0/22 -103.112.72.0/22 -103.112.88.0/22 -103.112.92.0/22 -103.112.96.0/22 -103.113.144.0/22 -103.113.220.0/22 -103.113.232.0/22 -103.113.236.0/22 -103.113.4.0/22 -103.113.92.0/22 -103.114.100.0/22 -103.114.132.0/22 -103.114.148.0/22 -103.114.156.0/22 -103.114.176.0/22 -103.114.212.0/22 -103.114.236.0/22 -103.114.240.0/22 -103.114.28.0/22 -103.114.4.0/22 -103.114.68.0/22 -103.114.72.0/22 -103.115.120.0/22 -103.115.148.0/22 -103.115.16.0/22 -103.115.204.0/23 -103.115.248.0/22 -103.115.40.0/22 -103.115.44.0/22 -103.115.48.0/22 -103.115.52.0/22 -103.115.56.0/22 -103.115.60.0/22 -103.115.64.0/22 -103.115.68.0/22 -103.115.92.0/22 -103.116.120.0/22 -103.116.128.0/22 -103.116.132.0/23 -103.116.148.0/22 -103.116.184.0/22 -103.116.20.0/22 -103.116.206.0/23 -103.116.220.0/22 -103.116.224.0/22 -103.116.228.0/22 -103.116.40.0/22 -103.116.64.0/22 -103.116.72.0/22 -103.116.76.0/22 -103.116.92.0/22 -103.117.132.0/22 -103.117.136.0/22 -103.117.16.0/22 -103.117.188.0/22 -103.117.220.0/22 -103.117.72.0/22 -103.117.88.0/22 -103.118.173.0/24 -103.118.192.0/22 -103.118.196.0/22 -103.118.200.0/22 -103.118.204.0/22 -103.118.208.0/22 -103.118.212.0/22 -103.118.216.0/22 -103.118.220.0/22 -103.118.240.0/22 -103.118.244.0/22 -103.118.248.0/22 -103.118.252.0/22 -103.118.36.0/22 -103.118.52.0/22 -103.118.56.0/22 -103.118.60.0/22 -103.118.64.0/22 -103.118.68.0/22 -103.118.72.0/22 -103.118.88.0/22 -103.119.0.0/22 -103.119.104.0/22 -103.119.115.0/24 -103.119.12.0/22 -103.119.156.0/22 -103.119.16.0/22 -103.119.180.0/22 -103.119.200.0/22 -103.119.224.0/22 -103.119.28.0/22 -103.119.44.0/22 -103.12.136.0/22 -103.12.184.0/22 -103.12.232.0/22 -103.12.32.0/22 -103.12.68.0/22 -103.12.92.0/22 -103.120.100.0/22 -103.120.140.0/22 -103.120.196.0/22 -103.120.224.0/22 -103.120.52.0/22 -103.120.72.0/22 -103.120.88.0/22 -103.120.96.0/22 -103.121.160.0/22 -103.121.164.0/22 -103.121.250.0/24 -103.121.252.0/22 -103.121.52.0/22 -103.121.92.0/22 -103.122.176.0/22 -103.122.192.0/22 -103.122.240.0/22 -103.122.48.0/22 -103.123.116.0/22 -103.123.160.0/22 -103.123.176.0/22 -103.123.200.0/22 -103.123.204.0/22 -103.123.208.0/22 -103.123.212.0/22 -103.123.4.0/22 -103.123.56.0/22 -103.123.88.0/22 -103.123.92.0/22 -103.124.212.0/22 -103.124.216.0/22 -103.124.24.0/22 -103.124.48.0/22 -103.124.64.0/22 -103.125.132.0/22 -103.125.164.0/22 -103.125.196.0/22 -103.125.20.0/22 -103.125.236.0/22 -103.125.248.0/22 -103.125.44.0/22 -103.126.0.0/22 -103.126.100.0/22 -103.126.124.0/22 -103.126.128.0/22 -103.126.132.0/22 -103.126.16.0/22 -103.126.208.0/22 -103.126.44.0/22 -103.129.52.0/22 -103.13.12.0/22 -103.13.124.0/22 -103.13.144.0/22 -103.13.196.0/22 -103.13.220.0/22 -103.13.244.0/22 -103.130.132.0/22 -103.130.152.0/24 -103.130.160.0/22 -103.130.228.0/22 -103.131.152.0/22 -103.131.168.0/22 -103.131.176.0/22 -103.131.20.0/22 -103.131.224.0/22 -103.131.228.0/22 -103.131.240.0/22 -103.131.36.0/22 -103.132.104.0/22 -103.132.108.0/22 -103.132.112.0/22 -103.132.116.0/22 -103.132.120.0/22 -103.132.160.0/22 -103.132.164.0/22 -103.132.188.0/22 -103.132.208.0/22 -103.132.212.0/22 -103.132.234.0/23 -103.132.60.0/22 -103.132.64.0/22 -103.132.68.0/22 -103.132.72.0/22 -103.132.76.0/22 -103.132.80.0/22 -103.133.12.0/22 -103.133.128.0/22 -103.133.136.0/22 -103.133.176.0/22 -103.133.232.0/22 -103.133.40.0/22 -103.134.12.0/24 -103.134.196.0/22 -103.135.124.0/22 -103.135.148.0/22 -103.135.156.0/22 -103.135.160.0/22 -103.135.164.0/22 -103.135.176.0/22 -103.135.184.0/22 -103.135.192.0/22 -103.135.196.0/22 -103.135.236.0/22 -103.135.80.0/22 -103.136.128.0/22 -103.136.232.0/22 -103.137.136.0/23 -103.137.149.0/24 -103.137.180.0/22 -103.137.236.0/22 -103.137.58.0/23 -103.137.60.0/24 -103.137.76.0/22 -103.138.12.0/23 -103.138.134.0/23 -103.138.156.0/23 -103.138.2.0/23 -103.138.208.0/23 -103.138.220.0/23 -103.138.246.0/23 -103.138.248.0/23 -103.138.80.0/22 -103.139.0.0/23 -103.139.113.0/24 -103.139.134.0/23 -103.139.136.0/23 -103.139.172.0/23 -103.139.2.0/23 -103.139.204.0/23 -103.139.212.0/23 -103.139.22.0/23 -103.14.100.0/22 -103.14.132.0/22 -103.14.136.0/22 -103.14.156.0/22 -103.14.240.0/22 -103.14.84.0/22 -103.140.126.0/23 -103.140.14.0/23 -103.140.140.0/23 -103.140.144.0/23 -103.140.152.0/23 -103.140.192.0/23 -103.140.228.0/23 -103.140.70.0/23 -103.140.8.0/23 -103.141.10.0/23 -103.141.128.0/23 -103.141.186.0/23 -103.141.242.0/23 -103.141.58.0/23 -103.142.102.0/23 -103.142.122.0/23 -103.142.128.0/23 -103.142.140.0/23 -103.142.154.0/23 -103.142.156.0/23 -103.142.172.0/23 -103.142.180.0/23 -103.142.186.0/23 -103.142.190.0/23 -103.142.220.0/23 -103.142.230.0/24 -103.142.234.0/23 -103.142.238.0/23 -103.142.248.0/23 -103.142.28.0/23 -103.142.58.0/23 -103.142.82.0/23 -103.142.96.0/23 -103.143.120.0/23 -103.143.124.0/23 -103.143.132.0/23 -103.143.134.0/23 -103.143.16.0/23 -103.143.174.0/23 -103.143.18.0/23 -103.143.228.0/23 -103.143.31.0/24 -103.143.74.0/23 -103.144.108.0/23 -103.144.136.0/23 -103.144.148.0/23 -103.144.158.0/23 -103.144.240.0/23 -103.144.40.0/23 -103.144.52.0/23 -103.144.66.0/23 -103.144.70.0/23 -103.144.72.0/23 -103.145.106.0/23 -103.145.122.0/23 -103.145.188.0/23 -103.145.190.0/23 -103.145.38.0/23 -103.145.40.0/23 -103.145.42.0/23 -103.145.60.0/23 -103.145.72.0/23 -103.145.80.0/23 -103.145.86.0/23 -103.145.92.0/23 -103.145.94.0/23 -103.145.98.0/23 -103.146.124.0/23 -103.146.126.0/23 -103.146.138.0/23 -103.146.230.0/23 -103.146.236.0/23 -103.146.252.0/23 -103.146.6.0/23 -103.146.72.0/23 -103.146.88.0/23 -103.146.90.0/23 -103.147.12.0/23 -103.147.124.0/23 -103.147.198.0/23 -103.147.206.0/23 -103.148.174.0/23 -103.149.110.0/23 -103.149.132.0/23 -103.149.144.0/23 -103.149.156.0/23 -103.149.17.0/24 -103.149.181.0/24 -103.149.210.0/23 -103.149.214.0/23 -103.149.220.0/23 -103.149.242.0/23 -103.149.244.0/23 -103.149.246.0/23 -103.149.248.0/23 -103.149.44.0/23 -103.149.6.0/23 -103.15.16.0/22 -103.15.200.0/22 -103.15.4.0/22 -103.15.8.0/22 -103.15.96.0/22 -103.150.122.0/23 -103.150.126.0/23 -103.150.128.0/23 -103.150.130.0/23 -103.150.146.0/23 -103.150.164.0/23 -103.150.172.0/23 -103.150.180.0/23 -103.150.200.0/23 -103.150.210.0/23 -103.150.214.0/23 -103.150.216.0/23 -103.150.24.0/23 -103.150.244.0/23 -103.150.66.0/23 -103.150.72.0/23 -103.151.138.0/23 -103.151.142.0/23 -103.151.148.0/23 -103.151.150.0/23 -103.151.158.0/23 -103.151.178.0/23 -103.151.206.0/23 -103.151.216.0/23 -103.151.228.0/23 -103.151.4.0/23 -103.151.44.0/23 -103.152.112.0/23 -103.152.120.0/23 -103.152.122.0/23 -103.152.132.0/23 -103.152.14.0/23 -103.152.152.0/23 -103.152.168.0/23 -103.152.170.0/23 -103.152.186.0/23 -103.152.190.0/23 -103.152.192.0/23 -103.152.200.0/23 -103.152.208.0/23 -103.152.224.0/23 -103.152.226.0/23 -103.152.24.0/23 -103.152.246.0/23 -103.152.250.0/23 -103.152.28.0/23 -103.152.30.0/23 -103.152.56.0/23 -103.152.76.0/23 -103.152.98.0/23 -103.153.100.0/23 -103.153.114.0/23 -103.153.122.0/23 -103.153.128.0/23 -103.153.132.0/23 -103.153.138.0/23 -103.153.146.0/23 -103.153.160.0/23 -103.153.36.0/23 -103.153.4.0/23 -103.153.98.0/23 -103.154.162.0/23 -103.154.164.0/23 -103.154.168.0/23 -103.154.18.0/23 -103.154.242.0/23 -103.154.30.0/23 -103.154.32.0/23 -103.154.40.0/23 -103.154.66.0/23 -103.155.100.0/23 -103.155.110.0/23 -103.155.120.0/23 -103.155.14.0/23 -103.155.16.0/23 -103.155.214.0/23 -103.155.248.0/23 -103.155.34.0/23 -103.155.48.0/23 -103.155.76.0/23 -103.156.104.0/23 -103.156.158.0/23 -103.156.174.0/23 -103.156.186.0/23 -103.156.228.0/23 -103.156.24.0/23 -103.156.28.0/23 -103.156.68.0/23 -103.156.78.0/23 -103.157.138.0/23 -103.157.174.0/23 -103.157.212.0/23 -103.157.234.0/23 -103.157.254.0/23 -103.157.30.0/23 -103.158.0.0/23 -103.158.13.0/24 -103.158.16.0/23 -103.158.190.0/23 -103.158.200.0/23 -103.158.224.0/23 -103.158.8.0/23 -103.159.122.0/23 -103.159.124.0/23 -103.159.134.0/23 -103.159.142.0/23 -103.159.80.0/23 -103.16.108.0/22 -103.16.124.0/22 -103.16.52.0/22 -103.16.80.0/22 -103.16.84.0/22 -103.16.88.0/22 -103.160.112.0/23 -103.160.114.0/23 -103.160.244.0/23 -103.160.254.0/23 -103.160.32.0/23 -103.160.34.0/23 -103.161.102.0/23 -103.161.138.0/23 -103.161.14.0/23 -103.161.208.0/23 -103.161.220.0/23 -103.161.254.0/23 -103.162.10.0/23 -103.162.116.0/23 -103.162.32.0/23 -103.162.38.0/23 -103.163.180.0/23 -103.163.28.0/23 -103.163.32.0/23 -103.163.46.0/23 -103.163.74.0/23 -103.164.178.0/23 -103.164.226.0/23 -103.164.32.0/23 -103.164.4.0/23 -103.164.40.0/23 -103.164.42.0/23 -103.164.64.0/23 -103.164.76.0/23 -103.165.110.0/23 -103.165.44.0/23 -103.165.52.0/23 -103.165.82.0/23 -103.166.138.0/23 -103.166.20.0/23 -103.166.242.0/23 -103.166.246.0/23 -103.166.50.0/23 -103.166.52.0/23 -103.166.54.0/23 -103.166.84.0/23 -103.167.0.0/23 -103.167.36.0/23 -103.168.170.0/23 -103.168.98.0/23 -103.169.108.0/23 -103.169.162.0/23 -103.169.202.0/23 -103.169.216.0/23 -103.169.50.0/23 -103.169.62.0/23 -103.17.120.0/22 -103.17.136.0/22 -103.17.160.0/22 -103.17.204.0/22 -103.17.228.0/22 -103.17.40.0/22 -103.17.64.0/22 -103.170.134.0/23 -103.170.210.0/23 -103.170.212.0/23 -103.170.4.0/23 -103.170.72.0/23 -103.171.166.0/23 -103.171.214.0/23 -103.171.32.0/23 -103.172.160.0/23 -103.172.191.0/24 -103.172.32.0/23 -103.173.102.0/23 -103.173.182.0/23 -103.173.184.0/23 -103.174.94.0/23 -103.175.114.0/23 -103.175.118.0/23 -103.175.14.0/23 -103.175.98.0/23 -103.176.222.0/23 -103.176.244.0/23 -103.176.52.0/23 -103.177.136.0/23 -103.177.162.0/23 -103.177.28.0/23 -103.177.44.0/23 -103.177.70.0/23 -103.178.240.0/23 -103.178.56.0/23 -103.179.76.0/23 -103.179.78.0/23 -103.18.192.0/22 -103.18.208.0/22 -103.18.212.0/22 -103.18.224.0/22 -103.180.108.0/23 -103.180.226.0/23 -103.19.12.0/22 -103.19.232.0/22 -103.19.40.0/22 -103.19.44.0/22 -103.19.64.0/22 -103.19.68.0/22 -103.19.72.0/22 -103.192.0.0/22 -103.192.100.0/22 -103.192.104.0/22 -103.192.108.0/22 -103.192.112.0/22 -103.192.12.0/22 -103.192.128.0/22 -103.192.132.0/22 -103.192.136.0/22 -103.192.140.0/22 -103.192.144.0/22 -103.192.16.0/22 -103.192.164.0/22 -103.192.188.0/22 -103.192.20.0/22 -103.192.208.0/22 -103.192.212.0/22 -103.192.216.0/22 -103.192.24.0/22 -103.192.252.0/22 -103.192.28.0/22 -103.192.4.0/22 -103.192.48.0/22 -103.192.52.0/22 -103.192.56.0/22 -103.192.8.0/22 -103.192.84.0/22 -103.192.88.0/22 -103.192.92.0/22 -103.192.96.0/22 -103.193.120.0/22 -103.193.140.0/22 -103.193.160.0/22 -103.193.188.0/22 -103.193.192.0/22 -103.193.212.0/22 -103.193.216.0/22 -103.193.220.0/22 -103.193.224.0/22 -103.193.228.0/22 -103.193.232.0/22 -103.193.236.0/22 -103.193.240.0/22 -103.193.40.0/22 -103.193.44.0/22 -103.194.16.0/22 -103.195.104.0/22 -103.195.112.0/22 -103.195.148.0/22 -103.195.152.0/22 -103.195.160.0/22 -103.196.168.0/22 -103.196.204.0/22 -103.196.64.0/22 -103.196.72.0/22 -103.196.88.0/22 -103.196.92.0/22 -103.196.96.0/22 -103.197.180.0/22 -103.197.228.0/22 -103.198.124.0/22 -103.198.156.0/22 -103.198.180.0/22 -103.198.196.0/22 -103.198.20.0/22 -103.198.216.0/22 -103.198.220.0/22 -103.198.224.0/22 -103.198.228.0/22 -103.198.232.0/22 -103.198.236.0/22 -103.198.240.0/22 -103.198.244.0/22 -103.198.60.0/22 -103.198.64.0/22 -103.198.72.0/22 -103.199.164.0/22 -103.199.196.0/22 -103.199.228.0/22 -103.199.248.0/22 -103.199.252.0/22 -103.2.108.0/22 -103.2.156.0/22 -103.2.164.0/22 -103.2.200.0/22 -103.2.204.0/22 -103.2.208.0/22 -103.2.212.0/22 -103.20.112.0/22 -103.20.12.0/22 -103.20.128.0/22 -103.20.160.0/22 -103.20.248.0/22 -103.20.32.0/22 -103.20.44.0/22 -103.20.68.0/22 -103.200.136.0/22 -103.200.140.0/22 -103.200.144.0/22 -103.200.148.0/22 -103.200.152.0/22 -103.200.156.0/22 -103.200.160.0/22 -103.200.164.0/22 -103.200.168.0/22 -103.200.172.0/22 -103.200.176.0/22 -103.200.180.0/22 -103.200.184.0/22 -103.200.188.0/22 -103.200.192.0/22 -103.200.220.0/22 -103.200.224.0/22 -103.200.228.0/22 -103.200.232.0/22 -103.200.236.0/22 -103.200.240.0/22 -103.200.244.0/22 -103.200.248.0/22 -103.200.252.0/22 -103.200.28.0/22 -103.200.52.0/22 -103.200.64.0/22 -103.200.68.0/22 -103.201.0.0/22 -103.201.100.0/22 -103.201.104.0/22 -103.201.108.0/22 -103.201.112.0/22 -103.201.116.0/22 -103.201.12.0/22 -103.201.120.0/22 -103.201.152.0/22 -103.201.156.0/22 -103.201.16.0/22 -103.201.160.0/22 -103.201.164.0/22 -103.201.168.0/22 -103.201.172.0/22 -103.201.176.0/22 -103.201.180.0/22 -103.201.184.0/22 -103.201.188.0/22 -103.201.192.0/22 -103.201.196.0/22 -103.201.20.0/22 -103.201.200.0/22 -103.201.204.0/22 -103.201.208.0/22 -103.201.212.0/22 -103.201.216.0/22 -103.201.220.0/22 -103.201.224.0/22 -103.201.228.0/22 -103.201.232.0/22 -103.201.236.0/22 -103.201.240.0/22 -103.201.244.0/22 -103.201.248.0/22 -103.201.252.0/22 -103.201.28.0/22 -103.201.32.0/22 -103.201.36.0/22 -103.201.4.0/22 -103.201.40.0/22 -103.201.44.0/22 -103.201.48.0/22 -103.201.52.0/22 -103.201.56.0/22 -103.201.60.0/22 -103.201.64.0/22 -103.201.76.0/22 -103.201.8.0/22 -103.201.80.0/22 -103.201.84.0/22 -103.201.88.0/22 -103.201.92.0/22 -103.201.96.0/22 -103.202.0.0/22 -103.202.100.0/22 -103.202.104.0/22 -103.202.108.0/22 -103.202.112.0/22 -103.202.116.0/22 -103.202.12.0/22 -103.202.120.0/22 -103.202.124.0/22 -103.202.128.0/22 -103.202.132.0/22 -103.202.136.0/22 -103.202.140.0/22 -103.202.144.0/22 -103.202.152.0/22 -103.202.156.0/22 -103.202.16.0/22 -103.202.160.0/22 -103.202.164.0/22 -103.202.168.0/22 -103.202.172.0/22 -103.202.176.0/22 -103.202.180.0/22 -103.202.184.0/22 -103.202.188.0/22 -103.202.192.0/22 -103.202.196.0/22 -103.202.20.0/22 -103.202.200.0/21 -103.202.212.0/22 -103.202.228.0/22 -103.202.236.0/22 -103.202.24.0/22 -103.202.240.0/22 -103.202.244.0/22 -103.202.248.0/22 -103.202.252.0/22 -103.202.28.0/22 -103.202.32.0/22 -103.202.36.0/22 -103.202.4.0/22 -103.202.40.0/22 -103.202.44.0/22 -103.202.56.0/22 -103.202.60.0/22 -103.202.64.0/22 -103.202.68.0/22 -103.202.72.0/22 -103.202.76.0/22 -103.202.8.0/22 -103.202.80.0/22 -103.202.84.0/22 -103.202.88.0/22 -103.202.92.0/22 -103.202.96.0/22 -103.203.0.0/22 -103.203.100.0/22 -103.203.104.0/22 -103.203.108.0/22 -103.203.112.0/22 -103.203.116.0/22 -103.203.12.0/22 -103.203.120.0/22 -103.203.124.0/22 -103.203.128.0/22 -103.203.140.0/22 -103.203.16.0/22 -103.203.164.0/22 -103.203.168.0/22 -103.203.192.0/22 -103.203.20.0/22 -103.203.200.0/22 -103.203.212.0/22 -103.203.216.0/22 -103.203.24.0/22 -103.203.28.0/22 -103.203.32.0/22 -103.203.4.0/22 -103.203.56.0/22 -103.203.8.0/22 -103.203.96.0/22 -103.204.112.0/22 -103.204.136.0/22 -103.204.140.0/22 -103.204.144.0/22 -103.204.148.0/22 -103.204.152.0/22 -103.204.196.0/22 -103.204.232.0/22 -103.204.236.0/22 -103.204.24.0/22 -103.204.72.0/22 -103.204.88.0/22 -103.205.108.0/22 -103.205.116.0/22 -103.205.120.0/22 -103.205.136.0/22 -103.205.162.0/24 -103.205.188.0/22 -103.205.192.0/22 -103.205.196.0/22 -103.205.200.0/22 -103.205.236.0/22 -103.205.248.0/22 -103.205.252.0/22 -103.205.4.0/22 -103.205.40.0/22 -103.205.44.0/22 -103.205.52.0/22 -103.205.8.0/22 -103.206.0.0/22 -103.206.148.0/22 -103.206.44.0/22 -103.207.104.0/22 -103.207.164.0/22 -103.207.184.0/22 -103.207.188.0/22 -103.207.192.0/22 -103.207.196.0/22 -103.207.200.0/22 -103.207.204.0/22 -103.207.208.0/22 -103.207.212.0/22 -103.207.220.0/22 -103.207.228.0/22 -103.207.232.0/22 -103.207.48.0/22 -103.208.12.0/22 -103.208.16.0/22 -103.208.28.0/22 -103.208.40.0/22 -103.208.44.0/22 -103.208.48.0/22 -103.209.112.0/22 -103.209.136.0/22 -103.209.200.0/22 -103.209.208.0/22 -103.209.216.0/22 -103.21.112.0/22 -103.21.116.0/22 -103.21.136.0/22 -103.21.140.0/22 -103.21.176.0/22 -103.21.208.0/22 -103.21.240.0/22 -103.210.0.0/22 -103.210.156.0/22 -103.210.160.0/22 -103.210.164.0/22 -103.210.168.0/22 -103.210.172.0/22 -103.210.176.0/22 -103.210.180.0/22 -103.210.184.0/22 -103.210.188.0/22 -103.210.216.0/22 -103.210.96.0/22 -103.211.100.0/22 -103.211.156.0/22 -103.211.164.0/22 -103.211.192.0/22 -103.211.220.0/22 -103.211.224.0/22 -103.211.248.0/22 -103.211.44.0/22 -103.211.96.0/22 -103.212.0.0/22 -103.212.100.0/22 -103.212.104.0/22 -103.212.108.0/22 -103.212.12.0/22 -103.212.148.0/22 -103.212.164.0/22 -103.212.196.0/22 -103.212.200.0/22 -103.212.228.0/22 -103.212.252.0/22 -103.212.32.0/22 -103.212.4.0/22 -103.212.44.0/22 -103.212.48.0/22 -103.212.8.0/22 -103.212.84.0/22 -103.213.132.0/22 -103.213.136.0/22 -103.213.140.0/22 -103.213.144.0/22 -103.213.148.0/22 -103.213.152.0/22 -103.213.156.0/22 -103.213.160.0/22 -103.213.164.0/22 -103.213.168.0/22 -103.213.172.0/22 -103.213.176.0/22 -103.213.180.0/22 -103.213.184.0/22 -103.213.188.0/22 -103.213.248.0/22 -103.213.40.0/22 -103.213.44.0/22 -103.213.48.0/22 -103.213.52.0/22 -103.213.56.0/22 -103.213.60.0/22 -103.213.64.0/22 -103.213.68.0/22 -103.213.72.0/22 -103.213.76.0/22 -103.213.80.0/22 -103.213.84.0/22 -103.213.88.0/22 -103.213.92.0/22 -103.213.96.0/22 -103.214.168.0/22 -103.214.212.0/22 -103.214.240.0/22 -103.214.244.0/22 -103.214.48.0/22 -103.214.84.0/22 -103.215.100.0/22 -103.215.104.0/22 -103.215.108.0/22 -103.215.116.0/22 -103.215.120.0/22 -103.215.140.0/22 -103.215.28.0/22 -103.215.32.0/22 -103.215.36.0/22 -103.215.44.0/22 -103.215.48.0/22 -103.216.108.0/22 -103.216.12.0/22 -103.216.136.0/22 -103.216.152.0/22 -103.216.16.0/22 -103.216.20.0/22 -103.216.224.0/22 -103.216.228.0/22 -103.216.24.0/22 -103.216.240.0/22 -103.216.244.0/22 -103.216.248.0/22 -103.216.252.0/22 -103.216.28.0/22 -103.216.32.0/22 -103.216.36.0/22 -103.216.4.0/22 -103.216.40.0/22 -103.216.44.0/22 -103.216.64.0/22 -103.216.8.0/22 -103.217.0.0/22 -103.217.12.0/22 -103.217.16.0/22 -103.217.168.0/22 -103.217.180.0/22 -103.217.184.0/22 -103.217.188.0/22 -103.217.192.0/22 -103.217.196.0/22 -103.217.20.0/22 -103.217.200.0/22 -103.217.204.0/22 -103.217.24.0/22 -103.217.28.0/22 -103.217.32.0/22 -103.217.36.0/22 -103.217.4.0/22 -103.217.40.0/22 -103.217.44.0/22 -103.217.48.0/22 -103.217.52.0/22 -103.217.56.0/22 -103.217.60.0/22 -103.217.8.0/22 -103.218.12.0/22 -103.218.16.0/22 -103.218.192.0/22 -103.218.196.0/22 -103.218.20.0/22 -103.218.200.0/22 -103.218.204.0/22 -103.218.208.0/22 -103.218.212.0/22 -103.218.216.0/22 -103.218.28.0/22 -103.218.32.0/22 -103.218.36.0/22 -103.218.40.0/22 -103.218.44.0/22 -103.218.48.0/22 -103.218.52.0/22 -103.218.56.0/22 -103.218.60.0/22 -103.218.64.0/22 -103.218.68.0/22 -103.218.72.0/22 -103.218.76.0/22 -103.218.8.0/22 -103.218.80.0/22 -103.218.84.0/22 -103.218.88.0/22 -103.218.92.0/22 -103.219.100.0/22 -103.219.176.0/22 -103.219.184.0/22 -103.219.24.0/22 -103.219.28.0/22 -103.219.32.0/22 -103.219.36.0/22 -103.219.64.0/22 -103.219.84.0/22 -103.219.88.0/22 -103.219.92.0/22 -103.219.96.0/22 -103.22.0.0/22 -103.22.100.0/22 -103.22.104.0/22 -103.22.108.0/22 -103.22.112.0/22 -103.22.116.0/22 -103.22.12.0/22 -103.22.120.0/22 -103.22.124.0/22 -103.22.16.0/22 -103.22.188.0/22 -103.22.20.0/22 -103.22.228.0/22 -103.22.24.0/22 -103.22.252.0/22 -103.22.28.0/22 -103.22.32.0/22 -103.22.36.0/22 -103.22.4.0/22 -103.22.40.0/22 -103.22.44.0/22 -103.22.48.0/22 -103.22.52.0/22 -103.22.56.0/22 -103.22.60.0/22 -103.22.64.0/22 -103.22.68.0/22 -103.22.72.0/22 -103.22.76.0/22 -103.22.8.0/22 -103.22.80.0/22 -103.22.84.0/22 -103.22.88.0/22 -103.22.92.0/22 -103.220.100.0/22 -103.220.104.0/22 -103.220.108.0/22 -103.220.116.0/22 -103.220.120.0/22 -103.220.124.0/22 -103.220.128.0/22 -103.220.132.0/22 -103.220.136.0/22 -103.220.140.0/22 -103.220.144.0/22 -103.220.148.0/22 -103.220.152.0/22 -103.220.160.0/22 -103.220.164.0/22 -103.220.168.0/22 -103.220.172.0/22 -103.220.176.0/22 -103.220.180.0/22 -103.220.184.0/22 -103.220.188.0/22 -103.220.192.0/22 -103.220.196.0/22 -103.220.200.0/22 -103.220.240.0/22 -103.220.244.0/22 -103.220.248.0/22 -103.220.252.0/22 -103.220.48.0/22 -103.220.52.0/22 -103.220.56.0/22 -103.220.60.0/22 -103.220.64.0/22 -103.220.92.0/22 -103.220.96.0/22 -103.221.0.0/22 -103.221.100.0/22 -103.221.104.0/22 -103.221.108.0/22 -103.221.112.0/22 -103.221.116.0/22 -103.221.12.0/22 -103.221.120.0/22 -103.221.124.0/22 -103.221.128.0/22 -103.221.132.0/22 -103.221.136.0/22 -103.221.140.0/22 -103.221.144.0/22 -103.221.148.0/22 -103.221.152.0/22 -103.221.156.0/22 -103.221.16.0/22 -103.221.160.0/22 -103.221.164.0/22 -103.221.168.0/22 -103.221.172.0/22 -103.221.176.0/22 -103.221.180.0/22 -103.221.184.0/22 -103.221.188.0/22 -103.221.192.0/22 -103.221.196.0/22 -103.221.20.0/22 -103.221.200.0/22 -103.221.204.0/22 -103.221.24.0/22 -103.221.28.0/22 -103.221.32.0/22 -103.221.36.0/22 -103.221.4.0/22 -103.221.40.0/22 -103.221.44.0/22 -103.221.48.0/22 -103.221.8.0/22 -103.221.88.0/22 -103.221.92.0/22 -103.221.96.0/22 -103.222.0.0/22 -103.222.100.0/22 -103.222.104.0/22 -103.222.108.0/22 -103.222.112.0/22 -103.222.116.0/22 -103.222.12.0/22 -103.222.120.0/22 -103.222.124.0/22 -103.222.128.0/22 -103.222.132.0/22 -103.222.136.0/22 -103.222.140.0/22 -103.222.144.0/22 -103.222.148.0/22 -103.222.152.0/22 -103.222.156.0/22 -103.222.16.0/22 -103.222.160.0/22 -103.222.164.0/22 -103.222.168.0/22 -103.222.172.0/22 -103.222.176.0/22 -103.222.180.0/22 -103.222.184.0/22 -103.222.188.0/22 -103.222.192.0/22 -103.222.196.0/22 -103.222.200.0/22 -103.222.204.0/22 -103.222.208.0/22 -103.222.212.0/22 -103.222.216.0/22 -103.222.220.0/22 -103.222.224.0/22 -103.222.228.0/22 -103.222.232.0/22 -103.222.24.0/22 -103.222.240.0/22 -103.222.244.0/22 -103.222.28.0/22 -103.222.32.0/22 -103.222.36.0/22 -103.222.4.0/22 -103.222.40.0/22 -103.222.44.0/22 -103.222.48.0/22 -103.222.52.0/22 -103.222.56.0/22 -103.222.60.0/22 -103.222.64.0/22 -103.222.68.0/22 -103.222.72.0/22 -103.222.76.0/22 -103.222.8.0/22 -103.222.80.0/22 -103.222.84.0/22 -103.222.88.0/22 -103.222.92.0/22 -103.222.96.0/22 -103.223.100.0/22 -103.223.104.0/22 -103.223.108.0/22 -103.223.112.0/22 -103.223.116.0/22 -103.223.120.0/22 -103.223.124.0/22 -103.223.128.0/22 -103.223.132.0/22 -103.223.140.0/22 -103.223.144.0/22 -103.223.148.0/22 -103.223.152.0/22 -103.223.156.0/22 -103.223.16.0/22 -103.223.160.0/22 -103.223.164.0/22 -103.223.168.0/22 -103.223.172.0/22 -103.223.176.0/22 -103.223.180.0/22 -103.223.188.0/22 -103.223.192.0/22 -103.223.196.0/22 -103.223.20.0/22 -103.223.200.0/22 -103.223.204.0/22 -103.223.208.0/22 -103.223.212.0/22 -103.223.216.0/22 -103.223.220.0/22 -103.223.224.0/22 -103.223.228.0/22 -103.223.232.0/22 -103.223.236.0/22 -103.223.24.0/22 -103.223.240.0/22 -103.223.244.0/22 -103.223.248.0/22 -103.223.252.0/22 -103.223.28.0/22 -103.223.32.0/22 -103.223.36.0/22 -103.223.40.0/22 -103.223.44.0/22 -103.223.48.0/22 -103.223.52.0/22 -103.223.56.0/22 -103.223.60.0/22 -103.223.64.0/22 -103.223.68.0/22 -103.223.72.0/22 -103.223.76.0/22 -103.223.80.0/22 -103.223.84.0/22 -103.223.88.0/22 -103.223.92.0/22 -103.223.96.0/22 -103.224.0.0/22 -103.224.220.0/22 -103.224.224.0/22 -103.224.228.0/22 -103.224.232.0/22 -103.224.40.0/22 -103.224.44.0/22 -103.224.60.0/22 -103.224.80.0/22 -103.225.84.0/22 -103.226.132.0/22 -103.226.156.0/22 -103.226.16.0/22 -103.226.180.0/22 -103.226.196.0/22 -103.226.40.0/22 -103.226.56.0/22 -103.226.60.0/22 -103.226.80.0/22 -103.227.100.0/22 -103.227.120.0/22 -103.227.132.0/22 -103.227.136.0/22 -103.227.196.0/22 -103.227.204.0/22 -103.227.212.0/22 -103.227.228.0/22 -103.227.48.0/22 -103.227.72.0/22 -103.227.76.0/22 -103.227.80.0/22 -103.228.12.0/22 -103.228.136.0/22 -103.228.160.0/22 -103.228.176.0/22 -103.228.204.0/22 -103.228.208.0/22 -103.228.228.0/22 -103.228.232.0/22 -103.228.88.0/22 -103.229.136.0/22 -103.229.148.0/22 -103.229.172.0/22 -103.229.20.0/22 -103.229.212.0/22 -103.229.216.0/22 -103.229.220.0/22 -103.229.228.0/22 -103.229.236.0/22 -103.229.240.0/22 -103.229.60.0/22 -103.23.160.0/22 -103.23.164.0/22 -103.23.176.0/22 -103.23.228.0/22 -103.23.56.0/22 -103.23.8.0/22 -103.230.0.0/22 -103.230.196.0/22 -103.230.200.0/22 -103.230.204.0/22 -103.230.212.0/22 -103.230.236.0/22 -103.230.28.0/22 -103.230.44.0/22 -103.230.96.0/22 -103.231.16.0/22 -103.231.180.0/22 -103.231.184.0/22 -103.231.20.0/22 -103.231.244.0/22 -103.231.64.0/22 -103.231.68.0/22 -103.232.144.0/22 -103.232.188.0/22 -103.232.212.0/22 -103.232.4.0/22 -103.233.104.0/22 -103.233.128.0/22 -103.233.136.0/22 -103.233.228.0/22 -103.233.4.0/22 -103.233.44.0/22 -103.233.52.0/22 -103.234.0.0/22 -103.234.128.0/22 -103.234.172.0/22 -103.234.180.0/22 -103.234.20.0/22 -103.234.244.0/22 -103.234.56.0/22 -103.235.128.0/22 -103.235.132.0/22 -103.235.136.0/22 -103.235.140.0/22 -103.235.144.0/22 -103.235.148.0/22 -103.235.16.0/22 -103.235.184.0/22 -103.235.192.0/22 -103.235.200.0/22 -103.235.220.0/22 -103.235.224.0/22 -103.235.228.0/22 -103.235.232.0/22 -103.235.236.0/22 -103.235.240.0/22 -103.235.244.0/22 -103.235.248.0/22 -103.235.252.0/22 -103.235.48.0/22 -103.235.56.0/22 -103.235.60.0/22 -103.235.80.0/22 -103.235.84.0/22 -103.236.0.0/22 -103.236.12.0/22 -103.236.120.0/22 -103.236.16.0/22 -103.236.184.0/22 -103.236.20.0/22 -103.236.220.0/22 -103.236.232.0/22 -103.236.24.0/22 -103.236.240.0/22 -103.236.244.0/22 -103.236.248.0/22 -103.236.252.0/22 -103.236.28.0/22 -103.236.32.0/22 -103.236.36.0/22 -103.236.4.0/22 -103.236.40.0/22 -103.236.44.0/22 -103.236.48.0/22 -103.236.52.0/22 -103.236.56.0/22 -103.236.60.0/22 -103.236.64.0/22 -103.236.68.0/22 -103.236.72.0/22 -103.236.76.0/22 -103.236.8.0/22 -103.236.80.0/22 -103.236.84.0/22 -103.236.88.0/22 -103.236.92.0/22 -103.236.96.0/22 -103.237.0.0/22 -103.237.12.0/22 -103.237.152.0/22 -103.237.176.0/22 -103.237.180.0/22 -103.237.184.0/22 -103.237.188.0/22 -103.237.192.0/22 -103.237.196.0/22 -103.237.200.0/22 -103.237.204.0/22 -103.237.208.0/22 -103.237.212.0/22 -103.237.216.0/22 -103.237.220.0/22 -103.237.224.0/22 -103.237.228.0/22 -103.237.232.0/22 -103.237.236.0/22 -103.237.24.0/22 -103.237.240.0/22 -103.237.244.0/22 -103.237.248.0/22 -103.237.252.0/22 -103.237.28.0/22 -103.237.4.0/22 -103.237.68.0/22 -103.237.8.0/22 -103.237.88.0/22 -103.238.0.0/22 -103.238.132.0/22 -103.238.140.0/22 -103.238.144.0/22 -103.238.16.0/22 -103.238.160.0/22 -103.238.164.0/22 -103.238.168.0/22 -103.238.172.0/22 -103.238.176.0/22 -103.238.180.0/22 -103.238.184.0/22 -103.238.188.0/22 -103.238.196.0/22 -103.238.20.0/22 -103.238.204.0/22 -103.238.24.0/22 -103.238.252.0/22 -103.238.28.0/22 -103.238.32.0/22 -103.238.36.0/22 -103.238.4.0/22 -103.238.40.0/22 -103.238.44.0/22 -103.238.48.0/22 -103.238.52.0/22 -103.238.56.0/22 -103.238.88.0/22 -103.238.92.0/22 -103.238.96.0/22 -103.239.0.0/22 -103.239.152.0/22 -103.239.156.0/22 -103.239.176.0/22 -103.239.180.0/22 -103.239.184.0/22 -103.239.192.0/22 -103.239.196.0/22 -103.239.204.0/22 -103.239.208.0/22 -103.239.224.0/22 -103.239.244.0/22 -103.239.44.0/22 -103.239.68.0/22 -103.239.96.0/22 -103.24.116.0/22 -103.24.128.0/22 -103.24.144.0/22 -103.24.176.0/22 -103.24.184.0/22 -103.24.220.0/22 -103.24.228.0/22 -103.24.24.0/22 -103.24.248.0/22 -103.24.252.0/22 -103.240.124.0/22 -103.240.16.0/22 -103.240.172.0/22 -103.240.188.0/22 -103.240.244.0/22 -103.240.36.0/22 -103.240.72.0/22 -103.240.84.0/22 -103.241.12.0/22 -103.241.160.0/22 -103.241.184.0/22 -103.241.188.0/22 -103.241.220.0/22 -103.241.72.0/22 -103.241.92.0/22 -103.241.96.0/22 -103.242.128.0/22 -103.242.132.0/22 -103.242.160.0/22 -103.242.168.0/22 -103.242.172.0/22 -103.242.176.0/22 -103.242.200.0/22 -103.242.212.0/22 -103.242.220.0/22 -103.242.240.0/22 -103.242.64.0/22 -103.243.136.0/22 -103.243.252.0/22 -103.244.116.0/22 -103.244.16.0/22 -103.244.164.0/22 -103.244.232.0/22 -103.244.252.0/22 -103.244.58.0/23 -103.244.60.0/22 -103.244.64.0/22 -103.244.68.0/22 -103.244.72.0/22 -103.244.76.0/22 -103.244.80.0/22 -103.244.84.0/22 -103.245.124.0/22 -103.245.128.0/22 -103.245.23.0/24 -103.245.52.0/22 -103.245.60.0/22 -103.245.80.0/22 -103.246.12.0/22 -103.246.120.0/22 -103.246.124.0/22 -103.246.132.0/22 -103.246.152.0/22 -103.246.156.0/22 -103.246.8.0/22 -103.247.168.0/22 -103.247.172.0/22 -103.247.176.0/22 -103.247.200.0/22 -103.247.212.0/22 -103.248.0.0/23 -103.248.100.0/22 -103.248.124.0/22 -103.248.152.0/22 -103.248.168.0/22 -103.248.192.0/22 -103.248.212.0/22 -103.248.224.0/22 -103.248.64.0/22 -103.249.104.0/22 -103.249.12.0/22 -103.249.128.0/22 -103.249.136.0/22 -103.249.144.0/22 -103.249.164.0/22 -103.249.168.0/22 -103.249.172.0/22 -103.249.176.0/22 -103.249.188.0/22 -103.249.192.0/22 -103.249.244.0/22 -103.249.252.0/22 -103.249.52.0/22 -103.249.8.0/22 -103.25.148.0/22 -103.25.156.0/22 -103.25.20.0/22 -103.25.216.0/22 -103.25.24.0/22 -103.25.28.0/22 -103.25.32.0/22 -103.25.36.0/22 -103.25.40.0/22 -103.25.48.0/22 -103.25.64.0/22 -103.25.68.0/22 -103.25.8.0/23 -103.250.104.0/22 -103.250.124.0/22 -103.250.180.0/22 -103.250.192.0/22 -103.250.216.0/22 -103.250.224.0/22 -103.250.236.0/22 -103.250.248.0/22 -103.250.252.0/22 -103.250.32.0/22 -103.251.124.0/22 -103.251.128.0/22 -103.251.160.0/22 -103.251.192.0/22 -103.251.204.0/22 -103.251.240.0/22 -103.251.32.0/22 -103.251.84.0/22 -103.251.96.0/22 -103.252.104.0/22 -103.252.172.0/22 -103.252.204.0/22 -103.252.208.0/22 -103.252.232.0/22 -103.252.248.0/22 -103.252.28.0/22 -103.252.36.0/22 -103.252.64.0/22 -103.252.96.0/22 -103.253.204.0/22 -103.253.220.0/22 -103.253.224.0/22 -103.253.232.0/22 -103.253.4.0/22 -103.253.60.0/22 -103.254.112.0/22 -103.254.176.0/22 -103.254.188.0/22 -103.254.196.0/24 -103.254.20.0/22 -103.254.220.0/22 -103.254.64.0/22 -103.254.68.0/22 -103.254.72.0/22 -103.254.76.0/22 -103.254.8.0/22 -103.255.136.0/22 -103.255.140.0/22 -103.255.184.0/22 -103.255.200.0/22 -103.255.212.0/22 -103.255.228.0/22 -103.255.56.0/22 -103.255.68.0/22 -103.255.88.0/22 -103.255.92.0/22 -103.26.0.0/22 -103.26.132.0/22 -103.26.156.0/22 -103.26.160.0/22 -103.26.228.0/22 -103.26.240.0/22 -103.26.64.0/22 -103.26.76.0/22 -103.27.12.0/22 -103.27.184.0/22 -103.27.208.0/22 -103.27.212.0/22 -103.27.24.0/22 -103.27.240.0/22 -103.27.4.0/22 -103.27.56.0/22 -103.27.96.0/22 -103.28.184.0/22 -103.28.204.0/22 -103.28.212.0/22 -103.28.4.0/22 -103.28.8.0/22 -103.29.128.0/22 -103.29.132.0/22 -103.29.136.0/22 -103.29.16.0/22 -103.3.100.0/22 -103.3.104.0/22 -103.3.108.0/22 -103.3.112.0/22 -103.3.116.0/22 -103.3.120.0/22 -103.3.124.0/22 -103.3.128.0/22 -103.3.132.0/22 -103.3.136.0/22 -103.3.140.0/22 -103.3.148.0/22 -103.3.152.0/22 -103.3.156.0/22 -103.3.84.0/22 -103.3.88.0/22 -103.3.92.0/22 -103.3.96.0/22 -103.30.148.0/22 -103.30.20.0/22 -103.30.200.0/22 -103.30.228.0/22 -103.30.236.0/22 -103.30.96.0/22 -103.31.0.0/22 -103.31.148.0/22 -103.31.160.0/22 -103.31.168.0/22 -103.31.200.0/22 -103.31.236.0/22 -103.31.48.0/22 -103.31.52.0/22 -103.31.56.0/22 -103.31.60.0/22 -103.31.64.0/22 -103.31.68.0/22 -103.32.0.0/22 -103.32.100.0/22 -103.32.104.0/22 -103.32.108.0/22 -103.32.112.0/22 -103.32.116.0/22 -103.32.12.0/22 -103.32.120.0/22 -103.32.124.0/22 -103.32.128.0/22 -103.32.132.0/22 -103.32.136.0/22 -103.32.140.0/22 -103.32.144.0/22 -103.32.148.0/22 -103.32.152.0/22 -103.32.156.0/22 -103.32.16.0/22 -103.32.160.0/22 -103.32.164.0/22 -103.32.168.0/22 -103.32.172.0/22 -103.32.176.0/22 -103.32.180.0/22 -103.32.184.0/22 -103.32.188.0/22 -103.32.192.0/22 -103.32.196.0/22 -103.32.20.0/22 -103.32.200.0/22 -103.32.204.0/22 -103.32.208.0/22 -103.32.212.0/22 -103.32.216.0/22 -103.32.220.0/22 -103.32.224.0/22 -103.32.228.0/22 -103.32.232.0/22 -103.32.236.0/22 -103.32.24.0/22 -103.32.240.0/22 -103.32.244.0/22 -103.32.248.0/22 -103.32.252.0/22 -103.32.28.0/22 -103.32.32.0/22 -103.32.36.0/22 -103.32.4.0/22 -103.32.40.0/22 -103.32.44.0/22 -103.32.48.0/22 -103.32.52.0/22 -103.32.56.0/22 -103.32.60.0/22 -103.32.64.0/22 -103.32.68.0/22 -103.32.72.0/22 -103.32.76.0/22 -103.32.8.0/22 -103.32.80.0/22 -103.32.84.0/22 -103.32.88.0/22 -103.32.92.0/22 -103.32.96.0/22 -103.33.0.0/22 -103.33.100.0/22 -103.33.104.0/22 -103.33.108.0/22 -103.33.112.0/22 -103.33.116.0/22 -103.33.12.0/22 -103.33.120.0/22 -103.33.124.0/22 -103.33.128.0/22 -103.33.132.0/22 -103.33.136.0/22 -103.33.140.0/22 -103.33.144.0/22 -103.33.148.0/22 -103.33.152.0/22 -103.33.156.0/22 -103.33.16.0/22 -103.33.160.0/22 -103.33.164.0/22 -103.33.168.0/22 -103.33.172.0/22 -103.33.176.0/22 -103.33.180.0/22 -103.33.184.0/22 -103.33.188.0/22 -103.33.192.0/22 -103.33.196.0/22 -103.33.20.0/22 -103.33.200.0/22 -103.33.204.0/22 -103.33.208.0/22 -103.33.212.0/22 -103.33.216.0/22 -103.33.220.0/22 -103.33.224.0/22 -103.33.228.0/22 -103.33.232.0/22 -103.33.236.0/22 -103.33.24.0/22 -103.33.240.0/22 -103.33.244.0/22 -103.33.248.0/22 -103.33.252.0/22 -103.33.28.0/22 -103.33.32.0/22 -103.33.36.0/22 -103.33.4.0/22 -103.33.40.0/22 -103.33.44.0/22 -103.33.48.0/22 -103.33.52.0/22 -103.33.56.0/22 -103.33.60.0/22 -103.33.64.0/22 -103.33.68.0/22 -103.33.72.0/22 -103.33.76.0/22 -103.33.8.0/22 -103.33.80.0/22 -103.33.84.0/22 -103.33.88.0/22 -103.33.92.0/22 -103.33.96.0/22 -103.34.0.0/22 -103.34.100.0/22 -103.34.104.0/22 -103.34.108.0/22 -103.34.112.0/22 -103.34.116.0/22 -103.34.12.0/22 -103.34.120.0/22 -103.34.124.0/22 -103.34.128.0/22 -103.34.132.0/22 -103.34.136.0/22 -103.34.140.0/22 -103.34.144.0/22 -103.34.148.0/22 -103.34.152.0/22 -103.34.156.0/22 -103.34.16.0/22 -103.34.160.0/22 -103.34.164.0/22 -103.34.168.0/22 -103.34.172.0/22 -103.34.176.0/22 -103.34.180.0/22 -103.34.184.0/22 -103.34.188.0/22 -103.34.192.0/22 -103.34.196.0/22 -103.34.20.0/22 -103.34.200.0/22 -103.34.204.0/22 -103.34.208.0/22 -103.34.212.0/22 -103.34.216.0/22 -103.34.220.0/22 -103.34.224.0/22 -103.34.228.0/22 -103.34.232.0/22 -103.34.236.0/22 -103.34.24.0/22 -103.34.240.0/22 -103.34.244.0/22 -103.34.248.0/22 -103.34.252.0/22 -103.34.28.0/22 -103.34.32.0/22 -103.34.36.0/22 -103.34.4.0/22 -103.34.40.0/22 -103.34.44.0/22 -103.34.48.0/22 -103.34.52.0/22 -103.34.56.0/22 -103.34.60.0/22 -103.34.64.0/22 -103.34.68.0/22 -103.34.72.0/22 -103.34.76.0/22 -103.34.8.0/22 -103.34.80.0/22 -103.34.84.0/22 -103.34.88.0/22 -103.34.92.0/22 -103.34.96.0/22 -103.35.0.0/22 -103.35.104.0/22 -103.35.116.0/22 -103.35.12.0/22 -103.35.16.0/22 -103.35.180.0/22 -103.35.20.0/22 -103.35.200.0/22 -103.35.220.0/22 -103.35.24.0/22 -103.35.28.0/22 -103.35.32.0/22 -103.35.36.0/22 -103.35.4.0/22 -103.35.40.0/22 -103.35.44.0/22 -103.35.48.0/22 -103.35.8.0/22 -103.36.132.0/22 -103.36.136.0/22 -103.36.160.0/22 -103.36.164.0/22 -103.36.168.0/22 -103.36.172.0/22 -103.36.176.0/22 -103.36.180.0/22 -103.36.184.0/22 -103.36.188.0/22 -103.36.192.0/22 -103.36.196.0/22 -103.36.200.0/22 -103.36.204.0/22 -103.36.208.0/22 -103.36.212.0/22 -103.36.216.0/22 -103.36.220.0/22 -103.36.224.0/22 -103.36.228.0/22 -103.36.232.0/22 -103.36.236.0/22 -103.36.240.0/22 -103.36.244.0/22 -103.36.28.0/22 -103.36.36.0/22 -103.36.56.0/22 -103.36.60.0/22 -103.36.64.0/22 -103.36.72.0/22 -103.36.96.0/22 -103.37.100.0/22 -103.37.104.0/22 -103.37.12.0/22 -103.37.136.0/22 -103.37.140.0/22 -103.37.144.0/22 -103.37.148.0/22 -103.37.152.0/22 -103.37.156.0/22 -103.37.16.0/22 -103.37.160.0/22 -103.37.164.0/22 -103.37.172.0/22 -103.37.176.0/22 -103.37.188.0/22 -103.37.208.0/22 -103.37.212.0/22 -103.37.216.0/22 -103.37.220.0/22 -103.37.24.0/22 -103.37.248.0/22 -103.37.252.0/22 -103.37.44.0/22 -103.37.52.0/22 -103.37.56.0/22 -103.37.72.0/22 -103.38.0.0/22 -103.38.116.0/22 -103.38.132.0/22 -103.38.140.0/22 -103.38.224.0/22 -103.38.228.0/22 -103.38.232.0/22 -103.38.32.0/22 -103.38.40.0/22 -103.38.44.0/22 -103.38.56.0/22 -103.38.76.0/22 -103.38.84.0/22 -103.38.92.0/22 -103.38.96.0/22 -103.39.100.0/22 -103.39.104.0/22 -103.39.108.0/22 -103.39.160.0/22 -103.39.164.0/22 -103.39.168.0/22 -103.39.172.0/22 -103.39.176.0/22 -103.39.180.0/22 -103.39.184.0/22 -103.39.188.0/22 -103.39.200.0/22 -103.39.204.0/22 -103.39.208.0/22 -103.39.212.0/22 -103.39.216.0/22 -103.39.220.0/22 -103.39.224.0/22 -103.39.228.0/22 -103.39.232.0/22 -103.39.64.0/22 -103.39.88.0/22 -103.4.168.0/22 -103.4.184.0/22 -103.4.224.0/22 -103.4.56.0/22 -103.40.100.0/22 -103.40.12.0/22 -103.40.16.0/22 -103.40.192.0/22 -103.40.20.0/22 -103.40.212.0/22 -103.40.220.0/22 -103.40.228.0/22 -103.40.232.0/22 -103.40.236.0/22 -103.40.24.0/22 -103.40.240.0/22 -103.40.244.0/22 -103.40.248.0/22 -103.40.252.0/22 -103.40.28.0/22 -103.40.32.0/22 -103.40.36.0/22 -103.40.40.0/22 -103.40.44.0/22 -103.40.88.0/22 -103.41.0.0/22 -103.41.116.0/22 -103.41.140.0/22 -103.41.148.0/22 -103.41.152.0/22 -103.41.16.0/22 -103.41.160.0/22 -103.41.164.0/22 -103.41.220.0/22 -103.41.224.0/22 -103.41.228.0/22 -103.41.232.0/22 -103.41.52.0/22 -103.42.104.0/22 -103.42.180.0/22 -103.42.232.0/22 -103.42.24.0/22 -103.42.28.0/22 -103.42.32.0/22 -103.42.64.0/22 -103.42.68.0/22 -103.42.76.0/22 -103.42.8.0/22 -103.43.100.0/22 -103.43.104.0/22 -103.43.124.0/22 -103.43.16.0/22 -103.43.184.0/22 -103.43.192.0/22 -103.43.196.0/22 -103.43.208.0/22 -103.43.220.0/22 -103.43.224.0/22 -103.43.240.0/22 -103.43.84.0/22 -103.43.96.0/22 -103.44.120.0/22 -103.44.124.0/22 -103.44.132.0/22 -103.44.144.0/22 -103.44.168.0/22 -103.44.176.0/22 -103.44.180.0/22 -103.44.184.0/22 -103.44.188.0/22 -103.44.192.0/22 -103.44.196.0/22 -103.44.200.0/22 -103.44.204.0/22 -103.44.224.0/22 -103.44.236.0/22 -103.44.240.0/22 -103.44.244.0/22 -103.44.248.0/22 -103.44.252.0/22 -103.44.56.0/22 -103.44.80.0/22 -103.44.88.0/22 -103.45.0.0/22 -103.45.100.0/22 -103.45.104.0/22 -103.45.108.0/22 -103.45.112.0/22 -103.45.116.0/22 -103.45.12.0/22 -103.45.120.0/22 -103.45.124.0/22 -103.45.128.0/22 -103.45.132.0/22 -103.45.136.0/22 -103.45.140.0/22 -103.45.144.0/22 -103.45.148.0/22 -103.45.152.0/22 -103.45.156.0/22 -103.45.16.0/22 -103.45.160.0/22 -103.45.164.0/22 -103.45.168.0/22 -103.45.172.0/22 -103.45.176.0/22 -103.45.180.0/22 -103.45.184.0/22 -103.45.188.0/22 -103.45.192.0/22 -103.45.196.0/22 -103.45.20.0/22 -103.45.200.0/22 -103.45.204.0/22 -103.45.208.0/22 -103.45.212.0/22 -103.45.216.0/22 -103.45.220.0/22 -103.45.224.0/22 -103.45.24.0/22 -103.45.248.0/22 -103.45.28.0/22 -103.45.32.0/22 -103.45.36.0/22 -103.45.4.0/22 -103.45.40.0/22 -103.45.44.0/22 -103.45.48.0/22 -103.45.52.0/22 -103.45.56.0/22 -103.45.60.0/22 -103.45.72.0/22 -103.45.76.0/22 -103.45.8.0/22 -103.45.80.0/22 -103.45.84.0/22 -103.45.88.0/22 -103.45.92.0/22 -103.45.96.0/22 -103.46.0.0/22 -103.46.100.0/22 -103.46.104.0/22 -103.46.108.0/22 -103.46.112.0/22 -103.46.116.0/22 -103.46.12.0/22 -103.46.120.0/22 -103.46.124.0/22 -103.46.128.0/22 -103.46.132.0/22 -103.46.136.0/22 -103.46.152.0/22 -103.46.156.0/22 -103.46.16.0/22 -103.46.160.0/22 -103.46.164.0/22 -103.46.168.0/22 -103.46.172.0/22 -103.46.176.0/22 -103.46.180.0/22 -103.46.20.0/22 -103.46.24.0/22 -103.46.244.0/22 -103.46.248.0/22 -103.46.28.0/22 -103.46.32.0/22 -103.46.36.0/22 -103.46.40.0/22 -103.46.44.0/22 -103.46.48.0/22 -103.46.52.0/22 -103.46.56.0/22 -103.46.60.0/22 -103.46.64.0/22 -103.46.68.0/22 -103.46.72.0/22 -103.46.76.0/22 -103.46.80.0/22 -103.46.84.0/22 -103.46.88.0/22 -103.46.92.0/22 -103.46.96.0/22 -103.47.108.0/22 -103.47.116.0/22 -103.47.120.0/22 -103.47.136.0/22 -103.47.140.0/22 -103.47.20.0/22 -103.47.212.0/22 -103.47.36.0/22 -103.47.4.0/22 -103.47.40.0/22 -103.47.48.0/22 -103.47.80.0/22 -103.47.96.0/22 -103.48.144.0/22 -103.48.148.0/22 -103.48.152.0/22 -103.48.156.0/22 -103.48.202.0/23 -103.48.216.0/22 -103.48.220.0/22 -103.48.224.0/22 -103.48.228.0/22 -103.48.232.0/22 -103.48.236.0/22 -103.48.240.0/22 -103.48.244.0/22 -103.48.52.0/22 -103.48.92.0/22 -103.49.108.0/22 -103.49.12.0/22 -103.49.128.0/22 -103.49.176.0/22 -103.49.180.0/22 -103.49.196.0/22 -103.49.20.0/22 -103.49.72.0/22 -103.49.76.0/22 -103.49.92.0/22 -103.49.96.0/22 -103.5.152.0/22 -103.5.168.0/22 -103.5.192.0/22 -103.5.252.0/22 -103.5.36.0/22 -103.5.52.0/22 -103.5.56.0/22 -103.50.108.0/22 -103.50.112.0/22 -103.50.116.0/22 -103.50.120.0/22 -103.50.124.0/22 -103.50.132.0/22 -103.50.136.0/22 -103.50.140.0/22 -103.50.172.0/22 -103.50.176.0/22 -103.50.180.0/22 -103.50.184.0/22 -103.50.188.0/22 -103.50.192.0/22 -103.50.196.0/22 -103.50.200.0/22 -103.50.220.0/22 -103.50.224.0/22 -103.50.228.0/22 -103.50.232.0/22 -103.50.236.0/22 -103.50.240.0/22 -103.50.244.0/22 -103.50.248.0/22 -103.50.36.0/22 -103.50.44.0/22 -103.50.48.0/22 -103.50.52.0/22 -103.50.56.0/22 -103.50.60.0/22 -103.50.64.0/22 -103.50.68.0/22 -103.50.72.0/22 -103.52.100.0/22 -103.52.104.0/22 -103.52.160.0/22 -103.52.164.0/22 -103.52.172.0/22 -103.52.176.0/22 -103.52.184.0/22 -103.52.196.0/22 -103.52.40.0/22 -103.52.72.0/22 -103.52.76.0/22 -103.52.80.0/22 -103.52.84.0/22 -103.52.96.0/22 -103.53.100.0/22 -103.53.124.0/22 -103.53.128.0/22 -103.53.132.0/22 -103.53.136.0/22 -103.53.140.0/22 -103.53.144.0/22 -103.53.180.0/22 -103.53.204.0/22 -103.53.208.0/22 -103.53.212.0/22 -103.53.216.0/22 -103.53.236.0/22 -103.53.248.0/22 -103.53.64.0/22 -103.53.68.0/22 -103.53.92.0/22 -103.54.160.0/22 -103.54.164.0/22 -103.54.212.0/22 -103.54.240.0/22 -103.54.48.0/22 -103.54.8.0/22 -103.55.120.0/22 -103.55.152.0/22 -103.55.172.0/22 -103.55.204.0/22 -103.55.208.0/22 -103.55.228.0/22 -103.55.236.0/22 -103.55.24.0/22 -103.55.80.0/22 -103.56.100.0/22 -103.56.104.0/22 -103.56.140.0/22 -103.56.152.0/22 -103.56.16.0/22 -103.56.184.0/22 -103.56.20.0/22 -103.56.200.0/22 -103.56.32.0/22 -103.56.56.0/22 -103.56.60.0/22 -103.56.72.0/22 -103.56.76.0/22 -103.56.8.0/22 -103.57.12.0/22 -103.57.136.0/22 -103.57.196.0/22 -103.57.52.0/22 -103.57.56.0/22 -103.57.76.0/22 -103.58.24.0/22 -103.59.100.0/22 -103.59.112.0/22 -103.59.116.0/22 -103.59.120.0/22 -103.59.124.0/22 -103.59.128.0/22 -103.59.148.0/22 -103.59.164.0/22 -103.59.76.0/22 -103.6.108.0/22 -103.6.220.0/22 -103.6.228.0/22 -103.6.76.0/22 -103.60.164.0/22 -103.60.228.0/22 -103.60.236.0/22 -103.60.32.0/22 -103.60.44.0/22 -103.61.104.0/22 -103.61.140.0/22 -103.61.152.0/22 -103.61.156.0/22 -103.61.160.0/22 -103.61.172.0/22 -103.61.176.0/22 -103.61.188.0/22 -103.61.60.0/22 -103.62.100.0/22 -103.62.104.0/22 -103.62.108.0/22 -103.62.112.0/22 -103.62.116.0/22 -103.62.120.0/22 -103.62.124.0/22 -103.62.128.0/22 -103.62.132.0/22 -103.62.156.0/22 -103.62.160.0/22 -103.62.164.0/22 -103.62.168.0/22 -103.62.172.0/22 -103.62.176.0/22 -103.62.180.0/22 -103.62.184.0/22 -103.62.188.0/22 -103.62.192.0/22 -103.62.204.0/22 -103.62.208.0/22 -103.62.212.0/22 -103.62.216.0/22 -103.62.220.0/22 -103.62.224.0/22 -103.62.24.0/22 -103.62.52.0/22 -103.62.72.0/22 -103.62.76.0/22 -103.62.80.0/22 -103.62.84.0/22 -103.62.88.0/22 -103.62.96.0/22 -103.63.140.0/22 -103.63.144.0/22 -103.63.152.0/22 -103.63.160.0/22 -103.63.164.0/22 -103.63.168.0/22 -103.63.172.0/22 -103.63.176.0/22 -103.63.180.0/22 -103.63.184.0/22 -103.63.192.0/22 -103.63.196.0/22 -103.63.200.0/22 -103.63.204.0/22 -103.63.208.0/22 -103.63.240.0/22 -103.63.244.0/22 -103.63.248.0/22 -103.63.252.0/22 -103.63.32.0/22 -103.63.36.0/22 -103.63.40.0/22 -103.63.44.0/22 -103.63.48.0/22 -103.63.52.0/22 -103.63.56.0/22 -103.63.60.0/22 -103.63.64.0/22 -103.63.68.0/22 -103.63.72.0/22 -103.63.76.0/22 -103.63.80.0/22 -103.63.84.0/22 -103.63.88.0/22 -103.64.0.0/22 -103.64.100.0/22 -103.64.104.0/22 -103.64.108.0/22 -103.64.112.0/22 -103.64.116.0/22 -103.64.120.0/22 -103.64.124.0/22 -103.64.140.0/22 -103.64.144.0/22 -103.64.152.0/22 -103.64.156.0/22 -103.64.160.0/22 -103.64.164.0/22 -103.64.168.0/22 -103.64.172.0/22 -103.64.176.0/22 -103.64.180.0/22 -103.64.184.0/22 -103.64.188.0/22 -103.64.192.0/22 -103.64.196.0/22 -103.64.200.0/22 -103.64.204.0/22 -103.64.208.0/22 -103.64.212.0/22 -103.64.216.0/22 -103.64.220.0/22 -103.64.224.0/22 -103.64.228.0/22 -103.64.232.0/22 -103.64.236.0/22 -103.64.24.0/22 -103.64.240.0/22 -103.64.244.0/22 -103.64.248.0/22 -103.64.252.0/22 -103.64.28.0/22 -103.64.32.0/22 -103.64.36.0/22 -103.64.4.0/22 -103.64.40.0/22 -103.64.44.0/22 -103.64.48.0/22 -103.64.52.0/22 -103.64.56.0/22 -103.64.60.0/22 -103.64.64.0/22 -103.64.68.0/22 -103.64.72.0/22 -103.64.76.0/22 -103.64.80.0/22 -103.64.84.0/22 -103.64.88.0/22 -103.64.92.0/22 -103.64.96.0/22 -103.65.0.0/22 -103.65.100.0/22 -103.65.104.0/22 -103.65.108.0/22 -103.65.112.0/22 -103.65.12.0/22 -103.65.144.0/22 -103.65.148.0/22 -103.65.152.0/22 -103.65.156.0/22 -103.65.16.0/22 -103.65.160.0/22 -103.65.164.0/22 -103.65.168.0/22 -103.65.172.0/22 -103.65.36.0/22 -103.65.4.0/22 -103.65.40.0/22 -103.65.48.0/22 -103.65.52.0/22 -103.65.56.0/22 -103.65.60.0/22 -103.65.64.0/22 -103.65.68.0/22 -103.65.72.0/22 -103.65.76.0/22 -103.65.8.0/22 -103.65.80.0/22 -103.65.84.0/22 -103.65.88.0/22 -103.65.92.0/22 -103.66.108.0/22 -103.66.200.0/22 -103.66.216.0/22 -103.66.240.0/22 -103.66.244.0/22 -103.66.248.0/22 -103.66.252.0/22 -103.66.32.0/22 -103.66.40.0/22 -103.66.92.0/22 -103.67.0.0/22 -103.67.100.0/22 -103.67.104.0/22 -103.67.108.0/22 -103.67.112.0/22 -103.67.116.0/22 -103.67.120.0/22 -103.67.124.0/22 -103.67.128.0/22 -103.67.132.0/22 -103.67.136.0/22 -103.67.140.0/22 -103.67.144.0/22 -103.67.148.0/22 -103.67.172.0/22 -103.67.192.0/22 -103.67.212.0/22 -103.67.252.0/22 -103.67.4.0/22 -103.67.8.0/22 -103.68.100.0/22 -103.68.128.0/22 -103.68.192.0/22 -103.68.64.0/22 -103.68.88.0/22 -103.69.116.0/22 -103.69.132.0/22 -103.69.152.0/22 -103.69.16.0/22 -103.7.140.0/22 -103.7.212.0/22 -103.7.216.0/22 -103.7.220.0/22 -103.7.28.0/22 -103.70.148.0/22 -103.70.220.0/22 -103.70.224.0/22 -103.70.236.0/22 -103.70.252.0/22 -103.70.8.0/22 -103.71.0.0/22 -103.71.120.0/22 -103.71.124.0/22 -103.71.128.0/22 -103.71.144.0/22 -103.71.196.0/22 -103.71.200.0/22 -103.71.232.0/22 -103.71.48.0/22 -103.71.68.0/22 -103.71.72.0/22 -103.71.80.0/22 -103.71.84.0/22 -103.71.88.0/22 -103.72.112.0/22 -103.72.116.0/22 -103.72.12.0/22 -103.72.120.0/22 -103.72.124.0/22 -103.72.128.0/22 -103.72.132.0/22 -103.72.148.0/22 -103.72.16.0/22 -103.72.172.0/22 -103.72.180.0/22 -103.72.20.0/22 -103.72.224.0/22 -103.72.228.0/22 -103.72.232.0/22 -103.72.236.0/22 -103.72.24.0/22 -103.72.240.0/22 -103.72.244.0/22 -103.72.248.0/22 -103.72.252.0/22 -103.72.28.0/22 -103.72.32.0/22 -103.72.36.0/22 -103.72.40.0/22 -103.72.44.0/22 -103.72.48.0/22 -103.72.52.0/22 -103.73.0.0/22 -103.73.116.0/22 -103.73.12.0/22 -103.73.120.0/22 -103.73.128.0/22 -103.73.132.0/22 -103.73.136.0/22 -103.73.140.0/22 -103.73.144.0/22 -103.73.16.0/22 -103.73.168.0/22 -103.73.176.0/22 -103.73.20.0/22 -103.73.204.0/22 -103.73.208.0/22 -103.73.24.0/22 -103.73.240.0/22 -103.73.244.0/22 -103.73.248.0/22 -103.73.28.0/22 -103.73.4.0/22 -103.73.48.0/22 -103.73.8.0/22 -103.73.96.0/22 -103.74.124.0/22 -103.74.148.0/22 -103.74.152.0/22 -103.74.156.0/22 -103.74.204.0/22 -103.74.232.0/22 -103.74.24.0/22 -103.74.28.0/22 -103.74.32.0/22 -103.74.36.0/22 -103.74.40.0/22 -103.74.44.0/22 -103.74.48.0/22 -103.74.56.0/22 -103.74.60.0/22 -103.74.80.0/22 -103.75.104.0/22 -103.75.108.0/22 -103.75.112.0/22 -103.75.120.0/22 -103.75.128.0/22 -103.75.144.0/22 -103.75.152.0/22 -103.75.236.0/24 -103.75.88.0/22 -103.75.92.0/22 -103.76.216.0/22 -103.76.220.0/22 -103.76.224.0/22 -103.76.60.0/22 -103.76.64.0/22 -103.76.68.0/22 -103.76.72.0/22 -103.76.84.0/22 -103.76.92.0/22 -103.77.132.0/22 -103.77.148.0/22 -103.77.220.0/22 -103.77.28.0/22 -103.77.52.0/22 -103.77.56.0/22 -103.77.72.0/22 -103.77.88.0/22 -103.77.92.0/22 -103.78.124.0/22 -103.78.172.0/22 -103.78.176.0/22 -103.78.196.0/22 -103.78.228.0/22 -103.78.56.0/22 -103.78.60.0/22 -103.78.64.0/22 -103.78.68.0/22 -103.79.120.0/22 -103.79.136.0/22 -103.79.188.0/22 -103.79.192.0/22 -103.79.196.0/22 -103.79.200.0/22 -103.79.204.0/22 -103.79.208.0/22 -103.79.212.0/22 -103.79.24.0/22 -103.79.240.0/22 -103.79.28.0/22 -103.79.36.0/22 -103.79.40.0/22 -103.79.44.0/22 -103.79.52.0/22 -103.79.56.0/22 -103.79.60.0/22 -103.79.64.0/22 -103.79.68.0/22 -103.79.80.0/22 -103.79.84.0/22 -103.8.0.0/22 -103.8.108.0/22 -103.8.156.0/22 -103.8.200.0/22 -103.8.204.0/22 -103.8.220.0/22 -103.8.32.0/22 -103.8.4.0/22 -103.8.52.0/22 -103.8.68.0/22 -103.8.8.0/22 -103.80.176.0/22 -103.80.180.0/22 -103.80.184.0/22 -103.80.192.0/22 -103.80.200.0/22 -103.80.232.0/22 -103.80.24.0/22 -103.80.28.0/22 -103.80.44.0/22 -103.80.72.0/22 -103.81.120.0/22 -103.81.148.0/22 -103.81.16.0/22 -103.81.164.0/22 -103.81.168.0/22 -103.81.183.0/24 -103.81.184.0/22 -103.81.20.0/22 -103.81.200.0/22 -103.81.232.0/22 -103.81.4.0/22 -103.81.44.0/22 -103.81.48.0/22 -103.81.8.0/22 -103.81.96.0/22 -103.82.104.0/22 -103.82.224.0/22 -103.82.236.0/22 -103.82.52.0/22 -103.82.60.0/22 -103.82.68.0/22 -103.82.84.0/22 -103.83.112.0/22 -103.83.120.0/22 -103.83.180.0/22 -103.83.44.0/22 -103.83.52.0/22 -103.83.60.0/22 -103.83.64.0/22 -103.83.72.0/22 -103.84.0.0/22 -103.84.108.0/22 -103.84.12.0/22 -103.84.136.0/22 -103.84.16.0/22 -103.84.20.0/22 -103.84.24.0/22 -103.84.28.0/22 -103.84.48.0/22 -103.84.64.0/22 -103.84.72.0/22 -103.84.92.0/22 -103.85.136.0/22 -103.85.144.0/22 -103.85.164.0/22 -103.85.168.0/22 -103.85.172.0/22 -103.85.176.0/22 -103.85.20.0/22 -103.85.224.0/22 -103.85.24.0/22 -103.85.44.0/22 -103.85.48.0/22 -103.85.84.0/22 -103.86.204.0/22 -103.86.208.0/22 -103.86.212.0/22 -103.86.216.0/22 -103.86.220.0/22 -103.86.224.0/22 -103.86.228.0/22 -103.86.232.0/22 -103.86.236.0/22 -103.86.240.0/22 -103.86.244.0/22 -103.86.248.0/22 -103.86.252.0/22 -103.86.28.0/22 -103.86.32.0/22 -103.86.44.0/22 -103.86.60.0/22 -103.86.80.0/22 -103.86.84.0/22 -103.87.0.0/22 -103.87.132.0/22 -103.87.180.0/22 -103.87.20.0/22 -103.87.224.0/22 -103.87.32.0/22 -103.87.4.0/22 -103.87.72.0/22 -103.87.96.0/22 -103.88.12.0/22 -103.88.16.0/22 -103.88.164.0/22 -103.88.176.0/22 -103.88.184.0/22 -103.88.188.0/22 -103.88.20.0/22 -103.88.212.0/22 -103.88.32.0/22 -103.88.36.0/22 -103.88.4.0/22 -103.88.60.0/22 -103.88.64.0/22 -103.88.72.0/22 -103.88.8.0/22 -103.88.96.0/22 -103.89.100.0/22 -103.89.104.0/22 -103.89.108.0/22 -103.89.112.0/22 -103.89.116.0/22 -103.89.148.0/22 -103.89.172.0/22 -103.89.184.0/22 -103.89.188.0/22 -103.89.192.0/22 -103.89.196.0/22 -103.89.200.0/22 -103.89.204.0/22 -103.89.208.0/22 -103.89.212.0/22 -103.89.216.0/22 -103.89.220.0/22 -103.89.224.0/22 -103.89.228.0/22 -103.89.28.0/22 -103.89.96.0/22 -103.9.108.0/22 -103.9.152.0/22 -103.9.192.0/22 -103.9.24.0/22 -103.9.248.0/22 -103.9.252.0/22 -103.9.8.0/22 -103.90.100.0/22 -103.90.104.0/22 -103.90.108.0/22 -103.90.112.0/22 -103.90.116.0/22 -103.90.120.0/22 -103.90.124.0/22 -103.90.128.0/22 -103.90.132.0/22 -103.90.152.0/22 -103.90.168.0/22 -103.90.173.0/24 -103.90.176.0/22 -103.90.188.0/22 -103.90.192.0/22 -103.90.52.0/22 -103.90.92.0/22 -103.91.108.0/22 -103.91.152.0/22 -103.91.176.0/22 -103.91.200.0/22 -103.91.208.0/22 -103.91.212.0/22 -103.91.219.0/24 -103.91.236.0/22 -103.91.252.0/22 -103.91.36.0/22 -103.91.40.0/22 -103.92.0.0/22 -103.92.108.0/22 -103.92.12.0/22 -103.92.124.0/22 -103.92.128.0/24 -103.92.132.0/22 -103.92.156.0/22 -103.92.164.0/22 -103.92.168.0/22 -103.92.172.0/22 -103.92.176.0/22 -103.92.180.0/22 -103.92.184.0/22 -103.92.188.0/22 -103.92.192.0/22 -103.92.236.0/22 -103.92.240.0/22 -103.92.244.0/22 -103.92.248.0/22 -103.92.252.0/22 -103.92.4.0/22 -103.92.48.0/22 -103.92.52.0/22 -103.92.56.0/22 -103.92.60.0/22 -103.92.64.0/22 -103.92.68.0/22 -103.92.72.0/22 -103.92.76.0/22 -103.92.8.0/22 -103.92.80.0/22 -103.92.86.0/24 -103.92.88.0/22 -103.93.0.0/22 -103.93.152.0/22 -103.93.180.0/22 -103.93.204.0/22 -103.93.28.0/22 -103.93.4.0/22 -103.93.76.0/22 -103.93.84.0/22 -103.94.116.0/22 -103.94.12.0/22 -103.94.160.0/22 -103.94.180.0/22 -103.94.20.0/22 -103.94.200.0/22 -103.94.28.0/22 -103.94.32.0/22 -103.94.36.0/22 -103.94.40.0/22 -103.94.44.0/22 -103.94.72.0/22 -103.94.88.0/22 -103.95.116.0/22 -103.95.128.0/22 -103.95.136.0/22 -103.95.140.0/22 -103.95.144.0/22 -103.95.152.0/22 -103.95.207.0/24 -103.95.216.0/22 -103.95.220.0/22 -103.95.224.0/22 -103.95.236.0/22 -103.95.240.0/22 -103.95.244.0/22 -103.95.248.0/22 -103.95.252.0/22 -103.95.28.0/22 -103.95.52.0/22 -103.95.64.0/22 -103.95.68.0/22 -103.95.88.0/22 -103.95.92.0/22 -103.96.0.0/22 -103.96.124.0/22 -103.96.136.0/22 -103.96.140.0/24 -103.96.148.0/22 -103.96.152.0/22 -103.96.156.0/22 -103.96.160.0/22 -103.96.164.0/22 -103.96.168.0/22 -103.96.172.0/22 -103.96.176.0/22 -103.96.180.0/22 -103.96.184.0/22 -103.96.188.0/22 -103.96.192.0/22 -103.96.196.0/22 -103.96.200.0/22 -103.96.204.0/22 -103.96.208.0/22 -103.96.212.0/22 -103.96.216.0/22 -103.96.8.0/22 -103.96.80.0/22 -103.97.112.0/22 -103.97.116.0/22 -103.97.12.0/22 -103.97.128.0/22 -103.97.144.0/22 -103.97.148.0/22 -103.97.16.0/22 -103.97.188.0/22 -103.97.192.0/22 -103.97.20.0/22 -103.97.228.0/23 -103.97.24.0/22 -103.97.28.0/22 -103.97.32.0/22 -103.97.36.0/22 -103.97.40.0/22 -103.97.56.0/22 -103.97.60.0/22 -103.97.64.0/22 -103.97.68.0/22 -103.97.72.0/22 -103.97.8.0/22 -103.97.80.0/22 -103.98.100.0/22 -103.98.124.0/22 -103.98.136.0/22 -103.98.140.0/22 -103.98.144.0/22 -103.98.164.0/22 -103.98.168.0/22 -103.98.180.0/22 -103.98.196.0/22 -103.98.216.0/22 -103.98.220.0/22 -103.98.224.0/22 -103.98.228.0/22 -103.98.232.0/22 -103.98.240.0/22 -103.98.244.0/22 -103.98.248.0/22 -103.98.252.0/22 -103.98.28.0/23 -103.98.40.0/22 -103.98.44.0/22 -103.98.48.0/22 -103.98.56.0/22 -103.98.80.0/22 -103.98.88.0/22 -103.98.92.0/22 -103.98.96.0/22 -103.99.104.0/22 -103.99.116.0/22 -103.99.120.0/22 -103.99.152.0/22 -103.99.220.0/22 -103.99.232.0/22 -103.99.236.0/22 -103.99.40.0/23 -103.99.52.0/22 -103.99.56.0/22 -103.99.60.0/22 -103.99.76.0/22 -106.0.0.0/24 -106.0.16.0/20 -106.0.2.0/23 -106.0.4.0/22 -106.0.44.0/22 -106.0.64.0/18 -106.0.8.0/21 -106.108.0.0/14 -106.11.0.0/16 -106.112.0.0/13 -106.12.0.0/14 -106.120.0.0/13 -106.16.0.0/12 -106.2.0.0/15 -106.224.0.0/12 -106.32.0.0/12 -106.4.0.0/14 -106.48.0.0/15 -106.50.0.0/16 -106.52.0.0/14 -106.56.0.0/13 -106.74.0.0/16 -106.75.0.0/16 -106.8.0.0/15 -106.80.0.0/12 -109.244.0.0/16 -110.152.0.0/14 -110.156.0.0/15 -110.16.0.0/14 -110.165.32.0/19 -110.166.0.0/15 -110.172.192.0/18 -110.173.0.0/19 -110.173.192.0/19 -110.173.32.0/20 -110.173.64.0/19 -110.173.96.0/19 -110.176.0.0/13 -110.184.0.0/13 -110.192.0.0/11 -110.228.0.0/14 -110.232.32.0/19 -110.236.0.0/15 -110.240.0.0/12 -110.34.40.0/22 -110.34.44.0/22 -110.40.0.0/14 -110.44.12.0/22 -110.44.144.0/20 -110.48.0.0/16 -110.51.0.0/16 -110.52.0.0/15 -110.56.0.0/13 -110.6.0.0/15 -110.64.0.0/15 -110.72.0.0/15 -110.75.0.0/17 -110.75.128.0/19 -110.75.160.0/19 -110.75.192.0/18 -110.76.0.0/19 -110.76.132.0/22 -110.76.156.0/22 -110.76.184.0/22 -110.76.192.0/18 -110.76.32.0/19 -110.77.0.0/17 -110.80.0.0/13 -110.88.0.0/14 -110.92.68.0/22 -110.93.32.0/19 -110.94.0.0/15 -110.96.0.0/11 -111.0.0.0/10 -111.112.0.0/15 -111.114.0.0/15 -111.116.0.0/15 -111.118.200.0/21 -111.119.128.0/19 -111.119.64.0/18 -111.120.0.0/14 -111.124.0.0/16 -111.126.0.0/15 -111.128.0.0/11 -111.160.0.0/13 -111.170.0.0/16 -111.172.0.0/14 -111.176.0.0/13 -111.186.0.0/15 -111.192.0.0/12 -111.208.0.0/14 -111.212.0.0/14 -111.221.128.0/17 -111.221.28.0/24 -111.222.0.0/16 -111.223.12.0/22 -111.223.16.0/22 -111.223.240.0/22 -111.223.248.0/22 -111.223.4.0/22 -111.223.8.0/22 -111.224.0.0/14 -111.228.0.0/14 -111.235.156.0/22 -111.235.160.0/19 -111.235.96.0/19 -111.66.0.0/16 -111.67.192.0/20 -111.68.64.0/19 -111.72.0.0/13 -111.85.0.0/16 -111.91.192.0/19 -111.92.248.0/22 -111.92.252.0/22 -112.0.0.0/10 -112.100.0.0/14 -112.109.128.0/17 -112.111.0.0/16 -112.112.0.0/14 -112.116.0.0/15 -112.122.0.0/15 -112.124.0.0/14 -112.128.0.0/14 -112.132.0.0/16 -112.137.48.0/21 -112.192.0.0/14 -112.224.0.0/11 -112.64.0.0/15 -112.66.0.0/15 -112.73.0.0/16 -112.74.0.0/15 -112.80.0.0/13 -112.88.0.0/13 -112.96.0.0/15 -112.98.0.0/15 -113.0.0.0/13 -113.11.192.0/19 -113.112.0.0/13 -113.12.0.0/14 -113.120.0.0/13 -113.128.0.0/15 -113.130.112.0/21 -113.130.96.0/20 -113.132.0.0/14 -113.136.0.0/13 -113.16.0.0/15 -113.18.0.0/16 -113.194.0.0/15 -113.197.100.0/22 -113.200.0.0/15 -113.202.0.0/16 -113.204.0.0/14 -113.208.128.0/17 -113.208.96.0/19 -113.209.0.0/16 -113.21.232.0/22 -113.21.236.0/22 -113.212.0.0/18 -113.212.100.0/22 -113.212.184.0/21 -113.212.88.0/22 -113.213.0.0/17 -113.214.0.0/15 -113.218.0.0/15 -113.220.0.0/14 -113.224.0.0/12 -113.24.0.0/14 -113.240.0.0/13 -113.248.0.0/14 -113.31.0.0/16 -113.44.0.0/14 -113.48.0.0/14 -113.52.160.0/19 -113.52.228.0/22 -113.54.0.0/15 -113.56.0.0/15 -113.58.0.0/16 -113.59.0.0/17 -113.59.224.0/22 -113.62.0.0/15 -113.64.0.0/11 -113.8.0.0/15 -113.96.0.0/12 -114.104.0.0/14 -114.110.0.0/20 -114.110.64.0/18 -114.111.0.0/19 -114.111.160.0/19 -114.112.0.0/14 -114.116.0.0/16 -114.117.0.0/17 -114.117.128.0/17 -114.118.0.0/16 -114.119.0.0/17 -114.119.192.0/21 -114.119.200.0/22 -114.119.204.0/22 -114.119.208.0/20 -114.119.224.0/19 -114.132.0.0/16 -114.135.0.0/16 -114.138.0.0/15 -114.141.128.0/18 -114.141.64.0/21 -114.141.80.0/22 -114.141.84.0/22 -114.196.0.0/15 -114.198.248.0/21 -114.208.0.0/14 -114.212.0.0/15 -114.214.0.0/16 -114.215.0.0/16 -114.216.0.0/13 -114.224.0.0/12 -114.240.0.0/12 -114.28.0.0/16 -114.31.64.0/22 -114.31.68.0/22 -114.54.0.0/15 -114.60.0.0/14 -114.64.0.0/14 -114.68.0.0/16 -114.79.64.0/18 -114.80.0.0/12 -114.96.0.0/13 -115.100.0.0/14 -115.104.0.0/14 -115.120.0.0/14 -115.124.16.0/20 -115.148.0.0/14 -115.152.0.0/15 -115.154.0.0/15 -115.156.0.0/15 -115.158.0.0/16 -115.159.0.0/16 -115.166.64.0/19 -115.168.0.0/14 -115.172.0.0/14 -115.180.0.0/15 -115.182.0.0/16 -115.183.0.0/16 -115.187.0.0/22 -115.187.12.0/22 -115.187.4.0/22 -115.187.8.0/22 -115.190.0.0/15 -115.192.0.0/11 -115.224.0.0/12 -115.24.0.0/14 -115.28.0.0/15 -115.31.64.0/22 -115.31.68.0/22 -115.31.72.0/22 -115.31.76.0/22 -115.32.0.0/14 -115.42.56.0/22 -115.44.0.0/15 -115.46.0.0/16 -115.47.0.0/16 -115.48.0.0/12 -115.69.64.0/20 -115.84.0.0/18 -115.84.192.0/19 -115.85.192.0/18 -116.0.24.0/21 -116.0.8.0/21 -116.1.0.0/16 -116.112.0.0/14 -116.116.0.0/15 -116.128.0.0/10 -116.13.0.0/16 -116.16.0.0/12 -116.192.0.0/16 -116.193.152.0/22 -116.193.16.0/20 -116.193.164.0/22 -116.193.176.0/21 -116.193.32.0/19 -116.194.0.0/15 -116.196.0.0/17 -116.196.128.0/18 -116.196.192.0/18 -116.197.160.0/22 -116.197.164.0/22 -116.198.0.0/16 -116.199.0.0/17 -116.199.128.0/19 -116.2.0.0/15 -116.204.0.0/17 -116.204.132.0/22 -116.204.168.0/22 -116.204.216.0/22 -116.204.232.0/22 -116.205.0.0/16 -116.206.176.0/22 -116.206.92.0/22 -116.207.0.0/16 -116.208.0.0/14 -116.212.160.0/20 -116.213.128.0/17 -116.213.44.0/22 -116.213.64.0/18 -116.214.128.0/17 -116.214.32.0/19 -116.214.64.0/20 -116.215.0.0/16 -116.216.0.0/14 -116.224.0.0/12 -116.242.0.0/15 -116.244.0.0/15 -116.246.0.0/15 -116.248.0.0/15 -116.251.64.0/18 -116.252.0.0/15 -116.254.104.0/22 -116.254.108.0/22 -116.254.128.0/17 -116.255.128.0/17 -116.4.0.0/14 -116.50.0.0/20 -116.52.0.0/14 -116.56.0.0/15 -116.58.128.0/20 -116.58.208.0/20 -116.60.0.0/14 -116.66.0.0/17 -116.66.176.0/22 -116.68.136.0/22 -116.68.140.0/22 -116.68.176.0/22 -116.68.180.0/22 -116.69.0.0/16 -116.70.0.0/17 -116.76.0.0/15 -116.78.0.0/15 -116.8.0.0/14 -116.85.0.0/16 -116.89.144.0/20 -116.89.240.0/22 -116.90.184.0/21 -116.90.80.0/20 -116.95.0.0/16 -117.100.0.0/15 -117.103.128.0/20 -117.103.16.0/20 -117.103.40.0/21 -117.103.72.0/21 -117.104.168.0/21 -117.106.0.0/15 -117.112.0.0/13 -117.120.128.0/17 -117.120.64.0/18 -117.121.0.0/17 -117.121.128.0/18 -117.121.192.0/21 -117.122.128.0/17 -117.124.0.0/14 -117.128.0.0/10 -117.21.0.0/16 -117.22.0.0/15 -117.24.0.0/13 -117.32.0.0/13 -117.40.0.0/14 -117.44.0.0/15 -117.48.0.0/14 -117.53.176.0/20 -117.53.48.0/20 -117.57.0.0/16 -117.58.0.0/17 -117.59.0.0/16 -117.60.0.0/14 -117.64.0.0/13 -117.72.0.0/15 -117.74.128.0/17 -117.74.64.0/20 -117.74.80.0/20 -117.75.0.0/16 -117.76.0.0/14 -117.8.0.0/13 -117.80.0.0/12 -118.102.16.0/20 -118.102.32.0/21 -118.103.164.0/22 -118.103.168.0/22 -118.103.172.0/22 -118.103.176.0/22 -118.107.180.0/22 -118.112.0.0/13 -118.120.0.0/14 -118.124.0.0/15 -118.126.0.0/16 -118.127.128.0/19 -118.132.0.0/14 -118.144.0.0/14 -118.178.0.0/16 -118.180.0.0/14 -118.184.0.0/17 -118.184.128.0/17 -118.186.0.0/15 -118.188.0.0/16 -118.190.0.0/16 -118.191.0.0/21 -118.191.12.0/24 -118.191.128.0/19 -118.191.16.0/21 -118.191.176.0/20 -118.191.192.0/20 -118.191.208.0/24 -118.191.216.0/22 -118.191.223.0/24 -118.191.224.0/24 -118.191.240.0/20 -118.191.64.0/20 -118.191.8.0/22 -118.191.80.0/22 -118.192.0.0/16 -118.193.0.0/21 -118.193.128.0/17 -118.193.48.0/21 -118.193.8.0/21 -118.193.96.0/19 -118.194.0.0/17 -118.194.128.0/18 -118.194.192.0/19 -118.194.224.0/22 -118.194.240.0/21 -118.195.0.0/17 -118.195.128.0/17 -118.196.0.0/14 -118.202.0.0/15 -118.204.0.0/14 -118.212.0.0/16 -118.213.0.0/16 -118.215.192.0/18 -118.224.0.0/14 -118.228.0.0/15 -118.230.0.0/16 -118.239.0.0/16 -118.24.0.0/15 -118.242.0.0/16 -118.244.0.0/14 -118.248.0.0/13 -118.26.0.0/19 -118.26.112.0/21 -118.26.120.0/21 -118.26.128.0/20 -118.26.160.0/20 -118.26.188.0/22 -118.26.192.0/18 -118.26.32.0/22 -118.26.40.0/21 -118.26.48.0/21 -118.26.56.0/21 -118.26.64.0/19 -118.26.96.0/21 -118.28.0.0/15 -118.30.0.0/16 -118.31.0.0/16 -118.64.0.0/15 -118.66.0.0/16 -118.67.112.0/20 -118.72.0.0/13 -118.80.0.0/15 -118.84.0.0/15 -118.88.128.0/17 -118.88.32.0/19 -118.88.64.0/18 -118.89.0.0/16 -118.91.240.0/20 -119.0.0.0/15 -119.10.0.0/17 -119.108.0.0/15 -119.112.0.0/13 -119.120.0.0/13 -119.128.0.0/12 -119.144.0.0/14 -119.148.160.0/20 -119.148.176.0/20 -119.15.136.0/21 -119.151.192.0/18 -119.16.0.0/16 -119.160.200.0/21 -119.161.120.0/22 -119.161.124.0/22 -119.161.128.0/17 -119.162.0.0/15 -119.164.0.0/14 -119.176.0.0/12 -119.18.192.0/20 -119.18.208.0/21 -119.18.224.0/20 -119.18.240.0/20 -119.19.0.0/16 -119.2.0.0/19 -119.2.128.0/17 -119.20.0.0/14 -119.232.0.0/15 -119.235.128.0/18 -119.248.0.0/14 -119.252.240.0/20 -119.252.96.0/21 -119.253.0.0/16 -119.254.0.0/15 -119.27.128.0/19 -119.27.160.0/19 -119.27.192.0/18 -119.27.64.0/18 -119.28.0.0/15 -119.3.0.0/16 -119.30.48.0/20 -119.31.192.0/19 -119.32.0.0/14 -119.36.0.0/16 -119.37.0.0/17 -119.37.128.0/18 -119.37.192.0/18 -119.38.0.0/17 -119.38.128.0/18 -119.38.192.0/20 -119.38.208.0/20 -119.38.224.0/19 -119.39.0.0/16 -119.4.0.0/14 -119.40.0.0/18 -119.40.128.0/17 -119.40.64.0/20 -119.41.0.0/16 -119.42.0.0/19 -119.42.128.0/21 -119.42.136.0/21 -119.42.224.0/19 -119.44.0.0/15 -119.48.0.0/13 -119.57.0.0/16 -119.58.0.0/16 -119.59.128.0/17 -119.60.0.0/16 -119.61.0.0/16 -119.62.0.0/16 -119.63.32.0/19 -119.75.208.0/20 -119.78.0.0/15 -119.80.0.0/16 -119.82.208.0/20 -119.84.0.0/14 -119.88.0.0/14 -119.96.0.0/13 -120.0.0.0/12 -120.128.0.0/14 -120.132.0.0/17 -120.132.128.0/17 -120.133.0.0/16 -120.134.0.0/15 -120.136.128.0/18 -120.136.16.0/22 -120.136.20.0/22 -120.137.0.0/17 -120.143.128.0/19 -120.192.0.0/10 -120.24.0.0/14 -120.30.0.0/16 -120.31.0.0/16 -120.32.0.0/13 -120.40.0.0/14 -120.44.0.0/15 -120.46.0.0/16 -120.47.0.0/16 -120.48.0.0/15 -120.52.0.0/16 -120.53.0.0/16 -120.54.0.0/15 -120.64.0.0/14 -120.68.0.0/14 -120.72.128.0/17 -120.72.32.0/19 -120.76.0.0/14 -120.80.0.0/13 -120.88.8.0/21 -120.90.0.0/15 -120.92.0.0/16 -120.94.0.0/16 -120.95.0.0/16 -121.0.16.0/20 -121.0.8.0/21 -121.100.128.0/17 -121.101.0.0/18 -121.101.208.0/20 -121.16.0.0/13 -121.192.0.0/16 -121.193.0.0/16 -121.194.0.0/15 -121.196.0.0/14 -121.200.192.0/21 -121.201.0.0/16 -121.204.0.0/14 -121.224.0.0/12 -121.24.0.0/14 -121.248.0.0/14 -121.255.0.0/16 -121.28.0.0/15 -121.30.0.0/16 -121.31.0.0/16 -121.32.0.0/14 -121.36.0.0/16 -121.37.0.0/16 -121.38.0.0/15 -121.4.0.0/15 -121.40.0.0/14 -121.46.0.0/18 -121.46.128.0/17 -121.46.76.0/22 -121.47.0.0/16 -121.48.0.0/15 -121.50.8.0/21 -121.51.0.0/16 -121.52.160.0/19 -121.52.208.0/20 -121.52.224.0/19 -121.54.176.0/21 -121.54.188.0/22 -121.55.0.0/18 -121.56.0.0/15 -121.58.0.0/17 -121.58.136.0/21 -121.58.144.0/20 -121.58.160.0/21 -121.59.0.0/16 -121.60.0.0/14 -121.68.0.0/14 -121.76.0.0/15 -121.79.128.0/18 -121.8.0.0/13 -121.89.0.0/16 -121.91.104.0/21 -122.0.128.0/17 -122.0.64.0/18 -122.10.128.0/22 -122.10.132.0/23 -122.10.136.0/23 -122.10.164.0/22 -122.10.168.0/21 -122.10.176.0/20 -122.10.192.0/22 -122.10.200.0/21 -122.10.208.0/21 -122.10.216.0/22 -122.10.228.0/22 -122.10.232.0/21 -122.10.240.0/22 -122.102.0.0/20 -122.102.64.0/20 -122.102.80.0/20 -122.11.0.0/17 -122.112.0.0/18 -122.112.128.0/17 -122.112.64.0/18 -122.113.0.0/16 -122.114.0.0/16 -122.115.0.0/17 -122.115.128.0/19 -122.115.160.0/19 -122.115.192.0/19 -122.115.224.0/19 -122.119.0.0/16 -122.12.0.0/16 -122.128.100.0/22 -122.128.120.0/21 -122.13.0.0/16 -122.136.0.0/13 -122.14.0.0/17 -122.14.128.0/18 -122.14.192.0/18 -122.144.128.0/17 -122.152.192.0/18 -122.156.0.0/14 -122.188.0.0/14 -122.192.0.0/14 -122.198.0.0/16 -122.200.40.0/22 -122.200.44.0/22 -122.200.64.0/18 -122.201.48.0/20 -122.204.0.0/14 -122.224.0.0/12 -122.240.0.0/13 -122.248.24.0/21 -122.248.48.0/20 -122.255.64.0/21 -122.4.0.0/14 -122.48.0.0/16 -122.49.0.0/18 -122.51.0.0/16 -122.64.0.0/11 -122.8.0.0/17 -122.8.192.0/18 -122.9.0.0/16 -122.96.0.0/15 -123.0.128.0/18 -123.100.0.0/19 -123.101.0.0/16 -123.103.0.0/17 -123.108.128.0/20 -123.108.208.0/20 -123.112.0.0/12 -123.128.0.0/13 -123.136.80.0/20 -123.137.0.0/16 -123.138.0.0/15 -123.144.0.0/14 -123.148.0.0/16 -123.149.0.0/16 -123.150.0.0/15 -123.152.0.0/13 -123.160.0.0/14 -123.164.0.0/14 -123.168.0.0/14 -123.172.0.0/15 -123.174.0.0/15 -123.176.60.0/22 -123.176.80.0/20 -123.177.0.0/16 -123.178.0.0/15 -123.180.0.0/14 -123.184.0.0/14 -123.188.0.0/14 -123.196.0.0/15 -123.199.128.0/17 -123.206.0.0/15 -123.232.0.0/14 -123.242.0.0/17 -123.242.192.0/22 -123.242.196.0/22 -123.244.0.0/14 -123.249.0.0/16 -123.253.108.0/22 -123.253.240.0/22 -123.254.100.0/22 -123.254.96.0/22 -123.4.0.0/14 -123.49.128.0/17 -123.50.160.0/19 -123.52.0.0/14 -123.56.0.0/15 -123.58.0.0/20 -123.58.128.0/18 -123.58.16.0/20 -123.58.224.0/20 -123.58.240.0/20 -123.58.32.0/19 -123.58.64.0/19 -123.58.96.0/19 -123.59.0.0/16 -123.60.0.0/16 -123.61.0.0/16 -123.62.0.0/16 -123.64.0.0/11 -123.8.0.0/13 -123.96.0.0/15 -123.98.0.0/17 -123.99.128.0/17 -124.108.40.0/21 -124.108.8.0/21 -124.109.96.0/21 -124.112.0.0/15 -124.114.0.0/15 -124.116.0.0/16 -124.117.0.0/16 -124.118.0.0/15 -124.126.0.0/15 -124.128.0.0/13 -124.14.0.0/15 -124.147.128.0/17 -124.150.137.0/24 -124.151.0.0/16 -124.152.0.0/16 -124.16.0.0/15 -124.160.0.0/16 -124.161.0.0/16 -124.162.0.0/16 -124.163.0.0/16 -124.164.0.0/14 -124.172.0.0/15 -124.174.0.0/15 -124.192.0.0/15 -124.196.0.0/16 -124.20.0.0/16 -124.200.0.0/13 -124.21.0.0/20 -124.21.128.0/17 -124.21.16.0/20 -124.21.32.0/19 -124.21.64.0/18 -124.22.0.0/15 -124.220.0.0/14 -124.224.0.0/16 -124.225.0.0/16 -124.226.0.0/15 -124.228.0.0/14 -124.232.0.0/15 -124.234.0.0/15 -124.236.0.0/14 -124.240.0.0/17 -124.240.128.0/18 -124.242.0.0/16 -124.243.192.0/18 -124.248.0.0/17 -124.249.0.0/16 -124.250.0.0/15 -124.254.0.0/18 -124.28.192.0/18 -124.29.0.0/17 -124.31.0.0/16 -124.40.112.0/20 -124.40.128.0/18 -124.40.192.0/19 -124.40.240.0/22 -124.42.0.0/17 -124.42.128.0/17 -124.47.0.0/18 -124.6.64.0/18 -124.64.0.0/15 -124.66.0.0/17 -124.67.0.0/16 -124.68.0.0/15 -124.70.0.0/15 -124.72.0.0/16 -124.73.0.0/16 -124.74.0.0/15 -124.76.0.0/14 -124.88.0.0/16 -124.89.0.0/17 -124.89.128.0/17 -124.90.0.0/15 -124.92.0.0/14 -125.104.0.0/13 -125.112.0.0/12 -125.169.0.0/16 -125.171.0.0/16 -125.208.0.0/18 -125.210.0.0/16 -125.211.0.0/16 -125.213.0.0/17 -125.214.96.0/19 -125.215.0.0/18 -125.216.0.0/15 -125.218.0.0/16 -125.219.0.0/16 -125.220.0.0/15 -125.222.0.0/15 -125.254.128.0/18 -125.254.192.0/18 -125.31.192.0/18 -125.32.0.0/16 -125.33.0.0/16 -125.34.0.0/16 -125.35.0.0/17 -125.35.128.0/17 -125.36.0.0/14 -125.40.0.0/13 -125.58.128.0/17 -125.61.128.0/17 -125.62.0.0/18 -125.64.0.0/13 -125.72.0.0/16 -125.73.0.0/16 -125.74.0.0/15 -125.76.0.0/17 -125.76.128.0/17 -125.77.0.0/16 -125.78.0.0/15 -125.80.0.0/13 -125.88.0.0/13 -125.96.0.0/15 -125.98.0.0/16 -128.108.0.0/16 -129.204.0.0/16 -129.211.0.0/16 -129.28.0.0/16 -132.232.0.0/16 -134.175.0.0/16 -137.59.59.0/24 -137.59.88.0/22 -139.129.0.0/16 -139.148.0.0/16 -139.155.0.0/16 -139.159.0.0/16 -139.170.0.0/16 -139.176.0.0/16 -139.183.0.0/16 -139.186.0.0/16 -139.189.0.0/16 -139.196.0.0/14 -139.200.0.0/13 -139.208.0.0/13 -139.217.0.0/16 -139.219.0.0/16 -139.220.0.0/15 -139.224.0.0/16 -139.226.0.0/15 -139.5.108.0/22 -139.5.128.0/22 -139.5.160.0/22 -139.5.192.0/22 -139.5.204.0/22 -139.5.208.0/22 -139.5.212.0/22 -139.5.244.0/22 -139.5.56.0/22 -139.5.60.0/22 -139.5.80.0/22 -139.5.92.0/22 -139.9.0.0/16 -14.0.0.0/21 -14.0.12.0/22 -14.1.0.0/22 -14.1.108.0/22 -14.1.24.0/22 -14.1.96.0/22 -14.102.128.0/22 -14.102.156.0/22 -14.102.180.0/22 -14.103.0.0/16 -14.104.0.0/13 -14.112.0.0/12 -14.130.0.0/15 -14.134.0.0/15 -14.144.0.0/12 -14.16.0.0/12 -14.192.60.0/22 -14.192.76.0/22 -14.196.0.0/15 -14.204.0.0/15 -14.208.0.0/12 -140.143.0.0/16 -140.179.0.0/16 -140.205.0.0/16 -140.206.0.0/15 -140.210.0.0/17 -140.210.128.0/17 -140.224.0.0/16 -140.237.0.0/16 -140.240.0.0/16 -140.243.0.0/16 -140.246.0.0/16 -140.249.0.0/16 -140.250.0.0/16 -140.255.0.0/16 -140.75.0.0/16 -142.70.0.0/16 -142.86.0.0/16 -144.0.0.0/16 -144.12.0.0/16 -144.123.0.0/16 -144.255.0.0/16 -144.48.156.0/22 -144.48.180.0/22 -144.48.184.0/22 -144.48.204.0/22 -144.48.208.0/22 -144.48.212.0/22 -144.48.220.0/22 -144.48.252.0/22 -144.48.64.0/22 -144.48.8.0/22 -144.48.88.0/22 -144.52.0.0/16 -144.7.0.0/16 -146.196.112.0/22 -146.196.116.0/22 -146.196.124.0/22 -146.196.56.0/22 -146.196.68.0/22 -146.196.72.0/22 -146.196.92.0/22 -146.56.192.0/18 -148.70.0.0/16 -149.41.0.0/16 -150.0.0.0/16 -150.115.0.0/16 -150.121.0.0/16 -150.122.0.0/16 -150.129.136.0/22 -150.129.192.0/22 -150.129.216.0/22 -150.129.252.0/22 -150.138.0.0/15 -150.158.0.0/16 -150.223.0.0/16 -150.242.0.0/22 -150.242.112.0/22 -150.242.116.0/22 -150.242.120.0/22 -150.242.152.0/22 -150.242.156.0/22 -150.242.160.0/22 -150.242.164.0/22 -150.242.168.0/22 -150.242.184.0/22 -150.242.188.0/22 -150.242.192.0/22 -150.242.212.0/22 -150.242.224.0/22 -150.242.232.0/22 -150.242.236.0/22 -150.242.240.0/22 -150.242.244.0/22 -150.242.248.0/22 -150.242.28.0/22 -150.242.4.0/22 -150.242.44.0/22 -150.242.48.0/22 -150.242.52.0/22 -150.242.56.0/22 -150.242.76.0/22 -150.242.8.0/22 -150.242.80.0/22 -150.242.92.0/22 -150.242.96.0/22 -150.248.0.0/16 -150.255.0.0/16 -152.104.128.0/17 -152.136.0.0/16 -153.0.0.0/16 -153.101.0.0/16 -153.118.0.0/15 -153.3.0.0/16 -153.34.0.0/15 -153.36.0.0/15 -153.99.0.0/16 -154.8.128.0/17 -157.0.0.0/16 -157.119.0.0/22 -157.119.12.0/22 -157.119.132.0/22 -157.119.136.0/22 -157.119.140.0/22 -157.119.144.0/22 -157.119.148.0/22 -157.119.152.0/22 -157.119.156.0/22 -157.119.16.0/22 -157.119.160.0/22 -157.119.164.0/22 -157.119.172.0/22 -157.119.192.0/22 -157.119.196.0/22 -157.119.240.0/22 -157.119.252.0/22 -157.119.28.0/22 -157.119.8.0/22 -157.122.0.0/16 -157.148.0.0/16 -157.156.0.0/16 -157.18.0.0/16 -157.255.0.0/16 -157.61.0.0/16 -158.60.0.0/16 -158.79.0.0/16 -159.226.0.0/16 -159.27.0.0/16 -159.75.0.0/16 -160.19.208.0/22 -160.19.212.0/22 -160.19.216.0/22 -160.20.48.0/22 -160.202.148.0/22 -160.202.152.0/22 -160.202.168.0/22 -160.202.212.0/22 -160.202.216.0/22 -160.202.220.0/22 -160.202.224.0/22 -160.202.228.0/22 -160.202.232.0/22 -160.202.236.0/22 -160.202.240.0/22 -160.202.244.0/22 -160.202.248.0/22 -160.202.252.0/22 -160.202.60.0/22 -160.238.64.0/22 -161.120.0.0/16 -161.189.0.0/16 -161.207.0.0/16 -162.105.0.0/16 -162.14.0.0/16 -163.0.0.0/16 -163.125.0.0/16 -163.142.0.0/16 -163.177.0.0/16 -163.179.0.0/16 -163.204.0.0/16 -163.228.0.0/16 -163.47.4.0/22 -163.53.0.0/22 -163.53.100.0/22 -163.53.104.0/22 -163.53.108.0/22 -163.53.112.0/22 -163.53.116.0/22 -163.53.12.0/22 -163.53.120.0/22 -163.53.124.0/22 -163.53.128.0/22 -163.53.132.0/22 -163.53.136.0/22 -163.53.160.0/22 -163.53.164.0/22 -163.53.168.0/22 -163.53.172.0/22 -163.53.188.0/22 -163.53.220.0/22 -163.53.240.0/22 -163.53.36.0/22 -163.53.4.0/22 -163.53.40.0/22 -163.53.44.0/22 -163.53.48.0/22 -163.53.52.0/22 -163.53.56.0/22 -163.53.60.0/22 -163.53.64.0/22 -163.53.8.0/22 -163.53.88.0/22 -163.53.92.0/22 -163.53.96.0/22 -164.52.0.0/17 -166.111.0.0/16 -167.139.0.0/16 -167.189.0.0/16 -167.220.244.0/22 -168.160.0.0/16 -170.179.0.0/16 -171.104.0.0/13 -171.112.0.0/14 -171.116.0.0/14 -171.120.0.0/13 -171.208.0.0/12 -171.34.0.0/15 -171.36.0.0/14 -171.40.0.0/13 -171.8.0.0/13 -171.80.0.0/14 -171.84.0.0/14 -171.88.0.0/13 -172.81.192.0/18 -175.0.0.0/12 -175.102.0.0/16 -175.106.128.0/17 -175.111.144.0/22 -175.111.148.0/22 -175.111.152.0/22 -175.111.156.0/22 -175.111.160.0/22 -175.111.164.0/22 -175.111.168.0/22 -175.111.172.0/22 -175.111.184.0/22 -175.146.0.0/15 -175.148.0.0/14 -175.152.0.0/14 -175.158.96.0/22 -175.16.0.0/13 -175.160.0.0/12 -175.176.156.0/22 -175.176.176.0/22 -175.176.188.0/22 -175.176.192.0/22 -175.178.0.0/16 -175.184.128.0/18 -175.185.0.0/16 -175.186.0.0/15 -175.188.0.0/14 -175.24.0.0/16 -175.25.0.0/16 -175.26.0.0/16 -175.27.0.0/16 -175.30.0.0/15 -175.42.0.0/15 -175.44.0.0/16 -175.46.0.0/15 -175.48.0.0/12 -175.64.0.0/11 -180.129.128.0/17 -180.130.0.0/16 -180.136.0.0/13 -180.148.152.0/21 -180.148.16.0/21 -180.148.216.0/21 -180.148.224.0/19 -180.149.128.0/19 -180.149.236.0/22 -180.150.160.0/19 -180.152.0.0/13 -180.160.0.0/12 -180.178.112.0/22 -180.178.116.0/22 -180.178.192.0/18 -180.184.0.0/15 -180.186.0.0/16 -180.187.0.0/16 -180.188.0.0/17 -180.189.148.0/22 -180.200.252.0/22 -180.201.0.0/16 -180.202.0.0/15 -180.208.0.0/15 -180.210.212.0/22 -180.210.224.0/19 -180.212.0.0/15 -180.222.224.0/19 -180.223.0.0/16 -180.233.0.0/18 -180.233.144.0/22 -180.233.64.0/19 -180.235.112.0/22 -180.235.64.0/19 -180.76.0.0/16 -180.77.0.0/16 -180.78.0.0/15 -180.84.0.0/15 -180.86.0.0/16 -180.88.0.0/14 -180.94.120.0/22 -180.94.124.0/22 -180.94.56.0/21 -180.94.96.0/20 -180.95.128.0/17 -180.96.0.0/11 -182.112.0.0/12 -182.128.0.0/12 -182.144.0.0/13 -182.157.0.0/16 -182.16.144.0/22 -182.16.148.0/22 -182.16.192.0/19 -182.160.64.0/19 -182.174.0.0/15 -182.18.0.0/17 -182.200.0.0/13 -182.23.184.0/21 -182.23.200.0/21 -182.236.128.0/17 -182.237.24.0/22 -182.237.28.0/22 -182.238.0.0/16 -182.239.0.0/19 -182.240.0.0/13 -182.254.0.0/16 -182.255.32.0/22 -182.255.60.0/22 -182.32.0.0/12 -182.48.96.0/19 -182.49.0.0/16 -182.50.0.0/20 -182.50.112.0/20 -182.51.0.0/16 -182.54.0.0/17 -182.54.244.0/22 -182.61.0.0/16 -182.80.0.0/14 -182.84.0.0/14 -182.88.0.0/14 -182.92.0.0/16 -182.96.0.0/12 -183.0.0.0/10 -183.128.0.0/11 -183.160.0.0/13 -183.168.0.0/15 -183.170.0.0/16 -183.172.0.0/14 -183.182.0.0/19 -183.184.0.0/13 -183.192.0.0/10 -183.64.0.0/13 -183.78.160.0/22 -183.78.164.0/22 -183.78.180.0/22 -183.81.172.0/22 -183.81.180.0/22 -183.84.0.0/15 -183.91.128.0/22 -183.91.136.0/21 -183.91.144.0/20 -183.92.0.0/14 -185.203.36.0/22 -188.131.128.0/17 -192.102.204.0/23 -192.124.154.0/24 -192.140.128.0/22 -192.140.132.0/22 -192.140.136.0/22 -192.140.156.0/22 -192.140.160.0/22 -192.140.164.0/22 -192.140.168.0/22 -192.140.172.0/22 -192.140.176.0/22 -192.140.180.0/22 -192.140.184.0/22 -192.140.188.0/22 -192.140.192.0/22 -192.140.196.0/22 -192.140.200.0/22 -192.140.204.0/22 -192.140.208.0/22 -192.140.212.0/22 -192.144.128.0/17 -192.197.113.0/24 -192.51.188.0/24 -192.55.46.0/24 -192.55.68.0/22 -193.112.0.0/16 -198.175.100.0/22 -199.212.57.0/24 -202.0.100.0/23 -202.0.122.0/23 -202.0.176.0/22 -202.10.112.0/22 -202.10.116.0/22 -202.10.120.0/22 -202.10.124.0/22 -202.10.64.0/20 -202.100.0.0/21 -202.100.104.0/21 -202.100.112.0/20 -202.100.128.0/21 -202.100.136.0/21 -202.100.144.0/20 -202.100.16.0/20 -202.100.160.0/21 -202.100.168.0/21 -202.100.176.0/20 -202.100.192.0/21 -202.100.200.0/21 -202.100.208.0/20 -202.100.224.0/19 -202.100.32.0/19 -202.100.64.0/21 -202.100.72.0/21 -202.100.8.0/21 -202.100.80.0/20 -202.100.96.0/21 -202.101.0.0/18 -202.101.128.0/18 -202.101.192.0/19 -202.101.224.0/21 -202.101.232.0/21 -202.101.240.0/20 -202.101.64.0/19 -202.101.96.0/19 -202.102.0.0/19 -202.102.128.0/21 -202.102.136.0/21 -202.102.144.0/20 -202.102.160.0/19 -202.102.192.0/21 -202.102.200.0/21 -202.102.208.0/20 -202.102.224.0/21 -202.102.232.0/21 -202.102.240.0/20 -202.102.32.0/19 -202.102.64.0/18 -202.103.0.0/21 -202.103.104.0/21 -202.103.112.0/20 -202.103.128.0/18 -202.103.16.0/20 -202.103.192.0/19 -202.103.224.0/21 -202.103.232.0/21 -202.103.240.0/20 -202.103.32.0/19 -202.103.64.0/19 -202.103.8.0/21 -202.103.96.0/21 -202.104.0.0/15 -202.106.0.0/16 -202.107.0.0/17 -202.107.128.0/17 -202.108.0.0/16 -202.109.0.0/16 -202.110.0.0/18 -202.110.128.0/18 -202.110.192.0/18 -202.110.64.0/18 -202.111.0.0/17 -202.111.128.0/19 -202.111.160.0/19 -202.111.192.0/18 -202.112.0.0/16 -202.113.0.0/20 -202.113.128.0/18 -202.113.16.0/20 -202.113.192.0/19 -202.113.224.0/20 -202.113.240.0/20 -202.113.32.0/19 -202.113.64.0/18 -202.114.0.0/19 -202.114.128.0/17 -202.114.32.0/19 -202.114.64.0/18 -202.115.0.0/19 -202.115.128.0/17 -202.115.32.0/19 -202.115.64.0/18 -202.116.0.0/19 -202.116.128.0/17 -202.116.32.0/20 -202.116.48.0/20 -202.116.64.0/19 -202.116.96.0/19 -202.117.0.0/18 -202.117.128.0/17 -202.117.64.0/18 -202.118.0.0/19 -202.118.128.0/17 -202.118.32.0/19 -202.118.64.0/18 -202.119.0.0/19 -202.119.128.0/17 -202.119.32.0/19 -202.119.64.0/20 -202.119.80.0/20 -202.119.96.0/19 -202.12.1.0/24 -202.12.106.0/24 -202.12.111.0/24 -202.12.116.0/24 -202.12.17.0/24 -202.12.18.0/24 -202.12.19.0/24 -202.12.2.0/24 -202.12.72.0/24 -202.12.84.0/23 -202.12.96.0/24 -202.12.98.0/23 -202.120.0.0/18 -202.120.128.0/17 -202.120.64.0/18 -202.121.0.0/16 -202.122.0.0/21 -202.122.112.0/21 -202.122.120.0/21 -202.122.128.0/24 -202.122.132.0/24 -202.122.32.0/21 -202.122.64.0/19 -202.123.116.0/22 -202.123.120.0/22 -202.123.96.0/20 -202.124.16.0/21 -202.124.24.0/22 -202.125.107.0/24 -202.125.109.0/24 -202.125.112.0/20 -202.125.176.0/20 -202.127.0.0/23 -202.127.112.0/20 -202.127.12.0/22 -202.127.128.0/20 -202.127.144.0/20 -202.127.16.0/20 -202.127.160.0/21 -202.127.192.0/23 -202.127.194.0/23 -202.127.196.0/22 -202.127.2.0/24 -202.127.200.0/21 -202.127.208.0/24 -202.127.209.0/24 -202.127.212.0/22 -202.127.216.0/21 -202.127.224.0/19 -202.127.3.0/24 -202.127.4.0/24 -202.127.40.0/21 -202.127.48.0/20 -202.127.5.0/24 -202.127.6.0/23 -202.129.208.0/24 -202.130.0.0/19 -202.130.224.0/19 -202.130.39.0/24 -202.131.16.0/21 -202.131.208.0/20 -202.131.48.0/20 -202.133.32.0/20 -202.134.128.0/20 -202.134.208.0/22 -202.134.212.0/22 -202.134.216.0/22 -202.134.220.0/22 -202.134.58.0/24 -202.136.208.0/20 -202.136.224.0/20 -202.136.248.0/22 -202.136.48.0/20 -202.137.231.0/24 -202.14.104.0/23 -202.14.108.0/23 -202.14.111.0/24 -202.14.114.0/23 -202.14.118.0/23 -202.14.124.0/23 -202.14.127.0/24 -202.14.129.0/24 -202.14.135.0/24 -202.14.136.0/24 -202.14.149.0/24 -202.14.151.0/24 -202.14.157.0/24 -202.14.158.0/23 -202.14.169.0/24 -202.14.170.0/23 -202.14.172.0/22 -202.14.176.0/24 -202.14.184.0/23 -202.14.208.0/23 -202.14.213.0/24 -202.14.219.0/24 -202.14.220.0/24 -202.14.222.0/23 -202.14.225.0/24 -202.14.226.0/23 -202.14.231.0/24 -202.14.235.0/24 -202.14.236.0/23 -202.14.238.0/24 -202.14.239.0/24 -202.14.246.0/24 -202.14.251.0/24 -202.14.64.0/23 -202.14.69.0/24 -202.14.73.0/24 -202.14.74.0/23 -202.14.76.0/24 -202.14.78.0/23 -202.14.88.0/24 -202.14.97.0/24 -202.140.140.0/22 -202.140.144.0/22 -202.140.148.0/22 -202.140.152.0/22 -202.140.156.0/22 -202.141.160.0/19 -202.142.16.0/20 -202.143.100.0/22 -202.143.104.0/22 -202.143.16.0/20 -202.143.32.0/20 -202.143.4.0/22 -202.143.56.0/21 -202.144.196.0/22 -202.146.160.0/20 -202.146.186.0/24 -202.146.188.0/22 -202.146.196.0/22 -202.146.200.0/21 -202.147.144.0/20 -202.148.32.0/20 -202.148.64.0/19 -202.148.96.0/19 -202.149.160.0/19 -202.149.224.0/19 -202.149.32.0/19 -202.150.16.0/20 -202.150.192.0/20 -202.150.224.0/19 -202.150.32.0/20 -202.150.56.0/22 -202.151.0.0/22 -202.151.128.0/19 -202.151.33.0/24 -202.152.176.0/20 -202.153.0.0/22 -202.153.48.0/20 -202.153.7.0/24 -202.157.192.0/19 -202.158.160.0/19 -202.158.242.0/24 -202.160.140.0/22 -202.160.156.0/22 -202.160.176.0/20 -202.162.67.0/24 -202.162.75.0/24 -202.164.0.0/20 -202.164.96.0/19 -202.165.176.0/20 -202.165.208.0/20 -202.165.239.0/24 -202.165.240.0/23 -202.165.243.0/24 -202.165.245.0/24 -202.165.251.0/24 -202.165.252.0/22 -202.166.224.0/19 -202.168.128.0/22 -202.168.132.0/22 -202.168.136.0/22 -202.168.140.0/22 -202.168.160.0/20 -202.168.176.0/20 -202.168.80.0/22 -202.170.128.0/19 -202.170.216.0/21 -202.170.224.0/19 -202.171.216.0/21 -202.171.232.0/24 -202.171.235.0/24 -202.172.0.0/22 -202.172.7.0/24 -202.173.0.0/22 -202.173.112.0/22 -202.173.224.0/19 -202.173.6.0/24 -202.173.8.0/21 -202.174.124.0/22 -202.174.64.0/20 -202.176.224.0/19 -202.179.160.0/22 -202.179.164.0/22 -202.179.168.0/22 -202.179.172.0/22 -202.179.240.0/20 -202.180.128.0/19 -202.180.208.0/21 -202.181.112.0/20 -202.181.28.0/22 -202.181.8.0/22 -202.182.192.0/19 -202.182.32.0/20 -202.189.0.0/18 -202.189.184.0/21 -202.189.80.0/20 -202.191.0.0/24 -202.191.68.0/22 -202.191.72.0/21 -202.191.80.0/20 -202.192.0.0/13 -202.20.114.0/24 -202.20.117.0/24 -202.20.120.0/24 -202.20.125.0/24 -202.20.126.0/24 -202.20.127.0/24 -202.20.66.0/24 -202.20.79.0/24 -202.20.87.0/24 -202.20.88.0/23 -202.20.90.0/24 -202.20.94.0/23 -202.200.0.0/14 -202.204.0.0/14 -202.21.131.0/24 -202.21.132.0/24 -202.21.141.0/24 -202.21.142.0/24 -202.21.147.0/24 -202.21.148.0/24 -202.21.150.0/23 -202.21.152.0/23 -202.21.154.0/24 -202.21.156.0/24 -202.21.48.0/22 -202.21.52.0/22 -202.21.56.0/22 -202.21.60.0/22 -202.22.248.0/22 -202.22.252.0/22 -202.27.12.0/24 -202.27.136.0/23 -202.27.14.0/24 -202.3.128.0/23 -202.3.134.0/24 -202.36.226.0/24 -202.38.0.0/23 -202.38.128.0/23 -202.38.130.0/23 -202.38.132.0/23 -202.38.134.0/24 -202.38.135.0/24 -202.38.136.0/23 -202.38.138.0/24 -202.38.140.0/23 -202.38.142.0/23 -202.38.146.0/23 -202.38.149.0/24 -202.38.150.0/23 -202.38.152.0/23 -202.38.154.0/23 -202.38.156.0/24 -202.38.158.0/23 -202.38.160.0/23 -202.38.164.0/22 -202.38.168.0/23 -202.38.170.0/24 -202.38.171.0/24 -202.38.176.0/23 -202.38.184.0/21 -202.38.192.0/18 -202.38.2.0/23 -202.38.48.0/20 -202.38.64.0/19 -202.38.8.0/21 -202.38.96.0/19 -202.4.128.0/19 -202.4.252.0/22 -202.40.135.0/24 -202.40.136.0/24 -202.40.140.0/24 -202.40.143.0/24 -202.40.144.0/23 -202.40.15.0/24 -202.40.150.0/24 -202.40.155.0/24 -202.40.156.0/24 -202.40.158.0/23 -202.40.162.0/24 -202.40.4.0/23 -202.40.7.0/24 -202.41.11.0/24 -202.41.12.0/23 -202.41.128.0/24 -202.41.130.0/23 -202.41.152.0/21 -202.41.192.0/24 -202.41.196.0/22 -202.41.200.0/22 -202.41.240.0/20 -202.41.8.0/23 -202.43.144.0/20 -202.43.76.0/22 -202.44.129.0/24 -202.44.132.0/23 -202.44.146.0/23 -202.44.16.0/20 -202.44.48.0/22 -202.44.67.0/24 -202.44.74.0/24 -202.44.97.0/24 -202.45.0.0/23 -202.45.15.0/24 -202.45.16.0/20 -202.45.2.0/24 -202.46.128.0/24 -202.46.16.0/23 -202.46.18.0/24 -202.46.20.0/23 -202.46.224.0/20 -202.46.32.0/19 -202.47.100.0/22 -202.47.104.0/22 -202.47.108.0/22 -202.47.126.0/24 -202.47.128.0/24 -202.47.130.0/23 -202.47.82.0/23 -202.47.96.0/22 -202.5.208.0/22 -202.5.212.0/22 -202.5.216.0/22 -202.52.143.0/24 -202.52.144.0/24 -202.52.33.0/24 -202.52.34.0/24 -202.52.47.0/24 -202.53.140.0/24 -202.53.143.0/24 -202.57.192.0/22 -202.57.196.0/22 -202.57.200.0/22 -202.57.204.0/22 -202.57.212.0/22 -202.57.216.0/22 -202.57.240.0/20 -202.58.0.0/24 -202.58.101.0/24 -202.58.104.0/22 -202.58.112.0/22 -202.59.0.0/24 -202.59.1.0/24 -202.59.212.0/22 -202.59.236.0/24 -202.59.240.0/24 -202.6.103.0/24 -202.6.108.0/24 -202.6.110.0/23 -202.6.114.0/24 -202.6.176.0/20 -202.6.6.0/23 -202.6.66.0/23 -202.6.72.0/23 -202.6.87.0/24 -202.6.88.0/23 -202.6.92.0/23 -202.60.112.0/20 -202.60.132.0/22 -202.60.136.0/21 -202.60.144.0/20 -202.60.48.0/21 -202.60.96.0/21 -202.61.123.0/24 -202.61.127.0/24 -202.61.68.0/22 -202.61.76.0/22 -202.61.88.0/22 -202.62.112.0/22 -202.62.248.0/22 -202.62.252.0/24 -202.62.255.0/24 -202.63.160.0/19 -202.63.248.0/22 -202.63.253.0/24 -202.63.80.0/24 -202.63.81.0/24 -202.63.82.0/23 -202.63.84.0/22 -202.63.88.0/21 -202.65.0.0/21 -202.65.100.0/22 -202.65.104.0/22 -202.65.108.0/22 -202.65.8.0/23 -202.65.96.0/22 -202.66.168.0/22 -202.67.0.0/22 -202.69.16.0/20 -202.69.4.0/22 -202.70.0.0/19 -202.70.192.0/20 -202.70.96.0/20 -202.71.32.0/22 -202.71.36.0/22 -202.71.40.0/22 -202.71.44.0/22 -202.72.112.0/22 -202.72.116.0/22 -202.72.120.0/22 -202.72.124.0/22 -202.72.40.0/21 -202.72.80.0/20 -202.73.128.0/22 -202.73.240.0/22 -202.73.244.0/22 -202.73.248.0/22 -202.73.252.0/22 -202.74.254.0/23 -202.74.36.0/24 -202.74.42.0/24 -202.74.52.0/24 -202.74.8.0/21 -202.74.80.0/20 -202.75.208.0/20 -202.75.252.0/22 -202.76.252.0/22 -202.77.80.0/21 -202.77.92.0/22 -202.78.8.0/21 -202.79.224.0/21 -202.79.248.0/22 -202.8.0.0/24 -202.8.12.0/24 -202.8.120.0/22 -202.8.128.0/19 -202.8.192.0/20 -202.8.2.0/23 -202.8.24.0/24 -202.8.4.0/23 -202.8.77.0/24 -202.80.192.0/21 -202.80.200.0/21 -202.81.0.0/22 -202.81.176.0/22 -202.81.180.0/22 -202.81.184.0/22 -202.81.188.0/22 -202.83.252.0/22 -202.84.0.0/22 -202.84.16.0/23 -202.84.22.0/24 -202.84.24.0/21 -202.84.4.0/22 -202.84.8.0/21 -202.85.208.0/20 -202.86.249.0/24 -202.86.252.0/22 -202.87.80.0/20 -202.88.32.0/22 -202.89.108.0/22 -202.89.119.0/24 -202.89.232.0/21 -202.89.8.0/21 -202.89.96.0/22 -202.9.32.0/24 -202.9.34.0/23 -202.9.48.0/23 -202.9.51.0/24 -202.9.52.0/23 -202.9.54.0/24 -202.9.57.0/24 -202.9.58.0/23 -202.90.0.0/22 -202.90.100.0/22 -202.90.104.0/22 -202.90.108.0/22 -202.90.112.0/20 -202.90.16.0/22 -202.90.193.0/24 -202.90.196.0/24 -202.90.20.0/22 -202.90.205.0/24 -202.90.224.0/20 -202.90.24.0/22 -202.90.28.0/22 -202.90.37.0/24 -202.90.96.0/22 -202.91.0.0/22 -202.91.128.0/22 -202.91.176.0/20 -202.91.224.0/19 -202.91.36.0/22 -202.91.96.0/20 -202.92.0.0/22 -202.92.252.0/22 -202.92.48.0/20 -202.92.8.0/21 -202.93.0.0/22 -202.93.252.0/22 -202.94.68.0/24 -202.94.74.0/24 -202.94.81.0/24 -202.94.92.0/22 -202.95.240.0/21 -202.95.252.0/22 -202.96.0.0/18 -202.96.104.0/21 -202.96.112.0/20 -202.96.128.0/21 -202.96.136.0/21 -202.96.144.0/20 -202.96.160.0/21 -202.96.168.0/21 -202.96.176.0/20 -202.96.192.0/21 -202.96.200.0/21 -202.96.208.0/20 -202.96.224.0/21 -202.96.232.0/21 -202.96.240.0/20 -202.96.64.0/21 -202.96.72.0/21 -202.96.80.0/20 -202.96.96.0/21 -202.97.0.0/21 -202.97.112.0/20 -202.97.128.0/18 -202.97.16.0/20 -202.97.192.0/19 -202.97.224.0/21 -202.97.232.0/21 -202.97.240.0/20 -202.97.32.0/19 -202.97.64.0/19 -202.97.8.0/21 -202.97.96.0/20 -202.98.0.0/21 -202.98.104.0/21 -202.98.112.0/20 -202.98.128.0/19 -202.98.16.0/20 -202.98.160.0/21 -202.98.168.0/21 -202.98.176.0/20 -202.98.192.0/21 -202.98.200.0/21 -202.98.208.0/20 -202.98.224.0/21 -202.98.232.0/21 -202.98.240.0/20 -202.98.32.0/21 -202.98.40.0/21 -202.98.48.0/20 -202.98.64.0/19 -202.98.8.0/21 -202.98.96.0/21 -202.99.0.0/18 -202.99.104.0/21 -202.99.112.0/20 -202.99.128.0/19 -202.99.160.0/21 -202.99.168.0/21 -202.99.176.0/20 -202.99.192.0/21 -202.99.200.0/21 -202.99.208.0/20 -202.99.224.0/21 -202.99.232.0/21 -202.99.240.0/20 -202.99.64.0/19 -202.99.96.0/21 -203.0.10.0/23 -203.0.104.0/21 -203.0.114.0/23 -203.0.122.0/24 -203.0.128.0/24 -203.0.130.0/23 -203.0.132.0/22 -203.0.137.0/24 -203.0.142.0/24 -203.0.144.0/24 -203.0.146.0/24 -203.0.148.0/24 -203.0.150.0/23 -203.0.152.0/24 -203.0.177.0/24 -203.0.18.0/24 -203.0.224.0/24 -203.0.24.0/24 -203.0.4.0/22 -203.0.42.0/23 -203.0.45.0/24 -203.0.46.0/23 -203.0.81.0/24 -203.0.82.0/23 -203.0.90.0/23 -203.0.96.0/23 -203.1.100.0/22 -203.1.108.0/24 -203.1.18.0/24 -203.1.253.0/24 -203.1.254.0/24 -203.1.26.0/23 -203.1.4.0/22 -203.1.65.0/24 -203.1.66.0/23 -203.1.70.0/23 -203.1.76.0/23 -203.1.90.0/24 -203.1.97.0/24 -203.1.98.0/23 -203.10.125.0/24 -203.10.34.0/24 -203.10.56.0/24 -203.10.74.0/23 -203.10.84.0/22 -203.10.88.0/24 -203.10.95.0/24 -203.100.192.0/20 -203.100.32.0/20 -203.100.48.0/21 -203.100.58.0/24 -203.100.60.0/24 -203.100.63.0/24 -203.100.80.0/20 -203.100.96.0/19 -203.104.32.0/20 -203.105.128.0/19 -203.105.96.0/19 -203.107.0.0/17 -203.11.100.0/22 -203.11.109.0/24 -203.11.117.0/24 -203.11.122.0/24 -203.11.126.0/24 -203.11.136.0/22 -203.11.141.0/24 -203.11.142.0/23 -203.11.180.0/22 -203.11.208.0/22 -203.11.70.0/24 -203.11.76.0/22 -203.11.82.0/24 -203.11.84.0/22 -203.110.160.0/19 -203.110.208.0/20 -203.110.232.0/23 -203.110.234.0/24 -203.114.244.0/22 -203.114.80.0/22 -203.114.84.0/22 -203.114.88.0/22 -203.114.92.0/22 -203.118.192.0/19 -203.118.241.0/24 -203.118.248.0/22 -203.119.113.0/24 -203.119.114.0/23 -203.119.116.0/22 -203.119.120.0/21 -203.119.128.0/17 -203.119.24.0/21 -203.119.32.0/22 -203.119.80.0/22 -203.119.85.0/24 -203.12.100.0/23 -203.12.103.0/24 -203.12.114.0/24 -203.12.118.0/24 -203.12.130.0/24 -203.12.137.0/24 -203.12.16.0/24 -203.12.19.0/24 -203.12.196.0/22 -203.12.211.0/24 -203.12.219.0/24 -203.12.226.0/24 -203.12.24.0/24 -203.12.240.0/22 -203.12.57.0/24 -203.12.65.0/24 -203.12.66.0/24 -203.12.70.0/23 -203.12.87.0/24 -203.123.58.0/24 -203.128.224.0/21 -203.128.32.0/19 -203.128.96.0/19 -203.129.8.0/21 -203.13.173.0/24 -203.13.18.0/24 -203.13.224.0/23 -203.13.227.0/24 -203.13.233.0/24 -203.13.24.0/24 -203.13.44.0/23 -203.13.88.0/23 -203.13.92.0/22 -203.130.32.0/19 -203.132.32.0/19 -203.134.240.0/21 -203.135.112.0/20 -203.135.160.0/20 -203.135.96.0/20 -203.14.104.0/24 -203.14.114.0/23 -203.14.118.0/24 -203.14.162.0/24 -203.14.192.0/24 -203.14.194.0/23 -203.14.214.0/24 -203.14.231.0/24 -203.14.24.0/22 -203.14.246.0/24 -203.14.33.0/24 -203.14.56.0/24 -203.14.61.0/24 -203.14.62.0/24 -203.142.219.0/24 -203.142.224.0/19 -203.144.96.0/19 -203.145.0.0/19 -203.148.0.0/18 -203.148.64.0/20 -203.148.80.0/22 -203.148.86.0/23 -203.149.92.0/22 -203.15.0.0/20 -203.15.105.0/24 -203.15.112.0/21 -203.15.130.0/23 -203.15.149.0/24 -203.15.151.0/24 -203.15.156.0/22 -203.15.174.0/24 -203.15.20.0/23 -203.15.22.0/24 -203.15.227.0/24 -203.15.232.0/21 -203.15.240.0/23 -203.15.246.0/24 -203.15.87.0/24 -203.15.88.0/23 -203.152.128.0/19 -203.152.64.0/19 -203.153.0.0/22 -203.156.192.0/18 -203.158.16.0/21 -203.16.10.0/24 -203.16.12.0/23 -203.16.133.0/24 -203.16.16.0/21 -203.16.161.0/24 -203.16.162.0/24 -203.16.186.0/23 -203.16.228.0/24 -203.16.238.0/24 -203.16.240.0/24 -203.16.245.0/24 -203.16.27.0/24 -203.16.38.0/24 -203.16.49.0/24 -203.16.50.0/23 -203.16.58.0/24 -203.16.63.0/24 -203.160.104.0/21 -203.160.129.0/24 -203.160.192.0/19 -203.160.52.0/22 -203.161.0.0/22 -203.161.180.0/24 -203.161.183.0/24 -203.161.192.0/19 -203.166.160.0/19 -203.167.28.0/22 -203.168.0.0/19 -203.17.136.0/24 -203.17.164.0/24 -203.17.18.0/24 -203.17.187.0/24 -203.17.190.0/23 -203.17.2.0/24 -203.17.231.0/24 -203.17.233.0/24 -203.17.248.0/24 -203.17.249.0/24 -203.17.255.0/24 -203.17.28.0/24 -203.17.39.0/24 -203.17.56.0/24 -203.17.74.0/23 -203.17.88.0/23 -203.170.58.0/23 -203.171.0.0/22 -203.171.208.0/24 -203.171.224.0/20 -203.174.4.0/24 -203.174.6.0/24 -203.174.7.0/24 -203.174.96.0/19 -203.175.128.0/19 -203.175.192.0/18 -203.176.0.0/18 -203.176.168.0/21 -203.176.64.0/19 -203.18.100.0/23 -203.18.105.0/24 -203.18.107.0/24 -203.18.110.0/24 -203.18.129.0/24 -203.18.131.0/24 -203.18.132.0/23 -203.18.144.0/24 -203.18.153.0/24 -203.18.199.0/24 -203.18.2.0/23 -203.18.208.0/24 -203.18.211.0/24 -203.18.215.0/24 -203.18.31.0/24 -203.18.37.0/24 -203.18.4.0/24 -203.18.48.0/23 -203.18.52.0/24 -203.18.7.0/24 -203.18.72.0/22 -203.18.80.0/23 -203.18.87.0/24 -203.184.80.0/20 -203.185.189.0/24 -203.187.160.0/19 -203.189.0.0/23 -203.189.112.0/22 -203.189.192.0/19 -203.189.232.0/22 -203.189.240.0/22 -203.189.6.0/23 -203.19.1.0/24 -203.19.101.0/24 -203.19.111.0/24 -203.19.131.0/24 -203.19.133.0/24 -203.19.144.0/24 -203.19.147.0/24 -203.19.149.0/24 -203.19.156.0/24 -203.19.176.0/24 -203.19.178.0/23 -203.19.18.0/24 -203.19.208.0/24 -203.19.228.0/22 -203.19.233.0/24 -203.19.24.0/24 -203.19.242.0/24 -203.19.248.0/23 -203.19.255.0/24 -203.19.30.0/24 -203.19.32.0/21 -203.19.41.0/24 -203.19.44.0/23 -203.19.46.0/24 -203.19.58.0/24 -203.19.60.0/23 -203.19.64.0/24 -203.19.68.0/24 -203.19.72.0/24 -203.190.249.0/24 -203.190.96.0/20 -203.191.0.0/23 -203.191.133.0/24 -203.191.144.0/21 -203.191.152.0/21 -203.191.16.0/20 -203.191.2.0/24 -203.191.5.0/24 -203.191.64.0/18 -203.191.7.0/24 -203.192.0.0/19 -203.193.224.0/19 -203.194.120.0/21 -203.195.112.0/21 -203.195.128.0/17 -203.195.64.0/19 -203.196.0.0/21 -203.196.28.0/22 -203.196.8.0/21 -203.2.112.0/21 -203.2.126.0/23 -203.2.140.0/24 -203.2.150.0/24 -203.2.152.0/22 -203.2.156.0/23 -203.2.160.0/21 -203.2.180.0/23 -203.2.196.0/23 -203.2.209.0/24 -203.2.214.0/23 -203.2.226.0/23 -203.2.229.0/24 -203.2.236.0/23 -203.2.64.0/21 -203.2.73.0/24 -203.20.106.0/23 -203.20.115.0/24 -203.20.117.0/24 -203.20.118.0/23 -203.20.122.0/24 -203.20.126.0/23 -203.20.135.0/24 -203.20.136.0/21 -203.20.150.0/24 -203.20.17.0/24 -203.20.230.0/24 -203.20.232.0/24 -203.20.236.0/24 -203.20.40.0/23 -203.20.44.0/24 -203.20.48.0/24 -203.20.61.0/24 -203.20.65.0/24 -203.20.84.0/23 -203.20.89.0/24 -203.201.181.0/24 -203.201.182.0/24 -203.202.236.0/22 -203.205.128.0/17 -203.205.64.0/19 -203.207.112.0/20 -203.207.128.0/18 -203.207.192.0/21 -203.207.200.0/21 -203.207.208.0/20 -203.207.224.0/19 -203.207.64.0/20 -203.207.80.0/21 -203.207.88.0/22 -203.207.92.0/22 -203.207.96.0/20 -203.208.0.0/20 -203.208.16.0/22 -203.208.32.0/19 -203.209.224.0/19 -203.21.0.0/23 -203.21.10.0/24 -203.21.124.0/24 -203.21.136.0/23 -203.21.145.0/24 -203.21.18.0/24 -203.21.2.0/24 -203.21.206.0/24 -203.21.33.0/24 -203.21.34.0/24 -203.21.41.0/24 -203.21.44.0/24 -203.21.68.0/24 -203.21.8.0/24 -203.21.82.0/24 -203.21.96.0/22 -203.212.0.0/20 -203.212.80.0/20 -203.215.232.0/21 -203.217.164.0/22 -203.22.106.0/24 -203.22.122.0/23 -203.22.131.0/24 -203.22.163.0/24 -203.22.166.0/24 -203.22.170.0/24 -203.22.176.0/21 -203.22.194.0/24 -203.22.24.0/24 -203.22.242.0/23 -203.22.245.0/24 -203.22.246.0/24 -203.22.252.0/23 -203.22.28.0/23 -203.22.31.0/24 -203.22.68.0/24 -203.22.76.0/24 -203.22.78.0/24 -203.22.84.0/24 -203.22.87.0/24 -203.22.92.0/22 -203.22.99.0/24 -203.223.0.0/20 -203.223.16.0/21 -203.23.0.0/24 -203.23.107.0/24 -203.23.112.0/24 -203.23.130.0/24 -203.23.140.0/23 -203.23.172.0/24 -203.23.182.0/24 -203.23.186.0/23 -203.23.192.0/24 -203.23.197.0/24 -203.23.198.0/24 -203.23.204.0/22 -203.23.224.0/24 -203.23.226.0/23 -203.23.228.0/22 -203.23.249.0/24 -203.23.251.0/24 -203.23.47.0/24 -203.23.61.0/24 -203.23.62.0/23 -203.23.73.0/24 -203.23.85.0/24 -203.23.92.0/22 -203.23.98.0/24 -203.24.111.0/24 -203.24.112.0/24 -203.24.116.0/24 -203.24.122.0/23 -203.24.13.0/24 -203.24.145.0/24 -203.24.152.0/23 -203.24.157.0/24 -203.24.161.0/24 -203.24.167.0/24 -203.24.18.0/24 -203.24.186.0/23 -203.24.199.0/24 -203.24.202.0/24 -203.24.212.0/23 -203.24.217.0/24 -203.24.219.0/24 -203.24.244.0/24 -203.24.27.0/24 -203.24.43.0/24 -203.24.56.0/24 -203.24.58.0/24 -203.24.67.0/24 -203.24.74.0/24 -203.24.79.0/24 -203.24.80.0/23 -203.24.84.0/23 -203.24.86.0/24 -203.24.90.0/24 -203.25.100.0/24 -203.25.106.0/24 -203.25.131.0/24 -203.25.135.0/24 -203.25.138.0/24 -203.25.147.0/24 -203.25.153.0/24 -203.25.154.0/23 -203.25.164.0/24 -203.25.166.0/24 -203.25.174.0/23 -203.25.180.0/24 -203.25.182.0/24 -203.25.19.0/24 -203.25.191.0/24 -203.25.199.0/24 -203.25.20.0/23 -203.25.200.0/24 -203.25.202.0/23 -203.25.208.0/20 -203.25.229.0/24 -203.25.235.0/24 -203.25.236.0/24 -203.25.242.0/24 -203.25.46.0/24 -203.25.48.0/21 -203.25.64.0/23 -203.25.91.0/24 -203.25.99.0/24 -203.26.102.0/23 -203.26.115.0/24 -203.26.116.0/24 -203.26.12.0/24 -203.26.129.0/24 -203.26.143.0/24 -203.26.144.0/24 -203.26.148.0/23 -203.26.154.0/24 -203.26.158.0/23 -203.26.170.0/24 -203.26.173.0/24 -203.26.176.0/24 -203.26.185.0/24 -203.26.202.0/23 -203.26.210.0/24 -203.26.214.0/24 -203.26.222.0/24 -203.26.224.0/24 -203.26.228.0/24 -203.26.232.0/24 -203.26.34.0/24 -203.26.49.0/24 -203.26.50.0/24 -203.26.55.0/24 -203.26.56.0/23 -203.26.60.0/24 -203.26.65.0/24 -203.26.68.0/24 -203.26.76.0/24 -203.26.80.0/24 -203.26.84.0/24 -203.26.97.0/24 -203.27.0.0/24 -203.27.10.0/24 -203.27.102.0/24 -203.27.109.0/24 -203.27.117.0/24 -203.27.121.0/24 -203.27.122.0/23 -203.27.125.0/24 -203.27.15.0/24 -203.27.16.0/24 -203.27.20.0/24 -203.27.200.0/24 -203.27.202.0/24 -203.27.22.0/23 -203.27.233.0/24 -203.27.241.0/24 -203.27.250.0/24 -203.27.40.0/24 -203.27.45.0/24 -203.27.53.0/24 -203.27.65.0/24 -203.27.66.0/24 -203.27.81.0/24 -203.27.88.0/24 -203.28.10.0/24 -203.28.112.0/24 -203.28.12.0/24 -203.28.131.0/24 -203.28.136.0/24 -203.28.140.0/24 -203.28.145.0/24 -203.28.165.0/24 -203.28.169.0/24 -203.28.170.0/24 -203.28.178.0/23 -203.28.185.0/24 -203.28.187.0/24 -203.28.196.0/24 -203.28.226.0/23 -203.28.239.0/24 -203.28.33.0/24 -203.28.34.0/23 -203.28.43.0/24 -203.28.44.0/24 -203.28.54.0/24 -203.28.56.0/24 -203.28.73.0/24 -203.28.74.0/24 -203.28.76.0/24 -203.28.86.0/24 -203.28.88.0/24 -203.29.100.0/24 -203.29.103.0/24 -203.29.112.0/24 -203.29.120.0/22 -203.29.13.0/24 -203.29.14.0/24 -203.29.182.0/23 -203.29.187.0/24 -203.29.189.0/24 -203.29.190.0/24 -203.29.2.0/24 -203.29.205.0/24 -203.29.210.0/24 -203.29.217.0/24 -203.29.227.0/24 -203.29.231.0/24 -203.29.233.0/24 -203.29.234.0/24 -203.29.248.0/24 -203.29.254.0/23 -203.29.28.0/24 -203.29.46.0/24 -203.29.57.0/24 -203.29.61.0/24 -203.29.63.0/24 -203.29.69.0/24 -203.29.73.0/24 -203.29.8.0/23 -203.29.81.0/24 -203.29.90.0/24 -203.29.95.0/24 -203.3.105.0/24 -203.3.112.0/21 -203.3.120.0/24 -203.3.123.0/24 -203.3.135.0/24 -203.3.139.0/24 -203.3.143.0/24 -203.3.68.0/24 -203.3.72.0/23 -203.3.75.0/24 -203.3.80.0/21 -203.3.96.0/22 -203.30.111.0/24 -203.30.121.0/24 -203.30.123.0/24 -203.30.152.0/24 -203.30.156.0/24 -203.30.16.0/23 -203.30.162.0/24 -203.30.173.0/24 -203.30.175.0/24 -203.30.187.0/24 -203.30.194.0/24 -203.30.217.0/24 -203.30.220.0/24 -203.30.222.0/24 -203.30.232.0/23 -203.30.235.0/24 -203.30.240.0/23 -203.30.246.0/24 -203.30.25.0/24 -203.30.250.0/23 -203.30.27.0/24 -203.30.29.0/24 -203.30.66.0/24 -203.30.81.0/24 -203.30.87.0/24 -203.31.105.0/24 -203.31.106.0/24 -203.31.108.0/23 -203.31.124.0/24 -203.31.162.0/24 -203.31.174.0/24 -203.31.177.0/24 -203.31.181.0/24 -203.31.187.0/24 -203.31.189.0/24 -203.31.204.0/24 -203.31.220.0/24 -203.31.222.0/23 -203.31.225.0/24 -203.31.229.0/24 -203.31.248.0/23 -203.31.253.0/24 -203.31.45.0/24 -203.31.46.0/24 -203.31.49.0/24 -203.31.51.0/24 -203.31.54.0/23 -203.31.69.0/24 -203.31.72.0/24 -203.31.80.0/24 -203.31.85.0/24 -203.31.97.0/24 -203.32.102.0/24 -203.32.105.0/24 -203.32.130.0/24 -203.32.133.0/24 -203.32.140.0/24 -203.32.152.0/24 -203.32.186.0/23 -203.32.192.0/24 -203.32.196.0/24 -203.32.20.0/24 -203.32.203.0/24 -203.32.204.0/23 -203.32.212.0/24 -203.32.48.0/23 -203.32.56.0/24 -203.32.60.0/24 -203.32.62.0/24 -203.32.68.0/23 -203.32.76.0/24 -203.32.81.0/24 -203.32.84.0/23 -203.32.95.0/24 -203.33.100.0/24 -203.33.122.0/24 -203.33.129.0/24 -203.33.131.0/24 -203.33.145.0/24 -203.33.156.0/24 -203.33.158.0/23 -203.33.174.0/24 -203.33.185.0/24 -203.33.200.0/24 -203.33.202.0/23 -203.33.204.0/24 -203.33.206.0/23 -203.33.21.0/24 -203.33.214.0/23 -203.33.224.0/23 -203.33.226.0/24 -203.33.233.0/24 -203.33.243.0/24 -203.33.250.0/24 -203.33.26.0/24 -203.33.32.0/24 -203.33.4.0/24 -203.33.63.0/24 -203.33.64.0/24 -203.33.67.0/24 -203.33.68.0/24 -203.33.7.0/24 -203.33.73.0/24 -203.33.79.0/24 -203.33.8.0/21 -203.34.106.0/24 -203.34.113.0/24 -203.34.147.0/24 -203.34.150.0/24 -203.34.152.0/23 -203.34.161.0/24 -203.34.162.0/24 -203.34.187.0/24 -203.34.192.0/21 -203.34.204.0/22 -203.34.21.0/24 -203.34.232.0/24 -203.34.240.0/24 -203.34.242.0/24 -203.34.245.0/24 -203.34.251.0/24 -203.34.27.0/24 -203.34.39.0/24 -203.34.4.0/24 -203.34.48.0/23 -203.34.54.0/24 -203.34.56.0/23 -203.34.67.0/24 -203.34.69.0/24 -203.34.76.0/24 -203.34.92.0/24 -203.4.132.0/23 -203.4.134.0/24 -203.4.151.0/24 -203.4.152.0/22 -203.4.174.0/23 -203.4.180.0/24 -203.4.186.0/24 -203.4.205.0/24 -203.4.208.0/22 -203.4.227.0/24 -203.4.230.0/23 -203.5.11.0/24 -203.5.114.0/23 -203.5.118.0/24 -203.5.120.0/24 -203.5.172.0/24 -203.5.180.0/23 -203.5.182.0/24 -203.5.185.0/24 -203.5.186.0/24 -203.5.188.0/23 -203.5.190.0/24 -203.5.195.0/24 -203.5.21.0/24 -203.5.214.0/23 -203.5.218.0/23 -203.5.22.0/24 -203.5.4.0/23 -203.5.44.0/24 -203.5.46.0/23 -203.5.52.0/22 -203.5.56.0/23 -203.5.60.0/23 -203.5.7.0/24 -203.5.8.0/23 -203.55.10.0/24 -203.55.101.0/24 -203.55.109.0/24 -203.55.110.0/24 -203.55.116.0/23 -203.55.119.0/24 -203.55.128.0/23 -203.55.13.0/24 -203.55.146.0/23 -203.55.192.0/24 -203.55.196.0/24 -203.55.2.0/23 -203.55.218.0/23 -203.55.22.0/24 -203.55.221.0/24 -203.55.224.0/24 -203.55.30.0/24 -203.55.4.0/24 -203.55.93.0/24 -203.56.1.0/24 -203.56.110.0/24 -203.56.12.0/24 -203.56.121.0/24 -203.56.161.0/24 -203.56.169.0/24 -203.56.172.0/23 -203.56.175.0/24 -203.56.183.0/24 -203.56.185.0/24 -203.56.187.0/24 -203.56.192.0/24 -203.56.198.0/24 -203.56.201.0/24 -203.56.208.0/23 -203.56.210.0/24 -203.56.214.0/24 -203.56.216.0/24 -203.56.227.0/24 -203.56.228.0/24 -203.56.231.0/24 -203.56.232.0/24 -203.56.24.0/24 -203.56.240.0/24 -203.56.252.0/24 -203.56.254.0/24 -203.56.38.0/24 -203.56.4.0/24 -203.56.40.0/24 -203.56.46.0/24 -203.56.48.0/21 -203.56.68.0/23 -203.56.82.0/23 -203.56.84.0/23 -203.56.95.0/24 -203.57.101.0/24 -203.57.109.0/24 -203.57.12.0/23 -203.57.123.0/24 -203.57.157.0/24 -203.57.200.0/24 -203.57.202.0/24 -203.57.206.0/24 -203.57.222.0/24 -203.57.224.0/20 -203.57.246.0/23 -203.57.249.0/24 -203.57.253.0/24 -203.57.254.0/23 -203.57.28.0/24 -203.57.39.0/24 -203.57.46.0/24 -203.57.5.0/24 -203.57.58.0/24 -203.57.6.0/24 -203.57.61.0/24 -203.57.66.0/24 -203.57.69.0/24 -203.57.70.0/23 -203.57.73.0/24 -203.57.90.0/24 -203.6.131.0/24 -203.6.136.0/24 -203.6.138.0/23 -203.6.142.0/24 -203.6.150.0/23 -203.6.157.0/24 -203.6.159.0/24 -203.6.224.0/20 -203.6.248.0/23 -203.62.131.0/24 -203.62.139.0/24 -203.62.161.0/24 -203.62.197.0/24 -203.62.2.0/24 -203.62.228.0/22 -203.62.234.0/24 -203.62.246.0/24 -203.7.129.0/24 -203.7.138.0/23 -203.7.147.0/24 -203.7.150.0/23 -203.7.158.0/24 -203.7.192.0/23 -203.7.200.0/24 -203.76.160.0/22 -203.76.168.0/22 -203.76.208.0/22 -203.76.212.0/22 -203.76.216.0/22 -203.76.240.0/22 -203.76.244.0/22 -203.77.180.0/22 -203.78.156.0/22 -203.78.48.0/20 -203.79.0.0/20 -203.79.32.0/20 -203.8.0.0/24 -203.8.110.0/23 -203.8.115.0/24 -203.8.166.0/23 -203.8.169.0/24 -203.8.173.0/24 -203.8.184.0/24 -203.8.186.0/23 -203.8.190.0/23 -203.8.192.0/24 -203.8.197.0/24 -203.8.198.0/23 -203.8.203.0/24 -203.8.209.0/24 -203.8.210.0/23 -203.8.212.0/22 -203.8.217.0/24 -203.8.220.0/24 -203.8.23.0/24 -203.8.70.0/24 -203.8.8.0/24 -203.8.82.0/24 -203.8.86.0/23 -203.8.91.0/24 -203.80.129.0/24 -203.80.132.0/22 -203.80.136.0/21 -203.80.144.0/20 -203.80.32.0/20 -203.80.4.0/23 -203.80.57.0/24 -203.81.0.0/21 -203.81.16.0/20 -203.81.244.0/22 -203.82.0.0/23 -203.82.112.0/22 -203.82.116.0/22 -203.82.120.0/22 -203.82.124.0/22 -203.82.16.0/21 -203.82.224.0/22 -203.82.228.0/22 -203.82.232.0/22 -203.82.236.0/22 -203.83.0.0/22 -203.83.12.0/22 -203.83.224.0/20 -203.83.56.0/21 -203.83.8.0/22 -203.86.0.0/19 -203.86.250.0/24 -203.86.254.0/23 -203.86.32.0/19 -203.86.64.0/20 -203.86.80.0/20 -203.86.96.0/19 -203.88.192.0/19 -203.88.32.0/19 -203.89.0.0/22 -203.89.100.0/22 -203.89.133.0/24 -203.89.136.0/22 -203.89.144.0/24 -203.89.8.0/21 -203.9.100.0/23 -203.9.108.0/24 -203.9.158.0/24 -203.9.32.0/24 -203.9.36.0/23 -203.9.57.0/24 -203.9.63.0/24 -203.9.65.0/24 -203.9.70.0/23 -203.9.72.0/24 -203.9.75.0/24 -203.9.76.0/23 -203.9.96.0/22 -203.90.0.0/22 -203.90.12.0/22 -203.90.128.0/19 -203.90.160.0/19 -203.90.192.0/19 -203.90.8.0/22 -203.91.120.0/21 -203.91.32.0/19 -203.91.96.0/20 -203.92.0.0/22 -203.92.160.0/19 -203.92.6.0/24 -203.93.0.0/22 -203.93.10.0/23 -203.93.12.0/22 -203.93.128.0/21 -203.93.136.0/22 -203.93.140.0/24 -203.93.141.0/24 -203.93.142.0/23 -203.93.144.0/20 -203.93.16.0/20 -203.93.160.0/19 -203.93.192.0/18 -203.93.32.0/19 -203.93.4.0/22 -203.93.64.0/18 -203.93.8.0/24 -203.93.9.0/24 -203.94.0.0/22 -203.94.16.0/20 -203.94.4.0/22 -203.94.8.0/21 -203.95.0.0/21 -203.95.112.0/20 -203.95.128.0/18 -203.95.200.0/22 -203.95.204.0/22 -203.95.208.0/22 -203.95.224.0/19 -203.95.96.0/20 -203.99.16.0/20 -203.99.8.0/21 -203.99.80.0/20 -204.52.191.0/24 -210.12.0.0/18 -210.12.128.0/18 -210.12.192.0/18 -210.12.64.0/18 -210.13.0.0/18 -210.13.128.0/17 -210.13.64.0/18 -210.14.112.0/20 -210.14.128.0/19 -210.14.160.0/19 -210.14.192.0/19 -210.14.224.0/19 -210.14.64.0/19 -210.15.0.0/19 -210.15.128.0/18 -210.15.32.0/19 -210.15.64.0/19 -210.15.96.0/19 -210.16.104.0/22 -210.16.128.0/18 -210.185.192.0/18 -210.192.96.0/19 -210.2.0.0/20 -210.2.16.0/20 -210.21.0.0/17 -210.21.128.0/17 -210.22.0.0/16 -210.23.32.0/19 -210.25.0.0/16 -210.26.0.0/15 -210.28.0.0/14 -210.32.0.0/14 -210.36.0.0/14 -210.40.0.0/13 -210.5.0.0/19 -210.5.128.0/20 -210.5.144.0/20 -210.5.56.0/21 -210.51.0.0/16 -210.52.0.0/18 -210.52.128.0/17 -210.52.64.0/18 -210.53.0.0/17 -210.53.128.0/17 -210.56.192.0/19 -210.7.56.0/22 -210.7.60.0/22 -210.72.0.0/17 -210.72.128.0/19 -210.72.160.0/19 -210.72.192.0/18 -210.73.0.0/19 -210.73.128.0/17 -210.73.32.0/19 -210.73.64.0/18 -210.74.0.0/19 -210.74.128.0/19 -210.74.160.0/19 -210.74.192.0/18 -210.74.32.0/19 -210.74.64.0/19 -210.74.96.0/19 -210.75.0.0/16 -210.76.0.0/19 -210.76.128.0/17 -210.76.32.0/19 -210.76.64.0/18 -210.77.0.0/16 -210.78.0.0/19 -210.78.128.0/19 -210.78.160.0/19 -210.78.192.0/18 -210.78.32.0/19 -210.78.64.0/18 -210.79.224.0/19 -210.79.64.0/18 -210.82.0.0/15 -210.87.128.0/20 -210.87.144.0/20 -210.87.160.0/19 -211.100.0.0/16 -211.101.0.0/18 -211.101.128.0/17 -211.101.64.0/18 -211.102.0.0/16 -211.103.0.0/17 -211.103.128.0/17 -211.136.0.0/14 -211.140.0.0/15 -211.142.0.0/17 -211.142.128.0/17 -211.143.0.0/16 -211.144.0.0/15 -211.146.0.0/16 -211.147.0.0/16 -211.148.0.0/14 -211.152.0.0/15 -211.154.0.0/16 -211.155.0.0/18 -211.155.128.0/17 -211.155.64.0/19 -211.155.96.0/19 -211.156.0.0/14 -211.160.0.0/14 -211.164.0.0/14 -211.64.0.0/14 -211.68.0.0/15 -211.70.0.0/15 -211.80.0.0/16 -211.81.0.0/16 -211.82.0.0/16 -211.83.0.0/16 -211.84.0.0/15 -211.86.0.0/15 -211.88.0.0/16 -211.89.0.0/16 -211.90.0.0/15 -211.92.0.0/15 -211.94.0.0/15 -211.96.0.0/15 -211.98.0.0/16 -211.99.0.0/18 -211.99.128.0/17 -211.99.64.0/19 -211.99.96.0/19 -212.129.128.0/17 -212.64.0.0/17 -218.0.0.0/16 -218.1.0.0/16 -218.10.0.0/16 -218.100.128.0/17 -218.100.88.0/21 -218.100.96.0/19 -218.104.0.0/17 -218.104.128.0/19 -218.104.160.0/19 -218.104.192.0/21 -218.104.200.0/21 -218.104.208.0/20 -218.104.224.0/19 -218.105.0.0/16 -218.106.0.0/15 -218.108.0.0/16 -218.109.0.0/16 -218.11.0.0/16 -218.12.0.0/16 -218.13.0.0/16 -218.14.0.0/15 -218.16.0.0/14 -218.185.192.0/19 -218.185.240.0/21 -218.192.0.0/16 -218.193.0.0/16 -218.194.0.0/16 -218.195.0.0/16 -218.196.0.0/14 -218.2.0.0/15 -218.20.0.0/16 -218.200.0.0/14 -218.204.0.0/15 -218.206.0.0/15 -218.21.0.0/17 -218.21.128.0/17 -218.22.0.0/15 -218.24.0.0/15 -218.240.0.0/14 -218.244.0.0/15 -218.246.0.0/15 -218.249.0.0/16 -218.26.0.0/16 -218.27.0.0/16 -218.28.0.0/15 -218.30.0.0/15 -218.4.0.0/15 -218.56.0.0/14 -218.6.0.0/16 -218.60.0.0/15 -218.62.0.0/17 -218.62.128.0/17 -218.63.0.0/16 -218.64.0.0/15 -218.66.0.0/16 -218.67.0.0/17 -218.67.128.0/17 -218.68.0.0/15 -218.7.0.0/16 -218.70.0.0/15 -218.72.0.0/14 -218.76.0.0/15 -218.78.0.0/15 -218.8.0.0/15 -218.80.0.0/14 -218.84.0.0/14 -218.88.0.0/13 -218.96.0.0/15 -218.98.0.0/17 -218.98.128.0/18 -218.98.192.0/19 -218.98.224.0/19 -218.99.0.0/16 -219.128.0.0/12 -219.144.0.0/14 -219.148.0.0/16 -219.149.0.0/17 -219.149.128.0/18 -219.149.192.0/18 -219.150.0.0/19 -219.150.112.0/20 -219.150.128.0/17 -219.150.32.0/19 -219.150.64.0/19 -219.150.96.0/20 -219.151.0.0/19 -219.151.128.0/17 -219.151.32.0/19 -219.151.64.0/18 -219.152.0.0/15 -219.154.0.0/15 -219.156.0.0/15 -219.158.0.0/17 -219.158.128.0/17 -219.159.0.0/18 -219.159.128.0/17 -219.159.64.0/18 -219.216.0.0/15 -219.218.0.0/15 -219.220.0.0/16 -219.221.0.0/16 -219.222.0.0/15 -219.224.0.0/15 -219.226.0.0/16 -219.227.0.0/16 -219.228.0.0/15 -219.230.0.0/15 -219.232.0.0/14 -219.236.0.0/15 -219.238.0.0/15 -219.242.0.0/15 -219.244.0.0/14 -219.72.0.0/16 -219.82.0.0/16 -219.83.128.0/17 -219.90.68.0/22 -219.90.72.0/22 -219.90.76.0/22 -220.101.192.0/18 -220.112.0.0/14 -220.152.128.0/17 -220.154.0.0/15 -220.158.240.0/22 -220.160.0.0/11 -220.192.0.0/15 -220.194.0.0/15 -220.196.0.0/14 -220.200.0.0/13 -220.231.0.0/18 -220.231.128.0/17 -220.232.64.0/18 -220.234.0.0/16 -220.242.0.0/15 -220.247.136.0/21 -220.248.0.0/14 -220.252.0.0/16 -221.0.0.0/15 -221.10.0.0/16 -221.11.0.0/17 -221.11.128.0/18 -221.11.192.0/19 -221.11.224.0/19 -221.12.0.0/17 -221.12.128.0/18 -221.122.0.0/15 -221.128.128.0/17 -221.129.0.0/16 -221.13.0.0/18 -221.13.128.0/17 -221.13.64.0/19 -221.13.96.0/19 -221.130.0.0/15 -221.133.224.0/19 -221.136.0.0/16 -221.137.0.0/16 -221.14.0.0/15 -221.172.0.0/14 -221.176.0.0/13 -221.192.0.0/15 -221.194.0.0/16 -221.195.0.0/16 -221.196.0.0/15 -221.198.0.0/16 -221.199.0.0/19 -221.199.128.0/18 -221.199.192.0/20 -221.199.224.0/19 -221.199.32.0/20 -221.199.48.0/20 -221.199.64.0/18 -221.2.0.0/16 -221.200.0.0/14 -221.204.0.0/15 -221.206.0.0/16 -221.207.0.0/18 -221.207.128.0/17 -221.207.64.0/18 -221.208.0.0/14 -221.212.0.0/16 -221.213.0.0/16 -221.214.0.0/15 -221.216.0.0/13 -221.224.0.0/13 -221.232.0.0/14 -221.236.0.0/15 -221.238.0.0/16 -221.239.0.0/17 -221.239.128.0/17 -221.3.0.0/17 -221.3.128.0/17 -221.4.0.0/16 -221.5.0.0/17 -221.5.128.0/17 -221.6.0.0/16 -221.7.0.0/19 -221.7.128.0/17 -221.7.32.0/19 -221.7.64.0/19 -221.7.96.0/19 -221.8.0.0/15 -222.125.0.0/16 -222.126.128.0/17 -222.128.0.0/14 -222.132.0.0/14 -222.136.0.0/13 -222.16.0.0/15 -222.160.0.0/15 -222.162.0.0/16 -222.163.0.0/19 -222.163.128.0/17 -222.163.32.0/19 -222.163.64.0/18 -222.168.0.0/15 -222.170.0.0/15 -222.172.0.0/17 -222.172.128.0/17 -222.173.0.0/16 -222.174.0.0/15 -222.176.0.0/13 -222.18.0.0/15 -222.184.0.0/13 -222.192.0.0/14 -222.196.0.0/15 -222.198.0.0/16 -222.199.0.0/16 -222.20.0.0/15 -222.200.0.0/14 -222.204.0.0/15 -222.206.0.0/15 -222.208.0.0/13 -222.216.0.0/15 -222.218.0.0/16 -222.219.0.0/16 -222.22.0.0/16 -222.220.0.0/15 -222.222.0.0/15 -222.23.0.0/16 -222.24.0.0/15 -222.240.0.0/13 -222.248.0.0/16 -222.249.0.0/17 -222.249.128.0/19 -222.249.160.0/20 -222.249.176.0/20 -222.249.192.0/18 -222.26.0.0/15 -222.28.0.0/14 -222.32.0.0/11 -222.64.0.0/13 -222.72.0.0/15 -222.74.0.0/16 -222.75.0.0/16 -222.76.0.0/14 -222.80.0.0/15 -222.82.0.0/16 -222.83.0.0/17 -222.83.128.0/17 -222.84.0.0/16 -222.85.0.0/17 -222.85.128.0/17 -222.86.0.0/15 -222.88.0.0/15 -222.90.0.0/15 -222.92.0.0/14 -223.0.0.0/15 -223.112.0.0/14 -223.116.0.0/15 -223.120.128.0/17 -223.121.128.0/17 -223.122.128.0/17 -223.123.0.0/16 -223.124.0.0/14 -223.128.0.0/15 -223.144.0.0/12 -223.160.0.0/14 -223.166.0.0/15 -223.192.0.0/15 -223.198.0.0/15 -223.2.0.0/15 -223.20.0.0/15 -223.201.0.0/16 -223.202.0.0/15 -223.208.0.0/14 -223.212.0.0/15 -223.214.0.0/15 -223.220.0.0/15 -223.223.176.0/20 -223.223.192.0/20 -223.240.0.0/13 -223.248.0.0/14 -223.252.128.0/17 -223.254.0.0/16 -223.255.0.0/17 -223.255.236.0/22 -223.255.252.0/23 -223.27.184.0/22 -223.29.208.0/22 -223.29.252.0/22 -223.4.0.0/14 -223.64.0.0/11 -223.8.0.0/13 -223.96.0.0/12 -27.0.128.0/22 -27.0.132.0/22 -27.0.160.0/22 -27.0.164.0/22 -27.0.188.0/22 -27.0.204.0/22 -27.0.208.0/22 -27.0.212.0/22 -27.103.0.0/16 -27.106.128.0/18 -27.106.204.0/22 -27.109.124.0/22 -27.109.32.0/19 -27.112.0.0/18 -27.112.112.0/22 -27.112.116.0/22 -27.112.80.0/20 -27.113.128.0/18 -27.115.0.0/17 -27.116.44.0/22 -27.121.120.0/21 -27.121.72.0/21 -27.128.0.0/15 -27.131.220.0/22 -27.144.0.0/16 -27.148.0.0/14 -27.152.0.0/13 -27.16.0.0/12 -27.184.0.0/13 -27.192.0.0/11 -27.224.0.0/14 -27.34.232.0/21 -27.36.0.0/14 -27.40.0.0/13 -27.50.128.0/17 -27.50.40.0/21 -27.54.152.0/21 -27.54.192.0/18 -27.54.72.0/21 -27.8.0.0/13 -27.98.208.0/20 -27.98.224.0/19 -27.99.128.0/17 -36.0.0.0/22 -36.0.128.0/17 -36.0.16.0/20 -36.0.32.0/19 -36.0.64.0/18 -36.0.8.0/21 -36.1.0.0/16 -36.128.0.0/10 -36.16.0.0/12 -36.192.0.0/11 -36.248.0.0/14 -36.254.0.0/16 -36.255.116.0/22 -36.255.128.0/22 -36.255.164.0/22 -36.255.172.0/22 -36.255.176.0/22 -36.32.0.0/14 -36.36.0.0/16 -36.37.0.0/19 -36.37.36.0/23 -36.37.39.0/24 -36.37.40.0/21 -36.37.48.0/20 -36.4.0.0/14 -36.40.0.0/13 -36.48.0.0/15 -36.51.0.0/16 -36.56.0.0/13 -36.96.0.0/11 -39.0.0.0/24 -39.0.128.0/17 -39.0.16.0/20 -39.0.2.0/23 -39.0.32.0/19 -39.0.4.0/22 -39.0.64.0/18 -39.0.8.0/21 -39.104.0.0/14 -39.108.0.0/16 -39.128.0.0/10 -39.64.0.0/11 -39.96.0.0/13 -40.125.128.0/17 -40.126.64.0/18 -40.72.0.0/15 -42.0.0.0/22 -42.0.128.0/17 -42.0.16.0/21 -42.0.24.0/22 -42.0.32.0/19 -42.0.8.0/21 -42.1.0.0/19 -42.1.128.0/17 -42.1.32.0/20 -42.1.48.0/21 -42.1.56.0/22 -42.100.0.0/14 -42.120.0.0/15 -42.122.0.0/16 -42.123.0.0/19 -42.123.128.0/17 -42.123.36.0/22 -42.123.40.0/21 -42.123.48.0/20 -42.123.64.0/18 -42.128.0.0/12 -42.156.0.0/19 -42.156.128.0/17 -42.156.36.0/22 -42.156.40.0/21 -42.156.48.0/20 -42.156.64.0/18 -42.157.0.0/16 -42.158.0.0/16 -42.159.0.0/16 -42.160.0.0/12 -42.176.0.0/13 -42.184.0.0/15 -42.186.0.0/16 -42.187.0.0/18 -42.187.112.0/21 -42.187.120.0/22 -42.187.128.0/17 -42.187.64.0/19 -42.187.96.0/20 -42.192.0.0/15 -42.194.0.0/21 -42.194.12.0/22 -42.194.128.0/17 -42.194.16.0/20 -42.194.32.0/19 -42.194.64.0/18 -42.194.8.0/22 -42.195.0.0/16 -42.196.0.0/14 -42.201.0.0/17 -42.202.0.0/15 -42.204.0.0/14 -42.208.0.0/12 -42.224.0.0/12 -42.240.0.0/17 -42.240.128.0/17 -42.242.0.0/15 -42.244.0.0/14 -42.248.0.0/13 -42.4.0.0/14 -42.48.0.0/15 -42.50.0.0/16 -42.51.0.0/16 -42.52.0.0/14 -42.56.0.0/14 -42.62.0.0/17 -42.62.128.0/19 -42.62.160.0/20 -42.62.180.0/22 -42.62.184.0/21 -42.63.0.0/16 -42.80.0.0/15 -42.83.128.0/17 -42.83.64.0/20 -42.83.80.0/22 -42.83.88.0/21 -42.83.96.0/19 -42.84.0.0/14 -42.88.0.0/13 -42.96.108.0/22 -42.96.112.0/20 -42.96.128.0/17 -42.96.64.0/19 -42.96.96.0/21 -42.97.0.0/16 -42.99.0.0/18 -42.99.112.0/22 -42.99.120.0/21 -42.99.64.0/19 -42.99.96.0/20 -43.136.0.0/13 -43.144.0.0/13 -43.160.0.0/11 -43.195.0.0/16 -43.196.0.0/15 -43.224.100.0/22 -43.224.12.0/22 -43.224.144.0/22 -43.224.160.0/22 -43.224.176.0/22 -43.224.184.0/22 -43.224.200.0/22 -43.224.204.0/22 -43.224.208.0/22 -43.224.212.0/22 -43.224.216.0/22 -43.224.24.0/22 -43.224.240.0/22 -43.224.44.0/22 -43.224.52.0/22 -43.224.56.0/22 -43.224.64.0/22 -43.224.68.0/22 -43.224.72.0/22 -43.224.80.0/22 -43.225.120.0/22 -43.225.124.0/22 -43.225.172.0/22 -43.225.180.0/22 -43.225.208.0/22 -43.225.216.0/22 -43.225.220.0/22 -43.225.224.0/22 -43.225.228.0/22 -43.225.232.0/22 -43.225.236.0/22 -43.225.240.0/22 -43.225.244.0/22 -43.225.252.0/22 -43.225.76.0/22 -43.225.84.0/22 -43.226.100.0/22 -43.226.104.0/22 -43.226.108.0/22 -43.226.112.0/22 -43.226.116.0/22 -43.226.120.0/22 -43.226.128.0/22 -43.226.132.0/22 -43.226.136.0/22 -43.226.140.0/22 -43.226.144.0/22 -43.226.148.0/22 -43.226.152.0/22 -43.226.156.0/22 -43.226.160.0/22 -43.226.164.0/22 -43.226.168.0/22 -43.226.172.0/22 -43.226.176.0/22 -43.226.180.0/22 -43.226.184.0/22 -43.226.188.0/22 -43.226.192.0/22 -43.226.196.0/22 -43.226.200.0/22 -43.226.204.0/22 -43.226.208.0/22 -43.226.212.0/22 -43.226.236.0/22 -43.226.240.0/22 -43.226.244.0/22 -43.226.248.0/22 -43.226.252.0/22 -43.226.32.0/22 -43.226.36.0/22 -43.226.40.0/22 -43.226.44.0/22 -43.226.48.0/22 -43.226.52.0/22 -43.226.56.0/22 -43.226.60.0/22 -43.226.64.0/22 -43.226.68.0/22 -43.226.72.0/22 -43.226.76.0/22 -43.226.80.0/22 -43.226.84.0/22 -43.226.88.0/22 -43.226.92.0/22 -43.226.96.0/22 -43.227.0.0/22 -43.227.100.0/22 -43.227.104.0/22 -43.227.136.0/22 -43.227.140.0/22 -43.227.144.0/22 -43.227.152.0/22 -43.227.156.0/22 -43.227.160.0/22 -43.227.164.0/22 -43.227.168.0/22 -43.227.172.0/22 -43.227.176.0/22 -43.227.180.0/22 -43.227.188.0/22 -43.227.192.0/22 -43.227.196.0/22 -43.227.200.0/22 -43.227.204.0/22 -43.227.208.0/22 -43.227.212.0/22 -43.227.216.0/22 -43.227.220.0/22 -43.227.232.0/22 -43.227.248.0/22 -43.227.252.0/22 -43.227.32.0/22 -43.227.36.0/22 -43.227.4.0/22 -43.227.40.0/22 -43.227.44.0/22 -43.227.48.0/22 -43.227.52.0/22 -43.227.56.0/22 -43.227.60.0/22 -43.227.64.0/22 -43.227.68.0/22 -43.227.72.0/22 -43.227.76.0/22 -43.227.8.0/22 -43.227.80.0/22 -43.227.84.0/22 -43.227.88.0/22 -43.227.92.0/22 -43.227.96.0/22 -43.228.0.0/22 -43.228.100.0/22 -43.228.116.0/22 -43.228.12.0/22 -43.228.120.0/22 -43.228.132.0/22 -43.228.136.0/22 -43.228.148.0/22 -43.228.152.0/22 -43.228.16.0/22 -43.228.188.0/22 -43.228.20.0/22 -43.228.204.0/22 -43.228.24.0/22 -43.228.240.0/22 -43.228.28.0/22 -43.228.32.0/22 -43.228.36.0/22 -43.228.4.0/22 -43.228.40.0/22 -43.228.44.0/22 -43.228.48.0/22 -43.228.52.0/22 -43.228.56.0/22 -43.228.60.0/22 -43.228.64.0/22 -43.228.68.0/22 -43.228.76.0/22 -43.228.8.0/22 -43.229.120.0/22 -43.229.136.0/22 -43.229.140.0/22 -43.229.144.0/22 -43.229.168.0/22 -43.229.172.0/22 -43.229.176.0/22 -43.229.180.0/22 -43.229.184.0/22 -43.229.188.0/22 -43.229.192.0/22 -43.229.196.0/22 -43.229.216.0/22 -43.229.220.0/22 -43.229.232.0/22 -43.229.236.0/22 -43.229.40.0/22 -43.229.48.0/22 -43.229.56.0/22 -43.229.96.0/22 -43.230.124.0/22 -43.230.136.0/22 -43.230.20.0/22 -43.230.220.0/22 -43.230.224.0/22 -43.230.228.0/22 -43.230.232.0/22 -43.230.236.0/22 -43.230.240.0/22 -43.230.244.0/22 -43.230.248.0/22 -43.230.252.0/22 -43.230.32.0/22 -43.230.68.0/22 -43.230.72.0/22 -43.230.84.0/22 -43.231.100.0/22 -43.231.104.0/22 -43.231.108.0/22 -43.231.136.0/22 -43.231.140.0/22 -43.231.144.0/22 -43.231.148.0/22 -43.231.152.0/22 -43.231.156.0/22 -43.231.160.0/22 -43.231.164.0/22 -43.231.168.0/22 -43.231.172.0/22 -43.231.176.0/22 -43.231.180.0/22 -43.231.32.0/22 -43.231.36.0/22 -43.231.40.0/22 -43.231.44.0/22 -43.231.80.0/22 -43.231.84.0/22 -43.231.88.0/22 -43.231.92.0/22 -43.231.96.0/22 -43.236.0.0/22 -43.236.100.0/22 -43.236.104.0/22 -43.236.108.0/22 -43.236.112.0/22 -43.236.116.0/22 -43.236.12.0/22 -43.236.120.0/22 -43.236.124.0/22 -43.236.128.0/22 -43.236.132.0/22 -43.236.136.0/22 -43.236.140.0/22 -43.236.144.0/22 -43.236.148.0/22 -43.236.152.0/22 -43.236.156.0/22 -43.236.16.0/22 -43.236.160.0/22 -43.236.164.0/22 -43.236.168.0/22 -43.236.172.0/22 -43.236.176.0/22 -43.236.180.0/22 -43.236.184.0/22 -43.236.188.0/22 -43.236.192.0/22 -43.236.196.0/22 -43.236.20.0/22 -43.236.200.0/22 -43.236.204.0/22 -43.236.208.0/22 -43.236.212.0/22 -43.236.216.0/22 -43.236.220.0/22 -43.236.224.0/22 -43.236.228.0/22 -43.236.232.0/22 -43.236.236.0/22 -43.236.24.0/22 -43.236.240.0/22 -43.236.244.0/22 -43.236.248.0/22 -43.236.252.0/22 -43.236.28.0/22 -43.236.32.0/22 -43.236.36.0/22 -43.236.4.0/22 -43.236.40.0/22 -43.236.44.0/22 -43.236.48.0/22 -43.236.52.0/22 -43.236.56.0/22 -43.236.60.0/22 -43.236.64.0/22 -43.236.68.0/22 -43.236.72.0/22 -43.236.76.0/22 -43.236.8.0/22 -43.236.80.0/22 -43.236.84.0/22 -43.236.88.0/22 -43.236.92.0/22 -43.236.96.0/22 -43.237.0.0/22 -43.237.100.0/22 -43.237.104.0/22 -43.237.108.0/22 -43.237.112.0/22 -43.237.116.0/22 -43.237.12.0/22 -43.237.120.0/22 -43.237.124.0/22 -43.237.128.0/22 -43.237.132.0/22 -43.237.136.0/22 -43.237.140.0/22 -43.237.144.0/22 -43.237.148.0/22 -43.237.152.0/22 -43.237.156.0/22 -43.237.16.0/22 -43.237.160.0/22 -43.237.164.0/22 -43.237.168.0/22 -43.237.172.0/22 -43.237.176.0/22 -43.237.180.0/22 -43.237.184.0/22 -43.237.188.0/22 -43.237.192.0/22 -43.237.20.0/22 -43.237.200.0/22 -43.237.204.0/22 -43.237.208.0/22 -43.237.212.0/22 -43.237.216.0/22 -43.237.220.0/22 -43.237.224.0/22 -43.237.228.0/22 -43.237.232.0/22 -43.237.236.0/22 -43.237.24.0/22 -43.237.240.0/22 -43.237.244.0/22 -43.237.248.0/22 -43.237.252.0/22 -43.237.28.0/22 -43.237.32.0/22 -43.237.36.0/22 -43.237.4.0/22 -43.237.40.0/22 -43.237.44.0/22 -43.237.48.0/22 -43.237.52.0/22 -43.237.56.0/22 -43.237.60.0/22 -43.237.64.0/22 -43.237.68.0/22 -43.237.72.0/22 -43.237.76.0/22 -43.237.8.0/22 -43.237.80.0/22 -43.237.84.0/22 -43.237.88.0/22 -43.237.92.0/22 -43.237.96.0/22 -43.238.0.0/22 -43.238.100.0/22 -43.238.104.0/22 -43.238.108.0/22 -43.238.112.0/22 -43.238.116.0/22 -43.238.12.0/22 -43.238.120.0/22 -43.238.124.0/22 -43.238.128.0/22 -43.238.132.0/22 -43.238.136.0/22 -43.238.140.0/22 -43.238.144.0/22 -43.238.148.0/22 -43.238.152.0/22 -43.238.156.0/22 -43.238.16.0/22 -43.238.160.0/22 -43.238.164.0/22 -43.238.168.0/22 -43.238.172.0/22 -43.238.176.0/22 -43.238.180.0/22 -43.238.184.0/22 -43.238.188.0/22 -43.238.192.0/22 -43.238.196.0/22 -43.238.20.0/22 -43.238.200.0/22 -43.238.204.0/22 -43.238.208.0/22 -43.238.212.0/22 -43.238.216.0/22 -43.238.220.0/22 -43.238.224.0/22 -43.238.228.0/22 -43.238.232.0/22 -43.238.236.0/22 -43.238.24.0/22 -43.238.240.0/22 -43.238.244.0/22 -43.238.248.0/22 -43.238.252.0/22 -43.238.28.0/22 -43.238.32.0/22 -43.238.36.0/22 -43.238.4.0/22 -43.238.40.0/22 -43.238.44.0/22 -43.238.48.0/22 -43.238.52.0/22 -43.238.56.0/22 -43.238.60.0/22 -43.238.64.0/22 -43.238.68.0/22 -43.238.72.0/22 -43.238.76.0/22 -43.238.8.0/22 -43.238.80.0/22 -43.238.84.0/22 -43.238.88.0/22 -43.238.92.0/22 -43.238.96.0/22 -43.239.0.0/22 -43.239.116.0/22 -43.239.120.0/22 -43.239.16.0/22 -43.239.172.0/22 -43.239.176.0/22 -43.239.20.0/22 -43.239.24.0/22 -43.239.28.0/22 -43.239.32.0/22 -43.239.36.0/22 -43.239.4.0/22 -43.239.40.0/22 -43.239.44.0/22 -43.239.48.0/22 -43.239.8.0/21 -43.240.0.0/22 -43.240.124.0/22 -43.240.128.0/22 -43.240.132.0/22 -43.240.136.0/22 -43.240.144.0/22 -43.240.156.0/22 -43.240.160.0/22 -43.240.164.0/22 -43.240.168.0/22 -43.240.172.0/22 -43.240.176.0/22 -43.240.180.0/22 -43.240.184.0/22 -43.240.188.0/22 -43.240.192.0/22 -43.240.196.0/22 -43.240.200.0/22 -43.240.204.0/22 -43.240.208.0/22 -43.240.212.0/22 -43.240.216.0/22 -43.240.220.0/22 -43.240.240.0/22 -43.240.244.0/22 -43.240.248.0/22 -43.240.252.0/22 -43.240.56.0/22 -43.240.60.0/22 -43.240.68.0/22 -43.240.72.0/22 -43.240.76.0/22 -43.240.84.0/22 -43.241.0.0/22 -43.241.112.0/22 -43.241.12.0/22 -43.241.16.0/22 -43.241.168.0/22 -43.241.172.0/22 -43.241.176.0/22 -43.241.180.0/22 -43.241.184.0/22 -43.241.20.0/22 -43.241.208.0/22 -43.241.212.0/22 -43.241.216.0/22 -43.241.220.0/22 -43.241.224.0/22 -43.241.228.0/22 -43.241.232.0/22 -43.241.236.0/22 -43.241.240.0/22 -43.241.248.0/22 -43.241.252.0/22 -43.241.4.0/22 -43.241.48.0/22 -43.241.76.0/22 -43.241.8.0/22 -43.241.80.0/22 -43.241.84.0/22 -43.241.88.0/22 -43.241.92.0/22 -43.242.12.0/22 -43.242.144.0/22 -43.242.148.0/22 -43.242.152.0/22 -43.242.156.0/22 -43.242.16.0/22 -43.242.160.0/22 -43.242.164.0/22 -43.242.168.0/22 -43.242.180.0/22 -43.242.188.0/22 -43.242.192.0/22 -43.242.196.0/22 -43.242.20.0/22 -43.242.204.0/22 -43.242.216.0/22 -43.242.220.0/22 -43.242.24.0/22 -43.242.252.0/22 -43.242.28.0/22 -43.242.44.0/22 -43.242.48.0/22 -43.242.52.0/22 -43.242.56.0/22 -43.242.60.0/22 -43.242.64.0/22 -43.242.72.0/22 -43.242.76.0/22 -43.242.8.0/22 -43.242.80.0/22 -43.242.84.0/22 -43.242.88.0/22 -43.242.92.0/22 -43.242.96.0/22 -43.243.12.0/22 -43.243.128.0/22 -43.243.136.0/22 -43.243.144.0/22 -43.243.148.0/22 -43.243.156.0/22 -43.243.16.0/22 -43.243.180.0/22 -43.243.228.0/22 -43.243.232.0/22 -43.243.24.0/22 -43.243.244.0/22 -43.243.4.0/22 -43.243.8.0/22 -43.243.88.0/22 -43.246.0.0/22 -43.246.112.0/22 -43.246.12.0/22 -43.246.16.0/22 -43.246.20.0/22 -43.246.212.0/22 -43.246.228.0/22 -43.246.24.0/22 -43.246.28.0/22 -43.246.32.0/22 -43.246.36.0/22 -43.246.4.0/22 -43.246.40.0/22 -43.246.44.0/22 -43.246.48.0/22 -43.246.52.0/22 -43.246.56.0/22 -43.246.60.0/22 -43.246.64.0/22 -43.246.68.0/22 -43.246.72.0/22 -43.246.76.0/22 -43.246.8.0/22 -43.246.80.0/22 -43.246.84.0/22 -43.246.88.0/22 -43.246.92.0/22 -43.246.96.0/22 -43.247.100.0/22 -43.247.108.0/22 -43.247.112.0/22 -43.247.148.0/22 -43.247.152.0/22 -43.247.176.0/22 -43.247.180.0/22 -43.247.184.0/22 -43.247.188.0/22 -43.247.196.0/22 -43.247.200.0/22 -43.247.204.0/22 -43.247.208.0/22 -43.247.212.0/22 -43.247.216.0/22 -43.247.220.0/22 -43.247.224.0/22 -43.247.228.0/22 -43.247.232.0/22 -43.247.236.0/22 -43.247.240.0/22 -43.247.244.0/22 -43.247.248.0/22 -43.247.252.0/22 -43.247.4.0/22 -43.247.44.0/22 -43.247.48.0/22 -43.247.68.0/22 -43.247.76.0/22 -43.247.8.0/22 -43.247.84.0/22 -43.247.88.0/22 -43.247.92.0/22 -43.247.96.0/22 -43.248.0.0/22 -43.248.100.0/22 -43.248.104.0/22 -43.248.108.0/22 -43.248.112.0/22 -43.248.116.0/22 -43.248.120.0/22 -43.248.124.0/22 -43.248.128.0/22 -43.248.132.0/22 -43.248.136.0/22 -43.248.140.0/22 -43.248.144.0/22 -43.248.148.0/22 -43.248.176.0/22 -43.248.180.0/22 -43.248.184.0/22 -43.248.188.0/22 -43.248.192.0/22 -43.248.196.0/22 -43.248.20.0/22 -43.248.200.0/22 -43.248.204.0/22 -43.248.208.0/22 -43.248.228.0/22 -43.248.232.0/22 -43.248.244.0/22 -43.248.28.0/22 -43.248.4.0/22 -43.248.48.0/22 -43.248.76.0/22 -43.248.80.0/22 -43.248.84.0/22 -43.248.88.0/22 -43.248.92.0/22 -43.248.96.0/22 -43.249.120.0/22 -43.249.132.0/22 -43.249.136.0/22 -43.249.144.0/22 -43.249.148.0/22 -43.249.152.0/22 -43.249.156.0/22 -43.249.160.0/22 -43.249.164.0/22 -43.249.168.0/22 -43.249.192.0/22 -43.249.236.0/22 -43.249.4.0/22 -43.249.8.0/22 -43.250.100.0/22 -43.250.104.0/22 -43.250.108.0/22 -43.250.112.0/22 -43.250.116.0/22 -43.250.12.0/22 -43.250.128.0/22 -43.250.144.0/22 -43.250.148.0/22 -43.250.16.0/22 -43.250.160.0/22 -43.250.168.0/22 -43.250.172.0/22 -43.250.176.0/22 -43.250.20.0/22 -43.250.200.0/22 -43.250.212.0/22 -43.250.216.0/22 -43.250.220.0/22 -43.250.236.0/22 -43.250.244.0/22 -43.250.28.0/22 -43.250.32.0/22 -43.250.36.0/22 -43.250.4.0/22 -43.250.72.0/22 -43.250.96.0/22 -43.251.100.0/22 -43.251.116.0/22 -43.251.192.0/22 -43.251.232.0/22 -43.251.236.0/22 -43.251.244.0/22 -43.251.36.0/22 -43.251.4.0/22 -43.251.8.0/22 -43.252.224.0/22 -43.252.48.0/22 -43.252.56.0/22 -43.254.0.0/22 -43.254.100.0/22 -43.254.104.0/22 -43.254.112.0/22 -43.254.116.0/22 -43.254.128.0/22 -43.254.136.0/22 -43.254.140.0/22 -43.254.144.0/22 -43.254.148.0/22 -43.254.152.0/22 -43.254.156.0/22 -43.254.168.0/22 -43.254.172.0/22 -43.254.180.0/22 -43.254.184.0/22 -43.254.188.0/22 -43.254.192.0/22 -43.254.196.0/22 -43.254.200.0/22 -43.254.208.0/22 -43.254.220.0/22 -43.254.224.0/22 -43.254.228.0/22 -43.254.232.0/22 -43.254.236.0/22 -43.254.24.0/22 -43.254.240.0/22 -43.254.248.0/22 -43.254.252.0/22 -43.254.36.0/22 -43.254.4.0/22 -43.254.44.0/22 -43.254.52.0/22 -43.254.64.0/22 -43.254.72.0/22 -43.254.8.0/22 -43.254.84.0/22 -43.254.88.0/22 -43.254.92.0/22 -43.255.0.0/22 -43.255.108.0/22 -43.255.144.0/22 -43.255.16.0/22 -43.255.168.0/22 -43.255.176.0/22 -43.255.184.0/22 -43.255.192.0/22 -43.255.200.0/22 -43.255.204.0/22 -43.255.208.0/22 -43.255.212.0/22 -43.255.224.0/22 -43.255.228.0/22 -43.255.232.0/22 -43.255.244.0/22 -43.255.4.0/22 -43.255.48.0/22 -43.255.64.0/22 -43.255.68.0/22 -43.255.72.0/22 -43.255.76.0/22 -43.255.8.0/22 -43.255.84.0/22 -43.255.96.0/22 -45.112.132.0/22 -45.112.188.0/22 -45.112.208.0/22 -45.112.212.0/22 -45.112.216.0/22 -45.112.220.0/22 -45.112.228.0/22 -45.112.232.0/22 -45.112.236.0/22 -45.113.12.0/22 -45.113.144.0/22 -45.113.148.0/22 -45.113.16.0/22 -45.113.168.0/22 -45.113.176.0/22 -45.113.184.0/22 -45.113.20.0/22 -45.113.200.0/22 -45.113.204.0/22 -45.113.208.0/22 -45.113.212.0/22 -45.113.216.0/22 -45.113.220.0/22 -45.113.24.0/22 -45.113.240.0/22 -45.113.252.0/22 -45.113.28.0/22 -45.113.40.0/22 -45.113.52.0/22 -45.113.56.0/22 -45.113.72.0/22 -45.114.0.0/22 -45.114.12.0/22 -45.114.124.0/22 -45.114.136.0/22 -45.114.196.0/22 -45.114.200.0/22 -45.114.228.0/22 -45.114.252.0/22 -45.114.32.0/22 -45.114.40.0/22 -45.114.52.0/22 -45.114.96.0/22 -45.115.100.0/22 -45.115.120.0/22 -45.115.132.0/22 -45.115.144.0/22 -45.115.156.0/22 -45.115.164.0/22 -45.115.200.0/22 -45.115.212.0/22 -45.115.228.0/22 -45.115.236.0/22 -45.115.244.0/22 -45.115.248.0/22 -45.115.44.0/22 -45.116.100.0/22 -45.116.140.0/22 -45.116.152.0/22 -45.116.16.0/22 -45.116.208.0/22 -45.116.24.0/22 -45.116.32.0/22 -45.116.36.0/22 -45.116.52.0/22 -45.116.96.0/22 -45.117.124.0/22 -45.117.20.0/22 -45.117.252.0/22 -45.117.68.0/22 -45.117.8.0/22 -45.119.104.0/22 -45.119.116.0/22 -45.119.232.0/22 -45.119.52.0/22 -45.119.60.0/22 -45.119.64.0/22 -45.119.68.0/22 -45.119.72.0/22 -45.120.100.0/22 -45.120.140.0/22 -45.120.164.0/22 -45.120.240.0/22 -45.121.172.0/22 -45.121.176.0/22 -45.121.212.0/22 -45.121.240.0/22 -45.121.244.0/22 -45.121.248.0/22 -45.121.252.0/22 -45.121.52.0/22 -45.121.64.0/22 -45.121.68.0/22 -45.121.72.0/22 -45.121.92.0/22 -45.121.96.0/22 -45.122.0.0/22 -45.122.104.0/22 -45.122.108.0/22 -45.122.112.0/22 -45.122.116.0/22 -45.122.12.0/22 -45.122.16.0/22 -45.122.160.0/22 -45.122.164.0/22 -45.122.168.0/22 -45.122.172.0/22 -45.122.176.0/22 -45.122.180.0/22 -45.122.184.0/22 -45.122.188.0/22 -45.122.192.0/22 -45.122.196.0/22 -45.122.20.0/22 -45.122.200.0/22 -45.122.204.0/22 -45.122.208.0/22 -45.122.212.0/22 -45.122.216.0/22 -45.122.24.0/22 -45.122.28.0/22 -45.122.32.0/22 -45.122.36.0/22 -45.122.4.0/22 -45.122.40.0/22 -45.122.60.0/22 -45.122.64.0/22 -45.122.68.0/22 -45.122.72.0/22 -45.122.76.0/22 -45.122.8.0/22 -45.122.80.0/22 -45.122.84.0/22 -45.122.88.0/22 -45.122.92.0/22 -45.122.96.0/21 -45.123.120.0/22 -45.123.128.0/22 -45.123.132.0/22 -45.123.136.0/22 -45.123.148.0/22 -45.123.152.0/22 -45.123.156.0/22 -45.123.164.0/22 -45.123.168.0/22 -45.123.172.0/22 -45.123.176.0/22 -45.123.180.0/22 -45.123.184.0/22 -45.123.204.0/22 -45.123.212.0/22 -45.123.224.0/22 -45.123.228.0/22 -45.123.232.0/22 -45.123.236.0/22 -45.123.240.0/22 -45.123.244.0/22 -45.123.248.0/22 -45.123.252.0/22 -45.123.28.0/22 -45.123.32.0/22 -45.123.36.0/22 -45.123.44.0/22 -45.123.48.0/22 -45.123.52.0/22 -45.123.56.0/22 -45.123.60.0/22 -45.123.64.0/22 -45.123.68.0/22 -45.123.72.0/22 -45.123.76.0/22 -45.123.80.0/22 -45.123.84.0/22 -45.123.88.0/22 -45.124.0.0/22 -45.124.100.0/22 -45.124.124.0/22 -45.124.172.0/22 -45.124.176.0/22 -45.124.20.0/22 -45.124.208.0/22 -45.124.248.0/22 -45.124.28.0/22 -45.124.32.0/22 -45.124.36.0/22 -45.124.44.0/22 -45.124.68.0/22 -45.124.76.0/22 -45.124.80.0/22 -45.125.100.0/22 -45.125.104.0/22 -45.125.12.0/22 -45.125.136.0/22 -45.125.16.0/22 -45.125.24.0/22 -45.125.44.0/22 -45.125.52.0/22 -45.125.56.0/22 -45.125.76.0/22 -45.125.80.0/22 -45.125.84.0/22 -45.125.88.0/22 -45.125.92.0/22 -45.125.96.0/22 -45.126.100.0/22 -45.126.108.0/22 -45.126.112.0/22 -45.126.116.0/22 -45.126.120.0/22 -45.126.212.0/22 -45.126.220.0/22 -45.126.48.0/22 -45.126.52.0/22 -45.127.12.0/22 -45.127.128.0/22 -45.127.144.0/22 -45.127.148.0/22 -45.127.156.0/22 -45.127.216.0/22 -45.127.8.0/22 -45.127.96.0/22 -45.248.100.0/22 -45.248.104.0/22 -45.248.108.0/22 -45.248.128.0/22 -45.248.132.0/22 -45.248.204.0/22 -45.248.208.0/22 -45.248.212.0/22 -45.248.216.0/22 -45.248.220.0/22 -45.248.224.0/22 -45.248.228.0/22 -45.248.232.0/22 -45.248.236.0/22 -45.248.240.0/22 -45.248.244.0/22 -45.248.248.0/22 -45.248.252.0/22 -45.248.8.0/22 -45.248.80.0/22 -45.248.84.0/22 -45.248.88.0/22 -45.248.96.0/22 -45.249.0.0/22 -45.249.112.0/22 -45.249.12.0/22 -45.249.16.0/22 -45.249.188.0/22 -45.249.192.0/22 -45.249.196.0/22 -45.249.20.0/22 -45.249.200.0/22 -45.249.204.0/22 -45.249.208.0/22 -45.249.212.0/22 -45.249.24.0/22 -45.249.28.0/22 -45.249.32.0/22 -45.249.36.0/22 -45.249.4.0/22 -45.250.104.0/22 -45.250.108.0/22 -45.250.112.0/22 -45.250.116.0/22 -45.250.12.0/22 -45.250.120.0/22 -45.250.124.0/22 -45.250.128.0/22 -45.250.132.0/22 -45.250.136.0/22 -45.250.140.0/22 -45.250.144.0/22 -45.250.148.0/22 -45.250.152.0/22 -45.250.16.0/22 -45.250.164.0/22 -45.250.180.0/22 -45.250.184.0/22 -45.250.188.0/22 -45.250.192.0/22 -45.250.28.0/22 -45.250.32.0/22 -45.250.36.0/22 -45.250.40.0/22 -45.250.76.0/22 -45.250.80.0/22 -45.250.84.0/22 -45.250.88.0/22 -45.250.92.0/22 -45.250.96.0/22 -45.251.0.0/22 -45.251.100.0/22 -45.251.120.0/22 -45.251.124.0/22 -45.251.136.0/22 -45.251.140.0/22 -45.251.144.0/22 -45.251.148.0/22 -45.251.152.0/22 -45.251.156.0/22 -45.251.16.0/22 -45.251.160.0/22 -45.251.164.0/22 -45.251.168.0/22 -45.251.172.0/22 -45.251.176.0/22 -45.251.180.0/22 -45.251.184.0/22 -45.251.188.0/22 -45.251.192.0/22 -45.251.196.0/22 -45.251.20.0/22 -45.251.200.0/22 -45.251.204.0/22 -45.251.208.0/22 -45.251.212.0/22 -45.251.216.0/22 -45.251.220.0/22 -45.251.224.0/22 -45.251.240.0/22 -45.251.52.0/22 -45.251.8.0/22 -45.251.84.0/22 -45.251.88.0/22 -45.251.92.0/22 -45.251.96.0/22 -45.252.0.0/22 -45.252.100.0/22 -45.252.104.0/22 -45.252.108.0/22 -45.252.112.0/22 -45.252.116.0/22 -45.252.12.0/22 -45.252.120.0/22 -45.252.124.0/22 -45.252.128.0/22 -45.252.132.0/22 -45.252.136.0/22 -45.252.140.0/22 -45.252.144.0/22 -45.252.148.0/22 -45.252.152.0/22 -45.252.156.0/22 -45.252.16.0/22 -45.252.160.0/22 -45.252.164.0/22 -45.252.168.0/22 -45.252.172.0/22 -45.252.176.0/22 -45.252.192.0/22 -45.252.196.0/22 -45.252.20.0/22 -45.252.200.0/22 -45.252.204.0/22 -45.252.208.0/22 -45.252.212.0/22 -45.252.216.0/22 -45.252.220.0/22 -45.252.224.0/22 -45.252.228.0/22 -45.252.232.0/22 -45.252.24.0/22 -45.252.28.0/22 -45.252.32.0/22 -45.252.36.0/22 -45.252.4.0/22 -45.252.40.0/22 -45.252.44.0/22 -45.252.48.0/22 -45.252.60.0/22 -45.252.8.0/22 -45.252.84.0/22 -45.252.88.0/22 -45.252.92.0/22 -45.252.96.0/22 -45.253.0.0/22 -45.253.100.0/22 -45.253.104.0/22 -45.253.108.0/22 -45.253.112.0/22 -45.253.116.0/22 -45.253.12.0/22 -45.253.120.0/22 -45.253.132.0/22 -45.253.136.0/22 -45.253.140.0/22 -45.253.144.0/22 -45.253.148.0/22 -45.253.152.0/22 -45.253.156.0/22 -45.253.16.0/22 -45.253.160.0/22 -45.253.164.0/22 -45.253.168.0/22 -45.253.172.0/22 -45.253.176.0/22 -45.253.180.0/22 -45.253.184.0/22 -45.253.188.0/22 -45.253.192.0/22 -45.253.196.0/22 -45.253.20.0/22 -45.253.200.0/22 -45.253.204.0/22 -45.253.208.0/22 -45.253.212.0/22 -45.253.216.0/22 -45.253.220.0/22 -45.253.224.0/22 -45.253.228.0/22 -45.253.232.0/22 -45.253.236.0/22 -45.253.24.0/22 -45.253.240.0/22 -45.253.244.0/22 -45.253.28.0/22 -45.253.32.0/22 -45.253.36.0/22 -45.253.4.0/22 -45.253.40.0/22 -45.253.44.0/22 -45.253.48.0/22 -45.253.52.0/22 -45.253.56.0/22 -45.253.60.0/22 -45.253.64.0/22 -45.253.68.0/22 -45.253.72.0/22 -45.253.76.0/22 -45.253.8.0/22 -45.253.80.0/22 -45.253.84.0/22 -45.253.92.0/22 -45.253.96.0/22 -45.254.0.0/22 -45.254.100.0/22 -45.254.104.0/22 -45.254.108.0/22 -45.254.112.0/22 -45.254.116.0/22 -45.254.12.0/22 -45.254.120.0/22 -45.254.124.0/22 -45.254.128.0/22 -45.254.132.0/22 -45.254.136.0/22 -45.254.140.0/22 -45.254.144.0/22 -45.254.148.0/22 -45.254.152.0/22 -45.254.156.0/22 -45.254.16.0/22 -45.254.160.0/22 -45.254.164.0/22 -45.254.168.0/22 -45.254.172.0/22 -45.254.176.0/22 -45.254.180.0/22 -45.254.184.0/22 -45.254.188.0/22 -45.254.192.0/22 -45.254.196.0/22 -45.254.20.0/22 -45.254.200.0/22 -45.254.204.0/22 -45.254.208.0/22 -45.254.212.0/22 -45.254.216.0/22 -45.254.220.0/22 -45.254.224.0/22 -45.254.228.0/22 -45.254.236.0/22 -45.254.24.0/22 -45.254.240.0/22 -45.254.248.0/22 -45.254.28.0/22 -45.254.4.0/22 -45.254.40.0/22 -45.254.48.0/22 -45.254.52.0/22 -45.254.56.0/22 -45.254.60.0/22 -45.254.64.0/22 -45.254.68.0/22 -45.254.72.0/22 -45.254.76.0/22 -45.254.8.0/22 -45.254.80.0/22 -45.254.84.0/22 -45.254.88.0/22 -45.254.92.0/22 -45.254.96.0/22 -45.255.0.0/22 -45.255.100.0/22 -45.255.104.0/22 -45.255.108.0/22 -45.255.112.0/22 -45.255.116.0/22 -45.255.12.0/22 -45.255.120.0/22 -45.255.124.0/22 -45.255.132.0/22 -45.255.136.0/22 -45.255.140.0/22 -45.255.144.0/22 -45.255.148.0/22 -45.255.152.0/22 -45.255.156.0/22 -45.255.16.0/22 -45.255.160.0/22 -45.255.164.0/22 -45.255.168.0/22 -45.255.172.0/22 -45.255.176.0/22 -45.255.180.0/22 -45.255.184.0/22 -45.255.188.0/22 -45.255.192.0/22 -45.255.196.0/22 -45.255.20.0/22 -45.255.200.0/22 -45.255.204.0/22 -45.255.208.0/22 -45.255.212.0/22 -45.255.216.0/22 -45.255.220.0/22 -45.255.224.0/22 -45.255.228.0/22 -45.255.232.0/22 -45.255.236.0/22 -45.255.24.0/22 -45.255.240.0/22 -45.255.244.0/22 -45.255.248.0/22 -45.255.28.0/22 -45.255.32.0/22 -45.255.36.0/22 -45.255.4.0/22 -45.255.40.0/22 -45.255.44.0/22 -45.255.48.0/22 -45.255.52.0/22 -45.255.56.0/22 -45.255.60.0/22 -45.255.64.0/22 -45.255.68.0/22 -45.255.72.0/22 -45.255.76.0/22 -45.255.8.0/22 -45.255.80.0/22 -45.255.84.0/22 -45.255.88.0/22 -45.255.92.0/22 -45.255.96.0/22 -45.40.192.0/18 -45.65.16.0/22 -45.65.20.0/22 -45.65.24.0/22 -45.65.28.0/22 -47.92.0.0/14 -47.96.0.0/11 -49.112.0.0/13 -49.120.0.0/14 -49.128.0.0/24 -49.128.2.0/23 -49.128.4.0/22 -49.140.0.0/15 -49.152.0.0/14 -49.208.0.0/15 -49.210.0.0/15 -49.220.0.0/14 -49.232.0.0/14 -49.239.0.0/18 -49.239.192.0/18 -49.246.224.0/19 -49.4.0.0/14 -49.51.0.0/16 -49.52.0.0/14 -49.64.0.0/11 -52.130.0.0/15 -52.80.0.0/15 -52.82.0.0/15 -54.222.0.0/15 -58.100.0.0/15 -58.116.0.0/14 -58.128.0.0/13 -58.14.0.0/15 -58.144.0.0/16 -58.154.0.0/15 -58.16.0.0/16 -58.17.0.0/17 -58.17.128.0/17 -58.18.0.0/16 -58.19.0.0/16 -58.192.0.0/15 -58.194.0.0/15 -58.196.0.0/15 -58.198.0.0/15 -58.20.0.0/16 -58.200.0.0/13 -58.208.0.0/12 -58.21.0.0/16 -58.22.0.0/15 -58.24.0.0/15 -58.240.0.0/15 -58.242.0.0/15 -58.244.0.0/15 -58.246.0.0/15 -58.248.0.0/13 -58.30.0.0/15 -58.32.0.0/13 -58.40.0.0/15 -58.42.0.0/16 -58.43.0.0/16 -58.44.0.0/14 -58.48.0.0/13 -58.56.0.0/15 -58.58.0.0/16 -58.59.0.0/17 -58.59.128.0/17 -58.60.0.0/14 -58.65.232.0/21 -58.66.0.0/15 -58.68.128.0/17 -58.82.0.0/17 -58.83.0.0/17 -58.83.128.0/17 -58.87.64.0/18 -58.99.128.0/17 -59.107.0.0/17 -59.107.128.0/17 -59.108.0.0/15 -59.110.0.0/15 -59.151.0.0/17 -59.152.112.0/22 -59.152.116.0/22 -59.152.16.0/22 -59.152.20.0/22 -59.152.24.0/22 -59.152.28.0/22 -59.152.32.0/22 -59.152.36.0/22 -59.152.64.0/22 -59.152.68.0/22 -59.152.72.0/22 -59.152.76.0/22 -59.153.116.0/22 -59.153.136.0/22 -59.153.152.0/22 -59.153.164.0/22 -59.153.168.0/22 -59.153.172.0/22 -59.153.176.0/22 -59.153.180.0/22 -59.153.184.0/22 -59.153.188.0/22 -59.153.192.0/22 -59.153.32.0/22 -59.153.4.0/22 -59.153.60.0/22 -59.153.64.0/22 -59.153.68.0/22 -59.153.72.0/22 -59.153.92.0/22 -59.155.0.0/16 -59.172.0.0/15 -59.174.0.0/15 -59.191.0.0/17 -59.192.0.0/10 -59.32.0.0/13 -59.40.0.0/15 -59.42.0.0/16 -59.43.0.0/16 -59.44.0.0/14 -59.48.0.0/16 -59.49.0.0/17 -59.49.128.0/17 -59.50.0.0/16 -59.51.0.0/17 -59.51.128.0/17 -59.52.0.0/14 -59.56.0.0/14 -59.60.0.0/15 -59.62.0.0/15 -59.64.0.0/14 -59.68.0.0/14 -59.72.0.0/15 -59.74.0.0/15 -59.76.0.0/16 -59.77.0.0/16 -59.78.0.0/15 -59.80.0.0/15 -59.82.0.0/15 -60.0.0.0/13 -60.10.0.0/16 -60.11.0.0/16 -60.12.0.0/16 -60.13.0.0/18 -60.13.128.0/17 -60.13.64.0/18 -60.14.0.0/15 -60.16.0.0/13 -60.160.0.0/15 -60.162.0.0/15 -60.164.0.0/15 -60.166.0.0/15 -60.168.0.0/13 -60.176.0.0/12 -60.194.0.0/15 -60.200.0.0/14 -60.204.0.0/16 -60.205.0.0/16 -60.206.0.0/15 -60.208.0.0/13 -60.216.0.0/15 -60.218.0.0/15 -60.220.0.0/14 -60.232.0.0/15 -60.235.0.0/16 -60.24.0.0/14 -60.245.128.0/17 -60.247.0.0/16 -60.252.0.0/16 -60.253.128.0/17 -60.255.0.0/16 -60.28.0.0/15 -60.30.0.0/16 -60.31.0.0/16 -60.55.0.0/16 -60.63.0.0/16 -60.8.0.0/15 -61.128.0.0/15 -61.130.0.0/15 -61.132.0.0/16 -61.133.0.0/17 -61.133.128.0/17 -61.134.0.0/18 -61.134.128.0/18 -61.134.192.0/18 -61.134.64.0/19 -61.134.96.0/19 -61.135.0.0/16 -61.136.0.0/18 -61.136.128.0/17 -61.136.64.0/18 -61.137.0.0/17 -61.137.128.0/17 -61.138.0.0/18 -61.138.128.0/18 -61.138.192.0/18 -61.138.64.0/18 -61.139.0.0/17 -61.139.128.0/18 -61.139.192.0/18 -61.14.212.0/22 -61.14.216.0/22 -61.14.220.0/22 -61.14.240.0/22 -61.14.244.0/22 -61.140.0.0/14 -61.144.0.0/14 -61.148.0.0/15 -61.150.0.0/15 -61.152.0.0/16 -61.153.0.0/16 -61.154.0.0/15 -61.156.0.0/16 -61.157.0.0/16 -61.158.0.0/17 -61.158.128.0/17 -61.159.0.0/18 -61.159.128.0/17 -61.159.64.0/18 -61.160.0.0/16 -61.161.0.0/18 -61.161.128.0/17 -61.161.64.0/18 -61.162.0.0/16 -61.163.0.0/16 -61.164.0.0/16 -61.165.0.0/16 -61.166.0.0/16 -61.167.0.0/16 -61.168.0.0/16 -61.169.0.0/16 -61.170.0.0/15 -61.172.0.0/14 -61.176.0.0/16 -61.177.0.0/16 -61.178.0.0/16 -61.179.0.0/16 -61.180.0.0/17 -61.180.128.0/17 -61.181.0.0/16 -61.182.0.0/16 -61.183.0.0/16 -61.184.0.0/14 -61.188.0.0/16 -61.189.0.0/17 -61.189.128.0/17 -61.190.0.0/15 -61.232.0.0/14 -61.236.0.0/15 -61.240.0.0/14 -61.28.0.0/20 -61.28.16.0/20 -61.28.32.0/19 -61.28.64.0/18 -61.29.128.0/18 -61.29.192.0/19 -61.29.224.0/20 -61.29.240.0/21 -61.29.248.0/22 -61.29.254.0/23 -61.4.176.0/20 -61.4.80.0/22 -61.4.84.0/22 -61.4.88.0/21 -61.45.128.0/18 -61.45.224.0/20 -61.47.128.0/18 -61.48.0.0/14 -61.52.0.0/15 -61.54.0.0/16 -61.55.0.0/16 -61.8.160.0/20 -61.87.192.0/18 -62.234.0.0/16 -68.79.0.0/18 -69.230.192.0/18 -69.231.128.0/18 -69.234.192.0/18 -69.235.128.0/18 -71.131.192.0/18 -71.132.0.0/18 -71.136.64.0/18 -71.137.0.0/18 -81.68.0.0/14 -82.156.0.0/15 -94.191.0.0/17 diff --git a/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 b/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 deleted file mode 100644 index cd1d1afb..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 +++ /dev/null @@ -1,1937 +0,0 @@ -2001:250:2000::/35 -2001:250:4000::/34 -2001:250:8000::/33 -2001:250::/35 -2001:251::/32 -2001:252::/32 -2001:253::/32 -2001:254::/32 -2001:255::/32 -2001:256::/32 -2001:4438::/32 -2001:4510::/29 -2001:7fa:10::/48 -2001:7fa:5::/48 -2001:c68::/32 -2001:cc0::/32 -2001:da8::/32 -2001:da9::/32 -2001:daa::/32 -2001:dc7::/32 -2001:dd8:1::/48 -2001:dd8:1a::/48 -2001:dd8:5::/48 -2001:dd9::/48 -2001:df0:1bc0::/48 -2001:df0:2180::/48 -2001:df0:25c0::/48 -2001:df0:26c0::/48 -2001:df0:27e::/48 -2001:df0:2d80::/48 -2001:df0:2e00::/48 -2001:df0:2e80::/48 -2001:df0:423::/48 -2001:df0:4500::/48 -2001:df0:59c0::/48 -2001:df0:9c0::/48 -2001:df0:b180::/48 -2001:df0:bf80::/48 -2001:df0:d880::/48 -2001:df1:4580::/48 -2001:df1:5280::/48 -2001:df1:5b80::/48 -2001:df1:6180::/48 -2001:df1:6b80::/48 -2001:df1:8b00::/48 -2001:df1:a100::/48 -2001:df1:bd80::/48 -2001:df1:c80::/48 -2001:df1:c900::/48 -2001:df1:d100::/48 -2001:df1:d180::/48 -2001:df1:da00::/48 -2001:df1:f480::/48 -2001:df1:f580::/48 -2001:df1:fd80::/48 -2001:df2:180::/48 -2001:df2:5780::/48 -2001:df2:5a80::/48 -2001:df2:80::/48 -2001:df2:a580::/48 -2001:df3:1480::/48 -2001:df3:2a80::/48 -2001:df3:3a80::/48 -2001:df3:a680::/48 -2001:df3:b100::/48 -2001:df3:b380::/48 -2001:df3:c380::/48 -2001:df3:c680::/48 -2001:df3:d880::/48 -2001:df3:ed80::/48 -2001:df3:ef80::/48 -2001:df4:1280::/48 -2001:df4:1500::/48 -2001:df4:1880::/48 -2001:df4:2780::/48 -2001:df4:2e80::/48 -2001:df4:2f00::/48 -2001:df4:3c80::/48 -2001:df4:3d80::/48 -2001:df4:4b80::/48 -2001:df4:4d80::/48 -2001:df4:880::/48 -2001:df4:a680::/48 -2001:df4:a980::/48 -2001:df4:c180::/48 -2001:df4:c580::/48 -2001:df4:c780::/48 -2001:df4:cf00::/48 -2001:df4:d80::/48 -2001:df4:de80::/48 -2001:df5:2080::/48 -2001:df5:5f80::/48 -2001:df5:7800::/48 -2001:df6:100::/48 -2001:df6:3d00::/48 -2001:df6:5d00::/48 -2001:df6:6800::/48 -2001:df6:9e80::/48 -2001:df6:9f80::/48 -2001:df6:df00::/48 -2001:df6:f400::/48 -2001:df7:1480::/48 -2001:df7:2b80::/48 -2001:df7:6600::/48 -2001:df7:ab00::/48 -2001:df7:e580::/48 -2001:df7:f080::/48 -2001:e08::/32 -2001:e18::/32 -2001:e80::/32 -2001:e88::/32 -2001:f38::/32 -2001:f88::/32 -2400:1040::/32 -2400:1160::/32 -2400:12c0::/32 -2400:1340::/32 -2400:1380::/32 -2400:15c0::/32 -2400:1640::/32 -2400:16c0::/32 -2400:1740::/32 -2400:17c0::/32 -2400:1840::/32 -2400:18c0::/32 -2400:1940::/32 -2400:19a0::/32 -2400:19c0::/32 -2400:1a40::/32 -2400:1ac0::/32 -2400:1b40::/32 -2400:1cc0::/32 -2400:1d40::/32 -2400:1dc0::/32 -2400:1e40::/32 -2400:1ec0::/32 -2400:1f40::/32 -2400:1fc0::/32 -2400:3040::/32 -2400:3140::/32 -2400:3160::/32 -2400:31c0::/32 -2400:3200::/32 -2400:3280::/32 -2400:32c0::/32 -2400:3340::/32 -2400:33c0::/32 -2400:3440::/32 -2400:34c0::/32 -2400:3540::/32 -2400:35c0::/32 -2400:3600::/32 -2400:3640::/32 -2400:3660::/32 -2400:36c0::/32 -2400:38c0::/32 -2400:39c0::/32 -2400:3a00::/32 -2400:3a40::/32 -2400:3b40::/32 -2400:3bc0::/32 -2400:3c40::/32 -2400:3cc0::/32 -2400:3e00::/32 -2400:3f40::/32 -2400:3f60::/32 -2400:3fc0::/32 -2400:4440::/32 -2400:44c0::/32 -2400:44e0::/32 -2400:4540::/32 -2400:4600::/32 -2400:4640::/32 -2400:46c0::/32 -2400:4740::/32 -2400:4920::/32 -2400:4bc0::/32 -2400:4e00::/32 -2400:4e40::/32 -2400:5080::/32 -2400:5280::/32 -2400:5400::/32 -2400:5580::/32 -2400:55c0::/32 -2400:55e0::/32 -2400:5600::/32 -2400:5640::/32 -2400:56c0::/32 -2400:57c0::/32 -2400:5840::/32 -2400:5a00::/32 -2400:5a40::/32 -2400:5ac0::/32 -2400:5b40::/32 -2400:5bc0::/32 -2400:5c40::/32 -2400:5c80::/32 -2400:5cc0::/32 -2400:5e80::/32 -2400:5fc0::/32 -2400:6000::/32 -2400:6040::/32 -2400:60c0::/32 -2400:61c0::/32 -2400:6200::/32 -2400:6600::/32 -2400:6640::/32 -2400:66c0::/32 -2400:6740::/32 -2400:67c0::/32 -2400:6840::/32 -2400:68c0::/32 -2400:6940::/32 -2400:69c0::/32 -2400:6a00::/32 -2400:6a40::/32 -2400:6ac0::/32 -2400:6b40::/32 -2400:6bc0::/32 -2400:6c40::/32 -2400:6cc0::/32 -2400:6d40::/32 -2400:6dc0::/32 -2400:6e00::/32 -2400:6e40::/32 -2400:6ec0::/32 -2400:6f40::/32 -2400:6f80::/32 -2400:6fc0::/32 -2400:7040::/32 -2400:7100::/32 -2400:7140::/32 -2400:71c0::/32 -2400:7200::/32 -2400:7240::/32 -2400:72c0::/32 -2400:7340::/32 -2400:73c0::/32 -2400:7440::/32 -2400:74c0::/32 -2400:7540::/32 -2400:75c0::/32 -2400:7640::/32 -2400:7680::/32 -2400:76c0::/32 -2400:7740::/32 -2400:77c0::/32 -2400:79c0::/32 -2400:7ac0::/32 -2400:7bc0::/32 -2400:7f80::/32 -2400:7fc0::/32 -2400:8080::/32 -2400:8200::/32 -2400:82c0::/32 -2400:8580::/32 -2400:8600::/32 -2400:8780::/32 -2400:87c0::/32 -2400:8840::/32 -2400:8980::/32 -2400:89c0::/32 -2400:8e00::/32 -2400:8f00::/32 -2400:8fc0::/32 -2400:9040::/32 -2400:9340::/32 -2400:9580::/32 -2400:95c0::/32 -2400:9600::/32 -2400:98c0::/32 -2400:9a00::/32 -2400:9dc0::/32 -2400:9e00::/32 -2400:a040::/32 -2400:a380::/32 -2400:a480::/32 -2400:a780::/32 -2400:a8c0::/32 -2400:a900::/32 -2400:a980::/32 -2400:a981::/32 -2400:a982::/31 -2400:a984::/30 -2400:abc0::/32 -2400:ae00::/32 -2400:b200::/32 -2400:b2c0::/32 -2400:b500::/32 -2400:b600::/32 -2400:b6c0::/32 -2400:b700::/32 -2400:b8c0::/32 -2400:b9c0::/32 -2400:ba00::/32 -2400:ba40::/32 -2400:ba41::/32 -2400:bac0::/32 -2400:be00::/32 -2400:bf00::/32 -2400:c200::/32 -2400:c380::/32 -2400:c840::/32 -2400:c8c0::/32 -2400:c940::/32 -2400:c9c0::/32 -2400:ca40::/32 -2400:cac0::/32 -2400:cb40::/32 -2400:cb80::/32 -2400:cbc0::/32 -2400:cc40::/32 -2400:cc80::/32 -2400:ccc0::/32 -2400:cd40::/32 -2400:cdc0::/32 -2400:ce00::/32 -2400:ce40::/32 -2400:cf40::/32 -2400:cf80::/32 -2400:cfc0::/32 -2400:d0c0::/32 -2400:d100::/32 -2400:d1c0::/32 -2400:d200::/32 -2400:d300::/32 -2400:d440::/32 -2400:d600::/32 -2400:d6c0::/32 -2400:d780::/32 -2400:da00::/32 -2400:dd00::/28 -2400:dd40::/32 -2400:de00::/32 -2400:de80::/32 -2400:e0c0::/32 -2400:e5c0::/32 -2400:e680::/32 -2400:e880::/32 -2400:ebc0::/32 -2400:edc0::/32 -2400:ee00::/32 -2400:eec0::/32 -2400:ef40::/32 -2400:f480::/32 -2400:f5c0::/32 -2400:f7c0::/32 -2400:f840::/32 -2400:f980::/32 -2400:fac0::/32 -2400:fb40::/32 -2400:fbc0::/32 -2400:fc40::/32 -2400:fcc0::/32 -2400:fe00::/32 -2401:1000::/32 -2401:11c0::/32 -2401:1200::/32 -2401:12c0::/32 -2401:140::/32 -2401:15c0::/32 -2401:1740::/32 -2401:18c0::/32 -2401:1940::/32 -2401:19c0::/32 -2401:1a40::/32 -2401:1ac0::/32 -2401:1c0::/32 -2401:1d40::/32 -2401:1dc0::/32 -2401:1e00::/32 -2401:1ec0::/32 -2401:1f40::/32 -2401:2040::/32 -2401:2080::/32 -2401:23c0::/32 -2401:2600::/32 -2401:2780::/32 -2401:2980::/32 -2401:2a00::/32 -2401:2b40::/32 -2401:2e00::/32 -2401:3100::/32 -2401:3380::/32 -2401:33c0::/32 -2401:3440::/32 -2401:3480::/32 -2401:34c0::/32 -2401:3640::/32 -2401:3780::/32 -2401:3800::/32 -2401:3880::/32 -2401:3980::/32 -2401:3a00::/32 -2401:3a80::/32 -2401:3b80::/32 -2401:3c80::/32 -2401:3d80::/32 -2401:3e80::/32 -2401:3f80::/32 -2401:4080::/32 -2401:4180::/32 -2401:4280::/32 -2401:4380::/32 -2401:4480::/32 -2401:4580::/32 -2401:4680::/32 -2401:4780::/32 -2401:4880::/32 -2401:4a80::/32 -2401:4b00::/32 -2401:4f80::/32 -2401:5180::/32 -2401:540::/32 -2401:5680::/32 -2401:56c0::/32 -2401:59c0::/32 -2401:5b40::/32 -2401:5c80::/32 -2401:7180::/32 -2401:71c0::/32 -2401:7240::/32 -2401:7340::/32 -2401:7580::/32 -2401:7680::/32 -2401:7700::/32 -2401:7780::/32 -2401:7880::/32 -2401:7980::/32 -2401:7a00::/32 -2401:7a80::/32 -2401:7b80::/32 -2401:7bc0::/32 -2401:7c0::/32 -2401:7c80::/32 -2401:7cc0::/32 -2401:7d40::/32 -2401:7d80::/32 -2401:7e00::/32 -2401:7f80::/32 -2401:800::/32 -2401:80::/32 -2401:8200::/32 -2401:82c0::/32 -2401:8380::/32 -2401:8540::/32 -2401:8600::/32 -2401:8680::/32 -2401:8840::/32 -2401:8d00::/32 -2401:8f40::/32 -2401:8fc0::/32 -2401:9340::/32 -2401:9600::/32 -2401:96c0::/32 -2401:9740::/32 -2401:98c0::/32 -2401:9a00::/32 -2401:9ac0::/32 -2401:9b40::/32 -2401:9bc0::/32 -2401:9c0::/32 -2401:9dc0::/32 -2401:9e40::/32 -2401:9f80::/32 -2401:a00::/32 -2401:a140::/32 -2401:a180::/32 -2401:a340::/32 -2401:a3c0::/32 -2401:a40::/32 -2401:a4c0::/32 -2401:a540::/32 -2401:a5c0::/32 -2401:a640::/32 -2401:a940::/32 -2401:a980::/32 -2401:aa00::/32 -2401:aa40::/32 -2401:ac0::/32 -2401:acc0::/32 -2401:ad40::/32 -2401:adc0::/32 -2401:b040::/32 -2401:b180::/32 -2401:b340::/32 -2401:b400::/32 -2401:b40::/32 -2401:b480::/32 -2401:b4c0::/32 -2401:b540::/32 -2401:b580::/32 -2401:b600::/32 -2401:b680::/32 -2401:b6c0::/32 -2401:b7c0::/32 -2401:b940::/32 -2401:ba00::/32 -2401:ba40::/32 -2401:bb80::/32 -2401:bc0::/32 -2401:be00::/32 -2401:c200::/32 -2401:c40::/32 -2401:c540::/32 -2401:c600::/32 -2401:c640::/32 -2401:c6c0::/32 -2401:c840::/32 -2401:c8c0::/32 -2401:ca00::/32 -2401:cb80::/32 -2401:cc00::/32 -2401:cc0::/32 -2401:ce00::/32 -2401:cf40::/32 -2401:cfc0::/32 -2401:d0c0::/32 -2401:d140::/32 -2401:d180::/32 -2401:d2c0::/32 -2401:d340::/32 -2401:d40::/32 -2401:d780::/32 -2401:da00::/32 -2401:de00::/32 -2401:e00::/32 -2401:e080::/32 -2401:e0c0::/32 -2401:e140::/32 -2401:e240::/32 -2401:e2c0::/32 -2401:e340::/32 -2401:e6c0::/32 -2401:e840::/32 -2401:e8c0::/32 -2401:e940::/32 -2401:e9c0::/32 -2401:ec00::/32 -2401:ec40::/32 -2401:f300::/32 -2401:f7c0::/32 -2401:fa80::/32 -2401:fb80::/32 -2401:fc80::/32 -2401:fe80::/32 -2401:ffc0::/32 -2402:1000::/32 -2402:1440::/32 -2402:14c0::/32 -2402:1540::/32 -2402:1600::/32 -2402:1740::/32 -2402:19c0::/32 -2402:1ec0::/32 -2402:1f40::/32 -2402:1f80::/32 -2402:2000::/32 -2402:2280::/32 -2402:22c0::/32 -2402:2440::/32 -2402:24c0::/32 -2402:2540::/32 -2402:2640::/32 -2402:27c0::/32 -2402:2a00::/32 -2402:2b80::/32 -2402:2bc0::/32 -2402:2d00::/32 -2402:2d80::/32 -2402:2e80::/32 -2402:2f40::/32 -2402:3040::/32 -2402:3080::/32 -2402:3140::/32 -2402:3180::/32 -2402:31c0::/32 -2402:3240::/32 -2402:33c0::/32 -2402:39c0::/32 -2402:3a40::/32 -2402:3ac0::/32 -2402:3c00::/32 -2402:3e00::/32 -2402:3ec0::/32 -2402:3f80::/32 -2402:4140::/32 -2402:42c0::/32 -2402:4340::/32 -2402:43c0::/32 -2402:440::/32 -2402:4440::/32 -2402:4500::/32 -2402:4540::/32 -2402:4a00::/32 -2402:4a40::/32 -2402:4a80::/32 -2402:4ac0::/32 -2402:4b80::/32 -2402:4bc0::/32 -2402:4c40::/32 -2402:4d80::/32 -2402:4e00::/32 -2402:4ec0::/32 -2402:4f80::/32 -2402:50c0::/32 -2402:5140::/32 -2402:5180::/32 -2402:51c0::/32 -2402:5240::/32 -2402:52c0::/32 -2402:5340::/32 -2402:5880::/32 -2402:5940::/32 -2402:59c0::/32 -2402:5a40::/32 -2402:5b40::/32 -2402:5bc0::/32 -2402:5c0::/32 -2402:5d00::/32 -2402:5e00::/32 -2402:5e40::/32 -2402:5ec0::/32 -2402:5f40::/32 -2402:6280::/32 -2402:62c0::/32 -2402:64c0::/32 -2402:66c0::/32 -2402:6740::/32 -2402:67c0::/32 -2402:6a00::/32 -2402:6b40::/32 -2402:6bc0::/32 -2402:6e00::/32 -2402:6e80::/32 -2402:6ec0::/32 -2402:6f40::/32 -2402:6fc0::/32 -2402:7040::/32 -2402:7080::/32 -2402:70c0::/32 -2402:7140::/32 -2402:71c0::/32 -2402:7240::/32 -2402:72c0::/32 -2402:7540::/32 -2402:75c0::/32 -2402:7740::/32 -2402:7d00::/32 -2402:7d80::/32 -2402:8180::/32 -2402:8300::/32 -2402:8380::/32 -2402:840::/32 -2402:85c0::/32 -2402:8800::/32 -2402:8840::/32 -2402:8900::/32 -2402:8940::/32 -2402:89c0::/32 -2402:8b40::/32 -2402:8bc0::/32 -2402:8cc0::/32 -2402:8d40::/32 -2402:8f40::/32 -2402:8f80::/32 -2402:9240::/32 -2402:92c0::/32 -2402:93c0::/32 -2402:9440::/32 -2402:9480::/32 -2402:94c0::/32 -2402:9580::/32 -2402:95c0::/32 -2402:9680::/32 -2402:96c0::/32 -2402:9840::/32 -2402:98c0::/32 -2402:9940::/32 -2402:9a80::/32 -2402:9b80::/32 -2402:9f80::/32 -2402:9fc0::/32 -2402:a080::/32 -2402:a180::/32 -2402:a200::/32 -2402:a240::/32 -2402:a280::/32 -2402:a380::/32 -2402:a3c0::/32 -2402:a640::/32 -2402:a680::/32 -2402:a6c0::/32 -2402:a840::/32 -2402:a880::/32 -2402:a9c0::/32 -2402:aa80::/32 -2402:ab80::/32 -2402:ac0::/32 -2402:ae00::/32 -2402:ae40::/32 -2402:aec0::/32 -2402:af80::/32 -2402:afc0::/32 -2402:b080::/32 -2402:b200::/32 -2402:b380::/32 -2402:b3c0::/32 -2402:b440::/32 -2402:b6c0::/32 -2402:b880::/32 -2402:b8c0::/32 -2402:b940::/32 -2402:b980::/32 -2402:ba80::/32 -2402:bac0::/32 -2402:bbc0::/32 -2402:bf80::/32 -2402:c280::/32 -2402:c3c0::/32 -2402:c5c0::/32 -2402:c9c0::/32 -2402:cbc0::/32 -2402:cc40::/32 -2402:cc80::/32 -2402:cf00::/32 -2402:cf40::/32 -2402:d040::/32 -2402:d140::/32 -2402:d2c0::/32 -2402:d300::/32 -2402:d340::/32 -2402:d380::/32 -2402:d5c0::/32 -2402:d6c0::/32 -2402:d740::/32 -2402:d780::/32 -2402:d880::/32 -2402:d980::/32 -2402:da40::/32 -2402:db40::/32 -2402:dcc0::/32 -2402:de40::/32 -2402:dec0::/32 -2402:df40::/32 -2402:dfc0::/32 -2402:e00::/32 -2402:e040::/32 -2402:e0c0::/32 -2402:e140::/32 -2402:e2c0::/32 -2402:e3c0::/32 -2402:e480::/32 -2402:e540::/32 -2402:e680::/32 -2402:e740::/32 -2402:e780::/32 -2402:e7c0::/32 -2402:e880::/32 -2402:e980::/32 -2402:eb80::/32 -2402:ec80::/32 -2402:ed80::/32 -2402:ef40::/32 -2402:ef80::/32 -2402:f000::/32 -2402:f140::/32 -2402:f340::/32 -2402:f3c0::/32 -2402:f480::/32 -2402:f540::/32 -2402:f580::/32 -2402:f740::/32 -2402:f780::/32 -2402:f8c0::/32 -2402:f980::/32 -2402:f9c0::/32 -2402:fac0::/32 -2402:fc0::/32 -2402:fcc0::/32 -2402:ff40::/32 -2402:ffc0::/32 -2403:1180::/32 -2403:1340::/32 -2403:1440::/32 -2403:1580::/32 -2403:16c0::/32 -2403:17c0::/32 -2403:1980::/32 -2403:1a40::/32 -2403:1b80::/32 -2403:1c80::/32 -2403:1d80::/32 -2403:1dc0::/32 -2403:1e80::/32 -2403:1ec0::/32 -2403:1f80::/32 -2403:2040::/32 -2403:2080::/32 -2403:2180::/32 -2403:2240::/32 -2403:2280::/32 -2403:2380::/32 -2403:2440::/32 -2403:24c0::/32 -2403:2580::/32 -2403:25c0::/32 -2403:2680::/32 -2403:26c0::/32 -2403:2740::/32 -2403:2780::/32 -2403:28c0::/32 -2403:2940::/32 -2403:2a00::/32 -2403:2a40::/32 -2403:2ac0::/32 -2403:2b40::/32 -2403:2bc0::/32 -2403:2cc0::/32 -2403:2f40::/32 -2403:2fc0::/32 -2403:3040::/32 -2403:30c0::/32 -2403:3140::/32 -2403:3280::/32 -2403:32c0::/32 -2403:3380::/32 -2403:3480::/32 -2403:3580::/32 -2403:3640::/32 -2403:3680::/32 -2403:36c0::/32 -2403:3740::/32 -2403:3780::/32 -2403:37c0::/32 -2403:3840::/32 -2403:3880::/32 -2403:38c0::/32 -2403:3940::/32 -2403:3980::/32 -2403:39c0::/32 -2403:3a40::/32 -2403:3b40::/32 -2403:3b80::/32 -2403:3bc0::/32 -2403:3c40::/32 -2403:3c80::/32 -2403:3cc0::/32 -2403:3d40::/32 -2403:3d80::/32 -2403:3dc0::/32 -2403:3e80::/32 -2403:3ec0::/32 -2403:3f40::/32 -2403:3f80::/32 -2403:4080::/32 -2403:4180::/32 -2403:4240::/32 -2403:4280::/32 -2403:4300::/32 -2403:4380::/32 -2403:4580::/32 -2403:4680::/32 -2403:4780::/32 -2403:4840::/32 -2403:4880::/32 -2403:4980::/32 -2403:4a40::/32 -2403:4a80::/32 -2403:4b40::/32 -2403:4b80::/32 -2403:4c80::/32 -2403:4cc0::/32 -2403:4d40::/32 -2403:4d80::/32 -2403:4ec0::/32 -2403:5040::/32 -2403:5080::/32 -2403:50c0::/32 -2403:5280::/32 -2403:5380::/32 -2403:54c0::/32 -2403:5540::/32 -2403:5580::/32 -2403:5640::/32 -2403:5780::/32 -2403:58c0::/32 -2403:5980::/32 -2403:5a80::/32 -2403:5b40::/32 -2403:5b80::/32 -2403:5c80::/32 -2403:5d80::/32 -2403:5e40::/32 -2403:5e80::/32 -2403:5ec0::/32 -2403:5f80::/32 -2403:5fc0::/32 -2403:600::/32 -2403:6080::/32 -2403:6180::/32 -2403:6280::/32 -2403:62c0::/32 -2403:6380::/32 -2403:6580::/32 -2403:6680::/32 -2403:6740::/32 -2403:6780::/32 -2403:6880::/32 -2403:6980::/32 -2403:6a00::/32 -2403:6c80::/32 -2403:6d40::/32 -2403:6d80::/32 -2403:6e80::/32 -2403:6f40::/32 -2403:6fc0::/32 -2403:700::/32 -2403:7040::/32 -2403:7080::/32 -2403:7180::/32 -2403:7280::/32 -2403:7380::/32 -2403:7480::/32 -2403:7540::/32 -2403:7580::/32 -2403:76c0::/32 -2403:7700::/32 -2403:7840::/32 -2403:78c0::/32 -2403:7a80::/32 -2403:7b00::/32 -2403:7c0::/32 -2403:7d80::/32 -2403:7e80::/32 -2403:7f80::/32 -2403:800::/31 -2403:8080::/32 -2403:8180::/32 -2403:8280::/32 -2403:8380::/32 -2403:83c0::/32 -2403:8480::/32 -2403:8580::/32 -2403:8880::/32 -2403:8900::/32 -2403:8980::/32 -2403:8a40::/32 -2403:8a80::/32 -2403:8b00::/32 -2403:8b80::/32 -2403:8c00::/32 -2403:8c80::/32 -2403:8d00::/32 -2403:8d80::/32 -2403:9080::/32 -2403:9180::/32 -2403:9280::/32 -2403:9380::/32 -2403:9480::/32 -2403:9580::/32 -2403:9680::/32 -2403:9780::/32 -2403:980::/32 -2403:9880::/32 -2403:9a80::/32 -2403:9ac0::/32 -2403:9b00::/32 -2403:9b40::/32 -2403:9b80::/32 -2403:9c80::/32 -2403:9d00::/32 -2403:9d80::/32 -2403:9e40::/32 -2403:9e80::/32 -2403:9ec0::/32 -2403:9f80::/32 -2403:a100::/32 -2403:a140::/32 -2403:a200::/32 -2403:a300::/32 -2403:a480::/32 -2403:a580::/32 -2403:a680::/32 -2403:a6c0::/32 -2403:a780::/32 -2403:a80::/32 -2403:a880::/32 -2403:a940::/32 -2403:a980::/32 -2403:a9c0::/32 -2403:aa40::/32 -2403:aa80::/32 -2403:ab80::/32 -2403:ac00::/32 -2403:af80::/32 -2403:b080::/32 -2403:b180::/32 -2403:b280::/32 -2403:b380::/32 -2403:b400::/32 -2403:b480::/32 -2403:b580::/32 -2403:b680::/32 -2403:b780::/32 -2403:b80::/32 -2403:b880::/32 -2403:b980::/32 -2403:ba40::/32 -2403:c040::/32 -2403:c080::/32 -2403:c100::/32 -2403:c140::/32 -2403:c180::/32 -2403:c3c0::/32 -2403:c440::/32 -2403:c480::/32 -2403:c4c0::/32 -2403:c80::/32 -2403:c980::/32 -2403:cdc0::/32 -2403:cec0::/32 -2403:cf80::/32 -2403:d080::/32 -2403:d180::/32 -2403:d280::/32 -2403:d2c0::/32 -2403:d380::/32 -2403:d400::/32 -2403:d40::/32 -2403:d440::/32 -2403:d480::/32 -2403:d580::/32 -2403:d680::/32 -2403:d780::/32 -2403:d7c0::/32 -2403:d80::/32 -2403:d880::/32 -2403:d980::/32 -2403:d9c0::/32 -2403:da80::/32 -2403:dac0::/32 -2403:db00::/32 -2403:db80::/32 -2403:dc80::/32 -2403:dd80::/32 -2403:de80::/32 -2403:df80::/32 -2403:e080::/32 -2403:e180::/32 -2403:e280::/32 -2403:e300::/32 -2403:e480::/32 -2403:e500::/32 -2403:e580::/32 -2403:e640::/32 -2403:e680::/32 -2403:e700::/32 -2403:e780::/32 -2403:e7c0::/32 -2403:e80::/32 -2403:e880::/32 -2403:e980::/32 -2403:ea80::/32 -2403:eac0::/32 -2403:eb80::/32 -2403:ec80::/32 -2403:ed00::/32 -2403:ed40::/32 -2403:ed80::/32 -2403:ee80::/32 -2403:ef80::/32 -2403:f00::/32 -2403:f080::/32 -2403:f100::/32 -2403:f180::/32 -2403:f240::/32 -2403:f280::/32 -2403:f300::/32 -2403:f380::/32 -2403:f40::/32 -2403:f4c0::/32 -2403:f580::/32 -2403:f740::/32 -2403:f80::/32 -2403:f8c0::/32 -2403:f980::/32 -2403:fb00::/32 -2403:fb80::/32 -2403:fc0::/32 -2403:fc40::/32 -2403:fe40::/32 -2403:fe80::/32 -2403:fec0::/32 -2403:ff80::/32 -2403:ffc0::/32 -2404:100::/32 -2404:1080::/32 -2404:10c0::/32 -2404:1180::/32 -2404:14c0::/32 -2404:158::/32 -2404:1880::/32 -2404:1c80::/32 -2404:1cc0::/32 -2404:1d80::/32 -2404:1e80::/32 -2404:1f40::/32 -2404:21c0::/32 -2404:240::/32 -2404:280::/32 -2404:30c0::/32 -2404:3140::/32 -2404:31c0::/32 -2404:3240::/32 -2404:32c0::/32 -2404:3300::/32 -2404:3340::/32 -2404:3480::/32 -2404:35c0::/32 -2404:3640::/32 -2404:36c0::/32 -2404:3700::/32 -2404:3740::/32 -2404:37c0::/32 -2404:3840::/32 -2404:3940::/32 -2404:3b00::/32 -2404:3bc0::/32 -2404:3c40::/32 -2404:3f40::/32 -2404:4080::/32 -2404:41c0::/32 -2404:440::/32 -2404:4540::/32 -2404:4740::/32 -2404:480::/32 -2404:4bc0::/32 -2404:4d00::/32 -2404:4dc0::/32 -2404:51c0::/32 -2404:5640::/32 -2404:5a80::/32 -2404:5b00::/32 -2404:5d00::/32 -2404:5e80::/32 -2404:6000::/32 -2404:6100::/32 -2404:6380::/32 -2404:6500::/32 -2404:65c0::/32 -2404:680::/32 -2404:6a40::/32 -2404:6f80::/32 -2404:7100::/32 -2404:7180::/32 -2404:71c0::/32 -2404:7240::/32 -2404:74c0::/32 -2404:7600::/32 -2404:7740::/32 -2404:7940::/32 -2404:7d00::/32 -2404:8040::/32 -2404:80c0::/32 -2404:8140::/32 -2404:81c0::/32 -2404:8480::/32 -2404:8580::/32 -2404:8700::/32 -2404:8880::/32 -2404:8a80::/32 -2404:8b00::/32 -2404:8dc0::/32 -2404:9340::/32 -2404:9b80::/32 -2404:9c80::/32 -2404:a000::/32 -2404:a080::/32 -2404:a0c0::/32 -2404:a180::/32 -2404:a240::/32 -2404:a740::/32 -2404:a80::/32 -2404:b100::/32 -2404:b340::/32 -2404:b3c0::/32 -2404:b440::/32 -2404:b4c0::/32 -2404:b80::/32 -2404:b900::/32 -2404:bbc0::/32 -2404:bc0::/32 -2404:bc40::/32 -2404:c1c0::/32 -2404:c240::/32 -2404:c2c0::/32 -2404:c300::/32 -2404:c3c0::/32 -2404:c40::/32 -2404:c440::/32 -2404:c4c0::/32 -2404:c540::/32 -2404:c5c0::/32 -2404:c640::/32 -2404:c940::/32 -2404:c9c0::/32 -2404:cd00::/32 -2404:d040::/32 -2404:d080::/32 -2404:d140::/32 -2404:d280::/32 -2404:d3c0::/32 -2404:d480::/32 -2404:d640::/32 -2404:d6c0::/32 -2404:d7c0::/32 -2404:d80::/32 -2404:d840::/32 -2404:dd80::/32 -2404:df00::/32 -2404:e280::/32 -2404:e540::/32 -2404:e5c0::/32 -2404:e780::/32 -2404:e880::/32 -2404:e8c0::/32 -2404:eb80::/32 -2404:ec40::/32 -2404:ecc0::/32 -2404:edc0::/32 -2404:f00::/32 -2404:f040::/32 -2404:f4c0::/32 -2404:f7c0::/32 -2404:f80::/32 -2405:1080::/32 -2405:1180::/32 -2405:1280::/32 -2405:1380::/32 -2405:1480::/32 -2405:1580::/32 -2405:1680::/32 -2405:18c0::/32 -2405:1c80::/32 -2405:1d80::/32 -2405:1e80::/32 -2405:1f80::/32 -2405:1fc0::/32 -2405:2080::/32 -2405:2180::/32 -2405:2280::/32 -2405:2340::/32 -2405:2380::/32 -2405:2480::/32 -2405:24c0::/32 -2405:2580::/32 -2405:2680::/32 -2405:2780::/32 -2405:2880::/32 -2405:2980::/32 -2405:2a80::/32 -2405:2b80::/32 -2405:2bc0::/32 -2405:2c80::/32 -2405:2d80::/32 -2405:2e80::/32 -2405:2ec0::/32 -2405:2f40::/32 -2405:2f80::/32 -2405:3140::/32 -2405:31c0::/32 -2405:37c0::/32 -2405:3880::/32 -2405:3980::/32 -2405:39c0::/32 -2405:3a80::/32 -2405:3ac0::/32 -2405:3b00::/32 -2405:3b80::/32 -2405:3bc0::/32 -2405:3c40::/32 -2405:3c80::/32 -2405:3d80::/32 -2405:3e80::/32 -2405:3f40::/32 -2405:3f80::/32 -2405:4080::/32 -2405:4140::/32 -2405:4180::/32 -2405:41c0::/32 -2405:4280::/32 -2405:4380::/32 -2405:4480::/32 -2405:44c0::/32 -2405:4540::/32 -2405:4580::/32 -2405:4680::/32 -2405:4780::/32 -2405:480::/32 -2405:4880::/32 -2405:4980::/32 -2405:4a80::/32 -2405:4b80::/32 -2405:4d40::/32 -2405:4e80::/32 -2405:4f80::/32 -2405:5080::/32 -2405:5180::/32 -2405:5240::/32 -2405:5280::/32 -2405:52c0::/32 -2405:5380::/32 -2405:5480::/32 -2405:5580::/32 -2405:5680::/32 -2405:5780::/32 -2405:57c0::/32 -2405:580::/32 -2405:5880::/32 -2405:5980::/32 -2405:5a80::/32 -2405:5b80::/32 -2405:5c80::/32 -2405:5cc0::/32 -2405:5d40::/32 -2405:5d80::/32 -2405:5dc0::/32 -2405:5e80::/32 -2405:5f80::/32 -2405:6080::/32 -2405:6180::/32 -2405:6200::/32 -2405:66c0::/32 -2405:680::/32 -2405:6880::/32 -2405:68c0::/32 -2405:6940::/32 -2405:69c0::/32 -2405:6a80::/32 -2405:6b80::/32 -2405:6c0::/32 -2405:6c80::/32 -2405:6d80::/32 -2405:6e80::/32 -2405:6f00::/32 -2405:6f80::/32 -2405:7040::/32 -2405:7080::/32 -2405:7180::/32 -2405:7240::/32 -2405:7280::/32 -2405:7380::/32 -2405:7480::/32 -2405:7580::/32 -2405:7680::/32 -2405:7780::/32 -2405:780::/32 -2405:7880::/32 -2405:78c0::/32 -2405:7980::/32 -2405:79c0::/32 -2405:7a80::/32 -2405:7b80::/32 -2405:7c80::/32 -2405:7d40::/32 -2405:7f40::/32 -2405:7fc0::/32 -2405:80::/32 -2405:8280::/32 -2405:8480::/32 -2405:84c0::/32 -2405:8580::/32 -2405:8680::/32 -2405:8780::/32 -2405:880::/32 -2405:8880::/32 -2405:8980::/32 -2405:8a40::/32 -2405:8a80::/32 -2405:8ac0::/32 -2405:8b80::/32 -2405:8c80::/32 -2405:8d80::/32 -2405:8e80::/32 -2405:8f40::/32 -2405:8f80::/32 -2405:9080::/32 -2405:9180::/32 -2405:9280::/32 -2405:9300::/32 -2405:9340::/32 -2405:9380::/32 -2405:93c0::/32 -2405:940::/32 -2405:9480::/32 -2405:94c0::/32 -2405:9580::/32 -2405:9680::/32 -2405:9700::/32 -2405:9780::/32 -2405:97c0::/32 -2405:980::/32 -2405:9880::/32 -2405:9900::/32 -2405:9980::/32 -2405:99c0::/32 -2405:9a80::/32 -2405:9b00::/32 -2405:9b80::/32 -2405:9bc0::/32 -2405:9c0::/32 -2405:9e00::/32 -2405:a240::/32 -2405:a3c0::/32 -2405:a500::/32 -2405:a680::/32 -2405:a80::/32 -2405:a900::/32 -2405:a980::/32 -2405:aa80::/32 -2405:ab00::/32 -2405:ad00::/32 -2405:af00::/32 -2405:b100::/32 -2405:b300::/32 -2405:b7c0::/32 -2405:b80::/32 -2405:b880::/32 -2405:b980::/32 -2405:bb00::/32 -2405:bd00::/32 -2405:bd80::/32 -2405:bdc0::/32 -2405:be80::/32 -2405:bf00::/32 -2405:c040::/32 -2405:c280::/32 -2405:c380::/32 -2405:c480::/32 -2405:c500::/32 -2405:c580::/32 -2405:c680::/32 -2405:c780::/32 -2405:c80::/32 -2405:c880::/32 -2405:c980::/32 -2405:ca80::/32 -2405:cb80::/32 -2405:cc80::/32 -2405:cd80::/32 -2405:ce80::/32 -2405:d280::/32 -2405:d4c0::/32 -2405:d700::/32 -2405:d740::/32 -2405:d80::/32 -2405:d900::/32 -2405:df40::/32 -2405:e000::/32 -2405:e040::/32 -2405:e1c0::/32 -2405:e600::/32 -2405:e80::/32 -2405:ed40::/32 -2405:ee80::/32 -2405:ef40::/30 -2405:f340::/32 -2405:f380::/32 -2405:f3c0::/32 -2405:f580::/32 -2405:f6c0::/32 -2405:f80::/32 -2405:f940::/32 -2405:fdc0::/32 -2405:fe80::/32 -2405:fec0::/32 -2405:ff80::/32 -2406:1080::/32 -2406:1100::/32 -2406:1180::/32 -2406:1280::/32 -2406:1380::/32 -2406:140::/32 -2406:1480::/32 -2406:1580::/32 -2406:15c0::/32 -2406:1680::/32 -2406:1780::/32 -2406:1880::/32 -2406:1980::/32 -2406:1a80::/32 -2406:1b80::/32 -2406:1c80::/32 -2406:1d80::/32 -2406:1e40::/32 -2406:1e80::/32 -2406:1f80::/32 -2406:2080::/32 -2406:2640::/32 -2406:2700::/32 -2406:2780::/32 -2406:280::/32 -2406:2880::/32 -2406:2980::/32 -2406:2a80::/32 -2406:2b80::/32 -2406:2c40::/32 -2406:2c80::/32 -2406:2d80::/32 -2406:2e80::/32 -2406:2f80::/32 -2406:3080::/32 -2406:3180::/32 -2406:31c0::/32 -2406:3280::/32 -2406:3300::/32 -2406:3340::/32 -2406:3380::/32 -2406:3440::/32 -2406:3480::/32 -2406:34c0::/32 -2406:3580::/32 -2406:3640::/32 -2406:3680::/32 -2406:3700::/32 -2406:3780::/32 -2406:3880::/32 -2406:3980::/32 -2406:39c0::/32 -2406:3ac0::/32 -2406:3d80::/32 -2406:3e80::/32 -2406:3f80::/32 -2406:4080::/32 -2406:40::/32 -2406:40c0::/32 -2406:4180::/32 -2406:4280::/32 -2406:42c0::/32 -2406:4340::/32 -2406:4380::/32 -2406:43c0::/32 -2406:440::/32 -2406:4480::/32 -2406:4500::/32 -2406:4680::/32 -2406:4b80::/32 -2406:4c0::/32 -2406:4c80::/32 -2406:4d00::/32 -2406:4d80::/32 -2406:4e80::/32 -2406:4f00::/32 -2406:4f80::/32 -2406:5080::/32 -2406:50c0::/32 -2406:5180::/32 -2406:5280::/32 -2406:52c0::/32 -2406:5340::/32 -2406:5380::/32 -2406:5480::/32 -2406:5580::/32 -2406:5680::/32 -2406:5780::/32 -2406:5840::/32 -2406:5880::/32 -2406:5940::/32 -2406:5980::/32 -2406:5a40::/32 -2406:5ac0::/32 -2406:5b40::/32 -2406:5d80::/32 -2406:5e80::/32 -2406:5f80::/32 -2406:6080::/32 -2406:6100::/32 -2406:6180::/32 -2406:61c0::/30 -2406:61c4::/30 -2406:6280::/32 -2406:6300::/32 -2406:6340::/32 -2406:6380::/32 -2406:6480::/32 -2406:6500::/32 -2406:6580::/32 -2406:65c0::/32 -2406:6640::/32 -2406:6680::/32 -2406:6780::/32 -2406:6880::/32 -2406:6980::/32 -2406:6a80::/32 -2406:6b80::/32 -2406:6bc0::/32 -2406:6c80::/32 -2406:6d80::/32 -2406:6e80::/32 -2406:6f80::/32 -2406:7080::/32 -2406:7280::/32 -2406:7380::/32 -2406:7480::/32 -2406:7580::/32 -2406:7680::/32 -2406:7780::/32 -2406:7880::/32 -2406:7980::/32 -2406:7a80::/32 -2406:7b80::/32 -2406:7c0::/32 -2406:7c80::/32 -2406:7cc0::/32 -2406:7d00::/32 -2406:7d80::/32 -2406:7e80::/32 -2406:7f80::/32 -2406:7fc0::/32 -2406:8080::/32 -2406:80::/32 -2406:8180::/32 -2406:8280::/32 -2406:8380::/32 -2406:840::/32 -2406:8480::/32 -2406:8500::/32 -2406:8580::/32 -2406:8780::/32 -2406:880::/32 -2406:8880::/32 -2406:8980::/32 -2406:8a80::/32 -2406:8b80::/32 -2406:8c0::/32 -2406:8c80::/32 -2406:8d80::/32 -2406:8e80::/32 -2406:8f40::/32 -2406:8f80::/32 -2406:9180::/32 -2406:9200::/32 -2406:9280::/32 -2406:9380::/32 -2406:9480::/32 -2406:94c0::/32 -2406:9780::/32 -2406:9c0::/32 -2406:9d80::/32 -2406:9e40::/32 -2406:9e80::/32 -2406:9f80::/32 -2406:a080::/32 -2406:a180::/32 -2406:a280::/32 -2406:a380::/32 -2406:a480::/32 -2406:a580::/32 -2406:a680::/32 -2406:a780::/32 -2406:a7c0::/32 -2406:a880::/32 -2406:a8c0::/32 -2406:a980::/32 -2406:aa80::/32 -2406:aac0::/32 -2406:ab80::/32 -2406:abc0::/32 -2406:ac80::/32 -2406:acc0::/32 -2406:ad40::/32 -2406:ad80::/32 -2406:ae80::/32 -2406:af80::/32 -2406:b080::/32 -2406:b640::/32 -2406:b880::/32 -2406:b980::/32 -2406:ba80::/32 -2406:bb80::/32 -2406:bc80::/32 -2406:bd40::/32 -2406:bd80::/32 -2406:bdc0::/32 -2406:be80::/32 -2406:bf80::/32 -2406:c080::/32 -2406:c0::/32 -2406:c180::/32 -2406:c280::/32 -2406:c340::/32 -2406:c480::/32 -2406:c580::/32 -2406:c680::/32 -2406:c780::/32 -2406:c880::/32 -2406:c900::/32 -2406:c980::/32 -2406:ca80::/32 -2406:cac0::/32 -2406:cb80::/32 -2406:cc80::/32 -2406:cd80::/32 -2406:ce80::/32 -2406:cf00::/32 -2406:cf01::/32 -2406:cf02::/31 -2406:cf80::/32 -2406:d080::/32 -2406:d140::/32 -2406:d180::/32 -2406:d280::/32 -2406:d2c0::/32 -2406:d380::/32 -2406:d440::/32 -2406:d480::/32 -2406:d580::/32 -2406:d680::/32 -2406:d780::/32 -2406:d80::/32 -2406:d880::/32 -2406:d980::/32 -2406:db80::/32 -2406:dc80::/32 -2406:dd00::/32 -2406:dd80::/32 -2406:de80::/32 -2406:df80::/32 -2406:e080::/32 -2406:e180::/32 -2406:e2c0::/32 -2406:e380::/32 -2406:e3c0::/32 -2406:e500::/32 -2406:e580::/32 -2406:e680::/32 -2406:e780::/32 -2406:e80::/32 -2406:e8c0::/32 -2406:ea40::/28 -2406:f280::/32 -2406:f300::/32 -2406:f4c0::/32 -2406:f7c0::/32 -2406:f80::/32 -2406:f980::/32 -2406:fc80::/32 -2406:fd80::/32 -2406:fe80::/32 -2406:ff00::/32 -2407:1180::/32 -2407:17c0::/32 -2407:1900::/32 -2407:1d00::/32 -2407:1e80::/32 -2407:2280::/32 -2407:2380::/32 -2407:23c0::/32 -2407:2440::/32 -2407:2780::/32 -2407:2840::/32 -2407:2ac0::/32 -2407:31c0::/32 -2407:3340::/32 -2407:3540::/32 -2407:3700::/32 -2407:3740::/32 -2407:37c0::/32 -2407:3900::/32 -2407:3f40::/32 -2407:43c0::/32 -2407:4440::/32 -2407:4580::/32 -2407:4680::/32 -2407:4740::/32 -2407:480::/32 -2407:4880::/32 -2407:4980::/32 -2407:4a80::/32 -2407:4c80::/32 -2407:4d80::/32 -2407:4e80::/32 -2407:4f00::/32 -2407:5380::/32 -2407:53c0::/32 -2407:5500::/32 -2407:5780::/32 -2407:580::/32 -2407:5840::/32 -2407:6040::/32 -2407:6580::/32 -2407:6c40::/32 -2407:7680::/32 -2407:7780::/32 -2407:7880::/32 -2407:7980::/32 -2407:7c80::/32 -2407:7d00::/32 -2407:7d80::/32 -2407:7e80::/32 -2407:8880::/32 -2407:8b80::/32 -2407:8f40::/32 -2407:9080::/32 -2407:9180::/32 -2407:94c0::/32 -2407:9680::/32 -2407:9980::/32 -2407:9b40::/32 -2407:9bc0::/32 -2407:9f00::/32 -2407:9f80::/32 -2407:a040::/32 -2407:a480::/32 -2407:a640::/32 -2407:a7c0::/32 -2407:a880::/32 -2407:a940::/32 -2407:ad80::/32 -2407:ae80::/32 -2407:af80::/32 -2407:b080::/32 -2407:b180::/32 -2407:b280::/32 -2407:b380::/32 -2407:b580::/32 -2407:b680::/32 -2407:b780::/32 -2407:b880::/32 -2407:b980::/32 -2407:ba00::/32 -2407:ba80::/32 -2407:bb80::/32 -2407:bc00::/32 -2407:bc80::/32 -2407:bd80::/32 -2407:bdc0::/32 -2407:be80::/32 -2407:bf80::/32 -2407:c080::/32 -2407:c380::/32 -2407:c400::/32 -2407:c480::/32 -2407:c580::/32 -2407:c680::/32 -2407:c780::/32 -2407:c880::/32 -2407:c900::/32 -2407:c980::/32 -2407:cb80::/32 -2407:cc0::/32 -2407:cc80::/32 -2407:cd80::/32 -2407:ce80::/32 -2407:cf00::/32 -2407:cf80::/32 -2407:d480::/32 -2407:d580::/32 -2407:d680::/32 -2407:d780::/32 -2407:d7c0::/32 -2407:d880::/32 -2407:d8c0::/32 -2407:d980::/32 -2407:d9c0::/32 -2407:da80::/32 -2407:db80::/32 -2407:dc80::/32 -2407:dd80::/32 -2407:de80::/32 -2407:df80::/32 -2407:dfc0::/32 -2407:e080::/32 -2407:e180::/32 -2407:e280::/32 -2407:e380::/32 -2407:e480::/32 -2407:e580::/32 -2407:e680::/32 -2407:e780::/32 -2407:e800::/32 -2407:ea80::/32 -2407:eb80::/32 -2407:ec40::/32 -2407:ec80::/32 -2407:ecc0::/32 -2407:ed80::/32 -2407:ee80::/32 -2407:ef80::/32 -2407:f080::/32 -2407:f180::/32 -2407:f280::/32 -2407:f380::/32 -2407:f40::/32 -2407:f480::/32 -2407:f580::/32 -2407:f680::/32 -2407:f780::/32 -2407:f880::/32 -2407:f980::/32 -2407:fa80::/32 -2407:fb80::/32 -2407:fc80::/32 -2407:fd80::/32 -2408:4000::/22 -2408:6000::/24 -2408:8000::/22 -2408:8400::/22 -2408:8800::/21 -2409:2000::/21 -2409:6000::/20 -2409:8000::/20 -240a:2000::/24 -240a:4000::/21 -240a:6000::/24 -240a:8000::/21 -240a:a000::/20 -240a:c000::/20 -240b:2000::/22 -240b:8000::/21 -240c:4000::/22 -240c:8000::/21 -240c::/28 -240c:c000::/20 -240d:4000::/21 -240d:8000::/24 -240e:1000::/20 -240e:100::/24 -240e:2000::/19 -240e:200::/23 -240e:400::/22 -240e:800::/21 -240e::/24 -240f:4000::/24 -240f:8000::/24 -240f:c000::/24 diff --git a/luci-app-passwall/root/usr/share/passwall/rules/direct_host b/luci-app-passwall/root/usr/share/passwall/rules/direct_host deleted file mode 100644 index dd507f31..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/direct_host +++ /dev/null @@ -1,18 +0,0 @@ -apple.com -microsoft.com -dyndns.com -douyucdn.cn -douyucdn2.cn - -#steam -steamcontent.com -dl.steam.clngaa.com -dl.steam.ksyna.com -st.dl.bscstorage.net -st.dl.eccdnx.com -st.dl.pinyuncloud.com -cdn.mileweb.cs.steampowered.com.8686c.com -cdn-ws.content.steamchina.com -cdn-qc.content.steamchina.com -cdn-ali.content.steamchina.com -epicgames-download1-1251447533.file.myqcloud.com diff --git a/luci-app-passwall/root/usr/share/passwall/rules/direct_ip b/luci-app-passwall/root/usr/share/passwall/rules/direct_ip deleted file mode 100644 index 90293cda..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/direct_ip +++ /dev/null @@ -1,6 +0,0 @@ -114.114.114.114 -114.114.115.115 -223.5.5.5 -223.6.6.6 -119.29.29.29 -180.76.76.76 diff --git a/luci-app-passwall/root/usr/share/passwall/rules/gfwlist b/luci-app-passwall/root/usr/share/passwall/rules/gfwlist deleted file mode 100644 index dc876e9b..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/gfwlist +++ /dev/null @@ -1,12011 +0,0 @@ -01.org -0emm.com -0plkijj.vip -0x0.st -100beatscheap.com -100classicbooks.com -1010.com.hk -10xfotolia.com -112263.com -114av.xyz -123-hp.com -123hplaserjet.com -128100.xyz -12diasdepresentesdeitunes.com -12diasderegalosdeitunes.cl -12diasderegalosdeitunes.co -12diasderegalosdeitunes.co.cr -12diasderegalosdeitunes.co.ni -12diasderegalosdeitunes.co.ve -12diasderegalosdeitunes.com -12diasderegalosdeitunes.com.co -12diasderegalosdeitunes.com.hn -12diasderegalosdeitunes.com.ni -12diasderegalosdeitunes.com.ve -12diasderegalosdeitunes.cr -12diasderegalosdeitunes.gt -12diasderegalosdeitunes.hn -12diasderegalosdeitunes.pe -12joursdecadeauxdeitunes.com -1337x.gd -1337x.is -1337x.st -1337x.to -1337x.tw -1337xto.to -1337xx.to -16fhgdty.xyz -18novel.xyz -18p2p.com -1degree.com.au -1drv.com -1drv.ms -1e100.net -1jjdg2.vip -1jsa22.vip -1monsterbeatsbydreus.com -1pondo.tv -1to1computing.com.au -1to1conference.com.au -1ucrs.com -2013beatsbydrdreonline.com -2013beatsbydrdreshop.com -2013beatsbydreshop.com -2013beatshdcybermonday.com -2013cheapestbeats.com -2013newbeatsworld.com -2013pascherbeatsbydre.com -2014cheapbeatsbydre.com -20thcenturystudios.com.au -20thcenturystudios.com.br -20thcenturystudios.jp -21centuryaccess.com -2beatsdre.com -2buybeatsbydre.com -2ch.net -2drdrebeats.com -2mdn.net -2o7.net -40shopping.com -466453.com -47gyosei.jp -47news.jp -4beatsbydre.com -4cdn.org -4chan.org -4channel.org -4ebaytraders.com -4gtv.tv -4myminicard.com -51dh.site -520aa.tv -5278.cc -52hyse.com -53world.com -53worldsweeps.com -54647.global -54647.io -54647.online -5beatsbydre.com -5ch.net -5i01.com -5lml.com -69story.com -69vj.com -721av.com -7mm.tv -8008206616.com -85tube.com -881903.com -8muses.com -91.51rmc.com -91porn.com -920share.com -928.plus -9anime.cz -9anime.id -9anime.to -9anime.ws -9cdn.net -9nation.com.au -9news.com.au -9now.com.au -9to5google.com -9to5mac.com -9to5terminal.com -9to5toys.com -a.91gay.me -a.kslive.tv -a0pple.net -a2z.com -aaagradeheadphones.com -aaex.uk -aanaan.com -aapl.tw -aavs.xyz -abc-studios.com -abc.com -abc.xyz -abcheadphones.com -abeatsbydrdre.com -abema.io -abema.tv -abematv.akamaized.net -aboutamazon.co.uk -aboutamazon.com -aboutamazon.com.au -aboutamazon.de -aboutamazon.es -aboutamazon.eu -aboutamazon.fr -aboutamazon.in -aboutamazon.it -aboutamazon.jp -aboutamazon.pl -aboutfacebook.com -aboutmcdonalds.com -aboutyourmini.com -abow.jp -ac-pocketcamp.com -academynetriders.com -accbusiness.com -accessfacebookfromschool.com -account-paypal.info -account-paypal.net -account-paypal.org -accountkit.com -accountpaypal.com -accountpaypal.net -accountpaypal.org -accuweather.com -acebooik.com -acebook.com -acer-group.com -acer.com -achat-followers-instagram.com -acheter-followers-instagram.com -acheterdesfollowersinstagram.com -acheterfollowersinstagram.com -achievementanalytics.com -aclweb.org -acm.org -acmvalidations.com -acmvalidationsaws.com -acpica.com -acrobat.com -acs.org -activelearnprimary.co.uk -activelearnprimary.com.au -activeteachonline.com -adaptivecards.io -adbecrsl.com -adblockplus.org -adcommerce.tv -addison-wesley.ch -addthis.com -addthiscdn.com -addthisedge.com -addtoany.com -adelaidenow.com.au -adgoogle.net -adguard-vpn.com -adguard.com -adhelpnews.com -adidas.at -adidas.be -adidas.ch -adidas.co.in -adidas.co.uk -adidas.com -adidas.com.sa -adidas.com.tw -adidas.cz -adidas.de -adidas.dk -adidas.hu -adidas.ie -adidas.it -adidas.nl -adidas.pl -adidas.ru -adidas.se -admeld.com -admob.com -adobe-aemassets-value.com -adobe-audience-finder.com -adobe-video-partner-finder.com -adobe.com -adobe.io -adobe.ly -adobeaemcloud.com -adobeaemcloud.net -adobeawards.com -adobecc.com -adobecce.com -adobeccstatic.com -adobecontent.io -adobecreativityawards.com -adobedc.net -adobedemo.com -adobedtm.com -adobeexchange.com -adobeexperienceawards.com -adobegov.com -adobehiddentreasures.com -adobejanus.com -adobeku.com -adobelanding.com -adobelogin.com -adobeoobe.com -adobeplatinumclub.com -adobepress.ch -adobeprojectm.com -adobesc.com -adobesign.com -adobesigncdn.com -adobespark.com -adobess.com -adobestock.com -adobetag.com -adobetarget.com -adobetcstrialdvd.com -adobetechcomm.com -adobetechcommcallback.com -adobetechcommdemo.com -adobexdplatform.com -ads-twitter.com -ads.pubmatic.com -ads.yahoo.com -adsense.com -adsensecustomsearchads.com -adsenseformobileapps.com -advancediddetection.com -adventuresbydisney.com -advertisercommunity.com -advertiserscommunity.com -adwords-community.com -adwords.com -adwordsexpress.com -adx.promo -aeasyshop.com -aerogard.com.au -aerogardcn.com -aesworkshops.com -afewmomentswith.com -afp.com -afpforum.com -agendaweek.com -agzy1.com -ahmia.fi -aiasahi.jp -aibaobei.me -aimei133.com -air-nike-shoes.com -air-watch.com -airav.cc -airgonetworks.com -airhorn.solutions -airhornbot.com -airiti.com -airitilibrary.com -airmax360.com -airmay.com -airport-gov-cn.com -airport.brussels -airport.com -airport.eu -airsupportapp.com -airtunes.com -airtunes.info -airtunes.net -airwatchexpress.com -airwatchqa.com -airwick.at -airwick.be -airwick.ca -airwick.ch -airwick.cl -airwick.co.in -airwick.co.nz -airwick.co.uk -airwick.co.za -airwick.com -airwick.com.au -airwick.com.br -airwick.com.mx -airwick.com.tr -airwick.cz -airwick.de -airwick.dk -airwick.es -airwick.fi -airwick.fr -airwick.hr -airwick.hu -airwick.ie -airwick.it -airwick.jp -airwick.net -airwick.nl -airwick.no -airwick.pl -airwick.pt -airwick.ro -airwick.ru -airwick.se -airwick.si -airwick.sk -airwick.tv -airwick.us -airwickarabia.com -aiv-cdn.net -ajplus.net -ajtalk.com -ak1.net -aka-ai.com -aka-ai.net -aka.ms -akacrypto.net -akadeem.net -akadns.com -akadns6.net -akaeai.com -akafms.net -akahost.net -akaint.net -akam.net -akamaa.com -akamah.com -akamai-access.com -akamai-access.net -akamai-cdn.com -akamai-platform-internal.net -akamai-platform-staging.com -akamai-platform.net -akamai-regression.net -akamai-staging.net -akamai-sucks.net -akamai-thailand.com -akamai-thailand.net -akamai-trials.com -akamai.co.kr -akamai.com -akamai.net -akamaientrypoint.net -akamaietpcnctest.com -akamaietpcompromisedcnctest.com -akamaietpcompromisedmalwaretest.com -akamaietpmalwaretest.com -akamaietpphishingtest.com -akamaihd-staging.net -akamaihd.com -akamaihd.net -akamaimagicmath.net -akamainewzealand.com -akamaiphillipines.com -akamaiphillipines.net -akamaisingapore.net -akamaitech.com -akamaitech.net -akamaitechnologies.com -akamaitechnologies.net -akamaized-staging.net -akamaized.net -akamaizercentral.com -akamak.com -akamam.com -akamci.com -akami.com -akami.net -akamii.com -akamqi.com -akasha.world -akastream.com -akastream.net -akatns.net -albeats.com -alchemysynth.com -alexa.com -alfera.com.hk -alfera.com.my -alfera.in -alfera.my -alibabacloud.co.in -alibabacloud.com -alibabacloud.com.au -alibabacloud.com.hk -alibabacloud.com.my -alibabacloud.com.sg -alibabacloud.com.tw -alicloud.com -aliveipc.com -aliveitsm.com -aliveprofiler.com -alivercm.com -aliverewind.com -alivertsm.com -alivevm.com -alivevmax.com -alivevue.com -aljazeera.com -aljazeera.net -alphabet.asia -alphabet.at -alphabet.be -alphabet.biz -alphabet.ch -alphabet.co.hu -alphabet.co.uk -alphabet.co.za -alphabet.com -alphabet.com.es -alphabet.com.lv -alphabet.com.mx -alphabet.com.pl -alphabet.com.pt -alphabet.cz -alphabet.de -alphabet.es -alphabet.eu -alphabet.fr -alphabet.info -alphabet.jp -alphabet.lt -alphabet.lu -alphabet.lv -alphabet.mx -alphabet.no -alphabet.org.uk -alphabet.pl -alphabet.pt -alphabet.uk -alphabet.us -alphabetfinance.net -alphera-finance.co.in -alphera-finance.com.hk -alphera-finance.in -alphera.ca -alphera.co.in -alphera.co.nz -alphera.com -alphera.com.es -alphera.com.hk -alphera.com.my -alphera.de -alphera.es -alphera.ie -alphera.in -alphera.my -alphera.net -alpherafinance.com.hk -alpherafinancialservices.es -alpherafinancialservices.in -alpherafs.ca -alpherafs.co.nz -alpherafs.com.hk -alpherafs.com.my -alpherafs.ie -alpherafs.in -alpherafs.my -alpinelinux.org -altera.com -alteraforum.com -alteraforums.com -alteraforums.net -alterauserforum.com -alterauserforum.net -alterauserforums.com -alterauserforums.net -altmetric.com -am730.com.hk -amaaozn.com -amamanualofstyle.com -amazon-adsystem.com -amazon-fashions.com -amazon-jp-recruiting.com -amazon-lantern.com -amazon-launchpad.com -amazon.ae -amazon.ca -amazon.co.jp -amazon.co.uk -amazon.com -amazon.com.au -amazon.com.br -amazon.com.mx -amazon.com.tr -amazon.de -amazon.es -amazon.fr -amazon.in -amazon.it -amazon.jobs -amazon.jp -amazon.nl -amazon.red -amazon.sg -amazonalexavoxcon.com -amazonauthorinsights.com -amazonaws-china.com -amazonaws.co.uk -amazonaws.com -amazonaws.tv -amazonbusiness.org -amazonbusinessblog.com -amazondevicesupport.com -amazonfctours.com -amazonianblog.com -amazonimages.com -amazonlaunchpad.com -amazonliterarypartnership.com -amazonlumberyard.wang -amazonpay.com -amazonpay.in -amazonprimevideos.com -amazonsdi.com -amazonstudiosguilds.com -amazontrust.com -amazonvideo.cc -amazonvideo.com -amazonvideodirect.com -amazonworkdocs.com -amd.com -amdfanstore.com -ameba.jp -amebame.com -amebaownd.com -amebaowndme.com -ameblo.jp -americasvoice.news -amerikaninsesi.com -amerikaninsesi.org -amerikaovozi.com -amerikayidzayn.com -amerikiskhma.com -amiibo.com -amp.akamaized.net -amp.dev -amplifyapp.com -amplifyframework.com -ampproject.com -ampproject.net -ampproject.org -ams02.space -amytele.com -amzn.com -amzn.to -amznl.com -anaconda.cloud -anaconda.com -anaconda.org -analytictech.com -anandtech.com -anb.org -android.com -androidify.com -andysparis.com -anfutong.com -angelbeats.jp -angulardart.org -anidom.com -anigema.jp -animedao-tv.com -animezilla.com -ankarazirvesi2018.com -anm.co.uk -annstores.net -annualreviews.org -anthemgame.com -anthemthegame.com -ao3.org -aokwholesale.net -aomedia.org -aorus.com -ap.org -ap0le.com -apa.org -apache.org -apexlegends.com -apexprint.com.hk -api-extractor.com -api-p.videomarket.jp -api-priconne-redive.cygames.jp -api.ai -api.news -api.viu.now.com -apibay.org -apigee.com -apisof.net -apkmirror.com -apkpure.com -aple.com -aplestore.com -aplleipods.com -apnews.com -apole.com -app-dynamics.com -app-measurement.com -app-store.wang -app0le.com -appbridge.ca -appbridge.io -appbridge.it -appcenter.ms -appcloud.com -appdomain.cloud -appdynamics.co.uk -appdynamics.com -appdynamics.de -appdynamics.fr -appdynamics.info -appdynamics.jp -appdynamics.org -appe-store.com -appexchange.com -appl-e.com -appl.com -appl4e.com -appla.com -apple-cloudkit.com -apple-darwin.com -apple-darwin.net -apple-darwin.org -apple-dns.com -apple-dns.net -apple-enews.com -apple-expo.com -apple-expo.eu -apple-hk.com -apple-imac.com -apple-inc.net -apple-livephotoskit.com -apple-mapkit.com -apple-online.com -apple-pay.com -apple-pay.rs -apple-pay.wang -apple-store.net -apple-store.wang -apple-usa.net -apple-watch.com.ru -apple.ae -apple.at -apple.be -apple.bg -apple.bs -apple.ca -apple.ch -apple.cl -apple.cm -apple.co -apple.co.cr -apple.co.hu -apple.co.jp -apple.co.kr -apple.co.mz -apple.co.nz -apple.co.th -apple.co.uk -apple.cz -apple.de -apple.dk -apple.ee -apple.es -apple.eu -apple.fi -apple.fr -apple.hamburg -apple.hn -apple.hr -apple.hu -apple.ie -apple.in -apple.is -apple.it -apple.jo -apple.jp -apple.kr -apple.lk -apple.lt -apple.lv -apple.me -apple.my -apple.net -apple.net.gr -apple.news -apple.nl -apple.no -apple.pk -apple.pl -apple.pt -apple.ro -apple.rs -apple.ru -apple.sa -apple.se -apple.sg -apple.si -apple.sk -apple.so -apple.tt -apple.tw -apple.uk -apple.us -apple.xn--czr694b -apple.xn--fiqs8s -apple.xyz -appleaccount.net -appleafrica.com -appleantilles.com -appleappstore.net -appleappstore.tv -appleaustralia.com -appleaustralia.com.au -appleaustralia.net.au -applebk.net -applecarbon.com -applecard.tv -applecare.berlin -applecare.cc -applecare.eu -applecare.hamburg -applecare.wang -applecensorship.com -applecentar.co.rs -applecentar.rs -applecentre.com.au -applecentre.info -appleclassicipod.com -appleclub.com.hk -applecom.com -applecomputer-imac.com -applecomputer.co.in -applecomputer.co.nz -applecomputer.com -applecomputer.com.hk -applecomputer.com.tw -applecomputer.hu -applecomputer.kr -applecomputerimac.com -applecomputerinc.info -applecomputers.co.nz -applecoronavirus.com -appledaily.com -appledaily.com.hk -appledaily.com.tw -appledaily.hk -appledarwin.com -appledarwin.net -appleenews.com -appleexpo.eu -appleexpo.info -applefilmaker.com -applefilmmaker.com -applefinalcutproworld.com -applefinalcutproworld.net -applefinalcutproworld.org -applefruity.com -applehealth.com.hk -applehongkong.com -applehongkong.com.hk -appleid-applemx.com -appleid-applemx.us -appleid-iclou.com -appleid-uk.us -appleid.berlin -appleid.com -appleid.hamburg -appleid.hk -appleimac.com -appleinclegal.com -appleinsider.com -appleiphone.hu -appleiphone.net -appleiphonecell.com -appleipodsettlement.com -appleiservices.com -applelink.com -applemagickeyboard.com -applemalaysia.com.my -applemasters.info -applemusic.berlin -applemusic.co -applemusic.com -applemusic.com.au -applemusic.hamburg -applemusic.wang -applemusicconnect.com -applemusicfestival.com -applemx-icloud.com -applenews.berlin -applenews.hamburg -applenews.tv -applenewsformat.com -appleone.audio -appleone.blog -appleone.chat -appleone.cloud -appleone.club -appleone.community -appleone.film -appleone.guide -appleone.host -appleone.space -appleone.tech -appleone.website -appleonline.com -appleonline.net -appleoriginalproductions.com -appleos.tv -applepay.berlin -applepay.co.rs -applepay.com.tw -applepay.hamburg -applepay.hk -applepay.info -applepay.jp -applepay.rs -applepay.tv -applepaycash.net -applepaycash.tv -applepaymerchantsupplies.info -applepaysupplies.berlin -applepaysupplies.com -applepaysupplies.info -applepaysupplies.net -applepaysupplies.tv -applepencil.net -applepodcasts.com -applepremiumreseller.com.au -applepremiumresellers.com.au -applereach.com -applereach.net -apples-msk.ru -applescreensavers.com -applescript.info -appleshare.info -appleshop.co.uk -applestor.com -applestore.bg -applestore.cc -applestore.ch -applestore.cm -applestore.co.hu -applestore.co.jp -applestore.co.ug -applestore.co.uk -applestore.com -applestore.com.au -applestore.com.bn -applestore.com.ee -applestore.com.eg -applestore.com.gr -applestore.com.hk -applestore.com.hr -applestore.com.jo -applestore.com.my -applestore.com.ph -applestore.com.pl -applestore.com.pt -applestore.com.ro -applestore.com.ru -applestore.com.sn -applestore.com.tw -applestore.de -applestore.hk -applestore.kr -applestore.me -applestore.net -applestore.net.gr -applestore.ph -applestore.qa -applestore.sg -applestore.wang -applestoreonline.com -applestorepro.eu -applesurveys.com -appleswift.com -appletaiwan.com -appletips.net -appletv.com -appletv.fr -appletv.wang -appletvapp.apple -applewallet.com -applewallet.tv -applewatch.hk -applewatch.tv -applewatch.tw -applewatch.wang -applewatchedition.com -applewatchseries3.net -applewatchsport.com -appleweb.net -appleworldwidedeveloper.hb-api.omtrdc.net -appleworldwidedeveloper.sc.omtrdc.net -applexpo.net -applezh.com -applf.com -applfe.com -applicationinsights.io -applicationinsights.net -applle.com -applw.com -appmediagroup.com -approvedusedbmw.com -appsonebay.net -appspot.com -appsto.re -appstore.co.id -appstore.hk -appstore.my -appstore.ph -appule.com -appye.com -apress.com -aps.org -aptoide.com -apture.com -apyle.com -aranzadi.es -arcgis.com -arcgisonline.com -archive.org -archiveofourown.com -archiveofourown.net -archiveofourown.org -archlinux.org -archlinuxarm.org -area120.com -arewereadyyet.com -areyoucreditwise.com -aria.ms -ark.to -arphic.com -arphic.com.cn -arphic.com.tw -artstation.com -artstationmedia.com -arxiv.org -as-hp.ca -asagaku.com -asahi.com -asahicom.jp -asahishimbun.sc.omtrdc.net -asakonet.co.jp -asebay.com -asha.org -asianpornmovies.com -askfacebook.net -askfacebook.org -askubuntu.com -asp-cc.com -asp.net -aspnetcdn.com -asproex.com -asproexapi.com -assetsadobe.com -associates-amazon.com -assylum.com -asto.re -asus.com -atandt.com -atdmt2.com -ateam-oracle.com -atlantaminidealers.com -atlasdmt.com -atlasonepoint.com -atlassian.com -atnext.com -atom.io -atscaleconference.com -att-bundles.com -att-idns.net -att-japan.com -att-mail.com -att-promotions.com -att-rsvp.com -att.com -att.jobs -att.net -att.tv -attalascom.com -attbelieves.com -attbusiness.net -attcenter.com -attcollaborate.com -attdns.com -attdns.net -attexperts.com -attglobal.net -attic.io -attinnovationspace.com -attinternetservice.com -attjoy.com -attnetclient.com -attonlineoffers.com -attproxy.com -attpublicpolicy.com -attpurchasing.com -attsavings.com -attspecial.com -attssl.com -attstadium.com -attsuppliers.com -atttvnow.com -attuverseoffers.com -attuverseonline.com -attvoip.com -attwatchtv.com -attwifi.com -attwirelessinternet.com -attwirelessonline.com -attwirelesssolutions.com -atypi.org -aucheapbeats.com -audible.com -audiencenetwork.com -audiencenetwork.tv -audio-ak-spotify-com.akamaized.net -audiobeatsau.com -audiobeatsbydre.com -audiomonsterbeatsonline.com -auricularemonsterbeats.com -auricularesbeatsbaratosshop.com -auricularesbeatsmarkt.com -ausbeatsbydrdre.com -authorxml.com -authy.com -autodesk.com -autodraw.com -automobile.fr -av01.tv -av1688.cc -av6k.com -avatargarenanow-a.akamaihd.net -avbebe.com -avfox.cc -avgle.com -avh.world -avinetworks.com -avinin.com -avmoo.casa -avmoo.com -avmoo.cyou -avn.com -avpanda.cc -avsee01.tv -avseesee.com -avsforum.com -avxde.org -avxhm.is -avxhm.se -avxlive.icu -awayoutgame.com -aweencore.com -awetv.com -aws-iot-hackathon.com -awsautopilot.com -awsautoscaling.com -awsbraket.com -awscommandlineinterface.com -awsedstart.com -awseducate.com -awseducate.net -awseducate.org -awsloft-johannesburg.com -awsloft-stockholm.com -awssecworkshops.com -awsstatic.com -awsthinkbox.com -awstrust.com -axios.com -ayudanintendo.com -azadiradio.com -azadliq.org -azathabar.com -azatliq.org -azattyk.org -azattyq.org -azatutyun.am -aznude.com -azure-dns.com -azure-dns.info -azure-dns.net -azure-dns.org -azure-mobile.net -azure-sphere.com -azure-test.net -azure.com -azure.microsoft.com -azure.net -azurecomcdn.net -azurecontainer.io -azurecosmos.net -azurecosmosdb.com -azurecosmosdb.info -azurecosmosdb.net -azuredatabricks.net -azuredevopslaunch.com -azuredigitaltwin.com -azuredigitaltwins.com -azuredigitaltwins.net -azuredns-prd.info -azuredns-prd.org -azureedge-test.net -azureedge.net -azureiotcentral.com -azureiotsolutions.com -azureiotsuite.com -azuremarketplace.microsoft.com -azureplanetscale.info -azureplanetscale.net -azureserviceprofiler.com -azuresmartspaces.net -azurestackvalidation.com -azurewebsites.net -baazee.com -babble.com -babyzone.com -badaas.com -badgen.net -bag-glasses1.com -bahamut.com.tw -baicaonetwork.com -baltimorebmw.com -bamgrid.com -bandag.cc -bandag.com -bandcamp.com -bandgirlz.com -bandpage.com -bandwagonhost.com -bangbros.com -banned.video -barefootnetworks.com -barkadahansasmartone.com -barrons-advisor.com -barrons-conferences.com -barrons.com -baselinestudy.com -baselinestudy.org -bastillepost.com -bastropfirestone.com -baterias-hp.com -battle.net -battlebreakers.com -battlefield.com -battlefield1943.com -battlefield3.com -battlefield4.com -battlefield5.com -battlefieldbadcompany2.com -battlefieldheroes.com -battlefieldv.com -battlefront2.com -battlefrontii.com -battlelog.com -baxsound.com -bayareabmw.com -bayvoice.net -bazel.build -bbc.co.uk -bbc.com -bbc.in -bbc.net.uk -bbcfmt.s.llnwi.net -bbci.co.uk -bbcmedia.co.uk -bbcpersian.com -bbcverticals.com -bbestmall.com -bbg.gov -bbgevent.com -bbgwatch.com -bbhub.io -bbthat.com -bby.com -bbycastatic.ca -bbycloud.com -bbycontent.com -bbycontent.net -bbyintl.com -bbystatic.com -bbyurl.us -bcbits.com -bcicdn.com -bcove.video -bcovlive-a.akamaihd.net -bcovlive.io -bcrncdn.com -bcsecure01-a.akamaihd.net -bcvp0rtal.com -bdn.dev -beatbd.com -beatbydre2013.com -beatbydreheadphonesonsale.com -beatbydrekopen.com -beatbydremonster.com -beatbydreuk2014.com -beatdrdres.com -beatfactoryoutlets.com -beatmonstersaustralia.net -beats-by-dre-australia.com -beats-bydrdre.net -beats-bydre-mall.com -beats-bydrecheapsale.com -beats-bydreoutletonline.com -beats-bydreoutletsale.com -beats-bydreoutletsale.net -beats-bydreoutletssale.net -beats-bydrestore.com -beats-bydreuk.com -beats-deal.com -beats-dre-us.com -beats-headphones-buy-cheap.com -beats-headphones.us -beats-sale.com -beats-seller.com -beats-soaho.com -beats1.cc -beats1.tv -beats123.com -beats4.net -beats4outlets.com -beats4salecheap.com -beatsallsale.com -beatsaudifonos.com -beatsaudiobydre.com -beatsaudiobydre.net -beatsaudios.net -beatsbeatsmonster.com -beatsbestdeals.com -beatsblackfridaydeals.net -beatsblackfridayretails.com -beatsboxingdayuksale.com -beatsbydrdre-headphones.com -beatsbydrdre-officials5.com -beatsbydrdre-online.com -beatsbydrdre-onsale.com -beatsbydrdre-store.com -beatsbydrdre-store.us -beatsbydrdre4sale.com -beatsbydrdrebiz.com -beatsbydrdrecustom.com -beatsbydrdredanmark.com -beatsbydrdremall.com -beatsbydrdreoutlet.com -beatsbydrdres.com -beatsbydrdresale.net -beatsbydrdrestore.com -beatsbydrdreus.com -beatsbydre-beatsheadphone.com -beatsbydre-chen.com -beatsbydre-club.com -beatsbydre-headphones.com -beatsbydre-headphonesshop.com -beatsbydre-mall.com -beatsbydre-outlet.com -beatsbydre-outletsale.net -beatsbydre-outletstore.com -beatsbydre-sell.com -beatsbydre-store.com -beatsbydre-studio.com -beatsbydre-us.com -beatsbydre.jp -beatsbydre2081.com -beatsbydre411.com -beatsbydre4usales.com -beatsbydreauofficial.com -beatsbydreausale.net -beatsbydreaustralia-sale.com -beatsbydreaustraliaonline.com -beatsbydreaustraliaonlines.com -beatsbydreaustraliasales.com -beatsbydrebeatsby.com -beatsbydreblackfriday2013.com -beatsbydreblackfridaypro.com -beatsbydreboxingdayca.com -beatsbydrecasquesfr.com -beatsbydrecheap-outletstore.com -beatsbydrecheaper.com -beatsbydrecheaponlinesales.com -beatsbydrecolors.com -beatsbydrecustomwireless.com -beatsbydrecybermondaydeals2013.com -beatsbydrecybermondaydeals2013.net -beatsbydredanmarks.com -beatsbydredealsblackfriday.com -beatsbydredealscybermonday.com -beatsbydrediscount.com -beatsbydrediscountonline.net -beatsbydredr.com -beatsbydreexecutivesale.com -beatsbydreformall2013-nl.com -beatsbydreforsalesonline.com -beatsbydreforshop2013-nl.com -beatsbydreforstore.com -beatsbydreforyououtlet.com -beatsbydrefr.com -beatsbydrefrcasquepascher.com -beatsbydrefriday.com -beatsbydregot.com -beatsbydrehd.com -beatsbydrehd.net -beatsbydreheadphones-nz.com -beatsbydreheadphonesolo.com -beatsbydrehut.com -beatsbydreinexpensive.com -beatsbydreireland-sales.com -beatsbydreirelandonlines.com -beatsbydreirelandsale.com -beatsbydreirelandsonline.com -beatsbydremall2013.com -beatsbydremonsteraustralia.com -beatsbydrenls.com -beatsbydrenorge1.net -beatsbydreofficialdanmark.com -beatsbydreoksale.com -beatsbydreol.com -beatsbydreonlie2013-nl.com -beatsbydreonlines-ireland.com -beatsbydreonlines-uk.com -beatsbydreonlinesale-nz.com -beatsbydreoordopjes.com -beatsbydreoslo.com -beatsbydreoutletsale.com -beatsbydreoutletscheap.com -beatsbydrerealstore.com -beatsbydres-shop.com -beatsbydresale-uk.com -beatsbydresalemall2013.com -beatsbydresaleonlines-nz.com -beatsbydresales.us -beatsbydresalesonline-australia.com -beatsbydresdanmark.net -beatsbydreshop-uk.com -beatsbydreshops.net -beatsbydresingapores.com -beatsbydresingaporesale.com -beatsbydresold.com -beatsbydresolohdonline-canada.com -beatsbydresonline-nz.com -beatsbydrespeakers.com -beatsbydressale.com -beatsbydressolo.com -beatsbydresstudio.com -beatsbydrestorevip.com -beatsbydrestudio-australia.com -beatsbydrestudio.com -beatsbydretoutlet.com -beatsbydreuk.com -beatsbydreuk.net -beatsbydreus.com -beatsbydrevipde.com -beatsbydrew.com -beatsbydrsmonsterinusa.com -beatsbymusic.net -beatsbysdrbre.com -beatsbysdrdres.com -beatscasque-france.com -beatscheap-nz.com -beatscheap-uk.com -beatscheapforsale.com -beatscollection2014.com -beatscustomblackfriday.com -beatsdanmark2013.com -beatsdrdre-headphones.com -beatsdrdre-it.com -beatsdrdre-solo.com -beatsdrdre2014.com -beatsdrdrecuffie.net -beatsdrdrekaufenschweiz.net -beatsdrdreneon.com -beatsdre-monster.com -beatsdre.net -beatsdre4cheap.com -beatsdrecheap.com -beatsdredreheadphones.com -beatsdreforsale.com -beatsdreinau.com -beatsdremonster-uk.com -beatsdrenewcolorful4usale.com -beatsdreoutletsale.com -beatsdresale2013.com -beatsdresalestore.com -beatsdresolo2013.com -beatsdreus.com -beatsearbudsheadphoness.com -beatselectronic.net -beatselectronics.com -beatselectronicsllc.tt.omtrdc.net -beatsep.com -beatsep.net -beatsfacstore.com -beatsfactoroutlets.com -beatsfactorycollection.com -beatsfactoryoutles.com -beatsforcheap-usa.com -beatsforme.com -beatsfranceofficiel.com -beatsheadphones-discount.com -beatsheadphones1.com -beatsheadphones2u.com -beatsheadphonesale.com -beatsheadphonesdealer.com -beatsheadphonesforcheap.net -beatsheadphonesonline.com -beatsheadphoness.com -beatsheadphonestudio.com -beatsheadphonesusamall.com -beatshopuk.com -beatsincanada.com -beatsinsingapore.com -beatsireland.net -beatsjoy.com -beatsmonstersales.com -beatsmusic.com -beatsmusic.wang -beatsneon.com -beatsnzsale.com -beatsodre.com -beatsofdre-usa.com -beatsonblackfriday2013.com -beatsone.net -beatsoutlet.net -beatsoutletanytime.com -beatsoutletonlines.com -beatspascher-bydre.com -beatspascher-fr.net -beatspascher.net -beatspaschers.net -beatspillnewcolor.com -beatspills.com -beatspromonsterjp.com -beatspromotions.com -beatssales.com -beatssaleus.com -beatssaustraliabuy.com -beatssbyaustralia.com -beatssbydredanmark.com -beatsshop-uk.com -beatsshop-usa.com -beatsshopstore.com -beatssingapores.com -beatssingaporeshop.com -beatsstudiohodetelefoner.com -beatsstudiosite.com -beatstoreusa.com -beatsua.com -beatswholesale.us -beatswirelesscheap.com -beatswirelesscuffie.com -beatthatquote.com -beautyandthebeastmusical.co.uk -bebepremium3.com.bo -becomeindex.com -beddit.tv -beeg.com -begin-trade.com -behance.net -beibao.com -beijingnike.com -bejeweledstars.com -bejewled-stars.com -bellsouth.net -benliton.com -bentobox.tv -berkanawireless.com -berkeley.edu -bestbeats4u.com -bestbhy.com -bestbuy-audio.com -bestbuy-communityrelations.com -bestbuy-giftcard.info -bestbuy-int.com -bestbuy-jobs.com -bestbuy.ca -bestbuy.com -bestbuy.com.mx -bestbuy.info -bestbuy24x7solutions.com -bestbuybusiness.com -bestbuybusinessadvantageaccount.com -bestbuycanada.ca -bestbuycanada.com -bestbuycanadaltd.ca -bestbuycharityclassic.com -bestbuycoffeemakers.com -bestbuyethics.com -bestbuyforbusiness.ca -bestbuygsm.com -bestbuyideax.com -bestbuyphotoworkshoptours.com -bestbuyrewards.com -bestbuyrewardzone.ca -bestbuys.com -bestbuysgeeksquad.com -bestbuysolutions.net -bestbuystores.com -bestbuytradein.com -bestbuyus.com -besthentaitube.com -bestiphonestuff.com -bestmallawards.com -bestrecipes.com.au -bestshoesale2014.net -besztbuy.com -beth.games -bethesda.net -bethesdagamestudios.com -bethsoft.com -betterexplained.com -betternike.com -bextbuy.com -beyondcore.com -bgov.com -bgr.in -bidbay.com -bidi.net.uk -bidorbuyindia.com -bidvestbank.co.za -bienvenuechezbestbuy.ca -bigbeans.solutions -bigbigchannel.com.hk -bigbigshop.com -bigbuckbunny.org -bigcharts.com -bighead.group -biitii.com -bill-safe.com -billmelater.com -billmelater.info -billmelater.net -billpoint.com -billpoint.info -billpoint.tv -billpoint.us -billpointnewzealand.com -binads.com -binance.cc -binance.charity -binance.cloud -binance.co -binance.com -binance.info -binance.me -binance.net -binance.org -binance.us -binance.vision -binanceapi.com -binancezh.be -binancezh.biz -binancezh.cc -binancezh.co -binancezh.com -binancezh.info -binancezh.ink -binancezh.kim -binancezh.link -binancezh.live -binancezh.mobi -binancezh.net -binancezh.pro -binancezh.sh -binancezh.top -bing.net -bingads.com -bingagencyawards.com -bingapistatistics.com -bingsandbox.com -bingvisualsearch.com -bingworld.com -binoculus.com -bintray.com -biomedcentral.com -biorxiv.org -bioware.com -biowarestore.com -bisq.io -bisq.network -bit.ly -bitballoon.com -bitbank.cc -bitbucket.org -bitcoin.org -bitfinex.com -bitflyer.com -bitflyer.jp -bitly.com -bitly.is -bitmex.com -bitnami.com -bitnamiapp.com -bitnamistudio.com -bitquick.co -bitsquare.io -bitstamp.net -bitstream.com -bittrex.com -bitvise.com -bitwarden.com -blackboxgames.com -blackfridaydrebeatsnew.com -blackfridaydrebeatsshop.com -blackstonespoliceservice.com -blazor.net -blender.org -blink.org -blinkload.zone -blizzak-juken.jp -blizzard.com -blizzard.nefficient.co.kr -blizzardgearstore.com -blizzcon-a.akamaihd.net -blogblog.com -blogebay.com -blogger.com -blogoverflow.com -blogspot.ae -blogspot.al -blogspot.am -blogspot.ba -blogspot.be -blogspot.bg -blogspot.bj -blogspot.ca -blogspot.cf -blogspot.ch -blogspot.cl -blogspot.co.at -blogspot.co.id -blogspot.co.il -blogspot.co.ke -blogspot.co.nz -blogspot.co.uk -blogspot.co.za -blogspot.com -blogspot.com.ar -blogspot.com.au -blogspot.com.br -blogspot.com.by -blogspot.com.co -blogspot.com.cy -blogspot.com.ee -blogspot.com.eg -blogspot.com.es -blogspot.com.mt -blogspot.com.ng -blogspot.com.tr -blogspot.com.uy -blogspot.cv -blogspot.cz -blogspot.de -blogspot.dk -blogspot.fi -blogspot.fr -blogspot.gr -blogspot.hk -blogspot.hr -blogspot.hu -blogspot.ie -blogspot.in -blogspot.is -blogspot.it -blogspot.jp -blogspot.kr -blogspot.li -blogspot.lt -blogspot.lu -blogspot.md -blogspot.mk -blogspot.mx -blogspot.my -blogspot.nl -blogspot.no -blogspot.pe -blogspot.pt -blogspot.qa -blogspot.re -blogspot.ro -blogspot.rs -blogspot.ru -blogspot.se -blogspot.sg -blogspot.si -blogspot.sk -blogspot.sn -blogspot.td -blogspot.tw -blogspot.ug -blogspot.vn -bloomberg.cn -bloomberg.co.jp -bloomberg.co.kr -bloomberg.com -bloomberg.com.br -bloomberg.fm -bloomberg.tv -bloombergapps.com -bloombergarcade.com -bloombergbeta.com -bloombergbna.com -bloombergbreakaway.com -bloombergbriefs.com -bloombergchina.com -bloombergenvironment.com -bloombergforeducation.com -bloomberggovernment.com -bloombergindices.com -bloombergindustry.com -bloomberglabs.com -bloomberglaw.com -bloomberglive.com -bloomberglp.com -bloombergmedia.com -bloombergnext.com -bloombergpolarlake.com -bloombergprep.com -bloombergquint.com -bloombergradio.com -bloombergsef.com -bloombergspace.com -bloombergstatus.com -bloombergsurvey.com -bloombergtax.com -bloombergtax1.com -bloombergtaxtech.com -bloombergtradingchallenge.com -bloombergtv.mn -bloombergvault.com -bloombergview.com -bloommicroventures.com -blpcareers.com -blpevents.com -blpprofessional.com -blubrry.com -bluefootcms.com -bluehatil.com -bluehatnights.com -bluemix.com -bluemix.net -blz-contentstack.com -blzddist1-a.akamaihd.net -blzddistkr1-a.akamaihd.net -blzmedia-a.akamaihd.net -blznav.akamaized.net -bmia.org -bml.info -bmw-abudhabi.com -bmw-adventskalender.com -bmw-albania.com -bmw-antilles.fr -bmw-art-journey.com -bmw-arts-design.com -bmw-asia.com -bmw-auslieferungszentrum.com -bmw-authority-vehicles.com -bmw-bahrain.com -bmw-businessdrive.com -bmw-calgary.ca -bmw-carit.de -bmw-classic.com -bmw-clubs-international.com -bmw-connected-drive.com -bmw-connecteddrive.ae -bmw-connecteddrive.at -bmw-connecteddrive.be -bmw-connecteddrive.bg -bmw-connecteddrive.ca -bmw-connecteddrive.ch -bmw-connecteddrive.co.nz -bmw-connecteddrive.co.uk -bmw-connecteddrive.co.za -bmw-connecteddrive.com -bmw-connecteddrive.com.au -bmw-connecteddrive.com.br -bmw-connecteddrive.com.cy -bmw-connecteddrive.com.hr -bmw-connecteddrive.com.kw -bmw-connecteddrive.com.mt -bmw-connecteddrive.cz -bmw-connecteddrive.de -bmw-connecteddrive.dk -bmw-connecteddrive.ee -bmw-connecteddrive.es -bmw-connecteddrive.fi -bmw-connecteddrive.fr -bmw-connecteddrive.gr -bmw-connecteddrive.hu -bmw-connecteddrive.ie -bmw-connecteddrive.it -bmw-connecteddrive.jp -bmw-connecteddrive.kr -bmw-connecteddrive.lt -bmw-connecteddrive.lu -bmw-connecteddrive.lv -bmw-connecteddrive.mx -bmw-connecteddrive.my -bmw-connecteddrive.nl -bmw-connecteddrive.no -bmw-connecteddrive.pl -bmw-connecteddrive.pt -bmw-connecteddrive.ro -bmw-connecteddrive.ru -bmw-connecteddrive.se -bmw-connecteddrive.sg -bmw-connecteddrive.si -bmw-connecteddrive.sk -bmw-connecteddrive.tw -bmw-corporate-sales.com -bmw-diplomatic-sales.com -bmw-driving-center.co.kr -bmw-drivingexperience.com -bmw-dubai.com -bmw-eg.com -bmw-fleet.net -bmw-ghana.com -bmw-golfsport.com -bmw-group.com -bmw-group.net -bmw-grouparchiv.de -bmw-grouparchives.com -bmw-gta.ca -bmw-i-pure-impulse.com -bmw-i.jp -bmw-int1.com -bmw-iraq.com -bmw-jordan.com -bmw-konzernarchiv.de -bmw-ksa.com -bmw-kuwait.com -bmw-lao.la -bmw-lebanon.com -bmw-m-safetycar.com -bmw-m.com -bmw-mdrivetour.com -bmw-me.com -bmw-military-sales.com -bmw-motorcycle.com -bmw-motorcycles.vn -bmw-motorrad-abudhabi.com -bmw-motorrad-authorities.com -bmw-motorrad-dubai.com -bmw-motorrad-motorsport.com -bmw-motorrad-now-or-never.com -bmw-motorrad-service-inclusive.com -bmw-motorrad-test-ride.com -bmw-motorrad.at -bmw-motorrad.be -bmw-motorrad.bg -bmw-motorrad.bh -bmw-motorrad.bo -bmw-motorrad.ca -bmw-motorrad.ch -bmw-motorrad.cl -bmw-motorrad.co -bmw-motorrad.co.id -bmw-motorrad.co.kr -bmw-motorrad.co.nz -bmw-motorrad.co.th -bmw-motorrad.co.uk -bmw-motorrad.co.za -bmw-motorrad.com -bmw-motorrad.com.ar -bmw-motorrad.com.au -bmw-motorrad.com.br -bmw-motorrad.com.do -bmw-motorrad.com.hr -bmw-motorrad.com.mx -bmw-motorrad.com.my -bmw-motorrad.com.pe -bmw-motorrad.com.py -bmw-motorrad.com.tr -bmw-motorrad.cr -bmw-motorrad.cz -bmw-motorrad.de -bmw-motorrad.dk -bmw-motorrad.dz -bmw-motorrad.ec -bmw-motorrad.ee -bmw-motorrad.es -bmw-motorrad.fi -bmw-motorrad.fr -bmw-motorrad.gr -bmw-motorrad.gt -bmw-motorrad.hu -bmw-motorrad.in -bmw-motorrad.it -bmw-motorrad.jp -bmw-motorrad.lu -bmw-motorrad.ma -bmw-motorrad.nl -bmw-motorrad.no -bmw-motorrad.pa -bmw-motorrad.pl -bmw-motorrad.pt -bmw-motorrad.ro -bmw-motorrad.rs -bmw-motorrad.ru -bmw-motorrad.sa -bmw-motorrad.se -bmw-motorrad.si -bmw-motorrad.sk -bmw-motorrad.sv -bmw-motorrad.tw -bmw-motorrad.ua -bmw-motorrad.uy -bmw-motorsport.com -bmw-mountains.com -bmw-museum.com -bmw-museum.net -bmw-nigeria.com -bmw-oman.com -bmw-ottawa.ca -bmw-pakistan.com -bmw-plant-munich.com -bmw-pma.com.sg -bmw-powertrain.com -bmw-product-highlights.com -bmw-qatar.com -bmw-routes.com -bmw-rp.com -bmw-rrdays.com -bmw-saudiarabia.com -bmw-security-vehicles.com -bmw-special-sales.com -bmw-sports.com -bmw-sudan.com -bmw-tahiti.com -bmw-tunisia.com -bmw-vancouver.ca -bmw-voli.me -bmw-welt.com -bmw-welt.net -bmw-welt.tv -bmw-werk-berlin.de -bmw-world.com -bmw-world.net -bmw-world.tv -bmw-worldfinal.com -bmw-yachtsport.com -bmw-yeg.ca -bmw-yemen.com -bmw.am -bmw.at -bmw.az -bmw.ba -bmw.bb -bmw.be -bmw.bg -bmw.bm -bmw.bs -bmw.by -bmw.ca -bmw.cc -bmw.ch -bmw.cl -bmw.co.ao -bmw.co.cr -bmw.co.id -bmw.co.il -bmw.co.jp -bmw.co.ke -bmw.co.kr -bmw.co.nz -bmw.co.th -bmw.co.uk -bmw.co.za -bmw.com -bmw.com.ar -bmw.com.au -bmw.com.bd -bmw.com.bn -bmw.com.bo -bmw.com.br -bmw.com.co -bmw.com.cy -bmw.com.do -bmw.com.ec -bmw.com.ge -bmw.com.gt -bmw.com.kh -bmw.com.ky -bmw.com.mk -bmw.com.mo -bmw.com.mt -bmw.com.mx -bmw.com.my -bmw.com.ni -bmw.com.pa -bmw.com.pe -bmw.com.ph -bmw.com.py -bmw.com.sg -bmw.com.sv -bmw.com.tr -bmw.com.tw -bmw.com.uy -bmw.com.ve -bmw.cw -bmw.cz -bmw.de -bmw.dk -bmw.dz -bmw.ee -bmw.es -bmw.fi -bmw.fr -bmw.gp -bmw.gr -bmw.hn -bmw.hr -bmw.ht -bmw.hu -bmw.ie -bmw.in -bmw.is -bmw.it -bmw.kg -bmw.kz -bmw.lc -bmw.lk -bmw.lt -bmw.lu -bmw.lv -bmw.ly -bmw.ma -bmw.md -bmw.mn -bmw.mq -bmw.mu -bmw.nc -bmw.nl -bmw.no -bmw.pl -bmw.ps -bmw.pt -bmw.re -bmw.ro -bmw.rs -bmw.se -bmw.si -bmw.sk -bmw.sn -bmw.tm -bmw.tt -bmw.ua -bmw.uz -bmw.vn -bmwarchiv.at -bmwarchiv.de -bmwartjourney.com -bmwasia.com -bmwauslieferungszentrum.com -bmwbikes.com -bmwbkk.de -bmwccrc.ca -bmwcenternet.com -bmwchampionship.com -bmwchampionshipusa.com -bmwcharitygolf.com -bmwcitychallenge.com -bmwclassic.com -bmwcolorado.com -bmwconnecteddrive.com -bmwcustomapparel.com -bmwdcsnet.net -bmwdealercareers.com -bmwdealerdirect.com -bmwdelawarevalley.com -bmwfilms.com -bmwgroup-classic-heart.com -bmwgroup-classic.com -bmwgroup-gaad.com -bmwgroup-plants.com -bmwgroup-posdigital.com -bmwgroup-werke.com -bmwgroup.at -bmwgroup.com -bmwgroup.jobs -bmwgroup.net -bmwgroupclassic.com -bmwgroupdesignworks.com -bmwgroupdirect.com -bmwgroupfs.com -bmwgroupinfobahn.com -bmwgroupna.com -bmwhk.com -bmwi.ca -bmwi.jp -bmwiventures.com -bmwjamaica.com -bmwlat.com -bmwlifestyle.ca -bmwm.com -bmwmagazine.com -bmwmagazine.de -bmwmass.com -bmwmass.net -bmwmc.net -bmwmontreal.ca -bmwmotorcycles.com -bmwmotorcycleusa.com -bmwmotorrad.co.kr -bmwmotorrad.com.au -bmwmotorrad.com.ph -bmwmotorrad.com.sg -bmwmotorradhk.com -bmwmotorshowblog.com -bmwmotorsport.com -bmwmperformance.com -bmwmuseum.net -bmwmyanmar.com -bmwofannapolis.com -bmwofcentralpa.com -bmwoftulsa.com -bmwondemandusa.com -bmworegon.com -bmwperformancecenter.com -bmwpittsburgh.com -bmwproductnews.com -bmwsafari.com -bmwsfl.com -bmwsfl.net -bmwshop.ca -bmwspecialoffers.ca -bmwsports.com -bmwstartupgarage.com -bmwstep.com -bmwstepconnections.com -bmwsummerschool.com -bmwtampabay.com -bmwusa.com -bmwusaservice.com -bmwusatires.com -bmwusfactory.com -bmwusrideracademy.com -bmwvalueservice.com -bmwwholesaleconnect.com -bmwworld.com -bmwworld.net -bmwworld.tv -bmwzentrum.com -bnbstatic.com -bnef.com -bnetcmsus-a.akamaihd.net -bnetproduct-a.akamaihd.net -bnetshopus.akamaized.net -bnext.com.tw -bodyandsoul.com.au -bollywoodlife.com -boltdns.net -bongacams.com -book.com.tw -bookclubcorner.com -bookclubgirl.com -booking.com -bookmybridgestonetyre.com -bookonsky.net -books.com.tw -bookstagram.com -booth.pm -bootstrapcdn.com -borderlessprepaid.com -boringcompany.com -boslife.biz -boslife.net -bossae.com -botframework.com -botorch.org -botstop.com -bowenpress.com -bowsersinsidestory.com -boxofficemojo.com -boxun.com -boylove.cc -boyloves.cc -braeburncapital.com -braintreegateway.com -braintreegateway.tv -braintreepayments.com -braintreepayments.info -braintreepayments.org -braintreepayments.tv -braintreepaymentsolutions.com -braintreeps.com -branchportal.com -brand-protection-team.com -brandeasygo.com -brandelectronic.com -brandproducts1688.com -brands098.com -braventures.com -braveux.com -brazilpartneruniversity.com -brazzers.com -breakdown.me -breitbart.com -brew.sh -brewmp.com -briantreepayments.net -briantreepayments.tv -bridge-studio.co.uk -bridgestone-asiapacific.com -bridgestone-bandag.com -bridgestone-brand.com -bridgestone-business-service.jp -bridgestone-korea.co.kr -bridgestone-plt-eng.com -bridgestone-tac-oman.com -bridgestone.cl -bridgestone.co.cr -bridgestone.co.id -bridgestone.co.in -bridgestone.co.jp -bridgestone.co.th -bridgestone.com -bridgestone.com.ar -bridgestone.com.br -bridgestone.com.co -bridgestone.com.mx -bridgestone.com.sg -bridgestone.com.tw -bridgestone.com.vn -bridgestoneamericas.com -bridgestonearena.com -bridgestonecntc.com -bridgestonecomercial.cl -bridgestonecomercial.co.cr -bridgestonecomercial.com.ar -bridgestonecomercial.com.br -bridgestonecomercial.com.co -bridgestonecomercial.com.mx -bridgestonegolf.com -bridgestonegz.com -bridgestonela.com -bridgestonemarketing.com -bridgestonemerchandise.com -bridgestonenationalfleet.com -bridgestoneperformance.com -bridgestoneperformancemedia.net -bridgestonerapiddelivery.com -bridgestonerewards.com -bridgestonesyb.com -bridgestonetire.ca -bridgestonetire.com -bridgestonetyre.com.my -bridgestonevan.com -bridgestonewx.com -brightcove.com -brightcove.imgix.net -brightcove.net -brightcove.services -brightcovecdn.com -brill.com -brilliant.org -brocaproject.com -bronto.com -brotli.org -browserleaks.com -bs-adreview.com -bs-awh.ne.jp -bstatic.com -bsw.co.jp -bsw.jp -btcbox.co.jp -btdig.com -btec.co.uk -btt804.com -btt904.com -bttzyw.com -bttzyw.net -buck.build -buckbuild.com -bucketeer.jp -budatt.com -buddymedia.com -bugzilla.org -builtfromebay.com -bumpshare.com -bumptop.ca -bumptop.com -bumptop.net -bumptop.org -bumptunes.com -burstly.net -burstlyrewards.com -business-i.jp -businesscatalyst.com -businessfocus.io -businessinsider.co.za -businessinsider.com -businessinsider.com.au -businessinsider.com.pl -businessinsider.de -businessinsider.es -businessinsider.fr -businessinsider.in -businessinsider.jp -businessinsider.mx -businessinsider.my -businessinsider.nl -businessinsider.sg -businesstoday.com.tw -businesswebwise.com -businessweek.com -businessweekly.com.tw -businessweekmag.com -buy-from-shanghai.com -buyaapl.com -buyaapl.net -buyaltera.com -buyaple.com -buybeatsbydre-uk.com -buybeatsheadphonesbydre.com -buycheapbeatsbus.com -buycheapbeatsbydre.com -buycheapbeatsbydreshop.com -buycheapbeatsdreuk.com -buydrdrebeatbox.com -buyfast-paysmart.net -buyingfacebooklikes.com -buyitnow.com -buyitnow.net -buyitnow.org -buyitnow.tv -buyitnowshop.net -buymeacoff.ee -buymeacoffee.com -buyminibeatbox.com -buynikechina.com -buyoculus.com -buyonlineheadphones.com -buypass-ssl.com -buypass.com -buypass.no -buypass.se -buyshoponly.com -buzzardflapper.com -buzzav.com -bwbx.io -bwh1.net -bwh8.net -bwh88.net -bybeatsdre.com -bydrebeats.com -bypasscensorship.org -byspotify.com -c-ij.com -c-span.org -c-spanvideo.org -cableav.tv -cabletv.com.hk -cabletvdirectv.com -cafr.ca -caijinglengyan.com -caime.xyz -cairnspost.com.au -calendarserver.org -calgon.at -calgon.be -calgon.ch -calgon.co.uk -calgon.com -calgon.com.tr -calgon.de -calgon.es -calgon.fr -calgon.ie -calgon.it -calgon.nl -calgon.pt -calgon.ru -calgon.tv -calgoncarbon-china.com -calgoncarbon.com -calgonit.com -callersbane.com -callhulu.com -calvappd.me -cam4.com -cambridge.org -cambridgedigital.net -cambridgemaths.org -cambridgeschoolshakespeare.com -camelot-europe.com -camelotherald.com -camelotherald.net -camelphat.com -camelspaceeffect.com -campushp.com -campuslondon.com -camwhores.tv -canada-beatsbydre.com -canon-cee.com -canon-cmos-sensors.com -canon-cna.com -canon-ebm.com.hk -canon-emea.com -canon-emirates.ae -canon-europa.com -canon-europe.com -canon-me.com -canon-ois.qa -canon-se.com.tw -canon.am -canon.at -canon.az -canon.ba -canon.be -canon.bg -canon.ca -canon.ch -canon.co.il -canon.co.uk -canon.co.za -canon.com -canon.com.al -canon.com.au -canon.com.by -canon.com.cy -canon.com.hk -canon.com.mk -canon.com.mt -canon.com.my -canon.com.tr -canon.com.tw -canon.cz -canon.de -canon.dk -canon.ee -canon.es -canon.fi -canon.fr -canon.ge -canon.gr -canon.hr -canon.hu -canon.ie -canon.it -canon.kz -canon.lt -canon.lu -canon.lv -canon.me -canon.net -canon.nl -canon.no -canon.pl -canon.pt -canon.ro -canon.rs -canon.ru -canon.se -canon.si -canon.sk -canon.tj -canon.ua -canon.uz -canonfoundation.org -canonical.com -canonproprinters.com -capitalgames.com -carbon.com -carcare-and-tireshop.jp -card.io -carebay.com -careerfundas.com -careerjournal.com -careersatfb.com -carekit.org -cargigileads.com -carstagram.com -cash.app -cash2.com -cashbycashapp.com -cashify.com -cashify.net -cashpassport.ca -cashpassport.co.za -cashpassport.com -cashpassport.com.br -cashpassport.net -cashpassportglobe.com -casimages.com -casoneexchange.com -casque-fr.com -casquebeatsbydrdresolohd.com -casquebeatsdocteurdre.com -casquebeatsdre2013.com -casquebeatsenligne.com -casquebeatsfracheter.com -casquebeatsmer.net -casquebeatsofficiel-fr.com -casquebeatspascher2013.com -casquebeatssolo.net -casquedrdrebeatssfr.com -casquemonsterbeats.com -casquemonsterbeatsbydre2013.com -casquesbeatsaudio.com -castro.fm -catalina.hk -cbs.com -cbsaavideo.com -cbscorporation.com -cbsi.com -cbsi.video -cbsiam.com -cbsig.net -cbsimg.net -cbsinteractive.com -cbsistatic.com -cbsivideo.com -cbsnews.com -cbspressexpress.com -cbssports.com -cbsstatic.com -cbssvideo.com -cciernslabs.com -cciesecuritylabs.com -ccievoicelabs.com -ccna5.net -ccnsite.com -ccpsx.com -ccstatic.org -cdkworkshop.com -cdn-terapeak.com -cdn77.com -cdn77.org -cdn77.scoreuniverse.com -cdngarenanow-a.akamaihd.net -cdninstagram.com -cdnjs.com -cdnlab.live -cdnpure.com -cebay.com -celebgramme.com -celeron.com -celeron.net -cell.com -cencoastbmw.com -centos.org -centralvalidation.com -centrino.com -centrino.net -cepacol.ca -cepacol.com -cern.ch -certificate-transparency.org -cex.io -cfblob.com -cfna.com -ch9.ms -championshipseriesleague.com -change.org -chargenow.com -chargenowusa.com -charlestonroadregistry.com -charlotte-anime.jp -charticulator.com -chatango.com -chatter.com -chaturbate.com -cheap-beats-by-dre.net -cheap-beatsbydre.com -cheap-nike.com -cheapbagshoes.com -cheapbeats.us -cheapbeats365.com -cheapbeats4sale.net -cheapbeatsaustraliasale.com -cheapbeatsbus.com -cheapbeatsbydr.com -cheapbeatsbydrdrepro.com -cheapbeatsbydre-au.com -cheapbeatsbydre99.com -cheapbeatsbydrefau.com -cheapbeatsbydremall.com -cheapbeatsbydremonster.com -cheapbeatsbydrenz.net -cheapbeatsbydreonsale.com -cheapbeatsbydreoutlet-nz.com -cheapbeatsbydreoutlet.com -cheapbeatsbydreoutlets2013.com -cheapbeatsbydresale.com -cheapbeatsbydreshop.com -cheapbeatsbydrestudioedition.com -cheapbeatsbydrestudioutlet.com -cheapbeatsdrdresolo.com -cheapbeatsdrestudios.com -cheapbeatsheadphone2014.com -cheapbeatsheadphones.us -cheapbeatsie.com -cheapbeatsla.com -cheapbeatssale4u.com -cheapbeatsshopbydre.com -cheapcustombeatsbydre.com -cheapdrdrebeats8.com -cheapdrdrebeatsca.com -cheapdrebeats8.net -cheaperbeatsbydresale.com -cheapestbeatsdrdre.com -cheapheadphonesland.com -cheapheadphonessale.com -cheapheadsetmall.com -cheapheadsetshop.com -cheapmonsterbeatsbydrdre.com -cheapmonsterbeatsheadsets.com -cheapmonsterbeatssale.com -cheapmonsterbeatsusa.us -cheapmonstersbeatsonsale.com -cheapnewbeatsbydre.com -cheapnikedunks.com -cheapnikeoutlet.com -cheapsalemonster.com -cheapshoesvip.com -cheapwireless04.com -cheapwirelessbeats.com -cheerwholesale.us -chicagolandbmw.com -chickstagram.com -chihair-straightener.com -chillingo.com -chimeforchange.org -china-facebook.com -chinaclothesstore.com -chinadecoding.com -chinadigitaltimes.net -chinaeconomicreview.com -chinapower.csis.org -chinapress.com.my -chinatimes.com -chinatimes.com.tw -chips.com -chocolatey.org -chomp.com -chrome.com -chromebook.com -chromecast.com -chromeos.dev -chromium.org -chronicle.security -chroniclesec.com -cht.com.tw -chtf.org.tw -chuokoron.jp -ciattackers.com -cilk.com -cilk.net -cinemax.com -cisco-returns.com -cisco-warrantyfinder.com -cisco.com -cisco.evergage.com -cisco.mobi -ciscoccservice.com -ciscoconnectcloud.com -ciscoconnectcloud.net -ciscoconnectcloud.org -ciscocontest.com -ciscoerate.com -ciscofax.com -ciscoinvestments.com -ciscojabbervideo.net -ciscokinetic.com -ciscoknowledgenetwork.com -ciscolearningsociety.org -ciscolearningsystem.com -ciscolive.com -ciscolivehls-i.akamaihd.net -cisconetapp.com -cisconetspace.com -cisconetspace.info -cisconetspace.net -ciscopartnermarketing.com -ciscopowercube.com -ciscopress.ch -ciscoprice.com -ciscoresearch.com -ciscosoftware.com -ciscospark.ca -ciscospark.com -ciscospark.jp -ciscotaccc.com -ciscotr.com -ciscoturk.net -ciscovideo.com -ciscowebseminars.com -cispaletter.com -cispaletter.org -citizenlab.ca -citizenlab.org -citylab.com -cixp.net -ck101.com -ckcdn.com -ckck.fun -clannad-movie.jp -clarivate.com -classicnike.com -clco.cc -clearasil.us -clearlinux.org -click-url.com -clickedu.co.uk -clickserver.googleads.com -clojure.org -cloudapp.net -cloudappsecurity.com -cloudburstresearch.com -cloudc.one -cloudchoose.com -cloudcone.com -cloudcone.net -cloudconvert.com -cloudcraze.com -cloudcredibility.com -cloudflare-dns.com -cloudflare-ipfs.com -cloudflare-quic.com -cloudflare.com -cloudflare.net -cloudflareapps.com -cloudflarebolt.com -cloudflareclient.com -cloudflareinsights.com -cloudflareok.com -cloudflareresolve.com -cloudflaressl.com -cloudflarestatus.com -cloudflarestream.com -cloudflaretest.com -cloudflarewarp.com -cloudfront.net -cloudfunctions.net -cloudhealthtech.com -cloudimage.io -cloudimg.io -cloudinary.com -cloudinary.net -cloudinsights.com -cloudlive.com -cloudlock.com -cloudn.me -cloudrobotics.com -cloudsync-prod.s3.amazonaws.com -cloudvolumes.com -cloupia.com -cloupia.net -clubhouseapi.com -clusterconnection.com -cmhalq.com -cmmedia.com.tw -cmpaas.com -cmu.edu -cna.com.tw -cnbc.com -cnbcfm.com -cncrivals.com -cnet.com -cnivogue.com.au -cnix-gov-cn.com -cnn.com -cnn.io -cnn.it -cnnarabic.com -cnnikebrand.com -cnnlabs.com -cnnmoney.ch -cnnmoney.com -cnnmoneystream.com -cnnpolitics.com -cnpmjs.org -cnshopin.com -cnyes.com -cobatt.com -cobrasearch.com -code.org -codecademy.com -codei.sh -codeish.co -codeish.io -codespot.com -codethemicrobit.com -coinbase.com -coinone.co.kr -coinonecore.com -coinonecorp.com -collective99.com -collector.xhamster.com -collegejournal.com -collins.co.uk -collins.in -colorprotechnology.com -cometotheduckside.com -commandandconquer.com -commerceos.com -como-hackearfacebook.com -comodo.com -comodoca.com -comodoca2.com -comodoca3.com -comodoca4.com -compaq.org -compass.is -componentkit.org -compose-spec.io -compresspdf.new -computer.org -computingreviews.com -comsoc.org -conair.me -conda.io -connaissancesfinancierespratiques.ca -connect-in-canada.com -connectcommerce.hk -connectcommerce.info -connectcommerce.tv -connected-drive.com -connectedcommerce.com -connectedcommerce.tv -connectionsacademy.com -connectionseducation.com -connectionslearning.com -conquerwithcharacter.com -conscrypt.com -conscrypt.org -consul.io -containersonaws.com -contentful.com -contest.com -convrgencegame.com -cookiechoices.org -cooliphonecasesstore.com -coolloud.org.tw -coolmonster.net -coova.com -coova.net -coova.org -cordcloud.org -coreduo.com -coreextreme.com -coreml.net -coreoptics.net -corepublishingsolutions.com -coronavirusnow.com -corporatecashpassport.com -cortanaanalytics.com -cortanaskills.com -cosmosdb.info -cosmosdb.net -costco-static.com -costco.com -costcobusinessdelivery.com -cotolia.com -cotweet.com -coupang.com -coupangcdn.com -couriermail.com.au -coursera-for-business.org -coursera.community -coursera.help -coursera.org -covid19-rx.org -covid19rx.org -cowboom.com -cozydrdrebeats.com -cpan.org -cpedge.com -cqcorea.com -craigslist.org -crates.io -createspace.com -creativecloud.com -creativecommons.engineering -creativecommons.org -creativesdk.com -crececonebay.com -creditcardsbay.com -cricketcountry.com -crit-staging.com -crmdynint-gcc.com -crmdynint.com -crossborderexpansion.com -crossfitfirestone.com -crossmediapanel.com -crosswalk-project.com -crosswalk-project.net -crowdtangle.com -crr.com -crunchyroll.com -crysis.jp -cs.co -cs4hs.com -csifund.org -csis-prod.s3.amazonaws.com -csis.org -cslpldyb.me -cstatic.net -ctan.org -ctee.com.tw -ctfassets.net -ctitv.com.tw -ctv.com.tw -ctwant.com -ctyun.online -cuffiesaldi.com -cup.com.hk -cups.org -curbed.com -currently.com -currently.net -currenttime.tv -cursecdn.com -curseforge.com -custom-iphonecase.com -custombeatsbydrebuy.com -custombeatsdeals.com -custombeatsforcheap.com -custombeatsny.com -custombeatssbydreus.com -customdrdrebeats.com -customizedbeatbydre.com -customizedbeatsbydre.com -customizedbeatsdre.com -customnikeshoes.com -cutt.ly -cw.com.tw -cyber-bay.info -cyber-bay.org -cybermondaybeats4sale.com -cybertrust.co.jp -cybertrust.ne.jp -cygames.co.jp -cygames.jp -cygwin.com -cylink.pro -cylink0122.icu -cython.org -d100.net -d1k2us671qcoau.cloudfront.net -d29vzk4ow07wi7.cloudfront.net -d2anahhhmp1ffz.cloudfront.net -da-files.com -dacebook.com -dailym.ai -dailymail.co.uk -dailymail.com -dailymail.com.au -dailymail.dk -dailymailonline.com -dailytelegraph.com.au -dajiyuan.com -dajiyuan.eu -dandalinvoa.com -dandanzan.cc -danemarket.com -danmarkbeatsbydrdre.com -daoc.net -darivoa.com -darkageofcamelot.com -darkness-risen.com -dart.dev -dartlang.org -dartpad.dev -dartsearch.net -darwinsource.com -darwinsource.org -darwinsourcecode.com -dashwood360.com -dat.foundation -data.com -database.asahi.com -dataliberation.org -datalore.io -datasheets360.com -david-laserscanner.com -dawngate.com -dawngatechronicles.com -daytonbmw.com -daytontrucktires.com -dazn-api.com -dazn.com -dazndn.com -db.tt -dba.dk -dcard.io -dcard.tw -dctbeatsbydre.com -ddg.co -ddg.gg -ddh.gg -dditsadn.com -dditscdn.com -deadspacegame.com -dealbay.com -dealerspeed.net -dealsbeatsblackfriday.com -dealtime.com -dealtree.org -debian.org -debug.com -debugproject.com -deepfreeze.co.uk -deepfreeze.com -deepfreeze.com.br -deepfreeze.eu -deepfreeze.net -deepfreeze.tech -deepl.com -deepmind.com -degruyter.com -delicious.com.au -dell-brand.com -dell.com -dellcdn.com -deluxe.com.hk -delvenetworks.com -demandware.com -demdex.net -democracy.earth -demonoid.is -demoprint.com -dengeamerika.com -dengiamerika.com -deno.land -dentalhypotheses.com -dependabot.com -desertbmw.com -designeriphonescases.com -desk.com -desktopmovie.com -desktopmovie.net -desktopmovie.org -desktopmovies.net -desktopmovies.org -detaliczny.com -dettol-prize.com -dettol.at -dettol.be -dettol.ch -dettol.cl -dettol.co.id -dettol.co.in -dettol.co.ke -dettol.co.nz -dettol.co.uk -dettol.com -dettol.com.au -dettol.com.bd -dettol.com.br -dettol.com.eg -dettol.com.hk -dettol.com.my -dettol.com.ng -dettol.com.sg -dettol.cz -dettol.fr -dettol.hu -dettol.ie -dettol.net -dettol.nl -dettol.pk -dettol.pl -dettol.pt -dettol.ru -dettolarabia.com -dettolcleannaija.com -dettolsitishield.co.in -dettolthailand.com -deutschewelle.h-cdn.com -dev-guardianapis.com -dev-theguardian.com -devcon.org -developer-advisor.com -developer.microsoft.com -developer.mozilla.org -developers.facebook.com -developria.com -deviantart.com -deviantart.net -device-manager.us -devm2m.com -devopsassessment.net -devopsms.com -devsitetest.how -devtools-paypal.com -dewitwithdurex.com -dfp6rglgjqszk.cloudfront.net -dgg.gg -diablo3.com -diabloimmortal.com -dialga.com -dialogflow.com -dice.se -dicela.com -dicela.net -dictate.ms -didce.com -diddykongracing.com -dierectv.com -digicert.com -digital-id.ch -digital-rb.com -digitalassetlinks.org -digitalcertvalidation.com -digitalhub.com -digitalid.ch -digitalocean.com -digitaloceanspaces.com -digitalpack.com -dilcdn.com -dirctv.com -direcpath.com -direcpath.net -directtv-deals.tv -directtv-dish.com -directtv.net -directtvdeals.tv -directtvreviews.com -directv-4-you.com -directv-newyork.com -directv.com -directvadsales.com -directvatlantaga.com -directvboston.com -directvbundles.com -directvbusiness.com -directvbusinessmarket.com -directvcincinnatioh.com -directvcinema.com -directvconnect.com -directvcookevilletn.com -directvcrossvilletn.com -directvdealer.com -directvdeals.com -directvdealsnow.com -directvdsl.tv -directvforhotels.com -directvgrandslam.com -directvhouston.com -directvinternet.com -directvkentucky.com -directvlebanontn.com -directvlosangeles.com -directvmetropolisil.com -directvmonitoring.com -directvmurfreesborotn.com -directvnewhampshire.com -directvnow.com -directvoffercodes.com -directvonline.com -directvplans.com -directvpomise.com -directvpromise.com -directvpromotions.com -directvrebate.com -directvrichmond.com -directvsavings.com -directvsports.com -directvsundayticket.com -direectv.com -diretv.com -dis.gd -discord-activities.com -discord.co -discord.com -discord.design -discord.dev -discord.gg -discord.gift -discord.gifts -discord.media -discord.new -discord.store -discord.tools -discordactivities.com -discordapp.com -discordapp.io -discordapp.net -discordcdn.com -discordmerch.com -discordpartygames.com -discordsays.com -discordstatus.com -discountbeatsbydre-us.com -discountbeatsstore.com -dishworld.com -disney-asia.com -disney-discount.com -disney-plus.net -disney-portal.my.onetrust.com -disney-studio.com -disney-studio.net -disney.asia -disney.be -disney.bg -disney.ca -disney.ch -disney.co.il -disney.co.jp -disney.co.kr -disney.co.th -disney.co.uk -disney.co.za -disney.com -disney.com.au -disney.com.br -disney.com.hk -disney.com.tw -disney.cz -disney.de -disney.dk -disney.es -disney.fi -disney.fr -disney.gr -disney.hu -disney.id -disney.in -disney.io -disney.it -disney.my -disney.my.sentry.io -disney.nl -disney.no -disney.ph -disney.pl -disney.pt -disney.ro -disney.ru -disney.se -disney.sg -disneyadsales.com -disneyarena.com -disneyaulani.com -disneybaby.com -disneycareers.com -disneychannelonstage.com -disneychannelroadtrip.com -disneycruisebrasil.com -disneyenconcert.com -disneyiejobs.com -disneyinflight.com -disneyinternational.com -disneyinternationalhd.com -disneyjunior.com -disneyjuniortreataday.com -disneylatino.com -disneymagicmoments.co.il -disneymagicmoments.co.uk -disneymagicmoments.co.za -disneymagicmoments.de -disneymagicmoments.es -disneymagicmoments.fr -disneymagicmoments.gen.tr -disneymagicmoments.gr -disneymagicmoments.it -disneymagicmoments.pl -disneymagicmomentsme.com -disneyme.com -disneymeetingsandevents.com -disneymovieinsiders.com -disneymusicpromotion.com -disneynewseries.com -disneynow.com -disneypeoplesurveys.com -disneyplus.bn5x.net -disneyplus.com -disneyplus.com.ssl.sc.omtrdc.net -disneyredirects.com -disneysrivieraresort.com -disneystore.com -disneystreaming.com -disneysubscription.com -disneytickets.co.uk -disneyturkiye.com.tr -disneytvajobs.com -disneyworld-go.com -disp.cc -disqus.com -disquscdn.com -disqusservice.com -djreprints.com -dkbeatsbydre.com -dkk37.com -dkr.com -dkrecttv.com -dl-iphone.com -dlercloud.com -dlercloud.me -dlercloud.org -dleris.best -dlfacebook.com -dlgarenanow-a.akamaihd.net -dlmobilegarena-a.akamaihd.net -dmed.technology -dmgmediaprivacy.co.uk -dmm-extension.com -dmm.co.jp -dmm.com -dmmapis.com -dnai.in -dnaindia.com -dnaspaces.io -dndbeyond.com -dns.sb -dnsvisa.com -dobendan.de -doceapower.com -docker.com -docker.io -dockerizer.com -docs.com -docs.rs -documentforce.com -dogatch.jp -dogecoin.com -doi.info -doi.org -dokusho-ojikan.jp -dollarfotoclub.com -dollarphotoclub.com -dollarphotosclub.com -dombosco.com.br -donkeykongcountryreturns.com -dontbubble.us -donttrack.us -doom.com -doom9.org -dot-mac.de -dot.net -dotcernpilot.info -dotdeb.org -dotfacebook.com -dotfacebook.net -dotherex.com -dotmac.de -doubleclick.com -doubleclick.net -douwriteright.com -douya.org -dowjones.com -dowjones.io -dowjoneson.com -download.91porn005.me -download.i91av.org -downloadsforipod.com -draftjs.org -dragonage.com -dragonagekeep.com -dragonagemovie.com -dragoniscoming.com -drbeatsukmart.com -drbl.in -drdre-beats.com -drdrebeats-chen.com -drdrebeats-headphone.com -drdrebeats-usa.com -drdrebeatsale.com -drdrebeatsbillig.com -drdrebeatsdesale.com -drdrebeatsdiscount.com -drdrebeatsforu.com -drdrebeatsretail2013.com -drdrebeatssale7.com -drdrebeatsuk.com -drdrefnac.com -drdreheadphonebeats.com -drdreheadphonekey.com -drdreheadphonesusstore.com -drdremonster-beats.com -drdremonsterdre.com -drdreprobeatssale.com -dreambmw.ca -dreamforce.com -dreamteamfc.com -dreamtoplay.com -dreamworks.com -drebeats-australia.com -drebeats-france.com -drebeats-monster.com -drebeats-monsteraustralia.com -drebeats-monsterusa.com -drebeats-singapore.com -drebeats-singapore.net -drebeats-singaporecheap.com -drebeats-singaporecheap.net -drebeats-solo.com -drebeats-studio.com -drebeatsaustralia-cheap.com -drebeatsaustralia-cheap.net -drebeatsbuy.com -drebeatsbydreoutlet.com -drebeatscanada.com -drebeatsdeutschland.net -drebeatsforsaleus.com -drebeatsheadphones-nz.com -drebeatshome.com -drebeatsoldes.com -drebeatsoutletstore.com -drebeatspill.com -drebeatssite.com -drebeatssolocybermondaysale.com -drebeatsstudio2013.com -drebeatstudio.com -drebyby.com -dremonsterbeatsoutlets.com -dreprobeats.com -dreprofy.com -dribbble.com -driving.co.uk -drmario-world.com -dronedj.com -dropbox-dns.com -dropbox.com -dropbox.tech -dropboxapi.com -dropboxbusiness.com -dropboxcaptcha.com -dropboxforum.com -dropboxforums.com -dropboxinsiders.com -dropboxmail.com -dropboxpartners.com -dropboxstatic.com -dropboxusercontent.com -ds-linear-abematv.akamaized.net -ds-vod-abematv.akamaized.net -dssott.com -dtci.co -dtci.technology -dtlgalleryint.cloudapp.net -dtsell.com -dtv2009offers.com -dtvce.com -duck.co -duck.com -duckduckco.com -duckduckco.de -duckduckgo.ca -duckduckgo.co -duckduckgo.co.uk -duckduckgo.com -duckduckgo.com.mx -duckduckgo.com.tw -duckduckgo.de -duckduckgo.dk -duckduckgo.in -duckduckgo.jp -duckduckgo.ke -duckduckgo.mx -duckduckgo.nl -duckduckgo.org -duckduckgo.pl -duckduckgo.sg -duckduckgo.uk -duckduckhack.com -duckgo.com -ducksear.ch -duckside.com -dukgo.com -dungeonkeeper.cn -dungeonkeeper.com -dungeonkeeper.com.cn -durex-shop.ch -durex-shopline.com -durex-slovenia.si -durex.at -durex.be -durex.cl -durex.co.id -durex.co.il -durex.co.nz -durex.co.th -durex.co.uk -durex.co.za -durex.com -durex.com.au -durex.com.bd -durex.com.co -durex.com.hr -durex.com.my -durex.com.ng -durex.com.pe -durex.com.ph -durex.com.pk -durex.com.sg -durex.com.tr -durex.cz -durex.de -durex.dk -durex.ee -durex.es -durex.fi -durex.fr -durex.hu -durex.ie -durex.it -durex.jp -durex.lv -durex.mx -durex.nl -durex.no -durex.pl -durex.pt -durex.ro -durex.ru -durex.se -durex.us -durexcam.com -durexcanada.com -durexchina.com -durexindia.com -durexloveclub.com -durexukraine.com -durexusa.com -duyaoss.com -duyaossr.com -dvdstudiopro.biz -dvdstudiopro.com -dvdstudiopro.info -dvdstudiopro.net -dvdstudiopro.org -dvdstudiopro.us -dvh30n.vip -dw.com -dynacw.co.jp -dynacw.com -dynacw.com.cn -dynacw.com.hk -dynacw.com.tw -dynafleetonline.com -dynamics.com -dyncdn.me -e-bay.com -e-bay.it -e-bay.net -e-hentai.org -ea-anz-press.com -ea.com -ea.tt.omtrdc.net -eaaccess.com -eaassets-a.akamaihd.net -eablackbox.com -eac-cdn.com -eacashcard.com -eachpay.com -eachpay.net -eacodigos.com -eafootballworld.com -eakorea.co.kr -eamirrorsedge.com -eamobile.com -eamythic.com -eamythic.net -eanordic.com -eaplay.com -earngeek.com -earphonescheapest.com -earpod.net -easic.com -easports.com -easports.jp -easportsactive.com -easportsactiveonline.com -easportsfootball.com -easportsfootballclub.com -easportsmma.com -easportsworld.com -eastore.com -easttouch.com.hk -eastweek.com.hk -easy.ac -easyanticheat.net -easylist.to -easynike.com -eater.com -ebahy.com -ebay-25-assets.s3-us-west-1.amazonaws.com -ebay-authenticate.net -ebay-confirm.com -ebay-course.com -ebay-cz.com -ebay-delivery.com -ebay-discoveries.com -ebay-fashion.com -ebay-inc.com -ebay-inc.net -ebay-inc.org -ebay-online.com -ebay-sales.com -ebay-stories.com -ebay-us.com -ebay-vacation.com -ebay.at -ebay.be -ebay.ca -ebay.ch -ebay.co.nz -ebay.co.uk -ebay.co.ve -ebay.co.za -ebay.com -ebay.com.ar -ebay.com.au -ebay.com.ec -ebay.com.hk -ebay.com.mt -ebay.com.my -ebay.com.ph -ebay.com.sg -ebay.de -ebay.es -ebay.fr -ebay.ie -ebay.in -ebay.it -ebay.jp -ebay.lt -ebay.mn -ebay.nl -ebay.org -ebay.ph -ebay.pk -ebay.pl -ebay.sg -ebay.us -ebay.vn -ebay25.com -ebay68.com -ebaya.com -ebayads.com -ebayads.net -ebayadvertising.com -ebayanunsios.net -ebayauction.com -ebayaustralia.com -ebayauthenticate.com.cn -ebaybags.com -ebaybank.com -ebaybenefits.com -ebayboutique.com -ebayca.com -ebayca.org -ebaycafe.com -ebaycar.com -ebaycareers.com -ebaycbt.co.kr -ebaycdn.net -ebaychina.net -ebayclassifieds.com -ebayclassifieds.info -ebayclassifieds.org -ebayclassifieds.tv -ebayclassifiedsgroup.com -ebayclassifiedsgroup.info -ebayclassifiedsgroup.org -ebayclassifies.com -ebayclub.com -ebaycoins.com -ebaycom.com -ebaycommercenetwork.com -ebaycourse.com -ebayd.com -ebayde.com -ebaydlassifieds.com -ebaydts.com -ebayedu.com -ebayeletro.com -ebayenterprise.com -ebayenterprise.info -ebayenterprise.net -ebayenterprise.tv -ebayetc.com -ebayexpress.sg -ebayfashion.com -ebayfashion.net -ebayforcharity.org -ebayforeclosure.org -ebayfrance.com -ebayglobalshipping.com -ebaygroup.com -ebayhabit.com -ebayheels.com -ebayhots.com -ebayimg.com -ebayinc.com -ebayinc.net -ebayinc.org -ebayincconnectedcommerce.net -ebayinkblog.com -ebayinternetsalestax.com -ebayit.com -ebayjewelry.com -ebayjob.com -ebayla.org -ebaylisting.com -ebaylocal.net -ebaylocationsdevacances.com -ebaymag.com -ebaymainstreet.com -ebaymall.com -ebaymarketplace.net -ebaymotors.ca -ebaymotors.com -ebaymotors.org -ebaymotorsblog.com -ebaynow.com -ebaynyc.com -ebayon.com -ebayon.net -ebayoncampus.com -ebayopen.com -ebayopensource.com -ebayopensource.net -ebaypakistan.net -ebaypark.com -ebayparts.com -ebayprivacycenter.com -ebayradio.com -ebayrtm.com -ebayseller.com -ebayshoesstore.com -ebayshop.com -ebayshop111.com -ebayshopping.org -ebaysocial.com -ebaysocial.ru -ebaysoho.com -ebaysohos.com -ebaystatic.com -ebaystore.com -ebaystore77.com -ebaystyle.com -ebaysweden.com -ebayt.com -ebaytechblog.com -ebaytopratedseller.net -ebaytrading.com -ebaytradingassistant.com -ebaytv.org -ebayuae.net -ebayvakantiehuizen.com -ebayvalet.com -ebayvietnam.net -ebayworlds.com -ebayy.com -ebc.net.tw -ebi.ac.uk -ebookforipad.com -ebuyheadphones.com -ecapi-pchome.cdn.hinet.net -ecgapp.net -echocdn.com -echosign.com -ecimg.tw -ecoforme.jp -economist.com -economistgroup.com -economistgroupcareers.com -ecpa.fr -edcity.hk -edgedatg.com -edgefonts.net -edisebay.com -editorx.com -edninfo.com -edu-research.org -eduplus.hk -edx-cdn.org -edx.org -eebay.com -eenike.com -eff.org -efproject.net -egghead.io -egmontbooks.co.uk -egta.com -ehgt.org -ehtracker.org -ehwiki.org -einstein.com -eiu.com -ekhindi.com -ekhokavkaza.com -elasticbeanstalk.com -elderscrolls.com -electrek.co -electricluxury.com -electronicarts.com -electronicarts.fr -electronjs.org -element.io -elephantsdream.org -elib.maruzen.co.jp -elifesciences.org -elite.com -elixir-lang.org -elrepo.org -els-cdn.com -elsevier-ae.com -elsevier.com -elsevier.io -emac.co.in -emac.in -emagic.de -embed-cdn.com -embed.ly -embedly.com -embl-hamburg.de -embl.de -embl.fr -embl.it -embl.org -emblstatic.net -embs.org -emcs.org -emojipedia.org -emome.net -enablementadobe.com -enanyang.my -encoretvb.com -enfa.co.id -enfa.com.vn -enfaaplus.com -enfababy.com -enfabebe.com -enfabebe.com.br -enfabebe.com.co -enfabebe.com.do -enfabebe.com.ec -enfabebe.com.mx -enfabebe.com.pe -enfabebe.com.ve -enfabebe3.com.ar -enfagrow.co.in -enfagrow.com.bn -enfagrow.com.my -enfagrow.com.ph -enfagrow.com.sg -enfagrow4.com -enfamama.com.ar -enfamama.com.ph -enfamil.ca -enfamil.com -enfamil.es -enfamil.pl -enfamil.pt -enfasmart.com -engineeringvillage.com -enpirion.com -enspireformula.com -enteentegeh.de -entermediadb.net -entermediadb.org -enterprisepaging.com -enterprisessl.com -entrust.net -entrustdatacard.com -epicbrowser.com -epicgames.com -epicreads.com -epigeum.com -epinions.com -episodic.com -epoch.cloud -epoch.org.il -epochbuy.com -epochcar.com -epochhk.com -epochmall.com -epochmediagroup.com -epochshop.com -epochstories.com -epochtime.com -epochtimes-bg.com -epochtimes-romania.com -epochtimes.co.il -epochtimes.co.kr -epochtimes.co.uk -epochtimes.com -epochtimes.com.au -epochtimes.com.br -epochtimes.com.sg -epochtimes.com.tw -epochtimes.com.ua -epochtimes.cz -epochtimes.de -epochtimes.eu -epochtimes.fr -epochtimes.it -epochtimes.jp -epochtimes.nl -epochtimes.pl -epochtimes.ru -epochtimes.se -epochtimeshk.org -epochtimestr.com -epochweek.com -epochweekly.com -eporner.com -eprc.com.hk -eprintsw.com -erabaru.net -eracom.com.tw -erlang.org -es-visiontimes.com -esbeatsbydrebuy.com -escandinavia-arg.com -escape.com.au -escapestudios.co.uk -esm.run -esmarthealth.com -esp32.com -esp8266.com -espadoldettol.com.ar -espn.co.uk -espn.com -espn.hb.omtrdc.net -espn.net -espncdn.com -espndotcom.tt.omtrdc.net -espnqa.com -espressif.com -esri.com -etbc.com.hk -etheadphones.com -ethereum.foundation -ethereum.org -etnet.com.hk -etpress.com.hk -ettoday.net -ettrade.com.hk -etviet.com -etvonline.hk -etwealth.com -eu-consumer-empowerment.com -eubluecardvisa.com -euroipad.com -europalibera.org -europepmc.org -eventsinfocus.org -evernote.com -evise.com -evropaelire.org -eworld.com -exacttarget.com -exascale-tech.com -excedo.com -excitebots.com -exec-appointments.com -exhentai.org -experience-vmware.com -experiencebillmelater.com -expertmaker.com -exploreintel.com -expresswifi.com -ext-twitch.tv -extensionworkshop.com -eyny.com -f-droid.org -f8.com -faacebok.com -faacebook.com -faasbook.com -facbebook.com -facbeok.com -facboo.com -facbook.com -facbool.com -facboox.com -faccebook.com -faccebookk.com -facdbook.com -facdebook.com -face-book.com -faceabook.com -facebboc.com -facebbook.com -facebboook.com -facebcook.com -facebdok.com -facebgook.com -facebhook.com -facebkkk.com -facebo-ok.com -faceboak.com -facebock.com -facebocke.com -facebof.com -faceboik.com -facebok.com -facebokbook.com -facebokc.com -facebokk.com -facebokok.com -faceboks.com -facebol.com -facebolk.com -facebomok.com -faceboo.com -facebooa.com -faceboob.com -faceboobok.com -facebooc.com -faceboock.com -facebood.com -facebooe.com -faceboof.com -facebooi.com -facebooik.com -facebooik.org -facebooj.com -facebook-corp.com -facebook-covid-19.com -facebook-ebook.com -facebook-forum.com -facebook-hardware.com -facebook-inc.com -facebook-login.com -facebook-newsroom.com -facebook-newsroom.org -facebook-pmdcenter.com -facebook-pmdcenter.net -facebook-pmdcenter.org -facebook-privacy.com -facebook-program.com -facebook-studio.com -facebook-support.org -facebook-texas-holdem.com -facebook-texas-holdem.net -facebook.br -facebook.ca -facebook.cc -facebook.com -facebook.design -facebook.hu -facebook.in -facebook.net -facebook.nl -facebook.org -facebook.se -facebook.shop -facebook.tv -facebook.us -facebook.wang -facebook123.org -facebook30.com -facebook30.net -facebook30.org -facebook4business.com -facebookads.com -facebookadvertisingsecrets.com -facebookappcenter.info -facebookappcenter.net -facebookappcenter.org -facebookatschool.com -facebookawards.com -facebookblueprint.net -facebookbrand.com -facebookbrand.net -facebookcanadianelectionintegrityinitiative.com -facebookcareer.com -facebookcheats.com -facebookck.com -facebookclub.com -facebookcom.com -facebookconnect.com -facebookconsultant.org -facebookcoronavirus.com -facebookcovers.org -facebookcredits.info -facebookdating.net -facebookdevelopergarage.com -facebookdusexe.org -facebookemail.com -facebookenespanol.com -facebookexchange.com -facebookexchange.net -facebookfacebook.com -facebookflow.com -facebookgames.com -facebookgraphsearch.com -facebookgraphsearch.info -facebookgroups.com -facebookhome.cc -facebookhome.com -facebookhome.info -facebookhub.com -facebooki.com -facebookinc.com -facebookland.com -facebooklikeexchange.com -facebooklive.com -facebooklivestaging.net -facebooklivestaging.org -facebooklogin.com -facebooklogin.info -facebookloginhelp.net -facebooklogs.com -facebookmail.com -facebookmail.tv -facebookmanager.info -facebookmarketing.info -facebookmarketingpartner.com -facebookmarketingpartners.com -facebookmobile.com -facebookmsn.com -facebooknews.com -facebooknfl.com -facebooknude.com -facebookofsex.com -facebookook.com -facebookpaper.com -facebookpay.com -facebookphonenumber.net -facebookphoto.com -facebookphotos.com -facebookpmdcenter.com -facebookpoke.net -facebookpoke.org -facebookpoker.info -facebookpokerchips.info -facebookporn.net -facebookporn.org -facebookporno.net -facebookportal.com -facebooks.com -facebooksafety.com -facebooksecurity.net -facebookshop.com -facebooksignup.net -facebooksite.net -facebookstories.com -facebookstudios.net -facebookstudios.org -facebooksupplier.com -facebooksuppliers.com -facebookswagemea.com -facebookswagstore.com -facebooksz.com -facebookthreads.net -facebooktv.net -facebooktv.org -facebookvacation.com -facebookw.com -facebookwork.com -facebookworld.com -facebool.com -facebool.info -facebooll.com -faceboom.com -faceboon.com -faceboonk.com -faceboooik.com -faceboook.com -faceboop.com -faceboot.com -faceboox.com -facebopk.com -facebpook.com -facebuk.com -facebuok.com -facebvook.com -facebyook.com -facebzook.com -facecbgook.com -facecbook.com -facecbook.org -facecook.com -facecook.org -facedbook.com -faceebok.com -faceebook.com -faceebot.com -facegbok.com -facegbook.com -faceid99.com -faceid99.net -faceidglobal.com -faceobk.com -faceobok.com -faceobook.com -faceook.com -facerbooik.com -facerbook.com -facesbooc.com -facesounds.com -facetime.net -facetook.com -facevbook.com -facewbook.co -facewook.com -facfacebook.com -facfebook.com -faciometrics.com -fackebook.com -facnbook.com -facrbook.com -factograph.info -factwire.org -facvebook.com -facwebook.com -facxebook.com -fadebook.com -faebok.com -faebook.com -faebookc.com -faeboook.com -faecebok.com -faesebook.com -fafacebook.com -faicbooc.com -fairmarket.com -famifun.com.tw -family.co.jp -family.com.tw -familymart.com.my -familymart.com.ph -famima.vn -famosascalvas.com -fanatical.com -fanbox.cc -fandango.com -fandom.com -fandom.zendesk.com -fanhaodian.com -fantv.hk -farfetch-apps.com -farfetch-contents.com -farfetch.com -farfetch.net -faronics.ca -faronics.co.uk -faronics.com -faronics.com.au -faronics.com.sg -faronics.eu -faronics.kayako.com -faronics.tech -faronicslabs.com -faronicswise.co.uk -faronicswise.com -fasebokk.com -fasebook.com -faseboox.com -fashionnike.com -fast.com -fastlane.ci -fastlane.tools -fastly-terrarium.com -fastly.com -fastly.net -fastlylabs.com -fastlylb.net -faststone.org -fasttext.cc -fasttrackreadysupport.com -favebook.com -faycbok.com -fb.careers -fb.com -fb.me -fbacebook.com -fbbmarket.com -fbboostyourbusiness.com -fbcdn-a.akamaihd.net -fbcdn.com -fbcdn.net -fbf8.com -fbfeedback.com -fbhome.com -fbidb.io -fbinc.com -fbinfer.com -fbinnovation.com -fblitho.com -fbmarketing.com -fbmessenger.com -fbredex.com -fbreg.com -fbrell.com -fbrpms.com -fbsbx.com -fbsbx.net -fbsupport-covid.net -fbthirdpartypixel.com -fbthirdpartypixel.net -fbthirdpartypixel.org -fburl.com -fbworkmail.com -fcacebook.com -fcaebook.com -fcebook.com -fcebookk.com -fcfacebook.com -fdacebook.info -fdiintelligence.com -feacboo.com -feacbook.com -feacbooke.com -feacebook.com -fecbbok.com -fecbooc.com -fecbook.com -feceboock.com -fecebook.net -feceboox.com -fececbook.com -fedoraforum.org -fedoramagazine.org -fedoraproject.org -feedburner.com -feedly.com -femalefounderscomp.com -feook.com -ferabook.com -fescebook.com -fesebook.com -ffacebook.com -fffdm.com -fflick.com -fflnk.net -ffmpeg.org -ffotolia.com -ffprofile.com -fgacebook.com -ficeboock.com -fifastreet.com -fifastreet3.com -fightforux.com -figma.com -filipino-music.net -finalcutpro.com -financeleadsonline.com -financialadvisoriq.com -financialsoccer.ca -findacard.com -findercdn.me -findmybeats.com -findmyipad.com -findyourlimits.com -finenike.com -finish.at -finish.bg -finish.co.kr -finish.co.nz -finish.co.uk -finish.co.za -finish.com.hr -finish.com.tr -finish.de -finish.es -finish.fr -finish.gr -finish.hu -finish.lv -finish.pl -finish.pt -finish.ro -finish.si -finish.sk -finisharabia.com -finishbrasil.com.br -finishdishwashing.ca -finishdishwashing.com -finishinfo.be -finishinfo.cl -finishinfo.com -finishinfo.com.ar -finishinfo.com.au -finishinfo.cz -finishinfo.fi -finishinfo.it -finishinfo.jp -finishinfo.nl -finishinfo.no -finishinfo.ru -finishinfo.se -finishkilpailu.fi -finishwin.be -finlitsummit.org -fiotolia.com -fire-emblem-heroes.com -firebaseapp.com -firebaseio.com -fireemblemawakening.com -firefox.com -firefoxusercontent.com -fireside.fm -firesidegatherings.com -firestone.cl -firestone.co.cr -firestone.com.ar -firestone.com.br -firestone.com.co -firestone.com.mx -firestonebpco.com -firestonecomercial.cl -firestonecomercial.co.cr -firestonecomercial.com.ar -firestonecomercial.com.br -firestonecomercial.com.co -firestonecomercial.com.mx -firestonecompleteautocare.com -firestonedrivestore.com -firestoneip.com -firestonerewards.com -firestonetire.ca -firestonetire.com -firewire.cl -firewire.eu -fixtracking.com -flathub.org -flatmates.com.au -flatpak.org -flic.kr -flickr.com -flickr.net -flipnotestudio.com -flipshare.com -flipwithsurface.com -flirt4free.com -flow.dev -flow.org -flowtype.org -fluidpreview.com -flutter.dev -flutterapp.com -fmcebook.com -fnacebook.com -fnlondon.com -foampositeshoes.com -foftolia.com -follasian.com -fonolia.com -fontawesome.com -fontbook.com -fontexplorerx.com -fonts.com -fonts.net -fontshop-prod-responsive-images.s3.amazonaws.com -fontshop.com -fontsinuse.com -foofle.com -footseen.com -forbes.com -forbesimg.com -force.com -forgecdn.net -fortawesome.com -forthebadge.com -forthethrone.com -fortnite.com -fortuneinsight.com -forzamotorsport.net -forzaracingchampionship.com -forzarc.com -fosebook.com -fotiolia.com -fotoiia.com -fotolia-noticias.com -fotolia.cc -fotolia.com -fotolia.tv -fotolja.com -foundationdb.org -fox-corporation.com -fox-news.com -fox.com -fox.tv -fox10.tv -fox10news.com -fox10phoenix.com -fox11.com -fox13memphis.com -fox13news.com -fox23.com -fox23maine.com -fox247.com -fox247.tv -fox26.com -fox26houston.com -fox28media.com -fox29.com -fox2detroit.com -fox2news.com -fox32.com -fox32chicago.com -fox35orlando.com -fox38corpuschristi.com -fox42kptm.com -fox46.com -fox46charlotte.com -fox47.com -fox49.tv -fox4news.com -fox51tns.net -fox5atlanta.com -fox5dc.com -fox5ny.com -fox5storm.com -fox6now.com -fox7.com -fox7austin.com -fox9.com -foxacrossamerica.com -foxaffiliateportal.com -foxandfriends.com -foxbet.com -foxbusiness.com -foxbusiness.tv -foxbusinessgo.com -foxcanvasroom.com -foxcareers.com -foxcharlotte.com -foxcincy.com -foxcincy.jobs -foxcincy.net -foxcollegesports.com -foxcorporation.com -foxcreativeuniversity.com -foxcredit.com -foxcredit.org -foxd.tv -foxdcg.com -foxdeportes.com -foxdeportes.net -foxdeportes.tv -foxdigitalmovies.com -foxdoua.com -foxentertainment.com -foxest.com -foxfaq.com -foxfdm.com -foxfiles.com -foxinc.com -foxkansas.com -foxla.com -foxla.tv -foxlexington.com -foxmediacloud.com -foxnation.com -foxnebraska.com -foxneo.com -foxneodigital.com -foxnetworks.info -foxnetworksinfo.com -foxnews.cc -foxnews.com -foxnews.net -foxnews.org -foxnews.tv -foxnewsaffiliates.com -foxnewsaroundtheworld.com -foxnewsb2b.com -foxnewschannel.com -foxnewsgo.net -foxnewsgo.org -foxnewsgo.tv -foxnewshealth.com -foxnewslatino.com -foxnewsmagazine.com -foxnewsnetwork.com -foxnewsopinion.com -foxnewsplayer-a.akamaihd.net -foxnewspodcasts.com -foxnewspolitics.com -foxnewsradio.com -foxnewsrundown.com -foxnewssunday.com -foxon.com -foxphiladelphia.com -foxplus.com -foxpoker.com -foxrad.io -foxredeem.com -foxrelease.com -foxrichmond.com -foxrobots.com -foxsmallbusinesscenter.com -foxsmallbusinesscenter.net -foxsmallbusinesscenter.org -foxsoccer.net -foxsoccer.tv -foxsoccermatchpass.com -foxsoccerplus.com -foxsoccerplus.net -foxsoccerplus.tv -foxsoccershop.com -foxsports-chicago.com -foxsports-newyork.com -foxsports-world.com -foxsports.cl -foxsports.co -foxsports.co.ve -foxsports.com -foxsports.com.ar -foxsports.com.bo -foxsports.com.br -foxsports.com.co -foxsports.com.ec -foxsports.com.gt -foxsports.com.mx -foxsports.com.pe -foxsports.com.py -foxsports.com.uy -foxsports.com.ve -foxsports.gt -foxsports.info -foxsports.net -foxsports.net.br -foxsports.pe -foxsports.sv -foxsports.uy -foxsports2.com -foxsportsflorida.com -foxsportsgo.com -foxsportsla.com -foxsportsnetmilwaukee.com -foxsportsneworleans.com -foxsportsracing.com -foxsportssupports.com -foxsportsuniversity.com -foxsportsworld.com -foxstudiolot.com -foxsuper6.com -foxtel.com -foxtel.com.au -foxtelevisionstations.com -foxtv.com -foxtvdvd.com -foxuv.com -foxweatherwatch.com -fpacebook.com -fptolia.com -fqcebook.com -fr-beatsbydrestore.com -fracebook.com -fragrancebay.com -francecasquebeatssolde.com -francemail.com -frcasquesbeats.com -free-aa.com -free-sns.com -freeb.com -freebasics.com -freebasics.net -freebeacon.com -freebrowser.org -freebs.com -freebsd.org -freecodecamp.org -freedirecttvspecial.com -freedomplatform.tv -freefacebook.com -freefacebook.net -freefacebookads.net -freefblikes.com -freehulu.com -freenetproject.org -freenode.net -freessl.com -freeviewplus.net.au -freewechat.com -freindfeed.com -frescolib.org -friendbook.info -friendfed.com -friendfeed-api.com -friendfeed-media.com -friendfeed.com -friendfeedmedia.com -frishoes.com -frontiersin.org -froogle.com -frostbite.com -fsacebok.com -fscebook.com -fsdn.com -fse.tv -fssta.com -fstopimages.com -ft.com -ftadviser.com -ftcdn.net -ftchinese.com -fteproxy.org -ftiecla.com -ftv.com.tw -ftvnews.com.tw -fuchsia.dev -fujinkoron.jp -fundaiphone5s.com -fundfire.com -fundpaypal.com -fundraisingwithfacebook.com -funimation.com -funnyfacebook.org -funnyordie.com -fury.blog -fury.co -fury.dev -fury.help -fury.io -futhead.com -futpromos.com -futunited.com -futureofbusinesssurvey.org -futureshop.ca -fxn.ws -fxnetwork.com -fxnetworks.com -fzdm.com -g-technology.com -g-tun.com -g-tvapp.com -g.co -g.dev -g.page -gab.com -gacebook.com -galaxyappstore.com -galaxymobile.jp -gale.com -galegroup.com -game-platform.net -gamebeforethegame.com -gamedownloads-rockstargames-com.akamaized.net -gameon-masters.com -gamepedia.com -gamer-cds.cdn.hinet.net -gamer.com.tw -gamer2-cds.cdn.hinet.net -gameroom.com -gamesstack.com -gameuxmasterguide.com -gaming-notebooks.com -gannett-cdn.com -gannett.com -gannettdigital.com -garena.co.id -garena.co.th -garena.com -garena.live -garena.my -garena.ph -garena.sg -garena.tv -garena.tw -garena.vn -garenanow.com -gateway.dev -gaypad.net -gbnews.uk -gcld-line.com -gclubs.com -gcr.io -gcrtires.com -gdansk-amazon.com -gears5.com -gearspop.com -gearstactics.com -geek-squad-support.com -geek-squad.net -geek-squad.org -geek-squads.net -geeksquad.ca -geeksquad.cc -geeksquad.com -geeksquad.net -geeksquad.tv -geeksquadcares.com -geeksquadcentral.com -geeksquadforums.com -geeksquadonline.com -geeksquadprotectionplan.org -geeksquadservices.org -geeksquadwebroot.org -geelongadvertiser.com.au -geforce.co.kr -geforce.co.uk -geforce.com -geforce.com.tw -gemfire.net -gemfury.com -gemini.yahoo.com -gen.lib.rus.ec -gendai.net -gentoo.org -geodesummit.com -geoport.com -geotrust.com -geph.io -geraldoatlarge.com -gerritcodereview.com -get.app -get.dev -get.how -get.page -getadblock.com -getbootstrap.com -getboxer.com -getbraintree.com -getbumptop.com -getcomposer.org -getdirect.tv -getdrebeatssale.com -getdropbox.com -getfedora.org -geti2p.net -getlantern.org -getpocket.com -getprintersupports.com -gettr.com -gettyimages.ae -gettyimages.at -gettyimages.be -gettyimages.ca -gettyimages.ch -gettyimages.co.jp -gettyimages.co.nz -gettyimages.co.uk -gettyimages.com -gettyimages.com.au -gettyimages.com.br -gettyimages.com.mx -gettyimages.de -gettyimages.dk -gettyimages.es -gettyimages.fi -gettyimages.fr -gettyimages.hk -gettyimages.ie -gettyimages.in -gettyimages.it -gettyimages.nl -gettyimages.no -gettyimages.pt -gettyimages.se -getws1.com -getwsone.com -gfacecbook.com -gfashion.com -gfotolia.com -gfw.press -gfw.report -gfx.ms -gfycat.com -ggoogle.com -ggpht.com -ggsrv.com -ghcr.io -ghostgames.com -gigabyte.com -gigabyte2.azureedge.net -gigjam.com -ginzasonypark.jp -gipscorp.com -giratina.com -girlspoopingtube.com -gisplanning.com -git-scm.com -git.io -gitbook.com -gitbook.io -github-avatars.oss-cn-hongkong.aliyuncs.com -github-cloud.s3.amazonaws.com -github.blog -github.com -github.community -github.dev -github.io -githubapp.com -githubassets.com -githubhackathon.com -githubpreview.dev -githubstatus.com -githubuniverse.com -githubusercontent.com -gitlab-assets.oss-cn-hongkong.aliyuncs.com -gitlab-static.net -gitlab.com -gitlab.io -gitlab.net -gitstar.com -gitstar.net -gittigidiyor.net -gittigidiyorsikayet.com -glasamerike.net -globaledu.org -globalriskregulator.com -globalsecurity.org -globalsign-media.com -globalsign.be -globalsign.ch -globalsign.co.uk -globalsign.com -globalsign.com.au -globalsign.com.hk -globalsign.com.sg -globalsign.es -globalsign.eu -globalsign.fr -globalsign.net -globalsign.nl -globalspec.com -globalvoices.org -globalvoicesonline.org -gloryofheracles.com -glyphsapp.com -gmail.com -gmnetworks.net -gmodules.com -gmoney.org -gnews.org -gnu.org -go-disneyworldgo.com -go-lang.com -go-lang.net -go-lang.org -go.com -go.dev -gobeatsye.com -gobianywhere.com -gobuyonlinestore.net -godaddy.com -godoc.org -goduckgo.com -gofundme.com -gog-statics.com -gog.com -gogle.com -gogo-load.com -gogoanime.vc -gogoanime.wiki -gogocdn.net -gogole.com -golang.com -golang.net -golang.org -goldcoastbulletin.com.au -goldnikeclub.com -golos-ameriki.ru -golosameriki.com -gonglchuangl.net -gonike.com -goo.gl -gooddaychicago.com -goodsdunk.net -googel.com -googil.com -googl.com -google-analytics.com -google-syndication.com -google.ad -google.ae -google.al -google.am -google.as -google.at -google.az -google.ba -google.be -google.berlin -google.bf -google.bg -google.bi -google.bj -google.bs -google.bt -google.by -google.ca -google.cat -google.cd -google.cf -google.cg -google.ch -google.ci -google.cl -google.cm -google.co.ao -google.co.bw -google.co.ck -google.co.cr -google.co.id -google.co.il -google.co.in -google.co.jp -google.co.ke -google.co.kr -google.co.ls -google.co.ma -google.co.mz -google.co.nz -google.co.th -google.co.tz -google.co.ug -google.co.uk -google.co.uz -google.co.ve -google.co.vi -google.co.za -google.co.zm -google.co.zw -google.com -google.com.af -google.com.ag -google.com.ai -google.com.ar -google.com.au -google.com.bd -google.com.bh -google.com.bn -google.com.bo -google.com.br -google.com.bz -google.com.co -google.com.cu -google.com.cy -google.com.do -google.com.ec -google.com.eg -google.com.et -google.com.fj -google.com.gh -google.com.gi -google.com.gt -google.com.hk -google.com.jm -google.com.kh -google.com.kw -google.com.lb -google.com.ly -google.com.mm -google.com.mt -google.com.mx -google.com.my -google.com.na -google.com.ng -google.com.ni -google.com.np -google.com.om -google.com.pa -google.com.pe -google.com.pg -google.com.ph -google.com.pk -google.com.pr -google.com.py -google.com.qa -google.com.sa -google.com.sb -google.com.sg -google.com.sl -google.com.sv -google.com.tj -google.com.tr -google.com.tw -google.com.ua -google.com.uy -google.com.vc -google.com.vn -google.cv -google.cz -google.de -google.dev -google.dj -google.dk -google.dm -google.dz -google.ee -google.es -google.fi -google.fm -google.fr -google.ga -google.ge -google.gg -google.gl -google.gm -google.gr -google.gy -google.hn -google.hr -google.ht -google.hu -google.ie -google.im -google.iq -google.is -google.it -google.je -google.jo -google.kg -google.ki -google.kz -google.la -google.li -google.lk -google.lt -google.lu -google.lv -google.md -google.me -google.mg -google.mk -google.ml -google.mn -google.ms -google.mu -google.mv -google.mw -google.ne -google.net -google.nl -google.no -google.nr -google.nu -google.org -google.pl -google.pn -google.ps -google.pt -google.ro -google.rs -google.ru -google.rw -google.sc -google.se -google.sh -google.si -google.sk -google.sm -google.sn -google.so -google.sr -google.st -google.td -google.tg -google.tl -google.tm -google.tn -google.to -google.tt -google.ventures -google.vg -google.vu -google.ws -googleacquisitionmigration.com -googleadapis.com -googleadservices.com -googleanalytics.com -googleapis.com -googleapps.com -googlearth.com -googleblog.com -googlebot.com -googlecapital.com -googlecert.net -googlecode.com -googlecommerce.com -googlecompare.co.uk -googledanmark.com -googledomains.com -googledrive.com -googlee.com -googleearth.com -googlefiber.net -googlefinland.com -googlemail.com -googlemaps.com -googleoptimize.com -googlepagecreator.com -googlephotos.com -googleplay.com -googleplus.com -googlesource.com -googlestore.com -googlesverige.com -googlesyndication.com -googletagmanager.com -googletagservices.com -googletraveladservices.com -googleusercontent.com -googleventures.com -googlevideo.com -googlr.com -goolge.com -gooogle.com -gopivotal.com -gopivotal.net -gordonmoore.com -gorin.jp -gosq.co -gosq.com -gostorego.com -gotcosmos.com -gotraffic.net -gouri.xyz -govforce.com -gpstheseries.com -gputechconf.co.kr -gputechconf.com -gputechconf.com.au -gputechconf.com.tw -gputechconf.eu -gputechconf.in -gputechconf.jp -grafolio.com -graneodin.com.mx -graph.org -graphengine.io -gravatar.com -gravitytank.com -greatergothammini.com -greatfire.org -greenend.org.uk -greenplum.net -gridaware.app -groups.com -grss-ieee.org -grupobmw.com -gscanada.info -gsccdn.com -gslink.us -gsrc.io -gstatic.com -gsuite.com -gtv.org -gtv1.org -gu-web.net -guambmw.com -guangming.com.my -guardianapis.com -guardianapps.co.uk -guardianproject.info -gucci.com -guccimuseo.com -guccitimeless.com -guim.co.uk -gumtree.sg -guo.media -gv.com -gvt0.com -gvt1.com -gvt2.com -gvt3.com -gvt5.com -gvt6.com -gvt7.com -gvt9.com -gwktravelex.nl -hackday.com.au -hackerfacebook.com -hackerguardian.com -hackfacebook.com -hackfacebookid.com -hacklang.org -hacksear.ch -hackthedrive.com -hackyourconsole.com -half.com -half.tv -halfcanada.com -halfjapan.com -handbags-nike.com -handbagsoutletebay.com -hanime.tv -hanime1.me -happymeal.co.nz -happymeal.com.au -harperacademic.com -harperapps.com -harpercollins.ca -harpercollins.co.in -harpercollins.co.uk -harpercollins.com -harpercollins.com.au -harpercollinsadvantage.com -harpercollinschildrensbooks.co.uk -harpercollinschristian.com -harpercollinsspeakersbureau.com -hashicorp.com -haskell.org -haskellstack.org -hath.network -haveibeenpwned.com -hawaiibmw.com -hayabusa.dev -hayabusa.io -hayabusa.media -hbabit.com -hbfile.net -hbo.com -hboasia.com -hbogo.com -hbogoasia.com -hbogoasia.hk -hbomax.com -hbomaxcdn.com -hbonow.com -hcaptcha.com -hcaptchastatus.com -hcpdts.com -hddirectv.com -hdrplusdata.org -headlinejobs.hk -headphonepubs.com -headphones-cool.com -headphones-dre.com -headphones-outlet-online.com -headphonesbeatsaudio.com -headphonesbeatsbydre.com -headphoneses.com -headphoneshome.com -headphoneshotsales.com -headphonesol.com -headphonesretailer.com -headphonessupply.com -headphonezip.com -heads4-ak-spotify-com.akamaized.net -headset987.com -healthreach.hk -heaven-burns-red.com -heavy-r.com -hebiphone.com -hegre.com -hellokittybeats.com -hellosmartbook.com -hentaiathome.net -hentaiverse.org -heptio.com -heraldsun.com.au -heroesofdragonage.com -heroesofthestorm.com -heroku-app.com -heroku-charge.com -heroku.co -heroku.com -heroku.me -herokuapp.com -herokucdn.com -herokucharge.com -herokussl.com -herringnetwork.com -heydoga.com -heywire.com -heyzo.com -hf-iphone.com -hhvm.com -hibdontire.com -hidive.com -hifacebook.info -highbolt.net -highdefinitionbeatsbydre.com -hightopnikes.com -hindawi.com -hindiweb.com -hinet.net -hipaa6020.com -hipzoom.net -historyofdota.com -historyofdota.net -historyofdota.org -hitun.io -hk01.com -hkbn.com.hk -hkbn.net -hkbnes.net -hkcircleapp.com -hkcitizenmedia.com -hkcnews.com -hkcsl.com -hkedcity.net -hkej.com -hket.com -hketgroup.com -hkgolden.com -hkgolden.media -hkgpao.com -hkheadline.com -hkopentv.com -hkreadingcity.net -hkt-enterprise.com -hkt-eye.com -hkt.com -hkteducation.com -hktpremier.com -hktshop.com -hm.com -hochi.news -hololens.com -homebrew.bintray.com -homedepot-static.com -homedepot.com -homephoneplus.com -hometrack.com.au -honawalaan.com -hongkongfp.com -hooloo.tv -hoolu.com -hoolu.tv -hopstop.tv -hotbeatsonsale.com -hotmail.co -hotmail.com -hotmail.eu -hotmail.net -hotmail.org -hotmonsterbeats.com -hottestheadphonesonline.com -housing.com -housingcdn.com -howtogetmo.co.uk -howtohackfacebook-account.com -hp-imagine.com -hp-infolab.com -hp-invent.com -hp-invent.info -hp-mns.com -hp-printing.com -hp-webplatform.com -hp-ww.com -hp.com -hp.company -hp.io -hp3d.com -hp3dmetals.com -hp3dprinter.com -hp3dsamplepromo.com -hpallinoneprinter.com -hpapplicationscenter.com -hpbestbuy.com -hpbluecarpet.com -hpbluecarpet.net -hpbuiltforlearning.com -hpbundle.com -hpcampus.com -hpcatridge.com -hpccp.com -hpceo.com -hpcmw.net -hpcodewarsbcn.com -hpcomputers.com -hpcomputerservices.com -hpconnected.com -hpconnected.net -hpconnected.org -hpconnected.us -hpconnectedstage.com -hpcontinuum.com -hpcpi.com -hpcu.org -hpcustomersupport.com -hpcustomersupport.net -hpdaas.com -hpdesignjetl25500.com -hpdesktopcomputer.com -hpdownloadstore.com -hpdreamcolor.com -hpdriver.com -hpdrivers.com -hpdrivers.org -hpeclipse.com -hpengage.com -hpeprint.com -hpeprintcenter.com -hpeurope.com -hpeventcenter.com -hpfaqs.com -hpfeedback.com -hpgift.com -hpgpas.com -hpgraphicspartners.com -hpiie.org -hpinc.info -hpinc.net -hpindigopress.com -hpinkjet.com -hpinstantink.ca -hpinstantink.com -hpjav.tv -hpkeyboard.com -hplaptop.com -hplaptopbattery.com -hplargeformatremote.com -hplatexknowledgecenter.com -hplfmedia.com -hplip.net -hplipopensource.com -hpmarketplace.com -hpmemorychips.com -hpmicrcartridge.com -hpmini.com -hpmobile.com -hpofficejetprinter.com -hponlinehelp.com -hponlineprinting.com -hppage5000.com -hppavillionlaptop.com -hpphotoscanners.com -hpprinterdrivers.com -hpprinterinstalls.com -hpprintersupplies.com -hpsalescentral.com -hpserver.com -hpservices.com -hpshooping.com -hpshop.com -hpshoping.com -hpshopping.hk -hpsignage.com -hpsmart.com -hpsmarts.com -hpsmartstage.com -hpsmartupdate.com -hpsoftware.com -hpspeaker.com -hpsprocket.com -hpstore-china.com -hpstore-emea.com -hpstore.com -hpstore.corpmerchandise.com -hpstorethailand.com -hpsupport.com -hpsuresupply.com -hptechventures.com -hpto.net -hptouch.com -hptouchpointmanager.com -hptrainingcenter.com -hpuae.com -hpuniversity.info -hpusertraining.com -hpveer.com -hpvirtualthin.com -hpwallart.com -hpwellnesscentral.com -hpwsn.com -hqporner.com -hrsaz.com -hsfacebook.com -hsxhr.cc -html5rocks.com -httpfacebook.com -httpsfacebook.com -httpwwwfacebook.com -hu1u.com -huanghuagang.org -huanyuju.com -huffingtonpost.ca -huffingtonpost.co.uk -huffingtonpost.co.za -huffingtonpost.com -huffingtonpost.com.au -huffingtonpost.com.mx -huffingtonpost.de -huffingtonpost.es -huffingtonpost.fr -huffingtonpost.gr -huffingtonpost.in -huffingtonpost.it -huffingtonpost.jp -huffingtonpost.kr -huffpost.com -huffpostarabi.com -huffpostbrasil.com -huffpostmaghreb.com -huloo.cc -huloo.tv -hulu.com -hulu.tv -hulu.us -huluaction.com -huluad.com -huluapp.com -huluasks.com -hulucall.com -hulufree.com -hulugans.com -hulugermany.com -hulugo.com -huluim.com -huluinstantmessenger.com -huluitaly.com -hulunet.com -hulunetwork.com -huluplus.com -hulupremium.com -hulupurchase.com -huluqa.com -hulurussia.com -huluspain.com -hulusports.com -hulustream.com -huluteam.com -hulutv.com -huluusa.com -humblebundle.com -hummingbird.ms -huobi.com -huobi.me -huobi.pro -huobi.sc -huobiasia.vip -huobigroup.com -huobitoken.com -hutao.cloud -hutpromos.com -hwgo.com -hwslabs.com -hxc10.vip -hxcsxs.pro -hyperscan.io -i-123-hp.com -i-book.com -i-book.net -i-cable.com -i-o-u.info -i-scmp.com -i.jeded.com -i.org -iaablog.com -iam.soy -iamakamai.com -iamakamai.net -iamremarkable.org -ibb.co -ibeats-uk.com -ibeatsbydre.cc -ibeatsbydre.com -ibm.com -ibm.eu -ibm.net -ibm.us -ibook.co.nz -ibook.com -ibook.eu -ibook.net -ibookpartner.com -ibooksauthor.com -ic.ac.uk -icashpassport.com.mx -ichat.co.in -ichineseporn.com -icloud-content.com -icloud-isupport.com -icloud.ch -icloud.com -icloud.de -icloud.ee -icloud.fi -icloud.fr -icloud.hu -icloud.ie -icloud.is -icloud.jp -icloud.lv -icloud.om -icloud.org -icloud.pt -icloud.ro -icloud.se -icloud.si -icloud.sk -icloud.vn -icloudads.net -icloudbox.net -icloudbrowser.net -icloude.com -icloudhome.com -icloudmail.net -icloudmusic.net -icloudnet.net -icloudo.com -icloudo.de -icloudo.net -icloudos.de -icloudos.net -icloudpay.net -icloudsecure.net -icloudsetup.com -idelreal.org -identrust.co.uk -identrust.com -identrust.net -idnike.com -idservice.inc -idvd.eu -ie10.com -ie11.com -ie8.co -ie9.com -iebay.com -ieee-aess.org -ieee-cas.org -ieee-ccnc.org -ieee-ceda.org -ieee-ecce.org -ieee-edusociety.org -ieee-ies.org -ieee-ims.org -ieee-into-focus.org -ieee-isto.org -ieee-npss.org -ieee-pels.org -ieee-pes.org -ieee-ras.org -ieee-region6.org -ieee-sensors.org -ieee-tems.org -ieee-uffc.org -ieee-vics.org -ieee.ca -ieee.org -ieee.tv -ieeeaps.org -ieeecsc.org -ieeecss.org -ieeeday.org -ieeedeis.org -ieeefoundation.org -ieeemagnetics.org -ieeemce.org -ieeenano.org -ieeeoes.org -ieeer10.org -ieeer5.org -ieeer8.org -ieeesmc.org -ieeesystemscouncil.org -ieeeusa.org -ietf.org -ifontcloud.com -ig.me -igcdn.com -ign.jp -ignites.com -ignitesasia.com -igniteseurope.com -igoogle.com -igoshopping.net -igsonar.com -igtv.com -iijav.com -iina.io -ikea.com -ikea.net -ikids.com -ilecture.co.nz -ilife.eu -ilife.gr -ilife.wang -illianacomputerrecycling.com -ilongman.com -imac-applecomputer.com -imac.co -imac.co.nz -imac.com -imac.eu -imac.gr -imac.one -imac.rs -imacapplecomputer.com -imacsources.com -imagebam.com -imagecurl.com -imagecurl.org -images-amazon.com -imageshack.com -imageshack.us -imagetwist.com -imageworks.com -imaginecup.pl -imagineecommerce.com -imdb.com -imdb.to -imessage.tv -img-prod-cms-rt-microsoft-com.akamaized.net -img-s-msn-com.akamaized.net -imgbb.com -imgcrl.org -imgix.com -imgix.net -imgsmail.ru -imgur.com -imgurinc.com -immidio.com -immxd.com -imod.com -imonsterbeats.com -imovie.eu -imoviegallery.com -imoviestage.com -imperial.ac.uk -imperial.insendi.com -imperialbusiness.school -impermium.com -imstagram.com -imtagram.com -inasian.club -incentivetravelgifts.com -inclusivegrowthscore.com -ind.sh -indazn.com -indaznlab.com -independentoperatorcn.com -india.com -indiaipad.com -indiancolleges.com -industrialtoys.com -informs.org -infotimes.com.tw -infowars.com -infowarsmedia.com -infrapedia.com -ingads.com -ingka.com -ingka.dev -ingkacentres.com -inikesneakers.com -init.shop -initproducts.com -inkchoice.com -inlethd.com -inmediahk.net -innovations-i.com -inoreader.com -inside.com.tw -insidefilms.com -insidemacintosh.com -insider-intelligence.com -insider.com -insiderdevtour.com -insiderintelligence.com -insidevoa.com -instaadder.com -instachecker.com -instafallow.com -instafollower.com -instagainer.com -instagda.com -instagify.com -instagmania.com -instagor.com -instagram-brand.com -instagram-engineering.com -instagram-help.com -instagram-press.com -instagram-press.net -instagram.com -instagramci.com -instagramcn.com -instagramdi.com -instagramhashtags.net -instagramhilecim.com -instagramhilesi.org -instagramium.com -instagramizlenme.com -instagramkusu.com -instagramlogin.com -instagramm.com -instagramn.com -instagrampartners.com -instagramphoto.com -instagramq.com -instagramsepeti.com -instagramtakipcisatinal.net -instagramtakiphilesi.com -instagramtips.com -instagramtr.com -instagran.com -instagranm.com -instagrem.com -instagrm.com -instagtram.com -instagy.com -instamgram.com -instangram.com -instantink.com -instantssl.com -instanttelegram.com -instaplayer.net -instastyle.tv -instgram.com -instituteofwar.org -intagram.com -intagrm.com -intc.com -integral7.com -intel-research.net -intel-university-collaboration.net -intel.ac -intel.ae -intel.af -intel.ag -intel.ai -intel.ar -intel.at -intel.az -intel.ba -intel.bg -intel.bh -intel.bi -intel.bo -intel.bs -intel.by -intel.ca -intel.cc -intel.cg -intel.ch -intel.cl -intel.cm -intel.co.ae -intel.co.cr -intel.co.id -intel.co.il -intel.co.jp -intel.co.kr -intel.co.uk -intel.co.za -intel.com -intel.com.ar -intel.com.au -intel.com.bo -intel.com.br -intel.com.co -intel.com.ec -intel.com.hk -intel.com.jm -intel.com.mx -intel.com.my -intel.com.pe -intel.com.ph -intel.com.pr -intel.com.py -intel.com.tr -intel.com.tw -intel.com.uy -intel.com.ve -intel.cr -intel.cu -intel.cz -intel.de -intel.dk -intel.dz -intel.ec -intel.ee -intel.eg -intel.es -intel.eu -intel.fi -intel.fr -intel.ga -intel.gd -intel.ge -intel.gl -intel.gm -intel.gr -intel.gs -intel.gt -intel.gy -intel.hk -intel.hn -intel.ht -intel.hu -intel.ie -intel.in -intel.io -intel.it -intel.je -intel.jo -intel.jp -intel.ke -intel.la -intel.lc -intel.lk -intel.lt -intel.lu -intel.ly -intel.ma -intel.md -intel.me -intel.mg -intel.mk -intel.mn -intel.mp -intel.mt -intel.mu -intel.mw -intel.mx -intel.my -intel.ng -intel.nl -intel.nu -intel.nz -intel.pa -intel.pe -intel.ph -intel.pl -intel.pn -intel.re -intel.ro -intel.ru -intel.rw -intel.sa -intel.sc -intel.se -intel.sg -intel.si -intel.sk -intel.sn -intel.sr -intel.st -intel.sv -intel.sx -intel.sy -intel.tf -intel.tj -intel.tl -intel.tm -intel.tn -intel.tt -intel.tv -intel.tw -intel.ua -intel.uk -intel.us -intel.uy -intel.uz -intel.vg -intel.vn -intel.vu -intel.wf -intel.yt -intelamericasstore.com -intelapacstore.com -intelatom.net -intelcapital.com -intelcapital.net -intelcloudbuilders.com -intelcloudfinder.com -intelemeastore.com -inteleventexpress.com -intelforchange.com -intelfreepress.com -intelgo.net -intelinsight.com -inteliotmarketplace.com -intell.com -intellearningseries.com -intellij.com -intellij.net -intellij.org -intellinuxgraphics.com -intellinuxgraphics.net -intellinuxwireless.net -intelnervana.com -intelnet.component -intelplay.com -intelquark.com -intelrealsense.com -intelrxt.com -intelsalestraining.com -intelsecurity.com -intelserveredge.com -intelsoftwarenetwork.com -intelstore.com -inteltechnologyprovider.com -intelvmwarecybersecurity.com -interactive-examples.mdn.mozilla.net -intercamcashpassport.com.mx -intercom.com -intercom.io -intercomassets.com -intercomcdn.com -internationalconnectionsacademy.com -internationalsaimoe.com -internet.org -internetdownloadmanager.com -internetexplorer.co -internetexplorer.com -internetofeverything.com -intgram.com -intheknow.com.au -intunewiki.com -inventorship.com.au -investorschronicle.co.uk -ioe.com -ioffergift.com -iop.org -ios-icloud.com -iosinthecar.com -iotinactionevents.com -ip.sb -ip73.com -ipa-iphone.net -ipad.co.kr -ipad.de -ipad.host -ipad.wang -ipad3.com -ipadair.cl -ipadair.cm -ipadair.com.br -ipadair.com.es -ipadair.fr -ipadair.hk -ipadair.ie -ipadair.jp -ipadair.tw -ipadaustralia.com -ipadmini.cm -ipadmini.com.lk -ipadmini.lk -ipadpro.buzz -ipfs.io -iphine.com -iphone-cd.com -iphone-cn.com -iphone-sh.com -iphone-vip1.com -iphone-vip2.com -iphone-vip3.com -iphone-vip4.com -iphone-vip5.com -iphone-x.tv -iphone-yh.com -iphone-zh.com -iphone.cm -iphone.com -iphone.com.au -iphone.com.gr -iphone.es -iphone.host -iphone.net.gr -iphone.pt -iphone.rs -iphone.ru -iphone.wang -iphone4.com -iphone4.com.br -iphone4s.com -iphone5.com -iphone5casescovers.com -iphone5s5case.com -iphoneacessorios.com.br -iphonecase2013.com -iphonecase5.com -iphonecases100.com -iphonecases5.com -iphoneclaro.com.br -iphonecollcase.com -iphonefc.com -iphonegermany.com -iphonehangzhou.com -iphoneimessage.com -iphoneplus.wang -iphonerip.net -iphonese.tv -iphoneunlockimei.com -iphonexs.tv -iphoto.eu -iphoto.no -iphoto.se -iphoto.wang -ipleadership.org -ipod.ca -ipod.ch -ipod.cm -ipod.co -ipod.co.nz -ipod.co.uk -ipod.co.za -ipod.com -ipod.com.au -ipod.com.fr -ipod.com.hk -ipod.com.sg -ipod.com.tw -ipod.de -ipod.es -ipod.eu -ipod.fr -ipod.gr -ipod.hk -ipod.is -ipod.net -ipod.no -ipod.pk -ipod.rs -ipod.ru -ipod.tw -ipodcentre.nl -ipodcleaner.com -ipoditouch.com -ipodnano.com -ipodnano.net -ipodprices.com -ipodrip.ca -ipodrocks.com.au -ipods.com -ipodshop.com.au -ipodtouch.co -ipodtouch.com -ipple.com -ippog.org -ippstatic.com -iproperty.com -iproperty.com.my -iproperty.com.sg -ironna.jp -irribay.com -is.gd -isca-speech.org -ischool.com -isexlove.tw -isexomega.tw -isiknowledge.com -iskoot.com -islamiccenterofnewlondon.com -issquaredown.com -issquareup.com -italiabeatsbydrdre.com -itcanwait.com -itcfonts.com -itfromtheinside.com -itnel.com -itools.info -itripto.com -itsbetterwhenyouwinit.com -itsoc.org -itu.int -itun.es -itunbes.com -ituneas.com -itunes-radio.net -itunes.ca -itunes.co -itunes.co.th -itunes.com -itunes.hk -itunes.mx -itunes.org -itunes.rio -itunes.us -itunes12days.com -itunesessentials.com -itunesfestivals.com -itunesiradio.com -ituneslatino.com -ituneslogin.net -itunesmatch.com -itunesparty.com -itunesradio.com -itunesradio.rio -itunesradio.tv -itunesradio.tw -itunesstore.co -itunesu.com -itunesu.net -ius.io -iutunes.com -iwara.tv -iwork.com -iwork.se -iwork.wang -ixquick.com -iza.ne.jp -j2objc.org -jable.tv -jamanetwork.com -japan-forward.com -japan-whores.com -japanesebeauties.net -japanknowledge.com -jav.guru -jav01.cc -jav101.com -jav168.cc -jav321.com -jav777.cc -java.com -java.net -javbus.com -javbus22.com -javcc.cc -javcc.com -javdb.com -javdoe.com -javdove8.xyz -javfinder.sh -javfor.me -javfree.me -javfull.net -javhd.com -javhd.pro -javhd3x.com -javhdfree.net -javlibrary.com -javmodel.com -javmost.com -javqd.com -javscreens.com -javwide.com -javwide.tv -javynow.com -jbe-platform.com -jenkins.io -jetbrains.com -jetbrains.net -jetbrains.space -jetbrains.team -jetfuelapp.com -jetfuelapps.com -jfengtime.com -jfrog.com -jfrog.org -jgg18.xyz -jiayoulu.com -jibemobile.com -jijiji.ca -jinnaju.com -jitsi.org -jiyu-kobo.co.jp -jjdong7.com -jkbeats.com -jmlr.org -jneurosci.org -jobmarket.com.hk -joeswall.com -johren.net -joinclubhouse.com -joinmaidez.com -joox.com -jos.com -jquery.com -jquerymobile.com -jqueryui.com -js.org -jsbridgestone.com -jsdelivr.com -jsdelivr.net -jstage.jst.go.jp -jstor.org -jtvnw.net -jupyter.org -justdoit.us -justduckit.com -justmysocks.net -justmysocks1.net -justmysocks2.net -justmysocks4.net -jwpcdn.com -jwplatform.com -jwplayer.com -jwpltx.com -jwpsrv.com -jwt.ms -k8s.io -kaggle.com -kaggle.io -kali.org -kamisama-day.jp -kamisama-maeda-lab.com -kannewyork.com -kanzhongguo.com -kanzhongguo.eu -kastatic.org -kavkazr.com -keepmovingwithmovefree.com -keiba.net -kernel.org -keyhole.com -keytransparency.com -keytransparency.foo -keytransparency.org -kfs.io -khanacademy.org -kickshatchannel.com -kicksnike1.com -kicu.tv -kidgrid.tv -kidsnikeshoes.com -kidspot.com.au -kiji.ca -kijii.ca -kijij.ca -kijiji.ca -kijijiauto.ca -kijijiautos.ca -kijijiforbusiness.ca -kijijii.ca -kijijiraps.ca -kijji.ca -kijjiji.ca -kilmeadeandfriends.com -kindgirls.com -kindle.co.jp -kindle.co.uk -kindle.com -kindle.de -kindle.es -kindle.fr -kindle.in -kindle.it -kindle.jp -kindle4rss.com -kindleoasis.com -kindleoasis.info -kindleoasis.jp -kindleoasis.org -kindleoasis.us -kindleoasisnews.com -kindleproject.com -kingkong.com.tw -kingkongapp.com -kingstagram.com -kirbysepicyarn.com -kirbysuperstarultra.com -kissjav.com -kk.stream -kkbox.com -kkbox.com.tw -kktix.com -kktv.com.tw -kktv.me -klik.me -knovel.com -knowswho.co.jp -knoxemm.com -kobbeatssbydredk.com -kodi.tv -kodi.wiki -kompoz2.com -kopfhorergunstigshop.com -kotlinlang.org -koubaibu.jp -kphimsex.net -kraken.com -krakenjs.com -krux.com -krymr.com -kscisco.com -ktvu.com -kubeacademy.com -kubeapps.com -kubernetes.io -kuke.com -kyodo-d.info -kyodo-d.jp -kyodoimages.jp -kyodonews.jp -kyodonews.net -kyurem.com -lagranepoca.com -landofhope.tv -lanik.us -lantern.io -lanternal.com -laracasts.com -lasvegasbmw.com -latampartneruniversity.com -latamvmwareforum.com -latencytop.com -latex-project.org -latticedata.com -launchpad.net -launchpad.wang -launchpadlibrarian.com -launchpadlibrarian.net -launchpadlibrarian.org -lavteam.org -lawdata.com.tw -lcsmerch.com -le-direct.tv -leaguehighschool.com -leagueoflegends.ca -leagueoflegends.co.kr -leagueoflegends.com -leagueoflegends.info -leagueoflegends.kr -leagueoflegends.net -leagueoflegends.org -leagueoflegendsscripts.com -leaguesharp.info -leaguoflegends.com -learnwithleague.com -leavinghpinc.com -lecoin.cc -lede-project.org -leecountytimes.com -legaltracker.com -lencr.org -letmejerk.com -letsencrypt.org -lexuemei.com -lfai.foundation -lg.com -lgappstv.com -lge.co.kr -lge.com -lgecareers.com -lgelectronics.122.2o7.net -lghvac.com -lghvacstory.com -lgrecyclingprogram.com -lgsalesportal.com -liberapay.com -liberapay.org -libgen.fun -libgen.is -libgen.life -libgen.me -libgen.rs -libgen.st -librarylovefest.com -licdn.com -licensebuttons.net -life-global.org -lifewire.com -lightbridge.com -lih.kg -lihkg.com -like.com -liketwice.com -limedia.tw -limelight.com -lin.ee -line-apps-beta.com -line-apps-rc.com -line-apps.com -line-beta.me -line-cdn.net -line-scdn.net -line.me -line.naver.jp -linear-abematv.akamaized.net -linearcollider.org -linecorp.com -linefriends.com -linefriends.com.tw -linegame.jp -linemobile.com -linemyshop.com -lineshoppingseller.com -linetv.tw -linguee.com -linkedin.com -linotype.com -linux.org -linuxfoundation.org -linuxfromscratch.org -linuxmint.com -listinganalytics.net -litbus-anime.com -literatumonline.com -litv.tv -live.com -live.com.au -live.eu -live.net -liveauction.com -livefilestore.com -livejasmin.com -livephotos.tv -liverail.com -liverail.tv -livestream.com -livingyourambition.com -livrariart.com.br -lizol.co.in -lldns.net -llnw-trials.com -llnw.com -llnw.net -llnwd.net -llnwi.net -lnstagram-help.com -loanbuilder.com -localbitcoins.com -localbitcoinschain.com -localizecdn.com -localizejs.com -localizestatus.com -localpresshk.com -logi.com -logicool.co.jp -logicoolg.com -login-account.net -login-paypal.com -login-paypal.info -logitech.biz -logitech.com -logitech.fr -logitechg.com -logitechg.fr -lojaiphone.com.br -lol-europe.com -lolclub.org -lolespor.com -lolesports.com -lolfanart.net -loli.net -lolpcs.com -lolshop.co.kr -lolstatic-a.akamaihd.net -lolstatic.com -lolusercontent.com -londonmithraeum.com -londonreal.tv -longman.ch -longtailvideo.com -lookinside.com -lordofultima.com -love7.xyz -lovebeatsdr.com -lovemarca.com -loveparents.org -loverslab.com -lovesexdurex.com -lovethiscity.com -lp99.pw -lsnzxzy1.com -ltn.com.tw -ltsports.com.tw -lua.org -lubetube.com -luckyissue.com -lululu.one -lysol.ca -lysol.cl -lysol.co.cr -lysol.com -lysol.com.mx -lysol.net -lyzsxx.com -m-power.com -m.me -m12.vc -m2m.com -mac-mini.com -mac.com -mac.com.au -mac.eu -mac.rs -mac.wang -macappsto.re -macbook.co -macbook.hk -macbook.tw -macbook.wang -macbookair.co.kr -macbookair.co.uk -macbookair.com -macbookair.com.au -macbookair.com.es -macbookair.es -macbookair.hk -macbookair.jp -macbookair.kr -macbookair.net -macbookpro.co -macbookpro.com -macbookpro.com.au -macbookpro.net -macbookpro.us -macbookpros.com -macbooksale.com -macboxset.com -mach-os.com -mach-os.net -machigoto.jp -machos.net -macintosh.eu -macintoshsoftware.com -macmini.com -macos.com.au -macosforge.org -macossierra.com -macosx.info -macosxlion.com -macpazar.com -macports.org -macreach.com -macreach.net -macromedia.com -macruby.com -macruby.net -macruby.org -macrumors.com -maddenchampionship.com -maddenrewards.com -maddenseason.info -maddenseason.net -maddenseason.org -madewithcode.com -madshi.net -madvr.com -madvr.net -madvrlabs.llc -mageconf.com -mageconf.com.ua -magento.com -magento.net -magentocommerce.com -magentoliveconference.com -magentomobile.com -mail.ru -mailhealth.com -mailonline.co.uk -mailonline.com -mailonsunday.co.uk -mailonsunday.ie -mainichi-athletepartners.jp -mainichi.jp -mainichibooks.com -mairbeats.com -makaan.com -makebettercode.com -makecode.org -makeeu.com -makeitopen.com -makesenseofdata.com -maktoob.com -malayalamanorama.com -mallheadphone.com -managed-pki.ch -managed-pki.de -managedmeetingrooms.com -mandatewire.com -manhuagui.com -manorama.com -manoramanews.com -manoramaonline.com -manoramayearbook.in -manoto1.tv -manototv.com -mansionglobal.com -manyvids.com -mapbox.com -mariadb.org -marioandluigidreamteam.com -mariobroswii.com -mariokart7.com -mariokart8.com -mariosupersluggers.com -marketexecutive.net -marketing-cloud.com -marketing-nirvana.com -marketingcloud.com -marketo.co.uk -marketo.com -marketo.net -marketo.tv -marketodesigner.com -marketolive.com -marketwatch.com -markzuckerberg.com -marvel.com -marvel10thanniversary.com -marveldimensionofheroes.com -marvelparty.net -marvelpinball.com -marvelsdoubleagent.com -marvelspotlightplays.com -marvelsuperheroseptember.com -marvelsuperwar.com -masalladeloslimites.com -mashaalradio.com -maskedsingerfox.com -masseffect.com -masseffectarchives.com -mastercad.com -mastercard-email.com -mastercard.ae -mastercard.at -mastercard.az -mastercard.ba -mastercard.be -mastercard.bg -mastercard.by -mastercard.ca -mastercard.ch -mastercard.cl -mastercard.co.id -mastercard.co.il -mastercard.co.in -mastercard.co.jp -mastercard.co.ke -mastercard.co.kr -mastercard.co.nz -mastercard.co.th -mastercard.co.uk -mastercard.co.ve -mastercard.co.za -mastercard.com -mastercard.com.ar -mastercard.com.au -mastercard.com.bh -mastercard.com.br -mastercard.com.bz -mastercard.com.co -mastercard.com.cy -mastercard.com.eg -mastercard.com.ge -mastercard.com.gt -mastercard.com.hk -mastercard.com.kw -mastercard.com.lb -mastercard.com.mx -mastercard.com.my -mastercard.com.ng -mastercard.com.pe -mastercard.com.ph -mastercard.com.sa -mastercard.com.sg -mastercard.com.tr -mastercard.com.tw -mastercard.com.ve -mastercard.com.vn -mastercard.cz -mastercard.de -mastercard.dk -mastercard.es -mastercard.eu -mastercard.fi -mastercard.fr -mastercard.gr -mastercard.hr -mastercard.hu -mastercard.ie -mastercard.inc -mastercard.it -mastercard.jo -mastercard.ke -mastercard.kz -mastercard.lu -mastercard.md -mastercard.my -mastercard.nl -mastercard.no -mastercard.om -mastercard.pl -mastercard.pt -mastercard.qa -mastercard.ro -mastercard.rs -mastercard.ru -mastercard.se -mastercard.si -mastercard.sk -mastercard.ua -mastercard.us -mastercardacademy.com -mastercardadvisors.com -mastercardbiz.ca -mastercardbiz.com -mastercardbusinessnetwork.com -mastercardcenter.com -mastercardcenter.org -mastercardcenterforinclusivegrowth.org -mastercardconnect.com -mastercardezsavings.com -mastercardidtheftalerts.com -mastercardmoments.com -mastercardrestaurant.com -mastercardservices.com -mastercardworldwide.com -masterclass.com -masterintelligence.com -masterpassteststore.com -material.io -mathoverflow.net -matrix.org -matrix.to -matters.news -matters.one -maxgo.com -maxis.com -maying.co -mbeats-tech.com -mbheadphone.com -mcd.com -mcdelivery.co.id -mcdelivery.co.kr -mcdelivery.com.au -mcdelivery.com.my -mcdelivery.com.sg -mcdelivery.com.tw -mcdindonesia.com -mcdonalds.ca -mcdonalds.co.uk -mcdonalds.com -mcdonalds.com.hk -mcdonalds.hk -mcdonalds.it -mcdonalds.no -mcdonalds.se -mcdonaldsarabia.com -mcdonaldsparties.co.nz -mcdonaldsparties.com.au -mcisco.com -mcpeaceofmind.com -mcrouter.net -mcrouter.org -mdialog.com -mdlf.xyz -mdn.mozillademos.org -mdnkids.com -mdpi.com -me.com -meadjohnson.com -meadjohnson.com.hk -meadjohnson.com.tw -meadjohnson.net -mearki.com -media-amazon.com -media-imdb.com -media-rockstargames-com.akamaized.net -media.prod.mdn.mozit.cloud -mediachinese.com -mediafiles-cisco.com -mediawiki.org -medium.com -medium.systems -medrxiv.org -meet.new -meetfasttrack.com -meetsmartbook.com -meetyourdevices.com -mega.co.nz -mega.io -mega.nz -megaphone.fm -meijinsen.jp -menshin-channel.com -mepn.com -meraki-go.com -meraki.hk -merakigo.com -meridian.net -messenger.com -messengerdevelopers.com -metacloud.com -metacpan.org -metamind.io -metart.com -metartnetwork.com -metcams.com -metro.co.uk -metropolitana.tokyo -mewe.com -mfg-inspector.com -mgo-images.com -mgo.com -mhshosting.com -mi9.com.au -mi9cdn.com -miamifintechfestival.com -mickey.tv -microbit.org -microsoft-give.com -microsoft-int.com -microsoft-ppe.com -microsoft-sap-events.com -microsoft-sbs-domains.com -microsoft.az -microsoft.be -microsoft.by -microsoft.ca -microsoft.cat -microsoft.ch -microsoft.cl -microsoft.com -microsoft.cz -microsoft.de -microsoft.dk -microsoft.ee -microsoft.es -microsoft.eu -microsoft.fi -microsoft.ge -microsoft.hu -microsoft.io -microsoft.is -microsoft.it -microsoft.jp -microsoft.lt -microsoft.lu -microsoft.lv -microsoft.md -microsoft.net -microsoft.pl -microsoft.pt -microsoft.red -microsoft.ro -microsoft.rs -microsoft.ru -microsoft.se -microsoft.si -microsoft.tv -microsoft.ua -microsoft.uz -microsoft.vn -microsoft365.com -microsoftaccountguard.com -microsoftadc.com -microsoftads.com -microsoftadvertising.com -microsoftadvertisingregionalawards.com -microsoftaffiliates.com -microsoftcloud.com -microsoftcloudsummit.com -microsoftcloudworkshop.com -microsoftcommunitytraining.com -microsoftdiplomados.com -microsofteca.com -microsoftedge.com -microsoftgamestack.com -microsofthouse.com -microsofthouse.net -microsoftinternetsafety.net -microsoftiotcentral.com -microsoftiotinsiderlabs.com -microsoftlatamaitour.com -microsoftlatamholiday.com -microsoftlinc.com -microsoftmxfilantropia.com -microsoftnews.cc -microsoftnews.com -microsoftnews.net -microsoftnews.org -microsoftnewsforkids.com -microsoftnewsforkids.net -microsoftnewsforkids.org -microsoftnewskids.com -microsoftnewskids.net -microsoftnewskids.org -microsoftonline-p.com -microsoftonline.com -microsoftpartnercommunity.com -microsoftpartnersolutions.com -microsoftreactor.info -microsoftreactor.net -microsoftreactor.org -microsoftready.com -microsoftsilverlight.com -microsoftsilverlight.net -microsoftsilverlight.org -microsoftsiteselection.com -microsoftsqlserver.com -microsoftstore.com -microsoftstore.com.hk -microsoftstream.com -microsoftteams.com -microsofttradein.com -microsofttranslator.com -microsoftuwp.com -micstl.com -midatlanticbmwmotorcycles.com -midentsolutions.com -miitomo.com -miiverse.com -miktex.org -milofetch.com -mindmeld.com -minecraft.net -minecraftshop.com -mingpao.com -mingpaocanada.com -mingpaomonthly.com -mingpaotor.com -mingpaovan.com -mings-fashion.com -mings.hk -mingshengbao.com -mingw.org -mingwatch.com -mini-abudhabi.com -mini-antilles.fr -mini-bahrain.com -mini-bosnia.com -mini-clubs-international.com -mini-connected.at -mini-connected.be -mini-connected.ch -mini-connected.co.uk -mini-connected.com -mini-connected.cz -mini-connected.de -mini-connected.dk -mini-connected.ee -mini-connected.es -mini-connected.fi -mini-connected.fr -mini-connected.ie -mini-connected.it -mini-connected.lt -mini-connected.lu -mini-connected.lv -mini-connected.nl -mini-connected.no -mini-connected.pl -mini-connected.pt -mini-connected.se -mini-corporate-sales.com -mini-coupe.ca -mini-dubai.com -mini-e.com -mini-egypt.com -mini-georgia.com -mini-grouparchiv.de -mini-grouparchive.com -mini-jordan.com -mini-ksa.com -mini-kuwait.com -mini-lebanon.com -mini-me.com -mini-oman.com -mini-qatar.com -mini-srilanka.com -mini-stjohns.ca -mini-stjohns.com -mini-tahiti.com -mini-vietnam.com -mini-windsor.ca -mini-windsor.com -mini.am -mini.at -mini.be -mini.bg -mini.by -mini.ca -mini.cc -mini.ch -mini.cl -mini.co.cr -mini.co.id -mini.co.il -mini.co.kr -mini.co.me -mini.co.th -mini.co.uk -mini.co.za -mini.com -mini.com.ar -mini.com.bn -mini.com.br -mini.com.co -mini.com.cy -mini.com.do -mini.com.ec -mini.com.gr -mini.com.gt -mini.com.hr -mini.com.mk -mini.com.mo -mini.com.mt -mini.com.mx -mini.com.pa -mini.com.pe -mini.com.ph -mini.com.pl -mini.com.py -mini.com.sg -mini.com.tr -mini.com.tw -mini.com.uy -mini.cz -mini.de -mini.dk -mini.dz -mini.es -mini.fi -mini.fr -mini.gp -mini.hu -mini.ie -mini.in -mini.is -mini.it -mini.jp -mini.kz -mini.lu -mini.ma -mini.md -mini.mq -mini.mu -mini.my -mini.nc -mini.nl -mini.no -mini.pt -mini.re -mini.ro -mini.rs -mini.ru -mini.se -mini.si -mini.sk -mini.tm -mini.tn -mini.ua -mini101.ca -miniargentina.com -minibrossard.ca -minibrossard.com -minicanada.ca -minicaribbean.com -miniccrc.ca -minicooper.ca -minid.no -minidealer.com -minidealernet.com -minidowntown.ca -minidowntown.com -minidrivingexperienceusa.com -minidurham.ca -minidurham.com -minie.com -minifs.com -minigeorgian.ca -minigrandriver.com -minihalifax.ca -minihalifax.com -minihk.com -miniinvasion.ca -miniitalianjob.com -minikelowna.ca -minikelowna.com -minilangley.ca -minilangley.com -minilat.com -minilaval.ca -minilaval.com -minilondon.ca -minilondon.co -minimarkham.ca -minimarkham.com -minimoncton.ca -minimoncton.com -minimontrealcentre.ca -minimontroyal.ca -minimontroyal.com -minimotoringrewards.com -minimotoringschool.com -minimotorsport.com -mininanaimo.ca -mininanaimo.com -minioakville.com -miniofmonrovia.com -minipetfriendly.com -minirichmond.ca -minirichmond.com -minisaskatoon.ca -minisaskatoon.com -minishop.ca -miniso-au.com -miniso-bh.com -miniso-np.com -miniso-nz.com -miniso.by -miniso.ca -miniso.co -miniso.co.id -miniso.co.tz -miniso.ge -miniso.ie -miniso.jp -miniso.ma -miniso.my -miniso.pe -miniso.pk -miniso.ua -miniso.uz -minisoindia.com -minisojordan.com -minisokorea.com -minisolife.co.za -minisothailand.com -minisovietam.vn -minispace.com -minispecialoffers.ca -minispygear.com -ministcatharines.ca -ministeagathe.com -ministjohns.ca -minitakesthestates.com -minitoronto.ca -minitroisrivieres.ca -miniusa.com -miniusaservice.com -miniusatires.com -minivalueservice.com -minivancouver.ca -minivaughanwest.ca -minivaughanwest.com -minivictoria.ca -minivictoria.com -minivilledequebec.ca -minivilledequebec.com -miniwholesaleconnect.com -miniwidget.ca -miniwindsor.com -miniworkshop.com -miniyaletown.ca -minneapolisbmw.com -minneapolisbmw.net -miraheze.org -mirailab.tech -mirrormedia.com.tw -mirrormedia.mg -mirrorsedge.com -mirrorsedge.jp -mirrorsedge.net -mirrorsedge2.com -mirrorsedge2d.com -mit.edu -mit.net -mitpressjournals.org -mkt.com -mktdns.com -mkto-c0100.com -mktorest.com -mktroute.com -mmdnn.com -mmonsterheadphones.net -mobatek.net -mobile.de -mobile01.com -mobilefacebook.com -mobileinternational.com -mobilemarketo.com -mobileme.dk -mobileview.page -mochajs.org -mocloudplus.com -modular.im -mojang.com -mol.im -molesports.com -momentumms.com -momo.dm -momo5188.com -momomall.com.tw -momoshop.com.tw -monbeats2013.com -money-link.com.tw -moneywithfacebook.com -mongodb.com -mongodb.org -monitrix.net -mono-project.com -monotype.com -monotypeimaging.com -monster-beats-by-dr-dre.com -monster-beats-headphones.com -monsterbeats-cheap.com -monsterbeats-headphone.com -monsterbeats-onsale.com -monsterbeats-solo.com -monsterbeats-solo.net -monsterbeats365buy.com -monsterbeats8beatsbydre.com -monsterbeatsale.com -monsterbeatsalestore.com -monsterbeatsau.com -monsterbeatsbydrdre-nz.com -monsterbeatsbydrdre-usa.com -monsterbeatsbydrdrecanada.com -monsterbeatsbydrdrestudio.com -monsterbeatsbydre-nz.com -monsterbeatsbydre-usa.com -monsterbeatsbydre2015.com -monsterbeatsbydreaustraliacheap.com -monsterbeatsbydrebilligde.com -monsterbeatsbydrefactory.com -monsterbeatsbydrenew.com -monsterbeatsbydres.com -monsterbeatsbydreshop.com -monsterbeatscasques.com -monsterbeatscommunity.com -monsterbeatsdrdrecheap.com -monsterbeatsfactory.net -monsterbeatsfinland.com -monsterbeatsforsale.com -monsterbeatsheadphone.com -monsterbeatsheadphones.net -monsterbeatshere.com -monsterbeatsitaly.com -monsterbeatsmall.com -monsterbeatsnegozi.net -monsterbeatsok.com -monsterbeatsonlinestoreuk.com -monsterbeatsoutlet.us -monsterbeatspascher.net -monsterbeatsru.com -monsterbeatssales.com -monsterbeatssalg.com -monsterbeatsshops.net -monsterbeatsstore.com -monsterbeatssydneyaustralia.com -monsterbeatstang.com -monsterbeatstienda.com -monsterbeatstudio.com -monsterbydrebeat.com -monstercasquebeatspascher.net -monstercheapbeatss.com -monsterdrebeats-canada.net -monsterdrebeats-usa.com -monsterdrebeats-usa.net -monsterheadphone.net -monsterproduct.net -monstersbeatbydres.com -monstersdebea.com -monstershopcheapbeats.net -moodstocks.com -moov.hk -moreheadphones.com -morisawa.co.jp -morphcharts.com -mortein.co.in -mortein.co.nz -mortein.co.za -mortein.com -mortein.com.au -mortein.com.br -mortein.com.ng -mortein.com.pk -morteincam.com -mostly.jp -motionpictureser.com -motolia.com -motorshowblog.com -mottainai.info -move-free.net -move.com -moveaws.com -movefreeoffers.com -movefreerewards.com -movefrees.com -movenetworks.com -movetv.com -movidius.com -movidius.net -moviesanywhere.com -mozilla.com -mozilla.community -mozilla.net -mozilla.org -mpfinance.com -mpnevolution.com -mpv.io -mpweekly.com -mr-tireman.jp -mray.club -ms-studiosmedia.com -ms365surfaceoffer.com -ms4dre.com -msads.net -msauth.net -mschallenge2018.com -msdn.com -msecnd.net -msedge.net -msft.info -msft.net -msftauth.net -msfteducation.ca -msftnet.org -msgamesresearch.com -msinnovationchallenge.com -msn.com -msnbc.com -msnewskids.com -msnewskids.net -msnewskids.org -msnkids.com -msocdn.com -msocsp.com -mspairlift.com -msropendata.com -msturing.org -msudalosti.com -msunlimitedcloudsummit.com -mtt.org -mucinex.ca -mucinex.cn -mucinex.co.nz -mucinex.com -mucinex.com.cn -mucinex.net -mucinex.tv -mucinexprofessional.com -mudvod.tv -muji.com -muji.com.hk -muji.eu -muji.net -muji.tw -muji.us -mujikorea.net -multicurrencycashpassport.com -multiplydiversity.com -muncloud.dog -muscdn.com -mushymush.tv -musical.ly -musicbay.net -musickit.net -mut.ch -muthead.com -mvk.com -mwf-service.akamaized.net -my-formosa.com -my-magazine.me -my13la.com -my20dc.com -my20houston.com -my29tv.com -my45.com -my9nj.com -myaccountglobalcash.com -myappleid.com -myavfun.com -mybeatsbydrestudio.com -mybeatsbydreuk.com -mybeatscheapbydre.com -mybestbuy.com -mybestbuyclaims.com -mybmw.ca -mybmw.com -mybridgestoneeducation.com -mycardbenefits.com -mycdn.me -myciscobenefits.com -myconstructionworld.net -mydirectgroove.com -mydirectvchannels.com -mydirtyhobby.com -myebay.com -myfbfans.com -myferrariheadphones.com -myfonts.com -myfonts.net -myfoxatlanta.com -myfoxaustin.com -myfoxboston.com -myfoxcharlotte.com -myfoxchicago.com -myfoxdc.com -myfoxdetroit.com -myfoxdfw.com -myfoxhouston.com -myfoxhurricane.com -myfoxla.com -myfoxlosangeles.com -myfoxlubbock.com -myfoxmaine.com -myfoxny.com -myfoxorlando.com -myfoxphilly.com -myfoxphoenix.com -myfoxsanfran.com -myfoxtampa.com -myfoxtampabay.com -myfoxtwincities.com -myfoxzone.com -myfreecams.com -myfun.com -myguide.hk -myhelpinglab.com -myhpsupport.com -myhulu.com -myicloud.net -myipod.net -mylcloud.net -mylogiclab.com -mymicrosoft.com -mymmode.com -mynike.com -myoctocat.com -mypearson.com -mypearsonenglish.ch -mypearsonshop.com.mx -mypearsonshop.mx -myq2.com -myradio.com.hk -myradio.hk -myrewardzone.com -myrz.com -mysdn.com -mysdn.info -mysdn.net -myshopify.com -mysims.com -mysimsracing.com -mysinchew.com -mysocialworklab.com -mysql.com -mystrikingly.com -mythicentertainment.com -mythicentertainment.net -mythicgames.com -mytimesplus.co.uk -mytvsuper.com -myvisaluxuryhotels.com -mywaytopay.info -mywaytopay.net -mzed.com -mzstatic.com -n3ro.lol -n3ro.net -n3ro.wtf -na-att-idns.net -nab.com.au -nab.demdex.net -nabtravellercard.com.au -naiadsystems.com -namemybeats.com -namethatporn.com -natgeokidsbooks.co.uk -natgeomaps.com -nationalaustraliaban.tt.omtrdc.net -nationalgeographic.com -nationalgeographicpartners.com -nativeincolour.com.au -naturalvoices.com -nature.com -naver.com -naver.jp -naver.net -navercorp.com -nbabot.net -nbc.co -nbc.com -nbcnews.com -nbcolympics.com -nbcsports.com -nbcudigitaladops.com -nbcuni.com -nbcuniversal.com -near.by -nebay.net -neborder.com -needforspeed.com -needforspeedboost.com -needforspeeddriftkings.com -needforspeedeliminator.com -needforspeedlightning.com -needforspeedoverdrive.com -needforspeedproven.com -needforspeedredline.com -needforspeedshowdown.com -needforspeedstreetkings.com -needforspeedtakedown.com -needforspeedtherun.com -needforspeedtimeattack.com -needforspeedundergroundeast.com -negozimonsterbeats.com -negoziomonsterbeats.com -nejm.org -nekoxxx.com -nentindo.net -neow.in -neowin.net -nervanasys.com -nest.com -netacad.com -netacad.net -netflav.com -netflix.ca -netflix.com -netflix.net -netflixdnstest1.com -netflixdnstest10.com -netflixdnstest2.com -netflixdnstest3.com -netflixdnstest4.com -netflixdnstest5.com -netflixdnstest6.com -netflixdnstest7.com -netflixdnstest8.com -netflixdnstest9.com -netflixinvestor.com -netflixtechblog.com -netlify.com -netname.com.br -nettyinternet.com -netvigator.com -neuralink.com -neurology.org -nevex.com -newbeatsblackfriday.com -newbemany.com -newcastlenewslocal.com.au -newdrediscount.com -neweconomyforum.com -newenergyfinance.com -newestbeatsbydre.com -newhampshirebmw.com -newisiknowledge.com -newlysprung.net -newmonst1erbeatsto1re.com -newmonsterbeatsheadphones.com -news.co.uk -news.com.au -news.net.au -newsadds.com.au -newsamerica.com -newsapi.com.au -newscareers.co.uk -newscdn.com.au -newschristmasshopping.com -newscommercial.co.uk -newsconcierge.com.au -newscorp.com -newscorpaustralia.com -newsfeed.com -newsgawakaru.com -newslicensing.co.uk -newsmart.jp -newsmax.com -newsmax.in -newsmaxtv.com -newsnowfox.com -newsprestigenetwork.com.au -newsprinters.co.uk -newssyndication.com -newsukadops.com -newsupermariobrosu.com -newsxtend.com.au -newtalk.tw -newton.com -newyorker.com -nexcat.com -nexitally.com -nexitallysafe.com -nexitcore.com -nexpart.com -nexpart.tv -next.com -next.hk -nextdigital.com.hk -nextdigital.com.tw -nextechafrica.net -nextfilm.com.hk -nextgenerationcenter.com -nextmag.com.tw -nextmedia.com -nextmedia.com.tw -nextmgz.com -nextplus.com.hk -nextstop.com -nexttv.com.tw -nextwork.com.hk -nextwork.com.tw -nextwork.hk -nextwork.tw -nflhotsalejerseys.com -nflxext.com -nflximg.com -nflximg.net -nflxsearch.net -nflxso.net -nflxvideo.net -nfsworld.com -ngeo.com -nginx.com -nginx.org -nhentai.net -nhncorp.jp -nicesshop.net -nicodic.jp -nicomanga.jp -niconico.com -nicoseiga.jp -nicovideo.jp -nii.ac.jp -nike-air-max.com -nike-dunksb.com -nike-fr.com -nike-org.com -nike-uk.com -nike-us.com -nike-usa.com -nike.ci -nike.com -nike.com.br -nike.com.hk -nike.gy -nike.hk -nike.shop -nike.us -nike.xn--hxt814e -nike0594.com -nike23.com -nikeadidas.com -nikeairhuarache.com -nikeairmax.com -nikeairmaxs.com -nikeairmaxshoes.com -nikeairrift.com -nikeasia.com -nikeaustralia.com -nikeaw77.com -nikeb.com -nikebbn.com -nikebetrue.com -nikebetterworld.com -nikebetterworld.info -nikebetterworld.net -nikebetterworld.org -nikebiz.info -nikebuy.com -nikeby.com -nikecdn.com -nikechosen.com -nikecloud.com -nikeclub.com -nikecompany.com -nikeconfluence.com -nikecraft.com -nikedawn.com -nikedunks.net -nikedunksshoes.com -nikeelite.com -nikefactorystore.com -nikefind.com -nikefirm.com -nikefoamposites.com -nikefoampositeshoes.com -nikefootballcleats.com -nikefootballgloves.com -nikefootballjersey.com -nikefoundation.org -nikefr.com -nikefrance.com -nikefree.com -nikefreeshoes.com -nikefuelband.com -nikegadgets.com -nikegenealogy.com -nikegolf.ca -nikegrid.com -nikehelp.com -nikehightops.com -nikehyperdunk.com -nikeidshoes.com -nikeinc.com -nikeincchemistry.com -nikeinstock.com -nikeit.com -nikeitalia.com -nikeitaly.com -nikekd.com -nikekid.com -nikelink.com -nikeliuxiang.com -nikelives.com -nikelunarglide.com -nikemarketing.com -niken7.com -nikenews.com -nikeonlinestore.com -nikeoutletstore.com -nikeoutletstores.com -nikepioneer.com -nikeplus.com -nikeplus.org -nikepress.com -nikeprice.com -nikeproduct.com -nikepromax.com -nikeresponsibility.com -nikereuseashoe.com -nikerunner.com -nikerunningshoes.com -nikesb.com -nikesbdunks.net -nikeseason.com -nikeselling.com -nikesellorder.com -nikeshoemarket.com -nikeshoes-store.com -nikeshoes21.com -nikeshoes4u.com -nikeshoescity.com -nikeshoesgroup.com -nikeshoesinc.com -nikeshoesmarket.com -nikeshoesretro.com -nikeshoeswon.com -nikeshoponline.com -nikeshoxsale.com -nikesku.com -nikesnowboarding.com -nikesoccercleats.com -nikesportswear.com -nikestares.com -nikestore.com -nikestore.com.au -nikestyles.com -nikeswim.com -niketaiwan.net -niketracking.com -niketradeweb.com -niketrainer.com -niketrainers.com -niketraining.com -nikeusa.com -nikewear.com -nikey.com -nikezoom.com -nikkan-gendai.com -nikkansports.com -nikkei-cnbc.co.jp -nikkei.co.jp -nikkei.com -nikkei.jp -nikkei4946.com -nikkeibp.co.jp -nimg.jp -nine.com.au -nineentertainment.com.au -nineentertainmentco.com.au -ninemediaroom.com.au -ninemsn.com.au -nintendo-europe-sales.com -nintendo-europe.com -nintendo.at -nintendo.be -nintendo.ch -nintendo.co.jp -nintendo.co.kr -nintendo.co.uk -nintendo.co.za -nintendo.com -nintendo.com.hk -nintendo.com.pt -nintendo.de -nintendo.dk -nintendo.es -nintendo.eu -nintendo.fi -nintendo.fr -nintendo.it -nintendo.net -nintendo.nl -nintendo.no -nintendo.pt -nintendo.ru -nintendo.se -nintendo.tw -nintendo3ds.com -nintendodsi.com -nintendoeurope.com -nintendonetwork.net -nintendonyc.com -nintendostore.com -nintendoswitch.com -nintendoswitch.net -nintendoswitchtogether.com -nintendowii.com -niosii.com -niosii.net -nist.gov -nixos.org -nke6.com -nlm.io -nmbmw.com -nna.jp -nodejs.org -nodesource.com -nokiantyres.com -nomadlandmovie.ch -nomadproject.io -nomulus.foo -nonktube.com -nordstrom.com -nordstrommedia.com -notepad-plus-plus.org -notion-static.com -notion.com -notion.new -notion.site -notion.so -now-ashare.com -now-tv.com -now.com -now.com.hk -now.sh -nowe.com -nowe.hk -nownews.com -npm.community -npmjs.com -npmjs.org -npr.org -nsimg.net -ntc.party -ntd.com -ntdca.com -ntdimg.com -ntdtv.ca -ntdtv.co.kr -ntdtv.com -ntdtv.com.tw -ntdtv.jp -ntdtv.kr -ntdtv.org -ntdtv.ru -ntdtvla.com -ntdvn.com -ntnews.com.au -nudevista.com -nuget.org -nugettest.org -nunuyy.cc -nurofen.at -nurofen.bg -nurofen.co.il -nurofen.co.nz -nurofen.co.uk -nurofen.co.za -nurofen.com -nurofen.com.au -nurofen.com.sg -nurofen.cz -nurofen.de -nurofen.es -nurofen.fr -nurofen.hr -nurofen.hu -nurofen.ie -nurofen.it -nurofen.net -nurofen.no -nurofen.pl -nurofen.pt -nurofen.ro -nurofen.ru -nurofen.sk -nurofengel.com -nurofensk-prod-env.eu-west-1.elasticbeanstalk.com -nutramigen.net -nutramigen.pl -nvidia.asia -nvidia.at -nvidia.be -nvidia.ch -nvidia.co.at -nvidia.co.in -nvidia.co.jp -nvidia.co.kr -nvidia.co.uk -nvidia.com -nvidia.com.au -nvidia.com.br -nvidia.com.mx -nvidia.com.pe -nvidia.com.pl -nvidia.com.tr -nvidia.com.tw -nvidia.com.ua -nvidia.com.ve -nvidia.cz -nvidia.de -nvidia.dk -nvidia.es -nvidia.eu -nvidia.fi -nvidia.fr -nvidia.in -nvidia.it -nvidia.jp -nvidia.lu -nvidia.mx -nvidia.nl -nvidia.no -nvidia.pl -nvidia.ro -nvidia.ru -nvidia.se -nvidia.tt.omtrdc.net -nvidia.tw -nvidiaforhp.com -nxta.org -nxtdig.com.hk -nxtdig.com.tw -nyaa.net -nyaa.si -nyansa.com -nypost.com -nypost.help -nypostreprints.com -nyt.com -nyt.net -nytchina.com -nytcn.me -nytco.com -nyti.ms -nytimes.com -nytstyle.com -o0-2.com -o2action.co.kr -o365weve-dev.com -o365weve-ppe.com -o365weve.com -oanencore.com -oann.com -oath.cloud -oath.com -oauthz.com -observable.net -obsrvbl.com -ocbmwdealers.com -ocul.us -oculus-china.com -oculus.com -oculus2014.com -oculus3d.com -oculusblog.com -oculusbrand.com -oculuscasino.net -oculuscdn.com -oculusconnect.com -oculusdiving.com -oculusforbusiness.com -oculusrift.com -oculusvr.com -odysee.com -oed.com -offerairjordanlebron.com -office.com -office.net -office365.com -office365love.com -office365tw.com -officecdn-microsoft-com.akamaized.net -officialbeatsbydreshop.com -officialbeatsbydrestore.com -officialdrdre.com -officialheadphone.com -offresspecialesbmw.ca -offrezdesipods.com -ogameblog.com -ogp.me -ohyeah1080.com -ok.ru -okaapps.com -okex.com -omekinteractive.com -omghk.com -omnitek.tv -omniture.com -omoplanet.com -omotenashi.cygames.jp -omscr.com -omtrdc.net -on.cc -on.here -on2.com -onbeatsbydresale.com -oncars.in -one.one.one -oneapi.com -onedinesfree.com -onedrive.co -onedrive.co.uk -onedrive.com -onedrive.eu -onedrive.live.com -onedrive.net -onedrive.org -onefifteen.net -onefifteen.org -onejav.com -onenote.com -onenote.net -onestore.ms -oneworldmanystories.com -oninstagram.com -onionshare.org -online-deals.net -online-instagram.com -onlineapplestore.com -onlinegeeksquad.com -onlineinstagram.com -onlinemonsterbeatsonsale.com -onlyiphone5case.com -onmanorama.com -onsalekey.com -onsaletrend.com -ooni.org -op.gg -openai.com -openamt.com -openapiplatform.com -openapiservice.com -opencollective.com -opencreate.org -opendroneid.org -opengraphprotocol.com -opengraphprotocol.org -openjsf.org -openmaps.org -openresty.org -openssl.org -openstreetmap.com -openstreetmap.net -openstreetmap.org -openstreetmaps.org -opensuse.org -openthread.io -opentranslatorstothings.org -openvinotoolkit.org -openvpn.net -openweave.io -openwrt.org -opgg-static.akamaized.net -opinionjournal.com -optanedifference.com -opticsforthecloud.net -optimumssl.com -oracle.com -oraclecloud.com -oraclefoundation.org -oracleimg.com -orbitera.com -oreil.ly -oreilly.com -oreilly.review -oreillystatic.com -origin-a.akamaihd.net -origin.com -origin.tv -originalhulu.com -orithegame.com -orl.ly -orlandohurricane.com -osakamotion.net -osdn.net -osm.org -osmfoundation.org -ospray.net -ospray.org -oup.com -ouplaw.com -ouroath.com -outbound.io -outingsapp.com -outletbeatsshop.com -outletnike.com -outlook.com -overcast.fm -ovid.com -ox.ac.uk -oxfordaasc.com -oxfordartonline.com -oxfordbibliographies.com -oxfordclinicalpsych.com -oxforddnb.com -oxfordfirstsource.com -oxfordhandbooks.com -oxfordlawtrove.com -oxfordmedicine.com -oxfordmusiconline.com -oxfordpoliticstrove.com -oxfordre.com -oxfordreference.com -oxfordscholarlyeditions.com -oxfordscholarship.com -oxfordwesternmusic.com -ozodi.org -ozodlik.org -ozvoice.org -p-events-delivery.akamaized.net -p16-tiktokcdn-com.akamaized.net -p3.csgfnmdb.com -pa9pal.com -paaypal.com -pacifickitchenandhome.com -packagist.org -packer.io -page.link -page3.com -pagecdn.com -pagecdn.io -pages.dev -pagespeedmobilizer.com -pageview.mobi -pahabicilemezsurprizler.com -paily.net -paily.org -paipal.com -paisapay.cc -paisapay.info -paisapay.tv -palestineremix.com -panasonic.com -panasonic.jp -panoramio.com -paofu.cloud -paofuyun.me -papalah.com -paper-attachments.s3.amazonaws.com -paradisehotelquizfox.com -paragon.com -paramount.com -parastorage.com -pardot.com -park-now.com -parkinfo.com -parler.com -parse.com -parstream.com -parstream.net -parstream.org -partylikeits1986.org -pascherbeatsmonster.com -pashtovoa.com -passiontimes.hk -passport.net -pastebin.com -patentgold.net -patenttruth.org -patreon.com -paulsimon-music.com -pavpal.com -paxful.com -paxlicense.org -paydiant.com -paygonline.com -payhulu.com -paylike.com -paypa1.com -paypa1.org -paypaal.com -paypal-activate.com -paypal-activate.info -paypal-activate.org -paypal-apac.com -paypal-apps.com -paypal-biz.com -paypal-brandcentral.com -paypal-business.com -paypal-business.net -paypal-business.org -paypal-cardcash.com -paypal-cash.com -paypal-center.com -paypal-center.info -paypal-center.net -paypal-center.org -paypal-communication.com -paypal-communications.com -paypal-communications.net -paypal-community.com -paypal-community.net -paypal-comunidad.com -paypal-corp.com -paypal-database.com -paypal-database.us -paypal-donations.com -paypal-dynamic.com -paypal-engineering.com -paypal-europe.com -paypal-excelinvoicing.com -paypal-exchanges.com -paypal-forward.com -paypal-galactic.com -paypal-gift.com -paypal-gifts.com -paypal-gpplus.com -paypal-here.com -paypal-hrsystem.com -paypal-innovationlab.com -paypal-integration.com -paypal-japan.com -paypal-knowledge.com -paypal-labs.com -paypal-latam.com -paypal-learning.com -paypal-login.com -paypal-login.info -paypal-login.org -paypal-login.us -paypal-luxury.com -paypal-mainstreet.net -paypal-marketing.com -paypal-media.com -paypal-merchantloyalty.com -paypal-mobilemoney.com -paypal-network.org -paypal-notice.com -paypal-notify.com -paypal-online.info -paypal-online.net -paypal-online.org -paypal-optimizer.com -paypal-pages.com -paypal-photocard.com -paypal-plaza.com -paypal-portal.com -paypal-prepagata.com -paypal-prepagata.net -paypal-prepaid.com -paypal-profile.com -paypal-proserv.com -paypal-qrshopping.org -paypal-recargacelular.com -paypal-redeem.com -paypal-referral.com -paypal-retail.com -paypal-scoop.com -paypal-search.com -paypal-secure.net -paypal-secure.org -paypal-security.net -paypal-security.org -paypal-service.org -paypal-signin.com -paypal-signin.us -paypal-special.com -paypal-specialoffers.com -paypal-sptam.com -paypal-status.com -paypal-support.com -paypal-survey.com -paypal-survey.org -paypal-team.com -paypal-viewpoints.net -paypal.ca -paypal.com -paypal.com.hk -paypal.com.sg -paypal.hk -paypal.info -paypal.jp -paypal.me -paypal.so -paypal.us -paypalbeacon.com -paypalbenefits.com -paypalbrasil.com -paypalcommunity.com -paypalcommunity.net -paypalcommunity.org -paypalcorp.com -paypalcredit.com -paypalcreditcard.com -paypalgivingfund.org -paypalhere.com -paypalhere.info -paypalhere.net -paypalhere.org -paypalhere.tv -paypali.net -paypalinc.com -paypalindia.com -paypalinsuranceservices.org -paypall.com -paypallabs.com -paypalme.com -paypalnet.net -paypalnet.org -paypalnetwork.info -paypalnetwork.net -paypalnetwork.org -paypalobjects.com -paypalonline.net -paypalonline.org -paypalprepagata.com -paypalprepagata.net -paypalservice.com -paypalshopping.com -paypalshopping.net -paypalsurvey.com -paypalx.com -paypaly.com -paypass.net -payppal.com -payypal.com -pc.com -pca.st -pccw.com -pccwglobal.com -pccwsolutions.com -pchome.com.tw -pchomeec.tw -pchomeonline.com.tw -pchomepay.com.tw -pcloud.tw -pcmarket.com.hk -pcre.org -pcstore.com.tw -pdf.new -pdncommunity.com -pdxbmw.com -peacocktv.com -pearson-anaya.com -pearson-intl.com -pearson-schule.ch -pearson-studium.ch -pearson.ch -pearson.cl -pearson.co.in -pearson.co.jp -pearson.com -pearson.com.ar -pearson.com.au -pearson.com.hk -pearson.com.uy -pearson.es -pearson.fr -pearson.pl -pearsonactivelearn.com -pearsonassessment.be -pearsonassessment.de -pearsonassessment.dk -pearsonassessment.fr -pearsonassessment.nl -pearsonassessment.no -pearsonassessment.se -pearsonassessments.com -pearsoncanada.ca -pearsonclinical.be -pearsonclinical.ca -pearsonclinical.co.uk -pearsonclinical.com.au -pearsonclinical.com.br -pearsonclinical.de -pearsonclinical.dk -pearsonclinical.es -pearsonclinical.eu -pearsonclinical.fr -pearsonclinical.in -pearsonclinical.nl -pearsonclinical.no -pearsonclinical.se -pearsoncmg.com -pearsoncred.com -pearsoned.co.nz -pearsoned.com -pearsoneducacion.net -pearsoneducationbooks.com -pearsonelt.ch -pearsonelt.com -pearsonenespanol.com -pearsonhighered.com -pearsoninstitute.ac.za -pearsonlongman.ch -pearsononlineacademy.com -pearsonperu.pe -pearsonplaces.com.au -pearsonschoolsandfecolleges.co.uk -pearsonvue.com -pearsonvue.net -peerj.com -pensions-expert.com -pentium.com -pentium.net -peoplenews.tw -perfectkickz.net -periscope.tv -perl.org -persagg.com -persianepochtimes.com -personaltrainermath.com -personeelsland.com -phantomjs.org -phncdn.com -photolia.net -photonicssociety.org -photoshop.com -php.net -phprcdn.com -phxbmw.com -physiology.org -piapp.com.tw -picasa.com -picasaweb.com -picasaweb.net -picasaweb.org -picknicekicks.net -pickshoesclothes.com -picnik.com -pics.ee -picsee.co -picsee.pro -pieceofplastic.com -pifpafarabia.com -pigav.com -pillbeatsblackfridaysale.com -pimg.tw -pin.it -pincong.rocks -ping.pe -pinimg.com -pinterest.at -pinterest.be -pinterest.ca -pinterest.ch -pinterest.cl -pinterest.co -pinterest.co.at -pinterest.co.in -pinterest.co.kr -pinterest.co.nz -pinterest.co.uk -pinterest.com -pinterest.com.au -pinterest.com.bo -pinterest.com.ec -pinterest.com.mx -pinterest.com.pe -pinterest.com.py -pinterest.com.uy -pinterest.com.vn -pinterest.de -pinterest.dk -pinterest.ec -pinterest.engineering -pinterest.es -pinterest.fr -pinterest.hu -pinterest.id -pinterest.ie -pinterest.in -pinterest.info -pinterest.it -pinterest.jp -pinterest.kr -pinterest.mx -pinterest.nl -pinterest.nz -pinterest.pe -pinterest.ph -pinterest.pt -pinterest.ru -pinterest.se -pinterest.th -pinterest.tw -pinterest.uk -pinterest.vn -pinterestmail.com -pintool.com -pirates-forum.org -pise.pw -pittpatt.com -pivotalinitiative.com -piwheels.org -pixanalytics.com -pixapp.net -pixate.com -pixfs.net -pixhost.to -pixinsight.com.tw -pixiv.co.jp -pixiv.net -pixiv.org -pixnet.cc -pixnet.net -pixnet.pro -pixnet.tw -pixplug.in -pixtronix.com -pki-post.ch -pki-posta.ch -pki-poste.ch -placemyad.com.au -placesdocs.com -planetminecraft.com -plantsvszombies2.com -play4free.com -playapex.com -playartifact.com -playbydurex.com -playerjs.io -playhearthstone.com -playmation.com -playnintendo.com -playno1.com -playoverwatch.com -playparagon.com -playshow.io -playshowtv.com -playstation.com -playstation.net -playvalorant.com -playwarcraft3.com -playz.jp -plos.org -plug.game -pm.me -pnas.org -pobl-content.com -pocketbiketrader.com -pocketcasts.com -pogo.com -pogobeta.com -pokedex3d.com -pokemon-moon.com -pokemon-sun.com -pokemon-sunmoon.com -pokemon.com -pokemonbank.com -pokemonblackwhite.com -pokemonbw.com -pokemonchampionships.com -pokemongoldsilver.com -pokemonhome.com -pokemonletsgoeevee.com -pokemonletsgopikachu.com -pokemonmysterydungeon.com -pokemonpicross.com -pokemonplatinum.com -pokemonrubysapphire.com -pokemonsunmoon.com -pokemonswordshield.com -pokemonultrasunmoon.com -pokemonvgc.com -pokemonwifi.net -polygon.com -polymer-project.org -polymerproject.org -popcap.com -popjav.tv -pornacho.com -pornbest.org -pornbrb.com -pornhd.com -pornhits.com -pornhub.com -pornhubpremium.com -pornkai.com -pornmd.com -pornogramxxx.com -pornstarbyface.com -porntea.com -pornzog.com -poshtestgallery.cloudapp.net -poshtestgallery.com -positivessl.com -post852.com -postgresql.org -postimages.org -postimg.cc -postini.com -potenza.jp -powerappscdn.net -powerautomate.com -powerbeats2wireless.com -powerbeatsbydrdre.com -powerbeatsbydre.com -powerbi.com -powerbook.eu -poweredbyintel.com -powerofresolve.ca -powerofresolve.com -powershellgallery.com -powersunitedvr.com -pp-soc.com -ppaypal.com -pppds.com -practicalbusinessskills.com -practicalmoneyskills.ca -practicalmoneyskills.jp -prd-priconne-redive.akamaized.net -pre-bmwgroup.jobs -predictivetechnologies.com -premiumfs.de -premobay.com -prepsure.com -press.vin -priceless.com -priceless.org -pricelessafrica.com -pricelessarabia.com -pricelessaruba.com -pricelessbeijing.com -pricelesshongkong.com -pricelesshonolulu.com -pricelessmarketingengine.com -pricelesspick.com -pricelesssantiago.com -pricelesssurprises.com -pricelesssydney.com -pricelesstoronto.ca -pricelesstv.com -prime-video.com -primeday.info -primevideo.cc -primevideo.com -primevideo.info -primevideo.org -primevideo.tv -princeton.edu -printeron.com -printersetupsupport.com -printspots.com -printspots.net -privacysandbox.com -privacysimplified.com -privacytools.io -privatebrowsingmyths.com -privatemarketplaces.net -privatemarketplaces.us -privilege.hk -privilege.tw -prodrive-japan.com -product.co.jp -projectapex.com -projectara.com -projectbaseline.com -projectmurphy.net -projectsangam.com -promonsterbeatsbydre.com -property.com.au -proptiger.com -proquest.com -pros.ee -prostores.com -prostudiobeatscybersale.com -protonmail.ch -protonmail.com -protonstatus.com -proxyrarbg.org -pscdn.co -pscp.tv -pse.is -psg-int-centralus.cloudapp.net -psg-int-eastus.cloudapp.net -psiphon3.com -pstatic.net -pstorage.space -psyccareers.com -ptt.cc -ptt2.cc -ptt3.cc -publishproxy.com -pubmatic.co.jp -pubmatic.com -pugetsoundbmw.com -pugetsoundmini.com -pugpig-dev.com -pugpig-stage.com -pugpig.com -pullstring.net -pureapk.com -putty.org -pvp.net -pvp.tv -pvue1.com -pvue2.com -pvzgw2.com -pvzheroes.com -pwabuilder.com -pwmnet.com -pwnedpasswords.com -pximg.net -pxt.io -pycon.org -pyhapp.com -pypa.io -pypi.io -pypi.org -pypl.com -pypl.info -pypl.net -pypl.tv -pyrobot.org -python.org -pythonhosted.org -q10.jp -q13.com -q13fox.com -qctconnect.com -qingse.one -qmap.pub -qoo10.jp -qprize.com -qr.ae -qt-project.org -qt.io -qualcomm-email.com -qualcomm.cn -qualcomm.co.id -qualcomm.co.in -qualcomm.co.jp -qualcomm.co.kr -qualcomm.co.uk -qualcomm.com -qualcomm.com.br -qualcomm.com.tw -qualcomm.de -qualcomm.fr -qualcomm.sc.omtrdc.net -qualcommhalo.com -qualcommlabs.com -qualcommmea.com -qualcommretail.com -qualcommventures.cn -qualcommventures.com -qualphone.com -quantil.com -quatrowireless.com -quatrum.com.br -questvisual.com -quicinc.com -quickoffice.com -quicktake.video -quicktime.cc -quicktime.com -quicktime.com.au -quicktime.eu -quicktime.net -quicktime.tv -quiksee.com -quip-cdn.com -quip.com -quipelements.com -quiz.directory -quora.com -quoracdn.net -quotable.com -qwapi.com -r-project.org -r10s.com -r10s.jp -r18.com -r18lu.com -racked.com -radeon.com -radian6.com -radiofarda.com -radiomango.fm -radiomarsho.com -radiosvoboda.org -radiotavisupleba.ge -radiyoyacuvoa.com -rakuten-static.com -rakuten.ca -rakuten.co.jp -rakuten.com -rakuten.com.tw -rakuten.ne.jp -rakuten.tw -rakuya.com.tw -rapidssl.com -raponlinereview.com -rarbg.is -rarbg.me -rarbg.to -rarbgaccess.org -rarbgaccessed.org -rarbgget.org -rarbggo.org -rarbgmirror.com -rarbgmirror.org -rarbgproxy.org -rarbgprx.org -rarbgto.org -rarbgunblock.com -rarbgunblock.org -rarbgway.org -raspberrypi.org -raspbian.org -ravm.tv -razer.com -razersupport.com -razerzone.com -razerzone.jp -rb-crisis.com -rb.com -rb.gy -rb.net -rbbusinessshop.com -rbdigitalab.com -rbdigitallab.com -rbeuroinfo.com -rbgrads.com -rbgraduates.com -rbmavericks.com -rbnainternational.com -rbplc.com -rbrandlibrary.com -rbsgr.com -rbspeakup.com -rclon.com -rea-asia.com -rea-group.com -rea.design -rea.global -rea.io -rea.tech -reabble.com -reachtheworldonfacebook.com -react.com -reactjs.com -reactjs.org -readmoo.com -readthedocs-hosted.com -readthedocs.com -readthedocs.io -readthedocs.org -realamericanstories.com -realamericanstories.info -realamericanstories.net -realamericanstories.org -realamericanstories.tv -realclear.com -realclearbooks.com -realcleardefense.com -realcleareducation.com -realclearenergy.org -realclearfoundation.org -realclearhealth.com -realclearhistory.com -realclearinvestigations.com -realclearlife.com -realclearmarkets.com -realclearpolicy.com -realclearpolitics.com -realclearpublicaffairs.com -realclearreligion.org -realclearscience.com -realclearworld.com -realcommercial.com.au -realestate.com.au -realestatejournal.com -realitykings.com -realmilwaukeenow.com -realtor.com -realtype.co.jp -realtype.jp -realvision.com -reastatic.net -rebates.jp -rebrandly.com -reckitt.net -reckittbenckiser.com -reckittbenckiser.net -reckittbenckiser.tv -reckittprofessional.com -recode.net -recoiljs.org -reconinstruments.com -reconjet.com -redd.it -reddit.com -redditmail.com -redditmedia.com -redditstatic.com -redgifs.com -redis.io -redislabs.com -redkix.com -redtube.com -redzonechannel.com -regiongold.com -registerhulu.com -registeridm.com -registry.google -relateiq.com -remirepo.net -renchead.com -renovacionoffice.com -renovacionxboxlive.com -rentaride.com -rentaride.de -renzhe.cloud -repsils.no -repsneakermall.com -repswing.com -researchandcare.org -researchgate.net -researchintel.com -researchkit.hk -researchkit.net -researchkit.org -researchkit.tv -respawnbyrazer.com -rethink.net -reurl.cc -reuters.com -reuters.tv -reutersagency.cn -reutersmedia.net -revenue-performance-management.com -revolv.com -rewrite-anime.tv -rfa.org -rferl.org -rfi.fr -rgpub.io -rhodeislandbmw.com -ridepenguin.com -rimg.com.tw -riot-games.com -riot.com -riot.im -riot.net -riotcdn.net -riotforgegames.com -riotgames.co.kr -riotgames.com -riotgames.info -riotgames.jp -riotgames.net -riotgames.tv -riotpin.com -riotpoints.com -rmbl.ws -road-crew.com -roborecall.com -rocketfishproducts.com -rocksdb.com -rocksdb.net -rocksdb.org -rockstargames.com -roku.com -rokutime.com -rolfoundation.org -rolls-roycecullinan.com -rolls-roycemotorcars.com -rolls-roycemotorcarsna.com -rolsociety.org -root-signing.ch -rootsigning.com -routledgehandbooks.com -royalsocietypublishing.org -rpmfusion.org -rprimelab.com -rrtis.com -rsc.org -rsf.org -rsg.sc -rsshub.app -rstatic.net -rt.com -rthk.hk -rtings.com -rtm.tnt-ea.com -ruby-lang.org -rubygems.org -ruinedking.com -rule34.xxx -rumah123.com -rumble.com -run.app -runnike.com -runningnike.com -rust-lang.org -rustup.rs -ruten.com.tw -ryokoyomiuri.co.jp -s-bluemix.net -s-cashonmobile.com -s-microsoft.com -s-msn.com -s-nbcnews.com -s-rewards.hk -s-xoom.com -s.team -s2stagehance.com -s81c.com -sa78gs.wpc.edgecastcdn.net -safechat.com -saffrontech.com -sagepub.com -sahabatsetiasmartone.com -sale-nikeshoes.com -salebeatslasteststyle4you.com -saleblackfridaydrebeats.com -salecheaphandbags.com -salesforce.com -salesforce.org -salesforceiq.com -salesforceliveagent.com -salesforcemarketingcloud.com -samebags.com -samsung.com -samsungapps.com -samsungcloud.com -samsungdm.com -samsunggalaxyfriends.com -samsungknox.com -samsungqbe.com -sandisk.ae -sandisk.co.jp -sandisk.co.kr -sandisk.co.uk -sandisk.com -sandisk.com.au -sandisk.com.br -sandisk.com.tr -sandisk.com.tw -sandisk.de -sandisk.es -sandisk.fr -sandisk.hk -sandisk.id -sandisk.in -sandisk.it -sandisk.nl -sandisk.sg -sankei-ad-info.com -sankei-ad.net -sankei-books.co.jp -sankei-call.jp -sankei-digital.co.jp -sankei-eiga.co.jp -sankei-kaihatsu.co.jp -sankei-kurashi.com -sankei-shougakukai.jp -sankei-tours.com -sankei.co.jp -sankei.com -sankei.jp -sankeibiz.jp -sankeishop.jp -sankie.net -sanspo.com -sanvaras.com -sarajevopodopsadom.com -savethedate.foo -savvyshopper.net.au -saynow.com -sb-mobile.jp -sb-telecom.net -sb.sb -sbitravelcard.com -sbnation.com -sbux.com.my -sbuxcard.com -sc-cdn.net -scala-lang.org -scala-sbt.org -scaleflex.com -scdn.co -scenesource.me -schemer.com -schiffvitamins.com -scholar.google.ae -scholar.google.at -scholar.google.be -scholar.google.bg -scholar.google.ca -scholar.google.cat -scholar.google.ch -scholar.google.cl -scholar.google.cn -scholar.google.co.cr -scholar.google.co.id -scholar.google.co.il -scholar.google.co.in -scholar.google.co.jp -scholar.google.co.kr -scholar.google.co.nz -scholar.google.co.th -scholar.google.co.uk -scholar.google.co.ve -scholar.google.co.za -scholar.google.com -scholar.google.com.ar -scholar.google.com.au -scholar.google.com.bo -scholar.google.com.br -scholar.google.com.co -scholar.google.com.cu -scholar.google.com.do -scholar.google.com.ec -scholar.google.com.eg -scholar.google.com.gt -scholar.google.com.hk -scholar.google.com.ly -scholar.google.com.mx -scholar.google.com.my -scholar.google.com.ni -scholar.google.com.pa -scholar.google.com.pe -scholar.google.com.ph -scholar.google.com.pk -scholar.google.com.pr -scholar.google.com.py -scholar.google.com.sg -scholar.google.com.sv -scholar.google.com.tr -scholar.google.com.tw -scholar.google.com.ua -scholar.google.com.uy -scholar.google.com.vn -scholar.google.cz -scholar.google.de -scholar.google.dk -scholar.google.es -scholar.google.fi -scholar.google.fr -scholar.google.gr -scholar.google.hn -scholar.google.hr -scholar.google.hu -scholar.google.is -scholar.google.it -scholar.google.li -scholar.google.lt -scholar.google.lu -scholar.google.lv -scholar.google.nl -scholar.google.no -scholar.google.pl -scholar.google.pt -scholar.google.ro -scholar.google.ru -scholar.google.se -scholar.google.si -scholar.google.sk -scholar.l.google.com -scholarpedia.org -sci-hub.ee -sci-hub.it.nf -sci-hub.mksa.top -sci-hub.se -sci-hub.st -sci.hubg.org -science.org -sciencedirect.com -sciencedirectassets.com -sciencemag.org -scientificamerican.com -scientificlinux.org -scitation.org -scmp.com -scnshop.cc -scnsrc.me -scoop.sh -scopus.com -scoreland.com -scp-wiki.net -scpdb.org -scpwiki.com -screens-lab.jp -screenwisetrends.com -screenwisetrendspanel.com -sdcountybmw.com -seagroup.com -seamonkey-project.org -seaofsolitude.com -seasidestory.tokyo -secom.co.jp -secomtrust.net -secretchina.com -sectigo.com -secure-paypal.info -securepaypal.info -seiron-sankei.com -sellercommunity.com -semanticscholar.org -sensorynetworks.com -seqingx.com -sequence.com -serialssolutions.com -serverfault.com -serverlesslibrary.net -services-apple.net -services-exchange.com -serviceshp.com -servicetalk.io -seselah.com -setapp.com -setn.com -settv.com.tw -severreal.org -sextop1.net -sexzy4.com -sf.net -sfbassets.com -sfbassets.net -sfdcstatic.com -sforce.com -sfx.ms -shadowcomplex.com -shadowsocks.com -shadowsocks.nl -shadowsocks.org -sharepoint.com -sharepointonline.com -sharethis.com -sharpdaily.tw -shazam.com -shelfstuff.com -shields.io -shinhangmc.com -shireyishunjian.com -shoers.com -shoestop2.com -shop-headphones.net -shop.app -shopbeatsdre.com -shopbmwmotorcycles.com -shopbmwusa.com -shopbydre.com -shopcustomizedbeats.com -shopdisney.com -shopdrebeats.com -shopdurex.com -shopee.co.id -shopee.co.th -shopee.com -shopee.com.br -shopee.com.my -shopee.ph -shopee.sg -shopee.tw -shopee.vn -shopeemobile.com -shopfacebook.com -shopibay.net -shopify.com -shopify.dev -shopifycdn.com -shopifycloud.com -shopifystatus.com -shopifysvc.com -shoping.com -shopminiusa.com -shopmonsterbeats.com -shoppercentre.com -shopping-days.net -shoppinguheadphones.com -shops-disney.com -shopspeedtv.com -shorturl.at -shotwithgeforce.com -shp.ee -shuziyimin.org -sibreal.org -siege-amazon.com -sign.new -signal.art -signal.org -signalbar.com -signalprocessingsociety.org -signalusers.org -silverchair-cdn.com -simcity-buildit.com -simcity.com -simg.jp -simgbb.com -simility.com -simplify.com -simplifycommerce.com -simplyipod.com -sinchew.com.my -sinchew.my -sing68.com -singpao.com.hk -singtao.com -singtaobooks.com -singtaola.com -singtaonewscorp.com -singtaoopo.com -singtaousa.com -sinoinsider.com -siport.com -sipriyearbook.org -siri.com -sis001.com -site.com -sitepoint.com -skate2.com -skillshare.com -sky.com -skyassets.com -skyoceanrescue.com -skyoceanrescue.de -skyoceanrescue.it -skype.com -skype.net -skypeassets.com -skypeassets.net -skysports.com -skysports.fr -skysports.ie -skysportsonline.com -skysportsracing.com -slack-core.com -slack-edge.com -slack-files.com -slack-imgs.com -slack-msgs.com -slack-redir.net -slack.com -slackb.com -slackcertified.com -slackdemo.com -slackhq.com -slashdot.org -slideshare.com -slideshare.net -slidesharecdn.com -sling.com -slinginternational.com -slobodnaevropa.mk -sm.ms -smart-edge.com -smartcommunitiescoalition.com -smartcommunitiescoalition.org -smartexpos.com -smartline.com.au -smartone.com -smartoneholdings.com -smartonerobotics.com -smartonesolutions.com.hk -smartonesolutions.hk -smpte.org -snap-dev.net -snap-telemetry.io -snap.com -snapads.com -snapchat.com -snapcraft.io -snapdragon.cn -snapdragonbooth.com -snapkit.co -snapseed.com -snapstore.io -snapvolumes.com -sndcdn.com -sneaker666.com -sneakerpage.net -sneakerskick.com -sni1dcb6gl.wpc.edgecastcdn.net -soasta-dswb.com -socalbmw.com -soccerfanz.com.my -soccerfinancier.ca -soccermatchpass.com -social.com -socrec.org -softbank-ipo.com -softbank-jp.com -softbank-robotics.com -softbank-telecom.com -softbank-telecom.net -softbank.jp -softbank.tv -softbankbb.com -softbankbb.net -softbankci.com -softbankhawksstore.jp -softbankmobile.net -softbankrobotics.com -softbanktelecom.com -softbankusa.net -softbankventuresasia.com -softbankworld.com -softether-download.com -softether.org -sohcradio.com -sohfrance.org -soirt4.fun -solarcity.com -solostudioksale.com -solveforx.com -sony-africa.com -sony-asia.com -sony-europe.com -sony-hes.co.jp -sony-latin.com -sony-mea.com -sony-olympus-medical.com -sony-promotion.eu -sony-semicon.co.jp -sony.at -sony.ba -sony.be -sony.bg -sony.ca -sony.ch -sony.cl -sony.co.cr -sony.co.id -sony.co.in -sony.co.jp -sony.co.kr -sony.co.nz -sony.co.th -sony.co.uk -sony.com -sony.com.ar -sony.com.au -sony.com.bo -sony.com.br -sony.com.co -sony.com.do -sony.com.ec -sony.com.gt -sony.com.hk -sony.com.hn -sony.com.mk -sony.com.mx -sony.com.my -sony.com.ni -sony.com.pa -sony.com.pe -sony.com.ph -sony.com.sg -sony.com.sv -sony.com.tr -sony.com.tw -sony.com.vn -sony.cz -sony.de -sony.dk -sony.ee -sony.es -sony.eu -sony.fi -sony.fr -sony.gr -sony.hr -sony.hu -sony.ie -sony.it -sony.kz -sony.lt -sony.lu -sony.lv -sony.net -sony.nl -sony.no -sony.pl -sony.pt -sony.ro -sony.rs -sony.ru -sony.se -sony.si -sony.sk -sony.ua -sonybo.co.jp -sonybsc.com -sonybuilding.jp -sonyclassics.com -sonydesign.com -sonydna.com -sonyentertainmentnetwork.com -sonyglobalsolutions.jp -sonykigyo.jp -sonylatvija.com -sonypcl.jp -sonypictures.com -sonypicturesanimation.com -sonypicturesmuseum.com -sonypicturesstudios.com -sonypicturestelevision.com -sonypicturestelevisiongames.com -sonyprotechnosupport.co.jp -sonystoragemedia.co.jp -sonytc.co.jp -sorcerersarena.com -soso7778.com -soundcloud.com -soundofhope.kr -soundofhope.org -sourceforge.com -sourceforge.net -sourcingforebay.com.cn -sourcingforebay.net -sourcingforebay.tv -south-plus.net -southfloridamini.com -sovec.net -spaceexplored.com -spacely.com.au -spacex.com -spaindisney.com -spankbang.com -spearhead.kr -specialtyheadphones.com -speeddreamride.com -speedfantasybid.com -speedhunters.com -speedracegear.com -speedtest.com.hk -speedxtra.com -spektral.cc -speybay.com -spiceworks.com -spiceworksstatic.com -spiedigitallibrary.org -spiritclubs.com -spiritofecstasy.com -splatoon2tournament.com -sponichi.co.jp -spore.com -sportsfacebook.com -sportstream.com -sportswomanoftheyear.co.uk -sportswomenoftheyear.co.uk -spoti.fi -spotify-everywhere.com -spotify.com -spotify.design -spotifycdn.com -spotifycdn.net -spotifycharts.com -spotifycodes.com -spotifyforbrands.com -spotifyjobs.com -spraynwash.com -spreadprivacy.com -springer.com -springerlink.com -springernature.com -sprinklesapp.com -spyjinx.com -sqlite.org -sqlserveronlinux.com -squarecapital.com -squarecdn.com -squarecloudservices.com -squarefoot.com.hk -squareup.com -squirrelgroup.net -squirrelvpn.com -srebrenica360.com -srtcdn.net -ssdevrd.com -ssl-certificate.ch -ssl-images-amazon.com -ssl-lvlt.cdn.ea.com -sslpaypal.org -ssplive.pw -ssrpass.pw -sstatic.net -ssx3.com -stackage.org -stackapps.com -stackauth.com -stackexchange.com -stackmod.blog -stackoverflow.blog -stackoverflow.com -stackoverflow.email -stackoverflowbusiness.com -stackpath.com -stackpath.dev -stacksnippets.net -stadia.dev -staffhub.ms -standardsuniversity.org -star-brasil.com -star-latam.com -starbucks-stars.com -starbucks.ad -starbucks.at -starbucks.be -starbucks.bg -starbucks.ca -starbucks.ch -starbucks.co.id -starbucks.co.jp -starbucks.co.nz -starbucks.co.th -starbucks.co.uk -starbucks.co.za -starbucks.com -starbucks.com.ar -starbucks.com.bn -starbucks.com.co -starbucks.com.cy -starbucks.com.gr -starbucks.com.hk -starbucks.com.kh -starbucks.com.kz -starbucks.com.mx -starbucks.com.my -starbucks.com.pe -starbucks.com.sg -starbucks.com.tr -starbucks.com.uy -starbucks.de -starbucks.dk -starbucks.es -starbucks.fr -starbucks.hu -starbucks.ie -starbucks.in -starbucks.it -starbucks.nl -starbucks.no -starbucks.ph -starbucks.pl -starbucks.pt -starbucks.rs -starbucks.ru -starbucks.se -starbucks.tt -starbucks.vn -starbucksathome.com -starbucksavie.ca -starbuckscard.ph -starbuckscardb2b.com -starbuckscoffee.cz -starbuckscoffeegear.com -starbuckscoffeegearstore.com -starbucksforlife.ca -starbucksforlife.com -starbuckspoq.com -starbucksreserve.com -starbucksrewardsstarland.ca -starbucksrewardsstarland.com -starbucksromania.ro -starbucksrtd.com -starbucksslovakia.sk -starbuckssummergame.ca -starbuckssummergame.com -starcraft.com -starcraft2.com -starfox.com -stark-verlag.ch -startpage.com -startpath.com -startupjournal.com -startupschool.org -starwars.com -starwarsbattlefront.com -starwarsbattlefront2.com -starwarsfallenorder.com -starwarsgalacticstarcruiser.com -starwarsjedifallenorder.com -starwarskids.com -starwarstheoldrepublic.com -stateofthemap.com -stateofthemap.org -static-cisco.com -static-nike.com -static-verizon.com -static9.net.au -staticflickr.com -statics-marketingsites-eus-ms-com.akamaized.net -statics-marketingsites-wcus-ms-com.akamaized.net -statsmakemecry.com -statuspage.io -stc-server.com -stcroixmosquito.com -stcroixmosquitoproject.com -steam-chat.com -steambroadcast.akamaized.net -steamcdn-a.akamaihd.net -steamcommunity-a.akamaihd.net -steamcommunity.com -steamcontent.com -steamgames.com -steampowered.com -steamstatic.com -steamstore-a.akamaihd.net -steamunlocked.net -steamusercontent-a.akamaihd.net -steamusercontent.com -steamuserimages-a.akamaihd.net -steamvideo-a.akamaihd.net -steelbrick.com -steemit.com -stheadline.com -stlouisbmw.net -stockagainstphotography.com -storage.live.com -store-bridgestonesports.com -storesense.com -storm.mg -storyful.com -straightouttasomewhere.com -streamable.com -streamingdisney.net -strepsils.at -strepsils.ch -strepsils.co.kr -strepsils.co.nz -strepsils.co.za -strepsils.com.ar -strepsils.com.au -strepsils.com.br -strepsils.com.co -strepsils.com.hk -strepsils.com.ph -strepsils.com.tw -strepsils.es -strepsils.fi -strepsils.fr -strepsils.hr -strepsils.hu -strepsils.ie -strepsils.net -strepsils.pl -strepsils.pt -strepsils.ro -strepsils.ru -strepsils.si -strepsils.us -strepsilsarabia.com -strikingly.com -strikinglycdn.com -stripchat.com -stripe.com -stripe.network -stripecdn.com -studiobeatsbydrdre.com -studywatchbyverily.com -studywatchbyverily.org -stunnel.org -stxmosquito.com -stxmosquitoproject.com -stxmosquitoproject.net -stxmosquitoproject.org -sub147.com -sublimetext.com -subscene.com -successwithteams.com -sulwerphoto.com -sun.com -sunbingo.co.uk -sundanceignite2016.com -sundayready.com -sunglassessale2014.com -supercoach.com.au -superearsenjoy.com -supermario.com -supermario3dworld.com -supermariogalaxy.com -supermariorun.com -superpapermario.com -superstation.com.tw -superuser.com -supplybestjerseys.com -supportfacebook.com -supremacy.com -supremacy.net -surface.com -surflite.co -surflite.net -sustainthesound.com -svaboda.org -sverigebeatsbydrdre.com -svoboda.org -svobodnaevropa.bg -svp-team.com -svpply.com -swag.live -sway-cdn.com -sway.com -sweetandmaxwell.co.uk -swift.org -swiftbank.info -swiftbank.us -swiftcapital.com -swiftfinancial.com -swiftfinancial.info -swiftfinancial.net -swissid.ch -swissign.com -swissign.li -swisssign-group.ch -swisssign-group.com -swisssign-group.li -swisssign.ch -swisssign.com -swisssign.li -swisssign.net -swisssign.org -swisssigner.ch -swisssigner.com -swisssigngroup.ch -swisssigngroup.com -swissstick.com -swisstsa.ch -swisstsa.li -swjedifallenorder.com -swjfo.com -swoo.sh -swoosh.com -swoosh.tv -swtor.com -swtor.net -syhacked.com -synaptic.net -synergyse.com -syosetu.com -sysinternals.com -szabadeuropa.hu -szcheapmonsterheadphones.com -szwinnertechnology.com -t.co -t.me -t21.nikkei.co.jp -t21ipau.nikkei.co.jp -t66y.com -taboola.com -tagapie.com.tw -tail-f.com -tailf.com -tailwindtraders.com -taipeitimes.com -taiwannews.com.tw -takegoto.com -talentlens.com -talksport.com -tandberg-china.com -tandberg.com -tandf.co.uk -tandfonline.com -taptotokyo.com -target.com -targetimg1.com -taste.com.au -tasteofpremium.jp -taylorandfrancis.com -taylorfrancis.com -tbr.tangbr.net -tdesktop.com -teamneedforspeed.com -tearapeak.com -techatbloomberg.com -techhub.ms -techliquidators.com -technews.tw -technics.com -technologyandsociety.org -techstreet.com -techtimes.com -ted.com -tedcdn.com -teenchoice.com -tegrazone.co -tegrazone.co.kr -tegrazone.com -tegrazone.jp -tegrazone.kr -telebay.com -telega.one -telegra.ph -telegram.dog -telegram.me -telegram.org -telegram.space -telekom.com -telekom.de -telesco.pe -telesell.com -telex.cc -tellapart.com -tellme.pw -tellmewhygame.com -tenbyfotolia.com -tensorflow.org -terapeack.com -terapeak.ca -terapeak.com -terapeak.com.hk -terapeak.hk -terapeak.info -teraperk.com -termius.com -termux.com -termux.org -terraform.io -terragraph.com -terrapeak.com -tesla-cdn.thron.com -tesla.com -teslamotors.com -test-ipv6.com -testonfox.com -tex-talk.net -texttobuy.org -texture.com -tfhub.dev -tfsallin.net -tg.dev -thanksloyalty.com -thawte.com -thawte.de -thawte.fr -the-japan-news.com -the-m-festival.com -the-monster-beats.com -the-tls.co.uk -theaffairs.com -theaustralian.com.au -theav.cc -thebanker.com -thebankerdatabase.com -thebayuk.com -thebeatsbydre.com -thebeatsbydre.net -thebeatsheadphonesale.com -thechronicle.com.au -theclasshroom.com -thecleversense.com -theclub.com.hk -thecompaqstore.com -thedailysnkr.com -thedreadwolfrises.com -theebayshop.com -theepochtimes.com -theepochtimessubscribe.com -thefacebook.com -thefacebook.net -thefind.com -thefoxnation.com -thegatewaypundit.com -thegeorgiascene.com -thegithubshop.com -thegooglestore.com -theguardian.com -theguardiandns.com -thehealthsite.com -thehulubraintrust.com -theinitium.com -theinstagramhack.com -theintelstore.com -thelancet.com -thelegendarystarfy.com -theman.in -themarvelexperiencetour.com -themathsfactor.com -themercury.com.au -themessengeradelaide.com.au -themoviedb.org -thenationalpulse.com -thenewslens.com -thenextweb.com -theopportunityproject.org -thepaypalshop.com -thepiratebay.org -theporndude.com -thescottishsun.co.uk -thesffblog.com -theshoppingexpresslane.net -thesims.com -thesims3.com -thesims4.com -thesimssocial.com -thestandard.com.hk -thestandnews.com -thestationbymaker.com -thesun.co.uk -thesun.ie -thesundaytimes.co.uk -thetimes.co.uk -thetimes.ie -thetread.com -thetvdb.com -thetype.com -theuab.net -theverge.com -theweek.in -thewonderful101.com -thinkboxsoftware.com -thinkdifferent.us -thinkofliving.com -thinkquarterly.co.uk -thinkquarterly.com -thinkwithgoogle.com -thisav.com -thisismoney.co.uk -thisispolaris.com -thismon.ee -thisvid.com -thomsonreuters.ca -thomsonreuters.cn -thomsonreuters.co.jp -thomsonreuters.co.kr -thomsonreuters.co.nz -thomsonreuters.co.uk -thomsonreuters.com -thomsonreuters.com.ar -thomsonreuters.com.au -thomsonreuters.com.br -thomsonreuters.com.hk -thomsonreuters.com.my -thomsonreuters.com.pe -thomsonreuters.com.sg -thomsonreuters.com.tr -thomsonreuters.es -thomsonreuters.in -thomsonreuters.ru -thomsonreutersmexico.com -thtmod1.com -thunderbird.net -thunderbolttechnology.net -tiberiumalliances.com -tiburon.com -tictoc.video -tidal.com -tidalhifi.com -tidelift.com -tiendabestbuy.com -tiktok.com -tiktokcdn.com -tiktokv.com -tiltbrush.com -time.gov -timelinestoryteller.com -timesmembership.com -timestalks.com -tinyurl.com -tiresplus.com -titanfall.com -tkb008.xyz -tmdb.org -tmsnrt.rs -tnntoday.com -tnt-ea.com -toget.com.tw -tokyo-sports.co.jp -tokyomotion.net -tomonews.net -tonec.com -toolforge.org -topbeatsbydrdreoutlet.com -topbeatsdealer.com -topbeatsforsale.com -toplayerserver.com -torcidadeouro.com -torproject.org -torrentkitty.tv -torrindex.net -tospo-keiba.jp -touchid.tv -touchid.wang -touchsmartpc.com -touchsmartpc.net -touchsmartpc.org -toutapp.com -towerauction.com -townsvillebulletin.com.au -tr.com -tracking-location.com -tradevip1.com -trafficmanager.net -translatetheweb.com -translatewiki.net -translatewiki.org -travelcontroller.com -travelex.be -travelex.bh -travelex.ca -travelex.co.in -travelex.co.jp -travelex.co.nz -travelex.co.uk -travelex.com -travelex.com.au -travelex.com.hk -travelex.com.my -travelex.com.om -travelex.com.tr -travelex.de -travelex.fr -travelex.it -travelex.qa -travelexae.com -travelexch.com -travelexmoneycard.com -trello.com -trellocdn.com -tribler.org -tristatebmw.com -trithucvn.net -trithucvn.org -trmini.com -troisrivieresmini.com -truedepth3d.com -trustdoc.ch -trustedanalytics.com -trustedanalytics.net -trustsign.ch -trustwave.com -trycloudflare.com -trydurex.net -trydurex.tv -tryengineering.org -tryfunctions.com -tryrating.com -ts.la -tsquare.tv -tssp.best -tteshop.com -ttvnw.net -tube4world.com -tube8.com -tubesafari.com -tubetubetube.com -tug.org -tumblr.com -tunsafe.com -tuta.io -tutanota.com -tvappstore.net -tvb.com -tvb.com.au -tvbanywhere.com -tvbanywhere.com.sg -tvbeventpower.com.hk -tvbs.com.tw -tvbusa.com -tvbweekly.com -tver.co.jp -tver.jp -tvmedia.net.au -tvmost.com.hk -tvnaviweb.jp -tvpromise.com -tweetdeck.com -twgreatnews.com -twimg.com -twinprime.com -twister.net.co -twitch.tv -twitchcdn.net -twitchsvc.net -twitpic.com -twitter.com -twitter.jp -twitterinc.com -twitteroauth.com -twitterstat.us -twnextdigital.com -twtrdns.net -twttr.com -tx.me -txcloud.net -txdirectv.com -txvia.com -typeisbeautiful.com -typekit.com -typekit.net -typenetwork.com -typesquare.com -typography.com -u.nu -uber-assets.com -uber.com -ubereats.com -ubi.com -ubisoft-orbit-savegames.s3.amazonaws.com -ubisoft-uplay-savegames.s3.amazonaws.com -ubisoft.com -ubisoftconnect.com -ubistatic3-a.akamaihd.net -ubnw.net -ubuntu-touch.io -ubuntu.com -ubuntu.net -ubuntuforums.org -uchicago.edu -ucla.edu -udacity.com -udemy.com -udemycdn.com -udfs.com -udn.com -udn.com.tw -udndata.com -udnfunlife.com -udtrucksmeena.com -ueberamazon.de -uhub.com -ukipad.com -ukwhoswho.com -ulifestyle.com.hk -ulol.com -ultimaforever.com -ultimaonline.com -umagazine.com.hk -umamusume.akamaized.net -umass.edu -un.org -unbrandedproducts.com -underlords.com -unfiltered.news -unity.com -unity3d.com -unityads.unity3d.com -unityads.unitychina.cn -universalorlando.com -universalpictures.com -universalpicturesinternational.com -universalstudioshollywood.com -universitypressscholarship.com -unlocklimitlesslearning.com -unpkg.com -unravel2.com -unraveltwo.com -unrealengine.com -unrealtournament.com -unstyle.us -unwire.hk -uo.com -uoherald.com -upjav.cc -uplay.com -uplinq.com -uplynk.com -upmedia.mg -uproxy.org -urchin.com -urduvoa.com -usa-beatsbydreheadphonesonsale.net -usatoday.com -usatodaynetworkservice.com -useplannr.com -userapi.com -usercontent.dev -userpxt.io -usertrust.com -usvimosquito.com -usvimosquitoproject.com -uug22.com -uug23.com -uug25.com -uug26.com -uug27.com -uuk28.com -uun78.com -uun79.com -uun82.com -uun83.com -uun85.com -uun86.com -uun87.com -uun89.com -uun92.com -uun93.com -uun95.com -uun96.com -uun97.com -uun98.com -uun99.com -uux68.com -uverse.com -uwpcommunitytoolkit.com -v-has.com -v.gd -v2ex.com -v2fly.org -v2ray.com -v2ray.cool -v8.dev -v8project.org -vaginacontest.com -vagrantcloud.com -vagrantup.com -valuegb.com -valvesoftware.com -vancouverbmwretailers.ca -vanish.at -vanish.be -vanish.ch -vanish.cl -vanish.co.id -vanish.co.il -vanish.co.in -vanish.co.nz -vanish.co.uk -vanish.co.za -vanish.com.ar -vanish.com.br -vanish.com.co -vanish.com.hr -vanish.com.mx -vanish.com.my -vanish.com.pe -vanish.com.sg -vanish.com.tr -vanish.de -vanish.dk -vanish.es -vanish.fi -vanish.fr -vanish.hu -vanish.ie -vanish.it -vanish.nl -vanish.no -vanish.pl -vanish.pt -vanish.ro -vanish.ru -vanish.se -vanish.si -vanish.sk -vanisharabia.com -vanishbancaseulook.com.br -vanishcentroamerica.com -vanishinfo.cz -vanishstains.com -vanishstains.com.au -vanitaonline.com -vanitha.in -vanithaveedu.com -vaultify.com -vaultify.info -vaultify.net -vaultproject.io -vcanedge.com -vcloudair.net -vct.news -vector.im -veet.at -veet.be -veet.ca -veet.ch -veet.cl -veet.co.id -veet.co.in -veet.co.kr -veet.co.nz -veet.co.uk -veet.co.za -veet.com -veet.com.ar -veet.com.au -veet.com.bd -veet.com.br -veet.com.co -veet.com.hk -veet.com.mx -veet.com.my -veet.com.ph -veet.com.pk -veet.com.sg -veet.com.tr -veet.de -veet.dk -veet.es -veet.fi -veet.fr -veet.hu -veet.jp -veet.nl -veet.no -veet.pt -veet.ro -veet.ru -veet.se -veet.tv -veet.us -veetarabia.com -veetbangladesh.com -veetcentroamerica.com -veetclub.it -velkaepocha.cz -velocloud.com -velostrata.com -vendu.com -venmo-touch.com -venmo.com -venmo.info -venmo.net -venmo.org -venmo.s3.amazonaws.com -vercel-dns.com -vercel-status.com -vercel.app -vercel.com -verily.com -verilylifesciences.com -verilystudyhub.com -verilystudywatch.com -verilystudywatch.org -verisign.asia -verisign.biz -verisign.ch -verisign.co.in -verisign.co.uk -verisign.com -verisign.com.au -verisign.com.br -verisign.com.cn -verisign.com.es -verisign.com.hk -verisign.com.sg -verisign.com.tw -verisign.com.vn -verisign.de -verisign.dk -verisign.es -verisign.fr -verisign.hk -verisign.in -verisign.info -verisign.jobs -verisign.mobi -verisign.name -verisign.net -verisign.org -verisign.pro -verisign.se -verisign.sg -verisign.tw -verisign.us -verisign.vn -verisigninc.com -verizon.com -verizon.net -verizonbusinessfios.com -verizondigitalmedia.com -verizonenterprise.com -verizonfios.com -verizonmedia.com -verizonwireless.com -versly.com -verygoodnike.com -veryshortintroductions.com -vfabric.net -vfsco.at -vfsco.be -vfsco.bg -vfsco.ca -vfsco.ch -vfsco.cl -vfsco.co.uk -vfsco.co.za -vfsco.com -vfsco.com.au -vfsco.com.br -vfsco.com.tr -vfsco.cz -vfsco.de -vfsco.dk -vfsco.ee -vfsco.es -vfsco.fi -vfsco.fr -vfsco.hu -vfsco.ie -vfsco.in -vfsco.it -vfsco.jp -vfsco.kr -vfsco.lt -vfsco.lv -vfsco.mx -vfsco.nl -vfsco.no -vfsco.pe -vfsco.pl -vfsco.ro -vfsco.ru -vfsco.se -vfsco.sk -vfsco.us -vfsforgit.com -vfsforgit.org -vgcareers.net -vgg8.com -vhx.tv -vhxqa1.com -vhxqa2.com -vhxqa3.com -vhxqa4.com -vhxqa6.com -viacbs.com -viacom.com -viacomcbs.com -viacomcbspressexpress.com -videobreakdown.com -videochampion.com -videodelivery.net -videoindexer.ai -videojs.com -videolan.org -videopress.com -videos-rockstargames-com.akamaized.net -vidmpreview.com -viewpointsfromfacebook.com -vilavpn.com -vilavpn.xyz -vilavpn1.xyz -vilavpn2.xyz -vilavpn3.xyz -vilavpn4.xyz -vilavpn5.xyz -vilavpn6.xyz -vilavpn7.xyz -vim.org -vimeo-staging.com -vimeo-staging2.com -vimeo.com -vimeo.fr -vimeobusiness.com -vimeocdn.com -vimeogoods.com -vimeoondemand.com -vimeostatus.com -vine.co -vip-beats.com -vipbeatsbydre.com -vipheadphones.com -vipoo.es -vipshoes2.com -virsto.com -virsto.net -virtualearth.net -virtuata.com -visa-atm.com -visa-news.jp -visa.be -visa.ca -visa.cl -visa.co.ao -visa.co.cr -visa.co.id -visa.co.il -visa.co.in -visa.co.jp -visa.co.ke -visa.co.ni -visa.co.nz -visa.co.th -visa.co.uk -visa.co.ve -visa.co.za -visa.com -visa.com.ag -visa.com.ai -visa.com.ar -visa.com.au -visa.com.az -visa.com.bo -visa.com.br -visa.com.bs -visa.com.bz -visa.com.co -visa.com.cy -visa.com.dm -visa.com.do -visa.com.ec -visa.com.ge -visa.com.gt -visa.com.gy -visa.com.hk -visa.com.hn -visa.com.hr -visa.com.jm -visa.com.kh -visa.com.kn -visa.com.kz -visa.com.lc -visa.com.lk -visa.com.ms -visa.com.mx -visa.com.my -visa.com.ng -visa.com.pa -visa.com.pe -visa.com.ph -visa.com.pr -visa.com.py -visa.com.ru -visa.com.sg -visa.com.sv -visa.com.tr -visa.com.tt -visa.com.tw -visa.com.ua -visa.com.uy -visa.com.vc -visa.com.vi -visa.com.vn -visa.cz -visa.de -visa.dk -visa.es -visa.fi -visa.fr -visa.gd -visa.gp -visa.gr -visa.hk -visa.hu -visa.ie -visa.is -visa.ky -visa.lt -visa.lv -visa.mn -visa.mq -visa.nl -visa.no -visa.pl -visa.pt -visa.ro -visa.se -visa.sk -visa.so -visa.sx -visa.tc -visabank.org -visabg.com -visabusinessinsights.com -visacarddesignlab.com -visacards.com -visacheckout.net -visacheckout.org -visaconciergelac.com -visadigital.com -visadigitalconcierge.com -visadns.com -visadpsonline.us -visaeurope.at -visaeurope.ch -visaeurope.lu -visaeurope.si -visaeverywhereshop.com -visafintechfasttrack.com -visafulfillment.com -visagiftcard.us -visaglobalfinance.com -visaicsdirect.com -visainfinite.ca -visainfiniteluxuryhotels.ca -visaitalia.com -visakorea.com -visaluxuryhotelcollection.com -visaluxuryhotelcollection.com.br -visaluxuryhotelcollection.com.mx -visaluxuryhotels.com -visaluxuryhotels.com.ar -visamiddleeast.com -visanet.net -visapcsdirect.com -visaplus.com -visasavingsedge.ca -visasignature.co.kr -visasignaturehotels.com -visasoutheasteurope.com -visb.org -visceralgames.com -visiontimes.com -visiontimes.de -visiontimes.fr -visiontimes.it -visiontimes.net -visiontimesjp.com -visual-arts.jp -visualarts.gr.jp -visualstudio-staging.com -visualstudio.co -visualstudio.co.uk -visualstudio.com -visualstudio.eu -visualstudio.net -viu.com -viu.tv -vjav.com -vjmedia.com.hk -vk-cdn.me -vk-cdn.net -vk-portal.net -vk.cc -vk.com -vk.design -vk.link -vk.me -vkcache.com -vkgo.app -vklive.app -vkmessenger.app -vkmessenger.com -vkontakte.ru -vkuseraudio.com -vkuserlive.net -vkuservideo.com -vkuservideo.net -vmglobal.net -vmmark.com -vmtestdrive.com -vmw.com -vmware-cloudmanagement.com -vmware-techcenter.com -vmware.com -vmware.tt.omtrdc.net -vmware20mosaic.com -vmwareausnews.com -vmwarecertificationvideos.com -vmwarecloud.com -vmwaredemandcenter.com -vmwareemeablog.com -vmwaregrid.com -vmwarehorizon.com -vmwareidentity.com -vmwarelearning.com -vmwarelearningplatform.com -vmwarestuff.com -vmwareusergroupstore.com -vmwareviewpoint.com -vmwarevmc.com -vmwdemo.com -vmwgcomms.com -vmwhorizonair.com -vmwidm-ads.com -vmwidm.com -vmwlabconnect.com -vmwlearningplatform.com -vmworld.com -vmworld2010.com -vmworld2013.com -vmwsalesrewards.com -vmwservices.com -vnware.net -voa.gov -voaafaanoromoo.com -voaafrique.com -voabambara.com -voabangla.com -voacambodia.com -voacantonese.com -voachinese.com -voadeewanews.com -voadeewaradio.com -voahausa.com -voaindonesia.com -voakorea.com -voalingala.com -voandebele.com -voanews.com -voanews.eu -voanoticias.com -voanouvel.com -voaportugues.com -voashona.com -voasomali.com -voaswahili.com -voathai.com -voatibetan.com -voatibetanenglish.com -voatiengviet.com -voatour.com -voazimbabwe.com -vod-abematv.akamaized.net -vod-dash-uk-live.akamaized.net -vod-dash-ww-live.akamaized.net -vod-hls-uk-live.akamaized.net -vod-sub-uk-live.akamaized.net -vod-thumb-uk-live.akamaized.net -vod-thumb-ww-live.akamaized.net -vod360.net -vokevr.com -volvo-truck.nl -volvo.ca -volvo.com -volvo.se -volvobrandshop.com -volvobuses.at -volvobuses.be -volvobuses.ca -volvobuses.ch -volvobuses.co -volvobuses.co.nz -volvobuses.co.uk -volvobuses.co.za -volvobuses.com -volvobuses.com.ar -volvobuses.com.au -volvobuses.com.br -volvobuses.com.kw -volvobuses.com.pt -volvobuses.com.tw -volvobuses.de -volvobuses.dk -volvobuses.es -volvobuses.fi -volvobuses.fr -volvobuses.hk -volvobuses.hu -volvobuses.in -volvobuses.it -volvobuses.jo -volvobuses.kr -volvobuses.ma -volvobuses.mx -volvobuses.my -volvobuses.no -volvobuses.om -volvobuses.ph -volvobuses.pk -volvobuses.pl -volvobuses.ru -volvobuses.se -volvobuses.sg -volvobuses.tn -volvobuses.us -volvoce.com -volvodefense.com -volvogroup.be -volvogroup.com -volvogroup.com.br -volvogroup.de -volvogroup.fr -volvogroup.jp -volvogroup.kr -volvogroup.mx -volvogroup.nl -volvogroup.pe -volvogroup.pl -volvogroup.ru -volvogroup.se -volvogrouptruckcenter.nl -volvomerchandise.com -volvopenta.com -volvopenta.com.br -volvopenta.de -volvopenta.es -volvopenta.fr -volvopenta.it -volvopenta.nl -volvopenta.se -volvopenta.us -volvosaatio.fi -volvospares.com -volvotruckcenter.be -volvotruckcenter.dk -volvotruckcenter.es -volvotruckcenter.fi -volvotruckcenter.it -volvotruckcenter.kr -volvotruckcenter.kz -volvotruckcenter.nl -volvotruckcenter.no -volvotruckcenter.se -volvotruckrental.be -volvotrucks.ae -volvotrucks.al -volvotrucks.am -volvotrucks.at -volvotrucks.az -volvotrucks.ba -volvotrucks.be -volvotrucks.bg -volvotrucks.by -volvotrucks.ch -volvotrucks.cl -volvotrucks.co.ao -volvotrucks.co.bw -volvotrucks.co.il -volvotrucks.co.mz -volvotrucks.co.na -volvotrucks.co.nz -volvotrucks.co.uk -volvotrucks.co.za -volvotrucks.co.zm -volvotrucks.co.zw -volvotrucks.com -volvotrucks.com.ar -volvotrucks.com.au -volvotrucks.com.bn -volvotrucks.com.br -volvotrucks.com.co -volvotrucks.com.kw -volvotrucks.com.pt -volvotrucks.com.tr -volvotrucks.com.tw -volvotrucks.com.ua -volvotrucks.cz -volvotrucks.de -volvotrucks.dk -volvotrucks.ee -volvotrucks.es -volvotrucks.fi -volvotrucks.fr -volvotrucks.ge -volvotrucks.gr -volvotrucks.hk -volvotrucks.hr -volvotrucks.hu -volvotrucks.id -volvotrucks.in -volvotrucks.it -volvotrucks.jp -volvotrucks.kg -volvotrucks.kr -volvotrucks.kz -volvotrucks.lt -volvotrucks.lv -volvotrucks.ma -volvotrucks.md -volvotrucks.mk -volvotrucks.mn -volvotrucks.my -volvotrucks.net -volvotrucks.nl -volvotrucks.no -volvotrucks.pe -volvotrucks.ph -volvotrucks.pk -volvotrucks.pl -volvotrucks.ps -volvotrucks.qa -volvotrucks.ro -volvotrucks.rs -volvotrucks.ru -volvotrucks.se -volvotrucks.sg -volvotrucks.si -volvotrucks.sk -volvotrucks.tm -volvotrucks.tn -volvotrucks.uy -votolia.com -vox-cdn.com -vox.com -voxcreative.com -voxfieldguide.com -voxmedia.com -voxops.net -vpro.com -vpro.net -vrv.co -vsallin.net -vsassets.io -vsphere.com -vsphere.net -vtsociety.org -vtvan.com -vultr.com -vuvuzela.io -vzw.com -w.org -w.wiki -w3.org -w3schools.com -wa.me -waa.tw -wal-mart.com -wal.co -wallet.com -walmart-content.com -walmart.com -walmart.pharmacy -walmartimages.com -wanokokorosoh.com -want-media.com -wantblogger.com -wariolandshakeit.com -wariowarediy.com -warp.plus -warroom.org -wasdj.com -washingtondcbmw.com -washingtonpost.com -watch-ebay.org -watchanimeattheoffice.com -watchdisneyfe.com -watchespn.com -watchinese.com -watchjavonline.com -watchout.tw -water-and-power.com -waymo.com -waze.com -wballiance.com -wbd.ms -wd.com -wdc.com -wdfiles.com -wealth.com.tw -weareebay.com -web-instagram.net -web.app -web.dev -webappfieldguide.com -webex.ca -webex.co.in -webex.co.it -webex.co.jp -webex.co.kr -webex.co.nz -webex.co.uk -webex.com -webex.com.au -webex.com.br -webex.com.hk -webex.com.mx -webex.de -webex.es -webex.fr -webflow.com -webhosting.com -webkit.org -webkitgtk.org -webmoneyinfo.com -webmproject.org -webobjects.co.uk -webobjects.com -webobjects.de -webobjects.eu -webobjects.net -webofknowledge.com -webofscience.com -webpkgcache.com -webrtc.org -webtoons.com -webtype.com -weekly-economist.com -weeklytimesnow.com.au -weinvoiceit.com -weiyuksj.com -welcometobestbuy.ca -weltweitwachsen.de -wenzhao.ca -westerndigital.com -weverse.io -wfm.com -what-fan.net -whatbrowser.org -whatisairwatch.com -whatisworkspaceone.com -whatsapp-plus.info -whatsapp-plus.me -whatsapp-plus.net -whatsapp.cc -whatsapp.com -whatsapp.info -whatsapp.net -whatsapp.org -whatsapp.tv -whatsappbrand.com -whatthefox.com -wheelpop.com -wheelworks.net -whereilive.com.au -whimn.com.au -whisolutions.com -whispersystems.org -who.int -wholecitiesfoundation.org -wholefoods.com -wholefoodsmarket.co.uk -wholefoodsmarket.com -wholekidsfoundation.org -wholeplanetfoundation.org -wholesale-exporter1.com -wholesalediscountpurses.com -wholesalefine.com -wholesaleonlinemart.com -whonix.org -whosthehost.com -whychoosehorizon.com -whychooseview.com -whychoosevmwareeuc.com -whyfacebook.com -whyiwantciscotelepresence.com -widevine.com -widgets.stripst.com -wifi-mx.com -wii-u.com -wiifit.com -wiifitu.com -wiipartyu.com -wiisports.com -wiisportsresort.com -wiiugamepad.com -wiivc.net -wikia.com -wikia.nocookie.net -wikia.org -wikibooks.org -wikidata.org -wikidot.com -wikihow.com -wikileaks.org -wikimedia.org -wikimediacloud.org -wikimediafoundation.org -wikinews.org -wikipedia.org -wikiquote.org -wikisource.org -wikiversity.org -wikivoyage.org -wiktionary.org -wiley.com -wimpmusic.com -windows-int.net -windows.com -windows.net -windows.nl -windows8.hk -windowsazure.com -windowscommunity.net -windowsmarketplace.com -windowsphone-int.com -windowsphone.com -windowssearch.com -windowsuem.com -windowsupdate.com -windy.com -winhec.com -winhec.net -winticket.jp -winudf.com -wionews.com -wipower.com -wireguard.com -wireless.radio -wirelessgroup.co.uk -wirelessreach.com -wiremoneytoirelandwithxoomeasierandcheaper.com -wireshark.org -wise-research.com -wish.com -withgoogle.com -withyoutube.com -wix-code.com -wix.com -wixanswers.com -wixapps.net -wixmp.com -wixsite.com -wixstatic.com -wkap.nl -wmcloud.org -wmflabs.org -wmfusercontent.org -wmt.co -wofl.tv -woflthenewsstation.com -wogx.com -wolfatbestbuy.com -wolfatbestbuy.net -womensnikeshox.com -womenwill.com -womenwill.com.br -womenwill.id -womenwill.in -womenwill.mx -woolite.ca -woolite.com -woolite.pl -woolite.us -woolitecarpet.com -wordpress.com -wordpress.org -wordpress.tv -workers.dev -workplace.com -workplaceusecases.com -workspaceair.com -workspaceone.com -workstations.tv -worldcoinpay.com -worldcurrencycard.co.za -worldemojiawards.com -worldemojiday.com -worldflipper.akamaized.net -worldflipper.jp -worldhack.com -worldofwarcraft.com -worldsecureemail.com -worldsecuresystems.com -worldsfastestgamer.net -wp-themes.com -wp.com -wpewebkit.org -wpvip.com -wrenchead.com -wsj.com -wsj.jobs -wsj.net -wsjbarrons.com -wsjmediakit.com -wsjplus.com -wsjshop.com -wsjwine.com -wto.org -wuso.me -wwapple.net -wwe.com -wwe9.com -wwtbam.com -www-bestbuystores.com -www-cdn.icloud.com.akadns.net -www-facebook.com -www-paypal.info -www-paypal.us -www.sb -www8-hp.com -wwwapple.net -wwwapplemusic.com -wwwdecide.com -wwwebay.com -wwwebay.net -wwwfacebok.com -wwwfacebook.com -wwwhuluplus.com -wwwicloud.com -wwwinstagram.com -wwwipodlounge.com -wwwitunes.com -wwwmacbookair.com -wwwmfacebook.com -wwwpaypass.com -wwwwebay.com -wwwxoom.com -wzmyg.com -x-art.com -x.co -x.com -x.company -x.org -x.team -x1337x.eu -x1337x.se -x1337x.ws -x18r.com -x99av.com -xamarin.com -xandr.com -xbox.co -xbox.com -xbox.eu -xbox.org -xbox360.co -xbox360.com -xbox360.eu -xbox360.org -xboxab.com -xboxgamepass.com -xboxgamestudios.com -xboxlive.com -xboxone.co -xboxone.com -xboxone.eu -xboxplayanywhere.com -xboxstudios.com -xbx.lv -xda-cdn.com -xda-developers.com -xdsummit.com -xdty.org -xenoblade.com -xeon.com -xhamster.com -xhamsterlive.com -xhcdn.com -xindelu.com -xingrz.me -xlstudio.com -xn--3et96bj49ahpq.com -xn--4vq475g.com -xn--4vq477m.com -xn--6eup7j.com -xn--6eup7j.net -xn--74q035i.xn--hxt814e -xn--7hv594h.com -xn--90wwvt03e.com -xn--9kr7l.com -xn--9trs65b.com -xn--czrs0t4phtr3a.cn -xn--d1acpjx3f.xn--p1ai -xn--d4ty0ojsqzfd.com -xn--fiqs8sxootzz.cn -xn--fiqs8sxootzz.xn--hxt814e -xn--flw351e.com -xn--ggle-55da.com -xn--gogl-0nd52e.com -xn--gogl-1nd42e.com -xn--gtvq61aiijy0b.xn--hxt814e -xn--gtvz22d.wang -xn--gtvz22d.xn--hxt814e -xn--hb4aw0g.com -xn--hxtr4rozx.xn--czr694b -xn--kput3imi374g.xn--hxt814e -xn--mts47c3w9b1qr.net -xn--ngstr-lra8j.com -xn--p8j9a0d9c9a.xn--q9jyb4c -xn--pearsonenespaol-brb.com -xn--q41am8x.com -xn--qhrx81fxh2a.xn--55qx5d.hk -xn--qoq462m.com -xn--ruq8a011kt6y.xn--hxt814e -xn--tkry91n.com -xn--ubt498knmf.com -xn--xsq421m.com -xn--xsq605n.com -xn--xsq959n.com -xn--yf1at58a.com -xn--yt8h.la -xn--ztsq84g.cn -xnxx-cdn.com -xnxx.com -xo.com -xo104.com -xoom-experience.com -xoom.com -xoom.io -xoom.us -xoomcom.com -xplr.co -xposed.info -xsava.xyz -xscale.com -xtube.com -xuite.net -xvideos-cdn.com -xvideos.com -xxbay.com -ya.ru -yahoo-news.com.hk -yahoo.ae -yahoo.am -yahoo.as -yahoo.at -yahoo.az -yahoo.ba -yahoo.be -yahoo.bg -yahoo.bi -yahoo.bs -yahoo.bt -yahoo.by -yahoo.ca -yahoo.cat -yahoo.cd -yahoo.cg -yahoo.ch -yahoo.cl -yahoo.cm -yahoo.co.ao -yahoo.co.bw -yahoo.co.ck -yahoo.co.cr -yahoo.co.id -yahoo.co.il -yahoo.co.in -yahoo.co.jp -yahoo.co.kr -yahoo.co.mz -yahoo.co.nz -yahoo.co.th -yahoo.co.tz -yahoo.co.uk -yahoo.co.uz -yahoo.co.ve -yahoo.co.vi -yahoo.co.za -yahoo.com -yahoo.com.af -yahoo.com.ag -yahoo.com.ai -yahoo.com.ar -yahoo.com.au -yahoo.com.bd -yahoo.com.bo -yahoo.com.br -yahoo.com.bz -yahoo.com.co -yahoo.com.do -yahoo.com.ec -yahoo.com.eg -yahoo.com.es -yahoo.com.fj -yahoo.com.gi -yahoo.com.gt -yahoo.com.hk -yahoo.com.kw -yahoo.com.lb -yahoo.com.ly -yahoo.com.mt -yahoo.com.mx -yahoo.com.my -yahoo.com.na -yahoo.com.nf -yahoo.com.om -yahoo.com.pa -yahoo.com.pe -yahoo.com.ph -yahoo.com.pk -yahoo.com.pr -yahoo.com.py -yahoo.com.sa -yahoo.com.sb -yahoo.com.sg -yahoo.com.sv -yahoo.com.tj -yahoo.com.tr -yahoo.com.tw -yahoo.com.ua -yahoo.com.uy -yahoo.com.vc -yahoo.com.vn -yahoo.cz -yahoo.de -yahoo.dj -yahoo.dk -yahoo.dm -yahoo.ee -yahoo.es -yahoo.fi -yahoo.fm -yahoo.fr -yahoo.ge -yahoo.gg -yahoo.gl -yahoo.gm -yahoo.gp -yahoo.gr -yahoo.gy -yahoo.hk -yahoo.hr -yahoo.hu -yahoo.ie -yahoo.im -yahoo.in -yahoo.is -yahoo.it -yahoo.je -yahoo.jo -yahoo.la -yahoo.lt -yahoo.lu -yahoo.lv -yahoo.md -yahoo.me -yahoo.mk -yahoo.mw -yahoo.mx -yahoo.net -yahoo.nl -yahoo.no -yahoo.nu -yahoo.ph -yahoo.pl -yahoo.pn -yahoo.ps -yahoo.pt -yahoo.ro -yahoo.ru -yahoo.rw -yahoo.se -yahoo.sg -yahoo.sh -yahoo.si -yahoo.sk -yahoo.sm -yahoo.sn -yahoo.so -yahoo.sr -yahoo.st -yahoo.tg -yahoo.tk -yahoo.tl -yahoo.tm -yahoo.tn -yahoo.vg -yahoo.ws -yahooapis.com -yahoodns.net -yahoofinance.com -yahoohealth.com -yahoomusic.com -yahoosportsbook.com -yale.edu -yamaxun.com -yammer.com -yande.re -yandex.aero -yandex.az -yandex.by -yandex.co.il -yandex.com -yandex.com.am -yandex.com.ge -yandex.com.ru -yandex.com.tr -yandex.com.ua -yandex.de -yandex.ee -yandex.eu -yandex.fi -yandex.fr -yandex.jobs -yandex.kg -yandex.kz -yandex.lt -yandex.lv -yandex.md -yandex.net -yandex.org -yandex.pl -yandex.ru -yandex.st -yandex.sx -yandex.tj -yandex.tm -yandex.ua -yandex.uz -yandexcloud.net -yarininsuyu.com -yarnpkg.com -yastatic.net -ycombinator.com -ydn.com.tw -yes123.com.tw -yho.com -yibei.org -yimg.com -yimg.jp -yjcontentdelivery.com -ymail.com -ync.ne.jp -yo1health.com -yogalayout.com -yogify.com -yomikyo.or.jp -yomilogi.com -yomiuri-johkai.co.jp -yomiuri-ryokou.co.jp -yomiuri-shimbun.pressreader.com -yomiuri-systec.co.jp -yomiuri.co.jp -yoshisnewisland.com -youav.com -youjizz.com -youlucky.com -youporn.com -yourfantasybeginsnow.com -yourmonsterbeats.com -yours-customised.mini.com -yourtv.com.au -youtu.be -youtube-nocookie.com -youtube-ui.l.google.com -youtube.ae -youtube.al -youtube.am -youtube.at -youtube.az -youtube.ba -youtube.be -youtube.bg -youtube.bh -youtube.bo -youtube.by -youtube.ca -youtube.cat -youtube.ch -youtube.cl -youtube.co -youtube.co.ae -youtube.co.at -youtube.co.cr -youtube.co.hu -youtube.co.id -youtube.co.il -youtube.co.in -youtube.co.jp -youtube.co.ke -youtube.co.kr -youtube.co.ma -youtube.co.nz -youtube.co.th -youtube.co.tz -youtube.co.ug -youtube.co.uk -youtube.co.ve -youtube.co.za -youtube.co.zw -youtube.com -youtube.com.ar -youtube.com.au -youtube.com.az -youtube.com.bd -youtube.com.bh -youtube.com.bo -youtube.com.br -youtube.com.by -youtube.com.co -youtube.com.do -youtube.com.ec -youtube.com.ee -youtube.com.eg -youtube.com.es -youtube.com.gh -youtube.com.gr -youtube.com.gt -youtube.com.hk -youtube.com.hn -youtube.com.hr -youtube.com.jm -youtube.com.jo -youtube.com.kw -youtube.com.lb -youtube.com.lv -youtube.com.ly -youtube.com.mk -youtube.com.mt -youtube.com.mx -youtube.com.my -youtube.com.ng -youtube.com.ni -youtube.com.om -youtube.com.pa -youtube.com.pe -youtube.com.ph -youtube.com.pk -youtube.com.pt -youtube.com.py -youtube.com.qa -youtube.com.ro -youtube.com.sa -youtube.com.sg -youtube.com.sv -youtube.com.tn -youtube.com.tr -youtube.com.tw -youtube.com.ua -youtube.com.uy -youtube.com.ve -youtube.cr -youtube.cz -youtube.de -youtube.dk -youtube.ee -youtube.es -youtube.fi -youtube.fr -youtube.ge -youtube.googleapis.com -youtube.gr -youtube.gt -youtube.hk -youtube.hr -youtube.hu -youtube.ie -youtube.in -youtube.iq -youtube.is -youtube.it -youtube.jo -youtube.jp -youtube.kr -youtube.kz -youtube.la -youtube.lk -youtube.lt -youtube.lu -youtube.lv -youtube.ly -youtube.ma -youtube.md -youtube.me -youtube.mk -youtube.mn -youtube.mx -youtube.my -youtube.ng -youtube.ni -youtube.nl -youtube.no -youtube.pa -youtube.pe -youtube.ph -youtube.pk -youtube.pl -youtube.pr -youtube.pt -youtube.qa -youtube.ro -youtube.rs -youtube.ru -youtube.sa -youtube.se -youtube.sg -youtube.si -youtube.sk -youtube.sn -youtube.soy -youtube.sv -youtube.tn -youtube.tv -youtube.ua -youtube.ug -youtube.uy -youtube.vn -youtubecisco.com -youtubeeducation.com -youtubeembeddedplayer.googleapis.com -youtubefanfest.com -youtubegaming.com -youtubego.co.id -youtubego.co.in -youtubego.com -youtubego.com.br -youtubego.id -youtubego.in -youtubei.googleapis.com -youtubekids.com -youtubemobilesupport.com -ysm.yahoo.com -yt.be -ytimg.com -yzzk.com -z5.app -z5.com -zakzak.co.jp -zaobao.com -zaobao.com.sg -zaobao.sg -zavat.pw -zb.app -zb.com -zb.io -zb.live -zdassets.com -zdusercontent.com -zee.com -zee5.com -zee5.in -zee5.tv -zeebioskop.com -zeebiz.com -zeeentertainment.com -zeenews-fonts.s3.amazonaws.com -zeenews.com -zeetv.co.uk -zeetv.com -zeeuk.com -zeit-world.co.uk -zeit-world.com -zeit-world.net -zeit-world.org -zeit.co -zeit.sh -zeitworld.com -zencdn.net -zencoder.com -zendesk.com -zenodo.org -zeplin.dev -zeplin.io -zeriamerikes.com -zerohedge.com -zeronet.io -zert.ch -zind.cloud -zndsk.com -zoho.com -zoho.com.au -zoho.eu -zoho.in -zohocdn.com -zohomeetups.com -zohomerchandise.com -zohopublic.com -zohoschools.com -zohostatic.com -zohostatic.in -zohouniversity.com -zohowebstatic.com -zoom.com -zoom.com.cn -zoom.us -zoomingin.tv -zopim.com -zsh.org -zuckerberg.com -zuckerberg.net -zukunftswerkstatt.de -zwtvusa.com diff --git a/luci-app-passwall/root/usr/share/passwall/rules/lanlist_ipv4 b/luci-app-passwall/root/usr/share/passwall/rules/lanlist_ipv4 deleted file mode 100644 index 3ccfd604..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/lanlist_ipv4 +++ /dev/null @@ -1,9 +0,0 @@ -0.0.0.0/8 -10.0.0.0/8 -100.64.0.0/10 -127.0.0.0/8 -169.254.0.0/16 -172.16.0.0/12 -192.168.0.0/16 -224.0.0.0/4 -240.0.0.0/4 \ No newline at end of file diff --git a/luci-app-passwall/root/usr/share/passwall/rules/lanlist_ipv6 b/luci-app-passwall/root/usr/share/passwall/rules/lanlist_ipv6 deleted file mode 100644 index 6ac03da5..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/lanlist_ipv6 +++ /dev/null @@ -1,13 +0,0 @@ -::/128 -::1/128 -::ffff:0:0/96 -::ffff:0:0:0/96 -64:ff9b::/96 -100::/64 -2001::/32 -2001:20::/28 -2001:db8::/32 -2002::/16 -fc00::/7 -fe80::/10 -ff00::/8 \ No newline at end of file diff --git a/luci-app-passwall/root/usr/share/passwall/rules/proxy_host b/luci-app-passwall/root/usr/share/passwall/rules/proxy_host deleted file mode 100644 index fc64a1a0..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/proxy_host +++ /dev/null @@ -1,14 +0,0 @@ -bing.com -sspanel.net -v2ex.com - -#google -googleapis.cn -googleapis.com -google.com.tw -google.com.hk -gstatic.com -xn--ngstr-lra8j.com - -#github -github.com diff --git a/luci-app-passwall/root/usr/share/passwall/rules/proxy_ip b/luci-app-passwall/root/usr/share/passwall/rules/proxy_ip deleted file mode 100644 index 39be0de2..00000000 --- a/luci-app-passwall/root/usr/share/passwall/rules/proxy_ip +++ /dev/null @@ -1,19 +0,0 @@ -149.154.160.0/20 -91.108.4.0/22 -91.108.56.0/24 -109.239.140.0/24 -67.198.55.0/24 -8.8.4.4 -8.8.8.8 -208.67.222.222 -208.67.220.220 -1.1.1.1 -1.1.1.2 -1.0.0.1 -9.9.9.9 -149.112.112.112 -2001:67c:4e8::/48 -2001:b28:f23c::/48 -2001:b28:f23d::/48 -2001:b28:f23f::/48 -2001:b28:f242::/48 \ No newline at end of file diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua deleted file mode 100755 index bf4d15c7..00000000 --- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ /dev/null @@ -1,1199 +0,0 @@ -#!/usr/bin/lua - ------------------------------------------------- --- @author William Chan ------------------------------------------------- -require 'nixio' -require 'luci.model.uci' -require 'luci.util' -require 'luci.jsonc' -require 'luci.sys' -local appname = 'passwall' -local api = require ("luci.model.cbi." .. appname .. ".api.api") -local datatypes = require "luci.cbi.datatypes" - --- these global functions are accessed all the time by the event handler --- so caching them is worth the effort -local tinsert = table.insert -local ssub, slen, schar, sbyte, sformat, sgsub = string.sub, string.len, string.char, string.byte, string.format, string.gsub -local jsonParse, jsonStringify = luci.jsonc.parse, luci.jsonc.stringify -local b64decode = nixio.bin.b64decode -local uci = luci.model.uci.cursor() -uci:revert(appname) - -local has_ss = api.is_finded("ss-redir") -local has_ss_rust = api.is_finded("sslocal") -local has_trojan_plus = api.is_finded("trojan-plus") -local has_v2ray = api.is_finded("v2ray") -local has_xray = api.is_finded("xray") -local has_trojan_go = api.is_finded("trojan-go") -local allowInsecure_default = true -local ss_aead_type_default = uci:get(appname, "@global_subscribe[0]", "ss_aead_type") or "shadowsocks-libev" -local trojan_type_default = uci:get(appname, "@global_subscribe[0]", "trojan_type") or "trojan-plus" --- 判断是否过滤节点关键字 -local filter_keyword_mode_default = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0" -local filter_keyword_discard_list_default = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {} -local filter_keyword_keep_list_default = uci:get(appname, "@global_subscribe[0]", "filter_keep_list") or {} -local function is_filter_keyword(value) - if filter_keyword_mode_default == "1" then - for k,v in ipairs(filter_keyword_discard_list_default) do - if value:find(v, 1, true) then - return true - end - end - elseif filter_keyword_mode_default == "2" then - local result = true - for k,v in ipairs(filter_keyword_keep_list_default) do - if value:find(v, 1, true) then - result = false - end - end - return result - elseif filter_keyword_mode_default == "3" then - local result = false - for k,v in ipairs(filter_keyword_discard_list_default) do - if value:find(v, 1, true) then - result = true - end - end - for k,v in ipairs(filter_keyword_keep_list_default) do - if value:find(v, 1, true) then - result = false - end - end - return result - elseif filter_keyword_mode_default == "4" then - local result = true - for k,v in ipairs(filter_keyword_keep_list_default) do - if value:find(v, 1, true) then - result = false - end - end - for k,v in ipairs(filter_keyword_discard_list_default) do - if value:find(v, 1, true) then - result = true - end - end - return result - end - return false -end - -local nodeResult = {} -- update result -local debug = false - -local ss_rust_encrypt_method_list = { - "aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305" -} - -local log = function(...) - local result = os.date("%Y-%m-%d %H:%M:%S: ") .. table.concat({...}, " ") - if debug == true then - print(result) - else - local f, err = io.open("/tmp/log/" .. appname .. ".log", "a") - if f and err == nil then - f:write(result .. "\n") - f:close() - end - end -end - --- 获取各项动态配置的当前服务器,可以用 get 和 set, get必须要获取到节点表 -local CONFIG = {} -do - local function import_config(protocol) - local name = string.upper(protocol) - local szType = "@global[0]" - local option = protocol .. "_node" - - local node_id = uci:get(appname, szType, option) - CONFIG[#CONFIG + 1] = { - log = true, - remarks = name .. "节点", - currentNode = node_id and uci:get_all(appname, node_id) or nil, - set = function(o, server) - uci:set(appname, szType, option, server) - o.newNodeId = server - end - } - end - import_config("tcp") - import_config("udp") - - if true then - local i = 0 - local option = "node" - uci:foreach(appname, "socks", function(t) - i = i + 1 - local node_id = t[option] - CONFIG[#CONFIG + 1] = { - log = true, - id = t[".name"], - remarks = "Socks节点列表[" .. i .. "]", - currentNode = node_id and uci:get_all(appname, node_id) or nil, - set = function(o, server) - uci:set(appname, t[".name"], option, server) - o.newNodeId = server - end - } - end) - end - - if true then - local i = 0 - local option = "lbss" - uci:foreach(appname, "haproxy_config", function(t) - i = i + 1 - local node_id = t[option] - CONFIG[#CONFIG + 1] = { - log = true, - id = t[".name"], - remarks = "HAProxy负载均衡节点列表[" .. i .. "]", - currentNode = node_id and uci:get_all(appname, node_id) or nil, - set = function(o, server) - uci:set(appname, t[".name"], option, server) - o.newNodeId = server - end - } - end) - end - - if true then - local i = 0 - local options = {"tcp", "udp"} - uci:foreach(appname, "acl_rule", function(t) - i = i + 1 - for index, value in ipairs(options) do - local option = value .. "_node" - local node_id = t[option] - CONFIG[#CONFIG + 1] = { - log = true, - id = t[".name"], - remarks = "访问控制列表[" .. i .. "]", - currentNode = node_id and uci:get_all(appname, node_id) or nil, - set = function(o, server) - uci:set(appname, t[".name"], option, server) - o.newNodeId = server - end - } - end - end) - end - - local tcp_node_table = uci:get(appname, "@auto_switch[0]", "tcp_node") - if tcp_node_table then - local nodes = {} - local new_nodes = {} - for k,node_id in ipairs(tcp_node_table) do - if node_id then - local currentNode = uci:get_all(appname, node_id) or nil - if currentNode then - if currentNode.protocol and (currentNode.protocol == "_balancing" or currentNode.protocol == "_shunt") then - currentNode = nil - end - nodes[#nodes + 1] = { - log = true, - remarks = "TCP备用节点的列表[" .. k .. "]", - currentNode = currentNode, - set = function(o, server) - for kk, vv in pairs(CONFIG) do - if (vv.remarks == "TCP备用节点的列表") then - table.insert(vv.new_nodes, server) - end - end - end - } - end - end - end - CONFIG[#CONFIG + 1] = { - remarks = "TCP备用节点的列表", - nodes = nodes, - new_nodes = new_nodes, - set = function(o) - for kk, vv in pairs(CONFIG) do - if (vv.remarks == "TCP备用节点的列表") then - --log("刷新自动切换的TCP备用节点的列表") - uci:set_list(appname, "@auto_switch[0]", "tcp_node", vv.new_nodes) - end - end - end - } - end - - uci:foreach(appname, "nodes", function(node) - if node.protocol and node.protocol == '_shunt' then - local node_id = node[".name"] - - local rules = {} - uci:foreach(appname, "shunt_rules", function(e) - table.insert(rules, e) - end) - table.insert(rules, { - [".name"] = "default_node", - remarks = "默认" - }) - table.insert(rules, { - [".name"] = "main_node", - remarks = "默认前置" - }) - - for k, e in pairs(rules) do - local _node_id = node[e[".name"]] or nil - CONFIG[#CONFIG + 1] = { - log = false, - currentNode = _node_id and uci:get_all(appname, _node_id) or nil, - remarks = "分流" .. e.remarks .. "节点", - set = function(o, server) - uci:set(appname, node_id, e[".name"], server) - o.newNodeId = server - end - } - end - elseif node.protocol and node.protocol == '_balancing' then - local node_id = node[".name"] - local nodes = {} - local new_nodes = {} - if node.balancing_node then - for k, node in pairs(node.balancing_node) do - nodes[#nodes + 1] = { - log = false, - node = node, - currentNode = node and uci:get_all(appname, node) or nil, - remarks = node, - set = function(o, server) - for kk, vv in pairs(CONFIG) do - if (vv.remarks == "负载均衡节点列表" .. node_id) then - table.insert(vv.new_nodes, server) - end - end - end - } - end - end - CONFIG[#CONFIG + 1] = { - remarks = "负载均衡节点列表" .. node_id, - nodes = nodes, - new_nodes = new_nodes, - set = function(o) - for kk, vv in pairs(CONFIG) do - if (vv.remarks == "负载均衡节点列表" .. node_id) then - --log("刷新负载均衡节点列表") - uci:foreach(appname, "nodes", function(node2) - if node2[".name"] == node[".name"] then - local index = node2[".index"] - uci:set_list(appname, "@nodes[" .. index .. "]", "balancing_node", vv.new_nodes) - end - end) - end - end - end - } - end - end) - - for k, v in pairs(CONFIG) do - if v.nodes and type(v.nodes) == "table" then - for kk, vv in pairs(v.nodes) do - if vv.currentNode == nil then - CONFIG[k].nodes[kk] = nil - end - end - else - if v.currentNode == nil then - CONFIG[k] = nil - end - end - end -end - --- 分割字符串 -local function split(full, sep) - if full then - full = full:gsub("%z", "") -- 这里不是很清楚 有时候结尾带个\0 - local off, result = 1, {} - while true do - local nStart, nEnd = full:find(sep, off) - if not nEnd then - local res = ssub(full, off, slen(full)) - if #res > 0 then -- 过滤掉 \0 - tinsert(result, res) - end - break - else - tinsert(result, ssub(full, off, nStart - 1)) - off = nEnd + 1 - end - end - return result - end - return {} -end --- urlencode --- local function get_urlencode(c) return sformat("%%%02X", sbyte(c)) end - --- local function urlEncode(szText) --- local str = szText:gsub("([^0-9a-zA-Z ])", get_urlencode) --- str = str:gsub(" ", "+") --- return str --- end - -local function get_urldecode(h) return schar(tonumber(h, 16)) end -local function UrlDecode(szText) - return (szText and szText:gsub("+", " "):gsub("%%(%x%x)", get_urldecode)) or nil -end - --- trim -local function trim(text) - if not text or text == "" then return "" end - return (sgsub(text, "^%s*(.-)%s*$", "%1")) -end - --- base64 -local function base64Decode(text) - local raw = text - if not text then return '' end - text = text:gsub("%z", "") - text = text:gsub("_", "/") - text = text:gsub("-", "+") - local mod4 = #text % 4 - text = text .. string.sub('====', mod4 + 1) - local result = b64decode(text) - if result then - return result:gsub("%z", "") - else - return raw - end -end --- 处理数据 -local function processData(szType, content, add_mode, add_from) - --log(content, add_mode, add_from) - local result = { - timeout = 60, - add_mode = add_mode, --0为手动配置,1为导入,2为订阅 - add_from = add_from - } - if szType == 'ssr' then - local dat = split(content, "/%?") - local hostInfo = split(dat[1], ':') - result.type = "SSR" - result.address = hostInfo[1] - result.port = hostInfo[2] - result.protocol = hostInfo[3] - result.method = hostInfo[4] - result.obfs = hostInfo[5] - result.password = base64Decode(hostInfo[6]) - local params = {} - for _, v in pairs(split(dat[2], '&')) do - local t = split(v, '=') - params[t[1]] = t[2] - end - result.obfs_param = base64Decode(params.obfsparam) - result.protocol_param = base64Decode(params.protoparam) - local group = base64Decode(params.group) - if group then result.group = group end - result.remarks = base64Decode(params.remarks) - elseif szType == 'vmess' then - local info = jsonParse(content) - if has_v2ray then - result.type = 'V2ray' - elseif has_xray then - result.type = 'Xray' - end - result.address = info.add - result.port = info.port - result.protocol = 'vmess' - result.uuid = info.id - result.remarks = info.ps - -- result.mux = 1 - -- result.mux_concurrency = 8 - info.net = string.lower(info.net) - if info.net == 'ws' then - result.ws_host = info.host - result.ws_path = info.path - end - if info.net == 'h2' then - result.h2_host = info.host - result.h2_path = info.path - end - if info.net == 'tcp' then - if info.type and info.type ~= "http" then - info.type = "none" - end - result.tcp_guise = info.type - result.tcp_guise_http_host = info.host - result.tcp_guise_http_path = info.path - end - if info.net == 'kcp' or info.net == 'mkcp' then - info.net = "mkcp" - result.mkcp_guise = info.type - result.mkcp_mtu = 1350 - result.mkcp_tti = 50 - result.mkcp_uplinkCapacity = 5 - result.mkcp_downlinkCapacity = 20 - result.mkcp_readBufferSize = 2 - result.mkcp_writeBufferSize = 2 - end - if info.net == 'quic' then - result.quic_guise = info.type - result.quic_key = info.key - result.quic_security = info.securty - end - if info.net == 'grpc' then - result.grpc_serviceName = info.path - end - result.transport = info.net - if not info.security then result.security = "auto" end - if info.tls == "tls" or info.tls == "1" then - result.tls = "1" - result.tls_serverName = (info.sni and info.sni ~= "") and info.sni or info.host - result.tls_allowInsecure = allowInsecure_default and "1" or "0" - else - result.tls = "0" - end - elseif szType == "ss" then - local idx_sp = 0 - local alias = "" - if content:find("#") then - idx_sp = content:find("#") - alias = content:sub(idx_sp + 1, -1) - end - result.remarks = UrlDecode(alias) - local info = content:sub(1, idx_sp - 1) - local hostInfo = split(base64Decode(info), "@") - local hostInfoLen = #hostInfo - local host = nil - local userinfo = nil - if hostInfoLen > 2 then - host = split(hostInfo[hostInfoLen], ":") - userinfo = {} - for i = 1, hostInfoLen - 1 do - tinsert(userinfo, hostInfo[i]) - end - userinfo = table.concat(userinfo, '@') - else - host = split(hostInfo[2], ":") - userinfo = base64Decode(hostInfo[1]) - end - local method = userinfo:sub(1, userinfo:find(":") - 1) - local password = userinfo:sub(userinfo:find(":") + 1, #userinfo) - result.type = "SS" - result.address = host[1] - if host[2] and host[2]:find("/%?") then - local query = split(host[2], "/%?") - result.port = query[1] - local params = {} - for _, v in pairs(split(query[2], '&')) do - local t = split(v, '=') - params[t[1]] = t[2] - end - if params.plugin then - local plugin_info = UrlDecode(params.plugin) - local idx_pn = plugin_info:find(";") - if idx_pn then - result.plugin = plugin_info:sub(1, idx_pn - 1) - result.plugin_opts = - plugin_info:sub(idx_pn + 1, #plugin_info) - else - result.plugin = plugin_info - end - end - if result.plugin and result.plugin == "simple-obfs" then - result.plugin = "obfs-local" - end - else - result.port = host[2] - end - result.method = method - result.password = password - - local flag = false - for k, v in ipairs(ss_rust_encrypt_method_list) do - if method:upper() == v:upper() then - flag = true - end - end - if flag then - if ss_aead_type_default == "shadowsocks-libev" and has_ss then - result.type = "SS" - elseif ss_aead_type_default == "shadowsocks-rust" and has_ss_rust then - result.type = 'SS-Rust' - elseif ss_aead_type_default == "v2ray" and has_v2ray and not result.plugin then - result.type = 'V2ray' - result.protocol = 'shadowsocks' - result.transport = 'tcp' - elseif ss_aead_type_default == "xray" and has_xray and not result.plugin then - result.type = 'Xray' - result.protocol = 'shadowsocks' - result.transport = 'tcp' - end - end - elseif szType == "trojan" then - local alias = "" - if content:find("#") then - local idx_sp = content:find("#") - alias = content:sub(idx_sp + 1, -1) - content = content:sub(0, idx_sp - 1) - end - result.remarks = UrlDecode(alias) - result.type = "Trojan-Plus" - if content:find("@") then - local Info = split(content, "@") - result.password = UrlDecode(Info[1]) - local port = "443" - Info[2] = (Info[2] or ""):gsub("/%?", "?") - local hostInfo = nil - if Info[2]:find(":") then - hostInfo = split(Info[2], ":") - result.address = hostInfo[1] - local idx_port = 2 - if hostInfo[2]:find("?") then - hostInfo = split(hostInfo[2], "?") - idx_port = 1 - end - if hostInfo[idx_port] ~= "" then port = hostInfo[idx_port] end - else - if Info[2]:find("?") then - hostInfo = split(Info[2], "?") - end - result.address = hostInfo and hostInfo[1] or Info[2] - end - local peer, sni = nil, "" - local allowInsecure = allowInsecure_default - local query = split(Info[2], "?") - local params = {} - for _, v in pairs(split(query[2], '&')) do - local t = split(v, '=') - params[string.lower(t[1])] = UrlDecode(t[2]) - end - if params.allowinsecure then - allowInsecure = params.allowinsecure - end - if params.peer then peer = params.peer end - sni = params.sni and params.sni or "" - if params.ws and params.ws == "1" then - result.trojan_transport = "ws" - if params.wshost then result.ws_host = params.wshost end - if params.wspath then result.ws_path = params.wspath end - if sni == "" and params.wshost then sni = params.wshost end - end - if params.ss and params.ss == "1" then - result.ss_aead = "1" - if params.ssmethod then result.ss_aead_method = string.lower(params.ssmethod) end - if params.sspasswd then result.ss_aead_pwd = params.sspasswd end - end - result.port = port - if result.trojan_transport == "ws" or result.ss_aead then - result.type = "Trojan-Go" - result.fingerprint = "firefox" - result.mux = "1" - end - result.tls = '1' - result.tls_serverName = peer and peer or sni - result.tls_allowInsecure = allowInsecure and "1" or "0" - end - if trojan_type_default == "trojan-plus" and has_trojan_plus then - result.type = "Trojan-Plus" - elseif trojan_type_default == "v2ray" and has_v2ray then - result.type = 'V2ray' - result.protocol = 'trojan' - elseif trojan_type_default == "xray" and has_xray then - result.type = 'Xray' - result.protocol = 'trojan' - elseif trojan_type_default == "trojan-go" and has_trojan_go then - result.type = 'Trojan-Go' - end - elseif szType == "trojan-go" then - local alias = "" - if content:find("#") then - local idx_sp = content:find("#") - alias = content:sub(idx_sp + 1, -1) - content = content:sub(0, idx_sp - 1) - end - result.remarks = UrlDecode(alias) - if has_trojan_go then - result.type = "Trojan-Go" - end - if content:find("@") then - local Info = split(content, "@") - result.password = UrlDecode(Info[1]) - local port = "443" - Info[2] = (Info[2] or ""):gsub("/%?", "?") - local hostInfo = nil - if Info[2]:find(":") then - hostInfo = split(Info[2], ":") - result.address = hostInfo[1] - local idx_port = 2 - if hostInfo[2]:find("?") then - hostInfo = split(hostInfo[2], "?") - idx_port = 1 - end - if hostInfo[idx_port] ~= "" then port = hostInfo[idx_port] end - else - if Info[2]:find("?") then - hostInfo = split(Info[2], "?") - end - result.address = hostInfo and hostInfo[1] or Info[2] - end - local peer, sni = nil, "" - local query = split(Info[2], "?") - local params = {} - for _, v in pairs(split(query[2], '&')) do - local t = split(v, '=') - params[string.lower(t[1])] = UrlDecode(t[2]) - end - if params.peer then peer = params.peer end - sni = params.sni and params.sni or "" - if params.type and params.type == "ws" then - result.trojan_transport = "ws" - if params.host then result.ws_host = params.host end - if params.path then result.ws_path = params.path end - if sni == "" and params.host then sni = params.host end - end - if params.encryption and params.encryption:match('^ss;[^;:]*[;:].*$') then - result.ss_aead = "1" - result.ss_aead_method, result.ss_aead_pwd = params.encryption:match('^ss;([^;:]*)[;:](.*)$') - result.ss_aead_method = string.lower(result.ss_aead_method) - end - result.port = port - result.fingerprint = "firefox" - result.tls = "1" - result.tls_serverName = peer and peer or sni - result.tls_allowInsecure = "0" - result.mux = "1" - end - elseif szType == "ssd" then - result.type = "SS" - result.address = content.server - result.port = content.port - result.password = content.password - result.method = content.encryption - result.plugin = content.plugin - result.plugin_opts = content.plugin_options - result.group = content.airport - result.remarks = content.remarks - elseif szType == "vless" then - if has_xray then - result.type = 'Xray' - elseif has_v2ray then - result.type = 'V2ray' - end - result.protocol = "vless" - local alias = "" - if content:find("#") then - local idx_sp = content:find("#") - alias = content:sub(idx_sp + 1, -1) - content = content:sub(0, idx_sp - 1) - end - result.remarks = UrlDecode(alias) - if content:find("@") then - local Info = split(content, "@") - result.uuid = UrlDecode(Info[1]) - local port = "443" - Info[2] = (Info[2] or ""):gsub("/%?", "?") - local hostInfo = nil - if Info[2]:find(":") then - hostInfo = split(Info[2], ":") - result.address = hostInfo[1] - local idx_port = 2 - if hostInfo[2]:find("?") then - hostInfo = split(hostInfo[2], "?") - idx_port = 1 - end - if hostInfo[idx_port] ~= "" then port = hostInfo[idx_port] end - else - if Info[2]:find("?") then - hostInfo = split(Info[2], "?") - end - result.address = hostInfo and hostInfo[1] or Info[2] - end - - local query = split(Info[2], "?") - local params = {} - for _, v in pairs(split(query[2], '&')) do - local t = split(v, '=') - params[t[1]] = UrlDecode(t[2]) - end - - params.type = string.lower(params.type) - if params.type == 'ws' then - result.ws_host = params.host - result.ws_path = params.path - end - if params.type == 'h2' then - result.h2_host = params.host - result.h2_path = params.path - end - if params.type == 'tcp' then - result.tcp_guise = params.headerType or "none" - result.tcp_guise_http_host = params.host - result.tcp_guise_http_path = params.path - end - if params.type == 'kcp' or params.type == 'mkcp' then - params.type = "mkcp" - result.mkcp_guise = params.headerType or "none" - result.mkcp_mtu = 1350 - result.mkcp_tti = 50 - result.mkcp_uplinkCapacity = 5 - result.mkcp_downlinkCapacity = 20 - result.mkcp_readBufferSize = 2 - result.mkcp_writeBufferSize = 2 - end - if params.type == 'quic' then - result.quic_guise = params.headerType or "none" - result.quic_key = params.key - result.quic_security = params.quicSecurity or "none" - end - if params.type == 'grpc' then - if params.path then result.grpc_serviceName = params.path end - if params.serviceName then result.grpc_serviceName = params.serviceName end - end - result.transport = params.type - - result.encryption = params.encryption or "none" - - result.tls = "0" - if params.security == "tls" or params.security == "xtls" then - result.tls = "1" - if params.security == "xtls" then - result.xtls = "1" - result.flow = params.flow or "xtls-rprx-direct" - end - result.tls_serverName = (params.sni and params.sni ~= "") and params.sni or params.host - end - - result.port = port - result.tls_allowInsecure = allowInsecure_default and "1" or "0" - end - else - log('暂时不支持' .. szType .. "类型的节点订阅,跳过此节点。") - return nil - end - if not result.remarks or result.remarks == "" then - if result.address and result.port then - result.remarks = result.address .. ':' .. result.port - else - result.remarks = "NULL" - end - end - return result -end - --- curl -local function curl(url, file, ua) - if not ua or ua == "" then - ua = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36" - end - local stdout = "" - local cmd = string.format('curl -skL --user-agent "%s" --retry 3 --connect-timeout 3 "%s"', ua, url) - if file then - cmd = cmd .. " -o " .. file - stdout = luci.sys.call(cmd .. " > /dev/null") - return stdout - else - stdout = luci.sys.exec(cmd) - return trim(stdout) - end - - if not stdout or #stdout <= 0 then - if uci:get(appname, "@global_subscribe[0]", "subscribe_proxy") or "0" == "1" and uci:get(appname, "@global[0]", "enabled") or "0" == "1" then - log('通过代理订阅失败,尝试关闭代理订阅。') - luci.sys.call("/etc/init.d/" .. appname .. " stop > /dev/null") - stdout = luci.sys.exec(string.format('curl -skL --user-agent "%s" -k --retry 3 --connect-timeout 3 "%s"', ua, url)) - end - end - return trim(stdout) -end - -local function truncate_nodes(add_from) - for _, config in pairs(CONFIG) do - if config.nodes and type(config.nodes) == "table" then - for kk, vv in pairs(config.nodes) do - if vv.currentNode.add_mode == "2" then - else - vv.set(vv, vv.currentNode[".name"]) - end - end - config.set(config) - else - if config.currentNode.add_mode == "2" then - if add_from then - if config.currentNode.add_from and config.currentNode.add_from == add_from then - config.set(config, "nil") - end - else - config.set(config, "nil") - end - if config.id then - uci:delete(appname, config.id) - end - end - end - end - uci:foreach(appname, "nodes", function(node) - if node.add_mode == "2" then - if add_from then - if node.add_from and node.add_from == add_from then - uci:delete(appname, node['.name']) - end - else - uci:delete(appname, node['.name']) - end - end - end) - uci:commit(appname) -end - -local function select_node(nodes, config) - local server - if config.currentNode then - -- 特别优先级 分流 + 备注 - if config.currentNode.protocol and config.currentNode.protocol == '_shunt' then - for index, node in pairs(nodes) do - if node.remarks == config.currentNode.remarks then - log('更新【' .. config.remarks .. '】分流匹配节点:' .. node.remarks) - server = node[".name"] - break - end - end - end - -- 特别优先级 负载均衡 + 备注 - if config.currentNode.protocol and config.currentNode.protocol == '_balancing' then - for index, node in pairs(nodes) do - if node.remarks == config.currentNode.remarks then - log('更新【' .. config.remarks .. '】负载均衡匹配节点:' .. node.remarks) - server = node[".name"] - break - end - end - end - -- 第一优先级 类型 + IP + 端口 - if not server then - for index, node in pairs(nodes) do - if config.currentNode.type and config.currentNode.address and config.currentNode.port then - if node.type and node.address and node.port then - if node.type == config.currentNode.type and (node.address .. ':' .. node.port == config.currentNode.address .. ':' .. config.currentNode.port) then - if config.log == nil or config.log == true then - log('更新【' .. config.remarks .. '】第一匹配节点:' .. node.remarks) - end - server = node[".name"] - break - end - end - end - end - end - -- 第二优先级 IP + 端口 - if not server then - for index, node in pairs(nodes) do - if config.currentNode.address and config.currentNode.port then - if node.address and node.port then - if node.address .. ':' .. node.port == config.currentNode.address .. ':' .. config.currentNode.port then - if config.log == nil or config.log == true then - log('更新【' .. config.remarks .. '】第二匹配节点:' .. node.remarks) - end - server = node[".name"] - break - end - end - end - end - end - -- 第三优先级 IP - if not server then - for index, node in pairs(nodes) do - if config.currentNode.address then - if node.address then - if node.address == config.currentNode.address then - if config.log == nil or config.log == true then - log('更新【' .. config.remarks .. '】第三匹配节点:' .. node.remarks) - end - server = node[".name"] - break - end - end - end - end - end - -- 第四优先级备注 - if not server then - for index, node in pairs(nodes) do - if config.currentNode.remarks then - if node.remarks then - if node.remarks == config.currentNode.remarks then - if config.log == nil or config.log == true then - log('更新【' .. config.remarks .. '】第四匹配节点:' .. node.remarks) - end - server = node[".name"] - break - end - end - end - end - end - end - -- 还不行 随便找一个 - if not server then - server = uci:get_all(appname, '@' .. "nodes" .. '[0]') - if server then - if config.log == nil or config.log == true then - log('【' .. config.remarks .. '】' .. '无法找到最匹配的节点,当前已更换为:' .. server.remarks) - end - server = server[".name"] - end - end - if server then - config.set(config, server) - end -end - -local function update_node(manual) - if next(nodeResult) == nil then - log("更新失败,没有可用的节点信息") - return - end - - local group = "" - for _, v in ipairs(nodeResult) do - group = group .. v["remark"] - end - - if manual == 0 and #group > 0 then - uci:foreach(appname, "nodes", function(node) - -- 如果是未发现新节点或手动导入的节点就不要删除了... - if (node.add_from and group:find(node.add_from, 1, true)) and node.add_mode == "2" then - uci:delete(appname, node['.name']) - end - end) - end - for _, v in ipairs(nodeResult) do - local remark = v["remark"] - local list = v["list"] - for _, vv in ipairs(list) do - local cfgid = uci:section(appname, "nodes", api.gen_uuid()) - for kkk, vvv in pairs(vv) do - uci:set(appname, cfgid, kkk, vvv) - end - end - end - uci:commit(appname) - - if next(CONFIG) then - local nodes = {} - uci:foreach(appname, "nodes", function(node) - nodes[#nodes + 1] = node - end) - - for _, config in pairs(CONFIG) do - if config.nodes and type(config.nodes) == "table" then - for kk, vv in pairs(config.nodes) do - select_node(nodes, vv) - end - config.set(config) - else - select_node(nodes, config) - end - end - - --[[ - for k, v in pairs(CONFIG) do - if type(v.new_nodes) == "table" and #v.new_nodes > 0 then - local new_node_list = "" - for kk, vv in pairs(v.new_nodes) do - new_node_list = new_node_list .. vv .. " " - end - if new_node_list ~= "" then - print(v.remarks, new_node_list) - end - else - print(v.remarks, v.newNodeId) - end - end - ]]-- - - uci:commit(appname) - end - luci.sys.call("/etc/init.d/" .. appname .. " restart > /dev/null 2>&1 &") -end - -local function parse_link(raw, add_mode, add_from) - if raw and #raw > 0 then - local nodes, szType - local node_list = {} - -- SSD 似乎是这种格式 ssd:// 开头的 - if raw:find('ssd://') then - szType = 'ssd' - local nEnd = select(2, raw:find('ssd://')) - nodes = base64Decode(raw:sub(nEnd + 1, #raw)) - nodes = jsonParse(nodes) - local extra = { - airport = nodes.airport, - port = nodes.port, - encryption = nodes.encryption, - password = nodes.password - } - local servers = {} - -- SS里面包着 干脆直接这样 - for _, server in ipairs(nodes.servers) do - tinsert(servers, setmetatable(server, { __index = extra })) - end - nodes = servers - else - -- ssd 外的格式 - if add_mode == "1" then - nodes = split(raw:gsub(" ", "\n"), "\n") - else - nodes = split(base64Decode(raw):gsub(" ", "\n"), "\n") - end - end - - for _, v in ipairs(nodes) do - if v then - local result - if szType == 'ssd' then - result = processData(szType, v, add_mode, add_from) - elseif not szType then - local node = trim(v) - local dat = split(node, "://") - if dat and dat[1] and dat[2] then - if dat[1] == 'ss' or dat[1] == 'trojan' or dat[1] == 'trojan-go' then - result = processData(dat[1], dat[2], add_mode, add_from) - else - result = processData(dat[1], base64Decode(dat[2]), add_mode, add_from) - end - end - else - log('跳过未知类型: ' .. szType) - end - -- log(result) - if result then - if not result.type then - log('丢弃节点:' .. result.remarks .. ",找不到可使用二进制.") - elseif (add_mode == "2" and is_filter_keyword(result.remarks)) or not result.address or result.remarks == "NULL" or - (not datatypes.hostname(result.address) and not (datatypes.ipmask4(result.address) or datatypes.ipmask6(result.address))) then - log('丢弃过滤节点: ' .. result.type .. ' 节点, ' .. result.remarks) - else - tinsert(node_list, result) - end - end - end - end - if #node_list > 0 then - nodeResult[#nodeResult + 1] = { - remark = add_from, - list = node_list - } - end - log('成功解析【' .. add_from .. '】节点数量: ' .. #node_list) - else - if add_mode == "2" then - log('获取到的【' .. add_from .. '】订阅内容为空,可能是订阅地址失效,或是网络问题,请请检测。') - end - end -end - -local execute = function() - do - local subscribe_list = {} - local retry = {} - if arg[2] then - string.gsub(arg[2], '[^' .. "," .. ']+', function(w) - subscribe_list[#subscribe_list + 1] = uci:get_all(appname, w) or {} - end) - else - uci:foreach(appname, "subscribe_list", function(o) - subscribe_list[#subscribe_list + 1] = o - end) - end - - for index, value in ipairs(subscribe_list) do - local cfgid = value[".name"] - local remark = value.remark - local url = value.url - if value.allowInsecure and value.allowInsecure ~= "1" then - allowInsecure_default = nil - end - local filter_keyword_mode = value.filter_keyword_mode or "5" - if filter_keyword_mode == "0" then - filter_keyword_mode_default = "0" - elseif filter_keyword_mode == "1" then - filter_keyword_mode_default = "1" - filter_keyword_discard_list_default = value.filter_discard_list or {} - elseif filter_keyword_mode == "2" then - filter_keyword_mode_default = "2" - filter_keyword_keep_list_default = value.filter_keep_list or {} - elseif filter_keyword_mode == "3" then - filter_keyword_mode_default = "3" - filter_keyword_keep_list_default = value.filter_keep_list or {} - filter_keyword_discard_list_default = value.filter_discard_list or {} - elseif filter_keyword_mode == "4" then - filter_keyword_mode_default = "4" - filter_keyword_keep_list_default = value.filter_keep_list or {} - filter_keyword_discard_list_default = value.filter_discard_list or {} - end - local ss_aead_type = value.ss_aead_type or "global" - if ss_aead_type ~= "global" then - ss_aead_type_default = ss_aead_type - end - local trojan_type = value.trojan_type or "global" - if trojan_type ~= "global" then - trojan_type_default = trojan_type - end - local ua = value.user_agent - log('正在订阅:【' .. remark .. '】' .. url) - local raw = curl(url, "/tmp/" .. cfgid, ua) - if raw == 0 then - local f = io.open("/tmp/" .. cfgid, "r") - local stdout = f:read("*all") - f:close() - raw = trim(stdout) - os.remove("/tmp/" .. cfgid) - parse_link(raw, "2", remark) - else - retry[#retry + 1] = value - end - allowInsecure_default = true - filter_keyword_mode_default = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0" - filter_keyword_discard_list_default = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {} - filter_keyword_keep_list_default = uci:get(appname, "@global_subscribe[0]", "filter_keep_list") or {} - ss_aead_type_default = uci:get(appname, "@global_subscribe[0]", "ss_aead_type") or "shadowsocks-libev" - trojan_type_default = uci:get(appname, "@global_subscribe[0]", "trojan_type") or "trojan-plus" - end - - if #retry > 0 then - for index, value in ipairs(retry) do - if (uci:get(appname, "@global_subscribe[0]", "subscribe_proxy") or "0") == "1" and (uci:get(appname, "@global[0]", "enabled") or "0") == "1" then - log(value.remark .. '订阅失败,请尝试关闭代理后再订阅。') - else - log(value.remark .. '订阅失败,可能是订阅地址失效,或是网络问题,请诊断!') - end - end - end - update_node(0) - end -end - -if arg[1] then - if arg[1] == "start" then - log('开始订阅...') - xpcall(execute, function(e) - log(e) - log(debug.traceback()) - log('发生错误, 正在恢复服务') - end) - log('订阅完毕...') - elseif arg[1] == "add" then - local f = assert(io.open("/tmp/links.conf", 'r')) - local content = f:read('*all') - f:close() - local nodes = split(content:gsub(" ", "\n"), "\n") - for _, raw in ipairs(nodes) do - parse_link(raw, "1", "导入") - end - update_node(1) - luci.sys.call("rm -f /tmp/links.conf") - elseif arg[1] == "truncate" then - truncate_nodes(arg[2]) - end -end diff --git a/luci-app-passwall/root/usr/share/passwall/test.sh b/luci-app-passwall/root/usr/share/passwall/test.sh deleted file mode 100755 index 105a2f6c..00000000 --- a/luci-app-passwall/root/usr/share/passwall/test.sh +++ /dev/null @@ -1,243 +0,0 @@ -#!/bin/sh - -CONFIG=passwall -LOG_FILE=/tmp/log/$CONFIG.log -LOCK_FILE_DIR=/tmp/lock -LOCK_FILE=${LOCK_FILE_DIR}/${CONFIG}_script.lock - -echolog() { - local d="$(date "+%Y-%m-%d %H:%M:%S")" - #echo -e "$d: $1" - echo -e "$d: $1" >> $LOG_FILE -} - -config_n_get() { - local ret=$(uci -q get "${CONFIG}.${1}.${2}" 2>/dev/null) - echo "${ret:=$3}" -} - -config_t_get() { - local index=0 - [ -n "$4" ] && index=$4 - local ret=$(uci -q get $CONFIG.@$1[$index].$2 2>/dev/null) - echo ${ret:=$3} -} - -test_url() { - local url=$1 - local try=1 - [ -n "$2" ] && try=$2 - local timeout=2 - [ -n "$3" ] && timeout=$3 - local extra_params=$4 - curl --help all | grep "\-\-retry-all-errors" > /dev/null - [ $? == 0 ] && extra_params="--retry-all-errors ${extra_params}" - status=$(/usr/bin/curl -I -o /dev/null -skL $extra_params --connect-timeout ${timeout} --retry ${try} -w %{http_code} "$url") - case "$status" in - 204|\ - 200) - status=200 - ;; - esac - echo $status -} - -test_proxy() { - result=0 - status=$(test_url "https://www.google.com/generate_204" ${retry_num} ${connect_timeout}) - if [ "$status" = "200" ]; then - result=0 - else - status2=$(test_url "https://www.baidu.com" ${retry_num} ${connect_timeout}) - if [ "$status2" = "200" ]; then - result=1 - else - result=2 - ping -c 3 -W 1 223.5.5.5 > /dev/null 2>&1 - [ $? -eq 0 ] && { - result=1 - } - fi - fi - echo $result -} - -test_node() { - local node_id=$1 - local _type=$(echo $(config_n_get ${node_id} type nil) | tr 'A-Z' 'a-z') - [ "${_type}" != "nil" ] && { - if [ "${_type}" == "socks" ]; then - local _address=$(config_n_get ${node_id} address) - local _port=$(config_n_get ${node_id} port) - [ -n "${_address}" ] && [ -n "${_port}" ] && { - local curlx="socks5h://${_address}:${_port}" - local _username=$(config_n_get ${node_id} username) - local _password=$(config_n_get ${node_id} password) - [ -n "${_username}" ] && [ -n "${_password}" ] && curlx="socks5h://${_username}:${_password}@${_address}:${_port}" - } - else - local _tmp_port=$(/usr/share/${CONFIG}/app.sh get_new_port 61080 tcp) - /usr/share/${CONFIG}/app.sh run_socks flag=auto_switch node=$node_id bind=127.0.0.1 socks_port=${_tmp_port} config_file=/tmp/etc/${CONFIG}/test.json - local curlx="socks5h://127.0.0.1:${_tmp_port}" - fi - _proxy_status=$(test_url "https://www.google.com/generate_204" ${retry_num} ${connect_timeout} "-x $curlx") - pgrep -f "/tmp/etc/${CONFIG}/test\.json|auto_switch" | xargs kill -9 >/dev/null 2>&1 - rm -rf "/tmp/etc/${CONFIG}/test.json" - if [ "${_proxy_status}" -eq 200 ]; then - return 0 - fi - } - return 1 -} - -flag=0 -main_node=$(config_t_get global tcp_node nil) - -test_auto_switch() { - flag=$(expr $flag + 1) - local TYPE=$1 - local b_tcp_nodes=$2 - local now_node=$3 - [ -z "$now_node" ] && { - if [ -f "/tmp/etc/$CONFIG/id/${TYPE}" ]; then - now_node=$(cat /tmp/etc/$CONFIG/id/${TYPE}) - if [ "$(config_n_get $now_node protocol nil)" = "_shunt" ]; then - if [ "$shunt_logic" == "1" ] && [ -f "/tmp/etc/$CONFIG/id/${TYPE}_default" ]; then - now_node=$(cat /tmp/etc/$CONFIG/id/${TYPE}_default) - elif [ "$shunt_logic" == "2" ] && [ -f "/tmp/etc/$CONFIG/id/${TYPE}_main" ]; then - now_node=$(cat /tmp/etc/$CONFIG/id/${TYPE}_main) - else - shunt_logic=0 - fi - else - shunt_logic=0 - fi - else - #echolog "自动切换检测:未知错误" - return 1 - fi - } - - [ $flag -le 1 ] && { - main_node=$now_node - } - - status=$(test_proxy) - if [ "$status" == 2 ]; then - echolog "自动切换检测:无法连接到网络,请检查网络是否正常!" - return 2 - fi - - #检测主节点是否能使用 - if [ "$restore_switch" == "1" ] && [ "$main_node" != "nil" ] && [ "$now_node" != "$main_node" ]; then - test_node ${main_node} - [ $? -eq 0 ] && { - #主节点正常,切换到主节点 - echolog "自动切换检测:${TYPE}主节点【$(config_n_get $main_node type):[$(config_n_get $main_node remarks)]】正常,切换到主节点!" - /usr/share/${CONFIG}/app.sh node_switch ${TYPE} ${main_node} ${shunt_logic} 1 - [ $? -eq 0 ] && { - echolog "自动切换检测:${TYPE}节点切换完毕!" - [ "$shunt_logic" != "0" ] && { - local tcp_node=$(config_t_get global tcp_node nil) - [ "$(config_n_get $tcp_node protocol nil)" = "_shunt" ] && { - if [ "$shunt_logic" == "1" ]; then - uci set $CONFIG.$tcp_node.default_node="$main_node" - elif [ "$shunt_logic" == "2" ]; then - uci set $CONFIG.$tcp_node.main_node="$main_node" - fi - uci commit $CONFIG - } - } - } - return 0 - } - fi - - if [ "$status" == 0 ]; then - #echolog "自动切换检测:${TYPE}节点【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】正常。" - return 0 - elif [ "$status" == 1 ]; then - echolog "自动切换检测:${TYPE}节点【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】异常,切换到下一个备用节点检测!" - local new_node - in_backup_nodes=$(echo $b_tcp_nodes | grep $now_node) - # 判断当前节点是否存在于备用节点列表里 - if [ -z "$in_backup_nodes" ]; then - # 如果不存在,设置第一个节点为新的节点 - new_node=$(echo $b_tcp_nodes | awk -F ' ' '{print $1}') - else - # 如果存在,设置下一个备用节点为新的节点 - #local count=$(expr $(echo $b_tcp_nodes | grep -o ' ' | wc -l) + 1) - local next_node=$(echo $b_tcp_nodes | awk -F "$now_node" '{print $2}' | awk -F " " '{print $1}') - if [ -z "$next_node" ]; then - new_node=$(echo $b_tcp_nodes | awk -F ' ' '{print $1}') - else - new_node=$next_node - fi - fi - test_node ${new_node} - if [ $? -eq 0 ]; then - [ "$restore_switch" == "0" ] && { - [ "$shunt_logic" == "0" ] && uci set $CONFIG.@global[0].tcp_node=$new_node - [ -z "$(echo $b_tcp_nodes | grep $main_node)" ] && uci add_list $CONFIG.@auto_switch[0].tcp_node=$main_node - uci commit $CONFIG - } - echolog "自动切换检测:${TYPE}节点【$(config_n_get $new_node type):[$(config_n_get $new_node remarks)]】正常,切换到此节点!" - /usr/share/${CONFIG}/app.sh node_switch ${TYPE} ${new_node} ${shunt_logic} 1 - [ $? -eq 0 ] && { - [ "$restore_switch" == "1" ] && [ "$shunt_logic" != "0" ] && { - local tcp_node=$(config_t_get global tcp_node nil) - [ "$(config_n_get $tcp_node protocol nil)" = "_shunt" ] && { - if [ "$shunt_logic" == "1" ]; then - uci set $CONFIG.$tcp_node.default_node="$main_node" - elif [ "$shunt_logic" == "2" ]; then - uci set $CONFIG.$tcp_node.main_node="$main_node" - fi - uci commit $CONFIG - } - } - echolog "自动切换检测:${TYPE}节点切换完毕!" - } - return 0 - else - test_auto_switch ${TYPE} "${b_tcp_nodes}" ${new_node} - fi - fi -} - -start() { - ENABLED=$(config_t_get global enabled 0) - [ "$ENABLED" != 1 ] && return 1 - ENABLED=$(config_t_get auto_switch enable 0) - [ "$ENABLED" != 1 ] && return 1 - delay=$(config_t_get auto_switch testing_time 1) - #sleep 9s - connect_timeout=$(config_t_get auto_switch connect_timeout 3) - retry_num=$(config_t_get auto_switch retry_num 3) - restore_switch=$(config_t_get auto_switch restore_switch 0) - shunt_logic=$(config_t_get auto_switch shunt_logic 0) - while [ "$ENABLED" -eq 1 ]; do - [ -f "$LOCK_FILE" ] && { - sleep 6s - continue - } - touch $LOCK_FILE - TCP_NODE=$(config_t_get auto_switch tcp_node nil) - [ -n "$TCP_NODE" -a "$TCP_NODE" != "nil" ] && { - TCP_NODE=$(echo $TCP_NODE | tr -s ' ' '\n' | uniq | tr -s '\n' ' ') - test_auto_switch TCP "$TCP_NODE" - } - rm -f $LOCK_FILE - sleep ${delay}m - done -} - -arg1=$1 -shift -case $arg1 in -test_url) - test_url $@ - ;; -*) - start - ;; -esac diff --git a/luci-app-passwall/root/usr/share/rpcd/acl.d/luci-app-passwall.json b/luci-app-passwall/root/usr/share/rpcd/acl.d/luci-app-passwall.json deleted file mode 100644 index 0d6f7d7e..00000000 --- a/luci-app-passwall/root/usr/share/rpcd/acl.d/luci-app-passwall.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-passwall": { - "description": "Grant UCI access for luci-app-passwall", - "read": { - "uci": [ "passwall", "passwall_server" ] - }, - "write": { - "uci": [ "passwall", "passwall_server" ] - } - } -} diff --git a/luci-app-poweroff b/luci-app-poweroff deleted file mode 160000 index 0c110db7..00000000 --- a/luci-app-poweroff +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0c110db78a5a8d4c8147892bc92878f9e876955e diff --git a/luci-app-pushbot b/luci-app-pushbot deleted file mode 160000 index e5eec993..00000000 --- a/luci-app-pushbot +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e5eec99355e10a324293cadbbf4180119b0949d2 diff --git a/luci-app-shortcutmenu/Makefile b/luci-app-shortcutmenu/Makefile deleted file mode 100644 index bad5c45d..00000000 --- a/luci-app-shortcutmenu/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -# -# Copyright (C) 2019-2020 -# -# This is free software, licensed under the Apache License, Version 3.0 . -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-shortcutmenu -LUCI_TITLE:=LuCI Support for shortcutmenu -LUCI_DEPENDS:= -LUCI_PKGARCH:=all -PKG_LICENSE:=AGPL-3.0 -PKG_MAINTAINER:= - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-shortcutmenu/luasrc/controller/shortcutmenu.lua b/luci-app-shortcutmenu/luasrc/controller/shortcutmenu.lua deleted file mode 100644 index b1dad689..00000000 --- a/luci-app-shortcutmenu/luasrc/controller/shortcutmenu.lua +++ /dev/null @@ -1,11 +0,0 @@ --- Copyright 2021 sudodou --- Licensed to the public under the Apache License 2.0. - -module("luci.controller.shortcutmenu", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/shortcutmenu") then - return - end - entry({"admin", "status", "shortcutmenu"}, cbi("shortcutmenu"), _("Shortcutmenu"), 55).dependent = true -end diff --git a/luci-app-shortcutmenu/luasrc/model/cbi/shortcutmenu.lua b/luci-app-shortcutmenu/luasrc/model/cbi/shortcutmenu.lua deleted file mode 100644 index d9d28648..00000000 --- a/luci-app-shortcutmenu/luasrc/model/cbi/shortcutmenu.lua +++ /dev/null @@ -1,39 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface - -Copyright 2020 doushang - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -]]-- - -local sys = require "luci.sys" -local a,b,c,d - -m = Map("shortcutmenu", translate("Shortcutmenu"), - translatef("Shortcutmenu is used to provide quick access to web pages.")) -s = m:section(TypedSection, "lists", translate("Lists")) -s.template = "cbi/tblsection" -s.anonymous = true -s.addremove = true - -a = s:option(Value, "webname", translate("Webname")) - -b = s:option(Value,"weburl", translate("Weburl(without http:// or https:// )")) - -c = s:option(Value,"webpath",translate("Webpath")) -c.default = '/' - -d = s:option(DummyValue,"operator",translate("Operator")) -d.rawhtml = true -function d.cfgvalue(self, s) - local e = self.map:get(s, "weburl") or ' ' - local f = self.map:get(s, "webpath") or ' ' - return "" -end - -return m \ No newline at end of file diff --git a/luci-app-shortcutmenu/po/zh-cn/shortcutmenu.po b/luci-app-shortcutmenu/po/zh-cn/shortcutmenu.po deleted file mode 100644 index ffe06928..00000000 --- a/luci-app-shortcutmenu/po/zh-cn/shortcutmenu.po +++ /dev/null @@ -1,26 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "Shortcutmenu" -msgstr "网页快捷菜单" - -msgid "Shortcutmenu is used to provide quick access to web pages." -msgstr "网页快捷菜单用于提供网页的快捷入口。" - -msgid "Lists" -msgstr "列表" - -msgid "Webname" -msgstr "名称" - -msgid "Weburl" -msgstr "网址" - -msgid "Webpath" -msgstr "路径" - -msgid "Weburl(without http:// or https:// )" -msgstr "网址(不需要带 http:// 或者 https:// )" - -msgid "Operator" -msgstr "操作" \ No newline at end of file diff --git a/luci-app-shortcutmenu/po/zh_Hans b/luci-app-shortcutmenu/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-shortcutmenu/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-shortcutmenu/root/etc/config/shortcutmenu b/luci-app-shortcutmenu/root/etc/config/shortcutmenu deleted file mode 100644 index 8b137891..00000000 --- a/luci-app-shortcutmenu/root/etc/config/shortcutmenu +++ /dev/null @@ -1 +0,0 @@ - diff --git a/luci-app-shortcutmenu/root/usr/share/rpcd/acl.d/luci-app-shortcutmenu.json b/luci-app-shortcutmenu/root/usr/share/rpcd/acl.d/luci-app-shortcutmenu.json deleted file mode 100644 index 5ec8e930..00000000 --- a/luci-app-shortcutmenu/root/usr/share/rpcd/acl.d/luci-app-shortcutmenu.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-shortcutmenu": { - "description": "Grant UCI access for luci-app-shortcutmenu", - "read": { - "uci": [ "shortcutmenu" ] - }, - "write": { - "uci": [ "shortcutmenu" ] - } - } -} diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile deleted file mode 100644 index f3671e50..00000000 --- a/luci-app-ssr-plus/Makefile +++ /dev/null @@ -1,117 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-ssr-plus - -PKG_CONFIG_DEPENDS:= \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2 \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin \ - CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray - -LUCI_TITLE:=SS/SSR/V2Ray/Trojan/NaiveProxy/Socks5/Tun LuCI interface -LUCI_PKGARCH:=all -LUCI_DEPENDS:= \ - @(PACKAGE_libustream-mbedtls||PACKAGE_libustream-openssl||PACKAGE_libustream-wolfssl) \ - +coreutils +coreutils-base64 +dns2socks +dnsmasq-full +ipset \ - +ip-full +iptables-mod-tproxy +lua +libuci-lua +microsocks +pdnsd-alt \ - +tcping +resolveip +shadowsocksr-libev-ssr-check +uclient-fetch \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \ - +PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy:naiveproxy \ - +PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks:ipt2socks \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2:redsocks2 \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-local \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-redir \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server:shadowsocks-libev-ss-server \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client:shadowsocks-rust-sslocal \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server:shadowsocks-rust-ssserver \ - +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-local \ - +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-redir \ - +PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server:shadowsocksr-libev-ssr-server \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs:simple-obfs \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:trojan \ - +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin:v2ray-plugin \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:curl \ - +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray-core - -define Package/$(PKG_NAME)/config -config PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun - bool "Include Kcptun" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy - bool "Include NaiveProxy" - depends on !(arc||armeb||mips||mips64||powerpc||TARGET_gemini) - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks - bool "Include ipt2socks" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2 - bool "Include Redsocks2" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client - bool "Include Shadowsocks Libev Client" - default y if i386||x86_64||arm - -config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server - bool "Include Shadowsocks Libev Server" - default y if i386||x86_64||arm - -config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client - bool "Include Shadowsocks Rust Client" - depends on aarch64||arm||i386||mips||mipsel||x86_64 - depends on !(TARGET_x86_geode||TARGET_x86_legacy) - default y if aarch64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server - bool "Include Shadowsocks Rust Server" - depends on aarch64||arm||i386||mips||mipsel||x86_64 - depends on !(TARGET_x86_geode||TARGET_x86_legacy) - default y if aarch64 - -config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client - bool "Include ShadowsocksR Libev Client" - default y - -config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server - bool "Include ShadowsocksR Libev Server" - default y if i386||x86_64||arm - -config PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs - bool "Include Shadowsocks Simple Obfs Plugin" - default y if i386||x86_64||arm - -config PACKAGE_$(PKG_NAME)_INCLUDE_Trojan - bool "Include Trojan" - select PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin - bool "Include Shadowsocks V2ray Plugin" - default n - -config PACKAGE_$(PKG_NAME)_INCLUDE_Xray - bool "Include Xray" - default y if aarch64||arm||i386||x86_64 -endef - -define Package/$(PKG_NAME)/conffiles -/etc/config/shadowsocksr -/etc/ssrplus/ -endef - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua b/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua deleted file mode 100644 index 6b18d5b5..00000000 --- a/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua +++ /dev/null @@ -1,143 +0,0 @@ --- Copyright (C) 2017 yushi studio --- Licensed to the public under the GNU General Public License v3. -module("luci.controller.shadowsocksr", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/shadowsocksr") then - call("act_reset") - end - local page - page = entry({"admin", "services", "shadowsocksr"}, alias("admin", "services", "shadowsocksr", "client"), _("ShadowSocksR Plus+"), 10) - page.dependent = true - page.acl_depends = { "luci-app-ssr-plus" } - entry({"admin", "services", "shadowsocksr", "client"}, cbi("shadowsocksr/client"), _("SSR Client"), 10).leaf = true - entry({"admin", "services", "shadowsocksr", "servers"}, arcombine(cbi("shadowsocksr/servers", {autoapply = true}), cbi("shadowsocksr/client-config")), _("Severs Nodes"), 20).leaf = true - entry({"admin", "services", "shadowsocksr", "control"}, cbi("shadowsocksr/control"), _("Access Control"), 30).leaf = true - entry({"admin", "services", "shadowsocksr", "advanced"}, cbi("shadowsocksr/advanced"), _("Advanced Settings"), 50).leaf = true - entry({"admin", "services", "shadowsocksr", "server"}, arcombine(cbi("shadowsocksr/server"), cbi("shadowsocksr/server-config")), _("SSR Server"), 60).leaf = true - entry({"admin", "services", "shadowsocksr", "status"}, form("shadowsocksr/status"), _("Status"), 70).leaf = true - entry({"admin", "services", "shadowsocksr", "check"}, call("check_status")) - entry({"admin", "services", "shadowsocksr", "refresh"}, call("refresh_data")) - entry({"admin", "services", "shadowsocksr", "subscribe"}, call("subscribe")) - entry({"admin", "services", "shadowsocksr", "checkport"}, call("check_port")) - entry({"admin", "services", "shadowsocksr", "log"}, form("shadowsocksr/log"), _("Log"), 80).leaf = true - entry({"admin", "services", "shadowsocksr", "run"}, call("act_status")) - entry({"admin", "services", "shadowsocksr", "ping"}, call("act_ping")) - entry({"admin", "services", "shadowsocksr", "reset"}, call("act_reset")) - entry({"admin", "services", "shadowsocksr", "restart"}, call("act_restart")) - entry({"admin", "services", "shadowsocksr", "delete"}, call("act_delete")) - entry({"admin", "services", "shadowsocksr", "cache"}, call("act_cache")) -end - -function subscribe() - luci.sys.call("/usr/bin/lua /usr/share/shadowsocksr/subscribe.lua >>/var/log/ssrplus.log") - luci.http.prepare_content("application/json") - luci.http.write_json({ret = 1}) -end - -function act_status() - local e = {} - e.running = luci.sys.call("busybox ps -w | grep ssr-retcp | grep -v grep >/dev/null") == 0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function act_ping() - local e = {} - local domain = luci.http.formvalue("domain") - local port = luci.http.formvalue("port") - local transport = luci.http.formvalue("transport") - local wsPath = luci.http.formvalue("wsPath") - local tls = luci.http.formvalue("tls") - e.index = luci.http.formvalue("index") - local iret = luci.sys.call("ipset add ss_spec_wan_ac " .. domain .. " 2>/dev/null") - if transport == "ws" then - local prefix = tls=='1' and "https://" or "http://" - local address = prefix..domain..':'..port..wsPath - local result = luci.sys.exec("curl --http1.1 -m 2 -ksN -o /dev/null -w 'time_connect=%{time_connect}\nhttp_code=%{http_code}' -H 'Connection: Upgrade' -H 'Upgrade: websocket' -H 'Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==' -H 'Sec-WebSocket-Version: 13' "..address) - e.socket = string.match(result,"http_code=(%d+)")=="101" - e.ping = tonumber(string.match(result, "time_connect=(%d+.%d%d%d)"))*1000 - else - local socket = nixio.socket("inet", "stream") - socket:setopt("socket", "rcvtimeo", 3) - socket:setopt("socket", "sndtimeo", 3) - e.socket = socket:connect(domain, port) - socket:close() - -- e.ping = luci.sys.exec("ping -c 1 -W 1 %q 2>&1 | grep -o 'time=[0-9]*.[0-9]' | awk -F '=' '{print$2}'" % domain) - -- if (e.ping == "") then - e.ping = luci.sys.exec(string.format("echo -n $(tcping -q -c 1 -i 1 -t 2 -p %s %s 2>&1 | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}') 2>/dev/null", port, domain)) - -- end - end - if (iret == 0) then - luci.sys.call(" ipset del ss_spec_wan_ac " .. domain) - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function check_status() - local e = {} - e.ret = luci.sys.call("/usr/bin/ssr-check www." .. luci.http.formvalue("set") .. ".com 80 3 1") - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function refresh_data() - local set = luci.http.formvalue("set") - local retstring = loadstring("return " .. luci.sys.exec("/usr/bin/lua /usr/share/shadowsocksr/update.lua " .. set))() - luci.http.prepare_content("application/json") - luci.http.write_json(retstring) -end - -function check_port() - local retstring = "

" - local s - local server_name = "" - local uci = luci.model.uci.cursor() - local iret = 1 - uci:foreach("shadowsocksr", "servers", function(s) - if s.alias then - server_name = s.alias - elseif s.server and s.server_port then - server_name = "%s:%s" % {s.server, s.server_port} - end - iret = luci.sys.call("ipset add ss_spec_wan_ac " .. s.server .. " 2>/dev/null") - socket = nixio.socket("inet", "stream") - socket:setopt("socket", "rcvtimeo", 3) - socket:setopt("socket", "sndtimeo", 3) - ret = socket:connect(s.server, s.server_port) - if tostring(ret) == "true" then - socket:close() - retstring = retstring .. "[" .. server_name .. "] OK.
" - else - retstring = retstring .. "[" .. server_name .. "] Error.
" - end - if iret == 0 then - luci.sys.call("ipset del ss_spec_wan_ac " .. s.server) - end - end) - luci.http.prepare_content("application/json") - luci.http.write_json({ret = retstring}) -end - -function act_reset() - luci.sys.call("/etc/init.d/shadowsocksr reset &") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr")) -end - -function act_restart() - luci.sys.call("/etc/init.d/shadowsocksr restart &") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr")) -end - -function act_delete() - luci.sys.call("/etc/init.d/shadowsocksr restart &") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) -end - -function act_cache() - local e = {} - e.ret = luci.sys.call("pdnsd-ctl -c /var/etc/ssrplus/pdnsd empty-cache >/dev/null") - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua deleted file mode 100644 index 34034873..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua +++ /dev/null @@ -1,102 +0,0 @@ -local uci = luci.model.uci.cursor() -local server_table = {} - -uci:foreach("shadowsocksr", "servers", function(s) - if s.alias then - server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.v2ray_protocol or s.type), s.alias} - elseif s.server and s.server_port then - server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.v2ray_protocol or s.type), s.server, s.server_port} - end -end) - -local key_table = {} -for key, _ in pairs(server_table) do - table.insert(key_table, key) -end - -table.sort(key_table) - -m = Map("shadowsocksr") --- [[ global ]]-- -s = m:section(TypedSection, "global", translate("Server failsafe auto swith and custom update settings")) -s.anonymous = true - --- o = s:option(Flag, "monitor_enable", translate("Enable Process Deamon")) --- o.rmempty = false --- o.default = "1" - -o = s:option(Flag, "enable_switch", translate("Enable Auto Switch")) -o.rmempty = false -o.default = "1" - -o = s:option(Value, "switch_time", translate("Switch check cycly(second)")) -o.datatype = "uinteger" -o:depends("enable_switch", "1") -o.default = 667 - -o = s:option(Value, "switch_timeout", translate("Check timout(second)")) -o.datatype = "uinteger" -o:depends("enable_switch", "1") -o.default = 5 - -o = s:option(Value, "switch_try_count", translate("Check Try Count")) -o.datatype = "uinteger" -o:depends("enable_switch", "1") -o.default = 3 - -o = s:option(Value, "gfwlist_url", translate("gfwlist Update url")) -o:value("https://cdn.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@release/gfwlist.txt", translate("v2fly/domain-list-community")) -o:value("https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt", translate("Loyalsoldier/v2ray-rules-dat")) -o:value("https://cdn.jsdelivr.net/gh/Loukky/gfwlist-by-loukky/gfwlist.txt", translate("Loukky/gfwlist-by-loukky")) -o:value("https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt", translate("gfwlist/gfwlist")) -o.default = "https://cdn.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@release/gfwlist.txt" - -o = s:option(Value, "chnroute_url", translate("Chnroute Update url")) -o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN")) -o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR")) -o.default = "https://ispip.clang.cn/all_cn.txt" - -o = s:option(Flag, "netflix_enable", translate("Enable Netflix Mode")) -o.rmempty = false - -o = s:option(Value, "nfip_url", translate("nfip_url")) -o:value("https://cdn.jsdelivr.net/gh/QiuSimons/Netflix_IP/NF_only.txt", translate("Netflix IP Only")) -o:value("https://cdn.jsdelivr.net/gh/QiuSimons/Netflix_IP/getflix.txt", translate("Netflix and AWS")) -o.default = "https://cdn.jsdelivr.net/gh/QiuSimons/Netflix_IP/NF_only.txt" -o.description = translate("Customize Netflix IP Url") -o:depends("netflix_enable", "1") - -o = s:option(Flag, "adblock", translate("Enable adblock")) -o.rmempty = false - -o = s:option(Value, "adblock_url", translate("adblock_url")) -o:value("https://raw.githubusercontent.com/neodevpro/neodevhost/master/lite_host_dnsmasq.conf", translate("NEO DEV HOST Lite")) -o:value("https://raw.githubusercontent.com/neodevpro/neodevhost/master/host_dnsmasq.conf", translate("NEO DEV HOST Full")) -o:value("https://anti-ad.net/anti-ad-for-dnsmasq.conf", translate("anti-AD")) -o.default = "https://raw.githubusercontent.com/neodevpro/neodevhost/master/lite_host_dnsmasq.conf" -o:depends("adblock", "1") -o.description = translate("Support AdGuardHome and DNSMASQ format list") - -o = s:option(Button, "reset", translate("Reset to defaults")) -o.rawhtml = true -o.template = "shadowsocksr/reset" - --- [[ SOCKS5 Proxy ]]-- -s = m:section(TypedSection, "socks5_proxy", translate("Global SOCKS5 Proxy Server")) -s.anonymous = true - -o = s:option(ListValue, "server", translate("Server")) -o:value("nil", translate("Disable")) -o:value("same", translate("Same as Global Server")) -for _, key in pairs(key_table) do - o:value(key, server_table[key]) -end -o.default = "nil" -o.rmempty = false - -o = s:option(Value, "local_port", translate("Local Port")) -o.datatype = "port" -o.default = 1080 -o.rmempty = false - -return m diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua deleted file mode 100644 index 68a6ee9d..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua +++ /dev/null @@ -1,654 +0,0 @@ --- Copyright (C) 2017 yushi studio github.com/ywb94 --- Licensed to the public under the GNU General Public License v3. -require "nixio.fs" -require "luci.sys" -require "luci.http" -local m, s, o, kcp_enable -local sid = arg[1] -local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid") - -function is_finded(e) - return luci.sys.exec('type -t -p "%s"' % e) ~= "" and true or false -end - -local server_table = {} -local encrypt_methods = { - -- ssr - "none", - "table", - "rc4", - "rc4-md5-6", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf" -} - -local encrypt_methods_ss = { - -- aead - "aes-128-gcm", - "aes-192-gcm", - "aes-256-gcm", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305" - --[[ stream - "none", - "plain", - "table", - "rc4", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "salsa20", - "chacha20", - "chacha20-ietf" ]] -} - -local encrypt_methods_v2ray_ss = { - -- xray_ss - "none", - "plain", - -- aead - "aes-128-gcm", - "aes-256-gcm", - "chacha20-poly1305", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305", - "aead_aes_128_gcm", - "aead_aes_256_gcm", - "aead_chacha20_poly1305", - "aead_xchacha20_poly1305" -} - -local protocol = { - -- ssr - "origin", - "verify_deflate", - "auth_sha1_v4", - "auth_aes128_sha1", - "auth_aes128_md5", - "auth_chain_a", - "auth_chain_b", - "auth_chain_c", - "auth_chain_d", - "auth_chain_e", - "auth_chain_f" -} - -obfs = { - -- ssr - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth" -} - -local securitys = { - -- vmess - "auto", - "none", - "zero", - "aes-128-gcm", - "chacha20-poly1305" -} - -local flows = { - -- xlts - "xtls-rprx-origin", - "xtls-rprx-origin-udp443", - "xtls-rprx-direct", - "xtls-rprx-direct-udp443", - "xtls-rprx-splice", - "xtls-rprx-splice-udp443" -} - -m = Map("shadowsocksr", translate("Edit ShadowSocksR Server")) -m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers") -if m.uci:get("shadowsocksr", sid) ~= "servers" then - luci.http.redirect(m.redirect) - return -end - --- [[ Servers Setting ]]-- -s = m:section(NamedSection, sid, "servers") -s.anonymous = true -s.addremove = false - -o = s:option(DummyValue, "ssr_url", "SS/SSR/V2RAY/TROJAN URL") -o.rawhtml = true -o.template = "shadowsocksr/ssrurl" -o.value = sid - -o = s:option(ListValue, "type", translate("Server Node Type")) -if is_finded("xray") or is_finded("v2ray") then - o:value("v2ray", translate("V2Ray/XRay")) -end -if is_finded("ssr-redir") then - o:value("ssr", translate("ShadowsocksR")) -end -if is_finded("sslocal") or is_finded("ss-redir") then - o:value("ss", translate("Shadowsocks New Version")) -end -if is_finded("trojan") then - o:value("trojan", translate("Trojan")) -end -if is_finded("naive") then - o:value("naiveproxy", translate("NaiveProxy")) -end -if is_finded("ipt2socks") then - o:value("socks5", translate("Socks5")) -end -if is_finded("redsocks2") then - o:value("tun", translate("Network Tunnel")) -end - -o.description = translate("Using incorrect encryption mothod may causes service fail to start") - -o = s:option(Value, "alias", translate("Alias(optional)")) - -o = s:option(ListValue, "iface", translate("Network interface to use")) -for _, e in ipairs(luci.sys.net.devices()) do - if e ~= "lo" then - o:value(e) - end -end -o:depends("type", "tun") -o.description = translate("Redirect traffic to this network interface") - -o = s:option(ListValue, "v2ray_protocol", translate("V2Ray/XRay protocol")) -o:value("vless", translate("VLESS")) -o:value("vmess", translate("VMess")) -o:value("trojan", translate("Trojan")) -o:value("shadowsocks", translate("Shadowsocks")) -o:value("socks", translate("Socks")) -o:value("http", translate("HTTP")) -o:depends("type", "v2ray") - -o = s:option(Value, "server", translate("Server Address")) -o.datatype = "host" -o.rmempty = false -o:depends("type", "ssr") -o:depends("type", "ss") -o:depends("type", "v2ray") -o:depends("type", "trojan") -o:depends("type", "naiveproxy") -o:depends("type", "socks5") - -o = s:option(Value, "server_port", translate("Server Port")) -o.datatype = "port" -o.rmempty = false -o:depends("type", "ssr") -o:depends("type", "ss") -o:depends("type", "v2ray") -o:depends("type", "trojan") -o:depends("type", "naiveproxy") -o:depends("type", "socks5") - -o = s:option(Flag, "auth_enable", translate("Enable Authentication")) -o.rmempty = false -o.default = "0" -o:depends("type", "socks5") -o:depends({type = "v2ray", v2ray_protocol = "http"}) -o:depends({type = "v2ray", v2ray_protocol = "socks"}) - -o = s:option(Value, "username", translate("Username")) -o.rmempty = true -o:depends("type", "naiveproxy") -o:depends({type = "socks5", auth_enable = true}) -o:depends({type = "v2ray", v2ray_protocol = "http", auth_enable = true}) -o:depends({type = "v2ray", v2ray_protocol = "socks", auth_enable = true}) - -o = s:option(Value, "password", translate("Password")) -o.password = true -o.rmempty = true -o:depends("type", "ssr") -o:depends("type", "ss") -o:depends("type", "trojan") -o:depends("type", "naiveproxy") -o:depends({type = "socks5", auth_enable = true}) -o:depends({type = "v2ray", v2ray_protocol = "http", auth_enable = true}) -o:depends({type = "v2ray", v2ray_protocol = "socks", auth_enable = true}) -o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"}) -o:depends({type = "v2ray", v2ray_protocol = "trojan"}) - -o = s:option(ListValue, "encrypt_method", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods) do - o:value(v) -end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(ListValue, "encrypt_method_ss", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ss) do - o:value(v) -end -o.rmempty = true -o:depends("type", "ss") - -o = s:option(ListValue, "encrypt_method_v2ray_ss", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_v2ray_ss) do - o:value(v) -end -o.rmempty = true -o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"}) - -o = s:option(Flag, "ivCheck", translate("Bloom Filter")) -o.rmempty = true -o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"}) -o.default = "1" - --- Shadowsocks Plugin -o = s:option(Value, "plugin", translate("Obfs")) -o:value("none", translate("None")) -if is_finded("obfs-local") then - o:value("obfs-local", translate("obfs-local")) -end -if is_finded("v2ray-plugin") then - o:value("v2ray-plugin", translate("v2ray-plugin")) -end -if is_finded("xray-plugin") then - o:value("xray-plugin", translate("xray-plugin")) -end -o.rmempty = true -o:depends("type", "ss") - -o = s:option(Value, "plugin_opts", translate("Plugin Opts")) -o.rmempty = true -o:depends({type = "ss", plugin = "obfs-local"}) -o:depends({type = "ss", plugin = "v2ray-plugin"}) -o:depends({type = "ss", plugin = "xray-plugin"}) - -o = s:option(ListValue, "protocol", translate("Protocol")) -for _, v in ipairs(protocol) do - o:value(v) -end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(Value, "protocol_param", translate("Protocol param(optional)")) -o:depends("type", "ssr") - -o = s:option(ListValue, "obfs", translate("Obfs")) -for _, v in ipairs(obfs) do - o:value(v) -end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(Value, "obfs_param", translate("Obfs param(optional)")) -o:depends("type", "ssr") - --- VmessId -o = s:option(Value, "vmess_id", translate("Vmess/VLESS ID (UUID)")) -o.rmempty = true -o.default = uuid -o:depends({type = "v2ray", v2ray_protocol = "vmess"}) -o:depends({type = "v2ray", v2ray_protocol = "vless"}) - --- VLESS Encryption -o = s:option(Value, "vless_encryption", translate("VLESS Encryption")) -o.rmempty = true -o.default = "none" -o:depends({type = "v2ray", v2ray_protocol = "vless"}) - --- 加密方式 -o = s:option(ListValue, "security", translate("Encrypt Method")) -for _, v in ipairs(securitys) do - o:value(v, v:upper()) -end -o.rmempty = true -o:depends({type = "v2ray", v2ray_protocol = "vmess"}) - --- 传输协议 -o = s:option(ListValue, "transport", translate("Transport")) -o:value("tcp", "TCP") -o:value("kcp", "mKCP") -o:value("ws", "WebSocket") -o:value("h2", "HTTP/2") -o:value("quic", "QUIC") -o:value("grpc", "gRPC") -o.rmempty = true -o:depends("type", "v2ray") - --- [[ TCP部分 ]]-- --- TCP伪装 -o = s:option(ListValue, "tcp_guise", translate("Camouflage Type")) -o:depends("transport", "tcp") -o:value("none", translate("None")) -o:value("http", "HTTP") -o.rmempty = true - --- HTTP域名 -o = s:option(Value, "http_host", translate("HTTP Host")) -o:depends("tcp_guise", "http") -o.rmempty = true - --- HTTP路径 -o = s:option(Value, "http_path", translate("HTTP Path")) -o:depends("tcp_guise", "http") -o.rmempty = true - --- [[ WS部分 ]]-- --- WS域名 -o = s:option(Value, "ws_host", translate("WebSocket Host")) -o:depends({transport = "ws", tls = false}) -o.datatype = "hostname" -o.rmempty = true - --- WS路径 -o = s:option(Value, "ws_path", translate("WebSocket Path")) -o:depends("transport", "ws") -o.rmempty = true - --- [[ H2部分 ]]-- - --- H2域名 -o = s:option(Value, "h2_host", translate("HTTP/2 Host")) -o:depends("transport", "h2") -o.rmempty = true - --- H2路径 -o = s:option(Value, "h2_path", translate("HTTP/2 Path")) -o:depends("transport", "h2") -o.rmempty = true - --- gRPC -o = s:option(Value, "serviceName", translate("serviceName")) -o:depends("transport", "grpc") -o.rmempty = true - --- gRPC初始窗口 -o = s:option(Value, "initial_windows_size", translate("Initial Windows Size")) -o.datatype = "uinteger" -o:depends("transport", "grpc") -o.default = 0 -o.rmempty = true - --- H2/gRPC健康检查 -o = s:option(Flag, "health_check", translate("H2/gRPC Health Check")) -o:depends("transport", "h2") -o:depends("transport", "grpc") -o.rmempty = true - -o = s:option(Value, "read_idle_timeout", translate("H2 Read Idle Timeout")) -o.datatype = "uinteger" -o:depends({health_check = true, transport = "h2"}) -o.default = 60 -o.rmempty = true - -o = s:option(Value, "idle_timeout", translate("gRPC Idle Timeout")) -o.datatype = "uinteger" -o:depends({health_check = true, transport = "grpc"}) -o.default = 60 -o.rmempty = true - -o = s:option(Value, "health_check_timeout", translate("Health Check Timeout")) -o.datatype = "uinteger" -o:depends("health_check", 1) -o.default = 20 -o.rmempty = true - -o = s:option(Flag, "permit_without_stream", translate("Permit Without Stream")) -o:depends({health_check = true, transport = "grpc"}) -o.rmempty = true - --- [[ QUIC部分 ]]-- -o = s:option(ListValue, "quic_security", translate("QUIC Security")) -o:depends("transport", "quic") -o:value("none", translate("None")) -o:value("aes-128-gcm", translate("aes-128-gcm")) -o:value("chacha20-poly1305", translate("chacha20-poly1305")) -o.rmempty = true - -o = s:option(Value, "quic_key", translate("QUIC Key")) -o:depends("transport", "quic") -o.rmempty = true - -o = s:option(ListValue, "quic_guise", translate("Header")) -o:depends("transport", "quic") -o.rmempty = true -o:value("none", translate("None")) -o:value("srtp", translate("VideoCall (SRTP)")) -o:value("utp", translate("BitTorrent (uTP)")) -o:value("wechat-video", translate("WechatVideo")) -o:value("dtls", translate("DTLS 1.2")) -o:value("wireguard", translate("WireGuard")) - --- [[ mKCP部分 ]]-- -o = s:option(ListValue, "kcp_guise", translate("Camouflage Type")) -o:depends("transport", "kcp") -o:value("none", translate("None")) -o:value("srtp", translate("VideoCall (SRTP)")) -o:value("utp", translate("BitTorrent (uTP)")) -o:value("wechat-video", translate("WechatVideo")) -o:value("dtls", translate("DTLS 1.2")) -o:value("wireguard", translate("WireGuard")) -o.rmempty = true - -o = s:option(Value, "mtu", translate("MTU")) -o.datatype = "uinteger" -o:depends("transport", "kcp") -o.default = 1350 -o.rmempty = true - -o = s:option(Value, "tti", translate("TTI")) -o.datatype = "uinteger" -o:depends("transport", "kcp") -o.default = 50 -o.rmempty = true - -o = s:option(Value, "uplink_capacity", translate("Uplink Capacity")) -o.datatype = "uinteger" -o:depends("transport", "kcp") -o.default = 5 -o.rmempty = true - -o = s:option(Value, "downlink_capacity", translate("Downlink Capacity")) -o.datatype = "uinteger" -o:depends("transport", "kcp") -o.default = 20 -o.rmempty = true - -o = s:option(Value, "read_buffer_size", translate("Read Buffer Size")) -o.datatype = "uinteger" -o:depends("transport", "kcp") -o.default = 2 -o.rmempty = true - -o = s:option(Value, "write_buffer_size", translate("Write Buffer Size")) -o.datatype = "uinteger" -o:depends("transport", "kcp") -o.default = 2 -o.rmempty = true - -o = s:option(Value, "seed", translate("Obfuscate password (optional)")) -o:depends({v2ray_protocol = "vless", transport = "kcp"}) -o.rmempty = true - -o = s:option(Flag, "congestion", translate("Congestion")) -o:depends("transport", "kcp") -o.rmempty = true - --- [[ TLS ]]-- -o = s:option(Flag, "tls", translate("TLS")) -o.rmempty = true -o.default = "0" -o:depends({type = "v2ray", xtls = false}) --- o:depends({type = "v2ray", v2ray_protocol = "vless", xtls = false}) -o:depends("type", "trojan") - --- XTLS -if is_finded("xray") then - o = s:option(Flag, "xtls", translate("XTLS")) - o.rmempty = true - o.default = "0" - o:depends({type = "v2ray", v2ray_protocol = "vless", transport = "tcp", tls = false}) - o:depends({type = "v2ray", v2ray_protocol = "vless", transport = "kcp", tls = false}) - o:depends({type = "v2ray", v2ray_protocol = "trojan", transport = "tcp", tls = false}) - o:depends({type = "v2ray", v2ray_protocol = "trojan", transport = "kcp", tls = false}) -end - --- Flow -o = s:option(Value, "vless_flow", translate("Flow")) -for _, v in ipairs(flows) do - o:value(v, translate(v)) -end -o.rmempty = true -o.default = "xtls-rprx-splice" -o:depends("xtls", true) - --- [[ TLS部分 ]] -- -o = s:option(Flag, "tls_sessionTicket", translate("Session Ticket")) -o:depends({type = "trojan", tls = true}) -o.default = "0" - --- [[ uTLS ]]-- -o = s:option(ListValue, "fingerprint", translate("Finger Print")) -o:value("disable", translate("disable")) -o:value("firefox", translate("firefox")) -o:value("chrome", translate("chrome")) -o:value("safari", translate("safari")) -o:value("randomized", translate("randomized")) -o:depends({type = "v2ray", tls = true}) -o.default = "disable" - -o = s:option(Value, "tls_host", translate("TLS Host")) -o.datatype = "hostname" -o:depends("tls", true) -o:depends("xtls", true) -o.rmempty = true - --- [[ allowInsecure ]]-- -o = s:option(Flag, "insecure", translate("allowInsecure")) -o.rmempty = false -o:depends("tls", true) -o:depends("xtls", true) -o.description = translate("If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates.") - --- [[ Mux ]]-- -o = s:option(Flag, "mux", translate("Mux")) -o.rmempty = false -o:depends({type = "v2ray", xtls = false}) - -o = s:option(Value, "concurrency", translate("Concurrency")) -o.datatype = "uinteger" -o.rmempty = true -o.default = "8" -o:depends("mux", "1") - --- [[ Cert ]]-- -o = s:option(Flag, "certificate", translate("Self-signed Certificate")) -o.rmempty = true -o.default = "0" -o:depends({type = "trojan", tls = true, insecure = false}) -o:depends({type = "v2ray", v2ray_protocol = "vmess", tls = true, insecure = false}) -o:depends({type = "v2ray", v2ray_protocol = "vless", tls = true, insecure = false}) -o:depends({type = "v2ray", v2ray_protocol = "vmess", xtls = true, insecure = false}) -o:depends({type = "v2ray", v2ray_protocol = "vless", xtls = true, insecure = false}) -o.description = translate("If you have a self-signed certificate,please check the box") - -o = s:option(DummyValue, "upload", translate("Upload")) -o.template = "shadowsocksr/certupload" -o:depends("certificate", 1) - -cert_dir = "/etc/ssl/private/" -local path - -luci.http.setfilehandler(function(meta, chunk, eof) - if not fd then - if (not meta) or (not meta.name) or (not meta.file) then - return - end - fd = nixio.open(cert_dir .. meta.file, "w") - if not fd then - path = translate("Create upload file error.") - return - end - end - if chunk and fd then - fd:write(chunk) - end - if eof and fd then - fd:close() - fd = nil - path = '/etc/ssl/private/' .. meta.file .. '' - end -end) -if luci.http.formvalue("upload") then - local f = luci.http.formvalue("ulfile") - if #f <= 0 then - path = translate("No specify upload file.") - end -end - -o = s:option(Value, "certpath", translate("Current Certificate Path")) -o:depends("certificate", 1) -o:value("/etc/ssl/private/ca.pem") -o.description = translate("Please confirm the current certificate path") -o.default = "/etc/ssl/private/ca.pem" - -o = s:option(Flag, "fast_open", translate("TCP Fast Open")) -o.rmempty = true -o.default = "0" -o:depends("type", "ssr") -o:depends("type", "ss") -o:depends("type", "trojan") - -o = s:option(Flag, "switch_enable", translate("Enable Auto Switch")) -o.rmempty = false -o.default = "1" - -o = s:option(Value, "local_port", translate("Local Port")) -o.datatype = "port" -o.default = 1234 -o.rmempty = false - -if is_finded("kcptun-client") then - kcp_enable = s:option(Flag, "kcp_enable", translate("KcpTun Enable")) - kcp_enable.rmempty = true - kcp_enable.default = "0" - kcp_enable:depends("type", "ssr") - kcp_enable:depends("type", "ss") - - o = s:option(Value, "kcp_port", translate("KcpTun Port")) - o.datatype = "port" - o.default = 4000 - o:depends("type", "ssr") - o:depends("type", "ss") - - o = s:option(Value, "kcp_password", translate("KcpTun Password")) - o.password = true - o:depends("type", "ssr") - o:depends("type", "ss") - - o = s:option(Value, "kcp_param", translate("KcpTun Param")) - o.default = "--nocomp" - o:depends("type", "ssr") - o:depends("type", "ss") -end - -return m diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua deleted file mode 100644 index 6eef9db0..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua +++ /dev/null @@ -1,112 +0,0 @@ --- Copyright (C) 2017 yushi studio github.com/ywb94 --- Copyright (C) 2018 lean github.com/coolsnowwolf --- Licensed to the public under the GNU General Public License v3. -local m, s, sec, o, kcp_enable -local uci = luci.model.uci.cursor() -m = Map("shadowsocksr", translate("ShadowSocksR Plus+ Settings"), translate("

Support SS/SSR/V2RAY/XRAY/TROJAN/NAIVEPROXY/SOCKS5/TUN etc.

")) - -m:section(SimpleSection).template = "shadowsocksr/status" - -local server_table = {} -uci:foreach("shadowsocksr", "servers", function(s) - if s.alias then - server_table[s[".name"]] = "[%s]:%s" % {string.upper(s.v2ray_protocol or s.type), s.alias} - elseif s.server and s.server_port then - server_table[s[".name"]] = "[%s]:%s:%s" % {string.upper(s.v2ray_protocol or s.type), s.server, s.server_port} - end -end) - -local key_table = {} -for key, _ in pairs(server_table) do - table.insert(key_table, key) -end - -table.sort(key_table) - --- [[ Global Setting ]]-- -s = m:section(TypedSection, "global") -s.anonymous = true - -o = s:option(ListValue, "global_server", translate("Main Server")) -o:value("nil", translate("Disable")) -for _, key in pairs(key_table) do - o:value(key, server_table[key]) -end -o.default = "nil" -o.rmempty = false - -o = s:option(ListValue, "udp_relay_server", translate("Game Mode UDP Server")) -o:value("", translate("Disable")) -o:value("same", translate("Same as Global Server")) -for _, key in pairs(key_table) do - o:value(key, server_table[key]) -end - -if uci:get_first("shadowsocksr", 'global', 'netflix_enable', '0') ~= '0' then -o = s:option(ListValue, "netflix_server", translate("Netflix Node")) -o:value("nil", translate("Disable")) -o:value("same", translate("Same as Global Server")) -for _, key in pairs(key_table) do - o:value(key, server_table[key]) -end -o.default = "nil" -o.rmempty = false - -o = s:option(Flag, "netflix_proxy", translate("External Proxy Mode")) -o.rmempty = false -o.description = translate("Forward Netflix Proxy through Main Proxy") -o.default = "0" -end - -o = s:option(ListValue, "threads", translate("Multi Threads Option")) -o:value("0", translate("Auto Threads")) -o:value("1", translate("1 Thread")) -o:value("2", translate("2 Threads")) -o:value("4", translate("4 Threads")) -o:value("8", translate("8 Threads")) -o:value("16", translate("16 Threads")) -o:value("32", translate("32 Threads")) -o:value("64", translate("64 Threads")) -o:value("128", translate("128 Threads")) -o.default = "0" -o.rmempty = false - -o = s:option(ListValue, "run_mode", translate("Running Mode")) -o:value("gfw", translate("GFW List Mode")) -o:value("router", translate("IP Route Mode")) -o:value("all", translate("Global Mode")) -o:value("oversea", translate("Oversea Mode")) -o.default = gfw - -o = s:option(ListValue, "dports", translate("Proxy Ports")) -o:value("1", translate("All Ports")) -o:value("2", translate("Only Common Ports")) -o.default = 1 - -o = s:option(ListValue, "pdnsd_enable", translate("Resolve Dns Mode")) -o:value("1", translate("Use Pdnsd tcp query and cache")) -o:value("2", translate("Use DNS2SOCKS query and cache")) -o:value("0", translate("Use Local DNS Service listen port 5335")) -o.default = 1 - -o = s:option(Value, "tunnel_forward", translate("Anti-pollution DNS Server")) -o:value("8.8.4.4:53", translate("Google Public DNS (8.8.4.4)")) -o:value("8.8.8.8:53", translate("Google Public DNS (8.8.8.8)")) -o:value("208.67.222.222:53", translate("OpenDNS (208.67.222.222)")) -o:value("208.67.220.220:53", translate("OpenDNS (208.67.220.220)")) -o:value("209.244.0.3:53", translate("Level 3 Public DNS (209.244.0.3)")) -o:value("209.244.0.4:53", translate("Level 3 Public DNS (209.244.0.4)")) -o:value("4.2.2.1:53", translate("Level 3 Public DNS (4.2.2.1)")) -o:value("4.2.2.2:53", translate("Level 3 Public DNS (4.2.2.2)")) -o:value("4.2.2.3:53", translate("Level 3 Public DNS (4.2.2.3)")) -o:value("4.2.2.4:53", translate("Level 3 Public DNS (4.2.2.4)")) -o:value("1.1.1.1:53", translate("Cloudflare DNS (1.1.1.1)")) -o:value("114.114.114.114:53", translate("Oversea Mode DNS-1 (114.114.114.114)")) -o:value("114.114.115.115:53", translate("Oversea Mode DNS-2 (114.114.115.115)")) -o:depends("pdnsd_enable", "1") -o:depends("pdnsd_enable", "2") -o.description = translate("Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)") -o.datatype = "hostport" - -return m - diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua deleted file mode 100644 index 070fb5b9..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua +++ /dev/null @@ -1,143 +0,0 @@ -require "luci.ip" -require "nixio.fs" -local m, s, o - -m = Map("shadowsocksr") - -s = m:section(TypedSection, "access_control") -s.anonymous = true - --- Interface control -s:tab("Interface", translate("Interface control")) -o = s:taboption("Interface", DynamicList, "Interface", translate("Interface")) -o.template = "cbi/network_netlist" -o.widget = "checkbox" -o.nocreate = true -o.unspecified = true -o.description = translate("Listen only on the given interface or, if unspecified, on all") - --- Part of WAN -s:tab("wan_ac", translate("WAN IP AC")) - -o = s:taboption("wan_ac", DynamicList, "wan_bp_ips", translate("WAN White List IP")) -o.datatype = "ip4addr" - -o = s:taboption("wan_ac", DynamicList, "wan_fw_ips", translate("WAN Force Proxy IP")) -o.datatype = "ip4addr" - --- Part of LAN -s:tab("lan_ac", translate("LAN IP AC")) - -o = s:taboption("lan_ac", ListValue, "lan_ac_mode", translate("LAN Access Control")) -o:value("0", translate("Disable")) -o:value("w", translate("Allow listed only")) -o:value("b", translate("Allow all except listed")) -o.rmempty = false - -o = s:taboption("lan_ac", DynamicList, "lan_ac_ips", translate("LAN Host List")) -o.datatype = "ipaddr" -luci.ip.neighbors({family = 4}, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end -end) -o:depends("lan_ac_mode", "w") -o:depends("lan_ac_mode", "b") - -o = s:taboption("lan_ac", DynamicList, "lan_bp_ips", translate("LAN Bypassed Host List")) -o.datatype = "ipaddr" -luci.ip.neighbors({family = 4}, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end -end) - -o = s:taboption("lan_ac", DynamicList, "lan_fp_ips", translate("LAN Force Proxy Host List")) -o.datatype = "ipaddr" -luci.ip.neighbors({family = 4}, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end -end) - -o = s:taboption("lan_ac", DynamicList, "lan_gm_ips", translate("Game Mode Host List")) -o.datatype = "ipaddr" -luci.ip.neighbors({family = 4}, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end -end) - --- Part of Self --- s:tab("self_ac", translate("Router Self AC")) --- o = s:taboption("self_ac",ListValue, "router_proxy", translate("Router Self Proxy")) --- o:value("1", translatef("Normal Proxy")) --- o:value("0", translatef("Bypassed Proxy")) --- o:value("2", translatef("Forwarded Proxy")) --- o.rmempty = false - -s:tab("esc", translate("Bypass Domain List")) -local escconf = "/etc/ssrplus/white.list" -o = s:taboption("esc", TextValue, "escconf") -o.rows = 13 -o.wrap = "off" -o.rmempty = true -o.cfgvalue = function(self, section) - return nixio.fs.readfile(escconf) or "" -end -o.write = function(self, section, value) - nixio.fs.writefile(escconf, value:gsub("\r\n", "\n")) -end -o.remove = function(self, section, value) - nixio.fs.writefile(escconf, "") -end - -s:tab("block", translate("Black Domain List")) -local blockconf = "/etc/ssrplus/black.list" -o = s:taboption("block", TextValue, "blockconf") -o.rows = 13 -o.wrap = "off" -o.rmempty = true -o.cfgvalue = function(self, section) - return nixio.fs.readfile(blockconf) or " " -end -o.write = function(self, section, value) - nixio.fs.writefile(blockconf, value:gsub("\r\n", "\n")) -end -o.remove = function(self, section, value) - nixio.fs.writefile(blockconf, "") -end - -s:tab("denydomain", translate("Deny Domain List")) -local denydomainconf = "/etc/ssrplus/deny.list" -o = s:taboption("denydomain", TextValue, "denydomainconf") -o.rows = 13 -o.wrap = "off" -o.rmempty = true -o.cfgvalue = function(self, section) - return nixio.fs.readfile(denydomainconf) or " " -end -o.write = function(self, section, value) - nixio.fs.writefile(denydomainconf, value:gsub("\r\n", "\n")) -end -o.remove = function(self, section, value) - nixio.fs.writefile(denydomainconf, "") -end - -s:tab("netflix", translate("Netflix Domain List")) -local netflixconf = "/etc/ssrplus/netflix.list" -o = s:taboption("netflix", TextValue, "netflixconf") -o.rows = 13 -o.wrap = "off" -o.rmempty = true -o.cfgvalue = function(self, section) - return nixio.fs.readfile(netflixconf) or " " -end -o.write = function(self, section, value) - nixio.fs.writefile(netflixconf, value:gsub("\r\n", "\n")) -end -o.remove = function(self, section, value) - nixio.fs.writefile(netflixconf, "") -end - -return m diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua deleted file mode 100644 index fdf9e59f..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua +++ /dev/null @@ -1,20 +0,0 @@ -require "luci.util" -require "nixio.fs" -f = SimpleForm("logview") -f.reset = false -f.submit = false -t = f:field(TextValue, "conf") -t.rmempty = true -t.rows = 20 -function t.cfgvalue() - if nixio.fs.access("/var/log/ssrplus.log") then - local logs = luci.util.execi("cat /var/log/ssrplus.log") - local s = "" - for line in logs do - s = line .. "\n" .. s - end - return s - end -end -t.readonly = "readonly" -return f diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua deleted file mode 100644 index fe3fc4b2..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua +++ /dev/null @@ -1,150 +0,0 @@ --- Copyright (C) 2017 yushi studio --- Licensed to the public under the GNU General Public License v3. -require "luci.http" -require "luci.dispatcher" -require "nixio.fs" - -local m, s, o -local sid = arg[1] - -local encrypt_methods = { - "rc4-md5", - "rc4-md5-6", - "rc4", - "table", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf" -} - -local encrypt_methods_ss = { - -- aead - "aes-128-gcm", - "aes-192-gcm", - "aes-256-gcm", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305" - --[[ stream - "table", - "rc4", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "salsa20", - "chacha20", - "chacha20-ietf" ]] -} - -local protocol = {"origin"} - -obfs = {"plain", "http_simple", "http_post"} - -m = Map("shadowsocksr", translate("Edit ShadowSocksR Server")) - -m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/server") -if m.uci:get("shadowsocksr", sid) ~= "server_config" then - luci.http.redirect(m.redirect) - return -end - --- [[ Server Setting ]]-- -s = m:section(NamedSection, sid, "server_config") -s.anonymous = true -s.addremove = false - -o = s:option(Flag, "enable", translate("Enable")) -o.default = 1 -o.rmempty = false - -o = s:option(ListValue, "type", translate("Server Type")) -o:value("socks5", translate("Socks5")) -if nixio.fs.access("/usr/bin/ssserver") or nixio.fs.access("/usr/bin/ss-server") then - o:value("ss", translate("Shadowsocks")) -end -if nixio.fs.access("/usr/bin/ssr-server") then - o:value("ssr", translate("ShadowsocksR")) -end -o.default = "socks5" - -o = s:option(Value, "server_port", translate("Server Port")) -o.datatype = "port" -math.randomseed(tostring(os.time()):reverse():sub(1, 7)) -o.default = math.random(10240, 20480) -o.rmempty = false -o.description = translate("warning! Please do not reuse the port!") - -o = s:option(Value, "timeout", translate("Connection Timeout")) -o.datatype = "uinteger" -o.default = 60 -o.rmempty = false -o:depends("type", "ss") -o:depends("type", "ssr") - -o = s:option(Value, "username", translate("Username")) -o.rmempty = false -o:depends("type", "socks5") - -o = s:option(Value, "password", translate("Password")) -o.password = true -o.rmempty = false - -o = s:option(ListValue, "encrypt_method", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods) do - o:value(v) -end -o.rmempty = false -o:depends("type", "ssr") - -o = s:option(ListValue, "encrypt_method_ss", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ss) do - o:value(v) -end -o.rmempty = false -o:depends("type", "ss") - -o = s:option(ListValue, "protocol", translate("Protocol")) -for _, v in ipairs(protocol) do - o:value(v) -end -o.rmempty = false -o:depends("type", "ssr") - -o = s:option(ListValue, "obfs", translate("Obfs")) -for _, v in ipairs(obfs) do - o:value(v) -end -o.rmempty = false -o:depends("type", "ssr") - -o = s:option(Value, "obfs_param", translate("Obfs param(optional)")) -o:depends("type", "ssr") - -o = s:option(Flag, "fast_open", translate("TCP Fast Open")) -o.rmempty = false -o:depends("type", "ss") -o:depends("type", "ssr") - -return m diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua deleted file mode 100644 index 9af220c5..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua +++ /dev/null @@ -1,140 +0,0 @@ --- Copyright (C) 2017 yushi studio --- Licensed to the public under the GNU General Public License v3. -require "luci.http" -require "luci.dispatcher" -local m, sec, o -local encrypt_methods = { - "table", - "rc4", - "rc4-md5", - "rc4-md5-6", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf" -} - -local encrypt_methods_ss = { - -- aead - "aes-128-gcm", - "aes-192-gcm", - "aes-256-gcm", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305" - --[[ stream - "table", - "rc4", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "salsa20", - "chacha20", - "chacha20-ietf" ]] -} - -local protocol = { - "origin", - "verify_deflate", - "auth_sha1_v4", - "auth_aes128_sha1", - "auth_aes128_md5", - "auth_chain_a" -} - -obfs = { - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth", - "tls1.2_ticket_fastauth" -} - -m = Map("shadowsocksr") --- [[ Global Setting ]]-- -sec = m:section(TypedSection, "server_global", translate("Global Setting")) -sec.anonymous = true - -o = sec:option(Flag, "enable_server", translate("Enable Server")) -o.rmempty = false - --- [[ Server Setting ]]-- -sec = m:section(TypedSection, "server_config", translate("Server Setting")) -sec.anonymous = true -sec.addremove = true -sec.template = "cbi/tblsection" -sec.extedit = luci.dispatcher.build_url("admin/services/shadowsocksr/server/%s") -function sec.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(sec.extedit % sid) - return - end -end - -o = sec:option(Flag, "enable", translate("Enable")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("0") -end -o.rmempty = false - -o = sec:option(DummyValue, "type", translate("Server Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "ss" -end - -o = sec:option(DummyValue, "server_port", translate("Server Port")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "-" -end - -o = sec:option(DummyValue, "username", translate("Username")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "-" -end - -o = sec:option(DummyValue, "encrypt_method", translate("Encrypt Method")) -function o.cfgvalue(...) - local v = Value.cfgvalue(...) - return v and v:upper() or "-" -end - -o = sec:option(DummyValue, "encrypt_method_ss", translate("Encrypt Method")) -function o.cfgvalue(...) - local v = Value.cfgvalue(...) - return v and v:upper() or "-" -end - -o = sec:option(DummyValue, "protocol", translate("Protocol")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "-" -end - -o = sec:option(DummyValue, "obfs", translate("Obfs")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "-" -end - -return m diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua deleted file mode 100644 index e9734aea..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua +++ /dev/null @@ -1,151 +0,0 @@ --- Licensed to the public under the GNU General Public License v3. -require "luci.http" -require "luci.dispatcher" -require "luci.model.uci" -local m, s, o -local uci = luci.model.uci.cursor() -local server_count = 0 -uci:foreach("shadowsocksr", "servers", function(s) - server_count = server_count + 1 -end) - -m = Map("shadowsocksr", translate("Servers subscription and manage")) - --- Server Subscribe -s = m:section(TypedSection, "server_subscribe") -s.anonymous = true - -o = s:option(Flag, "auto_update", translate("Auto Update")) -o.rmempty = false -o.description = translate("Auto Update Server subscription, GFW list and CHN route") - -o = s:option(ListValue, "auto_update_time", translate("Update time (every day)")) -for t = 0, 23 do - o:value(t, t .. ":00") -end -o.default = 2 -o.rmempty = false - -o = s:option(DynamicList, "subscribe_url", translate("Subscribe URL")) -o.rmempty = true - -o = s:option(Value, "filter_words", translate("Subscribe Filter Words")) -o.rmempty = true -o.description = translate("Filter Words splited by /") - -o = s:option(Value, "save_words", translate("Subscribe Save Words")) -o.rmempty = true -o.description = translate("Save Words splited by /") - -o = s:option(Button, "update_Sub", translate("Update Subscribe List")) -o.inputstyle = "reload" -o.description = translate("Update subscribe url list first") -o.write = function() - uci:commit("shadowsocksr") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) -end - -o = s:option(Flag, "switch", translate("Subscribe Default Auto-Switch")) -o.rmempty = false -o.description = translate("Subscribe new add server default Auto-Switch on") -o.default = "1" - -o = s:option(Flag, "proxy", translate("Through proxy update")) -o.rmempty = false -o.description = translate("Through proxy update list, Not Recommended ") - -o = s:option(Button, "subscribe", translate("Update All Subscribe Severs")) -o.rawhtml = true -o.template = "shadowsocksr/subscribe" - -o = s:option(Button, "delete", translate("Delete All Subscribe Severs")) -o.inputstyle = "reset" -o.description = string.format(translate("Server Count") .. ": %d", server_count) -o.write = function() - uci:delete_all("shadowsocksr", "servers", function(s) - if s.hashkey or s.isSubscribe then - return true - else - return false - end - end) - uci:save("shadowsocksr") - uci:commit("shadowsocksr") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "delete")) - return -end - --- [[ Servers Manage ]]-- -s = m:section(TypedSection, "servers") -s.anonymous = true -s.addremove = true -s.template = "cbi/tblsection" -s.sortable = true -s.extedit = luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers", "%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - -o = s:option(DummyValue, "type", translate("Type")) -function o.cfgvalue(self, section) - return m:get(section, "v2ray_protocol") or Value.cfgvalue(self, section) or translate("None") -end - -o = s:option(DummyValue, "alias", translate("Alias")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "server_port", translate("Server Port")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "N/A" -end - -o = s:option(DummyValue, "server_port", translate("Socket Connected")) -o.template = "shadowsocksr/socket" -o.width = "10%" -o.render = function(self, section, scope) - self.transport = s:cfgvalue(section).transport - if self.transport == 'ws' then - self.ws_path = s:cfgvalue(section).ws_path - self.tls = s:cfgvalue(section).tls - end - DummyValue.render(self, section, scope) -end - -o = s:option(DummyValue, "server", translate("Ping Latency")) -o.template = "shadowsocksr/ping" -o.width = "10%" - -local global_server = uci:get_first('shadowsocksr', 'global', 'global_server') - -node = s:option(Button, "apply_node", translate("Apply")) -node.inputstyle = "apply" -node.render = function(self, section, scope) - if section == global_server then - self.title = translate("Reapply") - else - self.title = translate("Apply") - end - Button.render(self, section, scope) -end -node.write = function(self, section) - uci:set("shadowsocksr", '@global[0]', 'global_server', section) - uci:save("shadowsocksr") - uci:commit("shadowsocksr") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "restart")) -end - -o = s:option(Flag, "switch_enable", translate("Auto Switch")) -o.rmempty = false -function o.cfgvalue(...) - return Value.cfgvalue(...) or 1 -end - -m:append(Template("shadowsocksr/server_list")) - -return m diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua deleted file mode 100644 index 64f9be4a..00000000 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua +++ /dev/null @@ -1,195 +0,0 @@ --- Copyright (C) 2017 yushi studio --- Licensed to the public under the GNU General Public License v3. -require "nixio.fs" -require "luci.sys" -require "luci.model.uci" -local m, s, o -local redir_run = 0 -local reudp_run = 0 -local sock5_run = 0 -local server_run = 0 -local kcptun_run = 0 -local tunnel_run = 0 -local gfw_count = 0 -local ad_count = 0 -local ip_count = 0 -local nfip_count = 0 -local Process_list = luci.sys.exec("busybox ps -w") -local uci = luci.model.uci.cursor() --- html constants -font_blue = [[]] -style_blue = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] -local kcptun_version = translate("Unknown") -local kcp_file = "/usr/bin/kcptun-client" -if not nixio.fs.access(kcp_file) then - kcptun_version = translate("Not exist") -else - if not nixio.fs.access(kcp_file, "rwx", "rx", "rx") then - nixio.fs.chmod(kcp_file, 755) - end - kcptun_version = "" ..luci.sys.exec(kcp_file .. " -v | awk '{printf $3}'") .. "" - if not kcptun_version or kcptun_version == "" then - kcptun_version = translate("Unknown") - end -end - -if nixio.fs.access("/etc/ssrplus/gfw_list.conf") then - gfw_count = tonumber(luci.sys.exec("cat /etc/ssrplus/gfw_list.conf | wc -l")) / 2 -end - -if nixio.fs.access("/etc/ssrplus/ad.conf") then - ad_count = tonumber(luci.sys.exec("cat /etc/ssrplus/ad.conf | wc -l")) -end - -if nixio.fs.access("/etc/ssrplus/china_ssr.txt") then - ip_count = tonumber(luci.sys.exec("cat /etc/ssrplus/china_ssr.txt | wc -l")) -end - -if nixio.fs.access("/etc/ssrplus/netflixip.list") then - nfip_count = tonumber(luci.sys.exec("cat /etc/ssrplus/netflixip.list | wc -l")) -end - -if Process_list:find("udp.only.ssr.reudp") then - reudp_run = 1 -end - -if Process_list:find("tcp.only.ssr.retcp") then - redir_run = 1 -end - -if Process_list:find("tcp.udp.ssr.local") then - sock5_run = 1 -end - -if Process_list:find("tcp.udp.ssr.retcp") then - redir_run = 1 - reudp_run = 1 -end - -if Process_list:find("local.ssr.retcp") then - redir_run = 1 - sock5_run = 1 -end - -if Process_list:find("local.udp.ssr.retcp") then - reudp_run = 1 - redir_run = 1 - sock5_run = 1 -end - -if Process_list:find("kcptun.client") then - kcptun_run = 1 -end - -if Process_list:find("ssr.server") then - server_run = 1 -end - -if Process_list:find("ssrplus/bin/pdnsd") or (Process_list:find("ssrplus.dns") and Process_list:find("dns2socks.127.0.0.1.*127.0.0.1.5335")) then - pdnsd_run = 1 -end - -m = SimpleForm("Version") -m.reset = false -m.submit = false - -s = m:field(DummyValue, "redir_run", translate("Global Client")) -s.rawhtml = true -if redir_run == 1 then - s.value = font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else - s.value = style_blue .. bold_on .. translate("Not Running") .. bold_off .. font_off -end - -s = m:field(DummyValue, "reudp_run", translate("Game Mode UDP Relay")) -s.rawhtml = true -if reudp_run == 1 then - s.value = font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else - s.value = style_blue .. bold_on .. translate("Not Running") .. bold_off .. font_off -end - -if uci:get_first("shadowsocksr", 'global', 'pdnsd_enable', '0') ~= '0' then - s = m:field(DummyValue, "pdnsd_run", translate("DNS Anti-pollution")) - s.rawhtml = true - if pdnsd_run == 1 then - s.value = font_blue .. bold_on .. translate("Running") .. bold_off .. font_off - else - s.value = style_blue .. bold_on .. translate("Not Running") .. bold_off .. font_off - end -end - -s = m:field(DummyValue, "sock5_run", translate("Global SOCKS5 Proxy Server")) -s.rawhtml = true -if sock5_run == 1 then - s.value = font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else - s.value = style_blue .. bold_on .. translate("Not Running") .. bold_off .. font_off -end - -s = m:field(DummyValue, "server_run", translate("Local Servers")) -s.rawhtml = true -if server_run == 1 then - s.value = font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else - s.value = style_blue .. bold_on .. translate("Not Running") .. bold_off .. font_off -end - -if nixio.fs.access("/usr/bin/kcptun-client") then - s = m:field(DummyValue, "kcp_version", translate("KcpTun Version")) - s.rawhtml = true - s.value = kcptun_version - s = m:field(DummyValue, "kcptun_run", translate("KcpTun")) - s.rawhtml = true - if kcptun_run == 1 then - s.value = font_blue .. bold_on .. translate("Running") .. bold_off .. font_off - else - s.value = style_blue .. bold_on .. translate("Not Running") .. bold_off .. font_off - end -end - -s = m:field(DummyValue, "google", translate("Google Connectivity")) -s.value = translate("No Check") -s.template = "shadowsocksr/check" - -s = m:field(DummyValue, "baidu", translate("Baidu Connectivity")) -s.value = translate("No Check") -s.template = "shadowsocksr/check" - -s = m:field(DummyValue, "gfw_data", translate("GFW List Data")) -s.rawhtml = true -s.template = "shadowsocksr/refresh" -s.value = gfw_count .. " " .. translate("Records") - -s = m:field(DummyValue, "ip_data", translate("China IP Data")) -s.rawhtml = true -s.template = "shadowsocksr/refresh" -s.value = ip_count .. " " .. translate("Records") - -if uci:get_first("shadowsocksr", 'global', 'netflix_enable', '0') ~= '0' then -s = m:field(DummyValue, "nfip_data", translate("Netflix IP Data")) -s.rawhtml = true -s.template = "shadowsocksr/refresh" -s.value = nfip_count .. " " .. translate("Records") -end - -if uci:get_first("shadowsocksr", 'global', 'adblock', '0') == '1' then - s = m:field(DummyValue, "ad_data", translate("Advertising Data")) - s.rawhtml = true - s.template = "shadowsocksr/refresh" - s.value = ad_count .. " " .. translate("Records") -end - -if uci:get_first("shadowsocksr", 'global', 'pdnsd_enable', '0') == '1' then - s = m:field(DummyValue, "cache", translate("Reset pdnsd cache")) - s.template = "shadowsocksr/cache" -end - -s = m:field(DummyValue, "check_port", translate("Check Server Port")) -s.template = "shadowsocksr/checkport" -s.value = translate("No Check") - -return m diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/cache.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/cache.htm deleted file mode 100644 index 8c162f18..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/cache.htm +++ /dev/null @@ -1,29 +0,0 @@ -<%+cbi/valueheader%> - - -<%=self.value%> -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm deleted file mode 100644 index f34f04d7..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm +++ /dev/null @@ -1,4 +0,0 @@ -<%+cbi/valueheader%> - - -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm deleted file mode 100644 index 5f6a673a..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm +++ /dev/null @@ -1,29 +0,0 @@ -<%+cbi/valueheader%> - - -<%=self.value%> -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm deleted file mode 100644 index 56ee0ab2..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm +++ /dev/null @@ -1,25 +0,0 @@ -<%+cbi/valueheader%> - - -<%=self.value%> -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ping.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ping.htm deleted file mode 100644 index 5b396f7c..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ping.htm +++ /dev/null @@ -1,3 +0,0 @@ -<%+cbi/valueheader%> --- ms -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm deleted file mode 100644 index da89fd53..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm +++ /dev/null @@ -1,37 +0,0 @@ -<%+cbi/valueheader%> - - -<%=self.value%> -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm deleted file mode 100644 index 1882ac56..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/reset.htm +++ /dev/null @@ -1,25 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm deleted file mode 100644 index 259cb7ff..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm +++ /dev/null @@ -1,145 +0,0 @@ -<%# - Copyright 2018-2019 Lienol - Licensed to the public under the Apache License 2.0. --%> - diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm deleted file mode 100644 index 7b7b691f..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm +++ /dev/null @@ -1,6 +0,0 @@ -<%+cbi/valueheader%> -wait - - - -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm deleted file mode 100644 index b9711180..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm +++ /dev/null @@ -1,366 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm deleted file mode 100644 index 58bf67f2..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm +++ /dev/null @@ -1,22 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm deleted file mode 100644 index 47bf6ab5..00000000 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm +++ /dev/null @@ -1,18 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/luci-app-ssr-plus/po/zh-cn/ssr-plus.po b/luci-app-ssr-plus/po/zh-cn/ssr-plus.po deleted file mode 100644 index b4f69606..00000000 --- a/luci-app-ssr-plus/po/zh-cn/ssr-plus.po +++ /dev/null @@ -1,758 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "ShadowSocksR Client" -msgstr "ShadowSocksR 客户端" - -msgid "Enable" -msgstr "启用" - -msgid "Disable" -msgstr "停用" - -msgid "Log" -msgstr "日志" - -msgid "ShadowSocksR is running" -msgstr "ShadowSocksR 客户端运行中" - -msgid "ShadowSocksR is not running" -msgstr "ShadowSocksR 客户端未运行" - -msgid "Global Setting" -msgstr "全局设置" - -msgid "Global Server" -msgstr "全局服务器" - -msgid "ShadowSocksR SOCK5 Proxy is running" -msgstr "ShadowSocksR SOCK5代理运行中" - -msgid "UDP Relay Server" -msgstr "UDP中继服务器" - -msgid "Same as Global Server" -msgstr "与全局服务器相同" - -msgid "Servers Setting" -msgstr "服务器配置" - -msgid "Alias(optional)" -msgstr "别名(可选)" - -msgid "Onetime Authentication" -msgstr "一次验证" - -msgid "Server Address" -msgstr "服务器地址" - -msgid "Server Port" -msgstr "端口" - -msgid "Local Port" -msgstr "本地端口" - -msgid "Connection Timeout" -msgstr "连接超时" - -msgid "Password" -msgstr "密码" - -msgid "Encrypt Method" -msgstr "加密方式" - -msgid "VLESS Encryption" -msgstr "VLESS 加密" - -msgid "Flow" -msgstr "流控 (Flow)" - -msgid "Transport" -msgstr "传输协议" - -msgid "Protocol" -msgstr "传输协议" - -msgid "allowInsecure" -msgstr "允许不安全连接" - -msgid "Concurrency" -msgstr "最大并发连接数" - -msgid "If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates." -msgstr "是否允许不安全连接。当选择时,将不会检查远端主机所提供的 TLS 证书的有效性。" - -msgid "Protocol param(optional)" -msgstr "传输协议参数(可选)" - -msgid "Obfs" -msgstr "混淆插件" - -msgid "Obfs param(optional)" -msgstr "混淆参数(可选)" - -msgid "Enable Tunnel(DNS)" -msgstr "启用隧道(DNS)转发" - -msgid "Tunnel Port" -msgstr "隧道(DNS)本地端口" - -msgid "Forwarding Tunnel" -msgstr "隧道(DNS)转发地址" - -msgid "Access Control" -msgstr "访问控制" - -msgid "Interfaces - WAN" -msgstr "接口 - WAN" - -msgid "Bypassed IP List" -msgstr "被忽略IP列表" - -msgid "NULL - As Global Proxy" -msgstr "留空 - 作为全局代理" - -msgid "Bypassed IP" -msgstr "额外被忽略IP" - -msgid "Forwarded IP" -msgstr "强制走代理IP" - -msgid "Interfaces - LAN" -msgstr "接口 - LAN" - -msgid "LAN Access Control" -msgstr "内网客户端分流代理控制" - -msgid "Allow listed only" -msgstr "仅允许列表内主机" - -msgid "Allow all except listed" -msgstr "除列表外主机皆允许" - -msgid "LAN Host List" -msgstr "内网主机列表" - -msgid "SSR Client" -msgstr "客户端" - -msgid "SSR Server" -msgstr "服务端" - -msgid "ShadowSocksR Server" -msgstr "ShadowSocksR 服务端" - -msgid "ShadowSocksR Server is running" -msgstr "ShadowSocksR 服务端运行中" - -msgid "ShadowSocksR Server is not running" -msgstr "ShadowSocksR 服务端未运行" - -msgid "Enable Server" -msgstr "启动服务端" - -msgid "Server Setting" -msgstr "服务端配置" - -msgid "KcpTun Enable" -msgstr "KcpTun 启用" - -msgid "KcpTun Port" -msgstr "KcpTun 端口" - -msgid "KcpTun Param" -msgstr "KcpTun 参数" - -msgid "KcpTun Password" -msgstr "KcpTun 密码" - -msgid "Enable Process Monitor" -msgstr "启用进程监控" - -msgid "Edit ShadowSocksR Server" -msgstr "编辑服务器配置" - -msgid "Alias" -msgstr "别名" - -msgid "Server" -msgstr "服务器" - -msgid "TCP Fast Open" -msgstr "TCP快速打开" - -msgid "Status" -msgstr "状态" - -msgid "Unknown" -msgstr "未知" - -msgid "Running Status" -msgstr "运行状态" - -msgid "Global Client" -msgstr "TCP透明代理" - -msgid "Global SSR Server" -msgstr "SSR服务端" - -msgid "DNS Tunnel" -msgstr "DNS 隧道" - -msgid "IPK Version" -msgstr "IPK 版本号" - -msgid "KcpTun Version" -msgstr "KcpTun 版本号" - -msgid "Not exist" -msgstr "未安装可执行文件" - -msgid "IPK Installation Time" -msgstr "IPK 安装时间" - -msgid "Project" -msgstr "项目地址" - -msgid "Not Running" -msgstr "未运行" - -msgid "Running" -msgstr "运行中" - -msgid "Enable GFW mode" -msgstr "启用 GFW 模式" - -msgid "Running Mode" -msgstr "运行模式" - -msgid "IP Route Mode" -msgstr "绕过中国大陆IP模式" - -msgid "GFW List Mode" -msgstr "GFW列表模式" - -msgid "Global Mode" -msgstr "全局模式" - -msgid "Oversea Mode" -msgstr "海外用户回国模式" - -msgid "Router Proxy" -msgstr "路由器访问控制" - -msgid "Normal Proxy" -msgstr "正常代理" - -msgid "Bypassed Proxy" -msgstr "不走代理" - -msgid "Forwarded Proxy" -msgstr "强制走代理" - -msgid "UDP Relay" -msgstr "UDP中继" - -msgid "Google Connectivity" -msgstr "【谷歌】连通性检查" - -msgid "Baidu Connectivity" -msgstr "【百度】连通性检查" - -msgid "No Check" -msgstr "未检查" - -msgid "Check" -msgstr "检查" - -msgid "Connect OK" -msgstr "连接正常" - -msgid "Connect Error" -msgstr "连接错误" - -msgid "Check..." -msgstr "正在检查.." - -msgid "Proxy Check" -msgstr "代理检查" - -msgid "GFW List Data" -msgstr "【GFW列表】数据库" - -msgid "China IP Data" -msgstr "【国内IP段】数据库" - -msgid "Netflix IP Data" -msgstr "【Netflix IP段】数据库" - -msgid "Advertising Data" -msgstr "【广告屏蔽】数据库" - -msgid "Records" -msgstr "条记录" - -msgid "Refresh Data" -msgstr "更新数据库" - -msgid "Refresh..." -msgstr "正在更新,请稍候.." - -msgid "Refresh OK!" -msgstr "更新成功!" - -msgid "Refresh Error!" -msgstr "更新失败!" - -msgid "No new data!" -msgstr "你已经是最新数据,无需更新!" - -msgid "Total Records:" -msgstr "新的总纪录数:" - -msgid "Check Server Port" -msgstr "【服务器端口】检查" - -msgid "Check Connect" -msgstr "检查连通性" - -msgid "Check Server" -msgstr "检查服务器" - -msgid "Auto Switch" -msgstr "自动切换" - -msgid "Enable Auto Switch" -msgstr "启用自动切换" - -msgid "Switch check cycly(second)" -msgstr "自动切换检查周期(秒)" - -msgid "Check timout(second)" -msgstr "切换检查超时时间(秒)" - -msgid "Check Try Count" -msgstr "切换检查重试次数" - -msgid "Enable adblock" -msgstr "启用广告屏蔽" - -msgid "adblock_url" -msgstr "广告屏蔽更新URL" - -msgid "gfwlist Update url" -msgstr "GFWList更新URL" - -msgid "Chnroute Update url" -msgstr "国内IP段更新URL" - -msgid "nfip_url" -msgstr "Netflix IP段更新URL" - -msgid "Customize Netflix IP Url" -msgstr "自定义Netflix IP更新URL(默认项目地址:https://github.com/QiuSimons/Netflix_IP)" - -msgid "Enable Process Deamon" -msgstr "启用进程自动守护" - -msgid "DNS Server IP and Port" -msgstr "DNS服务器地址和端口" - -msgid "Resolve Dns Mode" -msgstr "DNS解析方式" - -msgid "Use SSR DNS Tunnel" -msgstr "使用SSR-DNS隧道" - -msgid "Use Pdnsd" -msgstr "使用Pdnsd" - -msgid "DNS Anti-pollution" -msgstr "DNS 防污染服务" - -msgid "Use Other DNS Tunnel(Need to install)" -msgstr "使用其他DNS转发(需要自己安装)" - -msgid "Import" -msgstr "导入配置信息" - -msgid "Export SSR" -msgstr "导出ssr配置信息" - -msgid "Import configuration information successfully." -msgstr "导入配置信息成功。" - -msgid "Invalid format." -msgstr "无效的格式。" - -msgid "User cancelled." -msgstr "用户已取消。" - -msgid "Paste sharing link here" -msgstr "在此处粘贴分享链接" - -msgid "Unable to copy SSR to clipboard." -msgstr "无法复制SSR网址到剪贴板。" - -msgid "Copy SSR to clipboard successfully." -msgstr "成功复制SSR网址到剪贴板。" - -msgid "Servers Manage" -msgstr "服务器管理" - -msgid "Auto Update" -msgstr "自动更新" - -msgid "Through proxy update" -msgstr "通过代理更新" - -msgid "GFW List" -msgstr "GFW列表" - -msgid "ShadowSocksR Plus+ Settings" -msgstr "ShadowSocksR Plus+ 设置" - -msgid "

Support SS/SSR/V2RAY/XRAY/TROJAN/NAIVEPROXY/SOCKS5/TUN etc.

" -msgstr "

支持 SS/SSR/V2RAY/XRAY/TROJAN/NAIVEPROXY/SOCKS5/TUN 等协议

" - -msgid "Main Server" -msgstr "主服务器" - -msgid "Anti-pollution DNS Server" -msgstr "访问国外域名DNS服务器" - -msgid "Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)" -msgstr "格式为 IP:PORT (默认: 8.8.4.4:53)" - -msgid "Use Pdnsd tcp query and cache" -msgstr "使用PDNSD TCP查询并缓存" - -msgid "Use DNS2SOCKS query and cache" -msgstr "使用 DNS2SOCKS 查询并缓存" - -msgid "DNS Server IP:Port" -msgstr "DNS服务器 IP:Port" - -msgid "Update time (every day)" -msgstr "更新时间 (每天)" - -msgid "Auto Update Server subscription, GFW list and CHN route" -msgstr "自动更新服务器订阅、GFW列表和 CHN路由表" - -msgid "Subscribe URL" -msgstr "SS/SSR/V2/TROJAN订阅URL" - -msgid "Subscribe Filter Words" -msgstr "订阅节点关键字过滤" - -msgid "Subscribe Save Words" -msgstr "订阅节点关键字保留检查" - -msgid "Filter Words splited by /" -msgstr "命中关键字的节点将被丢弃。多个关键字用 / 分隔" - -msgid "Save Words splited by /" -msgstr "命中关键字的节点将被保留。多个关键字用 / 分隔。此项为空则不启用保留匹配" - -msgid "Update" -msgstr "更新" - -msgid "Server Count" -msgstr "服务器节点数量" - -msgid "Interface control" -msgstr "接口控制" - -msgid "WAN IP AC" -msgstr "WAN IP访问控制" - -msgid "WAN White List IP" -msgstr "不走代理的WAN IP" - -msgid "WAN Force Proxy IP" -msgstr "强制走代理的WAN IP" - -msgid "LAN Bypassed Host List" -msgstr "不走代理的局域网LAN IP" - -msgid "LAN Force Proxy Host List" -msgstr "全局代理的LAN IP" - -msgid "Router Self AC" -msgstr "路由器自身代理设置" - -msgid "Router Self Proxy" -msgstr "路由器自身代理方式" - -msgid "Normal Proxy" -msgstr "跟随全局设置" - -msgid "Bypassed Proxy" -msgstr "不走代理" - -msgid "Forwarded Proxy" -msgstr "全局代理" - -msgid "GFW Custom List" -msgstr "GFW 用户自定义列表" - -msgid "Please refer to the following writing" -msgstr "每行一个域名,无需写前面的 HTTP(S):// ,提交后即时生效" - -msgid "Servers subscription and manage" -msgstr "服务器节点订阅与管理" - -msgid "Through proxy update list, Not Recommended" -msgstr "通过路由器自身代理更新订阅" - -msgid "LAN IP AC" -msgstr "LAN IP访问控制" - -msgid "Game Mode UDP Server" -msgstr "游戏模式UDP中继服务器" - -msgid "Game Mode UDP Relay" -msgstr "游戏模式UDP中继" - -msgid "Server failsafe auto swith and custom update settings" -msgstr "服务器节点故障自动切换/广告屏蔽/国内IP段数据库更新设置" - -msgid "Support AdGuardHome and DNSMASQ format list" -msgstr "同时支持 AdGuard Home 和 DNSMASQ 格式的过滤列表" - -msgid "Delete All Subscribe Severs" -msgstr "删除所有订阅服务器节点" - -msgid "Severs Nodes" -msgstr "服务器节点" - -msgid "Use Local DNS Service listen port 5335" -msgstr "使用本机端口为5335的DNS服务" - -msgid "Server Node Type" -msgstr "服务器节点类型" - -msgid "Using incorrect encryption mothod may causes service fail to start" -msgstr "输入不正确的参数组合可能会导致服务无法启动" - -msgid "Game Mode Host List" -msgstr "增强游戏模式客户端LAN IP" - -msgid "Multi Threads Option" -msgstr "多线程并发转发" - -msgid "Auto Threads" -msgstr "自动(CPU线程数)" - -msgid "1 Thread" -msgstr "单线程" - -msgid "2 Threads" -msgstr "2 线程" - -msgid "4 Threads" -msgstr "4 线程" - -msgid "8 Threads" -msgstr "8 线程" - -msgid "16 Threads" -msgstr "16 线程" - -msgid "32 Threads" -msgstr "32 线程" - -msgid "64 Threads" -msgstr "64 线程" - -msgid "128 Threads" -msgstr "128 线程" - -msgid "Proxy Ports" -msgstr "需要代理的端口" - -msgid "All Ports" -msgstr "所有端口(默认)" - -msgid "Only Common Ports" -msgstr "仅常用端口(不走P2P流量到代理)" - -msgid "Socket Connected" -msgstr "连接测试" - -msgid "Ping Latency" -msgstr "Ping延迟" - -msgid "Bypass Domain List" -msgstr "不走代理的域名" - -msgid "Black Domain List" -msgstr "强制走代理的域名" - -msgid "Update Subscribe List" -msgstr "更新订阅URL列表" - -msgid "Update subscribe url list first" -msgstr "修改订阅URL和节点关键字后,请先点击更新" - -msgid "Update All Subscribe Severs" -msgstr "更新所有订阅服务器节点" - -msgid "Plugin" -msgstr "插件" - -msgid "Plugin Opts" -msgstr "插件参数" - -msgid "Self-signed Certificate" -msgstr "自签证书" - -msgid "If you have a self-signed certificate,please check the box" -msgstr "如果你使用自签证书,请选择" - -msgid "upload" -msgstr "上传" - -msgid "Upload" -msgstr "上传" - -msgid "No specify upload file." -msgstr "没有上传证书" - -msgid "Current Certificate Path" -msgstr "当前证书路径" - -msgid "Please confirm the current certificate path" -msgstr "请选择确认所传证书,证书不正确将无法运行" - -msgid "Subscribe Default Auto-Switch" -msgstr "订阅新节点自动切换设置" - -msgid "Subscribe new add server default Auto-Switch on" -msgstr "订阅加入的新节点默认开启自动切换" - -msgid "SOCKS5 Proxy Server Settings" -msgstr "SOCKS5 代理服务端设置" - -msgid "SOCKS5 Proxy Server" -msgstr "SOCKS5 代理服务端" - -msgid "Enable SOCKS5 Proxy Server" -msgstr "启用 SOCKS5 代理服务" - -msgid "Enable Authentication" -msgstr "启用用户名/密码认证" - -msgid "Enable SOCKS5 Proxy Server" -msgstr "启用 SOCKS5 代理服务" - -msgid "Enable WAN Access" -msgstr "允许从 WAN 访问" - -msgid "Redirect traffic to this network interface" -msgstr "分流到这个网络接口" - -msgid "Netflix Node" -msgstr "Netflix 分流服务器" - -msgid "Netflix Domain List" -msgstr "Netflix 分流域名列表" - -msgid "Netflix IP List" -msgstr "Netflix 分流IP列表" - -msgid "External Proxy Mode" -msgstr "分流服务器(前置)代理" - -msgid "Forward Netflix Proxy through Main Proxy" -msgstr "分流服务器流量通过主服务节点中转代理转发" - -msgid "Server Type" -msgstr "服务端类型" - -msgid "Local Servers" -msgstr "本机服务端" - -msgid "Global SOCKS5 Proxy Server" -msgstr "SOCKS5 代理服务端(全局)" - -msgid "warning! Please do not reuse the port!" -msgstr "警告!请不要重复使用端口!" - -msgid "Deny Domain List" -msgstr "禁止连接的域名" - -msgid "Obfuscate password (optional)" -msgstr "混淆密码(可选)" - -msgid "V2Ray/XRay protocol" -msgstr "V2Ray/XRay 协议" - -msgid "Camouflage Type" -msgstr "伪装类型" - -msgid "VideoCall (SRTP)" -msgstr "视频通话 (SRTP)" - -msgid "BitTorrent (uTP)" -msgstr "BT下载 (uTP)" - -msgid "WechatVideo" -msgstr "微信视频通话" - -msgid "DTLS 1.2" -msgstr "DTLS 1.2 数据包" - -msgid "WireGuard" -msgstr "WireGuard 数据包" - -msgid "MTU" -msgstr "最大传输单元" - -msgid "TTI" -msgstr "传输时间间隔" - -msgid "Uplink Capacity" -msgstr "上行链路容量" - -msgid "Downlink Capacity" -msgstr "下行链路容量" - -msgid "Read Buffer Size" -msgstr "读取缓冲区大小" - -msgid "Write Buffer Size" -msgstr "写入缓冲区大小" - -msgid "Congestion" -msgstr "拥塞控制" - -msgid "Network interface to use" -msgstr "使用的网络接口" - -msgid "Please fill in reset" -msgstr "请填写 reset" - -msgid "The content entered is incorrect!" -msgstr "输入的内容不正确!" - -msgid "Reset complete" -msgstr "重置完成" - -msgid "Reset Error" -msgstr "重置错误" - -msgid "Reset pdnsd cache" -msgstr "重置PDNSD缓存" - -msgid "Finger Print" -msgstr "指纹伪造" - -msgid "Reapply" -msgstr "重新应用" - -msgid "Apply" -msgstr "应用" - -msgid "Enable Netflix Mode" -msgstr "启用 Netflix 分流模式" diff --git a/luci-app-ssr-plus/po/zh_Hans b/luci-app-ssr-plus/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-ssr-plus/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-ssr-plus/root/etc/config/shadowsocksr b/luci-app-ssr-plus/root/etc/config/shadowsocksr deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr deleted file mode 100755 index ef72038a..00000000 --- a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr +++ /dev/null @@ -1,928 +0,0 @@ -#!/bin/sh /etc/rc.common -# -# Copyright (C) 2017 openwrt-ssr -# Copyright (C) 2017 yushi studio -# Copyright (C) 2018 lean -# Copyright (C) 2020 Mattraks -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -START=95 -STOP=15 -SERVICE_DAEMONIZE=1 -NAME=shadowsocksr -LOCK_FILE=/var/lock/ssrplus.lock -LOG_FILE=/var/log/ssrplus.log -TMP_PATH=/var/etc/ssrplus -TMP_BIN_PATH=$TMP_PATH/bin -TMP_DNSMASQ_PATH=/tmp/dnsmasq.d/dnsmasq-ssrplus.d -tcp_config_file= -udp_config_file= -shunt_config_file= -local_config_file= -shunt_dns_config_file= -tmp_local_port= -ARG_UDP= -dns_port="5335" #dns port -tmp_dns_port="300" #dns2socks temporary port -tmp_udp_port="301" #udp temporary port -tmp_udp_local_port="302" #udp socks temporary port -tmp_shunt_port="303" #shunt temporary port -tmp_shunt_local_port="304" #shunt socks temporary port -tmp_shunt_dns_port="305" #shunt dns2socks temporary port -server_count=0 -redir_tcp=0 -redir_udp=0 -local_enable=0 -kcp_enable_flag=0 -pdnsd_enable_flag=0 -switch_server=$1 -CRON_FILE=/etc/crontabs/root -EXTRA_COMMANDS='reset' -EXTRA_HELP=" reset Reset to default settings" -#extra_command "reset" "Reset to default settings" -PS="/bin/busybox ps" - -uci_get_by_name() { - local ret=$(uci get $NAME.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_get_by_type() { - local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_set_by_name() { - uci set $NAME.$1.$2=$3 2>/dev/null - uci commit $NAME -} - -uci_set_by_type() { - uci set $NAME.@$1[0].$2=$3 2>/dev/null - uci commit $NAME -} - -uci_get_by_cfgid() { - local ret=$(uci show $NAME.@$1[0].$2 | awk -F '.' '{print $2}' 2>/dev/null) - echo ${ret:=$3} -} - -get_host_ip() { - local host=$(uci_get_by_name $1 server) - local ip=$host - if [ -z "$(echo $host | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}")" ]; then - if [ "$host" == "${host#*:[0-9a-fA-F]}" ]; then - ip=$(resolveip -4 -t 3 $host | awk 'NR==1{print}') - [ -z "$ip" ] && ip=$(uclient-fetch -q -O- http://119.29.29.29/d?dn=$host | awk -F ';' '{print $1}') - fi - fi - [ -z "$ip" ] || uci_set_by_name $1 ip $ip - echo ${ip:="$(uci_get_by_name $1 ip "ERROR")"} -} - -clean_log() { - local logsnum=$(cat $LOG_FILE 2>/dev/null | wc -l) - [ "$logsnum" -gt 1000 ] && { - echo "$(date "+%Y-%m-%d %H:%M:%S") 日志文件过长,清空处理!" >$LOG_FILE - } -} - -echolog() { - local d="$(date "+%Y-%m-%d %H:%M:%S")" - echo -e "$d: $*" >>$LOG_FILE -} - -add_cron() { - touch $CRON_FILE - sed -i '/ssrplus.log/d' $CRON_FILE - [ $(uci_get_by_type server_subscribe auto_update 0) -eq 1 ] && echo "0 $(uci_get_by_type server_subscribe auto_update_time) * * * /usr/share/shadowsocksr/ssrplusupdate.sh >$LOG_FILE" >>$CRON_FILE - crontab $CRON_FILE -} - -del_cron() { - touch $CRON_FILE - sed -i '/ssrplus.log/d' $CRON_FILE - crontab $CRON_FILE - clean_log -} - -set_lock() { - exec 1000>"$LOCK_FILE" - flock -xn 1000 -} - -unset_lock() { - flock -u 1000 - rm -rf "$LOCK_FILE" -} - -unlock() { - failcount=1 - while [ "$failcount" -le 10 ]; do - if [ -f "$LOCK_FILE" ]; then - let "failcount++" - sleep 1s - [ "$failcount" -ge 10 ] && unset_lock - else - break - fi - done -} - -_exit() { - local rc=$1 - unset_lock - exit ${rc} -} - -first_type() { - type -t -p "/bin/${1}" -p "${TMP_BIN_PATH}/${1}" -p "${1}" "$@" | head -n1 -} - -ln_start_bin() { - local file_func=${1} - local ln_name=${2} - shift 2 - if [ "${file_func%%/*}" != "${file_func}" ]; then - [ ! -L "${file_func}" ] && { - ln -s "${file_func}" "${TMP_BIN_PATH}/${ln_name}" >/dev/null 2>&1 - file_func="${TMP_BIN_PATH}/${ln_name}" - } - [ -x "${file_func}" ] || echolog "$(readlink ${file_func}) 没有执行权限,无法启动:${file_func} $*" - fi - #echo "${file_func} $*" >&2 - [ -x "${file_func}" ] || { - echolog "找不到 ${file_func},无法启动..." - echolog "-----------end------------" - _exit 2 - } - ${file_func:-echolog " - ${ln_name}"} "$@" >/dev/null 2>&1 & -} - -start_dns() { - local ssrplus_dns="$(uci_get_by_type global pdnsd_enable 0)" - local dnsstr="$(uci_get_by_type global tunnel_forward 8.8.4.4:53)" - local dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}') - local dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}') - start_pdnsd() { - local usr_dns="$1" - local usr_port="$2" - if [ ! -f "$TMP_PATH/pdnsd/pdnsd.cache" ]; then - mkdir -p $TMP_PATH/pdnsd - touch $TMP_PATH/pdnsd/pdnsd.cache - chown -R nobody:nogroup $TMP_PATH/pdnsd - fi - cat <<-EOF >$TMP_PATH/pdnsd.conf - global{ - perm_cache=1024; - cache_dir="$TMP_PATH/pdnsd"; - pid_file="/var/run/pdnsd.pid"; - run_as="nobody"; - server_ip=127.0.0.1; - server_port=$dns_port; - status_ctl=on; - query_method=tcp_only; - min_ttl=1h; - max_ttl=1w; - timeout=10; - neg_domain_pol=on; - proc_limit=2; - procq_limit=8; - par_queries=1; - } - server{ - label="ssr-usrdns"; - ip=$usr_dns; - port=$usr_port; - timeout=6; - uptest=none; - interval=10m; - purge_cache=off; - } - EOF - ln_start_bin $(first_type pdnsd) pdnsd -c $TMP_PATH/pdnsd.conf - } - if [ "$ssrplus_dns" != "0" ]; then - case "$(uci_get_by_type global run_mode)" in - gfw) ipset add gfwlist $dnsserver 2>/dev/null ;; - oversea) ipset add oversea $dnsserver 2>/dev/null ;; - *) ipset add ss_spec_wan_ac $dnsserver nomatch 2>/dev/null ;; - esac - case "$ssrplus_dns" in - 1) - start_pdnsd $dnsserver $dnsport - pdnsd_enable_flag=1 - ;; - 2) - ln_start_bin $(first_type microsocks) microsocks -i 127.0.0.1 -p $tmp_dns_port ssrplus-dns - ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_dns_port $dnsserver:$dnsport 127.0.0.1:$dns_port -q - pdnsd_enable_flag=2 - ;; - esac - fi -} - -gen_service_file() { - if [ $(uci_get_by_name $2 fast_open) == "1" ]; then - local fastopen="true" - else - local fastopen="false" - fi - if [ $1 == "ssr" ]; then - cat <<-EOF >$3 - { - "server": "0.0.0.0", - "server_ipv6": "::", - "server_port": $(uci_get_by_name $2 server_port), - "mode": "tcp_and_udp", - "password": "$(uci_get_by_name $2 password)", - "timeout": $(uci_get_by_name $2 timeout 60), - "method": "$(uci_get_by_name $2 encrypt_method)", - "protocol": "$(uci_get_by_name $2 protocol)", - "protocol_param": "$(uci_get_by_name $2 protocol_param)", - "obfs": "$(uci_get_by_name $2 obfs)", - "obfs_param": "$(uci_get_by_name $2 obfs_param)", - "fast_open": $fastopen - } - EOF - else - cat <<-EOF >$3 - { - "server": "0.0.0.0", - "server_ipv6": "::", - "server_port": $(uci_get_by_name $2 server_port), - "mode": "tcp_and_udp", - "password": "$(uci_get_by_name $2 password)", - "timeout": $(uci_get_by_name $2 timeout 60), - "method": "$(uci_get_by_name $2 encrypt_method_ss)", - "protocol": "socks", - "fast_open": $fastopen - } - EOF - fi -} - -get_name() { - case "$1" in - ss) echo "Shadowsocks" ;; - ssr) echo "ShadowsocksR" ;; - esac -} - -gen_config_file() { #server1 type2 code3 local_port4 socks_port5 threads5 - case "$3" in - 1) - config_file=$tcp_config_file - ;; - 2) - config_file=$udp_config_file - ;; - 3) - if [ -n "$tmp_local_port" ]; then - local tmp_port=$tmp_local_port - else - local tmp_port=$tmp_shunt_local_port - fi - config_file=$shunt_config_file - ;; - 4) - local ss_protocol="socks" - config_file=$local_config_file - ;; - esac - case "$2" in - ss | ssr) - lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 ${ss_protocol:-redir} >$config_file - if [ "$3" == "3" ]; then - lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $tmp_port socks >$shunt_dns_config_file - fi - ;; - v2ray) - lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 $5 >$config_file - ;; - trojan) - case "$3" in - 1) - lua /usr/share/shadowsocksr/gen_config.lua $1 nat $4 >$config_file - ;; - 2) - lua /usr/share/shadowsocksr/gen_config.lua $1 client $4 >$config_file - ;; - 3) - lua /usr/share/shadowsocksr/gen_config.lua $1 nat $4 >$config_file - lua /usr/share/shadowsocksr/gen_config.lua $1 client $tmp_port >$shunt_dns_config_file - ;; - 4) - lua /usr/share/shadowsocksr/gen_config.lua $1 client $4 >$config_file - ;; - esac - ;; - naiveproxy) - case "$3" in - 1) - lua /usr/share/shadowsocksr/gen_config.lua $1 redir $4 $5 >$config_file - ;; - 3) - lua /usr/share/shadowsocksr/gen_config.lua $1 redir $4 >$config_file - lua /usr/share/shadowsocksr/gen_config.lua $1 socks $tmp_port >$shunt_dns_config_file - ;; - 4) - lua /usr/share/shadowsocksr/gen_config.lua $1 socks $4 >$config_file - ;; - esac - ;; - socks5) - /usr/share/shadowsocksr/genred2config.sh $config_file $2 $mode $4 \ - "$(uci_get_by_name $1 server)" \ - "$(uci_get_by_name $1 server_port)" \ - "$(uci_get_by_name $1 auth_enable 0)" \ - "$(uci_get_by_name $1 username)" \ - "$(uci_get_by_name $1 password)" - ;; - tun) - /usr/share/shadowsocksr/genred2config.sh $config_file $2 $(uci_get_by_name $1 iface "br-lan") $4 - ;; - esac - sed -i 's/\\//g' $TMP_PATH/*-ssr-*.json -} - -start_udp() { - local type=$(uci_get_by_name $UDP_RELAY_SERVER type) - redir_udp=1 - case "$type" in - ss | ssr) - gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port - ss_program="$(first_type ${type}local ${type}-redir)" - ln_start_bin $ss_program ${type}-redir -c $udp_config_file - echolog "UDP TPROXY Relay:$(get_name $type) Started!" - ;; - v2ray) - gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port - ln_start_bin $(first_type xray v2ray) v2ray -config $udp_config_file - echolog "UDP TPROXY Relay:$($(first_type "xray" "v2ray") -version | head -1) Started!" - ;; - trojan) #client - gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_local_port - ln_start_bin $(first_type trojan) $type --config $udp_config_file - ln_start_bin $(first_type ipt2socks) ipt2socks -U -b 0.0.0.0 -4 -s 127.0.0.1 -p $tmp_udp_local_port -l $tmp_udp_port - echolog "UDP TPROXY Relay:$($(first_type trojan) --version 2>&1 | head -1) Started!" - ;; - naiveproxy) - echolog "NaïveProxy UDP TPROXY Relay not supported!" - redir_udp=0 - ARG_UDP="" - ;; - socks5) - # if [ "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable 0)" == "1" ]; then - # local auth="-a $(uci_get_by_name $UDP_RELAY_SERVER username) -k $(uci_get_by_name $UDP_RELAY_SERVER password)" - # fi - # ln_start_bin $(first_type ipt2socks) ipt2socks $udp_config_file -U -4 -s $(uci_get_by_name $UDP_RELAY_SERVER server) -p $(uci_get_by_name $UDP_RELAY_SERVER server_port) -l $tmp_udp_port $auth - gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port - ln_start_bin $(first_type redsocks2) redsocks2 -c $udp_config_file - echolog "UDP TPROXY Relay:Socks5 REDIRECT/TPROXY Started!" - ;; - tun) - echolog "Network Tunnel UDP TPROXY Relay not supported!" - redir_udp=0 - ARG_UDP="" - ;; - esac -} - -start_shunt() { - local type=$(uci_get_by_name $SHUNT_SERVER type) - case "$type" in - ss | ssr) - gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port - ss_program="$(first_type ${type}local ${type}-redir)" - ln_start_bin $ss_program ${type}-redir -c $shunt_config_file - if [ -n "$tmp_local_port" ]; then - local tmp_port=$tmp_local_port - else - local tmp_port=$tmp_shunt_local_port - ln_start_bin $(first_type ${type}local ${type}-local) ${type}-local -c $shunt_dns_config_file - fi - ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q - echolog "shunt:$(get_name $type) Started!" - ;; - v2ray) - if [ -n "$tmp_local_port" ]; then - local tmp_port=$tmp_local_port - else - local tmp_port=$tmp_shunt_local_port - gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port $tmp_port - ln_start_bin $(first_type xray v2ray) v2ray -config $shunt_config_file - fi - ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q - echolog "shunt:$($(first_type xray v2ray) -version | head -1) Started!" - ;; - trojan) - gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port - ln_start_bin $(first_type trojan) $type --config $shunt_config_file - if [ -n "$tmp_local_port" ]; then - local tmp_port=$tmp_local_port - else - local tmp_port=$tmp_shunt_local_port - ln_start_bin $(first_type trojan) $type --config $shunt_dns_config_file - fi - ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q - echolog "shunt:$($(first_type trojan) --version 2>&1 | head -1) Started!" - ;; - naiveproxy) - gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port - ln_start_bin $(first_type naive) naive --config $shunt_config_file - if [ -n "$tmp_local_port" ]; then - local tmp_port=$tmp_local_port - else - local tmp_port=$tmp_shunt_local_port - ln_start_bin $(first_type naive) naive --config $shunt_dns_config_file - fi - ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q - echolog "shunt:$($(first_type "naive") --version 2>&1 | head -1) Started!" - redir_udp=0 - ;; - # socks5) - # if [ "$(uci_get_by_name $SHUNT_SERVER auth_enable 0)" == "1" ]; then - # local auth="-a $(uci_get_by_name $SHUNT_SERVER username) -k $(uci_get_by_name $SHUNT_SERVER password)" - # fi - # ln_start_bin $(first_type ipt2socks) ipt2socks $shunt_config_file -R -4 -s $(uci_get_by_name $SHUNT_SERVER server) -p $(uci_get_by_name $SHUNT_SERVER server_port) -l $tmp_shunt_port $auth - # #gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port - # #ln_start_bin $(first_type redsocks2) redsocks2 -c $shunt_config_file - # if [ -n "$tmp_local_port" ]; then - # local tmp_port=$tmp_local_port - # else - # local tmp_port=$tmp_shunt_local_port - # ln_start_bin $(first_type microsocks) microsocks -i 127.0.0.1 -p $tmp_port shunt-dns-ssr-plus - # fi - # ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q - # echolog "shunt:$type REDIRECT/TPROXY Started!" - # ;; - *) - gen_config_file $SHUNT_SERVER $type 3 $tmp_shunt_port - ln_start_bin $(first_type redsocks2) redsocks2 -c $shunt_config_file - if [ -n "$tmp_local_port" ]; then - local tmp_port=$tmp_local_port - else - local tmp_port=$tmp_shunt_local_port - ln_start_bin $(first_type microsocks) microsocks -i 127.0.0.1 -p $tmp_port shunt-dns-ssr-plus - fi - ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q - echolog "shunt:$type REDIRECT/TPROXY Started!" - ;; - esac - return 0 -} - -start_local() { - [ "$LOCAL_SERVER" = "nil" ] && return 1 - local local_port=$(uci_get_by_type socks5_proxy local_port) - [ "$LOCAL_SERVER" == "$SHUNT_SERVER" ] && tmp_local_port=$local_port - local type=$(uci_get_by_name $LOCAL_SERVER type) - case "$type" in - ss | ssr) - gen_config_file $LOCAL_SERVER $type 4 $local_port - ss_program="$(first_type ${type}local ${type}-local)" - ln_start_bin $ss_program ${type}-local -c $local_config_file - echolog "Global_Socks5:$(get_name $type) Started!" - ;; - v2ray) - if [ "$_local" == "2" ]; then - gen_config_file $LOCAL_SERVER $type 4 0 $local_port - ln_start_bin $(first_type xray v2ray) v2ray -config $local_config_file - echolog "Global_Socks5:$($(first_type "xray" "v2ray") -version | head -1) Started!" - fi - ;; - trojan) #client - gen_config_file $LOCAL_SERVER $type 4 $local_port - ln_start_bin $(first_type trojan) $type --config $local_config_file - echolog "Global_Socks5:$($(first_type trojan) --version 2>&1 | head -1) Started!" - ;; - naiveproxy) - gen_config_file $LOCAL_SERVER $type 4 $local_port - ln_start_bin $(first_type naive) naive --config $local_config_file - echolog "Global_Socks5:$($(first_type $type) --version | head -1) Started!" - ;; - *) - [ -e /proc/sys/net/ipv6 ] && local listenip='-i ::' - ln_start_bin $(first_type microsocks) microsocks $listenip -p $local_port tcp-udp-ssr-local - echolog "Global_Socks5:$type Started!" - ;; - esac - local_enable=1 - return 0 -} - -Start_Run() { - if [ "$(uci_get_by_type global threads 0)" == "0" ]; then - local threads=$(cat /proc/cpuinfo | grep 'processor' | wc -l) - else - local threads=$(uci_get_by_type global threads) - fi - if [ "$(uci_get_by_name $GLOBAL_SERVER kcp_enable 0)" == "1" ]; then - [ ! -f "/usr/bin/kcptun-client" ] && return 1 - local kcp_str=$(/usr/bin/kcptun-client -v | grep kcptun | wc -l) - [ "0" == "$kcp_str" ] && return 1 - local kcp_server=$(uci_get_by_name $GLOBAL_SERVER server) - local kcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port) - local server_port=$(uci_get_by_name $GLOBAL_SERVER server_port) - local password=$(uci_get_by_name $GLOBAL_SERVER kcp_password) - local kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param) - [ "$password" != "" ] && password="--key "$password - service_start /usr/bin/kcptun-client -r $kcp_server:$kcp_port -l :$server_port $password $kcp_param - kcp_enable_flag=1 - ARG_UDP="" - fi - if [ "$_local" == "1" ]; then - local socks_port=$(uci_get_by_type socks5_proxy local_port) - tcp_config_file=$TMP_PATH/local-ssr-retcp.json - [ "$mode" == "tcp,udp" ] && tcp_config_file=$TMP_PATH/local-udp-ssr-retcp.json - fi - local tcp_port=$(uci_get_by_name $GLOBAL_SERVER local_port) - local type=$(uci_get_by_name $GLOBAL_SERVER type) - case "$type" in - ss | ssr) - gen_config_file $GLOBAL_SERVER $type 1 $tcp_port - ss_program="$(first_type ${type}local ${type}-redir)" - for i in $(seq 1 $threads); do - ln_start_bin "$ss_program" ${type}-redir -c $tcp_config_file - done - echolog "Main node:$(get_name $type) $threads Threads Started!" - ;; - v2ray) - gen_config_file $GLOBAL_SERVER $type 1 $tcp_port $socks_port - ln_start_bin $(first_type xray v2ray) v2ray -config $tcp_config_file - echolog "Main node:$($(first_type xray v2ray) -version | head -1) Started!" - ;; - trojan) - gen_config_file $GLOBAL_SERVER $type 1 $tcp_port - for i in $(seq 1 $threads); do - ln_start_bin $(first_type $type) $type --config $tcp_config_file - done - echolog "Main node:$($(first_type $type) --version 2>&1 | head -1) , $threads Threads Started!" - ;; - naiveproxy) - [ "$(uci_get_by_type global threads 0)" == "0" ] && threads=1 - gen_config_file $GLOBAL_SERVER $type 1 $tcp_port $threads - ln_start_bin $(first_type naive) naive $tcp_config_file - echolog "Main node:$($(first_type naive) --version 2>&1 | head -1) , $threads Threads Started!" - ;; - socks5) - if [ "$(uci_get_by_name $GLOBAL_SERVER auth_enable 0)" == "1" ]; then - local auth="-a $(uci_get_by_name $GLOBAL_SERVER username) -k $(uci_get_by_name $GLOBAL_SERVER password)" - fi - ln_start_bin $(first_type ipt2socks) ipt2socks $tcp_config_file -R -4 -j $threads -s $(uci_get_by_name $GLOBAL_SERVER server) -p $(uci_get_by_name $GLOBAL_SERVER server_port) -l $tcp_port $auth - #gen_config_file $GLOBAL_SERVER $type 1 $tcp_port - #for i in $(seq 1 $threads); do - # ln_start_bin $(first_type redsocks2) redsocks2 -c $tcp_config_file - #done - echolog "Main node:Socks5 REDIRECT/TPROXY $threads Threads Started!" - ;; - tun) - gen_config_file $GLOBAL_SERVER $type 1 $tcp_port - for i in $(seq 1 $threads); do - ln_start_bin $(first_type redsocks2) redsocks2 -c $tcp_config_file - done - echolog "Main node:Network Tunnel REDIRECT $threads Threads Started!" - ;; - esac - redir_tcp=1 - return 0 -} - -load_config() { - if [ -z "$switch_server" ]; then - GLOBAL_SERVER=$(uci_get_by_type global global_server nil) - else - GLOBAL_SERVER=$switch_server - fi - LOCAL_SERVER=$(uci_get_by_type socks5_proxy server nil) - if [ "$GLOBAL_SERVER" == "nil" ]; then - mode="tcp,udp" - _local="2" - local_config_file=$TMP_PATH/tcp-udp-ssr-local.json - start_local - return 1 - fi - UDP_RELAY_SERVER=$(uci_get_by_type global udp_relay_server nil) - SHUNT_SERVER=$(uci_get_by_type global netflix_server nil) - tcp_config_file=$TMP_PATH/tcp-only-ssr-retcp.json - case "$UDP_RELAY_SERVER" in - nil) - mode="tcp" - ;; - $GLOBAL_SERVER | same) - mode="tcp,udp" - tcp_config_file=$TMP_PATH/tcp-udp-ssr-retcp.json - ARG_UDP="-u" - UDP_RELAY_SERVER=$GLOBAL_SERVER - ;; - *) - mode="udp" - udp_config_file=$TMP_PATH/udp-only-ssr-reudp.json - ARG_UDP="-U" - start_udp - mode="tcp" - ;; - esac - case "$LOCAL_SERVER" in - nil) - _local="0" - ;; - $GLOBAL_SERVER | same) - _local="1" - LOCAL_SERVER=$GLOBAL_SERVER - local_config_file=$TMP_PATH/tcp-udp-ssr-local.json - start_local - local_enable=0 - ;; - *) - _local="2" - local_config_file=$TMP_PATH/tcp-udp-ssr-local.json - start_local - ;; - esac - case "$SHUNT_SERVER" in - nil) - shunt="0" - ;; - $GLOBAL_SERVER | same) - shunt="1" - SHUNT_SERVER=$GLOBAL_SERVER - ;; - *) - shunt="$tmp_shunt_port" - shunt_config_file=$TMP_PATH/shunt-ssr-retcp.json - shunt_dns_config_file=$TMP_PATH/shunt-dns-ssr-plus.json - start_shunt - ;; - esac - return 0 -} - -check_server() { - ENABLE_SERVER=$(uci_get_by_type global global_server nil) - if [ "$ENABLE_SERVER" == "nil" ]; then - return 1 - else - local STYPE=$(uci_get_by_name $ENABLE_SERVER type nil) - if [ "$STYPE" == "nil" ]; then - local CFGID=$(uci_get_by_cfgid servers type nil) - if [ "$CFGID" == "nil" ]; then - uci_set_by_type global global_server 'nil' - else - uci_set_by_type global global_server $CFGID - fi - /etc/init.d/shadowsocksr restart - fi - fi -} - -start_server() { - [ "$(uci_get_by_type server_global enable_server 0)" == "0" ] && return 0 - server_service() { - [ "$(uci_get_by_name $1 enable 0)" == "0" ] && return 1 - let server_count=server_count+1 - if [ "$server_count" == "1" ]; then - if ! (iptables-save -t filter | grep SSR-SERVER-RULE >/dev/null); then - iptables -N SSR-SERVER-RULE && iptables -t filter -I INPUT -j SSR-SERVER-RULE - fi - fi - local type=$(uci_get_by_name $1 type) - case "$type" in - ss | ssr) - gen_service_file ${type} $1 $TMP_PATH/ssr-server$server_count.json - ln_start_bin $(first_type ${type}server ${type}-server) ${type}-server -c $TMP_PATH/ssr-server$server_count.json - echolog "Server: $(get_name ${type}) Server$server_count Started!" - ;; - socks5) - [ -e /proc/sys/net/ipv6 ] && local listenip='-i ::' - ln_start_bin $(first_type microsocks) microsocks $listenip -p $(uci_get_by_name $1 server_port) -1 -u $(uci_get_by_name $1 username) -P $(uci_get_by_name $1 password) ssr-server$server_count - echolog "Server:Socks5 Server$server_count Started!" - ;; - esac - iptables -t filter -A SSR-SERVER-RULE -p tcp --dport $(uci_get_by_name $1 server_port) -j ACCEPT - iptables -t filter -A SSR-SERVER-RULE -p udp --dport $(uci_get_by_name $1 server_port) -j ACCEPT - return 0 - } - gen_serv_include() { - local FWI=$(uci get firewall.shadowsocksr.path 2>/dev/null) - [ -n "$FWI" ] || return 0 - if [ ! -f $FWI ]; then - echo '#!/bin/sh' >$FWI - fi - extract_rules() { - echo "*filter" - iptables-save -t filter | grep SSR-SERVER-RULE | sed -e "s/^-A INPUT/-I INPUT/" - echo 'COMMIT' - } - cat <<-EOF >>$FWI - iptables-save -c | grep -v "SSR-SERVER" | iptables-restore -c - iptables-restore -n <<-EOT - $(extract_rules) - EOT - EOF - } - - config_load $NAME - config_foreach server_service server_config - gen_serv_include - return 0 -} - -start_switch() { - if [ "$(uci_get_by_type global enable_switch 0)" == "1" ]; then - if [ -z "$switch_server" ]; then - local switch_time=$(uci_get_by_type global switch_time)s - local switch_timeout=$(uci_get_by_type global switch_timeout) - service_start /usr/bin/ssr-switch start $switch_time $switch_timeout - fi - fi -} - -start_monitor() { - if [ $(uci_get_by_type global monitor_enable 1) == "1" ]; then - let total_count=server_count+redir_tcp+redir_udp+kcp_enable_flag+local_enable+pdnsd_enable_flag - if [ $total_count -gt 0 ]; then - service_start /usr/bin/ssr-monitor $server_count $redir_tcp $redir_udp $kcp_enable_flag $local_enable $pdnsd_enable_flag - fi - fi -} - -start_rules() { - local server=$(get_host_ip $GLOBAL_SERVER) - local local_port=$(uci_get_by_name $GLOBAL_SERVER local_port) - local lan_ac_ips=$(uci_get_by_type access_control lan_ac_ips) - local lan_ac_mode=$(uci_get_by_type access_control lan_ac_mode) - if [ "$kcp_enable_flag" == "0" -a "$redir_udp" == "1" ]; then - local udp_server=$(get_host_ip $UDP_RELAY_SERVER) - local udp_local_port=$tmp_udp_port - fi - if [ "$shunt" != "0" ]; then - local shunt_ip=$(get_host_ip $SHUNT_SERVER) - fi - if [ -n "$lan_ac_ips" ]; then - case "$lan_ac_mode" in - w | W | b | B) local ac_ips="$lan_ac_mode$lan_ac_ips" ;; - esac - fi - gfwmode() { - case "$(uci_get_by_type global run_mode)" in - gfw) echo "-g" ;; - router) echo "-r" ;; - oversea) echo "-c" ;; - all) echo "-z" ;; - esac - } - if [ "$(uci_get_by_type global dports 1)" == "2" ]; then - local proxyport="-m multiport --dports 22,53,587,465,995,993,143,80,443,853,9418" - fi - get_arg_out() { - case "$(uci_get_by_type access_control router_proxy 1)" in - 1) echo "-o" ;; - 2) echo "-O" ;; - esac - } - /usr/share/shadowsocksr/gfw2ipset.sh - /usr/bin/ssr-rules \ - -s "$server" \ - -l "$local_port" \ - -S "$udp_server" \ - -L "$udp_local_port" \ - -a "$ac_ips" \ - -i "/etc/ssrplus/china_ssr.txt" \ - -b "$(uci_get_by_type access_control wan_bp_ips)" \ - -w "$(uci_get_by_type access_control wan_fw_ips)" \ - -B "$(uci_get_by_type access_control lan_bp_ips)" \ - -p "$(uci_get_by_type access_control lan_fp_ips)" \ - -G "$(uci_get_by_type access_control lan_gm_ips)" \ - -m "$(uci_get_by_type access_control Interface)" \ - -D "$proxyport" \ - -F "$shunt" \ - -N "$shunt_ip" \ - -M "$(uci_get_by_type global netflix_proxy 0)" \ - -I "/etc/ssrplus/netflixip.list" \ - $(get_arg_out) $(gfwmode) $ARG_UDP - return $? -} - -start() { - set_lock - echolog "----------start------------" - mkdir -p /var/run /var/lock /var/log /tmp/dnsmasq.d $TMP_BIN_PATH $TMP_DNSMASQ_PATH - echo "conf-dir=${TMP_DNSMASQ_PATH}" >"/tmp/dnsmasq.d/dnsmasq-ssrplus.conf" - if load_config; then - Start_Run - start_rules - start_dns - add_cron - start_switch - else - echolog "未启动主节点,禁止连接的域名正在加载。" - cat /etc/ssrplus/deny.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/address=\/&\//" >$TMP_DNSMASQ_PATH/denylist.conf - echolog "禁止连接的域名加载完毕。" - if [ "$(uci_get_by_type global adblock 0)" == "1" ]; then - echolog "未启动主节点,广告过滤正在加载。" - cp -f /etc/ssrplus/ad.conf $TMP_DNSMASQ_PATH/ - if [ -f "$TMP_DNSMASQ_PATH/ad.conf" ]; then - for line in $(cat /etc/ssrplus/black.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done - for line in $(cat /etc/ssrplus/white.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done - for line in $(cat /etc/ssrplus/deny.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done - fi - echolog "广告过滤加载完毕。" - fi - fi - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - check_server - start_server - start_monitor - clean_log - echolog "-----------end------------" - unset_lock -} - -boot() { - echolog "boot!" - mkdir -p /var/run /var/lock /var/log /tmp/dnsmasq.d $TMP_BIN_PATH $TMP_DNSMASQ_PATH - ulimit -n 65535 - start -} - -stop() { - unlock - set_lock - /usr/bin/ssr-rules -f - local srulecount=$(iptables -L | grep SSR-SERVER-RULE | wc -l) - if [ $srulecount -gt 0 ]; then - iptables -F SSR-SERVER-RULE - iptables -t filter -D INPUT -j SSR-SERVER-RULE - iptables -X SSR-SERVER-RULE 2>/dev/null - fi - if [ -z "$switch_server" ]; then - $PS -w | grep -v "grep" | grep ssr-switch | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & - rm -f /var/lock/ssr-switch.lock - killall -q -9 kcptun-client - fi - $PS -w | grep -v "grep" | grep ssr-monitor | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & - $PS -w | grep -v "grep" | grep "sleep 0000" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & - $PS -w | grep -v "grep" | grep "$TMP_PATH" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & - killall -q -9 v2ray-plugin obfs-local xray-plugin - rm -f /var/lock/ssr-monitor.lock - if [ -f "/tmp/dnsmasq.d/dnsmasq-ssrplus.conf" ]; then - rm -rf /tmp/dnsmasq.d/dnsmasq-ssrplus.conf $TMP_DNSMASQ_PATH $TMP_PATH/*-ssr-*.json $TMP_PATH/ssr-server*.json - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - fi - del_cron - unset_lock -} - -reset() { - stop - set_lock - rm -rf /etc/config/shadowsocksr $LOG_FILE - touch /etc/config/shadowsocksr $LOG_FILE - uci -q batch <<-EOF >/dev/null - add shadowsocksr global - set shadowsocksr.@global[0].global_server='nil' - set shadowsocksr.@global[0].netflix_server='nil' - set shadowsocksr.@global[0].netflix_proxy='0' - set shadowsocksr.@global[0].threads='0' - set shadowsocksr.@global[0].run_mode='router' - set shadowsocksr.@global[0].dports='2' - set shadowsocksr.@global[0].pdnsd_enable='1' - set shadowsocksr.@global[0].tunnel_forward='8.8.4.4:53' - set shadowsocksr.@global[0].monitor_enable='1' - set shadowsocksr.@global[0].enable_switch='1' - set shadowsocksr.@global[0].switch_time='667' - set shadowsocksr.@global[0].switch_timeout='5' - set shadowsocksr.@global[0].switch_try_count='3' - set shadowsocksr.@global[0].gfwlist_url='https://cdn.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@release/gfwlist.txt' - set shadowsocksr.@global[0].chnroute_url='https://ispip.clang.cn/all_cn.txt' - set shadowsocksr.@global[0].nfip_url='https://cdn.jsdelivr.net/gh/QiuSimons/Netflix_IP/NF_only.txt' - set shadowsocksr.@global[0].adblock_url='https://anti-ad.net/anti-ad-for-dnsmasq.conf' - add shadowsocksr server_subscribe - set shadowsocksr.@server_subscribe[0].proxy='0' - set shadowsocksr.@server_subscribe[0].auto_update_time='2' - set shadowsocksr.@server_subscribe[0].auto_update='1' - set shadowsocksr.@server_subscribe[0].filter_words='过期时间/剩余流量/QQ群/官网/防失联地址/回国' - set shadowsocksr.@server_subscribe[0].save_words='' - add shadowsocksr access_control - set shadowsocksr.@access_control[0].lan_ac_mode='0' - set shadowsocksr.@access_control[0].router_proxy='1' - add_list shadowsocksr.@access_control[0].wan_fw_ips=149.154.160.0/20 - add_list shadowsocksr.@access_control[0].wan_fw_ips=67.198.55.0/24 - add_list shadowsocksr.@access_control[0].wan_fw_ips=91.108.4.0/22 - add_list shadowsocksr.@access_control[0].wan_fw_ips=91.108.56.0/22 - add_list shadowsocksr.@access_control[0].wan_fw_ips=109.239.140.0/24 - add_list shadowsocksr.@access_control[0].Interface='lan' - add shadowsocksr socks5_proxy - set shadowsocksr.@socks5_proxy[0].server='nil' - set shadowsocksr.@socks5_proxy[0].local_port='1080' - add shadowsocksr server_global - set shadowsocksr.@server_global[0].enable_server='0' - commit shadowsocksr - EOF - unset_lock -} diff --git a/luci-app-ssr-plus/root/etc/ssrplus/ad.conf b/luci-app-ssr-plus/root/etc/ssrplus/ad.conf deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-ssr-plus/root/etc/ssrplus/black.list b/luci-app-ssr-plus/root/etc/ssrplus/black.list deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-ssr-plus/root/etc/ssrplus/china_ssr.txt b/luci-app-ssr-plus/root/etc/ssrplus/china_ssr.txt deleted file mode 100644 index 3d3bb2d7..00000000 --- a/luci-app-ssr-plus/root/etc/ssrplus/china_ssr.txt +++ /dev/null @@ -1,8621 +0,0 @@ -1.0.1.0/24 -1.0.2.0/23 -1.0.8.0/21 -1.0.32.0/19 -1.1.0.0/24 -1.1.2.0/23 -1.1.4.0/22 -1.1.8.0/24 -1.1.9.0/24 -1.1.10.0/23 -1.1.12.0/22 -1.1.16.0/20 -1.1.32.0/19 -1.2.0.0/23 -1.2.2.0/24 -1.2.4.0/24 -1.2.5.0/24 -1.2.6.0/23 -1.2.8.0/24 -1.2.9.0/24 -1.2.10.0/23 -1.2.12.0/22 -1.2.16.0/20 -1.2.32.0/19 -1.2.64.0/18 -1.3.0.0/16 -1.4.1.0/24 -1.4.2.0/23 -1.4.4.0/24 -1.4.5.0/24 -1.4.6.0/23 -1.4.8.0/21 -1.4.16.0/20 -1.4.32.0/19 -1.4.64.0/18 -1.8.0.0/16 -1.10.0.0/21 -1.10.8.0/23 -1.10.11.0/24 -1.10.12.0/22 -1.10.16.0/20 -1.10.32.0/19 -1.10.64.0/18 -1.12.0.0/14 -1.24.0.0/13 -1.45.0.0/16 -1.48.0.0/15 -1.50.0.0/16 -1.51.0.0/16 -1.56.0.0/13 -1.68.0.0/14 -1.80.0.0/13 -1.88.0.0/14 -1.92.0.0/15 -1.94.0.0/15 -1.116.0.0/15 -1.118.0.0/16 -1.119.0.0/17 -1.119.128.0/17 -1.180.0.0/14 -1.184.0.0/15 -1.188.0.0/14 -1.192.0.0/13 -1.202.0.0/15 -1.204.0.0/14 -14.0.0.0/21 -14.0.12.0/22 -14.1.0.0/22 -14.1.24.0/22 -14.1.96.0/22 -14.1.108.0/22 -14.16.0.0/12 -14.102.128.0/22 -14.102.156.0/22 -14.102.180.0/22 -14.103.0.0/16 -14.104.0.0/13 -14.112.0.0/12 -14.130.0.0/15 -14.134.0.0/15 -14.144.0.0/12 -14.192.60.0/22 -14.192.76.0/22 -14.196.0.0/15 -14.204.0.0/15 -14.208.0.0/12 -27.0.128.0/22 -27.0.132.0/22 -27.0.160.0/22 -27.0.164.0/22 -27.0.188.0/22 -27.0.204.0/22 -27.0.208.0/22 -27.0.212.0/22 -27.8.0.0/13 -27.16.0.0/12 -27.34.232.0/21 -27.36.0.0/14 -27.40.0.0/13 -27.50.40.0/21 -27.50.128.0/17 -27.54.72.0/21 -27.54.152.0/21 -27.54.192.0/18 -27.98.208.0/20 -27.98.224.0/19 -27.99.128.0/17 -27.103.0.0/16 -27.106.128.0/18 -27.106.204.0/22 -27.109.32.0/19 -27.109.124.0/22 -27.112.0.0/18 -27.112.80.0/20 -27.112.112.0/22 -27.112.116.0/22 -27.113.128.0/18 -27.115.0.0/17 -27.116.44.0/22 -27.121.72.0/21 -27.121.120.0/21 -27.128.0.0/15 -27.131.220.0/22 -27.144.0.0/16 -27.148.0.0/14 -27.152.0.0/13 -27.184.0.0/13 -27.192.0.0/11 -27.224.0.0/14 -36.0.0.0/22 -36.0.8.0/21 -36.0.16.0/20 -36.0.32.0/19 -36.0.64.0/18 -36.0.128.0/17 -36.1.0.0/16 -36.4.0.0/14 -36.16.0.0/12 -36.32.0.0/14 -36.36.0.0/16 -36.37.0.0/19 -36.37.36.0/23 -36.37.39.0/24 -36.37.40.0/21 -36.37.48.0/20 -36.40.0.0/13 -36.48.0.0/15 -36.51.0.0/16 -36.56.0.0/13 -36.96.0.0/11 -36.128.0.0/10 -36.192.0.0/11 -36.248.0.0/14 -36.254.0.0/16 -36.255.116.0/22 -36.255.128.0/22 -36.255.164.0/22 -36.255.172.0/22 -36.255.176.0/22 -39.0.0.0/24 -39.0.2.0/23 -39.0.4.0/22 -39.0.8.0/21 -39.0.16.0/20 -39.0.32.0/19 -39.0.64.0/18 -39.0.128.0/17 -39.64.0.0/11 -39.96.0.0/13 -39.104.0.0/14 -39.108.0.0/16 -39.128.0.0/10 -40.72.0.0/15 -40.125.128.0/17 -40.126.64.0/18 -42.0.0.0/22 -42.0.8.0/21 -42.0.16.0/21 -42.0.24.0/22 -42.0.32.0/19 -42.0.128.0/17 -42.1.0.0/19 -42.1.32.0/20 -42.1.48.0/21 -42.1.56.0/22 -42.1.128.0/17 -42.4.0.0/14 -42.48.0.0/15 -42.50.0.0/16 -42.51.0.0/16 -42.52.0.0/14 -42.56.0.0/14 -42.62.0.0/17 -42.62.128.0/19 -42.62.160.0/20 -42.62.180.0/22 -42.62.184.0/21 -42.63.0.0/16 -42.80.0.0/15 -42.83.64.0/20 -42.83.80.0/22 -42.83.88.0/21 -42.83.96.0/19 -42.83.128.0/17 -42.84.0.0/14 -42.88.0.0/13 -42.96.64.0/19 -42.96.96.0/21 -42.96.108.0/22 -42.96.112.0/20 -42.96.128.0/17 -42.97.0.0/16 -42.99.0.0/18 -42.99.64.0/19 -42.99.96.0/20 -42.99.112.0/22 -42.99.120.0/21 -42.100.0.0/14 -42.120.0.0/15 -42.122.0.0/16 -42.123.0.0/19 -42.123.36.0/22 -42.123.40.0/21 -42.123.48.0/20 -42.123.64.0/18 -42.123.128.0/17 -42.128.0.0/12 -42.156.0.0/19 -42.156.36.0/22 -42.156.40.0/21 -42.156.48.0/20 -42.156.64.0/18 -42.156.128.0/17 -42.157.0.0/16 -42.158.0.0/16 -42.159.0.0/16 -42.160.0.0/12 -42.176.0.0/13 -42.184.0.0/15 -42.186.0.0/16 -42.187.0.0/18 -42.187.64.0/19 -42.187.96.0/20 -42.187.112.0/21 -42.187.120.0/22 -42.187.128.0/17 -42.192.0.0/15 -42.194.0.0/21 -42.194.8.0/22 -42.194.12.0/22 -42.194.16.0/20 -42.194.32.0/19 -42.194.64.0/18 -42.194.128.0/17 -42.195.0.0/16 -42.196.0.0/14 -42.201.0.0/17 -42.202.0.0/15 -42.204.0.0/14 -42.208.0.0/12 -42.224.0.0/12 -42.240.0.0/17 -42.240.128.0/17 -42.242.0.0/15 -42.244.0.0/14 -42.248.0.0/13 -43.136.0.0/13 -43.144.0.0/12 -43.160.0.0/11 -43.224.12.0/22 -43.224.24.0/22 -43.224.44.0/22 -43.224.52.0/22 -43.224.56.0/22 -43.224.64.0/22 -43.224.68.0/22 -43.224.72.0/22 -43.224.80.0/22 -43.224.100.0/22 -43.224.144.0/22 -43.224.160.0/22 -43.224.176.0/22 -43.224.184.0/22 -43.224.200.0/22 -43.224.204.0/22 -43.224.208.0/22 -43.224.212.0/22 -43.224.216.0/22 -43.224.240.0/22 -43.225.76.0/22 -43.225.84.0/22 -43.225.120.0/22 -43.225.124.0/22 -43.225.140.0/22 -43.225.172.0/22 -43.225.180.0/22 -43.225.208.0/22 -43.225.216.0/22 -43.225.220.0/22 -43.225.224.0/22 -43.225.228.0/22 -43.225.232.0/22 -43.225.236.0/22 -43.225.240.0/22 -43.225.244.0/22 -43.225.252.0/22 -43.226.32.0/22 -43.226.36.0/22 -43.226.40.0/22 -43.226.44.0/22 -43.226.48.0/22 -43.226.52.0/22 -43.226.56.0/22 -43.226.60.0/22 -43.226.64.0/22 -43.226.68.0/22 -43.226.72.0/22 -43.226.76.0/22 -43.226.80.0/22 -43.226.84.0/22 -43.226.88.0/22 -43.226.92.0/22 -43.226.96.0/22 -43.226.100.0/22 -43.226.104.0/22 -43.226.108.0/22 -43.226.112.0/22 -43.226.116.0/22 -43.226.120.0/22 -43.226.128.0/22 -43.226.132.0/22 -43.226.136.0/22 -43.226.140.0/22 -43.226.144.0/22 -43.226.148.0/22 -43.226.152.0/22 -43.226.156.0/22 -43.226.160.0/22 -43.226.164.0/22 -43.226.168.0/22 -43.226.172.0/22 -43.226.176.0/22 -43.226.180.0/22 -43.226.184.0/22 -43.226.188.0/22 -43.226.192.0/22 -43.226.196.0/22 -43.226.200.0/22 -43.226.204.0/22 -43.226.208.0/22 -43.226.212.0/22 -43.226.236.0/22 -43.226.240.0/22 -43.226.244.0/22 -43.226.248.0/22 -43.226.252.0/22 -43.227.0.0/22 -43.227.4.0/22 -43.227.8.0/22 -43.227.32.0/22 -43.227.36.0/22 -43.227.40.0/22 -43.227.44.0/22 -43.227.48.0/22 -43.227.52.0/22 -43.227.56.0/22 -43.227.60.0/22 -43.227.64.0/22 -43.227.68.0/22 -43.227.72.0/22 -43.227.76.0/22 -43.227.80.0/22 -43.227.84.0/22 -43.227.88.0/22 -43.227.92.0/22 -43.227.96.0/22 -43.227.100.0/22 -43.227.104.0/22 -43.227.136.0/22 -43.227.140.0/22 -43.227.144.0/22 -43.227.152.0/22 -43.227.156.0/22 -43.227.160.0/22 -43.227.164.0/22 -43.227.168.0/22 -43.227.172.0/22 -43.227.176.0/22 -43.227.180.0/22 -43.227.188.0/22 -43.227.192.0/22 -43.227.196.0/22 -43.227.200.0/22 -43.227.204.0/22 -43.227.208.0/22 -43.227.212.0/22 -43.227.216.0/22 -43.227.220.0/22 -43.227.232.0/22 -43.227.248.0/22 -43.227.252.0/22 -43.228.0.0/22 -43.228.4.0/22 -43.228.8.0/22 -43.228.12.0/22 -43.228.16.0/22 -43.228.20.0/22 -43.228.24.0/22 -43.228.28.0/22 -43.228.32.0/22 -43.228.36.0/22 -43.228.40.0/22 -43.228.44.0/22 -43.228.48.0/22 -43.228.52.0/22 -43.228.56.0/22 -43.228.60.0/22 -43.228.64.0/22 -43.228.68.0/22 -43.228.76.0/22 -43.228.100.0/22 -43.228.116.0/22 -43.228.120.0/22 -43.228.132.0/22 -43.228.136.0/22 -43.228.148.0/22 -43.228.152.0/22 -43.228.188.0/22 -43.228.204.0/22 -43.228.240.0/22 -43.229.40.0/22 -43.229.48.0/22 -43.229.56.0/22 -43.229.96.0/22 -43.229.120.0/22 -43.229.136.0/22 -43.229.140.0/22 -43.229.144.0/22 -43.229.168.0/22 -43.229.172.0/22 -43.229.176.0/22 -43.229.180.0/22 -43.229.184.0/22 -43.229.188.0/22 -43.229.192.0/22 -43.229.196.0/22 -43.229.216.0/22 -43.229.220.0/22 -43.229.232.0/22 -43.229.236.0/22 -43.230.20.0/22 -43.230.32.0/22 -43.230.68.0/22 -43.230.72.0/22 -43.230.84.0/22 -43.230.124.0/22 -43.230.136.0/22 -43.230.220.0/22 -43.230.224.0/22 -43.230.228.0/22 -43.230.232.0/22 -43.230.236.0/22 -43.230.240.0/22 -43.230.244.0/22 -43.230.248.0/22 -43.230.252.0/22 -43.231.32.0/22 -43.231.36.0/22 -43.231.40.0/22 -43.231.44.0/22 -43.231.80.0/22 -43.231.84.0/22 -43.231.88.0/22 -43.231.92.0/22 -43.231.96.0/22 -43.231.100.0/22 -43.231.104.0/22 -43.231.108.0/22 -43.231.136.0/22 -43.231.140.0/22 -43.231.144.0/22 -43.231.148.0/22 -43.231.152.0/22 -43.231.156.0/22 -43.231.160.0/22 -43.231.164.0/22 -43.231.168.0/22 -43.231.172.0/22 -43.231.176.0/22 -43.231.180.0/22 -43.236.0.0/22 -43.236.4.0/22 -43.236.8.0/22 -43.236.12.0/22 -43.236.16.0/22 -43.236.20.0/22 -43.236.24.0/22 -43.236.28.0/22 -43.236.32.0/22 -43.236.36.0/22 -43.236.40.0/22 -43.236.44.0/22 -43.236.48.0/22 -43.236.52.0/22 -43.236.56.0/22 -43.236.60.0/22 -43.236.64.0/22 -43.236.68.0/22 -43.236.72.0/22 -43.236.76.0/22 -43.236.80.0/22 -43.236.84.0/22 -43.236.88.0/22 -43.236.92.0/22 -43.236.96.0/22 -43.236.100.0/22 -43.236.104.0/22 -43.236.108.0/22 -43.236.112.0/22 -43.236.116.0/22 -43.236.120.0/22 -43.236.124.0/22 -43.236.128.0/22 -43.236.132.0/22 -43.236.136.0/22 -43.236.140.0/22 -43.236.144.0/22 -43.236.148.0/22 -43.236.152.0/22 -43.236.156.0/22 -43.236.160.0/22 -43.236.164.0/22 -43.236.168.0/22 -43.236.172.0/22 -43.236.176.0/22 -43.236.180.0/22 -43.236.184.0/22 -43.236.188.0/22 -43.236.192.0/22 -43.236.196.0/22 -43.236.200.0/22 -43.236.204.0/22 -43.236.208.0/22 -43.236.212.0/22 -43.236.216.0/22 -43.236.220.0/22 -43.236.224.0/22 -43.236.228.0/22 -43.236.232.0/22 -43.236.236.0/22 -43.236.240.0/22 -43.236.244.0/22 -43.236.248.0/22 -43.236.252.0/22 -43.237.0.0/22 -43.237.4.0/22 -43.237.8.0/22 -43.237.12.0/22 -43.237.16.0/22 -43.237.20.0/22 -43.237.24.0/22 -43.237.28.0/22 -43.237.32.0/22 -43.237.36.0/22 -43.237.40.0/22 -43.237.44.0/22 -43.237.48.0/22 -43.237.52.0/22 -43.237.56.0/22 -43.237.60.0/22 -43.237.64.0/22 -43.237.68.0/22 -43.237.72.0/22 -43.237.76.0/22 -43.237.80.0/22 -43.237.84.0/22 -43.237.88.0/22 -43.237.92.0/22 -43.237.96.0/22 -43.237.100.0/22 -43.237.104.0/22 -43.237.108.0/22 -43.237.112.0/22 -43.237.116.0/22 -43.237.120.0/22 -43.237.124.0/22 -43.237.128.0/22 -43.237.132.0/22 -43.237.136.0/22 -43.237.140.0/22 -43.237.144.0/22 -43.237.148.0/22 -43.237.152.0/22 -43.237.156.0/22 -43.237.160.0/22 -43.237.164.0/22 -43.237.168.0/22 -43.237.172.0/22 -43.237.176.0/22 -43.237.180.0/22 -43.237.184.0/22 -43.237.188.0/22 -43.237.192.0/22 -43.237.196.0/22 -43.237.200.0/22 -43.237.204.0/22 -43.237.208.0/22 -43.237.212.0/22 -43.237.216.0/22 -43.237.220.0/22 -43.237.224.0/22 -43.237.228.0/22 -43.237.232.0/22 -43.237.236.0/22 -43.237.240.0/22 -43.237.244.0/22 -43.237.248.0/22 -43.237.252.0/22 -43.238.0.0/22 -43.238.4.0/22 -43.238.8.0/22 -43.238.12.0/22 -43.238.16.0/22 -43.238.20.0/22 -43.238.24.0/22 -43.238.28.0/22 -43.238.32.0/22 -43.238.36.0/22 -43.238.40.0/22 -43.238.44.0/22 -43.238.48.0/22 -43.238.52.0/22 -43.238.56.0/22 -43.238.60.0/22 -43.238.64.0/22 -43.238.68.0/22 -43.238.72.0/22 -43.238.76.0/22 -43.238.80.0/22 -43.238.84.0/22 -43.238.88.0/22 -43.238.92.0/22 -43.238.96.0/22 -43.238.100.0/22 -43.238.104.0/22 -43.238.108.0/22 -43.238.112.0/22 -43.238.116.0/22 -43.238.120.0/22 -43.238.124.0/22 -43.238.128.0/22 -43.238.132.0/22 -43.238.136.0/22 -43.238.140.0/22 -43.238.144.0/22 -43.238.148.0/22 -43.238.152.0/22 -43.238.156.0/22 -43.238.160.0/22 -43.238.164.0/22 -43.238.168.0/22 -43.238.172.0/22 -43.238.176.0/22 -43.238.180.0/22 -43.238.184.0/22 -43.238.188.0/22 -43.238.192.0/22 -43.238.196.0/22 -43.238.200.0/22 -43.238.204.0/22 -43.238.208.0/22 -43.238.212.0/22 -43.238.216.0/22 -43.238.220.0/22 -43.238.224.0/22 -43.238.228.0/22 -43.238.232.0/22 -43.238.236.0/22 -43.238.240.0/22 -43.238.244.0/22 -43.238.248.0/22 -43.238.252.0/22 -43.239.0.0/22 -43.239.4.0/22 -43.239.8.0/21 -43.239.16.0/22 -43.239.20.0/22 -43.239.24.0/22 -43.239.28.0/22 -43.239.32.0/22 -43.239.36.0/22 -43.239.40.0/22 -43.239.44.0/22 -43.239.48.0/22 -43.239.116.0/22 -43.239.120.0/22 -43.239.172.0/22 -43.239.176.0/22 -43.240.0.0/22 -43.240.56.0/22 -43.240.60.0/22 -43.240.68.0/22 -43.240.72.0/22 -43.240.76.0/22 -43.240.84.0/22 -43.240.124.0/22 -43.240.128.0/22 -43.240.132.0/22 -43.240.136.0/22 -43.240.144.0/22 -43.240.156.0/22 -43.240.160.0/22 -43.240.164.0/22 -43.240.168.0/22 -43.240.172.0/22 -43.240.176.0/22 -43.240.180.0/22 -43.240.184.0/22 -43.240.188.0/22 -43.240.192.0/22 -43.240.196.0/22 -43.240.200.0/22 -43.240.204.0/22 -43.240.208.0/22 -43.240.212.0/22 -43.240.216.0/22 -43.240.220.0/22 -43.240.236.0/22 -43.240.240.0/22 -43.240.244.0/22 -43.240.248.0/22 -43.240.252.0/22 -43.241.0.0/22 -43.241.4.0/22 -43.241.8.0/22 -43.241.12.0/22 -43.241.16.0/22 -43.241.20.0/22 -43.241.48.0/22 -43.241.76.0/22 -43.241.80.0/22 -43.241.84.0/22 -43.241.88.0/22 -43.241.92.0/22 -43.241.112.0/22 -43.241.168.0/22 -43.241.172.0/22 -43.241.176.0/22 -43.241.180.0/22 -43.241.184.0/22 -43.241.196.0/22 -43.241.208.0/22 -43.241.212.0/22 -43.241.216.0/22 -43.241.220.0/22 -43.241.224.0/22 -43.241.228.0/22 -43.241.232.0/22 -43.241.236.0/22 -43.241.240.0/22 -43.241.248.0/22 -43.241.252.0/22 -43.242.8.0/22 -43.242.12.0/22 -43.242.16.0/22 -43.242.20.0/22 -43.242.24.0/22 -43.242.28.0/22 -43.242.44.0/22 -43.242.48.0/22 -43.242.52.0/22 -43.242.56.0/22 -43.242.60.0/22 -43.242.64.0/22 -43.242.72.0/22 -43.242.76.0/22 -43.242.80.0/22 -43.242.84.0/22 -43.242.88.0/22 -43.242.92.0/22 -43.242.96.0/22 -43.242.144.0/22 -43.242.148.0/22 -43.242.152.0/22 -43.242.156.0/22 -43.242.160.0/22 -43.242.164.0/22 -43.242.168.0/22 -43.242.180.0/22 -43.242.188.0/22 -43.242.192.0/22 -43.242.196.0/22 -43.242.204.0/22 -43.242.216.0/22 -43.242.220.0/22 -43.242.252.0/22 -43.243.4.0/22 -43.243.8.0/22 -43.243.12.0/22 -43.243.16.0/22 -43.243.24.0/22 -43.243.88.0/22 -43.243.128.0/22 -43.243.136.0/22 -43.243.144.0/22 -43.243.148.0/22 -43.243.156.0/22 -43.243.180.0/22 -43.243.228.0/22 -43.243.232.0/22 -43.243.244.0/22 -43.246.0.0/22 -43.246.4.0/22 -43.246.8.0/22 -43.246.12.0/22 -43.246.16.0/22 -43.246.20.0/22 -43.246.24.0/22 -43.246.28.0/22 -43.246.32.0/22 -43.246.36.0/22 -43.246.40.0/22 -43.246.44.0/22 -43.246.48.0/22 -43.246.52.0/22 -43.246.56.0/22 -43.246.60.0/22 -43.246.64.0/22 -43.246.68.0/22 -43.246.72.0/22 -43.246.76.0/22 -43.246.80.0/22 -43.246.84.0/22 -43.246.88.0/22 -43.246.92.0/22 -43.246.96.0/22 -43.246.112.0/22 -43.246.212.0/22 -43.246.228.0/22 -43.247.4.0/22 -43.247.8.0/22 -43.247.44.0/22 -43.247.48.0/22 -43.247.68.0/22 -43.247.76.0/22 -43.247.84.0/22 -43.247.88.0/22 -43.247.92.0/22 -43.247.96.0/22 -43.247.100.0/22 -43.247.108.0/22 -43.247.112.0/22 -43.247.148.0/22 -43.247.152.0/22 -43.247.176.0/22 -43.247.180.0/22 -43.247.184.0/22 -43.247.188.0/22 -43.247.196.0/22 -43.247.200.0/22 -43.247.204.0/22 -43.247.208.0/22 -43.247.212.0/22 -43.247.216.0/22 -43.247.220.0/22 -43.247.224.0/22 -43.247.228.0/22 -43.247.232.0/22 -43.247.236.0/22 -43.247.240.0/22 -43.247.244.0/22 -43.247.248.0/22 -43.247.252.0/22 -43.248.0.0/22 -43.248.4.0/22 -43.248.20.0/22 -43.248.28.0/22 -43.248.48.0/22 -43.248.76.0/22 -43.248.80.0/22 -43.248.84.0/22 -43.248.88.0/22 -43.248.92.0/22 -43.248.96.0/22 -43.248.100.0/22 -43.248.104.0/22 -43.248.108.0/22 -43.248.112.0/22 -43.248.116.0/22 -43.248.120.0/22 -43.248.124.0/22 -43.248.128.0/22 -43.248.132.0/22 -43.248.136.0/22 -43.248.140.0/22 -43.248.144.0/22 -43.248.148.0/22 -43.248.176.0/22 -43.248.180.0/22 -43.248.184.0/22 -43.248.188.0/22 -43.248.192.0/22 -43.248.196.0/22 -43.248.200.0/22 -43.248.204.0/22 -43.248.208.0/22 -43.248.228.0/22 -43.248.232.0/22 -43.248.244.0/22 -43.249.4.0/22 -43.249.8.0/22 -43.249.120.0/22 -43.249.132.0/22 -43.249.136.0/22 -43.249.144.0/22 -43.249.148.0/22 -43.249.152.0/22 -43.249.156.0/22 -43.249.160.0/22 -43.249.164.0/22 -43.249.168.0/22 -43.249.192.0/22 -43.249.236.0/22 -43.250.4.0/22 -43.250.12.0/22 -43.250.16.0/22 -43.250.20.0/22 -43.250.28.0/22 -43.250.32.0/22 -43.250.36.0/22 -43.250.72.0/22 -43.250.96.0/22 -43.250.100.0/22 -43.250.104.0/22 -43.250.108.0/22 -43.250.112.0/22 -43.250.116.0/22 -43.250.128.0/22 -43.250.144.0/22 -43.250.148.0/22 -43.250.160.0/22 -43.250.168.0/22 -43.250.172.0/22 -43.250.176.0/22 -43.250.200.0/22 -43.250.212.0/22 -43.250.216.0/22 -43.250.220.0/22 -43.250.236.0/22 -43.250.244.0/22 -43.251.4.0/22 -43.251.8.0/22 -43.251.36.0/22 -43.251.100.0/22 -43.251.116.0/22 -43.251.192.0/22 -43.251.232.0/22 -43.251.236.0/22 -43.251.244.0/22 -43.252.48.0/22 -43.252.56.0/22 -43.252.224.0/22 -43.254.0.0/22 -43.254.4.0/22 -43.254.8.0/22 -43.254.24.0/22 -43.254.36.0/22 -43.254.44.0/22 -43.254.52.0/22 -43.254.64.0/22 -43.254.72.0/22 -43.254.84.0/22 -43.254.88.0/22 -43.254.92.0/22 -43.254.100.0/22 -43.254.104.0/22 -43.254.112.0/22 -43.254.116.0/22 -43.254.128.0/22 -43.254.136.0/22 -43.254.140.0/22 -43.254.144.0/22 -43.254.148.0/22 -43.254.152.0/22 -43.254.156.0/22 -43.254.168.0/22 -43.254.172.0/22 -43.254.180.0/22 -43.254.184.0/22 -43.254.188.0/22 -43.254.192.0/22 -43.254.196.0/22 -43.254.200.0/22 -43.254.208.0/22 -43.254.220.0/22 -43.254.224.0/22 -43.254.228.0/22 -43.254.232.0/22 -43.254.236.0/22 -43.254.240.0/22 -43.254.248.0/22 -43.254.252.0/22 -43.255.0.0/22 -43.255.4.0/22 -43.255.8.0/22 -43.255.16.0/22 -43.255.48.0/22 -43.255.64.0/22 -43.255.68.0/22 -43.255.72.0/22 -43.255.76.0/22 -43.255.84.0/22 -43.255.96.0/22 -43.255.108.0/22 -43.255.144.0/22 -43.255.168.0/22 -43.255.176.0/22 -43.255.184.0/22 -43.255.192.0/22 -43.255.200.0/22 -43.255.204.0/22 -43.255.208.0/22 -43.255.212.0/22 -43.255.224.0/22 -43.255.228.0/22 -43.255.232.0/22 -43.255.244.0/22 -45.40.192.0/18 -45.65.16.0/22 -45.65.20.0/22 -45.65.24.0/22 -45.65.28.0/22 -45.112.132.0/22 -45.112.188.0/22 -45.112.208.0/22 -45.112.212.0/22 -45.112.216.0/22 -45.112.220.0/22 -45.112.228.0/22 -45.112.232.0/22 -45.112.236.0/22 -45.113.12.0/22 -45.113.16.0/22 -45.113.20.0/22 -45.113.24.0/22 -45.113.28.0/22 -45.113.40.0/22 -45.113.52.0/22 -45.113.56.0/22 -45.113.72.0/22 -45.113.144.0/22 -45.113.148.0/22 -45.113.168.0/22 -45.113.176.0/22 -45.113.184.0/22 -45.113.200.0/22 -45.113.204.0/22 -45.113.208.0/22 -45.113.212.0/22 -45.113.216.0/22 -45.113.220.0/22 -45.113.240.0/22 -45.113.252.0/22 -45.114.0.0/22 -45.114.12.0/22 -45.114.32.0/22 -45.114.40.0/22 -45.114.52.0/22 -45.114.96.0/22 -45.114.104.0/22 -45.114.124.0/22 -45.114.136.0/22 -45.114.196.0/22 -45.114.200.0/22 -45.114.228.0/22 -45.114.252.0/22 -45.115.44.0/22 -45.115.100.0/22 -45.115.120.0/22 -45.115.132.0/22 -45.115.144.0/22 -45.115.156.0/22 -45.115.164.0/22 -45.115.200.0/22 -45.115.212.0/22 -45.115.228.0/22 -45.115.236.0/22 -45.115.244.0/22 -45.115.248.0/22 -45.116.16.0/22 -45.116.24.0/22 -45.116.32.0/22 -45.116.36.0/22 -45.116.52.0/22 -45.116.96.0/22 -45.116.100.0/22 -45.116.140.0/22 -45.116.152.0/22 -45.116.208.0/22 -45.117.8.0/22 -45.117.20.0/22 -45.117.68.0/22 -45.117.124.0/22 -45.117.252.0/22 -45.119.52.0/22 -45.119.60.0/22 -45.119.64.0/22 -45.119.68.0/22 -45.119.72.0/22 -45.119.104.0/22 -45.119.116.0/22 -45.119.232.0/22 -45.120.100.0/22 -45.120.140.0/22 -45.120.164.0/22 -45.120.220.0/22 -45.120.240.0/22 -45.121.52.0/22 -45.121.64.0/22 -45.121.68.0/22 -45.121.72.0/22 -45.121.92.0/22 -45.121.96.0/22 -45.121.172.0/22 -45.121.176.0/22 -45.121.212.0/22 -45.121.240.0/22 -45.121.244.0/22 -45.121.248.0/22 -45.121.252.0/22 -45.122.0.0/22 -45.122.4.0/22 -45.122.8.0/22 -45.122.12.0/22 -45.122.16.0/22 -45.122.20.0/22 -45.122.24.0/22 -45.122.28.0/22 -45.122.32.0/22 -45.122.36.0/22 -45.122.40.0/22 -45.122.60.0/22 -45.122.64.0/22 -45.122.68.0/22 -45.122.72.0/22 -45.122.76.0/22 -45.122.80.0/22 -45.122.84.0/22 -45.122.88.0/22 -45.122.92.0/22 -45.122.96.0/21 -45.122.104.0/22 -45.122.108.0/22 -45.122.112.0/22 -45.122.116.0/22 -45.122.160.0/22 -45.122.164.0/22 -45.122.168.0/22 -45.122.172.0/22 -45.122.176.0/22 -45.122.180.0/22 -45.122.184.0/22 -45.122.188.0/22 -45.122.192.0/22 -45.122.196.0/22 -45.122.200.0/22 -45.122.204.0/22 -45.122.208.0/22 -45.122.212.0/22 -45.122.216.0/22 -45.123.28.0/22 -45.123.32.0/22 -45.123.36.0/22 -45.123.44.0/22 -45.123.48.0/22 -45.123.52.0/22 -45.123.56.0/22 -45.123.60.0/22 -45.123.64.0/22 -45.123.68.0/22 -45.123.72.0/22 -45.123.76.0/22 -45.123.80.0/22 -45.123.84.0/22 -45.123.88.0/22 -45.123.120.0/22 -45.123.128.0/22 -45.123.132.0/22 -45.123.136.0/22 -45.123.148.0/22 -45.123.152.0/22 -45.123.156.0/22 -45.123.164.0/22 -45.123.168.0/22 -45.123.172.0/22 -45.123.176.0/22 -45.123.180.0/22 -45.123.184.0/22 -45.123.204.0/22 -45.123.212.0/22 -45.123.224.0/22 -45.123.228.0/22 -45.123.232.0/22 -45.123.236.0/22 -45.123.240.0/22 -45.123.244.0/22 -45.123.248.0/22 -45.123.252.0/22 -45.124.0.0/22 -45.124.20.0/22 -45.124.28.0/22 -45.124.32.0/22 -45.124.36.0/22 -45.124.44.0/22 -45.124.68.0/22 -45.124.76.0/22 -45.124.80.0/22 -45.124.100.0/22 -45.124.124.0/22 -45.124.172.0/22 -45.124.176.0/22 -45.124.208.0/22 -45.124.248.0/22 -45.125.12.0/22 -45.125.16.0/22 -45.125.24.0/22 -45.125.28.0/22 -45.125.44.0/22 -45.125.52.0/22 -45.125.56.0/22 -45.125.76.0/22 -45.125.80.0/22 -45.125.84.0/22 -45.125.88.0/22 -45.125.92.0/22 -45.125.96.0/22 -45.125.100.0/22 -45.125.104.0/22 -45.125.136.0/22 -45.126.48.0/22 -45.126.52.0/22 -45.126.100.0/22 -45.126.108.0/22 -45.126.112.0/22 -45.126.116.0/22 -45.126.120.0/22 -45.126.212.0/22 -45.126.220.0/22 -45.127.8.0/22 -45.127.12.0/22 -45.127.96.0/22 -45.127.128.0/22 -45.127.144.0/22 -45.127.148.0/22 -45.127.156.0/22 -45.127.216.0/22 -45.248.8.0/22 -45.248.80.0/22 -45.248.84.0/22 -45.248.88.0/22 -45.248.96.0/22 -45.248.100.0/22 -45.248.104.0/22 -45.248.108.0/22 -45.248.128.0/22 -45.248.132.0/22 -45.248.204.0/22 -45.248.208.0/22 -45.248.212.0/22 -45.248.216.0/22 -45.248.220.0/22 -45.248.224.0/22 -45.248.228.0/22 -45.248.232.0/22 -45.248.236.0/22 -45.248.240.0/22 -45.248.244.0/22 -45.248.248.0/22 -45.248.252.0/22 -45.249.0.0/22 -45.249.4.0/22 -45.249.12.0/22 -45.249.16.0/22 -45.249.20.0/22 -45.249.24.0/22 -45.249.28.0/22 -45.249.32.0/22 -45.249.36.0/22 -45.249.92.0/22 -45.249.112.0/22 -45.249.188.0/22 -45.249.192.0/22 -45.249.196.0/22 -45.249.200.0/22 -45.249.204.0/22 -45.249.208.0/22 -45.249.212.0/22 -45.250.12.0/22 -45.250.16.0/22 -45.250.28.0/22 -45.250.32.0/22 -45.250.36.0/22 -45.250.40.0/22 -45.250.76.0/22 -45.250.80.0/22 -45.250.84.0/22 -45.250.88.0/22 -45.250.92.0/22 -45.250.96.0/22 -45.250.104.0/22 -45.250.108.0/22 -45.250.112.0/22 -45.250.116.0/22 -45.250.120.0/22 -45.250.124.0/22 -45.250.128.0/22 -45.250.132.0/22 -45.250.136.0/22 -45.250.140.0/22 -45.250.144.0/22 -45.250.148.0/22 -45.250.152.0/22 -45.250.164.0/22 -45.250.180.0/22 -45.250.184.0/22 -45.250.188.0/22 -45.250.192.0/22 -45.251.0.0/22 -45.251.8.0/22 -45.251.16.0/22 -45.251.20.0/22 -45.251.52.0/22 -45.251.84.0/22 -45.251.88.0/22 -45.251.92.0/22 -45.251.96.0/22 -45.251.100.0/22 -45.251.120.0/22 -45.251.124.0/22 -45.251.136.0/22 -45.251.140.0/22 -45.251.144.0/22 -45.251.148.0/22 -45.251.152.0/22 -45.251.156.0/22 -45.251.160.0/22 -45.251.164.0/22 -45.251.168.0/22 -45.251.172.0/22 -45.251.176.0/22 -45.251.180.0/22 -45.251.184.0/22 -45.251.188.0/22 -45.251.192.0/22 -45.251.196.0/22 -45.251.200.0/22 -45.251.204.0/22 -45.251.208.0/22 -45.251.212.0/22 -45.251.216.0/22 -45.251.220.0/22 -45.251.224.0/22 -45.251.240.0/22 -45.252.0.0/22 -45.252.4.0/22 -45.252.8.0/22 -45.252.12.0/22 -45.252.16.0/22 -45.252.20.0/22 -45.252.24.0/22 -45.252.28.0/22 -45.252.32.0/22 -45.252.36.0/22 -45.252.40.0/22 -45.252.44.0/22 -45.252.48.0/22 -45.252.60.0/22 -45.252.84.0/22 -45.252.88.0/22 -45.252.92.0/22 -45.252.96.0/22 -45.252.100.0/22 -45.252.104.0/22 -45.252.108.0/22 -45.252.112.0/22 -45.252.116.0/22 -45.252.120.0/22 -45.252.124.0/22 -45.252.128.0/22 -45.252.132.0/22 -45.252.136.0/22 -45.252.140.0/22 -45.252.144.0/22 -45.252.148.0/22 -45.252.152.0/22 -45.252.156.0/22 -45.252.160.0/22 -45.252.164.0/22 -45.252.168.0/22 -45.252.172.0/22 -45.252.176.0/22 -45.252.192.0/22 -45.252.196.0/22 -45.252.200.0/22 -45.252.204.0/22 -45.252.208.0/22 -45.252.212.0/22 -45.252.216.0/22 -45.252.220.0/22 -45.252.224.0/22 -45.252.228.0/22 -45.252.232.0/22 -45.253.0.0/22 -45.253.4.0/22 -45.253.8.0/22 -45.253.12.0/22 -45.253.16.0/22 -45.253.20.0/22 -45.253.24.0/22 -45.253.28.0/22 -45.253.32.0/22 -45.253.36.0/22 -45.253.40.0/22 -45.253.44.0/22 -45.253.48.0/22 -45.253.52.0/22 -45.253.56.0/22 -45.253.60.0/22 -45.253.64.0/22 -45.253.68.0/22 -45.253.72.0/22 -45.253.76.0/22 -45.253.80.0/22 -45.253.84.0/22 -45.253.92.0/22 -45.253.96.0/22 -45.253.100.0/22 -45.253.104.0/22 -45.253.108.0/22 -45.253.112.0/22 -45.253.116.0/22 -45.253.120.0/22 -45.253.132.0/22 -45.253.136.0/22 -45.253.140.0/22 -45.253.144.0/22 -45.253.148.0/22 -45.253.152.0/22 -45.253.156.0/22 -45.253.160.0/22 -45.253.164.0/22 -45.253.168.0/22 -45.253.172.0/22 -45.253.176.0/22 -45.253.180.0/22 -45.253.184.0/22 -45.253.188.0/22 -45.253.192.0/22 -45.253.196.0/22 -45.253.200.0/22 -45.253.204.0/22 -45.253.208.0/22 -45.253.212.0/22 -45.253.216.0/22 -45.253.220.0/22 -45.253.224.0/22 -45.253.228.0/22 -45.253.232.0/22 -45.253.236.0/22 -45.253.240.0/22 -45.253.244.0/22 -45.254.0.0/22 -45.254.4.0/22 -45.254.8.0/22 -45.254.12.0/22 -45.254.16.0/22 -45.254.20.0/22 -45.254.24.0/22 -45.254.28.0/22 -45.254.40.0/22 -45.254.48.0/22 -45.254.52.0/22 -45.254.56.0/22 -45.254.60.0/22 -45.254.64.0/22 -45.254.68.0/22 -45.254.72.0/22 -45.254.76.0/22 -45.254.80.0/22 -45.254.84.0/22 -45.254.88.0/22 -45.254.92.0/22 -45.254.96.0/22 -45.254.100.0/22 -45.254.104.0/22 -45.254.108.0/22 -45.254.112.0/22 -45.254.116.0/22 -45.254.120.0/22 -45.254.124.0/22 -45.254.128.0/22 -45.254.132.0/22 -45.254.136.0/22 -45.254.140.0/22 -45.254.144.0/22 -45.254.148.0/22 -45.254.152.0/22 -45.254.156.0/22 -45.254.160.0/22 -45.254.164.0/22 -45.254.168.0/22 -45.254.172.0/22 -45.254.176.0/22 -45.254.180.0/22 -45.254.184.0/22 -45.254.188.0/22 -45.254.192.0/22 -45.254.196.0/22 -45.254.200.0/22 -45.254.204.0/22 -45.254.208.0/22 -45.254.212.0/22 -45.254.216.0/22 -45.254.220.0/22 -45.254.224.0/22 -45.254.228.0/22 -45.254.236.0/22 -45.254.240.0/22 -45.254.248.0/22 -45.255.0.0/22 -45.255.4.0/22 -45.255.8.0/22 -45.255.12.0/22 -45.255.16.0/22 -45.255.20.0/22 -45.255.24.0/22 -45.255.28.0/22 -45.255.32.0/22 -45.255.36.0/22 -45.255.40.0/22 -45.255.44.0/22 -45.255.48.0/22 -45.255.52.0/22 -45.255.56.0/22 -45.255.60.0/22 -45.255.64.0/22 -45.255.68.0/22 -45.255.72.0/22 -45.255.76.0/22 -45.255.80.0/22 -45.255.84.0/22 -45.255.88.0/22 -45.255.92.0/22 -45.255.96.0/22 -45.255.100.0/22 -45.255.104.0/22 -45.255.108.0/22 -45.255.112.0/22 -45.255.116.0/22 -45.255.120.0/22 -45.255.124.0/22 -45.255.132.0/22 -45.255.136.0/22 -45.255.140.0/22 -45.255.144.0/22 -45.255.148.0/22 -45.255.152.0/22 -45.255.156.0/22 -45.255.160.0/22 -45.255.164.0/22 -45.255.168.0/22 -45.255.172.0/22 -45.255.176.0/22 -45.255.180.0/22 -45.255.184.0/22 -45.255.188.0/22 -45.255.192.0/22 -45.255.196.0/22 -45.255.200.0/22 -45.255.204.0/22 -45.255.208.0/22 -45.255.212.0/22 -45.255.216.0/22 -45.255.220.0/22 -45.255.224.0/22 -45.255.228.0/22 -45.255.232.0/22 -45.255.236.0/22 -45.255.240.0/22 -45.255.244.0/22 -45.255.248.0/22 -47.92.0.0/14 -47.96.0.0/11 -49.4.0.0/14 -49.51.0.0/16 -49.52.0.0/14 -49.64.0.0/11 -49.112.0.0/13 -49.120.0.0/14 -49.128.0.0/24 -49.128.2.0/23 -49.128.4.0/22 -49.140.0.0/15 -49.152.0.0/14 -49.208.0.0/15 -49.210.0.0/15 -49.220.0.0/14 -49.232.0.0/14 -49.239.0.0/18 -49.239.192.0/18 -49.246.224.0/19 -52.80.0.0/15 -52.82.0.0/15 -52.130.0.0/15 -54.222.0.0/15 -58.14.0.0/15 -58.16.0.0/16 -58.17.0.0/17 -58.17.128.0/17 -58.18.0.0/16 -58.19.0.0/16 -58.20.0.0/16 -58.21.0.0/16 -58.22.0.0/15 -58.24.0.0/15 -58.30.0.0/15 -58.32.0.0/13 -58.40.0.0/15 -58.42.0.0/16 -58.43.0.0/16 -58.44.0.0/14 -58.48.0.0/13 -58.56.0.0/15 -58.58.0.0/16 -58.59.0.0/17 -58.59.128.0/17 -58.60.0.0/14 -58.65.232.0/21 -58.66.0.0/15 -58.68.128.0/17 -58.82.0.0/17 -58.83.0.0/17 -58.83.128.0/17 -58.87.64.0/18 -58.99.128.0/17 -58.100.0.0/15 -58.116.0.0/14 -58.128.0.0/13 -58.144.0.0/16 -58.154.0.0/15 -58.192.0.0/15 -58.194.0.0/15 -58.196.0.0/15 -58.198.0.0/15 -58.200.0.0/13 -58.208.0.0/12 -58.240.0.0/15 -58.242.0.0/15 -58.244.0.0/15 -58.246.0.0/15 -58.248.0.0/13 -59.32.0.0/13 -59.40.0.0/15 -59.42.0.0/16 -59.43.0.0/16 -59.44.0.0/14 -59.48.0.0/16 -59.49.0.0/17 -59.49.128.0/17 -59.50.0.0/16 -59.51.0.0/17 -59.51.128.0/17 -59.52.0.0/14 -59.56.0.0/14 -59.60.0.0/15 -59.62.0.0/15 -59.64.0.0/14 -59.68.0.0/14 -59.72.0.0/15 -59.74.0.0/15 -59.76.0.0/16 -59.77.0.0/16 -59.78.0.0/15 -59.80.0.0/15 -59.82.0.0/15 -59.107.0.0/17 -59.107.128.0/17 -59.108.0.0/15 -59.110.0.0/15 -59.151.0.0/17 -59.152.16.0/22 -59.152.20.0/22 -59.152.24.0/22 -59.152.28.0/22 -59.152.32.0/22 -59.152.36.0/22 -59.152.64.0/22 -59.152.68.0/22 -59.152.72.0/22 -59.152.76.0/22 -59.152.112.0/22 -59.152.116.0/22 -59.153.4.0/22 -59.153.32.0/22 -59.153.60.0/22 -59.153.64.0/22 -59.153.68.0/22 -59.153.72.0/22 -59.153.92.0/22 -59.153.116.0/22 -59.153.136.0/22 -59.153.152.0/22 -59.153.164.0/22 -59.153.168.0/22 -59.153.172.0/22 -59.153.176.0/22 -59.153.180.0/22 -59.153.184.0/22 -59.153.188.0/22 -59.153.192.0/22 -59.155.0.0/16 -59.172.0.0/15 -59.174.0.0/15 -59.191.0.0/17 -59.192.0.0/10 -60.0.0.0/13 -60.8.0.0/15 -60.10.0.0/16 -60.11.0.0/16 -60.12.0.0/16 -60.13.0.0/18 -60.13.64.0/18 -60.13.128.0/17 -60.14.0.0/15 -60.16.0.0/13 -60.24.0.0/14 -60.28.0.0/15 -60.30.0.0/16 -60.31.0.0/16 -60.55.0.0/16 -60.63.0.0/16 -60.160.0.0/15 -60.162.0.0/15 -60.164.0.0/15 -60.166.0.0/15 -60.168.0.0/13 -60.176.0.0/12 -60.194.0.0/15 -60.200.0.0/14 -60.204.0.0/16 -60.205.0.0/16 -60.206.0.0/15 -60.208.0.0/13 -60.216.0.0/15 -60.218.0.0/15 -60.220.0.0/14 -60.232.0.0/15 -60.235.0.0/16 -60.245.128.0/17 -60.247.0.0/16 -60.252.0.0/16 -60.253.128.0/17 -60.255.0.0/16 -61.4.80.0/22 -61.4.84.0/22 -61.4.88.0/21 -61.4.176.0/20 -61.8.160.0/20 -61.14.212.0/22 -61.14.216.0/22 -61.14.220.0/22 -61.14.240.0/22 -61.14.244.0/22 -61.28.0.0/20 -61.28.16.0/20 -61.28.32.0/19 -61.28.64.0/18 -61.29.128.0/18 -61.29.192.0/19 -61.29.224.0/20 -61.29.240.0/21 -61.29.248.0/22 -61.29.254.0/23 -61.45.128.0/18 -61.45.224.0/20 -61.47.128.0/18 -61.48.0.0/14 -61.52.0.0/15 -61.54.0.0/16 -61.55.0.0/16 -61.87.192.0/18 -61.128.0.0/15 -61.130.0.0/15 -61.132.0.0/16 -61.133.0.0/17 -61.133.128.0/17 -61.134.0.0/18 -61.134.64.0/19 -61.134.96.0/19 -61.134.128.0/18 -61.134.192.0/18 -61.135.0.0/16 -61.136.0.0/18 -61.136.64.0/18 -61.136.128.0/17 -61.137.0.0/17 -61.137.128.0/17 -61.138.0.0/18 -61.138.64.0/18 -61.138.128.0/18 -61.138.192.0/18 -61.139.0.0/17 -61.139.128.0/18 -61.139.192.0/18 -61.140.0.0/14 -61.144.0.0/14 -61.148.0.0/15 -61.150.0.0/15 -61.152.0.0/16 -61.153.0.0/16 -61.154.0.0/15 -61.156.0.0/16 -61.157.0.0/16 -61.158.0.0/17 -61.158.128.0/17 -61.159.0.0/18 -61.159.64.0/18 -61.159.128.0/17 -61.160.0.0/16 -61.161.0.0/18 -61.161.64.0/18 -61.161.128.0/17 -61.162.0.0/16 -61.163.0.0/16 -61.164.0.0/16 -61.165.0.0/16 -61.166.0.0/16 -61.167.0.0/16 -61.168.0.0/16 -61.169.0.0/16 -61.170.0.0/15 -61.172.0.0/14 -61.176.0.0/16 -61.177.0.0/16 -61.178.0.0/16 -61.179.0.0/16 -61.180.0.0/17 -61.180.128.0/17 -61.181.0.0/16 -61.182.0.0/16 -61.183.0.0/16 -61.184.0.0/14 -61.188.0.0/16 -61.189.0.0/17 -61.189.128.0/17 -61.190.0.0/15 -61.232.0.0/14 -61.236.0.0/15 -61.240.0.0/14 -62.234.0.0/16 -68.79.0.0/18 -69.230.192.0/18 -69.231.128.0/18 -69.234.192.0/18 -69.235.128.0/18 -71.131.192.0/18 -71.132.0.0/18 -71.136.64.0/18 -71.137.0.0/18 -81.68.0.0/14 -82.156.0.0/15 -94.191.0.0/17 -101.0.0.0/22 -101.1.0.0/22 -101.2.172.0/22 -101.4.0.0/14 -101.16.0.0/12 -101.33.128.0/17 -101.34.0.0/15 -101.36.0.0/18 -101.36.64.0/19 -101.36.128.0/17 -101.37.0.0/16 -101.38.0.0/15 -101.40.0.0/15 -101.42.0.0/15 -101.44.0.0/14 -101.48.0.0/15 -101.50.8.0/22 -101.50.12.0/22 -101.50.56.0/22 -101.52.0.0/16 -101.53.100.0/22 -101.54.0.0/16 -101.55.224.0/21 -101.64.0.0/13 -101.72.0.0/14 -101.76.0.0/15 -101.78.0.0/22 -101.78.32.0/19 -101.80.0.0/12 -101.96.0.0/21 -101.96.8.0/22 -101.96.16.0/20 -101.96.128.0/17 -101.99.96.0/19 -101.101.64.0/19 -101.101.100.0/24 -101.101.102.0/23 -101.101.104.0/21 -101.101.112.0/20 -101.102.64.0/19 -101.102.100.0/23 -101.102.102.0/24 -101.102.104.0/21 -101.102.112.0/20 -101.104.0.0/14 -101.110.64.0/19 -101.110.96.0/20 -101.110.116.0/22 -101.110.120.0/21 -101.120.0.0/14 -101.124.0.0/15 -101.126.0.0/16 -101.128.0.0/22 -101.128.8.0/21 -101.128.16.0/20 -101.128.32.0/19 -101.129.0.0/16 -101.130.0.0/15 -101.132.0.0/14 -101.144.0.0/12 -101.192.0.0/14 -101.196.0.0/16 -101.197.0.0/16 -101.198.0.0/15 -101.200.0.0/15 -101.203.128.0/19 -101.203.160.0/21 -101.203.172.0/22 -101.203.176.0/20 -101.204.0.0/14 -101.224.0.0/13 -101.232.0.0/15 -101.234.64.0/21 -101.234.76.0/22 -101.234.80.0/20 -101.234.96.0/19 -101.236.0.0/14 -101.240.0.0/14 -101.244.0.0/16 -101.245.0.0/16 -101.246.0.0/15 -101.248.0.0/15 -101.251.0.0/22 -101.251.8.0/21 -101.251.16.0/20 -101.251.32.0/19 -101.251.64.0/18 -101.251.128.0/17 -101.252.0.0/15 -101.254.0.0/16 -103.1.8.0/22 -103.1.20.0/22 -103.1.24.0/22 -103.1.72.0/22 -103.1.88.0/22 -103.1.168.0/22 -103.2.108.0/22 -103.2.156.0/22 -103.2.164.0/22 -103.2.200.0/22 -103.2.204.0/22 -103.2.208.0/22 -103.2.212.0/22 -103.3.84.0/22 -103.3.88.0/22 -103.3.92.0/22 -103.3.96.0/22 -103.3.100.0/22 -103.3.104.0/22 -103.3.108.0/22 -103.3.112.0/22 -103.3.116.0/22 -103.3.120.0/22 -103.3.124.0/22 -103.3.128.0/22 -103.3.132.0/22 -103.3.136.0/22 -103.3.140.0/22 -103.3.148.0/22 -103.3.152.0/22 -103.3.156.0/22 -103.4.56.0/22 -103.4.168.0/22 -103.4.184.0/22 -103.4.224.0/22 -103.5.36.0/22 -103.5.52.0/22 -103.5.56.0/22 -103.5.152.0/22 -103.5.168.0/22 -103.5.192.0/22 -103.5.252.0/22 -103.6.76.0/22 -103.6.108.0/22 -103.6.220.0/22 -103.6.228.0/22 -103.7.28.0/22 -103.7.140.0/22 -103.7.212.0/22 -103.7.216.0/22 -103.7.220.0/22 -103.8.0.0/22 -103.8.4.0/22 -103.8.8.0/22 -103.8.32.0/22 -103.8.52.0/22 -103.8.68.0/22 -103.8.108.0/22 -103.8.156.0/22 -103.8.200.0/22 -103.8.204.0/22 -103.8.220.0/22 -103.9.8.0/22 -103.9.24.0/22 -103.9.108.0/22 -103.9.152.0/22 -103.9.192.0/22 -103.9.248.0/22 -103.9.252.0/22 -103.10.0.0/22 -103.10.16.0/22 -103.10.84.0/22 -103.10.140.0/22 -103.11.16.0/22 -103.11.168.0/22 -103.11.180.0/22 -103.12.32.0/22 -103.12.68.0/22 -103.12.92.0/22 -103.12.136.0/22 -103.12.184.0/22 -103.12.232.0/22 -103.13.12.0/22 -103.13.124.0/22 -103.13.144.0/22 -103.13.196.0/22 -103.13.220.0/22 -103.13.244.0/22 -103.14.32.0/22 -103.14.84.0/22 -103.14.100.0/22 -103.14.132.0/22 -103.14.136.0/22 -103.14.156.0/22 -103.14.240.0/22 -103.15.4.0/22 -103.15.8.0/22 -103.15.16.0/22 -103.15.96.0/22 -103.15.200.0/22 -103.16.52.0/22 -103.16.80.0/22 -103.16.84.0/22 -103.16.88.0/22 -103.16.108.0/22 -103.16.124.0/22 -103.17.40.0/22 -103.17.64.0/22 -103.17.120.0/22 -103.17.136.0/22 -103.17.160.0/22 -103.17.204.0/22 -103.17.228.0/22 -103.18.192.0/22 -103.18.208.0/22 -103.18.212.0/22 -103.18.224.0/22 -103.19.12.0/22 -103.19.40.0/22 -103.19.44.0/22 -103.19.64.0/22 -103.19.68.0/22 -103.19.72.0/22 -103.19.232.0/22 -103.20.12.0/22 -103.20.32.0/22 -103.20.44.0/22 -103.20.68.0/22 -103.20.112.0/22 -103.20.128.0/22 -103.20.160.0/22 -103.20.248.0/22 -103.21.112.0/22 -103.21.116.0/22 -103.21.136.0/22 -103.21.140.0/22 -103.21.176.0/22 -103.21.208.0/22 -103.21.240.0/22 -103.22.0.0/22 -103.22.4.0/22 -103.22.8.0/22 -103.22.12.0/22 -103.22.16.0/22 -103.22.20.0/22 -103.22.24.0/22 -103.22.28.0/22 -103.22.32.0/22 -103.22.36.0/22 -103.22.40.0/22 -103.22.44.0/22 -103.22.48.0/22 -103.22.52.0/22 -103.22.56.0/22 -103.22.60.0/22 -103.22.64.0/22 -103.22.68.0/22 -103.22.72.0/22 -103.22.76.0/22 -103.22.80.0/22 -103.22.84.0/22 -103.22.88.0/22 -103.22.92.0/22 -103.22.100.0/22 -103.22.104.0/22 -103.22.108.0/22 -103.22.112.0/22 -103.22.116.0/22 -103.22.120.0/22 -103.22.124.0/22 -103.22.188.0/22 -103.22.228.0/22 -103.22.252.0/22 -103.23.8.0/22 -103.23.56.0/22 -103.23.160.0/22 -103.23.164.0/22 -103.23.176.0/22 -103.23.228.0/22 -103.24.24.0/22 -103.24.116.0/22 -103.24.128.0/22 -103.24.144.0/22 -103.24.176.0/22 -103.24.184.0/22 -103.24.220.0/22 -103.24.228.0/22 -103.24.248.0/22 -103.24.252.0/22 -103.25.8.0/23 -103.25.20.0/22 -103.25.24.0/22 -103.25.28.0/22 -103.25.32.0/22 -103.25.36.0/22 -103.25.40.0/22 -103.25.48.0/22 -103.25.64.0/22 -103.25.68.0/22 -103.25.148.0/22 -103.25.156.0/22 -103.25.216.0/22 -103.26.0.0/22 -103.26.64.0/22 -103.26.76.0/22 -103.26.132.0/22 -103.26.156.0/22 -103.26.160.0/22 -103.26.228.0/22 -103.26.240.0/22 -103.27.4.0/22 -103.27.12.0/22 -103.27.24.0/22 -103.27.56.0/22 -103.27.96.0/22 -103.27.184.0/22 -103.27.208.0/22 -103.27.212.0/22 -103.27.240.0/22 -103.28.4.0/22 -103.28.8.0/22 -103.28.184.0/22 -103.28.204.0/22 -103.28.212.0/22 -103.29.16.0/22 -103.29.128.0/22 -103.29.132.0/22 -103.29.136.0/22 -103.30.20.0/22 -103.30.96.0/22 -103.30.148.0/22 -103.30.200.0/22 -103.30.228.0/22 -103.30.236.0/22 -103.31.0.0/22 -103.31.48.0/22 -103.31.52.0/22 -103.31.56.0/22 -103.31.60.0/22 -103.31.64.0/22 -103.31.68.0/22 -103.31.148.0/22 -103.31.160.0/22 -103.31.168.0/22 -103.31.200.0/22 -103.31.236.0/22 -103.32.0.0/22 -103.32.4.0/22 -103.32.8.0/22 -103.32.12.0/22 -103.32.16.0/22 -103.32.20.0/22 -103.32.24.0/22 -103.32.28.0/22 -103.32.32.0/22 -103.32.36.0/22 -103.32.40.0/22 -103.32.44.0/22 -103.32.48.0/22 -103.32.52.0/22 -103.32.56.0/22 -103.32.60.0/22 -103.32.64.0/22 -103.32.68.0/22 -103.32.72.0/22 -103.32.76.0/22 -103.32.80.0/22 -103.32.84.0/22 -103.32.88.0/22 -103.32.92.0/22 -103.32.96.0/22 -103.32.100.0/22 -103.32.104.0/22 -103.32.108.0/22 -103.32.112.0/22 -103.32.116.0/22 -103.32.120.0/22 -103.32.124.0/22 -103.32.128.0/22 -103.32.132.0/22 -103.32.136.0/22 -103.32.140.0/22 -103.32.144.0/22 -103.32.148.0/22 -103.32.152.0/22 -103.32.156.0/22 -103.32.160.0/22 -103.32.164.0/22 -103.32.168.0/22 -103.32.172.0/22 -103.32.176.0/22 -103.32.180.0/22 -103.32.184.0/22 -103.32.188.0/22 -103.32.192.0/22 -103.32.196.0/22 -103.32.200.0/22 -103.32.204.0/22 -103.32.208.0/22 -103.32.212.0/22 -103.32.216.0/22 -103.32.220.0/22 -103.32.224.0/22 -103.32.228.0/22 -103.32.232.0/22 -103.32.236.0/22 -103.32.240.0/22 -103.32.244.0/22 -103.32.248.0/22 -103.32.252.0/22 -103.33.0.0/22 -103.33.4.0/22 -103.33.8.0/22 -103.33.12.0/22 -103.33.16.0/22 -103.33.20.0/22 -103.33.24.0/22 -103.33.28.0/22 -103.33.32.0/22 -103.33.36.0/22 -103.33.40.0/22 -103.33.44.0/22 -103.33.48.0/22 -103.33.52.0/22 -103.33.56.0/22 -103.33.60.0/22 -103.33.64.0/22 -103.33.68.0/22 -103.33.72.0/22 -103.33.76.0/22 -103.33.80.0/22 -103.33.84.0/22 -103.33.88.0/22 -103.33.92.0/22 -103.33.96.0/22 -103.33.100.0/22 -103.33.104.0/22 -103.33.108.0/22 -103.33.112.0/22 -103.33.116.0/22 -103.33.120.0/22 -103.33.124.0/22 -103.33.128.0/22 -103.33.132.0/22 -103.33.136.0/22 -103.33.140.0/22 -103.33.144.0/22 -103.33.148.0/22 -103.33.152.0/22 -103.33.156.0/22 -103.33.160.0/22 -103.33.164.0/22 -103.33.168.0/22 -103.33.172.0/22 -103.33.176.0/22 -103.33.180.0/22 -103.33.184.0/22 -103.33.188.0/22 -103.33.192.0/22 -103.33.196.0/22 -103.33.200.0/22 -103.33.204.0/22 -103.33.208.0/22 -103.33.212.0/22 -103.33.216.0/22 -103.33.220.0/22 -103.33.224.0/22 -103.33.228.0/22 -103.33.232.0/22 -103.33.236.0/22 -103.33.240.0/22 -103.33.244.0/22 -103.33.248.0/22 -103.33.252.0/22 -103.34.0.0/22 -103.34.4.0/22 -103.34.8.0/22 -103.34.12.0/22 -103.34.16.0/22 -103.34.20.0/22 -103.34.24.0/22 -103.34.28.0/22 -103.34.32.0/22 -103.34.36.0/22 -103.34.40.0/22 -103.34.44.0/22 -103.34.48.0/22 -103.34.52.0/22 -103.34.56.0/22 -103.34.60.0/22 -103.34.64.0/22 -103.34.68.0/22 -103.34.72.0/22 -103.34.76.0/22 -103.34.80.0/22 -103.34.84.0/22 -103.34.88.0/22 -103.34.92.0/22 -103.34.96.0/22 -103.34.100.0/22 -103.34.104.0/22 -103.34.108.0/22 -103.34.112.0/22 -103.34.116.0/22 -103.34.120.0/22 -103.34.124.0/22 -103.34.128.0/22 -103.34.132.0/22 -103.34.136.0/22 -103.34.140.0/22 -103.34.144.0/22 -103.34.148.0/22 -103.34.152.0/22 -103.34.156.0/22 -103.34.160.0/22 -103.34.164.0/22 -103.34.168.0/22 -103.34.172.0/22 -103.34.176.0/22 -103.34.180.0/22 -103.34.184.0/22 -103.34.188.0/22 -103.34.192.0/22 -103.34.196.0/22 -103.34.200.0/22 -103.34.204.0/22 -103.34.208.0/22 -103.34.212.0/22 -103.34.216.0/22 -103.34.220.0/22 -103.34.224.0/22 -103.34.228.0/22 -103.34.232.0/22 -103.34.236.0/22 -103.34.240.0/22 -103.34.244.0/22 -103.34.248.0/22 -103.34.252.0/22 -103.35.0.0/22 -103.35.4.0/22 -103.35.8.0/22 -103.35.12.0/22 -103.35.16.0/22 -103.35.20.0/22 -103.35.24.0/22 -103.35.28.0/22 -103.35.32.0/22 -103.35.36.0/22 -103.35.40.0/22 -103.35.44.0/22 -103.35.48.0/22 -103.35.104.0/22 -103.35.116.0/22 -103.35.180.0/22 -103.35.200.0/22 -103.35.220.0/22 -103.36.28.0/22 -103.36.36.0/22 -103.36.56.0/22 -103.36.60.0/22 -103.36.64.0/22 -103.36.72.0/22 -103.36.96.0/22 -103.36.132.0/22 -103.36.136.0/22 -103.36.160.0/22 -103.36.164.0/22 -103.36.168.0/22 -103.36.172.0/22 -103.36.176.0/22 -103.36.180.0/22 -103.36.184.0/22 -103.36.188.0/22 -103.36.192.0/22 -103.36.196.0/22 -103.36.200.0/22 -103.36.204.0/22 -103.36.208.0/22 -103.36.212.0/22 -103.36.216.0/22 -103.36.220.0/22 -103.36.224.0/22 -103.36.228.0/22 -103.36.232.0/22 -103.36.236.0/22 -103.36.240.0/22 -103.36.244.0/22 -103.37.0.0/22 -103.37.12.0/22 -103.37.16.0/22 -103.37.24.0/22 -103.37.44.0/22 -103.37.52.0/22 -103.37.56.0/22 -103.37.72.0/22 -103.37.100.0/22 -103.37.104.0/22 -103.37.124.0/22 -103.37.136.0/22 -103.37.140.0/22 -103.37.144.0/22 -103.37.148.0/22 -103.37.152.0/22 -103.37.156.0/22 -103.37.160.0/22 -103.37.164.0/22 -103.37.172.0/22 -103.37.176.0/22 -103.37.188.0/22 -103.37.208.0/22 -103.37.212.0/22 -103.37.216.0/22 -103.37.220.0/22 -103.37.248.0/22 -103.37.252.0/22 -103.38.0.0/22 -103.38.32.0/22 -103.38.40.0/22 -103.38.44.0/22 -103.38.56.0/22 -103.38.76.0/22 -103.38.84.0/22 -103.38.92.0/22 -103.38.96.0/22 -103.38.116.0/22 -103.38.132.0/22 -103.38.140.0/22 -103.38.224.0/22 -103.38.228.0/22 -103.38.232.0/22 -103.39.64.0/22 -103.39.88.0/22 -103.39.100.0/22 -103.39.104.0/22 -103.39.108.0/22 -103.39.160.0/22 -103.39.164.0/22 -103.39.168.0/22 -103.39.172.0/22 -103.39.176.0/22 -103.39.180.0/22 -103.39.184.0/22 -103.39.188.0/22 -103.39.200.0/22 -103.39.204.0/22 -103.39.208.0/22 -103.39.212.0/22 -103.39.216.0/22 -103.39.220.0/22 -103.39.224.0/22 -103.39.228.0/22 -103.39.232.0/22 -103.40.12.0/22 -103.40.16.0/22 -103.40.20.0/22 -103.40.24.0/22 -103.40.28.0/22 -103.40.32.0/22 -103.40.36.0/22 -103.40.40.0/22 -103.40.44.0/22 -103.40.88.0/22 -103.40.100.0/22 -103.40.192.0/22 -103.40.212.0/22 -103.40.220.0/22 -103.40.228.0/22 -103.40.232.0/22 -103.40.236.0/22 -103.40.240.0/22 -103.40.244.0/22 -103.40.248.0/22 -103.40.252.0/22 -103.41.0.0/22 -103.41.16.0/22 -103.41.52.0/22 -103.41.116.0/22 -103.41.140.0/22 -103.41.148.0/22 -103.41.152.0/22 -103.41.160.0/22 -103.41.164.0/22 -103.41.220.0/22 -103.41.224.0/22 -103.41.228.0/22 -103.41.232.0/22 -103.42.8.0/22 -103.42.24.0/22 -103.42.28.0/22 -103.42.32.0/22 -103.42.64.0/22 -103.42.68.0/22 -103.42.76.0/22 -103.42.104.0/22 -103.42.180.0/22 -103.42.232.0/22 -103.43.16.0/22 -103.43.84.0/22 -103.43.96.0/22 -103.43.100.0/22 -103.43.104.0/22 -103.43.124.0/22 -103.43.184.0/22 -103.43.192.0/22 -103.43.196.0/22 -103.43.208.0/22 -103.43.220.0/22 -103.43.224.0/22 -103.43.240.0/22 -103.44.56.0/22 -103.44.80.0/22 -103.44.88.0/22 -103.44.120.0/22 -103.44.124.0/22 -103.44.132.0/22 -103.44.144.0/22 -103.44.168.0/22 -103.44.176.0/22 -103.44.180.0/22 -103.44.184.0/22 -103.44.188.0/22 -103.44.192.0/22 -103.44.196.0/22 -103.44.200.0/22 -103.44.204.0/22 -103.44.224.0/22 -103.44.236.0/22 -103.44.240.0/22 -103.44.244.0/22 -103.44.248.0/22 -103.44.252.0/22 -103.45.0.0/22 -103.45.4.0/22 -103.45.8.0/22 -103.45.12.0/22 -103.45.16.0/22 -103.45.20.0/22 -103.45.24.0/22 -103.45.28.0/22 -103.45.32.0/22 -103.45.36.0/22 -103.45.40.0/22 -103.45.44.0/22 -103.45.48.0/22 -103.45.52.0/22 -103.45.56.0/22 -103.45.60.0/22 -103.45.72.0/22 -103.45.76.0/22 -103.45.80.0/22 -103.45.84.0/22 -103.45.88.0/22 -103.45.92.0/22 -103.45.96.0/22 -103.45.100.0/22 -103.45.104.0/22 -103.45.108.0/22 -103.45.112.0/22 -103.45.116.0/22 -103.45.120.0/22 -103.45.124.0/22 -103.45.128.0/22 -103.45.132.0/22 -103.45.136.0/22 -103.45.140.0/22 -103.45.144.0/22 -103.45.148.0/22 -103.45.152.0/22 -103.45.156.0/22 -103.45.160.0/22 -103.45.164.0/22 -103.45.168.0/22 -103.45.172.0/22 -103.45.176.0/22 -103.45.180.0/22 -103.45.184.0/22 -103.45.188.0/22 -103.45.192.0/22 -103.45.196.0/22 -103.45.200.0/22 -103.45.204.0/22 -103.45.208.0/22 -103.45.212.0/22 -103.45.216.0/22 -103.45.220.0/22 -103.45.224.0/22 -103.45.248.0/22 -103.46.0.0/22 -103.46.12.0/22 -103.46.16.0/22 -103.46.20.0/22 -103.46.24.0/22 -103.46.28.0/22 -103.46.32.0/22 -103.46.36.0/22 -103.46.40.0/22 -103.46.44.0/22 -103.46.48.0/22 -103.46.52.0/22 -103.46.56.0/22 -103.46.60.0/22 -103.46.64.0/22 -103.46.68.0/22 -103.46.72.0/22 -103.46.76.0/22 -103.46.80.0/22 -103.46.84.0/22 -103.46.88.0/22 -103.46.92.0/22 -103.46.96.0/22 -103.46.100.0/22 -103.46.104.0/22 -103.46.108.0/22 -103.46.112.0/22 -103.46.116.0/22 -103.46.120.0/22 -103.46.124.0/22 -103.46.128.0/22 -103.46.132.0/22 -103.46.136.0/22 -103.46.152.0/22 -103.46.156.0/22 -103.46.160.0/22 -103.46.164.0/22 -103.46.168.0/22 -103.46.172.0/22 -103.46.176.0/22 -103.46.180.0/22 -103.46.244.0/22 -103.46.248.0/22 -103.47.4.0/22 -103.47.20.0/22 -103.47.36.0/22 -103.47.40.0/22 -103.47.48.0/22 -103.47.80.0/22 -103.47.96.0/22 -103.47.108.0/22 -103.47.116.0/22 -103.47.120.0/22 -103.47.136.0/22 -103.47.140.0/22 -103.47.212.0/22 -103.48.52.0/22 -103.48.92.0/22 -103.48.144.0/22 -103.48.148.0/22 -103.48.152.0/22 -103.48.156.0/22 -103.48.202.0/23 -103.48.216.0/22 -103.48.220.0/22 -103.48.224.0/22 -103.48.228.0/22 -103.48.232.0/22 -103.48.236.0/22 -103.48.240.0/22 -103.48.244.0/22 -103.49.12.0/22 -103.49.20.0/22 -103.49.72.0/22 -103.49.76.0/22 -103.49.92.0/22 -103.49.96.0/22 -103.49.108.0/22 -103.49.128.0/22 -103.49.176.0/22 -103.49.180.0/22 -103.49.196.0/22 -103.50.36.0/22 -103.50.44.0/22 -103.50.48.0/22 -103.50.52.0/22 -103.50.56.0/22 -103.50.60.0/22 -103.50.64.0/22 -103.50.68.0/22 -103.50.72.0/22 -103.50.108.0/22 -103.50.112.0/22 -103.50.116.0/22 -103.50.120.0/22 -103.50.124.0/22 -103.50.132.0/22 -103.50.136.0/22 -103.50.140.0/22 -103.50.172.0/22 -103.50.176.0/22 -103.50.180.0/22 -103.50.184.0/22 -103.50.188.0/22 -103.50.192.0/22 -103.50.196.0/22 -103.50.200.0/22 -103.50.220.0/22 -103.50.224.0/22 -103.50.228.0/22 -103.50.232.0/22 -103.50.236.0/22 -103.50.240.0/22 -103.50.244.0/22 -103.50.248.0/22 -103.52.40.0/22 -103.52.72.0/22 -103.52.76.0/22 -103.52.80.0/22 -103.52.84.0/22 -103.52.96.0/22 -103.52.100.0/22 -103.52.104.0/22 -103.52.160.0/22 -103.52.164.0/22 -103.52.172.0/22 -103.52.176.0/22 -103.52.184.0/22 -103.52.196.0/22 -103.53.64.0/22 -103.53.68.0/22 -103.53.92.0/22 -103.53.100.0/22 -103.53.124.0/22 -103.53.128.0/22 -103.53.132.0/22 -103.53.136.0/22 -103.53.140.0/22 -103.53.144.0/22 -103.53.180.0/22 -103.53.204.0/22 -103.53.208.0/22 -103.53.212.0/22 -103.53.216.0/22 -103.53.236.0/22 -103.53.248.0/22 -103.54.8.0/22 -103.54.48.0/22 -103.54.60.0/22 -103.54.160.0/22 -103.54.164.0/22 -103.54.212.0/22 -103.54.240.0/22 -103.55.24.0/22 -103.55.80.0/22 -103.55.120.0/22 -103.55.152.0/22 -103.55.172.0/22 -103.55.204.0/22 -103.55.208.0/22 -103.55.228.0/22 -103.55.236.0/22 -103.56.8.0/22 -103.56.16.0/22 -103.56.20.0/22 -103.56.32.0/22 -103.56.56.0/22 -103.56.60.0/22 -103.56.72.0/22 -103.56.76.0/22 -103.56.100.0/22 -103.56.104.0/22 -103.56.140.0/22 -103.56.152.0/22 -103.56.184.0/22 -103.56.200.0/22 -103.57.12.0/22 -103.57.52.0/22 -103.57.56.0/22 -103.57.76.0/22 -103.57.136.0/22 -103.57.196.0/22 -103.58.24.0/22 -103.59.76.0/22 -103.59.100.0/22 -103.59.112.0/22 -103.59.116.0/22 -103.59.120.0/22 -103.59.124.0/22 -103.59.128.0/22 -103.59.148.0/22 -103.59.164.0/22 -103.60.32.0/22 -103.60.44.0/22 -103.60.164.0/22 -103.60.228.0/22 -103.60.236.0/22 -103.61.60.0/22 -103.61.104.0/22 -103.61.140.0/22 -103.61.152.0/22 -103.61.156.0/22 -103.61.160.0/22 -103.61.172.0/22 -103.61.176.0/22 -103.61.188.0/22 -103.62.24.0/22 -103.62.52.0/22 -103.62.72.0/22 -103.62.76.0/22 -103.62.80.0/22 -103.62.84.0/22 -103.62.88.0/22 -103.62.96.0/22 -103.62.100.0/22 -103.62.104.0/22 -103.62.108.0/22 -103.62.112.0/22 -103.62.116.0/22 -103.62.120.0/22 -103.62.124.0/22 -103.62.128.0/22 -103.62.132.0/22 -103.62.156.0/22 -103.62.160.0/22 -103.62.164.0/22 -103.62.168.0/22 -103.62.172.0/22 -103.62.176.0/22 -103.62.180.0/22 -103.62.184.0/22 -103.62.188.0/22 -103.62.192.0/22 -103.62.204.0/22 -103.62.208.0/22 -103.62.212.0/22 -103.62.216.0/22 -103.62.220.0/22 -103.62.224.0/22 -103.63.32.0/22 -103.63.36.0/22 -103.63.40.0/22 -103.63.44.0/22 -103.63.48.0/22 -103.63.52.0/22 -103.63.56.0/22 -103.63.60.0/22 -103.63.64.0/22 -103.63.68.0/22 -103.63.72.0/22 -103.63.76.0/22 -103.63.80.0/22 -103.63.84.0/22 -103.63.88.0/22 -103.63.140.0/22 -103.63.144.0/22 -103.63.152.0/22 -103.63.160.0/22 -103.63.164.0/22 -103.63.168.0/22 -103.63.172.0/22 -103.63.176.0/22 -103.63.180.0/22 -103.63.184.0/22 -103.63.192.0/22 -103.63.196.0/22 -103.63.200.0/22 -103.63.204.0/22 -103.63.208.0/22 -103.63.240.0/22 -103.63.244.0/22 -103.63.248.0/22 -103.63.252.0/22 -103.64.0.0/22 -103.64.4.0/22 -103.64.24.0/22 -103.64.28.0/22 -103.64.32.0/22 -103.64.36.0/22 -103.64.40.0/22 -103.64.44.0/22 -103.64.48.0/22 -103.64.52.0/22 -103.64.56.0/22 -103.64.60.0/22 -103.64.64.0/22 -103.64.68.0/22 -103.64.72.0/22 -103.64.76.0/22 -103.64.80.0/22 -103.64.84.0/22 -103.64.88.0/22 -103.64.92.0/22 -103.64.96.0/22 -103.64.100.0/22 -103.64.104.0/22 -103.64.108.0/22 -103.64.112.0/22 -103.64.116.0/22 -103.64.120.0/22 -103.64.124.0/22 -103.64.140.0/22 -103.64.144.0/22 -103.64.152.0/22 -103.64.156.0/22 -103.64.160.0/22 -103.64.164.0/22 -103.64.168.0/22 -103.64.172.0/22 -103.64.176.0/22 -103.64.180.0/22 -103.64.184.0/22 -103.64.188.0/22 -103.64.192.0/22 -103.64.196.0/22 -103.64.200.0/22 -103.64.204.0/22 -103.64.208.0/22 -103.64.212.0/22 -103.64.216.0/22 -103.64.220.0/22 -103.64.224.0/22 -103.64.228.0/22 -103.64.232.0/22 -103.64.236.0/22 -103.64.240.0/22 -103.64.244.0/22 -103.64.248.0/22 -103.64.252.0/22 -103.65.0.0/22 -103.65.4.0/22 -103.65.8.0/22 -103.65.12.0/22 -103.65.16.0/22 -103.65.36.0/22 -103.65.40.0/22 -103.65.48.0/22 -103.65.52.0/22 -103.65.56.0/22 -103.65.60.0/22 -103.65.64.0/22 -103.65.68.0/22 -103.65.72.0/22 -103.65.76.0/22 -103.65.80.0/22 -103.65.84.0/22 -103.65.88.0/22 -103.65.92.0/22 -103.65.100.0/22 -103.65.104.0/22 -103.65.108.0/22 -103.65.112.0/22 -103.65.144.0/22 -103.65.148.0/22 -103.65.152.0/22 -103.65.156.0/22 -103.65.160.0/22 -103.65.164.0/22 -103.65.168.0/22 -103.65.172.0/22 -103.66.32.0/22 -103.66.40.0/22 -103.66.92.0/22 -103.66.108.0/22 -103.66.200.0/22 -103.66.216.0/22 -103.66.240.0/22 -103.66.244.0/22 -103.66.248.0/22 -103.66.252.0/22 -103.67.0.0/22 -103.67.4.0/22 -103.67.8.0/22 -103.67.100.0/22 -103.67.104.0/22 -103.67.108.0/22 -103.67.112.0/22 -103.67.116.0/22 -103.67.120.0/22 -103.67.124.0/22 -103.67.128.0/22 -103.67.132.0/22 -103.67.136.0/22 -103.67.140.0/22 -103.67.144.0/22 -103.67.148.0/22 -103.67.172.0/22 -103.67.192.0/22 -103.67.212.0/22 -103.67.252.0/22 -103.68.64.0/22 -103.68.88.0/22 -103.68.100.0/22 -103.68.128.0/22 -103.68.192.0/22 -103.69.16.0/22 -103.69.116.0/22 -103.69.132.0/22 -103.69.152.0/22 -103.69.212.0/22 -103.70.8.0/22 -103.70.148.0/22 -103.70.184.0/22 -103.70.220.0/22 -103.70.224.0/22 -103.70.236.0/22 -103.70.252.0/22 -103.71.0.0/22 -103.71.32.0/22 -103.71.48.0/22 -103.71.68.0/22 -103.71.72.0/22 -103.71.80.0/22 -103.71.84.0/22 -103.71.88.0/22 -103.71.120.0/22 -103.71.124.0/22 -103.71.128.0/22 -103.71.144.0/22 -103.71.196.0/22 -103.71.200.0/22 -103.71.232.0/22 -103.72.12.0/22 -103.72.16.0/22 -103.72.20.0/22 -103.72.24.0/22 -103.72.28.0/22 -103.72.32.0/22 -103.72.36.0/22 -103.72.40.0/22 -103.72.44.0/22 -103.72.48.0/22 -103.72.52.0/22 -103.72.112.0/22 -103.72.116.0/22 -103.72.120.0/22 -103.72.124.0/22 -103.72.128.0/22 -103.72.132.0/22 -103.72.144.0/22 -103.72.148.0/22 -103.72.172.0/22 -103.72.180.0/22 -103.72.224.0/22 -103.72.228.0/22 -103.72.232.0/22 -103.72.236.0/22 -103.72.240.0/22 -103.72.244.0/22 -103.72.248.0/22 -103.72.252.0/22 -103.73.0.0/22 -103.73.4.0/22 -103.73.8.0/22 -103.73.12.0/22 -103.73.16.0/22 -103.73.20.0/22 -103.73.24.0/22 -103.73.28.0/22 -103.73.48.0/22 -103.73.88.0/22 -103.73.96.0/22 -103.73.116.0/22 -103.73.120.0/22 -103.73.128.0/22 -103.73.132.0/22 -103.73.136.0/22 -103.73.140.0/22 -103.73.144.0/22 -103.73.168.0/22 -103.73.176.0/22 -103.73.204.0/22 -103.73.208.0/22 -103.73.240.0/22 -103.73.244.0/22 -103.73.248.0/22 -103.74.24.0/22 -103.74.28.0/22 -103.74.32.0/22 -103.74.36.0/22 -103.74.40.0/22 -103.74.44.0/22 -103.74.48.0/22 -103.74.56.0/22 -103.74.60.0/22 -103.74.80.0/22 -103.74.124.0/22 -103.74.148.0/22 -103.74.152.0/22 -103.74.156.0/22 -103.74.204.0/22 -103.74.232.0/22 -103.75.16.0/22 -103.75.88.0/22 -103.75.92.0/22 -103.75.104.0/22 -103.75.108.0/22 -103.75.112.0/22 -103.75.120.0/22 -103.75.128.0/22 -103.75.144.0/22 -103.75.152.0/22 -103.75.236.0/24 -103.76.60.0/22 -103.76.64.0/22 -103.76.68.0/22 -103.76.72.0/22 -103.76.84.0/22 -103.76.92.0/22 -103.76.216.0/22 -103.76.220.0/22 -103.76.224.0/22 -103.77.28.0/22 -103.77.52.0/22 -103.77.56.0/22 -103.77.72.0/22 -103.77.88.0/22 -103.77.92.0/22 -103.77.132.0/22 -103.77.148.0/22 -103.77.220.0/22 -103.78.56.0/22 -103.78.60.0/22 -103.78.64.0/22 -103.78.68.0/22 -103.78.124.0/22 -103.78.172.0/22 -103.78.176.0/22 -103.78.196.0/22 -103.78.228.0/22 -103.79.24.0/22 -103.79.28.0/22 -103.79.36.0/22 -103.79.40.0/22 -103.79.44.0/22 -103.79.52.0/22 -103.79.56.0/22 -103.79.60.0/22 -103.79.64.0/22 -103.79.68.0/22 -103.79.80.0/22 -103.79.84.0/22 -103.79.120.0/22 -103.79.136.0/22 -103.79.188.0/22 -103.79.192.0/22 -103.79.196.0/22 -103.79.200.0/22 -103.79.204.0/22 -103.79.208.0/22 -103.79.212.0/22 -103.79.240.0/22 -103.80.24.0/22 -103.80.28.0/22 -103.80.44.0/22 -103.80.72.0/22 -103.80.176.0/22 -103.80.180.0/22 -103.80.184.0/22 -103.80.192.0/22 -103.80.200.0/22 -103.80.232.0/22 -103.81.4.0/22 -103.81.8.0/22 -103.81.16.0/22 -103.81.20.0/22 -103.81.44.0/22 -103.81.48.0/22 -103.81.96.0/22 -103.81.120.0/22 -103.81.148.0/22 -103.81.164.0/22 -103.81.168.0/22 -103.81.183.0/24 -103.81.184.0/22 -103.81.200.0/22 -103.81.232.0/22 -103.82.52.0/22 -103.82.60.0/22 -103.82.68.0/22 -103.82.84.0/22 -103.82.104.0/22 -103.82.224.0/22 -103.82.236.0/22 -103.83.44.0/22 -103.83.52.0/22 -103.83.60.0/22 -103.83.64.0/22 -103.83.72.0/22 -103.83.112.0/22 -103.83.120.0/22 -103.83.180.0/22 -103.84.0.0/22 -103.84.12.0/22 -103.84.16.0/22 -103.84.20.0/22 -103.84.24.0/22 -103.84.28.0/22 -103.84.48.0/22 -103.84.64.0/22 -103.84.72.0/22 -103.84.92.0/22 -103.84.108.0/22 -103.84.136.0/22 -103.85.20.0/22 -103.85.24.0/22 -103.85.44.0/22 -103.85.48.0/22 -103.85.84.0/22 -103.85.136.0/22 -103.85.144.0/22 -103.85.164.0/22 -103.85.168.0/22 -103.85.172.0/22 -103.85.176.0/22 -103.85.224.0/22 -103.86.28.0/22 -103.86.32.0/22 -103.86.44.0/22 -103.86.60.0/22 -103.86.80.0/22 -103.86.84.0/22 -103.86.204.0/22 -103.86.208.0/22 -103.86.212.0/22 -103.86.216.0/22 -103.86.220.0/22 -103.86.224.0/22 -103.86.228.0/22 -103.86.232.0/22 -103.86.236.0/22 -103.86.240.0/22 -103.86.244.0/22 -103.86.248.0/22 -103.86.252.0/22 -103.87.0.0/22 -103.87.4.0/22 -103.87.20.0/22 -103.87.32.0/22 -103.87.72.0/22 -103.87.96.0/22 -103.87.132.0/22 -103.87.180.0/22 -103.87.224.0/22 -103.88.4.0/22 -103.88.8.0/22 -103.88.12.0/22 -103.88.16.0/22 -103.88.20.0/22 -103.88.32.0/22 -103.88.36.0/22 -103.88.60.0/22 -103.88.64.0/22 -103.88.72.0/22 -103.88.96.0/22 -103.88.164.0/22 -103.88.176.0/22 -103.88.184.0/22 -103.88.188.0/22 -103.88.212.0/22 -103.89.28.0/22 -103.89.96.0/22 -103.89.100.0/22 -103.89.104.0/22 -103.89.108.0/22 -103.89.112.0/22 -103.89.116.0/22 -103.89.148.0/22 -103.89.172.0/22 -103.89.184.0/22 -103.89.188.0/22 -103.89.192.0/22 -103.89.196.0/22 -103.89.200.0/22 -103.89.204.0/22 -103.89.208.0/22 -103.89.212.0/22 -103.89.216.0/22 -103.89.220.0/22 -103.89.224.0/22 -103.89.228.0/22 -103.90.52.0/22 -103.90.92.0/22 -103.90.100.0/22 -103.90.104.0/22 -103.90.108.0/22 -103.90.112.0/22 -103.90.116.0/22 -103.90.120.0/22 -103.90.124.0/22 -103.90.128.0/22 -103.90.132.0/22 -103.90.152.0/22 -103.90.168.0/22 -103.90.173.0/24 -103.90.176.0/22 -103.90.188.0/22 -103.90.192.0/22 -103.91.36.0/22 -103.91.40.0/22 -103.91.108.0/22 -103.91.152.0/22 -103.91.176.0/22 -103.91.200.0/22 -103.91.208.0/22 -103.91.212.0/22 -103.91.219.0/24 -103.91.236.0/22 -103.91.252.0/22 -103.92.0.0/22 -103.92.4.0/22 -103.92.8.0/22 -103.92.12.0/22 -103.92.48.0/22 -103.92.52.0/22 -103.92.56.0/22 -103.92.60.0/22 -103.92.64.0/22 -103.92.68.0/22 -103.92.72.0/22 -103.92.76.0/22 -103.92.80.0/22 -103.92.86.0/24 -103.92.88.0/22 -103.92.108.0/22 -103.92.124.0/22 -103.92.128.0/24 -103.92.132.0/22 -103.92.156.0/22 -103.92.164.0/22 -103.92.168.0/22 -103.92.172.0/22 -103.92.176.0/22 -103.92.180.0/22 -103.92.184.0/22 -103.92.188.0/22 -103.92.192.0/22 -103.92.236.0/22 -103.92.240.0/22 -103.92.244.0/22 -103.92.248.0/22 -103.92.252.0/22 -103.93.0.0/22 -103.93.4.0/22 -103.93.28.0/22 -103.93.76.0/22 -103.93.84.0/22 -103.93.152.0/22 -103.93.180.0/22 -103.93.204.0/22 -103.94.12.0/22 -103.94.20.0/22 -103.94.28.0/22 -103.94.32.0/22 -103.94.36.0/22 -103.94.40.0/22 -103.94.44.0/22 -103.94.72.0/22 -103.94.88.0/22 -103.94.116.0/22 -103.94.160.0/22 -103.94.180.0/22 -103.94.200.0/22 -103.95.28.0/22 -103.95.52.0/22 -103.95.64.0/22 -103.95.68.0/22 -103.95.88.0/22 -103.95.92.0/22 -103.95.116.0/22 -103.95.128.0/22 -103.95.136.0/22 -103.95.140.0/22 -103.95.144.0/22 -103.95.152.0/22 -103.95.207.0/24 -103.95.216.0/22 -103.95.220.0/22 -103.95.224.0/22 -103.95.236.0/22 -103.95.240.0/22 -103.95.244.0/22 -103.95.248.0/22 -103.95.252.0/22 -103.96.0.0/22 -103.96.8.0/22 -103.96.80.0/22 -103.96.124.0/22 -103.96.136.0/22 -103.96.140.0/24 -103.96.148.0/22 -103.96.152.0/22 -103.96.156.0/22 -103.96.160.0/22 -103.96.164.0/22 -103.96.168.0/22 -103.96.172.0/22 -103.96.176.0/22 -103.96.180.0/22 -103.96.184.0/22 -103.96.188.0/22 -103.96.192.0/22 -103.96.196.0/22 -103.96.200.0/22 -103.96.204.0/22 -103.96.208.0/22 -103.96.212.0/22 -103.96.216.0/22 -103.97.8.0/22 -103.97.12.0/22 -103.97.16.0/22 -103.97.20.0/22 -103.97.24.0/22 -103.97.28.0/22 -103.97.32.0/22 -103.97.36.0/22 -103.97.40.0/22 -103.97.56.0/22 -103.97.60.0/22 -103.97.64.0/22 -103.97.68.0/22 -103.97.72.0/22 -103.97.80.0/22 -103.97.112.0/22 -103.97.116.0/22 -103.97.128.0/22 -103.97.144.0/22 -103.97.148.0/22 -103.97.188.0/22 -103.97.192.0/22 -103.97.224.0/22 -103.97.228.0/23 -103.98.28.0/23 -103.98.40.0/22 -103.98.44.0/22 -103.98.48.0/22 -103.98.56.0/22 -103.98.80.0/22 -103.98.88.0/22 -103.98.92.0/22 -103.98.96.0/22 -103.98.100.0/22 -103.98.124.0/22 -103.98.136.0/22 -103.98.140.0/22 -103.98.144.0/22 -103.98.164.0/22 -103.98.168.0/22 -103.98.180.0/22 -103.98.196.0/22 -103.98.216.0/22 -103.98.220.0/22 -103.98.224.0/22 -103.98.228.0/22 -103.98.232.0/22 -103.98.240.0/22 -103.98.244.0/22 -103.98.248.0/22 -103.98.252.0/22 -103.99.40.0/23 -103.99.52.0/22 -103.99.56.0/22 -103.99.60.0/22 -103.99.76.0/22 -103.99.104.0/22 -103.99.116.0/22 -103.99.120.0/22 -103.99.152.0/22 -103.99.220.0/22 -103.99.232.0/22 -103.99.236.0/22 -103.100.0.0/22 -103.100.32.0/22 -103.100.40.0/22 -103.100.48.0/22 -103.100.52.0/22 -103.100.56.0/22 -103.100.60.0/22 -103.100.64.0/22 -103.100.68.0/22 -103.100.88.0/22 -103.100.116.0/22 -103.100.140.0/22 -103.100.144.0/22 -103.100.236.0/22 -103.100.240.0/22 -103.100.248.0/22 -103.100.252.0/22 -103.101.4.0/22 -103.101.8.0/22 -103.101.12.0/22 -103.101.28.0/22 -103.101.60.0/22 -103.101.120.0/22 -103.101.124.0/22 -103.101.144.0/22 -103.101.148.0/22 -103.101.153.0/24 -103.101.180.0/22 -103.101.184.0/22 -103.102.76.0/22 -103.102.80.0/22 -103.102.168.0/22 -103.102.172.0/22 -103.102.180.0/22 -103.102.184.0/22 -103.102.188.0/22 -103.102.192.0/22 -103.102.196.0/22 -103.102.200.0/22 -103.102.208.0/22 -103.102.212.0/22 -103.103.12.0/22 -103.103.16.0/22 -103.103.36.0/22 -103.103.68.0/22 -103.103.72.0/22 -103.103.176.0/22 -103.103.188.0/22 -103.103.200.0/22 -103.103.204.0/22 -103.103.220.0/22 -103.103.224.0/22 -103.103.228.0/22 -103.103.232.0/22 -103.103.248.0/22 -103.103.252.0/22 -103.104.0.0/22 -103.104.4.0/22 -103.104.36.0/22 -103.104.40.0/22 -103.104.64.0/22 -103.104.104.0/22 -103.104.152.0/22 -103.104.168.0/22 -103.104.172.0/22 -103.104.188.0/22 -103.104.198.0/23 -103.104.252.0/22 -103.105.0.0/22 -103.105.4.0/22 -103.105.12.0/22 -103.105.16.0/22 -103.105.23.0/24 -103.105.56.0/22 -103.105.60.0/22 -103.105.116.0/22 -103.105.132.0/22 -103.105.180.0/22 -103.105.184.0/22 -103.105.200.0/22 -103.105.204.0/22 -103.105.220.0/22 -103.106.36.0/22 -103.106.40.0/22 -103.106.44.0/22 -103.106.60.0/22 -103.106.68.0/22 -103.106.96.0/22 -103.106.120.0/22 -103.106.128.0/22 -103.106.132.0/22 -103.106.160.0/22 -103.106.188.0/22 -103.106.196.0/22 -103.106.202.0/23 -103.106.212.0/22 -103.106.244.0/22 -103.106.252.0/22 -103.107.0.0/22 -103.107.8.0/24 -103.107.28.0/22 -103.107.32.0/22 -103.107.44.0/22 -103.107.72.0/22 -103.107.108.0/22 -103.107.164.0/22 -103.107.168.0/22 -103.107.188.0/22 -103.107.192.0/22 -103.107.208.0/22 -103.107.212.0/22 -103.107.216.0/22 -103.107.220.0/22 -103.108.52.0/22 -103.108.160.0/22 -103.108.164.0/22 -103.108.184.0/23 -103.108.188.0/23 -103.108.192.0/22 -103.108.196.0/22 -103.108.208.0/22 -103.108.212.0/22 -103.108.224.0/22 -103.108.244.0/22 -103.108.251.0/24 -103.109.20.0/22 -103.109.48.0/22 -103.109.88.0/22 -103.109.106.0/23 -103.109.248.0/22 -103.110.80.0/23 -103.110.92.0/22 -103.110.116.0/22 -103.110.127.0/24 -103.110.128.0/23 -103.110.132.0/22 -103.110.136.0/22 -103.110.152.0/22 -103.110.156.0/22 -103.110.188.0/22 -103.110.204.0/22 -103.111.64.0/22 -103.111.172.0/22 -103.111.252.0/22 -103.112.28.0/22 -103.112.68.0/22 -103.112.72.0/22 -103.112.88.0/22 -103.112.92.0/22 -103.112.96.0/22 -103.112.108.0/22 -103.112.112.0/22 -103.112.116.0/22 -103.112.140.0/22 -103.112.172.0/22 -103.112.184.0/22 -103.112.208.0/22 -103.113.4.0/22 -103.113.92.0/22 -103.113.144.0/22 -103.113.220.0/22 -103.113.232.0/22 -103.113.236.0/22 -103.114.4.0/22 -103.114.28.0/22 -103.114.68.0/22 -103.114.72.0/22 -103.114.100.0/22 -103.114.132.0/22 -103.114.148.0/22 -103.114.156.0/22 -103.114.176.0/22 -103.114.212.0/22 -103.114.236.0/22 -103.114.240.0/22 -103.115.16.0/22 -103.115.40.0/22 -103.115.44.0/22 -103.115.48.0/22 -103.115.52.0/22 -103.115.56.0/22 -103.115.60.0/22 -103.115.64.0/22 -103.115.68.0/22 -103.115.92.0/22 -103.115.120.0/22 -103.115.148.0/22 -103.115.204.0/23 -103.115.248.0/22 -103.116.20.0/22 -103.116.40.0/22 -103.116.64.0/22 -103.116.72.0/22 -103.116.76.0/22 -103.116.92.0/22 -103.116.120.0/22 -103.116.128.0/22 -103.116.132.0/23 -103.116.148.0/22 -103.116.184.0/22 -103.116.206.0/23 -103.116.220.0/22 -103.116.224.0/22 -103.116.228.0/22 -103.117.16.0/22 -103.117.72.0/22 -103.117.88.0/22 -103.117.132.0/22 -103.117.136.0/22 -103.117.188.0/22 -103.117.220.0/22 -103.118.19.0/24 -103.118.36.0/22 -103.118.52.0/22 -103.118.56.0/22 -103.118.60.0/22 -103.118.64.0/22 -103.118.68.0/22 -103.118.72.0/22 -103.118.88.0/22 -103.118.173.0/24 -103.118.192.0/22 -103.118.196.0/22 -103.118.200.0/22 -103.118.204.0/22 -103.118.208.0/22 -103.118.212.0/22 -103.118.216.0/22 -103.118.220.0/22 -103.118.240.0/22 -103.118.244.0/22 -103.118.248.0/22 -103.118.252.0/22 -103.119.0.0/22 -103.119.12.0/22 -103.119.16.0/22 -103.119.28.0/22 -103.119.44.0/22 -103.119.104.0/22 -103.119.115.0/24 -103.119.156.0/22 -103.119.180.0/22 -103.119.200.0/22 -103.119.224.0/22 -103.120.52.0/22 -103.120.72.0/22 -103.120.88.0/22 -103.120.96.0/22 -103.120.100.0/22 -103.120.140.0/22 -103.120.196.0/22 -103.120.224.0/22 -103.121.52.0/22 -103.121.92.0/22 -103.121.160.0/22 -103.121.164.0/22 -103.121.250.0/24 -103.121.252.0/22 -103.122.48.0/22 -103.122.176.0/22 -103.122.192.0/22 -103.122.240.0/22 -103.123.4.0/22 -103.123.56.0/22 -103.123.88.0/22 -103.123.92.0/22 -103.123.116.0/22 -103.123.160.0/22 -103.123.176.0/22 -103.123.200.0/22 -103.123.204.0/22 -103.123.208.0/22 -103.123.212.0/22 -103.124.24.0/22 -103.124.48.0/22 -103.124.64.0/22 -103.124.212.0/22 -103.124.216.0/22 -103.125.20.0/22 -103.125.44.0/22 -103.125.132.0/22 -103.125.164.0/22 -103.125.196.0/22 -103.125.236.0/22 -103.125.248.0/22 -103.126.0.0/22 -103.126.16.0/22 -103.126.44.0/22 -103.126.100.0/22 -103.126.124.0/22 -103.126.128.0/22 -103.126.132.0/22 -103.126.208.0/22 -103.126.241.0/24 -103.129.52.0/22 -103.130.132.0/22 -103.130.152.0/24 -103.130.160.0/22 -103.130.228.0/22 -103.131.20.0/22 -103.131.36.0/22 -103.131.152.0/22 -103.131.168.0/22 -103.131.176.0/22 -103.131.224.0/22 -103.131.228.0/22 -103.131.240.0/22 -103.132.60.0/22 -103.132.64.0/22 -103.132.68.0/22 -103.132.72.0/22 -103.132.76.0/22 -103.132.80.0/22 -103.132.104.0/22 -103.132.108.0/22 -103.132.112.0/22 -103.132.116.0/22 -103.132.120.0/22 -103.132.160.0/22 -103.132.164.0/22 -103.132.188.0/22 -103.132.208.0/22 -103.132.212.0/22 -103.132.234.0/23 -103.133.12.0/22 -103.133.40.0/22 -103.133.128.0/22 -103.133.136.0/22 -103.133.176.0/22 -103.133.232.0/22 -103.134.12.0/24 -103.134.196.0/22 -103.135.80.0/22 -103.135.124.0/22 -103.135.148.0/22 -103.135.156.0/22 -103.135.160.0/22 -103.135.164.0/22 -103.135.176.0/22 -103.135.184.0/22 -103.135.192.0/22 -103.135.196.0/22 -103.135.236.0/22 -103.136.128.0/22 -103.136.232.0/22 -103.137.58.0/23 -103.137.60.0/24 -103.137.76.0/22 -103.137.136.0/23 -103.137.149.0/24 -103.137.180.0/22 -103.137.236.0/22 -103.138.2.0/23 -103.138.12.0/23 -103.138.80.0/22 -103.138.134.0/23 -103.138.156.0/23 -103.138.208.0/23 -103.138.220.0/23 -103.138.246.0/23 -103.138.248.0/23 -103.139.0.0/23 -103.139.2.0/23 -103.139.22.0/23 -103.139.113.0/24 -103.139.134.0/23 -103.139.136.0/23 -103.139.172.0/23 -103.139.200.0/23 -103.139.204.0/23 -103.139.212.0/23 -103.140.8.0/23 -103.140.14.0/23 -103.140.70.0/23 -103.140.126.0/23 -103.140.140.0/23 -103.140.144.0/23 -103.140.152.0/23 -103.140.192.0/23 -103.140.194.0/23 -103.140.228.0/23 -103.141.10.0/23 -103.141.36.0/23 -103.141.58.0/23 -103.141.128.0/23 -103.141.186.0/23 -103.141.242.0/23 -103.142.28.0/23 -103.142.58.0/23 -103.142.82.0/23 -103.142.96.0/23 -103.142.102.0/23 -103.142.122.0/23 -103.142.128.0/23 -103.142.140.0/23 -103.142.154.0/23 -103.142.156.0/23 -103.142.172.0/23 -103.142.180.0/23 -103.142.186.0/23 -103.142.190.0/23 -103.142.220.0/23 -103.142.230.0/24 -103.142.234.0/23 -103.142.238.0/23 -103.142.248.0/23 -103.143.16.0/23 -103.143.18.0/23 -103.143.31.0/24 -103.143.74.0/23 -103.143.120.0/23 -103.143.124.0/23 -103.143.132.0/23 -103.143.134.0/23 -103.143.174.0/23 -103.143.228.0/23 -103.144.40.0/23 -103.144.52.0/23 -103.144.66.0/23 -103.144.70.0/23 -103.144.72.0/23 -103.144.108.0/23 -103.144.136.0/23 -103.144.148.0/23 -103.144.158.0/23 -103.144.240.0/23 -103.145.38.0/23 -103.145.40.0/23 -103.145.42.0/23 -103.145.60.0/23 -103.145.72.0/23 -103.145.80.0/23 -103.145.86.0/23 -103.145.92.0/23 -103.145.94.0/23 -103.145.98.0/23 -103.145.106.0/23 -103.145.122.0/23 -103.145.188.0/23 -103.145.190.0/23 -103.146.6.0/23 -103.146.72.0/23 -103.146.88.0/23 -103.146.90.0/23 -103.146.124.0/23 -103.146.126.0/23 -103.146.138.0/23 -103.146.230.0/23 -103.146.236.0/23 -103.146.252.0/23 -103.147.12.0/23 -103.147.124.0/23 -103.147.198.0/23 -103.147.206.0/23 -103.148.174.0/23 -103.149.6.0/23 -103.149.17.0/24 -103.149.44.0/23 -103.149.110.0/23 -103.149.132.0/23 -103.149.144.0/23 -103.149.156.0/23 -103.149.181.0/24 -103.149.190.0/23 -103.149.210.0/23 -103.149.214.0/23 -103.149.220.0/23 -103.149.242.0/23 -103.149.244.0/23 -103.149.246.0/23 -103.149.248.0/23 -103.150.24.0/23 -103.150.66.0/23 -103.150.72.0/23 -103.150.122.0/23 -103.150.126.0/23 -103.150.128.0/23 -103.150.130.0/23 -103.150.146.0/23 -103.150.164.0/23 -103.150.172.0/23 -103.150.180.0/23 -103.150.200.0/23 -103.150.210.0/23 -103.150.214.0/23 -103.150.216.0/23 -103.150.244.0/23 -103.151.4.0/23 -103.151.44.0/23 -103.151.138.0/23 -103.151.142.0/23 -103.151.148.0/23 -103.151.150.0/23 -103.151.158.0/23 -103.151.178.0/23 -103.151.206.0/23 -103.151.216.0/23 -103.151.228.0/23 -103.152.14.0/23 -103.152.24.0/23 -103.152.28.0/23 -103.152.30.0/23 -103.152.56.0/23 -103.152.76.0/23 -103.152.80.0/23 -103.152.98.0/23 -103.152.112.0/23 -103.152.120.0/23 -103.152.122.0/23 -103.152.132.0/23 -103.152.152.0/23 -103.152.168.0/23 -103.152.170.0/23 -103.152.186.0/23 -103.152.190.0/23 -103.152.192.0/23 -103.152.200.0/23 -103.152.208.0/23 -103.152.224.0/23 -103.152.226.0/23 -103.152.246.0/23 -103.152.250.0/23 -103.153.4.0/23 -103.153.36.0/23 -103.153.98.0/23 -103.153.100.0/23 -103.153.114.0/23 -103.153.122.0/23 -103.153.128.0/23 -103.153.132.0/23 -103.153.138.0/23 -103.153.146.0/23 -103.153.160.0/23 -103.154.18.0/23 -103.154.30.0/23 -103.154.32.0/23 -103.154.40.0/23 -103.154.66.0/23 -103.154.162.0/23 -103.154.164.0/23 -103.154.168.0/23 -103.154.242.0/23 -103.155.14.0/23 -103.155.16.0/23 -103.155.34.0/23 -103.155.48.0/23 -103.155.76.0/23 -103.155.100.0/23 -103.155.110.0/23 -103.155.120.0/23 -103.155.214.0/23 -103.155.248.0/23 -103.156.24.0/23 -103.156.28.0/23 -103.156.68.0/23 -103.156.78.0/23 -103.156.104.0/23 -103.156.158.0/23 -103.156.166.0/23 -103.156.174.0/23 -103.156.186.0/23 -103.156.228.0/23 -103.157.30.0/23 -103.157.138.0/23 -103.157.174.0/23 -103.157.212.0/23 -103.157.234.0/23 -103.157.254.0/23 -103.158.0.0/23 -103.158.8.0/23 -103.158.13.0/24 -103.158.16.0/23 -103.158.190.0/23 -103.158.200.0/23 -103.158.224.0/23 -103.159.80.0/23 -103.159.122.0/23 -103.159.124.0/23 -103.159.134.0/23 -103.159.142.0/23 -103.160.32.0/23 -103.160.34.0/23 -103.160.112.0/23 -103.160.114.0/23 -103.160.244.0/23 -103.160.254.0/23 -103.161.14.0/23 -103.161.102.0/23 -103.161.138.0/23 -103.161.208.0/23 -103.161.220.0/23 -103.161.254.0/23 -103.162.10.0/23 -103.162.32.0/23 -103.162.38.0/23 -103.162.116.0/23 -103.163.28.0/23 -103.163.32.0/23 -103.163.46.0/23 -103.163.74.0/23 -103.163.180.0/23 -103.164.4.0/23 -103.164.32.0/23 -103.164.40.0/23 -103.164.42.0/23 -103.164.64.0/23 -103.164.76.0/23 -103.164.178.0/23 -103.164.226.0/23 -103.165.44.0/23 -103.165.52.0/23 -103.165.82.0/23 -103.165.110.0/23 -103.166.20.0/23 -103.166.50.0/23 -103.166.52.0/23 -103.166.54.0/23 -103.166.84.0/23 -103.166.138.0/23 -103.166.242.0/23 -103.166.246.0/23 -103.167.0.0/23 -103.167.36.0/23 -103.168.98.0/23 -103.168.170.0/23 -103.169.50.0/23 -103.169.62.0/23 -103.169.108.0/23 -103.169.162.0/23 -103.169.202.0/23 -103.169.216.0/23 -103.170.4.0/23 -103.192.0.0/22 -103.192.4.0/22 -103.192.8.0/22 -103.192.12.0/22 -103.192.16.0/22 -103.192.20.0/22 -103.192.24.0/22 -103.192.28.0/22 -103.192.48.0/22 -103.192.52.0/22 -103.192.56.0/22 -103.192.84.0/22 -103.192.88.0/22 -103.192.92.0/22 -103.192.96.0/22 -103.192.100.0/22 -103.192.104.0/22 -103.192.108.0/22 -103.192.112.0/22 -103.192.128.0/22 -103.192.132.0/22 -103.192.136.0/22 -103.192.140.0/22 -103.192.144.0/22 -103.192.164.0/22 -103.192.188.0/22 -103.192.208.0/22 -103.192.212.0/22 -103.192.216.0/22 -103.192.252.0/22 -103.193.40.0/22 -103.193.44.0/22 -103.193.120.0/22 -103.193.124.0/22 -103.193.140.0/22 -103.193.144.0/22 -103.193.160.0/22 -103.193.188.0/22 -103.193.192.0/22 -103.193.212.0/22 -103.193.216.0/22 -103.193.220.0/22 -103.193.224.0/22 -103.193.228.0/22 -103.193.232.0/22 -103.193.236.0/22 -103.193.240.0/22 -103.194.16.0/22 -103.195.104.0/22 -103.195.112.0/22 -103.195.136.0/22 -103.195.148.0/22 -103.195.152.0/22 -103.195.160.0/22 -103.196.64.0/22 -103.196.72.0/22 -103.196.88.0/22 -103.196.92.0/22 -103.196.96.0/22 -103.196.168.0/22 -103.196.204.0/22 -103.197.180.0/22 -103.197.228.0/22 -103.198.20.0/22 -103.198.60.0/22 -103.198.64.0/22 -103.198.72.0/22 -103.198.124.0/22 -103.198.156.0/22 -103.198.180.0/22 -103.198.196.0/22 -103.198.216.0/22 -103.198.220.0/22 -103.198.224.0/22 -103.198.228.0/22 -103.198.232.0/22 -103.198.236.0/22 -103.198.240.0/22 -103.198.244.0/22 -103.199.164.0/22 -103.199.196.0/22 -103.199.228.0/22 -103.199.248.0/22 -103.199.252.0/22 -103.200.28.0/22 -103.200.52.0/22 -103.200.64.0/22 -103.200.68.0/22 -103.200.136.0/22 -103.200.140.0/22 -103.200.144.0/22 -103.200.148.0/22 -103.200.152.0/22 -103.200.156.0/22 -103.200.160.0/22 -103.200.164.0/22 -103.200.168.0/22 -103.200.172.0/22 -103.200.176.0/22 -103.200.180.0/22 -103.200.184.0/22 -103.200.188.0/22 -103.200.192.0/22 -103.200.220.0/22 -103.200.224.0/22 -103.200.228.0/22 -103.200.232.0/22 -103.200.236.0/22 -103.200.240.0/22 -103.200.244.0/22 -103.200.248.0/22 -103.200.252.0/22 -103.201.0.0/22 -103.201.4.0/22 -103.201.8.0/22 -103.201.12.0/22 -103.201.16.0/22 -103.201.20.0/22 -103.201.28.0/22 -103.201.32.0/22 -103.201.36.0/22 -103.201.40.0/22 -103.201.44.0/22 -103.201.48.0/22 -103.201.52.0/22 -103.201.56.0/22 -103.201.60.0/22 -103.201.64.0/22 -103.201.76.0/22 -103.201.80.0/22 -103.201.84.0/22 -103.201.88.0/22 -103.201.92.0/22 -103.201.96.0/22 -103.201.100.0/22 -103.201.104.0/22 -103.201.108.0/22 -103.201.112.0/22 -103.201.116.0/22 -103.201.120.0/22 -103.201.152.0/22 -103.201.156.0/22 -103.201.160.0/22 -103.201.164.0/22 -103.201.168.0/22 -103.201.172.0/22 -103.201.176.0/22 -103.201.180.0/22 -103.201.184.0/22 -103.201.188.0/22 -103.201.192.0/22 -103.201.196.0/22 -103.201.200.0/22 -103.201.204.0/22 -103.201.208.0/22 -103.201.212.0/22 -103.201.216.0/22 -103.201.220.0/22 -103.201.224.0/22 -103.201.228.0/22 -103.201.232.0/22 -103.201.236.0/22 -103.201.240.0/22 -103.201.244.0/22 -103.201.248.0/22 -103.201.252.0/22 -103.202.0.0/22 -103.202.4.0/22 -103.202.8.0/22 -103.202.12.0/22 -103.202.16.0/22 -103.202.20.0/22 -103.202.24.0/22 -103.202.28.0/22 -103.202.32.0/22 -103.202.36.0/22 -103.202.40.0/22 -103.202.44.0/22 -103.202.56.0/22 -103.202.60.0/22 -103.202.64.0/22 -103.202.68.0/22 -103.202.72.0/22 -103.202.76.0/22 -103.202.80.0/22 -103.202.84.0/22 -103.202.88.0/22 -103.202.92.0/22 -103.202.96.0/22 -103.202.100.0/22 -103.202.104.0/22 -103.202.108.0/22 -103.202.112.0/22 -103.202.116.0/22 -103.202.120.0/22 -103.202.124.0/22 -103.202.128.0/22 -103.202.132.0/22 -103.202.136.0/22 -103.202.140.0/22 -103.202.144.0/22 -103.202.152.0/22 -103.202.156.0/22 -103.202.160.0/22 -103.202.164.0/22 -103.202.168.0/22 -103.202.172.0/22 -103.202.176.0/22 -103.202.180.0/22 -103.202.184.0/22 -103.202.188.0/22 -103.202.192.0/22 -103.202.196.0/22 -103.202.200.0/21 -103.202.212.0/22 -103.202.228.0/22 -103.202.236.0/22 -103.202.240.0/22 -103.202.244.0/22 -103.202.248.0/22 -103.202.252.0/22 -103.203.0.0/22 -103.203.4.0/22 -103.203.8.0/22 -103.203.12.0/22 -103.203.16.0/22 -103.203.20.0/22 -103.203.24.0/22 -103.203.28.0/22 -103.203.32.0/22 -103.203.56.0/22 -103.203.96.0/22 -103.203.100.0/22 -103.203.104.0/22 -103.203.108.0/22 -103.203.112.0/22 -103.203.116.0/22 -103.203.120.0/22 -103.203.124.0/22 -103.203.128.0/22 -103.203.140.0/22 -103.203.164.0/22 -103.203.168.0/22 -103.203.192.0/22 -103.203.200.0/22 -103.203.212.0/22 -103.203.216.0/22 -103.204.24.0/22 -103.204.72.0/22 -103.204.88.0/22 -103.204.112.0/22 -103.204.136.0/22 -103.204.140.0/22 -103.204.144.0/22 -103.204.148.0/22 -103.204.152.0/22 -103.204.196.0/22 -103.204.232.0/22 -103.204.236.0/22 -103.205.4.0/22 -103.205.8.0/22 -103.205.40.0/22 -103.205.44.0/22 -103.205.52.0/22 -103.205.108.0/22 -103.205.116.0/22 -103.205.120.0/22 -103.205.136.0/22 -103.205.162.0/24 -103.205.188.0/22 -103.205.192.0/22 -103.205.196.0/22 -103.205.200.0/22 -103.205.236.0/22 -103.205.248.0/22 -103.205.252.0/22 -103.206.0.0/22 -103.206.44.0/22 -103.206.148.0/22 -103.207.48.0/22 -103.207.104.0/22 -103.207.164.0/22 -103.207.184.0/22 -103.207.188.0/22 -103.207.192.0/22 -103.207.196.0/22 -103.207.200.0/22 -103.207.204.0/22 -103.207.208.0/22 -103.207.212.0/22 -103.207.220.0/22 -103.207.228.0/22 -103.207.232.0/22 -103.208.12.0/22 -103.208.16.0/22 -103.208.28.0/22 -103.208.40.0/22 -103.208.44.0/22 -103.208.48.0/22 -103.208.148.0/22 -103.209.112.0/22 -103.209.136.0/22 -103.209.200.0/22 -103.209.208.0/22 -103.209.216.0/22 -103.210.0.0/22 -103.210.20.0/22 -103.210.96.0/22 -103.210.156.0/22 -103.210.160.0/22 -103.210.164.0/22 -103.210.168.0/22 -103.210.172.0/22 -103.210.176.0/22 -103.210.180.0/22 -103.210.184.0/22 -103.210.188.0/22 -103.210.216.0/22 -103.211.44.0/22 -103.211.96.0/22 -103.211.100.0/22 -103.211.156.0/22 -103.211.164.0/22 -103.211.192.0/22 -103.211.220.0/22 -103.211.224.0/22 -103.211.248.0/22 -103.212.0.0/22 -103.212.4.0/22 -103.212.8.0/22 -103.212.12.0/22 -103.212.32.0/22 -103.212.44.0/22 -103.212.48.0/22 -103.212.84.0/22 -103.212.100.0/22 -103.212.104.0/22 -103.212.108.0/22 -103.212.148.0/22 -103.212.164.0/22 -103.212.196.0/22 -103.212.200.0/22 -103.212.228.0/22 -103.212.252.0/22 -103.213.40.0/22 -103.213.44.0/22 -103.213.48.0/22 -103.213.52.0/22 -103.213.56.0/22 -103.213.60.0/22 -103.213.64.0/22 -103.213.68.0/22 -103.213.72.0/22 -103.213.76.0/22 -103.213.80.0/22 -103.213.84.0/22 -103.213.88.0/22 -103.213.92.0/22 -103.213.96.0/22 -103.213.132.0/22 -103.213.136.0/22 -103.213.140.0/22 -103.213.144.0/22 -103.213.148.0/22 -103.213.152.0/22 -103.213.156.0/22 -103.213.160.0/22 -103.213.164.0/22 -103.213.168.0/22 -103.213.172.0/22 -103.213.176.0/22 -103.213.180.0/22 -103.213.184.0/22 -103.213.188.0/22 -103.213.248.0/22 -103.214.48.0/22 -103.214.84.0/22 -103.214.168.0/22 -103.214.212.0/22 -103.214.240.0/22 -103.214.244.0/22 -103.215.28.0/22 -103.215.32.0/22 -103.215.36.0/22 -103.215.44.0/22 -103.215.48.0/22 -103.215.100.0/22 -103.215.104.0/22 -103.215.108.0/22 -103.215.116.0/22 -103.215.120.0/22 -103.215.140.0/22 -103.216.4.0/22 -103.216.8.0/22 -103.216.12.0/22 -103.216.16.0/22 -103.216.20.0/22 -103.216.24.0/22 -103.216.28.0/22 -103.216.32.0/22 -103.216.36.0/22 -103.216.40.0/22 -103.216.44.0/22 -103.216.64.0/22 -103.216.108.0/22 -103.216.136.0/22 -103.216.152.0/22 -103.216.224.0/22 -103.216.228.0/22 -103.216.240.0/22 -103.216.244.0/22 -103.216.248.0/22 -103.216.252.0/22 -103.217.0.0/22 -103.217.4.0/22 -103.217.8.0/22 -103.217.12.0/22 -103.217.16.0/22 -103.217.20.0/22 -103.217.24.0/22 -103.217.28.0/22 -103.217.32.0/22 -103.217.36.0/22 -103.217.40.0/22 -103.217.44.0/22 -103.217.48.0/22 -103.217.52.0/22 -103.217.56.0/22 -103.217.60.0/22 -103.217.168.0/22 -103.217.180.0/22 -103.217.184.0/22 -103.217.188.0/22 -103.217.192.0/22 -103.217.196.0/22 -103.217.200.0/22 -103.217.204.0/22 -103.218.0.0/22 -103.218.8.0/22 -103.218.12.0/22 -103.218.16.0/22 -103.218.20.0/22 -103.218.28.0/22 -103.218.32.0/22 -103.218.36.0/22 -103.218.40.0/22 -103.218.44.0/22 -103.218.48.0/22 -103.218.52.0/22 -103.218.56.0/22 -103.218.60.0/22 -103.218.64.0/22 -103.218.68.0/22 -103.218.72.0/22 -103.218.76.0/22 -103.218.80.0/22 -103.218.84.0/22 -103.218.88.0/22 -103.218.92.0/22 -103.218.192.0/22 -103.218.196.0/22 -103.218.200.0/22 -103.218.204.0/22 -103.218.208.0/22 -103.218.212.0/22 -103.218.216.0/22 -103.219.24.0/22 -103.219.28.0/22 -103.219.32.0/22 -103.219.36.0/22 -103.219.64.0/22 -103.219.84.0/22 -103.219.88.0/22 -103.219.92.0/22 -103.219.96.0/22 -103.219.100.0/22 -103.219.176.0/22 -103.219.184.0/22 -103.220.48.0/22 -103.220.52.0/22 -103.220.56.0/22 -103.220.60.0/22 -103.220.64.0/22 -103.220.92.0/22 -103.220.96.0/22 -103.220.100.0/22 -103.220.104.0/22 -103.220.108.0/22 -103.220.116.0/22 -103.220.120.0/22 -103.220.124.0/22 -103.220.128.0/22 -103.220.132.0/22 -103.220.136.0/22 -103.220.140.0/22 -103.220.144.0/22 -103.220.148.0/22 -103.220.152.0/22 -103.220.160.0/22 -103.220.164.0/22 -103.220.168.0/22 -103.220.172.0/22 -103.220.176.0/22 -103.220.180.0/22 -103.220.184.0/22 -103.220.188.0/22 -103.220.192.0/22 -103.220.196.0/22 -103.220.200.0/22 -103.220.240.0/22 -103.220.244.0/22 -103.220.248.0/22 -103.220.252.0/22 -103.221.0.0/22 -103.221.4.0/22 -103.221.8.0/22 -103.221.12.0/22 -103.221.16.0/22 -103.221.20.0/22 -103.221.24.0/22 -103.221.28.0/22 -103.221.32.0/22 -103.221.36.0/22 -103.221.40.0/22 -103.221.44.0/22 -103.221.48.0/22 -103.221.88.0/22 -103.221.92.0/22 -103.221.96.0/22 -103.221.100.0/22 -103.221.104.0/22 -103.221.108.0/22 -103.221.112.0/22 -103.221.116.0/22 -103.221.120.0/22 -103.221.124.0/22 -103.221.128.0/22 -103.221.132.0/22 -103.221.136.0/22 -103.221.140.0/22 -103.221.144.0/22 -103.221.148.0/22 -103.221.152.0/22 -103.221.156.0/22 -103.221.160.0/22 -103.221.164.0/22 -103.221.168.0/22 -103.221.172.0/22 -103.221.176.0/22 -103.221.180.0/22 -103.221.184.0/22 -103.221.188.0/22 -103.221.192.0/22 -103.221.196.0/22 -103.221.200.0/22 -103.221.204.0/22 -103.222.0.0/22 -103.222.4.0/22 -103.222.8.0/22 -103.222.12.0/22 -103.222.16.0/22 -103.222.24.0/22 -103.222.28.0/22 -103.222.32.0/22 -103.222.36.0/22 -103.222.40.0/22 -103.222.44.0/22 -103.222.48.0/22 -103.222.52.0/22 -103.222.56.0/22 -103.222.60.0/22 -103.222.64.0/22 -103.222.68.0/22 -103.222.72.0/22 -103.222.76.0/22 -103.222.80.0/22 -103.222.84.0/22 -103.222.88.0/22 -103.222.92.0/22 -103.222.96.0/22 -103.222.100.0/22 -103.222.104.0/22 -103.222.108.0/22 -103.222.112.0/22 -103.222.116.0/22 -103.222.120.0/22 -103.222.124.0/22 -103.222.128.0/22 -103.222.132.0/22 -103.222.136.0/22 -103.222.140.0/22 -103.222.144.0/22 -103.222.148.0/22 -103.222.152.0/22 -103.222.156.0/22 -103.222.160.0/22 -103.222.164.0/22 -103.222.168.0/22 -103.222.172.0/22 -103.222.176.0/22 -103.222.180.0/22 -103.222.184.0/22 -103.222.188.0/22 -103.222.192.0/22 -103.222.196.0/22 -103.222.200.0/22 -103.222.204.0/22 -103.222.208.0/22 -103.222.212.0/22 -103.222.216.0/22 -103.222.220.0/22 -103.222.224.0/22 -103.222.228.0/22 -103.222.232.0/22 -103.222.240.0/22 -103.222.244.0/22 -103.223.16.0/22 -103.223.20.0/22 -103.223.24.0/22 -103.223.28.0/22 -103.223.32.0/22 -103.223.36.0/22 -103.223.40.0/22 -103.223.44.0/22 -103.223.48.0/22 -103.223.52.0/22 -103.223.56.0/22 -103.223.60.0/22 -103.223.64.0/22 -103.223.68.0/22 -103.223.72.0/22 -103.223.76.0/22 -103.223.80.0/22 -103.223.84.0/22 -103.223.88.0/22 -103.223.92.0/22 -103.223.96.0/22 -103.223.100.0/22 -103.223.104.0/22 -103.223.108.0/22 -103.223.112.0/22 -103.223.116.0/22 -103.223.120.0/22 -103.223.124.0/22 -103.223.128.0/22 -103.223.132.0/22 -103.223.140.0/22 -103.223.144.0/22 -103.223.148.0/22 -103.223.152.0/22 -103.223.156.0/22 -103.223.160.0/22 -103.223.164.0/22 -103.223.168.0/22 -103.223.172.0/22 -103.223.176.0/22 -103.223.180.0/22 -103.223.188.0/22 -103.223.192.0/22 -103.223.196.0/22 -103.223.200.0/22 -103.223.204.0/22 -103.223.208.0/22 -103.223.212.0/22 -103.223.216.0/22 -103.223.220.0/22 -103.223.224.0/22 -103.223.228.0/22 -103.223.232.0/22 -103.223.236.0/22 -103.223.240.0/22 -103.223.244.0/22 -103.223.248.0/22 -103.223.252.0/22 -103.224.0.0/22 -103.224.40.0/22 -103.224.44.0/22 -103.224.60.0/22 -103.224.80.0/22 -103.224.220.0/22 -103.224.224.0/22 -103.224.228.0/22 -103.224.232.0/22 -103.225.84.0/22 -103.226.16.0/22 -103.226.40.0/22 -103.226.56.0/22 -103.226.60.0/22 -103.226.80.0/22 -103.226.132.0/22 -103.226.156.0/22 -103.226.180.0/22 -103.226.196.0/22 -103.227.48.0/22 -103.227.72.0/22 -103.227.76.0/22 -103.227.80.0/22 -103.227.100.0/22 -103.227.120.0/22 -103.227.132.0/22 -103.227.136.0/22 -103.227.196.0/22 -103.227.204.0/22 -103.227.212.0/22 -103.227.228.0/22 -103.228.12.0/22 -103.228.88.0/22 -103.228.128.0/22 -103.228.136.0/22 -103.228.160.0/22 -103.228.176.0/22 -103.228.204.0/22 -103.228.208.0/22 -103.228.228.0/22 -103.228.232.0/22 -103.229.20.0/22 -103.229.60.0/22 -103.229.136.0/22 -103.229.148.0/22 -103.229.172.0/22 -103.229.212.0/22 -103.229.216.0/22 -103.229.220.0/22 -103.229.228.0/22 -103.229.236.0/22 -103.229.240.0/22 -103.230.0.0/22 -103.230.28.0/22 -103.230.44.0/22 -103.230.96.0/22 -103.230.196.0/22 -103.230.200.0/22 -103.230.204.0/22 -103.230.212.0/22 -103.230.236.0/22 -103.231.16.0/22 -103.231.20.0/22 -103.231.64.0/22 -103.231.68.0/22 -103.231.180.0/22 -103.231.184.0/22 -103.231.244.0/22 -103.232.4.0/22 -103.232.144.0/22 -103.232.188.0/22 -103.232.212.0/22 -103.233.4.0/22 -103.233.44.0/22 -103.233.52.0/22 -103.233.104.0/22 -103.233.128.0/22 -103.233.136.0/22 -103.233.228.0/22 -103.234.0.0/22 -103.234.20.0/22 -103.234.56.0/22 -103.234.128.0/22 -103.234.172.0/22 -103.234.180.0/22 -103.234.244.0/22 -103.235.16.0/22 -103.235.48.0/22 -103.235.56.0/22 -103.235.60.0/22 -103.235.80.0/22 -103.235.84.0/22 -103.235.128.0/22 -103.235.132.0/22 -103.235.136.0/22 -103.235.140.0/22 -103.235.144.0/22 -103.235.148.0/22 -103.235.184.0/22 -103.235.192.0/22 -103.235.200.0/22 -103.235.220.0/22 -103.235.224.0/22 -103.235.228.0/22 -103.235.232.0/22 -103.235.236.0/22 -103.235.240.0/22 -103.235.244.0/22 -103.235.248.0/22 -103.235.252.0/22 -103.236.0.0/22 -103.236.4.0/22 -103.236.8.0/22 -103.236.12.0/22 -103.236.16.0/22 -103.236.20.0/22 -103.236.24.0/22 -103.236.28.0/22 -103.236.32.0/22 -103.236.36.0/22 -103.236.40.0/22 -103.236.44.0/22 -103.236.48.0/22 -103.236.52.0/22 -103.236.56.0/22 -103.236.60.0/22 -103.236.64.0/22 -103.236.68.0/22 -103.236.72.0/22 -103.236.76.0/22 -103.236.80.0/22 -103.236.84.0/22 -103.236.88.0/22 -103.236.92.0/22 -103.236.96.0/22 -103.236.120.0/22 -103.236.184.0/22 -103.236.220.0/22 -103.236.232.0/22 -103.236.240.0/22 -103.236.244.0/22 -103.236.248.0/22 -103.236.252.0/22 -103.237.0.0/22 -103.237.4.0/22 -103.237.8.0/22 -103.237.12.0/22 -103.237.24.0/22 -103.237.28.0/22 -103.237.68.0/22 -103.237.88.0/22 -103.237.152.0/22 -103.237.176.0/22 -103.237.180.0/22 -103.237.184.0/22 -103.237.188.0/22 -103.237.192.0/22 -103.237.196.0/22 -103.237.200.0/22 -103.237.204.0/22 -103.237.208.0/22 -103.237.212.0/22 -103.237.216.0/22 -103.237.220.0/22 -103.237.224.0/22 -103.237.228.0/22 -103.237.232.0/22 -103.237.236.0/22 -103.237.240.0/22 -103.237.244.0/22 -103.237.248.0/22 -103.237.252.0/22 -103.238.0.0/22 -103.238.4.0/22 -103.238.16.0/22 -103.238.20.0/22 -103.238.24.0/22 -103.238.28.0/22 -103.238.32.0/22 -103.238.36.0/22 -103.238.40.0/22 -103.238.44.0/22 -103.238.48.0/22 -103.238.52.0/22 -103.238.56.0/22 -103.238.88.0/22 -103.238.92.0/22 -103.238.96.0/22 -103.238.132.0/22 -103.238.140.0/22 -103.238.144.0/22 -103.238.160.0/22 -103.238.164.0/22 -103.238.168.0/22 -103.238.172.0/22 -103.238.176.0/22 -103.238.180.0/22 -103.238.184.0/22 -103.238.188.0/22 -103.238.196.0/22 -103.238.204.0/22 -103.238.252.0/22 -103.239.0.0/22 -103.239.44.0/22 -103.239.68.0/22 -103.239.96.0/22 -103.239.152.0/22 -103.239.156.0/22 -103.239.176.0/22 -103.239.180.0/22 -103.239.184.0/22 -103.239.192.0/22 -103.239.196.0/22 -103.239.204.0/22 -103.239.208.0/22 -103.239.224.0/22 -103.239.244.0/22 -103.240.16.0/22 -103.240.36.0/22 -103.240.72.0/22 -103.240.84.0/22 -103.240.124.0/22 -103.240.156.0/22 -103.240.172.0/22 -103.240.188.0/22 -103.240.244.0/22 -103.241.12.0/22 -103.241.72.0/22 -103.241.92.0/22 -103.241.96.0/22 -103.241.160.0/22 -103.241.184.0/22 -103.241.188.0/22 -103.241.220.0/22 -103.242.64.0/22 -103.242.128.0/22 -103.242.132.0/22 -103.242.160.0/22 -103.242.168.0/22 -103.242.172.0/22 -103.242.176.0/22 -103.242.200.0/22 -103.242.212.0/22 -103.242.220.0/22 -103.242.240.0/22 -103.243.136.0/22 -103.243.252.0/22 -103.244.16.0/22 -103.244.58.0/23 -103.244.60.0/22 -103.244.64.0/22 -103.244.68.0/22 -103.244.72.0/22 -103.244.76.0/22 -103.244.80.0/22 -103.244.84.0/22 -103.244.116.0/22 -103.244.164.0/22 -103.244.232.0/22 -103.244.252.0/22 -103.245.23.0/24 -103.245.52.0/22 -103.245.60.0/22 -103.245.80.0/22 -103.245.124.0/22 -103.245.128.0/22 -103.246.8.0/22 -103.246.12.0/22 -103.246.120.0/22 -103.246.124.0/22 -103.246.132.0/22 -103.246.152.0/22 -103.246.156.0/22 -103.247.168.0/22 -103.247.172.0/22 -103.247.176.0/22 -103.247.200.0/22 -103.247.212.0/22 -103.248.0.0/23 -103.248.64.0/22 -103.248.100.0/22 -103.248.124.0/22 -103.248.152.0/22 -103.248.168.0/22 -103.248.192.0/22 -103.248.212.0/22 -103.248.224.0/22 -103.249.8.0/22 -103.249.12.0/22 -103.249.52.0/22 -103.249.104.0/22 -103.249.128.0/22 -103.249.136.0/22 -103.249.144.0/22 -103.249.164.0/22 -103.249.168.0/22 -103.249.172.0/22 -103.249.176.0/22 -103.249.188.0/22 -103.249.192.0/22 -103.249.244.0/22 -103.249.252.0/22 -103.250.32.0/22 -103.250.104.0/22 -103.250.124.0/22 -103.250.180.0/22 -103.250.192.0/22 -103.250.216.0/22 -103.250.224.0/22 -103.250.236.0/22 -103.250.248.0/22 -103.250.252.0/22 -103.251.32.0/22 -103.251.84.0/22 -103.251.96.0/22 -103.251.124.0/22 -103.251.128.0/22 -103.251.160.0/22 -103.251.192.0/22 -103.251.204.0/22 -103.251.240.0/22 -103.252.28.0/22 -103.252.36.0/22 -103.252.64.0/22 -103.252.96.0/22 -103.252.104.0/22 -103.252.172.0/22 -103.252.204.0/22 -103.252.208.0/22 -103.252.232.0/22 -103.252.248.0/22 -103.253.4.0/22 -103.253.60.0/22 -103.253.204.0/22 -103.253.220.0/22 -103.253.224.0/22 -103.253.232.0/22 -103.254.8.0/22 -103.254.20.0/22 -103.254.64.0/22 -103.254.68.0/22 -103.254.72.0/22 -103.254.76.0/22 -103.254.112.0/22 -103.254.176.0/22 -103.254.188.0/22 -103.254.196.0/24 -103.254.220.0/22 -103.255.56.0/22 -103.255.68.0/22 -103.255.88.0/22 -103.255.92.0/22 -103.255.136.0/22 -103.255.140.0/22 -103.255.184.0/22 -103.255.200.0/22 -103.255.212.0/22 -103.255.228.0/22 -106.0.0.0/24 -106.0.2.0/23 -106.0.4.0/22 -106.0.8.0/21 -106.0.16.0/20 -106.0.44.0/22 -106.0.64.0/18 -106.2.0.0/15 -106.4.0.0/14 -106.8.0.0/15 -106.11.0.0/16 -106.12.0.0/14 -106.16.0.0/12 -106.32.0.0/12 -106.48.0.0/15 -106.50.0.0/16 -106.52.0.0/14 -106.56.0.0/13 -106.74.0.0/16 -106.75.0.0/16 -106.80.0.0/12 -106.108.0.0/14 -106.112.0.0/13 -106.120.0.0/13 -106.224.0.0/12 -109.244.0.0/16 -110.6.0.0/15 -110.16.0.0/14 -110.34.40.0/22 -110.34.44.0/22 -110.40.0.0/14 -110.44.12.0/22 -110.44.144.0/20 -110.48.0.0/16 -110.51.0.0/16 -110.52.0.0/15 -110.56.0.0/13 -110.64.0.0/15 -110.72.0.0/15 -110.75.0.0/17 -110.75.128.0/19 -110.75.160.0/19 -110.75.192.0/18 -110.76.0.0/19 -110.76.32.0/19 -110.76.132.0/22 -110.76.156.0/22 -110.76.184.0/22 -110.76.192.0/18 -110.77.0.0/17 -110.80.0.0/13 -110.88.0.0/14 -110.92.68.0/22 -110.93.32.0/19 -110.94.0.0/15 -110.96.0.0/11 -110.152.0.0/14 -110.156.0.0/15 -110.165.32.0/19 -110.166.0.0/15 -110.172.192.0/18 -110.173.0.0/19 -110.173.32.0/20 -110.173.64.0/19 -110.173.96.0/19 -110.173.192.0/19 -110.176.0.0/13 -110.184.0.0/13 -110.192.0.0/11 -110.228.0.0/14 -110.232.32.0/19 -110.236.0.0/15 -110.240.0.0/12 -111.0.0.0/10 -111.66.0.0/16 -111.67.192.0/20 -111.68.64.0/19 -111.72.0.0/13 -111.85.0.0/16 -111.91.192.0/19 -111.92.248.0/22 -111.92.252.0/22 -111.112.0.0/15 -111.114.0.0/15 -111.116.0.0/15 -111.118.200.0/21 -111.119.64.0/18 -111.119.128.0/19 -111.120.0.0/14 -111.124.0.0/16 -111.126.0.0/15 -111.128.0.0/11 -111.160.0.0/13 -111.170.0.0/16 -111.172.0.0/14 -111.176.0.0/13 -111.186.0.0/15 -111.192.0.0/12 -111.208.0.0/14 -111.212.0.0/14 -111.221.28.0/24 -111.221.128.0/17 -111.222.0.0/16 -111.223.4.0/22 -111.223.8.0/22 -111.223.12.0/22 -111.223.16.0/22 -111.223.240.0/22 -111.223.248.0/22 -111.224.0.0/14 -111.228.0.0/14 -111.235.96.0/19 -111.235.156.0/22 -111.235.160.0/19 -112.0.0.0/10 -112.64.0.0/15 -112.66.0.0/15 -112.73.0.0/16 -112.74.0.0/15 -112.80.0.0/13 -112.88.0.0/13 -112.96.0.0/15 -112.98.0.0/15 -112.100.0.0/14 -112.109.128.0/17 -112.111.0.0/16 -112.112.0.0/14 -112.116.0.0/15 -112.122.0.0/15 -112.124.0.0/14 -112.128.0.0/14 -112.132.0.0/16 -112.137.48.0/21 -112.192.0.0/14 -112.224.0.0/11 -113.0.0.0/13 -113.8.0.0/15 -113.11.192.0/19 -113.12.0.0/14 -113.16.0.0/15 -113.18.0.0/16 -113.21.232.0/22 -113.21.236.0/22 -113.24.0.0/14 -113.31.0.0/16 -113.44.0.0/14 -113.48.0.0/14 -113.52.160.0/19 -113.52.228.0/22 -113.54.0.0/15 -113.56.0.0/15 -113.58.0.0/16 -113.59.0.0/17 -113.59.224.0/22 -113.62.0.0/15 -113.64.0.0/11 -113.96.0.0/12 -113.112.0.0/13 -113.120.0.0/13 -113.128.0.0/15 -113.130.96.0/20 -113.130.112.0/21 -113.132.0.0/14 -113.136.0.0/13 -113.194.0.0/15 -113.197.100.0/22 -113.200.0.0/15 -113.202.0.0/16 -113.204.0.0/14 -113.208.96.0/19 -113.208.128.0/17 -113.209.0.0/16 -113.212.0.0/18 -113.212.88.0/22 -113.212.100.0/22 -113.212.184.0/21 -113.213.0.0/17 -113.214.0.0/15 -113.218.0.0/15 -113.220.0.0/14 -113.224.0.0/12 -113.240.0.0/13 -113.248.0.0/14 -114.28.0.0/16 -114.31.64.0/22 -114.31.68.0/22 -114.54.0.0/15 -114.60.0.0/14 -114.64.0.0/14 -114.68.0.0/16 -114.79.64.0/18 -114.80.0.0/12 -114.96.0.0/13 -114.104.0.0/14 -114.110.0.0/20 -114.110.64.0/18 -114.111.0.0/19 -114.111.160.0/19 -114.112.0.0/14 -114.116.0.0/16 -114.117.0.0/17 -114.117.128.0/17 -114.118.0.0/16 -114.119.0.0/17 -114.119.192.0/21 -114.119.200.0/22 -114.119.204.0/22 -114.119.208.0/20 -114.119.224.0/19 -114.132.0.0/16 -114.135.0.0/16 -114.138.0.0/15 -114.141.64.0/21 -114.141.80.0/22 -114.141.84.0/22 -114.141.128.0/18 -114.196.0.0/15 -114.198.248.0/21 -114.208.0.0/14 -114.212.0.0/15 -114.214.0.0/16 -114.215.0.0/16 -114.216.0.0/13 -114.224.0.0/12 -114.240.0.0/12 -115.24.0.0/14 -115.28.0.0/15 -115.31.64.0/22 -115.31.68.0/22 -115.31.72.0/22 -115.31.76.0/22 -115.32.0.0/14 -115.42.56.0/22 -115.44.0.0/15 -115.46.0.0/16 -115.47.0.0/16 -115.48.0.0/12 -115.69.64.0/20 -115.84.0.0/18 -115.84.192.0/19 -115.85.192.0/18 -115.100.0.0/14 -115.104.0.0/14 -115.120.0.0/14 -115.124.16.0/20 -115.148.0.0/14 -115.152.0.0/15 -115.154.0.0/15 -115.156.0.0/15 -115.158.0.0/16 -115.159.0.0/16 -115.166.64.0/19 -115.168.0.0/14 -115.172.0.0/14 -115.180.0.0/15 -115.182.0.0/16 -115.183.0.0/16 -115.187.0.0/22 -115.187.4.0/22 -115.187.8.0/22 -115.187.12.0/22 -115.190.0.0/15 -115.192.0.0/11 -115.224.0.0/12 -116.0.8.0/21 -116.0.24.0/21 -116.1.0.0/16 -116.2.0.0/15 -116.4.0.0/14 -116.8.0.0/14 -116.13.0.0/16 -116.16.0.0/12 -116.50.0.0/20 -116.52.0.0/14 -116.56.0.0/15 -116.58.128.0/20 -116.58.208.0/20 -116.60.0.0/14 -116.66.0.0/17 -116.66.176.0/22 -116.68.136.0/22 -116.68.140.0/22 -116.68.176.0/22 -116.68.180.0/22 -116.69.0.0/16 -116.70.0.0/17 -116.76.0.0/15 -116.78.0.0/15 -116.85.0.0/16 -116.89.144.0/20 -116.89.240.0/22 -116.90.80.0/20 -116.90.184.0/21 -116.95.0.0/16 -116.112.0.0/14 -116.116.0.0/15 -116.128.0.0/10 -116.192.0.0/16 -116.193.16.0/20 -116.193.32.0/19 -116.193.152.0/22 -116.193.164.0/22 -116.193.176.0/21 -116.194.0.0/15 -116.196.0.0/17 -116.196.128.0/18 -116.196.192.0/18 -116.197.160.0/22 -116.197.164.0/22 -116.198.0.0/16 -116.199.0.0/17 -116.199.128.0/19 -116.204.0.0/17 -116.204.132.0/22 -116.204.168.0/22 -116.204.216.0/22 -116.204.232.0/22 -116.205.0.0/16 -116.206.92.0/22 -116.206.176.0/22 -116.207.0.0/16 -116.208.0.0/14 -116.212.160.0/20 -116.213.44.0/22 -116.213.64.0/18 -116.213.128.0/17 -116.214.32.0/19 -116.214.64.0/20 -116.214.128.0/17 -116.215.0.0/16 -116.216.0.0/14 -116.224.0.0/12 -116.242.0.0/15 -116.244.0.0/15 -116.246.0.0/15 -116.248.0.0/15 -116.251.64.0/18 -116.252.0.0/15 -116.254.104.0/22 -116.254.108.0/22 -116.254.128.0/17 -116.255.128.0/17 -117.8.0.0/13 -117.21.0.0/16 -117.22.0.0/15 -117.24.0.0/13 -117.32.0.0/13 -117.40.0.0/14 -117.44.0.0/15 -117.48.0.0/14 -117.53.48.0/20 -117.53.176.0/20 -117.57.0.0/16 -117.58.0.0/17 -117.59.0.0/16 -117.60.0.0/14 -117.64.0.0/13 -117.72.0.0/15 -117.74.64.0/20 -117.74.80.0/20 -117.74.128.0/17 -117.75.0.0/16 -117.76.0.0/14 -117.80.0.0/12 -117.100.0.0/15 -117.103.16.0/20 -117.103.40.0/21 -117.103.72.0/21 -117.103.128.0/20 -117.104.168.0/21 -117.106.0.0/15 -117.112.0.0/13 -117.120.64.0/18 -117.120.128.0/17 -117.121.0.0/17 -117.121.128.0/18 -117.121.192.0/21 -117.122.128.0/17 -117.124.0.0/14 -117.128.0.0/10 -118.24.0.0/15 -118.26.0.0/19 -118.26.32.0/22 -118.26.40.0/21 -118.26.48.0/21 -118.26.56.0/21 -118.26.64.0/19 -118.26.96.0/21 -118.26.112.0/21 -118.26.120.0/21 -118.26.128.0/20 -118.26.160.0/19 -118.26.192.0/18 -118.28.0.0/15 -118.30.0.0/16 -118.31.0.0/16 -118.64.0.0/15 -118.66.0.0/16 -118.67.112.0/20 -118.72.0.0/13 -118.80.0.0/15 -118.84.0.0/15 -118.88.32.0/19 -118.88.64.0/18 -118.88.128.0/17 -118.89.0.0/16 -118.91.240.0/20 -118.102.16.0/20 -118.102.32.0/21 -118.103.164.0/22 -118.103.168.0/22 -118.103.172.0/22 -118.103.176.0/22 -118.107.180.0/22 -118.112.0.0/13 -118.120.0.0/14 -118.124.0.0/15 -118.126.0.0/16 -118.127.128.0/19 -118.132.0.0/14 -118.144.0.0/14 -118.178.0.0/16 -118.180.0.0/14 -118.184.0.0/17 -118.184.128.0/17 -118.186.0.0/15 -118.188.0.0/16 -118.190.0.0/16 -118.191.0.0/21 -118.191.8.0/22 -118.191.12.0/24 -118.191.16.0/21 -118.191.64.0/20 -118.191.80.0/22 -118.191.128.0/19 -118.191.176.0/20 -118.191.192.0/20 -118.191.208.0/24 -118.191.216.0/22 -118.191.223.0/24 -118.191.224.0/24 -118.191.240.0/20 -118.192.0.0/16 -118.193.0.0/21 -118.193.8.0/21 -118.193.48.0/21 -118.193.96.0/19 -118.193.128.0/17 -118.194.0.0/17 -118.194.128.0/18 -118.194.192.0/19 -118.194.224.0/22 -118.194.240.0/21 -118.195.0.0/17 -118.195.128.0/17 -118.196.0.0/14 -118.202.0.0/15 -118.204.0.0/14 -118.212.0.0/16 -118.213.0.0/16 -118.215.192.0/18 -118.224.0.0/14 -118.228.0.0/15 -118.230.0.0/16 -118.239.0.0/16 -118.242.0.0/16 -118.244.0.0/14 -118.248.0.0/13 -119.0.0.0/15 -119.2.0.0/19 -119.2.128.0/17 -119.3.0.0/16 -119.4.0.0/14 -119.10.0.0/17 -119.15.136.0/21 -119.16.0.0/16 -119.18.192.0/20 -119.18.208.0/21 -119.18.224.0/20 -119.18.240.0/20 -119.19.0.0/16 -119.20.0.0/14 -119.27.64.0/18 -119.27.128.0/19 -119.27.160.0/19 -119.27.192.0/18 -119.28.0.0/15 -119.30.48.0/20 -119.31.192.0/19 -119.32.0.0/14 -119.36.0.0/16 -119.37.0.0/17 -119.37.128.0/18 -119.37.192.0/18 -119.38.0.0/17 -119.38.128.0/18 -119.38.192.0/20 -119.38.208.0/20 -119.38.224.0/19 -119.39.0.0/16 -119.40.0.0/18 -119.40.64.0/20 -119.40.128.0/17 -119.41.0.0/16 -119.42.0.0/19 -119.42.52.0/22 -119.42.128.0/21 -119.42.136.0/21 -119.42.224.0/19 -119.44.0.0/15 -119.48.0.0/13 -119.57.0.0/16 -119.58.0.0/16 -119.59.128.0/17 -119.60.0.0/16 -119.61.0.0/16 -119.62.0.0/16 -119.63.32.0/19 -119.75.208.0/20 -119.78.0.0/15 -119.80.0.0/16 -119.82.208.0/20 -119.84.0.0/14 -119.88.0.0/14 -119.96.0.0/13 -119.108.0.0/15 -119.112.0.0/13 -119.120.0.0/13 -119.128.0.0/12 -119.144.0.0/14 -119.148.160.0/20 -119.148.176.0/20 -119.151.192.0/18 -119.160.200.0/21 -119.161.120.0/22 -119.161.124.0/22 -119.161.128.0/17 -119.162.0.0/15 -119.164.0.0/14 -119.176.0.0/12 -119.232.0.0/15 -119.235.128.0/18 -119.248.0.0/14 -119.252.96.0/21 -119.252.240.0/20 -119.253.0.0/16 -119.254.0.0/15 -120.0.0.0/12 -120.24.0.0/14 -120.30.0.0/16 -120.31.0.0/16 -120.32.0.0/13 -120.40.0.0/14 -120.44.0.0/15 -120.46.0.0/16 -120.47.0.0/16 -120.48.0.0/15 -120.52.0.0/16 -120.53.0.0/16 -120.54.0.0/15 -120.64.0.0/14 -120.68.0.0/14 -120.72.32.0/19 -120.72.128.0/17 -120.76.0.0/14 -120.80.0.0/13 -120.88.8.0/21 -120.90.0.0/15 -120.92.0.0/16 -120.94.0.0/16 -120.95.0.0/16 -120.128.0.0/14 -120.132.0.0/17 -120.132.128.0/17 -120.133.0.0/16 -120.134.0.0/15 -120.136.16.0/22 -120.136.20.0/22 -120.136.128.0/18 -120.137.0.0/17 -120.143.128.0/19 -120.192.0.0/10 -121.0.8.0/21 -121.0.16.0/20 -121.4.0.0/15 -121.8.0.0/13 -121.16.0.0/13 -121.24.0.0/14 -121.28.0.0/15 -121.30.0.0/16 -121.31.0.0/16 -121.32.0.0/14 -121.36.0.0/16 -121.37.0.0/16 -121.38.0.0/15 -121.40.0.0/14 -121.46.0.0/18 -121.46.76.0/22 -121.46.128.0/17 -121.47.0.0/16 -121.48.0.0/15 -121.50.8.0/21 -121.51.0.0/16 -121.52.160.0/19 -121.52.208.0/20 -121.52.224.0/19 -121.54.176.0/21 -121.54.188.0/22 -121.55.0.0/18 -121.56.0.0/15 -121.58.0.0/17 -121.58.136.0/21 -121.58.144.0/20 -121.58.160.0/21 -121.59.0.0/16 -121.60.0.0/14 -121.68.0.0/14 -121.76.0.0/15 -121.79.128.0/18 -121.89.0.0/16 -121.100.128.0/17 -121.101.0.0/18 -121.101.208.0/20 -121.192.0.0/16 -121.193.0.0/16 -121.194.0.0/15 -121.196.0.0/14 -121.200.192.0/21 -121.201.0.0/16 -121.204.0.0/14 -121.224.0.0/12 -121.248.0.0/14 -121.255.0.0/16 -122.0.64.0/18 -122.0.128.0/17 -122.4.0.0/14 -122.8.0.0/16 -122.9.0.0/16 -122.10.128.0/22 -122.10.132.0/23 -122.10.136.0/23 -122.10.164.0/22 -122.10.168.0/21 -122.10.176.0/20 -122.10.192.0/22 -122.10.200.0/21 -122.10.208.0/21 -122.10.216.0/22 -122.10.228.0/22 -122.10.232.0/21 -122.10.240.0/22 -122.11.0.0/17 -122.12.0.0/16 -122.13.0.0/16 -122.14.0.0/17 -122.14.128.0/18 -122.14.192.0/18 -122.48.0.0/16 -122.49.0.0/18 -122.51.0.0/16 -122.64.0.0/11 -122.96.0.0/15 -122.102.0.0/20 -122.102.64.0/20 -122.102.80.0/20 -122.112.0.0/18 -122.112.64.0/18 -122.112.128.0/17 -122.113.0.0/16 -122.114.0.0/16 -122.115.0.0/17 -122.115.128.0/19 -122.115.160.0/19 -122.115.192.0/19 -122.115.224.0/19 -122.119.0.0/16 -122.128.100.0/22 -122.128.120.0/21 -122.136.0.0/13 -122.144.128.0/17 -122.152.192.0/18 -122.156.0.0/14 -122.188.0.0/14 -122.192.0.0/14 -122.198.0.0/16 -122.200.40.0/22 -122.200.44.0/22 -122.200.64.0/18 -122.201.48.0/20 -122.204.0.0/14 -122.224.0.0/12 -122.240.0.0/13 -122.248.24.0/21 -122.248.48.0/20 -122.255.64.0/21 -123.0.128.0/18 -123.4.0.0/14 -123.8.0.0/13 -123.49.128.0/17 -123.50.160.0/19 -123.52.0.0/14 -123.56.0.0/15 -123.58.0.0/20 -123.58.16.0/20 -123.58.32.0/19 -123.58.64.0/19 -123.58.96.0/19 -123.58.128.0/18 -123.58.224.0/20 -123.58.240.0/20 -123.59.0.0/16 -123.60.0.0/16 -123.61.0.0/16 -123.62.0.0/16 -123.64.0.0/11 -123.96.0.0/15 -123.98.0.0/17 -123.99.128.0/17 -123.100.0.0/19 -123.101.0.0/16 -123.103.0.0/17 -123.108.128.0/20 -123.108.208.0/20 -123.112.0.0/12 -123.128.0.0/13 -123.136.80.0/20 -123.137.0.0/16 -123.138.0.0/15 -123.144.0.0/14 -123.148.0.0/16 -123.149.0.0/16 -123.150.0.0/15 -123.152.0.0/13 -123.160.0.0/14 -123.164.0.0/14 -123.168.0.0/14 -123.172.0.0/15 -123.174.0.0/15 -123.176.60.0/22 -123.176.80.0/20 -123.177.0.0/16 -123.178.0.0/15 -123.180.0.0/14 -123.184.0.0/14 -123.188.0.0/14 -123.196.0.0/15 -123.199.128.0/17 -123.206.0.0/15 -123.232.0.0/14 -123.242.0.0/17 -123.242.192.0/22 -123.242.196.0/22 -123.244.0.0/14 -123.249.0.0/16 -123.253.108.0/22 -123.253.240.0/22 -123.254.96.0/22 -123.254.100.0/22 -124.6.64.0/18 -124.14.0.0/15 -124.16.0.0/15 -124.20.0.0/16 -124.21.0.0/20 -124.21.16.0/20 -124.21.32.0/19 -124.21.64.0/18 -124.21.128.0/17 -124.22.0.0/15 -124.28.192.0/18 -124.29.0.0/17 -124.31.0.0/16 -124.40.112.0/20 -124.40.128.0/18 -124.40.192.0/19 -124.40.240.0/22 -124.42.0.0/17 -124.42.128.0/17 -124.47.0.0/18 -124.64.0.0/15 -124.66.0.0/17 -124.67.0.0/16 -124.68.0.0/15 -124.70.0.0/15 -124.72.0.0/16 -124.73.0.0/16 -124.74.0.0/15 -124.76.0.0/14 -124.88.0.0/16 -124.89.0.0/17 -124.89.128.0/17 -124.90.0.0/15 -124.92.0.0/14 -124.108.8.0/21 -124.108.40.0/21 -124.109.96.0/21 -124.112.0.0/15 -124.114.0.0/15 -124.116.0.0/16 -124.117.0.0/16 -124.118.0.0/15 -124.126.0.0/15 -124.128.0.0/13 -124.147.128.0/17 -124.150.137.0/24 -124.151.0.0/16 -124.152.0.0/16 -124.160.0.0/16 -124.161.0.0/16 -124.162.0.0/16 -124.163.0.0/16 -124.164.0.0/14 -124.172.0.0/15 -124.174.0.0/15 -124.192.0.0/15 -124.196.0.0/16 -124.200.0.0/13 -124.220.0.0/14 -124.224.0.0/16 -124.225.0.0/16 -124.226.0.0/15 -124.228.0.0/14 -124.232.0.0/15 -124.234.0.0/15 -124.236.0.0/14 -124.240.0.0/17 -124.240.128.0/18 -124.242.0.0/16 -124.243.192.0/18 -124.248.0.0/17 -124.249.0.0/16 -124.250.0.0/15 -124.254.0.0/18 -125.31.192.0/18 -125.32.0.0/16 -125.33.0.0/16 -125.34.0.0/16 -125.35.0.0/17 -125.35.128.0/17 -125.36.0.0/14 -125.40.0.0/13 -125.58.128.0/17 -125.61.128.0/17 -125.62.0.0/18 -125.64.0.0/13 -125.72.0.0/16 -125.73.0.0/16 -125.74.0.0/15 -125.76.0.0/17 -125.76.128.0/17 -125.77.0.0/16 -125.78.0.0/15 -125.80.0.0/13 -125.88.0.0/13 -125.96.0.0/15 -125.98.0.0/16 -125.104.0.0/13 -125.112.0.0/12 -125.169.0.0/16 -125.171.0.0/16 -125.208.0.0/18 -125.210.0.0/16 -125.211.0.0/16 -125.213.0.0/17 -125.214.96.0/19 -125.215.0.0/18 -125.216.0.0/15 -125.218.0.0/16 -125.219.0.0/16 -125.220.0.0/15 -125.222.0.0/15 -125.254.128.0/18 -125.254.192.0/18 -128.108.0.0/16 -129.28.0.0/16 -129.204.0.0/16 -129.211.0.0/16 -132.232.0.0/16 -134.175.0.0/16 -137.59.59.0/24 -137.59.88.0/22 -139.5.56.0/22 -139.5.60.0/22 -139.5.80.0/22 -139.5.92.0/22 -139.5.108.0/22 -139.5.128.0/22 -139.5.160.0/22 -139.5.192.0/22 -139.5.204.0/22 -139.5.208.0/22 -139.5.212.0/22 -139.5.244.0/22 -139.9.0.0/16 -139.129.0.0/16 -139.148.0.0/16 -139.155.0.0/16 -139.159.0.0/16 -139.170.0.0/16 -139.176.0.0/16 -139.183.0.0/16 -139.186.0.0/16 -139.189.0.0/16 -139.196.0.0/14 -139.200.0.0/13 -139.208.0.0/13 -139.217.0.0/16 -139.219.0.0/16 -139.220.0.0/15 -139.224.0.0/16 -139.226.0.0/15 -140.75.0.0/16 -140.143.0.0/16 -140.179.0.0/16 -140.205.0.0/16 -140.206.0.0/15 -140.210.0.0/17 -140.210.128.0/17 -140.224.0.0/16 -140.237.0.0/16 -140.240.0.0/16 -140.243.0.0/16 -140.246.0.0/16 -140.249.0.0/16 -140.250.0.0/16 -140.255.0.0/16 -142.70.0.0/16 -142.86.0.0/16 -144.0.0.0/16 -144.7.0.0/16 -144.12.0.0/16 -144.48.8.0/22 -144.48.64.0/22 -144.48.88.0/22 -144.48.156.0/22 -144.48.180.0/22 -144.48.184.0/22 -144.48.204.0/22 -144.48.208.0/22 -144.48.212.0/22 -144.48.220.0/22 -144.48.252.0/22 -144.52.0.0/16 -144.123.0.0/16 -144.255.0.0/16 -146.56.192.0/18 -146.196.56.0/22 -146.196.68.0/22 -146.196.72.0/22 -146.196.92.0/22 -146.196.112.0/22 -146.196.116.0/22 -146.196.124.0/22 -148.70.0.0/16 -149.41.0.0/16 -150.0.0.0/16 -150.115.0.0/16 -150.121.0.0/16 -150.122.0.0/16 -150.129.136.0/22 -150.129.192.0/22 -150.129.216.0/22 -150.129.252.0/22 -150.138.0.0/15 -150.158.0.0/16 -150.223.0.0/16 -150.242.0.0/22 -150.242.4.0/22 -150.242.8.0/22 -150.242.28.0/22 -150.242.44.0/22 -150.242.48.0/22 -150.242.52.0/22 -150.242.56.0/22 -150.242.76.0/22 -150.242.80.0/22 -150.242.92.0/22 -150.242.96.0/22 -150.242.112.0/22 -150.242.116.0/22 -150.242.120.0/22 -150.242.152.0/22 -150.242.156.0/22 -150.242.160.0/22 -150.242.164.0/22 -150.242.168.0/22 -150.242.184.0/22 -150.242.188.0/22 -150.242.192.0/22 -150.242.212.0/22 -150.242.224.0/22 -150.242.232.0/22 -150.242.236.0/22 -150.242.240.0/22 -150.242.244.0/22 -150.242.248.0/22 -150.248.0.0/16 -150.255.0.0/16 -152.104.128.0/17 -152.136.0.0/16 -153.0.0.0/16 -153.3.0.0/16 -153.34.0.0/15 -153.36.0.0/15 -153.99.0.0/16 -153.101.0.0/16 -153.118.0.0/15 -154.8.128.0/17 -157.0.0.0/16 -157.18.0.0/16 -157.61.0.0/16 -157.119.0.0/22 -157.119.8.0/22 -157.119.12.0/22 -157.119.16.0/22 -157.119.28.0/22 -157.119.132.0/22 -157.119.136.0/22 -157.119.140.0/22 -157.119.144.0/22 -157.119.148.0/22 -157.119.152.0/22 -157.119.156.0/22 -157.119.160.0/22 -157.119.164.0/22 -157.119.172.0/22 -157.119.192.0/22 -157.119.196.0/22 -157.119.240.0/22 -157.119.252.0/22 -157.122.0.0/16 -157.148.0.0/16 -157.156.0.0/16 -157.255.0.0/16 -158.60.128.0/17 -158.79.0.0/16 -159.27.0.0/16 -159.75.0.0/16 -159.226.0.0/16 -160.19.208.0/22 -160.19.212.0/22 -160.19.216.0/22 -160.20.48.0/22 -160.202.60.0/22 -160.202.148.0/22 -160.202.152.0/22 -160.202.168.0/22 -160.202.212.0/22 -160.202.216.0/22 -160.202.220.0/22 -160.202.224.0/22 -160.202.228.0/22 -160.202.232.0/22 -160.202.236.0/22 -160.202.240.0/22 -160.202.244.0/22 -160.202.248.0/22 -160.202.252.0/22 -160.238.64.0/22 -161.120.0.0/16 -161.189.0.0/16 -161.207.0.0/16 -162.14.0.0/16 -162.105.0.0/16 -163.0.0.0/16 -163.47.4.0/22 -163.53.0.0/22 -163.53.4.0/22 -163.53.8.0/22 -163.53.12.0/22 -163.53.36.0/22 -163.53.40.0/22 -163.53.44.0/22 -163.53.48.0/22 -163.53.52.0/22 -163.53.56.0/22 -163.53.60.0/22 -163.53.64.0/22 -163.53.88.0/22 -163.53.92.0/22 -163.53.96.0/22 -163.53.100.0/22 -163.53.104.0/22 -163.53.108.0/22 -163.53.112.0/22 -163.53.116.0/22 -163.53.120.0/22 -163.53.124.0/22 -163.53.128.0/22 -163.53.132.0/22 -163.53.136.0/22 -163.53.160.0/22 -163.53.164.0/22 -163.53.168.0/22 -163.53.172.0/22 -163.53.188.0/22 -163.53.220.0/22 -163.53.240.0/22 -163.125.0.0/16 -163.142.0.0/16 -163.177.0.0/16 -163.179.0.0/16 -163.204.0.0/16 -163.228.0.0/16 -164.52.0.0/17 -166.111.0.0/16 -167.139.0.0/16 -167.189.0.0/16 -167.220.244.0/22 -168.160.0.0/16 -170.179.0.0/16 -171.8.0.0/13 -171.34.0.0/15 -171.36.0.0/14 -171.40.0.0/13 -171.80.0.0/14 -171.84.0.0/14 -171.88.0.0/13 -171.104.0.0/13 -171.112.0.0/14 -171.116.0.0/14 -171.120.0.0/13 -171.208.0.0/12 -172.81.192.0/18 -175.0.0.0/12 -175.16.0.0/13 -175.24.0.0/16 -175.25.0.0/16 -175.26.0.0/16 -175.27.0.0/16 -175.30.0.0/15 -175.42.0.0/15 -175.44.0.0/16 -175.46.0.0/15 -175.48.0.0/12 -175.64.0.0/11 -175.102.0.0/16 -175.106.128.0/17 -175.111.144.0/22 -175.111.148.0/22 -175.111.152.0/22 -175.111.156.0/22 -175.111.160.0/22 -175.111.164.0/22 -175.111.168.0/22 -175.111.172.0/22 -175.111.184.0/22 -175.146.0.0/15 -175.148.0.0/14 -175.152.0.0/14 -175.158.96.0/22 -175.160.0.0/12 -175.176.156.0/22 -175.176.176.0/22 -175.176.188.0/22 -175.176.192.0/22 -175.178.0.0/16 -175.184.128.0/18 -175.185.0.0/16 -175.186.0.0/15 -175.188.0.0/14 -180.76.0.0/16 -180.77.0.0/16 -180.78.0.0/15 -180.84.0.0/15 -180.86.0.0/16 -180.88.0.0/14 -180.94.56.0/21 -180.94.96.0/20 -180.94.120.0/22 -180.94.124.0/22 -180.95.128.0/17 -180.96.0.0/11 -180.129.128.0/17 -180.130.0.0/16 -180.136.0.0/13 -180.148.16.0/21 -180.148.152.0/21 -180.148.216.0/21 -180.148.224.0/19 -180.149.128.0/19 -180.149.236.0/22 -180.150.160.0/19 -180.152.0.0/13 -180.160.0.0/12 -180.178.112.0/22 -180.178.116.0/22 -180.178.192.0/18 -180.184.0.0/15 -180.186.0.0/16 -180.187.0.0/16 -180.188.0.0/17 -180.189.148.0/22 -180.200.252.0/22 -180.201.0.0/16 -180.202.0.0/15 -180.208.0.0/15 -180.210.212.0/22 -180.210.224.0/19 -180.212.0.0/15 -180.222.224.0/19 -180.223.0.0/16 -180.233.0.0/18 -180.233.64.0/19 -180.233.144.0/22 -180.235.64.0/19 -180.235.112.0/22 -182.16.144.0/22 -182.16.148.0/22 -182.16.192.0/19 -182.18.0.0/17 -182.23.184.0/21 -182.23.200.0/21 -182.32.0.0/12 -182.48.96.0/19 -182.49.0.0/16 -182.50.0.0/20 -182.50.112.0/20 -182.51.0.0/16 -182.54.0.0/17 -182.54.244.0/22 -182.61.0.0/16 -182.80.0.0/14 -182.84.0.0/14 -182.88.0.0/14 -182.92.0.0/16 -182.96.0.0/12 -182.112.0.0/12 -182.128.0.0/12 -182.144.0.0/13 -182.157.0.0/16 -182.160.64.0/19 -182.174.0.0/15 -182.200.0.0/13 -182.236.128.0/17 -182.237.24.0/22 -182.237.28.0/22 -182.238.0.0/16 -182.239.0.0/19 -182.240.0.0/13 -182.254.0.0/16 -182.255.32.0/22 -182.255.36.0/22 -182.255.60.0/22 -183.0.0.0/10 -183.64.0.0/13 -183.78.160.0/22 -183.78.164.0/22 -183.78.180.0/22 -183.81.172.0/22 -183.81.180.0/22 -183.84.0.0/15 -183.91.128.0/22 -183.91.136.0/21 -183.91.144.0/20 -183.92.0.0/14 -183.128.0.0/11 -183.160.0.0/13 -183.168.0.0/15 -183.170.0.0/16 -183.172.0.0/14 -183.182.0.0/19 -183.184.0.0/13 -183.192.0.0/10 -185.203.36.0/22 -188.131.128.0/17 -192.51.188.0/24 -192.55.46.0/24 -192.55.68.0/22 -192.102.204.0/23 -192.124.154.0/24 -192.140.128.0/22 -192.140.132.0/22 -192.140.136.0/22 -192.140.156.0/22 -192.140.160.0/22 -192.140.164.0/22 -192.140.168.0/22 -192.140.172.0/22 -192.140.176.0/22 -192.140.180.0/22 -192.140.184.0/22 -192.140.188.0/22 -192.140.192.0/22 -192.140.196.0/22 -192.140.200.0/22 -192.140.204.0/22 -192.140.208.0/22 -192.140.212.0/22 -192.144.128.0/17 -192.197.113.0/24 -193.112.0.0/16 -198.175.100.0/22 -199.212.57.0/24 -202.0.100.0/23 -202.0.122.0/23 -202.0.176.0/22 -202.3.128.0/23 -202.3.134.0/24 -202.4.128.0/19 -202.4.252.0/22 -202.5.208.0/22 -202.5.212.0/22 -202.5.216.0/22 -202.6.6.0/23 -202.6.66.0/23 -202.6.72.0/23 -202.6.87.0/24 -202.6.88.0/23 -202.6.92.0/23 -202.6.103.0/24 -202.6.108.0/24 -202.6.110.0/23 -202.6.114.0/24 -202.6.176.0/20 -202.8.0.0/24 -202.8.2.0/23 -202.8.4.0/23 -202.8.12.0/24 -202.8.24.0/24 -202.8.77.0/24 -202.8.120.0/22 -202.8.128.0/19 -202.8.192.0/20 -202.9.32.0/24 -202.9.34.0/23 -202.9.48.0/23 -202.9.51.0/24 -202.9.52.0/23 -202.9.54.0/24 -202.9.57.0/24 -202.9.58.0/23 -202.10.64.0/20 -202.10.112.0/22 -202.10.116.0/22 -202.10.120.0/22 -202.10.124.0/22 -202.12.1.0/24 -202.12.2.0/24 -202.12.17.0/24 -202.12.18.0/24 -202.12.19.0/24 -202.12.72.0/24 -202.12.84.0/23 -202.12.96.0/24 -202.12.98.0/23 -202.12.106.0/24 -202.12.111.0/24 -202.12.116.0/24 -202.14.64.0/23 -202.14.69.0/24 -202.14.73.0/24 -202.14.74.0/23 -202.14.76.0/24 -202.14.78.0/23 -202.14.88.0/24 -202.14.97.0/24 -202.14.104.0/23 -202.14.108.0/23 -202.14.111.0/24 -202.14.114.0/23 -202.14.118.0/23 -202.14.124.0/23 -202.14.127.0/24 -202.14.129.0/24 -202.14.135.0/24 -202.14.136.0/24 -202.14.149.0/24 -202.14.151.0/24 -202.14.157.0/24 -202.14.158.0/23 -202.14.169.0/24 -202.14.170.0/23 -202.14.172.0/22 -202.14.176.0/24 -202.14.184.0/23 -202.14.208.0/23 -202.14.213.0/24 -202.14.219.0/24 -202.14.220.0/24 -202.14.222.0/23 -202.14.225.0/24 -202.14.226.0/23 -202.14.231.0/24 -202.14.235.0/24 -202.14.236.0/23 -202.14.238.0/24 -202.14.239.0/24 -202.14.246.0/24 -202.14.251.0/24 -202.20.66.0/24 -202.20.79.0/24 -202.20.87.0/24 -202.20.88.0/23 -202.20.90.0/24 -202.20.94.0/23 -202.20.114.0/24 -202.20.117.0/24 -202.20.120.0/24 -202.20.125.0/24 -202.20.126.0/24 -202.20.127.0/24 -202.21.48.0/22 -202.21.52.0/22 -202.21.56.0/22 -202.21.60.0/22 -202.21.131.0/24 -202.21.132.0/24 -202.21.141.0/24 -202.21.142.0/24 -202.21.147.0/24 -202.21.148.0/24 -202.21.150.0/23 -202.21.152.0/23 -202.21.154.0/24 -202.21.156.0/24 -202.22.248.0/22 -202.22.252.0/22 -202.27.12.0/24 -202.27.14.0/24 -202.27.136.0/23 -202.36.226.0/24 -202.38.0.0/23 -202.38.2.0/23 -202.38.8.0/21 -202.38.48.0/20 -202.38.64.0/19 -202.38.96.0/19 -202.38.128.0/23 -202.38.130.0/23 -202.38.132.0/23 -202.38.134.0/24 -202.38.135.0/24 -202.38.136.0/23 -202.38.138.0/24 -202.38.140.0/23 -202.38.142.0/23 -202.38.146.0/23 -202.38.149.0/24 -202.38.150.0/23 -202.38.152.0/23 -202.38.154.0/23 -202.38.156.0/24 -202.38.158.0/23 -202.38.160.0/23 -202.38.164.0/22 -202.38.168.0/23 -202.38.170.0/24 -202.38.171.0/24 -202.38.176.0/23 -202.38.184.0/21 -202.38.192.0/18 -202.40.4.0/23 -202.40.7.0/24 -202.40.15.0/24 -202.40.135.0/24 -202.40.136.0/24 -202.40.140.0/24 -202.40.143.0/24 -202.40.144.0/23 -202.40.150.0/24 -202.40.155.0/24 -202.40.156.0/24 -202.40.158.0/23 -202.40.162.0/24 -202.41.8.0/23 -202.41.11.0/24 -202.41.12.0/23 -202.41.128.0/24 -202.41.130.0/23 -202.41.152.0/21 -202.41.192.0/24 -202.41.196.0/22 -202.41.200.0/22 -202.41.240.0/20 -202.43.76.0/22 -202.43.144.0/20 -202.44.16.0/20 -202.44.48.0/22 -202.44.67.0/24 -202.44.74.0/24 -202.44.97.0/24 -202.44.129.0/24 -202.44.132.0/23 -202.44.146.0/23 -202.45.0.0/23 -202.45.2.0/24 -202.45.15.0/24 -202.45.16.0/20 -202.46.16.0/23 -202.46.18.0/24 -202.46.20.0/23 -202.46.32.0/19 -202.46.128.0/24 -202.46.224.0/20 -202.47.82.0/23 -202.47.96.0/22 -202.47.100.0/22 -202.47.104.0/22 -202.47.108.0/22 -202.47.126.0/24 -202.47.128.0/24 -202.47.130.0/23 -202.52.33.0/24 -202.52.34.0/24 -202.52.47.0/24 -202.52.143.0/24 -202.52.144.0/24 -202.53.140.0/24 -202.53.143.0/24 -202.57.192.0/22 -202.57.196.0/22 -202.57.200.0/22 -202.57.204.0/22 -202.57.212.0/22 -202.57.216.0/22 -202.57.240.0/20 -202.58.0.0/24 -202.58.101.0/24 -202.58.104.0/22 -202.58.112.0/22 -202.59.0.0/24 -202.59.1.0/24 -202.59.212.0/22 -202.59.236.0/24 -202.59.240.0/24 -202.60.48.0/21 -202.60.96.0/21 -202.60.112.0/20 -202.60.132.0/22 -202.60.136.0/21 -202.60.144.0/20 -202.61.68.0/22 -202.61.76.0/22 -202.61.88.0/22 -202.61.123.0/24 -202.61.127.0/24 -202.62.112.0/22 -202.62.248.0/22 -202.62.252.0/24 -202.62.255.0/24 -202.63.80.0/24 -202.63.81.0/24 -202.63.82.0/23 -202.63.84.0/22 -202.63.88.0/21 -202.63.160.0/19 -202.63.248.0/22 -202.63.253.0/24 -202.65.0.0/21 -202.65.8.0/23 -202.65.96.0/22 -202.65.100.0/22 -202.65.104.0/22 -202.65.108.0/22 -202.66.168.0/22 -202.67.0.0/22 -202.69.4.0/22 -202.69.16.0/20 -202.70.0.0/19 -202.70.96.0/20 -202.70.192.0/20 -202.71.32.0/22 -202.71.36.0/22 -202.71.40.0/22 -202.71.44.0/22 -202.72.40.0/21 -202.72.80.0/20 -202.72.112.0/22 -202.72.116.0/22 -202.72.120.0/22 -202.72.124.0/22 -202.73.128.0/22 -202.73.240.0/22 -202.73.244.0/22 -202.73.248.0/22 -202.73.252.0/22 -202.74.8.0/21 -202.74.36.0/24 -202.74.42.0/24 -202.74.52.0/24 -202.74.80.0/20 -202.74.254.0/23 -202.75.208.0/20 -202.75.252.0/22 -202.76.252.0/22 -202.77.80.0/21 -202.77.92.0/22 -202.78.8.0/21 -202.79.224.0/21 -202.79.248.0/22 -202.80.192.0/21 -202.80.200.0/21 -202.81.0.0/22 -202.81.176.0/22 -202.81.180.0/22 -202.81.184.0/22 -202.81.188.0/22 -202.83.252.0/22 -202.84.0.0/22 -202.84.4.0/22 -202.84.8.0/21 -202.84.16.0/23 -202.84.22.0/24 -202.84.24.0/21 -202.85.208.0/20 -202.86.249.0/24 -202.86.252.0/22 -202.87.80.0/20 -202.88.32.0/22 -202.89.8.0/21 -202.89.96.0/22 -202.89.108.0/22 -202.89.119.0/24 -202.89.232.0/21 -202.90.0.0/22 -202.90.16.0/22 -202.90.20.0/22 -202.90.24.0/22 -202.90.28.0/22 -202.90.37.0/24 -202.90.96.0/22 -202.90.100.0/22 -202.90.104.0/22 -202.90.108.0/22 -202.90.112.0/20 -202.90.193.0/24 -202.90.196.0/24 -202.90.205.0/24 -202.90.224.0/20 -202.91.0.0/22 -202.91.36.0/22 -202.91.96.0/20 -202.91.128.0/22 -202.91.176.0/20 -202.91.224.0/19 -202.92.0.0/22 -202.92.8.0/21 -202.92.48.0/20 -202.92.252.0/22 -202.93.0.0/22 -202.93.252.0/22 -202.94.68.0/24 -202.94.74.0/24 -202.94.81.0/24 -202.94.92.0/22 -202.95.240.0/21 -202.95.252.0/22 -202.96.0.0/18 -202.96.64.0/21 -202.96.72.0/21 -202.96.80.0/20 -202.96.96.0/21 -202.96.104.0/21 -202.96.112.0/20 -202.96.128.0/21 -202.96.136.0/21 -202.96.144.0/20 -202.96.160.0/21 -202.96.168.0/21 -202.96.176.0/20 -202.96.192.0/21 -202.96.200.0/21 -202.96.208.0/20 -202.96.224.0/21 -202.96.232.0/21 -202.96.240.0/20 -202.97.0.0/21 -202.97.8.0/21 -202.97.16.0/20 -202.97.32.0/19 -202.97.64.0/19 -202.97.96.0/20 -202.97.112.0/20 -202.97.128.0/18 -202.97.192.0/19 -202.97.224.0/21 -202.97.232.0/21 -202.97.240.0/20 -202.98.0.0/21 -202.98.8.0/21 -202.98.16.0/20 -202.98.32.0/21 -202.98.40.0/21 -202.98.48.0/20 -202.98.64.0/19 -202.98.96.0/21 -202.98.104.0/21 -202.98.112.0/20 -202.98.128.0/19 -202.98.160.0/21 -202.98.168.0/21 -202.98.176.0/20 -202.98.192.0/21 -202.98.200.0/21 -202.98.208.0/20 -202.98.224.0/21 -202.98.232.0/21 -202.98.240.0/20 -202.99.0.0/18 -202.99.64.0/19 -202.99.96.0/21 -202.99.104.0/21 -202.99.112.0/20 -202.99.128.0/19 -202.99.160.0/21 -202.99.168.0/21 -202.99.176.0/20 -202.99.192.0/21 -202.99.200.0/21 -202.99.208.0/20 -202.99.224.0/21 -202.99.232.0/21 -202.99.240.0/20 -202.100.0.0/21 -202.100.8.0/21 -202.100.16.0/20 -202.100.32.0/19 -202.100.64.0/21 -202.100.72.0/21 -202.100.80.0/20 -202.100.96.0/21 -202.100.104.0/21 -202.100.112.0/20 -202.100.128.0/21 -202.100.136.0/21 -202.100.144.0/20 -202.100.160.0/21 -202.100.168.0/21 -202.100.176.0/20 -202.100.192.0/21 -202.100.200.0/21 -202.100.208.0/20 -202.100.224.0/19 -202.101.0.0/18 -202.101.64.0/19 -202.101.96.0/19 -202.101.128.0/18 -202.101.192.0/19 -202.101.224.0/21 -202.101.232.0/21 -202.101.240.0/20 -202.102.0.0/19 -202.102.32.0/19 -202.102.64.0/18 -202.102.128.0/21 -202.102.136.0/21 -202.102.144.0/20 -202.102.160.0/19 -202.102.192.0/21 -202.102.200.0/21 -202.102.208.0/20 -202.102.224.0/21 -202.102.232.0/21 -202.102.240.0/20 -202.103.0.0/21 -202.103.8.0/21 -202.103.16.0/20 -202.103.32.0/19 -202.103.64.0/19 -202.103.96.0/21 -202.103.104.0/21 -202.103.112.0/20 -202.103.128.0/18 -202.103.192.0/19 -202.103.224.0/21 -202.103.232.0/21 -202.103.240.0/20 -202.104.0.0/15 -202.106.0.0/16 -202.107.0.0/17 -202.107.128.0/17 -202.108.0.0/16 -202.109.0.0/16 -202.110.0.0/18 -202.110.64.0/18 -202.110.128.0/18 -202.110.192.0/18 -202.111.0.0/17 -202.111.128.0/19 -202.111.160.0/19 -202.111.192.0/18 -202.112.0.0/16 -202.113.0.0/20 -202.113.16.0/20 -202.113.32.0/19 -202.113.64.0/18 -202.113.128.0/18 -202.113.192.0/19 -202.113.224.0/20 -202.113.240.0/20 -202.114.0.0/19 -202.114.32.0/19 -202.114.64.0/18 -202.114.128.0/17 -202.115.0.0/19 -202.115.32.0/19 -202.115.64.0/18 -202.115.128.0/17 -202.116.0.0/19 -202.116.32.0/20 -202.116.48.0/20 -202.116.64.0/19 -202.116.96.0/19 -202.116.128.0/17 -202.117.0.0/18 -202.117.64.0/18 -202.117.128.0/17 -202.118.0.0/19 -202.118.32.0/19 -202.118.64.0/18 -202.118.128.0/17 -202.119.0.0/19 -202.119.32.0/19 -202.119.64.0/20 -202.119.80.0/20 -202.119.96.0/19 -202.119.128.0/17 -202.120.0.0/18 -202.120.64.0/18 -202.120.128.0/17 -202.121.0.0/16 -202.122.0.0/21 -202.122.32.0/21 -202.122.64.0/19 -202.122.112.0/21 -202.122.120.0/21 -202.122.128.0/24 -202.122.132.0/24 -202.123.96.0/20 -202.123.116.0/22 -202.123.120.0/22 -202.124.16.0/21 -202.124.24.0/22 -202.125.107.0/24 -202.125.109.0/24 -202.125.112.0/20 -202.125.176.0/20 -202.127.0.0/23 -202.127.2.0/24 -202.127.3.0/24 -202.127.4.0/24 -202.127.5.0/24 -202.127.6.0/23 -202.127.12.0/22 -202.127.16.0/20 -202.127.40.0/21 -202.127.48.0/20 -202.127.112.0/20 -202.127.128.0/20 -202.127.144.0/20 -202.127.160.0/21 -202.127.192.0/23 -202.127.194.0/23 -202.127.196.0/22 -202.127.200.0/21 -202.127.208.0/24 -202.127.209.0/24 -202.127.212.0/22 -202.127.216.0/21 -202.127.224.0/19 -202.129.208.0/24 -202.130.0.0/19 -202.130.39.0/24 -202.130.224.0/19 -202.131.16.0/21 -202.131.48.0/20 -202.131.208.0/20 -202.133.32.0/20 -202.134.58.0/24 -202.134.128.0/20 -202.134.208.0/22 -202.134.212.0/22 -202.134.216.0/22 -202.134.220.0/22 -202.136.48.0/20 -202.136.208.0/20 -202.136.224.0/20 -202.136.248.0/22 -202.137.231.0/24 -202.140.140.0/22 -202.140.144.0/22 -202.140.148.0/22 -202.140.152.0/22 -202.140.156.0/22 -202.141.160.0/19 -202.142.16.0/20 -202.143.4.0/22 -202.143.16.0/20 -202.143.32.0/20 -202.143.56.0/21 -202.143.100.0/22 -202.143.104.0/22 -202.144.196.0/22 -202.146.160.0/20 -202.146.186.0/24 -202.146.188.0/22 -202.146.196.0/22 -202.146.200.0/21 -202.147.144.0/20 -202.148.32.0/20 -202.148.64.0/19 -202.148.96.0/19 -202.149.32.0/19 -202.149.160.0/19 -202.149.224.0/19 -202.150.16.0/20 -202.150.32.0/20 -202.150.56.0/22 -202.150.192.0/20 -202.150.224.0/19 -202.151.0.0/22 -202.151.33.0/24 -202.151.128.0/19 -202.152.176.0/20 -202.153.0.0/22 -202.153.7.0/24 -202.153.48.0/20 -202.157.192.0/19 -202.158.160.0/19 -202.158.242.0/24 -202.160.140.0/22 -202.160.156.0/22 -202.160.176.0/20 -202.162.67.0/24 -202.162.75.0/24 -202.164.0.0/20 -202.164.96.0/19 -202.165.176.0/20 -202.165.208.0/20 -202.165.239.0/24 -202.165.240.0/23 -202.165.243.0/24 -202.165.245.0/24 -202.165.251.0/24 -202.165.252.0/22 -202.166.224.0/19 -202.168.80.0/22 -202.168.128.0/22 -202.168.132.0/22 -202.168.136.0/22 -202.168.140.0/22 -202.168.160.0/20 -202.168.176.0/20 -202.170.128.0/19 -202.170.216.0/21 -202.170.224.0/19 -202.171.216.0/21 -202.171.232.0/24 -202.171.235.0/24 -202.172.0.0/22 -202.172.7.0/24 -202.173.0.0/22 -202.173.6.0/24 -202.173.8.0/21 -202.173.112.0/22 -202.173.224.0/19 -202.174.64.0/20 -202.174.124.0/22 -202.176.224.0/19 -202.179.160.0/22 -202.179.164.0/22 -202.179.168.0/22 -202.179.172.0/22 -202.179.240.0/20 -202.180.128.0/19 -202.180.208.0/21 -202.181.8.0/22 -202.181.28.0/22 -202.181.112.0/20 -202.182.32.0/20 -202.182.192.0/19 -202.189.0.0/18 -202.189.80.0/20 -202.189.184.0/21 -202.191.0.0/24 -202.191.68.0/22 -202.191.72.0/21 -202.191.80.0/20 -202.192.0.0/13 -202.200.0.0/14 -202.204.0.0/14 -203.0.4.0/22 -203.0.10.0/23 -203.0.18.0/24 -203.0.24.0/24 -203.0.42.0/23 -203.0.45.0/24 -203.0.46.0/23 -203.0.81.0/24 -203.0.82.0/23 -203.0.90.0/23 -203.0.96.0/23 -203.0.104.0/21 -203.0.114.0/23 -203.0.122.0/24 -203.0.128.0/24 -203.0.130.0/23 -203.0.132.0/22 -203.0.137.0/24 -203.0.142.0/24 -203.0.144.0/24 -203.0.146.0/24 -203.0.148.0/24 -203.0.150.0/23 -203.0.152.0/24 -203.0.177.0/24 -203.0.224.0/24 -203.1.4.0/22 -203.1.18.0/24 -203.1.26.0/23 -203.1.65.0/24 -203.1.66.0/23 -203.1.70.0/23 -203.1.76.0/23 -203.1.90.0/24 -203.1.97.0/24 -203.1.98.0/23 -203.1.100.0/22 -203.1.108.0/24 -203.1.253.0/24 -203.1.254.0/24 -203.2.64.0/21 -203.2.73.0/24 -203.2.112.0/21 -203.2.126.0/23 -203.2.140.0/24 -203.2.150.0/24 -203.2.152.0/22 -203.2.156.0/23 -203.2.160.0/21 -203.2.180.0/23 -203.2.196.0/23 -203.2.209.0/24 -203.2.214.0/23 -203.2.226.0/23 -203.2.229.0/24 -203.2.236.0/23 -203.3.68.0/24 -203.3.72.0/23 -203.3.75.0/24 -203.3.80.0/21 -203.3.96.0/22 -203.3.105.0/24 -203.3.112.0/21 -203.3.120.0/24 -203.3.123.0/24 -203.3.135.0/24 -203.3.139.0/24 -203.3.143.0/24 -203.4.132.0/23 -203.4.134.0/24 -203.4.151.0/24 -203.4.152.0/22 -203.4.174.0/23 -203.4.180.0/24 -203.4.186.0/24 -203.4.205.0/24 -203.4.208.0/22 -203.4.227.0/24 -203.4.230.0/23 -203.5.4.0/23 -203.5.7.0/24 -203.5.8.0/23 -203.5.11.0/24 -203.5.21.0/24 -203.5.22.0/24 -203.5.44.0/24 -203.5.46.0/23 -203.5.52.0/22 -203.5.56.0/23 -203.5.60.0/23 -203.5.114.0/23 -203.5.118.0/24 -203.5.120.0/24 -203.5.172.0/24 -203.5.180.0/23 -203.5.182.0/24 -203.5.185.0/24 -203.5.186.0/24 -203.5.188.0/23 -203.5.190.0/24 -203.5.195.0/24 -203.5.214.0/23 -203.5.218.0/23 -203.6.131.0/24 -203.6.136.0/24 -203.6.138.0/23 -203.6.142.0/24 -203.6.150.0/23 -203.6.157.0/24 -203.6.159.0/24 -203.6.224.0/20 -203.6.248.0/23 -203.7.129.0/24 -203.7.138.0/23 -203.7.147.0/24 -203.7.150.0/23 -203.7.158.0/24 -203.7.192.0/23 -203.7.200.0/24 -203.8.0.0/24 -203.8.8.0/24 -203.8.23.0/24 -203.8.70.0/24 -203.8.82.0/24 -203.8.86.0/23 -203.8.91.0/24 -203.8.110.0/23 -203.8.115.0/24 -203.8.166.0/23 -203.8.169.0/24 -203.8.173.0/24 -203.8.184.0/24 -203.8.186.0/23 -203.8.190.0/23 -203.8.192.0/24 -203.8.197.0/24 -203.8.198.0/23 -203.8.203.0/24 -203.8.209.0/24 -203.8.210.0/23 -203.8.212.0/22 -203.8.217.0/24 -203.8.220.0/24 -203.9.32.0/24 -203.9.36.0/23 -203.9.57.0/24 -203.9.63.0/24 -203.9.65.0/24 -203.9.70.0/23 -203.9.72.0/24 -203.9.75.0/24 -203.9.76.0/23 -203.9.96.0/22 -203.9.100.0/23 -203.9.108.0/24 -203.9.158.0/24 -203.10.34.0/24 -203.10.56.0/24 -203.10.74.0/23 -203.10.84.0/22 -203.10.88.0/24 -203.10.95.0/24 -203.10.125.0/24 -203.11.70.0/24 -203.11.76.0/22 -203.11.82.0/24 -203.11.84.0/22 -203.11.100.0/22 -203.11.109.0/24 -203.11.117.0/24 -203.11.122.0/24 -203.11.126.0/24 -203.11.136.0/22 -203.11.141.0/24 -203.11.142.0/23 -203.11.180.0/22 -203.11.208.0/22 -203.12.16.0/24 -203.12.19.0/24 -203.12.24.0/24 -203.12.57.0/24 -203.12.65.0/24 -203.12.66.0/24 -203.12.70.0/23 -203.12.87.0/24 -203.12.100.0/23 -203.12.103.0/24 -203.12.114.0/24 -203.12.118.0/24 -203.12.130.0/24 -203.12.137.0/24 -203.12.196.0/22 -203.12.211.0/24 -203.12.219.0/24 -203.12.226.0/24 -203.12.240.0/22 -203.13.18.0/24 -203.13.24.0/24 -203.13.44.0/23 -203.13.88.0/23 -203.13.92.0/22 -203.13.173.0/24 -203.13.224.0/23 -203.13.227.0/24 -203.13.233.0/24 -203.14.24.0/22 -203.14.33.0/24 -203.14.56.0/24 -203.14.61.0/24 -203.14.62.0/24 -203.14.104.0/24 -203.14.114.0/23 -203.14.118.0/24 -203.14.162.0/24 -203.14.192.0/24 -203.14.194.0/23 -203.14.214.0/24 -203.14.231.0/24 -203.14.246.0/24 -203.15.0.0/20 -203.15.20.0/23 -203.15.22.0/24 -203.15.87.0/24 -203.15.88.0/23 -203.15.105.0/24 -203.15.112.0/21 -203.15.130.0/23 -203.15.149.0/24 -203.15.151.0/24 -203.15.156.0/22 -203.15.174.0/24 -203.15.227.0/24 -203.15.232.0/21 -203.15.240.0/23 -203.15.246.0/24 -203.16.10.0/24 -203.16.12.0/23 -203.16.16.0/21 -203.16.27.0/24 -203.16.38.0/24 -203.16.49.0/24 -203.16.50.0/23 -203.16.58.0/24 -203.16.63.0/24 -203.16.133.0/24 -203.16.161.0/24 -203.16.162.0/24 -203.16.186.0/23 -203.16.228.0/24 -203.16.238.0/24 -203.16.240.0/24 -203.16.245.0/24 -203.17.2.0/24 -203.17.18.0/24 -203.17.28.0/24 -203.17.39.0/24 -203.17.56.0/24 -203.17.74.0/23 -203.17.88.0/23 -203.17.136.0/24 -203.17.164.0/24 -203.17.187.0/24 -203.17.190.0/23 -203.17.231.0/24 -203.17.233.0/24 -203.17.248.0/24 -203.17.249.0/24 -203.17.255.0/24 -203.18.2.0/23 -203.18.4.0/24 -203.18.7.0/24 -203.18.31.0/24 -203.18.37.0/24 -203.18.48.0/23 -203.18.52.0/24 -203.18.72.0/22 -203.18.80.0/23 -203.18.87.0/24 -203.18.100.0/23 -203.18.105.0/24 -203.18.107.0/24 -203.18.110.0/24 -203.18.129.0/24 -203.18.131.0/24 -203.18.132.0/23 -203.18.144.0/24 -203.18.153.0/24 -203.18.199.0/24 -203.18.208.0/24 -203.18.211.0/24 -203.18.215.0/24 -203.19.1.0/24 -203.19.18.0/24 -203.19.24.0/24 -203.19.30.0/24 -203.19.32.0/21 -203.19.41.0/24 -203.19.44.0/23 -203.19.46.0/24 -203.19.58.0/24 -203.19.60.0/23 -203.19.64.0/24 -203.19.68.0/24 -203.19.72.0/24 -203.19.101.0/24 -203.19.111.0/24 -203.19.131.0/24 -203.19.133.0/24 -203.19.144.0/24 -203.19.147.0/24 -203.19.149.0/24 -203.19.156.0/24 -203.19.176.0/24 -203.19.178.0/23 -203.19.208.0/24 -203.19.228.0/22 -203.19.233.0/24 -203.19.242.0/24 -203.19.248.0/23 -203.19.255.0/24 -203.20.17.0/24 -203.20.40.0/23 -203.20.44.0/24 -203.20.48.0/24 -203.20.61.0/24 -203.20.65.0/24 -203.20.84.0/23 -203.20.89.0/24 -203.20.106.0/23 -203.20.115.0/24 -203.20.117.0/24 -203.20.118.0/23 -203.20.122.0/24 -203.20.126.0/23 -203.20.135.0/24 -203.20.136.0/21 -203.20.150.0/24 -203.20.230.0/24 -203.20.232.0/24 -203.20.236.0/24 -203.21.0.0/23 -203.21.2.0/24 -203.21.8.0/24 -203.21.10.0/24 -203.21.18.0/24 -203.21.33.0/24 -203.21.34.0/24 -203.21.41.0/24 -203.21.44.0/24 -203.21.68.0/24 -203.21.82.0/24 -203.21.96.0/22 -203.21.124.0/24 -203.21.136.0/23 -203.21.145.0/24 -203.21.206.0/24 -203.22.24.0/24 -203.22.28.0/23 -203.22.31.0/24 -203.22.68.0/24 -203.22.76.0/24 -203.22.78.0/24 -203.22.84.0/24 -203.22.87.0/24 -203.22.92.0/22 -203.22.99.0/24 -203.22.106.0/24 -203.22.122.0/23 -203.22.131.0/24 -203.22.163.0/24 -203.22.166.0/24 -203.22.170.0/24 -203.22.176.0/21 -203.22.194.0/24 -203.22.242.0/23 -203.22.245.0/24 -203.22.246.0/24 -203.22.252.0/23 -203.23.0.0/24 -203.23.47.0/24 -203.23.61.0/24 -203.23.62.0/23 -203.23.73.0/24 -203.23.85.0/24 -203.23.92.0/22 -203.23.98.0/24 -203.23.107.0/24 -203.23.112.0/24 -203.23.130.0/24 -203.23.140.0/23 -203.23.172.0/24 -203.23.182.0/24 -203.23.186.0/23 -203.23.192.0/24 -203.23.197.0/24 -203.23.198.0/24 -203.23.204.0/22 -203.23.224.0/24 -203.23.226.0/23 -203.23.228.0/22 -203.23.249.0/24 -203.23.251.0/24 -203.24.13.0/24 -203.24.18.0/24 -203.24.27.0/24 -203.24.43.0/24 -203.24.56.0/24 -203.24.58.0/24 -203.24.67.0/24 -203.24.74.0/24 -203.24.79.0/24 -203.24.80.0/23 -203.24.84.0/23 -203.24.86.0/24 -203.24.90.0/24 -203.24.111.0/24 -203.24.112.0/24 -203.24.116.0/24 -203.24.122.0/23 -203.24.145.0/24 -203.24.152.0/23 -203.24.157.0/24 -203.24.161.0/24 -203.24.167.0/24 -203.24.186.0/23 -203.24.199.0/24 -203.24.202.0/24 -203.24.212.0/23 -203.24.217.0/24 -203.24.219.0/24 -203.24.244.0/24 -203.25.19.0/24 -203.25.20.0/23 -203.25.46.0/24 -203.25.48.0/21 -203.25.64.0/23 -203.25.91.0/24 -203.25.99.0/24 -203.25.100.0/24 -203.25.106.0/24 -203.25.131.0/24 -203.25.135.0/24 -203.25.138.0/24 -203.25.147.0/24 -203.25.153.0/24 -203.25.154.0/23 -203.25.164.0/24 -203.25.166.0/24 -203.25.174.0/23 -203.25.180.0/24 -203.25.182.0/24 -203.25.191.0/24 -203.25.199.0/24 -203.25.200.0/24 -203.25.202.0/23 -203.25.208.0/20 -203.25.229.0/24 -203.25.235.0/24 -203.25.236.0/24 -203.25.242.0/24 -203.26.12.0/24 -203.26.34.0/24 -203.26.49.0/24 -203.26.50.0/24 -203.26.55.0/24 -203.26.56.0/23 -203.26.60.0/24 -203.26.65.0/24 -203.26.68.0/24 -203.26.76.0/24 -203.26.80.0/24 -203.26.84.0/24 -203.26.97.0/24 -203.26.102.0/23 -203.26.115.0/24 -203.26.116.0/24 -203.26.129.0/24 -203.26.143.0/24 -203.26.144.0/24 -203.26.148.0/23 -203.26.154.0/24 -203.26.158.0/23 -203.26.170.0/24 -203.26.173.0/24 -203.26.176.0/24 -203.26.185.0/24 -203.26.202.0/23 -203.26.210.0/24 -203.26.214.0/24 -203.26.222.0/24 -203.26.224.0/24 -203.26.228.0/24 -203.26.232.0/24 -203.27.0.0/24 -203.27.10.0/24 -203.27.15.0/24 -203.27.16.0/24 -203.27.20.0/24 -203.27.22.0/23 -203.27.40.0/24 -203.27.45.0/24 -203.27.53.0/24 -203.27.65.0/24 -203.27.66.0/24 -203.27.81.0/24 -203.27.88.0/24 -203.27.102.0/24 -203.27.109.0/24 -203.27.117.0/24 -203.27.121.0/24 -203.27.122.0/23 -203.27.125.0/24 -203.27.200.0/24 -203.27.202.0/24 -203.27.233.0/24 -203.27.241.0/24 -203.27.250.0/24 -203.28.10.0/24 -203.28.12.0/24 -203.28.33.0/24 -203.28.34.0/23 -203.28.43.0/24 -203.28.44.0/24 -203.28.54.0/24 -203.28.56.0/24 -203.28.73.0/24 -203.28.74.0/24 -203.28.76.0/24 -203.28.86.0/24 -203.28.88.0/24 -203.28.112.0/24 -203.28.131.0/24 -203.28.136.0/24 -203.28.140.0/24 -203.28.145.0/24 -203.28.165.0/24 -203.28.169.0/24 -203.28.170.0/24 -203.28.178.0/23 -203.28.185.0/24 -203.28.187.0/24 -203.28.196.0/24 -203.28.226.0/23 -203.28.239.0/24 -203.29.2.0/24 -203.29.8.0/23 -203.29.13.0/24 -203.29.14.0/24 -203.29.28.0/24 -203.29.46.0/24 -203.29.57.0/24 -203.29.61.0/24 -203.29.63.0/24 -203.29.69.0/24 -203.29.73.0/24 -203.29.81.0/24 -203.29.90.0/24 -203.29.95.0/24 -203.29.100.0/24 -203.29.103.0/24 -203.29.112.0/24 -203.29.120.0/22 -203.29.182.0/23 -203.29.187.0/24 -203.29.189.0/24 -203.29.190.0/24 -203.29.205.0/24 -203.29.210.0/24 -203.29.217.0/24 -203.29.227.0/24 -203.29.231.0/24 -203.29.233.0/24 -203.29.234.0/24 -203.29.248.0/24 -203.29.254.0/23 -203.30.16.0/23 -203.30.25.0/24 -203.30.27.0/24 -203.30.29.0/24 -203.30.66.0/24 -203.30.81.0/24 -203.30.87.0/24 -203.30.111.0/24 -203.30.121.0/24 -203.30.123.0/24 -203.30.152.0/24 -203.30.156.0/24 -203.30.162.0/24 -203.30.173.0/24 -203.30.175.0/24 -203.30.187.0/24 -203.30.194.0/24 -203.30.217.0/24 -203.30.220.0/24 -203.30.222.0/24 -203.30.232.0/23 -203.30.235.0/24 -203.30.240.0/23 -203.30.246.0/24 -203.30.250.0/23 -203.31.45.0/24 -203.31.46.0/24 -203.31.49.0/24 -203.31.51.0/24 -203.31.54.0/23 -203.31.69.0/24 -203.31.72.0/24 -203.31.80.0/24 -203.31.85.0/24 -203.31.97.0/24 -203.31.105.0/24 -203.31.106.0/24 -203.31.108.0/23 -203.31.124.0/24 -203.31.162.0/24 -203.31.174.0/24 -203.31.177.0/24 -203.31.181.0/24 -203.31.187.0/24 -203.31.189.0/24 -203.31.204.0/24 -203.31.220.0/24 -203.31.222.0/23 -203.31.225.0/24 -203.31.229.0/24 -203.31.248.0/23 -203.31.253.0/24 -203.32.20.0/24 -203.32.48.0/23 -203.32.56.0/24 -203.32.60.0/24 -203.32.62.0/24 -203.32.68.0/23 -203.32.76.0/24 -203.32.81.0/24 -203.32.84.0/23 -203.32.95.0/24 -203.32.102.0/24 -203.32.105.0/24 -203.32.130.0/24 -203.32.133.0/24 -203.32.140.0/24 -203.32.152.0/24 -203.32.186.0/23 -203.32.192.0/24 -203.32.196.0/24 -203.32.203.0/24 -203.32.204.0/23 -203.32.212.0/24 -203.33.4.0/24 -203.33.7.0/24 -203.33.8.0/21 -203.33.21.0/24 -203.33.26.0/24 -203.33.32.0/24 -203.33.63.0/24 -203.33.64.0/24 -203.33.67.0/24 -203.33.68.0/24 -203.33.73.0/24 -203.33.79.0/24 -203.33.100.0/24 -203.33.122.0/24 -203.33.129.0/24 -203.33.131.0/24 -203.33.145.0/24 -203.33.156.0/24 -203.33.158.0/23 -203.33.174.0/24 -203.33.185.0/24 -203.33.200.0/24 -203.33.202.0/23 -203.33.204.0/24 -203.33.206.0/23 -203.33.214.0/23 -203.33.224.0/23 -203.33.226.0/24 -203.33.233.0/24 -203.33.243.0/24 -203.33.250.0/24 -203.34.4.0/24 -203.34.21.0/24 -203.34.27.0/24 -203.34.39.0/24 -203.34.48.0/23 -203.34.54.0/24 -203.34.56.0/23 -203.34.67.0/24 -203.34.69.0/24 -203.34.76.0/24 -203.34.92.0/24 -203.34.106.0/24 -203.34.113.0/24 -203.34.147.0/24 -203.34.150.0/24 -203.34.152.0/23 -203.34.161.0/24 -203.34.162.0/24 -203.34.187.0/24 -203.34.192.0/21 -203.34.204.0/22 -203.34.232.0/24 -203.34.240.0/24 -203.34.242.0/24 -203.34.245.0/24 -203.34.251.0/24 -203.55.2.0/23 -203.55.4.0/24 -203.55.10.0/24 -203.55.13.0/24 -203.55.22.0/24 -203.55.30.0/24 -203.55.93.0/24 -203.55.101.0/24 -203.55.109.0/24 -203.55.110.0/24 -203.55.116.0/23 -203.55.119.0/24 -203.55.128.0/23 -203.55.146.0/23 -203.55.192.0/24 -203.55.196.0/24 -203.55.218.0/23 -203.55.221.0/24 -203.55.224.0/24 -203.56.1.0/24 -203.56.4.0/24 -203.56.12.0/24 -203.56.24.0/24 -203.56.38.0/24 -203.56.40.0/24 -203.56.46.0/24 -203.56.48.0/21 -203.56.68.0/23 -203.56.82.0/23 -203.56.84.0/23 -203.56.95.0/24 -203.56.110.0/24 -203.56.121.0/24 -203.56.161.0/24 -203.56.169.0/24 -203.56.172.0/23 -203.56.175.0/24 -203.56.183.0/24 -203.56.185.0/24 -203.56.187.0/24 -203.56.192.0/24 -203.56.198.0/24 -203.56.201.0/24 -203.56.208.0/23 -203.56.210.0/24 -203.56.214.0/24 -203.56.216.0/24 -203.56.227.0/24 -203.56.228.0/24 -203.56.231.0/24 -203.56.232.0/24 -203.56.240.0/24 -203.56.252.0/24 -203.56.254.0/24 -203.57.5.0/24 -203.57.6.0/24 -203.57.12.0/23 -203.57.28.0/24 -203.57.39.0/24 -203.57.46.0/24 -203.57.58.0/24 -203.57.61.0/24 -203.57.66.0/24 -203.57.69.0/24 -203.57.70.0/23 -203.57.73.0/24 -203.57.90.0/24 -203.57.101.0/24 -203.57.109.0/24 -203.57.123.0/24 -203.57.157.0/24 -203.57.200.0/24 -203.57.202.0/24 -203.57.206.0/24 -203.57.222.0/24 -203.57.224.0/20 -203.57.246.0/23 -203.57.249.0/24 -203.57.253.0/24 -203.57.254.0/23 -203.62.2.0/24 -203.62.131.0/24 -203.62.139.0/24 -203.62.161.0/24 -203.62.197.0/24 -203.62.228.0/22 -203.62.234.0/24 -203.62.246.0/24 -203.76.160.0/22 -203.76.168.0/22 -203.76.208.0/22 -203.76.212.0/22 -203.76.216.0/22 -203.76.240.0/22 -203.76.244.0/22 -203.77.180.0/22 -203.78.48.0/20 -203.78.156.0/22 -203.79.0.0/20 -203.79.32.0/20 -203.80.4.0/23 -203.80.32.0/20 -203.80.57.0/24 -203.80.129.0/24 -203.80.132.0/22 -203.80.136.0/21 -203.80.144.0/20 -203.81.0.0/21 -203.81.16.0/20 -203.81.244.0/22 -203.82.0.0/23 -203.82.16.0/21 -203.82.112.0/22 -203.82.116.0/22 -203.82.120.0/22 -203.82.124.0/22 -203.82.224.0/22 -203.82.228.0/22 -203.82.232.0/22 -203.82.236.0/22 -203.83.0.0/22 -203.83.8.0/22 -203.83.12.0/22 -203.83.56.0/21 -203.83.224.0/20 -203.86.0.0/19 -203.86.32.0/19 -203.86.64.0/20 -203.86.80.0/20 -203.86.96.0/19 -203.86.250.0/24 -203.86.254.0/23 -203.88.32.0/19 -203.88.192.0/19 -203.89.0.0/22 -203.89.8.0/21 -203.89.100.0/22 -203.89.133.0/24 -203.89.136.0/22 -203.89.144.0/24 -203.90.0.0/22 -203.90.8.0/22 -203.90.12.0/22 -203.90.128.0/19 -203.90.160.0/19 -203.90.192.0/19 -203.91.32.0/19 -203.91.96.0/20 -203.91.120.0/21 -203.92.0.0/22 -203.92.6.0/24 -203.92.160.0/19 -203.93.0.0/22 -203.93.4.0/22 -203.93.8.0/24 -203.93.9.0/24 -203.93.10.0/23 -203.93.12.0/22 -203.93.16.0/20 -203.93.32.0/19 -203.93.64.0/18 -203.93.128.0/21 -203.93.136.0/22 -203.93.140.0/24 -203.93.141.0/24 -203.93.142.0/23 -203.93.144.0/20 -203.93.160.0/19 -203.93.192.0/18 -203.94.0.0/22 -203.94.4.0/22 -203.94.8.0/21 -203.94.16.0/20 -203.95.0.0/21 -203.95.96.0/20 -203.95.112.0/20 -203.95.128.0/18 -203.95.200.0/22 -203.95.204.0/22 -203.95.208.0/22 -203.95.224.0/19 -203.99.8.0/21 -203.99.16.0/20 -203.99.80.0/20 -203.100.32.0/20 -203.100.48.0/21 -203.100.58.0/24 -203.100.60.0/24 -203.100.63.0/24 -203.100.80.0/20 -203.100.96.0/19 -203.100.192.0/20 -203.104.32.0/20 -203.105.96.0/19 -203.105.128.0/19 -203.107.0.0/17 -203.110.160.0/19 -203.110.208.0/20 -203.110.232.0/23 -203.110.234.0/24 -203.114.80.0/22 -203.114.84.0/22 -203.114.88.0/22 -203.114.92.0/22 -203.114.244.0/22 -203.118.192.0/19 -203.118.241.0/24 -203.118.248.0/22 -203.119.24.0/21 -203.119.32.0/22 -203.119.80.0/22 -203.119.85.0/24 -203.119.113.0/24 -203.119.114.0/23 -203.119.116.0/22 -203.119.120.0/21 -203.119.128.0/17 -203.123.58.0/24 -203.128.32.0/19 -203.128.96.0/19 -203.128.224.0/21 -203.129.8.0/21 -203.130.32.0/19 -203.132.32.0/19 -203.134.240.0/21 -203.135.96.0/20 -203.135.112.0/20 -203.135.160.0/20 -203.142.219.0/24 -203.142.224.0/19 -203.144.96.0/19 -203.145.0.0/19 -203.148.0.0/18 -203.148.64.0/20 -203.148.80.0/22 -203.148.86.0/23 -203.149.92.0/22 -203.152.64.0/19 -203.152.128.0/19 -203.153.0.0/22 -203.156.192.0/18 -203.158.16.0/21 -203.160.52.0/22 -203.160.104.0/21 -203.160.129.0/24 -203.160.192.0/19 -203.161.0.0/22 -203.161.180.0/24 -203.161.183.0/24 -203.161.192.0/19 -203.166.160.0/19 -203.167.28.0/22 -203.168.0.0/19 -203.170.58.0/23 -203.171.0.0/22 -203.171.208.0/24 -203.171.224.0/20 -203.174.4.0/24 -203.174.6.0/24 -203.174.7.0/24 -203.174.96.0/19 -203.175.128.0/19 -203.175.192.0/18 -203.176.0.0/18 -203.176.64.0/19 -203.176.168.0/21 -203.184.80.0/20 -203.185.189.0/24 -203.187.160.0/19 -203.189.0.0/23 -203.189.6.0/23 -203.189.112.0/22 -203.189.192.0/19 -203.189.232.0/22 -203.189.240.0/22 -203.190.96.0/20 -203.190.249.0/24 -203.191.0.0/23 -203.191.2.0/24 -203.191.5.0/24 -203.191.7.0/24 -203.191.16.0/20 -203.191.64.0/18 -203.191.133.0/24 -203.191.144.0/21 -203.191.152.0/21 -203.192.0.0/19 -203.193.224.0/19 -203.194.120.0/21 -203.195.64.0/19 -203.195.112.0/21 -203.195.128.0/17 -203.196.0.0/21 -203.196.8.0/21 -203.196.28.0/22 -203.201.181.0/24 -203.201.182.0/24 -203.202.236.0/22 -203.205.64.0/19 -203.205.128.0/17 -203.207.64.0/20 -203.207.80.0/21 -203.207.88.0/22 -203.207.92.0/22 -203.207.96.0/20 -203.207.112.0/20 -203.207.128.0/18 -203.207.192.0/21 -203.207.200.0/21 -203.207.208.0/20 -203.207.224.0/19 -203.208.0.0/20 -203.208.16.0/22 -203.208.32.0/19 -203.209.224.0/19 -203.212.0.0/20 -203.212.80.0/20 -203.215.232.0/21 -203.217.164.0/22 -203.223.0.0/20 -203.223.16.0/21 -204.52.191.0/24 -210.2.0.0/20 -210.2.16.0/20 -210.5.0.0/19 -210.5.56.0/21 -210.5.128.0/20 -210.5.144.0/20 -210.7.56.0/22 -210.7.60.0/22 -210.12.0.0/18 -210.12.64.0/18 -210.12.128.0/18 -210.12.192.0/18 -210.13.0.0/18 -210.13.64.0/18 -210.13.128.0/17 -210.14.64.0/19 -210.14.112.0/20 -210.14.128.0/19 -210.14.160.0/19 -210.14.192.0/19 -210.14.224.0/19 -210.15.0.0/19 -210.15.32.0/19 -210.15.64.0/19 -210.15.96.0/19 -210.15.128.0/18 -210.16.104.0/22 -210.16.128.0/18 -210.21.0.0/17 -210.21.128.0/17 -210.22.0.0/16 -210.23.32.0/19 -210.25.0.0/16 -210.26.0.0/15 -210.28.0.0/14 -210.32.0.0/14 -210.36.0.0/14 -210.40.0.0/13 -210.51.0.0/16 -210.52.0.0/18 -210.52.64.0/18 -210.52.128.0/17 -210.53.0.0/17 -210.53.128.0/17 -210.56.192.0/19 -210.72.0.0/17 -210.72.128.0/19 -210.72.160.0/19 -210.72.192.0/18 -210.73.0.0/19 -210.73.32.0/19 -210.73.64.0/18 -210.73.128.0/17 -210.74.0.0/19 -210.74.32.0/19 -210.74.64.0/19 -210.74.96.0/19 -210.74.128.0/19 -210.74.160.0/19 -210.74.192.0/18 -210.75.0.0/16 -210.76.0.0/19 -210.76.32.0/19 -210.76.64.0/18 -210.76.128.0/17 -210.77.0.0/16 -210.78.0.0/19 -210.78.32.0/19 -210.78.64.0/18 -210.78.128.0/19 -210.78.160.0/19 -210.78.192.0/18 -210.79.64.0/18 -210.79.224.0/19 -210.82.0.0/15 -210.87.128.0/20 -210.87.144.0/20 -210.87.160.0/19 -210.185.192.0/18 -210.192.96.0/19 -211.64.0.0/14 -211.68.0.0/15 -211.70.0.0/15 -211.80.0.0/16 -211.81.0.0/16 -211.82.0.0/16 -211.83.0.0/16 -211.84.0.0/15 -211.86.0.0/15 -211.88.0.0/16 -211.89.0.0/16 -211.90.0.0/15 -211.92.0.0/15 -211.94.0.0/15 -211.96.0.0/15 -211.98.0.0/16 -211.99.0.0/18 -211.99.64.0/19 -211.99.96.0/19 -211.99.128.0/17 -211.100.0.0/16 -211.101.0.0/18 -211.101.64.0/18 -211.101.128.0/17 -211.102.0.0/16 -211.103.0.0/17 -211.103.128.0/17 -211.136.0.0/14 -211.140.0.0/15 -211.142.0.0/17 -211.142.128.0/17 -211.143.0.0/16 -211.144.0.0/15 -211.146.0.0/16 -211.147.0.0/16 -211.148.0.0/14 -211.152.0.0/15 -211.154.0.0/16 -211.155.0.0/18 -211.155.64.0/19 -211.155.96.0/19 -211.155.128.0/17 -211.156.0.0/14 -211.160.0.0/14 -211.164.0.0/14 -212.64.0.0/17 -212.129.128.0/17 -218.0.0.0/16 -218.1.0.0/16 -218.2.0.0/15 -218.4.0.0/15 -218.6.0.0/16 -218.7.0.0/16 -218.8.0.0/15 -218.10.0.0/16 -218.11.0.0/16 -218.12.0.0/16 -218.13.0.0/16 -218.14.0.0/15 -218.16.0.0/14 -218.20.0.0/16 -218.21.0.0/17 -218.21.128.0/17 -218.22.0.0/15 -218.24.0.0/15 -218.26.0.0/16 -218.27.0.0/16 -218.28.0.0/15 -218.30.0.0/15 -218.56.0.0/14 -218.60.0.0/15 -218.62.0.0/17 -218.62.128.0/17 -218.63.0.0/16 -218.64.0.0/15 -218.66.0.0/16 -218.67.0.0/17 -218.67.128.0/17 -218.68.0.0/15 -218.70.0.0/15 -218.72.0.0/14 -218.76.0.0/15 -218.78.0.0/15 -218.80.0.0/14 -218.84.0.0/14 -218.88.0.0/13 -218.96.0.0/15 -218.98.0.0/17 -218.98.128.0/18 -218.98.192.0/19 -218.98.224.0/19 -218.99.0.0/16 -218.100.88.0/21 -218.100.96.0/19 -218.100.128.0/17 -218.104.0.0/17 -218.104.128.0/19 -218.104.160.0/19 -218.104.192.0/21 -218.104.200.0/21 -218.104.208.0/20 -218.104.224.0/19 -218.105.0.0/16 -218.106.0.0/15 -218.108.0.0/16 -218.109.0.0/16 -218.185.192.0/19 -218.185.240.0/21 -218.192.0.0/16 -218.193.0.0/16 -218.194.0.0/16 -218.195.0.0/16 -218.196.0.0/14 -218.200.0.0/14 -218.204.0.0/15 -218.206.0.0/15 -218.240.0.0/14 -218.244.0.0/15 -218.246.0.0/15 -218.249.0.0/16 -219.72.0.0/16 -219.82.0.0/16 -219.83.128.0/17 -219.90.68.0/22 -219.90.72.0/22 -219.90.76.0/22 -219.128.0.0/12 -219.144.0.0/14 -219.148.0.0/16 -219.149.0.0/17 -219.149.128.0/18 -219.149.192.0/18 -219.150.0.0/19 -219.150.32.0/19 -219.150.64.0/19 -219.150.96.0/20 -219.150.112.0/20 -219.150.128.0/17 -219.151.0.0/19 -219.151.32.0/19 -219.151.64.0/18 -219.151.128.0/17 -219.152.0.0/15 -219.154.0.0/15 -219.156.0.0/15 -219.158.0.0/17 -219.158.128.0/17 -219.159.0.0/18 -219.159.64.0/18 -219.159.128.0/17 -219.216.0.0/15 -219.218.0.0/15 -219.220.0.0/16 -219.221.0.0/16 -219.222.0.0/15 -219.224.0.0/15 -219.226.0.0/16 -219.227.0.0/16 -219.228.0.0/15 -219.230.0.0/15 -219.232.0.0/14 -219.236.0.0/15 -219.238.0.0/15 -219.242.0.0/15 -219.244.0.0/14 -220.101.192.0/18 -220.112.0.0/14 -220.152.128.0/17 -220.154.0.0/15 -220.158.240.0/22 -220.160.0.0/11 -220.192.0.0/15 -220.194.0.0/15 -220.196.0.0/14 -220.200.0.0/13 -220.231.0.0/18 -220.231.128.0/17 -220.232.64.0/18 -220.234.0.0/16 -220.242.0.0/15 -220.247.136.0/21 -220.248.0.0/14 -220.252.0.0/16 -221.0.0.0/15 -221.2.0.0/16 -221.3.0.0/17 -221.3.128.0/17 -221.4.0.0/16 -221.5.0.0/17 -221.5.128.0/17 -221.6.0.0/16 -221.7.0.0/19 -221.7.32.0/19 -221.7.64.0/19 -221.7.96.0/19 -221.7.128.0/17 -221.8.0.0/15 -221.10.0.0/16 -221.11.0.0/17 -221.11.128.0/18 -221.11.192.0/19 -221.11.224.0/19 -221.12.0.0/17 -221.12.128.0/18 -221.13.0.0/18 -221.13.64.0/19 -221.13.96.0/19 -221.13.128.0/17 -221.14.0.0/15 -221.122.0.0/15 -221.128.128.0/17 -221.129.0.0/16 -221.130.0.0/15 -221.133.224.0/19 -221.136.0.0/16 -221.137.0.0/16 -221.172.0.0/14 -221.176.0.0/13 -221.192.0.0/15 -221.194.0.0/16 -221.195.0.0/16 -221.196.0.0/15 -221.198.0.0/16 -221.199.0.0/19 -221.199.32.0/20 -221.199.48.0/20 -221.199.64.0/18 -221.199.128.0/18 -221.199.192.0/20 -221.199.224.0/19 -221.200.0.0/14 -221.204.0.0/15 -221.206.0.0/16 -221.207.0.0/18 -221.207.64.0/18 -221.207.128.0/17 -221.208.0.0/14 -221.212.0.0/16 -221.213.0.0/16 -221.214.0.0/15 -221.216.0.0/13 -221.224.0.0/13 -221.232.0.0/14 -221.236.0.0/15 -221.238.0.0/16 -221.239.0.0/17 -221.239.128.0/17 -222.16.0.0/15 -222.18.0.0/15 -222.20.0.0/15 -222.22.0.0/16 -222.23.0.0/16 -222.24.0.0/15 -222.26.0.0/15 -222.28.0.0/14 -222.32.0.0/11 -222.64.0.0/13 -222.72.0.0/15 -222.74.0.0/16 -222.75.0.0/16 -222.76.0.0/14 -222.80.0.0/15 -222.82.0.0/16 -222.83.0.0/17 -222.83.128.0/17 -222.84.0.0/16 -222.85.0.0/17 -222.85.128.0/17 -222.86.0.0/15 -222.88.0.0/15 -222.90.0.0/15 -222.92.0.0/14 -222.125.0.0/16 -222.126.128.0/17 -222.128.0.0/14 -222.132.0.0/14 -222.136.0.0/13 -222.160.0.0/15 -222.162.0.0/16 -222.163.0.0/19 -222.163.32.0/19 -222.163.64.0/18 -222.163.128.0/17 -222.168.0.0/15 -222.170.0.0/15 -222.172.0.0/17 -222.172.128.0/17 -222.173.0.0/16 -222.174.0.0/15 -222.176.0.0/13 -222.184.0.0/13 -222.192.0.0/14 -222.196.0.0/15 -222.198.0.0/16 -222.199.0.0/16 -222.200.0.0/14 -222.204.0.0/15 -222.206.0.0/15 -222.208.0.0/13 -222.216.0.0/15 -222.218.0.0/16 -222.219.0.0/16 -222.220.0.0/15 -222.222.0.0/15 -222.240.0.0/13 -222.248.0.0/16 -222.249.0.0/17 -222.249.128.0/19 -222.249.160.0/20 -222.249.176.0/20 -222.249.192.0/18 -223.0.0.0/15 -223.2.0.0/15 -223.4.0.0/14 -223.8.0.0/13 -223.20.0.0/15 -223.27.184.0/22 -223.29.208.0/22 -223.29.252.0/22 -223.64.0.0/11 -223.96.0.0/12 -223.112.0.0/14 -223.116.0.0/15 -223.120.128.0/17 -223.121.128.0/17 -223.122.0.0/15 -223.124.0.0/14 -223.128.0.0/15 -223.144.0.0/12 -223.160.0.0/14 -223.166.0.0/15 -223.192.0.0/15 -223.198.0.0/15 -223.201.0.0/16 -223.202.0.0/15 -223.208.0.0/14 -223.212.0.0/15 -223.214.0.0/15 -223.220.0.0/15 -223.223.176.0/20 -223.223.192.0/20 -223.240.0.0/13 -223.248.0.0/14 -223.252.128.0/17 -223.254.0.0/16 -223.255.0.0/17 -223.255.236.0/22 -223.255.252.0/23 diff --git a/luci-app-ssr-plus/root/etc/ssrplus/deny.list b/luci-app-ssr-plus/root/etc/ssrplus/deny.list deleted file mode 100644 index dc4344e7..00000000 --- a/luci-app-ssr-plus/root/etc/ssrplus/deny.list +++ /dev/null @@ -1,14 +0,0 @@ -gvod.aiseejapp.atianqi.com -stat.pandora.xiaomi.com -upgrade.mishop.pandora.xiaomi.com -logonext.tv.kuyun.com -config.kuyun.com -mishop.pandora.xiaomi.com -dvb.pandora.xiaomi.com -api.ad.xiaomi.com -de.pandora.xiaomi.com -data.mistat.xiaomi.com -jellyfish.pandora.xiaomi.com -gallery.pandora.xiaomi.com -o2o.api.xiaomi.com -bss.pandora.xiaomi.com \ No newline at end of file diff --git a/luci-app-ssr-plus/root/etc/ssrplus/gfw_base.conf b/luci-app-ssr-plus/root/etc/ssrplus/gfw_base.conf deleted file mode 100644 index 62cec37c..00000000 --- a/luci-app-ssr-plus/root/etc/ssrplus/gfw_base.conf +++ /dev/null @@ -1,108 +0,0 @@ -ipset=/91smartyun.pt/gfwlist -ipset=/adobe.com/gfwlist -ipset=/amazonaws.com/gfwlist -ipset=/ampproject.org/gfwlist -ipset=/apple.news/gfwlist -ipset=/aws.amazon.com/gfwlist -ipset=/azureedge.net/gfwlist -ipset=/backpackers.com.tw/gfwlist -ipset=/bitfinex.com/gfwlist -ipset=/buzzfeed.com/gfwlist -ipset=/clockwise.ee/gfwlist -ipset=/cloudfront.net/gfwlist -ipset=/coindesk.com/gfwlist -ipset=/coinsquare.io/gfwlist -ipset=/cryptocompare.com/gfwlist -ipset=/dropboxstatic.com/gfwlist -ipset=/eurecom.fr/gfwlist -ipset=/gdax.com/gfwlist -ipset=/github.com/gfwlist -ipset=/kknews.cc/gfwlist -ipset=/nutaq.com/gfwlist -ipset=/openairinterface.org/gfwlist -ipset=/skype.com/gfwlist -ipset=/sublimetext.com/gfwlist -ipset=/textnow.com/gfwlist -ipset=/textnow.me/gfwlist -ipset=/trouter.io/gfwlist -ipset=/t66y.com/gfwlist -ipset=/uploaded.net/gfwlist -ipset=/whatsapp.com/gfwlist -ipset=/whatsapp.net/gfwlist -ipset=/wsj.net/gfwlist -ipset=/google.com/gfwlist -ipset=/google.com.hk/gfwlist -ipset=/gstatic.com/gfwlist -ipset=/googleusercontent.com/gfwlist -ipset=/googlepages.com/gfwlist -ipset=/googlevideo.com/gfwlist -ipset=/googlecode.com/gfwlist -ipset=/googleapis.com/gfwlist -ipset=/googlesource.com/gfwlist -ipset=/googledrive.com/gfwlist -ipset=/ggpht.com/gfwlist -ipset=/youtube.com/gfwlist -ipset=/youtu.be/gfwlist -ipset=/ytimg.com/gfwlist -ipset=/twitter.com/gfwlist -ipset=/facebook.com/gfwlist -ipset=/fastly.net/gfwlist -ipset=/akamai.net/gfwlist -ipset=/akamaiedge.net/gfwlist -ipset=/akamaihd.net/gfwlist -ipset=/edgesuite.net/gfwlist -ipset=/edgekey.net/gfwlist -server=/91smartyun.pt/127.0.0.1#5335 -server=/adobe.com/127.0.0.1#5335 -server=/amazonaws.com/127.0.0.1#5335 -server=/ampproject.org/127.0.0.1#5335 -server=/apple.news/127.0.0.1#5335 -server=/aws.amazon.com/127.0.0.1#5335 -server=/azureedge.net/127.0.0.1#5335 -server=/backpackers.com.tw/127.0.0.1#5335 -server=/bitfinex.com/127.0.0.1#5335 -server=/buzzfeed.com/127.0.0.1#5335 -server=/clockwise.ee/127.0.0.1#5335 -server=/cloudfront.net/127.0.0.1#5335 -server=/coindesk.com/127.0.0.1#5335 -server=/coinsquare.io/127.0.0.1#5335 -server=/cryptocompare.com/127.0.0.1#5335 -server=/dropboxstatic.com/127.0.0.1#5335 -server=/eurecom.fr/127.0.0.1#5335 -server=/gdax.com/127.0.0.1#5335 -server=/github.com/127.0.0.1#5335 -server=/kknews.cc/127.0.0.1#5335 -server=/nutaq.com/127.0.0.1#5335 -server=/openairinterface.org/127.0.0.1#5335 -server=/skype.com/127.0.0.1#5335 -server=/sublimetext.com/127.0.0.1#5335 -server=/textnow.com/127.0.0.1#5335 -server=/textnow.me/127.0.0.1#5335 -server=/trouter.io/127.0.0.1#5335 -server=/t66y.com/127.0.0.1#5335 -server=/uploaded.net/127.0.0.1#5335 -server=/whatsapp.com/127.0.0.1#5335 -server=/whatsapp.net/127.0.0.1#5335 -server=/wsj.net/127.0.0.1#5335 -server=/google.com/127.0.0.1#5335 -server=/google.com.hk/127.0.0.1#5335 -server=/gstatic.com/127.0.0.1#5335 -server=/googleusercontent.com/127.0.0.1#5335 -server=/googlepages.com/127.0.0.1#5335 -server=/googlevideo.com/127.0.0.1#5335 -server=/googlecode.com/127.0.0.1#5335 -server=/googleapis.com/127.0.0.1#5335 -server=/googlesource.com/127.0.0.1#5335 -server=/googledrive.com/127.0.0.1#5335 -server=/ggpht.com/127.0.0.1#5335 -server=/youtube.com/127.0.0.1#5335 -server=/youtu.be/127.0.0.1#5335 -server=/ytimg.com/127.0.0.1#5335 -server=/twitter.com/127.0.0.1#5335 -server=/facebook.com/127.0.0.1#5335 -server=/fastly.net/127.0.0.1#5335 -server=/akamai.net/127.0.0.1#5335 -server=/akamaiedge.net/127.0.0.1#5335 -server=/akamaihd.net/127.0.0.1#5335 -server=/edgesuite.net/127.0.0.1#5335 -server=/edgekey.net/127.0.0.1#5335 diff --git a/luci-app-ssr-plus/root/etc/ssrplus/gfw_list.conf b/luci-app-ssr-plus/root/etc/ssrplus/gfw_list.conf deleted file mode 100644 index 98e17f65..00000000 --- a/luci-app-ssr-plus/root/etc/ssrplus/gfw_list.conf +++ /dev/null @@ -1,23036 +0,0 @@ -server=/samebags.com/127.0.0.1#5335 -ipset=/samebags.com/gfwlist -server=/ameba.jp/127.0.0.1#5335 -ipset=/ameba.jp/gfwlist -server=/facebool.com/127.0.0.1#5335 -ipset=/facebool.com/gfwlist -server=/intel.md/127.0.0.1#5335 -ipset=/intel.md/gfwlist -server=/disneystore.com/127.0.0.1#5335 -ipset=/disneystore.com/gfwlist -server=/lcsmerch.com/127.0.0.1#5335 -ipset=/lcsmerch.com/gfwlist -server=/youtube.my/127.0.0.1#5335 -ipset=/youtube.my/gfwlist -server=/nintendo.nl/127.0.0.1#5335 -ipset=/nintendo.nl/gfwlist -server=/lasvegasbmw.com/127.0.0.1#5335 -ipset=/lasvegasbmw.com/gfwlist -server=/zeit.sh/127.0.0.1#5335 -ipset=/zeit.sh/gfwlist -server=/huffpostmaghreb.com/127.0.0.1#5335 -ipset=/huffpostmaghreb.com/gfwlist -server=/nikewear.com/127.0.0.1#5335 -ipset=/nikewear.com/gfwlist -server=/myaccountglobalcash.com/127.0.0.1#5335 -ipset=/myaccountglobalcash.com/gfwlist -server=/visacheckout.org/127.0.0.1#5335 -ipset=/visacheckout.org/gfwlist -server=/discordapp.net/127.0.0.1#5335 -ipset=/discordapp.net/gfwlist -server=/bbycontent.net/127.0.0.1#5335 -ipset=/bbycontent.net/gfwlist -server=/mybestbuy.com/127.0.0.1#5335 -ipset=/mybestbuy.com/gfwlist -server=/blogspot.bj/127.0.0.1#5335 -ipset=/blogspot.bj/gfwlist -server=/oreillystatic.com/127.0.0.1#5335 -ipset=/oreillystatic.com/gfwlist -server=/xhamsterlive.com/127.0.0.1#5335 -ipset=/xhamsterlive.com/gfwlist -server=/akamai.com/127.0.0.1#5335 -ipset=/akamai.com/gfwlist -server=/unraveltwo.com/127.0.0.1#5335 -ipset=/unraveltwo.com/gfwlist -server=/bmw.com.gt/127.0.0.1#5335 -ipset=/bmw.com.gt/gfwlist -server=/duckduckco.com/127.0.0.1#5335 -ipset=/duckduckco.com/gfwlist -server=/facebookwork.com/127.0.0.1#5335 -ipset=/facebookwork.com/gfwlist -server=/iwork.se/127.0.0.1#5335 -ipset=/iwork.se/gfwlist -server=/nurofen.hu/127.0.0.1#5335 -ipset=/nurofen.hu/gfwlist -server=/buyitnow.org/127.0.0.1#5335 -ipset=/buyitnow.org/gfwlist -server=/thinkboxsoftware.com/127.0.0.1#5335 -ipset=/thinkboxsoftware.com/gfwlist -server=/paypali.net/127.0.0.1#5335 -ipset=/paypali.net/gfwlist -server=/sellercommunity.com/127.0.0.1#5335 -ipset=/sellercommunity.com/gfwlist -server=/washingtonpost.com/127.0.0.1#5335 -ipset=/washingtonpost.com/gfwlist -server=/livestream.com/127.0.0.1#5335 -ipset=/livestream.com/gfwlist -server=/homebrew.bintray.com/127.0.0.1#5335 -ipset=/homebrew.bintray.com/gfwlist -server=/brightcove.com/127.0.0.1#5335 -ipset=/brightcove.com/gfwlist -server=/morteincam.com/127.0.0.1#5335 -ipset=/morteincam.com/gfwlist -server=/gettyimages.ae/127.0.0.1#5335 -ipset=/gettyimages.ae/gfwlist -server=/ulifestyle.com.hk/127.0.0.1#5335 -ipset=/ulifestyle.com.hk/gfwlist -server=/itunes.mx/127.0.0.1#5335 -ipset=/itunes.mx/gfwlist -server=/beatssingaporeshop.com/127.0.0.1#5335 -ipset=/beatssingaporeshop.com/gfwlist -server=/beatsbydreuk.net/127.0.0.1#5335 -ipset=/beatsbydreuk.net/gfwlist -server=/bandgirlz.com/127.0.0.1#5335 -ipset=/bandgirlz.com/gfwlist -server=/cloudchoose.com/127.0.0.1#5335 -ipset=/cloudchoose.com/gfwlist -server=/bmw-rrdays.com/127.0.0.1#5335 -ipset=/bmw-rrdays.com/gfwlist -server=/lizol.co.in/127.0.0.1#5335 -ipset=/lizol.co.in/gfwlist -server=/applecomputer.com.hk/127.0.0.1#5335 -ipset=/applecomputer.com.hk/gfwlist -server=/bridgestonearena.com/127.0.0.1#5335 -ipset=/bridgestonearena.com/gfwlist -server=/huluteam.com/127.0.0.1#5335 -ipset=/huluteam.com/gfwlist -server=/developer-advisor.com/127.0.0.1#5335 -ipset=/developer-advisor.com/gfwlist -server=/myhelpinglab.com/127.0.0.1#5335 -ipset=/myhelpinglab.com/gfwlist -server=/oxfordmusiconline.com/127.0.0.1#5335 -ipset=/oxfordmusiconline.com/gfwlist -server=/stripchat.com/127.0.0.1#5335 -ipset=/stripchat.com/gfwlist -server=/youtube.co.uk/127.0.0.1#5335 -ipset=/youtube.co.uk/gfwlist -server=/supermario3dworld.com/127.0.0.1#5335 -ipset=/supermario3dworld.com/gfwlist -server=/huffingtonpost.com.au/127.0.0.1#5335 -ipset=/huffingtonpost.com.au/gfwlist -server=/thebeatsbydre.net/127.0.0.1#5335 -ipset=/thebeatsbydre.net/gfwlist -server=/alphabet.pt/127.0.0.1#5335 -ipset=/alphabet.pt/gfwlist -server=/thesims4.com/127.0.0.1#5335 -ipset=/thesims4.com/gfwlist -server=/teenchoice.com/127.0.0.1#5335 -ipset=/teenchoice.com/gfwlist -server=/quicktime.cc/127.0.0.1#5335 -ipset=/quicktime.cc/gfwlist -server=/dribbble.com/127.0.0.1#5335 -ipset=/dribbble.com/gfwlist -server=/applestore.sg/127.0.0.1#5335 -ipset=/applestore.sg/gfwlist -server=/kindle.co.jp/127.0.0.1#5335 -ipset=/kindle.co.jp/gfwlist -server=/terraform.io/127.0.0.1#5335 -ipset=/terraform.io/gfwlist -server=/btcbox.co.jp/127.0.0.1#5335 -ipset=/btcbox.co.jp/gfwlist -server=/faycbok.com/127.0.0.1#5335 -ipset=/faycbok.com/gfwlist -server=/scpwiki.com/127.0.0.1#5335 -ipset=/scpwiki.com/gfwlist -server=/google.vg/127.0.0.1#5335 -ipset=/google.vg/gfwlist -server=/picasaweb.net/127.0.0.1#5335 -ipset=/picasaweb.net/gfwlist -server=/alivertsm.com/127.0.0.1#5335 -ipset=/alivertsm.com/gfwlist -server=/youtube.lt/127.0.0.1#5335 -ipset=/youtube.lt/gfwlist -server=/wolfatbestbuy.net/127.0.0.1#5335 -ipset=/wolfatbestbuy.net/gfwlist -server=/hptouchpointmanager.com/127.0.0.1#5335 -ipset=/hptouchpointmanager.com/gfwlist -server=/usvimosquito.com/127.0.0.1#5335 -ipset=/usvimosquito.com/gfwlist -server=/legaltracker.com/127.0.0.1#5335 -ipset=/legaltracker.com/gfwlist -server=/akadeem.net/127.0.0.1#5335 -ipset=/akadeem.net/gfwlist -server=/llnwd.net/127.0.0.1#5335 -ipset=/llnwd.net/gfwlist -server=/fox13memphis.com/127.0.0.1#5335 -ipset=/fox13memphis.com/gfwlist -server=/appleone.cloud/127.0.0.1#5335 -ipset=/appleone.cloud/gfwlist -server=/yahoo.rw/127.0.0.1#5335 -ipset=/yahoo.rw/gfwlist -server=/powerautomate.com/127.0.0.1#5335 -ipset=/powerautomate.com/gfwlist -server=/volvotrucks.pl/127.0.0.1#5335 -ipset=/volvotrucks.pl/gfwlist -server=/urduvoa.com/127.0.0.1#5335 -ipset=/urduvoa.com/gfwlist -server=/ouplaw.com/127.0.0.1#5335 -ipset=/ouplaw.com/gfwlist -server=/paypal-specialoffers.com/127.0.0.1#5335 -ipset=/paypal-specialoffers.com/gfwlist -server=/epochtimes.fr/127.0.0.1#5335 -ipset=/epochtimes.fr/gfwlist -server=/freedirecttvspecial.com/127.0.0.1#5335 -ipset=/freedirecttvspecial.com/gfwlist -server=/nurofen.com.au/127.0.0.1#5335 -ipset=/nurofen.com.au/gfwlist -server=/iina.io/127.0.0.1#5335 -ipset=/iina.io/gfwlist -server=/appleos.tv/127.0.0.1#5335 -ipset=/appleos.tv/gfwlist -server=/foxnewspolitics.com/127.0.0.1#5335 -ipset=/foxnewspolitics.com/gfwlist -server=/quicktime.net/127.0.0.1#5335 -ipset=/quicktime.net/gfwlist -server=/beatsheadphonesonline.com/127.0.0.1#5335 -ipset=/beatsheadphonesonline.com/gfwlist -server=/w3.org/127.0.0.1#5335 -ipset=/w3.org/gfwlist -server=/visasoutheasteurope.com/127.0.0.1#5335 -ipset=/visasoutheasteurope.com/gfwlist -server=/foxd.tv/127.0.0.1#5335 -ipset=/foxd.tv/gfwlist -server=/forthethrone.com/127.0.0.1#5335 -ipset=/forthethrone.com/gfwlist -server=/telesco.pe/127.0.0.1#5335 -ipset=/telesco.pe/gfwlist -server=/monsterbeatsoutlet.us/127.0.0.1#5335 -ipset=/monsterbeatsoutlet.us/gfwlist -server=/gettyimages.it/127.0.0.1#5335 -ipset=/gettyimages.it/gfwlist -server=/visualstudio.net/127.0.0.1#5335 -ipset=/visualstudio.net/gfwlist -server=/disneymovieinsiders.com/127.0.0.1#5335 -ipset=/disneymovieinsiders.com/gfwlist -server=/ipadair.ie/127.0.0.1#5335 -ipset=/ipadair.ie/gfwlist -server=/20thcenturystudios.com.br/127.0.0.1#5335 -ipset=/20thcenturystudios.com.br/gfwlist -server=/conda.io/127.0.0.1#5335 -ipset=/conda.io/gfwlist -server=/fbthirdpartypixel.net/127.0.0.1#5335 -ipset=/fbthirdpartypixel.net/gfwlist -server=/beatsbydreoksale.com/127.0.0.1#5335 -ipset=/beatsbydreoksale.com/gfwlist -server=/heaven-burns-red.com/127.0.0.1#5335 -ipset=/heaven-burns-red.com/gfwlist -server=/visa.com.hk/127.0.0.1#5335 -ipset=/visa.com.hk/gfwlist -server=/stackoverflow.blog/127.0.0.1#5335 -ipset=/stackoverflow.blog/gfwlist -server=/vipheadphones.com/127.0.0.1#5335 -ipset=/vipheadphones.com/gfwlist -server=/hanime.tv/127.0.0.1#5335 -ipset=/hanime.tv/gfwlist -server=/beatsbymusic.net/127.0.0.1#5335 -ipset=/beatsbymusic.net/gfwlist -server=/intel.tw/127.0.0.1#5335 -ipset=/intel.tw/gfwlist -server=/half.com/127.0.0.1#5335 -ipset=/half.com/gfwlist -server=/sourceforge.net/127.0.0.1#5335 -ipset=/sourceforge.net/gfwlist -server=/amazonianblog.com/127.0.0.1#5335 -ipset=/amazonianblog.com/gfwlist -server=/visa.com.vn/127.0.0.1#5335 -ipset=/visa.com.vn/gfwlist -server=/hcaptcha.com/127.0.0.1#5335 -ipset=/hcaptcha.com/gfwlist -server=/oculusdiving.com/127.0.0.1#5335 -ipset=/oculusdiving.com/gfwlist -server=/blogspot.pt/127.0.0.1#5335 -ipset=/blogspot.pt/gfwlist -server=/cbsnews.com/127.0.0.1#5335 -ipset=/cbsnews.com/gfwlist -server=/paypal-latam.com/127.0.0.1#5335 -ipset=/paypal-latam.com/gfwlist -server=/beatsdreoutletsale.com/127.0.0.1#5335 -ipset=/beatsdreoutletsale.com/gfwlist -server=/youtube.com.co/127.0.0.1#5335 -ipset=/youtube.com.co/gfwlist -server=/v.gd/127.0.0.1#5335 -ipset=/v.gd/gfwlist -server=/apple.pk/127.0.0.1#5335 -ipset=/apple.pk/gfwlist -server=/huluqa.com/127.0.0.1#5335 -ipset=/huluqa.com/gfwlist -server=/casquesbeatsaudio.com/127.0.0.1#5335 -ipset=/casquesbeatsaudio.com/gfwlist -server=/oculus2014.com/127.0.0.1#5335 -ipset=/oculus2014.com/gfwlist -server=/intel.co.za/127.0.0.1#5335 -ipset=/intel.co.za/gfwlist -server=/canon.at/127.0.0.1#5335 -ipset=/canon.at/gfwlist -server=/facboo.com/127.0.0.1#5335 -ipset=/facboo.com/gfwlist -server=/appmediagroup.com/127.0.0.1#5335 -ipset=/appmediagroup.com/gfwlist -server=/casquemonsterbeatsbydre2013.com/127.0.0.1#5335 -ipset=/casquemonsterbeatsbydre2013.com/gfwlist -server=/mapbox.com/127.0.0.1#5335 -ipset=/mapbox.com/gfwlist -server=/pvp.net/127.0.0.1#5335 -ipset=/pvp.net/gfwlist -server=/kanzhongguo.com/127.0.0.1#5335 -ipset=/kanzhongguo.com/gfwlist -server=/shopbydre.com/127.0.0.1#5335 -ipset=/shopbydre.com/gfwlist -server=/swisssigngroup.ch/127.0.0.1#5335 -ipset=/swisssigngroup.ch/gfwlist -server=/ebaymotors.ca/127.0.0.1#5335 -ipset=/ebaymotors.ca/gfwlist -server=/intel.nl/127.0.0.1#5335 -ipset=/intel.nl/gfwlist -server=/bingapistatistics.com/127.0.0.1#5335 -ipset=/bingapistatistics.com/gfwlist -server=/seaofsolitude.com/127.0.0.1#5335 -ipset=/seaofsolitude.com/gfwlist -server=/riotpoints.com/127.0.0.1#5335 -ipset=/riotpoints.com/gfwlist -server=/yahooapis.com/127.0.0.1#5335 -ipset=/yahooapis.com/gfwlist -server=/facebuk.com/127.0.0.1#5335 -ipset=/facebuk.com/gfwlist -server=/gosq.co/127.0.0.1#5335 -ipset=/gosq.co/gfwlist -server=/yandex.com.am/127.0.0.1#5335 -ipset=/yandex.com.am/gfwlist -server=/aapl.tw/127.0.0.1#5335 -ipset=/aapl.tw/gfwlist -server=/finishinfo.nl/127.0.0.1#5335 -ipset=/finishinfo.nl/gfwlist -server=/hpindigopress.com/127.0.0.1#5335 -ipset=/hpindigopress.com/gfwlist -server=/webex.com.hk/127.0.0.1#5335 -ipset=/webex.com.hk/gfwlist -server=/bmw.fr/127.0.0.1#5335 -ipset=/bmw.fr/gfwlist -server=/msauth.net/127.0.0.1#5335 -ipset=/msauth.net/gfwlist -server=/activelearnprimary.co.uk/127.0.0.1#5335 -ipset=/activelearnprimary.co.uk/gfwlist -server=/dell-brand.com/127.0.0.1#5335 -ipset=/dell-brand.com/gfwlist -server=/championshipseriesleague.com/127.0.0.1#5335 -ipset=/championshipseriesleague.com/gfwlist -server=/bmw.com.sv/127.0.0.1#5335 -ipset=/bmw.com.sv/gfwlist -server=/microsoft.be/127.0.0.1#5335 -ipset=/microsoft.be/gfwlist -server=/spankbang.com/127.0.0.1#5335 -ipset=/spankbang.com/gfwlist -server=/needforspeedundergroundeast.com/127.0.0.1#5335 -ipset=/needforspeedundergroundeast.com/gfwlist -server=/sslpaypal.org/127.0.0.1#5335 -ipset=/sslpaypal.org/gfwlist -server=/qualcomm.cn/127.0.0.1#5335 -ipset=/qualcomm.cn/gfwlist -server=/etnet.com.hk/127.0.0.1#5335 -ipset=/etnet.com.hk/gfwlist -server=/nikeconfluence.com/127.0.0.1#5335 -ipset=/nikeconfluence.com/gfwlist -server=/applewatch.hk/127.0.0.1#5335 -ipset=/applewatch.hk/gfwlist -server=/foxfiles.com/127.0.0.1#5335 -ipset=/foxfiles.com/gfwlist -server=/beatsdrenewcolorful4usale.com/127.0.0.1#5335 -ipset=/beatsdrenewcolorful4usale.com/gfwlist -server=/facebooe.com/127.0.0.1#5335 -ipset=/facebooe.com/gfwlist -server=/applemusic.com.au/127.0.0.1#5335 -ipset=/applemusic.com.au/gfwlist -server=/dkbeatsbydre.com/127.0.0.1#5335 -ipset=/dkbeatsbydre.com/gfwlist -server=/apple.net.gr/127.0.0.1#5335 -ipset=/apple.net.gr/gfwlist -server=/google.sn/127.0.0.1#5335 -ipset=/google.sn/gfwlist -server=/beats-bydrestore.com/127.0.0.1#5335 -ipset=/beats-bydrestore.com/gfwlist -server=/einstein.com/127.0.0.1#5335 -ipset=/einstein.com/gfwlist -server=/kkbox.com/127.0.0.1#5335 -ipset=/kkbox.com/gfwlist -server=/ebaylisting.com/127.0.0.1#5335 -ipset=/ebaylisting.com/gfwlist -server=/i-book.com/127.0.0.1#5335 -ipset=/i-book.com/gfwlist -server=/ads.pubmatic.com/127.0.0.1#5335 -ipset=/ads.pubmatic.com/gfwlist -server=/icloud.ee/127.0.0.1#5335 -ipset=/icloud.ee/gfwlist -server=/tail-f.com/127.0.0.1#5335 -ipset=/tail-f.com/gfwlist -server=/muscdn.com/127.0.0.1#5335 -ipset=/muscdn.com/gfwlist -server=/onedrive.com/127.0.0.1#5335 -ipset=/onedrive.com/gfwlist -server=/harpercollins.co.uk/127.0.0.1#5335 -ipset=/harpercollins.co.uk/gfwlist -server=/yogalayout.com/127.0.0.1#5335 -ipset=/yogalayout.com/gfwlist -server=/yahoo.sh/127.0.0.1#5335 -ipset=/yahoo.sh/gfwlist -server=/parstream.net/127.0.0.1#5335 -ipset=/parstream.net/gfwlist -server=/vim.org/127.0.0.1#5335 -ipset=/vim.org/gfwlist -server=/ebayincconnectedcommerce.net/127.0.0.1#5335 -ipset=/ebayincconnectedcommerce.net/gfwlist -server=/mini-connected.nl/127.0.0.1#5335 -ipset=/mini-connected.nl/gfwlist -server=/disney.it/127.0.0.1#5335 -ipset=/disney.it/gfwlist -server=/seqingx.com/127.0.0.1#5335 -ipset=/seqingx.com/gfwlist -server=/drdrebeatsbillig.com/127.0.0.1#5335 -ipset=/drdrebeatsbillig.com/gfwlist -server=/espn.net/127.0.0.1#5335 -ipset=/espn.net/gfwlist -server=/beatsheadphones-discount.com/127.0.0.1#5335 -ipset=/beatsheadphones-discount.com/gfwlist -server=/vfsco.it/127.0.0.1#5335 -ipset=/vfsco.it/gfwlist -server=/openweave.io/127.0.0.1#5335 -ipset=/openweave.io/gfwlist -server=/dvdstudiopro.info/127.0.0.1#5335 -ipset=/dvdstudiopro.info/gfwlist -server=/shopee.tw/127.0.0.1#5335 -ipset=/shopee.tw/gfwlist -server=/beatsbydrestorevip.com/127.0.0.1#5335 -ipset=/beatsbydrestorevip.com/gfwlist -server=/garena.com/127.0.0.1#5335 -ipset=/garena.com/gfwlist -server=/bmw.bg/127.0.0.1#5335 -ipset=/bmw.bg/gfwlist -server=/gearspop.com/127.0.0.1#5335 -ipset=/gearspop.com/gfwlist -server=/fire-emblem-heroes.com/127.0.0.1#5335 -ipset=/fire-emblem-heroes.com/gfwlist -server=/dewitwithdurex.com/127.0.0.1#5335 -ipset=/dewitwithdurex.com/gfwlist -server=/ebayon.com/127.0.0.1#5335 -ipset=/ebayon.com/gfwlist -server=/pricelesssantiago.com/127.0.0.1#5335 -ipset=/pricelesssantiago.com/gfwlist -server=/miamifintechfestival.com/127.0.0.1#5335 -ipset=/miamifintechfestival.com/gfwlist -server=/minidowntown.com/127.0.0.1#5335 -ipset=/minidowntown.com/gfwlist -server=/mini.am/127.0.0.1#5335 -ipset=/mini.am/gfwlist -server=/realestatejournal.com/127.0.0.1#5335 -ipset=/realestatejournal.com/gfwlist -server=/mini-connected.at/127.0.0.1#5335 -ipset=/mini-connected.at/gfwlist -server=/ebaypark.com/127.0.0.1#5335 -ipset=/ebaypark.com/gfwlist -server=/appleone.space/127.0.0.1#5335 -ipset=/appleone.space/gfwlist -server=/youlucky.com/127.0.0.1#5335 -ipset=/youlucky.com/gfwlist -server=/qingse.one/127.0.0.1#5335 -ipset=/qingse.one/gfwlist -server=/oculusblog.com/127.0.0.1#5335 -ipset=/oculusblog.com/gfwlist -server=/developria.com/127.0.0.1#5335 -ipset=/developria.com/gfwlist -server=/kali.org/127.0.0.1#5335 -ipset=/kali.org/gfwlist -server=/amazonlaunchpad.com/127.0.0.1#5335 -ipset=/amazonlaunchpad.com/gfwlist -server=/headphonessupply.com/127.0.0.1#5335 -ipset=/headphonessupply.com/gfwlist -server=/icloudos.de/127.0.0.1#5335 -ipset=/icloudos.de/gfwlist -server=/sony.nl/127.0.0.1#5335 -ipset=/sony.nl/gfwlist -server=/bmwmotorcycleusa.com/127.0.0.1#5335 -ipset=/bmwmotorcycleusa.com/gfwlist -server=/vendu.com/127.0.0.1#5335 -ipset=/vendu.com/gfwlist -server=/facebook-newsroom.org/127.0.0.1#5335 -ipset=/facebook-newsroom.org/gfwlist -server=/poweredbyintel.com/127.0.0.1#5335 -ipset=/poweredbyintel.com/gfwlist -server=/brightcove.imgix.net/127.0.0.1#5335 -ipset=/brightcove.imgix.net/gfwlist -server=/disneychannelonstage.com/127.0.0.1#5335 -ipset=/disneychannelonstage.com/gfwlist -server=/aerogardcn.com/127.0.0.1#5335 -ipset=/aerogardcn.com/gfwlist -server=/beatsbydrespeakers.com/127.0.0.1#5335 -ipset=/beatsbydrespeakers.com/gfwlist -server=/iphonefc.com/127.0.0.1#5335 -ipset=/iphonefc.com/gfwlist -server=/movenetworks.com/127.0.0.1#5335 -ipset=/movenetworks.com/gfwlist -server=/veryshortintroductions.com/127.0.0.1#5335 -ipset=/veryshortintroductions.com/gfwlist -server=/tvbweekly.com/127.0.0.1#5335 -ipset=/tvbweekly.com/gfwlist -server=/avsee01.tv/127.0.0.1#5335 -ipset=/avsee01.tv/gfwlist -server=/volvotrucks.co.nz/127.0.0.1#5335 -ipset=/volvotrucks.co.nz/gfwlist -server=/paypal-exchanges.com/127.0.0.1#5335 -ipset=/paypal-exchanges.com/gfwlist -server=/gooddaychicago.com/127.0.0.1#5335 -ipset=/gooddaychicago.com/gfwlist -server=/bestbuysolutions.net/127.0.0.1#5335 -ipset=/bestbuysolutions.net/gfwlist -server=/attwatchtv.com/127.0.0.1#5335 -ipset=/attwatchtv.com/gfwlist -server=/ampproject.net/127.0.0.1#5335 -ipset=/ampproject.net/gfwlist -server=/tnt-ea.com/127.0.0.1#5335 -ipset=/tnt-ea.com/gfwlist -server=/huffingtonpost.in/127.0.0.1#5335 -ipset=/huffingtonpost.in/gfwlist -server=/veet.co.nz/127.0.0.1#5335 -ipset=/veet.co.nz/gfwlist -server=/lovesexdurex.com/127.0.0.1#5335 -ipset=/lovesexdurex.com/gfwlist -server=/shp.ee/127.0.0.1#5335 -ipset=/shp.ee/gfwlist -server=/bnetcmsus-a.akamaihd.net/127.0.0.1#5335 -ipset=/bnetcmsus-a.akamaihd.net/gfwlist -server=/periscope.tv/127.0.0.1#5335 -ipset=/periscope.tv/gfwlist -server=/mini-connected.lv/127.0.0.1#5335 -ipset=/mini-connected.lv/gfwlist -server=/bmw-pakistan.com/127.0.0.1#5335 -ipset=/bmw-pakistan.com/gfwlist -server=/developer.mozilla.org/127.0.0.1#5335 -ipset=/developer.mozilla.org/gfwlist -server=/ciscojabbervideo.net/127.0.0.1#5335 -ipset=/ciscojabbervideo.net/gfwlist -server=/omtrdc.net/127.0.0.1#5335 -ipset=/omtrdc.net/gfwlist -server=/wsjbarrons.com/127.0.0.1#5335 -ipset=/wsjbarrons.com/gfwlist -server=/theporndude.com/127.0.0.1#5335 -ipset=/theporndude.com/gfwlist -server=/mini.lu/127.0.0.1#5335 -ipset=/mini.lu/gfwlist -server=/pixnet.net/127.0.0.1#5335 -ipset=/pixnet.net/gfwlist -server=/qmap.pub/127.0.0.1#5335 -ipset=/qmap.pub/gfwlist -server=/r18lu.com/127.0.0.1#5335 -ipset=/r18lu.com/gfwlist -server=/hackerfacebook.com/127.0.0.1#5335 -ipset=/hackerfacebook.com/gfwlist -server=/721av.com/127.0.0.1#5335 -ipset=/721av.com/gfwlist -server=/hbo.com/127.0.0.1#5335 -ipset=/hbo.com/gfwlist -server=/apple-store.net/127.0.0.1#5335 -ipset=/apple-store.net/gfwlist -server=/theaustralian.com.au/127.0.0.1#5335 -ipset=/theaustralian.com.au/gfwlist -server=/ms-studiosmedia.com/127.0.0.1#5335 -ipset=/ms-studiosmedia.com/gfwlist -server=/windows.net/127.0.0.1#5335 -ipset=/windows.net/gfwlist -server=/compresspdf.new/127.0.0.1#5335 -ipset=/compresspdf.new/gfwlist -server=/amazonvideo.com/127.0.0.1#5335 -ipset=/amazonvideo.com/gfwlist -server=/yahoo.co.il/127.0.0.1#5335 -ipset=/yahoo.co.il/gfwlist -server=/squarecdn.com/127.0.0.1#5335 -ipset=/squarecdn.com/gfwlist -server=/pinterest.dk/127.0.0.1#5335 -ipset=/pinterest.dk/gfwlist -server=/identrust.net/127.0.0.1#5335 -ipset=/identrust.net/gfwlist -server=/xn--pearsonenespaol-brb.com/127.0.0.1#5335 -ipset=/xn--pearsonenespaol-brb.com/gfwlist -server=/hpeventcenter.com/127.0.0.1#5335 -ipset=/hpeventcenter.com/gfwlist -server=/apple.co/127.0.0.1#5335 -ipset=/apple.co/gfwlist -server=/appleenews.com/127.0.0.1#5335 -ipset=/appleenews.com/gfwlist -server=/google.mw/127.0.0.1#5335 -ipset=/google.mw/gfwlist -server=/baazee.com/127.0.0.1#5335 -ipset=/baazee.com/gfwlist -server=/tomonews.net/127.0.0.1#5335 -ipset=/tomonews.net/gfwlist -server=/certificate-transparency.org/127.0.0.1#5335 -ipset=/certificate-transparency.org/gfwlist -server=/custom-iphonecase.com/127.0.0.1#5335 -ipset=/custom-iphonecase.com/gfwlist -server=/txdirectv.com/127.0.0.1#5335 -ipset=/txdirectv.com/gfwlist -server=/foxsports.com.co/127.0.0.1#5335 -ipset=/foxsports.com.co/gfwlist -server=/bmw.lv/127.0.0.1#5335 -ipset=/bmw.lv/gfwlist -server=/myfoxdc.com/127.0.0.1#5335 -ipset=/myfoxdc.com/gfwlist -server=/rmbl.ws/127.0.0.1#5335 -ipset=/rmbl.ws/gfwlist -server=/foxnetworks.info/127.0.0.1#5335 -ipset=/foxnetworks.info/gfwlist -server=/jfengtime.com/127.0.0.1#5335 -ipset=/jfengtime.com/gfwlist -server=/microsoftteams.com/127.0.0.1#5335 -ipset=/microsoftteams.com/gfwlist -server=/visa.com.mx/127.0.0.1#5335 -ipset=/visa.com.mx/gfwlist -server=/euroipad.com/127.0.0.1#5335 -ipset=/euroipad.com/gfwlist -server=/touchid.wang/127.0.0.1#5335 -ipset=/touchid.wang/gfwlist -server=/bitly.is/127.0.0.1#5335 -ipset=/bitly.is/gfwlist -server=/readthedocs.com/127.0.0.1#5335 -ipset=/readthedocs.com/gfwlist -server=/uug26.com/127.0.0.1#5335 -ipset=/uug26.com/gfwlist -server=/bmw-motorrad.pl/127.0.0.1#5335 -ipset=/bmw-motorrad.pl/gfwlist -server=/akamam.com/127.0.0.1#5335 -ipset=/akamam.com/gfwlist -server=/ekhindi.com/127.0.0.1#5335 -ipset=/ekhindi.com/gfwlist -server=/epoch.cloud/127.0.0.1#5335 -ipset=/epoch.cloud/gfwlist -server=/friendbook.info/127.0.0.1#5335 -ipset=/friendbook.info/gfwlist -server=/thisismoney.co.uk/127.0.0.1#5335 -ipset=/thisismoney.co.uk/gfwlist -server=/google.it/127.0.0.1#5335 -ipset=/google.it/gfwlist -server=/leecountytimes.com/127.0.0.1#5335 -ipset=/leecountytimes.com/gfwlist -server=/yahoo.com.pr/127.0.0.1#5335 -ipset=/yahoo.com.pr/gfwlist -server=/mcrouter.net/127.0.0.1#5335 -ipset=/mcrouter.net/gfwlist -server=/awseducate.com/127.0.0.1#5335 -ipset=/awseducate.com/gfwlist -server=/directvsavings.com/127.0.0.1#5335 -ipset=/directvsavings.com/gfwlist -server=/lagranepoca.com/127.0.0.1#5335 -ipset=/lagranepoca.com/gfwlist -server=/bloombergpolarlake.com/127.0.0.1#5335 -ipset=/bloombergpolarlake.com/gfwlist -server=/hpbundle.com/127.0.0.1#5335 -ipset=/hpbundle.com/gfwlist -server=/google.tl/127.0.0.1#5335 -ipset=/google.tl/gfwlist -server=/cortanaanalytics.com/127.0.0.1#5335 -ipset=/cortanaanalytics.com/gfwlist -server=/disneyjuniortreataday.com/127.0.0.1#5335 -ipset=/disneyjuniortreataday.com/gfwlist -server=/minidealer.com/127.0.0.1#5335 -ipset=/minidealer.com/gfwlist -server=/thelegendarystarfy.com/127.0.0.1#5335 -ipset=/thelegendarystarfy.com/gfwlist -server=/webex.es/127.0.0.1#5335 -ipset=/webex.es/gfwlist -server=/gogole.com/127.0.0.1#5335 -ipset=/gogole.com/gfwlist -server=/intelemeastore.com/127.0.0.1#5335 -ipset=/intelemeastore.com/gfwlist -server=/kodi.tv/127.0.0.1#5335 -ipset=/kodi.tv/gfwlist -server=/blackstonespoliceservice.com/127.0.0.1#5335 -ipset=/blackstonespoliceservice.com/gfwlist -server=/pinterest.uk/127.0.0.1#5335 -ipset=/pinterest.uk/gfwlist -server=/avsforum.com/127.0.0.1#5335 -ipset=/avsforum.com/gfwlist -server=/cnnlabs.com/127.0.0.1#5335 -ipset=/cnnlabs.com/gfwlist -server=/usercontent.dev/127.0.0.1#5335 -ipset=/usercontent.dev/gfwlist -server=/mbheadphone.com/127.0.0.1#5335 -ipset=/mbheadphone.com/gfwlist -server=/xn--gtvq61aiijy0b.xn--hxt814e/127.0.0.1#5335 -ipset=/xn--gtvq61aiijy0b.xn--hxt814e/gfwlist -server=/outbound.io/127.0.0.1#5335 -ipset=/outbound.io/gfwlist -server=/buynikechina.com/127.0.0.1#5335 -ipset=/buynikechina.com/gfwlist -server=/durex.com.my/127.0.0.1#5335 -ipset=/durex.com.my/gfwlist -server=/pearsonhighered.com/127.0.0.1#5335 -ipset=/pearsonhighered.com/gfwlist -server=/applefilmaker.com/127.0.0.1#5335 -ipset=/applefilmaker.com/gfwlist -server=/visualstudio.com/127.0.0.1#5335 -ipset=/visualstudio.com/gfwlist -server=/wofl.tv/127.0.0.1#5335 -ipset=/wofl.tv/gfwlist -server=/mediawiki.org/127.0.0.1#5335 -ipset=/mediawiki.org/gfwlist -server=/instagran.com/127.0.0.1#5335 -ipset=/instagran.com/gfwlist -server=/beatsdre-monster.com/127.0.0.1#5335 -ipset=/beatsdre-monster.com/gfwlist -server=/pocketcasts.com/127.0.0.1#5335 -ipset=/pocketcasts.com/gfwlist -server=/s-cashonmobile.com/127.0.0.1#5335 -ipset=/s-cashonmobile.com/gfwlist -server=/steamcontent.com/127.0.0.1#5335 -ipset=/steamcontent.com/gfwlist -server=/applicationinsights.net/127.0.0.1#5335 -ipset=/applicationinsights.net/gfwlist -server=/immxd.com/127.0.0.1#5335 -ipset=/immxd.com/gfwlist -server=/bmw.com.ky/127.0.0.1#5335 -ipset=/bmw.com.ky/gfwlist -server=/brew.sh/127.0.0.1#5335 -ipset=/brew.sh/gfwlist -server=/cheapbeatsbydremonster.com/127.0.0.1#5335 -ipset=/cheapbeatsbydremonster.com/gfwlist -server=/fastly.com/127.0.0.1#5335 -ipset=/fastly.com/gfwlist -server=/shields.io/127.0.0.1#5335 -ipset=/shields.io/gfwlist -server=/bmwstartupgarage.com/127.0.0.1#5335 -ipset=/bmwstartupgarage.com/gfwlist -server=/wwwfacebok.com/127.0.0.1#5335 -ipset=/wwwfacebok.com/gfwlist -server=/jwt.ms/127.0.0.1#5335 -ipset=/jwt.ms/gfwlist -server=/ebay.be/127.0.0.1#5335 -ipset=/ebay.be/gfwlist -server=/pypa.io/127.0.0.1#5335 -ipset=/pypa.io/gfwlist -server=/drebeats-singaporecheap.net/127.0.0.1#5335 -ipset=/drebeats-singaporecheap.net/gfwlist -server=/masseffect.com/127.0.0.1#5335 -ipset=/masseffect.com/gfwlist -server=/ducksear.ch/127.0.0.1#5335 -ipset=/ducksear.ch/gfwlist -server=/bmwmotorradhk.com/127.0.0.1#5335 -ipset=/bmwmotorradhk.com/gfwlist -server=/minirichmond.com/127.0.0.1#5335 -ipset=/minirichmond.com/gfwlist -server=/thomsonreutersmexico.com/127.0.0.1#5335 -ipset=/thomsonreutersmexico.com/gfwlist -server=/ieee-vics.org/127.0.0.1#5335 -ipset=/ieee-vics.org/gfwlist -server=/minilangley.com/127.0.0.1#5335 -ipset=/minilangley.com/gfwlist -server=/raponlinereview.com/127.0.0.1#5335 -ipset=/raponlinereview.com/gfwlist -server=/alibabacloud.com.my/127.0.0.1#5335 -ipset=/alibabacloud.com.my/gfwlist -server=/volvobuses.com/127.0.0.1#5335 -ipset=/volvobuses.com/gfwlist -server=/veet.be/127.0.0.1#5335 -ipset=/veet.be/gfwlist -server=/fsdn.com/127.0.0.1#5335 -ipset=/fsdn.com/gfwlist -server=/googledomains.com/127.0.0.1#5335 -ipset=/googledomains.com/gfwlist -server=/hcpdts.com/127.0.0.1#5335 -ipset=/hcpdts.com/gfwlist -server=/swisssign-group.li/127.0.0.1#5335 -ipset=/swisssign-group.li/gfwlist -server=/sovec.net/127.0.0.1#5335 -ipset=/sovec.net/gfwlist -server=/carekit.org/127.0.0.1#5335 -ipset=/carekit.org/gfwlist -server=/apple.hu/127.0.0.1#5335 -ipset=/apple.hu/gfwlist -server=/simplifycommerce.com/127.0.0.1#5335 -ipset=/simplifycommerce.com/gfwlist -server=/minisaskatoon.com/127.0.0.1#5335 -ipset=/minisaskatoon.com/gfwlist -server=/nflximg.net/127.0.0.1#5335 -ipset=/nflximg.net/gfwlist -server=/espn.hb.omtrdc.net/127.0.0.1#5335 -ipset=/espn.hb.omtrdc.net/gfwlist -server=/avn.com/127.0.0.1#5335 -ipset=/avn.com/gfwlist -server=/google.by/127.0.0.1#5335 -ipset=/google.by/gfwlist -server=/apple.ee/127.0.0.1#5335 -ipset=/apple.ee/gfwlist -server=/wasdj.com/127.0.0.1#5335 -ipset=/wasdj.com/gfwlist -server=/bmwlat.com/127.0.0.1#5335 -ipset=/bmwlat.com/gfwlist -server=/alphera-finance.in/127.0.0.1#5335 -ipset=/alphera-finance.in/gfwlist -server=/youtubemobilesupport.com/127.0.0.1#5335 -ipset=/youtubemobilesupport.com/gfwlist -server=/adobepress.ch/127.0.0.1#5335 -ipset=/adobepress.ch/gfwlist -server=/bttzyw.net/127.0.0.1#5335 -ipset=/bttzyw.net/gfwlist -server=/galaxymobile.jp/127.0.0.1#5335 -ipset=/galaxymobile.jp/gfwlist -server=/smartonesolutions.hk/127.0.0.1#5335 -ipset=/smartonesolutions.hk/gfwlist -server=/mini.dk/127.0.0.1#5335 -ipset=/mini.dk/gfwlist -server=/volvobuses.fi/127.0.0.1#5335 -ipset=/volvobuses.fi/gfwlist -server=/beats-bydreoutletsale.com/127.0.0.1#5335 -ipset=/beats-bydreoutletsale.com/gfwlist -server=/cairnspost.com.au/127.0.0.1#5335 -ipset=/cairnspost.com.au/gfwlist -server=/easy.ac/127.0.0.1#5335 -ipset=/easy.ac/gfwlist -server=/k8s.io/127.0.0.1#5335 -ipset=/k8s.io/gfwlist -server=/akamai-trials.com/127.0.0.1#5335 -ipset=/akamai-trials.com/gfwlist -server=/opengraphprotocol.org/127.0.0.1#5335 -ipset=/opengraphprotocol.org/gfwlist -server=/vilavpn.xyz/127.0.0.1#5335 -ipset=/vilavpn.xyz/gfwlist -server=/facebgook.com/127.0.0.1#5335 -ipset=/facebgook.com/gfwlist -server=/firestoneip.com/127.0.0.1#5335 -ipset=/firestoneip.com/gfwlist -server=/appleone.guide/127.0.0.1#5335 -ipset=/appleone.guide/gfwlist -server=/jetfuelapp.com/127.0.0.1#5335 -ipset=/jetfuelapp.com/gfwlist -server=/ocul.us/127.0.0.1#5335 -ipset=/ocul.us/gfwlist -server=/gsccdn.com/127.0.0.1#5335 -ipset=/gsccdn.com/gfwlist -server=/microsoftcloudsummit.com/127.0.0.1#5335 -ipset=/microsoftcloudsummit.com/gfwlist -server=/facebookexchange.net/127.0.0.1#5335 -ipset=/facebookexchange.net/gfwlist -server=/akami.com/127.0.0.1#5335 -ipset=/akami.com/gfwlist -server=/intel.ua/127.0.0.1#5335 -ipset=/intel.ua/gfwlist -server=/vmwareemeablog.com/127.0.0.1#5335 -ipset=/vmwareemeablog.com/gfwlist -server=/xn--xsq421m.com/127.0.0.1#5335 -ipset=/xn--xsq421m.com/gfwlist -server=/facebooksite.net/127.0.0.1#5335 -ipset=/facebooksite.net/gfwlist -server=/bmw-product-highlights.com/127.0.0.1#5335 -ipset=/bmw-product-highlights.com/gfwlist -server=/darkageofcamelot.com/127.0.0.1#5335 -ipset=/darkageofcamelot.com/gfwlist -server=/pixapp.net/127.0.0.1#5335 -ipset=/pixapp.net/gfwlist -server=/vfsco.hu/127.0.0.1#5335 -ipset=/vfsco.hu/gfwlist -server=/mysdn.com/127.0.0.1#5335 -ipset=/mysdn.com/gfwlist -server=/line.me/127.0.0.1#5335 -ipset=/line.me/gfwlist -server=/netflixdnstest10.com/127.0.0.1#5335 -ipset=/netflixdnstest10.com/gfwlist -server=/durex.no/127.0.0.1#5335 -ipset=/durex.no/gfwlist -server=/awsloft-stockholm.com/127.0.0.1#5335 -ipset=/awsloft-stockholm.com/gfwlist -server=/sony.cz/127.0.0.1#5335 -ipset=/sony.cz/gfwlist -server=/faecebok.com/127.0.0.1#5335 -ipset=/faecebok.com/gfwlist -server=/needforspeedredline.com/127.0.0.1#5335 -ipset=/needforspeedredline.com/gfwlist -server=/bmw.pl/127.0.0.1#5335 -ipset=/bmw.pl/gfwlist -server=/dvdstudiopro.net/127.0.0.1#5335 -ipset=/dvdstudiopro.net/gfwlist -server=/qt.io/127.0.0.1#5335 -ipset=/qt.io/gfwlist -server=/garenanow.com/127.0.0.1#5335 -ipset=/garenanow.com/gfwlist -server=/boltdns.net/127.0.0.1#5335 -ipset=/boltdns.net/gfwlist -server=/mastercard.az/127.0.0.1#5335 -ipset=/mastercard.az/gfwlist -server=/nikebetterworld.net/127.0.0.1#5335 -ipset=/nikebetterworld.net/gfwlist -server=/asahi.com/127.0.0.1#5335 -ipset=/asahi.com/gfwlist -server=/vimeostatus.com/127.0.0.1#5335 -ipset=/vimeostatus.com/gfwlist -server=/googlefinland.com/127.0.0.1#5335 -ipset=/googlefinland.com/gfwlist -server=/masterpassteststore.com/127.0.0.1#5335 -ipset=/masterpassteststore.com/gfwlist -server=/nextmgz.com/127.0.0.1#5335 -ipset=/nextmgz.com/gfwlist -server=/volvotrucks.co.zm/127.0.0.1#5335 -ipset=/volvotrucks.co.zm/gfwlist -server=/attalascom.com/127.0.0.1#5335 -ipset=/attalascom.com/gfwlist -server=/volvogroup.ru/127.0.0.1#5335 -ipset=/volvogroup.ru/gfwlist -server=/pearsonassessment.se/127.0.0.1#5335 -ipset=/pearsonassessment.se/gfwlist -server=/cybertrust.co.jp/127.0.0.1#5335 -ipset=/cybertrust.co.jp/gfwlist -server=/mini-jordan.com/127.0.0.1#5335 -ipset=/mini-jordan.com/gfwlist -server=/chimeforchange.org/127.0.0.1#5335 -ipset=/chimeforchange.org/gfwlist -server=/intelrxt.com/127.0.0.1#5335 -ipset=/intelrxt.com/gfwlist -server=/voandebele.com/127.0.0.1#5335 -ipset=/voandebele.com/gfwlist -server=/tryrating.com/127.0.0.1#5335 -ipset=/tryrating.com/gfwlist -server=/signalbar.com/127.0.0.1#5335 -ipset=/signalbar.com/gfwlist -server=/axios.com/127.0.0.1#5335 -ipset=/axios.com/gfwlist -server=/appleswift.com/127.0.0.1#5335 -ipset=/appleswift.com/gfwlist -server=/imacsources.com/127.0.0.1#5335 -ipset=/imacsources.com/gfwlist -server=/insidefilms.com/127.0.0.1#5335 -ipset=/insidefilms.com/gfwlist -server=/foxbet.com/127.0.0.1#5335 -ipset=/foxbet.com/gfwlist -server=/ebayenterprise.net/127.0.0.1#5335 -ipset=/ebayenterprise.net/gfwlist -server=/thebayuk.com/127.0.0.1#5335 -ipset=/thebayuk.com/gfwlist -server=/ebaymarketplace.net/127.0.0.1#5335 -ipset=/ebaymarketplace.net/gfwlist -server=/cheapbeatsbydremall.com/127.0.0.1#5335 -ipset=/cheapbeatsbydremall.com/gfwlist -server=/muji.com/127.0.0.1#5335 -ipset=/muji.com/gfwlist -server=/macbookair.com.es/127.0.0.1#5335 -ipset=/macbookair.com.es/gfwlist -server=/iphone5.com/127.0.0.1#5335 -ipset=/iphone5.com/gfwlist -server=/rolsociety.org/127.0.0.1#5335 -ipset=/rolsociety.org/gfwlist -server=/akaint.net/127.0.0.1#5335 -ipset=/akaint.net/gfwlist -server=/acm.org/127.0.0.1#5335 -ipset=/acm.org/gfwlist -server=/whyiwantciscotelepresence.com/127.0.0.1#5335 -ipset=/whyiwantciscotelepresence.com/gfwlist -server=/apkpure.com/127.0.0.1#5335 -ipset=/apkpure.com/gfwlist -server=/fotolja.com/127.0.0.1#5335 -ipset=/fotolja.com/gfwlist -server=/nintendo-europe-sales.com/127.0.0.1#5335 -ipset=/nintendo-europe-sales.com/gfwlist -server=/kindleoasis.jp/127.0.0.1#5335 -ipset=/kindleoasis.jp/gfwlist -server=/durex.es/127.0.0.1#5335 -ipset=/durex.es/gfwlist -server=/nikeshoesinc.com/127.0.0.1#5335 -ipset=/nikeshoesinc.com/gfwlist -server=/eprc.com.hk/127.0.0.1#5335 -ipset=/eprc.com.hk/gfwlist -server=/youtube-nocookie.com/127.0.0.1#5335 -ipset=/youtube-nocookie.com/gfwlist -server=/bastillepost.com/127.0.0.1#5335 -ipset=/bastillepost.com/gfwlist -server=/paypal-login.com/127.0.0.1#5335 -ipset=/paypal-login.com/gfwlist -server=/macbook.wang/127.0.0.1#5335 -ipset=/macbook.wang/gfwlist -server=/facebook.tv/127.0.0.1#5335 -ipset=/facebook.tv/gfwlist -server=/volvopenta.es/127.0.0.1#5335 -ipset=/volvopenta.es/gfwlist -server=/foxsports.pe/127.0.0.1#5335 -ipset=/foxsports.pe/gfwlist -server=/msft.info/127.0.0.1#5335 -ipset=/msft.info/gfwlist -server=/bmw-motorrad.co/127.0.0.1#5335 -ipset=/bmw-motorrad.co/gfwlist -server=/mini.com.pe/127.0.0.1#5335 -ipset=/mini.com.pe/gfwlist -server=/codeish.io/127.0.0.1#5335 -ipset=/codeish.io/gfwlist -server=/hpcatridge.com/127.0.0.1#5335 -ipset=/hpcatridge.com/gfwlist -server=/bmw-connecteddrive.ru/127.0.0.1#5335 -ipset=/bmw-connecteddrive.ru/gfwlist -server=/starbuckssummergame.com/127.0.0.1#5335 -ipset=/starbuckssummergame.com/gfwlist -server=/womenwill.id/127.0.0.1#5335 -ipset=/womenwill.id/gfwlist -server=/experiencebillmelater.com/127.0.0.1#5335 -ipset=/experiencebillmelater.com/gfwlist -server=/avpanda.cc/127.0.0.1#5335 -ipset=/avpanda.cc/gfwlist -server=/oxfordwesternmusic.com/127.0.0.1#5335 -ipset=/oxfordwesternmusic.com/gfwlist -server=/disney.asia/127.0.0.1#5335 -ipset=/disney.asia/gfwlist -server=/erabaru.net/127.0.0.1#5335 -ipset=/erabaru.net/gfwlist -server=/readthedocs.io/127.0.0.1#5335 -ipset=/readthedocs.io/gfwlist -server=/zoho.com.au/127.0.0.1#5335 -ipset=/zoho.com.au/gfwlist -server=/sonykigyo.jp/127.0.0.1#5335 -ipset=/sonykigyo.jp/gfwlist -server=/orlandohurricane.com/127.0.0.1#5335 -ipset=/orlandohurricane.com/gfwlist -server=/bmw-museum.com/127.0.0.1#5335 -ipset=/bmw-museum.com/gfwlist -server=/qualcomm.sc.omtrdc.net/127.0.0.1#5335 -ipset=/qualcomm.sc.omtrdc.net/gfwlist -server=/volvobuses.pl/127.0.0.1#5335 -ipset=/volvobuses.pl/gfwlist -server=/knovel.com/127.0.0.1#5335 -ipset=/knovel.com/gfwlist -server=/intel.uz/127.0.0.1#5335 -ipset=/intel.uz/gfwlist -server=/vmwlabconnect.com/127.0.0.1#5335 -ipset=/vmwlabconnect.com/gfwlist -server=/edcity.hk/127.0.0.1#5335 -ipset=/edcity.hk/gfwlist -server=/5278.cc/127.0.0.1#5335 -ipset=/5278.cc/gfwlist -server=/t21ipau.nikkei.co.jp/127.0.0.1#5335 -ipset=/t21ipau.nikkei.co.jp/gfwlist -server=/youtubecisco.com/127.0.0.1#5335 -ipset=/youtubecisco.com/gfwlist -server=/ebay-cz.com/127.0.0.1#5335 -ipset=/ebay-cz.com/gfwlist -server=/mariadb.org/127.0.0.1#5335 -ipset=/mariadb.org/gfwlist -server=/acmvalidationsaws.com/127.0.0.1#5335 -ipset=/acmvalidationsaws.com/gfwlist -server=/ituneslatino.com/127.0.0.1#5335 -ipset=/ituneslatino.com/gfwlist -server=/beatsbydreheadphones-nz.com/127.0.0.1#5335 -ipset=/beatsbydreheadphones-nz.com/gfwlist -server=/metart.com/127.0.0.1#5335 -ipset=/metart.com/gfwlist -server=/httpsfacebook.com/127.0.0.1#5335 -ipset=/httpsfacebook.com/gfwlist -server=/ssrpass.pw/127.0.0.1#5335 -ipset=/ssrpass.pw/gfwlist -server=/scala-sbt.org/127.0.0.1#5335 -ipset=/scala-sbt.org/gfwlist -server=/appleiphone.net/127.0.0.1#5335 -ipset=/appleiphone.net/gfwlist -server=/monitrix.net/127.0.0.1#5335 -ipset=/monitrix.net/gfwlist -server=/patenttruth.org/127.0.0.1#5335 -ipset=/patenttruth.org/gfwlist -server=/airwick.co.uk/127.0.0.1#5335 -ipset=/airwick.co.uk/gfwlist -server=/beatsbysdrbre.com/127.0.0.1#5335 -ipset=/beatsbysdrbre.com/gfwlist -server=/fblitho.com/127.0.0.1#5335 -ipset=/fblitho.com/gfwlist -server=/iphonehangzhou.com/127.0.0.1#5335 -ipset=/iphonehangzhou.com/gfwlist -server=/youtube.com.ni/127.0.0.1#5335 -ipset=/youtube.com.ni/gfwlist -server=/alphabet.com.mx/127.0.0.1#5335 -ipset=/alphabet.com.mx/gfwlist -server=/vfsco.ch/127.0.0.1#5335 -ipset=/vfsco.ch/gfwlist -server=/beatsbydreonlines-uk.com/127.0.0.1#5335 -ipset=/beatsbydreonlines-uk.com/gfwlist -server=/startpath.com/127.0.0.1#5335 -ipset=/startpath.com/gfwlist -server=/yourfantasybeginsnow.com/127.0.0.1#5335 -ipset=/yourfantasybeginsnow.com/gfwlist -server=/monsterbeats-cheap.com/127.0.0.1#5335 -ipset=/monsterbeats-cheap.com/gfwlist -server=/smartcommunitiescoalition.org/127.0.0.1#5335 -ipset=/smartcommunitiescoalition.org/gfwlist -server=/mickey.tv/127.0.0.1#5335 -ipset=/mickey.tv/gfwlist -server=/91.51rmc.com/127.0.0.1#5335 -ipset=/91.51rmc.com/gfwlist -server=/pinterest.info/127.0.0.1#5335 -ipset=/pinterest.info/gfwlist -server=/appleid.hk/127.0.0.1#5335 -ipset=/appleid.hk/gfwlist -server=/volvotrucks.se/127.0.0.1#5335 -ipset=/volvotrucks.se/gfwlist -server=/facebooksecurity.net/127.0.0.1#5335 -ipset=/facebooksecurity.net/gfwlist -server=/mini.mu/127.0.0.1#5335 -ipset=/mini.mu/gfwlist -server=/infowars.com/127.0.0.1#5335 -ipset=/infowars.com/gfwlist -server=/lyzsxx.com/127.0.0.1#5335 -ipset=/lyzsxx.com/gfwlist -server=/bsw.jp/127.0.0.1#5335 -ipset=/bsw.jp/gfwlist -server=/hktpremier.com/127.0.0.1#5335 -ipset=/hktpremier.com/gfwlist -server=/biowarestore.com/127.0.0.1#5335 -ipset=/biowarestore.com/gfwlist -server=/gitlab.net/127.0.0.1#5335 -ipset=/gitlab.net/gfwlist -server=/jav.guru/127.0.0.1#5335 -ipset=/jav.guru/gfwlist -server=/oxfordscholarship.com/127.0.0.1#5335 -ipset=/oxfordscholarship.com/gfwlist -server=/inoreader.com/127.0.0.1#5335 -ipset=/inoreader.com/gfwlist -server=/strepsils.com.ph/127.0.0.1#5335 -ipset=/strepsils.com.ph/gfwlist -server=/minneapolisbmw.net/127.0.0.1#5335 -ipset=/minneapolisbmw.net/gfwlist -server=/dandalinvoa.com/127.0.0.1#5335 -ipset=/dandalinvoa.com/gfwlist -server=/nintendo.de/127.0.0.1#5335 -ipset=/nintendo.de/gfwlist -server=/spotifyjobs.com/127.0.0.1#5335 -ipset=/spotifyjobs.com/gfwlist -server=/metacloud.com/127.0.0.1#5335 -ipset=/metacloud.com/gfwlist -server=/canon.kz/127.0.0.1#5335 -ipset=/canon.kz/gfwlist -server=/facebooklogs.com/127.0.0.1#5335 -ipset=/facebooklogs.com/gfwlist -server=/uun82.com/127.0.0.1#5335 -ipset=/uun82.com/gfwlist -server=/audio-ak-spotify-com.akamaized.net/127.0.0.1#5335 -ipset=/audio-ak-spotify-com.akamaized.net/gfwlist -server=/youtube.ng/127.0.0.1#5335 -ipset=/youtube.ng/gfwlist -server=/xn--xsq605n.com/127.0.0.1#5335 -ipset=/xn--xsq605n.com/gfwlist -server=/microsoft.rs/127.0.0.1#5335 -ipset=/microsoft.rs/gfwlist -server=/beatsboxingdayuksale.com/127.0.0.1#5335 -ipset=/beatsboxingdayuksale.com/gfwlist -server=/bmwgroupna.com/127.0.0.1#5335 -ipset=/bmwgroupna.com/gfwlist -server=/beatsbydrecustomwireless.com/127.0.0.1#5335 -ipset=/beatsbydrecustomwireless.com/gfwlist -server=/media-imdb.com/127.0.0.1#5335 -ipset=/media-imdb.com/gfwlist -server=/vmwhorizonair.com/127.0.0.1#5335 -ipset=/vmwhorizonair.com/gfwlist -server=/akamaisingapore.net/127.0.0.1#5335 -ipset=/akamaisingapore.net/gfwlist -server=/wireless.radio/127.0.0.1#5335 -ipset=/wireless.radio/gfwlist -server=/youtube.ni/127.0.0.1#5335 -ipset=/youtube.ni/gfwlist -server=/nyti.ms/127.0.0.1#5335 -ipset=/nyti.ms/gfwlist -server=/renchead.com/127.0.0.1#5335 -ipset=/renchead.com/gfwlist -server=/abc-studios.com/127.0.0.1#5335 -ipset=/abc-studios.com/gfwlist -server=/cheapbeatsbydreoutlet.com/127.0.0.1#5335 -ipset=/cheapbeatsbydreoutlet.com/gfwlist -server=/nvidia.jp/127.0.0.1#5335 -ipset=/nvidia.jp/gfwlist -server=/nvidia.com.pl/127.0.0.1#5335 -ipset=/nvidia.com.pl/gfwlist -server=/travelex.com.au/127.0.0.1#5335 -ipset=/travelex.com.au/gfwlist -server=/gnews.org/127.0.0.1#5335 -ipset=/gnews.org/gfwlist -server=/visamiddleeast.com/127.0.0.1#5335 -ipset=/visamiddleeast.com/gfwlist -server=/akamci.com/127.0.0.1#5335 -ipset=/akamci.com/gfwlist -server=/visaluxuryhotelcollection.com.mx/127.0.0.1#5335 -ipset=/visaluxuryhotelcollection.com.mx/gfwlist -server=/vanish.com.br/127.0.0.1#5335 -ipset=/vanish.com.br/gfwlist -server=/imovie.eu/127.0.0.1#5335 -ipset=/imovie.eu/gfwlist -server=/mgo.com/127.0.0.1#5335 -ipset=/mgo.com/gfwlist -server=/naver.jp/127.0.0.1#5335 -ipset=/naver.jp/gfwlist -server=/haveibeenpwned.com/127.0.0.1#5335 -ipset=/haveibeenpwned.com/gfwlist -server=/dawngate.com/127.0.0.1#5335 -ipset=/dawngate.com/gfwlist -server=/icloud.de/127.0.0.1#5335 -ipset=/icloud.de/gfwlist -server=/mini.be/127.0.0.1#5335 -ipset=/mini.be/gfwlist -server=/dawngatechronicles.com/127.0.0.1#5335 -ipset=/dawngatechronicles.com/gfwlist -server=/sunbingo.co.uk/127.0.0.1#5335 -ipset=/sunbingo.co.uk/gfwlist -server=/ebaybank.com/127.0.0.1#5335 -ipset=/ebaybank.com/gfwlist -server=/ms365surfaceoffer.com/127.0.0.1#5335 -ipset=/ms365surfaceoffer.com/gfwlist -server=/azureedge.net/127.0.0.1#5335 -ipset=/azureedge.net/gfwlist -server=/foxbusiness.tv/127.0.0.1#5335 -ipset=/foxbusiness.tv/gfwlist -server=/gettyimages.co.nz/127.0.0.1#5335 -ipset=/gettyimages.co.nz/gfwlist -server=/cash.app/127.0.0.1#5335 -ipset=/cash.app/gfwlist -server=/applewatchedition.com/127.0.0.1#5335 -ipset=/applewatchedition.com/gfwlist -server=/premobay.com/127.0.0.1#5335 -ipset=/premobay.com/gfwlist -server=/dssott.com/127.0.0.1#5335 -ipset=/dssott.com/gfwlist -server=/applelink.com/127.0.0.1#5335 -ipset=/applelink.com/gfwlist -server=/youtube.co.ug/127.0.0.1#5335 -ipset=/youtube.co.ug/gfwlist -server=/youtube.pt/127.0.0.1#5335 -ipset=/youtube.pt/gfwlist -server=/ipodcleaner.com/127.0.0.1#5335 -ipset=/ipodcleaner.com/gfwlist -server=/bmwmontreal.ca/127.0.0.1#5335 -ipset=/bmwmontreal.ca/gfwlist -server=/facebof.com/127.0.0.1#5335 -ipset=/facebof.com/gfwlist -server=/dollarphotoclub.com/127.0.0.1#5335 -ipset=/dollarphotoclub.com/gfwlist -server=/jenkins.io/127.0.0.1#5335 -ipset=/jenkins.io/gfwlist -server=/activelearnprimary.com.au/127.0.0.1#5335 -ipset=/activelearnprimary.com.au/gfwlist -server=/volvotruckcenter.kz/127.0.0.1#5335 -ipset=/volvotruckcenter.kz/gfwlist -server=/bestbuybusinessadvantageaccount.com/127.0.0.1#5335 -ipset=/bestbuybusinessadvantageaccount.com/gfwlist -server=/avmoo.cyou/127.0.0.1#5335 -ipset=/avmoo.cyou/gfwlist -server=/foampositeshoes.com/127.0.0.1#5335 -ipset=/foampositeshoes.com/gfwlist -server=/ilecture.co.nz/127.0.0.1#5335 -ipset=/ilecture.co.nz/gfwlist -server=/visacards.com/127.0.0.1#5335 -ipset=/visacards.com/gfwlist -server=/nab.demdex.net/127.0.0.1#5335 -ipset=/nab.demdex.net/gfwlist -server=/volvotrucks.pe/127.0.0.1#5335 -ipset=/volvotrucks.pe/gfwlist -server=/wheelworks.net/127.0.0.1#5335 -ipset=/wheelworks.net/gfwlist -server=/office.com/127.0.0.1#5335 -ipset=/office.com/gfwlist -server=/pinterestmail.com/127.0.0.1#5335 -ipset=/pinterestmail.com/gfwlist -server=/proxyrarbg.org/127.0.0.1#5335 -ipset=/proxyrarbg.org/gfwlist -server=/boxofficemojo.com/127.0.0.1#5335 -ipset=/boxofficemojo.com/gfwlist -server=/bodyandsoul.com.au/127.0.0.1#5335 -ipset=/bodyandsoul.com.au/gfwlist -server=/veet.no/127.0.0.1#5335 -ipset=/veet.no/gfwlist -server=/m2m.com/127.0.0.1#5335 -ipset=/m2m.com/gfwlist -server=/adidas.at/127.0.0.1#5335 -ipset=/adidas.at/gfwlist -server=/saleblackfridaydrebeats.com/127.0.0.1#5335 -ipset=/saleblackfridaydrebeats.com/gfwlist -server=/youtube.mn/127.0.0.1#5335 -ipset=/youtube.mn/gfwlist -server=/lightbridge.com/127.0.0.1#5335 -ipset=/lightbridge.com/gfwlist -server=/fury.co/127.0.0.1#5335 -ipset=/fury.co/gfwlist -server=/icloud-isupport.com/127.0.0.1#5335 -ipset=/icloud-isupport.com/gfwlist -server=/south-plus.net/127.0.0.1#5335 -ipset=/south-plus.net/gfwlist -server=/foxsports.com.pe/127.0.0.1#5335 -ipset=/foxsports.com.pe/gfwlist -server=/mydirtyhobby.com/127.0.0.1#5335 -ipset=/mydirtyhobby.com/gfwlist -server=/visa.com.py/127.0.0.1#5335 -ipset=/visa.com.py/gfwlist -server=/internetexplorer.co/127.0.0.1#5335 -ipset=/internetexplorer.co/gfwlist -server=/ifontcloud.com/127.0.0.1#5335 -ipset=/ifontcloud.com/gfwlist -server=/dettolsitishield.co.in/127.0.0.1#5335 -ipset=/dettolsitishield.co.in/gfwlist -server=/hightopnikes.com/127.0.0.1#5335 -ipset=/hightopnikes.com/gfwlist -server=/ebay-delivery.com/127.0.0.1#5335 -ipset=/ebay-delivery.com/gfwlist -server=/bmw-motorrad.com.py/127.0.0.1#5335 -ipset=/bmw-motorrad.com.py/gfwlist -server=/hulu.tv/127.0.0.1#5335 -ipset=/hulu.tv/gfwlist -server=/archiveofourown.com/127.0.0.1#5335 -ipset=/archiveofourown.com/gfwlist -server=/hellokittybeats.com/127.0.0.1#5335 -ipset=/hellokittybeats.com/gfwlist -server=/apple.dk/127.0.0.1#5335 -ipset=/apple.dk/gfwlist -server=/kidsnikeshoes.com/127.0.0.1#5335 -ipset=/kidsnikeshoes.com/gfwlist -server=/macports.org/127.0.0.1#5335 -ipset=/macports.org/gfwlist -server=/citizenlab.ca/127.0.0.1#5335 -ipset=/citizenlab.ca/gfwlist -server=/bby.com/127.0.0.1#5335 -ipset=/bby.com/gfwlist -server=/alpherafinancialservices.in/127.0.0.1#5335 -ipset=/alpherafinancialservices.in/gfwlist -server=/thomsonreuters.cn/127.0.0.1#5335 -ipset=/thomsonreuters.cn/gfwlist -server=/youtube.sv/127.0.0.1#5335 -ipset=/youtube.sv/gfwlist -server=/venmo.info/127.0.0.1#5335 -ipset=/venmo.info/gfwlist -server=/mini.in/127.0.0.1#5335 -ipset=/mini.in/gfwlist -server=/youtube.pe/127.0.0.1#5335 -ipset=/youtube.pe/gfwlist -server=/duckduckgo.ca/127.0.0.1#5335 -ipset=/duckduckgo.ca/gfwlist -server=/xvideos.com/127.0.0.1#5335 -ipset=/xvideos.com/gfwlist -server=/youtube.bg/127.0.0.1#5335 -ipset=/youtube.bg/gfwlist -server=/getadblock.com/127.0.0.1#5335 -ipset=/getadblock.com/gfwlist -server=/beatsbydrenorge1.net/127.0.0.1#5335 -ipset=/beatsbydrenorge1.net/gfwlist -server=/strepsils.si/127.0.0.1#5335 -ipset=/strepsils.si/gfwlist -server=/inmediahk.net/127.0.0.1#5335 -ipset=/inmediahk.net/gfwlist -server=/microsoft.ch/127.0.0.1#5335 -ipset=/microsoft.ch/gfwlist -server=/winudf.com/127.0.0.1#5335 -ipset=/winudf.com/gfwlist -server=/paypal-center.org/127.0.0.1#5335 -ipset=/paypal-center.org/gfwlist -server=/foxinc.com/127.0.0.1#5335 -ipset=/foxinc.com/gfwlist -server=/familymart.com.my/127.0.0.1#5335 -ipset=/familymart.com.my/gfwlist -server=/githubpreview.dev/127.0.0.1#5335 -ipset=/githubpreview.dev/gfwlist -server=/bmw-motorrad.pt/127.0.0.1#5335 -ipset=/bmw-motorrad.pt/gfwlist -server=/nikefind.com/127.0.0.1#5335 -ipset=/nikefind.com/gfwlist -server=/nintendoswitch.net/127.0.0.1#5335 -ipset=/nintendoswitch.net/gfwlist -server=/crowdtangle.com/127.0.0.1#5335 -ipset=/crowdtangle.com/gfwlist -server=/baselinestudy.com/127.0.0.1#5335 -ipset=/baselinestudy.com/gfwlist -server=/dependabot.com/127.0.0.1#5335 -ipset=/dependabot.com/gfwlist -server=/braventures.com/127.0.0.1#5335 -ipset=/braventures.com/gfwlist -server=/disney.ru/127.0.0.1#5335 -ipset=/disney.ru/gfwlist -server=/airsupportapp.com/127.0.0.1#5335 -ipset=/airsupportapp.com/gfwlist -server=/akatns.net/127.0.0.1#5335 -ipset=/akatns.net/gfwlist -server=/ipfs.io/127.0.0.1#5335 -ipset=/ipfs.io/gfwlist -server=/slack-redir.net/127.0.0.1#5335 -ipset=/slack-redir.net/gfwlist -server=/findmyipad.com/127.0.0.1#5335 -ipset=/findmyipad.com/gfwlist -server=/adobeccstatic.com/127.0.0.1#5335 -ipset=/adobeccstatic.com/gfwlist -server=/ipod.co.za/127.0.0.1#5335 -ipset=/ipod.co.za/gfwlist -server=/zeenews.com/127.0.0.1#5335 -ipset=/zeenews.com/gfwlist -server=/facebookcanadianelectionintegrityinitiative.com/127.0.0.1#5335 -ipset=/facebookcanadianelectionintegrityinitiative.com/gfwlist -server=/dengeamerika.com/127.0.0.1#5335 -ipset=/dengeamerika.com/gfwlist -server=/macosxlion.com/127.0.0.1#5335 -ipset=/macosxlion.com/gfwlist -server=/dartpad.dev/127.0.0.1#5335 -ipset=/dartpad.dev/gfwlist -server=/applewatchsport.com/127.0.0.1#5335 -ipset=/applewatchsport.com/gfwlist -server=/google.com.np/127.0.0.1#5335 -ipset=/google.com.np/gfwlist -server=/tube8.com/127.0.0.1#5335 -ipset=/tube8.com/gfwlist -server=/airwick.sk/127.0.0.1#5335 -ipset=/airwick.sk/gfwlist -server=/apple.be/127.0.0.1#5335 -ipset=/apple.be/gfwlist -server=/clco.cc/127.0.0.1#5335 -ipset=/clco.cc/gfwlist -server=/intel.ba/127.0.0.1#5335 -ipset=/intel.ba/gfwlist -server=/canon.nl/127.0.0.1#5335 -ipset=/canon.nl/gfwlist -server=/duckduckgo.com.mx/127.0.0.1#5335 -ipset=/duckduckgo.com.mx/gfwlist -server=/blogspot.com.by/127.0.0.1#5335 -ipset=/blogspot.com.by/gfwlist -server=/tesla-cdn.thron.com/127.0.0.1#5335 -ipset=/tesla-cdn.thron.com/gfwlist -server=/mastercard.qa/127.0.0.1#5335 -ipset=/mastercard.qa/gfwlist -server=/mythicentertainment.com/127.0.0.1#5335 -ipset=/mythicentertainment.com/gfwlist -server=/braintreegateway.com/127.0.0.1#5335 -ipset=/braintreegateway.com/gfwlist -server=/pearsoncmg.com/127.0.0.1#5335 -ipset=/pearsoncmg.com/gfwlist -server=/facebooklive.com/127.0.0.1#5335 -ipset=/facebooklive.com/gfwlist -server=/llnw-trials.com/127.0.0.1#5335 -ipset=/llnw-trials.com/gfwlist -server=/amdfanstore.com/127.0.0.1#5335 -ipset=/amdfanstore.com/gfwlist -server=/beatsbydressolo.com/127.0.0.1#5335 -ipset=/beatsbydressolo.com/gfwlist -server=/rarbgaccess.org/127.0.0.1#5335 -ipset=/rarbgaccess.org/gfwlist -server=/underlords.com/127.0.0.1#5335 -ipset=/underlords.com/gfwlist -server=/drebeatscanada.com/127.0.0.1#5335 -ipset=/drebeatscanada.com/gfwlist -server=/nflximg.com/127.0.0.1#5335 -ipset=/nflximg.com/gfwlist -server=/wholesalediscountpurses.com/127.0.0.1#5335 -ipset=/wholesalediscountpurses.com/gfwlist -server=/beatsdre.net/127.0.0.1#5335 -ipset=/beatsdre.net/gfwlist -server=/debian.org/127.0.0.1#5335 -ipset=/debian.org/gfwlist -server=/revenue-performance-management.com/127.0.0.1#5335 -ipset=/revenue-performance-management.com/gfwlist -server=/cashpassport.net/127.0.0.1#5335 -ipset=/cashpassport.net/gfwlist -server=/india.com/127.0.0.1#5335 -ipset=/india.com/gfwlist -server=/cnnmoney.com/127.0.0.1#5335 -ipset=/cnnmoney.com/gfwlist -server=/page3.com/127.0.0.1#5335 -ipset=/page3.com/gfwlist -server=/ntdtv.kr/127.0.0.1#5335 -ipset=/ntdtv.kr/gfwlist -server=/bmwgroupdirect.com/127.0.0.1#5335 -ipset=/bmwgroupdirect.com/gfwlist -server=/movefreeoffers.com/127.0.0.1#5335 -ipset=/movefreeoffers.com/gfwlist -server=/mini.com.pl/127.0.0.1#5335 -ipset=/mini.com.pl/gfwlist -server=/pearsonclinical.ca/127.0.0.1#5335 -ipset=/pearsonclinical.ca/gfwlist -server=/miniso.by/127.0.0.1#5335 -ipset=/miniso.by/gfwlist -server=/google.fr/127.0.0.1#5335 -ipset=/google.fr/gfwlist -server=/foxnewschannel.com/127.0.0.1#5335 -ipset=/foxnewschannel.com/gfwlist -server=/beatsbydres-shop.com/127.0.0.1#5335 -ipset=/beatsbydres-shop.com/gfwlist -server=/youtube.it/127.0.0.1#5335 -ipset=/youtube.it/gfwlist -server=/pokemon.com/127.0.0.1#5335 -ipset=/pokemon.com/gfwlist -server=/alphabet.pl/127.0.0.1#5335 -ipset=/alphabet.pl/gfwlist -server=/videoindexer.ai/127.0.0.1#5335 -ipset=/videoindexer.ai/gfwlist -server=/wmflabs.org/127.0.0.1#5335 -ipset=/wmflabs.org/gfwlist -server=/widevine.com/127.0.0.1#5335 -ipset=/widevine.com/gfwlist -server=/alteraforums.com/127.0.0.1#5335 -ipset=/alteraforums.com/gfwlist -server=/realestate.com.au/127.0.0.1#5335 -ipset=/realestate.com.au/gfwlist -server=/imgix.com/127.0.0.1#5335 -ipset=/imgix.com/gfwlist -server=/mini-connected.se/127.0.0.1#5335 -ipset=/mini-connected.se/gfwlist -server=/beatbydreheadphonesonsale.com/127.0.0.1#5335 -ipset=/beatbydreheadphonesonsale.com/gfwlist -server=/radeon.com/127.0.0.1#5335 -ipset=/radeon.com/gfwlist -server=/hplaptopbattery.com/127.0.0.1#5335 -ipset=/hplaptopbattery.com/gfwlist -server=/foxsports.uy/127.0.0.1#5335 -ipset=/foxsports.uy/gfwlist -server=/google.fm/127.0.0.1#5335 -ipset=/google.fm/gfwlist -server=/ipod.com.tw/127.0.0.1#5335 -ipset=/ipod.com.tw/gfwlist -server=/zaobao.sg/127.0.0.1#5335 -ipset=/zaobao.sg/gfwlist -server=/xbox360.eu/127.0.0.1#5335 -ipset=/xbox360.eu/gfwlist -server=/zeetv.com/127.0.0.1#5335 -ipset=/zeetv.com/gfwlist -server=/askubuntu.com/127.0.0.1#5335 -ipset=/askubuntu.com/gfwlist -server=/myfonts.net/127.0.0.1#5335 -ipset=/myfonts.net/gfwlist -server=/krux.com/127.0.0.1#5335 -ipset=/krux.com/gfwlist -server=/github.community/127.0.0.1#5335 -ipset=/github.community/gfwlist -server=/cheapbeats365.com/127.0.0.1#5335 -ipset=/cheapbeats365.com/gfwlist -server=/intel.hu/127.0.0.1#5335 -ipset=/intel.hu/gfwlist -server=/directvcincinnatioh.com/127.0.0.1#5335 -ipset=/directvcincinnatioh.com/gfwlist -server=/gputechconf.co.kr/127.0.0.1#5335 -ipset=/gputechconf.co.kr/gfwlist -server=/svp-team.com/127.0.0.1#5335 -ipset=/svp-team.com/gfwlist -server=/xn--6eup7j.net/127.0.0.1#5335 -ipset=/xn--6eup7j.net/gfwlist -server=/directvcrossvilletn.com/127.0.0.1#5335 -ipset=/directvcrossvilletn.com/gfwlist -server=/wsjwine.com/127.0.0.1#5335 -ipset=/wsjwine.com/gfwlist -server=/msft.net/127.0.0.1#5335 -ipset=/msft.net/gfwlist -server=/beats1.tv/127.0.0.1#5335 -ipset=/beats1.tv/gfwlist -server=/packer.io/127.0.0.1#5335 -ipset=/packer.io/gfwlist -server=/apple-pay.wang/127.0.0.1#5335 -ipset=/apple-pay.wang/gfwlist -server=/bethsoft.com/127.0.0.1#5335 -ipset=/bethsoft.com/gfwlist -server=/atttvnow.com/127.0.0.1#5335 -ipset=/atttvnow.com/gfwlist -server=/milofetch.com/127.0.0.1#5335 -ipset=/milofetch.com/gfwlist -server=/microsoftgamestack.com/127.0.0.1#5335 -ipset=/microsoftgamestack.com/gfwlist -server=/airport.eu/127.0.0.1#5335 -ipset=/airport.eu/gfwlist -server=/alpherafs.in/127.0.0.1#5335 -ipset=/alpherafs.in/gfwlist -server=/travelex.it/127.0.0.1#5335 -ipset=/travelex.it/gfwlist -server=/nuget.org/127.0.0.1#5335 -ipset=/nuget.org/gfwlist -server=/asproexapi.com/127.0.0.1#5335 -ipset=/asproexapi.com/gfwlist -server=/idvd.eu/127.0.0.1#5335 -ipset=/idvd.eu/gfwlist -server=/garena.co.th/127.0.0.1#5335 -ipset=/garena.co.th/gfwlist -server=/scholar.google.dk/127.0.0.1#5335 -ipset=/scholar.google.dk/gfwlist -server=/isca-speech.org/127.0.0.1#5335 -ipset=/isca-speech.org/gfwlist -server=/icloud.fr/127.0.0.1#5335 -ipset=/icloud.fr/gfwlist -server=/intel.ly/127.0.0.1#5335 -ipset=/intel.ly/gfwlist -server=/ohyeah1080.com/127.0.0.1#5335 -ipset=/ohyeah1080.com/gfwlist -server=/businessinsider.de/127.0.0.1#5335 -ipset=/businessinsider.de/gfwlist -server=/veet.us/127.0.0.1#5335 -ipset=/veet.us/gfwlist -server=/finish.si/127.0.0.1#5335 -ipset=/finish.si/gfwlist -server=/beatsheadphonestudio.com/127.0.0.1#5335 -ipset=/beatsheadphonestudio.com/gfwlist -server=/yarnpkg.com/127.0.0.1#5335 -ipset=/yarnpkg.com/gfwlist -server=/ntdtv.com.tw/127.0.0.1#5335 -ipset=/ntdtv.com.tw/gfwlist -server=/adidas.co.in/127.0.0.1#5335 -ipset=/adidas.co.in/gfwlist -server=/aka-ai.net/127.0.0.1#5335 -ipset=/aka-ai.net/gfwlist -server=/wmt.co/127.0.0.1#5335 -ipset=/wmt.co/gfwlist -server=/sky.com/127.0.0.1#5335 -ipset=/sky.com/gfwlist -server=/facebook.org/127.0.0.1#5335 -ipset=/facebook.org/gfwlist -server=/attic.io/127.0.0.1#5335 -ipset=/attic.io/gfwlist -server=/drmario-world.com/127.0.0.1#5335 -ipset=/drmario-world.com/gfwlist -server=/beatsbydrdrestore.com/127.0.0.1#5335 -ipset=/beatsbydrdrestore.com/gfwlist -server=/insider-intelligence.com/127.0.0.1#5335 -ipset=/insider-intelligence.com/gfwlist -server=/gclubs.com/127.0.0.1#5335 -ipset=/gclubs.com/gfwlist -server=/dctbeatsbydre.com/127.0.0.1#5335 -ipset=/dctbeatsbydre.com/gfwlist -server=/shopify.com/127.0.0.1#5335 -ipset=/shopify.com/gfwlist -server=/kilmeadeandfriends.com/127.0.0.1#5335 -ipset=/kilmeadeandfriends.com/gfwlist -server=/zndsk.com/127.0.0.1#5335 -ipset=/zndsk.com/gfwlist -server=/nikenews.com/127.0.0.1#5335 -ipset=/nikenews.com/gfwlist -server=/disney.com.hk/127.0.0.1#5335 -ipset=/disney.com.hk/gfwlist -server=/onenote.com/127.0.0.1#5335 -ipset=/onenote.com/gfwlist -server=/nurofen.ro/127.0.0.1#5335 -ipset=/nurofen.ro/gfwlist -server=/bmwmass.com/127.0.0.1#5335 -ipset=/bmwmass.com/gfwlist -server=/mini.ch/127.0.0.1#5335 -ipset=/mini.ch/gfwlist -server=/facebookpokerchips.info/127.0.0.1#5335 -ipset=/facebookpokerchips.info/gfwlist -server=/researchkit.tv/127.0.0.1#5335 -ipset=/researchkit.tv/gfwlist -server=/facebookstudios.org/127.0.0.1#5335 -ipset=/facebookstudios.org/gfwlist -server=/zeplin.io/127.0.0.1#5335 -ipset=/zeplin.io/gfwlist -server=/buyitnow.net/127.0.0.1#5335 -ipset=/buyitnow.net/gfwlist -server=/blogspot.nl/127.0.0.1#5335 -ipset=/blogspot.nl/gfwlist -server=/quicktime.tv/127.0.0.1#5335 -ipset=/quicktime.tv/gfwlist -server=/aesworkshops.com/127.0.0.1#5335 -ipset=/aesworkshops.com/gfwlist -server=/beeg.com/127.0.0.1#5335 -ipset=/beeg.com/gfwlist -server=/macbookair.co.uk/127.0.0.1#5335 -ipset=/macbookair.co.uk/gfwlist -server=/bmw-world.net/127.0.0.1#5335 -ipset=/bmw-world.net/gfwlist -server=/mini-stjohns.com/127.0.0.1#5335 -ipset=/mini-stjohns.com/gfwlist -server=/dengiamerika.com/127.0.0.1#5335 -ipset=/dengiamerika.com/gfwlist -server=/attproxy.com/127.0.0.1#5335 -ipset=/attproxy.com/gfwlist -server=/hayabusa.dev/127.0.0.1#5335 -ipset=/hayabusa.dev/gfwlist -server=/miniso.my/127.0.0.1#5335 -ipset=/miniso.my/gfwlist -server=/yahoo-news.com.hk/127.0.0.1#5335 -ipset=/yahoo-news.com.hk/gfwlist -server=/pearsonassessment.be/127.0.0.1#5335 -ipset=/pearsonassessment.be/gfwlist -server=/v2ex.com/127.0.0.1#5335 -ipset=/v2ex.com/gfwlist -server=/onsalekey.com/127.0.0.1#5335 -ipset=/onsalekey.com/gfwlist -server=/yahoo.jo/127.0.0.1#5335 -ipset=/yahoo.jo/gfwlist -server=/disneysrivieraresort.com/127.0.0.1#5335 -ipset=/disneysrivieraresort.com/gfwlist -server=/canon.lv/127.0.0.1#5335 -ipset=/canon.lv/gfwlist -server=/oreil.ly/127.0.0.1#5335 -ipset=/oreil.ly/gfwlist -server=/hk01.com/127.0.0.1#5335 -ipset=/hk01.com/gfwlist -server=/lencr.org/127.0.0.1#5335 -ipset=/lencr.org/gfwlist -server=/amplifyapp.com/127.0.0.1#5335 -ipset=/amplifyapp.com/gfwlist -server=/lge.co.kr/127.0.0.1#5335 -ipset=/lge.co.kr/gfwlist -server=/beatsbydrsmonsterinusa.com/127.0.0.1#5335 -ipset=/beatsbydrsmonsterinusa.com/gfwlist -server=/google.com.ua/127.0.0.1#5335 -ipset=/google.com.ua/gfwlist -server=/hrsaz.com/127.0.0.1#5335 -ipset=/hrsaz.com/gfwlist -server=/q13.com/127.0.0.1#5335 -ipset=/q13.com/gfwlist -server=/bmw-motorrad-dubai.com/127.0.0.1#5335 -ipset=/bmw-motorrad-dubai.com/gfwlist -server=/fsacebok.com/127.0.0.1#5335 -ipset=/fsacebok.com/gfwlist -server=/steamcommunity.com/127.0.0.1#5335 -ipset=/steamcommunity.com/gfwlist -server=/beats-bydrecheapsale.com/127.0.0.1#5335 -ipset=/beats-bydrecheapsale.com/gfwlist -server=/airwick.cl/127.0.0.1#5335 -ipset=/airwick.cl/gfwlist -server=/facebookpay.com/127.0.0.1#5335 -ipset=/facebookpay.com/gfwlist -server=/ebayads.net/127.0.0.1#5335 -ipset=/ebayads.net/gfwlist -server=/amazon-jp-recruiting.com/127.0.0.1#5335 -ipset=/amazon-jp-recruiting.com/gfwlist -server=/fox10.tv/127.0.0.1#5335 -ipset=/fox10.tv/gfwlist -server=/canon.ua/127.0.0.1#5335 -ipset=/canon.ua/gfwlist -server=/pearson-intl.com/127.0.0.1#5335 -ipset=/pearson-intl.com/gfwlist -server=/npm.community/127.0.0.1#5335 -ipset=/npm.community/gfwlist -server=/scopus.com/127.0.0.1#5335 -ipset=/scopus.com/gfwlist -server=/bmw-motorrad.jp/127.0.0.1#5335 -ipset=/bmw-motorrad.jp/gfwlist -server=/mortein.co.in/127.0.0.1#5335 -ipset=/mortein.co.in/gfwlist -server=/usertrust.com/127.0.0.1#5335 -ipset=/usertrust.com/gfwlist -server=/rakuten.com.tw/127.0.0.1#5335 -ipset=/rakuten.com.tw/gfwlist -server=/facebookemail.com/127.0.0.1#5335 -ipset=/facebookemail.com/gfwlist -server=/googleoptimize.com/127.0.0.1#5335 -ipset=/googleoptimize.com/gfwlist -server=/intel.pe/127.0.0.1#5335 -ipset=/intel.pe/gfwlist -server=/beatsbydreshops.net/127.0.0.1#5335 -ipset=/beatsbydreshops.net/gfwlist -server=/bmw-voli.me/127.0.0.1#5335 -ipset=/bmw-voli.me/gfwlist -server=/nikecraft.com/127.0.0.1#5335 -ipset=/nikecraft.com/gfwlist -server=/pearson.com.hk/127.0.0.1#5335 -ipset=/pearson.com.hk/gfwlist -server=/webex.de/127.0.0.1#5335 -ipset=/webex.de/gfwlist -server=/skypeassets.net/127.0.0.1#5335 -ipset=/skypeassets.net/gfwlist -server=/verisign.co.in/127.0.0.1#5335 -ipset=/verisign.co.in/gfwlist -server=/alphera.co.nz/127.0.0.1#5335 -ipset=/alphera.co.nz/gfwlist -server=/stateofthemap.org/127.0.0.1#5335 -ipset=/stateofthemap.org/gfwlist -server=/ffprofile.com/127.0.0.1#5335 -ipset=/ffprofile.com/gfwlist -server=/menshin-channel.com/127.0.0.1#5335 -ipset=/menshin-channel.com/gfwlist -server=/scholar.google.com.ni/127.0.0.1#5335 -ipset=/scholar.google.com.ni/gfwlist -server=/cbsiam.com/127.0.0.1#5335 -ipset=/cbsiam.com/gfwlist -server=/scholar.google.li/127.0.0.1#5335 -ipset=/scholar.google.li/gfwlist -server=/devcon.org/127.0.0.1#5335 -ipset=/devcon.org/gfwlist -server=/thomsonreuters.co.kr/127.0.0.1#5335 -ipset=/thomsonreuters.co.kr/gfwlist -server=/apple.fr/127.0.0.1#5335 -ipset=/apple.fr/gfwlist -server=/macbookpro.com/127.0.0.1#5335 -ipset=/macbookpro.com/gfwlist -server=/ebayopen.com/127.0.0.1#5335 -ipset=/ebayopen.com/gfwlist -server=/kubeacademy.com/127.0.0.1#5335 -ipset=/kubeacademy.com/gfwlist -server=/e-bay.it/127.0.0.1#5335 -ipset=/e-bay.it/gfwlist -server=/fontawesome.com/127.0.0.1#5335 -ipset=/fontawesome.com/gfwlist -server=/soundofhope.kr/127.0.0.1#5335 -ipset=/soundofhope.kr/gfwlist -server=/mysocialworklab.com/127.0.0.1#5335 -ipset=/mysocialworklab.com/gfwlist -server=/volvotrucks.al/127.0.0.1#5335 -ipset=/volvotrucks.al/gfwlist -server=/rule34.xxx/127.0.0.1#5335 -ipset=/rule34.xxx/gfwlist -server=/youtube.co.ve/127.0.0.1#5335 -ipset=/youtube.co.ve/gfwlist -server=/calgon.ch/127.0.0.1#5335 -ipset=/calgon.ch/gfwlist -server=/facfebook.com/127.0.0.1#5335 -ipset=/facfebook.com/gfwlist -server=/v2fly.org/127.0.0.1#5335 -ipset=/v2fly.org/gfwlist -server=/edisebay.com/127.0.0.1#5335 -ipset=/edisebay.com/gfwlist -server=/ipad.co.kr/127.0.0.1#5335 -ipset=/ipad.co.kr/gfwlist -server=/udn.com/127.0.0.1#5335 -ipset=/udn.com/gfwlist -server=/bmw.sn/127.0.0.1#5335 -ipset=/bmw.sn/gfwlist -server=/yahoo.fr/127.0.0.1#5335 -ipset=/yahoo.fr/gfwlist -server=/bbcmedia.co.uk/127.0.0.1#5335 -ipset=/bbcmedia.co.uk/gfwlist -server=/minirichmond.ca/127.0.0.1#5335 -ipset=/minirichmond.ca/gfwlist -server=/paypal-communication.com/127.0.0.1#5335 -ipset=/paypal-communication.com/gfwlist -server=/rumah123.com/127.0.0.1#5335 -ipset=/rumah123.com/gfwlist -server=/fxnetworks.com/127.0.0.1#5335 -ipset=/fxnetworks.com/gfwlist -server=/icloude.com/127.0.0.1#5335 -ipset=/icloude.com/gfwlist -server=/beatsbydreoutletsale.com/127.0.0.1#5335 -ipset=/beatsbydreoutletsale.com/gfwlist -server=/virsto.net/127.0.0.1#5335 -ipset=/virsto.net/gfwlist -server=/strikinglycdn.com/127.0.0.1#5335 -ipset=/strikinglycdn.com/gfwlist -server=/sbitravelcard.com/127.0.0.1#5335 -ipset=/sbitravelcard.com/gfwlist -server=/mirrorsedge.com/127.0.0.1#5335 -ipset=/mirrorsedge.com/gfwlist -server=/beatsbydrecolors.com/127.0.0.1#5335 -ipset=/beatsbydrecolors.com/gfwlist -server=/disneybaby.com/127.0.0.1#5335 -ipset=/disneybaby.com/gfwlist -server=/nextwork.hk/127.0.0.1#5335 -ipset=/nextwork.hk/gfwlist -server=/applestore.de/127.0.0.1#5335 -ipset=/applestore.de/gfwlist -server=/directvbundles.com/127.0.0.1#5335 -ipset=/directvbundles.com/gfwlist -server=/xboxone.eu/127.0.0.1#5335 -ipset=/xboxone.eu/gfwlist -server=/pokemon-sunmoon.com/127.0.0.1#5335 -ipset=/pokemon-sunmoon.com/gfwlist -server=/serialssolutions.com/127.0.0.1#5335 -ipset=/serialssolutions.com/gfwlist -server=/salecheaphandbags.com/127.0.0.1#5335 -ipset=/salecheaphandbags.com/gfwlist -server=/aliveipc.com/127.0.0.1#5335 -ipset=/aliveipc.com/gfwlist -server=/vanish.si/127.0.0.1#5335 -ipset=/vanish.si/gfwlist -server=/geeksquadcentral.com/127.0.0.1#5335 -ipset=/geeksquadcentral.com/gfwlist -server=/myhpsupport.com/127.0.0.1#5335 -ipset=/myhpsupport.com/gfwlist -server=/vipoo.es/127.0.0.1#5335 -ipset=/vipoo.es/gfwlist -server=/buycheapbeatsbus.com/127.0.0.1#5335 -ipset=/buycheapbeatsbus.com/gfwlist -server=/beatsbydre-outlet.com/127.0.0.1#5335 -ipset=/beatsbydre-outlet.com/gfwlist -server=/bmw-golfsport.com/127.0.0.1#5335 -ipset=/bmw-golfsport.com/gfwlist -server=/hponlinehelp.com/127.0.0.1#5335 -ipset=/hponlinehelp.com/gfwlist -server=/giratina.com/127.0.0.1#5335 -ipset=/giratina.com/gfwlist -server=/honawalaan.com/127.0.0.1#5335 -ipset=/honawalaan.com/gfwlist -server=/behance.net/127.0.0.1#5335 -ipset=/behance.net/gfwlist -server=/brotli.org/127.0.0.1#5335 -ipset=/brotli.org/gfwlist -server=/newsamerica.com/127.0.0.1#5335 -ipset=/newsamerica.com/gfwlist -server=/durexusa.com/127.0.0.1#5335 -ipset=/durexusa.com/gfwlist -server=/customizedbeatsdre.com/127.0.0.1#5335 -ipset=/customizedbeatsdre.com/gfwlist -server=/nikecdn.com/127.0.0.1#5335 -ipset=/nikecdn.com/gfwlist -server=/sciencedirectassets.com/127.0.0.1#5335 -ipset=/sciencedirectassets.com/gfwlist -server=/medium.systems/127.0.0.1#5335 -ipset=/medium.systems/gfwlist -server=/gettyimages.de/127.0.0.1#5335 -ipset=/gettyimages.de/gfwlist -server=/hkej.com/127.0.0.1#5335 -ipset=/hkej.com/gfwlist -server=/awseducate.net/127.0.0.1#5335 -ipset=/awseducate.net/gfwlist -server=/kirbysuperstarultra.com/127.0.0.1#5335 -ipset=/kirbysuperstarultra.com/gfwlist -server=/ajplus.net/127.0.0.1#5335 -ipset=/ajplus.net/gfwlist -server=/muji.tw/127.0.0.1#5335 -ipset=/muji.tw/gfwlist -server=/mochajs.org/127.0.0.1#5335 -ipset=/mochajs.org/gfwlist -server=/youtube.bh/127.0.0.1#5335 -ipset=/youtube.bh/gfwlist -server=/globalsign.com.sg/127.0.0.1#5335 -ipset=/globalsign.com.sg/gfwlist -server=/flipnotestudio.com/127.0.0.1#5335 -ipset=/flipnotestudio.com/gfwlist -server=/amazon.in/127.0.0.1#5335 -ipset=/amazon.in/gfwlist -server=/omniture.com/127.0.0.1#5335 -ipset=/omniture.com/gfwlist -server=/microsoftnews.org/127.0.0.1#5335 -ipset=/microsoftnews.org/gfwlist -server=/bmwdealerdirect.com/127.0.0.1#5335 -ipset=/bmwdealerdirect.com/gfwlist -server=/mach-os.com/127.0.0.1#5335 -ipset=/mach-os.com/gfwlist -server=/mini.nl/127.0.0.1#5335 -ipset=/mini.nl/gfwlist -server=/mastercard.com.lb/127.0.0.1#5335 -ipset=/mastercard.com.lb/gfwlist -server=/bloombergindustry.com/127.0.0.1#5335 -ipset=/bloombergindustry.com/gfwlist -server=/beatsbydreforyououtlet.com/127.0.0.1#5335 -ipset=/beatsbydreforyououtlet.com/gfwlist -server=/canon.com.mt/127.0.0.1#5335 -ipset=/canon.com.mt/gfwlist -server=/follasian.com/127.0.0.1#5335 -ipset=/follasian.com/gfwlist -server=/shopminiusa.com/127.0.0.1#5335 -ipset=/shopminiusa.com/gfwlist -server=/economistgroupcareers.com/127.0.0.1#5335 -ipset=/economistgroupcareers.com/gfwlist -server=/gitstar.com/127.0.0.1#5335 -ipset=/gitstar.com/gfwlist -server=/drebeats-solo.com/127.0.0.1#5335 -ipset=/drebeats-solo.com/gfwlist -server=/visa.is/127.0.0.1#5335 -ipset=/visa.is/gfwlist -server=/youtubego.co.id/127.0.0.1#5335 -ipset=/youtubego.co.id/gfwlist -server=/guo.media/127.0.0.1#5335 -ipset=/guo.media/gfwlist -server=/cheapbeatsbydrefau.com/127.0.0.1#5335 -ipset=/cheapbeatsbydrefau.com/gfwlist -server=/youtube.cl/127.0.0.1#5335 -ipset=/youtube.cl/gfwlist -server=/talksport.com/127.0.0.1#5335 -ipset=/talksport.com/gfwlist -server=/epochtimes.se/127.0.0.1#5335 -ipset=/epochtimes.se/gfwlist -server=/alphabet.com.pt/127.0.0.1#5335 -ipset=/alphabet.com.pt/gfwlist -server=/ebayclassifiedsgroup.info/127.0.0.1#5335 -ipset=/ebayclassifiedsgroup.info/gfwlist -server=/visiontimes.com/127.0.0.1#5335 -ipset=/visiontimes.com/gfwlist -server=/applepay.tv/127.0.0.1#5335 -ipset=/applepay.tv/gfwlist -server=/apple.co.hu/127.0.0.1#5335 -ipset=/apple.co.hu/gfwlist -server=/riot.com/127.0.0.1#5335 -ipset=/riot.com/gfwlist -server=/bmw-rp.com/127.0.0.1#5335 -ipset=/bmw-rp.com/gfwlist -server=/beatsep.net/127.0.0.1#5335 -ipset=/beatsep.net/gfwlist -server=/beatsbydreol.com/127.0.0.1#5335 -ipset=/beatsbydreol.com/gfwlist -server=/g-technology.com/127.0.0.1#5335 -ipset=/g-technology.com/gfwlist -server=/duck.co/127.0.0.1#5335 -ipset=/duck.co/gfwlist -server=/bmw.ca/127.0.0.1#5335 -ipset=/bmw.ca/gfwlist -server=/tssp.best/127.0.0.1#5335 -ipset=/tssp.best/gfwlist -server=/beats-soaho.com/127.0.0.1#5335 -ipset=/beats-soaho.com/gfwlist -server=/bitvise.com/127.0.0.1#5335 -ipset=/bitvise.com/gfwlist -server=/ciscoknowledgenetwork.com/127.0.0.1#5335 -ipset=/ciscoknowledgenetwork.com/gfwlist -server=/pdncommunity.com/127.0.0.1#5335 -ipset=/pdncommunity.com/gfwlist -server=/yahoo.ph/127.0.0.1#5335 -ipset=/yahoo.ph/gfwlist -server=/needforspeedtimeattack.com/127.0.0.1#5335 -ipset=/needforspeedtimeattack.com/gfwlist -server=/worldemojiday.com/127.0.0.1#5335 -ipset=/worldemojiday.com/gfwlist -server=/beatsdrdre-headphones.com/127.0.0.1#5335 -ipset=/beatsdrdre-headphones.com/gfwlist -server=/nike.com.hk/127.0.0.1#5335 -ipset=/nike.com.hk/gfwlist -server=/spotifycdn.com/127.0.0.1#5335 -ipset=/spotifycdn.com/gfwlist -server=/adelaidenow.com.au/127.0.0.1#5335 -ipset=/adelaidenow.com.au/gfwlist -server=/scholar.google.com.eg/127.0.0.1#5335 -ipset=/scholar.google.com.eg/gfwlist -server=/visasavingsedge.ca/127.0.0.1#5335 -ipset=/visasavingsedge.ca/gfwlist -server=/echocdn.com/127.0.0.1#5335 -ipset=/echocdn.com/gfwlist -server=/starbucks.com.bn/127.0.0.1#5335 -ipset=/starbucks.com.bn/gfwlist -server=/icloud.is/127.0.0.1#5335 -ipset=/icloud.is/gfwlist -server=/nurofen.co.uk/127.0.0.1#5335 -ipset=/nurofen.co.uk/gfwlist -server=/disney.es/127.0.0.1#5335 -ipset=/disney.es/gfwlist -server=/blogspot.ug/127.0.0.1#5335 -ipset=/blogspot.ug/gfwlist -server=/r10s.com/127.0.0.1#5335 -ipset=/r10s.com/gfwlist -server=/icloud.fi/127.0.0.1#5335 -ipset=/icloud.fi/gfwlist -server=/yahoomusic.com/127.0.0.1#5335 -ipset=/yahoomusic.com/gfwlist -server=/facebookdusexe.org/127.0.0.1#5335 -ipset=/facebookdusexe.org/gfwlist -server=/sportswomanoftheyear.co.uk/127.0.0.1#5335 -ipset=/sportswomanoftheyear.co.uk/gfwlist -server=/googletagmanager.com/127.0.0.1#5335 -ipset=/googletagmanager.com/gfwlist -server=/visaicsdirect.com/127.0.0.1#5335 -ipset=/visaicsdirect.com/gfwlist -server=/teamneedforspeed.com/127.0.0.1#5335 -ipset=/teamneedforspeed.com/gfwlist -server=/scholar.google.co.in/127.0.0.1#5335 -ipset=/scholar.google.co.in/gfwlist -server=/beatsbydressale.com/127.0.0.1#5335 -ipset=/beatsbydressale.com/gfwlist -server=/volvotrucks.be/127.0.0.1#5335 -ipset=/volvotrucks.be/gfwlist -server=/adidas.ch/127.0.0.1#5335 -ipset=/adidas.ch/gfwlist -server=/ffmpeg.org/127.0.0.1#5335 -ipset=/ffmpeg.org/gfwlist -server=/move-free.net/127.0.0.1#5335 -ipset=/move-free.net/gfwlist -server=/applewallet.tv/127.0.0.1#5335 -ipset=/applewallet.tv/gfwlist -server=/mirrorsedge2.com/127.0.0.1#5335 -ipset=/mirrorsedge2.com/gfwlist -server=/01.org/127.0.0.1#5335 -ipset=/01.org/gfwlist -server=/sony.com.br/127.0.0.1#5335 -ipset=/sony.com.br/gfwlist -server=/alphabetfinance.net/127.0.0.1#5335 -ipset=/alphabetfinance.net/gfwlist -server=/springer.com/127.0.0.1#5335 -ipset=/springer.com/gfwlist -server=/volvobuses.my/127.0.0.1#5335 -ipset=/volvobuses.my/gfwlist -server=/emac.co.in/127.0.0.1#5335 -ipset=/emac.co.in/gfwlist -server=/altmetric.com/127.0.0.1#5335 -ipset=/altmetric.com/gfwlist -server=/azure.microsoft.com/127.0.0.1#5335 -ipset=/azure.microsoft.com/gfwlist -server=/drebeatssolocybermondaysale.com/127.0.0.1#5335 -ipset=/drebeatssolocybermondaysale.com/gfwlist -server=/insiderdevtour.com/127.0.0.1#5335 -ipset=/insiderdevtour.com/gfwlist -server=/mastercard.ch/127.0.0.1#5335 -ipset=/mastercard.ch/gfwlist -server=/bbg.gov/127.0.0.1#5335 -ipset=/bbg.gov/gfwlist -server=/visa.com.ms/127.0.0.1#5335 -ipset=/visa.com.ms/gfwlist -server=/mucinex.cn/127.0.0.1#5335 -ipset=/mucinex.cn/gfwlist -server=/java.com/127.0.0.1#5335 -ipset=/java.com/gfwlist -server=/apple.xyz/127.0.0.1#5335 -ipset=/apple.xyz/gfwlist -server=/paypalnet.net/127.0.0.1#5335 -ipset=/paypalnet.net/gfwlist -server=/javdoe.com/127.0.0.1#5335 -ipset=/javdoe.com/gfwlist -server=/applereach.com/127.0.0.1#5335 -ipset=/applereach.com/gfwlist -server=/chihair-straightener.com/127.0.0.1#5335 -ipset=/chihair-straightener.com/gfwlist -server=/foxnewsplayer-a.akamaihd.net/127.0.0.1#5335 -ipset=/foxnewsplayer-a.akamaihd.net/gfwlist -server=/bellsouth.net/127.0.0.1#5335 -ipset=/bellsouth.net/gfwlist -server=/cloudflarewarp.com/127.0.0.1#5335 -ipset=/cloudflarewarp.com/gfwlist -server=/indaznlab.com/127.0.0.1#5335 -ipset=/indaznlab.com/gfwlist -server=/projectapex.com/127.0.0.1#5335 -ipset=/projectapex.com/gfwlist -server=/volvotrucks.es/127.0.0.1#5335 -ipset=/volvotrucks.es/gfwlist -server=/ubisoft-orbit-savegames.s3.amazonaws.com/127.0.0.1#5335 -ipset=/ubisoft-orbit-savegames.s3.amazonaws.com/gfwlist -server=/vfsco.nl/127.0.0.1#5335 -ipset=/vfsco.nl/gfwlist -server=/herringnetwork.com/127.0.0.1#5335 -ipset=/herringnetwork.com/gfwlist -server=/monsterbeatscommunity.com/127.0.0.1#5335 -ipset=/monsterbeatscommunity.com/gfwlist -server=/cmpaas.com/127.0.0.1#5335 -ipset=/cmpaas.com/gfwlist -server=/zeit-world.com/127.0.0.1#5335 -ipset=/zeit-world.com/gfwlist -server=/beatsbydrecheaper.com/127.0.0.1#5335 -ipset=/beatsbydrecheaper.com/gfwlist -server=/bestbuycanada.ca/127.0.0.1#5335 -ipset=/bestbuycanada.ca/gfwlist -server=/nbc.co/127.0.0.1#5335 -ipset=/nbc.co/gfwlist -server=/yahoo.co.jp/127.0.0.1#5335 -ipset=/yahoo.co.jp/gfwlist -server=/nikeoutletstores.com/127.0.0.1#5335 -ipset=/nikeoutletstores.com/gfwlist -server=/amazon.red/127.0.0.1#5335 -ipset=/amazon.red/gfwlist -server=/mastercardacademy.com/127.0.0.1#5335 -ipset=/mastercardacademy.com/gfwlist -server=/happymeal.com.au/127.0.0.1#5335 -ipset=/happymeal.com.au/gfwlist -server=/volvomerchandise.com/127.0.0.1#5335 -ipset=/volvomerchandise.com/gfwlist -server=/intel.la/127.0.0.1#5335 -ipset=/intel.la/gfwlist -server=/wenzhao.ca/127.0.0.1#5335 -ipset=/wenzhao.ca/gfwlist -server=/bridgestonecomercial.com.ar/127.0.0.1#5335 -ipset=/bridgestonecomercial.com.ar/gfwlist -server=/myfoxhouston.com/127.0.0.1#5335 -ipset=/myfoxhouston.com/gfwlist -server=/quora.com/127.0.0.1#5335 -ipset=/quora.com/gfwlist -server=/iop.org/127.0.0.1#5335 -ipset=/iop.org/gfwlist -server=/ebayvalet.com/127.0.0.1#5335 -ipset=/ebayvalet.com/gfwlist -server=/blogspot.com/127.0.0.1#5335 -ipset=/blogspot.com/gfwlist -server=/oculus3d.com/127.0.0.1#5335 -ipset=/oculus3d.com/gfwlist -server=/aria.ms/127.0.0.1#5335 -ipset=/aria.ms/gfwlist -server=/applestore.bg/127.0.0.1#5335 -ipset=/applestore.bg/gfwlist -server=/instagify.com/127.0.0.1#5335 -ipset=/instagify.com/gfwlist -server=/awsthinkbox.com/127.0.0.1#5335 -ipset=/awsthinkbox.com/gfwlist -server=/asahishimbun.sc.omtrdc.net/127.0.0.1#5335 -ipset=/asahishimbun.sc.omtrdc.net/gfwlist -server=/beatsbydreformall2013-nl.com/127.0.0.1#5335 -ipset=/beatsbydreformall2013-nl.com/gfwlist -server=/facebooksz.com/127.0.0.1#5335 -ipset=/facebooksz.com/gfwlist -server=/paypallabs.com/127.0.0.1#5335 -ipset=/paypallabs.com/gfwlist -server=/eachpay.net/127.0.0.1#5335 -ipset=/eachpay.net/gfwlist -server=/cheapbeatsbydresale.com/127.0.0.1#5335 -ipset=/cheapbeatsbydresale.com/gfwlist -server=/bmwmotorshowblog.com/127.0.0.1#5335 -ipset=/bmwmotorshowblog.com/gfwlist -server=/paypal-login.org/127.0.0.1#5335 -ipset=/paypal-login.org/gfwlist -server=/flow.org/127.0.0.1#5335 -ipset=/flow.org/gfwlist -server=/espressif.com/127.0.0.1#5335 -ipset=/espressif.com/gfwlist -server=/lysol.cl/127.0.0.1#5335 -ipset=/lysol.cl/gfwlist -server=/adobe-video-partner-finder.com/127.0.0.1#5335 -ipset=/adobe-video-partner-finder.com/gfwlist -server=/dev-theguardian.com/127.0.0.1#5335 -ipset=/dev-theguardian.com/gfwlist -server=/dropbox-dns.com/127.0.0.1#5335 -ipset=/dropbox-dns.com/gfwlist -server=/immidio.com/127.0.0.1#5335 -ipset=/immidio.com/gfwlist -server=/thomsonreuters.com/127.0.0.1#5335 -ipset=/thomsonreuters.com/gfwlist -server=/85tube.com/127.0.0.1#5335 -ipset=/85tube.com/gfwlist -server=/fox.tv/127.0.0.1#5335 -ipset=/fox.tv/gfwlist -server=/tristatebmw.com/127.0.0.1#5335 -ipset=/tristatebmw.com/gfwlist -server=/bmw.bs/127.0.0.1#5335 -ipset=/bmw.bs/gfwlist -server=/apigee.com/127.0.0.1#5335 -ipset=/apigee.com/gfwlist -server=/marvelparty.net/127.0.0.1#5335 -ipset=/marvelparty.net/gfwlist -server=/cloupia.com/127.0.0.1#5335 -ipset=/cloupia.com/gfwlist -server=/huffingtonpost.com.mx/127.0.0.1#5335 -ipset=/huffingtonpost.com.mx/gfwlist -server=/bmw-connecteddrive.co.za/127.0.0.1#5335 -ipset=/bmw-connecteddrive.co.za/gfwlist -server=/bloomberg.co.kr/127.0.0.1#5335 -ipset=/bloomberg.co.kr/gfwlist -server=/cython.org/127.0.0.1#5335 -ipset=/cython.org/gfwlist -server=/bintray.com/127.0.0.1#5335 -ipset=/bintray.com/gfwlist -server=/meridian.net/127.0.0.1#5335 -ipset=/meridian.net/gfwlist -server=/c-span.org/127.0.0.1#5335 -ipset=/c-span.org/gfwlist -server=/mediafiles-cisco.com/127.0.0.1#5335 -ipset=/mediafiles-cisco.com/gfwlist -server=/sb-telecom.net/127.0.0.1#5335 -ipset=/sb-telecom.net/gfwlist -server=/amiibo.com/127.0.0.1#5335 -ipset=/amiibo.com/gfwlist -server=/clojure.org/127.0.0.1#5335 -ipset=/clojure.org/gfwlist -server=/riotgames.com/127.0.0.1#5335 -ipset=/riotgames.com/gfwlist -server=/python.org/127.0.0.1#5335 -ipset=/python.org/gfwlist -server=/blogspot.co.id/127.0.0.1#5335 -ipset=/blogspot.co.id/gfwlist -server=/12diasderegalosdeitunes.com.co/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.com.co/gfwlist -server=/xn--gtvz22d.wang/127.0.0.1#5335 -ipset=/xn--gtvz22d.wang/gfwlist -server=/reabble.com/127.0.0.1#5335 -ipset=/reabble.com/gfwlist -server=/intel-university-collaboration.net/127.0.0.1#5335 -ipset=/intel-university-collaboration.net/gfwlist -server=/matrix.org/127.0.0.1#5335 -ipset=/matrix.org/gfwlist -server=/vanishcentroamerica.com/127.0.0.1#5335 -ipset=/vanishcentroamerica.com/gfwlist -server=/ebayshoesstore.com/127.0.0.1#5335 -ipset=/ebayshoesstore.com/gfwlist -server=/epochhk.com/127.0.0.1#5335 -ipset=/epochhk.com/gfwlist -server=/gotraffic.net/127.0.0.1#5335 -ipset=/gotraffic.net/gfwlist -server=/ebayinc.org/127.0.0.1#5335 -ipset=/ebayinc.org/gfwlist -server=/storage.live.com/127.0.0.1#5335 -ipset=/storage.live.com/gfwlist -server=/drebeats-monsterusa.com/127.0.0.1#5335 -ipset=/drebeats-monsterusa.com/gfwlist -server=/epochtimes.com.ua/127.0.0.1#5335 -ipset=/epochtimes.com.ua/gfwlist -server=/beatsbydrebeatsby.com/127.0.0.1#5335 -ipset=/beatsbydrebeatsby.com/gfwlist -server=/billmelater.net/127.0.0.1#5335 -ipset=/billmelater.net/gfwlist -server=/abeatsbydrdre.com/127.0.0.1#5335 -ipset=/abeatsbydrdre.com/gfwlist -server=/cheapcustombeatsbydre.com/127.0.0.1#5335 -ipset=/cheapcustombeatsbydre.com/gfwlist -server=/casquebeatsdocteurdre.com/127.0.0.1#5335 -ipset=/casquebeatsdocteurdre.com/gfwlist -server=/12diasderegalosdeitunes.cl/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.cl/gfwlist -server=/drebeatsstudio2013.com/127.0.0.1#5335 -ipset=/drebeatsstudio2013.com/gfwlist -server=/account-paypal.info/127.0.0.1#5335 -ipset=/account-paypal.info/gfwlist -server=/google.de/127.0.0.1#5335 -ipset=/google.de/gfwlist -server=/artstation.com/127.0.0.1#5335 -ipset=/artstation.com/gfwlist -server=/hpconnected.net/127.0.0.1#5335 -ipset=/hpconnected.net/gfwlist -server=/nikeit.com/127.0.0.1#5335 -ipset=/nikeit.com/gfwlist -server=/binance.com/127.0.0.1#5335 -ipset=/binance.com/gfwlist -server=/mini.is/127.0.0.1#5335 -ipset=/mini.is/gfwlist -server=/p-events-delivery.akamaized.net/127.0.0.1#5335 -ipset=/p-events-delivery.akamaized.net/gfwlist -server=/youtube.az/127.0.0.1#5335 -ipset=/youtube.az/gfwlist -server=/hacklang.org/127.0.0.1#5335 -ipset=/hacklang.org/gfwlist -server=/webtoons.com/127.0.0.1#5335 -ipset=/webtoons.com/gfwlist -server=/microsoftnews.cc/127.0.0.1#5335 -ipset=/microsoftnews.cc/gfwlist -server=/next.com/127.0.0.1#5335 -ipset=/next.com/gfwlist -server=/smpte.org/127.0.0.1#5335 -ipset=/smpte.org/gfwlist -server=/quicktime.eu/127.0.0.1#5335 -ipset=/quicktime.eu/gfwlist -server=/consul.io/127.0.0.1#5335 -ipset=/consul.io/gfwlist -server=/volvobuses.com.au/127.0.0.1#5335 -ipset=/volvobuses.com.au/gfwlist -server=/beatsbydrestudio.com/127.0.0.1#5335 -ipset=/beatsbydrestudio.com/gfwlist -server=/paypal-survey.com/127.0.0.1#5335 -ipset=/paypal-survey.com/gfwlist -server=/aboutamazon.jp/127.0.0.1#5335 -ipset=/aboutamazon.jp/gfwlist -server=/valuegb.com/127.0.0.1#5335 -ipset=/valuegb.com/gfwlist -server=/disney.no/127.0.0.1#5335 -ipset=/disney.no/gfwlist -server=/hololens.com/127.0.0.1#5335 -ipset=/hololens.com/gfwlist -server=/mastercard.com.ar/127.0.0.1#5335 -ipset=/mastercard.com.ar/gfwlist -server=/borderlessprepaid.com/127.0.0.1#5335 -ipset=/borderlessprepaid.com/gfwlist -server=/miraheze.org/127.0.0.1#5335 -ipset=/miraheze.org/gfwlist -server=/drebeatsbuy.com/127.0.0.1#5335 -ipset=/drebeatsbuy.com/gfwlist -server=/headphones-outlet-online.com/127.0.0.1#5335 -ipset=/headphones-outlet-online.com/gfwlist -server=/microsoft.is/127.0.0.1#5335 -ipset=/microsoft.is/gfwlist -server=/starfox.com/127.0.0.1#5335 -ipset=/starfox.com/gfwlist -server=/enpirion.com/127.0.0.1#5335 -ipset=/enpirion.com/gfwlist -server=/miniso.co.id/127.0.0.1#5335 -ipset=/miniso.co.id/gfwlist -server=/adobeoobe.com/127.0.0.1#5335 -ipset=/adobeoobe.com/gfwlist -server=/minicanada.ca/127.0.0.1#5335 -ipset=/minicanada.ca/gfwlist -server=/gamedownloads-rockstargames-com.akamaized.net/127.0.0.1#5335 -ipset=/gamedownloads-rockstargames-com.akamaized.net/gfwlist -server=/adobeku.com/127.0.0.1#5335 -ipset=/adobeku.com/gfwlist -server=/bandwagonhost.com/127.0.0.1#5335 -ipset=/bandwagonhost.com/gfwlist -server=/syhacked.com/127.0.0.1#5335 -ipset=/syhacked.com/gfwlist -server=/fedoraforum.org/127.0.0.1#5335 -ipset=/fedoraforum.org/gfwlist -server=/alpherafs.ca/127.0.0.1#5335 -ipset=/alpherafs.ca/gfwlist -server=/facebookenespanol.com/127.0.0.1#5335 -ipset=/facebookenespanol.com/gfwlist -server=/av6k.com/127.0.0.1#5335 -ipset=/av6k.com/gfwlist -server=/foxdeportes.tv/127.0.0.1#5335 -ipset=/foxdeportes.tv/gfwlist -server=/bridgestonecomercial.com.mx/127.0.0.1#5335 -ipset=/bridgestonecomercial.com.mx/gfwlist -server=/dkr.com/127.0.0.1#5335 -ipset=/dkr.com/gfwlist -server=/paypal-excelinvoicing.com/127.0.0.1#5335 -ipset=/paypal-excelinvoicing.com/gfwlist -server=/googlecompare.co.uk/127.0.0.1#5335 -ipset=/googlecompare.co.uk/gfwlist -server=/nflxso.net/127.0.0.1#5335 -ipset=/nflxso.net/gfwlist -server=/marketingcloud.com/127.0.0.1#5335 -ipset=/marketingcloud.com/gfwlist -server=/weareebay.com/127.0.0.1#5335 -ipset=/weareebay.com/gfwlist -server=/bejewled-stars.com/127.0.0.1#5335 -ipset=/bejewled-stars.com/gfwlist -server=/volvotruckcenter.dk/127.0.0.1#5335 -ipset=/volvotruckcenter.dk/gfwlist -server=/visiontimes.de/127.0.0.1#5335 -ipset=/visiontimes.de/gfwlist -server=/intel.com.br/127.0.0.1#5335 -ipset=/intel.com.br/gfwlist -server=/bayvoice.net/127.0.0.1#5335 -ipset=/bayvoice.net/gfwlist -server=/freebasics.net/127.0.0.1#5335 -ipset=/freebasics.net/gfwlist -server=/needforspeedtherun.com/127.0.0.1#5335 -ipset=/needforspeedtherun.com/gfwlist -server=/aljazeera.com/127.0.0.1#5335 -ipset=/aljazeera.com/gfwlist -server=/google.com.hk/127.0.0.1#5335 -ipset=/google.com.hk/gfwlist -server=/meetfasttrack.com/127.0.0.1#5335 -ipset=/meetfasttrack.com/gfwlist -server=/vod-sub-uk-live.akamaized.net/127.0.0.1#5335 -ipset=/vod-sub-uk-live.akamaized.net/gfwlist -server=/googleapps.com/127.0.0.1#5335 -ipset=/googleapps.com/gfwlist -server=/firestone.com.br/127.0.0.1#5335 -ipset=/firestone.com.br/gfwlist -server=/tiktokv.com/127.0.0.1#5335 -ipset=/tiktokv.com/gfwlist -server=/mastercard.com.eg/127.0.0.1#5335 -ipset=/mastercard.com.eg/gfwlist -server=/hpbuiltforlearning.com/127.0.0.1#5335 -ipset=/hpbuiltforlearning.com/gfwlist -server=/harpercollinsspeakersbureau.com/127.0.0.1#5335 -ipset=/harpercollinsspeakersbureau.com/gfwlist -server=/nikesnowboarding.com/127.0.0.1#5335 -ipset=/nikesnowboarding.com/gfwlist -server=/sony.hr/127.0.0.1#5335 -ipset=/sony.hr/gfwlist -server=/dlercloud.com/127.0.0.1#5335 -ipset=/dlercloud.com/gfwlist -server=/issquareup.com/127.0.0.1#5335 -ipset=/issquareup.com/gfwlist -server=/youtube.co.th/127.0.0.1#5335 -ipset=/youtube.co.th/gfwlist -server=/smartcommunitiescoalition.com/127.0.0.1#5335 -ipset=/smartcommunitiescoalition.com/gfwlist -server=/jjdong7.com/127.0.0.1#5335 -ipset=/jjdong7.com/gfwlist -server=/cheapmonsterbeatsusa.us/127.0.0.1#5335 -ipset=/cheapmonsterbeatsusa.us/gfwlist -server=/epochtimes.ru/127.0.0.1#5335 -ipset=/epochtimes.ru/gfwlist -server=/directtvreviews.com/127.0.0.1#5335 -ipset=/directtvreviews.com/gfwlist -server=/nikebetterworld.com/127.0.0.1#5335 -ipset=/nikebetterworld.com/gfwlist -server=/beatsbydreoutletscheap.com/127.0.0.1#5335 -ipset=/beatsbydreoutletscheap.com/gfwlist -server=/volvotrucks.ge/127.0.0.1#5335 -ipset=/volvotrucks.ge/gfwlist -server=/mini-connected.dk/127.0.0.1#5335 -ipset=/mini-connected.dk/gfwlist -server=/google.dm/127.0.0.1#5335 -ipset=/google.dm/gfwlist -server=/vhx.tv/127.0.0.1#5335 -ipset=/vhx.tv/gfwlist -server=/adwords.com/127.0.0.1#5335 -ipset=/adwords.com/gfwlist -server=/bmw-motorrad.cl/127.0.0.1#5335 -ipset=/bmw-motorrad.cl/gfwlist -server=/kidspot.com.au/127.0.0.1#5335 -ipset=/kidspot.com.au/gfwlist -server=/terapeak.com.hk/127.0.0.1#5335 -ipset=/terapeak.com.hk/gfwlist -server=/theverge.com/127.0.0.1#5335 -ipset=/theverge.com/gfwlist -server=/youtube.com.py/127.0.0.1#5335 -ipset=/youtube.com.py/gfwlist -server=/cisconetspace.info/127.0.0.1#5335 -ipset=/cisconetspace.info/gfwlist -server=/paypal-database.us/127.0.0.1#5335 -ipset=/paypal-database.us/gfwlist -server=/crossmediapanel.com/127.0.0.1#5335 -ipset=/crossmediapanel.com/gfwlist -server=/bnbstatic.com/127.0.0.1#5335 -ipset=/bnbstatic.com/gfwlist -server=/salesforce.org/127.0.0.1#5335 -ipset=/salesforce.org/gfwlist -server=/google.com.mx/127.0.0.1#5335 -ipset=/google.com.mx/gfwlist -server=/googlecert.net/127.0.0.1#5335 -ipset=/googlecert.net/gfwlist -server=/foxsportsflorida.com/127.0.0.1#5335 -ipset=/foxsportsflorida.com/gfwlist -server=/nikerunningshoes.com/127.0.0.1#5335 -ipset=/nikerunningshoes.com/gfwlist -server=/ipadaustralia.com/127.0.0.1#5335 -ipset=/ipadaustralia.com/gfwlist -server=/foxsports.cl/127.0.0.1#5335 -ipset=/foxsports.cl/gfwlist -server=/bmw-motorrad.fr/127.0.0.1#5335 -ipset=/bmw-motorrad.fr/gfwlist -server=/duckduckgo.in/127.0.0.1#5335 -ipset=/duckduckgo.in/gfwlist -server=/collins.co.uk/127.0.0.1#5335 -ipset=/collins.co.uk/gfwlist -server=/disney.com.au/127.0.0.1#5335 -ipset=/disney.com.au/gfwlist -server=/acer.com/127.0.0.1#5335 -ipset=/acer.com/gfwlist -server=/thesundaytimes.co.uk/127.0.0.1#5335 -ipset=/thesundaytimes.co.uk/gfwlist -server=/realclear.com/127.0.0.1#5335 -ipset=/realclear.com/gfwlist -server=/google.co.uz/127.0.0.1#5335 -ipset=/google.co.uz/gfwlist -server=/durexukraine.com/127.0.0.1#5335 -ipset=/durexukraine.com/gfwlist -server=/finishinfo.com.au/127.0.0.1#5335 -ipset=/finishinfo.com.au/gfwlist -server=/bmw-connecteddrive.com.au/127.0.0.1#5335 -ipset=/bmw-connecteddrive.com.au/gfwlist -server=/stxmosquito.com/127.0.0.1#5335 -ipset=/stxmosquito.com/gfwlist -server=/bloombergtax1.com/127.0.0.1#5335 -ipset=/bloombergtax1.com/gfwlist -server=/sony.no/127.0.0.1#5335 -ipset=/sony.no/gfwlist -server=/radiyoyacuvoa.com/127.0.0.1#5335 -ipset=/radiyoyacuvoa.com/gfwlist -server=/www-paypal.us/127.0.0.1#5335 -ipset=/www-paypal.us/gfwlist -server=/openthread.io/127.0.0.1#5335 -ipset=/openthread.io/gfwlist -server=/apple.bs/127.0.0.1#5335 -ipset=/apple.bs/gfwlist -server=/foxweatherwatch.com/127.0.0.1#5335 -ipset=/foxweatherwatch.com/gfwlist -server=/go-lang.net/127.0.0.1#5335 -ipset=/go-lang.net/gfwlist -server=/ipadair.tw/127.0.0.1#5335 -ipset=/ipadair.tw/gfwlist -server=/walmart-content.com/127.0.0.1#5335 -ipset=/walmart-content.com/gfwlist -server=/nextwork.tw/127.0.0.1#5335 -ipset=/nextwork.tw/gfwlist -server=/office365.com/127.0.0.1#5335 -ipset=/office365.com/gfwlist -server=/pinterest.ph/127.0.0.1#5335 -ipset=/pinterest.ph/gfwlist -server=/paypal-communications.com/127.0.0.1#5335 -ipset=/paypal-communications.com/gfwlist -server=/manoramanews.com/127.0.0.1#5335 -ipset=/manoramanews.com/gfwlist -server=/bmwccrc.ca/127.0.0.1#5335 -ipset=/bmwccrc.ca/gfwlist -server=/foxsoccer.net/127.0.0.1#5335 -ipset=/foxsoccer.net/gfwlist -server=/yahoo.com.do/127.0.0.1#5335 -ipset=/yahoo.com.do/gfwlist -server=/bmw-connecteddrive.at/127.0.0.1#5335 -ipset=/bmw-connecteddrive.at/gfwlist -server=/bestbuyrewards.com/127.0.0.1#5335 -ipset=/bestbuyrewards.com/gfwlist -server=/facebooklivestaging.org/127.0.0.1#5335 -ipset=/facebooklivestaging.org/gfwlist -server=/magentomobile.com/127.0.0.1#5335 -ipset=/magentomobile.com/gfwlist -server=/softbank-ipo.com/127.0.0.1#5335 -ipset=/softbank-ipo.com/gfwlist -server=/facebock.com/127.0.0.1#5335 -ipset=/facebock.com/gfwlist -server=/facerbooik.com/127.0.0.1#5335 -ipset=/facerbooik.com/gfwlist -server=/alpherafinance.com.hk/127.0.0.1#5335 -ipset=/alpherafinance.com.hk/gfwlist -server=/mini-oman.com/127.0.0.1#5335 -ipset=/mini-oman.com/gfwlist -server=/ping.pe/127.0.0.1#5335 -ipset=/ping.pe/gfwlist -server=/nintendo.pt/127.0.0.1#5335 -ipset=/nintendo.pt/gfwlist -server=/dollarphotosclub.com/127.0.0.1#5335 -ipset=/dollarphotosclub.com/gfwlist -server=/beats-bydre-mall.com/127.0.0.1#5335 -ipset=/beats-bydre-mall.com/gfwlist -server=/verisign.asia/127.0.0.1#5335 -ipset=/verisign.asia/gfwlist -server=/hpdesktopcomputer.com/127.0.0.1#5335 -ipset=/hpdesktopcomputer.com/gfwlist -server=/monsterbeats365buy.com/127.0.0.1#5335 -ipset=/monsterbeats365buy.com/gfwlist -server=/beatsaudios.net/127.0.0.1#5335 -ipset=/beatsaudios.net/gfwlist -server=/secom.co.jp/127.0.0.1#5335 -ipset=/secom.co.jp/gfwlist -server=/skysports.ie/127.0.0.1#5335 -ipset=/skysports.ie/gfwlist -server=/scientificlinux.org/127.0.0.1#5335 -ipset=/scientificlinux.org/gfwlist -server=/beatsheadphoness.com/127.0.0.1#5335 -ipset=/beatsheadphoness.com/gfwlist -server=/pyrobot.org/127.0.0.1#5335 -ipset=/pyrobot.org/gfwlist -server=/researchandcare.org/127.0.0.1#5335 -ipset=/researchandcare.org/gfwlist -server=/lovebeatsdr.com/127.0.0.1#5335 -ipset=/lovebeatsdr.com/gfwlist -server=/bmw-motorcycles.vn/127.0.0.1#5335 -ipset=/bmw-motorcycles.vn/gfwlist -server=/minisaskatoon.ca/127.0.0.1#5335 -ipset=/minisaskatoon.ca/gfwlist -server=/scholar.google.cl/127.0.0.1#5335 -ipset=/scholar.google.cl/gfwlist -server=/phxbmw.com/127.0.0.1#5335 -ipset=/phxbmw.com/gfwlist -server=/wiivc.net/127.0.0.1#5335 -ipset=/wiivc.net/gfwlist -server=/hpeurope.com/127.0.0.1#5335 -ipset=/hpeurope.com/gfwlist -server=/bridgestone-korea.co.kr/127.0.0.1#5335 -ipset=/bridgestone-korea.co.kr/gfwlist -server=/blznav.akamaized.net/127.0.0.1#5335 -ipset=/blznav.akamaized.net/gfwlist -server=/canon.hr/127.0.0.1#5335 -ipset=/canon.hr/gfwlist -server=/catalina.hk/127.0.0.1#5335 -ipset=/catalina.hk/gfwlist -server=/apple.it/127.0.0.1#5335 -ipset=/apple.it/gfwlist -server=/volvobuses.ma/127.0.0.1#5335 -ipset=/volvobuses.ma/gfwlist -server=/nintendo.com.hk/127.0.0.1#5335 -ipset=/nintendo.com.hk/gfwlist -server=/shopifysvc.com/127.0.0.1#5335 -ipset=/shopifysvc.com/gfwlist -server=/sexzy4.com/127.0.0.1#5335 -ipset=/sexzy4.com/gfwlist -server=/blackboxgames.com/127.0.0.1#5335 -ipset=/blackboxgames.com/gfwlist -server=/1pondo.tv/127.0.0.1#5335 -ipset=/1pondo.tv/gfwlist -server=/xn--mts47c3w9b1qr.net/127.0.0.1#5335 -ipset=/xn--mts47c3w9b1qr.net/gfwlist -server=/scholar.google.pl/127.0.0.1#5335 -ipset=/scholar.google.pl/gfwlist -server=/pixnet.tw/127.0.0.1#5335 -ipset=/pixnet.tw/gfwlist -server=/beatsbydrdrebiz.com/127.0.0.1#5335 -ipset=/beatsbydrdrebiz.com/gfwlist -server=/applecoronavirus.com/127.0.0.1#5335 -ipset=/applecoronavirus.com/gfwlist -server=/goodsdunk.net/127.0.0.1#5335 -ipset=/goodsdunk.net/gfwlist -server=/sweetandmaxwell.co.uk/127.0.0.1#5335 -ipset=/sweetandmaxwell.co.uk/gfwlist -server=/salesforce.com/127.0.0.1#5335 -ipset=/salesforce.com/gfwlist -server=/businesswebwise.com/127.0.0.1#5335 -ipset=/businesswebwise.com/gfwlist -server=/vaultproject.io/127.0.0.1#5335 -ipset=/vaultproject.io/gfwlist -server=/drdreprobeatssale.com/127.0.0.1#5335 -ipset=/drdreprobeatssale.com/gfwlist -server=/microsoftnewsforkids.net/127.0.0.1#5335 -ipset=/microsoftnewsforkids.net/gfwlist -server=/visa.co.id/127.0.0.1#5335 -ipset=/visa.co.id/gfwlist -server=/getlantern.org/127.0.0.1#5335 -ipset=/getlantern.org/gfwlist -server=/travelex.bh/127.0.0.1#5335 -ipset=/travelex.bh/gfwlist -server=/ieeer8.org/127.0.0.1#5335 -ipset=/ieeer8.org/gfwlist -server=/akacrypto.net/127.0.0.1#5335 -ipset=/akacrypto.net/gfwlist -server=/static9.net.au/127.0.0.1#5335 -ipset=/static9.net.au/gfwlist -server=/cheapmonstersbeatsonsale.com/127.0.0.1#5335 -ipset=/cheapmonstersbeatsonsale.com/gfwlist -server=/vmware20mosaic.com/127.0.0.1#5335 -ipset=/vmware20mosaic.com/gfwlist -server=/bmw.lc/127.0.0.1#5335 -ipset=/bmw.lc/gfwlist -server=/volvotrucks.ma/127.0.0.1#5335 -ipset=/volvotrucks.ma/gfwlist -server=/bmw-motorrad-now-or-never.com/127.0.0.1#5335 -ipset=/bmw-motorrad-now-or-never.com/gfwlist -server=/vfsco.ru/127.0.0.1#5335 -ipset=/vfsco.ru/gfwlist -server=/kubernetes.io/127.0.0.1#5335 -ipset=/kubernetes.io/gfwlist -server=/bridgestonecomercial.com.co/127.0.0.1#5335 -ipset=/bridgestonecomercial.com.co/gfwlist -server=/nikeplus.com/127.0.0.1#5335 -ipset=/nikeplus.com/gfwlist -server=/intel.je/127.0.0.1#5335 -ipset=/intel.je/gfwlist -server=/devopsassessment.net/127.0.0.1#5335 -ipset=/devopsassessment.net/gfwlist -server=/facebook.ca/127.0.0.1#5335 -ipset=/facebook.ca/gfwlist -server=/yahoo.hu/127.0.0.1#5335 -ipset=/yahoo.hu/gfwlist -server=/epicgames.com/127.0.0.1#5335 -ipset=/epicgames.com/gfwlist -server=/beatsbydrdremall.com/127.0.0.1#5335 -ipset=/beatsbydrdremall.com/gfwlist -server=/bmw-tahiti.com/127.0.0.1#5335 -ipset=/bmw-tahiti.com/gfwlist -server=/drdreheadphonekey.com/127.0.0.1#5335 -ipset=/drdreheadphonekey.com/gfwlist -server=/pics.ee/127.0.0.1#5335 -ipset=/pics.ee/gfwlist -server=/ueberamazon.de/127.0.0.1#5335 -ipset=/ueberamazon.de/gfwlist -server=/yahoo.pt/127.0.0.1#5335 -ipset=/yahoo.pt/gfwlist -server=/yahoo.com.kw/127.0.0.1#5335 -ipset=/yahoo.com.kw/gfwlist -server=/ebay.sg/127.0.0.1#5335 -ipset=/ebay.sg/gfwlist -server=/connected-drive.com/127.0.0.1#5335 -ipset=/connected-drive.com/gfwlist -server=/fcaebook.com/127.0.0.1#5335 -ipset=/fcaebook.com/gfwlist -server=/udemycdn.com/127.0.0.1#5335 -ipset=/udemycdn.com/gfwlist -server=/one.one.one/127.0.0.1#5335 -ipset=/one.one.one/gfwlist -server=/cookiechoices.org/127.0.0.1#5335 -ipset=/cookiechoices.org/gfwlist -server=/bloomberggovernment.com/127.0.0.1#5335 -ipset=/bloomberggovernment.com/gfwlist -server=/logitechg.fr/127.0.0.1#5335 -ipset=/logitechg.fr/gfwlist -server=/g.dev/127.0.0.1#5335 -ipset=/g.dev/gfwlist -server=/quatrum.com.br/127.0.0.1#5335 -ipset=/quatrum.com.br/gfwlist -server=/nikefr.com/127.0.0.1#5335 -ipset=/nikefr.com/gfwlist -server=/pagecdn.com/127.0.0.1#5335 -ipset=/pagecdn.com/gfwlist -server=/deviantart.net/127.0.0.1#5335 -ipset=/deviantart.net/gfwlist -server=/tiltbrush.com/127.0.0.1#5335 -ipset=/tiltbrush.com/gfwlist -server=/imac.com/127.0.0.1#5335 -ipset=/imac.com/gfwlist -server=/videos-rockstargames-com.akamaized.net/127.0.0.1#5335 -ipset=/videos-rockstargames-com.akamaized.net/gfwlist -server=/beatsbydresold.com/127.0.0.1#5335 -ipset=/beatsbydresold.com/gfwlist -server=/powerbeats2wireless.com/127.0.0.1#5335 -ipset=/powerbeats2wireless.com/gfwlist -server=/kktv.me/127.0.0.1#5335 -ipset=/kktv.me/gfwlist -server=/coinonecore.com/127.0.0.1#5335 -ipset=/coinonecore.com/gfwlist -server=/minimarkham.com/127.0.0.1#5335 -ipset=/minimarkham.com/gfwlist -server=/gittigidiyorsikayet.com/127.0.0.1#5335 -ipset=/gittigidiyorsikayet.com/gfwlist -server=/wwwwebay.com/127.0.0.1#5335 -ipset=/wwwwebay.com/gfwlist -server=/disneytickets.co.uk/127.0.0.1#5335 -ipset=/disneytickets.co.uk/gfwlist -server=/hulufree.com/127.0.0.1#5335 -ipset=/hulufree.com/gfwlist -server=/minispace.com/127.0.0.1#5335 -ipset=/minispace.com/gfwlist -server=/connectcommerce.hk/127.0.0.1#5335 -ipset=/connectcommerce.hk/gfwlist -server=/dirctv.com/127.0.0.1#5335 -ipset=/dirctv.com/gfwlist -server=/zohocdn.com/127.0.0.1#5335 -ipset=/zohocdn.com/gfwlist -server=/netflix.net/127.0.0.1#5335 -ipset=/netflix.net/gfwlist -server=/dreprobeats.com/127.0.0.1#5335 -ipset=/dreprobeats.com/gfwlist -server=/imgur.com/127.0.0.1#5335 -ipset=/imgur.com/gfwlist -server=/bloombergmedia.com/127.0.0.1#5335 -ipset=/bloombergmedia.com/gfwlist -server=/ipod.com.sg/127.0.0.1#5335 -ipset=/ipod.com.sg/gfwlist -server=/teraperk.com/127.0.0.1#5335 -ipset=/teraperk.com/gfwlist -server=/vfsco.lt/127.0.0.1#5335 -ipset=/vfsco.lt/gfwlist -server=/aljazeera.net/127.0.0.1#5335 -ipset=/aljazeera.net/gfwlist -server=/paypal-cash.com/127.0.0.1#5335 -ipset=/paypal-cash.com/gfwlist -server=/airwick.at/127.0.0.1#5335 -ipset=/airwick.at/gfwlist -server=/yahoo.sn/127.0.0.1#5335 -ipset=/yahoo.sn/gfwlist -server=/enfabebe.com.mx/127.0.0.1#5335 -ipset=/enfabebe.com.mx/gfwlist -server=/firewire.eu/127.0.0.1#5335 -ipset=/firewire.eu/gfwlist -server=/worldcurrencycard.co.za/127.0.0.1#5335 -ipset=/worldcurrencycard.co.za/gfwlist -server=/mobileme.dk/127.0.0.1#5335 -ipset=/mobileme.dk/gfwlist -server=/myvisaluxuryhotels.com/127.0.0.1#5335 -ipset=/myvisaluxuryhotels.com/gfwlist -server=/mdlf.xyz/127.0.0.1#5335 -ipset=/mdlf.xyz/gfwlist -server=/eablackbox.com/127.0.0.1#5335 -ipset=/eablackbox.com/gfwlist -server=/bmw.bb/127.0.0.1#5335 -ipset=/bmw.bb/gfwlist -server=/appule.com/127.0.0.1#5335 -ipset=/appule.com/gfwlist -server=/newscareers.co.uk/127.0.0.1#5335 -ipset=/newscareers.co.uk/gfwlist -server=/bmwgroup-plants.com/127.0.0.1#5335 -ipset=/bmwgroup-plants.com/gfwlist -server=/google.nr/127.0.0.1#5335 -ipset=/google.nr/gfwlist -server=/ntdtv.org/127.0.0.1#5335 -ipset=/ntdtv.org/gfwlist -server=/applepay.hamburg/127.0.0.1#5335 -ipset=/applepay.hamburg/gfwlist -server=/wwwmfacebook.com/127.0.0.1#5335 -ipset=/wwwmfacebook.com/gfwlist -server=/pp-soc.com/127.0.0.1#5335 -ipset=/pp-soc.com/gfwlist -server=/edu-research.org/127.0.0.1#5335 -ipset=/edu-research.org/gfwlist -server=/bridgestone-bandag.com/127.0.0.1#5335 -ipset=/bridgestone-bandag.com/gfwlist -server=/watchjavonline.com/127.0.0.1#5335 -ipset=/watchjavonline.com/gfwlist -server=/visa.com.lc/127.0.0.1#5335 -ipset=/visa.com.lc/gfwlist -server=/starbuckscardb2b.com/127.0.0.1#5335 -ipset=/starbuckscardb2b.com/gfwlist -server=/love7.xyz/127.0.0.1#5335 -ipset=/love7.xyz/gfwlist -server=/awsbraket.com/127.0.0.1#5335 -ipset=/awsbraket.com/gfwlist -server=/dart.dev/127.0.0.1#5335 -ipset=/dart.dev/gfwlist -server=/google.com.ar/127.0.0.1#5335 -ipset=/google.com.ar/gfwlist -server=/shopee.co.th/127.0.0.1#5335 -ipset=/shopee.co.th/gfwlist -server=/facebookck.com/127.0.0.1#5335 -ipset=/facebookck.com/gfwlist -server=/porntea.com/127.0.0.1#5335 -ipset=/porntea.com/gfwlist -server=/travelex.co.jp/127.0.0.1#5335 -ipset=/travelex.co.jp/gfwlist -server=/yahoo.md/127.0.0.1#5335 -ipset=/yahoo.md/gfwlist -server=/disney-plus.net/127.0.0.1#5335 -ipset=/disney-plus.net/gfwlist -server=/cambridge.org/127.0.0.1#5335 -ipset=/cambridge.org/gfwlist -server=/mono-project.com/127.0.0.1#5335 -ipset=/mono-project.com/gfwlist -server=/facebooa.com/127.0.0.1#5335 -ipset=/facebooa.com/gfwlist -server=/ichat.co.in/127.0.0.1#5335 -ipset=/ichat.co.in/gfwlist -server=/kannewyork.com/127.0.0.1#5335 -ipset=/kannewyork.com/gfwlist -server=/rokutime.com/127.0.0.1#5335 -ipset=/rokutime.com/gfwlist -server=/alphabet.mx/127.0.0.1#5335 -ipset=/alphabet.mx/gfwlist -server=/cdkworkshop.com/127.0.0.1#5335 -ipset=/cdkworkshop.com/gfwlist -server=/rtings.com/127.0.0.1#5335 -ipset=/rtings.com/gfwlist -server=/compass.is/127.0.0.1#5335 -ipset=/compass.is/gfwlist -server=/xn--tkry91n.com/127.0.0.1#5335 -ipset=/xn--tkry91n.com/gfwlist -server=/mini.com.cy/127.0.0.1#5335 -ipset=/mini.com.cy/gfwlist -server=/eporner.com/127.0.0.1#5335 -ipset=/eporner.com/gfwlist -server=/volvobuses.om/127.0.0.1#5335 -ipset=/volvobuses.om/gfwlist -server=/faceid99.net/127.0.0.1#5335 -ipset=/faceid99.net/gfwlist -server=/alphera.com.es/127.0.0.1#5335 -ipset=/alphera.com.es/gfwlist -server=/pearsonelt.com/127.0.0.1#5335 -ipset=/pearsonelt.com/gfwlist -server=/visa.ie/127.0.0.1#5335 -ipset=/visa.ie/gfwlist -server=/hpcontinuum.com/127.0.0.1#5335 -ipset=/hpcontinuum.com/gfwlist -server=/beatsbydrdresale.net/127.0.0.1#5335 -ipset=/beatsbydrdresale.net/gfwlist -server=/mini.co.id/127.0.0.1#5335 -ipset=/mini.co.id/gfwlist -server=/yahoo.com.bd/127.0.0.1#5335 -ipset=/yahoo.com.bd/gfwlist -server=/ebayinkblog.com/127.0.0.1#5335 -ipset=/ebayinkblog.com/gfwlist -server=/govforce.com/127.0.0.1#5335 -ipset=/govforce.com/gfwlist -server=/awssecworkshops.com/127.0.0.1#5335 -ipset=/awssecworkshops.com/gfwlist -server=/appleiservices.com/127.0.0.1#5335 -ipset=/appleiservices.com/gfwlist -server=/fireemblemawakening.com/127.0.0.1#5335 -ipset=/fireemblemawakening.com/gfwlist -server=/swiftfinancial.net/127.0.0.1#5335 -ipset=/swiftfinancial.net/gfwlist -server=/imdb.to/127.0.0.1#5335 -ipset=/imdb.to/gfwlist -server=/telega.one/127.0.0.1#5335 -ipset=/telega.one/gfwlist -server=/2013cheapestbeats.com/127.0.0.1#5335 -ipset=/2013cheapestbeats.com/gfwlist -server=/mcdelivery.co.id/127.0.0.1#5335 -ipset=/mcdelivery.co.id/gfwlist -server=/twitter.jp/127.0.0.1#5335 -ipset=/twitter.jp/gfwlist -server=/cbsaavideo.com/127.0.0.1#5335 -ipset=/cbsaavideo.com/gfwlist -server=/google.cat/127.0.0.1#5335 -ipset=/google.cat/gfwlist -server=/facebook.wang/127.0.0.1#5335 -ipset=/facebook.wang/gfwlist -server=/dazn-api.com/127.0.0.1#5335 -ipset=/dazn-api.com/gfwlist -server=/ebaysocial.ru/127.0.0.1#5335 -ipset=/ebaysocial.ru/gfwlist -server=/v2ray.com/127.0.0.1#5335 -ipset=/v2ray.com/gfwlist -server=/vanish.com.tr/127.0.0.1#5335 -ipset=/vanish.com.tr/gfwlist -server=/quicinc.com/127.0.0.1#5335 -ipset=/quicinc.com/gfwlist -server=/mastercard.lu/127.0.0.1#5335 -ipset=/mastercard.lu/gfwlist -server=/fbrpms.com/127.0.0.1#5335 -ipset=/fbrpms.com/gfwlist -server=/azure-dns.org/127.0.0.1#5335 -ipset=/azure-dns.org/gfwlist -server=/pinterest.be/127.0.0.1#5335 -ipset=/pinterest.be/gfwlist -server=/fontbook.com/127.0.0.1#5335 -ipset=/fontbook.com/gfwlist -server=/verisign.net/127.0.0.1#5335 -ipset=/verisign.net/gfwlist -server=/bmw-connecteddrive.mx/127.0.0.1#5335 -ipset=/bmw-connecteddrive.mx/gfwlist -server=/bmwarchiv.at/127.0.0.1#5335 -ipset=/bmwarchiv.at/gfwlist -server=/fox.com/127.0.0.1#5335 -ipset=/fox.com/gfwlist -server=/aavs.xyz/127.0.0.1#5335 -ipset=/aavs.xyz/gfwlist -server=/bestbuycanada.com/127.0.0.1#5335 -ipset=/bestbuycanada.com/gfwlist -server=/bmw-connecteddrive.dk/127.0.0.1#5335 -ipset=/bmw-connecteddrive.dk/gfwlist -server=/scholar.google.es/127.0.0.1#5335 -ipset=/scholar.google.es/gfwlist -server=/igoogle.com/127.0.0.1#5335 -ipset=/igoogle.com/gfwlist -server=/ntdtv.ca/127.0.0.1#5335 -ipset=/ntdtv.ca/gfwlist -server=/ggoogle.com/127.0.0.1#5335 -ipset=/ggoogle.com/gfwlist -server=/ebaymotors.org/127.0.0.1#5335 -ipset=/ebaymotors.org/gfwlist -server=/imperialbusiness.school/127.0.0.1#5335 -ipset=/imperialbusiness.school/gfwlist -server=/applecard.tv/127.0.0.1#5335 -ipset=/applecard.tv/gfwlist -server=/vox.com/127.0.0.1#5335 -ipset=/vox.com/gfwlist -server=/n3ro.wtf/127.0.0.1#5335 -ipset=/n3ro.wtf/gfwlist -server=/epicreads.com/127.0.0.1#5335 -ipset=/epicreads.com/gfwlist -server=/minivalueservice.com/127.0.0.1#5335 -ipset=/minivalueservice.com/gfwlist -server=/heroesofthestorm.com/127.0.0.1#5335 -ipset=/heroesofthestorm.com/gfwlist -server=/sectigo.com/127.0.0.1#5335 -ipset=/sectigo.com/gfwlist -server=/acer-group.com/127.0.0.1#5335 -ipset=/acer-group.com/gfwlist -server=/drebeatspill.com/127.0.0.1#5335 -ipset=/drebeatspill.com/gfwlist -server=/xeon.com/127.0.0.1#5335 -ipset=/xeon.com/gfwlist -server=/bmw.mn/127.0.0.1#5335 -ipset=/bmw.mn/gfwlist -server=/adobetechcommcallback.com/127.0.0.1#5335 -ipset=/adobetechcommcallback.com/gfwlist -server=/pinterest.com.py/127.0.0.1#5335 -ipset=/pinterest.com.py/gfwlist -server=/yandex.lt/127.0.0.1#5335 -ipset=/yandex.lt/gfwlist -server=/stxmosquitoproject.org/127.0.0.1#5335 -ipset=/stxmosquitoproject.org/gfwlist -server=/hppage5000.com/127.0.0.1#5335 -ipset=/hppage5000.com/gfwlist -server=/blinkload.zone/127.0.0.1#5335 -ipset=/blinkload.zone/gfwlist -server=/clickserver.googleads.com/127.0.0.1#5335 -ipset=/clickserver.googleads.com/gfwlist -server=/ipod.no/127.0.0.1#5335 -ipset=/ipod.no/gfwlist -server=/apple.de/127.0.0.1#5335 -ipset=/apple.de/gfwlist -server=/singtaobooks.com/127.0.0.1#5335 -ipset=/singtaobooks.com/gfwlist -server=/marketexecutive.net/127.0.0.1#5335 -ipset=/marketexecutive.net/gfwlist -server=/pinterest.com.uy/127.0.0.1#5335 -ipset=/pinterest.com.uy/gfwlist -server=/voaportugues.com/127.0.0.1#5335 -ipset=/voaportugues.com/gfwlist -server=/cursecdn.com/127.0.0.1#5335 -ipset=/cursecdn.com/gfwlist -server=/starwars.com/127.0.0.1#5335 -ipset=/starwars.com/gfwlist -server=/camwhores.tv/127.0.0.1#5335 -ipset=/camwhores.tv/gfwlist -server=/embs.org/127.0.0.1#5335 -ipset=/embs.org/gfwlist -server=/annstores.net/127.0.0.1#5335 -ipset=/annstores.net/gfwlist -server=/wolfatbestbuy.com/127.0.0.1#5335 -ipset=/wolfatbestbuy.com/gfwlist -server=/applepay.hk/127.0.0.1#5335 -ipset=/applepay.hk/gfwlist -server=/paypal-media.com/127.0.0.1#5335 -ipset=/paypal-media.com/gfwlist -server=/s-msn.com/127.0.0.1#5335 -ipset=/s-msn.com/gfwlist -server=/disney-studio.com/127.0.0.1#5335 -ipset=/disney-studio.com/gfwlist -server=/themessengeradelaide.com.au/127.0.0.1#5335 -ipset=/themessengeradelaide.com.au/gfwlist -server=/exploreintel.com/127.0.0.1#5335 -ipset=/exploreintel.com/gfwlist -server=/facebooi.com/127.0.0.1#5335 -ipset=/facebooi.com/gfwlist -server=/scholar.google.co.ve/127.0.0.1#5335 -ipset=/scholar.google.co.ve/gfwlist -server=/alphabet.com.es/127.0.0.1#5335 -ipset=/alphabet.com.es/gfwlist -server=/wheelpop.com/127.0.0.1#5335 -ipset=/wheelpop.com/gfwlist -server=/softbankci.com/127.0.0.1#5335 -ipset=/softbankci.com/gfwlist -server=/wikimediacloud.org/127.0.0.1#5335 -ipset=/wikimediacloud.org/gfwlist -server=/beatssbydredanmark.com/127.0.0.1#5335 -ipset=/beatssbydredanmark.com/gfwlist -server=/buzzardflapper.com/127.0.0.1#5335 -ipset=/buzzardflapper.com/gfwlist -server=/bugzilla.org/127.0.0.1#5335 -ipset=/bugzilla.org/gfwlist -server=/bgov.com/127.0.0.1#5335 -ipset=/bgov.com/gfwlist -server=/poshtestgallery.com/127.0.0.1#5335 -ipset=/poshtestgallery.com/gfwlist -server=/airport-gov-cn.com/127.0.0.1#5335 -ipset=/airport-gov-cn.com/gfwlist -server=/line-apps.com/127.0.0.1#5335 -ipset=/line-apps.com/gfwlist -server=/mspairlift.com/127.0.0.1#5335 -ipset=/mspairlift.com/gfwlist -server=/riotgames.tv/127.0.0.1#5335 -ipset=/riotgames.tv/gfwlist -server=/camelphat.com/127.0.0.1#5335 -ipset=/camelphat.com/gfwlist -server=/ankarazirvesi2018.com/127.0.0.1#5335 -ipset=/ankarazirvesi2018.com/gfwlist -server=/techatbloomberg.com/127.0.0.1#5335 -ipset=/techatbloomberg.com/gfwlist -server=/winhec.com/127.0.0.1#5335 -ipset=/winhec.com/gfwlist -server=/bmw-motorrad-authorities.com/127.0.0.1#5335 -ipset=/bmw-motorrad-authorities.com/gfwlist -server=/sony.kz/127.0.0.1#5335 -ipset=/sony.kz/gfwlist -server=/hdrplusdata.org/127.0.0.1#5335 -ipset=/hdrplusdata.org/gfwlist -server=/volvo.se/127.0.0.1#5335 -ipset=/volvo.se/gfwlist -server=/ebayhabit.com/127.0.0.1#5335 -ipset=/ebayhabit.com/gfwlist -server=/torcidadeouro.com/127.0.0.1#5335 -ipset=/torcidadeouro.com/gfwlist -server=/facebookhome.info/127.0.0.1#5335 -ipset=/facebookhome.info/gfwlist -server=/becomeindex.com/127.0.0.1#5335 -ipset=/becomeindex.com/gfwlist -server=/pinterest.engineering/127.0.0.1#5335 -ipset=/pinterest.engineering/gfwlist -server=/disney.dk/127.0.0.1#5335 -ipset=/disney.dk/gfwlist -server=/videobreakdown.com/127.0.0.1#5335 -ipset=/videobreakdown.com/gfwlist -server=/paypal-prepagata.net/127.0.0.1#5335 -ipset=/paypal-prepagata.net/gfwlist -server=/apple.at/127.0.0.1#5335 -ipset=/apple.at/gfwlist -server=/wzmyg.com/127.0.0.1#5335 -ipset=/wzmyg.com/gfwlist -server=/experience-vmware.com/127.0.0.1#5335 -ipset=/experience-vmware.com/gfwlist -server=/monsterbeats-solo.net/127.0.0.1#5335 -ipset=/monsterbeats-solo.net/gfwlist -server=/facebookphotos.com/127.0.0.1#5335 -ipset=/facebookphotos.com/gfwlist -server=/eaaccess.com/127.0.0.1#5335 -ipset=/eaaccess.com/gfwlist -server=/comodoca2.com/127.0.0.1#5335 -ipset=/comodoca2.com/gfwlist -server=/mini-connected.ie/127.0.0.1#5335 -ipset=/mini-connected.ie/gfwlist -server=/visa.se/127.0.0.1#5335 -ipset=/visa.se/gfwlist -server=/hp-webplatform.com/127.0.0.1#5335 -ipset=/hp-webplatform.com/gfwlist -server=/visacheckout.net/127.0.0.1#5335 -ipset=/visacheckout.net/gfwlist -server=/airport.com/127.0.0.1#5335 -ipset=/airport.com/gfwlist -server=/beatfactoryoutlets.com/127.0.0.1#5335 -ipset=/beatfactoryoutlets.com/gfwlist -server=/realcleardefense.com/127.0.0.1#5335 -ipset=/realcleardefense.com/gfwlist -server=/maktoob.com/127.0.0.1#5335 -ipset=/maktoob.com/gfwlist -server=/openwrt.org/127.0.0.1#5335 -ipset=/openwrt.org/gfwlist -server=/nikegrid.com/127.0.0.1#5335 -ipset=/nikegrid.com/gfwlist -server=/tuta.io/127.0.0.1#5335 -ipset=/tuta.io/gfwlist -server=/paaypal.com/127.0.0.1#5335 -ipset=/paaypal.com/gfwlist -server=/ebaytopratedseller.net/127.0.0.1#5335 -ipset=/ebaytopratedseller.net/gfwlist -server=/naiadsystems.com/127.0.0.1#5335 -ipset=/naiadsystems.com/gfwlist -server=/hpusertraining.com/127.0.0.1#5335 -ipset=/hpusertraining.com/gfwlist -server=/analytictech.com/127.0.0.1#5335 -ipset=/analytictech.com/gfwlist -server=/foxsportsworld.com/127.0.0.1#5335 -ipset=/foxsportsworld.com/gfwlist -server=/avgle.com/127.0.0.1#5335 -ipset=/avgle.com/gfwlist -server=/ixquick.com/127.0.0.1#5335 -ipset=/ixquick.com/gfwlist -server=/volvobuses.ch/127.0.0.1#5335 -ipset=/volvobuses.ch/gfwlist -server=/ebayimg.com/127.0.0.1#5335 -ipset=/ebayimg.com/gfwlist -server=/registerhulu.com/127.0.0.1#5335 -ipset=/registerhulu.com/gfwlist -server=/ok.ru/127.0.0.1#5335 -ipset=/ok.ru/gfwlist -server=/durex.ru/127.0.0.1#5335 -ipset=/durex.ru/gfwlist -server=/volvotrucks.ch/127.0.0.1#5335 -ipset=/volvotrucks.ch/gfwlist -server=/bmw-motorrad.co.za/127.0.0.1#5335 -ipset=/bmw-motorrad.co.za/gfwlist -server=/lolpcs.com/127.0.0.1#5335 -ipset=/lolpcs.com/gfwlist -server=/visa.co.ao/127.0.0.1#5335 -ipset=/visa.co.ao/gfwlist -server=/dreamtoplay.com/127.0.0.1#5335 -ipset=/dreamtoplay.com/gfwlist -server=/paypal-notify.com/127.0.0.1#5335 -ipset=/paypal-notify.com/gfwlist -server=/buydrdrebeatbox.com/127.0.0.1#5335 -ipset=/buydrdrebeatbox.com/gfwlist -server=/tryfunctions.com/127.0.0.1#5335 -ipset=/tryfunctions.com/gfwlist -server=/disney.com.br/127.0.0.1#5335 -ipset=/disney.com.br/gfwlist -server=/pypl.info/127.0.0.1#5335 -ipset=/pypl.info/gfwlist -server=/family.co.jp/127.0.0.1#5335 -ipset=/family.co.jp/gfwlist -server=/finish.com.tr/127.0.0.1#5335 -ipset=/finish.com.tr/gfwlist -server=/nbcuni.com/127.0.0.1#5335 -ipset=/nbcuni.com/gfwlist -server=/account-paypal.org/127.0.0.1#5335 -ipset=/account-paypal.org/gfwlist -server=/altera.com/127.0.0.1#5335 -ipset=/altera.com/gfwlist -server=/ubisoft.com/127.0.0.1#5335 -ipset=/ubisoft.com/gfwlist -server=/voasomali.com/127.0.0.1#5335 -ipset=/voasomali.com/gfwlist -server=/audiobeatsbydre.com/127.0.0.1#5335 -ipset=/audiobeatsbydre.com/gfwlist -server=/beatsbydreonlie2013-nl.com/127.0.0.1#5335 -ipset=/beatsbydreonlie2013-nl.com/gfwlist -server=/xboxab.com/127.0.0.1#5335 -ipset=/xboxab.com/gfwlist -server=/intel.ar/127.0.0.1#5335 -ipset=/intel.ar/gfwlist -server=/fox23maine.com/127.0.0.1#5335 -ipset=/fox23maine.com/gfwlist -server=/youtube.mx/127.0.0.1#5335 -ipset=/youtube.mx/gfwlist -server=/bmw-connecteddrive.nl/127.0.0.1#5335 -ipset=/bmw-connecteddrive.nl/gfwlist -server=/google.com.cu/127.0.0.1#5335 -ipset=/google.com.cu/gfwlist -server=/xhamster.com/127.0.0.1#5335 -ipset=/xhamster.com/gfwlist -server=/nikehyperdunk.com/127.0.0.1#5335 -ipset=/nikehyperdunk.com/gfwlist -server=/ieeenano.org/127.0.0.1#5335 -ipset=/ieeenano.org/gfwlist -server=/ltn.com.tw/127.0.0.1#5335 -ipset=/ltn.com.tw/gfwlist -server=/calgonit.com/127.0.0.1#5335 -ipset=/calgonit.com/gfwlist -server=/shopee.com.my/127.0.0.1#5335 -ipset=/shopee.com.my/gfwlist -server=/sonypcl.jp/127.0.0.1#5335 -ipset=/sonypcl.jp/gfwlist -server=/paypalhere.tv/127.0.0.1#5335 -ipset=/paypalhere.tv/gfwlist -server=/blogspot.ro/127.0.0.1#5335 -ipset=/blogspot.ro/gfwlist -server=/vanish.it/127.0.0.1#5335 -ipset=/vanish.it/gfwlist -server=/bmwconnecteddrive.com/127.0.0.1#5335 -ipset=/bmwconnecteddrive.com/gfwlist -server=/scholar.google.hu/127.0.0.1#5335 -ipset=/scholar.google.hu/gfwlist -server=/canon.cz/127.0.0.1#5335 -ipset=/canon.cz/gfwlist -server=/dajiyuan.eu/127.0.0.1#5335 -ipset=/dajiyuan.eu/gfwlist -server=/vod-thumb-uk-live.akamaized.net/127.0.0.1#5335 -ipset=/vod-thumb-uk-live.akamaized.net/gfwlist -server=/yahoo.gr/127.0.0.1#5335 -ipset=/yahoo.gr/gfwlist -server=/lgecareers.com/127.0.0.1#5335 -ipset=/lgecareers.com/gfwlist -server=/voacantonese.com/127.0.0.1#5335 -ipset=/voacantonese.com/gfwlist -server=/ipadmini.cm/127.0.0.1#5335 -ipset=/ipadmini.cm/gfwlist -server=/pdf.new/127.0.0.1#5335 -ipset=/pdf.new/gfwlist -server=/cebay.com/127.0.0.1#5335 -ipset=/cebay.com/gfwlist -server=/cbsstatic.com/127.0.0.1#5335 -ipset=/cbsstatic.com/gfwlist -server=/appletips.net/127.0.0.1#5335 -ipset=/appletips.net/gfwlist -server=/pokemon-moon.com/127.0.0.1#5335 -ipset=/pokemon-moon.com/gfwlist -server=/facebookthreads.net/127.0.0.1#5335 -ipset=/facebookthreads.net/gfwlist -server=/disneymagicmoments.es/127.0.0.1#5335 -ipset=/disneymagicmoments.es/gfwlist -server=/airwick.ca/127.0.0.1#5335 -ipset=/airwick.ca/gfwlist -server=/durexcanada.com/127.0.0.1#5335 -ipset=/durexcanada.com/gfwlist -server=/fox5ny.com/127.0.0.1#5335 -ipset=/fox5ny.com/gfwlist -server=/wwwinstagram.com/127.0.0.1#5335 -ipset=/wwwinstagram.com/gfwlist -server=/bloombergchina.com/127.0.0.1#5335 -ipset=/bloombergchina.com/gfwlist -server=/docker.com/127.0.0.1#5335 -ipset=/docker.com/gfwlist -server=/cheapbeatsbydrdrepro.com/127.0.0.1#5335 -ipset=/cheapbeatsbydrdrepro.com/gfwlist -server=/eebay.com/127.0.0.1#5335 -ipset=/eebay.com/gfwlist -server=/pricelessmarketingengine.com/127.0.0.1#5335 -ipset=/pricelessmarketingengine.com/gfwlist -server=/bmw-motorrad.se/127.0.0.1#5335 -ipset=/bmw-motorrad.se/gfwlist -server=/tvbeventpower.com.hk/127.0.0.1#5335 -ipset=/tvbeventpower.com.hk/gfwlist -server=/ebayshop111.com/127.0.0.1#5335 -ipset=/ebayshop111.com/gfwlist -server=/soccerfanz.com.my/127.0.0.1#5335 -ipset=/soccerfanz.com.my/gfwlist -server=/wiley.com/127.0.0.1#5335 -ipset=/wiley.com/gfwlist -server=/beatsonblackfriday2013.com/127.0.0.1#5335 -ipset=/beatsonblackfriday2013.com/gfwlist -server=/mymmode.com/127.0.0.1#5335 -ipset=/mymmode.com/gfwlist -server=/visa.fr/127.0.0.1#5335 -ipset=/visa.fr/gfwlist -server=/line.naver.jp/127.0.0.1#5335 -ipset=/line.naver.jp/gfwlist -server=/starbucks.ch/127.0.0.1#5335 -ipset=/starbucks.ch/gfwlist -server=/rclon.com/127.0.0.1#5335 -ipset=/rclon.com/gfwlist -server=/mypearsonshop.com.mx/127.0.0.1#5335 -ipset=/mypearsonshop.com.mx/gfwlist -server=/sony.com.bo/127.0.0.1#5335 -ipset=/sony.com.bo/gfwlist -server=/mini.dz/127.0.0.1#5335 -ipset=/mini.dz/gfwlist -server=/928.plus/127.0.0.1#5335 -ipset=/928.plus/gfwlist -server=/speedracegear.com/127.0.0.1#5335 -ipset=/speedracegear.com/gfwlist -server=/prodrive-japan.com/127.0.0.1#5335 -ipset=/prodrive-japan.com/gfwlist -server=/bitquick.co/127.0.0.1#5335 -ipset=/bitquick.co/gfwlist -server=/yahoo.com.tw/127.0.0.1#5335 -ipset=/yahoo.com.tw/gfwlist -server=/itunesu.com/127.0.0.1#5335 -ipset=/itunesu.com/gfwlist -server=/macosforge.org/127.0.0.1#5335 -ipset=/macosforge.org/gfwlist -server=/buyonlineheadphones.com/127.0.0.1#5335 -ipset=/buyonlineheadphones.com/gfwlist -server=/truedepth3d.com/127.0.0.1#5335 -ipset=/truedepth3d.com/gfwlist -server=/wwwebay.com/127.0.0.1#5335 -ipset=/wwwebay.com/gfwlist -server=/mirrorsedge.net/127.0.0.1#5335 -ipset=/mirrorsedge.net/gfwlist -server=/buyaapl.net/127.0.0.1#5335 -ipset=/buyaapl.net/gfwlist -server=/zoomingin.tv/127.0.0.1#5335 -ipset=/zoomingin.tv/gfwlist -server=/adobedc.net/127.0.0.1#5335 -ipset=/adobedc.net/gfwlist -server=/minivilledequebec.com/127.0.0.1#5335 -ipset=/minivilledequebec.com/gfwlist -server=/sndcdn.com/127.0.0.1#5335 -ipset=/sndcdn.com/gfwlist -server=/daytontrucktires.com/127.0.0.1#5335 -ipset=/daytontrucktires.com/gfwlist -server=/yandex.uz/127.0.0.1#5335 -ipset=/yandex.uz/gfwlist -server=/cabletvdirectv.com/127.0.0.1#5335 -ipset=/cabletvdirectv.com/gfwlist -server=/ebaymag.com/127.0.0.1#5335 -ipset=/ebaymag.com/gfwlist -server=/icloudhome.com/127.0.0.1#5335 -ipset=/icloudhome.com/gfwlist -server=/rtm.tnt-ea.com/127.0.0.1#5335 -ipset=/rtm.tnt-ea.com/gfwlist -server=/getdrebeatssale.com/127.0.0.1#5335 -ipset=/getdrebeatssale.com/gfwlist -server=/apple.co.kr/127.0.0.1#5335 -ipset=/apple.co.kr/gfwlist -server=/dealerspeed.net/127.0.0.1#5335 -ipset=/dealerspeed.net/gfwlist -server=/freeviewplus.net.au/127.0.0.1#5335 -ipset=/freeviewplus.net.au/gfwlist -server=/herokucdn.com/127.0.0.1#5335 -ipset=/herokucdn.com/gfwlist -server=/hpspeaker.com/127.0.0.1#5335 -ipset=/hpspeaker.com/gfwlist -server=/bisq.network/127.0.0.1#5335 -ipset=/bisq.network/gfwlist -server=/globalsecurity.org/127.0.0.1#5335 -ipset=/globalsecurity.org/gfwlist -server=/0x0.st/127.0.0.1#5335 -ipset=/0x0.st/gfwlist -server=/durex.co.th/127.0.0.1#5335 -ipset=/durex.co.th/gfwlist -server=/daoc.net/127.0.0.1#5335 -ipset=/daoc.net/gfwlist -server=/theav.cc/127.0.0.1#5335 -ipset=/theav.cc/gfwlist -server=/dmmapis.com/127.0.0.1#5335 -ipset=/dmmapis.com/gfwlist -server=/disney-asia.com/127.0.0.1#5335 -ipset=/disney-asia.com/gfwlist -server=/apple.hn/127.0.0.1#5335 -ipset=/apple.hn/gfwlist -server=/binance.cloud/127.0.0.1#5335 -ipset=/binance.cloud/gfwlist -server=/hackerguardian.com/127.0.0.1#5335 -ipset=/hackerguardian.com/gfwlist -server=/ams02.space/127.0.0.1#5335 -ipset=/ams02.space/gfwlist -server=/sony.it/127.0.0.1#5335 -ipset=/sony.it/gfwlist -server=/bmwusfactory.com/127.0.0.1#5335 -ipset=/bmwusfactory.com/gfwlist -server=/disney.com.tw/127.0.0.1#5335 -ipset=/disney.com.tw/gfwlist -server=/youtube.bo/127.0.0.1#5335 -ipset=/youtube.bo/gfwlist -server=/herokussl.com/127.0.0.1#5335 -ipset=/herokussl.com/gfwlist -server=/harpercollins.com.au/127.0.0.1#5335 -ipset=/harpercollins.com.au/gfwlist -server=/beatsbydrediscount.com/127.0.0.1#5335 -ipset=/beatsbydrediscount.com/gfwlist -server=/instagramhashtags.net/127.0.0.1#5335 -ipset=/instagramhashtags.net/gfwlist -server=/ebayy.com/127.0.0.1#5335 -ipset=/ebayy.com/gfwlist -server=/rolls-roycemotorcars.com/127.0.0.1#5335 -ipset=/rolls-roycemotorcars.com/gfwlist -server=/google.co.jp/127.0.0.1#5335 -ipset=/google.co.jp/gfwlist -server=/7mm.tv/127.0.0.1#5335 -ipset=/7mm.tv/gfwlist -server=/archiveofourown.org/127.0.0.1#5335 -ipset=/archiveofourown.org/gfwlist -server=/bmw-antilles.fr/127.0.0.1#5335 -ipset=/bmw-antilles.fr/gfwlist -server=/unstyle.us/127.0.0.1#5335 -ipset=/unstyle.us/gfwlist -server=/yandexcloud.net/127.0.0.1#5335 -ipset=/yandexcloud.net/gfwlist -server=/ubi.com/127.0.0.1#5335 -ipset=/ubi.com/gfwlist -server=/4cdn.org/127.0.0.1#5335 -ipset=/4cdn.org/gfwlist -server=/ds-linear-abematv.akamaized.net/127.0.0.1#5335 -ipset=/ds-linear-abematv.akamaized.net/gfwlist -server=/akamai.co.kr/127.0.0.1#5335 -ipset=/akamai.co.kr/gfwlist -server=/trello.com/127.0.0.1#5335 -ipset=/trello.com/gfwlist -server=/nikeelite.com/127.0.0.1#5335 -ipset=/nikeelite.com/gfwlist -server=/nomulus.foo/127.0.0.1#5335 -ipset=/nomulus.foo/gfwlist -server=/telegram.dog/127.0.0.1#5335 -ipset=/telegram.dog/gfwlist -server=/beatsblackfridayretails.com/127.0.0.1#5335 -ipset=/beatsblackfridayretails.com/gfwlist -server=/whatsapp.com/127.0.0.1#5335 -ipset=/whatsapp.com/gfwlist -server=/bmw-connecteddrive.no/127.0.0.1#5335 -ipset=/bmw-connecteddrive.no/gfwlist -server=/na-att-idns.net/127.0.0.1#5335 -ipset=/na-att-idns.net/gfwlist -server=/geeksquad.ca/127.0.0.1#5335 -ipset=/geeksquad.ca/gfwlist -server=/ipod.ch/127.0.0.1#5335 -ipset=/ipod.ch/gfwlist -server=/bloombergquint.com/127.0.0.1#5335 -ipset=/bloombergquint.com/gfwlist -server=/volvo.ca/127.0.0.1#5335 -ipset=/volvo.ca/gfwlist -server=/hulunet.com/127.0.0.1#5335 -ipset=/hulunet.com/gfwlist -server=/hindawi.com/127.0.0.1#5335 -ipset=/hindawi.com/gfwlist -server=/onefifteen.net/127.0.0.1#5335 -ipset=/onefifteen.net/gfwlist -server=/toplayerserver.com/127.0.0.1#5335 -ipset=/toplayerserver.com/gfwlist -server=/dmm.co.jp/127.0.0.1#5335 -ipset=/dmm.co.jp/gfwlist -server=/wanokokorosoh.com/127.0.0.1#5335 -ipset=/wanokokorosoh.com/gfwlist -server=/shopibay.net/127.0.0.1#5335 -ipset=/shopibay.net/gfwlist -server=/mbeats-tech.com/127.0.0.1#5335 -ipset=/mbeats-tech.com/gfwlist -server=/cnnarabic.com/127.0.0.1#5335 -ipset=/cnnarabic.com/gfwlist -server=/myappleid.com/127.0.0.1#5335 -ipset=/myappleid.com/gfwlist -server=/salesforceiq.com/127.0.0.1#5335 -ipset=/salesforceiq.com/gfwlist -server=/fxnetwork.com/127.0.0.1#5335 -ipset=/fxnetwork.com/gfwlist -server=/bmw.co.ao/127.0.0.1#5335 -ipset=/bmw.co.ao/gfwlist -server=/betterexplained.com/127.0.0.1#5335 -ipset=/betterexplained.com/gfwlist -server=/google.ga/127.0.0.1#5335 -ipset=/google.ga/gfwlist -server=/google.no/127.0.0.1#5335 -ipset=/google.no/gfwlist -server=/worldofwarcraft.com/127.0.0.1#5335 -ipset=/worldofwarcraft.com/gfwlist -server=/youtube.is/127.0.0.1#5335 -ipset=/youtube.is/gfwlist -server=/sony.dk/127.0.0.1#5335 -ipset=/sony.dk/gfwlist -server=/appletv.fr/127.0.0.1#5335 -ipset=/appletv.fr/gfwlist -server=/storyful.com/127.0.0.1#5335 -ipset=/storyful.com/gfwlist -server=/bmw.es/127.0.0.1#5335 -ipset=/bmw.es/gfwlist -server=/sub147.com/127.0.0.1#5335 -ipset=/sub147.com/gfwlist -server=/facebboc.com/127.0.0.1#5335 -ipset=/facebboc.com/gfwlist -server=/myfoxtampa.com/127.0.0.1#5335 -ipset=/myfoxtampa.com/gfwlist -server=/miniso.ca/127.0.0.1#5335 -ipset=/miniso.ca/gfwlist -server=/itunesfestivals.com/127.0.0.1#5335 -ipset=/itunesfestivals.com/gfwlist -server=/disquscdn.com/127.0.0.1#5335 -ipset=/disquscdn.com/gfwlist -server=/pastebin.com/127.0.0.1#5335 -ipset=/pastebin.com/gfwlist -server=/enfagrow4.com/127.0.0.1#5335 -ipset=/enfagrow4.com/gfwlist -server=/applenews.tv/127.0.0.1#5335 -ipset=/applenews.tv/gfwlist -server=/beatspascher-bydre.com/127.0.0.1#5335 -ipset=/beatspascher-bydre.com/gfwlist -server=/nintendo.no/127.0.0.1#5335 -ipset=/nintendo.no/gfwlist -server=/bmwauslieferungszentrum.com/127.0.0.1#5335 -ipset=/bmwauslieferungszentrum.com/gfwlist -server=/nbcnews.com/127.0.0.1#5335 -ipset=/nbcnews.com/gfwlist -server=/volvogroup.com.br/127.0.0.1#5335 -ipset=/volvogroup.com.br/gfwlist -server=/harpercollins.ca/127.0.0.1#5335 -ipset=/harpercollins.ca/gfwlist -server=/www-cdn.icloud.com.akadns.net/127.0.0.1#5335 -ipset=/www-cdn.icloud.com.akadns.net/gfwlist -server=/bbc.net.uk/127.0.0.1#5335 -ipset=/bbc.net.uk/gfwlist -server=/volvotrucks.co.za/127.0.0.1#5335 -ipset=/volvotrucks.co.za/gfwlist -server=/appleaustralia.net.au/127.0.0.1#5335 -ipset=/appleaustralia.net.au/gfwlist -server=/my-magazine.me/127.0.0.1#5335 -ipset=/my-magazine.me/gfwlist -server=/cnshopin.com/127.0.0.1#5335 -ipset=/cnshopin.com/gfwlist -server=/matters.news/127.0.0.1#5335 -ipset=/matters.news/gfwlist -server=/keytransparency.foo/127.0.0.1#5335 -ipset=/keytransparency.foo/gfwlist -server=/google.ru/127.0.0.1#5335 -ipset=/google.ru/gfwlist -server=/paypal-corp.com/127.0.0.1#5335 -ipset=/paypal-corp.com/gfwlist -server=/intelamericasstore.com/127.0.0.1#5335 -ipset=/intelamericasstore.com/gfwlist -server=/foxcredit.org/127.0.0.1#5335 -ipset=/foxcredit.org/gfwlist -server=/applestore.com.hk/127.0.0.1#5335 -ipset=/applestore.com.hk/gfwlist -server=/google.com.gt/127.0.0.1#5335 -ipset=/google.com.gt/gfwlist -server=/charlestonroadregistry.com/127.0.0.1#5335 -ipset=/charlestonroadregistry.com/gfwlist -server=/asha.org/127.0.0.1#5335 -ipset=/asha.org/gfwlist -server=/creativesdk.com/127.0.0.1#5335 -ipset=/creativesdk.com/gfwlist -server=/fox46.com/127.0.0.1#5335 -ipset=/fox46.com/gfwlist -server=/reddit.com/127.0.0.1#5335 -ipset=/reddit.com/gfwlist -server=/asianpornmovies.com/127.0.0.1#5335 -ipset=/asianpornmovies.com/gfwlist -server=/cloudrobotics.com/127.0.0.1#5335 -ipset=/cloudrobotics.com/gfwlist -server=/java.net/127.0.0.1#5335 -ipset=/java.net/gfwlist -server=/pokemon-sun.com/127.0.0.1#5335 -ipset=/pokemon-sun.com/gfwlist -server=/ieeemce.org/127.0.0.1#5335 -ipset=/ieeemce.org/gfwlist -server=/koubaibu.jp/127.0.0.1#5335 -ipset=/koubaibu.jp/gfwlist -server=/volvobuses.de/127.0.0.1#5335 -ipset=/volvobuses.de/gfwlist -server=/bmw-oman.com/127.0.0.1#5335 -ipset=/bmw-oman.com/gfwlist -server=/uun99.com/127.0.0.1#5335 -ipset=/uun99.com/gfwlist -server=/gopivotal.net/127.0.0.1#5335 -ipset=/gopivotal.net/gfwlist -server=/ebayclassifieds.info/127.0.0.1#5335 -ipset=/ebayclassifieds.info/gfwlist -server=/manyvids.com/127.0.0.1#5335 -ipset=/manyvids.com/gfwlist -server=/volvotrucks.it/127.0.0.1#5335 -ipset=/volvotrucks.it/gfwlist -server=/pearson.cl/127.0.0.1#5335 -ipset=/pearson.cl/gfwlist -server=/epochcar.com/127.0.0.1#5335 -ipset=/epochcar.com/gfwlist -server=/cdnpure.com/127.0.0.1#5335 -ipset=/cdnpure.com/gfwlist -server=/lululu.one/127.0.0.1#5335 -ipset=/lululu.one/gfwlist -server=/cinemax.com/127.0.0.1#5335 -ipset=/cinemax.com/gfwlist -server=/movidius.com/127.0.0.1#5335 -ipset=/movidius.com/gfwlist -server=/whatisairwatch.com/127.0.0.1#5335 -ipset=/whatisairwatch.com/gfwlist -server=/pvzgw2.com/127.0.0.1#5335 -ipset=/pvzgw2.com/gfwlist -server=/1e100.net/127.0.0.1#5335 -ipset=/1e100.net/gfwlist -server=/mastercardidtheftalerts.com/127.0.0.1#5335 -ipset=/mastercardidtheftalerts.com/gfwlist -server=/paypal-secure.net/127.0.0.1#5335 -ipset=/paypal-secure.net/gfwlist -server=/nike-fr.com/127.0.0.1#5335 -ipset=/nike-fr.com/gfwlist -server=/tedcdn.com/127.0.0.1#5335 -ipset=/tedcdn.com/gfwlist -server=/facebookgames.com/127.0.0.1#5335 -ipset=/facebookgames.com/gfwlist -server=/youtube.com.ua/127.0.0.1#5335 -ipset=/youtube.com.ua/gfwlist -server=/twitchcdn.net/127.0.0.1#5335 -ipset=/twitchcdn.net/gfwlist -server=/intunewiki.com/127.0.0.1#5335 -ipset=/intunewiki.com/gfwlist -server=/vmwsalesrewards.com/127.0.0.1#5335 -ipset=/vmwsalesrewards.com/gfwlist -server=/bitnami.com/127.0.0.1#5335 -ipset=/bitnami.com/gfwlist -server=/beatsdreforsale.com/127.0.0.1#5335 -ipset=/beatsdreforsale.com/gfwlist -server=/disneynewseries.com/127.0.0.1#5335 -ipset=/disneynewseries.com/gfwlist -server=/intel.dz/127.0.0.1#5335 -ipset=/intel.dz/gfwlist -server=/conair.me/127.0.0.1#5335 -ipset=/conair.me/gfwlist -server=/applewatch.tv/127.0.0.1#5335 -ipset=/applewatch.tv/gfwlist -server=/nvidia.fi/127.0.0.1#5335 -ipset=/nvidia.fi/gfwlist -server=/nvidia.it/127.0.0.1#5335 -ipset=/nvidia.it/gfwlist -server=/nikefoamposites.com/127.0.0.1#5335 -ipset=/nikefoamposites.com/gfwlist -server=/pentium.com/127.0.0.1#5335 -ipset=/pentium.com/gfwlist -server=/cispaletter.com/127.0.0.1#5335 -ipset=/cispaletter.com/gfwlist -server=/buyminibeatbox.com/127.0.0.1#5335 -ipset=/buyminibeatbox.com/gfwlist -server=/volvotrucks.tn/127.0.0.1#5335 -ipset=/volvotrucks.tn/gfwlist -server=/bmwperformancecenter.com/127.0.0.1#5335 -ipset=/bmwperformancecenter.com/gfwlist -server=/adbecrsl.com/127.0.0.1#5335 -ipset=/adbecrsl.com/gfwlist -server=/newscorp.com/127.0.0.1#5335 -ipset=/newscorp.com/gfwlist -server=/paypal-profile.com/127.0.0.1#5335 -ipset=/paypal-profile.com/gfwlist -server=/yandex.st/127.0.0.1#5335 -ipset=/yandex.st/gfwlist -server=/vfsco.bg/127.0.0.1#5335 -ipset=/vfsco.bg/gfwlist -server=/ebaycoins.com/127.0.0.1#5335 -ipset=/ebaycoins.com/gfwlist -server=/awsstatic.com/127.0.0.1#5335 -ipset=/awsstatic.com/gfwlist -server=/bmw.md/127.0.0.1#5335 -ipset=/bmw.md/gfwlist -server=/facebookdating.net/127.0.0.1#5335 -ipset=/facebookdating.net/gfwlist -server=/gosq.com/127.0.0.1#5335 -ipset=/gosq.com/gfwlist -server=/instagainer.com/127.0.0.1#5335 -ipset=/instagainer.com/gfwlist -server=/a.kslive.tv/127.0.0.1#5335 -ipset=/a.kslive.tv/gfwlist -server=/pincong.rocks/127.0.0.1#5335 -ipset=/pincong.rocks/gfwlist -server=/blpprofessional.com/127.0.0.1#5335 -ipset=/blpprofessional.com/gfwlist -server=/4myminicard.com/127.0.0.1#5335 -ipset=/4myminicard.com/gfwlist -server=/uhub.com/127.0.0.1#5335 -ipset=/uhub.com/gfwlist -server=/datasheets360.com/127.0.0.1#5335 -ipset=/datasheets360.com/gfwlist -server=/airwick.us/127.0.0.1#5335 -ipset=/airwick.us/gfwlist -server=/cricketcountry.com/127.0.0.1#5335 -ipset=/cricketcountry.com/gfwlist -server=/pinterest.ru/127.0.0.1#5335 -ipset=/pinterest.ru/gfwlist -server=/adidas.cz/127.0.0.1#5335 -ipset=/adidas.cz/gfwlist -server=/rarbg.is/127.0.0.1#5335 -ipset=/rarbg.is/gfwlist -server=/businessinsider.com/127.0.0.1#5335 -ipset=/businessinsider.com/gfwlist -server=/torproject.org/127.0.0.1#5335 -ipset=/torproject.org/gfwlist -server=/visa.gr/127.0.0.1#5335 -ipset=/visa.gr/gfwlist -server=/txvia.com/127.0.0.1#5335 -ipset=/txvia.com/gfwlist -server=/daytonbmw.com/127.0.0.1#5335 -ipset=/daytonbmw.com/gfwlist -server=/netflixdnstest5.com/127.0.0.1#5335 -ipset=/netflixdnstest5.com/gfwlist -server=/newsukadops.com/127.0.0.1#5335 -ipset=/newsukadops.com/gfwlist -server=/applepay.jp/127.0.0.1#5335 -ipset=/applepay.jp/gfwlist -server=/jav321.com/127.0.0.1#5335 -ipset=/jav321.com/gfwlist -server=/finish.lv/127.0.0.1#5335 -ipset=/finish.lv/gfwlist -server=/fbinfer.com/127.0.0.1#5335 -ipset=/fbinfer.com/gfwlist -server=/thetimes.co.uk/127.0.0.1#5335 -ipset=/thetimes.co.uk/gfwlist -server=/picnik.com/127.0.0.1#5335 -ipset=/picnik.com/gfwlist -server=/starbucksathome.com/127.0.0.1#5335 -ipset=/starbucksathome.com/gfwlist -server=/qualcommlabs.com/127.0.0.1#5335 -ipset=/qualcommlabs.com/gfwlist -server=/bmw.com.my/127.0.0.1#5335 -ipset=/bmw.com.my/gfwlist -server=/applepaysupplies.net/127.0.0.1#5335 -ipset=/applepaysupplies.net/gfwlist -server=/faeboook.com/127.0.0.1#5335 -ipset=/faeboook.com/gfwlist -server=/ecimg.tw/127.0.0.1#5335 -ipset=/ecimg.tw/gfwlist -server=/duckduckgo.ke/127.0.0.1#5335 -ipset=/duckduckgo.ke/gfwlist -server=/dogatch.jp/127.0.0.1#5335 -ipset=/dogatch.jp/gfwlist -server=/guardianapps.co.uk/127.0.0.1#5335 -ipset=/guardianapps.co.uk/gfwlist -server=/durex.com.tr/127.0.0.1#5335 -ipset=/durex.com.tr/gfwlist -server=/amazonprimevideos.com/127.0.0.1#5335 -ipset=/amazonprimevideos.com/gfwlist -server=/mastercard.com/127.0.0.1#5335 -ipset=/mastercard.com/gfwlist -server=/earphonescheapest.com/127.0.0.1#5335 -ipset=/earphonescheapest.com/gfwlist -server=/insiderintelligence.com/127.0.0.1#5335 -ipset=/insiderintelligence.com/gfwlist -server=/bridgestonemarketing.com/127.0.0.1#5335 -ipset=/bridgestonemarketing.com/gfwlist -server=/connectcommerce.info/127.0.0.1#5335 -ipset=/connectcommerce.info/gfwlist -server=/bmw-ghana.com/127.0.0.1#5335 -ipset=/bmw-ghana.com/gfwlist -server=/microsoftads.com/127.0.0.1#5335 -ipset=/microsoftads.com/gfwlist -server=/reuters.com/127.0.0.1#5335 -ipset=/reuters.com/gfwlist -server=/payhulu.com/127.0.0.1#5335 -ipset=/payhulu.com/gfwlist -server=/vanish.at/127.0.0.1#5335 -ipset=/vanish.at/gfwlist -server=/gfycat.com/127.0.0.1#5335 -ipset=/gfycat.com/gfwlist -server=/google.be/127.0.0.1#5335 -ipset=/google.be/gfwlist -server=/vfsco.lv/127.0.0.1#5335 -ipset=/vfsco.lv/gfwlist -server=/oann.com/127.0.0.1#5335 -ipset=/oann.com/gfwlist -server=/smartonesolutions.com.hk/127.0.0.1#5335 -ipset=/smartonesolutions.com.hk/gfwlist -server=/ebayenterprise.com/127.0.0.1#5335 -ipset=/ebayenterprise.com/gfwlist -server=/pittpatt.com/127.0.0.1#5335 -ipset=/pittpatt.com/gfwlist -server=/blackfridaydrebeatsshop.com/127.0.0.1#5335 -ipset=/blackfridaydrebeatsshop.com/gfwlist -server=/zdusercontent.com/127.0.0.1#5335 -ipset=/zdusercontent.com/gfwlist -server=/amznl.com/127.0.0.1#5335 -ipset=/amznl.com/gfwlist -server=/incentivetravelgifts.com/127.0.0.1#5335 -ipset=/incentivetravelgifts.com/gfwlist -server=/volvotrucks.rs/127.0.0.1#5335 -ipset=/volvotrucks.rs/gfwlist -server=/youtube.com.ng/127.0.0.1#5335 -ipset=/youtube.com.ng/gfwlist -server=/reuters.tv/127.0.0.1#5335 -ipset=/reuters.tv/gfwlist -server=/vmwdemo.com/127.0.0.1#5335 -ipset=/vmwdemo.com/gfwlist -server=/facebzook.com/127.0.0.1#5335 -ipset=/facebzook.com/gfwlist -server=/intel.si/127.0.0.1#5335 -ipset=/intel.si/gfwlist -server=/thomsonreuters.com.my/127.0.0.1#5335 -ipset=/thomsonreuters.com.my/gfwlist -server=/putty.org/127.0.0.1#5335 -ipset=/putty.org/gfwlist -server=/voahausa.com/127.0.0.1#5335 -ipset=/voahausa.com/gfwlist -server=/mini-connected.cz/127.0.0.1#5335 -ipset=/mini-connected.cz/gfwlist -server=/sonybo.co.jp/127.0.0.1#5335 -ipset=/sonybo.co.jp/gfwlist -server=/apple-mapkit.com/127.0.0.1#5335 -ipset=/apple-mapkit.com/gfwlist -server=/businessinsider.fr/127.0.0.1#5335 -ipset=/businessinsider.fr/gfwlist -server=/nekoxxx.com/127.0.0.1#5335 -ipset=/nekoxxx.com/gfwlist -server=/digitalassetlinks.org/127.0.0.1#5335 -ipset=/digitalassetlinks.org/gfwlist -server=/javfor.me/127.0.0.1#5335 -ipset=/javfor.me/gfwlist -server=/monsterbeatstudio.com/127.0.0.1#5335 -ipset=/monsterbeatstudio.com/gfwlist -server=/iphone.com/127.0.0.1#5335 -ipset=/iphone.com/gfwlist -server=/php.net/127.0.0.1#5335 -ipset=/php.net/gfwlist -server=/snapcraft.io/127.0.0.1#5335 -ipset=/snapcraft.io/gfwlist -server=/beatsstudiohodetelefoner.com/127.0.0.1#5335 -ipset=/beatsstudiohodetelefoner.com/gfwlist -server=/mdpi.com/127.0.0.1#5335 -ipset=/mdpi.com/gfwlist -server=/nginx.org/127.0.0.1#5335 -ipset=/nginx.org/gfwlist -server=/paypal-redeem.com/127.0.0.1#5335 -ipset=/paypal-redeem.com/gfwlist -server=/canon.ee/127.0.0.1#5335 -ipset=/canon.ee/gfwlist -server=/marketolive.com/127.0.0.1#5335 -ipset=/marketolive.com/gfwlist -server=/bridgestone.com.br/127.0.0.1#5335 -ipset=/bridgestone.com.br/gfwlist -server=/scholar.google.com.ly/127.0.0.1#5335 -ipset=/scholar.google.com.ly/gfwlist -server=/emagic.de/127.0.0.1#5335 -ipset=/emagic.de/gfwlist -server=/shopdisney.com/127.0.0.1#5335 -ipset=/shopdisney.com/gfwlist -server=/foxsports.net/127.0.0.1#5335 -ipset=/foxsports.net/gfwlist -server=/beatsep.com/127.0.0.1#5335 -ipset=/beatsep.com/gfwlist -server=/paypal-merchantloyalty.com/127.0.0.1#5335 -ipset=/paypal-merchantloyalty.com/gfwlist -server=/jkbeats.com/127.0.0.1#5335 -ipset=/jkbeats.com/gfwlist -server=/visakorea.com/127.0.0.1#5335 -ipset=/visakorea.com/gfwlist -server=/universalpicturesinternational.com/127.0.0.1#5335 -ipset=/universalpicturesinternational.com/gfwlist -server=/mastercard.com.sa/127.0.0.1#5335 -ipset=/mastercard.com.sa/gfwlist -server=/vilavpn.com/127.0.0.1#5335 -ipset=/vilavpn.com/gfwlist -server=/skyoceanrescue.de/127.0.0.1#5335 -ipset=/skyoceanrescue.de/gfwlist -server=/bucketeer.jp/127.0.0.1#5335 -ipset=/bucketeer.jp/gfwlist -server=/namemybeats.com/127.0.0.1#5335 -ipset=/namemybeats.com/gfwlist -server=/facebooj.com/127.0.0.1#5335 -ipset=/facebooj.com/gfwlist -server=/jstage.jst.go.jp/127.0.0.1#5335 -ipset=/jstage.jst.go.jp/gfwlist -server=/youtube.mk/127.0.0.1#5335 -ipset=/youtube.mk/gfwlist -server=/facebookawards.com/127.0.0.1#5335 -ipset=/facebookawards.com/gfwlist -server=/cloudflare-dns.com/127.0.0.1#5335 -ipset=/cloudflare-dns.com/gfwlist -server=/microsoftmxfilantropia.com/127.0.0.1#5335 -ipset=/microsoftmxfilantropia.com/gfwlist -server=/facecbgook.com/127.0.0.1#5335 -ipset=/facecbgook.com/gfwlist -server=/bmwgroup-posdigital.com/127.0.0.1#5335 -ipset=/bmwgroup-posdigital.com/gfwlist -server=/wiipartyu.com/127.0.0.1#5335 -ipset=/wiipartyu.com/gfwlist -server=/bridgestone.com.mx/127.0.0.1#5335 -ipset=/bridgestone.com.mx/gfwlist -server=/newsprinters.co.uk/127.0.0.1#5335 -ipset=/newsprinters.co.uk/gfwlist -server=/lolusercontent.com/127.0.0.1#5335 -ipset=/lolusercontent.com/gfwlist -server=/anaconda.org/127.0.0.1#5335 -ipset=/anaconda.org/gfwlist -server=/whychoosehorizon.com/127.0.0.1#5335 -ipset=/whychoosehorizon.com/gfwlist -server=/pinterest.co.uk/127.0.0.1#5335 -ipset=/pinterest.co.uk/gfwlist -server=/chromeos.dev/127.0.0.1#5335 -ipset=/chromeos.dev/gfwlist -server=/volvotrucks.com.ua/127.0.0.1#5335 -ipset=/volvotrucks.com.ua/gfwlist -server=/wrenchead.com/127.0.0.1#5335 -ipset=/wrenchead.com/gfwlist -server=/mariokart8.com/127.0.0.1#5335 -ipset=/mariokart8.com/gfwlist -server=/intercom.io/127.0.0.1#5335 -ipset=/intercom.io/gfwlist -server=/starbucks.co.id/127.0.0.1#5335 -ipset=/starbucks.co.id/gfwlist -server=/hpdrivers.com/127.0.0.1#5335 -ipset=/hpdrivers.com/gfwlist -server=/pearsonassessment.dk/127.0.0.1#5335 -ipset=/pearsonassessment.dk/gfwlist -server=/ktvu.com/127.0.0.1#5335 -ipset=/ktvu.com/gfwlist -server=/gittigidiyor.net/127.0.0.1#5335 -ipset=/gittigidiyor.net/gfwlist -server=/typeisbeautiful.com/127.0.0.1#5335 -ipset=/typeisbeautiful.com/gfwlist -server=/ciscoconnectcloud.org/127.0.0.1#5335 -ipset=/ciscoconnectcloud.org/gfwlist -server=/letsencrypt.org/127.0.0.1#5335 -ipset=/letsencrypt.org/gfwlist -server=/archive.org/127.0.0.1#5335 -ipset=/archive.org/gfwlist -server=/visa.com.bs/127.0.0.1#5335 -ipset=/visa.com.bs/gfwlist -server=/morisawa.co.jp/127.0.0.1#5335 -ipset=/morisawa.co.jp/gfwlist -server=/nikeaw77.com/127.0.0.1#5335 -ipset=/nikeaw77.com/gfwlist -server=/cbsinteractive.com/127.0.0.1#5335 -ipset=/cbsinteractive.com/gfwlist -server=/cashpassport.ca/127.0.0.1#5335 -ipset=/cashpassport.ca/gfwlist -server=/cordcloud.org/127.0.0.1#5335 -ipset=/cordcloud.org/gfwlist -server=/laracasts.com/127.0.0.1#5335 -ipset=/laracasts.com/gfwlist -server=/omotenashi.cygames.jp/127.0.0.1#5335 -ipset=/omotenashi.cygames.jp/gfwlist -server=/blogspot.al/127.0.0.1#5335 -ipset=/blogspot.al/gfwlist -server=/myfoxzone.com/127.0.0.1#5335 -ipset=/myfoxzone.com/gfwlist -server=/nvidia.be/127.0.0.1#5335 -ipset=/nvidia.be/gfwlist -server=/cslpldyb.me/127.0.0.1#5335 -ipset=/cslpldyb.me/gfwlist -server=/playwarcraft3.com/127.0.0.1#5335 -ipset=/playwarcraft3.com/gfwlist -server=/bbhub.io/127.0.0.1#5335 -ipset=/bbhub.io/gfwlist -server=/google.co.il/127.0.0.1#5335 -ipset=/google.co.il/gfwlist -server=/nintendoswitchtogether.com/127.0.0.1#5335 -ipset=/nintendoswitchtogether.com/gfwlist -server=/hegre.com/127.0.0.1#5335 -ipset=/hegre.com/gfwlist -server=/primevideo.org/127.0.0.1#5335 -ipset=/primevideo.org/gfwlist -server=/authorxml.com/127.0.0.1#5335 -ipset=/authorxml.com/gfwlist -server=/logitechg.com/127.0.0.1#5335 -ipset=/logitechg.com/gfwlist -server=/hawaiibmw.com/127.0.0.1#5335 -ipset=/hawaiibmw.com/gfwlist -server=/nicodic.jp/127.0.0.1#5335 -ipset=/nicodic.jp/gfwlist -server=/kindle.de/127.0.0.1#5335 -ipset=/kindle.de/gfwlist -server=/yahoo.bi/127.0.0.1#5335 -ipset=/yahoo.bi/gfwlist -server=/steamusercontent-a.akamaihd.net/127.0.0.1#5335 -ipset=/steamusercontent-a.akamaihd.net/gfwlist -server=/mageconf.com/127.0.0.1#5335 -ipset=/mageconf.com/gfwlist -server=/voatiengviet.com/127.0.0.1#5335 -ipset=/voatiengviet.com/gfwlist -server=/latencytop.com/127.0.0.1#5335 -ipset=/latencytop.com/gfwlist -server=/youtube.ly/127.0.0.1#5335 -ipset=/youtube.ly/gfwlist -server=/alexa.com/127.0.0.1#5335 -ipset=/alexa.com/gfwlist -server=/airport.brussels/127.0.0.1#5335 -ipset=/airport.brussels/gfwlist -server=/shopee.vn/127.0.0.1#5335 -ipset=/shopee.vn/gfwlist -server=/wikinews.org/127.0.0.1#5335 -ipset=/wikinews.org/gfwlist -server=/mini.si/127.0.0.1#5335 -ipset=/mini.si/gfwlist -server=/dontbubble.us/127.0.0.1#5335 -ipset=/dontbubble.us/gfwlist -server=/services-exchange.com/127.0.0.1#5335 -ipset=/services-exchange.com/gfwlist -server=/geeksquadonline.com/127.0.0.1#5335 -ipset=/geeksquadonline.com/gfwlist -server=/yes123.com.tw/127.0.0.1#5335 -ipset=/yes123.com.tw/gfwlist -server=/marketo.co.uk/127.0.0.1#5335 -ipset=/marketo.co.uk/gfwlist -server=/nintendo-europe.com/127.0.0.1#5335 -ipset=/nintendo-europe.com/gfwlist -server=/nxtdig.com.tw/127.0.0.1#5335 -ipset=/nxtdig.com.tw/gfwlist -server=/openstreetmaps.org/127.0.0.1#5335 -ipset=/openstreetmaps.org/gfwlist -server=/launchpad.net/127.0.0.1#5335 -ipset=/launchpad.net/gfwlist -server=/blogspot.co.at/127.0.0.1#5335 -ipset=/blogspot.co.at/gfwlist -server=/visa.com.cy/127.0.0.1#5335 -ipset=/visa.com.cy/gfwlist -server=/youtube.ee/127.0.0.1#5335 -ipset=/youtube.ee/gfwlist -server=/intel.my/127.0.0.1#5335 -ipset=/intel.my/gfwlist -server=/nintendo.co.uk/127.0.0.1#5335 -ipset=/nintendo.co.uk/gfwlist -server=/bmw-motorrad.co.uk/127.0.0.1#5335 -ipset=/bmw-motorrad.co.uk/gfwlist -server=/visa.com.jm/127.0.0.1#5335 -ipset=/visa.com.jm/gfwlist -server=/bmw-connecteddrive.sk/127.0.0.1#5335 -ipset=/bmw-connecteddrive.sk/gfwlist -server=/minivaughanwest.com/127.0.0.1#5335 -ipset=/minivaughanwest.com/gfwlist -server=/ippog.org/127.0.0.1#5335 -ipset=/ippog.org/gfwlist -server=/ntdtv.com/127.0.0.1#5335 -ipset=/ntdtv.com/gfwlist -server=/aeasyshop.com/127.0.0.1#5335 -ipset=/aeasyshop.com/gfwlist -server=/battlefieldbadcompany2.com/127.0.0.1#5335 -ipset=/battlefieldbadcompany2.com/gfwlist -server=/adobeexchange.com/127.0.0.1#5335 -ipset=/adobeexchange.com/gfwlist -server=/visb.org/127.0.0.1#5335 -ipset=/visb.org/gfwlist -server=/faebok.com/127.0.0.1#5335 -ipset=/faebok.com/gfwlist -server=/localizejs.com/127.0.0.1#5335 -ipset=/localizejs.com/gfwlist -server=/bmworegon.com/127.0.0.1#5335 -ipset=/bmworegon.com/gfwlist -server=/pcre.org/127.0.0.1#5335 -ipset=/pcre.org/gfwlist -server=/paypal-special.com/127.0.0.1#5335 -ipset=/paypal-special.com/gfwlist -server=/applescreensavers.com/127.0.0.1#5335 -ipset=/applescreensavers.com/gfwlist -server=/scholar.google.com.pr/127.0.0.1#5335 -ipset=/scholar.google.com.pr/gfwlist -server=/itunesu.net/127.0.0.1#5335 -ipset=/itunesu.net/gfwlist -server=/nikefoundation.org/127.0.0.1#5335 -ipset=/nikefoundation.org/gfwlist -server=/vercel-status.com/127.0.0.1#5335 -ipset=/vercel-status.com/gfwlist -server=/bmw-connecteddrive.ro/127.0.0.1#5335 -ipset=/bmw-connecteddrive.ro/gfwlist -server=/directvforhotels.com/127.0.0.1#5335 -ipset=/directvforhotels.com/gfwlist -server=/anidom.com/127.0.0.1#5335 -ipset=/anidom.com/gfwlist -server=/beatsbydrdrecustom.com/127.0.0.1#5335 -ipset=/beatsbydrdrecustom.com/gfwlist -server=/durex.co.il/127.0.0.1#5335 -ipset=/durex.co.il/gfwlist -server=/niketaiwan.net/127.0.0.1#5335 -ipset=/niketaiwan.net/gfwlist -server=/gannett-cdn.com/127.0.0.1#5335 -ipset=/gannett-cdn.com/gfwlist -server=/bmw-military-sales.com/127.0.0.1#5335 -ipset=/bmw-military-sales.com/gfwlist -server=/buyitnow.com/127.0.0.1#5335 -ipset=/buyitnow.com/gfwlist -server=/razer.com/127.0.0.1#5335 -ipset=/razer.com/gfwlist -server=/oxforddnb.com/127.0.0.1#5335 -ipset=/oxforddnb.com/gfwlist -server=/nurofen.hr/127.0.0.1#5335 -ipset=/nurofen.hr/gfwlist -server=/applicationinsights.io/127.0.0.1#5335 -ipset=/applicationinsights.io/gfwlist -server=/mastercard.hr/127.0.0.1#5335 -ipset=/mastercard.hr/gfwlist -server=/playnintendo.com/127.0.0.1#5335 -ipset=/playnintendo.com/gfwlist -server=/jneurosci.org/127.0.0.1#5335 -ipset=/jneurosci.org/gfwlist -server=/amazon.co.jp/127.0.0.1#5335 -ipset=/amazon.co.jp/gfwlist -server=/paypal-gifts.com/127.0.0.1#5335 -ipset=/paypal-gifts.com/gfwlist -server=/visa.com.ge/127.0.0.1#5335 -ipset=/visa.com.ge/gfwlist -server=/didce.com/127.0.0.1#5335 -ipset=/didce.com/gfwlist -server=/voxops.net/127.0.0.1#5335 -ipset=/voxops.net/gfwlist -server=/okex.com/127.0.0.1#5335 -ipset=/okex.com/gfwlist -server=/rustup.rs/127.0.0.1#5335 -ipset=/rustup.rs/gfwlist -server=/optanedifference.com/127.0.0.1#5335 -ipset=/optanedifference.com/gfwlist -server=/iphonecase5.com/127.0.0.1#5335 -ipset=/iphonecase5.com/gfwlist -server=/akamai-cdn.com/127.0.0.1#5335 -ipset=/akamai-cdn.com/gfwlist -server=/itu.int/127.0.0.1#5335 -ipset=/itu.int/gfwlist -server=/bydrebeats.com/127.0.0.1#5335 -ipset=/bydrebeats.com/gfwlist -server=/beatscheap-nz.com/127.0.0.1#5335 -ipset=/beatscheap-nz.com/gfwlist -server=/pagecdn.io/127.0.0.1#5335 -ipset=/pagecdn.io/gfwlist -server=/verisigninc.com/127.0.0.1#5335 -ipset=/verisigninc.com/gfwlist -server=/facebookcareer.com/127.0.0.1#5335 -ipset=/facebookcareer.com/gfwlist -server=/intercomcdn.com/127.0.0.1#5335 -ipset=/intercomcdn.com/gfwlist -server=/tunsafe.com/127.0.0.1#5335 -ipset=/tunsafe.com/gfwlist -server=/editorx.com/127.0.0.1#5335 -ipset=/editorx.com/gfwlist -server=/componentkit.org/127.0.0.1#5335 -ipset=/componentkit.org/gfwlist -server=/wholeplanetfoundation.org/127.0.0.1#5335 -ipset=/wholeplanetfoundation.org/gfwlist -server=/trustsign.ch/127.0.0.1#5335 -ipset=/trustsign.ch/gfwlist -server=/xn--kput3imi374g.xn--hxt814e/127.0.0.1#5335 -ipset=/xn--kput3imi374g.xn--hxt814e/gfwlist -server=/schemer.com/127.0.0.1#5335 -ipset=/schemer.com/gfwlist -server=/keytransparency.com/127.0.0.1#5335 -ipset=/keytransparency.com/gfwlist -server=/wwwxoom.com/127.0.0.1#5335 -ipset=/wwwxoom.com/gfwlist -server=/pinterest.it/127.0.0.1#5335 -ipset=/pinterest.it/gfwlist -server=/msropendata.com/127.0.0.1#5335 -ipset=/msropendata.com/gfwlist -server=/amd.com/127.0.0.1#5335 -ipset=/amd.com/gfwlist -server=/ie10.com/127.0.0.1#5335 -ipset=/ie10.com/gfwlist -server=/google.com.py/127.0.0.1#5335 -ipset=/google.com.py/gfwlist -server=/hulucall.com/127.0.0.1#5335 -ipset=/hulucall.com/gfwlist -server=/azuredigitaltwins.net/127.0.0.1#5335 -ipset=/azuredigitaltwins.net/gfwlist -server=/etbc.com.hk/127.0.0.1#5335 -ipset=/etbc.com.hk/gfwlist -server=/nikeidshoes.com/127.0.0.1#5335 -ipset=/nikeidshoes.com/gfwlist -server=/google.rs/127.0.0.1#5335 -ipset=/google.rs/gfwlist -server=/jmlr.org/127.0.0.1#5335 -ipset=/jmlr.org/gfwlist -server=/bloombergtv.mn/127.0.0.1#5335 -ipset=/bloombergtv.mn/gfwlist -server=/speedhunters.com/127.0.0.1#5335 -ipset=/speedhunters.com/gfwlist -server=/camelot-europe.com/127.0.0.1#5335 -ipset=/camelot-europe.com/gfwlist -server=/myfoxny.com/127.0.0.1#5335 -ipset=/myfoxny.com/gfwlist -server=/digitalcertvalidation.com/127.0.0.1#5335 -ipset=/digitalcertvalidation.com/gfwlist -server=/xn--xsq959n.com/127.0.0.1#5335 -ipset=/xn--xsq959n.com/gfwlist -server=/foxnews.tv/127.0.0.1#5335 -ipset=/foxnews.tv/gfwlist -server=/themercury.com.au/127.0.0.1#5335 -ipset=/themercury.com.au/gfwlist -server=/zoom.com.cn/127.0.0.1#5335 -ipset=/zoom.com.cn/gfwlist -server=/oanencore.com/127.0.0.1#5335 -ipset=/oanencore.com/gfwlist -server=/pearsonperu.pe/127.0.0.1#5335 -ipset=/pearsonperu.pe/gfwlist -server=/chromebook.com/127.0.0.1#5335 -ipset=/chromebook.com/gfwlist -server=/mol.im/127.0.0.1#5335 -ipset=/mol.im/gfwlist -server=/paypalbenefits.com/127.0.0.1#5335 -ipset=/paypalbenefits.com/gfwlist -server=/velkaepocha.cz/127.0.0.1#5335 -ipset=/velkaepocha.cz/gfwlist -server=/mini.re/127.0.0.1#5335 -ipset=/mini.re/gfwlist -server=/nvidia.fr/127.0.0.1#5335 -ipset=/nvidia.fr/gfwlist -server=/ieeemagnetics.org/127.0.0.1#5335 -ipset=/ieeemagnetics.org/gfwlist -server=/halfjapan.com/127.0.0.1#5335 -ipset=/halfjapan.com/gfwlist -server=/practicalbusinessskills.com/127.0.0.1#5335 -ipset=/practicalbusinessskills.com/gfwlist -server=/kphimsex.net/127.0.0.1#5335 -ipset=/kphimsex.net/gfwlist -server=/studiobeatsbydrdre.com/127.0.0.1#5335 -ipset=/studiobeatsbydrdre.com/gfwlist -server=/rubygems.org/127.0.0.1#5335 -ipset=/rubygems.org/gfwlist -server=/yahoo.com.mx/127.0.0.1#5335 -ipset=/yahoo.com.mx/gfwlist -server=/volvobuses.fr/127.0.0.1#5335 -ipset=/volvobuses.fr/gfwlist -server=/huffingtonpost.gr/127.0.0.1#5335 -ipset=/huffingtonpost.gr/gfwlist -server=/makecode.org/127.0.0.1#5335 -ipset=/makecode.org/gfwlist -server=/icashpassport.com.mx/127.0.0.1#5335 -ipset=/icashpassport.com.mx/gfwlist -server=/getwsone.com/127.0.0.1#5335 -ipset=/getwsone.com/gfwlist -server=/bmw-motorrad.dk/127.0.0.1#5335 -ipset=/bmw-motorrad.dk/gfwlist -server=/cbssports.com/127.0.0.1#5335 -ipset=/cbssports.com/gfwlist -server=/durex.com/127.0.0.1#5335 -ipset=/durex.com/gfwlist -server=/paypalnetwork.info/127.0.0.1#5335 -ipset=/paypalnetwork.info/gfwlist -server=/anaconda.com/127.0.0.1#5335 -ipset=/anaconda.com/gfwlist -server=/monbeats2013.com/127.0.0.1#5335 -ipset=/monbeats2013.com/gfwlist -server=/atlantaminidealers.com/127.0.0.1#5335 -ipset=/atlantaminidealers.com/gfwlist -server=/microsoft.fi/127.0.0.1#5335 -ipset=/microsoft.fi/gfwlist -server=/slack-files.com/127.0.0.1#5335 -ipset=/slack-files.com/gfwlist -server=/iphone4.com.br/127.0.0.1#5335 -ipset=/iphone4.com.br/gfwlist -server=/ddh.gg/127.0.0.1#5335 -ipset=/ddh.gg/gfwlist -server=/espndotcom.tt.omtrdc.net/127.0.0.1#5335 -ipset=/espndotcom.tt.omtrdc.net/gfwlist -server=/buypass.com/127.0.0.1#5335 -ipset=/buypass.com/gfwlist -server=/facebookblueprint.net/127.0.0.1#5335 -ipset=/facebookblueprint.net/gfwlist -server=/nvidia.asia/127.0.0.1#5335 -ipset=/nvidia.asia/gfwlist -server=/mastercardworldwide.com/127.0.0.1#5335 -ipset=/mastercardworldwide.com/gfwlist -server=/instaplayer.net/127.0.0.1#5335 -ipset=/instaplayer.net/gfwlist -server=/foxsportsuniversity.com/127.0.0.1#5335 -ipset=/foxsportsuniversity.com/gfwlist -server=/minivictoria.ca/127.0.0.1#5335 -ipset=/minivictoria.ca/gfwlist -server=/starbucks.com.gr/127.0.0.1#5335 -ipset=/starbucks.com.gr/gfwlist -server=/amazon.nl/127.0.0.1#5335 -ipset=/amazon.nl/gfwlist -server=/google.com.tw/127.0.0.1#5335 -ipset=/google.com.tw/gfwlist -server=/intel.ch/127.0.0.1#5335 -ipset=/intel.ch/gfwlist -server=/apa.org/127.0.0.1#5335 -ipset=/apa.org/gfwlist -server=/casquebeatsofficiel-fr.com/127.0.0.1#5335 -ipset=/casquebeatsofficiel-fr.com/gfwlist -server=/strikingly.com/127.0.0.1#5335 -ipset=/strikingly.com/gfwlist -server=/yahoo.tl/127.0.0.1#5335 -ipset=/yahoo.tl/gfwlist -server=/voxmedia.com/127.0.0.1#5335 -ipset=/voxmedia.com/gfwlist -server=/appleone.chat/127.0.0.1#5335 -ipset=/appleone.chat/gfwlist -server=/cargigileads.com/127.0.0.1#5335 -ipset=/cargigileads.com/gfwlist -server=/mfg-inspector.com/127.0.0.1#5335 -ipset=/mfg-inspector.com/gfwlist -server=/google.com.kh/127.0.0.1#5335 -ipset=/google.com.kh/gfwlist -server=/latampartneruniversity.com/127.0.0.1#5335 -ipset=/latampartneruniversity.com/gfwlist -server=/facecbook.com/127.0.0.1#5335 -ipset=/facecbook.com/gfwlist -server=/coinonecorp.com/127.0.0.1#5335 -ipset=/coinonecorp.com/gfwlist -server=/bmw.com.bn/127.0.0.1#5335 -ipset=/bmw.com.bn/gfwlist -server=/fox49.tv/127.0.0.1#5335 -ipset=/fox49.tv/gfwlist -server=/2o7.net/127.0.0.1#5335 -ipset=/2o7.net/gfwlist -server=/scholar.google.com.vn/127.0.0.1#5335 -ipset=/scholar.google.com.vn/gfwlist -server=/collins.in/127.0.0.1#5335 -ipset=/collins.in/gfwlist -server=/skysports.com/127.0.0.1#5335 -ipset=/skysports.com/gfwlist -server=/freenode.net/127.0.0.1#5335 -ipset=/freenode.net/gfwlist -server=/brill.com/127.0.0.1#5335 -ipset=/brill.com/gfwlist -server=/mini.ru/127.0.0.1#5335 -ipset=/mini.ru/gfwlist -server=/intel.com.mx/127.0.0.1#5335 -ipset=/intel.com.mx/gfwlist -server=/hboasia.com/127.0.0.1#5335 -ipset=/hboasia.com/gfwlist -server=/mastercard.eu/127.0.0.1#5335 -ipset=/mastercard.eu/gfwlist -server=/bcvp0rtal.com/127.0.0.1#5335 -ipset=/bcvp0rtal.com/gfwlist -server=/maddenrewards.com/127.0.0.1#5335 -ipset=/maddenrewards.com/gfwlist -server=/pogobeta.com/127.0.0.1#5335 -ipset=/pogobeta.com/gfwlist -server=/udnfunlife.com/127.0.0.1#5335 -ipset=/udnfunlife.com/gfwlist -server=/newsmax.in/127.0.0.1#5335 -ipset=/newsmax.in/gfwlist -server=/youtube.ru/127.0.0.1#5335 -ipset=/youtube.ru/gfwlist -server=/nypost.help/127.0.0.1#5335 -ipset=/nypost.help/gfwlist -server=/mini.com.py/127.0.0.1#5335 -ipset=/mini.com.py/gfwlist -server=/visa.be/127.0.0.1#5335 -ipset=/visa.be/gfwlist -server=/musical.ly/127.0.0.1#5335 -ipset=/musical.ly/gfwlist -server=/app0le.com/127.0.0.1#5335 -ipset=/app0le.com/gfwlist -server=/whonix.org/127.0.0.1#5335 -ipset=/whonix.org/gfwlist -server=/delicious.com.au/127.0.0.1#5335 -ipset=/delicious.com.au/gfwlist -server=/facebook-studio.com/127.0.0.1#5335 -ipset=/facebook-studio.com/gfwlist -server=/macreach.com/127.0.0.1#5335 -ipset=/macreach.com/gfwlist -server=/adobeexperienceawards.com/127.0.0.1#5335 -ipset=/adobeexperienceawards.com/gfwlist -server=/pki-post.ch/127.0.0.1#5335 -ipset=/pki-post.ch/gfwlist -server=/hp3dsamplepromo.com/127.0.0.1#5335 -ipset=/hp3dsamplepromo.com/gfwlist -server=/blogspot.co.uk/127.0.0.1#5335 -ipset=/blogspot.co.uk/gfwlist -server=/mewe.com/127.0.0.1#5335 -ipset=/mewe.com/gfwlist -server=/minecraft.net/127.0.0.1#5335 -ipset=/minecraft.net/gfwlist -server=/androidify.com/127.0.0.1#5335 -ipset=/androidify.com/gfwlist -server=/gputechconf.eu/127.0.0.1#5335 -ipset=/gputechconf.eu/gfwlist -server=/bmw-motorrad.be/127.0.0.1#5335 -ipset=/bmw-motorrad.be/gfwlist -server=/boxun.com/127.0.0.1#5335 -ipset=/boxun.com/gfwlist -server=/mcdonalds.se/127.0.0.1#5335 -ipset=/mcdonalds.se/gfwlist -server=/dropboxbusiness.com/127.0.0.1#5335 -ipset=/dropboxbusiness.com/gfwlist -server=/foxsmallbusinesscenter.com/127.0.0.1#5335 -ipset=/foxsmallbusinesscenter.com/gfwlist -server=/jfrog.com/127.0.0.1#5335 -ipset=/jfrog.com/gfwlist -server=/forzamotorsport.net/127.0.0.1#5335 -ipset=/forzamotorsport.net/gfwlist -server=/fox9.com/127.0.0.1#5335 -ipset=/fox9.com/gfwlist -server=/dreamteamfc.com/127.0.0.1#5335 -ipset=/dreamteamfc.com/gfwlist -server=/facebook-program.com/127.0.0.1#5335 -ipset=/facebook-program.com/gfwlist -server=/amebaowndme.com/127.0.0.1#5335 -ipset=/amebaowndme.com/gfwlist -server=/bmwartjourney.com/127.0.0.1#5335 -ipset=/bmwartjourney.com/gfwlist -server=/sdcountybmw.com/127.0.0.1#5335 -ipset=/sdcountybmw.com/gfwlist -server=/bmw-classic.com/127.0.0.1#5335 -ipset=/bmw-classic.com/gfwlist -server=/paramount.com/127.0.0.1#5335 -ipset=/paramount.com/gfwlist -server=/visa.co.nz/127.0.0.1#5335 -ipset=/visa.co.nz/gfwlist -server=/bmw.hu/127.0.0.1#5335 -ipset=/bmw.hu/gfwlist -server=/terapeak.hk/127.0.0.1#5335 -ipset=/terapeak.hk/gfwlist -server=/easports.com/127.0.0.1#5335 -ipset=/easports.com/gfwlist -server=/swisssign.net/127.0.0.1#5335 -ipset=/swisssign.net/gfwlist -server=/bloombergsurvey.com/127.0.0.1#5335 -ipset=/bloombergsurvey.com/gfwlist -server=/airwick.se/127.0.0.1#5335 -ipset=/airwick.se/gfwlist -server=/huluapp.com/127.0.0.1#5335 -ipset=/huluapp.com/gfwlist -server=/oed.com/127.0.0.1#5335 -ipset=/oed.com/gfwlist -server=/icloudo.net/127.0.0.1#5335 -ipset=/icloudo.net/gfwlist -server=/vfsforgit.com/127.0.0.1#5335 -ipset=/vfsforgit.com/gfwlist -server=/ebayt.com/127.0.0.1#5335 -ipset=/ebayt.com/gfwlist -server=/apple-cloudkit.com/127.0.0.1#5335 -ipset=/apple-cloudkit.com/gfwlist -server=/bmw.hn/127.0.0.1#5335 -ipset=/bmw.hn/gfwlist -server=/quoracdn.net/127.0.0.1#5335 -ipset=/quoracdn.net/gfwlist -server=/nbcolympics.com/127.0.0.1#5335 -ipset=/nbcolympics.com/gfwlist -server=/sony.pl/127.0.0.1#5335 -ipset=/sony.pl/gfwlist -server=/gonike.com/127.0.0.1#5335 -ipset=/gonike.com/gfwlist -server=/geeksquad.cc/127.0.0.1#5335 -ipset=/geeksquad.cc/gfwlist -server=/foxsports.com.ve/127.0.0.1#5335 -ipset=/foxsports.com.ve/gfwlist -server=/pearsoneducacion.net/127.0.0.1#5335 -ipset=/pearsoneducacion.net/gfwlist -server=/apple.nl/127.0.0.1#5335 -ipset=/apple.nl/gfwlist -server=/verisign.es/127.0.0.1#5335 -ipset=/verisign.es/gfwlist -server=/brightcove.net/127.0.0.1#5335 -ipset=/brightcove.net/gfwlist -server=/bmw.com.pe/127.0.0.1#5335 -ipset=/bmw.com.pe/gfwlist -server=/facebookexchange.com/127.0.0.1#5335 -ipset=/facebookexchange.com/gfwlist -server=/democracy.earth/127.0.0.1#5335 -ipset=/democracy.earth/gfwlist -server=/ipodnano.net/127.0.0.1#5335 -ipset=/ipodnano.net/gfwlist -server=/needforspeedoverdrive.com/127.0.0.1#5335 -ipset=/needforspeedoverdrive.com/gfwlist -server=/visiontimes.net/127.0.0.1#5335 -ipset=/visiontimes.net/gfwlist -server=/drebeatsdeutschland.net/127.0.0.1#5335 -ipset=/drebeatsdeutschland.net/gfwlist -server=/bestbuyideax.com/127.0.0.1#5335 -ipset=/bestbuyideax.com/gfwlist -server=/beatsbydreirelandonlines.com/127.0.0.1#5335 -ipset=/beatsbydreirelandonlines.com/gfwlist -server=/ccnsite.com/127.0.0.1#5335 -ipset=/ccnsite.com/gfwlist -server=/o0-2.com/127.0.0.1#5335 -ipset=/o0-2.com/gfwlist -server=/volvotrucks.co.uk/127.0.0.1#5335 -ipset=/volvotrucks.co.uk/gfwlist -server=/attspecial.com/127.0.0.1#5335 -ipset=/attspecial.com/gfwlist -server=/adidas.pl/127.0.0.1#5335 -ipset=/adidas.pl/gfwlist -server=/google.la/127.0.0.1#5335 -ipset=/google.la/gfwlist -server=/huloo.cc/127.0.0.1#5335 -ipset=/huloo.cc/gfwlist -server=/miniinvasion.ca/127.0.0.1#5335 -ipset=/miniinvasion.ca/gfwlist -server=/intel.ca/127.0.0.1#5335 -ipset=/intel.ca/gfwlist -server=/httpwwwfacebook.com/127.0.0.1#5335 -ipset=/httpwwwfacebook.com/gfwlist -server=/idnike.com/127.0.0.1#5335 -ipset=/idnike.com/gfwlist -server=/mini.mq/127.0.0.1#5335 -ipset=/mini.mq/gfwlist -server=/pearsonactivelearn.com/127.0.0.1#5335 -ipset=/pearsonactivelearn.com/gfwlist -server=/linotype.com/127.0.0.1#5335 -ipset=/linotype.com/gfwlist -server=/bmw-connecteddrive.ch/127.0.0.1#5335 -ipset=/bmw-connecteddrive.ch/gfwlist -server=/bmw-motorrad.bh/127.0.0.1#5335 -ipset=/bmw-motorrad.bh/gfwlist -server=/alphera.ie/127.0.0.1#5335 -ipset=/alphera.ie/gfwlist -server=/zeeuk.com/127.0.0.1#5335 -ipset=/zeeuk.com/gfwlist -server=/bmw.hr/127.0.0.1#5335 -ipset=/bmw.hr/gfwlist -server=/finishinfo.se/127.0.0.1#5335 -ipset=/finishinfo.se/gfwlist -server=/bbycloud.com/127.0.0.1#5335 -ipset=/bbycloud.com/gfwlist -server=/realmilwaukeenow.com/127.0.0.1#5335 -ipset=/realmilwaukeenow.com/gfwlist -server=/bmw-motorrad.no/127.0.0.1#5335 -ipset=/bmw-motorrad.no/gfwlist -server=/icloudsetup.com/127.0.0.1#5335 -ipset=/icloudsetup.com/gfwlist -server=/pinterest.at/127.0.0.1#5335 -ipset=/pinterest.at/gfwlist -server=/itunesessentials.com/127.0.0.1#5335 -ipset=/itunesessentials.com/gfwlist -server=/netvigator.com/127.0.0.1#5335 -ipset=/netvigator.com/gfwlist -server=/eenike.com/127.0.0.1#5335 -ipset=/eenike.com/gfwlist -server=/cisco-returns.com/127.0.0.1#5335 -ipset=/cisco-returns.com/gfwlist -server=/apple.ro/127.0.0.1#5335 -ipset=/apple.ro/gfwlist -server=/netflix.com/127.0.0.1#5335 -ipset=/netflix.com/gfwlist -server=/appleexpo.eu/127.0.0.1#5335 -ipset=/appleexpo.eu/gfwlist -server=/magento.com/127.0.0.1#5335 -ipset=/magento.com/gfwlist -server=/dettolarabia.com/127.0.0.1#5335 -ipset=/dettolarabia.com/gfwlist -server=/trustwave.com/127.0.0.1#5335 -ipset=/trustwave.com/gfwlist -server=/encoretvb.com/127.0.0.1#5335 -ipset=/encoretvb.com/gfwlist -server=/starbucks.ad/127.0.0.1#5335 -ipset=/starbucks.ad/gfwlist -server=/eacodigos.com/127.0.0.1#5335 -ipset=/eacodigos.com/gfwlist -server=/intel.mw/127.0.0.1#5335 -ipset=/intel.mw/gfwlist -server=/slackdemo.com/127.0.0.1#5335 -ipset=/slackdemo.com/gfwlist -server=/ebay25.com/127.0.0.1#5335 -ipset=/ebay25.com/gfwlist -server=/charticulator.com/127.0.0.1#5335 -ipset=/charticulator.com/gfwlist -server=/fastlane.tools/127.0.0.1#5335 -ipset=/fastlane.tools/gfwlist -server=/kindgirls.com/127.0.0.1#5335 -ipset=/kindgirls.com/gfwlist -server=/hpfaqs.com/127.0.0.1#5335 -ipset=/hpfaqs.com/gfwlist -server=/mcdonalds.com/127.0.0.1#5335 -ipset=/mcdonalds.com/gfwlist -server=/sign.new/127.0.0.1#5335 -ipset=/sign.new/gfwlist -server=/chroniclesec.com/127.0.0.1#5335 -ipset=/chroniclesec.com/gfwlist -server=/yahoo.by/127.0.0.1#5335 -ipset=/yahoo.by/gfwlist -server=/voacambodia.com/127.0.0.1#5335 -ipset=/voacambodia.com/gfwlist -server=/cutt.ly/127.0.0.1#5335 -ipset=/cutt.ly/gfwlist -server=/sextop1.net/127.0.0.1#5335 -ipset=/sextop1.net/gfwlist -server=/hulugans.com/127.0.0.1#5335 -ipset=/hulugans.com/gfwlist -server=/realamericanstories.tv/127.0.0.1#5335 -ipset=/realamericanstories.tv/gfwlist -server=/bmw-gta.ca/127.0.0.1#5335 -ipset=/bmw-gta.ca/gfwlist -server=/favebook.com/127.0.0.1#5335 -ipset=/favebook.com/gfwlist -server=/beatsbydre-headphones.com/127.0.0.1#5335 -ipset=/beatsbydre-headphones.com/gfwlist -server=/marvelsuperwar.com/127.0.0.1#5335 -ipset=/marvelsuperwar.com/gfwlist -server=/swissid.ch/127.0.0.1#5335 -ipset=/swissid.ch/gfwlist -server=/fastlane.ci/127.0.0.1#5335 -ipset=/fastlane.ci/gfwlist -server=/applestore.com.tw/127.0.0.1#5335 -ipset=/applestore.com.tw/gfwlist -server=/xnxx-cdn.com/127.0.0.1#5335 -ipset=/xnxx-cdn.com/gfwlist -server=/applestore.com.ee/127.0.0.1#5335 -ipset=/applestore.com.ee/gfwlist -server=/tegrazone.co.kr/127.0.0.1#5335 -ipset=/tegrazone.co.kr/gfwlist -server=/maddenseason.org/127.0.0.1#5335 -ipset=/maddenseason.org/gfwlist -server=/drebeatsheadphones-nz.com/127.0.0.1#5335 -ipset=/drebeatsheadphones-nz.com/gfwlist -server=/bloomberg.fm/127.0.0.1#5335 -ipset=/bloomberg.fm/gfwlist -server=/vhxqa2.com/127.0.0.1#5335 -ipset=/vhxqa2.com/gfwlist -server=/mini.by/127.0.0.1#5335 -ipset=/mini.by/gfwlist -server=/picasa.com/127.0.0.1#5335 -ipset=/picasa.com/gfwlist -server=/zoom.com/127.0.0.1#5335 -ipset=/zoom.com/gfwlist -server=/xoom.com/127.0.0.1#5335 -ipset=/xoom.com/gfwlist -server=/pokemonbank.com/127.0.0.1#5335 -ipset=/pokemonbank.com/gfwlist -server=/adaptivecards.io/127.0.0.1#5335 -ipset=/adaptivecards.io/gfwlist -server=/i-book.net/127.0.0.1#5335 -ipset=/i-book.net/gfwlist -server=/salebeatslasteststyle4you.com/127.0.0.1#5335 -ipset=/salebeatslasteststyle4you.com/gfwlist -server=/google.tg/127.0.0.1#5335 -ipset=/google.tg/gfwlist -server=/ebay.ie/127.0.0.1#5335 -ipset=/ebay.ie/gfwlist -server=/eakorea.co.kr/127.0.0.1#5335 -ipset=/eakorea.co.kr/gfwlist -server=/microsoft.az/127.0.0.1#5335 -ipset=/microsoft.az/gfwlist -server=/doom.com/127.0.0.1#5335 -ipset=/doom.com/gfwlist -server=/yahoo.co.bw/127.0.0.1#5335 -ipset=/yahoo.co.bw/gfwlist -server=/nikemarketing.com/127.0.0.1#5335 -ipset=/nikemarketing.com/gfwlist -server=/dropbox.tech/127.0.0.1#5335 -ipset=/dropbox.tech/gfwlist -server=/cambridgeschoolshakespeare.com/127.0.0.1#5335 -ipset=/cambridgeschoolshakespeare.com/gfwlist -server=/onedinesfree.com/127.0.0.1#5335 -ipset=/onedinesfree.com/gfwlist -server=/miniccrc.ca/127.0.0.1#5335 -ipset=/miniccrc.ca/gfwlist -server=/diabloimmortal.com/127.0.0.1#5335 -ipset=/diabloimmortal.com/gfwlist -server=/espn.com/127.0.0.1#5335 -ipset=/espn.com/gfwlist -server=/nikkei.co.jp/127.0.0.1#5335 -ipset=/nikkei.co.jp/gfwlist -server=/paypal-secure.org/127.0.0.1#5335 -ipset=/paypal-secure.org/gfwlist -server=/venmo-touch.com/127.0.0.1#5335 -ipset=/venmo-touch.com/gfwlist -server=/mini-coupe.ca/127.0.0.1#5335 -ipset=/mini-coupe.ca/gfwlist -server=/bmw-sports.com/127.0.0.1#5335 -ipset=/bmw-sports.com/gfwlist -server=/akamaihd-staging.net/127.0.0.1#5335 -ipset=/akamaihd-staging.net/gfwlist -server=/realamericanstories.com/127.0.0.1#5335 -ipset=/realamericanstories.com/gfwlist -server=/google-syndication.com/127.0.0.1#5335 -ipset=/google-syndication.com/gfwlist -server=/google.berlin/127.0.0.1#5335 -ipset=/google.berlin/gfwlist -server=/marvel.com/127.0.0.1#5335 -ipset=/marvel.com/gfwlist -server=/xn--9kr7l.com/127.0.0.1#5335 -ipset=/xn--9kr7l.com/gfwlist -server=/beatscasque-france.com/127.0.0.1#5335 -ipset=/beatscasque-france.com/gfwlist -server=/bmw.ht/127.0.0.1#5335 -ipset=/bmw.ht/gfwlist -server=/yahoo.dk/127.0.0.1#5335 -ipset=/yahoo.dk/gfwlist -server=/mastercard.us/127.0.0.1#5335 -ipset=/mastercard.us/gfwlist -server=/vkmessenger.app/127.0.0.1#5335 -ipset=/vkmessenger.app/gfwlist -server=/bitsquare.io/127.0.0.1#5335 -ipset=/bitsquare.io/gfwlist -server=/spiritofecstasy.com/127.0.0.1#5335 -ipset=/spiritofecstasy.com/gfwlist -server=/paypal-donations.com/127.0.0.1#5335 -ipset=/paypal-donations.com/gfwlist -server=/ravm.tv/127.0.0.1#5335 -ipset=/ravm.tv/gfwlist -server=/starwarstheoldrepublic.com/127.0.0.1#5335 -ipset=/starwarstheoldrepublic.com/gfwlist -server=/asahicom.jp/127.0.0.1#5335 -ipset=/asahicom.jp/gfwlist -server=/gitbook.io/127.0.0.1#5335 -ipset=/gitbook.io/gfwlist -server=/visainfinite.ca/127.0.0.1#5335 -ipset=/visainfinite.ca/gfwlist -server=/bmw.cc/127.0.0.1#5335 -ipset=/bmw.cc/gfwlist -server=/foxnewsnetwork.com/127.0.0.1#5335 -ipset=/foxnewsnetwork.com/gfwlist -server=/visainfiniteluxuryhotels.ca/127.0.0.1#5335 -ipset=/visainfiniteluxuryhotels.ca/gfwlist -server=/2013beatsbydrdreonline.com/127.0.0.1#5335 -ipset=/2013beatsbydrdreonline.com/gfwlist -server=/bloombergstatus.com/127.0.0.1#5335 -ipset=/bloombergstatus.com/gfwlist -server=/yarininsuyu.com/127.0.0.1#5335 -ipset=/yarininsuyu.com/gfwlist -server=/monotype.com/127.0.0.1#5335 -ipset=/monotype.com/gfwlist -server=/starwarsbattlefront.com/127.0.0.1#5335 -ipset=/starwarsbattlefront.com/gfwlist -server=/visa.no/127.0.0.1#5335 -ipset=/visa.no/gfwlist -server=/realamericanstories.info/127.0.0.1#5335 -ipset=/realamericanstories.info/gfwlist -server=/disneyadsales.com/127.0.0.1#5335 -ipset=/disneyadsales.com/gfwlist -server=/needforspeedlightning.com/127.0.0.1#5335 -ipset=/needforspeedlightning.com/gfwlist -server=/fandom.com/127.0.0.1#5335 -ipset=/fandom.com/gfwlist -server=/ebaycom.com/127.0.0.1#5335 -ipset=/ebaycom.com/gfwlist -server=/tver.co.jp/127.0.0.1#5335 -ipset=/tver.co.jp/gfwlist -server=/fashionnike.com/127.0.0.1#5335 -ipset=/fashionnike.com/gfwlist -server=/foxnewsb2b.com/127.0.0.1#5335 -ipset=/foxnewsb2b.com/gfwlist -server=/iphoneacessorios.com.br/127.0.0.1#5335 -ipset=/iphoneacessorios.com.br/gfwlist -server=/financialsoccer.ca/127.0.0.1#5335 -ipset=/financialsoccer.ca/gfwlist -server=/fox26houston.com/127.0.0.1#5335 -ipset=/fox26houston.com/gfwlist -server=/upjav.cc/127.0.0.1#5335 -ipset=/upjav.cc/gfwlist -server=/blazor.net/127.0.0.1#5335 -ipset=/blazor.net/gfwlist -server=/facebcook.com/127.0.0.1#5335 -ipset=/facebcook.com/gfwlist -server=/nextwork.com.tw/127.0.0.1#5335 -ipset=/nextwork.com.tw/gfwlist -server=/blogspot.lt/127.0.0.1#5335 -ipset=/blogspot.lt/gfwlist -server=/firestonecomercial.cl/127.0.0.1#5335 -ipset=/firestonecomercial.cl/gfwlist -server=/onefifteen.org/127.0.0.1#5335 -ipset=/onefifteen.org/gfwlist -server=/life-global.org/127.0.0.1#5335 -ipset=/life-global.org/gfwlist -server=/ebay-authenticate.net/127.0.0.1#5335 -ipset=/ebay-authenticate.net/gfwlist -server=/pca.st/127.0.0.1#5335 -ipset=/pca.st/gfwlist -server=/nationalgeographic.com/127.0.0.1#5335 -ipset=/nationalgeographic.com/gfwlist -server=/volvotruckcenter.it/127.0.0.1#5335 -ipset=/volvotruckcenter.it/gfwlist -server=/blogspot.in/127.0.0.1#5335 -ipset=/blogspot.in/gfwlist -server=/feacbooke.com/127.0.0.1#5335 -ipset=/feacbooke.com/gfwlist -server=/bcovlive.io/127.0.0.1#5335 -ipset=/bcovlive.io/gfwlist -server=/wikihow.com/127.0.0.1#5335 -ipset=/wikihow.com/gfwlist -server=/mini-qatar.com/127.0.0.1#5335 -ipset=/mini-qatar.com/gfwlist -server=/volvotrucks.ee/127.0.0.1#5335 -ipset=/volvotrucks.ee/gfwlist -server=/xenoblade.com/127.0.0.1#5335 -ipset=/xenoblade.com/gfwlist -server=/magentoliveconference.com/127.0.0.1#5335 -ipset=/magentoliveconference.com/gfwlist -server=/omnitek.tv/127.0.0.1#5335 -ipset=/omnitek.tv/gfwlist -server=/monsterbeatsbydres.com/127.0.0.1#5335 -ipset=/monsterbeatsbydres.com/gfwlist -server=/epochtimes-bg.com/127.0.0.1#5335 -ipset=/epochtimes-bg.com/gfwlist -server=/starbucksrewardsstarland.com/127.0.0.1#5335 -ipset=/starbucksrewardsstarland.com/gfwlist -server=/udn.com.tw/127.0.0.1#5335 -ipset=/udn.com.tw/gfwlist -server=/mastercard.co.in/127.0.0.1#5335 -ipset=/mastercard.co.in/gfwlist -server=/bitballoon.com/127.0.0.1#5335 -ipset=/bitballoon.com/gfwlist -server=/mktorest.com/127.0.0.1#5335 -ipset=/mktorest.com/gfwlist -server=/epochtimes.com.tw/127.0.0.1#5335 -ipset=/epochtimes.com.tw/gfwlist -server=/cex.io/127.0.0.1#5335 -ipset=/cex.io/gfwlist -server=/volvopenta.com/127.0.0.1#5335 -ipset=/volvopenta.com/gfwlist -server=/faststone.org/127.0.0.1#5335 -ipset=/faststone.org/gfwlist -server=/youtube.com.tn/127.0.0.1#5335 -ipset=/youtube.com.tn/gfwlist -server=/googledrive.com/127.0.0.1#5335 -ipset=/googledrive.com/gfwlist -server=/mybmw.ca/127.0.0.1#5335 -ipset=/mybmw.ca/gfwlist -server=/strepsils.hu/127.0.0.1#5335 -ipset=/strepsils.hu/gfwlist -server=/ebayradio.com/127.0.0.1#5335 -ipset=/ebayradio.com/gfwlist -server=/swisssign-group.ch/127.0.0.1#5335 -ipset=/swisssign-group.ch/gfwlist -server=/realvision.com/127.0.0.1#5335 -ipset=/realvision.com/gfwlist -server=/attpurchasing.com/127.0.0.1#5335 -ipset=/attpurchasing.com/gfwlist -server=/apple-dns.net/127.0.0.1#5335 -ipset=/apple-dns.net/gfwlist -server=/ipod.com.hk/127.0.0.1#5335 -ipset=/ipod.com.hk/gfwlist -server=/bbgevent.com/127.0.0.1#5335 -ipset=/bbgevent.com/gfwlist -server=/espnqa.com/127.0.0.1#5335 -ipset=/espnqa.com/gfwlist -server=/travelexch.com/127.0.0.1#5335 -ipset=/travelexch.com/gfwlist -server=/bmw.com.co/127.0.0.1#5335 -ipset=/bmw.com.co/gfwlist -server=/londonreal.tv/127.0.0.1#5335 -ipset=/londonreal.tv/gfwlist -server=/adidas.dk/127.0.0.1#5335 -ipset=/adidas.dk/gfwlist -server=/yahoo.com.tj/127.0.0.1#5335 -ipset=/yahoo.com.tj/gfwlist -server=/gamer2-cds.cdn.hinet.net/127.0.0.1#5335 -ipset=/gamer2-cds.cdn.hinet.net/gfwlist -server=/ebayenterprise.info/127.0.0.1#5335 -ipset=/ebayenterprise.info/gfwlist -server=/yandex.ee/127.0.0.1#5335 -ipset=/yandex.ee/gfwlist -server=/beatsoutlet.net/127.0.0.1#5335 -ipset=/beatsoutlet.net/gfwlist -server=/starwarskids.com/127.0.0.1#5335 -ipset=/starwarskids.com/gfwlist -server=/amazonvideodirect.com/127.0.0.1#5335 -ipset=/amazonvideodirect.com/gfwlist -server=/trycloudflare.com/127.0.0.1#5335 -ipset=/trycloudflare.com/gfwlist -server=/dealbay.com/127.0.0.1#5335 -ipset=/dealbay.com/gfwlist -server=/opensuse.org/127.0.0.1#5335 -ipset=/opensuse.org/gfwlist -server=/bookclubgirl.com/127.0.0.1#5335 -ipset=/bookclubgirl.com/gfwlist -server=/attsuppliers.com/127.0.0.1#5335 -ipset=/attsuppliers.com/gfwlist -server=/finishinfo.jp/127.0.0.1#5335 -ipset=/finishinfo.jp/gfwlist -server=/hpdownloadstore.com/127.0.0.1#5335 -ipset=/hpdownloadstore.com/gfwlist -server=/newmonst1erbeatsto1re.com/127.0.0.1#5335 -ipset=/newmonst1erbeatsto1re.com/gfwlist -server=/townsvillebulletin.com.au/127.0.0.1#5335 -ipset=/townsvillebulletin.com.au/gfwlist -server=/headlinejobs.hk/127.0.0.1#5335 -ipset=/headlinejobs.hk/gfwlist -server=/huffpostbrasil.com/127.0.0.1#5335 -ipset=/huffpostbrasil.com/gfwlist -server=/mini.co.kr/127.0.0.1#5335 -ipset=/mini.co.kr/gfwlist -server=/appledaily.com.tw/127.0.0.1#5335 -ipset=/appledaily.com.tw/gfwlist -server=/facebook30.net/127.0.0.1#5335 -ipset=/facebook30.net/gfwlist -server=/mastercard.my/127.0.0.1#5335 -ipset=/mastercard.my/gfwlist -server=/dreamworks.com/127.0.0.1#5335 -ipset=/dreamworks.com/gfwlist -server=/digicert.com/127.0.0.1#5335 -ipset=/digicert.com/gfwlist -server=/canonical.com/127.0.0.1#5335 -ipset=/canonical.com/gfwlist -server=/straightouttasomewhere.com/127.0.0.1#5335 -ipset=/straightouttasomewhere.com/gfwlist -server=/volvotrucks.ro/127.0.0.1#5335 -ipset=/volvotrucks.ro/gfwlist -server=/bmwdealercareers.com/127.0.0.1#5335 -ipset=/bmwdealercareers.com/gfwlist -server=/canon-ois.qa/127.0.0.1#5335 -ipset=/canon-ois.qa/gfwlist -server=/dragonage.com/127.0.0.1#5335 -ipset=/dragonage.com/gfwlist -server=/netflixdnstest2.com/127.0.0.1#5335 -ipset=/netflixdnstest2.com/gfwlist -server=/weltweitwachsen.de/127.0.0.1#5335 -ipset=/weltweitwachsen.de/gfwlist -server=/visa.sx/127.0.0.1#5335 -ipset=/visa.sx/gfwlist -server=/xo104.com/127.0.0.1#5335 -ipset=/xo104.com/gfwlist -server=/aboutamazon.it/127.0.0.1#5335 -ipset=/aboutamazon.it/gfwlist -server=/cashpassport.com/127.0.0.1#5335 -ipset=/cashpassport.com/gfwlist -server=/facebookmarketingpartners.com/127.0.0.1#5335 -ipset=/facebookmarketingpartners.com/gfwlist -server=/jetfuelapps.com/127.0.0.1#5335 -ipset=/jetfuelapps.com/gfwlist -server=/osdn.net/127.0.0.1#5335 -ipset=/osdn.net/gfwlist -server=/bestbuy24x7solutions.com/127.0.0.1#5335 -ipset=/bestbuy24x7solutions.com/gfwlist -server=/applefinalcutproworld.com/127.0.0.1#5335 -ipset=/applefinalcutproworld.com/gfwlist -server=/youtube.com.ec/127.0.0.1#5335 -ipset=/youtube.com.ec/gfwlist -server=/icloudbox.net/127.0.0.1#5335 -ipset=/icloudbox.net/gfwlist -server=/google.kg/127.0.0.1#5335 -ipset=/google.kg/gfwlist -server=/paypal-proserv.com/127.0.0.1#5335 -ipset=/paypal-proserv.com/gfwlist -server=/cheapbeatsbydreonsale.com/127.0.0.1#5335 -ipset=/cheapbeatsbydreonsale.com/gfwlist -server=/zdassets.com/127.0.0.1#5335 -ipset=/zdassets.com/gfwlist -server=/localizecdn.com/127.0.0.1#5335 -ipset=/localizecdn.com/gfwlist -server=/office365tw.com/127.0.0.1#5335 -ipset=/office365tw.com/gfwlist -server=/onedrive.co.uk/127.0.0.1#5335 -ipset=/onedrive.co.uk/gfwlist -server=/businessinsider.mx/127.0.0.1#5335 -ipset=/businessinsider.mx/gfwlist -server=/github.blog/127.0.0.1#5335 -ipset=/github.blog/gfwlist -server=/yahoo.com.pk/127.0.0.1#5335 -ipset=/yahoo.com.pk/gfwlist -server=/paypal.us/127.0.0.1#5335 -ipset=/paypal.us/gfwlist -server=/macromedia.com/127.0.0.1#5335 -ipset=/macromedia.com/gfwlist -server=/appleone.club/127.0.0.1#5335 -ipset=/appleone.club/gfwlist -server=/volvobuses.tn/127.0.0.1#5335 -ipset=/volvobuses.tn/gfwlist -server=/admeld.com/127.0.0.1#5335 -ipset=/admeld.com/gfwlist -server=/worldsecuresystems.com/127.0.0.1#5335 -ipset=/worldsecuresystems.com/gfwlist -server=/fastly.net/127.0.0.1#5335 -ipset=/fastly.net/gfwlist -server=/scholar.google.com.pa/127.0.0.1#5335 -ipset=/scholar.google.com.pa/gfwlist -server=/aaex.uk/127.0.0.1#5335 -ipset=/aaex.uk/gfwlist -server=/voadeewanews.com/127.0.0.1#5335 -ipset=/voadeewanews.com/gfwlist -server=/bttzyw.com/127.0.0.1#5335 -ipset=/bttzyw.com/gfwlist -server=/gorin.jp/127.0.0.1#5335 -ipset=/gorin.jp/gfwlist -server=/verisign.co.uk/127.0.0.1#5335 -ipset=/verisign.co.uk/gfwlist -server=/singtaoopo.com/127.0.0.1#5335 -ipset=/singtaoopo.com/gfwlist -server=/eamirrorsedge.com/127.0.0.1#5335 -ipset=/eamirrorsedge.com/gfwlist -server=/ruinedking.com/127.0.0.1#5335 -ipset=/ruinedking.com/gfwlist -server=/monsterbeatsbydrenew.com/127.0.0.1#5335 -ipset=/monsterbeatsbydrenew.com/gfwlist -server=/centrino.com/127.0.0.1#5335 -ipset=/centrino.com/gfwlist -server=/paulsimon-music.com/127.0.0.1#5335 -ipset=/paulsimon-music.com/gfwlist -server=/facebook.cc/127.0.0.1#5335 -ipset=/facebook.cc/gfwlist -server=/beatsodre.com/127.0.0.1#5335 -ipset=/beatsodre.com/gfwlist -server=/duckduckgo.org/127.0.0.1#5335 -ipset=/duckduckgo.org/gfwlist -server=/bmwgroup-gaad.com/127.0.0.1#5335 -ipset=/bmwgroup-gaad.com/gfwlist -server=/simcity-buildit.com/127.0.0.1#5335 -ipset=/simcity-buildit.com/gfwlist -server=/microsoftiotinsiderlabs.com/127.0.0.1#5335 -ipset=/microsoftiotinsiderlabs.com/gfwlist -server=/volvopenta.de/127.0.0.1#5335 -ipset=/volvopenta.de/gfwlist -server=/mastercard.com.sg/127.0.0.1#5335 -ipset=/mastercard.com.sg/gfwlist -server=/businessinsider.com.pl/127.0.0.1#5335 -ipset=/businessinsider.com.pl/gfwlist -server=/yahoodns.net/127.0.0.1#5335 -ipset=/yahoodns.net/gfwlist -server=/geph.io/127.0.0.1#5335 -ipset=/geph.io/gfwlist -server=/mastercard.co.uk/127.0.0.1#5335 -ipset=/mastercard.co.uk/gfwlist -server=/adidas.com.tw/127.0.0.1#5335 -ipset=/adidas.com.tw/gfwlist -server=/cdnjs.com/127.0.0.1#5335 -ipset=/cdnjs.com/gfwlist -server=/canon-cee.com/127.0.0.1#5335 -ipset=/canon-cee.com/gfwlist -server=/feedly.com/127.0.0.1#5335 -ipset=/feedly.com/gfwlist -server=/newscdn.com.au/127.0.0.1#5335 -ipset=/newscdn.com.au/gfwlist -server=/nvidia.co.kr/127.0.0.1#5335 -ipset=/nvidia.co.kr/gfwlist -server=/ios-icloud.com/127.0.0.1#5335 -ipset=/ios-icloud.com/gfwlist -server=/bmw-connecteddrive.fr/127.0.0.1#5335 -ipset=/bmw-connecteddrive.fr/gfwlist -server=/youtube.ae/127.0.0.1#5335 -ipset=/youtube.ae/gfwlist -server=/blogspot.com.ng/127.0.0.1#5335 -ipset=/blogspot.com.ng/gfwlist -server=/aboutamazon.co.uk/127.0.0.1#5335 -ipset=/aboutamazon.co.uk/gfwlist -server=/netflav.com/127.0.0.1#5335 -ipset=/netflav.com/gfwlist -server=/adobecce.com/127.0.0.1#5335 -ipset=/adobecce.com/gfwlist -server=/statics-marketingsites-wcus-ms-com.akamaized.net/127.0.0.1#5335 -ipset=/statics-marketingsites-wcus-ms-com.akamaized.net/gfwlist -server=/garena.vn/127.0.0.1#5335 -ipset=/garena.vn/gfwlist -server=/intagrm.com/127.0.0.1#5335 -ipset=/intagrm.com/gfwlist -server=/zoom.us/127.0.0.1#5335 -ipset=/zoom.us/gfwlist -server=/mini.cl/127.0.0.1#5335 -ipset=/mini.cl/gfwlist -server=/xoom.us/127.0.0.1#5335 -ipset=/xoom.us/gfwlist -server=/thomsonreuters.com.au/127.0.0.1#5335 -ipset=/thomsonreuters.com.au/gfwlist -server=/amazontrust.com/127.0.0.1#5335 -ipset=/amazontrust.com/gfwlist -server=/facebookofsex.com/127.0.0.1#5335 -ipset=/facebookofsex.com/gfwlist -server=/googletagservices.com/127.0.0.1#5335 -ipset=/googletagservices.com/gfwlist -server=/nikebiz.info/127.0.0.1#5335 -ipset=/nikebiz.info/gfwlist -server=/googleacquisitionmigration.com/127.0.0.1#5335 -ipset=/googleacquisitionmigration.com/gfwlist -server=/i.org/127.0.0.1#5335 -ipset=/i.org/gfwlist -server=/hplfmedia.com/127.0.0.1#5335 -ipset=/hplfmedia.com/gfwlist -server=/srtcdn.net/127.0.0.1#5335 -ipset=/srtcdn.net/gfwlist -server=/canon.com.tw/127.0.0.1#5335 -ipset=/canon.com.tw/gfwlist -server=/monsterbeatsstore.com/127.0.0.1#5335 -ipset=/monsterbeatsstore.com/gfwlist -server=/bridgestonegolf.com/127.0.0.1#5335 -ipset=/bridgestonegolf.com/gfwlist -server=/starbucks.co.uk/127.0.0.1#5335 -ipset=/starbucks.co.uk/gfwlist -server=/slack-core.com/127.0.0.1#5335 -ipset=/slack-core.com/gfwlist -server=/travelexae.com/127.0.0.1#5335 -ipset=/travelexae.com/gfwlist -server=/pokemonblackwhite.com/127.0.0.1#5335 -ipset=/pokemonblackwhite.com/gfwlist -server=/w.org/127.0.0.1#5335 -ipset=/w.org/gfwlist -server=/x.org/127.0.0.1#5335 -ipset=/x.org/gfwlist -server=/bs-adreview.com/127.0.0.1#5335 -ipset=/bs-adreview.com/gfwlist -server=/swisssigner.ch/127.0.0.1#5335 -ipset=/swisssigner.ch/gfwlist -server=/wallet.com/127.0.0.1#5335 -ipset=/wallet.com/gfwlist -server=/yahoo.com.eg/127.0.0.1#5335 -ipset=/yahoo.com.eg/gfwlist -server=/disney.gr/127.0.0.1#5335 -ipset=/disney.gr/gfwlist -server=/viu.com/127.0.0.1#5335 -ipset=/viu.com/gfwlist -server=/optimumssl.com/127.0.0.1#5335 -ipset=/optimumssl.com/gfwlist -server=/warroom.org/127.0.0.1#5335 -ipset=/warroom.org/gfwlist -server=/vod-dash-uk-live.akamaized.net/127.0.0.1#5335 -ipset=/vod-dash-uk-live.akamaized.net/gfwlist -server=/uchicago.edu/127.0.0.1#5335 -ipset=/uchicago.edu/gfwlist -server=/reastatic.net/127.0.0.1#5335 -ipset=/reastatic.net/gfwlist -server=/eiu.com/127.0.0.1#5335 -ipset=/eiu.com/gfwlist -server=/ipod.ca/127.0.0.1#5335 -ipset=/ipod.ca/gfwlist -server=/cdn77.com/127.0.0.1#5335 -ipset=/cdn77.com/gfwlist -server=/mastercard.com.kw/127.0.0.1#5335 -ipset=/mastercard.com.kw/gfwlist -server=/webex.com.mx/127.0.0.1#5335 -ipset=/webex.com.mx/gfwlist -server=/intel.cl/127.0.0.1#5335 -ipset=/intel.cl/gfwlist -server=/dropboxpartners.com/127.0.0.1#5335 -ipset=/dropboxpartners.com/gfwlist -server=/scholar.google.gr/127.0.0.1#5335 -ipset=/scholar.google.gr/gfwlist -server=/bitflyer.com/127.0.0.1#5335 -ipset=/bitflyer.com/gfwlist -server=/appleworldwidedeveloper.hb-api.omtrdc.net/127.0.0.1#5335 -ipset=/appleworldwidedeveloper.hb-api.omtrdc.net/gfwlist -server=/oneapi.com/127.0.0.1#5335 -ipset=/oneapi.com/gfwlist -server=/nentindo.net/127.0.0.1#5335 -ipset=/nentindo.net/gfwlist -server=/lysol.com.mx/127.0.0.1#5335 -ipset=/lysol.com.mx/gfwlist -server=/buddymedia.com/127.0.0.1#5335 -ipset=/buddymedia.com/gfwlist -server=/ipod.com.fr/127.0.0.1#5335 -ipset=/ipod.com.fr/gfwlist -server=/thegithubshop.com/127.0.0.1#5335 -ipset=/thegithubshop.com/gfwlist -server=/google.com.gh/127.0.0.1#5335 -ipset=/google.com.gh/gfwlist -server=/npr.org/127.0.0.1#5335 -ipset=/npr.org/gfwlist -server=/bit.ly/127.0.0.1#5335 -ipset=/bit.ly/gfwlist -server=/voabambara.com/127.0.0.1#5335 -ipset=/voabambara.com/gfwlist -server=/gvt2.com/127.0.0.1#5335 -ipset=/gvt2.com/gfwlist -server=/veet.co.kr/127.0.0.1#5335 -ipset=/veet.co.kr/gfwlist -server=/visiontimes.it/127.0.0.1#5335 -ipset=/visiontimes.it/gfwlist -server=/bestbuyphotoworkshoptours.com/127.0.0.1#5335 -ipset=/bestbuyphotoworkshoptours.com/gfwlist -server=/paypal-center.info/127.0.0.1#5335 -ipset=/paypal-center.info/gfwlist -server=/sourceforge.com/127.0.0.1#5335 -ipset=/sourceforge.com/gfwlist -server=/51dh.site/127.0.0.1#5335 -ipset=/51dh.site/gfwlist -server=/zohowebstatic.com/127.0.0.1#5335 -ipset=/zohowebstatic.com/gfwlist -server=/themathsfactor.com/127.0.0.1#5335 -ipset=/themathsfactor.com/gfwlist -server=/paypal-marketing.com/127.0.0.1#5335 -ipset=/paypal-marketing.com/gfwlist -server=/hackthedrive.com/127.0.0.1#5335 -ipset=/hackthedrive.com/gfwlist -server=/liketwice.com/127.0.0.1#5335 -ipset=/liketwice.com/gfwlist -server=/target.com/127.0.0.1#5335 -ipset=/target.com/gfwlist -server=/viu.tv/127.0.0.1#5335 -ipset=/viu.tv/gfwlist -server=/reurl.cc/127.0.0.1#5335 -ipset=/reurl.cc/gfwlist -server=/blogspot.hr/127.0.0.1#5335 -ipset=/blogspot.hr/gfwlist -server=/theuab.net/127.0.0.1#5335 -ipset=/theuab.net/gfwlist -server=/geek-squad-support.com/127.0.0.1#5335 -ipset=/geek-squad-support.com/gfwlist -server=/djreprints.com/127.0.0.1#5335 -ipset=/djreprints.com/gfwlist -server=/miniso.ge/127.0.0.1#5335 -ipset=/miniso.ge/gfwlist -server=/pearsononlineacademy.com/127.0.0.1#5335 -ipset=/pearsononlineacademy.com/gfwlist -server=/bbcverticals.com/127.0.0.1#5335 -ipset=/bbcverticals.com/gfwlist -server=/cloudflareclient.com/127.0.0.1#5335 -ipset=/cloudflareclient.com/gfwlist -server=/campuslondon.com/127.0.0.1#5335 -ipset=/campuslondon.com/gfwlist -server=/facebook4business.com/127.0.0.1#5335 -ipset=/facebook4business.com/gfwlist -server=/realclearenergy.org/127.0.0.1#5335 -ipset=/realclearenergy.org/gfwlist -server=/minimotoringrewards.com/127.0.0.1#5335 -ipset=/minimotoringrewards.com/gfwlist -server=/cnnikebrand.com/127.0.0.1#5335 -ipset=/cnnikebrand.com/gfwlist -server=/zenodo.org/127.0.0.1#5335 -ipset=/zenodo.org/gfwlist -server=/fiotolia.com/127.0.0.1#5335 -ipset=/fiotolia.com/gfwlist -server=/pornbest.org/127.0.0.1#5335 -ipset=/pornbest.org/gfwlist -server=/visa.hk/127.0.0.1#5335 -ipset=/visa.hk/gfwlist -server=/bmw-connecteddrive.lt/127.0.0.1#5335 -ipset=/bmw-connecteddrive.lt/gfwlist -server=/monsterdrebeats-usa.net/127.0.0.1#5335 -ipset=/monsterdrebeats-usa.net/gfwlist -server=/foxneo.com/127.0.0.1#5335 -ipset=/foxneo.com/gfwlist -server=/bmw-connecteddrive.bg/127.0.0.1#5335 -ipset=/bmw-connecteddrive.bg/gfwlist -server=/scholar.google.com.my/127.0.0.1#5335 -ipset=/scholar.google.com.my/gfwlist -server=/netflixtechblog.com/127.0.0.1#5335 -ipset=/netflixtechblog.com/gfwlist -server=/vmware-techcenter.com/127.0.0.1#5335 -ipset=/vmware-techcenter.com/gfwlist -server=/electronicarts.fr/127.0.0.1#5335 -ipset=/electronicarts.fr/gfwlist -server=/autodraw.com/127.0.0.1#5335 -ipset=/autodraw.com/gfwlist -server=/tdesktop.com/127.0.0.1#5335 -ipset=/tdesktop.com/gfwlist -server=/snapchat.com/127.0.0.1#5335 -ipset=/snapchat.com/gfwlist -server=/live.eu/127.0.0.1#5335 -ipset=/live.eu/gfwlist -server=/cnbcfm.com/127.0.0.1#5335 -ipset=/cnbcfm.com/gfwlist -server=/tiresplus.com/127.0.0.1#5335 -ipset=/tiresplus.com/gfwlist -server=/bmwzentrum.com/127.0.0.1#5335 -ipset=/bmwzentrum.com/gfwlist -server=/mastercard.de/127.0.0.1#5335 -ipset=/mastercard.de/gfwlist -server=/msinnovationchallenge.com/127.0.0.1#5335 -ipset=/msinnovationchallenge.com/gfwlist -server=/alphabet.org.uk/127.0.0.1#5335 -ipset=/alphabet.org.uk/gfwlist -server=/attstadium.com/127.0.0.1#5335 -ipset=/attstadium.com/gfwlist -server=/alibabacloud.com.tw/127.0.0.1#5335 -ipset=/alibabacloud.com.tw/gfwlist -server=/yahoo.com.uy/127.0.0.1#5335 -ipset=/yahoo.com.uy/gfwlist -server=/hbogoasia.hk/127.0.0.1#5335 -ipset=/hbogoasia.hk/gfwlist -server=/bmw-connecteddrive.co.nz/127.0.0.1#5335 -ipset=/bmw-connecteddrive.co.nz/gfwlist -server=/nvidia.eu/127.0.0.1#5335 -ipset=/nvidia.eu/gfwlist -server=/hotmail.net/127.0.0.1#5335 -ipset=/hotmail.net/gfwlist -server=/youtube.com.ly/127.0.0.1#5335 -ipset=/youtube.com.ly/gfwlist -server=/vipbeatsbydre.com/127.0.0.1#5335 -ipset=/vipbeatsbydre.com/gfwlist -server=/dettol.com.my/127.0.0.1#5335 -ipset=/dettol.com.my/gfwlist -server=/caime.xyz/127.0.0.1#5335 -ipset=/caime.xyz/gfwlist -server=/pornhubpremium.com/127.0.0.1#5335 -ipset=/pornhubpremium.com/gfwlist -server=/monsterbeatsshops.net/127.0.0.1#5335 -ipset=/monsterbeatsshops.net/gfwlist -server=/pvzheroes.com/127.0.0.1#5335 -ipset=/pvzheroes.com/gfwlist -server=/persagg.com/127.0.0.1#5335 -ipset=/persagg.com/gfwlist -server=/dungeonkeeper.cn/127.0.0.1#5335 -ipset=/dungeonkeeper.cn/gfwlist -server=/volvotruckcenter.nl/127.0.0.1#5335 -ipset=/volvotruckcenter.nl/gfwlist -server=/bmw-motorrad.com.pe/127.0.0.1#5335 -ipset=/bmw-motorrad.com.pe/gfwlist -server=/enfabebe.com/127.0.0.1#5335 -ipset=/enfabebe.com/gfwlist -server=/covid19rx.org/127.0.0.1#5335 -ipset=/covid19rx.org/gfwlist -server=/bmwgroup.jobs/127.0.0.1#5335 -ipset=/bmwgroup.jobs/gfwlist -server=/nike23.com/127.0.0.1#5335 -ipset=/nike23.com/gfwlist -server=/homedepot-static.com/127.0.0.1#5335 -ipset=/homedepot-static.com/gfwlist -server=/imtagram.com/127.0.0.1#5335 -ipset=/imtagram.com/gfwlist -server=/leagueoflegends.co.kr/127.0.0.1#5335 -ipset=/leagueoflegends.co.kr/gfwlist -server=/bmw-motorrad.co.kr/127.0.0.1#5335 -ipset=/bmw-motorrad.co.kr/gfwlist -server=/webobjects.net/127.0.0.1#5335 -ipset=/webobjects.net/gfwlist -server=/google.org/127.0.0.1#5335 -ipset=/google.org/gfwlist -server=/mastercard.com.mx/127.0.0.1#5335 -ipset=/mastercard.com.mx/gfwlist -server=/instagrampartners.com/127.0.0.1#5335 -ipset=/instagrampartners.com/gfwlist -server=/enfamama.com.ph/127.0.0.1#5335 -ipset=/enfamama.com.ph/gfwlist -server=/integral7.com/127.0.0.1#5335 -ipset=/integral7.com/gfwlist -server=/mini.co.il/127.0.0.1#5335 -ipset=/mini.co.il/gfwlist -server=/madshi.net/127.0.0.1#5335 -ipset=/madshi.net/gfwlist -server=/visa.com/127.0.0.1#5335 -ipset=/visa.com/gfwlist -server=/azuresmartspaces.net/127.0.0.1#5335 -ipset=/azuresmartspaces.net/gfwlist -server=/techstreet.com/127.0.0.1#5335 -ipset=/techstreet.com/gfwlist -server=/vanish.es/127.0.0.1#5335 -ipset=/vanish.es/gfwlist -server=/kkbox.com.tw/127.0.0.1#5335 -ipset=/kkbox.com.tw/gfwlist -server=/darkness-risen.com/127.0.0.1#5335 -ipset=/darkness-risen.com/gfwlist -server=/github.io/127.0.0.1#5335 -ipset=/github.io/gfwlist -server=/adsensecustomsearchads.com/127.0.0.1#5335 -ipset=/adsensecustomsearchads.com/gfwlist -server=/apisof.net/127.0.0.1#5335 -ipset=/apisof.net/gfwlist -server=/mastercard.com.gt/127.0.0.1#5335 -ipset=/mastercard.com.gt/gfwlist -server=/applestore.co.uk/127.0.0.1#5335 -ipset=/applestore.co.uk/gfwlist -server=/uun97.com/127.0.0.1#5335 -ipset=/uun97.com/gfwlist -server=/nodesource.com/127.0.0.1#5335 -ipset=/nodesource.com/gfwlist -server=/verisign.com.vn/127.0.0.1#5335 -ipset=/verisign.com.vn/gfwlist -server=/paypal.jp/127.0.0.1#5335 -ipset=/paypal.jp/gfwlist -server=/thehulubraintrust.com/127.0.0.1#5335 -ipset=/thehulubraintrust.com/gfwlist -server=/cloudc.one/127.0.0.1#5335 -ipset=/cloudc.one/gfwlist -server=/whereilive.com.au/127.0.0.1#5335 -ipset=/whereilive.com.au/gfwlist -server=/microsoftsilverlight.com/127.0.0.1#5335 -ipset=/microsoftsilverlight.com/gfwlist -server=/bmw-motorrad.fi/127.0.0.1#5335 -ipset=/bmw-motorrad.fi/gfwlist -server=/mega.io/127.0.0.1#5335 -ipset=/mega.io/gfwlist -server=/psg-int-eastus.cloudapp.net/127.0.0.1#5335 -ipset=/psg-int-eastus.cloudapp.net/gfwlist -server=/youtube.cat/127.0.0.1#5335 -ipset=/youtube.cat/gfwlist -server=/whatbrowser.org/127.0.0.1#5335 -ipset=/whatbrowser.org/gfwlist -server=/intel.com.tw/127.0.0.1#5335 -ipset=/intel.com.tw/gfwlist -server=/globalsign.nl/127.0.0.1#5335 -ipset=/globalsign.nl/gfwlist -server=/shuziyimin.org/127.0.0.1#5335 -ipset=/shuziyimin.org/gfwlist -server=/mini.my/127.0.0.1#5335 -ipset=/mini.my/gfwlist -server=/sonypicturestelevision.com/127.0.0.1#5335 -ipset=/sonypicturestelevision.com/gfwlist -server=/sale-nikeshoes.com/127.0.0.1#5335 -ipset=/sale-nikeshoes.com/gfwlist -server=/duckduckgo.com.tw/127.0.0.1#5335 -ipset=/duckduckgo.com.tw/gfwlist -server=/wsjmediakit.com/127.0.0.1#5335 -ipset=/wsjmediakit.com/gfwlist -server=/facebook-login.com/127.0.0.1#5335 -ipset=/facebook-login.com/gfwlist -server=/charlotte-anime.jp/127.0.0.1#5335 -ipset=/charlotte-anime.jp/gfwlist -server=/amerikayidzayn.com/127.0.0.1#5335 -ipset=/amerikayidzayn.com/gfwlist -server=/beatsbydreaustraliaonline.com/127.0.0.1#5335 -ipset=/beatsbydreaustraliaonline.com/gfwlist -server=/sonystoragemedia.co.jp/127.0.0.1#5335 -ipset=/sonystoragemedia.co.jp/gfwlist -server=/scholar.google.fi/127.0.0.1#5335 -ipset=/scholar.google.fi/gfwlist -server=/blz-contentstack.com/127.0.0.1#5335 -ipset=/blz-contentstack.com/gfwlist -server=/visa.com.gy/127.0.0.1#5335 -ipset=/visa.com.gy/gfwlist -server=/myq2.com/127.0.0.1#5335 -ipset=/myq2.com/gfwlist -server=/tg.dev/127.0.0.1#5335 -ipset=/tg.dev/gfwlist -server=/cheapmonsterbeatsbydrdre.com/127.0.0.1#5335 -ipset=/cheapmonsterbeatsbydrdre.com/gfwlist -server=/scientificamerican.com/127.0.0.1#5335 -ipset=/scientificamerican.com/gfwlist -server=/cheapbeatsbydreshop.com/127.0.0.1#5335 -ipset=/cheapbeatsbydreshop.com/gfwlist -server=/ebayopensource.com/127.0.0.1#5335 -ipset=/ebayopensource.com/gfwlist -server=/volvotrucks.co.na/127.0.0.1#5335 -ipset=/volvotrucks.co.na/gfwlist -server=/dynacw.co.jp/127.0.0.1#5335 -ipset=/dynacw.co.jp/gfwlist -server=/nintendo.fr/127.0.0.1#5335 -ipset=/nintendo.fr/gfwlist -server=/bestbuy-audio.com/127.0.0.1#5335 -ipset=/bestbuy-audio.com/gfwlist -server=/dazndn.com/127.0.0.1#5335 -ipset=/dazndn.com/gfwlist -server=/hpsuresupply.com/127.0.0.1#5335 -ipset=/hpsuresupply.com/gfwlist -server=/foxneodigital.com/127.0.0.1#5335 -ipset=/foxneodigital.com/gfwlist -server=/d100.net/127.0.0.1#5335 -ipset=/d100.net/gfwlist -server=/techhub.ms/127.0.0.1#5335 -ipset=/techhub.ms/gfwlist -server=/vgg8.com/127.0.0.1#5335 -ipset=/vgg8.com/gfwlist -server=/mini.no/127.0.0.1#5335 -ipset=/mini.no/gfwlist -server=/ultimaforever.com/127.0.0.1#5335 -ipset=/ultimaforever.com/gfwlist -server=/accountkit.com/127.0.0.1#5335 -ipset=/accountkit.com/gfwlist -server=/facebookcovers.org/127.0.0.1#5335 -ipset=/facebookcovers.org/gfwlist -server=/besztbuy.com/127.0.0.1#5335 -ipset=/besztbuy.com/gfwlist -server=/canon.com.mk/127.0.0.1#5335 -ipset=/canon.com.mk/gfwlist -server=/applemusicfestival.com/127.0.0.1#5335 -ipset=/applemusicfestival.com/gfwlist -server=/monsterbeatsbydre-nz.com/127.0.0.1#5335 -ipset=/monsterbeatsbydre-nz.com/gfwlist -server=/notion.new/127.0.0.1#5335 -ipset=/notion.new/gfwlist -server=/scholar.google.co.th/127.0.0.1#5335 -ipset=/scholar.google.co.th/gfwlist -server=/lp99.pw/127.0.0.1#5335 -ipset=/lp99.pw/gfwlist -server=/visa.com.sv/127.0.0.1#5335 -ipset=/visa.com.sv/gfwlist -server=/bmw-group.com/127.0.0.1#5335 -ipset=/bmw-group.com/gfwlist -server=/ieeeaps.org/127.0.0.1#5335 -ipset=/ieeeaps.org/gfwlist -server=/iphone-vip4.com/127.0.0.1#5335 -ipset=/iphone-vip4.com/gfwlist -server=/beatsbydreheadphonesolo.com/127.0.0.1#5335 -ipset=/beatsbydreheadphonesolo.com/gfwlist -server=/compose-spec.io/127.0.0.1#5335 -ipset=/compose-spec.io/gfwlist -server=/drebeats-singapore.com/127.0.0.1#5335 -ipset=/drebeats-singapore.com/gfwlist -server=/radiomango.fm/127.0.0.1#5335 -ipset=/radiomango.fm/gfwlist -server=/disneylatino.com/127.0.0.1#5335 -ipset=/disneylatino.com/gfwlist -server=/grupobmw.com/127.0.0.1#5335 -ipset=/grupobmw.com/gfwlist -server=/minisolife.co.za/127.0.0.1#5335 -ipset=/minisolife.co.za/gfwlist -server=/fox-news.com/127.0.0.1#5335 -ipset=/fox-news.com/gfwlist -server=/monsterbeatsbydrdrecanada.com/127.0.0.1#5335 -ipset=/monsterbeatsbydrdrecanada.com/gfwlist -server=/pinterest.co.kr/127.0.0.1#5335 -ipset=/pinterest.co.kr/gfwlist -server=/localbitcoins.com/127.0.0.1#5335 -ipset=/localbitcoins.com/gfwlist -server=/zeit-world.org/127.0.0.1#5335 -ipset=/zeit-world.org/gfwlist -server=/acmvalidations.com/127.0.0.1#5335 -ipset=/acmvalidations.com/gfwlist -server=/rewrite-anime.tv/127.0.0.1#5335 -ipset=/rewrite-anime.tv/gfwlist -server=/fastly-terrarium.com/127.0.0.1#5335 -ipset=/fastly-terrarium.com/gfwlist -server=/adobehiddentreasures.com/127.0.0.1#5335 -ipset=/adobehiddentreasures.com/gfwlist -server=/appleid.hamburg/127.0.0.1#5335 -ipset=/appleid.hamburg/gfwlist -server=/comsoc.org/127.0.0.1#5335 -ipset=/comsoc.org/gfwlist -server=/enfamil.pl/127.0.0.1#5335 -ipset=/enfamil.pl/gfwlist -server=/blogspot.hu/127.0.0.1#5335 -ipset=/blogspot.hu/gfwlist -server=/mastercard.com.pe/127.0.0.1#5335 -ipset=/mastercard.com.pe/gfwlist -server=/nikeairhuarache.com/127.0.0.1#5335 -ipset=/nikeairhuarache.com/gfwlist -server=/aboutfacebook.com/127.0.0.1#5335 -ipset=/aboutfacebook.com/gfwlist -server=/ebayexpress.sg/127.0.0.1#5335 -ipset=/ebayexpress.sg/gfwlist -server=/mydirectgroove.com/127.0.0.1#5335 -ipset=/mydirectgroove.com/gfwlist -server=/91porn.com/127.0.0.1#5335 -ipset=/91porn.com/gfwlist -server=/air-nike-shoes.com/127.0.0.1#5335 -ipset=/air-nike-shoes.com/gfwlist -server=/ieeedeis.org/127.0.0.1#5335 -ipset=/ieeedeis.org/gfwlist -server=/bmw-tunisia.com/127.0.0.1#5335 -ipset=/bmw-tunisia.com/gfwlist -server=/alphera.ca/127.0.0.1#5335 -ipset=/alphera.ca/gfwlist -server=/ibeatsbydre.com/127.0.0.1#5335 -ipset=/ibeatsbydre.com/gfwlist -server=/spotify.design/127.0.0.1#5335 -ipset=/spotify.design/gfwlist -server=/nflhotsalejerseys.com/127.0.0.1#5335 -ipset=/nflhotsalejerseys.com/gfwlist -server=/codethemicrobit.com/127.0.0.1#5335 -ipset=/codethemicrobit.com/gfwlist -server=/durex.lv/127.0.0.1#5335 -ipset=/durex.lv/gfwlist -server=/wp-themes.com/127.0.0.1#5335 -ipset=/wp-themes.com/gfwlist -server=/ipadmini.lk/127.0.0.1#5335 -ipset=/ipadmini.lk/gfwlist -server=/humblebundle.com/127.0.0.1#5335 -ipset=/humblebundle.com/gfwlist -server=/shadowsocks.com/127.0.0.1#5335 -ipset=/shadowsocks.com/gfwlist -server=/rumble.com/127.0.0.1#5335 -ipset=/rumble.com/gfwlist -server=/archiveofourown.net/127.0.0.1#5335 -ipset=/archiveofourown.net/gfwlist -server=/volvotrucks.bg/127.0.0.1#5335 -ipset=/volvotrucks.bg/gfwlist -server=/a0pple.net/127.0.0.1#5335 -ipset=/a0pple.net/gfwlist -server=/studywatchbyverily.org/127.0.0.1#5335 -ipset=/studywatchbyverily.org/gfwlist -server=/vilavpn2.xyz/127.0.0.1#5335 -ipset=/vilavpn2.xyz/gfwlist -server=/homedepot.com/127.0.0.1#5335 -ipset=/homedepot.com/gfwlist -server=/protonmail.com/127.0.0.1#5335 -ipset=/protonmail.com/gfwlist -server=/niconico.com/127.0.0.1#5335 -ipset=/niconico.com/gfwlist -server=/scholar.google.hn/127.0.0.1#5335 -ipset=/scholar.google.hn/gfwlist -server=/youtube.com.es/127.0.0.1#5335 -ipset=/youtube.com.es/gfwlist -server=/headphones-cool.com/127.0.0.1#5335 -ipset=/headphones-cool.com/gfwlist -server=/office.net/127.0.0.1#5335 -ipset=/office.net/gfwlist -server=/movefrees.com/127.0.0.1#5335 -ipset=/movefrees.com/gfwlist -server=/paypal-notice.com/127.0.0.1#5335 -ipset=/paypal-notice.com/gfwlist -server=/medium.com/127.0.0.1#5335 -ipset=/medium.com/gfwlist -server=/insidemacintosh.com/127.0.0.1#5335 -ipset=/insidemacintosh.com/gfwlist -server=/alphera.de/127.0.0.1#5335 -ipset=/alphera.de/gfwlist -server=/gslink.us/127.0.0.1#5335 -ipset=/gslink.us/gfwlist -server=/ehwiki.org/127.0.0.1#5335 -ipset=/ehwiki.org/gfwlist -server=/i-o-u.info/127.0.0.1#5335 -ipset=/i-o-u.info/gfwlist -server=/mini.pt/127.0.0.1#5335 -ipset=/mini.pt/gfwlist -server=/nintendo.co.kr/127.0.0.1#5335 -ipset=/nintendo.co.kr/gfwlist -server=/bmw.am/127.0.0.1#5335 -ipset=/bmw.am/gfwlist -server=/myfoxsanfran.com/127.0.0.1#5335 -ipset=/myfoxsanfran.com/gfwlist -server=/bmw.com.ni/127.0.0.1#5335 -ipset=/bmw.com.ni/gfwlist -server=/visafintechfasttrack.com/127.0.0.1#5335 -ipset=/visafintechfasttrack.com/gfwlist -server=/quantil.com/127.0.0.1#5335 -ipset=/quantil.com/gfwlist -server=/hpconnected.com/127.0.0.1#5335 -ipset=/hpconnected.com/gfwlist -server=/beatspills.com/127.0.0.1#5335 -ipset=/beatspills.com/gfwlist -server=/bmw.lu/127.0.0.1#5335 -ipset=/bmw.lu/gfwlist -server=/volvobuses.ru/127.0.0.1#5335 -ipset=/volvobuses.ru/gfwlist -server=/realtype.jp/127.0.0.1#5335 -ipset=/realtype.jp/gfwlist -server=/hackfacebook.com/127.0.0.1#5335 -ipset=/hackfacebook.com/gfwlist -server=/emac.in/127.0.0.1#5335 -ipset=/emac.in/gfwlist -server=/n3ro.net/127.0.0.1#5335 -ipset=/n3ro.net/gfwlist -server=/disneyredirects.com/127.0.0.1#5335 -ipset=/disneyredirects.com/gfwlist -server=/wordpress.com/127.0.0.1#5335 -ipset=/wordpress.com/gfwlist -server=/bridgestone.com.co/127.0.0.1#5335 -ipset=/bridgestone.com.co/gfwlist -server=/wsjshop.com/127.0.0.1#5335 -ipset=/wsjshop.com/gfwlist -server=/sony-europe.com/127.0.0.1#5335 -ipset=/sony-europe.com/gfwlist -server=/paypal-optimizer.com/127.0.0.1#5335 -ipset=/paypal-optimizer.com/gfwlist -server=/soirt4.fun/127.0.0.1#5335 -ipset=/soirt4.fun/gfwlist -server=/personaltrainermath.com/127.0.0.1#5335 -ipset=/personaltrainermath.com/gfwlist -server=/rhodeislandbmw.com/127.0.0.1#5335 -ipset=/rhodeislandbmw.com/gfwlist -server=/chinaclothesstore.com/127.0.0.1#5335 -ipset=/chinaclothesstore.com/gfwlist -server=/economist.com/127.0.0.1#5335 -ipset=/economist.com/gfwlist -server=/facebpook.com/127.0.0.1#5335 -ipset=/facebpook.com/gfwlist -server=/beatsbydre-headphonesshop.com/127.0.0.1#5335 -ipset=/beatsbydre-headphonesshop.com/gfwlist -server=/google.cf/127.0.0.1#5335 -ipset=/google.cf/gfwlist -server=/dicela.net/127.0.0.1#5335 -ipset=/dicela.net/gfwlist -server=/famifun.com.tw/127.0.0.1#5335 -ipset=/famifun.com.tw/gfwlist -server=/stockagainstphotography.com/127.0.0.1#5335 -ipset=/stockagainstphotography.com/gfwlist -server=/wto.org/127.0.0.1#5335 -ipset=/wto.org/gfwlist -server=/directv.com/127.0.0.1#5335 -ipset=/directv.com/gfwlist -server=/beatsbestdeals.com/127.0.0.1#5335 -ipset=/beatsbestdeals.com/gfwlist -server=/bmwdcsnet.net/127.0.0.1#5335 -ipset=/bmwdcsnet.net/gfwlist -server=/bmw-connecteddrive.pl/127.0.0.1#5335 -ipset=/bmw-connecteddrive.pl/gfwlist -server=/applestore.com.bn/127.0.0.1#5335 -ipset=/applestore.com.bn/gfwlist -server=/intel.sa/127.0.0.1#5335 -ipset=/intel.sa/gfwlist -server=/visa.com.dm/127.0.0.1#5335 -ipset=/visa.com.dm/gfwlist -server=/facebookloginhelp.net/127.0.0.1#5335 -ipset=/facebookloginhelp.net/gfwlist -server=/applestore.cc/127.0.0.1#5335 -ipset=/applestore.cc/gfwlist -server=/itunbes.com/127.0.0.1#5335 -ipset=/itunbes.com/gfwlist -server=/enfabebe.com.do/127.0.0.1#5335 -ipset=/enfabebe.com.do/gfwlist -server=/btec.co.uk/127.0.0.1#5335 -ipset=/btec.co.uk/gfwlist -server=/bmw.be/127.0.0.1#5335 -ipset=/bmw.be/gfwlist -server=/rocksdb.org/127.0.0.1#5335 -ipset=/rocksdb.org/gfwlist -server=/akamaihd.net/127.0.0.1#5335 -ipset=/akamaihd.net/gfwlist -server=/veet.com.mx/127.0.0.1#5335 -ipset=/veet.com.mx/gfwlist -server=/flowtype.org/127.0.0.1#5335 -ipset=/flowtype.org/gfwlist -server=/alivercm.com/127.0.0.1#5335 -ipset=/alivercm.com/gfwlist -server=/futpromos.com/127.0.0.1#5335 -ipset=/futpromos.com/gfwlist -server=/bmw.com.au/127.0.0.1#5335 -ipset=/bmw.com.au/gfwlist -server=/oxfordscholarlyeditions.com/127.0.0.1#5335 -ipset=/oxfordscholarlyeditions.com/gfwlist -server=/enfagrow.com.my/127.0.0.1#5335 -ipset=/enfagrow.com.my/gfwlist -server=/blogspot.vn/127.0.0.1#5335 -ipset=/blogspot.vn/gfwlist -server=/webkitgtk.org/127.0.0.1#5335 -ipset=/webkitgtk.org/gfwlist -server=/ebaytradingassistant.com/127.0.0.1#5335 -ipset=/ebaytradingassistant.com/gfwlist -server=/bmw.co.id/127.0.0.1#5335 -ipset=/bmw.co.id/gfwlist -server=/debug.com/127.0.0.1#5335 -ipset=/debug.com/gfwlist -server=/mcrouter.org/127.0.0.1#5335 -ipset=/mcrouter.org/gfwlist -server=/hpstore.com/127.0.0.1#5335 -ipset=/hpstore.com/gfwlist -server=/nxtdig.com.hk/127.0.0.1#5335 -ipset=/nxtdig.com.hk/gfwlist -server=/mi9.com.au/127.0.0.1#5335 -ipset=/mi9.com.au/gfwlist -server=/beats4.net/127.0.0.1#5335 -ipset=/beats4.net/gfwlist -server=/shoping.com/127.0.0.1#5335 -ipset=/shoping.com/gfwlist -server=/bmw-connecteddrive.de/127.0.0.1#5335 -ipset=/bmw-connecteddrive.de/gfwlist -server=/hotmail.co/127.0.0.1#5335 -ipset=/hotmail.co/gfwlist -server=/akamaietpcompromisedcnctest.com/127.0.0.1#5335 -ipset=/akamaietpcompromisedcnctest.com/gfwlist -server=/mini.com.do/127.0.0.1#5335 -ipset=/mini.com.do/gfwlist -server=/sonypicturestelevisiongames.com/127.0.0.1#5335 -ipset=/sonypicturestelevisiongames.com/gfwlist -server=/facecook.com/127.0.0.1#5335 -ipset=/facecook.com/gfwlist -server=/bitfinex.com/127.0.0.1#5335 -ipset=/bitfinex.com/gfwlist -server=/monsterbeatsheadphone.com/127.0.0.1#5335 -ipset=/monsterbeatsheadphone.com/gfwlist -server=/verisign.sg/127.0.0.1#5335 -ipset=/verisign.sg/gfwlist -server=/intel.mk/127.0.0.1#5335 -ipset=/intel.mk/gfwlist -server=/bmw-connecteddrive.se/127.0.0.1#5335 -ipset=/bmw-connecteddrive.se/gfwlist -server=/paypalsurvey.com/127.0.0.1#5335 -ipset=/paypalsurvey.com/gfwlist -server=/bmw-calgary.ca/127.0.0.1#5335 -ipset=/bmw-calgary.ca/gfwlist -server=/foxmediacloud.com/127.0.0.1#5335 -ipset=/foxmediacloud.com/gfwlist -server=/cloudflaressl.com/127.0.0.1#5335 -ipset=/cloudflaressl.com/gfwlist -server=/kastatic.org/127.0.0.1#5335 -ipset=/kastatic.org/gfwlist -server=/beatsneon.com/127.0.0.1#5335 -ipset=/beatsneon.com/gfwlist -server=/savvyshopper.net.au/127.0.0.1#5335 -ipset=/savvyshopper.net.au/gfwlist -server=/reckittbenckiser.net/127.0.0.1#5335 -ipset=/reckittbenckiser.net/gfwlist -server=/foxsports-chicago.com/127.0.0.1#5335 -ipset=/foxsports-chicago.com/gfwlist -server=/kindleoasisnews.com/127.0.0.1#5335 -ipset=/kindleoasisnews.com/gfwlist -server=/xboxplayanywhere.com/127.0.0.1#5335 -ipset=/xboxplayanywhere.com/gfwlist -server=/hulugermany.com/127.0.0.1#5335 -ipset=/hulugermany.com/gfwlist -server=/foxnewsaffiliates.com/127.0.0.1#5335 -ipset=/foxnewsaffiliates.com/gfwlist -server=/beatsdreinau.com/127.0.0.1#5335 -ipset=/beatsdreinau.com/gfwlist -server=/web.app/127.0.0.1#5335 -ipset=/web.app/gfwlist -server=/canon.sk/127.0.0.1#5335 -ipset=/canon.sk/gfwlist -server=/supremacy.com/127.0.0.1#5335 -ipset=/supremacy.com/gfwlist -server=/cooliphonecasesstore.com/127.0.0.1#5335 -ipset=/cooliphonecasesstore.com/gfwlist -server=/appleaccount.net/127.0.0.1#5335 -ipset=/appleaccount.net/gfwlist -server=/paypal-support.com/127.0.0.1#5335 -ipset=/paypal-support.com/gfwlist -server=/trithucvn.org/127.0.0.1#5335 -ipset=/trithucvn.org/gfwlist -server=/mini-connected.de/127.0.0.1#5335 -ipset=/mini-connected.de/gfwlist -server=/appleid-applemx.com/127.0.0.1#5335 -ipset=/appleid-applemx.com/gfwlist -server=/google.co.id/127.0.0.1#5335 -ipset=/google.co.id/gfwlist -server=/computingreviews.com/127.0.0.1#5335 -ipset=/computingreviews.com/gfwlist -server=/nejm.org/127.0.0.1#5335 -ipset=/nejm.org/gfwlist -server=/lantern.io/127.0.0.1#5335 -ipset=/lantern.io/gfwlist -server=/cnbc.com/127.0.0.1#5335 -ipset=/cnbc.com/gfwlist -server=/wise-research.com/127.0.0.1#5335 -ipset=/wise-research.com/gfwlist -server=/pixiv.co.jp/127.0.0.1#5335 -ipset=/pixiv.co.jp/gfwlist -server=/nurofen.cz/127.0.0.1#5335 -ipset=/nurofen.cz/gfwlist -server=/harpercollinschristian.com/127.0.0.1#5335 -ipset=/harpercollinschristian.com/gfwlist -server=/directvmurfreesborotn.com/127.0.0.1#5335 -ipset=/directvmurfreesborotn.com/gfwlist -server=/xbox.eu/127.0.0.1#5335 -ipset=/xbox.eu/gfwlist -server=/ctfassets.net/127.0.0.1#5335 -ipset=/ctfassets.net/gfwlist -server=/beibao.com/127.0.0.1#5335 -ipset=/beibao.com/gfwlist -server=/faccebookk.com/127.0.0.1#5335 -ipset=/faccebookk.com/gfwlist -server=/foxsports.com/127.0.0.1#5335 -ipset=/foxsports.com/gfwlist -server=/advertisercommunity.com/127.0.0.1#5335 -ipset=/advertisercommunity.com/gfwlist -server=/google.com.kw/127.0.0.1#5335 -ipset=/google.com.kw/gfwlist -server=/qualcomm.com.tw/127.0.0.1#5335 -ipset=/qualcomm.com.tw/gfwlist -server=/glasamerike.net/127.0.0.1#5335 -ipset=/glasamerike.net/gfwlist -server=/pearsoninstitute.ac.za/127.0.0.1#5335 -ipset=/pearsoninstitute.ac.za/gfwlist -server=/thesimssocial.com/127.0.0.1#5335 -ipset=/thesimssocial.com/gfwlist -server=/facboox.com/127.0.0.1#5335 -ipset=/facboox.com/gfwlist -server=/mini.es/127.0.0.1#5335 -ipset=/mini.es/gfwlist -server=/lysol.co.cr/127.0.0.1#5335 -ipset=/lysol.co.cr/gfwlist -server=/travelex.be/127.0.0.1#5335 -ipset=/travelex.be/gfwlist -server=/google.tm/127.0.0.1#5335 -ipset=/google.tm/gfwlist -server=/unity.com/127.0.0.1#5335 -ipset=/unity.com/gfwlist -server=/mini-egypt.com/127.0.0.1#5335 -ipset=/mini-egypt.com/gfwlist -server=/wipower.com/127.0.0.1#5335 -ipset=/wipower.com/gfwlist -server=/disneynow.com/127.0.0.1#5335 -ipset=/disneynow.com/gfwlist -server=/nettyinternet.com/127.0.0.1#5335 -ipset=/nettyinternet.com/gfwlist -server=/webex.com/127.0.0.1#5335 -ipset=/webex.com/gfwlist -server=/chicagolandbmw.com/127.0.0.1#5335 -ipset=/chicagolandbmw.com/gfwlist -server=/bmw.ba/127.0.0.1#5335 -ipset=/bmw.ba/gfwlist -server=/brightcovecdn.com/127.0.0.1#5335 -ipset=/brightcovecdn.com/gfwlist -server=/harperacademic.com/127.0.0.1#5335 -ipset=/harperacademic.com/gfwlist -server=/keepmovingwithmovefree.com/127.0.0.1#5335 -ipset=/keepmovingwithmovefree.com/gfwlist -server=/bridgestone.com/127.0.0.1#5335 -ipset=/bridgestone.com/gfwlist -server=/vk-portal.net/127.0.0.1#5335 -ipset=/vk-portal.net/gfwlist -server=/webobjects.com/127.0.0.1#5335 -ipset=/webobjects.com/gfwlist -server=/nikestore.com/127.0.0.1#5335 -ipset=/nikestore.com/gfwlist -server=/pinterest.com.mx/127.0.0.1#5335 -ipset=/pinterest.com.mx/gfwlist -server=/bmw-connecteddrive.it/127.0.0.1#5335 -ipset=/bmw-connecteddrive.it/gfwlist -server=/volvobuses.it/127.0.0.1#5335 -ipset=/volvobuses.it/gfwlist -server=/bmw-motorrad.sv/127.0.0.1#5335 -ipset=/bmw-motorrad.sv/gfwlist -server=/fox47.com/127.0.0.1#5335 -ipset=/fox47.com/gfwlist -server=/hpceo.com/127.0.0.1#5335 -ipset=/hpceo.com/gfwlist -server=/faceboox.com/127.0.0.1#5335 -ipset=/faceboox.com/gfwlist -server=/votolia.com/127.0.0.1#5335 -ipset=/votolia.com/gfwlist -server=/bmw-connecteddrive.be/127.0.0.1#5335 -ipset=/bmw-connecteddrive.be/gfwlist -server=/sni1dcb6gl.wpc.edgecastcdn.net/127.0.0.1#5335 -ipset=/sni1dcb6gl.wpc.edgecastcdn.net/gfwlist -server=/cotolia.com/127.0.0.1#5335 -ipset=/cotolia.com/gfwlist -server=/mirrorsedge.jp/127.0.0.1#5335 -ipset=/mirrorsedge.jp/gfwlist -server=/paypal.so/127.0.0.1#5335 -ipset=/paypal.so/gfwlist -server=/fotolia.com/127.0.0.1#5335 -ipset=/fotolia.com/gfwlist -server=/aiv-cdn.net/127.0.0.1#5335 -ipset=/aiv-cdn.net/gfwlist -server=/pinterest.com/127.0.0.1#5335 -ipset=/pinterest.com/gfwlist -server=/mktdns.com/127.0.0.1#5335 -ipset=/mktdns.com/gfwlist -server=/vkuservideo.com/127.0.0.1#5335 -ipset=/vkuservideo.com/gfwlist -server=/mit.edu/127.0.0.1#5335 -ipset=/mit.edu/gfwlist -server=/myfbfans.com/127.0.0.1#5335 -ipset=/myfbfans.com/gfwlist -server=/pugetsoundbmw.com/127.0.0.1#5335 -ipset=/pugetsoundbmw.com/gfwlist -server=/nikefootballjersey.com/127.0.0.1#5335 -ipset=/nikefootballjersey.com/gfwlist -server=/buycheapbeatsdreuk.com/127.0.0.1#5335 -ipset=/buycheapbeatsdreuk.com/gfwlist -server=/googleearth.com/127.0.0.1#5335 -ipset=/googleearth.com/gfwlist -server=/mytimesplus.co.uk/127.0.0.1#5335 -ipset=/mytimesplus.co.uk/gfwlist -server=/cmu.edu/127.0.0.1#5335 -ipset=/cmu.edu/gfwlist -server=/megaphone.fm/127.0.0.1#5335 -ipset=/megaphone.fm/gfwlist -server=/alphabet.jp/127.0.0.1#5335 -ipset=/alphabet.jp/gfwlist -server=/attssl.com/127.0.0.1#5335 -ipset=/attssl.com/gfwlist -server=/akastream.net/127.0.0.1#5335 -ipset=/akastream.net/gfwlist -server=/appletvapp.apple/127.0.0.1#5335 -ipset=/appletvapp.apple/gfwlist -server=/paypal-integration.com/127.0.0.1#5335 -ipset=/paypal-integration.com/gfwlist -server=/clarivate.com/127.0.0.1#5335 -ipset=/clarivate.com/gfwlist -server=/blogspot.com.ee/127.0.0.1#5335 -ipset=/blogspot.com.ee/gfwlist -server=/pccwsolutions.com/127.0.0.1#5335 -ipset=/pccwsolutions.com/gfwlist -server=/pwabuilder.com/127.0.0.1#5335 -ipset=/pwabuilder.com/gfwlist -server=/fox32.com/127.0.0.1#5335 -ipset=/fox32.com/gfwlist -server=/dowjones.io/127.0.0.1#5335 -ipset=/dowjones.io/gfwlist -server=/faceobk.com/127.0.0.1#5335 -ipset=/faceobk.com/gfwlist -server=/vanish.nl/127.0.0.1#5335 -ipset=/vanish.nl/gfwlist -server=/adx.promo/127.0.0.1#5335 -ipset=/adx.promo/gfwlist -server=/facebooksignup.net/127.0.0.1#5335 -ipset=/facebooksignup.net/gfwlist -server=/disney.co.jp/127.0.0.1#5335 -ipset=/disney.co.jp/gfwlist -server=/vfsco.com.tr/127.0.0.1#5335 -ipset=/vfsco.com.tr/gfwlist -server=/ebayopensource.net/127.0.0.1#5335 -ipset=/ebayopensource.net/gfwlist -server=/chillingo.com/127.0.0.1#5335 -ipset=/chillingo.com/gfwlist -server=/alphera.com/127.0.0.1#5335 -ipset=/alphera.com/gfwlist -server=/adidas.se/127.0.0.1#5335 -ipset=/adidas.se/gfwlist -server=/vfsco.co.za/127.0.0.1#5335 -ipset=/vfsco.co.za/gfwlist -server=/faceboik.com/127.0.0.1#5335 -ipset=/faceboik.com/gfwlist -server=/linux.org/127.0.0.1#5335 -ipset=/linux.org/gfwlist -server=/minidurham.com/127.0.0.1#5335 -ipset=/minidurham.com/gfwlist -server=/localpresshk.com/127.0.0.1#5335 -ipset=/localpresshk.com/gfwlist -server=/herokuapp.com/127.0.0.1#5335 -ipset=/herokuapp.com/gfwlist -server=/beatsmusic.com/127.0.0.1#5335 -ipset=/beatsmusic.com/gfwlist -server=/youtube.jp/127.0.0.1#5335 -ipset=/youtube.jp/gfwlist -server=/google.cl/127.0.0.1#5335 -ipset=/google.cl/gfwlist -server=/openstreetmap.com/127.0.0.1#5335 -ipset=/openstreetmap.com/gfwlist -server=/heads4-ak-spotify-com.akamaized.net/127.0.0.1#5335 -ipset=/heads4-ak-spotify-com.akamaized.net/gfwlist -server=/virtuata.com/127.0.0.1#5335 -ipset=/virtuata.com/gfwlist -server=/freehulu.com/127.0.0.1#5335 -ipset=/freehulu.com/gfwlist -server=/shinhangmc.com/127.0.0.1#5335 -ipset=/shinhangmc.com/gfwlist -server=/gettyimages.fr/127.0.0.1#5335 -ipset=/gettyimages.fr/gfwlist -server=/beatsbydre.jp/127.0.0.1#5335 -ipset=/beatsbydre.jp/gfwlist -server=/fury.blog/127.0.0.1#5335 -ipset=/fury.blog/gfwlist -server=/waa.tw/127.0.0.1#5335 -ipset=/waa.tw/gfwlist -server=/whatsapp.tv/127.0.0.1#5335 -ipset=/whatsapp.tv/gfwlist -server=/yahoo.co.mz/127.0.0.1#5335 -ipset=/yahoo.co.mz/gfwlist -server=/nextwork.com.hk/127.0.0.1#5335 -ipset=/nextwork.com.hk/gfwlist -server=/s-nbcnews.com/127.0.0.1#5335 -ipset=/s-nbcnews.com/gfwlist -server=/intel.gt/127.0.0.1#5335 -ipset=/intel.gt/gfwlist -server=/bmw.by/127.0.0.1#5335 -ipset=/bmw.by/gfwlist -server=/mitpressjournals.org/127.0.0.1#5335 -ipset=/mitpressjournals.org/gfwlist -server=/visasignature.co.kr/127.0.0.1#5335 -ipset=/visasignature.co.kr/gfwlist -server=/xn--d1acpjx3f.xn--p1ai/127.0.0.1#5335 -ipset=/xn--d1acpjx3f.xn--p1ai/gfwlist -server=/microsoft.by/127.0.0.1#5335 -ipset=/microsoft.by/gfwlist -server=/vfsco.dk/127.0.0.1#5335 -ipset=/vfsco.dk/gfwlist -server=/skysports.fr/127.0.0.1#5335 -ipset=/skysports.fr/gfwlist -server=/riotgames.info/127.0.0.1#5335 -ipset=/riotgames.info/gfwlist -server=/ipadair.hk/127.0.0.1#5335 -ipset=/ipadair.hk/gfwlist -server=/web.dev/127.0.0.1#5335 -ipset=/web.dev/gfwlist -server=/webmoneyinfo.com/127.0.0.1#5335 -ipset=/webmoneyinfo.com/gfwlist -server=/amazonalexavoxcon.com/127.0.0.1#5335 -ipset=/amazonalexavoxcon.com/gfwlist -server=/pricelessafrica.com/127.0.0.1#5335 -ipset=/pricelessafrica.com/gfwlist -server=/appe-store.com/127.0.0.1#5335 -ipset=/appe-store.com/gfwlist -server=/bmwclassic.com/127.0.0.1#5335 -ipset=/bmwclassic.com/gfwlist -server=/fox42kptm.com/127.0.0.1#5335 -ipset=/fox42kptm.com/gfwlist -server=/stunnel.org/127.0.0.1#5335 -ipset=/stunnel.org/gfwlist -server=/html5rocks.com/127.0.0.1#5335 -ipset=/html5rocks.com/gfwlist -server=/eduplus.hk/127.0.0.1#5335 -ipset=/eduplus.hk/gfwlist -server=/ieee-aess.org/127.0.0.1#5335 -ipset=/ieee-aess.org/gfwlist -server=/pinterest.nz/127.0.0.1#5335 -ipset=/pinterest.nz/gfwlist -server=/bmw-motorrad.gt/127.0.0.1#5335 -ipset=/bmw-motorrad.gt/gfwlist -server=/bmw-connecteddrive.ae/127.0.0.1#5335 -ipset=/bmw-connecteddrive.ae/gfwlist -server=/multicurrencycashpassport.com/127.0.0.1#5335 -ipset=/multicurrencycashpassport.com/gfwlist -server=/travelex.co.in/127.0.0.1#5335 -ipset=/travelex.co.in/gfwlist -server=/zukunftswerkstatt.de/127.0.0.1#5335 -ipset=/zukunftswerkstatt.de/gfwlist -server=/youtube.qa/127.0.0.1#5335 -ipset=/youtube.qa/gfwlist -server=/pinterest.com.pe/127.0.0.1#5335 -ipset=/pinterest.com.pe/gfwlist -server=/fox10news.com/127.0.0.1#5335 -ipset=/fox10news.com/gfwlist -server=/starwarsgalacticstarcruiser.com/127.0.0.1#5335 -ipset=/starwarsgalacticstarcruiser.com/gfwlist -server=/mepn.com/127.0.0.1#5335 -ipset=/mepn.com/gfwlist -server=/intel.co.kr/127.0.0.1#5335 -ipset=/intel.co.kr/gfwlist -server=/nikesbdunks.net/127.0.0.1#5335 -ipset=/nikesbdunks.net/gfwlist -server=/vfsco.be/127.0.0.1#5335 -ipset=/vfsco.be/gfwlist -server=/thestandnews.com/127.0.0.1#5335 -ipset=/thestandnews.com/gfwlist -server=/perfectkickz.net/127.0.0.1#5335 -ipset=/perfectkickz.net/gfwlist -server=/beatswirelesscheap.com/127.0.0.1#5335 -ipset=/beatswirelesscheap.com/gfwlist -server=/atnext.com/127.0.0.1#5335 -ipset=/atnext.com/gfwlist -server=/huluasks.com/127.0.0.1#5335 -ipset=/huluasks.com/gfwlist -server=/rust-lang.org/127.0.0.1#5335 -ipset=/rust-lang.org/gfwlist -server=/fairmarket.com/127.0.0.1#5335 -ipset=/fairmarket.com/gfwlist -server=/facebookfacebook.com/127.0.0.1#5335 -ipset=/facebookfacebook.com/gfwlist -server=/chocolatey.org/127.0.0.1#5335 -ipset=/chocolatey.org/gfwlist -server=/youtube.com.qa/127.0.0.1#5335 -ipset=/youtube.com.qa/gfwlist -server=/dynacw.com.tw/127.0.0.1#5335 -ipset=/dynacw.com.tw/gfwlist -server=/mzed.com/127.0.0.1#5335 -ipset=/mzed.com/gfwlist -server=/canon.uz/127.0.0.1#5335 -ipset=/canon.uz/gfwlist -server=/bbestmall.com/127.0.0.1#5335 -ipset=/bbestmall.com/gfwlist -server=/tegrazone.jp/127.0.0.1#5335 -ipset=/tegrazone.jp/gfwlist -server=/shopeemobile.com/127.0.0.1#5335 -ipset=/shopeemobile.com/gfwlist -server=/mini-connected.com/127.0.0.1#5335 -ipset=/mini-connected.com/gfwlist -server=/bmw-lebanon.com/127.0.0.1#5335 -ipset=/bmw-lebanon.com/gfwlist -server=/pcloud.tw/127.0.0.1#5335 -ipset=/pcloud.tw/gfwlist -server=/visapcsdirect.com/127.0.0.1#5335 -ipset=/visapcsdirect.com/gfwlist -server=/mini.jp/127.0.0.1#5335 -ipset=/mini.jp/gfwlist -server=/microsoftreactor.info/127.0.0.1#5335 -ipset=/microsoftreactor.info/gfwlist -server=/nikepioneer.com/127.0.0.1#5335 -ipset=/nikepioneer.com/gfwlist -server=/mini.com.tw/127.0.0.1#5335 -ipset=/mini.com.tw/gfwlist -server=/applepencil.net/127.0.0.1#5335 -ipset=/applepencil.net/gfwlist -server=/vagrantup.com/127.0.0.1#5335 -ipset=/vagrantup.com/gfwlist -server=/intelsecurity.com/127.0.0.1#5335 -ipset=/intelsecurity.com/gfwlist -server=/angelbeats.jp/127.0.0.1#5335 -ipset=/angelbeats.jp/gfwlist -server=/yahoo.nl/127.0.0.1#5335 -ipset=/yahoo.nl/gfwlist -server=/telex.cc/127.0.0.1#5335 -ipset=/telex.cc/gfwlist -server=/heraldsun.com.au/127.0.0.1#5335 -ipset=/heraldsun.com.au/gfwlist -server=/golosameriki.com/127.0.0.1#5335 -ipset=/golosameriki.com/gfwlist -server=/mujikorea.net/127.0.0.1#5335 -ipset=/mujikorea.net/gfwlist -server=/facebookgroups.com/127.0.0.1#5335 -ipset=/facebookgroups.com/gfwlist -server=/wogx.com/127.0.0.1#5335 -ipset=/wogx.com/gfwlist -server=/akamaiphillipines.com/127.0.0.1#5335 -ipset=/akamaiphillipines.com/gfwlist -server=/thefacebook.net/127.0.0.1#5335 -ipset=/thefacebook.net/gfwlist -server=/applehealth.com.hk/127.0.0.1#5335 -ipset=/applehealth.com.hk/gfwlist -server=/onlineinstagram.com/127.0.0.1#5335 -ipset=/onlineinstagram.com/gfwlist -server=/velostrata.com/127.0.0.1#5335 -ipset=/velostrata.com/gfwlist -server=/bridgestonenationalfleet.com/127.0.0.1#5335 -ipset=/bridgestonenationalfleet.com/gfwlist -server=/hkcnews.com/127.0.0.1#5335 -ipset=/hkcnews.com/gfwlist -server=/patentgold.net/127.0.0.1#5335 -ipset=/patentgold.net/gfwlist -server=/anb.org/127.0.0.1#5335 -ipset=/anb.org/gfwlist -server=/openstreetmap.net/127.0.0.1#5335 -ipset=/openstreetmap.net/gfwlist -server=/scholar.google.at/127.0.0.1#5335 -ipset=/scholar.google.at/gfwlist -server=/intagram.com/127.0.0.1#5335 -ipset=/intagram.com/gfwlist -server=/minihk.com/127.0.0.1#5335 -ipset=/minihk.com/gfwlist -server=/dlgarenanow-a.akamaihd.net/127.0.0.1#5335 -ipset=/dlgarenanow-a.akamaihd.net/gfwlist -server=/disney-discount.com/127.0.0.1#5335 -ipset=/disney-discount.com/gfwlist -server=/facebook-support.org/127.0.0.1#5335 -ipset=/facebook-support.org/gfwlist -server=/dnaindia.com/127.0.0.1#5335 -ipset=/dnaindia.com/gfwlist -server=/githubhackathon.com/127.0.0.1#5335 -ipset=/githubhackathon.com/gfwlist -server=/csis-prod.s3.amazonaws.com/127.0.0.1#5335 -ipset=/csis-prod.s3.amazonaws.com/gfwlist -server=/steamvideo-a.akamaihd.net/127.0.0.1#5335 -ipset=/steamvideo-a.akamaihd.net/gfwlist -server=/fifastreet3.com/127.0.0.1#5335 -ipset=/fifastreet3.com/gfwlist -server=/dtci.technology/127.0.0.1#5335 -ipset=/dtci.technology/gfwlist -server=/chinaeconomicreview.com/127.0.0.1#5335 -ipset=/chinaeconomicreview.com/gfwlist -server=/theintelstore.com/127.0.0.1#5335 -ipset=/theintelstore.com/gfwlist -server=/fastlylb.net/127.0.0.1#5335 -ipset=/fastlylb.net/gfwlist -server=/monsterbeatscasques.com/127.0.0.1#5335 -ipset=/monsterbeatscasques.com/gfwlist -server=/paypalhere.info/127.0.0.1#5335 -ipset=/paypalhere.info/gfwlist -server=/alphabet.es/127.0.0.1#5335 -ipset=/alphabet.es/gfwlist -server=/sharethis.com/127.0.0.1#5335 -ipset=/sharethis.com/gfwlist -server=/attvoip.com/127.0.0.1#5335 -ipset=/attvoip.com/gfwlist -server=/intel.ee/127.0.0.1#5335 -ipset=/intel.ee/gfwlist -server=/verisign.ch/127.0.0.1#5335 -ipset=/verisign.ch/gfwlist -server=/docker.io/127.0.0.1#5335 -ipset=/docker.io/gfwlist -server=/firefox.com/127.0.0.1#5335 -ipset=/firefox.com/gfwlist -server=/nike.us/127.0.0.1#5335 -ipset=/nike.us/gfwlist -server=/logicoolg.com/127.0.0.1#5335 -ipset=/logicoolg.com/gfwlist -server=/parler.com/127.0.0.1#5335 -ipset=/parler.com/gfwlist -server=/ebayde.com/127.0.0.1#5335 -ipset=/ebayde.com/gfwlist -server=/makesenseofdata.com/127.0.0.1#5335 -ipset=/makesenseofdata.com/gfwlist -server=/mini.se/127.0.0.1#5335 -ipset=/mini.se/gfwlist -server=/mythicgames.com/127.0.0.1#5335 -ipset=/mythicgames.com/gfwlist -server=/applecomputer.co.in/127.0.0.1#5335 -ipset=/applecomputer.co.in/gfwlist -server=/offresspecialesbmw.ca/127.0.0.1#5335 -ipset=/offresspecialesbmw.ca/gfwlist -server=/ietf.org/127.0.0.1#5335 -ipset=/ietf.org/gfwlist -server=/ebay.com.mt/127.0.0.1#5335 -ipset=/ebay.com.mt/gfwlist -server=/foxcredit.com/127.0.0.1#5335 -ipset=/foxcredit.com/gfwlist -server=/minid.no/127.0.0.1#5335 -ipset=/minid.no/gfwlist -server=/jav101.com/127.0.0.1#5335 -ipset=/jav101.com/gfwlist -server=/planetminecraft.com/127.0.0.1#5335 -ipset=/planetminecraft.com/gfwlist -server=/disneycareers.com/127.0.0.1#5335 -ipset=/disneycareers.com/gfwlist -server=/nationalaustraliaban.tt.omtrdc.net/127.0.0.1#5335 -ipset=/nationalaustraliaban.tt.omtrdc.net/gfwlist -server=/spacely.com.au/127.0.0.1#5335 -ipset=/spacely.com.au/gfwlist -server=/vfsco.kr/127.0.0.1#5335 -ipset=/vfsco.kr/gfwlist -server=/apple-watch.com.ru/127.0.0.1#5335 -ipset=/apple-watch.com.ru/gfwlist -server=/thetimes.ie/127.0.0.1#5335 -ipset=/thetimes.ie/gfwlist -server=/bmw-motorrad.ee/127.0.0.1#5335 -ipset=/bmw-motorrad.ee/gfwlist -server=/paypalgivingfund.org/127.0.0.1#5335 -ipset=/paypalgivingfund.org/gfwlist -server=/volvobuses.com.br/127.0.0.1#5335 -ipset=/volvobuses.com.br/gfwlist -server=/vimeo.com/127.0.0.1#5335 -ipset=/vimeo.com/gfwlist -server=/minikelowna.com/127.0.0.1#5335 -ipset=/minikelowna.com/gfwlist -server=/tkb008.xyz/127.0.0.1#5335 -ipset=/tkb008.xyz/gfwlist -server=/starbucks.fr/127.0.0.1#5335 -ipset=/starbucks.fr/gfwlist -server=/minecraftshop.com/127.0.0.1#5335 -ipset=/minecraftshop.com/gfwlist -server=/gettyimages.fi/127.0.0.1#5335 -ipset=/gettyimages.fi/gfwlist -server=/voadeewaradio.com/127.0.0.1#5335 -ipset=/voadeewaradio.com/gfwlist -server=/facebood.com/127.0.0.1#5335 -ipset=/facebood.com/gfwlist -server=/ntdtv.ru/127.0.0.1#5335 -ipset=/ntdtv.ru/gfwlist -server=/bmwarchiv.de/127.0.0.1#5335 -ipset=/bmwarchiv.de/gfwlist -server=/visabg.com/127.0.0.1#5335 -ipset=/visabg.com/gfwlist -server=/ts.la/127.0.0.1#5335 -ipset=/ts.la/gfwlist -server=/iphone5casescovers.com/127.0.0.1#5335 -ipset=/iphone5casescovers.com/gfwlist -server=/volvotrucks.co.mz/127.0.0.1#5335 -ipset=/volvotrucks.co.mz/gfwlist -server=/alpinelinux.org/127.0.0.1#5335 -ipset=/alpinelinux.org/gfwlist -server=/dba.dk/127.0.0.1#5335 -ipset=/dba.dk/gfwlist -server=/kicu.tv/127.0.0.1#5335 -ipset=/kicu.tv/gfwlist -server=/mvk.com/127.0.0.1#5335 -ipset=/mvk.com/gfwlist -server=/scoreland.com/127.0.0.1#5335 -ipset=/scoreland.com/gfwlist -server=/fburl.com/127.0.0.1#5335 -ipset=/fburl.com/gfwlist -server=/beatselectronicsllc.tt.omtrdc.net/127.0.0.1#5335 -ipset=/beatselectronicsllc.tt.omtrdc.net/gfwlist -server=/keyhole.com/127.0.0.1#5335 -ipset=/keyhole.com/gfwlist -server=/linecorp.com/127.0.0.1#5335 -ipset=/linecorp.com/gfwlist -server=/opengraphprotocol.com/127.0.0.1#5335 -ipset=/opengraphprotocol.com/gfwlist -server=/iphone-vip2.com/127.0.0.1#5335 -ipset=/iphone-vip2.com/gfwlist -server=/bmw-carit.de/127.0.0.1#5335 -ipset=/bmw-carit.de/gfwlist -server=/newscorpaustralia.com/127.0.0.1#5335 -ipset=/newscorpaustralia.com/gfwlist -server=/youtube.com.br/127.0.0.1#5335 -ipset=/youtube.com.br/gfwlist -server=/att.tv/127.0.0.1#5335 -ipset=/att.tv/gfwlist -server=/beatsbydreforstore.com/127.0.0.1#5335 -ipset=/beatsbydreforstore.com/gfwlist -server=/latticedata.com/127.0.0.1#5335 -ipset=/latticedata.com/gfwlist -server=/bmwgroup-classic.com/127.0.0.1#5335 -ipset=/bmwgroup-classic.com/gfwlist -server=/vanish.co.uk/127.0.0.1#5335 -ipset=/vanish.co.uk/gfwlist -server=/fox2detroit.com/127.0.0.1#5335 -ipset=/fox2detroit.com/gfwlist -server=/heywire.com/127.0.0.1#5335 -ipset=/heywire.com/gfwlist -server=/intell.com/127.0.0.1#5335 -ipset=/intell.com/gfwlist -server=/ctyun.online/127.0.0.1#5335 -ipset=/ctyun.online/gfwlist -server=/roborecall.com/127.0.0.1#5335 -ipset=/roborecall.com/gfwlist -server=/dynacw.com.cn/127.0.0.1#5335 -ipset=/dynacw.com.cn/gfwlist -server=/spotifycharts.com/127.0.0.1#5335 -ipset=/spotifycharts.com/gfwlist -server=/newsadds.com.au/127.0.0.1#5335 -ipset=/newsadds.com.au/gfwlist -server=/syosetu.com/127.0.0.1#5335 -ipset=/syosetu.com/gfwlist -server=/riot.im/127.0.0.1#5335 -ipset=/riot.im/gfwlist -server=/paypalbrasil.com/127.0.0.1#5335 -ipset=/paypalbrasil.com/gfwlist -server=/akasha.world/127.0.0.1#5335 -ipset=/akasha.world/gfwlist -server=/visa.ky/127.0.0.1#5335 -ipset=/visa.ky/gfwlist -server=/minigeorgian.ca/127.0.0.1#5335 -ipset=/minigeorgian.ca/gfwlist -server=/muji.net/127.0.0.1#5335 -ipset=/muji.net/gfwlist -server=/enanyang.my/127.0.0.1#5335 -ipset=/enanyang.my/gfwlist -server=/thelancet.com/127.0.0.1#5335 -ipset=/thelancet.com/gfwlist -server=/starbucks.it/127.0.0.1#5335 -ipset=/starbucks.it/gfwlist -server=/google.as/127.0.0.1#5335 -ipset=/google.as/gfwlist -server=/appledaily.com.hk/127.0.0.1#5335 -ipset=/appledaily.com.hk/gfwlist -server=/bmw.at/127.0.0.1#5335 -ipset=/bmw.at/gfwlist -server=/signal.art/127.0.0.1#5335 -ipset=/signal.art/gfwlist -server=/drebeats-monster.com/127.0.0.1#5335 -ipset=/drebeats-monster.com/gfwlist -server=/verily.com/127.0.0.1#5335 -ipset=/verily.com/gfwlist -server=/duckduckgo.jp/127.0.0.1#5335 -ipset=/duckduckgo.jp/gfwlist -server=/pentium.net/127.0.0.1#5335 -ipset=/pentium.net/gfwlist -server=/neowin.net/127.0.0.1#5335 -ipset=/neowin.net/gfwlist -server=/hebiphone.com/127.0.0.1#5335 -ipset=/hebiphone.com/gfwlist -server=/now.com.hk/127.0.0.1#5335 -ipset=/now.com.hk/gfwlist -server=/mini.com.ec/127.0.0.1#5335 -ipset=/mini.com.ec/gfwlist -server=/sonylatvija.com/127.0.0.1#5335 -ipset=/sonylatvija.com/gfwlist -server=/eacashcard.com/127.0.0.1#5335 -ipset=/eacashcard.com/gfwlist -server=/hacksear.ch/127.0.0.1#5335 -ipset=/hacksear.ch/gfwlist -server=/mcdelivery.com.au/127.0.0.1#5335 -ipset=/mcdelivery.com.au/gfwlist -server=/midatlanticbmwmotorcycles.com/127.0.0.1#5335 -ipset=/midatlanticbmwmotorcycles.com/gfwlist -server=/softbank-jp.com/127.0.0.1#5335 -ipset=/softbank-jp.com/gfwlist -server=/skysportsracing.com/127.0.0.1#5335 -ipset=/skysportsracing.com/gfwlist -server=/onlinegeeksquad.com/127.0.0.1#5335 -ipset=/onlinegeeksquad.com/gfwlist -server=/sony.com.pe/127.0.0.1#5335 -ipset=/sony.com.pe/gfwlist -server=/nikedawn.com/127.0.0.1#5335 -ipset=/nikedawn.com/gfwlist -server=/kiji.ca/127.0.0.1#5335 -ipset=/kiji.ca/gfwlist -server=/bbc.co.uk/127.0.0.1#5335 -ipset=/bbc.co.uk/gfwlist -server=/ospray.org/127.0.0.1#5335 -ipset=/ospray.org/gfwlist -server=/universalstudioshollywood.com/127.0.0.1#5335 -ipset=/universalstudioshollywood.com/gfwlist -server=/mkt.com/127.0.0.1#5335 -ipset=/mkt.com/gfwlist -server=/yahoo.im/127.0.0.1#5335 -ipset=/yahoo.im/gfwlist -server=/hulusports.com/127.0.0.1#5335 -ipset=/hulusports.com/gfwlist -server=/firestonetire.ca/127.0.0.1#5335 -ipset=/firestonetire.ca/gfwlist -server=/google.com.tj/127.0.0.1#5335 -ipset=/google.com.tj/gfwlist -server=/yandex.sx/127.0.0.1#5335 -ipset=/yandex.sx/gfwlist -server=/x.company/127.0.0.1#5335 -ipset=/x.company/gfwlist -server=/beatsbydreforshop2013-nl.com/127.0.0.1#5335 -ipset=/beatsbydreforshop2013-nl.com/gfwlist -server=/taylorfrancis.com/127.0.0.1#5335 -ipset=/taylorfrancis.com/gfwlist -server=/alphabet.com/127.0.0.1#5335 -ipset=/alphabet.com/gfwlist -server=/yoshisnewisland.com/127.0.0.1#5335 -ipset=/yoshisnewisland.com/gfwlist -server=/wikileaks.org/127.0.0.1#5335 -ipset=/wikileaks.org/gfwlist -server=/adidas.de/127.0.0.1#5335 -ipset=/adidas.de/gfwlist -server=/voabangla.com/127.0.0.1#5335 -ipset=/voabangla.com/gfwlist -server=/weinvoiceit.com/127.0.0.1#5335 -ipset=/weinvoiceit.com/gfwlist -server=/ahmia.fi/127.0.0.1#5335 -ipset=/ahmia.fi/gfwlist -server=/windowsphone.com/127.0.0.1#5335 -ipset=/windowsphone.com/gfwlist -server=/paypal-service.org/127.0.0.1#5335 -ipset=/paypal-service.org/gfwlist -server=/miniwindsor.com/127.0.0.1#5335 -ipset=/miniwindsor.com/gfwlist -server=/elsevier.io/127.0.0.1#5335 -ipset=/elsevier.io/gfwlist -server=/pearsonlongman.ch/127.0.0.1#5335 -ipset=/pearsonlongman.ch/gfwlist -server=/muncloud.dog/127.0.0.1#5335 -ipset=/muncloud.dog/gfwlist -server=/eprintsw.com/127.0.0.1#5335 -ipset=/eprintsw.com/gfwlist -server=/adobegov.com/127.0.0.1#5335 -ipset=/adobegov.com/gfwlist -server=/vmwareviewpoint.com/127.0.0.1#5335 -ipset=/vmwareviewpoint.com/gfwlist -server=/xbox360.co/127.0.0.1#5335 -ipset=/xbox360.co/gfwlist -server=/barrons-conferences.com/127.0.0.1#5335 -ipset=/barrons-conferences.com/gfwlist -server=/paypal-engineering.com/127.0.0.1#5335 -ipset=/paypal-engineering.com/gfwlist -server=/beatsbydrestudio-australia.com/127.0.0.1#5335 -ipset=/beatsbydrestudio-australia.com/gfwlist -server=/beatspascher.net/127.0.0.1#5335 -ipset=/beatspascher.net/gfwlist -server=/foxdcg.com/127.0.0.1#5335 -ipset=/foxdcg.com/gfwlist -server=/canonfoundation.org/127.0.0.1#5335 -ipset=/canonfoundation.org/gfwlist -server=/cciernslabs.com/127.0.0.1#5335 -ipset=/cciernslabs.com/gfwlist -server=/firewire.cl/127.0.0.1#5335 -ipset=/firewire.cl/gfwlist -server=/gettyimages.ie/127.0.0.1#5335 -ipset=/gettyimages.ie/gfwlist -server=/fox13news.com/127.0.0.1#5335 -ipset=/fox13news.com/gfwlist -server=/applewatch.tw/127.0.0.1#5335 -ipset=/applewatch.tw/gfwlist -server=/fse.tv/127.0.0.1#5335 -ipset=/fse.tv/gfwlist -server=/papalah.com/127.0.0.1#5335 -ipset=/papalah.com/gfwlist -server=/beatsaudiobydre.net/127.0.0.1#5335 -ipset=/beatsaudiobydre.net/gfwlist -server=/iphonerip.net/127.0.0.1#5335 -ipset=/iphonerip.net/gfwlist -server=/rea.design/127.0.0.1#5335 -ipset=/rea.design/gfwlist -server=/facecbook.org/127.0.0.1#5335 -ipset=/facecbook.org/gfwlist -server=/foxcincy.net/127.0.0.1#5335 -ipset=/foxcincy.net/gfwlist -server=/foxsports.co/127.0.0.1#5335 -ipset=/foxsports.co/gfwlist -server=/bridgestone-asiapacific.com/127.0.0.1#5335 -ipset=/bridgestone-asiapacific.com/gfwlist -server=/azureplanetscale.info/127.0.0.1#5335 -ipset=/azureplanetscale.info/gfwlist -server=/fury.dev/127.0.0.1#5335 -ipset=/fury.dev/gfwlist -server=/blogspot.tw/127.0.0.1#5335 -ipset=/blogspot.tw/gfwlist -server=/cstatic.net/127.0.0.1#5335 -ipset=/cstatic.net/gfwlist -server=/rstatic.net/127.0.0.1#5335 -ipset=/rstatic.net/gfwlist -server=/drdremonster-beats.com/127.0.0.1#5335 -ipset=/drdremonster-beats.com/gfwlist -server=/itunes.ca/127.0.0.1#5335 -ipset=/itunes.ca/gfwlist -server=/nikeadidas.com/127.0.0.1#5335 -ipset=/nikeadidas.com/gfwlist -server=/activeteachonline.com/127.0.0.1#5335 -ipset=/activeteachonline.com/gfwlist -server=/huffpostarabi.com/127.0.0.1#5335 -ipset=/huffpostarabi.com/gfwlist -server=/yahoo.es/127.0.0.1#5335 -ipset=/yahoo.es/gfwlist -server=/google.co.ao/127.0.0.1#5335 -ipset=/google.co.ao/gfwlist -server=/connectionseducation.com/127.0.0.1#5335 -ipset=/connectionseducation.com/gfwlist -server=/notion-static.com/127.0.0.1#5335 -ipset=/notion-static.com/gfwlist -server=/momentumms.com/127.0.0.1#5335 -ipset=/momentumms.com/gfwlist -server=/freebeacon.com/127.0.0.1#5335 -ipset=/freebeacon.com/gfwlist -server=/ebayadvertising.com/127.0.0.1#5335 -ipset=/ebayadvertising.com/gfwlist -server=/google.com.bo/127.0.0.1#5335 -ipset=/google.com.bo/gfwlist -server=/nii.ac.jp/127.0.0.1#5335 -ipset=/nii.ac.jp/gfwlist -server=/appleappstore.tv/127.0.0.1#5335 -ipset=/appleappstore.tv/gfwlist -server=/azureedge-test.net/127.0.0.1#5335 -ipset=/azureedge-test.net/gfwlist -server=/disneyiejobs.com/127.0.0.1#5335 -ipset=/disneyiejobs.com/gfwlist -server=/mini.co.th/127.0.0.1#5335 -ipset=/mini.co.th/gfwlist -server=/post852.com/127.0.0.1#5335 -ipset=/post852.com/gfwlist -server=/services-apple.net/127.0.0.1#5335 -ipset=/services-apple.net/gfwlist -server=/vfsco.com/127.0.0.1#5335 -ipset=/vfsco.com/gfwlist -server=/beatsdrdrecuffie.net/127.0.0.1#5335 -ipset=/beatsdrdrecuffie.net/gfwlist -server=/gentoo.org/127.0.0.1#5335 -ipset=/gentoo.org/gfwlist -server=/tandf.co.uk/127.0.0.1#5335 -ipset=/tandf.co.uk/gfwlist -server=/sonytc.co.jp/127.0.0.1#5335 -ipset=/sonytc.co.jp/gfwlist -server=/microsoft.ge/127.0.0.1#5335 -ipset=/microsoft.ge/gfwlist -server=/asebay.com/127.0.0.1#5335 -ipset=/asebay.com/gfwlist -server=/javmost.com/127.0.0.1#5335 -ipset=/javmost.com/gfwlist -server=/lovethiscity.com/127.0.0.1#5335 -ipset=/lovethiscity.com/gfwlist -server=/intel.ga/127.0.0.1#5335 -ipset=/intel.ga/gfwlist -server=/adventuresbydisney.com/127.0.0.1#5335 -ipset=/adventuresbydisney.com/gfwlist -server=/iphone4s.com/127.0.0.1#5335 -ipset=/iphone4s.com/gfwlist -server=/paypal-community.com/127.0.0.1#5335 -ipset=/paypal-community.com/gfwlist -server=/foxsoccerplus.tv/127.0.0.1#5335 -ipset=/foxsoccerplus.tv/gfwlist -server=/volvotrucks.lt/127.0.0.1#5335 -ipset=/volvotrucks.lt/gfwlist -server=/foxnews.net/127.0.0.1#5335 -ipset=/foxnews.net/gfwlist -server=/collegejournal.com/127.0.0.1#5335 -ipset=/collegejournal.com/gfwlist -server=/dailym.ai/127.0.0.1#5335 -ipset=/dailym.ai/gfwlist -server=/minisokorea.com/127.0.0.1#5335 -ipset=/minisokorea.com/gfwlist -server=/bumptop.org/127.0.0.1#5335 -ipset=/bumptop.org/gfwlist -server=/mastercard.fi/127.0.0.1#5335 -ipset=/mastercard.fi/gfwlist -server=/odysee.com/127.0.0.1#5335 -ipset=/odysee.com/gfwlist -server=/ebayprivacycenter.com/127.0.0.1#5335 -ipset=/ebayprivacycenter.com/gfwlist -server=/durex.pt/127.0.0.1#5335 -ipset=/durex.pt/gfwlist -server=/nintendo.co.jp/127.0.0.1#5335 -ipset=/nintendo.co.jp/gfwlist -server=/dettol.com.au/127.0.0.1#5335 -ipset=/dettol.com.au/gfwlist -server=/boringcompany.com/127.0.0.1#5335 -ipset=/boringcompany.com/gfwlist -server=/freebrowser.org/127.0.0.1#5335 -ipset=/freebrowser.org/gfwlist -server=/originalhulu.com/127.0.0.1#5335 -ipset=/originalhulu.com/gfwlist -server=/yahoo.cz/127.0.0.1#5335 -ipset=/yahoo.cz/gfwlist -server=/wholefoodsmarket.com/127.0.0.1#5335 -ipset=/wholefoodsmarket.com/gfwlist -server=/youtube.pa/127.0.0.1#5335 -ipset=/youtube.pa/gfwlist -server=/crmdynint.com/127.0.0.1#5335 -ipset=/crmdynint.com/gfwlist -server=/lfai.foundation/127.0.0.1#5335 -ipset=/lfai.foundation/gfwlist -server=/urchin.com/127.0.0.1#5335 -ipset=/urchin.com/gfwlist -server=/xn--7hv594h.com/127.0.0.1#5335 -ipset=/xn--7hv594h.com/gfwlist -server=/smartline.com.au/127.0.0.1#5335 -ipset=/smartline.com.au/gfwlist -server=/beats-bydrdre.net/127.0.0.1#5335 -ipset=/beats-bydrdre.net/gfwlist -server=/bmw-connecteddrive.com.hr/127.0.0.1#5335 -ipset=/bmw-connecteddrive.com.hr/gfwlist -server=/unityads.unitychina.cn/127.0.0.1#5335 -ipset=/unityads.unitychina.cn/gfwlist -server=/vmwareusergroupstore.com/127.0.0.1#5335 -ipset=/vmwareusergroupstore.com/gfwlist -server=/superpapermario.com/127.0.0.1#5335 -ipset=/superpapermario.com/gfwlist -server=/babyzone.com/127.0.0.1#5335 -ipset=/babyzone.com/gfwlist -server=/practicalmoneyskills.jp/127.0.0.1#5335 -ipset=/practicalmoneyskills.jp/gfwlist -server=/xn--ubt498knmf.com/127.0.0.1#5335 -ipset=/xn--ubt498knmf.com/gfwlist -server=/feedburner.com/127.0.0.1#5335 -ipset=/feedburner.com/gfwlist -server=/ebaytv.org/127.0.0.1#5335 -ipset=/ebaytv.org/gfwlist -server=/airwick.com.br/127.0.0.1#5335 -ipset=/airwick.com.br/gfwlist -server=/newssyndication.com/127.0.0.1#5335 -ipset=/newssyndication.com/gfwlist -server=/bcove.video/127.0.0.1#5335 -ipset=/bcove.video/gfwlist -server=/espncdn.com/127.0.0.1#5335 -ipset=/espncdn.com/gfwlist -server=/amazonaws.com/127.0.0.1#5335 -ipset=/amazonaws.com/gfwlist -server=/xboxstudios.com/127.0.0.1#5335 -ipset=/xboxstudios.com/gfwlist -server=/fastlylabs.com/127.0.0.1#5335 -ipset=/fastlylabs.com/gfwlist -server=/wuso.me/127.0.0.1#5335 -ipset=/wuso.me/gfwlist -server=/bestbuy-communityrelations.com/127.0.0.1#5335 -ipset=/bestbuy-communityrelations.com/gfwlist -server=/ipod.tw/127.0.0.1#5335 -ipset=/ipod.tw/gfwlist -server=/hp3d.com/127.0.0.1#5335 -ipset=/hp3d.com/gfwlist -server=/ituneas.com/127.0.0.1#5335 -ipset=/ituneas.com/gfwlist -server=/appledaily.com/127.0.0.1#5335 -ipset=/appledaily.com/gfwlist -server=/jetbrains.com/127.0.0.1#5335 -ipset=/jetbrains.com/gfwlist -server=/vancouverbmwretailers.ca/127.0.0.1#5335 -ipset=/vancouverbmwretailers.ca/gfwlist -server=/spearhead.kr/127.0.0.1#5335 -ipset=/spearhead.kr/gfwlist -server=/visa.co.il/127.0.0.1#5335 -ipset=/visa.co.il/gfwlist -server=/myfoxphilly.com/127.0.0.1#5335 -ipset=/myfoxphilly.com/gfwlist -server=/facebook-inc.com/127.0.0.1#5335 -ipset=/facebook-inc.com/gfwlist -server=/bmw-motorrad.com.tr/127.0.0.1#5335 -ipset=/bmw-motorrad.com.tr/gfwlist -server=/cloudsync-prod.s3.amazonaws.com/127.0.0.1#5335 -ipset=/cloudsync-prod.s3.amazonaws.com/gfwlist -server=/miiverse.com/127.0.0.1#5335 -ipset=/miiverse.com/gfwlist -server=/nvidia.dk/127.0.0.1#5335 -ipset=/nvidia.dk/gfwlist -server=/finishinfo.no/127.0.0.1#5335 -ipset=/finishinfo.no/gfwlist -server=/canon-cna.com/127.0.0.1#5335 -ipset=/canon-cna.com/gfwlist -server=/monsterbeats-headphone.com/127.0.0.1#5335 -ipset=/monsterbeats-headphone.com/gfwlist -server=/youtube.co.id/127.0.0.1#5335 -ipset=/youtube.co.id/gfwlist -server=/paypal-network.org/127.0.0.1#5335 -ipset=/paypal-network.org/gfwlist -server=/disneyturkiye.com.tr/127.0.0.1#5335 -ipset=/disneyturkiye.com.tr/gfwlist -server=/xoomcom.com/127.0.0.1#5335 -ipset=/xoomcom.com/gfwlist -server=/iphone.ru/127.0.0.1#5335 -ipset=/iphone.ru/gfwlist -server=/airwick.pl/127.0.0.1#5335 -ipset=/airwick.pl/gfwlist -server=/dialga.com/127.0.0.1#5335 -ipset=/dialga.com/gfwlist -server=/nintendo.be/127.0.0.1#5335 -ipset=/nintendo.be/gfwlist -server=/bmw-motorrad.in/127.0.0.1#5335 -ipset=/bmw-motorrad.in/gfwlist -server=/bumptop.net/127.0.0.1#5335 -ipset=/bumptop.net/gfwlist -server=/hyperscan.io/127.0.0.1#5335 -ipset=/hyperscan.io/gfwlist -server=/sandisk.fr/127.0.0.1#5335 -ipset=/sandisk.fr/gfwlist -server=/fifastreet.com/127.0.0.1#5335 -ipset=/fifastreet.com/gfwlist -server=/bmw-motorrad.es/127.0.0.1#5335 -ipset=/bmw-motorrad.es/gfwlist -server=/ccievoicelabs.com/127.0.0.1#5335 -ipset=/ccievoicelabs.com/gfwlist -server=/tvbusa.com/127.0.0.1#5335 -ipset=/tvbusa.com/gfwlist -server=/mini-stjohns.ca/127.0.0.1#5335 -ipset=/mini-stjohns.ca/gfwlist -server=/cloudflare.net/127.0.0.1#5335 -ipset=/cloudflare.net/gfwlist -server=/google.co.tz/127.0.0.1#5335 -ipset=/google.co.tz/gfwlist -server=/discord.media/127.0.0.1#5335 -ipset=/discord.media/gfwlist -server=/thomsonreuters.com.tr/127.0.0.1#5335 -ipset=/thomsonreuters.com.tr/gfwlist -server=/timestalks.com/127.0.0.1#5335 -ipset=/timestalks.com/gfwlist -server=/starcraft2.com/127.0.0.1#5335 -ipset=/starcraft2.com/gfwlist -server=/nyt.com/127.0.0.1#5335 -ipset=/nyt.com/gfwlist -server=/qt-project.org/127.0.0.1#5335 -ipset=/qt-project.org/gfwlist -server=/ciscospark.ca/127.0.0.1#5335 -ipset=/ciscospark.ca/gfwlist -server=/4channel.org/127.0.0.1#5335 -ipset=/4channel.org/gfwlist -server=/nurofen.bg/127.0.0.1#5335 -ipset=/nurofen.bg/gfwlist -server=/visa.com.br/127.0.0.1#5335 -ipset=/visa.com.br/gfwlist -server=/pearsonassessments.com/127.0.0.1#5335 -ipset=/pearsonassessments.com/gfwlist -server=/bigbigshop.com/127.0.0.1#5335 -ipset=/bigbigshop.com/gfwlist -server=/hpgraphicspartners.com/127.0.0.1#5335 -ipset=/hpgraphicspartners.com/gfwlist -server=/cnn.com/127.0.0.1#5335 -ipset=/cnn.com/gfwlist -server=/beatsdrdre-solo.com/127.0.0.1#5335 -ipset=/beatsdrdre-solo.com/gfwlist -server=/airwick.dk/127.0.0.1#5335 -ipset=/airwick.dk/gfwlist -server=/realclearworld.com/127.0.0.1#5335 -ipset=/realclearworld.com/gfwlist -server=/volvotruckcenter.es/127.0.0.1#5335 -ipset=/volvotruckcenter.es/gfwlist -server=/braintreepayments.tv/127.0.0.1#5335 -ipset=/braintreepayments.tv/gfwlist -server=/pokemonrubysapphire.com/127.0.0.1#5335 -ipset=/pokemonrubysapphire.com/gfwlist -server=/bridgestonecntc.com/127.0.0.1#5335 -ipset=/bridgestonecntc.com/gfwlist -server=/ebaycar.com/127.0.0.1#5335 -ipset=/ebaycar.com/gfwlist -server=/mageconf.com.ua/127.0.0.1#5335 -ipset=/mageconf.com.ua/gfwlist -server=/volvotrucks.uy/127.0.0.1#5335 -ipset=/volvotrucks.uy/gfwlist -server=/epochtimes.cz/127.0.0.1#5335 -ipset=/epochtimes.cz/gfwlist -server=/root-signing.ch/127.0.0.1#5335 -ipset=/root-signing.ch/gfwlist -server=/starbuckscoffeegear.com/127.0.0.1#5335 -ipset=/starbuckscoffeegear.com/gfwlist -server=/headphoneshotsales.com/127.0.0.1#5335 -ipset=/headphoneshotsales.com/gfwlist -server=/google.ca/127.0.0.1#5335 -ipset=/google.ca/gfwlist -server=/microsoft.dk/127.0.0.1#5335 -ipset=/microsoft.dk/gfwlist -server=/txcloud.net/127.0.0.1#5335 -ipset=/txcloud.net/gfwlist -server=/kijii.ca/127.0.0.1#5335 -ipset=/kijii.ca/gfwlist -server=/ieeeday.org/127.0.0.1#5335 -ipset=/ieeeday.org/gfwlist -server=/scholar.google.nl/127.0.0.1#5335 -ipset=/scholar.google.nl/gfwlist -server=/fotolia.cc/127.0.0.1#5335 -ipset=/fotolia.cc/gfwlist -server=/niketrainer.com/127.0.0.1#5335 -ipset=/niketrainer.com/gfwlist -server=/acs.org/127.0.0.1#5335 -ipset=/acs.org/gfwlist -server=/youtube.com.ro/127.0.0.1#5335 -ipset=/youtube.com.ro/gfwlist -server=/battlefield3.com/127.0.0.1#5335 -ipset=/battlefield3.com/gfwlist -server=/ebay-vacation.com/127.0.0.1#5335 -ipset=/ebay-vacation.com/gfwlist -server=/appdynamics.co.uk/127.0.0.1#5335 -ipset=/appdynamics.co.uk/gfwlist -server=/playstation.com/127.0.0.1#5335 -ipset=/playstation.com/gfwlist -server=/custombeatsbydrebuy.com/127.0.0.1#5335 -ipset=/custombeatsbydrebuy.com/gfwlist -server=/att.com/127.0.0.1#5335 -ipset=/att.com/gfwlist -server=/beatscheap-uk.com/127.0.0.1#5335 -ipset=/beatscheap-uk.com/gfwlist -server=/javqd.com/127.0.0.1#5335 -ipset=/javqd.com/gfwlist -server=/ie11.com/127.0.0.1#5335 -ipset=/ie11.com/gfwlist -server=/pricelesspick.com/127.0.0.1#5335 -ipset=/pricelesspick.com/gfwlist -server=/garena.sg/127.0.0.1#5335 -ipset=/garena.sg/gfwlist -server=/mini.com.sg/127.0.0.1#5335 -ipset=/mini.com.sg/gfwlist -server=/directvsundayticket.com/127.0.0.1#5335 -ipset=/directvsundayticket.com/gfwlist -server=/roku.com/127.0.0.1#5335 -ipset=/roku.com/gfwlist -server=/bmw.it/127.0.0.1#5335 -ipset=/bmw.it/gfwlist -server=/cotweet.com/127.0.0.1#5335 -ipset=/cotweet.com/gfwlist -server=/kotlinlang.org/127.0.0.1#5335 -ipset=/kotlinlang.org/gfwlist -server=/imdb.com/127.0.0.1#5335 -ipset=/imdb.com/gfwlist -server=/powerofresolve.com/127.0.0.1#5335 -ipset=/powerofresolve.com/gfwlist -server=/bmwbkk.de/127.0.0.1#5335 -ipset=/bmwbkk.de/gfwlist -server=/pokemonplatinum.com/127.0.0.1#5335 -ipset=/pokemonplatinum.com/gfwlist -server=/rrtis.com/127.0.0.1#5335 -ipset=/rrtis.com/gfwlist -server=/paisapay.tv/127.0.0.1#5335 -ipset=/paisapay.tv/gfwlist -server=/coursera.community/127.0.0.1#5335 -ipset=/coursera.community/gfwlist -server=/desktopmovie.org/127.0.0.1#5335 -ipset=/desktopmovie.org/gfwlist -server=/dotfacebook.com/127.0.0.1#5335 -ipset=/dotfacebook.com/gfwlist -server=/jwpsrv.com/127.0.0.1#5335 -ipset=/jwpsrv.com/gfwlist -server=/mailonline.com/127.0.0.1#5335 -ipset=/mailonline.com/gfwlist -server=/cisconetspace.net/127.0.0.1#5335 -ipset=/cisconetspace.net/gfwlist -server=/bridgestone.co.jp/127.0.0.1#5335 -ipset=/bridgestone.co.jp/gfwlist -server=/privilege.hk/127.0.0.1#5335 -ipset=/privilege.hk/gfwlist -server=/cheapnewbeatsbydre.com/127.0.0.1#5335 -ipset=/cheapnewbeatsbydre.com/gfwlist -server=/mastercard.it/127.0.0.1#5335 -ipset=/mastercard.it/gfwlist -server=/vanitha.in/127.0.0.1#5335 -ipset=/vanitha.in/gfwlist -server=/thawte.fr/127.0.0.1#5335 -ipset=/thawte.fr/gfwlist -server=/mortein.co.nz/127.0.0.1#5335 -ipset=/mortein.co.nz/gfwlist -server=/huobiasia.vip/127.0.0.1#5335 -ipset=/huobiasia.vip/gfwlist -server=/ieee-pels.org/127.0.0.1#5335 -ipset=/ieee-pels.org/gfwlist -server=/google.sc/127.0.0.1#5335 -ipset=/google.sc/gfwlist -server=/appleone.tech/127.0.0.1#5335 -ipset=/appleone.tech/gfwlist -server=/facebook.in/127.0.0.1#5335 -ipset=/facebook.in/gfwlist -server=/taste.com.au/127.0.0.1#5335 -ipset=/taste.com.au/gfwlist -server=/bbci.co.uk/127.0.0.1#5335 -ipset=/bbci.co.uk/gfwlist -server=/hentaiverse.org/127.0.0.1#5335 -ipset=/hentaiverse.org/gfwlist -server=/finish.hu/127.0.0.1#5335 -ipset=/finish.hu/gfwlist -server=/bmw-motorrad-test-ride.com/127.0.0.1#5335 -ipset=/bmw-motorrad-test-ride.com/gfwlist -server=/braintreepayments.info/127.0.0.1#5335 -ipset=/braintreepayments.info/gfwlist -server=/blender.org/127.0.0.1#5335 -ipset=/blender.org/gfwlist -server=/monsterbeatstienda.com/127.0.0.1#5335 -ipset=/monsterbeatstienda.com/gfwlist -server=/bmw-adventskalender.com/127.0.0.1#5335 -ipset=/bmw-adventskalender.com/gfwlist -server=/nikezoom.com/127.0.0.1#5335 -ipset=/nikezoom.com/gfwlist -server=/www-bestbuystores.com/127.0.0.1#5335 -ipset=/www-bestbuystores.com/gfwlist -server=/huluitaly.com/127.0.0.1#5335 -ipset=/huluitaly.com/gfwlist -server=/shopdurex.com/127.0.0.1#5335 -ipset=/shopdurex.com/gfwlist -server=/op.gg/127.0.0.1#5335 -ipset=/op.gg/gfwlist -server=/scholar.google.cn/127.0.0.1#5335 -ipset=/scholar.google.cn/gfwlist -server=/bmw-connecteddrive.com.cy/127.0.0.1#5335 -ipset=/bmw-connecteddrive.com.cy/gfwlist -server=/ministcatharines.ca/127.0.0.1#5335 -ipset=/ministcatharines.ca/gfwlist -server=/mindmeld.com/127.0.0.1#5335 -ipset=/mindmeld.com/gfwlist -server=/hbogo.com/127.0.0.1#5335 -ipset=/hbogo.com/gfwlist -server=/12diasderegalosdeitunes.com.ni/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.com.ni/gfwlist -server=/realclearbooks.com/127.0.0.1#5335 -ipset=/realclearbooks.com/gfwlist -server=/ateam-oracle.com/127.0.0.1#5335 -ipset=/ateam-oracle.com/gfwlist -server=/foxnewspodcasts.com/127.0.0.1#5335 -ipset=/foxnewspodcasts.com/gfwlist -server=/ciattackers.com/127.0.0.1#5335 -ipset=/ciattackers.com/gfwlist -server=/pvue2.com/127.0.0.1#5335 -ipset=/pvue2.com/gfwlist -server=/drebeatsaustralia-cheap.net/127.0.0.1#5335 -ipset=/drebeatsaustralia-cheap.net/gfwlist -server=/vsassets.io/127.0.0.1#5335 -ipset=/vsassets.io/gfwlist -server=/volvotrucks.com.br/127.0.0.1#5335 -ipset=/volvotrucks.com.br/gfwlist -server=/nikefuelband.com/127.0.0.1#5335 -ipset=/nikefuelband.com/gfwlist -server=/venmo.net/127.0.0.1#5335 -ipset=/venmo.net/gfwlist -server=/ischool.com/127.0.0.1#5335 -ipset=/ischool.com/gfwlist -server=/hoolu.com/127.0.0.1#5335 -ipset=/hoolu.com/gfwlist -server=/adobe.io/127.0.0.1#5335 -ipset=/adobe.io/gfwlist -server=/easportsmma.com/127.0.0.1#5335 -ipset=/easportsmma.com/gfwlist -server=/foxtv.com/127.0.0.1#5335 -ipset=/foxtv.com/gfwlist -server=/blogspot.is/127.0.0.1#5335 -ipset=/blogspot.is/gfwlist -server=/playvalorant.com/127.0.0.1#5335 -ipset=/playvalorant.com/gfwlist -server=/rebrandly.com/127.0.0.1#5335 -ipset=/rebrandly.com/gfwlist -server=/google.nu/127.0.0.1#5335 -ipset=/google.nu/gfwlist -server=/enfabebe.com.ec/127.0.0.1#5335 -ipset=/enfabebe.com.ec/gfwlist -server=/starbucks.dk/127.0.0.1#5335 -ipset=/starbucks.dk/gfwlist -server=/intel-research.net/127.0.0.1#5335 -ipset=/intel-research.net/gfwlist -server=/ieee-ccnc.org/127.0.0.1#5335 -ipset=/ieee-ccnc.org/gfwlist -server=/brocaproject.com/127.0.0.1#5335 -ipset=/brocaproject.com/gfwlist -server=/strepsils.com.tw/127.0.0.1#5335 -ipset=/strepsils.com.tw/gfwlist -server=/softbankusa.net/127.0.0.1#5335 -ipset=/softbankusa.net/gfwlist -server=/geoport.com/127.0.0.1#5335 -ipset=/geoport.com/gfwlist -server=/google.je/127.0.0.1#5335 -ipset=/google.je/gfwlist -server=/vanithaveedu.com/127.0.0.1#5335 -ipset=/vanithaveedu.com/gfwlist -server=/ebay.com.ar/127.0.0.1#5335 -ipset=/ebay.com.ar/gfwlist -server=/applecentre.info/127.0.0.1#5335 -ipset=/applecentre.info/gfwlist -server=/japan-whores.com/127.0.0.1#5335 -ipset=/japan-whores.com/gfwlist -server=/ecpa.fr/127.0.0.1#5335 -ipset=/ecpa.fr/gfwlist -server=/akamak.com/127.0.0.1#5335 -ipset=/akamak.com/gfwlist -server=/livefilestore.com/127.0.0.1#5335 -ipset=/livefilestore.com/gfwlist -server=/fotoiia.com/127.0.0.1#5335 -ipset=/fotoiia.com/gfwlist -server=/bmw-routes.com/127.0.0.1#5335 -ipset=/bmw-routes.com/gfwlist -server=/mini-grouparchiv.de/127.0.0.1#5335 -ipset=/mini-grouparchiv.de/gfwlist -server=/microsoft-sap-events.com/127.0.0.1#5335 -ipset=/microsoft-sap-events.com/gfwlist -server=/ebaygroup.com/127.0.0.1#5335 -ipset=/ebaygroup.com/gfwlist -server=/twitchsvc.net/127.0.0.1#5335 -ipset=/twitchsvc.net/gfwlist -server=/cashify.net/127.0.0.1#5335 -ipset=/cashify.net/gfwlist -server=/hpinstantink.com/127.0.0.1#5335 -ipset=/hpinstantink.com/gfwlist -server=/volvotrucks.in/127.0.0.1#5335 -ipset=/volvotrucks.in/gfwlist -server=/sony-asia.com/127.0.0.1#5335 -ipset=/sony-asia.com/gfwlist -server=/intel.bo/127.0.0.1#5335 -ipset=/intel.bo/gfwlist -server=/sony.com.mx/127.0.0.1#5335 -ipset=/sony.com.mx/gfwlist -server=/beatsdrdrekaufenschweiz.net/127.0.0.1#5335 -ipset=/beatsdrdrekaufenschweiz.net/gfwlist -server=/mingpaocanada.com/127.0.0.1#5335 -ipset=/mingpaocanada.com/gfwlist -server=/riotgames.net/127.0.0.1#5335 -ipset=/riotgames.net/gfwlist -server=/rsc.org/127.0.0.1#5335 -ipset=/rsc.org/gfwlist -server=/buyingfacebooklikes.com/127.0.0.1#5335 -ipset=/buyingfacebooklikes.com/gfwlist -server=/intel.pl/127.0.0.1#5335 -ipset=/intel.pl/gfwlist -server=/ministjohns.ca/127.0.0.1#5335 -ipset=/ministjohns.ca/gfwlist -server=/aboutamazon.es/127.0.0.1#5335 -ipset=/aboutamazon.es/gfwlist -server=/entrust.net/127.0.0.1#5335 -ipset=/entrust.net/gfwlist -server=/foxtel.com.au/127.0.0.1#5335 -ipset=/foxtel.com.au/gfwlist -server=/mastercard.nl/127.0.0.1#5335 -ipset=/mastercard.nl/gfwlist -server=/macosx.info/127.0.0.1#5335 -ipset=/macosx.info/gfwlist -server=/coursera.help/127.0.0.1#5335 -ipset=/coursera.help/gfwlist -server=/ebay.es/127.0.0.1#5335 -ipset=/ebay.es/gfwlist -server=/smart-edge.com/127.0.0.1#5335 -ipset=/smart-edge.com/gfwlist -server=/getfedora.org/127.0.0.1#5335 -ipset=/getfedora.org/gfwlist -server=/thecleversense.com/127.0.0.1#5335 -ipset=/thecleversense.com/gfwlist -server=/blizzard.com/127.0.0.1#5335 -ipset=/blizzard.com/gfwlist -server=/cbsivideo.com/127.0.0.1#5335 -ipset=/cbsivideo.com/gfwlist -server=/steambroadcast.akamaized.net/127.0.0.1#5335 -ipset=/steambroadcast.akamaized.net/gfwlist -server=/foxpoker.com/127.0.0.1#5335 -ipset=/foxpoker.com/gfwlist -server=/mac.wang/127.0.0.1#5335 -ipset=/mac.wang/gfwlist -server=/ie9.com/127.0.0.1#5335 -ipset=/ie9.com/gfwlist -server=/businessweek.com/127.0.0.1#5335 -ipset=/businessweek.com/gfwlist -server=/iphone-zh.com/127.0.0.1#5335 -ipset=/iphone-zh.com/gfwlist -server=/iphone-vip5.com/127.0.0.1#5335 -ipset=/iphone-vip5.com/gfwlist -server=/facebook30.org/127.0.0.1#5335 -ipset=/facebook30.org/gfwlist -server=/aliveprofiler.com/127.0.0.1#5335 -ipset=/aliveprofiler.com/gfwlist -server=/1jjdg2.vip/127.0.0.1#5335 -ipset=/1jjdg2.vip/gfwlist -server=/xn--ngstr-lra8j.com/127.0.0.1#5335 -ipset=/xn--ngstr-lra8j.com/gfwlist -server=/minilat.com/127.0.0.1#5335 -ipset=/minilat.com/gfwlist -server=/blogspot.my/127.0.0.1#5335 -ipset=/blogspot.my/gfwlist -server=/movetv.com/127.0.0.1#5335 -ipset=/movetv.com/gfwlist -server=/apkmirror.com/127.0.0.1#5335 -ipset=/apkmirror.com/gfwlist -server=/dungeonkeeper.com/127.0.0.1#5335 -ipset=/dungeonkeeper.com/gfwlist -server=/tidelift.com/127.0.0.1#5335 -ipset=/tidelift.com/gfwlist -server=/pokemonmysterydungeon.com/127.0.0.1#5335 -ipset=/pokemonmysterydungeon.com/gfwlist -server=/youtube.se/127.0.0.1#5335 -ipset=/youtube.se/gfwlist -server=/applepay.co.rs/127.0.0.1#5335 -ipset=/applepay.co.rs/gfwlist -server=/myfoxdetroit.com/127.0.0.1#5335 -ipset=/myfoxdetroit.com/gfwlist -server=/es-visiontimes.com/127.0.0.1#5335 -ipset=/es-visiontimes.com/gfwlist -server=/yahoo.ie/127.0.0.1#5335 -ipset=/yahoo.ie/gfwlist -server=/marioandluigidreamteam.com/127.0.0.1#5335 -ipset=/marioandluigidreamteam.com/gfwlist -server=/hotmonsterbeats.com/127.0.0.1#5335 -ipset=/hotmonsterbeats.com/gfwlist -server=/vhxqa6.com/127.0.0.1#5335 -ipset=/vhxqa6.com/gfwlist -server=/steamusercontent.com/127.0.0.1#5335 -ipset=/steamusercontent.com/gfwlist -server=/crossborderexpansion.com/127.0.0.1#5335 -ipset=/crossborderexpansion.com/gfwlist -server=/wholesale-exporter1.com/127.0.0.1#5335 -ipset=/wholesale-exporter1.com/gfwlist -server=/bmwusrideracademy.com/127.0.0.1#5335 -ipset=/bmwusrideracademy.com/gfwlist -server=/amzn.to/127.0.0.1#5335 -ipset=/amzn.to/gfwlist -server=/ooni.org/127.0.0.1#5335 -ipset=/ooni.org/gfwlist -server=/applemusicconnect.com/127.0.0.1#5335 -ipset=/applemusicconnect.com/gfwlist -server=/imperial.ac.uk/127.0.0.1#5335 -ipset=/imperial.ac.uk/gfwlist -server=/huffpost.com/127.0.0.1#5335 -ipset=/huffpost.com/gfwlist -server=/foxtvdvd.com/127.0.0.1#5335 -ipset=/foxtvdvd.com/gfwlist -server=/fbmessenger.com/127.0.0.1#5335 -ipset=/fbmessenger.com/gfwlist -server=/tracking-location.com/127.0.0.1#5335 -ipset=/tracking-location.com/gfwlist -server=/connectionsacademy.com/127.0.0.1#5335 -ipset=/connectionsacademy.com/gfwlist -server=/foxsuper6.com/127.0.0.1#5335 -ipset=/foxsuper6.com/gfwlist -server=/mini-abudhabi.com/127.0.0.1#5335 -ipset=/mini-abudhabi.com/gfwlist -server=/thedreadwolfrises.com/127.0.0.1#5335 -ipset=/thedreadwolfrises.com/gfwlist -server=/9news.com.au/127.0.0.1#5335 -ipset=/9news.com.au/gfwlist -server=/intgram.com/127.0.0.1#5335 -ipset=/intgram.com/gfwlist -server=/bridgestone-tac-oman.com/127.0.0.1#5335 -ipset=/bridgestone-tac-oman.com/gfwlist -server=/arphic.com.cn/127.0.0.1#5335 -ipset=/arphic.com.cn/gfwlist -server=/nikeshoxsale.com/127.0.0.1#5335 -ipset=/nikeshoxsale.com/gfwlist -server=/ntdimg.com/127.0.0.1#5335 -ipset=/ntdimg.com/gfwlist -server=/bmw.co.cr/127.0.0.1#5335 -ipset=/bmw.co.cr/gfwlist -server=/photoshop.com/127.0.0.1#5335 -ipset=/photoshop.com/gfwlist -server=/visa.com.vi/127.0.0.1#5335 -ipset=/visa.com.vi/gfwlist -server=/xvideos-cdn.com/127.0.0.1#5335 -ipset=/xvideos-cdn.com/gfwlist -server=/nikkei.jp/127.0.0.1#5335 -ipset=/nikkei.jp/gfwlist -server=/rarbgmirror.com/127.0.0.1#5335 -ipset=/rarbgmirror.com/gfwlist -server=/burstly.net/127.0.0.1#5335 -ipset=/burstly.net/gfwlist -server=/hindiweb.com/127.0.0.1#5335 -ipset=/hindiweb.com/gfwlist -server=/1jsa22.vip/127.0.0.1#5335 -ipset=/1jsa22.vip/gfwlist -server=/minivaughanwest.ca/127.0.0.1#5335 -ipset=/minivaughanwest.ca/gfwlist -server=/intelfreepress.com/127.0.0.1#5335 -ipset=/intelfreepress.com/gfwlist -server=/sonypictures.com/127.0.0.1#5335 -ipset=/sonypictures.com/gfwlist -server=/hpsignage.com/127.0.0.1#5335 -ipset=/hpsignage.com/gfwlist -server=/verilystudywatch.com/127.0.0.1#5335 -ipset=/verilystudywatch.com/gfwlist -server=/itcfonts.com/127.0.0.1#5335 -ipset=/itcfonts.com/gfwlist -server=/epochbuy.com/127.0.0.1#5335 -ipset=/epochbuy.com/gfwlist -server=/shopdrebeats.com/127.0.0.1#5335 -ipset=/shopdrebeats.com/gfwlist -server=/instagram-press.net/127.0.0.1#5335 -ipset=/instagram-press.net/gfwlist -server=/ipodshop.com.au/127.0.0.1#5335 -ipset=/ipodshop.com.au/gfwlist -server=/heroku-charge.com/127.0.0.1#5335 -ipset=/heroku-charge.com/gfwlist -server=/uun78.com/127.0.0.1#5335 -ipset=/uun78.com/gfwlist -server=/uug22.com/127.0.0.1#5335 -ipset=/uug22.com/gfwlist -server=/microsoftsqlserver.com/127.0.0.1#5335 -ipset=/microsoftsqlserver.com/gfwlist -server=/bmwgroupclassic.com/127.0.0.1#5335 -ipset=/bmwgroupclassic.com/gfwlist -server=/vmwarehorizon.com/127.0.0.1#5335 -ipset=/vmwarehorizon.com/gfwlist -server=/foxrelease.com/127.0.0.1#5335 -ipset=/foxrelease.com/gfwlist -server=/verisign.pro/127.0.0.1#5335 -ipset=/verisign.pro/gfwlist -server=/foundationdb.org/127.0.0.1#5335 -ipset=/foundationdb.org/gfwlist -server=/amazon.es/127.0.0.1#5335 -ipset=/amazon.es/gfwlist -server=/matters.one/127.0.0.1#5335 -ipset=/matters.one/gfwlist -server=/bstatic.com/127.0.0.1#5335 -ipset=/bstatic.com/gfwlist -server=/startupjournal.com/127.0.0.1#5335 -ipset=/startupjournal.com/gfwlist -server=/volvotrucks.hr/127.0.0.1#5335 -ipset=/volvotrucks.hr/gfwlist -server=/alivevmax.com/127.0.0.1#5335 -ipset=/alivevmax.com/gfwlist -server=/attonlineoffers.com/127.0.0.1#5335 -ipset=/attonlineoffers.com/gfwlist -server=/geeksquad.net/127.0.0.1#5335 -ipset=/geeksquad.net/gfwlist -server=/washingtondcbmw.com/127.0.0.1#5335 -ipset=/washingtondcbmw.com/gfwlist -server=/itunes.org/127.0.0.1#5335 -ipset=/itunes.org/gfwlist -server=/mings.hk/127.0.0.1#5335 -ipset=/mings.hk/gfwlist -server=/mallheadphone.com/127.0.0.1#5335 -ipset=/mallheadphone.com/gfwlist -server=/voaswahili.com/127.0.0.1#5335 -ipset=/voaswahili.com/gfwlist -server=/reachtheworldonfacebook.com/127.0.0.1#5335 -ipset=/reachtheworldonfacebook.com/gfwlist -server=/code.org/127.0.0.1#5335 -ipset=/code.org/gfwlist -server=/pearsonplaces.com.au/127.0.0.1#5335 -ipset=/pearsonplaces.com.au/gfwlist -server=/niketracking.com/127.0.0.1#5335 -ipset=/niketracking.com/gfwlist -server=/paypal-recargacelular.com/127.0.0.1#5335 -ipset=/paypal-recargacelular.com/gfwlist -server=/starwarsfallenorder.com/127.0.0.1#5335 -ipset=/starwarsfallenorder.com/gfwlist -server=/ciscospark.com/127.0.0.1#5335 -ipset=/ciscospark.com/gfwlist -server=/commerceos.com/127.0.0.1#5335 -ipset=/commerceos.com/gfwlist -server=/spotifycodes.com/127.0.0.1#5335 -ipset=/spotifycodes.com/gfwlist -server=/beatsbydredanmarks.com/127.0.0.1#5335 -ipset=/beatsbydredanmarks.com/gfwlist -server=/zeebiz.com/127.0.0.1#5335 -ipset=/zeebiz.com/gfwlist -server=/jwpcdn.com/127.0.0.1#5335 -ipset=/jwpcdn.com/gfwlist -server=/minilondon.ca/127.0.0.1#5335 -ipset=/minilondon.ca/gfwlist -server=/intel.yt/127.0.0.1#5335 -ipset=/intel.yt/gfwlist -server=/disneyplus.com/127.0.0.1#5335 -ipset=/disneyplus.com/gfwlist -server=/google.ms/127.0.0.1#5335 -ipset=/google.ms/gfwlist -server=/nikeairrift.com/127.0.0.1#5335 -ipset=/nikeairrift.com/gfwlist -server=/omekinteractive.com/127.0.0.1#5335 -ipset=/omekinteractive.com/gfwlist -server=/cisco.mobi/127.0.0.1#5335 -ipset=/cisco.mobi/gfwlist -server=/bestbuy.info/127.0.0.1#5335 -ipset=/bestbuy.info/gfwlist -server=/huluaction.com/127.0.0.1#5335 -ipset=/huluaction.com/gfwlist -server=/blogspot.be/127.0.0.1#5335 -ipset=/blogspot.be/gfwlist -server=/beatsdre4cheap.com/127.0.0.1#5335 -ipset=/beatsdre4cheap.com/gfwlist -server=/bmwworld.tv/127.0.0.1#5335 -ipset=/bmwworld.tv/gfwlist -server=/tandfonline.com/127.0.0.1#5335 -ipset=/tandfonline.com/gfwlist -server=/bmw.com.ge/127.0.0.1#5335 -ipset=/bmw.com.ge/gfwlist -server=/youtu.be/127.0.0.1#5335 -ipset=/youtu.be/gfwlist -server=/fox51tns.net/127.0.0.1#5335 -ipset=/fox51tns.net/gfwlist -server=/annualreviews.org/127.0.0.1#5335 -ipset=/annualreviews.org/gfwlist -server=/p16-tiktokcdn-com.akamaized.net/127.0.0.1#5335 -ipset=/p16-tiktokcdn-com.akamaized.net/gfwlist -server=/minishop.ca/127.0.0.1#5335 -ipset=/minishop.ca/gfwlist -server=/healthreach.hk/127.0.0.1#5335 -ipset=/healthreach.hk/gfwlist -server=/gaypad.net/127.0.0.1#5335 -ipset=/gaypad.net/gfwlist -server=/intel.com.py/127.0.0.1#5335 -ipset=/intel.com.py/gfwlist -server=/runnike.com/127.0.0.1#5335 -ipset=/runnike.com/gfwlist -server=/ddg.co/127.0.0.1#5335 -ipset=/ddg.co/gfwlist -server=/foxnebraska.com/127.0.0.1#5335 -ipset=/foxnebraska.com/gfwlist -server=/verisign.com.cn/127.0.0.1#5335 -ipset=/verisign.com.cn/gfwlist -server=/gridaware.app/127.0.0.1#5335 -ipset=/gridaware.app/gfwlist -server=/myebay.com/127.0.0.1#5335 -ipset=/myebay.com/gfwlist -server=/pokemonsunmoon.com/127.0.0.1#5335 -ipset=/pokemonsunmoon.com/gfwlist -server=/unrealengine.com/127.0.0.1#5335 -ipset=/unrealengine.com/gfwlist -server=/halfcanada.com/127.0.0.1#5335 -ipset=/halfcanada.com/gfwlist -server=/ebayboutique.com/127.0.0.1#5335 -ipset=/ebayboutique.com/gfwlist -server=/geeksquadprotectionplan.org/127.0.0.1#5335 -ipset=/geeksquadprotectionplan.org/gfwlist -server=/git-scm.com/127.0.0.1#5335 -ipset=/git-scm.com/gfwlist -server=/adobexdplatform.com/127.0.0.1#5335 -ipset=/adobexdplatform.com/gfwlist -server=/hbonow.com/127.0.0.1#5335 -ipset=/hbonow.com/gfwlist -server=/bmw-connecteddrive.gr/127.0.0.1#5335 -ipset=/bmw-connecteddrive.gr/gfwlist -server=/thomsonreuters.com.sg/127.0.0.1#5335 -ipset=/thomsonreuters.com.sg/gfwlist -server=/pinterest.es/127.0.0.1#5335 -ipset=/pinterest.es/gfwlist -server=/forbesimg.com/127.0.0.1#5335 -ipset=/forbesimg.com/gfwlist -server=/mtt.org/127.0.0.1#5335 -ipset=/mtt.org/gfwlist -server=/instagramhilesi.org/127.0.0.1#5335 -ipset=/instagramhilesi.org/gfwlist -server=/gettyimages.ch/127.0.0.1#5335 -ipset=/gettyimages.ch/gfwlist -server=/hkbn.net/127.0.0.1#5335 -ipset=/hkbn.net/gfwlist -server=/sony.com.ni/127.0.0.1#5335 -ipset=/sony.com.ni/gfwlist -server=/appdynamics.info/127.0.0.1#5335 -ipset=/appdynamics.info/gfwlist -server=/begin-trade.com/127.0.0.1#5335 -ipset=/begin-trade.com/gfwlist -server=/chargenowusa.com/127.0.0.1#5335 -ipset=/chargenowusa.com/gfwlist -server=/strepsils.com.ar/127.0.0.1#5335 -ipset=/strepsils.com.ar/gfwlist -server=/amazon-fashions.com/127.0.0.1#5335 -ipset=/amazon-fashions.com/gfwlist -server=/verizon.com/127.0.0.1#5335 -ipset=/verizon.com/gfwlist -server=/researchgate.net/127.0.0.1#5335 -ipset=/researchgate.net/gfwlist -server=/monsterbeatsheadphones.net/127.0.0.1#5335 -ipset=/monsterbeatsheadphones.net/gfwlist -server=/iphoto.eu/127.0.0.1#5335 -ipset=/iphoto.eu/gfwlist -server=/facebookpmdcenter.com/127.0.0.1#5335 -ipset=/facebookpmdcenter.com/gfwlist -server=/miniso-bh.com/127.0.0.1#5335 -ipset=/miniso-bh.com/gfwlist -server=/mybeatsbydreuk.com/127.0.0.1#5335 -ipset=/mybeatsbydreuk.com/gfwlist -server=/datalore.io/127.0.0.1#5335 -ipset=/datalore.io/gfwlist -server=/thefacebook.com/127.0.0.1#5335 -ipset=/thefacebook.com/gfwlist -server=/imageworks.com/127.0.0.1#5335 -ipset=/imageworks.com/gfwlist -server=/privatebrowsingmyths.com/127.0.0.1#5335 -ipset=/privatebrowsingmyths.com/gfwlist -server=/alibabacloud.com.au/127.0.0.1#5335 -ipset=/alibabacloud.com.au/gfwlist -server=/mybeatscheapbydre.com/127.0.0.1#5335 -ipset=/mybeatscheapbydre.com/gfwlist -server=/kopfhorergunstigshop.com/127.0.0.1#5335 -ipset=/kopfhorergunstigshop.com/gfwlist -server=/bestbuyforbusiness.ca/127.0.0.1#5335 -ipset=/bestbuyforbusiness.ca/gfwlist -server=/intel.sv/127.0.0.1#5335 -ipset=/intel.sv/gfwlist -server=/hpeclipse.com/127.0.0.1#5335 -ipset=/hpeclipse.com/gfwlist -server=/nowe.hk/127.0.0.1#5335 -ipset=/nowe.hk/gfwlist -server=/dowjones.com/127.0.0.1#5335 -ipset=/dowjones.com/gfwlist -server=/elib.maruzen.co.jp/127.0.0.1#5335 -ipset=/elib.maruzen.co.jp/gfwlist -server=/ieeesystemscouncil.org/127.0.0.1#5335 -ipset=/ieeesystemscouncil.org/gfwlist -server=/yahoo.cd/127.0.0.1#5335 -ipset=/yahoo.cd/gfwlist -server=/nikeasia.com/127.0.0.1#5335 -ipset=/nikeasia.com/gfwlist -server=/zeetv.co.uk/127.0.0.1#5335 -ipset=/zeetv.co.uk/gfwlist -server=/9cdn.net/127.0.0.1#5335 -ipset=/9cdn.net/gfwlist -server=/20thcenturystudios.com.au/127.0.0.1#5335 -ipset=/20thcenturystudios.com.au/gfwlist -server=/nike.com/127.0.0.1#5335 -ipset=/nike.com/gfwlist -server=/minilangley.ca/127.0.0.1#5335 -ipset=/minilangley.ca/gfwlist -server=/rthk.hk/127.0.0.1#5335 -ipset=/rthk.hk/gfwlist -server=/monsterbeatsru.com/127.0.0.1#5335 -ipset=/monsterbeatsru.com/gfwlist -server=/finishinfo.be/127.0.0.1#5335 -ipset=/finishinfo.be/gfwlist -server=/facebvook.com/127.0.0.1#5335 -ipset=/facebvook.com/gfwlist -server=/drbeatsukmart.com/127.0.0.1#5335 -ipset=/drbeatsukmart.com/gfwlist -server=/spaceexplored.com/127.0.0.1#5335 -ipset=/spaceexplored.com/gfwlist -server=/powershellgallery.com/127.0.0.1#5335 -ipset=/powershellgallery.com/gfwlist -server=/bmw-lao.la/127.0.0.1#5335 -ipset=/bmw-lao.la/gfwlist -server=/highbolt.net/127.0.0.1#5335 -ipset=/highbolt.net/gfwlist -server=/movidius.net/127.0.0.1#5335 -ipset=/movidius.net/gfwlist -server=/firestonerewards.com/127.0.0.1#5335 -ipset=/firestonerewards.com/gfwlist -server=/wirelessreach.com/127.0.0.1#5335 -ipset=/wirelessreach.com/gfwlist -server=/ibookpartner.com/127.0.0.1#5335 -ipset=/ibookpartner.com/gfwlist -server=/fox29.com/127.0.0.1#5335 -ipset=/fox29.com/gfwlist -server=/mini-connected.pt/127.0.0.1#5335 -ipset=/mini-connected.pt/gfwlist -server=/blubrry.com/127.0.0.1#5335 -ipset=/blubrry.com/gfwlist -server=/minitoronto.ca/127.0.0.1#5335 -ipset=/minitoronto.ca/gfwlist -server=/53world.com/127.0.0.1#5335 -ipset=/53world.com/gfwlist -server=/beatsbydrecybermondaydeals2013.com/127.0.0.1#5335 -ipset=/beatsbydrecybermondaydeals2013.com/gfwlist -server=/uun85.com/127.0.0.1#5335 -ipset=/uun85.com/gfwlist -server=/akam.net/127.0.0.1#5335 -ipset=/akam.net/gfwlist -server=/bmw-me.com/127.0.0.1#5335 -ipset=/bmw-me.com/gfwlist -server=/dtsell.com/127.0.0.1#5335 -ipset=/dtsell.com/gfwlist -server=/bcbits.com/127.0.0.1#5335 -ipset=/bcbits.com/gfwlist -server=/paypal-online.net/127.0.0.1#5335 -ipset=/paypal-online.net/gfwlist -server=/nikefreeshoes.com/127.0.0.1#5335 -ipset=/nikefreeshoes.com/gfwlist -server=/cashpassportglobe.com/127.0.0.1#5335 -ipset=/cashpassportglobe.com/gfwlist -server=/globalsign.fr/127.0.0.1#5335 -ipset=/globalsign.fr/gfwlist -server=/sony.fi/127.0.0.1#5335 -ipset=/sony.fi/gfwlist -server=/origin-a.akamaihd.net/127.0.0.1#5335 -ipset=/origin-a.akamaihd.net/gfwlist -server=/sneakerskick.com/127.0.0.1#5335 -ipset=/sneakerskick.com/gfwlist -server=/appdynamics.org/127.0.0.1#5335 -ipset=/appdynamics.org/gfwlist -server=/alfera.in/127.0.0.1#5335 -ipset=/alfera.in/gfwlist -server=/intel.ru/127.0.0.1#5335 -ipset=/intel.ru/gfwlist -server=/bmwgroupinfobahn.com/127.0.0.1#5335 -ipset=/bmwgroupinfobahn.com/gfwlist -server=/minitakesthestates.com/127.0.0.1#5335 -ipset=/minitakesthestates.com/gfwlist -server=/product.co.jp/127.0.0.1#5335 -ipset=/product.co.jp/gfwlist -server=/bidvestbank.co.za/127.0.0.1#5335 -ipset=/bidvestbank.co.za/gfwlist -server=/pearson.co.jp/127.0.0.1#5335 -ipset=/pearson.co.jp/gfwlist -server=/foxsmallbusinesscenter.net/127.0.0.1#5335 -ipset=/foxsmallbusinesscenter.net/gfwlist -server=/elrepo.org/127.0.0.1#5335 -ipset=/elrepo.org/gfwlist -server=/vanish.ru/127.0.0.1#5335 -ipset=/vanish.ru/gfwlist -server=/wsj.jobs/127.0.0.1#5335 -ipset=/wsj.jobs/gfwlist -server=/facebok.com/127.0.0.1#5335 -ipset=/facebok.com/gfwlist -server=/travelex.ca/127.0.0.1#5335 -ipset=/travelex.ca/gfwlist -server=/mastercard.se/127.0.0.1#5335 -ipset=/mastercard.se/gfwlist -server=/photolia.net/127.0.0.1#5335 -ipset=/photolia.net/gfwlist -server=/intel.cr/127.0.0.1#5335 -ipset=/intel.cr/gfwlist -server=/marketo.com/127.0.0.1#5335 -ipset=/marketo.com/gfwlist -server=/vercel.app/127.0.0.1#5335 -ipset=/vercel.app/gfwlist -server=/medrxiv.org/127.0.0.1#5335 -ipset=/medrxiv.org/gfwlist -server=/volvotrucks.com.au/127.0.0.1#5335 -ipset=/volvotrucks.com.au/gfwlist -server=/pearsonclinical.com.au/127.0.0.1#5335 -ipset=/pearsonclinical.com.au/gfwlist -server=/pm.me/127.0.0.1#5335 -ipset=/pm.me/gfwlist -server=/liveauction.com/127.0.0.1#5335 -ipset=/liveauction.com/gfwlist -server=/d1k2us671qcoau.cloudfront.net/127.0.0.1#5335 -ipset=/d1k2us671qcoau.cloudfront.net/gfwlist -server=/hplargeformatremote.com/127.0.0.1#5335 -ipset=/hplargeformatremote.com/gfwlist -server=/ccpsx.com/127.0.0.1#5335 -ipset=/ccpsx.com/gfwlist -server=/timesmembership.com/127.0.0.1#5335 -ipset=/timesmembership.com/gfwlist -server=/issquaredown.com/127.0.0.1#5335 -ipset=/issquaredown.com/gfwlist -server=/nvidia.ch/127.0.0.1#5335 -ipset=/nvidia.ch/gfwlist -server=/sonyclassics.com/127.0.0.1#5335 -ipset=/sonyclassics.com/gfwlist -server=/shopbmwmotorcycles.com/127.0.0.1#5335 -ipset=/shopbmwmotorcycles.com/gfwlist -server=/canon.tj/127.0.0.1#5335 -ipset=/canon.tj/gfwlist -server=/googl.com/127.0.0.1#5335 -ipset=/googl.com/gfwlist -server=/rfa.org/127.0.0.1#5335 -ipset=/rfa.org/gfwlist -server=/intel.ac/127.0.0.1#5335 -ipset=/intel.ac/gfwlist -server=/interactive-examples.mdn.mozilla.net/127.0.0.1#5335 -ipset=/interactive-examples.mdn.mozilla.net/gfwlist -server=/mucinex.com.cn/127.0.0.1#5335 -ipset=/mucinex.com.cn/gfwlist -server=/bestbeats4u.com/127.0.0.1#5335 -ipset=/bestbeats4u.com/gfwlist -server=/intel.fr/127.0.0.1#5335 -ipset=/intel.fr/gfwlist -server=/imonsterbeats.com/127.0.0.1#5335 -ipset=/imonsterbeats.com/gfwlist -server=/google.me/127.0.0.1#5335 -ipset=/google.me/gfwlist -server=/gamepedia.com/127.0.0.1#5335 -ipset=/gamepedia.com/gfwlist -server=/youtube.uy/127.0.0.1#5335 -ipset=/youtube.uy/gfwlist -server=/youtube.com.ar/127.0.0.1#5335 -ipset=/youtube.com.ar/gfwlist -server=/billpoint.com/127.0.0.1#5335 -ipset=/billpoint.com/gfwlist -server=/q13fox.com/127.0.0.1#5335 -ipset=/q13fox.com/gfwlist -server=/bmwmotorcycles.com/127.0.0.1#5335 -ipset=/bmwmotorcycles.com/gfwlist -server=/vk.me/127.0.0.1#5335 -ipset=/vk.me/gfwlist -server=/fluidpreview.com/127.0.0.1#5335 -ipset=/fluidpreview.com/gfwlist -server=/ioe.com/127.0.0.1#5335 -ipset=/ioe.com/gfwlist -server=/vercel.com/127.0.0.1#5335 -ipset=/vercel.com/gfwlist -server=/pccwglobal.com/127.0.0.1#5335 -ipset=/pccwglobal.com/gfwlist -server=/carbon.com/127.0.0.1#5335 -ipset=/carbon.com/gfwlist -server=/ieee.org/127.0.0.1#5335 -ipset=/ieee.org/gfwlist -server=/faceboooik.com/127.0.0.1#5335 -ipset=/faceboooik.com/gfwlist -server=/visa.com.pe/127.0.0.1#5335 -ipset=/visa.com.pe/gfwlist -server=/nurofen.ru/127.0.0.1#5335 -ipset=/nurofen.ru/gfwlist -server=/headphonepubs.com/127.0.0.1#5335 -ipset=/headphonepubs.com/gfwlist -server=/shoestop2.com/127.0.0.1#5335 -ipset=/shoestop2.com/gfwlist -server=/bmw-security-vehicles.com/127.0.0.1#5335 -ipset=/bmw-security-vehicles.com/gfwlist -server=/conquerwithcharacter.com/127.0.0.1#5335 -ipset=/conquerwithcharacter.com/gfwlist -server=/applepaymerchantsupplies.info/127.0.0.1#5335 -ipset=/applepaymerchantsupplies.info/gfwlist -server=/applecare.berlin/127.0.0.1#5335 -ipset=/applecare.berlin/gfwlist -server=/nexttv.com.tw/127.0.0.1#5335 -ipset=/nexttv.com.tw/gfwlist -server=/vmwarelearning.com/127.0.0.1#5335 -ipset=/vmwarelearning.com/gfwlist -server=/drebyby.com/127.0.0.1#5335 -ipset=/drebyby.com/gfwlist -server=/mini-corporate-sales.com/127.0.0.1#5335 -ipset=/mini-corporate-sales.com/gfwlist -server=/intelsoftwarenetwork.com/127.0.0.1#5335 -ipset=/intelsoftwarenetwork.com/gfwlist -server=/highdefinitionbeatsbydre.com/127.0.0.1#5335 -ipset=/highdefinitionbeatsbydre.com/gfwlist -server=/canon.it/127.0.0.1#5335 -ipset=/canon.it/gfwlist -server=/momo.dm/127.0.0.1#5335 -ipset=/momo.dm/gfwlist -server=/attwirelesssolutions.com/127.0.0.1#5335 -ipset=/attwirelesssolutions.com/gfwlist -server=/zee.com/127.0.0.1#5335 -ipset=/zee.com/gfwlist -server=/factwire.org/127.0.0.1#5335 -ipset=/factwire.org/gfwlist -server=/tx.me/127.0.0.1#5335 -ipset=/tx.me/gfwlist -server=/facebookappcenter.info/127.0.0.1#5335 -ipset=/facebookappcenter.info/gfwlist -server=/o365weve.com/127.0.0.1#5335 -ipset=/o365weve.com/gfwlist -server=/qctconnect.com/127.0.0.1#5335 -ipset=/qctconnect.com/gfwlist -server=/facebooklikeexchange.com/127.0.0.1#5335 -ipset=/facebooklikeexchange.com/gfwlist -server=/payppal.com/127.0.0.1#5335 -ipset=/payppal.com/gfwlist -server=/aboutamazon.com.au/127.0.0.1#5335 -ipset=/aboutamazon.com.au/gfwlist -server=/wballiance.com/127.0.0.1#5335 -ipset=/wballiance.com/gfwlist -server=/volvopenta.us/127.0.0.1#5335 -ipset=/volvopenta.us/gfwlist -server=/myfoxmaine.com/127.0.0.1#5335 -ipset=/myfoxmaine.com/gfwlist -server=/mailonline.co.uk/127.0.0.1#5335 -ipset=/mailonline.co.uk/gfwlist -server=/duckduckco.de/127.0.0.1#5335 -ipset=/duckduckco.de/gfwlist -server=/xposed.info/127.0.0.1#5335 -ipset=/xposed.info/gfwlist -server=/pearson.com/127.0.0.1#5335 -ipset=/pearson.com/gfwlist -server=/gofundme.com/127.0.0.1#5335 -ipset=/gofundme.com/gfwlist -server=/apple.cm/127.0.0.1#5335 -ipset=/apple.cm/gfwlist -server=/nurofen.com/127.0.0.1#5335 -ipset=/nurofen.com/gfwlist -server=/githubstatus.com/127.0.0.1#5335 -ipset=/githubstatus.com/gfwlist -server=/visacarddesignlab.com/127.0.0.1#5335 -ipset=/visacarddesignlab.com/gfwlist -server=/bmwiventures.com/127.0.0.1#5335 -ipset=/bmwiventures.com/gfwlist -server=/v-has.com/127.0.0.1#5335 -ipset=/v-has.com/gfwlist -server=/documentforce.com/127.0.0.1#5335 -ipset=/documentforce.com/gfwlist -server=/bmw-motorrad-service-inclusive.com/127.0.0.1#5335 -ipset=/bmw-motorrad-service-inclusive.com/gfwlist -server=/ebay-course.com/127.0.0.1#5335 -ipset=/ebay-course.com/gfwlist -server=/bingsandbox.com/127.0.0.1#5335 -ipset=/bingsandbox.com/gfwlist -server=/inteltechnologyprovider.com/127.0.0.1#5335 -ipset=/inteltechnologyprovider.com/gfwlist -server=/youtube.ro/127.0.0.1#5335 -ipset=/youtube.ro/gfwlist -server=/imac-applecomputer.com/127.0.0.1#5335 -ipset=/imac-applecomputer.com/gfwlist -server=/bridgestonecomercial.co.cr/127.0.0.1#5335 -ipset=/bridgestonecomercial.co.cr/gfwlist -server=/hpsmart.com/127.0.0.1#5335 -ipset=/hpsmart.com/gfwlist -server=/canon.si/127.0.0.1#5335 -ipset=/canon.si/gfwlist -server=/farfetch-contents.com/127.0.0.1#5335 -ipset=/farfetch-contents.com/gfwlist -server=/40shopping.com/127.0.0.1#5335 -ipset=/40shopping.com/gfwlist -server=/businessinsider.es/127.0.0.1#5335 -ipset=/businessinsider.es/gfwlist -server=/thomsonreuters.ru/127.0.0.1#5335 -ipset=/thomsonreuters.ru/gfwlist -server=/marketing-nirvana.com/127.0.0.1#5335 -ipset=/marketing-nirvana.com/gfwlist -server=/pearsonenespanol.com/127.0.0.1#5335 -ipset=/pearsonenespanol.com/gfwlist -server=/dropboxinsiders.com/127.0.0.1#5335 -ipset=/dropboxinsiders.com/gfwlist -server=/visa.com.ai/127.0.0.1#5335 -ipset=/visa.com.ai/gfwlist -server=/nytimes.com/127.0.0.1#5335 -ipset=/nytimes.com/gfwlist -server=/ebay.nl/127.0.0.1#5335 -ipset=/ebay.nl/gfwlist -server=/mastercard.com.bz/127.0.0.1#5335 -ipset=/mastercard.com.bz/gfwlist -server=/visa.com.ng/127.0.0.1#5335 -ipset=/visa.com.ng/gfwlist -server=/blogspot.si/127.0.0.1#5335 -ipset=/blogspot.si/gfwlist -server=/qualcomm.com.br/127.0.0.1#5335 -ipset=/qualcomm.com.br/gfwlist -server=/vmware.tt.omtrdc.net/127.0.0.1#5335 -ipset=/vmware.tt.omtrdc.net/gfwlist -server=/softether.org/127.0.0.1#5335 -ipset=/softether.org/gfwlist -server=/visa.com.pr/127.0.0.1#5335 -ipset=/visa.com.pr/gfwlist -server=/pinterest.cl/127.0.0.1#5335 -ipset=/pinterest.cl/gfwlist -server=/litbus-anime.com/127.0.0.1#5335 -ipset=/litbus-anime.com/gfwlist -server=/hoolu.tv/127.0.0.1#5335 -ipset=/hoolu.tv/gfwlist -server=/directvplans.com/127.0.0.1#5335 -ipset=/directvplans.com/gfwlist -server=/whatsapp-plus.net/127.0.0.1#5335 -ipset=/whatsapp-plus.net/gfwlist -server=/beatsbydreoslo.com/127.0.0.1#5335 -ipset=/beatsbydreoslo.com/gfwlist -server=/visa.cz/127.0.0.1#5335 -ipset=/visa.cz/gfwlist -server=/yahoo.me/127.0.0.1#5335 -ipset=/yahoo.me/gfwlist -server=/electronicarts.com/127.0.0.1#5335 -ipset=/electronicarts.com/gfwlist -server=/monsterdrebeats-canada.net/127.0.0.1#5335 -ipset=/monsterdrebeats-canada.net/gfwlist -server=/azurecosmosdb.info/127.0.0.1#5335 -ipset=/azurecosmosdb.info/gfwlist -server=/scholar.google.com.tw/127.0.0.1#5335 -ipset=/scholar.google.com.tw/gfwlist -server=/google.cg/127.0.0.1#5335 -ipset=/google.cg/gfwlist -server=/videojs.com/127.0.0.1#5335 -ipset=/videojs.com/gfwlist -server=/jgg18.xyz/127.0.0.1#5335 -ipset=/jgg18.xyz/gfwlist -server=/appsto.re/127.0.0.1#5335 -ipset=/appsto.re/gfwlist -server=/visa.com.kz/127.0.0.1#5335 -ipset=/visa.com.kz/gfwlist -server=/forthebadge.com/127.0.0.1#5335 -ipset=/forthebadge.com/gfwlist -server=/rfi.fr/127.0.0.1#5335 -ipset=/rfi.fr/gfwlist -server=/thunderbird.net/127.0.0.1#5335 -ipset=/thunderbird.net/gfwlist -server=/youtube.lu/127.0.0.1#5335 -ipset=/youtube.lu/gfwlist -server=/cloudflarebolt.com/127.0.0.1#5335 -ipset=/cloudflarebolt.com/gfwlist -server=/cencoastbmw.com/127.0.0.1#5335 -ipset=/cencoastbmw.com/gfwlist -server=/applecomputer.kr/127.0.0.1#5335 -ipset=/applecomputer.kr/gfwlist -server=/akamaietpphishingtest.com/127.0.0.1#5335 -ipset=/akamaietpphishingtest.com/gfwlist -server=/appdynamics.de/127.0.0.1#5335 -ipset=/appdynamics.de/gfwlist -server=/erlang.org/127.0.0.1#5335 -ipset=/erlang.org/gfwlist -server=/mastercard.om/127.0.0.1#5335 -ipset=/mastercard.om/gfwlist -server=/sonybsc.com/127.0.0.1#5335 -ipset=/sonybsc.com/gfwlist -server=/businessinsider.com.au/127.0.0.1#5335 -ipset=/businessinsider.com.au/gfwlist -server=/nikeinc.com/127.0.0.1#5335 -ipset=/nikeinc.com/gfwlist -server=/whychoosevmwareeuc.com/127.0.0.1#5335 -ipset=/whychoosevmwareeuc.com/gfwlist -server=/playshowtv.com/127.0.0.1#5335 -ipset=/playshowtv.com/gfwlist -server=/facebookpoker.info/127.0.0.1#5335 -ipset=/facebookpoker.info/gfwlist -server=/microsoft.lv/127.0.0.1#5335 -ipset=/microsoft.lv/gfwlist -server=/dazn.com/127.0.0.1#5335 -ipset=/dazn.com/gfwlist -server=/pearsonclinical.es/127.0.0.1#5335 -ipset=/pearsonclinical.es/gfwlist -server=/sony.lu/127.0.0.1#5335 -ipset=/sony.lu/gfwlist -server=/sinchew.my/127.0.0.1#5335 -ipset=/sinchew.my/gfwlist -server=/mastercard.com.hk/127.0.0.1#5335 -ipset=/mastercard.com.hk/gfwlist -server=/monsterbeatsale.com/127.0.0.1#5335 -ipset=/monsterbeatsale.com/gfwlist -server=/ebaysohos.com/127.0.0.1#5335 -ipset=/ebaysohos.com/gfwlist -server=/lge.com/127.0.0.1#5335 -ipset=/lge.com/gfwlist -server=/faceboonk.com/127.0.0.1#5335 -ipset=/faceboonk.com/gfwlist -server=/asp-cc.com/127.0.0.1#5335 -ipset=/asp-cc.com/gfwlist -server=/volvotrucks.com.bn/127.0.0.1#5335 -ipset=/volvotrucks.com.bn/gfwlist -server=/dartlang.org/127.0.0.1#5335 -ipset=/dartlang.org/gfwlist -server=/twister.net.co/127.0.0.1#5335 -ipset=/twister.net.co/gfwlist -server=/visa.com.bo/127.0.0.1#5335 -ipset=/visa.com.bo/gfwlist -server=/qualcommhalo.com/127.0.0.1#5335 -ipset=/qualcommhalo.com/gfwlist -server=/fundaiphone5s.com/127.0.0.1#5335 -ipset=/fundaiphone5s.com/gfwlist -server=/visaeurope.at/127.0.0.1#5335 -ipset=/visaeurope.at/gfwlist -server=/discord.gift/127.0.0.1#5335 -ipset=/discord.gift/gfwlist -server=/bmw-motorrad.ma/127.0.0.1#5335 -ipset=/bmw-motorrad.ma/gfwlist -server=/strepsilsarabia.com/127.0.0.1#5335 -ipset=/strepsilsarabia.com/gfwlist -server=/dealtime.com/127.0.0.1#5335 -ipset=/dealtime.com/gfwlist -server=/mac.com.au/127.0.0.1#5335 -ipset=/mac.com.au/gfwlist -server=/xn--yf1at58a.com/127.0.0.1#5335 -ipset=/xn--yf1at58a.com/gfwlist -server=/macruby.org/127.0.0.1#5335 -ipset=/macruby.org/gfwlist -server=/fortawesome.com/127.0.0.1#5335 -ipset=/fortawesome.com/gfwlist -server=/icloudads.net/127.0.0.1#5335 -ipset=/icloudads.net/gfwlist -server=/bmw.com.ve/127.0.0.1#5335 -ipset=/bmw.com.ve/gfwlist -server=/airwick.com.au/127.0.0.1#5335 -ipset=/airwick.com.au/gfwlist -server=/amazonlumberyard.wang/127.0.0.1#5335 -ipset=/amazonlumberyard.wang/gfwlist -server=/javynow.com/127.0.0.1#5335 -ipset=/javynow.com/gfwlist -server=/headphonesbeatsbydre.com/127.0.0.1#5335 -ipset=/headphonesbeatsbydre.com/gfwlist -server=/dronedj.com/127.0.0.1#5335 -ipset=/dronedj.com/gfwlist -server=/inclusivegrowthscore.com/127.0.0.1#5335 -ipset=/inclusivegrowthscore.com/gfwlist -server=/speedfantasybid.com/127.0.0.1#5335 -ipset=/speedfantasybid.com/gfwlist -server=/enfamil.ca/127.0.0.1#5335 -ipset=/enfamil.ca/gfwlist -server=/tumblr.com/127.0.0.1#5335 -ipset=/tumblr.com/gfwlist -server=/msnewskids.com/127.0.0.1#5335 -ipset=/msnewskids.com/gfwlist -server=/bmw-businessdrive.com/127.0.0.1#5335 -ipset=/bmw-businessdrive.com/gfwlist -server=/cybertrust.ne.jp/127.0.0.1#5335 -ipset=/cybertrust.ne.jp/gfwlist -server=/azurecosmosdb.net/127.0.0.1#5335 -ipset=/azurecosmosdb.net/gfwlist -server=/farfetch-apps.com/127.0.0.1#5335 -ipset=/farfetch-apps.com/gfwlist -server=/fstopimages.com/127.0.0.1#5335 -ipset=/fstopimages.com/gfwlist -server=/ibm.us/127.0.0.1#5335 -ipset=/ibm.us/gfwlist -server=/camelotherald.net/127.0.0.1#5335 -ipset=/camelotherald.net/gfwlist -server=/dropboxstatic.com/127.0.0.1#5335 -ipset=/dropboxstatic.com/gfwlist -server=/corepublishingsolutions.com/127.0.0.1#5335 -ipset=/corepublishingsolutions.com/gfwlist -server=/abematv.akamaized.net/127.0.0.1#5335 -ipset=/abematv.akamaized.net/gfwlist -server=/buycheapbeatsbydreshop.com/127.0.0.1#5335 -ipset=/buycheapbeatsbydreshop.com/gfwlist -server=/ebay-online.com/127.0.0.1#5335 -ipset=/ebay-online.com/gfwlist -server=/appla.com/127.0.0.1#5335 -ipset=/appla.com/gfwlist -server=/mcdonaldsparties.com.au/127.0.0.1#5335 -ipset=/mcdonaldsparties.com.au/gfwlist -server=/www.sb/127.0.0.1#5335 -ipset=/www.sb/gfwlist -server=/ieee-tems.org/127.0.0.1#5335 -ipset=/ieee-tems.org/gfwlist -server=/devopsms.com/127.0.0.1#5335 -ipset=/devopsms.com/gfwlist -server=/nomadlandmovie.ch/127.0.0.1#5335 -ipset=/nomadlandmovie.ch/gfwlist -server=/applemusic.co/127.0.0.1#5335 -ipset=/applemusic.co/gfwlist -server=/ieee.tv/127.0.0.1#5335 -ipset=/ieee.tv/gfwlist -server=/dettol.ch/127.0.0.1#5335 -ipset=/dettol.ch/gfwlist -server=/un.org/127.0.0.1#5335 -ipset=/un.org/gfwlist -server=/beatsbydrehd.net/127.0.0.1#5335 -ipset=/beatsbydrehd.net/gfwlist -server=/itunesmatch.com/127.0.0.1#5335 -ipset=/itunesmatch.com/gfwlist -server=/famima.vn/127.0.0.1#5335 -ipset=/famima.vn/gfwlist -server=/office365love.com/127.0.0.1#5335 -ipset=/office365love.com/gfwlist -server=/fox5dc.com/127.0.0.1#5335 -ipset=/fox5dc.com/gfwlist -server=/pubmatic.co.jp/127.0.0.1#5335 -ipset=/pubmatic.co.jp/gfwlist -server=/beatsbydrdredanmark.com/127.0.0.1#5335 -ipset=/beatsbydrdredanmark.com/gfwlist -server=/crossfitfirestone.com/127.0.0.1#5335 -ipset=/crossfitfirestone.com/gfwlist -server=/intel.fi/127.0.0.1#5335 -ipset=/intel.fi/gfwlist -server=/appdynamics.com/127.0.0.1#5335 -ipset=/appdynamics.com/gfwlist -server=/youtube.co.ke/127.0.0.1#5335 -ipset=/youtube.co.ke/gfwlist -server=/paypalinc.com/127.0.0.1#5335 -ipset=/paypalinc.com/gfwlist -server=/google.cz/127.0.0.1#5335 -ipset=/google.cz/gfwlist -server=/cheapbeats4sale.net/127.0.0.1#5335 -ipset=/cheapbeats4sale.net/gfwlist -server=/j2objc.org/127.0.0.1#5335 -ipset=/j2objc.org/gfwlist -server=/mastercard.ae/127.0.0.1#5335 -ipset=/mastercard.ae/gfwlist -server=/beatsshop-usa.com/127.0.0.1#5335 -ipset=/beatsshop-usa.com/gfwlist -server=/mcd.com/127.0.0.1#5335 -ipset=/mcd.com/gfwlist -server=/enfagrow.co.in/127.0.0.1#5335 -ipset=/enfagrow.co.in/gfwlist -server=/greenend.org.uk/127.0.0.1#5335 -ipset=/greenend.org.uk/gfwlist -server=/applestore.com.ph/127.0.0.1#5335 -ipset=/applestore.com.ph/gfwlist -server=/sway.com/127.0.0.1#5335 -ipset=/sway.com/gfwlist -server=/applescript.info/127.0.0.1#5335 -ipset=/applescript.info/gfwlist -server=/disney.nl/127.0.0.1#5335 -ipset=/disney.nl/gfwlist -server=/polymer-project.org/127.0.0.1#5335 -ipset=/polymer-project.org/gfwlist -server=/itunesradio.com/127.0.0.1#5335 -ipset=/itunesradio.com/gfwlist -server=/bbcfmt.s.llnwi.net/127.0.0.1#5335 -ipset=/bbcfmt.s.llnwi.net/gfwlist -server=/kingkongapp.com/127.0.0.1#5335 -ipset=/kingkongapp.com/gfwlist -server=/wsjplus.com/127.0.0.1#5335 -ipset=/wsjplus.com/gfwlist -server=/bmw-connecteddrive.cz/127.0.0.1#5335 -ipset=/bmw-connecteddrive.cz/gfwlist -server=/webmproject.org/127.0.0.1#5335 -ipset=/webmproject.org/gfwlist -server=/hayabusa.io/127.0.0.1#5335 -ipset=/hayabusa.io/gfwlist -server=/frontiersin.org/127.0.0.1#5335 -ipset=/frontiersin.org/gfwlist -server=/visa.co.ke/127.0.0.1#5335 -ipset=/visa.co.ke/gfwlist -server=/yahoo.no/127.0.0.1#5335 -ipset=/yahoo.no/gfwlist -server=/intelstore.com/127.0.0.1#5335 -ipset=/intelstore.com/gfwlist -server=/microsoft.ru/127.0.0.1#5335 -ipset=/microsoft.ru/gfwlist -server=/ipad.wang/127.0.0.1#5335 -ipset=/ipad.wang/gfwlist -server=/coursera.org/127.0.0.1#5335 -ipset=/coursera.org/gfwlist -server=/coupangcdn.com/127.0.0.1#5335 -ipset=/coupangcdn.com/gfwlist -server=/stackoverflow.com/127.0.0.1#5335 -ipset=/stackoverflow.com/gfwlist -server=/alphera.in/127.0.0.1#5335 -ipset=/alphera.in/gfwlist -server=/minimarkham.ca/127.0.0.1#5335 -ipset=/minimarkham.ca/gfwlist -server=/scholar.google.ca/127.0.0.1#5335 -ipset=/scholar.google.ca/gfwlist -server=/volvotrucks.jp/127.0.0.1#5335 -ipset=/volvotrucks.jp/gfwlist -server=/initproducts.com/127.0.0.1#5335 -ipset=/initproducts.com/gfwlist -server=/canon.az/127.0.0.1#5335 -ipset=/canon.az/gfwlist -server=/wish.com/127.0.0.1#5335 -ipset=/wish.com/gfwlist -server=/alpherafs.com.hk/127.0.0.1#5335 -ipset=/alpherafs.com.hk/gfwlist -server=/visualstudio-staging.com/127.0.0.1#5335 -ipset=/visualstudio-staging.com/gfwlist -server=/ebay.co.uk/127.0.0.1#5335 -ipset=/ebay.co.uk/gfwlist -server=/volvotrucks.fr/127.0.0.1#5335 -ipset=/volvotrucks.fr/gfwlist -server=/mi9cdn.com/127.0.0.1#5335 -ipset=/mi9cdn.com/gfwlist -server=/orithegame.com/127.0.0.1#5335 -ipset=/orithegame.com/gfwlist -server=/applepaysupplies.berlin/127.0.0.1#5335 -ipset=/applepaysupplies.berlin/gfwlist -server=/whatisworkspaceone.com/127.0.0.1#5335 -ipset=/whatisworkspaceone.com/gfwlist -server=/alfera.my/127.0.0.1#5335 -ipset=/alfera.my/gfwlist -server=/microsoftaccountguard.com/127.0.0.1#5335 -ipset=/microsoftaccountguard.com/gfwlist -server=/doi.info/127.0.0.1#5335 -ipset=/doi.info/gfwlist -server=/volvotrucks.com.tr/127.0.0.1#5335 -ipset=/volvotrucks.com.tr/gfwlist -server=/nexpart.tv/127.0.0.1#5335 -ipset=/nexpart.tv/gfwlist -server=/alpherafinancialservices.es/127.0.0.1#5335 -ipset=/alpherafinancialservices.es/gfwlist -server=/epochtimes.com/127.0.0.1#5335 -ipset=/epochtimes.com/gfwlist -server=/yahoo.la/127.0.0.1#5335 -ipset=/yahoo.la/gfwlist -server=/fox4news.com/127.0.0.1#5335 -ipset=/fox4news.com/gfwlist -server=/poshtestgallery.cloudapp.net/127.0.0.1#5335 -ipset=/poshtestgallery.cloudapp.net/gfwlist -server=/sony.ua/127.0.0.1#5335 -ipset=/sony.ua/gfwlist -server=/drebeatshome.com/127.0.0.1#5335 -ipset=/drebeatshome.com/gfwlist -server=/uun83.com/127.0.0.1#5335 -ipset=/uun83.com/gfwlist -server=/bigbuckbunny.org/127.0.0.1#5335 -ipset=/bigbuckbunny.org/gfwlist -server=/escape.com.au/127.0.0.1#5335 -ipset=/escape.com.au/gfwlist -server=/myfonts.com/127.0.0.1#5335 -ipset=/myfonts.com/gfwlist -server=/npmjs.com/127.0.0.1#5335 -ipset=/npmjs.com/gfwlist -server=/scholar.google.co.cr/127.0.0.1#5335 -ipset=/scholar.google.co.cr/gfwlist -server=/facebook-privacy.com/127.0.0.1#5335 -ipset=/facebook-privacy.com/gfwlist -server=/cloudflaretest.com/127.0.0.1#5335 -ipset=/cloudflaretest.com/gfwlist -server=/canon.gr/127.0.0.1#5335 -ipset=/canon.gr/gfwlist -server=/burstlyrewards.com/127.0.0.1#5335 -ipset=/burstlyrewards.com/gfwlist -server=/applestore.com.ru/127.0.0.1#5335 -ipset=/applestore.com.ru/gfwlist -server=/bmw.re/127.0.0.1#5335 -ipset=/bmw.re/gfwlist -server=/paypal-signin.com/127.0.0.1#5335 -ipset=/paypal-signin.com/gfwlist -server=/ebay-stories.com/127.0.0.1#5335 -ipset=/ebay-stories.com/gfwlist -server=/bloombergtradingchallenge.com/127.0.0.1#5335 -ipset=/bloombergtradingchallenge.com/gfwlist -server=/intelcloudbuilders.com/127.0.0.1#5335 -ipset=/intelcloudbuilders.com/gfwlist -server=/bestbuygsm.com/127.0.0.1#5335 -ipset=/bestbuygsm.com/gfwlist -server=/mysims.com/127.0.0.1#5335 -ipset=/mysims.com/gfwlist -server=/builtfromebay.com/127.0.0.1#5335 -ipset=/builtfromebay.com/gfwlist -server=/foxsports.com.br/127.0.0.1#5335 -ipset=/foxsports.com.br/gfwlist -server=/dishworld.com/127.0.0.1#5335 -ipset=/dishworld.com/gfwlist -server=/reckittbenckiser.tv/127.0.0.1#5335 -ipset=/reckittbenckiser.tv/gfwlist -server=/amazonstudiosguilds.com/127.0.0.1#5335 -ipset=/amazonstudiosguilds.com/gfwlist -server=/mynike.com/127.0.0.1#5335 -ipset=/mynike.com/gfwlist -server=/monotypeimaging.com/127.0.0.1#5335 -ipset=/monotypeimaging.com/gfwlist -server=/godoc.org/127.0.0.1#5335 -ipset=/godoc.org/gfwlist -server=/youtube.in/127.0.0.1#5335 -ipset=/youtube.in/gfwlist -server=/picsee.co/127.0.0.1#5335 -ipset=/picsee.co/gfwlist -server=/monsterbeatsfinland.com/127.0.0.1#5335 -ipset=/monsterbeatsfinland.com/gfwlist -server=/powerbeatsbydre.com/127.0.0.1#5335 -ipset=/powerbeatsbydre.com/gfwlist -server=/appleiphonecell.com/127.0.0.1#5335 -ipset=/appleiphonecell.com/gfwlist -server=/mastercard.gr/127.0.0.1#5335 -ipset=/mastercard.gr/gfwlist -server=/moodstocks.com/127.0.0.1#5335 -ipset=/moodstocks.com/gfwlist -server=/voanews.com/127.0.0.1#5335 -ipset=/voanews.com/gfwlist -server=/amzn.com/127.0.0.1#5335 -ipset=/amzn.com/gfwlist -server=/appleone.website/127.0.0.1#5335 -ipset=/appleone.website/gfwlist -server=/kijiji.ca/127.0.0.1#5335 -ipset=/kijiji.ca/gfwlist -server=/jijiji.ca/127.0.0.1#5335 -ipset=/jijiji.ca/gfwlist -server=/disney.be/127.0.0.1#5335 -ipset=/disney.be/gfwlist -server=/bloombergsef.com/127.0.0.1#5335 -ipset=/bloombergsef.com/gfwlist -server=/flirt4free.com/127.0.0.1#5335 -ipset=/flirt4free.com/gfwlist -server=/mcpeaceofmind.com/127.0.0.1#5335 -ipset=/mcpeaceofmind.com/gfwlist -server=/microsofteca.com/127.0.0.1#5335 -ipset=/microsofteca.com/gfwlist -server=/beatsbydreaustraliasales.com/127.0.0.1#5335 -ipset=/beatsbydreaustraliasales.com/gfwlist -server=/18novel.xyz/127.0.0.1#5335 -ipset=/18novel.xyz/gfwlist -server=/paypaal.com/127.0.0.1#5335 -ipset=/paypaal.com/gfwlist -server=/thestationbymaker.com/127.0.0.1#5335 -ipset=/thestationbymaker.com/gfwlist -server=/bridgestone.com.tw/127.0.0.1#5335 -ipset=/bridgestone.com.tw/gfwlist -server=/bridgestone.com.vn/127.0.0.1#5335 -ipset=/bridgestone.com.vn/gfwlist -server=/calgoncarbon-china.com/127.0.0.1#5335 -ipset=/calgoncarbon-china.com/gfwlist -server=/directvgrandslam.com/127.0.0.1#5335 -ipset=/directvgrandslam.com/gfwlist -server=/primevideo.info/127.0.0.1#5335 -ipset=/primevideo.info/gfwlist -server=/needforspeeddriftkings.com/127.0.0.1#5335 -ipset=/needforspeeddriftkings.com/gfwlist -server=/mastercad.com/127.0.0.1#5335 -ipset=/mastercad.com/gfwlist -server=/aboutamazon.in/127.0.0.1#5335 -ipset=/aboutamazon.in/gfwlist -server=/mpweekly.com/127.0.0.1#5335 -ipset=/mpweekly.com/gfwlist -server=/beatsbydre-mall.com/127.0.0.1#5335 -ipset=/beatsbydre-mall.com/gfwlist -server=/bidi.net.uk/127.0.0.1#5335 -ipset=/bidi.net.uk/gfwlist -server=/niketrainers.com/127.0.0.1#5335 -ipset=/niketrainers.com/gfwlist -server=/myradio.hk/127.0.0.1#5335 -ipset=/myradio.hk/gfwlist -server=/100beatscheap.com/127.0.0.1#5335 -ipset=/100beatscheap.com/gfwlist -server=/huloo.tv/127.0.0.1#5335 -ipset=/huloo.tv/gfwlist -server=/starbucks.com.co/127.0.0.1#5335 -ipset=/starbucks.com.co/gfwlist -server=/msecnd.net/127.0.0.1#5335 -ipset=/msecnd.net/gfwlist -server=/av01.tv/127.0.0.1#5335 -ipset=/av01.tv/gfwlist -server=/cnn.io/127.0.0.1#5335 -ipset=/cnn.io/gfwlist -server=/intel.bi/127.0.0.1#5335 -ipset=/intel.bi/gfwlist -server=/wixanswers.com/127.0.0.1#5335 -ipset=/wixanswers.com/gfwlist -server=/vanishstains.com.au/127.0.0.1#5335 -ipset=/vanishstains.com.au/gfwlist -server=/chargenow.com/127.0.0.1#5335 -ipset=/chargenow.com/gfwlist -server=/realclearinvestigations.com/127.0.0.1#5335 -ipset=/realclearinvestigations.com/gfwlist -server=/strepsils.co.za/127.0.0.1#5335 -ipset=/strepsils.co.za/gfwlist -server=/bmwcustomapparel.com/127.0.0.1#5335 -ipset=/bmwcustomapparel.com/gfwlist -server=/nvidia.es/127.0.0.1#5335 -ipset=/nvidia.es/gfwlist -server=/opencreate.org/127.0.0.1#5335 -ipset=/opencreate.org/gfwlist -server=/ipod.de/127.0.0.1#5335 -ipset=/ipod.de/gfwlist -server=/ebaystore.com/127.0.0.1#5335 -ipset=/ebaystore.com/gfwlist -server=/facerbook.com/127.0.0.1#5335 -ipset=/facerbook.com/gfwlist -server=/ieeer5.org/127.0.0.1#5335 -ipset=/ieeer5.org/gfwlist -server=/googletraveladservices.com/127.0.0.1#5335 -ipset=/googletraveladservices.com/gfwlist -server=/onlyiphone5case.com/127.0.0.1#5335 -ipset=/onlyiphone5case.com/gfwlist -server=/gettyimages.com/127.0.0.1#5335 -ipset=/gettyimages.com/gfwlist -server=/cashify.com/127.0.0.1#5335 -ipset=/cashify.com/gfwlist -server=/costcobusinessdelivery.com/127.0.0.1#5335 -ipset=/costcobusinessdelivery.com/gfwlist -server=/intel.sn/127.0.0.1#5335 -ipset=/intel.sn/gfwlist -server=/realtype.co.jp/127.0.0.1#5335 -ipset=/realtype.co.jp/gfwlist -server=/ebayvakantiehuizen.com/127.0.0.1#5335 -ipset=/ebayvakantiehuizen.com/gfwlist -server=/nodejs.org/127.0.0.1#5335 -ipset=/nodejs.org/gfwlist -server=/rb.net/127.0.0.1#5335 -ipset=/rb.net/gfwlist -server=/netacad.com/127.0.0.1#5335 -ipset=/netacad.com/gfwlist -server=/dettol.cl/127.0.0.1#5335 -ipset=/dettol.cl/gfwlist -server=/applebk.net/127.0.0.1#5335 -ipset=/applebk.net/gfwlist -server=/scholar.google.com.pk/127.0.0.1#5335 -ipset=/scholar.google.com.pk/gfwlist -server=/miniso.co.tz/127.0.0.1#5335 -ipset=/miniso.co.tz/gfwlist -server=/intel.eg/127.0.0.1#5335 -ipset=/intel.eg/gfwlist -server=/dynafleetonline.com/127.0.0.1#5335 -ipset=/dynafleetonline.com/gfwlist -server=/microsoft.com/127.0.0.1#5335 -ipset=/microsoft.com/gfwlist -server=/amazonvideo.cc/127.0.0.1#5335 -ipset=/amazonvideo.cc/gfwlist -server=/applecare.hamburg/127.0.0.1#5335 -ipset=/applecare.hamburg/gfwlist -server=/bestbuy-giftcard.info/127.0.0.1#5335 -ipset=/bestbuy-giftcard.info/gfwlist -server=/scholar.google.com.cu/127.0.0.1#5335 -ipset=/scholar.google.com.cu/gfwlist -server=/drdrebeatsale.com/127.0.0.1#5335 -ipset=/drdrebeatsale.com/gfwlist -server=/the-m-festival.com/127.0.0.1#5335 -ipset=/the-m-festival.com/gfwlist -server=/bmw-worldfinal.com/127.0.0.1#5335 -ipset=/bmw-worldfinal.com/gfwlist -server=/marvel10thanniversary.com/127.0.0.1#5335 -ipset=/marvel10thanniversary.com/gfwlist -server=/dnai.in/127.0.0.1#5335 -ipset=/dnai.in/gfwlist -server=/paypal-communications.net/127.0.0.1#5335 -ipset=/paypal-communications.net/gfwlist -server=/scoop.sh/127.0.0.1#5335 -ipset=/scoop.sh/gfwlist -server=/microsoft.lt/127.0.0.1#5335 -ipset=/microsoft.lt/gfwlist -server=/shoppercentre.com/127.0.0.1#5335 -ipset=/shoppercentre.com/gfwlist -server=/mini-connected.lt/127.0.0.1#5335 -ipset=/mini-connected.lt/gfwlist -server=/oxfordpoliticstrove.com/127.0.0.1#5335 -ipset=/oxfordpoliticstrove.com/gfwlist -server=/mini.cz/127.0.0.1#5335 -ipset=/mini.cz/gfwlist -server=/foxnewsmagazine.com/127.0.0.1#5335 -ipset=/foxnewsmagazine.com/gfwlist -server=/electrek.co/127.0.0.1#5335 -ipset=/electrek.co/gfwlist -server=/bridgestone.co.in/127.0.0.1#5335 -ipset=/bridgestone.co.in/gfwlist -server=/paypalonline.net/127.0.0.1#5335 -ipset=/paypalonline.net/gfwlist -server=/pchomepay.com.tw/127.0.0.1#5335 -ipset=/pchomepay.com.tw/gfwlist -server=/ebayclassifieds.com/127.0.0.1#5335 -ipset=/ebayclassifieds.com/gfwlist -server=/akamaizercentral.com/127.0.0.1#5335 -ipset=/akamaizercentral.com/gfwlist -server=/ciscoccservice.com/127.0.0.1#5335 -ipset=/ciscoccservice.com/gfwlist -server=/monsterbeatsdrdrecheap.com/127.0.0.1#5335 -ipset=/monsterbeatsdrdrecheap.com/gfwlist -server=/9now.com.au/127.0.0.1#5335 -ipset=/9now.com.au/gfwlist -server=/apple.fi/127.0.0.1#5335 -ipset=/apple.fi/gfwlist -server=/intel.dk/127.0.0.1#5335 -ipset=/intel.dk/gfwlist -server=/baltimorebmw.com/127.0.0.1#5335 -ipset=/baltimorebmw.com/gfwlist -server=/terragraph.com/127.0.0.1#5335 -ipset=/terragraph.com/gfwlist -server=/ieee-ies.org/127.0.0.1#5335 -ipset=/ieee-ies.org/gfwlist -server=/miniyaletown.ca/127.0.0.1#5335 -ipset=/miniyaletown.ca/gfwlist -server=/volvotrucks.de/127.0.0.1#5335 -ipset=/volvotrucks.de/gfwlist -server=/messenger.com/127.0.0.1#5335 -ipset=/messenger.com/gfwlist -server=/dogecoin.com/127.0.0.1#5335 -ipset=/dogecoin.com/gfwlist -server=/disneymagicmoments.gr/127.0.0.1#5335 -ipset=/disneymagicmoments.gr/gfwlist -server=/mini.ie/127.0.0.1#5335 -ipset=/mini.ie/gfwlist -server=/applefinalcutproworld.org/127.0.0.1#5335 -ipset=/applefinalcutproworld.org/gfwlist -server=/worldcoinpay.com/127.0.0.1#5335 -ipset=/worldcoinpay.com/gfwlist -server=/nikeitalia.com/127.0.0.1#5335 -ipset=/nikeitalia.com/gfwlist -server=/minidrivingexperienceusa.com/127.0.0.1#5335 -ipset=/minidrivingexperienceusa.com/gfwlist -server=/womenwill.com.br/127.0.0.1#5335 -ipset=/womenwill.com.br/gfwlist -server=/wwe.com/127.0.0.1#5335 -ipset=/wwe.com/gfwlist -server=/rockstargames.com/127.0.0.1#5335 -ipset=/rockstargames.com/gfwlist -server=/cbsig.net/127.0.0.1#5335 -ipset=/cbsig.net/gfwlist -server=/applestore.co.hu/127.0.0.1#5335 -ipset=/applestore.co.hu/gfwlist -server=/mastercard.si/127.0.0.1#5335 -ipset=/mastercard.si/gfwlist -server=/neurology.org/127.0.0.1#5335 -ipset=/neurology.org/gfwlist -server=/ebay.com/127.0.0.1#5335 -ipset=/ebay.com/gfwlist -server=/intelcapital.net/127.0.0.1#5335 -ipset=/intelcapital.net/gfwlist -server=/beatsbydre-outletsale.net/127.0.0.1#5335 -ipset=/beatsbydre-outletsale.net/gfwlist -server=/thinkwithgoogle.com/127.0.0.1#5335 -ipset=/thinkwithgoogle.com/gfwlist -server=/nikeswim.com/127.0.0.1#5335 -ipset=/nikeswim.com/gfwlist -server=/adobecc.com/127.0.0.1#5335 -ipset=/adobecc.com/gfwlist -server=/newsprestigenetwork.com.au/127.0.0.1#5335 -ipset=/newsprestigenetwork.com.au/gfwlist -server=/foxcharlotte.com/127.0.0.1#5335 -ipset=/foxcharlotte.com/gfwlist -server=/epochtimes-romania.com/127.0.0.1#5335 -ipset=/epochtimes-romania.com/gfwlist -server=/hbomaxcdn.com/127.0.0.1#5335 -ipset=/hbomaxcdn.com/gfwlist -server=/famosascalvas.com/127.0.0.1#5335 -ipset=/famosascalvas.com/gfwlist -server=/beatselectronics.com/127.0.0.1#5335 -ipset=/beatselectronics.com/gfwlist -server=/buymeacoffee.com/127.0.0.1#5335 -ipset=/buymeacoffee.com/gfwlist -server=/bloombergview.com/127.0.0.1#5335 -ipset=/bloombergview.com/gfwlist -server=/disneymagicmoments.fr/127.0.0.1#5335 -ipset=/disneymagicmoments.fr/gfwlist -server=/nabtravellercard.com.au/127.0.0.1#5335 -ipset=/nabtravellercard.com.au/gfwlist -server=/gettyimages.co.uk/127.0.0.1#5335 -ipset=/gettyimages.co.uk/gfwlist -server=/google.com.om/127.0.0.1#5335 -ipset=/google.com.om/gfwlist -server=/watchout.tw/127.0.0.1#5335 -ipset=/watchout.tw/gfwlist -server=/paydiant.com/127.0.0.1#5335 -ipset=/paydiant.com/gfwlist -server=/sf.net/127.0.0.1#5335 -ipset=/sf.net/gfwlist -server=/beatsbydremall2013.com/127.0.0.1#5335 -ipset=/beatsbydremall2013.com/gfwlist -server=/popjav.tv/127.0.0.1#5335 -ipset=/popjav.tv/gfwlist -server=/freenetproject.org/127.0.0.1#5335 -ipset=/freenetproject.org/gfwlist -server=/spotifycdn.net/127.0.0.1#5335 -ipset=/spotifycdn.net/gfwlist -server=/blogspot.com.co/127.0.0.1#5335 -ipset=/blogspot.com.co/gfwlist -server=/blogspot.jp/127.0.0.1#5335 -ipset=/blogspot.jp/gfwlist -server=/brandproducts1688.com/127.0.0.1#5335 -ipset=/brandproducts1688.com/gfwlist -server=/thinkquarterly.co.uk/127.0.0.1#5335 -ipset=/thinkquarterly.co.uk/gfwlist -server=/star-brasil.com/127.0.0.1#5335 -ipset=/star-brasil.com/gfwlist -server=/cheap-beatsbydre.com/127.0.0.1#5335 -ipset=/cheap-beatsbydre.com/gfwlist -server=/italiabeatsbydrdre.com/127.0.0.1#5335 -ipset=/italiabeatsbydrdre.com/gfwlist -server=/hu1u.com/127.0.0.1#5335 -ipset=/hu1u.com/gfwlist -server=/taptotokyo.com/127.0.0.1#5335 -ipset=/taptotokyo.com/gfwlist -server=/nintendoeurope.com/127.0.0.1#5335 -ipset=/nintendoeurope.com/gfwlist -server=/skype.com/127.0.0.1#5335 -ipset=/skype.com/gfwlist -server=/visabusinessinsights.com/127.0.0.1#5335 -ipset=/visabusinessinsights.com/gfwlist -server=/appstore.ph/127.0.0.1#5335 -ipset=/appstore.ph/gfwlist -server=/dettol.be/127.0.0.1#5335 -ipset=/dettol.be/gfwlist -server=/nvidia.com.br/127.0.0.1#5335 -ipset=/nvidia.com.br/gfwlist -server=/coinone.co.kr/127.0.0.1#5335 -ipset=/coinone.co.kr/gfwlist -server=/universalorlando.com/127.0.0.1#5335 -ipset=/universalorlando.com/gfwlist -server=/huobi.pro/127.0.0.1#5335 -ipset=/huobi.pro/gfwlist -server=/bmw.co.ke/127.0.0.1#5335 -ipset=/bmw.co.ke/gfwlist -server=/volvotrucks.no/127.0.0.1#5335 -ipset=/volvotrucks.no/gfwlist -server=/muji.us/127.0.0.1#5335 -ipset=/muji.us/gfwlist -server=/sharpdaily.tw/127.0.0.1#5335 -ipset=/sharpdaily.tw/gfwlist -server=/paisapay.info/127.0.0.1#5335 -ipset=/paisapay.info/gfwlist -server=/vfsco.at/127.0.0.1#5335 -ipset=/vfsco.at/gfwlist -server=/beats-by-dre-australia.com/127.0.0.1#5335 -ipset=/beats-by-dre-australia.com/gfwlist -server=/supermariorun.com/127.0.0.1#5335 -ipset=/supermariorun.com/gfwlist -server=/beatsbydrefr.com/127.0.0.1#5335 -ipset=/beatsbydrefr.com/gfwlist -server=/theebayshop.com/127.0.0.1#5335 -ipset=/theebayshop.com/gfwlist -server=/magentocommerce.com/127.0.0.1#5335 -ipset=/magentocommerce.com/gfwlist -server=/visa.com.az/127.0.0.1#5335 -ipset=/visa.com.az/gfwlist -server=/onlineapplestore.com/127.0.0.1#5335 -ipset=/onlineapplestore.com/gfwlist -server=/visual-arts.jp/127.0.0.1#5335 -ipset=/visual-arts.jp/gfwlist -server=/paygonline.com/127.0.0.1#5335 -ipset=/paygonline.com/gfwlist -server=/myguide.hk/127.0.0.1#5335 -ipset=/myguide.hk/gfwlist -server=/dailymail.com.au/127.0.0.1#5335 -ipset=/dailymail.com.au/gfwlist -server=/softbanktelecom.com/127.0.0.1#5335 -ipset=/softbanktelecom.com/gfwlist -server=/paofu.cloud/127.0.0.1#5335 -ipset=/paofu.cloud/gfwlist -server=/bwbx.io/127.0.0.1#5335 -ipset=/bwbx.io/gfwlist -server=/ipad.host/127.0.0.1#5335 -ipset=/ipad.host/gfwlist -server=/oxfordfirstsource.com/127.0.0.1#5335 -ipset=/oxfordfirstsource.com/gfwlist -server=/facebookconnect.com/127.0.0.1#5335 -ipset=/facebookconnect.com/gfwlist -server=/viacbs.com/127.0.0.1#5335 -ipset=/viacbs.com/gfwlist -server=/ebay.com.ec/127.0.0.1#5335 -ipset=/ebay.com.ec/gfwlist -server=/disneymagicmoments.de/127.0.0.1#5335 -ipset=/disneymagicmoments.de/gfwlist -server=/skate2.com/127.0.0.1#5335 -ipset=/skate2.com/gfwlist -server=/bethesdagamestudios.com/127.0.0.1#5335 -ipset=/bethesdagamestudios.com/gfwlist -server=/apple-usa.net/127.0.0.1#5335 -ipset=/apple-usa.net/gfwlist -server=/beatsbydremonsteraustralia.com/127.0.0.1#5335 -ipset=/beatsbydremonsteraustralia.com/gfwlist -server=/askfacebook.net/127.0.0.1#5335 -ipset=/askfacebook.net/gfwlist -server=/blink.org/127.0.0.1#5335 -ipset=/blink.org/gfwlist -server=/googlestore.com/127.0.0.1#5335 -ipset=/googlestore.com/gfwlist -server=/minie.com/127.0.0.1#5335 -ipset=/minie.com/gfwlist -server=/hpstore-emea.com/127.0.0.1#5335 -ipset=/hpstore-emea.com/gfwlist -server=/trustdoc.ch/127.0.0.1#5335 -ipset=/trustdoc.ch/gfwlist -server=/mininanaimo.ca/127.0.0.1#5335 -ipset=/mininanaimo.ca/gfwlist -server=/greatergothammini.com/127.0.0.1#5335 -ipset=/greatergothammini.com/gfwlist -server=/casque-fr.com/127.0.0.1#5335 -ipset=/casque-fr.com/gfwlist -server=/nvidia.ru/127.0.0.1#5335 -ipset=/nvidia.ru/gfwlist -server=/dynacw.com.hk/127.0.0.1#5335 -ipset=/dynacw.com.hk/gfwlist -server=/ebayfrance.com/127.0.0.1#5335 -ipset=/ebayfrance.com/gfwlist -server=/bmw-motorrad.uy/127.0.0.1#5335 -ipset=/bmw-motorrad.uy/gfwlist -server=/minioakville.com/127.0.0.1#5335 -ipset=/minioakville.com/gfwlist -server=/geeksquadcares.com/127.0.0.1#5335 -ipset=/geeksquadcares.com/gfwlist -server=/bmwmc.net/127.0.0.1#5335 -ipset=/bmwmc.net/gfwlist -server=/dettol.co.nz/127.0.0.1#5335 -ipset=/dettol.co.nz/gfwlist -server=/microbit.org/127.0.0.1#5335 -ipset=/microbit.org/gfwlist -server=/gitstar.net/127.0.0.1#5335 -ipset=/gitstar.net/gfwlist -server=/eff.org/127.0.0.1#5335 -ipset=/eff.org/gfwlist -server=/asto.re/127.0.0.1#5335 -ipset=/asto.re/gfwlist -server=/fasttext.cc/127.0.0.1#5335 -ipset=/fasttext.cc/gfwlist -server=/cern.ch/127.0.0.1#5335 -ipset=/cern.ch/gfwlist -server=/nintendo.ru/127.0.0.1#5335 -ipset=/nintendo.ru/gfwlist -server=/beatscollection2014.com/127.0.0.1#5335 -ipset=/beatscollection2014.com/gfwlist -server=/microsoftdiplomados.com/127.0.0.1#5335 -ipset=/microsoftdiplomados.com/gfwlist -server=/makebettercode.com/127.0.0.1#5335 -ipset=/makebettercode.com/gfwlist -server=/veet.se/127.0.0.1#5335 -ipset=/veet.se/gfwlist -server=/literatumonline.com/127.0.0.1#5335 -ipset=/literatumonline.com/gfwlist -server=/facebookpaper.com/127.0.0.1#5335 -ipset=/facebookpaper.com/gfwlist -server=/visa.com.tw/127.0.0.1#5335 -ipset=/visa.com.tw/gfwlist -server=/apple.si/127.0.0.1#5335 -ipset=/apple.si/gfwlist -server=/callersbane.com/127.0.0.1#5335 -ipset=/callersbane.com/gfwlist -server=/blogspot.kr/127.0.0.1#5335 -ipset=/blogspot.kr/gfwlist -server=/blogspot.mx/127.0.0.1#5335 -ipset=/blogspot.mx/gfwlist -server=/vk.cc/127.0.0.1#5335 -ipset=/vk.cc/gfwlist -server=/braeburncapital.com/127.0.0.1#5335 -ipset=/braeburncapital.com/gfwlist -server=/fbrell.com/127.0.0.1#5335 -ipset=/fbrell.com/gfwlist -server=/shazam.com/127.0.0.1#5335 -ipset=/shazam.com/gfwlist -server=/paypal-forward.com/127.0.0.1#5335 -ipset=/paypal-forward.com/gfwlist -server=/blogspot.se/127.0.0.1#5335 -ipset=/blogspot.se/gfwlist -server=/xn--6eup7j.com/127.0.0.1#5335 -ipset=/xn--6eup7j.com/gfwlist -server=/uun93.com/127.0.0.1#5335 -ipset=/uun93.com/gfwlist -server=/zaobao.com/127.0.0.1#5335 -ipset=/zaobao.com/gfwlist -server=/buyoculus.com/127.0.0.1#5335 -ipset=/buyoculus.com/gfwlist -server=/microsoftsilverlight.net/127.0.0.1#5335 -ipset=/microsoftsilverlight.net/gfwlist -server=/bmwstep.com/127.0.0.1#5335 -ipset=/bmwstep.com/gfwlist -server=/vfsco.no/127.0.0.1#5335 -ipset=/vfsco.no/gfwlist -server=/digitalpack.com/127.0.0.1#5335 -ipset=/digitalpack.com/gfwlist -server=/stackoverflowbusiness.com/127.0.0.1#5335 -ipset=/stackoverflowbusiness.com/gfwlist -server=/finish.co.kr/127.0.0.1#5335 -ipset=/finish.co.kr/gfwlist -server=/kernel.org/127.0.0.1#5335 -ipset=/kernel.org/gfwlist -server=/buybeatsheadphonesbydre.com/127.0.0.1#5335 -ipset=/buybeatsheadphonesbydre.com/gfwlist -server=/jobmarket.com.hk/127.0.0.1#5335 -ipset=/jobmarket.com.hk/gfwlist -server=/applefruity.com/127.0.0.1#5335 -ipset=/applefruity.com/gfwlist -server=/kickshatchannel.com/127.0.0.1#5335 -ipset=/kickshatchannel.com/gfwlist -server=/nurofen.fr/127.0.0.1#5335 -ipset=/nurofen.fr/gfwlist -server=/theclub.com.hk/127.0.0.1#5335 -ipset=/theclub.com.hk/gfwlist -server=/pccw.com/127.0.0.1#5335 -ipset=/pccw.com/gfwlist -server=/paypalcommunity.net/127.0.0.1#5335 -ipset=/paypalcommunity.net/gfwlist -server=/paypal-viewpoints.net/127.0.0.1#5335 -ipset=/paypal-viewpoints.net/gfwlist -server=/myicloud.net/127.0.0.1#5335 -ipset=/myicloud.net/gfwlist -server=/pinimg.com/127.0.0.1#5335 -ipset=/pinimg.com/gfwlist -server=/visa.co.in/127.0.0.1#5335 -ipset=/visa.co.in/gfwlist -server=/newdrediscount.com/127.0.0.1#5335 -ipset=/newdrediscount.com/gfwlist -server=/vimeobusiness.com/127.0.0.1#5335 -ipset=/vimeobusiness.com/gfwlist -server=/iphone.rs/127.0.0.1#5335 -ipset=/iphone.rs/gfwlist -server=/gog.com/127.0.0.1#5335 -ipset=/gog.com/gfwlist -server=/bmwgroup.at/127.0.0.1#5335 -ipset=/bmwgroup.at/gfwlist -server=/akamaietpmalwaretest.com/127.0.0.1#5335 -ipset=/akamaietpmalwaretest.com/gfwlist -server=/bnetproduct-a.akamaihd.net/127.0.0.1#5335 -ipset=/bnetproduct-a.akamaihd.net/gfwlist -server=/12diasderegalosdeitunes.pe/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.pe/gfwlist -server=/blogspot.cv/127.0.0.1#5335 -ipset=/blogspot.cv/gfwlist -server=/ebay.pl/127.0.0.1#5335 -ipset=/ebay.pl/gfwlist -server=/blogspot.li/127.0.0.1#5335 -ipset=/blogspot.li/gfwlist -server=/quatrowireless.com/127.0.0.1#5335 -ipset=/quatrowireless.com/gfwlist -server=/miniso.ua/127.0.0.1#5335 -ipset=/miniso.ua/gfwlist -server=/adidas.co.uk/127.0.0.1#5335 -ipset=/adidas.co.uk/gfwlist -server=/instangram.com/127.0.0.1#5335 -ipset=/instangram.com/gfwlist -server=/acheter-followers-instagram.com/127.0.0.1#5335 -ipset=/acheter-followers-instagram.com/gfwlist -server=/steampowered.com/127.0.0.1#5335 -ipset=/steampowered.com/gfwlist -server=/dfp6rglgjqszk.cloudfront.net/127.0.0.1#5335 -ipset=/dfp6rglgjqszk.cloudfront.net/gfwlist -server=/vod-hls-uk-live.akamaized.net/127.0.0.1#5335 -ipset=/vod-hls-uk-live.akamaized.net/gfwlist -server=/housing.com/127.0.0.1#5335 -ipset=/housing.com/gfwlist -server=/bmw-motorrad.co.nz/127.0.0.1#5335 -ipset=/bmw-motorrad.co.nz/gfwlist -server=/intel.bh/127.0.0.1#5335 -ipset=/intel.bh/gfwlist -server=/microsoft.cat/127.0.0.1#5335 -ipset=/microsoft.cat/gfwlist -server=/applecarbon.com/127.0.0.1#5335 -ipset=/applecarbon.com/gfwlist -server=/pvue1.com/127.0.0.1#5335 -ipset=/pvue1.com/gfwlist -server=/thomsonreuters.co.nz/127.0.0.1#5335 -ipset=/thomsonreuters.co.nz/gfwlist -server=/amazon.com.tr/127.0.0.1#5335 -ipset=/amazon.com.tr/gfwlist -server=/directvnow.com/127.0.0.1#5335 -ipset=/directvnow.com/gfwlist -server=/riotgames.jp/127.0.0.1#5335 -ipset=/riotgames.jp/gfwlist -server=/gordonmoore.com/127.0.0.1#5335 -ipset=/gordonmoore.com/gfwlist -server=/adobecreativityawards.com/127.0.0.1#5335 -ipset=/adobecreativityawards.com/gfwlist -server=/ebay.in/127.0.0.1#5335 -ipset=/ebay.in/gfwlist -server=/ebayjob.com/127.0.0.1#5335 -ipset=/ebayjob.com/gfwlist -server=/minimontroyal.ca/127.0.0.1#5335 -ipset=/minimontroyal.ca/gfwlist -server=/usvimosquitoproject.com/127.0.0.1#5335 -ipset=/usvimosquitoproject.com/gfwlist -server=/bmw-connecteddrive.lv/127.0.0.1#5335 -ipset=/bmw-connecteddrive.lv/gfwlist -server=/firestonedrivestore.com/127.0.0.1#5335 -ipset=/firestonedrivestore.com/gfwlist -server=/miniso-np.com/127.0.0.1#5335 -ipset=/miniso-np.com/gfwlist -server=/viacomcbspressexpress.com/127.0.0.1#5335 -ipset=/viacomcbspressexpress.com/gfwlist -server=/beats1.cc/127.0.0.1#5335 -ipset=/beats1.cc/gfwlist -server=/enteentegeh.de/127.0.0.1#5335 -ipset=/enteentegeh.de/gfwlist -server=/foxsmallbusinesscenter.org/127.0.0.1#5335 -ipset=/foxsmallbusinesscenter.org/gfwlist -server=/swoo.sh/127.0.0.1#5335 -ipset=/swoo.sh/gfwlist -server=/casquebeatsenligne.com/127.0.0.1#5335 -ipset=/casquebeatsenligne.com/gfwlist -server=/desertbmw.com/127.0.0.1#5335 -ipset=/desertbmw.com/gfwlist -server=/voatibetanenglish.com/127.0.0.1#5335 -ipset=/voatibetanenglish.com/gfwlist -server=/imagineecommerce.com/127.0.0.1#5335 -ipset=/imagineecommerce.com/gfwlist -server=/epochtime.com/127.0.0.1#5335 -ipset=/epochtime.com/gfwlist -server=/onenote.net/127.0.0.1#5335 -ipset=/onenote.net/gfwlist -server=/cnix-gov-cn.com/127.0.0.1#5335 -ipset=/cnix-gov-cn.com/gfwlist -server=/ebaycommercenetwork.com/127.0.0.1#5335 -ipset=/ebaycommercenetwork.com/gfwlist -server=/managedmeetingrooms.com/127.0.0.1#5335 -ipset=/managedmeetingrooms.com/gfwlist -server=/ipod.eu/127.0.0.1#5335 -ipset=/ipod.eu/gfwlist -server=/paypal-login.us/127.0.0.1#5335 -ipset=/paypal-login.us/gfwlist -server=/bing.com/127.0.0.1#5335 -ipset=/bing.com/gfwlist -server=/desktopmovies.org/127.0.0.1#5335 -ipset=/desktopmovies.org/gfwlist -server=/facebookcredits.info/127.0.0.1#5335 -ipset=/facebookcredits.info/gfwlist -server=/xandr.com/127.0.0.1#5335 -ipset=/xandr.com/gfwlist -server=/nab.com.au/127.0.0.1#5335 -ipset=/nab.com.au/gfwlist -server=/mybmw.com/127.0.0.1#5335 -ipset=/mybmw.com/gfwlist -server=/applestore.me/127.0.0.1#5335 -ipset=/applestore.me/gfwlist -server=/drebeats-singaporecheap.com/127.0.0.1#5335 -ipset=/drebeats-singaporecheap.com/gfwlist -server=/farfetch.com/127.0.0.1#5335 -ipset=/farfetch.com/gfwlist -server=/nvidia.tw/127.0.0.1#5335 -ipset=/nvidia.tw/gfwlist -server=/920share.com/127.0.0.1#5335 -ipset=/920share.com/gfwlist -server=/intel.co.jp/127.0.0.1#5335 -ipset=/intel.co.jp/gfwlist -server=/api-extractor.com/127.0.0.1#5335 -ipset=/api-extractor.com/gfwlist -server=/guardianproject.info/127.0.0.1#5335 -ipset=/guardianproject.info/gfwlist -server=/azuredatabricks.net/127.0.0.1#5335 -ipset=/azuredatabricks.net/gfwlist -server=/firesidegatherings.com/127.0.0.1#5335 -ipset=/firesidegatherings.com/gfwlist -server=/mybestbuyclaims.com/127.0.0.1#5335 -ipset=/mybestbuyclaims.com/gfwlist -server=/gsrc.io/127.0.0.1#5335 -ipset=/gsrc.io/gfwlist -server=/appdynamics.jp/127.0.0.1#5335 -ipset=/appdynamics.jp/gfwlist -server=/zee5.in/127.0.0.1#5335 -ipset=/zee5.in/gfwlist -server=/bmw-iraq.com/127.0.0.1#5335 -ipset=/bmw-iraq.com/gfwlist -server=/intel.ng/127.0.0.1#5335 -ipset=/intel.ng/gfwlist -server=/azure-dns.net/127.0.0.1#5335 -ipset=/azure-dns.net/gfwlist -server=/youtubego.com.br/127.0.0.1#5335 -ipset=/youtubego.com.br/gfwlist -server=/geforce.co.uk/127.0.0.1#5335 -ipset=/geforce.co.uk/gfwlist -server=/httpfacebook.com/127.0.0.1#5335 -ipset=/httpfacebook.com/gfwlist -server=/visa.co.uk/127.0.0.1#5335 -ipset=/visa.co.uk/gfwlist -server=/beatsbydresale-uk.com/127.0.0.1#5335 -ipset=/beatsbydresale-uk.com/gfwlist -server=/iphone.com.au/127.0.0.1#5335 -ipset=/iphone.com.au/gfwlist -server=/applfe.com/127.0.0.1#5335 -ipset=/applfe.com/gfwlist -server=/bmw.com.kh/127.0.0.1#5335 -ipset=/bmw.com.kh/gfwlist -server=/jsdelivr.net/127.0.0.1#5335 -ipset=/jsdelivr.net/gfwlist -server=/ubereats.com/127.0.0.1#5335 -ipset=/ubereats.com/gfwlist -server=/facebookporn.net/127.0.0.1#5335 -ipset=/facebookporn.net/gfwlist -server=/smartexpos.com/127.0.0.1#5335 -ipset=/smartexpos.com/gfwlist -server=/youtube.com.ve/127.0.0.1#5335 -ipset=/youtube.com.ve/gfwlist -server=/yahoo.com.my/127.0.0.1#5335 -ipset=/yahoo.com.my/gfwlist -server=/whatsapp-plus.me/127.0.0.1#5335 -ipset=/whatsapp-plus.me/gfwlist -server=/nikeshoes-store.com/127.0.0.1#5335 -ipset=/nikeshoes-store.com/gfwlist -server=/volvogroup.pl/127.0.0.1#5335 -ipset=/volvogroup.pl/gfwlist -server=/amazon.jobs/127.0.0.1#5335 -ipset=/amazon.jobs/gfwlist -server=/silverchair-cdn.com/127.0.0.1#5335 -ipset=/silverchair-cdn.com/gfwlist -server=/intc.com/127.0.0.1#5335 -ipset=/intc.com/gfwlist -server=/saffrontech.com/127.0.0.1#5335 -ipset=/saffrontech.com/gfwlist -server=/appleworldwidedeveloper.sc.omtrdc.net/127.0.0.1#5335 -ipset=/appleworldwidedeveloper.sc.omtrdc.net/gfwlist -server=/addthis.com/127.0.0.1#5335 -ipset=/addthis.com/gfwlist -server=/messengerdevelopers.com/127.0.0.1#5335 -ipset=/messengerdevelopers.com/gfwlist -server=/freindfeed.com/127.0.0.1#5335 -ipset=/freindfeed.com/gfwlist -server=/kuke.com/127.0.0.1#5335 -ipset=/kuke.com/gfwlist -server=/accessfacebookfromschool.com/127.0.0.1#5335 -ipset=/accessfacebookfromschool.com/gfwlist -server=/stackmod.blog/127.0.0.1#5335 -ipset=/stackmod.blog/gfwlist -server=/fbcdn.net/127.0.0.1#5335 -ipset=/fbcdn.net/gfwlist -server=/pokemonwifi.net/127.0.0.1#5335 -ipset=/pokemonwifi.net/gfwlist -server=/blogspot.com.mt/127.0.0.1#5335 -ipset=/blogspot.com.mt/gfwlist -server=/edx-cdn.org/127.0.0.1#5335 -ipset=/edx-cdn.org/gfwlist -server=/duckduckgo.mx/127.0.0.1#5335 -ipset=/duckduckgo.mx/gfwlist -server=/hp-printing.com/127.0.0.1#5335 -ipset=/hp-printing.com/gfwlist -server=/da-files.com/127.0.0.1#5335 -ipset=/da-files.com/gfwlist -server=/beatsbydrdre4sale.com/127.0.0.1#5335 -ipset=/beatsbydrdre4sale.com/gfwlist -server=/calgon.pt/127.0.0.1#5335 -ipset=/calgon.pt/gfwlist -server=/ieee-ras.org/127.0.0.1#5335 -ipset=/ieee-ras.org/gfwlist -server=/canada-beatsbydre.com/127.0.0.1#5335 -ipset=/canada-beatsbydre.com/gfwlist -server=/ilongman.com/127.0.0.1#5335 -ipset=/ilongman.com/gfwlist -server=/velocloud.com/127.0.0.1#5335 -ipset=/velocloud.com/gfwlist -server=/donttrack.us/127.0.0.1#5335 -ipset=/donttrack.us/gfwlist -server=/coreoptics.net/127.0.0.1#5335 -ipset=/coreoptics.net/gfwlist -server=/xn--3et96bj49ahpq.com/127.0.0.1#5335 -ipset=/xn--3et96bj49ahpq.com/gfwlist -server=/microsoftlatamaitour.com/127.0.0.1#5335 -ipset=/microsoftlatamaitour.com/gfwlist -server=/volvogroup.pe/127.0.0.1#5335 -ipset=/volvogroup.pe/gfwlist -server=/bmwsfl.net/127.0.0.1#5335 -ipset=/bmwsfl.net/gfwlist -server=/headphones-dre.com/127.0.0.1#5335 -ipset=/headphones-dre.com/gfwlist -server=/foxsports.com.ec/127.0.0.1#5335 -ipset=/foxsports.com.ec/gfwlist -server=/officialheadphone.com/127.0.0.1#5335 -ipset=/officialheadphone.com/gfwlist -server=/52hyse.com/127.0.0.1#5335 -ipset=/52hyse.com/gfwlist -server=/bloommicroventures.com/127.0.0.1#5335 -ipset=/bloommicroventures.com/gfwlist -server=/azure-sphere.com/127.0.0.1#5335 -ipset=/azure-sphere.com/gfwlist -server=/ebay.vn/127.0.0.1#5335 -ipset=/ebay.vn/gfwlist -server=/sony.com.co/127.0.0.1#5335 -ipset=/sony.com.co/gfwlist -server=/signalusers.org/127.0.0.1#5335 -ipset=/signalusers.org/gfwlist -server=/ipadmini.com.lk/127.0.0.1#5335 -ipset=/ipadmini.com.lk/gfwlist -server=/foxdoua.com/127.0.0.1#5335 -ipset=/foxdoua.com/gfwlist -server=/nicesshop.net/127.0.0.1#5335 -ipset=/nicesshop.net/gfwlist -server=/businesscatalyst.com/127.0.0.1#5335 -ipset=/businesscatalyst.com/gfwlist -server=/wmfusercontent.org/127.0.0.1#5335 -ipset=/wmfusercontent.org/gfwlist -server=/on.cc/127.0.0.1#5335 -ipset=/on.cc/gfwlist -server=/disneyjunior.com/127.0.0.1#5335 -ipset=/disneyjunior.com/gfwlist -server=/nikeshoeswon.com/127.0.0.1#5335 -ipset=/nikeshoeswon.com/gfwlist -server=/ebayclassifiedsgroup.com/127.0.0.1#5335 -ipset=/ebayclassifiedsgroup.com/gfwlist -server=/bmw-motorrad.co.th/127.0.0.1#5335 -ipset=/bmw-motorrad.co.th/gfwlist -server=/garena.my/127.0.0.1#5335 -ipset=/garena.my/gfwlist -server=/zeebioskop.com/127.0.0.1#5335 -ipset=/zeebioskop.com/gfwlist -server=/foxon.com/127.0.0.1#5335 -ipset=/foxon.com/gfwlist -server=/instagramsepeti.com/127.0.0.1#5335 -ipset=/instagramsepeti.com/gfwlist -server=/globalsign.com/127.0.0.1#5335 -ipset=/globalsign.com/gfwlist -server=/iphone.cm/127.0.0.1#5335 -ipset=/iphone.cm/gfwlist -server=/durex.com.pe/127.0.0.1#5335 -ipset=/durex.com.pe/gfwlist -server=/gettyimages.in/127.0.0.1#5335 -ipset=/gettyimages.in/gfwlist -server=/google.at/127.0.0.1#5335 -ipset=/google.at/gfwlist -server=/windows8.hk/127.0.0.1#5335 -ipset=/windows8.hk/gfwlist -server=/youtubefanfest.com/127.0.0.1#5335 -ipset=/youtubefanfest.com/gfwlist -server=/ukwhoswho.com/127.0.0.1#5335 -ipset=/ukwhoswho.com/gfwlist -server=/iam.soy/127.0.0.1#5335 -ipset=/iam.soy/gfwlist -server=/bloomberglabs.com/127.0.0.1#5335 -ipset=/bloomberglabs.com/gfwlist -server=/beats4salecheap.com/127.0.0.1#5335 -ipset=/beats4salecheap.com/gfwlist -server=/applecare.wang/127.0.0.1#5335 -ipset=/applecare.wang/gfwlist -server=/pinterest.co.at/127.0.0.1#5335 -ipset=/pinterest.co.at/gfwlist -server=/wa.me/127.0.0.1#5335 -ipset=/wa.me/gfwlist -server=/needforspeedtakedown.com/127.0.0.1#5335 -ipset=/needforspeedtakedown.com/gfwlist -server=/doom9.org/127.0.0.1#5335 -ipset=/doom9.org/gfwlist -server=/xplr.co/127.0.0.1#5335 -ipset=/xplr.co/gfwlist -server=/directvoffercodes.com/127.0.0.1#5335 -ipset=/directvoffercodes.com/gfwlist -server=/publishproxy.com/127.0.0.1#5335 -ipset=/publishproxy.com/gfwlist -server=/quip-cdn.com/127.0.0.1#5335 -ipset=/quip-cdn.com/gfwlist -server=/s-xoom.com/127.0.0.1#5335 -ipset=/s-xoom.com/gfwlist -server=/xbx.lv/127.0.0.1#5335 -ipset=/xbx.lv/gfwlist -server=/gscanada.info/127.0.0.1#5335 -ipset=/gscanada.info/gfwlist -server=/newsxtend.com.au/127.0.0.1#5335 -ipset=/newsxtend.com.au/gfwlist -server=/eamythic.com/127.0.0.1#5335 -ipset=/eamythic.com/gfwlist -server=/hpwellnesscentral.com/127.0.0.1#5335 -ipset=/hpwellnesscentral.com/gfwlist -server=/myradio.com.hk/127.0.0.1#5335 -ipset=/myradio.com.hk/gfwlist -server=/cbsistatic.com/127.0.0.1#5335 -ipset=/cbsistatic.com/gfwlist -server=/beatssbyaustralia.com/127.0.0.1#5335 -ipset=/beatssbyaustralia.com/gfwlist -server=/wiifitu.com/127.0.0.1#5335 -ipset=/wiifitu.com/gfwlist -server=/managed-pki.ch/127.0.0.1#5335 -ipset=/managed-pki.ch/gfwlist -server=/futunited.com/127.0.0.1#5335 -ipset=/futunited.com/gfwlist -server=/newsfeed.com/127.0.0.1#5335 -ipset=/newsfeed.com/gfwlist -server=/easportsactive.com/127.0.0.1#5335 -ipset=/easportsactive.com/gfwlist -server=/durex-shop.ch/127.0.0.1#5335 -ipset=/durex-shop.ch/gfwlist -server=/onbeatsbydresale.com/127.0.0.1#5335 -ipset=/onbeatsbydresale.com/gfwlist -server=/yahoo.lu/127.0.0.1#5335 -ipset=/yahoo.lu/gfwlist -server=/firestonecomercial.com.ar/127.0.0.1#5335 -ipset=/firestonecomercial.com.ar/gfwlist -server=/myfoxtampabay.com/127.0.0.1#5335 -ipset=/myfoxtampabay.com/gfwlist -server=/microsoftnews.com/127.0.0.1#5335 -ipset=/microsoftnews.com/gfwlist -server=/foxcanvasroom.com/127.0.0.1#5335 -ipset=/foxcanvasroom.com/gfwlist -server=/iphonecases100.com/127.0.0.1#5335 -ipset=/iphonecases100.com/gfwlist -server=/bmw-pma.com.sg/127.0.0.1#5335 -ipset=/bmw-pma.com.sg/gfwlist -server=/akamaa.com/127.0.0.1#5335 -ipset=/akamaa.com/gfwlist -server=/amazon.de/127.0.0.1#5335 -ipset=/amazon.de/gfwlist -server=/swiftfinancial.com/127.0.0.1#5335 -ipset=/swiftfinancial.com/gfwlist -server=/zb.app/127.0.0.1#5335 -ipset=/zb.app/gfwlist -server=/limelight.com/127.0.0.1#5335 -ipset=/limelight.com/gfwlist -server=/applefinalcutproworld.net/127.0.0.1#5335 -ipset=/applefinalcutproworld.net/gfwlist -server=/afp.com/127.0.0.1#5335 -ipset=/afp.com/gfwlist -server=/nikefirm.com/127.0.0.1#5335 -ipset=/nikefirm.com/gfwlist -server=/bmw-werk-berlin.de/127.0.0.1#5335 -ipset=/bmw-werk-berlin.de/gfwlist -server=/zb.live/127.0.0.1#5335 -ipset=/zb.live/gfwlist -server=/appspot.com/127.0.0.1#5335 -ipset=/appspot.com/gfwlist -server=/get.app/127.0.0.1#5335 -ipset=/get.app/gfwlist -server=/xboxgamepass.com/127.0.0.1#5335 -ipset=/xboxgamepass.com/gfwlist -server=/disney.sg/127.0.0.1#5335 -ipset=/disney.sg/gfwlist -server=/adidas.it/127.0.0.1#5335 -ipset=/adidas.it/gfwlist -server=/1drv.ms/127.0.0.1#5335 -ipset=/1drv.ms/gfwlist -server=/beatsdredreheadphones.com/127.0.0.1#5335 -ipset=/beatsdredreheadphones.com/gfwlist -server=/bookonsky.net/127.0.0.1#5335 -ipset=/bookonsky.net/gfwlist -server=/coursera-for-business.org/127.0.0.1#5335 -ipset=/coursera-for-business.org/gfwlist -server=/bridgestonela.com/127.0.0.1#5335 -ipset=/bridgestonela.com/gfwlist -server=/alphabet.com.lv/127.0.0.1#5335 -ipset=/alphabet.com.lv/gfwlist -server=/typography.com/127.0.0.1#5335 -ipset=/typography.com/gfwlist -server=/atandt.com/127.0.0.1#5335 -ipset=/atandt.com/gfwlist -server=/ieee-isto.org/127.0.0.1#5335 -ipset=/ieee-isto.org/gfwlist -server=/scholar.google.hr/127.0.0.1#5335 -ipset=/scholar.google.hr/gfwlist -server=/beatsbydregot.com/127.0.0.1#5335 -ipset=/beatsbydregot.com/gfwlist -server=/intellinuxgraphics.com/127.0.0.1#5335 -ipset=/intellinuxgraphics.com/gfwlist -server=/nikesoccercleats.com/127.0.0.1#5335 -ipset=/nikesoccercleats.com/gfwlist -server=/bmw-museum.net/127.0.0.1#5335 -ipset=/bmw-museum.net/gfwlist -server=/mucinex.co.nz/127.0.0.1#5335 -ipset=/mucinex.co.nz/gfwlist -server=/alphera.es/127.0.0.1#5335 -ipset=/alphera.es/gfwlist -server=/xingrz.me/127.0.0.1#5335 -ipset=/xingrz.me/gfwlist -server=/beatsbydrecybermondaydeals2013.net/127.0.0.1#5335 -ipset=/beatsbydrecybermondaydeals2013.net/gfwlist -server=/bloombergtax.com/127.0.0.1#5335 -ipset=/bloombergtax.com/gfwlist -server=/cash2.com/127.0.0.1#5335 -ipset=/cash2.com/gfwlist -server=/unrealtournament.com/127.0.0.1#5335 -ipset=/unrealtournament.com/gfwlist -server=/travelex.de/127.0.0.1#5335 -ipset=/travelex.de/gfwlist -server=/socrec.org/127.0.0.1#5335 -ipset=/socrec.org/gfwlist -server=/bmwondemandusa.com/127.0.0.1#5335 -ipset=/bmwondemandusa.com/gfwlist -server=/jwplayer.com/127.0.0.1#5335 -ipset=/jwplayer.com/gfwlist -server=/mini-connected.no/127.0.0.1#5335 -ipset=/mini-connected.no/gfwlist -server=/xn--fiqs8sxootzz.cn/127.0.0.1#5335 -ipset=/xn--fiqs8sxootzz.cn/gfwlist -server=/casquebeatsdre2013.com/127.0.0.1#5335 -ipset=/casquebeatsdre2013.com/gfwlist -server=/drdrebeats-chen.com/127.0.0.1#5335 -ipset=/drdrebeats-chen.com/gfwlist -server=/iphone.net.gr/127.0.0.1#5335 -ipset=/iphone.net.gr/gfwlist -server=/yahoo.tg/127.0.0.1#5335 -ipset=/yahoo.tg/gfwlist -server=/phantomjs.org/127.0.0.1#5335 -ipset=/phantomjs.org/gfwlist -server=/verisign.mobi/127.0.0.1#5335 -ipset=/verisign.mobi/gfwlist -server=/intel.com/127.0.0.1#5335 -ipset=/intel.com/gfwlist -server=/bmw-nigeria.com/127.0.0.1#5335 -ipset=/bmw-nigeria.com/gfwlist -server=/applehongkong.com.hk/127.0.0.1#5335 -ipset=/applehongkong.com.hk/gfwlist -server=/visiontimes.fr/127.0.0.1#5335 -ipset=/visiontimes.fr/gfwlist -server=/imaginecup.pl/127.0.0.1#5335 -ipset=/imaginecup.pl/gfwlist -server=/ieee-into-focus.org/127.0.0.1#5335 -ipset=/ieee-into-focus.org/gfwlist -server=/bmwwholesaleconnect.com/127.0.0.1#5335 -ipset=/bmwwholesaleconnect.com/gfwlist -server=/beatsbydreexecutivesale.com/127.0.0.1#5335 -ipset=/beatsbydreexecutivesale.com/gfwlist -server=/akadns.com/127.0.0.1#5335 -ipset=/akadns.com/gfwlist -server=/googlemail.com/127.0.0.1#5335 -ipset=/googlemail.com/gfwlist -server=/akamaized.net/127.0.0.1#5335 -ipset=/akamaized.net/gfwlist -server=/spotifyforbrands.com/127.0.0.1#5335 -ipset=/spotifyforbrands.com/gfwlist -server=/elifesciences.org/127.0.0.1#5335 -ipset=/elifesciences.org/gfwlist -server=/facebookappcenter.net/127.0.0.1#5335 -ipset=/facebookappcenter.net/gfwlist -server=/volvobuses.no/127.0.0.1#5335 -ipset=/volvobuses.no/gfwlist -server=/gitbook.com/127.0.0.1#5335 -ipset=/gitbook.com/gfwlist -server=/nike-air-max.com/127.0.0.1#5335 -ipset=/nike-air-max.com/gfwlist -server=/vfsco.cz/127.0.0.1#5335 -ipset=/vfsco.cz/gfwlist -server=/sinchew.com.my/127.0.0.1#5335 -ipset=/sinchew.com.my/gfwlist -server=/ayudanintendo.com/127.0.0.1#5335 -ipset=/ayudanintendo.com/gfwlist -server=/omoplanet.com/127.0.0.1#5335 -ipset=/omoplanet.com/gfwlist -server=/nvidia.com.mx/127.0.0.1#5335 -ipset=/nvidia.com.mx/gfwlist -server=/mastercard.com.cy/127.0.0.1#5335 -ipset=/mastercard.com.cy/gfwlist -server=/sony.cl/127.0.0.1#5335 -ipset=/sony.cl/gfwlist -server=/nlm.io/127.0.0.1#5335 -ipset=/nlm.io/gfwlist -server=/nikkei.com/127.0.0.1#5335 -ipset=/nikkei.com/gfwlist -server=/bmw.com/127.0.0.1#5335 -ipset=/bmw.com/gfwlist -server=/mortein.com.pk/127.0.0.1#5335 -ipset=/mortein.com.pk/gfwlist -server=/bmwasia.com/127.0.0.1#5335 -ipset=/bmwasia.com/gfwlist -server=/appleaustralia.com/127.0.0.1#5335 -ipset=/appleaustralia.com/gfwlist -server=/volvobuses.dk/127.0.0.1#5335 -ipset=/volvobuses.dk/gfwlist -server=/casquedrdrebeatssfr.com/127.0.0.1#5335 -ipset=/casquedrdrebeatssfr.com/gfwlist -server=/buyitnowshop.net/127.0.0.1#5335 -ipset=/buyitnowshop.net/gfwlist -server=/my9nj.com/127.0.0.1#5335 -ipset=/my9nj.com/gfwlist -server=/paypal-online.info/127.0.0.1#5335 -ipset=/paypal-online.info/gfwlist -server=/nikeliuxiang.com/127.0.0.1#5335 -ipset=/nikeliuxiang.com/gfwlist -server=/mastercardadvisors.com/127.0.0.1#5335 -ipset=/mastercardadvisors.com/gfwlist -server=/visa.gd/127.0.0.1#5335 -ipset=/visa.gd/gfwlist -server=/scholar.google.no/127.0.0.1#5335 -ipset=/scholar.google.no/gfwlist -server=/awscommandlineinterface.com/127.0.0.1#5335 -ipset=/awscommandlineinterface.com/gfwlist -server=/vpro.net/127.0.0.1#5335 -ipset=/vpro.net/gfwlist -server=/youtube.ba/127.0.0.1#5335 -ipset=/youtube.ba/gfwlist -server=/bmw.ma/127.0.0.1#5335 -ipset=/bmw.ma/gfwlist -server=/baxsound.com/127.0.0.1#5335 -ipset=/baxsound.com/gfwlist -server=/hulutv.com/127.0.0.1#5335 -ipset=/hulutv.com/gfwlist -server=/supremacy.net/127.0.0.1#5335 -ipset=/supremacy.net/gfwlist -server=/facebyook.com/127.0.0.1#5335 -ipset=/facebyook.com/gfwlist -server=/canon.de/127.0.0.1#5335 -ipset=/canon.de/gfwlist -server=/addthisedge.com/127.0.0.1#5335 -ipset=/addthisedge.com/gfwlist -server=/pearsoned.co.nz/127.0.0.1#5335 -ipset=/pearsoned.co.nz/gfwlist -server=/pearson.com.uy/127.0.0.1#5335 -ipset=/pearson.com.uy/gfwlist -server=/nvidia.co.at/127.0.0.1#5335 -ipset=/nvidia.co.at/gfwlist -server=/foxphiladelphia.com/127.0.0.1#5335 -ipset=/foxphiladelphia.com/gfwlist -server=/alpherafs.my/127.0.0.1#5335 -ipset=/alpherafs.my/gfwlist -server=/monsterbeatsnegozi.net/127.0.0.1#5335 -ipset=/monsterbeatsnegozi.net/gfwlist -server=/bmw-motorrad.com.ar/127.0.0.1#5335 -ipset=/bmw-motorrad.com.ar/gfwlist -server=/imac.co/127.0.0.1#5335 -ipset=/imac.co/gfwlist -server=/gtv.org/127.0.0.1#5335 -ipset=/gtv.org/gfwlist -server=/icloud.si/127.0.0.1#5335 -ipset=/icloud.si/gfwlist -server=/redd.it/127.0.0.1#5335 -ipset=/redd.it/gfwlist -server=/litv.tv/127.0.0.1#5335 -ipset=/litv.tv/gfwlist -server=/thesims.com/127.0.0.1#5335 -ipset=/thesims.com/gfwlist -server=/apple.pt/127.0.0.1#5335 -ipset=/apple.pt/gfwlist -server=/blizzardgearstore.com/127.0.0.1#5335 -ipset=/blizzardgearstore.com/gfwlist -server=/rootsigning.com/127.0.0.1#5335 -ipset=/rootsigning.com/gfwlist -server=/airmay.com/127.0.0.1#5335 -ipset=/airmay.com/gfwlist -server=/thomsonreuters.co.jp/127.0.0.1#5335 -ipset=/thomsonreuters.co.jp/gfwlist -server=/shop.app/127.0.0.1#5335 -ipset=/shop.app/gfwlist -server=/mysql.com/127.0.0.1#5335 -ipset=/mysql.com/gfwlist -server=/kijji.ca/127.0.0.1#5335 -ipset=/kijji.ca/gfwlist -server=/imac.rs/127.0.0.1#5335 -ipset=/imac.rs/gfwlist -server=/ig.me/127.0.0.1#5335 -ipset=/ig.me/gfwlist -server=/2mdn.net/127.0.0.1#5335 -ipset=/2mdn.net/gfwlist -server=/siege-amazon.com/127.0.0.1#5335 -ipset=/siege-amazon.com/gfwlist -server=/nixos.org/127.0.0.1#5335 -ipset=/nixos.org/gfwlist -server=/javhd3x.com/127.0.0.1#5335 -ipset=/javhd3x.com/gfwlist -server=/travelex.com.tr/127.0.0.1#5335 -ipset=/travelex.com.tr/gfwlist -server=/microsoftlinc.com/127.0.0.1#5335 -ipset=/microsoftlinc.com/gfwlist -server=/bmw.co.za/127.0.0.1#5335 -ipset=/bmw.co.za/gfwlist -server=/youjizz.com/127.0.0.1#5335 -ipset=/youjizz.com/gfwlist -server=/nurofen.com.sg/127.0.0.1#5335 -ipset=/nurofen.com.sg/gfwlist -server=/infrapedia.com/127.0.0.1#5335 -ipset=/infrapedia.com/gfwlist -server=/apple.in/127.0.0.1#5335 -ipset=/apple.in/gfwlist -server=/heroku.co/127.0.0.1#5335 -ipset=/heroku.co/gfwlist -server=/bethesda.net/127.0.0.1#5335 -ipset=/bethesda.net/gfwlist -server=/realclearhealth.com/127.0.0.1#5335 -ipset=/realclearhealth.com/gfwlist -server=/verisign.hk/127.0.0.1#5335 -ipset=/verisign.hk/gfwlist -server=/fbidb.io/127.0.0.1#5335 -ipset=/fbidb.io/gfwlist -server=/a.91gay.me/127.0.0.1#5335 -ipset=/a.91gay.me/gfwlist -server=/xn--p8j9a0d9c9a.xn--q9jyb4c/127.0.0.1#5335 -ipset=/xn--p8j9a0d9c9a.xn--q9jyb4c/gfwlist -server=/rocketfishproducts.com/127.0.0.1#5335 -ipset=/rocketfishproducts.com/gfwlist -server=/facebookbrand.com/127.0.0.1#5335 -ipset=/facebookbrand.com/gfwlist -server=/facebookcheats.com/127.0.0.1#5335 -ipset=/facebookcheats.com/gfwlist -server=/modular.im/127.0.0.1#5335 -ipset=/modular.im/gfwlist -server=/duckduckgo.sg/127.0.0.1#5335 -ipset=/duckduckgo.sg/gfwlist -server=/pearsonassessment.fr/127.0.0.1#5335 -ipset=/pearsonassessment.fr/gfwlist -server=/miniusaservice.com/127.0.0.1#5335 -ipset=/miniusaservice.com/gfwlist -server=/now.com/127.0.0.1#5335 -ipset=/now.com/gfwlist -server=/recoiljs.org/127.0.0.1#5335 -ipset=/recoiljs.org/gfwlist -server=/pintool.com/127.0.0.1#5335 -ipset=/pintool.com/gfwlist -server=/pinterest.fr/127.0.0.1#5335 -ipset=/pinterest.fr/gfwlist -server=/facebooknews.com/127.0.0.1#5335 -ipset=/facebooknews.com/gfwlist -server=/meraki-go.com/127.0.0.1#5335 -ipset=/meraki-go.com/gfwlist -server=/devm2m.com/127.0.0.1#5335 -ipset=/devm2m.com/gfwlist -server=/faceebok.com/127.0.0.1#5335 -ipset=/faceebok.com/gfwlist -server=/arphic.com.tw/127.0.0.1#5335 -ipset=/arphic.com.tw/gfwlist -server=/linuxmint.com/127.0.0.1#5335 -ipset=/linuxmint.com/gfwlist -server=/repsils.no/127.0.0.1#5335 -ipset=/repsils.no/gfwlist -server=/yahoo.ch/127.0.0.1#5335 -ipset=/yahoo.ch/gfwlist -server=/intel.se/127.0.0.1#5335 -ipset=/intel.se/gfwlist -server=/veet.com.co/127.0.0.1#5335 -ipset=/veet.com.co/gfwlist -server=/foxsports.com.py/127.0.0.1#5335 -ipset=/foxsports.com.py/gfwlist -server=/zeit-world.co.uk/127.0.0.1#5335 -ipset=/zeit-world.co.uk/gfwlist -server=/monsterbeatsok.com/127.0.0.1#5335 -ipset=/monsterbeatsok.com/gfwlist -server=/fb.me/127.0.0.1#5335 -ipset=/fb.me/gfwlist -server=/ciscolivehls-i.akamaihd.net/127.0.0.1#5335 -ipset=/ciscolivehls-i.akamaihd.net/gfwlist -server=/applf.com/127.0.0.1#5335 -ipset=/applf.com/gfwlist -server=/is.gd/127.0.0.1#5335 -ipset=/is.gd/gfwlist -server=/mini-connected.lu/127.0.0.1#5335 -ipset=/mini-connected.lu/gfwlist -server=/ipleadership.org/127.0.0.1#5335 -ipset=/ipleadership.org/gfwlist -server=/google.lv/127.0.0.1#5335 -ipset=/google.lv/gfwlist -server=/needforspeedstreetkings.com/127.0.0.1#5335 -ipset=/needforspeedstreetkings.com/gfwlist -server=/airwick.fi/127.0.0.1#5335 -ipset=/airwick.fi/gfwlist -server=/facebook123.org/127.0.0.1#5335 -ipset=/facebook123.org/gfwlist -server=/112263.com/127.0.0.1#5335 -ipset=/112263.com/gfwlist -server=/trellocdn.com/127.0.0.1#5335 -ipset=/trellocdn.com/gfwlist -server=/volvotruckcenter.be/127.0.0.1#5335 -ipset=/volvotruckcenter.be/gfwlist -server=/volvotrucks.co.zw/127.0.0.1#5335 -ipset=/volvotrucks.co.zw/gfwlist -server=/devtools-paypal.com/127.0.0.1#5335 -ipset=/devtools-paypal.com/gfwlist -server=/tfhub.dev/127.0.0.1#5335 -ipset=/tfhub.dev/gfwlist -server=/vfsco.ee/127.0.0.1#5335 -ipset=/vfsco.ee/gfwlist -server=/bmw-welt.com/127.0.0.1#5335 -ipset=/bmw-welt.com/gfwlist -server=/bmwpittsburgh.com/127.0.0.1#5335 -ipset=/bmwpittsburgh.com/gfwlist -server=/vmw.com/127.0.0.1#5335 -ipset=/vmw.com/gfwlist -server=/venmo.s3.amazonaws.com/127.0.0.1#5335 -ipset=/venmo.s3.amazonaws.com/gfwlist -server=/connect-in-canada.com/127.0.0.1#5335 -ipset=/connect-in-canada.com/gfwlist -server=/canon.se/127.0.0.1#5335 -ipset=/canon.se/gfwlist -server=/beatsbydreirelandsonline.com/127.0.0.1#5335 -ipset=/beatsbydreirelandsonline.com/gfwlist -server=/mobile.de/127.0.0.1#5335 -ipset=/mobile.de/gfwlist -server=/nikeshoes21.com/127.0.0.1#5335 -ipset=/nikeshoes21.com/gfwlist -server=/beatsbydreaustraliaonlines.com/127.0.0.1#5335 -ipset=/beatsbydreaustraliaonlines.com/gfwlist -server=/flipshare.com/127.0.0.1#5335 -ipset=/flipshare.com/gfwlist -server=/ngeo.com/127.0.0.1#5335 -ipset=/ngeo.com/gfwlist -server=/alphabet.co.za/127.0.0.1#5335 -ipset=/alphabet.co.za/gfwlist -server=/donkeykongcountryreturns.com/127.0.0.1#5335 -ipset=/donkeykongcountryreturns.com/gfwlist -server=/2beatsdre.com/127.0.0.1#5335 -ipset=/2beatsdre.com/gfwlist -server=/ciscolearningsystem.com/127.0.0.1#5335 -ipset=/ciscolearningsystem.com/gfwlist -server=/applecomputer.com/127.0.0.1#5335 -ipset=/applecomputer.com/gfwlist -server=/duckduckgo.dk/127.0.0.1#5335 -ipset=/duckduckgo.dk/gfwlist -server=/onestore.ms/127.0.0.1#5335 -ipset=/onestore.ms/gfwlist -server=/applewatchseries3.net/127.0.0.1#5335 -ipset=/applewatchseries3.net/gfwlist -server=/mkto-c0100.com/127.0.0.1#5335 -ipset=/mkto-c0100.com/gfwlist -server=/bmw.bm/127.0.0.1#5335 -ipset=/bmw.bm/gfwlist -server=/thechronicle.com.au/127.0.0.1#5335 -ipset=/thechronicle.com.au/gfwlist -server=/withyoutube.com/127.0.0.1#5335 -ipset=/withyoutube.com/gfwlist -server=/sandisk.ae/127.0.0.1#5335 -ipset=/sandisk.ae/gfwlist -server=/ddg.gg/127.0.0.1#5335 -ipset=/ddg.gg/gfwlist -server=/macbook.tw/127.0.0.1#5335 -ipset=/macbook.tw/gfwlist -server=/mini.fi/127.0.0.1#5335 -ipset=/mini.fi/gfwlist -server=/vine.co/127.0.0.1#5335 -ipset=/vine.co/gfwlist -server=/youtube.hk/127.0.0.1#5335 -ipset=/youtube.hk/gfwlist -server=/pyhapp.com/127.0.0.1#5335 -ipset=/pyhapp.com/gfwlist -server=/epinions.com/127.0.0.1#5335 -ipset=/epinions.com/gfwlist -server=/bmw-i.jp/127.0.0.1#5335 -ipset=/bmw-i.jp/gfwlist -server=/what-fan.net/127.0.0.1#5335 -ipset=/what-fan.net/gfwlist -server=/ebayjewelry.com/127.0.0.1#5335 -ipset=/ebayjewelry.com/gfwlist -server=/tryengineering.org/127.0.0.1#5335 -ipset=/tryengineering.org/gfwlist -server=/onsaletrend.com/127.0.0.1#5335 -ipset=/onsaletrend.com/gfwlist -server=/facebookland.com/127.0.0.1#5335 -ipset=/facebookland.com/gfwlist -server=/chinadecoding.com/127.0.0.1#5335 -ipset=/chinadecoding.com/gfwlist -server=/ipoditouch.com/127.0.0.1#5335 -ipset=/ipoditouch.com/gfwlist -server=/bmw-motorrad.pa/127.0.0.1#5335 -ipset=/bmw-motorrad.pa/gfwlist -server=/getcomposer.org/127.0.0.1#5335 -ipset=/getcomposer.org/gfwlist -server=/akamai-platform-internal.net/127.0.0.1#5335 -ipset=/akamai-platform-internal.net/gfwlist -server=/trydurex.tv/127.0.0.1#5335 -ipset=/trydurex.tv/gfwlist -server=/google.az/127.0.0.1#5335 -ipset=/google.az/gfwlist -server=/airwick.si/127.0.0.1#5335 -ipset=/airwick.si/gfwlist -server=/applestore.com.jo/127.0.0.1#5335 -ipset=/applestore.com.jo/gfwlist -server=/mini-srilanka.com/127.0.0.1#5335 -ipset=/mini-srilanka.com/gfwlist -server=/casquebeatssolo.net/127.0.0.1#5335 -ipset=/casquebeatssolo.net/gfwlist -server=/usatodaynetworkservice.com/127.0.0.1#5335 -ipset=/usatodaynetworkservice.com/gfwlist -server=/zendesk.com/127.0.0.1#5335 -ipset=/zendesk.com/gfwlist -server=/javwide.tv/127.0.0.1#5335 -ipset=/javwide.tv/gfwlist -server=/visaluxuryhotelcollection.com.br/127.0.0.1#5335 -ipset=/visaluxuryhotelcollection.com.br/gfwlist -server=/q10.jp/127.0.0.1#5335 -ipset=/q10.jp/gfwlist -server=/volvobuses.mx/127.0.0.1#5335 -ipset=/volvobuses.mx/gfwlist -server=/stackage.org/127.0.0.1#5335 -ipset=/stackage.org/gfwlist -server=/spotify-everywhere.com/127.0.0.1#5335 -ipset=/spotify-everywhere.com/gfwlist -server=/shopifystatus.com/127.0.0.1#5335 -ipset=/shopifystatus.com/gfwlist -server=/danmarkbeatsbydrdre.com/127.0.0.1#5335 -ipset=/danmarkbeatsbydrdre.com/gfwlist -server=/oxfordaasc.com/127.0.0.1#5335 -ipset=/oxfordaasc.com/gfwlist -server=/cheapmonsterbeatsheadsets.com/127.0.0.1#5335 -ipset=/cheapmonsterbeatsheadsets.com/gfwlist -server=/golang.net/127.0.0.1#5335 -ipset=/golang.net/gfwlist -server=/snapseed.com/127.0.0.1#5335 -ipset=/snapseed.com/gfwlist -server=/tictoc.video/127.0.0.1#5335 -ipset=/tictoc.video/gfwlist -server=/vmtestdrive.com/127.0.0.1#5335 -ipset=/vmtestdrive.com/gfwlist -server=/elsevier.com/127.0.0.1#5335 -ipset=/elsevier.com/gfwlist -server=/volvotrucks.mn/127.0.0.1#5335 -ipset=/volvotrucks.mn/gfwlist -server=/yzzk.com/127.0.0.1#5335 -ipset=/yzzk.com/gfwlist -server=/comodoca.com/127.0.0.1#5335 -ipset=/comodoca.com/gfwlist -server=/ipadpro.buzz/127.0.0.1#5335 -ipset=/ipadpro.buzz/gfwlist -server=/hulu.com/127.0.0.1#5335 -ipset=/hulu.com/gfwlist -server=/pypi.io/127.0.0.1#5335 -ipset=/pypi.io/gfwlist -server=/bmw-mountains.com/127.0.0.1#5335 -ipset=/bmw-mountains.com/gfwlist -server=/ebayworlds.com/127.0.0.1#5335 -ipset=/ebayworlds.com/gfwlist -server=/google.com.sl/127.0.0.1#5335 -ipset=/google.com.sl/gfwlist -server=/insidevoa.com/127.0.0.1#5335 -ipset=/insidevoa.com/gfwlist -server=/pokemonpicross.com/127.0.0.1#5335 -ipset=/pokemonpicross.com/gfwlist -server=/freecodecamp.org/127.0.0.1#5335 -ipset=/freecodecamp.org/gfwlist -server=/bmw-motorrad.sa/127.0.0.1#5335 -ipset=/bmw-motorrad.sa/gfwlist -server=/paypal-portal.com/127.0.0.1#5335 -ipset=/paypal-portal.com/gfwlist -server=/versly.com/127.0.0.1#5335 -ipset=/versly.com/gfwlist -server=/myfoxatlanta.com/127.0.0.1#5335 -ipset=/myfoxatlanta.com/gfwlist -server=/bmw.dz/127.0.0.1#5335 -ipset=/bmw.dz/gfwlist -server=/airtunes.net/127.0.0.1#5335 -ipset=/airtunes.net/gfwlist -server=/beatspaschers.net/127.0.0.1#5335 -ipset=/beatspaschers.net/gfwlist -server=/stackoverflow.email/127.0.0.1#5335 -ipset=/stackoverflow.email/gfwlist -server=/lysol.net/127.0.0.1#5335 -ipset=/lysol.net/gfwlist -server=/paypalcreditcard.com/127.0.0.1#5335 -ipset=/paypalcreditcard.com/gfwlist -server=/nurofen.at/127.0.0.1#5335 -ipset=/nurofen.at/gfwlist -server=/facebooik.com/127.0.0.1#5335 -ipset=/facebooik.com/gfwlist -server=/miniso.co/127.0.0.1#5335 -ipset=/miniso.co/gfwlist -server=/businessinsider.co.za/127.0.0.1#5335 -ipset=/businessinsider.co.za/gfwlist -server=/apple.my/127.0.0.1#5335 -ipset=/apple.my/gfwlist -server=/disneymagicmoments.co.za/127.0.0.1#5335 -ipset=/disneymagicmoments.co.za/gfwlist -server=/hpto.net/127.0.0.1#5335 -ipset=/hpto.net/gfwlist -server=/pricelesshonolulu.com/127.0.0.1#5335 -ipset=/pricelesshonolulu.com/gfwlist -server=/facebook-hardware.com/127.0.0.1#5335 -ipset=/facebook-hardware.com/gfwlist -server=/adblockplus.org/127.0.0.1#5335 -ipset=/adblockplus.org/gfwlist -server=/shopee.co.id/127.0.0.1#5335 -ipset=/shopee.co.id/gfwlist -server=/iphonecollcase.com/127.0.0.1#5335 -ipset=/iphonecollcase.com/gfwlist -server=/adobe.com/127.0.0.1#5335 -ipset=/adobe.com/gfwlist -server=/mongodb.com/127.0.0.1#5335 -ipset=/mongodb.com/gfwlist -server=/bloomberg.cn/127.0.0.1#5335 -ipset=/bloomberg.cn/gfwlist -server=/redtube.com/127.0.0.1#5335 -ipset=/redtube.com/gfwlist -server=/apple.jp/127.0.0.1#5335 -ipset=/apple.jp/gfwlist -server=/tweetdeck.com/127.0.0.1#5335 -ipset=/tweetdeck.com/gfwlist -server=/connectcommerce.tv/127.0.0.1#5335 -ipset=/connectcommerce.tv/gfwlist -server=/aboutamazon.eu/127.0.0.1#5335 -ipset=/aboutamazon.eu/gfwlist -server=/bmw-world.com/127.0.0.1#5335 -ipset=/bmw-world.com/gfwlist -server=/douya.org/127.0.0.1#5335 -ipset=/douya.org/gfwlist -server=/braintreepaymentsolutions.com/127.0.0.1#5335 -ipset=/braintreepaymentsolutions.com/gfwlist -server=/gostorego.com/127.0.0.1#5335 -ipset=/gostorego.com/gfwlist -server=/gettr.com/127.0.0.1#5335 -ipset=/gettr.com/gfwlist -server=/apple-expo.eu/127.0.0.1#5335 -ipset=/apple-expo.eu/gfwlist -server=/4chan.org/127.0.0.1#5335 -ipset=/4chan.org/gfwlist -server=/creativecloud.com/127.0.0.1#5335 -ipset=/creativecloud.com/gfwlist -server=/feacbook.com/127.0.0.1#5335 -ipset=/feacbook.com/gfwlist -server=/thesffblog.com/127.0.0.1#5335 -ipset=/thesffblog.com/gfwlist -server=/nikepress.com/127.0.0.1#5335 -ipset=/nikepress.com/gfwlist -server=/nintendo3ds.com/127.0.0.1#5335 -ipset=/nintendo3ds.com/gfwlist -server=/beatsfactoryoutles.com/127.0.0.1#5335 -ipset=/beatsfactoryoutles.com/gfwlist -server=/apple.sk/127.0.0.1#5335 -ipset=/apple.sk/gfwlist -server=/spreadprivacy.com/127.0.0.1#5335 -ipset=/spreadprivacy.com/gfwlist -server=/swisssigngroup.com/127.0.0.1#5335 -ipset=/swisssigngroup.com/gfwlist -server=/minimontrealcentre.ca/127.0.0.1#5335 -ipset=/minimontrealcentre.ca/gfwlist -server=/fox5storm.com/127.0.0.1#5335 -ipset=/fox5storm.com/gfwlist -server=/newsupermariobrosu.com/127.0.0.1#5335 -ipset=/newsupermariobrosu.com/gfwlist -server=/discordapp.com/127.0.0.1#5335 -ipset=/discordapp.com/gfwlist -server=/dailytelegraph.com.au/127.0.0.1#5335 -ipset=/dailytelegraph.com.au/gfwlist -server=/insider.com/127.0.0.1#5335 -ipset=/insider.com/gfwlist -server=/phncdn.com/127.0.0.1#5335 -ipset=/phncdn.com/gfwlist -server=/ebayeletro.com/127.0.0.1#5335 -ipset=/ebayeletro.com/gfwlist -server=/macbookpro.com.au/127.0.0.1#5335 -ipset=/macbookpro.com.au/gfwlist -server=/nikeproduct.com/127.0.0.1#5335 -ipset=/nikeproduct.com/gfwlist -server=/bmw-connected-drive.com/127.0.0.1#5335 -ipset=/bmw-connected-drive.com/gfwlist -server=/kamisama-maeda-lab.com/127.0.0.1#5335 -ipset=/kamisama-maeda-lab.com/gfwlist -server=/finish.de/127.0.0.1#5335 -ipset=/finish.de/gfwlist -server=/epochtimestr.com/127.0.0.1#5335 -ipset=/epochtimestr.com/gfwlist -server=/mail.ru/127.0.0.1#5335 -ipset=/mail.ru/gfwlist -server=/driving.co.uk/127.0.0.1#5335 -ipset=/driving.co.uk/gfwlist -server=/microsoft.vn/127.0.0.1#5335 -ipset=/microsoft.vn/gfwlist -server=/mojang.com/127.0.0.1#5335 -ipset=/mojang.com/gfwlist -server=/apple.rs/127.0.0.1#5335 -ipset=/apple.rs/gfwlist -server=/beatsbydre-store.com/127.0.0.1#5335 -ipset=/beatsbydre-store.com/gfwlist -server=/area120.com/127.0.0.1#5335 -ipset=/area120.com/gfwlist -server=/pearsonclinical.no/127.0.0.1#5335 -ipset=/pearsonclinical.no/gfwlist -server=/bmw-welt.net/127.0.0.1#5335 -ipset=/bmw-welt.net/gfwlist -server=/miniso.uz/127.0.0.1#5335 -ipset=/miniso.uz/gfwlist -server=/thestandard.com.hk/127.0.0.1#5335 -ipset=/thestandard.com.hk/gfwlist -server=/youtube.md/127.0.0.1#5335 -ipset=/youtube.md/gfwlist -server=/whychooseview.com/127.0.0.1#5335 -ipset=/whychooseview.com/gfwlist -server=/ntdca.com/127.0.0.1#5335 -ipset=/ntdca.com/gfwlist -server=/mzstatic.com/127.0.0.1#5335 -ipset=/mzstatic.com/gfwlist -server=/amazon-adsystem.com/127.0.0.1#5335 -ipset=/amazon-adsystem.com/gfwlist -server=/linkedin.com/127.0.0.1#5335 -ipset=/linkedin.com/gfwlist -server=/uverse.com/127.0.0.1#5335 -ipset=/uverse.com/gfwlist -server=/bmw.com.bd/127.0.0.1#5335 -ipset=/bmw.com.bd/gfwlist -server=/mastercard.com.bh/127.0.0.1#5335 -ipset=/mastercard.com.bh/gfwlist -server=/nikefootballgloves.com/127.0.0.1#5335 -ipset=/nikefootballgloves.com/gfwlist -server=/microsoftstore.com.hk/127.0.0.1#5335 -ipset=/microsoftstore.com.hk/gfwlist -server=/imoviestage.com/127.0.0.1#5335 -ipset=/imoviestage.com/gfwlist -server=/minimoncton.com/127.0.0.1#5335 -ipset=/minimoncton.com/gfwlist -server=/linguee.com/127.0.0.1#5335 -ipset=/linguee.com/gfwlist -server=/oraclefoundation.org/127.0.0.1#5335 -ipset=/oraclefoundation.org/gfwlist -server=/epochtimes.com.sg/127.0.0.1#5335 -ipset=/epochtimes.com.sg/gfwlist -server=/icloud.jp/127.0.0.1#5335 -ipset=/icloud.jp/gfwlist -server=/minivictoria.com/127.0.0.1#5335 -ipset=/minivictoria.com/gfwlist -server=/bridgestone.co.cr/127.0.0.1#5335 -ipset=/bridgestone.co.cr/gfwlist -server=/visa.com.kn/127.0.0.1#5335 -ipset=/visa.com.kn/gfwlist -server=/icloud.ro/127.0.0.1#5335 -ipset=/icloud.ro/gfwlist -server=/sorcerersarena.com/127.0.0.1#5335 -ipset=/sorcerersarena.com/gfwlist -server=/attcenter.com/127.0.0.1#5335 -ipset=/attcenter.com/gfwlist -server=/canon-cmos-sensors.com/127.0.0.1#5335 -ipset=/canon-cmos-sensors.com/gfwlist -server=/w3schools.com/127.0.0.1#5335 -ipset=/w3schools.com/gfwlist -server=/nurofen.net/127.0.0.1#5335 -ipset=/nurofen.net/gfwlist -server=/faceboon.com/127.0.0.1#5335 -ipset=/faceboon.com/gfwlist -server=/ebaytrading.com/127.0.0.1#5335 -ipset=/ebaytrading.com/gfwlist -server=/calgon.fr/127.0.0.1#5335 -ipset=/calgon.fr/gfwlist -server=/faceidglobal.com/127.0.0.1#5335 -ipset=/faceidglobal.com/gfwlist -server=/vanish.com.ar/127.0.0.1#5335 -ipset=/vanish.com.ar/gfwlist -server=/visa.fi/127.0.0.1#5335 -ipset=/visa.fi/gfwlist -server=/kscisco.com/127.0.0.1#5335 -ipset=/kscisco.com/gfwlist -server=/akamaientrypoint.net/127.0.0.1#5335 -ipset=/akamaientrypoint.net/gfwlist -server=/cheapheadphonesland.com/127.0.0.1#5335 -ipset=/cheapheadphonesland.com/gfwlist -server=/iphone-x.tv/127.0.0.1#5335 -ipset=/iphone-x.tv/gfwlist -server=/bidorbuyindia.com/127.0.0.1#5335 -ipset=/bidorbuyindia.com/gfwlist -server=/foxsportsracing.com/127.0.0.1#5335 -ipset=/foxsportsracing.com/gfwlist -server=/intel.gr/127.0.0.1#5335 -ipset=/intel.gr/gfwlist -server=/vanishstains.com/127.0.0.1#5335 -ipset=/vanishstains.com/gfwlist -server=/mini.com.co/127.0.0.1#5335 -ipset=/mini.com.co/gfwlist -server=/sportswomenoftheyear.co.uk/127.0.0.1#5335 -ipset=/sportswomenoftheyear.co.uk/gfwlist -server=/itunesiradio.com/127.0.0.1#5335 -ipset=/itunesiradio.com/gfwlist -server=/myfoxboston.com/127.0.0.1#5335 -ipset=/myfoxboston.com/gfwlist -server=/bmw-connecteddrive.com.mt/127.0.0.1#5335 -ipset=/bmw-connecteddrive.com.mt/gfwlist -server=/eachpay.com/127.0.0.1#5335 -ipset=/eachpay.com/gfwlist -server=/cloudflarestatus.com/127.0.0.1#5335 -ipset=/cloudflarestatus.com/gfwlist -server=/hqporner.com/127.0.0.1#5335 -ipset=/hqporner.com/gfwlist -server=/disney.co.za/127.0.0.1#5335 -ipset=/disney.co.za/gfwlist -server=/newmonsterbeatsheadphones.com/127.0.0.1#5335 -ipset=/newmonsterbeatsheadphones.com/gfwlist -server=/youtube.com.bh/127.0.0.1#5335 -ipset=/youtube.com.bh/gfwlist -server=/wpewebkit.org/127.0.0.1#5335 -ipset=/wpewebkit.org/gfwlist -server=/apress.com/127.0.0.1#5335 -ipset=/apress.com/gfwlist -server=/canon.ch/127.0.0.1#5335 -ipset=/canon.ch/gfwlist -server=/mastercardconnect.com/127.0.0.1#5335 -ipset=/mastercardconnect.com/gfwlist -server=/go-lang.com/127.0.0.1#5335 -ipset=/go-lang.com/gfwlist -server=/scholar.google.com.ec/127.0.0.1#5335 -ipset=/scholar.google.com.ec/gfwlist -server=/nikefactorystore.com/127.0.0.1#5335 -ipset=/nikefactorystore.com/gfwlist -server=/applestore.net.gr/127.0.0.1#5335 -ipset=/applestore.net.gr/gfwlist -server=/mastercardbusinessnetwork.com/127.0.0.1#5335 -ipset=/mastercardbusinessnetwork.com/gfwlist -server=/mini.at/127.0.0.1#5335 -ipset=/mini.at/gfwlist -server=/nvidia.com.ua/127.0.0.1#5335 -ipset=/nvidia.com.ua/gfwlist -server=/apple.se/127.0.0.1#5335 -ipset=/apple.se/gfwlist -server=/nikeshoesretro.com/127.0.0.1#5335 -ipset=/nikeshoesretro.com/gfwlist -server=/simg.jp/127.0.0.1#5335 -ipset=/simg.jp/gfwlist -server=/nikeresponsibility.com/127.0.0.1#5335 -ipset=/nikeresponsibility.com/gfwlist -server=/bmw-motorrad.com.hr/127.0.0.1#5335 -ipset=/bmw-motorrad.com.hr/gfwlist -server=/pearsonassessment.de/127.0.0.1#5335 -ipset=/pearsonassessment.de/gfwlist -server=/mysinchew.com/127.0.0.1#5335 -ipset=/mysinchew.com/gfwlist -server=/drdreheadphonebeats.com/127.0.0.1#5335 -ipset=/drdreheadphonebeats.com/gfwlist -server=/hooloo.tv/127.0.0.1#5335 -ipset=/hooloo.tv/gfwlist -server=/cloudfunctions.net/127.0.0.1#5335 -ipset=/cloudfunctions.net/gfwlist -server=/microsoft.it/127.0.0.1#5335 -ipset=/microsoft.it/gfwlist -server=/veet.com.my/127.0.0.1#5335 -ipset=/veet.com.my/gfwlist -server=/appleimac.com/127.0.0.1#5335 -ipset=/appleimac.com/gfwlist -server=/fnlondon.com/127.0.0.1#5335 -ipset=/fnlondon.com/gfwlist -server=/nikeairmaxshoes.com/127.0.0.1#5335 -ipset=/nikeairmaxshoes.com/gfwlist -server=/marketo.net/127.0.0.1#5335 -ipset=/marketo.net/gfwlist -server=/slackhq.com/127.0.0.1#5335 -ipset=/slackhq.com/gfwlist -server=/launchpadlibrarian.net/127.0.0.1#5335 -ipset=/launchpadlibrarian.net/gfwlist -server=/beatsone.net/127.0.0.1#5335 -ipset=/beatsone.net/gfwlist -server=/rolls-roycecullinan.com/127.0.0.1#5335 -ipset=/rolls-roycecullinan.com/gfwlist -server=/starbucks.com.ar/127.0.0.1#5335 -ipset=/starbucks.com.ar/gfwlist -server=/mcdonaldsarabia.com/127.0.0.1#5335 -ipset=/mcdonaldsarabia.com/gfwlist -server=/bmw-motorsport.com/127.0.0.1#5335 -ipset=/bmw-motorsport.com/gfwlist -server=/reutersmedia.net/127.0.0.1#5335 -ipset=/reutersmedia.net/gfwlist -server=/jetbrains.net/127.0.0.1#5335 -ipset=/jetbrains.net/gfwlist -server=/elixir-lang.org/127.0.0.1#5335 -ipset=/elixir-lang.org/gfwlist -server=/winhec.net/127.0.0.1#5335 -ipset=/winhec.net/gfwlist -server=/adhelpnews.com/127.0.0.1#5335 -ipset=/adhelpnews.com/gfwlist -server=/bmw-connecteddrive.ee/127.0.0.1#5335 -ipset=/bmw-connecteddrive.ee/gfwlist -server=/widgets.stripst.com/127.0.0.1#5335 -ipset=/widgets.stripst.com/gfwlist -server=/breakdown.me/127.0.0.1#5335 -ipset=/breakdown.me/gfwlist -server=/2buybeatsbydre.com/127.0.0.1#5335 -ipset=/2buybeatsbydre.com/gfwlist -server=/popcap.com/127.0.0.1#5335 -ipset=/popcap.com/gfwlist -server=/whyfacebook.com/127.0.0.1#5335 -ipset=/whyfacebook.com/gfwlist -server=/economistgroup.com/127.0.0.1#5335 -ipset=/economistgroup.com/gfwlist -server=/bmw.cw/127.0.0.1#5335 -ipset=/bmw.cw/gfwlist -server=/canon.lt/127.0.0.1#5335 -ipset=/canon.lt/gfwlist -server=/drebeats-australia.com/127.0.0.1#5335 -ipset=/drebeats-australia.com/gfwlist -server=/hpmini.com/127.0.0.1#5335 -ipset=/hpmini.com/gfwlist -server=/supercoach.com.au/127.0.0.1#5335 -ipset=/supercoach.com.au/gfwlist -server=/mastercard.com.tw/127.0.0.1#5335 -ipset=/mastercard.com.tw/gfwlist -server=/netflixdnstest3.com/127.0.0.1#5335 -ipset=/netflixdnstest3.com/gfwlist -server=/funnyfacebook.org/127.0.0.1#5335 -ipset=/funnyfacebook.org/gfwlist -server=/swiftbank.info/127.0.0.1#5335 -ipset=/swiftbank.info/gfwlist -server=/ebay68.com/127.0.0.1#5335 -ipset=/ebay68.com/gfwlist -server=/mastercardrestaurant.com/127.0.0.1#5335 -ipset=/mastercardrestaurant.com/gfwlist -server=/gamer.com.tw/127.0.0.1#5335 -ipset=/gamer.com.tw/gfwlist -server=/mobatek.net/127.0.0.1#5335 -ipset=/mobatek.net/gfwlist -server=/softbank.jp/127.0.0.1#5335 -ipset=/softbank.jp/gfwlist -server=/fandango.com/127.0.0.1#5335 -ipset=/fandango.com/gfwlist -server=/iphone-sh.com/127.0.0.1#5335 -ipset=/iphone-sh.com/gfwlist -server=/frishoes.com/127.0.0.1#5335 -ipset=/frishoes.com/gfwlist -server=/ipadair.com.es/127.0.0.1#5335 -ipset=/ipadair.com.es/gfwlist -server=/xxbay.com/127.0.0.1#5335 -ipset=/xxbay.com/gfwlist -server=/vfsco.mx/127.0.0.1#5335 -ipset=/vfsco.mx/gfwlist -server=/google.st/127.0.0.1#5335 -ipset=/google.st/gfwlist -server=/macbookair.jp/127.0.0.1#5335 -ipset=/macbookair.jp/gfwlist -server=/vhxqa3.com/127.0.0.1#5335 -ipset=/vhxqa3.com/gfwlist -server=/oxfordreference.com/127.0.0.1#5335 -ipset=/oxfordreference.com/gfwlist -server=/foxsports2.com/127.0.0.1#5335 -ipset=/foxsports2.com/gfwlist -server=/google.com.bz/127.0.0.1#5335 -ipset=/google.com.bz/gfwlist -server=/recode.net/127.0.0.1#5335 -ipset=/recode.net/gfwlist -server=/rarbgproxy.org/127.0.0.1#5335 -ipset=/rarbgproxy.org/gfwlist -server=/nfsworld.com/127.0.0.1#5335 -ipset=/nfsworld.com/gfwlist -server=/foxcorporation.com/127.0.0.1#5335 -ipset=/foxcorporation.com/gfwlist -server=/volvotrucks.ru/127.0.0.1#5335 -ipset=/volvotrucks.ru/gfwlist -server=/apple-online.com/127.0.0.1#5335 -ipset=/apple-online.com/gfwlist -server=/cheaperbeatsbydresale.com/127.0.0.1#5335 -ipset=/cheaperbeatsbydresale.com/gfwlist -server=/lldns.net/127.0.0.1#5335 -ipset=/lldns.net/gfwlist -server=/sony.ie/127.0.0.1#5335 -ipset=/sony.ie/gfwlist -server=/rarbgmirror.org/127.0.0.1#5335 -ipset=/rarbgmirror.org/gfwlist -server=/mastercard.bg/127.0.0.1#5335 -ipset=/mastercard.bg/gfwlist -server=/fafacebook.com/127.0.0.1#5335 -ipset=/fafacebook.com/gfwlist -server=/hpjav.tv/127.0.0.1#5335 -ipset=/hpjav.tv/gfwlist -server=/woflthenewsstation.com/127.0.0.1#5335 -ipset=/woflthenewsstation.com/gfwlist -server=/cnnmoney.ch/127.0.0.1#5335 -ipset=/cnnmoney.ch/gfwlist -server=/beatsbysdrdres.com/127.0.0.1#5335 -ipset=/beatsbysdrdres.com/gfwlist -server=/epochtimes.co.kr/127.0.0.1#5335 -ipset=/epochtimes.co.kr/gfwlist -server=/amazonliterarypartnership.com/127.0.0.1#5335 -ipset=/amazonliterarypartnership.com/gfwlist -server=/bmw.ly/127.0.0.1#5335 -ipset=/bmw.ly/gfwlist -server=/esri.com/127.0.0.1#5335 -ipset=/esri.com/gfwlist -server=/instagor.com/127.0.0.1#5335 -ipset=/instagor.com/gfwlist -server=/cheerwholesale.us/127.0.0.1#5335 -ipset=/cheerwholesale.us/gfwlist -server=/tsquare.tv/127.0.0.1#5335 -ipset=/tsquare.tv/gfwlist -server=/jsdelivr.com/127.0.0.1#5335 -ipset=/jsdelivr.com/gfwlist -server=/cheapbagshoes.com/127.0.0.1#5335 -ipset=/cheapbagshoes.com/gfwlist -server=/ebayshopping.org/127.0.0.1#5335 -ipset=/ebayshopping.org/gfwlist -server=/bmwproductnews.com/127.0.0.1#5335 -ipset=/bmwproductnews.com/gfwlist -server=/spotify.com/127.0.0.1#5335 -ipset=/spotify.com/gfwlist -server=/ebayedu.com/127.0.0.1#5335 -ipset=/ebayedu.com/gfwlist -server=/mastercard.com.tr/127.0.0.1#5335 -ipset=/mastercard.com.tr/gfwlist -server=/starbucksslovakia.sk/127.0.0.1#5335 -ipset=/starbucksslovakia.sk/gfwlist -server=/ipa-iphone.net/127.0.0.1#5335 -ipset=/ipa-iphone.net/gfwlist -server=/directvbusinessmarket.com/127.0.0.1#5335 -ipset=/directvbusinessmarket.com/gfwlist -server=/starbucksromania.ro/127.0.0.1#5335 -ipset=/starbucksromania.ro/gfwlist -server=/starbucksrewardsstarland.ca/127.0.0.1#5335 -ipset=/starbucksrewardsstarland.ca/gfwlist -server=/cisco.com/127.0.0.1#5335 -ipset=/cisco.com/gfwlist -server=/myfreecams.com/127.0.0.1#5335 -ipset=/myfreecams.com/gfwlist -server=/starbucksreserve.com/127.0.0.1#5335 -ipset=/starbucksreserve.com/gfwlist -server=/sony.com.mk/127.0.0.1#5335 -ipset=/sony.com.mk/gfwlist -server=/linuxfromscratch.org/127.0.0.1#5335 -ipset=/linuxfromscratch.org/gfwlist -server=/swtor.net/127.0.0.1#5335 -ipset=/swtor.net/gfwlist -server=/starbucksforlife.com/127.0.0.1#5335 -ipset=/starbucksforlife.com/gfwlist -server=/bmw-connecteddrive.com.kw/127.0.0.1#5335 -ipset=/bmw-connecteddrive.com.kw/gfwlist -server=/dettol.hu/127.0.0.1#5335 -ipset=/dettol.hu/gfwlist -server=/starbucksforlife.ca/127.0.0.1#5335 -ipset=/starbucksforlife.ca/gfwlist -server=/buypass.no/127.0.0.1#5335 -ipset=/buypass.no/gfwlist -server=/starbuckscoffeegearstore.com/127.0.0.1#5335 -ipset=/starbuckscoffeegearstore.com/gfwlist -server=/foxcincy.jobs/127.0.0.1#5335 -ipset=/foxcincy.jobs/gfwlist -server=/youtube.com.gh/127.0.0.1#5335 -ipset=/youtube.com.gh/gfwlist -server=/starbuckscoffee.cz/127.0.0.1#5335 -ipset=/starbuckscoffee.cz/gfwlist -server=/abema.tv/127.0.0.1#5335 -ipset=/abema.tv/gfwlist -server=/uug23.com/127.0.0.1#5335 -ipset=/uug23.com/gfwlist -server=/starbuckscard.ph/127.0.0.1#5335 -ipset=/starbuckscard.ph/gfwlist -server=/expresswifi.com/127.0.0.1#5335 -ipset=/expresswifi.com/gfwlist -server=/exascale-tech.com/127.0.0.1#5335 -ipset=/exascale-tech.com/gfwlist -server=/starbucksavie.ca/127.0.0.1#5335 -ipset=/starbucksavie.ca/gfwlist -server=/strepsils.ro/127.0.0.1#5335 -ipset=/strepsils.ro/gfwlist -server=/snap.com/127.0.0.1#5335 -ipset=/snap.com/gfwlist -server=/starbucks.tt/127.0.0.1#5335 -ipset=/starbucks.tt/gfwlist -server=/starbucks.se/127.0.0.1#5335 -ipset=/starbucks.se/gfwlist -server=/starbucks.ru/127.0.0.1#5335 -ipset=/starbucks.ru/gfwlist -server=/starbucks.rs/127.0.0.1#5335 -ipset=/starbucks.rs/gfwlist -server=/starbucks.pt/127.0.0.1#5335 -ipset=/starbucks.pt/gfwlist -server=/hackfacebookid.com/127.0.0.1#5335 -ipset=/hackfacebookid.com/gfwlist -server=/starbucks.pl/127.0.0.1#5335 -ipset=/starbucks.pl/gfwlist -server=/useplannr.com/127.0.0.1#5335 -ipset=/useplannr.com/gfwlist -server=/sony.com.hn/127.0.0.1#5335 -ipset=/sony.com.hn/gfwlist -server=/starbucks.no/127.0.0.1#5335 -ipset=/starbucks.no/gfwlist -server=/starbucks.nl/127.0.0.1#5335 -ipset=/starbucks.nl/gfwlist -server=/starbucks.in/127.0.0.1#5335 -ipset=/starbucks.in/gfwlist -server=/bloomberglive.com/127.0.0.1#5335 -ipset=/bloomberglive.com/gfwlist -server=/starbucks.hu/127.0.0.1#5335 -ipset=/starbucks.hu/gfwlist -server=/inlethd.com/127.0.0.1#5335 -ipset=/inlethd.com/gfwlist -server=/ytimg.com/127.0.0.1#5335 -ipset=/ytimg.com/gfwlist -server=/espn.co.uk/127.0.0.1#5335 -ipset=/espn.co.uk/gfwlist -server=/zohopublic.com/127.0.0.1#5335 -ipset=/zohopublic.com/gfwlist -server=/disney.hu/127.0.0.1#5335 -ipset=/disney.hu/gfwlist -server=/mastercard.com.vn/127.0.0.1#5335 -ipset=/mastercard.com.vn/gfwlist -server=/starbucks.com.uy/127.0.0.1#5335 -ipset=/starbucks.com.uy/gfwlist -server=/bmw-connecteddrive.es/127.0.0.1#5335 -ipset=/bmw-connecteddrive.es/gfwlist -server=/bandag.com/127.0.0.1#5335 -ipset=/bandag.com/gfwlist -server=/zeeentertainment.com/127.0.0.1#5335 -ipset=/zeeentertainment.com/gfwlist -server=/visanet.net/127.0.0.1#5335 -ipset=/visanet.net/gfwlist -server=/paper-attachments.s3.amazonaws.com/127.0.0.1#5335 -ipset=/paper-attachments.s3.amazonaws.com/gfwlist -server=/rbsgr.com/127.0.0.1#5335 -ipset=/rbsgr.com/gfwlist -server=/starbucks.com.sg/127.0.0.1#5335 -ipset=/starbucks.com.sg/gfwlist -server=/bmwmyanmar.com/127.0.0.1#5335 -ipset=/bmwmyanmar.com/gfwlist -server=/starbucks.com.pe/127.0.0.1#5335 -ipset=/starbucks.com.pe/gfwlist -server=/starbucks.com.my/127.0.0.1#5335 -ipset=/starbucks.com.my/gfwlist -server=/sony.com.gt/127.0.0.1#5335 -ipset=/sony.com.gt/gfwlist -server=/starbucks.com.mx/127.0.0.1#5335 -ipset=/starbucks.com.mx/gfwlist -server=/bmw.com.mx/127.0.0.1#5335 -ipset=/bmw.com.mx/gfwlist -server=/intel.wf/127.0.0.1#5335 -ipset=/intel.wf/gfwlist -server=/starbucks.com.kz/127.0.0.1#5335 -ipset=/starbucks.com.kz/gfwlist -server=/cbssvideo.com/127.0.0.1#5335 -ipset=/cbssvideo.com/gfwlist -server=/hottestheadphonesonline.com/127.0.0.1#5335 -ipset=/hottestheadphonesonline.com/gfwlist -server=/acheterfollowersinstagram.com/127.0.0.1#5335 -ipset=/acheterfollowersinstagram.com/gfwlist -server=/nike.gy/127.0.0.1#5335 -ipset=/nike.gy/gfwlist -server=/starbucks.com.hk/127.0.0.1#5335 -ipset=/starbucks.com.hk/gfwlist -server=/starbucks.com.cy/127.0.0.1#5335 -ipset=/starbucks.com.cy/gfwlist -server=/starbucks.com/127.0.0.1#5335 -ipset=/starbucks.com/gfwlist -server=/starbucks.co.za/127.0.0.1#5335 -ipset=/starbucks.co.za/gfwlist -server=/slack.com/127.0.0.1#5335 -ipset=/slack.com/gfwlist -server=/gputechconf.com/127.0.0.1#5335 -ipset=/gputechconf.com/gfwlist -server=/starbucks.co.nz/127.0.0.1#5335 -ipset=/starbucks.co.nz/gfwlist -server=/paypal-gpplus.com/127.0.0.1#5335 -ipset=/paypal-gpplus.com/gfwlist -server=/starbucks.co.jp/127.0.0.1#5335 -ipset=/starbucks.co.jp/gfwlist -server=/starbucks.ca/127.0.0.1#5335 -ipset=/starbucks.ca/gfwlist -server=/mastercard.ru/127.0.0.1#5335 -ipset=/mastercard.ru/gfwlist -server=/nvidia.co.jp/127.0.0.1#5335 -ipset=/nvidia.co.jp/gfwlist -server=/bmw.co.kr/127.0.0.1#5335 -ipset=/bmw.co.kr/gfwlist -server=/watchdisneyfe.com/127.0.0.1#5335 -ipset=/watchdisneyfe.com/gfwlist -server=/bitflyer.jp/127.0.0.1#5335 -ipset=/bitflyer.jp/gfwlist -server=/pinterest.se/127.0.0.1#5335 -ipset=/pinterest.se/gfwlist -server=/visa.com.ag/127.0.0.1#5335 -ipset=/visa.com.ag/gfwlist -server=/mingwatch.com/127.0.0.1#5335 -ipset=/mingwatch.com/gfwlist -server=/swisstsa.ch/127.0.0.1#5335 -ipset=/swisstsa.ch/gfwlist -server=/starbucks.be/127.0.0.1#5335 -ipset=/starbucks.be/gfwlist -server=/technics.com/127.0.0.1#5335 -ipset=/technics.com/gfwlist -server=/universalpictures.com/127.0.0.1#5335 -ipset=/universalpictures.com/gfwlist -server=/starbucks.at/127.0.0.1#5335 -ipset=/starbucks.at/gfwlist -server=/starbucks-stars.com/127.0.0.1#5335 -ipset=/starbucks-stars.com/gfwlist -server=/gog-statics.com/127.0.0.1#5335 -ipset=/gog-statics.com/gfwlist -server=/sbuxcard.com/127.0.0.1#5335 -ipset=/sbuxcard.com/gfwlist -server=/azuredns-prd.org/127.0.0.1#5335 -ipset=/azuredns-prd.org/gfwlist -server=/sbux.com.my/127.0.0.1#5335 -ipset=/sbux.com.my/gfwlist -server=/thinkofliving.com/127.0.0.1#5335 -ipset=/thinkofliving.com/gfwlist -server=/watchinese.com/127.0.0.1#5335 -ipset=/watchinese.com/gfwlist -server=/wix-code.com/127.0.0.1#5335 -ipset=/wix-code.com/gfwlist -server=/nikedunks.net/127.0.0.1#5335 -ipset=/nikedunks.net/gfwlist -server=/realtor.com/127.0.0.1#5335 -ipset=/realtor.com/gfwlist -server=/codecademy.com/127.0.0.1#5335 -ipset=/codecademy.com/gfwlist -server=/cortanaskills.com/127.0.0.1#5335 -ipset=/cortanaskills.com/gfwlist -server=/netflixinvestor.com/127.0.0.1#5335 -ipset=/netflixinvestor.com/gfwlist -server=/realcommercial.com.au/127.0.0.1#5335 -ipset=/realcommercial.com.au/gfwlist -server=/rea.tech/127.0.0.1#5335 -ipset=/rea.tech/gfwlist -server=/bmw-motorrad-abudhabi.com/127.0.0.1#5335 -ipset=/bmw-motorrad-abudhabi.com/gfwlist -server=/paypal-status.com/127.0.0.1#5335 -ipset=/paypal-status.com/gfwlist -server=/rea.global/127.0.0.1#5335 -ipset=/rea.global/gfwlist -server=/googleblog.com/127.0.0.1#5335 -ipset=/googleblog.com/gfwlist -server=/hpgift.com/127.0.0.1#5335 -ipset=/hpgift.com/gfwlist -server=/tvb.com.au/127.0.0.1#5335 -ipset=/tvb.com.au/gfwlist -server=/harpercollins.co.in/127.0.0.1#5335 -ipset=/harpercollins.co.in/gfwlist -server=/rea-group.com/127.0.0.1#5335 -ipset=/rea-group.com/gfwlist -server=/adwords-community.com/127.0.0.1#5335 -ipset=/adwords-community.com/gfwlist -server=/escapestudios.co.uk/127.0.0.1#5335 -ipset=/escapestudios.co.uk/gfwlist -server=/rea-asia.com/127.0.0.1#5335 -ipset=/rea-asia.com/gfwlist -server=/proptiger.com/127.0.0.1#5335 -ipset=/proptiger.com/gfwlist -server=/mariosupersluggers.com/127.0.0.1#5335 -ipset=/mariosupersluggers.com/gfwlist -server=/adidas.com.sa/127.0.0.1#5335 -ipset=/adidas.com.sa/gfwlist -server=/scholar.google.com.br/127.0.0.1#5335 -ipset=/scholar.google.com.br/gfwlist -server=/myfun.com/127.0.0.1#5335 -ipset=/myfun.com/gfwlist -server=/watchespn.com/127.0.0.1#5335 -ipset=/watchespn.com/gfwlist -server=/beatsbydrefrcasquepascher.com/127.0.0.1#5335 -ipset=/beatsbydrefrcasquepascher.com/gfwlist -server=/moveaws.com/127.0.0.1#5335 -ipset=/moveaws.com/gfwlist -server=/monsterbeatsbydrebilligde.com/127.0.0.1#5335 -ipset=/monsterbeatsbydrebilligde.com/gfwlist -server=/byspotify.com/127.0.0.1#5335 -ipset=/byspotify.com/gfwlist -server=/ebayon.net/127.0.0.1#5335 -ipset=/ebayon.net/gfwlist -server=/move.com/127.0.0.1#5335 -ipset=/move.com/gfwlist -server=/makaan.com/127.0.0.1#5335 -ipset=/makaan.com/gfwlist -server=/intel.com.hk/127.0.0.1#5335 -ipset=/intel.com.hk/gfwlist -server=/visa.com.au/127.0.0.1#5335 -ipset=/visa.com.au/gfwlist -server=/bmw-motorrad.com.au/127.0.0.1#5335 -ipset=/bmw-motorrad.com.au/gfwlist -server=/windowsazure.com/127.0.0.1#5335 -ipset=/windowsazure.com/gfwlist -server=/iproperty.com.my/127.0.0.1#5335 -ipset=/iproperty.com.my/gfwlist -server=/iproperty.com/127.0.0.1#5335 -ipset=/iproperty.com/gfwlist -server=/ippstatic.com/127.0.0.1#5335 -ipset=/ippstatic.com/gfwlist -server=/inventorship.com.au/127.0.0.1#5335 -ipset=/inventorship.com.au/gfwlist -server=/streamingdisney.net/127.0.0.1#5335 -ipset=/streamingdisney.net/gfwlist -server=/shoppinguheadphones.com/127.0.0.1#5335 -ipset=/shoppinguheadphones.com/gfwlist -server=/housingcdn.com/127.0.0.1#5335 -ipset=/housingcdn.com/gfwlist -server=/ebayaustralia.com/127.0.0.1#5335 -ipset=/ebayaustralia.com/gfwlist -server=/nextdigital.com.tw/127.0.0.1#5335 -ipset=/nextdigital.com.tw/gfwlist -server=/hometrack.com.au/127.0.0.1#5335 -ipset=/hometrack.com.au/gfwlist -server=/nurofen.sk/127.0.0.1#5335 -ipset=/nurofen.sk/gfwlist -server=/directvpromotions.com/127.0.0.1#5335 -ipset=/directvpromotions.com/gfwlist -server=/durex.com.hr/127.0.0.1#5335 -ipset=/durex.com.hr/gfwlist -server=/reckittbenckiser.com/127.0.0.1#5335 -ipset=/reckittbenckiser.com/gfwlist -server=/reckitt.net/127.0.0.1#5335 -ipset=/reckitt.net/gfwlist -server=/rbspeakup.com/127.0.0.1#5335 -ipset=/rbspeakup.com/gfwlist -server=/uber-assets.com/127.0.0.1#5335 -ipset=/uber-assets.com/gfwlist -server=/rbrandlibrary.com/127.0.0.1#5335 -ipset=/rbrandlibrary.com/gfwlist -server=/rbplc.com/127.0.0.1#5335 -ipset=/rbplc.com/gfwlist -server=/rbnainternational.com/127.0.0.1#5335 -ipset=/rbnainternational.com/gfwlist -server=/finish.com.hr/127.0.0.1#5335 -ipset=/finish.com.hr/gfwlist -server=/dropboxmail.com/127.0.0.1#5335 -ipset=/dropboxmail.com/gfwlist -server=/elephantsdream.org/127.0.0.1#5335 -ipset=/elephantsdream.org/gfwlist -server=/rbmavericks.com/127.0.0.1#5335 -ipset=/rbmavericks.com/gfwlist -server=/beatsofdre-usa.com/127.0.0.1#5335 -ipset=/beatsofdre-usa.com/gfwlist -server=/rbgraduates.com/127.0.0.1#5335 -ipset=/rbgraduates.com/gfwlist -server=/intel.bs/127.0.0.1#5335 -ipset=/intel.bs/gfwlist -server=/bestbuy-int.com/127.0.0.1#5335 -ipset=/bestbuy-int.com/gfwlist -server=/rbeuroinfo.com/127.0.0.1#5335 -ipset=/rbeuroinfo.com/gfwlist -server=/rbdigitallab.com/127.0.0.1#5335 -ipset=/rbdigitallab.com/gfwlist -server=/nikeitaly.com/127.0.0.1#5335 -ipset=/nikeitaly.com/gfwlist -server=/theweek.in/127.0.0.1#5335 -ipset=/theweek.in/gfwlist -server=/disney.cz/127.0.0.1#5335 -ipset=/disney.cz/gfwlist -server=/beatsbydrdreus.com/127.0.0.1#5335 -ipset=/beatsbydrdreus.com/gfwlist -server=/rb.com/127.0.0.1#5335 -ipset=/rb.com/gfwlist -server=/sony.sk/127.0.0.1#5335 -ipset=/sony.sk/gfwlist -server=/macbook.co/127.0.0.1#5335 -ipset=/macbook.co/gfwlist -server=/woolitecarpet.com/127.0.0.1#5335 -ipset=/woolitecarpet.com/gfwlist -server=/woolite.us/127.0.0.1#5335 -ipset=/woolite.us/gfwlist -server=/mastercardcenter.org/127.0.0.1#5335 -ipset=/mastercardcenter.org/gfwlist -server=/woolite.pl/127.0.0.1#5335 -ipset=/woolite.pl/gfwlist -server=/userapi.com/127.0.0.1#5335 -ipset=/userapi.com/gfwlist -server=/finish.co.uk/127.0.0.1#5335 -ipset=/finish.co.uk/gfwlist -server=/woolite.ca/127.0.0.1#5335 -ipset=/woolite.ca/gfwlist -server=/adsenseformobileapps.com/127.0.0.1#5335 -ipset=/adsenseformobileapps.com/gfwlist -server=/veetclub.it/127.0.0.1#5335 -ipset=/veetclub.it/gfwlist -server=/pa9pal.com/127.0.0.1#5335 -ipset=/pa9pal.com/gfwlist -server=/aomedia.org/127.0.0.1#5335 -ipset=/aomedia.org/gfwlist -server=/cheapnikedunks.com/127.0.0.1#5335 -ipset=/cheapnikedunks.com/gfwlist -server=/lolstatic-a.akamaihd.net/127.0.0.1#5335 -ipset=/lolstatic-a.akamaihd.net/gfwlist -server=/veetarabia.com/127.0.0.1#5335 -ipset=/veetarabia.com/gfwlist -server=/dragoniscoming.com/127.0.0.1#5335 -ipset=/dragoniscoming.com/gfwlist -server=/discord.new/127.0.0.1#5335 -ipset=/discord.new/gfwlist -server=/gitlab.io/127.0.0.1#5335 -ipset=/gitlab.io/gfwlist -server=/applestore.co.ug/127.0.0.1#5335 -ipset=/applestore.co.ug/gfwlist -server=/llnw.com/127.0.0.1#5335 -ipset=/llnw.com/gfwlist -server=/pscdn.co/127.0.0.1#5335 -ipset=/pscdn.co/gfwlist -server=/sverigebeatsbydrdre.com/127.0.0.1#5335 -ipset=/sverigebeatsbydrdre.com/gfwlist -server=/bmwgroup.net/127.0.0.1#5335 -ipset=/bmwgroup.net/gfwlist -server=/igoshopping.net/127.0.0.1#5335 -ipset=/igoshopping.net/gfwlist -server=/veet.ru/127.0.0.1#5335 -ipset=/veet.ru/gfwlist -server=/intel.sr/127.0.0.1#5335 -ipset=/intel.sr/gfwlist -server=/veet.ro/127.0.0.1#5335 -ipset=/veet.ro/gfwlist -server=/veet.pt/127.0.0.1#5335 -ipset=/veet.pt/gfwlist -server=/veet.nl/127.0.0.1#5335 -ipset=/veet.nl/gfwlist -server=/shelfstuff.com/127.0.0.1#5335 -ipset=/shelfstuff.com/gfwlist -server=/veet.hu/127.0.0.1#5335 -ipset=/veet.hu/gfwlist -server=/veet.fr/127.0.0.1#5335 -ipset=/veet.fr/gfwlist -server=/veet.fi/127.0.0.1#5335 -ipset=/veet.fi/gfwlist -server=/veet.es/127.0.0.1#5335 -ipset=/veet.es/gfwlist -server=/blogoverflow.com/127.0.0.1#5335 -ipset=/blogoverflow.com/gfwlist -server=/pigav.com/127.0.0.1#5335 -ipset=/pigav.com/gfwlist -server=/keytransparency.org/127.0.0.1#5335 -ipset=/keytransparency.org/gfwlist -server=/veet.de/127.0.0.1#5335 -ipset=/veet.de/gfwlist -server=/veet.com.tr/127.0.0.1#5335 -ipset=/veet.com.tr/gfwlist -server=/mini.it/127.0.0.1#5335 -ipset=/mini.it/gfwlist -server=/veet.com.sg/127.0.0.1#5335 -ipset=/veet.com.sg/gfwlist -server=/apexprint.com.hk/127.0.0.1#5335 -ipset=/apexprint.com.hk/gfwlist -server=/hpcampus.com/127.0.0.1#5335 -ipset=/hpcampus.com/gfwlist -server=/youtube.com.hr/127.0.0.1#5335 -ipset=/youtube.com.hr/gfwlist -server=/bigbigchannel.com.hk/127.0.0.1#5335 -ipset=/bigbigchannel.com.hk/gfwlist -server=/12diasderegalosdeitunes.cr/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.cr/gfwlist -server=/bmw.com.py/127.0.0.1#5335 -ipset=/bmw.com.py/gfwlist -server=/arcgisonline.com/127.0.0.1#5335 -ipset=/arcgisonline.com/gfwlist -server=/veet.com.pk/127.0.0.1#5335 -ipset=/veet.com.pk/gfwlist -server=/verizonfios.com/127.0.0.1#5335 -ipset=/verizonfios.com/gfwlist -server=/veet.com.ph/127.0.0.1#5335 -ipset=/veet.com.ph/gfwlist -server=/pinterest.ch/127.0.0.1#5335 -ipset=/pinterest.ch/gfwlist -server=/rocksdb.com/127.0.0.1#5335 -ipset=/rocksdb.com/gfwlist -server=/meraki.hk/127.0.0.1#5335 -ipset=/meraki.hk/gfwlist -server=/veet.com.hk/127.0.0.1#5335 -ipset=/veet.com.hk/gfwlist -server=/veet.com.br/127.0.0.1#5335 -ipset=/veet.com.br/gfwlist -server=/ntdvn.com/127.0.0.1#5335 -ipset=/ntdvn.com/gfwlist -server=/sony.rs/127.0.0.1#5335 -ipset=/sony.rs/gfwlist -server=/veet.com.bd/127.0.0.1#5335 -ipset=/veet.com.bd/gfwlist -server=/veet.com.au/127.0.0.1#5335 -ipset=/veet.com.au/gfwlist -server=/durex.ie/127.0.0.1#5335 -ipset=/durex.ie/gfwlist -server=/gacebook.com/127.0.0.1#5335 -ipset=/gacebook.com/gfwlist -server=/veet.co.za/127.0.0.1#5335 -ipset=/veet.co.za/gfwlist -server=/nikecloud.com/127.0.0.1#5335 -ipset=/nikecloud.com/gfwlist -server=/raspbian.org/127.0.0.1#5335 -ipset=/raspbian.org/gfwlist -server=/veet.co.in/127.0.0.1#5335 -ipset=/veet.co.in/gfwlist -server=/playoverwatch.com/127.0.0.1#5335 -ipset=/playoverwatch.com/gfwlist -server=/veet.co.id/127.0.0.1#5335 -ipset=/veet.co.id/gfwlist -server=/ciscolearningsociety.org/127.0.0.1#5335 -ipset=/ciscolearningsociety.org/gfwlist -server=/bmw.gr/127.0.0.1#5335 -ipset=/bmw.gr/gfwlist -server=/durex.com.sg/127.0.0.1#5335 -ipset=/durex.com.sg/gfwlist -server=/garena.tw/127.0.0.1#5335 -ipset=/garena.tw/gfwlist -server=/canon.com.al/127.0.0.1#5335 -ipset=/canon.com.al/gfwlist -server=/veet.ch/127.0.0.1#5335 -ipset=/veet.ch/gfwlist -server=/veet.ca/127.0.0.1#5335 -ipset=/veet.ca/gfwlist -server=/jwplatform.com/127.0.0.1#5335 -ipset=/jwplatform.com/gfwlist -server=/ilife.eu/127.0.0.1#5335 -ipset=/ilife.eu/gfwlist -server=/veet.at/127.0.0.1#5335 -ipset=/veet.at/gfwlist -server=/vanishinfo.cz/127.0.0.1#5335 -ipset=/vanishinfo.cz/gfwlist -server=/vanishbancaseulook.com.br/127.0.0.1#5335 -ipset=/vanishbancaseulook.com.br/gfwlist -server=/vanisharabia.com/127.0.0.1#5335 -ipset=/vanisharabia.com/gfwlist -server=/vanish.sk/127.0.0.1#5335 -ipset=/vanish.sk/gfwlist -server=/vanish.se/127.0.0.1#5335 -ipset=/vanish.se/gfwlist -server=/nineentertainment.com.au/127.0.0.1#5335 -ipset=/nineentertainment.com.au/gfwlist -server=/flathub.org/127.0.0.1#5335 -ipset=/flathub.org/gfwlist -server=/uoherald.com/127.0.0.1#5335 -ipset=/uoherald.com/gfwlist -server=/ebahy.com/127.0.0.1#5335 -ipset=/ebahy.com/gfwlist -server=/bmwbikes.com/127.0.0.1#5335 -ipset=/bmwbikes.com/gfwlist -server=/squareup.com/127.0.0.1#5335 -ipset=/squareup.com/gfwlist -server=/vanish.pl/127.0.0.1#5335 -ipset=/vanish.pl/gfwlist -server=/sling.com/127.0.0.1#5335 -ipset=/sling.com/gfwlist -server=/dragonagemovie.com/127.0.0.1#5335 -ipset=/dragonagemovie.com/gfwlist -server=/googil.com/127.0.0.1#5335 -ipset=/googil.com/gfwlist -server=/monstershopcheapbeats.net/127.0.0.1#5335 -ipset=/monstershopcheapbeats.net/gfwlist -server=/1monsterbeatsbydreus.com/127.0.0.1#5335 -ipset=/1monsterbeatsbydreus.com/gfwlist -server=/vanish.hu/127.0.0.1#5335 -ipset=/vanish.hu/gfwlist -server=/quicktake.video/127.0.0.1#5335 -ipset=/quicktake.video/gfwlist -server=/mastercard.inc/127.0.0.1#5335 -ipset=/mastercard.inc/gfwlist -server=/gamebeforethegame.com/127.0.0.1#5335 -ipset=/gamebeforethegame.com/gfwlist -server=/apple.sg/127.0.0.1#5335 -ipset=/apple.sg/gfwlist -server=/paypal-brandcentral.com/127.0.0.1#5335 -ipset=/paypal-brandcentral.com/gfwlist -server=/trustedanalytics.net/127.0.0.1#5335 -ipset=/trustedanalytics.net/gfwlist -server=/akamaietpcompromisedmalwaretest.com/127.0.0.1#5335 -ipset=/akamaietpcompromisedmalwaretest.com/gfwlist -server=/vanish.fr/127.0.0.1#5335 -ipset=/vanish.fr/gfwlist -server=/friendfeedmedia.com/127.0.0.1#5335 -ipset=/friendfeedmedia.com/gfwlist -server=/cell.com/127.0.0.1#5335 -ipset=/cell.com/gfwlist -server=/dell.com/127.0.0.1#5335 -ipset=/dell.com/gfwlist -server=/vanish.fi/127.0.0.1#5335 -ipset=/vanish.fi/gfwlist -server=/garena.co.id/127.0.0.1#5335 -ipset=/garena.co.id/gfwlist -server=/cloudburstresearch.com/127.0.0.1#5335 -ipset=/cloudburstresearch.com/gfwlist -server=/vanish.dk/127.0.0.1#5335 -ipset=/vanish.dk/gfwlist -server=/vanish.de/127.0.0.1#5335 -ipset=/vanish.de/gfwlist -server=/vanish.com.sg/127.0.0.1#5335 -ipset=/vanish.com.sg/gfwlist -server=/vanish.com.pe/127.0.0.1#5335 -ipset=/vanish.com.pe/gfwlist -server=/vanish.com.my/127.0.0.1#5335 -ipset=/vanish.com.my/gfwlist -server=/vanish.com.mx/127.0.0.1#5335 -ipset=/vanish.com.mx/gfwlist -server=/whatsapp-plus.info/127.0.0.1#5335 -ipset=/whatsapp-plus.info/gfwlist -server=/vanish.com.hr/127.0.0.1#5335 -ipset=/vanish.com.hr/gfwlist -server=/cheapwireless04.com/127.0.0.1#5335 -ipset=/cheapwireless04.com/gfwlist -server=/tenbyfotolia.com/127.0.0.1#5335 -ipset=/tenbyfotolia.com/gfwlist -server=/springernature.com/127.0.0.1#5335 -ipset=/springernature.com/gfwlist -server=/itools.info/127.0.0.1#5335 -ipset=/itools.info/gfwlist -server=/themarvelexperiencetour.com/127.0.0.1#5335 -ipset=/themarvelexperiencetour.com/gfwlist -server=/vanish.co.nz/127.0.0.1#5335 -ipset=/vanish.co.nz/gfwlist -server=/mini-windsor.ca/127.0.0.1#5335 -ipset=/mini-windsor.ca/gfwlist -server=/slinginternational.com/127.0.0.1#5335 -ipset=/slinginternational.com/gfwlist -server=/pinterest.co/127.0.0.1#5335 -ipset=/pinterest.co/gfwlist -server=/vanish.co.il/127.0.0.1#5335 -ipset=/vanish.co.il/gfwlist -server=/stc-server.com/127.0.0.1#5335 -ipset=/stc-server.com/gfwlist -server=/fbcdn-a.akamaihd.net/127.0.0.1#5335 -ipset=/fbcdn-a.akamaihd.net/gfwlist -server=/instagram-help.com/127.0.0.1#5335 -ipset=/instagram-help.com/gfwlist -server=/cilk.com/127.0.0.1#5335 -ipset=/cilk.com/gfwlist -server=/cheapdrdrebeats8.com/127.0.0.1#5335 -ipset=/cheapdrdrebeats8.com/gfwlist -server=/vanish.be/127.0.0.1#5335 -ipset=/vanish.be/gfwlist -server=/spraynwash.com/127.0.0.1#5335 -ipset=/spraynwash.com/gfwlist -server=/javhd.pro/127.0.0.1#5335 -ipset=/javhd.pro/gfwlist -server=/foxsports.sv/127.0.0.1#5335 -ipset=/foxsports.sv/gfwlist -server=/volvotrucks.cz/127.0.0.1#5335 -ipset=/volvotrucks.cz/gfwlist -server=/nurofen.de/127.0.0.1#5335 -ipset=/nurofen.de/gfwlist -server=/ycombinator.com/127.0.0.1#5335 -ipset=/ycombinator.com/gfwlist -server=/intel.mp/127.0.0.1#5335 -ipset=/intel.mp/gfwlist -server=/intel.com.ph/127.0.0.1#5335 -ipset=/intel.com.ph/gfwlist -server=/hpwsn.com/127.0.0.1#5335 -ipset=/hpwsn.com/gfwlist -server=/o2action.co.kr/127.0.0.1#5335 -ipset=/o2action.co.kr/gfwlist -server=/strepsils.us/127.0.0.1#5335 -ipset=/strepsils.us/gfwlist -server=/mini.co.uk/127.0.0.1#5335 -ipset=/mini.co.uk/gfwlist -server=/strepsils.ru/127.0.0.1#5335 -ipset=/strepsils.ru/gfwlist -server=/ichineseporn.com/127.0.0.1#5335 -ipset=/ichineseporn.com/gfwlist -server=/starbucks.vn/127.0.0.1#5335 -ipset=/starbucks.vn/gfwlist -server=/qwapi.com/127.0.0.1#5335 -ipset=/qwapi.com/gfwlist -server=/strepsils.pt/127.0.0.1#5335 -ipset=/strepsils.pt/gfwlist -server=/attsavings.com/127.0.0.1#5335 -ipset=/attsavings.com/gfwlist -server=/sony.co.kr/127.0.0.1#5335 -ipset=/sony.co.kr/gfwlist -server=/lysol.com/127.0.0.1#5335 -ipset=/lysol.com/gfwlist -server=/foxsportsla.com/127.0.0.1#5335 -ipset=/foxsportsla.com/gfwlist -server=/timelinestoryteller.com/127.0.0.1#5335 -ipset=/timelinestoryteller.com/gfwlist -server=/strepsils.pl/127.0.0.1#5335 -ipset=/strepsils.pl/gfwlist -server=/vmworld.com/127.0.0.1#5335 -ipset=/vmworld.com/gfwlist -server=/sonybuilding.jp/127.0.0.1#5335 -ipset=/sonybuilding.jp/gfwlist -server=/strepsils.net/127.0.0.1#5335 -ipset=/strepsils.net/gfwlist -server=/strepsils.ie/127.0.0.1#5335 -ipset=/strepsils.ie/gfwlist -server=/appleone.film/127.0.0.1#5335 -ipset=/appleone.film/gfwlist -server=/strepsils.fr/127.0.0.1#5335 -ipset=/strepsils.fr/gfwlist -server=/strepsils.fi/127.0.0.1#5335 -ipset=/strepsils.fi/gfwlist -server=/disneyaulani.com/127.0.0.1#5335 -ipset=/disneyaulani.com/gfwlist -server=/z5.app/127.0.0.1#5335 -ipset=/z5.app/gfwlist -server=/strepsils.es/127.0.0.1#5335 -ipset=/strepsils.es/gfwlist -server=/strepsils.com.hk/127.0.0.1#5335 -ipset=/strepsils.com.hk/gfwlist -server=/strepsils.com.au/127.0.0.1#5335 -ipset=/strepsils.com.au/gfwlist -server=/disneymagicmoments.gen.tr/127.0.0.1#5335 -ipset=/disneymagicmoments.gen.tr/gfwlist -server=/google.ventures/127.0.0.1#5335 -ipset=/google.ventures/gfwlist -server=/monster-beats-by-dr-dre.com/127.0.0.1#5335 -ipset=/monster-beats-by-dr-dre.com/gfwlist -server=/momomall.com.tw/127.0.0.1#5335 -ipset=/momomall.com.tw/gfwlist -server=/directvrebate.com/127.0.0.1#5335 -ipset=/directvrebate.com/gfwlist -server=/strepsils.co.nz/127.0.0.1#5335 -ipset=/strepsils.co.nz/gfwlist -server=/heroesofdragonage.com/127.0.0.1#5335 -ipset=/heroesofdragonage.com/gfwlist -server=/cheapbeatsshopbydre.com/127.0.0.1#5335 -ipset=/cheapbeatsshopbydre.com/gfwlist -server=/plos.org/127.0.0.1#5335 -ipset=/plos.org/gfwlist -server=/workstations.tv/127.0.0.1#5335 -ipset=/workstations.tv/gfwlist -server=/strepsils.at/127.0.0.1#5335 -ipset=/strepsils.at/gfwlist -server=/jav168.cc/127.0.0.1#5335 -ipset=/jav168.cc/gfwlist -server=/dobendan.de/127.0.0.1#5335 -ipset=/dobendan.de/gfwlist -server=/cepacol.com/127.0.0.1#5335 -ipset=/cepacol.com/gfwlist -server=/deviantart.com/127.0.0.1#5335 -ipset=/deviantart.com/gfwlist -server=/apyle.com/127.0.0.1#5335 -ipset=/apyle.com/gfwlist -server=/nurofensk-prod-env.eu-west-1.elasticbeanstalk.com/127.0.0.1#5335 -ipset=/nurofensk-prod-env.eu-west-1.elasticbeanstalk.com/gfwlist -server=/visadigital.com/127.0.0.1#5335 -ipset=/visadigital.com/gfwlist -server=/hackday.com.au/127.0.0.1#5335 -ipset=/hackday.com.au/gfwlist -server=/yibei.org/127.0.0.1#5335 -ipset=/yibei.org/gfwlist -server=/nurofen.pt/127.0.0.1#5335 -ipset=/nurofen.pt/gfwlist -server=/realamericanstories.org/127.0.0.1#5335 -ipset=/realamericanstories.org/gfwlist -server=/volvopenta.fr/127.0.0.1#5335 -ipset=/volvopenta.fr/gfwlist -server=/finish.gr/127.0.0.1#5335 -ipset=/finish.gr/gfwlist -server=/nurofen.pl/127.0.0.1#5335 -ipset=/nurofen.pl/gfwlist -server=/ebayd.com/127.0.0.1#5335 -ipset=/ebayd.com/gfwlist -server=/nurofen.it/127.0.0.1#5335 -ipset=/nurofen.it/gfwlist -server=/picasaweb.org/127.0.0.1#5335 -ipset=/picasaweb.org/gfwlist -server=/fbsupport-covid.net/127.0.0.1#5335 -ipset=/fbsupport-covid.net/gfwlist -server=/globalsign-media.com/127.0.0.1#5335 -ipset=/globalsign-media.com/gfwlist -server=/nurofen.es/127.0.0.1#5335 -ipset=/nurofen.es/gfwlist -server=/nurofen.co.za/127.0.0.1#5335 -ipset=/nurofen.co.za/gfwlist -server=/mediachinese.com/127.0.0.1#5335 -ipset=/mediachinese.com/gfwlist -server=/nikeaustralia.com/127.0.0.1#5335 -ipset=/nikeaustralia.com/gfwlist -server=/firestonecomercial.com.co/127.0.0.1#5335 -ipset=/firestonecomercial.com.co/gfwlist -server=/bookstagram.com/127.0.0.1#5335 -ipset=/bookstagram.com/gfwlist -server=/vfsco.fi/127.0.0.1#5335 -ipset=/vfsco.fi/gfwlist -server=/1to1conference.com.au/127.0.0.1#5335 -ipset=/1to1conference.com.au/gfwlist -server=/nurofen.co.nz/127.0.0.1#5335 -ipset=/nurofen.co.nz/gfwlist -server=/nurofen.co.il/127.0.0.1#5335 -ipset=/nurofen.co.il/gfwlist -server=/atom.io/127.0.0.1#5335 -ipset=/atom.io/gfwlist -server=/intel.rw/127.0.0.1#5335 -ipset=/intel.rw/gfwlist -server=/drbl.in/127.0.0.1#5335 -ipset=/drbl.in/gfwlist -server=/marketwatch.com/127.0.0.1#5335 -ipset=/marketwatch.com/gfwlist -server=/mucinex.tv/127.0.0.1#5335 -ipset=/mucinex.tv/gfwlist -server=/mucinex.net/127.0.0.1#5335 -ipset=/mucinex.net/gfwlist -server=/peacocktv.com/127.0.0.1#5335 -ipset=/peacocktv.com/gfwlist -server=/mucinex.com/127.0.0.1#5335 -ipset=/mucinex.com/gfwlist -server=/mucinex.ca/127.0.0.1#5335 -ipset=/mucinex.ca/gfwlist -server=/schiffvitamins.com/127.0.0.1#5335 -ipset=/schiffvitamins.com/gfwlist -server=/bmwmass.net/127.0.0.1#5335 -ipset=/bmwmass.net/gfwlist -server=/movefreerewards.com/127.0.0.1#5335 -ipset=/movefreerewards.com/gfwlist -server=/pifpafarabia.com/127.0.0.1#5335 -ipset=/pifpafarabia.com/gfwlist -server=/oculus-china.com/127.0.0.1#5335 -ipset=/oculus-china.com/gfwlist -server=/mortein.com.ng/127.0.0.1#5335 -ipset=/mortein.com.ng/gfwlist -server=/globalsign.co.uk/127.0.0.1#5335 -ipset=/globalsign.co.uk/gfwlist -server=/verisign.in/127.0.0.1#5335 -ipset=/verisign.in/gfwlist -server=/google.vu/127.0.0.1#5335 -ipset=/google.vu/gfwlist -server=/mortein.com.br/127.0.0.1#5335 -ipset=/mortein.com.br/gfwlist -server=/gale.com/127.0.0.1#5335 -ipset=/gale.com/gfwlist -server=/webhosting.com/127.0.0.1#5335 -ipset=/webhosting.com/gfwlist -server=/mortein.com/127.0.0.1#5335 -ipset=/mortein.com/gfwlist -server=/pubmatic.com/127.0.0.1#5335 -ipset=/pubmatic.com/gfwlist -server=/fotolia.tv/127.0.0.1#5335 -ipset=/fotolia.tv/gfwlist -server=/luckyissue.com/127.0.0.1#5335 -ipset=/luckyissue.com/gfwlist -server=/meadjohnson.com.tw/127.0.0.1#5335 -ipset=/meadjohnson.com.tw/gfwlist -server=/meadjohnson.com.hk/127.0.0.1#5335 -ipset=/meadjohnson.com.hk/gfwlist -server=/meadjohnson.com/127.0.0.1#5335 -ipset=/meadjohnson.com/gfwlist -server=/lysol.ca/127.0.0.1#5335 -ipset=/lysol.ca/gfwlist -server=/finishwin.be/127.0.0.1#5335 -ipset=/finishwin.be/gfwlist -server=/cheapdrdrebeatsca.com/127.0.0.1#5335 -ipset=/cheapdrdrebeatsca.com/gfwlist -server=/epochtimeshk.org/127.0.0.1#5335 -ipset=/epochtimeshk.org/gfwlist -server=/finishinfo.ru/127.0.0.1#5335 -ipset=/finishinfo.ru/gfwlist -server=/volvotrucks.md/127.0.0.1#5335 -ipset=/volvotrucks.md/gfwlist -server=/beatsfranceofficiel.com/127.0.0.1#5335 -ipset=/beatsfranceofficiel.com/gfwlist -server=/azuremarketplace.microsoft.com/127.0.0.1#5335 -ipset=/azuremarketplace.microsoft.com/gfwlist -server=/wiisports.com/127.0.0.1#5335 -ipset=/wiisports.com/gfwlist -server=/finishinfo.fi/127.0.0.1#5335 -ipset=/finishinfo.fi/gfwlist -server=/finishinfo.cz/127.0.0.1#5335 -ipset=/finishinfo.cz/gfwlist -server=/scholar.google.co.za/127.0.0.1#5335 -ipset=/scholar.google.co.za/gfwlist -server=/12diasderegalosdeitunes.co.ve/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.co.ve/gfwlist -server=/cheapbeatsheadphone2014.com/127.0.0.1#5335 -ipset=/cheapbeatsheadphone2014.com/gfwlist -server=/finishinfo.com.ar/127.0.0.1#5335 -ipset=/finishinfo.com.ar/gfwlist -server=/appleone.community/127.0.0.1#5335 -ipset=/appleone.community/gfwlist -server=/saynow.com/127.0.0.1#5335 -ipset=/saynow.com/gfwlist -server=/finishinfo.cl/127.0.0.1#5335 -ipset=/finishinfo.cl/gfwlist -server=/fcfacebook.com/127.0.0.1#5335 -ipset=/fcfacebook.com/gfwlist -server=/x99av.com/127.0.0.1#5335 -ipset=/x99av.com/gfwlist -server=/uuk28.com/127.0.0.1#5335 -ipset=/uuk28.com/gfwlist -server=/finishdishwashing.com/127.0.0.1#5335 -ipset=/finishdishwashing.com/gfwlist -server=/nflxvideo.net/127.0.0.1#5335 -ipset=/nflxvideo.net/gfwlist -server=/riot-games.com/127.0.0.1#5335 -ipset=/riot-games.com/gfwlist -server=/finishdishwashing.ca/127.0.0.1#5335 -ipset=/finishdishwashing.ca/gfwlist -server=/vanish.co.in/127.0.0.1#5335 -ipset=/vanish.co.in/gfwlist -server=/finisharabia.com/127.0.0.1#5335 -ipset=/finisharabia.com/gfwlist -server=/finish.sk/127.0.0.1#5335 -ipset=/finish.sk/gfwlist -server=/bmwchampionship.com/127.0.0.1#5335 -ipset=/bmwchampionship.com/gfwlist -server=/pearsonschoolsandfecolleges.co.uk/127.0.0.1#5335 -ipset=/pearsonschoolsandfecolleges.co.uk/gfwlist -server=/googleplus.com/127.0.0.1#5335 -ipset=/googleplus.com/gfwlist -server=/finish.pl/127.0.0.1#5335 -ipset=/finish.pl/gfwlist -server=/youtube.me/127.0.0.1#5335 -ipset=/youtube.me/gfwlist -server=/google.com.ni/127.0.0.1#5335 -ipset=/google.com.ni/gfwlist -server=/finish.fr/127.0.0.1#5335 -ipset=/finish.fr/gfwlist -server=/finish.es/127.0.0.1#5335 -ipset=/finish.es/gfwlist -server=/wsj.com/127.0.0.1#5335 -ipset=/wsj.com/gfwlist -server=/sony.ca/127.0.0.1#5335 -ipset=/sony.ca/gfwlist -server=/facebookflow.com/127.0.0.1#5335 -ipset=/facebookflow.com/gfwlist -server=/pearsonclinical.eu/127.0.0.1#5335 -ipset=/pearsonclinical.eu/gfwlist -server=/facebook.se/127.0.0.1#5335 -ipset=/facebook.se/gfwlist -server=/enfa.com.vn/127.0.0.1#5335 -ipset=/enfa.com.vn/gfwlist -server=/vmworld2013.com/127.0.0.1#5335 -ipset=/vmworld2013.com/gfwlist -server=/finish.co.nz/127.0.0.1#5335 -ipset=/finish.co.nz/gfwlist -server=/sandisk.id/127.0.0.1#5335 -ipset=/sandisk.id/gfwlist -server=/finish.at/127.0.0.1#5335 -ipset=/finish.at/gfwlist -server=/nutramigen.pl/127.0.0.1#5335 -ipset=/nutramigen.pl/gfwlist -server=/intel.gy/127.0.0.1#5335 -ipset=/intel.gy/gfwlist -server=/myshopify.com/127.0.0.1#5335 -ipset=/myshopify.com/gfwlist -server=/12diasderegalosdeitunes.co/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.co/gfwlist -server=/enspireformula.com/127.0.0.1#5335 -ipset=/enspireformula.com/gfwlist -server=/enfasmart.com/127.0.0.1#5335 -ipset=/enfasmart.com/gfwlist -server=/google.mk/127.0.0.1#5335 -ipset=/google.mk/gfwlist -server=/enfamil.pt/127.0.0.1#5335 -ipset=/enfamil.pt/gfwlist -server=/drdrebeatsforu.com/127.0.0.1#5335 -ipset=/drdrebeatsforu.com/gfwlist -server=/stadia.dev/127.0.0.1#5335 -ipset=/stadia.dev/gfwlist -server=/enfamil.com/127.0.0.1#5335 -ipset=/enfamil.com/gfwlist -server=/bmw-ottawa.ca/127.0.0.1#5335 -ipset=/bmw-ottawa.ca/gfwlist -server=/enfamama.com.ar/127.0.0.1#5335 -ipset=/enfamama.com.ar/gfwlist -server=/enfagrow.com.sg/127.0.0.1#5335 -ipset=/enfagrow.com.sg/gfwlist -server=/beatsbydrdre-online.com/127.0.0.1#5335 -ipset=/beatsbydrdre-online.com/gfwlist -server=/draftjs.org/127.0.0.1#5335 -ipset=/draftjs.org/gfwlist -server=/enfagrow.com.bn/127.0.0.1#5335 -ipset=/enfagrow.com.bn/gfwlist -server=/ieee-sensors.org/127.0.0.1#5335 -ipset=/ieee-sensors.org/gfwlist -server=/soso7778.com/127.0.0.1#5335 -ipset=/soso7778.com/gfwlist -server=/nike.hk/127.0.0.1#5335 -ipset=/nike.hk/gfwlist -server=/enfabebe3.com.ar/127.0.0.1#5335 -ipset=/enfabebe3.com.ar/gfwlist -server=/cloudcredibility.com/127.0.0.1#5335 -ipset=/cloudcredibility.com/gfwlist -server=/mongodb.org/127.0.0.1#5335 -ipset=/mongodb.org/gfwlist -server=/enfabebe.com.ve/127.0.0.1#5335 -ipset=/enfabebe.com.ve/gfwlist -server=/pki-poste.ch/127.0.0.1#5335 -ipset=/pki-poste.ch/gfwlist -server=/enfabebe.com.pe/127.0.0.1#5335 -ipset=/enfabebe.com.pe/gfwlist -server=/enfabebe.com.co/127.0.0.1#5335 -ipset=/enfabebe.com.co/gfwlist -server=/enfabebe.com.br/127.0.0.1#5335 -ipset=/enfabebe.com.br/gfwlist -server=/mailonsunday.co.uk/127.0.0.1#5335 -ipset=/mailonsunday.co.uk/gfwlist -server=/enfababy.com/127.0.0.1#5335 -ipset=/enfababy.com/gfwlist -server=/avfox.cc/127.0.0.1#5335 -ipset=/avfox.cc/gfwlist -server=/amerikiskhma.com/127.0.0.1#5335 -ipset=/amerikiskhma.com/gfwlist -server=/icloudos.net/127.0.0.1#5335 -ipset=/icloudos.net/gfwlist -server=/enfaaplus.com/127.0.0.1#5335 -ipset=/enfaaplus.com/gfwlist -server=/enfa.co.id/127.0.0.1#5335 -ipset=/enfa.co.id/gfwlist -server=/bebepremium3.com.bo/127.0.0.1#5335 -ipset=/bebepremium3.com.bo/gfwlist -server=/nikey.com/127.0.0.1#5335 -ipset=/nikey.com/gfwlist -server=/trydurex.net/127.0.0.1#5335 -ipset=/trydurex.net/gfwlist -server=/playbydurex.com/127.0.0.1#5335 -ipset=/playbydurex.com/gfwlist -server=/sciencemag.org/127.0.0.1#5335 -ipset=/sciencemag.org/gfwlist -server=/mypearson.com/127.0.0.1#5335 -ipset=/mypearson.com/gfwlist -server=/brandeasygo.com/127.0.0.1#5335 -ipset=/brandeasygo.com/gfwlist -server=/nintendo.com.pt/127.0.0.1#5335 -ipset=/nintendo.com.pt/gfwlist -server=/pavpal.com/127.0.0.1#5335 -ipset=/pavpal.com/gfwlist -server=/mhshosting.com/127.0.0.1#5335 -ipset=/mhshosting.com/gfwlist -server=/sony.com.do/127.0.0.1#5335 -ipset=/sony.com.do/gfwlist -server=/firestone.com.co/127.0.0.1#5335 -ipset=/firestone.com.co/gfwlist -server=/durexloveclub.com/127.0.0.1#5335 -ipset=/durexloveclub.com/gfwlist -server=/durexindia.com/127.0.0.1#5335 -ipset=/durexindia.com/gfwlist -server=/picknicekicks.net/127.0.0.1#5335 -ipset=/picknicekicks.net/gfwlist -server=/durexchina.com/127.0.0.1#5335 -ipset=/durexchina.com/gfwlist -server=/durexcam.com/127.0.0.1#5335 -ipset=/durexcam.com/gfwlist -server=/bloombergindices.com/127.0.0.1#5335 -ipset=/bloombergindices.com/gfwlist -server=/cheap-nike.com/127.0.0.1#5335 -ipset=/cheap-nike.com/gfwlist -server=/durex.us/127.0.0.1#5335 -ipset=/durex.us/gfwlist -server=/epochshop.com/127.0.0.1#5335 -ipset=/epochshop.com/gfwlist -server=/inteleventexpress.com/127.0.0.1#5335 -ipset=/inteleventexpress.com/gfwlist -server=/orl.ly/127.0.0.1#5335 -ipset=/orl.ly/gfwlist -server=/nikeshoemarket.com/127.0.0.1#5335 -ipset=/nikeshoemarket.com/gfwlist -server=/bmw-motorrad.ua/127.0.0.1#5335 -ipset=/bmw-motorrad.ua/gfwlist -server=/durex.ro/127.0.0.1#5335 -ipset=/durex.ro/gfwlist -server=/ebaystyle.com/127.0.0.1#5335 -ipset=/ebaystyle.com/gfwlist -server=/durex.pl/127.0.0.1#5335 -ipset=/durex.pl/gfwlist -server=/media-rockstargames-com.akamaized.net/127.0.0.1#5335 -ipset=/media-rockstargames-com.akamaized.net/gfwlist -server=/scholar.google.com.hk/127.0.0.1#5335 -ipset=/scholar.google.com.hk/gfwlist -server=/durex.nl/127.0.0.1#5335 -ipset=/durex.nl/gfwlist -server=/mansionglobal.com/127.0.0.1#5335 -ipset=/mansionglobal.com/gfwlist -server=/durex.mx/127.0.0.1#5335 -ipset=/durex.mx/gfwlist -server=/cheapbeatsdrdresolo.com/127.0.0.1#5335 -ipset=/cheapbeatsdrdresolo.com/gfwlist -server=/macbookpro.net/127.0.0.1#5335 -ipset=/macbookpro.net/gfwlist -server=/durex.it/127.0.0.1#5335 -ipset=/durex.it/gfwlist -server=/veet.com.ar/127.0.0.1#5335 -ipset=/veet.com.ar/gfwlist -server=/durex.hu/127.0.0.1#5335 -ipset=/durex.hu/gfwlist -server=/durex.fr/127.0.0.1#5335 -ipset=/durex.fr/gfwlist -server=/jquerymobile.com/127.0.0.1#5335 -ipset=/jquerymobile.com/gfwlist -server=/durex.fi/127.0.0.1#5335 -ipset=/durex.fi/gfwlist -server=/durex.ee/127.0.0.1#5335 -ipset=/durex.ee/gfwlist -server=/youtube.be/127.0.0.1#5335 -ipset=/youtube.be/gfwlist -server=/mini.com.pa/127.0.0.1#5335 -ipset=/mini.com.pa/gfwlist -server=/steamstore-a.akamaihd.net/127.0.0.1#5335 -ipset=/steamstore-a.akamaihd.net/gfwlist -server=/bestbhy.com/127.0.0.1#5335 -ipset=/bestbhy.com/gfwlist -server=/deno.land/127.0.0.1#5335 -ipset=/deno.land/gfwlist -server=/durex.de/127.0.0.1#5335 -ipset=/durex.de/gfwlist -server=/bmwcitychallenge.com/127.0.0.1#5335 -ipset=/bmwcitychallenge.com/gfwlist -server=/durex.com.pk/127.0.0.1#5335 -ipset=/durex.com.pk/gfwlist -server=/vfsco.fr/127.0.0.1#5335 -ipset=/vfsco.fr/gfwlist -server=/durex.com.ph/127.0.0.1#5335 -ipset=/durex.com.ph/gfwlist -server=/durex.com.ng/127.0.0.1#5335 -ipset=/durex.com.ng/gfwlist -server=/reckittprofessional.com/127.0.0.1#5335 -ipset=/reckittprofessional.com/gfwlist -server=/durex.com.co/127.0.0.1#5335 -ipset=/durex.com.co/gfwlist -server=/durex.com.bd/127.0.0.1#5335 -ipset=/durex.com.bd/gfwlist -server=/yahoo.de/127.0.0.1#5335 -ipset=/yahoo.de/gfwlist -server=/bongacams.com/127.0.0.1#5335 -ipset=/bongacams.com/gfwlist -server=/microsoft.pt/127.0.0.1#5335 -ipset=/microsoft.pt/gfwlist -server=/ie8.co/127.0.0.1#5335 -ipset=/ie8.co/gfwlist -server=/durex.co.uk/127.0.0.1#5335 -ipset=/durex.co.uk/gfwlist -server=/durex.co.nz/127.0.0.1#5335 -ipset=/durex.co.nz/gfwlist -server=/cncrivals.com/127.0.0.1#5335 -ipset=/cncrivals.com/gfwlist -server=/durex.co.id/127.0.0.1#5335 -ipset=/durex.co.id/gfwlist -server=/masterclass.com/127.0.0.1#5335 -ipset=/masterclass.com/gfwlist -server=/cloudlive.com/127.0.0.1#5335 -ipset=/cloudlive.com/gfwlist -server=/durex.be/127.0.0.1#5335 -ipset=/durex.be/gfwlist -server=/durex.at/127.0.0.1#5335 -ipset=/durex.at/gfwlist -server=/durex-slovenia.si/127.0.0.1#5335 -ipset=/durex-slovenia.si/gfwlist -server=/aerogard.com.au/127.0.0.1#5335 -ipset=/aerogard.com.au/gfwlist -server=/dotherex.com/127.0.0.1#5335 -ipset=/dotherex.com/gfwlist -server=/youtube.hr/127.0.0.1#5335 -ipset=/youtube.hr/gfwlist -server=/durex.se/127.0.0.1#5335 -ipset=/durex.se/gfwlist -server=/beatsbydreaustralia-sale.com/127.0.0.1#5335 -ipset=/beatsbydreaustralia-sale.com/gfwlist -server=/macruby.com/127.0.0.1#5335 -ipset=/macruby.com/gfwlist -server=/windows.nl/127.0.0.1#5335 -ipset=/windows.nl/gfwlist -server=/instagramtakipcisatinal.net/127.0.0.1#5335 -ipset=/instagramtakipcisatinal.net/gfwlist -server=/dettolcleannaija.com/127.0.0.1#5335 -ipset=/dettolcleannaija.com/gfwlist -server=/dettol.ru/127.0.0.1#5335 -ipset=/dettol.ru/gfwlist -server=/volvobuses.co.za/127.0.0.1#5335 -ipset=/volvobuses.co.za/gfwlist -server=/gameroom.com/127.0.0.1#5335 -ipset=/gameroom.com/gfwlist -server=/dettol.pl/127.0.0.1#5335 -ipset=/dettol.pl/gfwlist -server=/maxis.com/127.0.0.1#5335 -ipset=/maxis.com/gfwlist -server=/vmware-cloudmanagement.com/127.0.0.1#5335 -ipset=/vmware-cloudmanagement.com/gfwlist -server=/dettol.nl/127.0.0.1#5335 -ipset=/dettol.nl/gfwlist -server=/dettol.net/127.0.0.1#5335 -ipset=/dettol.net/gfwlist -server=/dettol.ie/127.0.0.1#5335 -ipset=/dettol.ie/gfwlist -server=/dettol.fr/127.0.0.1#5335 -ipset=/dettol.fr/gfwlist -server=/theepochtimes.com/127.0.0.1#5335 -ipset=/theepochtimes.com/gfwlist -server=/paypalinsuranceservices.org/127.0.0.1#5335 -ipset=/paypalinsuranceservices.org/gfwlist -server=/fast.com/127.0.0.1#5335 -ipset=/fast.com/gfwlist -server=/pearson.com.ar/127.0.0.1#5335 -ipset=/pearson.com.ar/gfwlist -server=/dettol.com.sg/127.0.0.1#5335 -ipset=/dettol.com.sg/gfwlist -server=/hkgpao.com/127.0.0.1#5335 -ipset=/hkgpao.com/gfwlist -server=/connectedcommerce.com/127.0.0.1#5335 -ipset=/connectedcommerce.com/gfwlist -server=/apple.xn--fiqs8s/127.0.0.1#5335 -ipset=/apple.xn--fiqs8s/gfwlist -server=/dettol.com.ng/127.0.0.1#5335 -ipset=/dettol.com.ng/gfwlist -server=/dettol.com.hk/127.0.0.1#5335 -ipset=/dettol.com.hk/gfwlist -server=/dettol.com.eg/127.0.0.1#5335 -ipset=/dettol.com.eg/gfwlist -server=/dettol.com.br/127.0.0.1#5335 -ipset=/dettol.com.br/gfwlist -server=/yahoo.com.ec/127.0.0.1#5335 -ipset=/yahoo.com.ec/gfwlist -server=/visagiftcard.us/127.0.0.1#5335 -ipset=/visagiftcard.us/gfwlist -server=/dettol.com.bd/127.0.0.1#5335 -ipset=/dettol.com.bd/gfwlist -server=/vanitaonline.com/127.0.0.1#5335 -ipset=/vanitaonline.com/gfwlist -server=/dettol.com/127.0.0.1#5335 -ipset=/dettol.com/gfwlist -server=/intelinsight.com/127.0.0.1#5335 -ipset=/intelinsight.com/gfwlist -server=/dettol.co.uk/127.0.0.1#5335 -ipset=/dettol.co.uk/gfwlist -server=/justmysocks4.net/127.0.0.1#5335 -ipset=/justmysocks4.net/gfwlist -server=/xboxone.com/127.0.0.1#5335 -ipset=/xboxone.com/gfwlist -server=/workspaceone.com/127.0.0.1#5335 -ipset=/workspaceone.com/gfwlist -server=/dettol.co.in/127.0.0.1#5335 -ipset=/dettol.co.in/gfwlist -server=/dettol.co.id/127.0.0.1#5335 -ipset=/dettol.co.id/gfwlist -server=/alphabet.lt/127.0.0.1#5335 -ipset=/alphabet.lt/gfwlist -server=/yt.be/127.0.0.1#5335 -ipset=/yt.be/gfwlist -server=/dettol.at/127.0.0.1#5335 -ipset=/dettol.at/gfwlist -server=/ac-pocketcamp.com/127.0.0.1#5335 -ipset=/ac-pocketcamp.com/gfwlist -server=/scholar.google.com.do/127.0.0.1#5335 -ipset=/scholar.google.com.do/gfwlist -server=/darwinsourcecode.com/127.0.0.1#5335 -ipset=/darwinsourcecode.com/gfwlist -server=/hsxhr.cc/127.0.0.1#5335 -ipset=/hsxhr.cc/gfwlist -server=/dettol-prize.com/127.0.0.1#5335 -ipset=/dettol-prize.com/gfwlist -server=/crit-staging.com/127.0.0.1#5335 -ipset=/crit-staging.com/gfwlist -server=/blogspot.ca/127.0.0.1#5335 -ipset=/blogspot.ca/gfwlist -server=/calgoncarbon.com/127.0.0.1#5335 -ipset=/calgoncarbon.com/gfwlist -server=/bmw.uz/127.0.0.1#5335 -ipset=/bmw.uz/gfwlist -server=/facebookshop.com/127.0.0.1#5335 -ipset=/facebookshop.com/gfwlist -server=/calgon.tv/127.0.0.1#5335 -ipset=/calgon.tv/gfwlist -server=/yahoo.com.ag/127.0.0.1#5335 -ipset=/yahoo.com.ag/gfwlist -server=/motorshowblog.com/127.0.0.1#5335 -ipset=/motorshowblog.com/gfwlist -server=/calgon.nl/127.0.0.1#5335 -ipset=/calgon.nl/gfwlist -server=/ciscocontest.com/127.0.0.1#5335 -ipset=/ciscocontest.com/gfwlist -server=/calgon.ie/127.0.0.1#5335 -ipset=/calgon.ie/gfwlist -server=/nike0594.com/127.0.0.1#5335 -ipset=/nike0594.com/gfwlist -server=/calgon.es/127.0.0.1#5335 -ipset=/calgon.es/gfwlist -server=/calgon.de/127.0.0.1#5335 -ipset=/calgon.de/gfwlist -server=/supermariogalaxy.com/127.0.0.1#5335 -ipset=/supermariogalaxy.com/gfwlist -server=/facebookswagemea.com/127.0.0.1#5335 -ipset=/facebookswagemea.com/gfwlist -server=/seagroup.com/127.0.0.1#5335 -ipset=/seagroup.com/gfwlist -server=/calgon.co.uk/127.0.0.1#5335 -ipset=/calgon.co.uk/gfwlist -server=/nikekid.com/127.0.0.1#5335 -ipset=/nikekid.com/gfwlist -server=/beatbydrekopen.com/127.0.0.1#5335 -ipset=/beatbydrekopen.com/gfwlist -server=/calgon.be/127.0.0.1#5335 -ipset=/calgon.be/gfwlist -server=/infowarsmedia.com/127.0.0.1#5335 -ipset=/infowarsmedia.com/gfwlist -server=/qr.ae/127.0.0.1#5335 -ipset=/qr.ae/gfwlist -server=/calgon.at/127.0.0.1#5335 -ipset=/calgon.at/gfwlist -server=/airwickarabia.com/127.0.0.1#5335 -ipset=/airwickarabia.com/gfwlist -server=/akamaietpcnctest.com/127.0.0.1#5335 -ipset=/akamaietpcnctest.com/gfwlist -server=/airwick.tv/127.0.0.1#5335 -ipset=/airwick.tv/gfwlist -server=/pearson-schule.ch/127.0.0.1#5335 -ipset=/pearson-schule.ch/gfwlist -server=/airwick.ru/127.0.0.1#5335 -ipset=/airwick.ru/gfwlist -server=/nowe.com/127.0.0.1#5335 -ipset=/nowe.com/gfwlist -server=/amazon.com.mx/127.0.0.1#5335 -ipset=/amazon.com.mx/gfwlist -server=/nvidia.no/127.0.0.1#5335 -ipset=/nvidia.no/gfwlist -server=/nikeshoponline.com/127.0.0.1#5335 -ipset=/nikeshoponline.com/gfwlist -server=/informs.org/127.0.0.1#5335 -ipset=/informs.org/gfwlist -server=/mcdonalds.ca/127.0.0.1#5335 -ipset=/mcdonalds.ca/gfwlist -server=/airwick.nl/127.0.0.1#5335 -ipset=/airwick.nl/gfwlist -server=/airwick.net/127.0.0.1#5335 -ipset=/airwick.net/gfwlist -server=/imperial.insendi.com/127.0.0.1#5335 -ipset=/imperial.insendi.com/gfwlist -server=/airwick.it/127.0.0.1#5335 -ipset=/airwick.it/gfwlist -server=/airwick.ie/127.0.0.1#5335 -ipset=/airwick.ie/gfwlist -server=/pugpig-stage.com/127.0.0.1#5335 -ipset=/pugpig-stage.com/gfwlist -server=/niosii.net/127.0.0.1#5335 -ipset=/niosii.net/gfwlist -server=/xboxgamestudios.com/127.0.0.1#5335 -ipset=/xboxgamestudios.com/gfwlist -server=/bmwgroupdesignworks.com/127.0.0.1#5335 -ipset=/bmwgroupdesignworks.com/gfwlist -server=/nintendo.tw/127.0.0.1#5335 -ipset=/nintendo.tw/gfwlist -server=/airwick.fr/127.0.0.1#5335 -ipset=/airwick.fr/gfwlist -server=/redzonechannel.com/127.0.0.1#5335 -ipset=/redzonechannel.com/gfwlist -server=/vilavpn3.xyz/127.0.0.1#5335 -ipset=/vilavpn3.xyz/gfwlist -server=/mywaytopay.info/127.0.0.1#5335 -ipset=/mywaytopay.info/gfwlist -server=/amazonaws-china.com/127.0.0.1#5335 -ipset=/amazonaws-china.com/gfwlist -server=/geraldoatlarge.com/127.0.0.1#5335 -ipset=/geraldoatlarge.com/gfwlist -server=/screens-lab.jp/127.0.0.1#5335 -ipset=/screens-lab.jp/gfwlist -server=/kanzhongguo.eu/127.0.0.1#5335 -ipset=/kanzhongguo.eu/gfwlist -server=/visa.com.ar/127.0.0.1#5335 -ipset=/visa.com.ar/gfwlist -server=/airwick.cz/127.0.0.1#5335 -ipset=/airwick.cz/gfwlist -server=/airwick.com.tr/127.0.0.1#5335 -ipset=/airwick.com.tr/gfwlist -server=/airwick.com.mx/127.0.0.1#5335 -ipset=/airwick.com.mx/gfwlist -server=/airwick.com/127.0.0.1#5335 -ipset=/airwick.com/gfwlist -server=/disneymagicmoments.pl/127.0.0.1#5335 -ipset=/disneymagicmoments.pl/gfwlist -server=/alfera.com.hk/127.0.0.1#5335 -ipset=/alfera.com.hk/gfwlist -server=/manoramaonline.com/127.0.0.1#5335 -ipset=/manoramaonline.com/gfwlist -server=/tex-talk.net/127.0.0.1#5335 -ipset=/tex-talk.net/gfwlist -server=/airwick.co.za/127.0.0.1#5335 -ipset=/airwick.co.za/gfwlist -server=/xhcdn.com/127.0.0.1#5335 -ipset=/xhcdn.com/gfwlist -server=/airwick.co.nz/127.0.0.1#5335 -ipset=/airwick.co.nz/gfwlist -server=/airwick.co.in/127.0.0.1#5335 -ipset=/airwick.co.in/gfwlist -server=/oxfordclinicalpsych.com/127.0.0.1#5335 -ipset=/oxfordclinicalpsych.com/gfwlist -server=/telegra.ph/127.0.0.1#5335 -ipset=/telegra.ph/gfwlist -server=/yahoo.com.na/127.0.0.1#5335 -ipset=/yahoo.com.na/gfwlist -server=/airwick.be/127.0.0.1#5335 -ipset=/airwick.be/gfwlist -server=/durex-shopline.com/127.0.0.1#5335 -ipset=/durex-shopline.com/gfwlist -server=/rarbgunblock.com/127.0.0.1#5335 -ipset=/rarbgunblock.com/gfwlist -server=/rarbgprx.org/127.0.0.1#5335 -ipset=/rarbgprx.org/gfwlist -server=/pearson.co.in/127.0.0.1#5335 -ipset=/pearson.co.in/gfwlist -server=/rarbggo.org/127.0.0.1#5335 -ipset=/rarbggo.org/gfwlist -server=/imac.gr/127.0.0.1#5335 -ipset=/imac.gr/gfwlist -server=/rarbg.me/127.0.0.1#5335 -ipset=/rarbg.me/gfwlist -server=/xn--qhrx81fxh2a.xn--55qx5d.hk/127.0.0.1#5335 -ipset=/xn--qhrx81fxh2a.xn--55qx5d.hk/gfwlist -server=/mcdonaldsparties.co.nz/127.0.0.1#5335 -ipset=/mcdonaldsparties.co.nz/gfwlist -server=/mcdonalds.no/127.0.0.1#5335 -ipset=/mcdonalds.no/gfwlist -server=/mcdonalds.it/127.0.0.1#5335 -ipset=/mcdonalds.it/gfwlist -server=/pppds.com/127.0.0.1#5335 -ipset=/pppds.com/gfwlist -server=/youtube.co.hu/127.0.0.1#5335 -ipset=/youtube.co.hu/gfwlist -server=/anthemgame.com/127.0.0.1#5335 -ipset=/anthemgame.com/gfwlist -server=/bcicdn.com/127.0.0.1#5335 -ipset=/bcicdn.com/gfwlist -server=/figma.com/127.0.0.1#5335 -ipset=/figma.com/gfwlist -server=/brandelectronic.com/127.0.0.1#5335 -ipset=/brandelectronic.com/gfwlist -server=/fecbook.com/127.0.0.1#5335 -ipset=/fecbook.com/gfwlist -server=/mcdonalds.co.uk/127.0.0.1#5335 -ipset=/mcdonalds.co.uk/gfwlist -server=/negozimonsterbeats.com/127.0.0.1#5335 -ipset=/negozimonsterbeats.com/gfwlist -server=/airwick.no/127.0.0.1#5335 -ipset=/airwick.no/gfwlist -server=/mingshengbao.com/127.0.0.1#5335 -ipset=/mingshengbao.com/gfwlist -server=/entrustdatacard.com/127.0.0.1#5335 -ipset=/entrustdatacard.com/gfwlist -server=/mcdindonesia.com/127.0.0.1#5335 -ipset=/mcdindonesia.com/gfwlist -server=/adobetechcomm.com/127.0.0.1#5335 -ipset=/adobetechcomm.com/gfwlist -server=/mcdelivery.com.tw/127.0.0.1#5335 -ipset=/mcdelivery.com.tw/gfwlist -server=/mcdelivery.com.sg/127.0.0.1#5335 -ipset=/mcdelivery.com.sg/gfwlist -server=/mcdelivery.com.my/127.0.0.1#5335 -ipset=/mcdelivery.com.my/gfwlist -server=/2013beatsbydrdreshop.com/127.0.0.1#5335 -ipset=/2013beatsbydrdreshop.com/gfwlist -server=/mcdelivery.co.kr/127.0.0.1#5335 -ipset=/mcdelivery.co.kr/gfwlist -server=/bmw-vancouver.ca/127.0.0.1#5335 -ipset=/bmw-vancouver.ca/gfwlist -server=/quickoffice.com/127.0.0.1#5335 -ipset=/quickoffice.com/gfwlist -server=/aboutmcdonalds.com/127.0.0.1#5335 -ipset=/aboutmcdonalds.com/gfwlist -server=/huanghuagang.org/127.0.0.1#5335 -ipset=/huanghuagang.org/gfwlist -server=/instamgram.com/127.0.0.1#5335 -ipset=/instamgram.com/gfwlist -server=/hkreadingcity.net/127.0.0.1#5335 -ipset=/hkreadingcity.net/gfwlist -server=/hkedcity.net/127.0.0.1#5335 -ipset=/hkedcity.net/gfwlist -server=/familymart.com.ph/127.0.0.1#5335 -ipset=/familymart.com.ph/gfwlist -server=/family.com.tw/127.0.0.1#5335 -ipset=/family.com.tw/gfwlist -server=/esp8266.com/127.0.0.1#5335 -ipset=/esp8266.com/gfwlist -server=/esp32.com/127.0.0.1#5335 -ipset=/esp32.com/gfwlist -server=/calgon.com.tr/127.0.0.1#5335 -ipset=/calgon.com.tr/gfwlist -server=/intelserveredge.com/127.0.0.1#5335 -ipset=/intelserveredge.com/gfwlist -server=/scholar.google.cat/127.0.0.1#5335 -ipset=/scholar.google.cat/gfwlist -server=/ieee-ims.org/127.0.0.1#5335 -ipset=/ieee-ims.org/gfwlist -server=/toolforge.org/127.0.0.1#5335 -ipset=/toolforge.org/gfwlist -server=/drebeatsoldes.com/127.0.0.1#5335 -ipset=/drebeatsoldes.com/gfwlist -server=/googlecommerce.com/127.0.0.1#5335 -ipset=/googlecommerce.com/gfwlist -server=/arcgis.com/127.0.0.1#5335 -ipset=/arcgis.com/gfwlist -server=/wiktionary.org/127.0.0.1#5335 -ipset=/wiktionary.org/gfwlist -server=/wikivoyage.org/127.0.0.1#5335 -ipset=/wikivoyage.org/gfwlist -server=/canon-emirates.ae/127.0.0.1#5335 -ipset=/canon-emirates.ae/gfwlist -server=/wikiversity.org/127.0.0.1#5335 -ipset=/wikiversity.org/gfwlist -server=/wikisource.org/127.0.0.1#5335 -ipset=/wikisource.org/gfwlist -server=/garena.tv/127.0.0.1#5335 -ipset=/garena.tv/gfwlist -server=/wikiquote.org/127.0.0.1#5335 -ipset=/wikiquote.org/gfwlist -server=/wikipedia.org/127.0.0.1#5335 -ipset=/wikipedia.org/gfwlist -server=/attbelieves.com/127.0.0.1#5335 -ipset=/attbelieves.com/gfwlist -server=/sony-semicon.co.jp/127.0.0.1#5335 -ipset=/sony-semicon.co.jp/gfwlist -server=/wikimedia.org/127.0.0.1#5335 -ipset=/wikimedia.org/gfwlist -server=/marvelpinball.com/127.0.0.1#5335 -ipset=/marvelpinball.com/gfwlist -server=/wikimediafoundation.org/127.0.0.1#5335 -ipset=/wikimediafoundation.org/gfwlist -server=/wikidata.org/127.0.0.1#5335 -ipset=/wikidata.org/gfwlist -server=/applehongkong.com/127.0.0.1#5335 -ipset=/applehongkong.com/gfwlist -server=/volvotrucks.kr/127.0.0.1#5335 -ipset=/volvotrucks.kr/gfwlist -server=/foxsports.co.ve/127.0.0.1#5335 -ipset=/foxsports.co.ve/gfwlist -server=/wikibooks.org/127.0.0.1#5335 -ipset=/wikibooks.org/gfwlist -server=/facebookmail.com/127.0.0.1#5335 -ipset=/facebookmail.com/gfwlist -server=/netflixdnstest8.com/127.0.0.1#5335 -ipset=/netflixdnstest8.com/gfwlist -server=/alphabet.at/127.0.0.1#5335 -ipset=/alphabet.at/gfwlist -server=/origin.tv/127.0.0.1#5335 -ipset=/origin.tv/gfwlist -server=/ubnw.net/127.0.0.1#5335 -ipset=/ubnw.net/gfwlist -server=/yahoo.co.in/127.0.0.1#5335 -ipset=/yahoo.co.in/gfwlist -server=/vfsco.cl/127.0.0.1#5335 -ipset=/vfsco.cl/gfwlist -server=/pinterest.tw/127.0.0.1#5335 -ipset=/pinterest.tw/gfwlist -server=/wdfiles.com/127.0.0.1#5335 -ipset=/wdfiles.com/gfwlist -server=/am730.com.hk/127.0.0.1#5335 -ipset=/am730.com.hk/gfwlist -server=/bestbuy.com/127.0.0.1#5335 -ipset=/bestbuy.com/gfwlist -server=/translatewiki.net/127.0.0.1#5335 -ipset=/translatewiki.net/gfwlist -server=/jav01.cc/127.0.0.1#5335 -ipset=/jav01.cc/gfwlist -server=/scpdb.org/127.0.0.1#5335 -ipset=/scpdb.org/gfwlist -server=/mini.fr/127.0.0.1#5335 -ipset=/mini.fr/gfwlist -server=/paypal-luxury.com/127.0.0.1#5335 -ipset=/paypal-luxury.com/gfwlist -server=/ciscoresearch.com/127.0.0.1#5335 -ipset=/ciscoresearch.com/gfwlist -server=/marketing-cloud.com/127.0.0.1#5335 -ipset=/marketing-cloud.com/gfwlist -server=/fandom.zendesk.com/127.0.0.1#5335 -ipset=/fandom.zendesk.com/gfwlist -server=/intel.com.ve/127.0.0.1#5335 -ipset=/intel.com.ve/gfwlist -server=/gu-web.net/127.0.0.1#5335 -ipset=/gu-web.net/gfwlist -server=/muthead.com/127.0.0.1#5335 -ipset=/muthead.com/gfwlist -server=/beats4outlets.com/127.0.0.1#5335 -ipset=/beats4outlets.com/gfwlist -server=/mpfinance.com/127.0.0.1#5335 -ipset=/mpfinance.com/gfwlist -server=/hbogoasia.com/127.0.0.1#5335 -ipset=/hbogoasia.com/gfwlist -server=/dndbeyond.com/127.0.0.1#5335 -ipset=/dndbeyond.com/gfwlist -server=/apple.co.jp/127.0.0.1#5335 -ipset=/apple.co.jp/gfwlist -server=/youtube.vn/127.0.0.1#5335 -ipset=/youtube.vn/gfwlist -server=/lubetube.com/127.0.0.1#5335 -ipset=/lubetube.com/gfwlist -server=/ebayinc.com/127.0.0.1#5335 -ipset=/ebayinc.com/gfwlist -server=/now-tv.com/127.0.0.1#5335 -ipset=/now-tv.com/gfwlist -server=/azuredevopslaunch.com/127.0.0.1#5335 -ipset=/azuredevopslaunch.com/gfwlist -server=/youtube.cz/127.0.0.1#5335 -ipset=/youtube.cz/gfwlist -server=/wikia.com/127.0.0.1#5335 -ipset=/wikia.com/gfwlist -server=/bmw.com.tw/127.0.0.1#5335 -ipset=/bmw.com.tw/gfwlist -server=/applestore.com.au/127.0.0.1#5335 -ipset=/applestore.com.au/gfwlist -server=/mini.ca/127.0.0.1#5335 -ipset=/mini.ca/gfwlist -server=/vanish.co.id/127.0.0.1#5335 -ipset=/vanish.co.id/gfwlist -server=/apple-livephotoskit.com/127.0.0.1#5335 -ipset=/apple-livephotoskit.com/gfwlist -server=/ssplive.pw/127.0.0.1#5335 -ipset=/ssplive.pw/gfwlist -server=/renzhe.cloud/127.0.0.1#5335 -ipset=/renzhe.cloud/gfwlist -server=/visualstudio.co.uk/127.0.0.1#5335 -ipset=/visualstudio.co.uk/gfwlist -server=/directvdealsnow.com/127.0.0.1#5335 -ipset=/directvdealsnow.com/gfwlist -server=/beatsbydreblackfriday2013.com/127.0.0.1#5335 -ipset=/beatsbydreblackfriday2013.com/gfwlist -server=/bmw-qatar.com/127.0.0.1#5335 -ipset=/bmw-qatar.com/gfwlist -server=/princeton.edu/127.0.0.1#5335 -ipset=/princeton.edu/gfwlist -server=/maying.co/127.0.0.1#5335 -ipset=/maying.co/gfwlist -server=/cloudn.me/127.0.0.1#5335 -ipset=/cloudn.me/gfwlist -server=/iotinactionevents.com/127.0.0.1#5335 -ipset=/iotinactionevents.com/gfwlist -server=/paypal.com.hk/127.0.0.1#5335 -ipset=/paypal.com.hk/gfwlist -server=/ark.to/127.0.0.1#5335 -ipset=/ark.to/gfwlist -server=/ebay.at/127.0.0.1#5335 -ipset=/ebay.at/gfwlist -server=/musicbay.net/127.0.0.1#5335 -ipset=/musicbay.net/gfwlist -server=/amytele.com/127.0.0.1#5335 -ipset=/amytele.com/gfwlist -server=/vilavpn7.xyz/127.0.0.1#5335 -ipset=/vilavpn7.xyz/gfwlist -server=/vilavpn6.xyz/127.0.0.1#5335 -ipset=/vilavpn6.xyz/gfwlist -server=/g-tvapp.com/127.0.0.1#5335 -ipset=/g-tvapp.com/gfwlist -server=/faceboop.com/127.0.0.1#5335 -ipset=/faceboop.com/gfwlist -server=/playshow.io/127.0.0.1#5335 -ipset=/playshow.io/gfwlist -server=/adobetarget.com/127.0.0.1#5335 -ipset=/adobetarget.com/gfwlist -server=/wwtbam.com/127.0.0.1#5335 -ipset=/wwtbam.com/gfwlist -server=/vilavpn5.xyz/127.0.0.1#5335 -ipset=/vilavpn5.xyz/gfwlist -server=/vilavpn4.xyz/127.0.0.1#5335 -ipset=/vilavpn4.xyz/gfwlist -server=/epoch.org.il/127.0.0.1#5335 -ipset=/epoch.org.il/gfwlist -server=/faceboob.com/127.0.0.1#5335 -ipset=/faceboob.com/gfwlist -server=/mini.cc/127.0.0.1#5335 -ipset=/mini.cc/gfwlist -server=/qualcommventures.com/127.0.0.1#5335 -ipset=/qualcommventures.com/gfwlist -server=/vilavpn1.xyz/127.0.0.1#5335 -ipset=/vilavpn1.xyz/gfwlist -server=/getpocket.com/127.0.0.1#5335 -ipset=/getpocket.com/gfwlist -server=/surflite.net/127.0.0.1#5335 -ipset=/surflite.net/gfwlist -server=/landofhope.tv/127.0.0.1#5335 -ipset=/landofhope.tv/gfwlist -server=/xn--hb4aw0g.com/127.0.0.1#5335 -ipset=/xn--hb4aw0g.com/gfwlist -server=/xn--d4ty0ojsqzfd.com/127.0.0.1#5335 -ipset=/xn--d4ty0ojsqzfd.com/gfwlist -server=/myrz.com/127.0.0.1#5335 -ipset=/myrz.com/gfwlist -server=/mininanaimo.com/127.0.0.1#5335 -ipset=/mininanaimo.com/gfwlist -server=/lolespor.com/127.0.0.1#5335 -ipset=/lolespor.com/gfwlist -server=/shadowsocks.nl/127.0.0.1#5335 -ipset=/shadowsocks.nl/gfwlist -server=/curbed.com/127.0.0.1#5335 -ipset=/curbed.com/gfwlist -server=/paofuyun.me/127.0.0.1#5335 -ipset=/paofuyun.me/gfwlist -server=/googlearth.com/127.0.0.1#5335 -ipset=/googlearth.com/gfwlist -server=/nexitcore.com/127.0.0.1#5335 -ipset=/nexitcore.com/gfwlist -server=/mastercardcenterforinclusivegrowth.org/127.0.0.1#5335 -ipset=/mastercardcenterforinclusivegrowth.org/gfwlist -server=/minipetfriendly.com/127.0.0.1#5335 -ipset=/minipetfriendly.com/gfwlist -server=/nexitallysafe.com/127.0.0.1#5335 -ipset=/nexitallysafe.com/gfwlist -server=/pokedex3d.com/127.0.0.1#5335 -ipset=/pokedex3d.com/gfwlist -server=/aboutyourmini.com/127.0.0.1#5335 -ipset=/aboutyourmini.com/gfwlist -server=/snapkit.co/127.0.0.1#5335 -ipset=/snapkit.co/gfwlist -server=/n3ro.lol/127.0.0.1#5335 -ipset=/n3ro.lol/gfwlist -server=/sandisk.es/127.0.0.1#5335 -ipset=/sandisk.es/gfwlist -server=/cloudlock.com/127.0.0.1#5335 -ipset=/cloudlock.com/gfwlist -server=/justmysocks2.net/127.0.0.1#5335 -ipset=/justmysocks2.net/gfwlist -server=/kindle.jp/127.0.0.1#5335 -ipset=/kindle.jp/gfwlist -server=/ubisoft-uplay-savegames.s3.amazonaws.com/127.0.0.1#5335 -ipset=/ubisoft-uplay-savegames.s3.amazonaws.com/gfwlist -server=/justmysocks.net/127.0.0.1#5335 -ipset=/justmysocks.net/gfwlist -server=/xn--90wwvt03e.com/127.0.0.1#5335 -ipset=/xn--90wwvt03e.com/gfwlist -server=/javlibrary.com/127.0.0.1#5335 -ipset=/javlibrary.com/gfwlist -server=/safechat.com/127.0.0.1#5335 -ipset=/safechat.com/gfwlist -server=/nikestore.com.au/127.0.0.1#5335 -ipset=/nikestore.com.au/gfwlist -server=/duckside.com/127.0.0.1#5335 -ipset=/duckside.com/gfwlist -server=/duyaossr.com/127.0.0.1#5335 -ipset=/duyaossr.com/gfwlist -server=/duyaoss.com/127.0.0.1#5335 -ipset=/duyaoss.com/gfwlist -server=/paypal-galactic.com/127.0.0.1#5335 -ipset=/paypal-galactic.com/gfwlist -server=/scholar.google.se/127.0.0.1#5335 -ipset=/scholar.google.se/gfwlist -server=/feook.com/127.0.0.1#5335 -ipset=/feook.com/gfwlist -server=/google.td/127.0.0.1#5335 -ipset=/google.td/gfwlist -server=/dleris.best/127.0.0.1#5335 -ipset=/dleris.best/gfwlist -server=/voa.gov/127.0.0.1#5335 -ipset=/voa.gov/gfwlist -server=/vmwidm-ads.com/127.0.0.1#5335 -ipset=/vmwidm-ads.com/gfwlist -server=/beatsdremonster-uk.com/127.0.0.1#5335 -ipset=/beatsdremonster-uk.com/gfwlist -server=/notion.so/127.0.0.1#5335 -ipset=/notion.so/gfwlist -server=/masseffectarchives.com/127.0.0.1#5335 -ipset=/masseffectarchives.com/gfwlist -server=/fmcebook.com/127.0.0.1#5335 -ipset=/fmcebook.com/gfwlist -server=/beatsbydrefriday.com/127.0.0.1#5335 -ipset=/beatsbydrefriday.com/gfwlist -server=/xn--czrs0t4phtr3a.cn/127.0.0.1#5335 -ipset=/xn--czrs0t4phtr3a.cn/gfwlist -server=/dlercloud.me/127.0.0.1#5335 -ipset=/dlercloud.me/gfwlist -server=/0emm.com/127.0.0.1#5335 -ipset=/0emm.com/gfwlist -server=/callhulu.com/127.0.0.1#5335 -ipset=/callhulu.com/gfwlist -server=/cylink0122.icu/127.0.0.1#5335 -ipset=/cylink0122.icu/gfwlist -server=/rocksdb.net/127.0.0.1#5335 -ipset=/rocksdb.net/gfwlist -server=/cheapbeatsbydreoutlet-nz.com/127.0.0.1#5335 -ipset=/cheapbeatsbydreoutlet-nz.com/gfwlist -server=/cylink.pro/127.0.0.1#5335 -ipset=/cylink.pro/gfwlist -server=/nikeincchemistry.com/127.0.0.1#5335 -ipset=/nikeincchemistry.com/gfwlist -server=/krakenjs.com/127.0.0.1#5335 -ipset=/krakenjs.com/gfwlist -server=/ebaynyc.com/127.0.0.1#5335 -ipset=/ebaynyc.com/gfwlist -server=/telegram.me/127.0.0.1#5335 -ipset=/telegram.me/gfwlist -server=/mastercard.by/127.0.0.1#5335 -ipset=/mastercard.by/gfwlist -server=/boslife.net/127.0.0.1#5335 -ipset=/boslife.net/gfwlist -server=/japanesebeauties.net/127.0.0.1#5335 -ipset=/japanesebeauties.net/gfwlist -server=/boslife.biz/127.0.0.1#5335 -ipset=/boslife.biz/gfwlist -server=/zind.cloud/127.0.0.1#5335 -ipset=/zind.cloud/gfwlist -server=/volvotrucks.hk/127.0.0.1#5335 -ipset=/volvotrucks.hk/gfwlist -server=/metamind.io/127.0.0.1#5335 -ipset=/metamind.io/gfwlist -server=/google.pn/127.0.0.1#5335 -ipset=/google.pn/gfwlist -server=/yastatic.net/127.0.0.1#5335 -ipset=/yastatic.net/gfwlist -server=/foxsportsgo.com/127.0.0.1#5335 -ipset=/foxsportsgo.com/gfwlist -server=/battlefield4.com/127.0.0.1#5335 -ipset=/battlefield4.com/gfwlist -server=/pinterest.de/127.0.0.1#5335 -ipset=/pinterest.de/gfwlist -server=/yandex.tm/127.0.0.1#5335 -ipset=/yandex.tm/gfwlist -server=/yandex.tj/127.0.0.1#5335 -ipset=/yandex.tj/gfwlist -server=/beatsdrecheap.com/127.0.0.1#5335 -ipset=/beatsdrecheap.com/gfwlist -server=/walmart.com/127.0.0.1#5335 -ipset=/walmart.com/gfwlist -server=/ip.sb/127.0.0.1#5335 -ipset=/ip.sb/gfwlist -server=/nikekd.com/127.0.0.1#5335 -ipset=/nikekd.com/gfwlist -server=/yandex.net/127.0.0.1#5335 -ipset=/yandex.net/gfwlist -server=/addtoany.com/127.0.0.1#5335 -ipset=/addtoany.com/gfwlist -server=/udemy.com/127.0.0.1#5335 -ipset=/udemy.com/gfwlist -server=/atdmt2.com/127.0.0.1#5335 -ipset=/atdmt2.com/gfwlist -server=/yandex.md/127.0.0.1#5335 -ipset=/yandex.md/gfwlist -server=/playerjs.io/127.0.0.1#5335 -ipset=/playerjs.io/gfwlist -server=/yandex.lv/127.0.0.1#5335 -ipset=/yandex.lv/gfwlist -server=/yandex.kz/127.0.0.1#5335 -ipset=/yandex.kz/gfwlist -server=/yandex.kg/127.0.0.1#5335 -ipset=/yandex.kg/gfwlist -server=/epochtimes.it/127.0.0.1#5335 -ipset=/epochtimes.it/gfwlist -server=/pacifickitchenandhome.com/127.0.0.1#5335 -ipset=/pacifickitchenandhome.com/gfwlist -server=/yandex.com.tr/127.0.0.1#5335 -ipset=/yandex.com.tr/gfwlist -server=/yandex.com.ge/127.0.0.1#5335 -ipset=/yandex.com.ge/gfwlist -server=/yandex.com/127.0.0.1#5335 -ipset=/yandex.com/gfwlist -server=/ninemsn.com.au/127.0.0.1#5335 -ipset=/ninemsn.com.au/gfwlist -server=/yandex.co.il/127.0.0.1#5335 -ipset=/yandex.co.il/gfwlist -server=/yandex.by/127.0.0.1#5335 -ipset=/yandex.by/gfwlist -server=/yandex.az/127.0.0.1#5335 -ipset=/yandex.az/gfwlist -server=/wwwipodlounge.com/127.0.0.1#5335 -ipset=/wwwipodlounge.com/gfwlist -server=/yimg.jp/127.0.0.1#5335 -ipset=/yimg.jp/gfwlist -server=/yahoo.az/127.0.0.1#5335 -ipset=/yahoo.az/gfwlist -server=/scholar.google.com.sg/127.0.0.1#5335 -ipset=/scholar.google.com.sg/gfwlist -server=/xnxx.com/127.0.0.1#5335 -ipset=/xnxx.com/gfwlist -server=/goldcoastbulletin.com.au/127.0.0.1#5335 -ipset=/goldcoastbulletin.com.au/gfwlist -server=/yho.com/127.0.0.1#5335 -ipset=/yho.com/gfwlist -server=/theshoppingexpresslane.net/127.0.0.1#5335 -ipset=/theshoppingexpresslane.net/gfwlist -server=/yahoosportsbook.com/127.0.0.1#5335 -ipset=/yahoosportsbook.com/gfwlist -server=/yahoohealth.com/127.0.0.1#5335 -ipset=/yahoohealth.com/gfwlist -server=/yahoofinance.com/127.0.0.1#5335 -ipset=/yahoofinance.com/gfwlist -server=/bs-awh.ne.jp/127.0.0.1#5335 -ipset=/bs-awh.ne.jp/gfwlist -server=/clannad-movie.jp/127.0.0.1#5335 -ipset=/clannad-movie.jp/gfwlist -server=/intel.ma/127.0.0.1#5335 -ipset=/intel.ma/gfwlist -server=/paypal-referral.com/127.0.0.1#5335 -ipset=/paypal-referral.com/gfwlist -server=/hpeprintcenter.com/127.0.0.1#5335 -ipset=/hpeprintcenter.com/gfwlist -server=/yahoo.tn/127.0.0.1#5335 -ipset=/yahoo.tn/gfwlist -server=/swiftfinancial.info/127.0.0.1#5335 -ipset=/swiftfinancial.info/gfwlist -server=/yahoo.tm/127.0.0.1#5335 -ipset=/yahoo.tm/gfwlist -server=/facbebook.com/127.0.0.1#5335 -ipset=/facbebook.com/gfwlist -server=/foxdeportes.net/127.0.0.1#5335 -ipset=/foxdeportes.net/gfwlist -server=/yahoo.tk/127.0.0.1#5335 -ipset=/yahoo.tk/gfwlist -server=/foxnation.com/127.0.0.1#5335 -ipset=/foxnation.com/gfwlist -server=/scholar.google.com.ua/127.0.0.1#5335 -ipset=/scholar.google.com.ua/gfwlist -server=/app-dynamics.com/127.0.0.1#5335 -ipset=/app-dynamics.com/gfwlist -server=/yahoo.st/127.0.0.1#5335 -ipset=/yahoo.st/gfwlist -server=/iphonese.tv/127.0.0.1#5335 -ipset=/iphonese.tv/gfwlist -server=/device-manager.us/127.0.0.1#5335 -ipset=/device-manager.us/gfwlist -server=/yahoo.sm/127.0.0.1#5335 -ipset=/yahoo.sm/gfwlist -server=/bmwgroup-classic-heart.com/127.0.0.1#5335 -ipset=/bmwgroup-classic-heart.com/gfwlist -server=/yahoo.sk/127.0.0.1#5335 -ipset=/yahoo.sk/gfwlist -server=/yahoo.si/127.0.0.1#5335 -ipset=/yahoo.si/gfwlist -server=/yahoo.sg/127.0.0.1#5335 -ipset=/yahoo.sg/gfwlist -server=/yahoo.se/127.0.0.1#5335 -ipset=/yahoo.se/gfwlist -server=/cheapbeatsaustraliasale.com/127.0.0.1#5335 -ipset=/cheapbeatsaustraliasale.com/gfwlist -server=/github.com/127.0.0.1#5335 -ipset=/github.com/gfwlist -server=/appledarwin.com/127.0.0.1#5335 -ipset=/appledarwin.com/gfwlist -server=/beatsheadphonesusamall.com/127.0.0.1#5335 -ipset=/beatsheadphonesusamall.com/gfwlist -server=/ind.sh/127.0.0.1#5335 -ipset=/ind.sh/gfwlist -server=/yahoo.ru/127.0.0.1#5335 -ipset=/yahoo.ru/gfwlist -server=/yahoo.ro/127.0.0.1#5335 -ipset=/yahoo.ro/gfwlist -server=/1ucrs.com/127.0.0.1#5335 -ipset=/1ucrs.com/gfwlist -server=/nvidia.cz/127.0.0.1#5335 -ipset=/nvidia.cz/gfwlist -server=/yahoo.pn/127.0.0.1#5335 -ipset=/yahoo.pn/gfwlist -server=/yahoo.pl/127.0.0.1#5335 -ipset=/yahoo.pl/gfwlist -server=/beatsaudiobydre.com/127.0.0.1#5335 -ipset=/beatsaudiobydre.com/gfwlist -server=/yahoo.nu/127.0.0.1#5335 -ipset=/yahoo.nu/gfwlist -server=/yahoo.net/127.0.0.1#5335 -ipset=/yahoo.net/gfwlist -server=/bridgestonetyre.com.my/127.0.0.1#5335 -ipset=/bridgestonetyre.com.my/gfwlist -server=/volvotrucks.si/127.0.0.1#5335 -ipset=/volvotrucks.si/gfwlist -server=/yahoo.mx/127.0.0.1#5335 -ipset=/yahoo.mx/gfwlist -server=/ebayetc.com/127.0.0.1#5335 -ipset=/ebayetc.com/gfwlist -server=/alphabet.be/127.0.0.1#5335 -ipset=/alphabet.be/gfwlist -server=/yahoo.mk/127.0.0.1#5335 -ipset=/yahoo.mk/gfwlist -server=/igcdn.com/127.0.0.1#5335 -ipset=/igcdn.com/gfwlist -server=/yahoo.lt/127.0.0.1#5335 -ipset=/yahoo.lt/gfwlist -server=/yahoo.je/127.0.0.1#5335 -ipset=/yahoo.je/gfwlist -server=/xbox360.org/127.0.0.1#5335 -ipset=/xbox360.org/gfwlist -server=/mocloudplus.com/127.0.0.1#5335 -ipset=/mocloudplus.com/gfwlist -server=/yahoo.in/127.0.0.1#5335 -ipset=/yahoo.in/gfwlist -server=/yahoo.hr/127.0.0.1#5335 -ipset=/yahoo.hr/gfwlist -server=/yahoo.hk/127.0.0.1#5335 -ipset=/yahoo.hk/gfwlist -server=/adobejanus.com/127.0.0.1#5335 -ipset=/adobejanus.com/gfwlist -server=/yahoo.gy/127.0.0.1#5335 -ipset=/yahoo.gy/gfwlist -server=/collective99.com/127.0.0.1#5335 -ipset=/collective99.com/gfwlist -server=/yahoo.gp/127.0.0.1#5335 -ipset=/yahoo.gp/gfwlist -server=/thenationalpulse.com/127.0.0.1#5335 -ipset=/thenationalpulse.com/gfwlist -server=/bmia.org/127.0.0.1#5335 -ipset=/bmia.org/gfwlist -server=/yahoo.gm/127.0.0.1#5335 -ipset=/yahoo.gm/gfwlist -server=/yahoo.gl/127.0.0.1#5335 -ipset=/yahoo.gl/gfwlist -server=/foxsoccermatchpass.com/127.0.0.1#5335 -ipset=/foxsoccermatchpass.com/gfwlist -server=/huffingtonpost.co.uk/127.0.0.1#5335 -ipset=/huffingtonpost.co.uk/gfwlist -server=/yahoo.gg/127.0.0.1#5335 -ipset=/yahoo.gg/gfwlist -server=/blizzard.nefficient.co.kr/127.0.0.1#5335 -ipset=/blizzard.nefficient.co.kr/gfwlist -server=/huffingtonpost.it/127.0.0.1#5335 -ipset=/huffingtonpost.it/gfwlist -server=/hpuae.com/127.0.0.1#5335 -ipset=/hpuae.com/gfwlist -server=/yahoo.fm/127.0.0.1#5335 -ipset=/yahoo.fm/gfwlist -server=/dashwood360.com/127.0.0.1#5335 -ipset=/dashwood360.com/gfwlist -server=/beats-bydreuk.com/127.0.0.1#5335 -ipset=/beats-bydreuk.com/gfwlist -server=/visa.nl/127.0.0.1#5335 -ipset=/visa.nl/gfwlist -server=/printeron.com/127.0.0.1#5335 -ipset=/printeron.com/gfwlist -server=/fox38corpuschristi.com/127.0.0.1#5335 -ipset=/fox38corpuschristi.com/gfwlist -server=/embed-cdn.com/127.0.0.1#5335 -ipset=/embed-cdn.com/gfwlist -server=/yahoo.ee/127.0.0.1#5335 -ipset=/yahoo.ee/gfwlist -server=/practicalmoneyskills.ca/127.0.0.1#5335 -ipset=/practicalmoneyskills.ca/gfwlist -server=/kktv.com.tw/127.0.0.1#5335 -ipset=/kktv.com.tw/gfwlist -server=/hptouch.com/127.0.0.1#5335 -ipset=/hptouch.com/gfwlist -server=/crececonebay.com/127.0.0.1#5335 -ipset=/crececonebay.com/gfwlist -server=/yahoo.dj/127.0.0.1#5335 -ipset=/yahoo.dj/gfwlist -server=/yahoo.com.vn/127.0.0.1#5335 -ipset=/yahoo.com.vn/gfwlist -server=/yahoo.com.vc/127.0.0.1#5335 -ipset=/yahoo.com.vc/gfwlist -server=/yahoo.com.ua/127.0.0.1#5335 -ipset=/yahoo.com.ua/gfwlist -server=/msgamesresearch.com/127.0.0.1#5335 -ipset=/msgamesresearch.com/gfwlist -server=/yahoo.com.tr/127.0.0.1#5335 -ipset=/yahoo.com.tr/gfwlist -server=/instafollower.com/127.0.0.1#5335 -ipset=/instafollower.com/gfwlist -server=/yahoo.com.sv/127.0.0.1#5335 -ipset=/yahoo.com.sv/gfwlist -server=/yahoo.com.sg/127.0.0.1#5335 -ipset=/yahoo.com.sg/gfwlist -server=/who.int/127.0.0.1#5335 -ipset=/who.int/gfwlist -server=/maddenseason.info/127.0.0.1#5335 -ipset=/maddenseason.info/gfwlist -server=/embedly.com/127.0.0.1#5335 -ipset=/embedly.com/gfwlist -server=/jbe-platform.com/127.0.0.1#5335 -ipset=/jbe-platform.com/gfwlist -server=/applemalaysia.com.my/127.0.0.1#5335 -ipset=/applemalaysia.com.my/gfwlist -server=/disneymusicpromotion.com/127.0.0.1#5335 -ipset=/disneymusicpromotion.com/gfwlist -server=/yahoo.com.es/127.0.0.1#5335 -ipset=/yahoo.com.es/gfwlist -server=/yahoo.com.ph/127.0.0.1#5335 -ipset=/yahoo.com.ph/gfwlist -server=/applestore.ph/127.0.0.1#5335 -ipset=/applestore.ph/gfwlist -server=/yahoo.com.pe/127.0.0.1#5335 -ipset=/yahoo.com.pe/gfwlist -server=/pages.dev/127.0.0.1#5335 -ipset=/pages.dev/gfwlist -server=/prd-priconne-redive.akamaized.net/127.0.0.1#5335 -ipset=/prd-priconne-redive.akamaized.net/gfwlist -server=/yahoo.com.pa/127.0.0.1#5335 -ipset=/yahoo.com.pa/gfwlist -server=/openapiplatform.com/127.0.0.1#5335 -ipset=/openapiplatform.com/gfwlist -server=/paypal-apac.com/127.0.0.1#5335 -ipset=/paypal-apac.com/gfwlist -server=/get.how/127.0.0.1#5335 -ipset=/get.how/gfwlist -server=/paypal-center.com/127.0.0.1#5335 -ipset=/paypal-center.com/gfwlist -server=/iamremarkable.org/127.0.0.1#5335 -ipset=/iamremarkable.org/gfwlist -server=/yahoo.lv/127.0.0.1#5335 -ipset=/yahoo.lv/gfwlist -server=/playz.jp/127.0.0.1#5335 -ipset=/playz.jp/gfwlist -server=/yahoo.com.nf/127.0.0.1#5335 -ipset=/yahoo.com.nf/gfwlist -server=/adobecontent.io/127.0.0.1#5335 -ipset=/adobecontent.io/gfwlist -server=/airwick.ch/127.0.0.1#5335 -ipset=/airwick.ch/gfwlist -server=/mini-e.com/127.0.0.1#5335 -ipset=/mini-e.com/gfwlist -server=/yahoo.com.mt/127.0.0.1#5335 -ipset=/yahoo.com.mt/gfwlist -server=/yahoo.com.ly/127.0.0.1#5335 -ipset=/yahoo.com.ly/gfwlist -server=/yahoo.com.lb/127.0.0.1#5335 -ipset=/yahoo.com.lb/gfwlist -server=/sony.com.sg/127.0.0.1#5335 -ipset=/sony.com.sg/gfwlist -server=/yahoo.com.gt/127.0.0.1#5335 -ipset=/yahoo.com.gt/gfwlist -server=/redkix.com/127.0.0.1#5335 -ipset=/redkix.com/gfwlist -server=/ipod.pk/127.0.0.1#5335 -ipset=/ipod.pk/gfwlist -server=/pearson.com.au/127.0.0.1#5335 -ipset=/pearson.com.au/gfwlist -server=/mastercard.ie/127.0.0.1#5335 -ipset=/mastercard.ie/gfwlist -server=/bestbuy.com.mx/127.0.0.1#5335 -ipset=/bestbuy.com.mx/gfwlist -server=/ebayclassifies.com/127.0.0.1#5335 -ipset=/ebayclassifies.com/gfwlist -server=/starbucks.com.kh/127.0.0.1#5335 -ipset=/starbucks.com.kh/gfwlist -server=/microsoft.tv/127.0.0.1#5335 -ipset=/microsoft.tv/gfwlist -server=/yahoo.com.co/127.0.0.1#5335 -ipset=/yahoo.com.co/gfwlist -server=/gucci.com/127.0.0.1#5335 -ipset=/gucci.com/gfwlist -server=/thetype.com/127.0.0.1#5335 -ipset=/thetype.com/gfwlist -server=/redditstatic.com/127.0.0.1#5335 -ipset=/redditstatic.com/gfwlist -server=/2014cheapbeatsbydre.com/127.0.0.1#5335 -ipset=/2014cheapbeatsbydre.com/gfwlist -server=/yahoo.com.bz/127.0.0.1#5335 -ipset=/yahoo.com.bz/gfwlist -server=/minivilledequebec.ca/127.0.0.1#5335 -ipset=/minivilledequebec.ca/gfwlist -server=/yahoo.com.br/127.0.0.1#5335 -ipset=/yahoo.com.br/gfwlist -server=/attwirelessinternet.com/127.0.0.1#5335 -ipset=/attwirelessinternet.com/gfwlist -server=/yahoo.com.au/127.0.0.1#5335 -ipset=/yahoo.com.au/gfwlist -server=/yahoo.com.ar/127.0.0.1#5335 -ipset=/yahoo.com.ar/gfwlist -server=/translatetheweb.com/127.0.0.1#5335 -ipset=/translatetheweb.com/gfwlist -server=/yahoo.com.ai/127.0.0.1#5335 -ipset=/yahoo.com.ai/gfwlist -server=/calgon.ru/127.0.0.1#5335 -ipset=/calgon.ru/gfwlist -server=/scitation.org/127.0.0.1#5335 -ipset=/scitation.org/gfwlist -server=/brands098.com/127.0.0.1#5335 -ipset=/brands098.com/gfwlist -server=/pnas.org/127.0.0.1#5335 -ipset=/pnas.org/gfwlist -server=/yahoo.co.za/127.0.0.1#5335 -ipset=/yahoo.co.za/gfwlist -server=/wiiugamepad.com/127.0.0.1#5335 -ipset=/wiiugamepad.com/gfwlist -server=/futureofbusinesssurvey.org/127.0.0.1#5335 -ipset=/futureofbusinesssurvey.org/gfwlist -server=/uproxy.org/127.0.0.1#5335 -ipset=/uproxy.org/gfwlist -server=/adobedemo.com/127.0.0.1#5335 -ipset=/adobedemo.com/gfwlist -server=/intel.cu/127.0.0.1#5335 -ipset=/intel.cu/gfwlist -server=/volvobuses.us/127.0.0.1#5335 -ipset=/volvobuses.us/gfwlist -server=/herokucharge.com/127.0.0.1#5335 -ipset=/herokucharge.com/gfwlist -server=/nikereuseashoe.com/127.0.0.1#5335 -ipset=/nikereuseashoe.com/gfwlist -server=/bmw-motorrad.gr/127.0.0.1#5335 -ipset=/bmw-motorrad.gr/gfwlist -server=/volvotrucks.com.pt/127.0.0.1#5335 -ipset=/volvotrucks.com.pt/gfwlist -server=/yahoo.co.uz/127.0.0.1#5335 -ipset=/yahoo.co.uz/gfwlist -server=/yahoo.co.uk/127.0.0.1#5335 -ipset=/yahoo.co.uk/gfwlist -server=/yahoo.co.tz/127.0.0.1#5335 -ipset=/yahoo.co.tz/gfwlist -server=/yahoo.co.th/127.0.0.1#5335 -ipset=/yahoo.co.th/gfwlist -server=/yahoo.co.nz/127.0.0.1#5335 -ipset=/yahoo.co.nz/gfwlist -server=/mingpaovan.com/127.0.0.1#5335 -ipset=/mingpaovan.com/gfwlist -server=/itunesradio.tw/127.0.0.1#5335 -ipset=/itunesradio.tw/gfwlist -server=/1degree.com.au/127.0.0.1#5335 -ipset=/1degree.com.au/gfwlist -server=/nikeplus.org/127.0.0.1#5335 -ipset=/nikeplus.org/gfwlist -server=/yahoo.co.kr/127.0.0.1#5335 -ipset=/yahoo.co.kr/gfwlist -server=/wikidot.com/127.0.0.1#5335 -ipset=/wikidot.com/gfwlist -server=/volvobuses.kr/127.0.0.1#5335 -ipset=/volvobuses.kr/gfwlist -server=/yahoo.co.id/127.0.0.1#5335 -ipset=/yahoo.co.id/gfwlist -server=/firestone.co.cr/127.0.0.1#5335 -ipset=/firestone.co.cr/gfwlist -server=/yahoo.co.cr/127.0.0.1#5335 -ipset=/yahoo.co.cr/gfwlist -server=/intel.nz/127.0.0.1#5335 -ipset=/intel.nz/gfwlist -server=/officialdrdre.com/127.0.0.1#5335 -ipset=/officialdrdre.com/gfwlist -server=/yahoo.co.ck/127.0.0.1#5335 -ipset=/yahoo.co.ck/gfwlist -server=/ieee-ceda.org/127.0.0.1#5335 -ipset=/ieee-ceda.org/gfwlist -server=/voathai.com/127.0.0.1#5335 -ipset=/voathai.com/gfwlist -server=/lolstatic.com/127.0.0.1#5335 -ipset=/lolstatic.com/gfwlist -server=/pascherbeatsmonster.com/127.0.0.1#5335 -ipset=/pascherbeatsmonster.com/gfwlist -server=/yahoo.co.ao/127.0.0.1#5335 -ipset=/yahoo.co.ao/gfwlist -server=/wholekidsfoundation.org/127.0.0.1#5335 -ipset=/wholekidsfoundation.org/gfwlist -server=/parse.com/127.0.0.1#5335 -ipset=/parse.com/gfwlist -server=/yahoo.cm/127.0.0.1#5335 -ipset=/yahoo.cm/gfwlist -server=/yahoo.cl/127.0.0.1#5335 -ipset=/yahoo.cl/gfwlist -server=/yahoo.cg/127.0.0.1#5335 -ipset=/yahoo.cg/gfwlist -server=/yahoo.cat/127.0.0.1#5335 -ipset=/yahoo.cat/gfwlist -server=/beatsmusic.wang/127.0.0.1#5335 -ipset=/beatsmusic.wang/gfwlist -server=/yahoo.bt/127.0.0.1#5335 -ipset=/yahoo.bt/gfwlist -server=/yahoo.bs/127.0.0.1#5335 -ipset=/yahoo.bs/gfwlist -server=/shopee.com.br/127.0.0.1#5335 -ipset=/shopee.com.br/gfwlist -server=/yahoo.bg/127.0.0.1#5335 -ipset=/yahoo.bg/gfwlist -server=/ruby-lang.org/127.0.0.1#5335 -ipset=/ruby-lang.org/gfwlist -server=/fbthirdpartypixel.com/127.0.0.1#5335 -ipset=/fbthirdpartypixel.com/gfwlist -server=/google.gm/127.0.0.1#5335 -ipset=/google.gm/gfwlist -server=/linear-abematv.akamaized.net/127.0.0.1#5335 -ipset=/linear-abematv.akamaized.net/gfwlist -server=/yahoo.be/127.0.0.1#5335 -ipset=/yahoo.be/gfwlist -server=/fightforux.com/127.0.0.1#5335 -ipset=/fightforux.com/gfwlist -server=/windowsphone-int.com/127.0.0.1#5335 -ipset=/windowsphone-int.com/gfwlist -server=/vcloudair.net/127.0.0.1#5335 -ipset=/vcloudair.net/gfwlist -server=/uun98.com/127.0.0.1#5335 -ipset=/uun98.com/gfwlist -server=/yahoo.as/127.0.0.1#5335 -ipset=/yahoo.as/gfwlist -server=/yahoo.am/127.0.0.1#5335 -ipset=/yahoo.am/gfwlist -server=/vfsco.com.au/127.0.0.1#5335 -ipset=/vfsco.com.au/gfwlist -server=/fox7austin.com/127.0.0.1#5335 -ipset=/fox7austin.com/gfwlist -server=/huluspain.com/127.0.0.1#5335 -ipset=/huluspain.com/gfwlist -server=/applestore.hk/127.0.0.1#5335 -ipset=/applestore.hk/gfwlist -server=/scala-lang.org/127.0.0.1#5335 -ipset=/scala-lang.org/gfwlist -server=/gemini.yahoo.com/127.0.0.1#5335 -ipset=/gemini.yahoo.com/gfwlist -server=/nvidia.com.au/127.0.0.1#5335 -ipset=/nvidia.com.au/gfwlist -server=/ads.yahoo.com/127.0.0.1#5335 -ipset=/ads.yahoo.com/gfwlist -server=/disneyinflight.com/127.0.0.1#5335 -ipset=/disneyinflight.com/gfwlist -server=/gamesstack.com/127.0.0.1#5335 -ipset=/gamesstack.com/gfwlist -server=/volvotrucks.co.bw/127.0.0.1#5335 -ipset=/volvotrucks.co.bw/gfwlist -server=/beatsdreus.com/127.0.0.1#5335 -ipset=/beatsdreus.com/gfwlist -server=/pixanalytics.com/127.0.0.1#5335 -ipset=/pixanalytics.com/gfwlist -server=/drebeatsaustralia-cheap.com/127.0.0.1#5335 -ipset=/drebeatsaustralia-cheap.com/gfwlist -server=/foxcollegesports.com/127.0.0.1#5335 -ipset=/foxcollegesports.com/gfwlist -server=/wdc.com/127.0.0.1#5335 -ipset=/wdc.com/gfwlist -server=/tiberiumalliances.com/127.0.0.1#5335 -ipset=/tiberiumalliances.com/gfwlist -server=/els-cdn.com/127.0.0.1#5335 -ipset=/els-cdn.com/gfwlist -server=/sandisk.sg/127.0.0.1#5335 -ipset=/sandisk.sg/gfwlist -server=/sandisk.nl/127.0.0.1#5335 -ipset=/sandisk.nl/gfwlist -server=/commandandconquer.com/127.0.0.1#5335 -ipset=/commandandconquer.com/gfwlist -server=/iphoto.se/127.0.0.1#5335 -ipset=/iphoto.se/gfwlist -server=/photonicssociety.org/127.0.0.1#5335 -ipset=/photonicssociety.org/gfwlist -server=/sandisk.in/127.0.0.1#5335 -ipset=/sandisk.in/gfwlist -server=/finish.bg/127.0.0.1#5335 -ipset=/finish.bg/gfwlist -server=/tug.org/127.0.0.1#5335 -ipset=/tug.org/gfwlist -server=/sandisk.hk/127.0.0.1#5335 -ipset=/sandisk.hk/gfwlist -server=/disneypeoplesurveys.com/127.0.0.1#5335 -ipset=/disneypeoplesurveys.com/gfwlist -server=/intel.co.cr/127.0.0.1#5335 -ipset=/intel.co.cr/gfwlist -server=/sandisk.de/127.0.0.1#5335 -ipset=/sandisk.de/gfwlist -server=/google.pl/127.0.0.1#5335 -ipset=/google.pl/gfwlist -server=/sandisk.com.tw/127.0.0.1#5335 -ipset=/sandisk.com.tw/gfwlist -server=/sandisk.com.tr/127.0.0.1#5335 -ipset=/sandisk.com.tr/gfwlist -server=/sandisk.com.br/127.0.0.1#5335 -ipset=/sandisk.com.br/gfwlist -server=/sandisk.com.au/127.0.0.1#5335 -ipset=/sandisk.com.au/gfwlist -server=/rakuten.com/127.0.0.1#5335 -ipset=/rakuten.com/gfwlist -server=/intel.com.pr/127.0.0.1#5335 -ipset=/intel.com.pr/gfwlist -server=/dreamforce.com/127.0.0.1#5335 -ipset=/dreamforce.com/gfwlist -server=/beatsbydresstudio.com/127.0.0.1#5335 -ipset=/beatsbydresstudio.com/gfwlist -server=/cheapbeatssale4u.com/127.0.0.1#5335 -ipset=/cheapbeatssale4u.com/gfwlist -server=/hipzoom.net/127.0.0.1#5335 -ipset=/hipzoom.net/gfwlist -server=/sandisk.com/127.0.0.1#5335 -ipset=/sandisk.com/gfwlist -server=/nist.gov/127.0.0.1#5335 -ipset=/nist.gov/gfwlist -server=/jqueryui.com/127.0.0.1#5335 -ipset=/jqueryui.com/gfwlist -server=/azurecosmos.net/127.0.0.1#5335 -ipset=/azurecosmos.net/gfwlist -server=/lin.ee/127.0.0.1#5335 -ipset=/lin.ee/gfwlist -server=/hpstorethailand.com/127.0.0.1#5335 -ipset=/hpstorethailand.com/gfwlist -server=/nvidia.co.in/127.0.0.1#5335 -ipset=/nvidia.co.in/gfwlist -server=/vkuservideo.net/127.0.0.1#5335 -ipset=/vkuservideo.net/gfwlist -server=/vkuserlive.net/127.0.0.1#5335 -ipset=/vkuserlive.net/gfwlist -server=/vkuseraudio.com/127.0.0.1#5335 -ipset=/vkuseraudio.com/gfwlist -server=/database.asahi.com/127.0.0.1#5335 -ipset=/database.asahi.com/gfwlist -server=/vkmessenger.com/127.0.0.1#5335 -ipset=/vkmessenger.com/gfwlist -server=/vklive.app/127.0.0.1#5335 -ipset=/vklive.app/gfwlist -server=/vkgo.app/127.0.0.1#5335 -ipset=/vkgo.app/gfwlist -server=/monsterbeatssydneyaustralia.com/127.0.0.1#5335 -ipset=/monsterbeatssydneyaustralia.com/gfwlist -server=/vkcache.com/127.0.0.1#5335 -ipset=/vkcache.com/gfwlist -server=/myavfun.com/127.0.0.1#5335 -ipset=/myavfun.com/gfwlist -server=/intel.sx/127.0.0.1#5335 -ipset=/intel.sx/gfwlist -server=/blogspot.sn/127.0.0.1#5335 -ipset=/blogspot.sn/gfwlist -server=/historyofdota.net/127.0.0.1#5335 -ipset=/historyofdota.net/gfwlist -server=/foxacrossamerica.com/127.0.0.1#5335 -ipset=/foxacrossamerica.com/gfwlist -server=/vanish.co.za/127.0.0.1#5335 -ipset=/vanish.co.za/gfwlist -server=/costco.com/127.0.0.1#5335 -ipset=/costco.com/gfwlist -server=/vk.design/127.0.0.1#5335 -ipset=/vk.design/gfwlist -server=/alfera.com.my/127.0.0.1#5335 -ipset=/alfera.com.my/gfwlist -server=/youtube.no/127.0.0.1#5335 -ipset=/youtube.no/gfwlist -server=/vk.com/127.0.0.1#5335 -ipset=/vk.com/gfwlist -server=/bgr.in/127.0.0.1#5335 -ipset=/bgr.in/gfwlist -server=/vk-cdn.me/127.0.0.1#5335 -ipset=/vk-cdn.me/gfwlist -server=/woolite.com/127.0.0.1#5335 -ipset=/woolite.com/gfwlist -server=/businessweekmag.com/127.0.0.1#5335 -ipset=/businessweekmag.com/gfwlist -server=/fox23.com/127.0.0.1#5335 -ipset=/fox23.com/gfwlist -server=/xo.com/127.0.0.1#5335 -ipset=/xo.com/gfwlist -server=/huobitoken.com/127.0.0.1#5335 -ipset=/huobitoken.com/gfwlist -server=/vzw.com/127.0.0.1#5335 -ipset=/vzw.com/gfwlist -server=/ebay.lt/127.0.0.1#5335 -ipset=/ebay.lt/gfwlist -server=/verizonwireless.com/127.0.0.1#5335 -ipset=/verizonwireless.com/gfwlist -server=/nmbmw.com/127.0.0.1#5335 -ipset=/nmbmw.com/gfwlist -server=/appleid-iclou.com/127.0.0.1#5335 -ipset=/appleid-iclou.com/gfwlist -server=/pokemonhome.com/127.0.0.1#5335 -ipset=/pokemonhome.com/gfwlist -server=/iphone-yh.com/127.0.0.1#5335 -ipset=/iphone-yh.com/gfwlist -server=/logicool.co.jp/127.0.0.1#5335 -ipset=/logicool.co.jp/gfwlist -server=/verizonbusinessfios.com/127.0.0.1#5335 -ipset=/verizonbusinessfios.com/gfwlist -server=/hp-invent.com/127.0.0.1#5335 -ipset=/hp-invent.com/gfwlist -server=/iphone4.com/127.0.0.1#5335 -ipset=/iphone4.com/gfwlist -server=/volvotrucks.lv/127.0.0.1#5335 -ipset=/volvotrucks.lv/gfwlist -server=/uplynk.com/127.0.0.1#5335 -ipset=/uplynk.com/gfwlist -server=/static-verizon.com/127.0.0.1#5335 -ipset=/static-verizon.com/gfwlist -server=/ouroath.com/127.0.0.1#5335 -ipset=/ouroath.com/gfwlist -server=/facegbook.com/127.0.0.1#5335 -ipset=/facegbook.com/gfwlist -server=/bmw-plant-munich.com/127.0.0.1#5335 -ipset=/bmw-plant-munich.com/gfwlist -server=/oath.com/127.0.0.1#5335 -ipset=/oath.com/gfwlist -server=/gemfury.com/127.0.0.1#5335 -ipset=/gemfury.com/gfwlist -server=/uber.com/127.0.0.1#5335 -ipset=/uber.com/gfwlist -server=/bmw-connecteddrive.ie/127.0.0.1#5335 -ipset=/bmw-connecteddrive.ie/gfwlist -server=/twttr.com/127.0.0.1#5335 -ipset=/twttr.com/gfwlist -server=/twtrdns.net/127.0.0.1#5335 -ipset=/twtrdns.net/gfwlist -server=/paypal-mainstreet.net/127.0.0.1#5335 -ipset=/paypal-mainstreet.net/gfwlist -server=/mini-georgia.com/127.0.0.1#5335 -ipset=/mini-georgia.com/gfwlist -server=/amazon.com.br/127.0.0.1#5335 -ipset=/amazon.com.br/gfwlist -server=/hpfeedback.com/127.0.0.1#5335 -ipset=/hpfeedback.com/gfwlist -server=/twitteroauth.com/127.0.0.1#5335 -ipset=/twitteroauth.com/gfwlist -server=/leagueoflegends.net/127.0.0.1#5335 -ipset=/leagueoflegends.net/gfwlist -server=/twitterinc.com/127.0.0.1#5335 -ipset=/twitterinc.com/gfwlist -server=/youtube.al/127.0.0.1#5335 -ipset=/youtube.al/gfwlist -server=/hkcitizenmedia.com/127.0.0.1#5335 -ipset=/hkcitizenmedia.com/gfwlist -server=/twitter.com/127.0.0.1#5335 -ipset=/twitter.com/gfwlist -server=/webex.ca/127.0.0.1#5335 -ipset=/webex.ca/gfwlist -server=/primevideo.cc/127.0.0.1#5335 -ipset=/primevideo.cc/gfwlist -server=/twitpic.com/127.0.0.1#5335 -ipset=/twitpic.com/gfwlist -server=/alterauserforums.net/127.0.0.1#5335 -ipset=/alterauserforums.net/gfwlist -server=/twimg.com/127.0.0.1#5335 -ipset=/twimg.com/gfwlist -server=/ebay.de/127.0.0.1#5335 -ipset=/ebay.de/gfwlist -server=/tellapart.com/127.0.0.1#5335 -ipset=/tellapart.com/gfwlist -server=/ameblo.jp/127.0.0.1#5335 -ipset=/ameblo.jp/gfwlist -server=/t.co/127.0.0.1#5335 -ipset=/t.co/gfwlist -server=/pscp.tv/127.0.0.1#5335 -ipset=/pscp.tv/gfwlist -server=/ads-twitter.com/127.0.0.1#5335 -ipset=/ads-twitter.com/gfwlist -server=/yshyqxx.com/127.0.0.1#5335 -ipset=/yshyqxx.com/gfwlist -server=/softbankrobotics.com/127.0.0.1#5335 -ipset=/softbankrobotics.com/gfwlist -server=/miniso.pe/127.0.0.1#5335 -ipset=/miniso.pe/gfwlist -server=/openstreetmap.org/127.0.0.1#5335 -ipset=/openstreetmap.org/gfwlist -server=/servicetalk.io/127.0.0.1#5335 -ipset=/servicetalk.io/gfwlist -server=/heroku-app.com/127.0.0.1#5335 -ipset=/heroku-app.com/gfwlist -server=/mini-connected.ee/127.0.0.1#5335 -ipset=/mini-connected.ee/gfwlist -server=/sonyprotechnosupport.co.jp/127.0.0.1#5335 -ipset=/sonyprotechnosupport.co.jp/gfwlist -server=/newyorker.com/127.0.0.1#5335 -ipset=/newyorker.com/gfwlist -server=/unityads.unity3d.com/127.0.0.1#5335 -ipset=/unityads.unity3d.com/gfwlist -server=/beatsbydreinexpensive.com/127.0.0.1#5335 -ipset=/beatsbydreinexpensive.com/gfwlist -server=/softbank-telecom.net/127.0.0.1#5335 -ipset=/softbank-telecom.net/gfwlist -server=/alphera.com.my/127.0.0.1#5335 -ipset=/alphera.com.my/gfwlist -server=/sonyglobalsolutions.jp/127.0.0.1#5335 -ipset=/sonyglobalsolutions.jp/gfwlist -server=/bmw.com.cy/127.0.0.1#5335 -ipset=/bmw.com.cy/gfwlist -server=/sonydna.com/127.0.0.1#5335 -ipset=/sonydna.com/gfwlist -server=/starbucksrtd.com/127.0.0.1#5335 -ipset=/starbucksrtd.com/gfwlist -server=/rb-crisis.com/127.0.0.1#5335 -ipset=/rb-crisis.com/gfwlist -server=/sony.si/127.0.0.1#5335 -ipset=/sony.si/gfwlist -server=/sony.se/127.0.0.1#5335 -ipset=/sony.se/gfwlist -server=/uug25.com/127.0.0.1#5335 -ipset=/uug25.com/gfwlist -server=/monsterbeatsalestore.com/127.0.0.1#5335 -ipset=/monsterbeatsalestore.com/gfwlist -server=/youtube.com.sa/127.0.0.1#5335 -ipset=/youtube.com.sa/gfwlist -server=/onedrive.live.com/127.0.0.1#5335 -ipset=/onedrive.live.com/gfwlist -server=/pypi.org/127.0.0.1#5335 -ipset=/pypi.org/gfwlist -server=/volvotrucks.mk/127.0.0.1#5335 -ipset=/volvotrucks.mk/gfwlist -server=/bestbuybusiness.com/127.0.0.1#5335 -ipset=/bestbuybusiness.com/gfwlist -server=/alphabet.eu/127.0.0.1#5335 -ipset=/alphabet.eu/gfwlist -server=/sony.net/127.0.0.1#5335 -ipset=/sony.net/gfwlist -server=/worldemojiawards.com/127.0.0.1#5335 -ipset=/worldemojiawards.com/gfwlist -server=/dvdstudiopro.com/127.0.0.1#5335 -ipset=/dvdstudiopro.com/gfwlist -server=/crysis.jp/127.0.0.1#5335 -ipset=/crysis.jp/gfwlist -server=/readthedocs-hosted.com/127.0.0.1#5335 -ipset=/readthedocs-hosted.com/gfwlist -server=/ap.org/127.0.0.1#5335 -ipset=/ap.org/gfwlist -server=/cbscorporation.com/127.0.0.1#5335 -ipset=/cbscorporation.com/gfwlist -server=/marveldimensionofheroes.com/127.0.0.1#5335 -ipset=/marveldimensionofheroes.com/gfwlist -server=/overcast.fm/127.0.0.1#5335 -ipset=/overcast.fm/gfwlist -server=/sony.gr/127.0.0.1#5335 -ipset=/sony.gr/gfwlist -server=/findmybeats.com/127.0.0.1#5335 -ipset=/findmybeats.com/gfwlist -server=/vimeo-staging.com/127.0.0.1#5335 -ipset=/vimeo-staging.com/gfwlist -server=/fbinc.com/127.0.0.1#5335 -ipset=/fbinc.com/gfwlist -server=/dkk37.com/127.0.0.1#5335 -ipset=/dkk37.com/gfwlist -server=/sony.fr/127.0.0.1#5335 -ipset=/sony.fr/gfwlist -server=/paypalcommunity.org/127.0.0.1#5335 -ipset=/paypalcommunity.org/gfwlist -server=/sony.eu/127.0.0.1#5335 -ipset=/sony.eu/gfwlist -server=/vjmedia.com.hk/127.0.0.1#5335 -ipset=/vjmedia.com.hk/gfwlist -server=/hkgolden.com/127.0.0.1#5335 -ipset=/hkgolden.com/gfwlist -server=/bridgestone-plt-eng.com/127.0.0.1#5335 -ipset=/bridgestone-plt-eng.com/gfwlist -server=/miniso.ma/127.0.0.1#5335 -ipset=/miniso.ma/gfwlist -server=/visualarts.gr.jp/127.0.0.1#5335 -ipset=/visualarts.gr.jp/gfwlist -server=/sony.es/127.0.0.1#5335 -ipset=/sony.es/gfwlist -server=/sony.ee/127.0.0.1#5335 -ipset=/sony.ee/gfwlist -server=/sony.de/127.0.0.1#5335 -ipset=/sony.de/gfwlist -server=/sony.com.vn/127.0.0.1#5335 -ipset=/sony.com.vn/gfwlist -server=/sony.com.tw/127.0.0.1#5335 -ipset=/sony.com.tw/gfwlist -server=/sony.com.tr/127.0.0.1#5335 -ipset=/sony.com.tr/gfwlist -server=/msturing.org/127.0.0.1#5335 -ipset=/msturing.org/gfwlist -server=/sony.com.sv/127.0.0.1#5335 -ipset=/sony.com.sv/gfwlist -server=/yahoo.com.hk/127.0.0.1#5335 -ipset=/yahoo.com.hk/gfwlist -server=/getdirect.tv/127.0.0.1#5335 -ipset=/getdirect.tv/gfwlist -server=/sony.com.ph/127.0.0.1#5335 -ipset=/sony.com.ph/gfwlist -server=/sony.com.pa/127.0.0.1#5335 -ipset=/sony.com.pa/gfwlist -server=/ebayseller.com/127.0.0.1#5335 -ipset=/ebayseller.com/gfwlist -server=/adobeaemcloud.com/127.0.0.1#5335 -ipset=/adobeaemcloud.com/gfwlist -server=/paypal.com/127.0.0.1#5335 -ipset=/paypal.com/gfwlist -server=/sony.com.my/127.0.0.1#5335 -ipset=/sony.com.my/gfwlist -server=/disqusservice.com/127.0.0.1#5335 -ipset=/disqusservice.com/gfwlist -server=/scholar.google.com.gt/127.0.0.1#5335 -ipset=/scholar.google.com.gt/gfwlist -server=/easportsworld.com/127.0.0.1#5335 -ipset=/easportsworld.com/gfwlist -server=/starbuckspoq.com/127.0.0.1#5335 -ipset=/starbuckspoq.com/gfwlist -server=/nikeseason.com/127.0.0.1#5335 -ipset=/nikeseason.com/gfwlist -server=/akamaized-staging.net/127.0.0.1#5335 -ipset=/akamaized-staging.net/gfwlist -server=/twinprime.com/127.0.0.1#5335 -ipset=/twinprime.com/gfwlist -server=/sony.com.hk/127.0.0.1#5335 -ipset=/sony.com.hk/gfwlist -server=/intel.tv/127.0.0.1#5335 -ipset=/intel.tv/gfwlist -server=/facebookads.com/127.0.0.1#5335 -ipset=/facebookads.com/gfwlist -server=/sony.com.au/127.0.0.1#5335 -ipset=/sony.com.au/gfwlist -server=/goolge.com/127.0.0.1#5335 -ipset=/goolge.com/gfwlist -server=/adidas.be/127.0.0.1#5335 -ipset=/adidas.be/gfwlist -server=/sony.com/127.0.0.1#5335 -ipset=/sony.com/gfwlist -server=/sony.co.uk/127.0.0.1#5335 -ipset=/sony.co.uk/gfwlist -server=/googleventures.com/127.0.0.1#5335 -ipset=/googleventures.com/gfwlist -server=/buck.build/127.0.0.1#5335 -ipset=/buck.build/gfwlist -server=/wordpress.tv/127.0.0.1#5335 -ipset=/wordpress.tv/gfwlist -server=/beatsheadphonesforcheap.net/127.0.0.1#5335 -ipset=/beatsheadphonesforcheap.net/gfwlist -server=/sony.co.th/127.0.0.1#5335 -ipset=/sony.co.th/gfwlist -server=/sony.co.nz/127.0.0.1#5335 -ipset=/sony.co.nz/gfwlist -server=/sony.co.jp/127.0.0.1#5335 -ipset=/sony.co.jp/gfwlist -server=/sony.co.in/127.0.0.1#5335 -ipset=/sony.co.in/gfwlist -server=/applecare.eu/127.0.0.1#5335 -ipset=/applecare.eu/gfwlist -server=/sony.co.id/127.0.0.1#5335 -ipset=/sony.co.id/gfwlist -server=/cloudinsights.com/127.0.0.1#5335 -ipset=/cloudinsights.com/gfwlist -server=/sony.co.cr/127.0.0.1#5335 -ipset=/sony.co.cr/gfwlist -server=/bmwvalueservice.com/127.0.0.1#5335 -ipset=/bmwvalueservice.com/gfwlist -server=/edgefonts.net/127.0.0.1#5335 -ipset=/edgefonts.net/gfwlist -server=/visa.com.vc/127.0.0.1#5335 -ipset=/visa.com.vc/gfwlist -server=/sony.ch/127.0.0.1#5335 -ipset=/sony.ch/gfwlist -server=/finish.co.za/127.0.0.1#5335 -ipset=/finish.co.za/gfwlist -server=/sony.bg/127.0.0.1#5335 -ipset=/sony.bg/gfwlist -server=/webex.co.jp/127.0.0.1#5335 -ipset=/webex.co.jp/gfwlist -server=/exhentai.org/127.0.0.1#5335 -ipset=/exhentai.org/gfwlist -server=/touchsmartpc.net/127.0.0.1#5335 -ipset=/touchsmartpc.net/gfwlist -server=/sony.ba/127.0.0.1#5335 -ipset=/sony.ba/gfwlist -server=/beatsbydresales.us/127.0.0.1#5335 -ipset=/beatsbydresales.us/gfwlist -server=/ftcdn.net/127.0.0.1#5335 -ipset=/ftcdn.net/gfwlist -server=/sony.at/127.0.0.1#5335 -ipset=/sony.at/gfwlist -server=/canon.pt/127.0.0.1#5335 -ipset=/canon.pt/gfwlist -server=/canon.fi/127.0.0.1#5335 -ipset=/canon.fi/gfwlist -server=/globalsign.ch/127.0.0.1#5335 -ipset=/globalsign.ch/gfwlist -server=/sony-promotion.eu/127.0.0.1#5335 -ipset=/sony-promotion.eu/gfwlist -server=/bitstream.com/127.0.0.1#5335 -ipset=/bitstream.com/gfwlist -server=/thefoxnation.com/127.0.0.1#5335 -ipset=/thefoxnation.com/gfwlist -server=/sony-mea.com/127.0.0.1#5335 -ipset=/sony-mea.com/gfwlist -server=/sony-latin.com/127.0.0.1#5335 -ipset=/sony-latin.com/gfwlist -server=/msnewskids.org/127.0.0.1#5335 -ipset=/msnewskids.org/gfwlist -server=/sony-africa.com/127.0.0.1#5335 -ipset=/sony-africa.com/gfwlist -server=/pearsonclinical.de/127.0.0.1#5335 -ipset=/pearsonclinical.de/gfwlist -server=/ibm.net/127.0.0.1#5335 -ipset=/ibm.net/gfwlist -server=/paxlicense.org/127.0.0.1#5335 -ipset=/paxlicense.org/gfwlist -server=/scholar.google.fr/127.0.0.1#5335 -ipset=/scholar.google.fr/gfwlist -server=/sourcingforebay.com.cn/127.0.0.1#5335 -ipset=/sourcingforebay.com.cn/gfwlist -server=/baterias-hp.com/127.0.0.1#5335 -ipset=/baterias-hp.com/gfwlist -server=/wixsite.com/127.0.0.1#5335 -ipset=/wixsite.com/gfwlist -server=/bmw.kg/127.0.0.1#5335 -ipset=/bmw.kg/gfwlist -server=/ipad.de/127.0.0.1#5335 -ipset=/ipad.de/gfwlist -server=/applestore.com.eg/127.0.0.1#5335 -ipset=/applestore.com.eg/gfwlist -server=/nexitally.com/127.0.0.1#5335 -ipset=/nexitally.com/gfwlist -server=/snapads.com/127.0.0.1#5335 -ipset=/snapads.com/gfwlist -server=/snap-dev.net/127.0.0.1#5335 -ipset=/snap-dev.net/gfwlist -server=/sc-cdn.net/127.0.0.1#5335 -ipset=/sc-cdn.net/gfwlist -server=/cloudappsecurity.com/127.0.0.1#5335 -ipset=/cloudappsecurity.com/gfwlist -server=/buyfast-paysmart.net/127.0.0.1#5335 -ipset=/buyfast-paysmart.net/gfwlist -server=/smartonerobotics.com/127.0.0.1#5335 -ipset=/smartonerobotics.com/gfwlist -server=/epochweekly.com/127.0.0.1#5335 -ipset=/epochweekly.com/gfwlist -server=/facebooknude.com/127.0.0.1#5335 -ipset=/facebooknude.com/gfwlist -server=/smartoneholdings.com/127.0.0.1#5335 -ipset=/smartoneholdings.com/gfwlist -server=/nevex.com/127.0.0.1#5335 -ipset=/nevex.com/gfwlist -server=/youtube.es/127.0.0.1#5335 -ipset=/youtube.es/gfwlist -server=/s-rewards.hk/127.0.0.1#5335 -ipset=/s-rewards.hk/gfwlist -server=/ip73.com/127.0.0.1#5335 -ipset=/ip73.com/gfwlist -server=/paypal-activate.org/127.0.0.1#5335 -ipset=/paypal-activate.org/gfwlist -server=/hkcircleapp.com/127.0.0.1#5335 -ipset=/hkcircleapp.com/gfwlist -server=/miniso-nz.com/127.0.0.1#5335 -ipset=/miniso-nz.com/gfwlist -server=/faceook.com/127.0.0.1#5335 -ipset=/faceook.com/gfwlist -server=/ebaytechblog.com/127.0.0.1#5335 -ipset=/ebaytechblog.com/gfwlist -server=/barkadahansasmartone.com/127.0.0.1#5335 -ipset=/barkadahansasmartone.com/gfwlist -server=/leagueoflegends.kr/127.0.0.1#5335 -ipset=/leagueoflegends.kr/gfwlist -server=/nest.com/127.0.0.1#5335 -ipset=/nest.com/gfwlist -server=/samsungknox.com/127.0.0.1#5335 -ipset=/samsungknox.com/gfwlist -server=/bingvisualsearch.com/127.0.0.1#5335 -ipset=/bingvisualsearch.com/gfwlist -server=/samsunggalaxyfriends.com/127.0.0.1#5335 -ipset=/samsunggalaxyfriends.com/gfwlist -server=/huffingtonpost.jp/127.0.0.1#5335 -ipset=/huffingtonpost.jp/gfwlist -server=/youtube.com.sv/127.0.0.1#5335 -ipset=/youtube.com.sv/gfwlist -server=/samsungcloud.com/127.0.0.1#5335 -ipset=/samsungcloud.com/gfwlist -server=/samsungapps.com/127.0.0.1#5335 -ipset=/samsungapps.com/gfwlist -server=/samsung.com/127.0.0.1#5335 -ipset=/samsung.com/gfwlist -server=/microsoft.cl/127.0.0.1#5335 -ipset=/microsoft.cl/gfwlist -server=/taylorandfrancis.com/127.0.0.1#5335 -ipset=/taylorandfrancis.com/gfwlist -server=/466453.com/127.0.0.1#5335 -ipset=/466453.com/gfwlist -server=/theguardian.com/127.0.0.1#5335 -ipset=/theguardian.com/gfwlist -server=/x.co/127.0.0.1#5335 -ipset=/x.co/gfwlist -server=/alphabet.uk/127.0.0.1#5335 -ipset=/alphabet.uk/gfwlist -server=/bloomberg.tv/127.0.0.1#5335 -ipset=/bloomberg.tv/gfwlist -server=/game-platform.net/127.0.0.1#5335 -ipset=/game-platform.net/gfwlist -server=/ebay.ch/127.0.0.1#5335 -ipset=/ebay.ch/gfwlist -server=/asp.net/127.0.0.1#5335 -ipset=/asp.net/gfwlist -server=/hackyourconsole.com/127.0.0.1#5335 -ipset=/hackyourconsole.com/gfwlist -server=/walmartimages.com/127.0.0.1#5335 -ipset=/walmartimages.com/gfwlist -server=/netacad.net/127.0.0.1#5335 -ipset=/netacad.net/gfwlist -server=/steelbrick.com/127.0.0.1#5335 -ipset=/steelbrick.com/gfwlist -server=/social.com/127.0.0.1#5335 -ipset=/social.com/gfwlist -server=/site.com/127.0.0.1#5335 -ipset=/site.com/gfwlist -server=/placesdocs.com/127.0.0.1#5335 -ipset=/placesdocs.com/gfwlist -server=/vimeogoods.com/127.0.0.1#5335 -ipset=/vimeogoods.com/gfwlist -server=/ciscokinetic.com/127.0.0.1#5335 -ipset=/ciscokinetic.com/gfwlist -server=/discord.gg/127.0.0.1#5335 -ipset=/discord.gg/gfwlist -server=/dropboxforums.com/127.0.0.1#5335 -ipset=/dropboxforums.com/gfwlist -server=/g.co/127.0.0.1#5335 -ipset=/g.co/gfwlist -server=/sfdcstatic.com/127.0.0.1#5335 -ipset=/sfdcstatic.com/gfwlist -server=/sequence.com/127.0.0.1#5335 -ipset=/sequence.com/gfwlist -server=/salesforcemarketingcloud.com/127.0.0.1#5335 -ipset=/salesforcemarketingcloud.com/gfwlist -server=/lolfanart.net/127.0.0.1#5335 -ipset=/lolfanart.net/gfwlist -server=/salesforceliveagent.com/127.0.0.1#5335 -ipset=/salesforceliveagent.com/gfwlist -server=/relateiq.com/127.0.0.1#5335 -ipset=/relateiq.com/gfwlist -server=/iphoto.wang/127.0.0.1#5335 -ipset=/iphoto.wang/gfwlist -server=/welcometobestbuy.ca/127.0.0.1#5335 -ipset=/welcometobestbuy.ca/gfwlist -server=/ingka.com/127.0.0.1#5335 -ipset=/ingka.com/gfwlist -server=/bmw.az/127.0.0.1#5335 -ipset=/bmw.az/gfwlist -server=/quotable.com/127.0.0.1#5335 -ipset=/quotable.com/gfwlist -server=/pardot.com/127.0.0.1#5335 -ipset=/pardot.com/gfwlist -server=/disneyme.com/127.0.0.1#5335 -ipset=/disneyme.com/gfwlist -server=/force.com/127.0.0.1#5335 -ipset=/force.com/gfwlist -server=/bestbuytradein.com/127.0.0.1#5335 -ipset=/bestbuytradein.com/gfwlist -server=/exacttarget.com/127.0.0.1#5335 -ipset=/exacttarget.com/gfwlist -server=/paypalcorp.com/127.0.0.1#5335 -ipset=/paypalcorp.com/gfwlist -server=/vmwidm.com/127.0.0.1#5335 -ipset=/vmwidm.com/gfwlist -server=/desk.com/127.0.0.1#5335 -ipset=/desk.com/gfwlist -server=/tellmewhygame.com/127.0.0.1#5335 -ipset=/tellmewhygame.com/gfwlist -server=/demandware.com/127.0.0.1#5335 -ipset=/demandware.com/gfwlist -server=/bridge-studio.co.uk/127.0.0.1#5335 -ipset=/bridge-studio.co.uk/gfwlist -server=/data.com/127.0.0.1#5335 -ipset=/data.com/gfwlist -server=/zohostatic.in/127.0.0.1#5335 -ipset=/zohostatic.in/gfwlist -server=/cloudcraze.com/127.0.0.1#5335 -ipset=/cloudcraze.com/gfwlist -server=/chatter.com/127.0.0.1#5335 -ipset=/chatter.com/gfwlist -server=/needforspeedproven.com/127.0.0.1#5335 -ipset=/needforspeedproven.com/gfwlist -server=/pinterest.in/127.0.0.1#5335 -ipset=/pinterest.in/gfwlist -server=/vector.im/127.0.0.1#5335 -ipset=/vector.im/gfwlist -server=/startpage.com/127.0.0.1#5335 -ipset=/startpage.com/gfwlist -server=/bmw.ro/127.0.0.1#5335 -ipset=/bmw.ro/gfwlist -server=/beyondcore.com/127.0.0.1#5335 -ipset=/beyondcore.com/gfwlist -server=/appexchange.com/127.0.0.1#5335 -ipset=/appexchange.com/gfwlist -server=/appcloud.com/127.0.0.1#5335 -ipset=/appcloud.com/gfwlist -server=/respawnbyrazer.com/127.0.0.1#5335 -ipset=/respawnbyrazer.com/gfwlist -server=/razerzone.jp/127.0.0.1#5335 -ipset=/razerzone.jp/gfwlist -server=/bmwsfl.com/127.0.0.1#5335 -ipset=/bmwsfl.com/gfwlist -server=/razerzone.com/127.0.0.1#5335 -ipset=/razerzone.com/gfwlist -server=/visadpsonline.us/127.0.0.1#5335 -ipset=/visadpsonline.us/gfwlist -server=/beatsbydrdre-store.com/127.0.0.1#5335 -ipset=/beatsbydrdre-store.com/gfwlist -server=/imod.com/127.0.0.1#5335 -ipset=/imod.com/gfwlist -server=/uplinq.com/127.0.0.1#5335 -ipset=/uplinq.com/gfwlist -server=/snapdragonbooth.com/127.0.0.1#5335 -ipset=/snapdragonbooth.com/gfwlist -server=/alphabet.co.uk/127.0.0.1#5335 -ipset=/alphabet.co.uk/gfwlist -server=/snapdragon.cn/127.0.0.1#5335 -ipset=/snapdragon.cn/gfwlist -server=/thesun.ie/127.0.0.1#5335 -ipset=/thesun.ie/gfwlist -server=/qualphone.com/127.0.0.1#5335 -ipset=/qualphone.com/gfwlist -server=/qualcommventures.cn/127.0.0.1#5335 -ipset=/qualcommventures.cn/gfwlist -server=/qualcommretail.com/127.0.0.1#5335 -ipset=/qualcommretail.com/gfwlist -server=/qualcommmea.com/127.0.0.1#5335 -ipset=/qualcommmea.com/gfwlist -server=/creativecommons.org/127.0.0.1#5335 -ipset=/creativecommons.org/gfwlist -server=/volvotrucks.at/127.0.0.1#5335 -ipset=/volvotrucks.at/gfwlist -server=/adobesc.com/127.0.0.1#5335 -ipset=/adobesc.com/gfwlist -server=/cups.org/127.0.0.1#5335 -ipset=/cups.org/gfwlist -server=/qualcomm.fr/127.0.0.1#5335 -ipset=/qualcomm.fr/gfwlist -server=/ieee-uffc.org/127.0.0.1#5335 -ipset=/ieee-uffc.org/gfwlist -server=/qualcomm.de/127.0.0.1#5335 -ipset=/qualcomm.de/gfwlist -server=/fbsbx.net/127.0.0.1#5335 -ipset=/fbsbx.net/gfwlist -server=/applestore.ch/127.0.0.1#5335 -ipset=/applestore.ch/gfwlist -server=/monsterdrebeats-usa.com/127.0.0.1#5335 -ipset=/monsterdrebeats-usa.com/gfwlist -server=/foxnewsopinion.com/127.0.0.1#5335 -ipset=/foxnewsopinion.com/gfwlist -server=/stackexchange.com/127.0.0.1#5335 -ipset=/stackexchange.com/gfwlist -server=/seamonkey-project.org/127.0.0.1#5335 -ipset=/seamonkey-project.org/gfwlist -server=/bmw.com.sg/127.0.0.1#5335 -ipset=/bmw.com.sg/gfwlist -server=/briantreepayments.net/127.0.0.1#5335 -ipset=/briantreepayments.net/gfwlist -server=/qualcomm.co.kr/127.0.0.1#5335 -ipset=/qualcomm.co.kr/gfwlist -server=/freessl.com/127.0.0.1#5335 -ipset=/freessl.com/gfwlist -server=/intel.io/127.0.0.1#5335 -ipset=/intel.io/gfwlist -server=/qualcomm.co.in/127.0.0.1#5335 -ipset=/qualcomm.co.in/gfwlist -server=/qualcomm.co.id/127.0.0.1#5335 -ipset=/qualcomm.co.id/gfwlist -server=/freewechat.com/127.0.0.1#5335 -ipset=/freewechat.com/gfwlist -server=/minibrossard.com/127.0.0.1#5335 -ipset=/minibrossard.com/gfwlist -server=/qprize.com/127.0.0.1#5335 -ipset=/qprize.com/gfwlist -server=/pixtronix.com/127.0.0.1#5335 -ipset=/pixtronix.com/gfwlist -server=/meetsmartbook.com/127.0.0.1#5335 -ipset=/meetsmartbook.com/gfwlist -server=/iskoot.com/127.0.0.1#5335 -ipset=/iskoot.com/gfwlist -server=/brewmp.com/127.0.0.1#5335 -ipset=/brewmp.com/gfwlist -server=/mini.com.ph/127.0.0.1#5335 -ipset=/mini.com.ph/gfwlist -server=/johren.net/127.0.0.1#5335 -ipset=/johren.net/gfwlist -server=/shopifycdn.com/127.0.0.1#5335 -ipset=/shopifycdn.com/gfwlist -server=/dailymail.dk/127.0.0.1#5335 -ipset=/dailymail.dk/gfwlist -server=/hellosmartbook.com/127.0.0.1#5335 -ipset=/hellosmartbook.com/gfwlist -server=/echosign.com/127.0.0.1#5335 -ipset=/echosign.com/gfwlist -server=/haskellstack.org/127.0.0.1#5335 -ipset=/haskellstack.org/gfwlist -server=/gobianywhere.com/127.0.0.1#5335 -ipset=/gobianywhere.com/gfwlist -server=/berkanawireless.com/127.0.0.1#5335 -ipset=/berkanawireless.com/gfwlist -server=/trmini.com/127.0.0.1#5335 -ipset=/trmini.com/gfwlist -server=/bmw.com.ec/127.0.0.1#5335 -ipset=/bmw.com.ec/gfwlist -server=/wwwapple.net/127.0.0.1#5335 -ipset=/wwwapple.net/gfwlist -server=/fqcebook.com/127.0.0.1#5335 -ipset=/fqcebook.com/gfwlist -server=/pearsonclinical.co.uk/127.0.0.1#5335 -ipset=/pearsonclinical.co.uk/gfwlist -server=/hktshop.com/127.0.0.1#5335 -ipset=/hktshop.com/gfwlist -server=/dentalhypotheses.com/127.0.0.1#5335 -ipset=/dentalhypotheses.com/gfwlist -server=/hkt.com/127.0.0.1#5335 -ipset=/hkt.com/gfwlist -server=/hkt-eye.com/127.0.0.1#5335 -ipset=/hkt-eye.com/gfwlist -server=/hkt-enterprise.com/127.0.0.1#5335 -ipset=/hkt-enterprise.com/gfwlist -server=/researchkit.org/127.0.0.1#5335 -ipset=/researchkit.org/gfwlist -server=/esmarthealth.com/127.0.0.1#5335 -ipset=/esmarthealth.com/gfwlist -server=/edgedatg.com/127.0.0.1#5335 -ipset=/edgedatg.com/gfwlist -server=/kindle.co.uk/127.0.0.1#5335 -ipset=/kindle.co.uk/gfwlist -server=/mini-me.com/127.0.0.1#5335 -ipset=/mini-me.com/gfwlist -server=/brightcove.services/127.0.0.1#5335 -ipset=/brightcove.services/gfwlist -server=/hpuniversity.info/127.0.0.1#5335 -ipset=/hpuniversity.info/gfwlist -server=/bmw-clubs-international.com/127.0.0.1#5335 -ipset=/bmw-clubs-international.com/gfwlist -server=/oup.com/127.0.0.1#5335 -ipset=/oup.com/gfwlist -server=/nine.com.au/127.0.0.1#5335 -ipset=/nine.com.au/gfwlist -server=/panasonic.com/127.0.0.1#5335 -ipset=/panasonic.com/gfwlist -server=/att-rsvp.com/127.0.0.1#5335 -ipset=/att-rsvp.com/gfwlist -server=/sun.com/127.0.0.1#5335 -ipset=/sun.com/gfwlist -server=/bmw-connecteddrive.jp/127.0.0.1#5335 -ipset=/bmw-connecteddrive.jp/gfwlist -server=/covid19-rx.org/127.0.0.1#5335 -ipset=/covid19-rx.org/gfwlist -server=/avinetworks.com/127.0.0.1#5335 -ipset=/avinetworks.com/gfwlist -server=/oracleimg.com/127.0.0.1#5335 -ipset=/oracleimg.com/gfwlist -server=/oraclecloud.com/127.0.0.1#5335 -ipset=/oraclecloud.com/gfwlist -server=/bmw-ksa.com/127.0.0.1#5335 -ipset=/bmw-ksa.com/gfwlist -server=/beatsforme.com/127.0.0.1#5335 -ipset=/beatsforme.com/gfwlist -server=/oracle.com/127.0.0.1#5335 -ipset=/oracle.com/gfwlist -server=/intel.by/127.0.0.1#5335 -ipset=/intel.by/gfwlist -server=/typesquare.com/127.0.0.1#5335 -ipset=/typesquare.com/gfwlist -server=/nvidia.tt.omtrdc.net/127.0.0.1#5335 -ipset=/nvidia.tt.omtrdc.net/gfwlist -server=/azureiotsolutions.com/127.0.0.1#5335 -ipset=/azureiotsolutions.com/gfwlist -server=/tegrazone.kr/127.0.0.1#5335 -ipset=/tegrazone.kr/gfwlist -server=/tegrazone.com/127.0.0.1#5335 -ipset=/tegrazone.com/gfwlist -server=/bloombergradio.com/127.0.0.1#5335 -ipset=/bloombergradio.com/gfwlist -server=/fgacebook.com/127.0.0.1#5335 -ipset=/fgacebook.com/gfwlist -server=/wsj.net/127.0.0.1#5335 -ipset=/wsj.net/gfwlist -server=/nvidiaforhp.com/127.0.0.1#5335 -ipset=/nvidiaforhp.com/gfwlist -server=/google.com.ly/127.0.0.1#5335 -ipset=/google.com.ly/gfwlist -server=/nvidia.se/127.0.0.1#5335 -ipset=/nvidia.se/gfwlist -server=/nvidia.ro/127.0.0.1#5335 -ipset=/nvidia.ro/gfwlist -server=/applw.com/127.0.0.1#5335 -ipset=/applw.com/gfwlist -server=/nvidia.pl/127.0.0.1#5335 -ipset=/nvidia.pl/gfwlist -server=/airwick.pt/127.0.0.1#5335 -ipset=/airwick.pt/gfwlist -server=/scholar.google.co.kr/127.0.0.1#5335 -ipset=/scholar.google.co.kr/gfwlist -server=/foxnewssunday.com/127.0.0.1#5335 -ipset=/foxnewssunday.com/gfwlist -server=/nvidia.mx/127.0.0.1#5335 -ipset=/nvidia.mx/gfwlist -server=/snapstore.io/127.0.0.1#5335 -ipset=/snapstore.io/gfwlist -server=/nvidia.lu/127.0.0.1#5335 -ipset=/nvidia.lu/gfwlist -server=/azureplanetscale.net/127.0.0.1#5335 -ipset=/azureplanetscale.net/gfwlist -server=/nvidia.in/127.0.0.1#5335 -ipset=/nvidia.in/gfwlist -server=/nvidia.de/127.0.0.1#5335 -ipset=/nvidia.de/gfwlist -server=/mobilemarketo.com/127.0.0.1#5335 -ipset=/mobilemarketo.com/gfwlist -server=/addthiscdn.com/127.0.0.1#5335 -ipset=/addthiscdn.com/gfwlist -server=/yourmonsterbeats.com/127.0.0.1#5335 -ipset=/yourmonsterbeats.com/gfwlist -server=/fbmarketing.com/127.0.0.1#5335 -ipset=/fbmarketing.com/gfwlist -server=/nvidia.com.tr/127.0.0.1#5335 -ipset=/nvidia.com.tr/gfwlist -server=/firebaseio.com/127.0.0.1#5335 -ipset=/firebaseio.com/gfwlist -server=/thanksloyalty.com/127.0.0.1#5335 -ipset=/thanksloyalty.com/gfwlist -server=/beatsireland.net/127.0.0.1#5335 -ipset=/beatsireland.net/gfwlist -server=/my29tv.com/127.0.0.1#5335 -ipset=/my29tv.com/gfwlist -server=/nvidia.com.pe/127.0.0.1#5335 -ipset=/nvidia.com.pe/gfwlist -server=/nvidia.com/127.0.0.1#5335 -ipset=/nvidia.com/gfwlist -server=/nextmedia.com/127.0.0.1#5335 -ipset=/nextmedia.com/gfwlist -server=/nvidia.co.uk/127.0.0.1#5335 -ipset=/nvidia.co.uk/gfwlist -server=/sandisk.it/127.0.0.1#5335 -ipset=/sandisk.it/gfwlist -server=/nvidia.at/127.0.0.1#5335 -ipset=/nvidia.at/gfwlist -server=/gputechconf.jp/127.0.0.1#5335 -ipset=/gputechconf.jp/gfwlist -server=/inikesneakers.com/127.0.0.1#5335 -ipset=/inikesneakers.com/gfwlist -server=/gputechconf.in/127.0.0.1#5335 -ipset=/gputechconf.in/gfwlist -server=/geotrust.com/127.0.0.1#5335 -ipset=/geotrust.com/gfwlist -server=/cheapbeatsie.com/127.0.0.1#5335 -ipset=/cheapbeatsie.com/gfwlist -server=/gputechconf.com.tw/127.0.0.1#5335 -ipset=/gputechconf.com.tw/gfwlist -server=/mortein.com.au/127.0.0.1#5335 -ipset=/mortein.com.au/gfwlist -server=/starbucks.co.th/127.0.0.1#5335 -ipset=/starbucks.co.th/gfwlist -server=/beatscheapforsale.com/127.0.0.1#5335 -ipset=/beatscheapforsale.com/gfwlist -server=/fedoramagazine.org/127.0.0.1#5335 -ipset=/fedoramagazine.org/gfwlist -server=/volvogroup.de/127.0.0.1#5335 -ipset=/volvogroup.de/gfwlist -server=/bridgestone.com.ar/127.0.0.1#5335 -ipset=/bridgestone.com.ar/gfwlist -server=/niketradeweb.com/127.0.0.1#5335 -ipset=/niketradeweb.com/gfwlist -server=/godaddy.com/127.0.0.1#5335 -ipset=/godaddy.com/gfwlist -server=/realclearreligion.org/127.0.0.1#5335 -ipset=/realclearreligion.org/gfwlist -server=/monsterbeatsforsale.com/127.0.0.1#5335 -ipset=/monsterbeatsforsale.com/gfwlist -server=/neuralink.com/127.0.0.1#5335 -ipset=/neuralink.com/gfwlist -server=/adsense.com/127.0.0.1#5335 -ipset=/adsense.com/gfwlist -server=/ebayrtm.com/127.0.0.1#5335 -ipset=/ebayrtm.com/gfwlist -server=/pstatic.net/127.0.0.1#5335 -ipset=/pstatic.net/gfwlist -server=/plug.game/127.0.0.1#5335 -ipset=/plug.game/gfwlist -server=/nikeairmax.com/127.0.0.1#5335 -ipset=/nikeairmax.com/gfwlist -server=/mac.rs/127.0.0.1#5335 -ipset=/mac.rs/gfwlist -server=/navercorp.com/127.0.0.1#5335 -ipset=/navercorp.com/gfwlist -server=/livejasmin.com/127.0.0.1#5335 -ipset=/livejasmin.com/gfwlist -server=/voalingala.com/127.0.0.1#5335 -ipset=/voalingala.com/gfwlist -server=/pcmarket.com.hk/127.0.0.1#5335 -ipset=/pcmarket.com.hk/gfwlist -server=/cometotheduckside.com/127.0.0.1#5335 -ipset=/cometotheduckside.com/gfwlist -server=/intel.re/127.0.0.1#5335 -ipset=/intel.re/gfwlist -server=/apple.uk/127.0.0.1#5335 -ipset=/apple.uk/gfwlist -server=/grafolio.com/127.0.0.1#5335 -ipset=/grafolio.com/gfwlist -server=/seselah.com/127.0.0.1#5335 -ipset=/seselah.com/gfwlist -server=/mozilla.net/127.0.0.1#5335 -ipset=/mozilla.net/gfwlist -server=/google.hn/127.0.0.1#5335 -ipset=/google.hn/gfwlist -server=/lanik.us/127.0.0.1#5335 -ipset=/lanik.us/gfwlist -server=/voaindonesia.com/127.0.0.1#5335 -ipset=/voaindonesia.com/gfwlist -server=/volvobuses.co/127.0.0.1#5335 -ipset=/volvobuses.co/gfwlist -server=/docs.rs/127.0.0.1#5335 -ipset=/docs.rs/gfwlist -server=/applefilmmaker.com/127.0.0.1#5335 -ipset=/applefilmmaker.com/gfwlist -server=/hongkongfp.com/127.0.0.1#5335 -ipset=/hongkongfp.com/gfwlist -server=/coova.net/127.0.0.1#5335 -ipset=/coova.net/gfwlist -server=/mdn.mozillademos.org/127.0.0.1#5335 -ipset=/mdn.mozillademos.org/gfwlist -server=/fbbmarket.com/127.0.0.1#5335 -ipset=/fbbmarket.com/gfwlist -server=/geeksquadwebroot.org/127.0.0.1#5335 -ipset=/geeksquadwebroot.org/gfwlist -server=/bigcharts.com/127.0.0.1#5335 -ipset=/bigcharts.com/gfwlist -server=/google.com.uy/127.0.0.1#5335 -ipset=/google.com.uy/gfwlist -server=/foxsportsnetmilwaukee.com/127.0.0.1#5335 -ipset=/foxsportsnetmilwaukee.com/gfwlist -server=/mwf-service.akamaized.net/127.0.0.1#5335 -ipset=/mwf-service.akamaized.net/gfwlist -server=/img-s-msn-com.akamaized.net/127.0.0.1#5335 -ipset=/img-s-msn-com.akamaized.net/gfwlist -server=/img-prod-cms-rt-microsoft-com.akamaized.net/127.0.0.1#5335 -ipset=/img-prod-cms-rt-microsoft-com.akamaized.net/gfwlist -server=/kijijiforbusiness.ca/127.0.0.1#5335 -ipset=/kijijiforbusiness.ca/gfwlist -server=/fesebook.com/127.0.0.1#5335 -ipset=/fesebook.com/gfwlist -server=/matrix.to/127.0.0.1#5335 -ipset=/matrix.to/gfwlist -server=/onedrive.org/127.0.0.1#5335 -ipset=/onedrive.org/gfwlist -server=/mut.ch/127.0.0.1#5335 -ipset=/mut.ch/gfwlist -server=/hpmarketplace.com/127.0.0.1#5335 -ipset=/hpmarketplace.com/gfwlist -server=/nicomanga.jp/127.0.0.1#5335 -ipset=/nicomanga.jp/gfwlist -server=/windowsupdate.com/127.0.0.1#5335 -ipset=/windowsupdate.com/gfwlist -server=/youtube.com.uy/127.0.0.1#5335 -ipset=/youtube.com.uy/gfwlist -server=/windowssearch.com/127.0.0.1#5335 -ipset=/windowssearch.com/gfwlist -server=/yahoo.ba/127.0.0.1#5335 -ipset=/yahoo.ba/gfwlist -server=/windowsmarketplace.com/127.0.0.1#5335 -ipset=/windowsmarketplace.com/gfwlist -server=/windowscommunity.net/127.0.0.1#5335 -ipset=/windowscommunity.net/gfwlist -server=/dettolthailand.com/127.0.0.1#5335 -ipset=/dettolthailand.com/gfwlist -server=/windows.com/127.0.0.1#5335 -ipset=/windows.com/gfwlist -server=/windows-int.net/127.0.0.1#5335 -ipset=/windows-int.net/gfwlist -server=/wbd.ms/127.0.0.1#5335 -ipset=/wbd.ms/gfwlist -server=/vsallin.net/127.0.0.1#5335 -ipset=/vsallin.net/gfwlist -server=/epochweek.com/127.0.0.1#5335 -ipset=/epochweek.com/gfwlist -server=/virtualearth.net/127.0.0.1#5335 -ipset=/virtualearth.net/gfwlist -server=/mingpao.com/127.0.0.1#5335 -ipset=/mingpao.com/gfwlist -server=/userpxt.io/127.0.0.1#5335 -ipset=/userpxt.io/gfwlist -server=/dgg.gg/127.0.0.1#5335 -ipset=/dgg.gg/gfwlist -server=/trafficmanager.net/127.0.0.1#5335 -ipset=/trafficmanager.net/gfwlist -server=/paypaly.com/127.0.0.1#5335 -ipset=/paypaly.com/gfwlist -server=/tfsallin.net/127.0.0.1#5335 -ipset=/tfsallin.net/gfwlist -server=/direcpath.net/127.0.0.1#5335 -ipset=/direcpath.net/gfwlist -server=/bmw-connecteddrive.lu/127.0.0.1#5335 -ipset=/bmw-connecteddrive.lu/gfwlist -server=/visaplus.com/127.0.0.1#5335 -ipset=/visaplus.com/gfwlist -server=/cheap-beats-by-dre.net/127.0.0.1#5335 -ipset=/cheap-beats-by-dre.net/gfwlist -server=/windowsuem.com/127.0.0.1#5335 -ipset=/windowsuem.com/gfwlist -server=/surface.com/127.0.0.1#5335 -ipset=/surface.com/gfwlist -server=/facebookmobile.com/127.0.0.1#5335 -ipset=/facebookmobile.com/gfwlist -server=/youtube.com.my/127.0.0.1#5335 -ipset=/youtube.com.my/gfwlist -server=/cheapdrebeats8.net/127.0.0.1#5335 -ipset=/cheapdrebeats8.net/gfwlist -server=/staffhub.ms/127.0.0.1#5335 -ipset=/staffhub.ms/gfwlist -server=/aspnetcdn.com/127.0.0.1#5335 -ipset=/aspnetcdn.com/gfwlist -server=/skypeassets.com/127.0.0.1#5335 -ipset=/skypeassets.com/gfwlist -server=/skype.net/127.0.0.1#5335 -ipset=/skype.net/gfwlist -server=/stripe.network/127.0.0.1#5335 -ipset=/stripe.network/gfwlist -server=/12diasderegalosdeitunes.com.ve/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.com.ve/gfwlist -server=/sharepointonline.com/127.0.0.1#5335 -ipset=/sharepointonline.com/gfwlist -server=/auricularemonsterbeats.com/127.0.0.1#5335 -ipset=/auricularemonsterbeats.com/gfwlist -server=/applesurveys.com/127.0.0.1#5335 -ipset=/applesurveys.com/gfwlist -server=/minimoncton.ca/127.0.0.1#5335 -ipset=/minimoncton.ca/gfwlist -server=/faceobok.com/127.0.0.1#5335 -ipset=/faceobok.com/gfwlist -server=/marketo.tv/127.0.0.1#5335 -ipset=/marketo.tv/gfwlist -server=/asus.com/127.0.0.1#5335 -ipset=/asus.com/gfwlist -server=/gettyimages.no/127.0.0.1#5335 -ipset=/gettyimages.no/gfwlist -server=/bmw.ee/127.0.0.1#5335 -ipset=/bmw.ee/gfwlist -server=/acrobat.com/127.0.0.1#5335 -ipset=/acrobat.com/gfwlist -server=/bridgestone.cl/127.0.0.1#5335 -ipset=/bridgestone.cl/gfwlist -server=/sfbassets.net/127.0.0.1#5335 -ipset=/sfbassets.net/gfwlist -server=/sfbassets.com/127.0.0.1#5335 -ipset=/sfbassets.com/gfwlist -server=/s-microsoft.com/127.0.0.1#5335 -ipset=/s-microsoft.com/gfwlist -server=/bingads.com/127.0.0.1#5335 -ipset=/bingads.com/gfwlist -server=/visa.com.gt/127.0.0.1#5335 -ipset=/visa.com.gt/gfwlist -server=/projectsangam.com/127.0.0.1#5335 -ipset=/projectsangam.com/gfwlist -server=/scholar.google.com.pe/127.0.0.1#5335 -ipset=/scholar.google.com.pe/gfwlist -server=/projectmurphy.net/127.0.0.1#5335 -ipset=/projectmurphy.net/gfwlist -server=/powerbi.com/127.0.0.1#5335 -ipset=/powerbi.com/gfwlist -server=/faceid99.com/127.0.0.1#5335 -ipset=/faceid99.com/gfwlist -server=/voxfieldguide.com/127.0.0.1#5335 -ipset=/voxfieldguide.com/gfwlist -server=/powerappscdn.net/127.0.0.1#5335 -ipset=/powerappscdn.net/gfwlist -server=/sohfrance.org/127.0.0.1#5335 -ipset=/sohfrance.org/gfwlist -server=/outlook.com/127.0.0.1#5335 -ipset=/outlook.com/gfwlist -server=/dvdstudiopro.org/127.0.0.1#5335 -ipset=/dvdstudiopro.org/gfwlist -server=/outingsapp.com/127.0.0.1#5335 -ipset=/outingsapp.com/gfwlist -server=/opticsforthecloud.net/127.0.0.1#5335 -ipset=/opticsforthecloud.net/gfwlist -server=/youtube.com.hn/127.0.0.1#5335 -ipset=/youtube.com.hn/gfwlist -server=/garena.live/127.0.0.1#5335 -ipset=/garena.live/gfwlist -server=/nxta.org/127.0.0.1#5335 -ipset=/nxta.org/gfwlist -server=/fscebook.com/127.0.0.1#5335 -ipset=/fscebook.com/gfwlist -server=/feacboo.com/127.0.0.1#5335 -ipset=/feacboo.com/gfwlist -server=/mymicrosoft.com/127.0.0.1#5335 -ipset=/mymicrosoft.com/gfwlist -server=/msudalosti.com/127.0.0.1#5335 -ipset=/msudalosti.com/gfwlist -server=/paily.net/127.0.0.1#5335 -ipset=/paily.net/gfwlist -server=/polymerproject.org/127.0.0.1#5335 -ipset=/polymerproject.org/gfwlist -server=/msocsp.com/127.0.0.1#5335 -ipset=/msocsp.com/gfwlist -server=/msocdn.com/127.0.0.1#5335 -ipset=/msocdn.com/gfwlist -server=/msftnet.org/127.0.0.1#5335 -ipset=/msftnet.org/gfwlist -server=/msfteducation.ca/127.0.0.1#5335 -ipset=/msfteducation.ca/gfwlist -server=/oxfordbibliographies.com/127.0.0.1#5335 -ipset=/oxfordbibliographies.com/gfwlist -server=/msedge.net/127.0.0.1#5335 -ipset=/msedge.net/gfwlist -server=/pokemonbw.com/127.0.0.1#5335 -ipset=/pokemonbw.com/gfwlist -server=/bmw-motorrad.ca/127.0.0.1#5335 -ipset=/bmw-motorrad.ca/gfwlist -server=/mschallenge2018.com/127.0.0.1#5335 -ipset=/mschallenge2018.com/gfwlist -server=/bmw-konzernarchiv.de/127.0.0.1#5335 -ipset=/bmw-konzernarchiv.de/gfwlist -server=/api.viu.now.com/127.0.0.1#5335 -ipset=/api.viu.now.com/gfwlist -server=/disney.co.uk/127.0.0.1#5335 -ipset=/disney.co.uk/gfwlist -server=/mpnevolution.com/127.0.0.1#5335 -ipset=/mpnevolution.com/gfwlist -server=/bmwcharitygolf.com/127.0.0.1#5335 -ipset=/bmwcharitygolf.com/gfwlist -server=/morphcharts.com/127.0.0.1#5335 -ipset=/morphcharts.com/gfwlist -server=/financeleadsonline.com/127.0.0.1#5335 -ipset=/financeleadsonline.com/gfwlist -server=/microsoftuwp.com/127.0.0.1#5335 -ipset=/microsoftuwp.com/gfwlist -server=/microsofttranslator.com/127.0.0.1#5335 -ipset=/microsofttranslator.com/gfwlist -server=/microsofttradein.com/127.0.0.1#5335 -ipset=/microsofttradein.com/gfwlist -server=/microsoftstream.com/127.0.0.1#5335 -ipset=/microsoftstream.com/gfwlist -server=/docs.com/127.0.0.1#5335 -ipset=/docs.com/gfwlist -server=/javcc.com/127.0.0.1#5335 -ipset=/javcc.com/gfwlist -server=/ipod.co.uk/127.0.0.1#5335 -ipset=/ipod.co.uk/gfwlist -server=/hotmail.com/127.0.0.1#5335 -ipset=/hotmail.com/gfwlist -server=/dellcdn.com/127.0.0.1#5335 -ipset=/dellcdn.com/gfwlist -server=/microsoftpartnercommunity.com/127.0.0.1#5335 -ipset=/microsoftpartnercommunity.com/gfwlist -server=/microsoftonline.com/127.0.0.1#5335 -ipset=/microsoftonline.com/gfwlist -server=/ciscosoftware.com/127.0.0.1#5335 -ipset=/ciscosoftware.com/gfwlist -server=/microsoftinternetsafety.net/127.0.0.1#5335 -ipset=/microsoftinternetsafety.net/gfwlist -server=/parastorage.com/127.0.0.1#5335 -ipset=/parastorage.com/gfwlist -server=/applenewsformat.com/127.0.0.1#5335 -ipset=/applenewsformat.com/gfwlist -server=/pokemonchampionships.com/127.0.0.1#5335 -ipset=/pokemonchampionships.com/gfwlist -server=/microsofthouse.net/127.0.0.1#5335 -ipset=/microsofthouse.net/gfwlist -server=/microsofthouse.com/127.0.0.1#5335 -ipset=/microsofthouse.com/gfwlist -server=/appleshare.info/127.0.0.1#5335 -ipset=/appleshare.info/gfwlist -server=/microsoftcommunitytraining.com/127.0.0.1#5335 -ipset=/microsoftcommunitytraining.com/gfwlist -server=/microsoftcloudworkshop.com/127.0.0.1#5335 -ipset=/microsoftcloudworkshop.com/gfwlist -server=/detaliczny.com/127.0.0.1#5335 -ipset=/detaliczny.com/gfwlist -server=/att-bundles.com/127.0.0.1#5335 -ipset=/att-bundles.com/gfwlist -server=/microsoftadvertisingregionalawards.com/127.0.0.1#5335 -ipset=/microsoftadvertisingregionalawards.com/gfwlist -server=/itsbetterwhenyouwinit.com/127.0.0.1#5335 -ipset=/itsbetterwhenyouwinit.com/gfwlist -server=/faebookc.com/127.0.0.1#5335 -ipset=/faebookc.com/gfwlist -server=/alibabacloud.co.in/127.0.0.1#5335 -ipset=/alibabacloud.co.in/gfwlist -server=/microsoft365.com/127.0.0.1#5335 -ipset=/microsoft365.com/gfwlist -server=/microsoft-sbs-domains.com/127.0.0.1#5335 -ipset=/microsoft-sbs-domains.com/gfwlist -server=/nintendostore.com/127.0.0.1#5335 -ipset=/nintendostore.com/gfwlist -server=/microsoft-ppe.com/127.0.0.1#5335 -ipset=/microsoft-ppe.com/gfwlist -server=/scdn.co/127.0.0.1#5335 -ipset=/scdn.co/gfwlist -server=/ebaycbt.co.kr/127.0.0.1#5335 -ipset=/ebaycbt.co.kr/gfwlist -server=/microsoft-int.com/127.0.0.1#5335 -ipset=/microsoft-int.com/gfwlist -server=/volvogroup.kr/127.0.0.1#5335 -ipset=/volvogroup.kr/gfwlist -server=/gaming-notebooks.com/127.0.0.1#5335 -ipset=/gaming-notebooks.com/gfwlist -server=/coupang.com/127.0.0.1#5335 -ipset=/coupang.com/gfwlist -server=/live.net/127.0.0.1#5335 -ipset=/live.net/gfwlist -server=/live.com.au/127.0.0.1#5335 -ipset=/live.com.au/gfwlist -server=/fpacebook.com/127.0.0.1#5335 -ipset=/fpacebook.com/gfwlist -server=/live.com/127.0.0.1#5335 -ipset=/live.com/gfwlist -server=/volvotrucks.kz/127.0.0.1#5335 -ipset=/volvotrucks.kz/gfwlist -server=/bighead.group/127.0.0.1#5335 -ipset=/bighead.group/gfwlist -server=/ingads.com/127.0.0.1#5335 -ipset=/ingads.com/gfwlist -server=/internetexplorer.com/127.0.0.1#5335 -ipset=/internetexplorer.com/gfwlist -server=/durex.co.za/127.0.0.1#5335 -ipset=/durex.co.za/gfwlist -server=/umass.edu/127.0.0.1#5335 -ipset=/umass.edu/gfwlist -server=/rakuten.co.jp/127.0.0.1#5335 -ipset=/rakuten.co.jp/gfwlist -server=/hummingbird.ms/127.0.0.1#5335 -ipset=/hummingbird.ms/gfwlist -server=/hotmail.org/127.0.0.1#5335 -ipset=/hotmail.org/gfwlist -server=/hotmail.eu/127.0.0.1#5335 -ipset=/hotmail.eu/gfwlist -server=/google.li/127.0.0.1#5335 -ipset=/google.li/gfwlist -server=/adobesigncdn.com/127.0.0.1#5335 -ipset=/adobesigncdn.com/gfwlist -server=/gigjam.com/127.0.0.1#5335 -ipset=/gigjam.com/gfwlist -server=/bitnamistudio.com/127.0.0.1#5335 -ipset=/bitnamistudio.com/gfwlist -server=/jiyu-kobo.co.jp/127.0.0.1#5335 -ipset=/jiyu-kobo.co.jp/gfwlist -server=/studywatchbyverily.com/127.0.0.1#5335 -ipset=/studywatchbyverily.com/gfwlist -server=/gearstactics.com/127.0.0.1#5335 -ipset=/gearstactics.com/gfwlist -server=/verisign.se/127.0.0.1#5335 -ipset=/verisign.se/gfwlist -server=/dropboxusercontent.com/127.0.0.1#5335 -ipset=/dropboxusercontent.com/gfwlist -server=/disney.ro/127.0.0.1#5335 -ipset=/disney.ro/gfwlist -server=/monsterbeatsbydrdrestudio.com/127.0.0.1#5335 -ipset=/monsterbeatsbydrdrestudio.com/gfwlist -server=/gears5.com/127.0.0.1#5335 -ipset=/gears5.com/gfwlist -server=/gameuxmasterguide.com/127.0.0.1#5335 -ipset=/gameuxmasterguide.com/gfwlist -server=/fasttrackreadysupport.com/127.0.0.1#5335 -ipset=/fasttrackreadysupport.com/gfwlist -server=/efproject.net/127.0.0.1#5335 -ipset=/efproject.net/gfwlist -server=/dtvce.com/127.0.0.1#5335 -ipset=/dtvce.com/gfwlist -server=/beth.games/127.0.0.1#5335 -ipset=/beth.games/gfwlist -server=/cs4hs.com/127.0.0.1#5335 -ipset=/cs4hs.com/gfwlist -server=/assetsadobe.com/127.0.0.1#5335 -ipset=/assetsadobe.com/gfwlist -server=/swisssign.li/127.0.0.1#5335 -ipset=/swisssign.li/gfwlist -server=/microsoftstore.com/127.0.0.1#5335 -ipset=/microsoftstore.com/gfwlist -server=/crmdynint-gcc.com/127.0.0.1#5335 -ipset=/crmdynint-gcc.com/gfwlist -server=/escandinavia-arg.com/127.0.0.1#5335 -ipset=/escandinavia-arg.com/gfwlist -server=/pki-posta.ch/127.0.0.1#5335 -ipset=/pki-posta.ch/gfwlist -server=/ciscoconnectcloud.net/127.0.0.1#5335 -ipset=/ciscoconnectcloud.net/gfwlist -server=/centralvalidation.com/127.0.0.1#5335 -ipset=/centralvalidation.com/gfwlist -server=/ibeats-uk.com/127.0.0.1#5335 -ipset=/ibeats-uk.com/gfwlist -server=/brazilpartneruniversity.com/127.0.0.1#5335 -ipset=/brazilpartneruniversity.com/gfwlist -server=/bluehatil.com/127.0.0.1#5335 -ipset=/bluehatil.com/gfwlist -server=/binads.com/127.0.0.1#5335 -ipset=/binads.com/gfwlist -server=/ebay.com.au/127.0.0.1#5335 -ipset=/ebay.com.au/gfwlist -server=/galaxyappstore.com/127.0.0.1#5335 -ipset=/galaxyappstore.com/gfwlist -server=/aka.ms/127.0.0.1#5335 -ipset=/aka.ms/gfwlist -server=/facebuok.com/127.0.0.1#5335 -ipset=/facebuok.com/gfwlist -server=/femalefounderscomp.com/127.0.0.1#5335 -ipset=/femalefounderscomp.com/gfwlist -server=/minispygear.com/127.0.0.1#5335 -ipset=/minispygear.com/gfwlist -server=/dns.sb/127.0.0.1#5335 -ipset=/dns.sb/gfwlist -server=/macbookpro.co/127.0.0.1#5335 -ipset=/macbookpro.co/gfwlist -server=/volvotruckrental.be/127.0.0.1#5335 -ipset=/volvotruckrental.be/gfwlist -server=/darivoa.com/127.0.0.1#5335 -ipset=/darivoa.com/gfwlist -server=/theopportunityproject.org/127.0.0.1#5335 -ipset=/theopportunityproject.org/gfwlist -server=/mac-mini.com/127.0.0.1#5335 -ipset=/mac-mini.com/gfwlist -server=/foxsports-newyork.com/127.0.0.1#5335 -ipset=/foxsports-newyork.com/gfwlist -server=/springerlink.com/127.0.0.1#5335 -ipset=/springerlink.com/gfwlist -server=/bmw-motorrad-motorsport.com/127.0.0.1#5335 -ipset=/bmw-motorrad-motorsport.com/gfwlist -server=/microsoft.si/127.0.0.1#5335 -ipset=/microsoft.si/gfwlist -server=/centrino.net/127.0.0.1#5335 -ipset=/centrino.net/gfwlist -server=/verisign.com.br/127.0.0.1#5335 -ipset=/verisign.com.br/gfwlist -server=/nature.com/127.0.0.1#5335 -ipset=/nature.com/gfwlist -server=/microsoft.red/127.0.0.1#5335 -ipset=/microsoft.red/gfwlist -server=/fnacebook.com/127.0.0.1#5335 -ipset=/fnacebook.com/gfwlist -server=/bmwsummerschool.com/127.0.0.1#5335 -ipset=/bmwsummerschool.com/gfwlist -server=/fox7.com/127.0.0.1#5335 -ipset=/fox7.com/gfwlist -server=/ebayclub.com/127.0.0.1#5335 -ipset=/ebayclub.com/gfwlist -server=/golang.com/127.0.0.1#5335 -ipset=/golang.com/gfwlist -server=/volvogroup.jp/127.0.0.1#5335 -ipset=/volvogroup.jp/gfwlist -server=/casoneexchange.com/127.0.0.1#5335 -ipset=/casoneexchange.com/gfwlist -server=/ebaymotors.com/127.0.0.1#5335 -ipset=/ebaymotors.com/gfwlist -server=/aokwholesale.net/127.0.0.1#5335 -ipset=/aokwholesale.net/gfwlist -server=/stacksnippets.net/127.0.0.1#5335 -ipset=/stacksnippets.net/gfwlist -server=/cobatt.com/127.0.0.1#5335 -ipset=/cobatt.com/gfwlist -server=/soccerfinancier.ca/127.0.0.1#5335 -ipset=/soccerfinancier.ca/gfwlist -server=/microsoft.jp/127.0.0.1#5335 -ipset=/microsoft.jp/gfwlist -server=/microsoft.io/127.0.0.1#5335 -ipset=/microsoft.io/gfwlist -server=/microsoft.hu/127.0.0.1#5335 -ipset=/microsoft.hu/gfwlist -server=/microsoft.eu/127.0.0.1#5335 -ipset=/microsoft.eu/gfwlist -server=/facebool.info/127.0.0.1#5335 -ipset=/facebool.info/gfwlist -server=/bienvenuechezbestbuy.ca/127.0.0.1#5335 -ipset=/bienvenuechezbestbuy.ca/gfwlist -server=/minifs.com/127.0.0.1#5335 -ipset=/minifs.com/gfwlist -server=/privacytools.io/127.0.0.1#5335 -ipset=/privacytools.io/gfwlist -server=/microsoft.es/127.0.0.1#5335 -ipset=/microsoft.es/gfwlist -server=/aclweb.org/127.0.0.1#5335 -ipset=/aclweb.org/gfwlist -server=/qoo10.jp/127.0.0.1#5335 -ipset=/qoo10.jp/gfwlist -server=/jiayoulu.com/127.0.0.1#5335 -ipset=/jiayoulu.com/gfwlist -server=/miniso.jp/127.0.0.1#5335 -ipset=/miniso.jp/gfwlist -server=/headphonesretailer.com/127.0.0.1#5335 -ipset=/headphonesretailer.com/gfwlist -server=/ebaysweden.com/127.0.0.1#5335 -ipset=/ebaysweden.com/gfwlist -server=/pearsonclinical.be/127.0.0.1#5335 -ipset=/pearsonclinical.be/gfwlist -server=/faceboof.com/127.0.0.1#5335 -ipset=/faceboof.com/gfwlist -server=/microsoft.ca/127.0.0.1#5335 -ipset=/microsoft.ca/gfwlist -server=/wal.co/127.0.0.1#5335 -ipset=/wal.co/gfwlist -server=/sony.ro/127.0.0.1#5335 -ipset=/sony.ro/gfwlist -server=/yammer.com/127.0.0.1#5335 -ipset=/yammer.com/gfwlist -server=/myciscobenefits.com/127.0.0.1#5335 -ipset=/myciscobenefits.com/gfwlist -server=/onedrive.eu/127.0.0.1#5335 -ipset=/onedrive.eu/gfwlist -server=/onedrive.co/127.0.0.1#5335 -ipset=/onedrive.co/gfwlist -server=/launchpadlibrarian.com/127.0.0.1#5335 -ipset=/launchpadlibrarian.com/gfwlist -server=/globalsign.es/127.0.0.1#5335 -ipset=/globalsign.es/gfwlist -server=/1drv.com/127.0.0.1#5335 -ipset=/1drv.com/gfwlist -server=/msnkids.com/127.0.0.1#5335 -ipset=/msnkids.com/gfwlist -server=/sony-hes.co.jp/127.0.0.1#5335 -ipset=/sony-hes.co.jp/gfwlist -server=/directvatlantaga.com/127.0.0.1#5335 -ipset=/directvatlantaga.com/gfwlist -server=/msnewskids.net/127.0.0.1#5335 -ipset=/msnewskids.net/gfwlist -server=/neborder.com/127.0.0.1#5335 -ipset=/neborder.com/gfwlist -server=/msn.com/127.0.0.1#5335 -ipset=/msn.com/gfwlist -server=/microsoftnewskids.org/127.0.0.1#5335 -ipset=/microsoftnewskids.org/gfwlist -server=/beatsbydreausale.net/127.0.0.1#5335 -ipset=/beatsbydreausale.net/gfwlist -server=/amamanualofstyle.com/127.0.0.1#5335 -ipset=/amamanualofstyle.com/gfwlist -server=/hbomax.com/127.0.0.1#5335 -ipset=/hbomax.com/gfwlist -server=/microsoftnewskids.net/127.0.0.1#5335 -ipset=/microsoftnewskids.net/gfwlist -server=/xboxlive.com/127.0.0.1#5335 -ipset=/xboxlive.com/gfwlist -server=/visaeverywhereshop.com/127.0.0.1#5335 -ipset=/visaeverywhereshop.com/gfwlist -server=/microsoftnewskids.com/127.0.0.1#5335 -ipset=/microsoftnewskids.com/gfwlist -server=/microsoftnewsforkids.org/127.0.0.1#5335 -ipset=/microsoftnewsforkids.org/gfwlist -server=/riotcdn.net/127.0.0.1#5335 -ipset=/riotcdn.net/gfwlist -server=/microsoftnewsforkids.com/127.0.0.1#5335 -ipset=/microsoftnewsforkids.com/gfwlist -server=/microsoftnews.net/127.0.0.1#5335 -ipset=/microsoftnews.net/gfwlist -server=/sprinklesapp.com/127.0.0.1#5335 -ipset=/sprinklesapp.com/gfwlist -server=/drebeatssite.com/127.0.0.1#5335 -ipset=/drebeatssite.com/gfwlist -server=/impermium.com/127.0.0.1#5335 -ipset=/impermium.com/gfwlist -server=/msunlimitedcloudsummit.com/127.0.0.1#5335 -ipset=/msunlimitedcloudsummit.com/gfwlist -server=/cashpassport.com.br/127.0.0.1#5335 -ipset=/cashpassport.com.br/gfwlist -server=/microsoftpartnersolutions.com/127.0.0.1#5335 -ipset=/microsoftpartnersolutions.com/gfwlist -server=/microsoftlatamholiday.com/127.0.0.1#5335 -ipset=/microsoftlatamholiday.com/gfwlist -server=/awsloft-johannesburg.com/127.0.0.1#5335 -ipset=/awsloft-johannesburg.com/gfwlist -server=/microsoft-give.com/127.0.0.1#5335 -ipset=/microsoft-give.com/gfwlist -server=/masalladeloslimites.com/127.0.0.1#5335 -ipset=/masalladeloslimites.com/gfwlist -server=/flipwithsurface.com/127.0.0.1#5335 -ipset=/flipwithsurface.com/gfwlist -server=/dictate.ms/127.0.0.1#5335 -ipset=/dictate.ms/gfwlist -server=/bluehatnights.com/127.0.0.1#5335 -ipset=/bluehatnights.com/gfwlist -server=/appleappstore.net/127.0.0.1#5335 -ipset=/appleappstore.net/gfwlist -server=/veet.tv/127.0.0.1#5335 -ipset=/veet.tv/gfwlist -server=/bing.net/127.0.0.1#5335 -ipset=/bing.net/gfwlist -server=/iproperty.com.sg/127.0.0.1#5335 -ipset=/iproperty.com.sg/gfwlist -server=/bmw-auslieferungszentrum.com/127.0.0.1#5335 -ipset=/bmw-auslieferungszentrum.com/gfwlist -server=/visadns.com/127.0.0.1#5335 -ipset=/visadns.com/gfwlist -server=/adwordsexpress.com/127.0.0.1#5335 -ipset=/adwordsexpress.com/gfwlist -server=/airiti.com/127.0.0.1#5335 -ipset=/airiti.com/gfwlist -server=/softbankhawksstore.jp/127.0.0.1#5335 -ipset=/softbankhawksstore.jp/gfwlist -server=/visafulfillment.com/127.0.0.1#5335 -ipset=/visafulfillment.com/gfwlist -server=/google.com.au/127.0.0.1#5335 -ipset=/google.com.au/gfwlist -server=/gitlab.com/127.0.0.1#5335 -ipset=/gitlab.com/gfwlist -server=/thehealthsite.com/127.0.0.1#5335 -ipset=/thehealthsite.com/gfwlist -server=/google.tt/127.0.0.1#5335 -ipset=/google.tt/gfwlist -server=/gotcosmos.com/127.0.0.1#5335 -ipset=/gotcosmos.com/gfwlist -server=/youtube.com.gt/127.0.0.1#5335 -ipset=/youtube.com.gt/gfwlist -server=/cosmosdb.info/127.0.0.1#5335 -ipset=/cosmosdb.info/gfwlist -server=/pearsonclinical.se/127.0.0.1#5335 -ipset=/pearsonclinical.se/gfwlist -server=/azurewebsites.net/127.0.0.1#5335 -ipset=/azurewebsites.net/gfwlist -server=/azurestackvalidation.com/127.0.0.1#5335 -ipset=/azurestackvalidation.com/gfwlist -server=/huobi.me/127.0.0.1#5335 -ipset=/huobi.me/gfwlist -server=/azureiotsuite.com/127.0.0.1#5335 -ipset=/azureiotsuite.com/gfwlist -server=/volvobuses.hu/127.0.0.1#5335 -ipset=/volvobuses.hu/gfwlist -server=/wiifit.com/127.0.0.1#5335 -ipset=/wiifit.com/gfwlist -server=/samsungqbe.com/127.0.0.1#5335 -ipset=/samsungqbe.com/gfwlist -server=/azuredns-prd.info/127.0.0.1#5335 -ipset=/azuredns-prd.info/gfwlist -server=/azuredigitaltwins.com/127.0.0.1#5335 -ipset=/azuredigitaltwins.com/gfwlist -server=/azuredigitaltwin.com/127.0.0.1#5335 -ipset=/azuredigitaltwin.com/gfwlist -server=/blogger.com/127.0.0.1#5335 -ipset=/blogger.com/gfwlist -server=/wikia.org/127.0.0.1#5335 -ipset=/wikia.org/gfwlist -server=/azurecosmosdb.com/127.0.0.1#5335 -ipset=/azurecosmosdb.com/gfwlist -server=/botframework.com/127.0.0.1#5335 -ipset=/botframework.com/gfwlist -server=/fox11.com/127.0.0.1#5335 -ipset=/fox11.com/gfwlist -server=/sandisk.co.kr/127.0.0.1#5335 -ipset=/sandisk.co.kr/gfwlist -server=/hf-iphone.com/127.0.0.1#5335 -ipset=/hf-iphone.com/gfwlist -server=/azurecontainer.io/127.0.0.1#5335 -ipset=/azurecontainer.io/gfwlist -server=/azurecomcdn.net/127.0.0.1#5335 -ipset=/azurecomcdn.net/gfwlist -server=/darwinsource.org/127.0.0.1#5335 -ipset=/darwinsource.org/gfwlist -server=/ciscoconnectcloud.com/127.0.0.1#5335 -ipset=/ciscoconnectcloud.com/gfwlist -server=/applereach.net/127.0.0.1#5335 -ipset=/applereach.net/gfwlist -server=/ctan.org/127.0.0.1#5335 -ipset=/ctan.org/gfwlist -server=/conscrypt.org/127.0.0.1#5335 -ipset=/conscrypt.org/gfwlist -server=/azure-mobile.net/127.0.0.1#5335 -ipset=/azure-mobile.net/gfwlist -server=/hpapplicationscenter.com/127.0.0.1#5335 -ipset=/hpapplicationscenter.com/gfwlist -server=/nikelink.com/127.0.0.1#5335 -ipset=/nikelink.com/gfwlist -server=/meetyourdevices.com/127.0.0.1#5335 -ipset=/meetyourdevices.com/gfwlist -server=/visa.sk/127.0.0.1#5335 -ipset=/visa.sk/gfwlist -server=/mycdn.me/127.0.0.1#5335 -ipset=/mycdn.me/gfwlist -server=/mini.com.bn/127.0.0.1#5335 -ipset=/mini.com.bn/gfwlist -server=/avseesee.com/127.0.0.1#5335 -ipset=/avseesee.com/gfwlist -server=/facebookphoto.com/127.0.0.1#5335 -ipset=/facebookphoto.com/gfwlist -server=/imgsmail.ru/127.0.0.1#5335 -ipset=/imgsmail.ru/gfwlist -server=/google.com/127.0.0.1#5335 -ipset=/google.com/gfwlist -server=/logitech.fr/127.0.0.1#5335 -ipset=/logitech.fr/gfwlist -server=/logitech.com/127.0.0.1#5335 -ipset=/logitech.com/gfwlist -server=/logitech.biz/127.0.0.1#5335 -ipset=/logitech.biz/gfwlist -server=/logi.com/127.0.0.1#5335 -ipset=/logi.com/gfwlist -server=/licdn.com/127.0.0.1#5335 -ipset=/licdn.com/gfwlist -server=/lgelectronics.122.2o7.net/127.0.0.1#5335 -ipset=/lgelectronics.122.2o7.net/gfwlist -server=/mywaytopay.net/127.0.0.1#5335 -ipset=/mywaytopay.net/gfwlist -server=/gab.com/127.0.0.1#5335 -ipset=/gab.com/gfwlist -server=/lgrecyclingprogram.com/127.0.0.1#5335 -ipset=/lgrecyclingprogram.com/gfwlist -server=/clearasil.us/127.0.0.1#5335 -ipset=/clearasil.us/gfwlist -server=/lghvac.com/127.0.0.1#5335 -ipset=/lghvac.com/gfwlist -server=/customizedbeatsbydre.com/127.0.0.1#5335 -ipset=/customizedbeatsbydre.com/gfwlist -server=/rapidssl.com/127.0.0.1#5335 -ipset=/rapidssl.com/gfwlist -server=/naturalvoices.com/127.0.0.1#5335 -ipset=/naturalvoices.com/gfwlist -server=/listinganalytics.net/127.0.0.1#5335 -ipset=/listinganalytics.net/gfwlist -server=/yahoo.ae/127.0.0.1#5335 -ipset=/yahoo.ae/gfwlist -server=/lg.com/127.0.0.1#5335 -ipset=/lg.com/gfwlist -server=/google.sm/127.0.0.1#5335 -ipset=/google.sm/gfwlist -server=/headphonezip.com/127.0.0.1#5335 -ipset=/headphonezip.com/gfwlist -server=/xscale.com/127.0.0.1#5335 -ipset=/xscale.com/gfwlist -server=/joeswall.com/127.0.0.1#5335 -ipset=/joeswall.com/gfwlist -server=/plantsvszombies2.com/127.0.0.1#5335 -ipset=/plantsvszombies2.com/gfwlist -server=/xn--ztsq84g.cn/127.0.0.1#5335 -ipset=/xn--ztsq84g.cn/gfwlist -server=/ebaya.com/127.0.0.1#5335 -ipset=/ebaya.com/gfwlist -server=/vpro.com/127.0.0.1#5335 -ipset=/vpro.com/gfwlist -server=/vokevr.com/127.0.0.1#5335 -ipset=/vokevr.com/gfwlist -server=/trustedanalytics.com/127.0.0.1#5335 -ipset=/trustedanalytics.com/gfwlist -server=/paypal-japan.com/127.0.0.1#5335 -ipset=/paypal-japan.com/gfwlist -server=/applepodcasts.com/127.0.0.1#5335 -ipset=/applepodcasts.com/gfwlist -server=/thunderbolttechnology.net/127.0.0.1#5335 -ipset=/thunderbolttechnology.net/gfwlist -server=/google.com.eg/127.0.0.1#5335 -ipset=/google.com.eg/gfwlist -server=/siport.com/127.0.0.1#5335 -ipset=/siport.com/gfwlist -server=/sensorynetworks.com/127.0.0.1#5335 -ipset=/sensorynetworks.com/gfwlist -server=/researchintel.com/127.0.0.1#5335 -ipset=/researchintel.com/gfwlist -server=/openjsf.org/127.0.0.1#5335 -ipset=/openjsf.org/gfwlist -server=/reconjet.com/127.0.0.1#5335 -ipset=/reconjet.com/gfwlist -server=/bmw-motorrad.it/127.0.0.1#5335 -ipset=/bmw-motorrad.it/gfwlist -server=/reconinstruments.com/127.0.0.1#5335 -ipset=/reconinstruments.com/gfwlist -server=/imgurinc.com/127.0.0.1#5335 -ipset=/imgurinc.com/gfwlist -server=/opendroneid.org/127.0.0.1#5335 -ipset=/opendroneid.org/gfwlist -server=/openamt.com/127.0.0.1#5335 -ipset=/openamt.com/gfwlist -server=/niosii.com/127.0.0.1#5335 -ipset=/niosii.com/gfwlist -server=/nextgenerationcenter.com/127.0.0.1#5335 -ipset=/nextgenerationcenter.com/gfwlist -server=/smartone.com/127.0.0.1#5335 -ipset=/smartone.com/gfwlist -server=/nervanasys.com/127.0.0.1#5335 -ipset=/nervanasys.com/gfwlist -server=/lookinside.com/127.0.0.1#5335 -ipset=/lookinside.com/gfwlist -server=/canon-se.com.tw/127.0.0.1#5335 -ipset=/canon-se.com.tw/gfwlist -server=/wwwapplemusic.com/127.0.0.1#5335 -ipset=/wwwapplemusic.com/gfwlist -server=/itnel.com/127.0.0.1#5335 -ipset=/itnel.com/gfwlist -server=/intelvmwarecybersecurity.com/127.0.0.1#5335 -ipset=/intelvmwarecybersecurity.com/gfwlist -server=/intelsalestraining.com/127.0.0.1#5335 -ipset=/intelsalestraining.com/gfwlist -server=/bloomberg.co.jp/127.0.0.1#5335 -ipset=/bloomberg.co.jp/gfwlist -server=/2013newbeatsworld.com/127.0.0.1#5335 -ipset=/2013newbeatsworld.com/gfwlist -server=/intelrealsense.com/127.0.0.1#5335 -ipset=/intelrealsense.com/gfwlist -server=/battlefield1943.com/127.0.0.1#5335 -ipset=/battlefield1943.com/gfwlist -server=/duckduckgo.uk/127.0.0.1#5335 -ipset=/duckduckgo.uk/gfwlist -server=/intelquark.com/127.0.0.1#5335 -ipset=/intelquark.com/gfwlist -server=/drebeats-monsteraustralia.com/127.0.0.1#5335 -ipset=/drebeats-monsteraustralia.com/gfwlist -server=/pokemonultrasunmoon.com/127.0.0.1#5335 -ipset=/pokemonultrasunmoon.com/gfwlist -server=/ukipad.com/127.0.0.1#5335 -ipset=/ukipad.com/gfwlist -server=/intelnervana.com/127.0.0.1#5335 -ipset=/intelnervana.com/gfwlist -server=/intellinuxwireless.net/127.0.0.1#5335 -ipset=/intellinuxwireless.net/gfwlist -server=/buyitnow.tv/127.0.0.1#5335 -ipset=/buyitnow.tv/gfwlist -server=/intellearningseries.com/127.0.0.1#5335 -ipset=/intellearningseries.com/gfwlist -server=/inteliotmarketplace.com/127.0.0.1#5335 -ipset=/inteliotmarketplace.com/gfwlist -server=/frostbite.com/127.0.0.1#5335 -ipset=/frostbite.com/gfwlist -server=/intelgo.net/127.0.0.1#5335 -ipset=/intelgo.net/gfwlist -server=/ipods.com/127.0.0.1#5335 -ipset=/ipods.com/gfwlist -server=/espadoldettol.com.ar/127.0.0.1#5335 -ipset=/espadoldettol.com.ar/gfwlist -server=/intelcloudfinder.com/127.0.0.1#5335 -ipset=/intelcloudfinder.com/gfwlist -server=/googlevideo.com/127.0.0.1#5335 -ipset=/googlevideo.com/gfwlist -server=/dacebook.com/127.0.0.1#5335 -ipset=/dacebook.com/gfwlist -server=/fasebook.com/127.0.0.1#5335 -ipset=/fasebook.com/gfwlist -server=/intelcapital.com/127.0.0.1#5335 -ipset=/intelcapital.com/gfwlist -server=/intelatom.net/127.0.0.1#5335 -ipset=/intelatom.net/gfwlist -server=/intelapacstore.com/127.0.0.1#5335 -ipset=/intelapacstore.com/gfwlist -server=/nikesku.com/127.0.0.1#5335 -ipset=/nikesku.com/gfwlist -server=/facebook-ebook.com/127.0.0.1#5335 -ipset=/facebook-ebook.com/gfwlist -server=/doceapower.com/127.0.0.1#5335 -ipset=/doceapower.com/gfwlist -server=/bmw-i-pure-impulse.com/127.0.0.1#5335 -ipset=/bmw-i-pure-impulse.com/gfwlist -server=/wariolandshakeit.com/127.0.0.1#5335 -ipset=/wariolandshakeit.com/gfwlist -server=/crosswalk-project.net/127.0.0.1#5335 -ipset=/crosswalk-project.net/gfwlist -server=/intel.bg/127.0.0.1#5335 -ipset=/intel.bg/gfwlist -server=/coreextreme.com/127.0.0.1#5335 -ipset=/coreextreme.com/gfwlist -server=/ebaypakistan.net/127.0.0.1#5335 -ipset=/ebaypakistan.net/gfwlist -server=/ebay.mn/127.0.0.1#5335 -ipset=/ebay.mn/gfwlist -server=/firestonebpco.com/127.0.0.1#5335 -ipset=/firestonebpco.com/gfwlist -server=/mailhealth.com/127.0.0.1#5335 -ipset=/mailhealth.com/gfwlist -server=/opinionjournal.com/127.0.0.1#5335 -ipset=/opinionjournal.com/gfwlist -server=/facebook.com/127.0.0.1#5335 -ipset=/facebook.com/gfwlist -server=/applenews.berlin/127.0.0.1#5335 -ipset=/applenews.berlin/gfwlist -server=/skysportsonline.com/127.0.0.1#5335 -ipset=/skysportsonline.com/gfwlist -server=/hp3dprinter.com/127.0.0.1#5335 -ipset=/hp3dprinter.com/gfwlist -server=/iphone.es/127.0.0.1#5335 -ipset=/iphone.es/gfwlist -server=/clusterconnection.com/127.0.0.1#5335 -ipset=/clusterconnection.com/gfwlist -server=/playmation.com/127.0.0.1#5335 -ipset=/playmation.com/gfwlist -server=/cilk.net/127.0.0.1#5335 -ipset=/cilk.net/gfwlist -server=/disney.bg/127.0.0.1#5335 -ipset=/disney.bg/gfwlist -server=/launchpad.wang/127.0.0.1#5335 -ipset=/launchpad.wang/gfwlist -server=/bitstamp.net/127.0.0.1#5335 -ipset=/bitstamp.net/gfwlist -server=/microsoft.se/127.0.0.1#5335 -ipset=/microsoft.se/gfwlist -server=/ieee.ca/127.0.0.1#5335 -ipset=/ieee.ca/gfwlist -server=/wireshark.org/127.0.0.1#5335 -ipset=/wireshark.org/gfwlist -server=/celeron.net/127.0.0.1#5335 -ipset=/celeron.net/gfwlist -server=/volvotrucks.net/127.0.0.1#5335 -ipset=/volvotrucks.net/gfwlist -server=/bmw-motorrad.lu/127.0.0.1#5335 -ipset=/bmw-motorrad.lu/gfwlist -server=/celeron.com/127.0.0.1#5335 -ipset=/celeron.com/gfwlist -server=/buyaltera.com/127.0.0.1#5335 -ipset=/buyaltera.com/gfwlist -server=/visabank.org/127.0.0.1#5335 -ipset=/visabank.org/gfwlist -server=/alterauserforums.com/127.0.0.1#5335 -ipset=/alterauserforums.com/gfwlist -server=/sqlite.org/127.0.0.1#5335 -ipset=/sqlite.org/gfwlist -server=/alterauserforum.net/127.0.0.1#5335 -ipset=/alterauserforum.net/gfwlist -server=/neow.in/127.0.0.1#5335 -ipset=/neow.in/gfwlist -server=/ocbmwdealers.com/127.0.0.1#5335 -ipset=/ocbmwdealers.com/gfwlist -server=/foxla.com/127.0.0.1#5335 -ipset=/foxla.com/gfwlist -server=/bmw.tm/127.0.0.1#5335 -ipset=/bmw.tm/gfwlist -server=/vercel-dns.com/127.0.0.1#5335 -ipset=/vercel-dns.com/gfwlist -server=/alteraforums.net/127.0.0.1#5335 -ipset=/alteraforums.net/gfwlist -server=/alteraforum.com/127.0.0.1#5335 -ipset=/alteraforum.com/gfwlist -server=/intel.vu/127.0.0.1#5335 -ipset=/intel.vu/gfwlist -server=/facebol.com/127.0.0.1#5335 -ipset=/facebol.com/gfwlist -server=/paypal-labs.com/127.0.0.1#5335 -ipset=/paypal-labs.com/gfwlist -server=/statuspage.io/127.0.0.1#5335 -ipset=/statuspage.io/gfwlist -server=/intel.vn/127.0.0.1#5335 -ipset=/intel.vn/gfwlist -server=/intel.vg/127.0.0.1#5335 -ipset=/intel.vg/gfwlist -server=/conscrypt.com/127.0.0.1#5335 -ipset=/conscrypt.com/gfwlist -server=/rebates.jp/127.0.0.1#5335 -ipset=/rebates.jp/gfwlist -server=/intel.uy/127.0.0.1#5335 -ipset=/intel.uy/gfwlist -server=/verisign.com.es/127.0.0.1#5335 -ipset=/verisign.com.es/gfwlist -server=/harpercollinschildrensbooks.co.uk/127.0.0.1#5335 -ipset=/harpercollinschildrensbooks.co.uk/gfwlist -server=/sony.com.ec/127.0.0.1#5335 -ipset=/sony.com.ec/gfwlist -server=/ffacebook.com/127.0.0.1#5335 -ipset=/ffacebook.com/gfwlist -server=/intel.tt/127.0.0.1#5335 -ipset=/intel.tt/gfwlist -server=/intel.tn/127.0.0.1#5335 -ipset=/intel.tn/gfwlist -server=/intel.tm/127.0.0.1#5335 -ipset=/intel.tm/gfwlist -server=/pimg.tw/127.0.0.1#5335 -ipset=/pimg.tw/gfwlist -server=/instagramtr.com/127.0.0.1#5335 -ipset=/instagramtr.com/gfwlist -server=/intel.tl/127.0.0.1#5335 -ipset=/intel.tl/gfwlist -server=/hipaa6020.com/127.0.0.1#5335 -ipset=/hipaa6020.com/gfwlist -server=/intel.tj/127.0.0.1#5335 -ipset=/intel.tj/gfwlist -server=/faseboox.com/127.0.0.1#5335 -ipset=/faseboox.com/gfwlist -server=/beatspascher-fr.net/127.0.0.1#5335 -ipset=/beatspascher-fr.net/gfwlist -server=/intel.st/127.0.0.1#5335 -ipset=/intel.st/gfwlist -server=/videodelivery.net/127.0.0.1#5335 -ipset=/videodelivery.net/gfwlist -server=/intel.sk/127.0.0.1#5335 -ipset=/intel.sk/gfwlist -server=/dot-mac.de/127.0.0.1#5335 -ipset=/dot-mac.de/gfwlist -server=/intel.ie/127.0.0.1#5335 -ipset=/intel.ie/gfwlist -server=/intel.sc/127.0.0.1#5335 -ipset=/intel.sc/gfwlist -server=/intel.ro/127.0.0.1#5335 -ipset=/intel.ro/gfwlist -server=/nytcn.me/127.0.0.1#5335 -ipset=/nytcn.me/gfwlist -server=/volvopenta.se/127.0.0.1#5335 -ipset=/volvopenta.se/gfwlist -server=/intel.pn/127.0.0.1#5335 -ipset=/intel.pn/gfwlist -server=/foxstudiolot.com/127.0.0.1#5335 -ipset=/foxstudiolot.com/gfwlist -server=/speybay.com/127.0.0.1#5335 -ipset=/speybay.com/gfwlist -server=/intel.ph/127.0.0.1#5335 -ipset=/intel.ph/gfwlist -server=/intel.pa/127.0.0.1#5335 -ipset=/intel.pa/gfwlist -server=/intel.nu/127.0.0.1#5335 -ipset=/intel.nu/gfwlist -server=/directtv-dish.com/127.0.0.1#5335 -ipset=/directtv-dish.com/gfwlist -server=/minihalifax.com/127.0.0.1#5335 -ipset=/minihalifax.com/gfwlist -server=/intel.mu/127.0.0.1#5335 -ipset=/intel.mu/gfwlist -server=/desktopmovie.com/127.0.0.1#5335 -ipset=/desktopmovie.com/gfwlist -server=/dl-iphone.com/127.0.0.1#5335 -ipset=/dl-iphone.com/gfwlist -server=/intel.mn/127.0.0.1#5335 -ipset=/intel.mn/gfwlist -server=/intel.mg/127.0.0.1#5335 -ipset=/intel.mg/gfwlist -server=/thefind.com/127.0.0.1#5335 -ipset=/thefind.com/gfwlist -server=/bmwchampionshipusa.com/127.0.0.1#5335 -ipset=/bmwchampionshipusa.com/gfwlist -server=/mastercard.hu/127.0.0.1#5335 -ipset=/mastercard.hu/gfwlist -server=/intel.me/127.0.0.1#5335 -ipset=/intel.me/gfwlist -server=/yahoo.ws/127.0.0.1#5335 -ipset=/yahoo.ws/gfwlist -server=/twnextdigital.com/127.0.0.1#5335 -ipset=/twnextdigital.com/gfwlist -server=/bridgestoneperformancemedia.net/127.0.0.1#5335 -ipset=/bridgestoneperformancemedia.net/gfwlist -server=/vmwarevmc.com/127.0.0.1#5335 -ipset=/vmwarevmc.com/gfwlist -server=/macbookair.es/127.0.0.1#5335 -ipset=/macbookair.es/gfwlist -server=/vfsco.de/127.0.0.1#5335 -ipset=/vfsco.de/gfwlist -server=/intel.lu/127.0.0.1#5335 -ipset=/intel.lu/gfwlist -server=/intel.lt/127.0.0.1#5335 -ipset=/intel.lt/gfwlist -server=/intel.lk/127.0.0.1#5335 -ipset=/intel.lk/gfwlist -server=/intel.lc/127.0.0.1#5335 -ipset=/intel.lc/gfwlist -server=/intel.ke/127.0.0.1#5335 -ipset=/intel.ke/gfwlist -server=/freebsd.org/127.0.0.1#5335 -ipset=/freebsd.org/gfwlist -server=/ieeecsc.org/127.0.0.1#5335 -ipset=/ieeecsc.org/gfwlist -server=/intel.jp/127.0.0.1#5335 -ipset=/intel.jp/gfwlist -server=/google.gr/127.0.0.1#5335 -ipset=/google.gr/gfwlist -server=/delvenetworks.com/127.0.0.1#5335 -ipset=/delvenetworks.com/gfwlist -server=/intel.it/127.0.0.1#5335 -ipset=/intel.it/gfwlist -server=/qualcomm.co.jp/127.0.0.1#5335 -ipset=/qualcomm.co.jp/gfwlist -server=/intel.in/127.0.0.1#5335 -ipset=/intel.in/gfwlist -server=/ruten.com.tw/127.0.0.1#5335 -ipset=/ruten.com.tw/gfwlist -server=/intel.sg/127.0.0.1#5335 -ipset=/intel.sg/gfwlist -server=/onlinemonsterbeatsonsale.com/127.0.0.1#5335 -ipset=/onlinemonsterbeatsonsale.com/gfwlist -server=/intel.ht/127.0.0.1#5335 -ipset=/intel.ht/gfwlist -server=/intel.hn/127.0.0.1#5335 -ipset=/intel.hn/gfwlist -server=/intel.hk/127.0.0.1#5335 -ipset=/intel.hk/gfwlist -server=/nutramigen.net/127.0.0.1#5335 -ipset=/nutramigen.net/gfwlist -server=/2ch.net/127.0.0.1#5335 -ipset=/2ch.net/gfwlist -server=/intel.gs/127.0.0.1#5335 -ipset=/intel.gs/gfwlist -server=/intel.gm/127.0.0.1#5335 -ipset=/intel.gm/gfwlist -server=/5ch.net/127.0.0.1#5335 -ipset=/5ch.net/gfwlist -server=/intel.gl/127.0.0.1#5335 -ipset=/intel.gl/gfwlist -server=/intel.ge/127.0.0.1#5335 -ipset=/intel.ge/gfwlist -server=/intel.gd/127.0.0.1#5335 -ipset=/intel.gd/gfwlist -server=/udacity.com/127.0.0.1#5335 -ipset=/udacity.com/gfwlist -server=/singtaonewscorp.com/127.0.0.1#5335 -ipset=/singtaonewscorp.com/gfwlist -server=/intel.es/127.0.0.1#5335 -ipset=/intel.es/gfwlist -server=/intel.ec/127.0.0.1#5335 -ipset=/intel.ec/gfwlist -server=/intel.de/127.0.0.1#5335 -ipset=/intel.de/gfwlist -server=/intel.cz/127.0.0.1#5335 -ipset=/intel.cz/gfwlist -server=/yahoo.co.ve/127.0.0.1#5335 -ipset=/yahoo.co.ve/gfwlist -server=/wikia.nocookie.net/127.0.0.1#5335 -ipset=/wikia.nocookie.net/gfwlist -server=/intel.com.uy/127.0.0.1#5335 -ipset=/intel.com.uy/gfwlist -server=/intel.com.tr/127.0.0.1#5335 -ipset=/intel.com.tr/gfwlist -server=/intel.com.pe/127.0.0.1#5335 -ipset=/intel.com.pe/gfwlist -server=/pillbeatsblackfridaysale.com/127.0.0.1#5335 -ipset=/pillbeatsblackfridaysale.com/gfwlist -server=/ibook.co.nz/127.0.0.1#5335 -ipset=/ibook.co.nz/gfwlist -server=/intel.com.jm/127.0.0.1#5335 -ipset=/intel.com.jm/gfwlist -server=/bmw.nl/127.0.0.1#5335 -ipset=/bmw.nl/gfwlist -server=/bloombergarcade.com/127.0.0.1#5335 -ipset=/bloombergarcade.com/gfwlist -server=/minihalifax.ca/127.0.0.1#5335 -ipset=/minihalifax.ca/gfwlist -server=/intel.com.ec/127.0.0.1#5335 -ipset=/intel.com.ec/gfwlist -server=/intel.com.co/127.0.0.1#5335 -ipset=/intel.com.co/gfwlist -server=/intel.com.bo/127.0.0.1#5335 -ipset=/intel.com.bo/gfwlist -server=/intel.com.au/127.0.0.1#5335 -ipset=/intel.com.au/gfwlist -server=/nikeshoes4u.com/127.0.0.1#5335 -ipset=/nikeshoes4u.com/gfwlist -server=/google.cv/127.0.0.1#5335 -ipset=/google.cv/gfwlist -server=/intel.com.ar/127.0.0.1#5335 -ipset=/intel.com.ar/gfwlist -server=/minisoindia.com/127.0.0.1#5335 -ipset=/minisoindia.com/gfwlist -server=/intel.co.uk/127.0.0.1#5335 -ipset=/intel.co.uk/gfwlist -server=/intel.co.il/127.0.0.1#5335 -ipset=/intel.co.il/gfwlist -server=/intel.co.id/127.0.0.1#5335 -ipset=/intel.co.id/gfwlist -server=/canon.ba/127.0.0.1#5335 -ipset=/canon.ba/gfwlist -server=/mega.co.nz/127.0.0.1#5335 -ipset=/mega.co.nz/gfwlist -server=/intel.cm/127.0.0.1#5335 -ipset=/intel.cm/gfwlist -server=/intel.cg/127.0.0.1#5335 -ipset=/intel.cg/gfwlist -server=/workspaceair.com/127.0.0.1#5335 -ipset=/workspaceair.com/gfwlist -server=/appdynamics.fr/127.0.0.1#5335 -ipset=/appdynamics.fr/gfwlist -server=/intel.cc/127.0.0.1#5335 -ipset=/intel.cc/gfwlist -server=/myoctocat.com/127.0.0.1#5335 -ipset=/myoctocat.com/gfwlist -server=/uug27.com/127.0.0.1#5335 -ipset=/uug27.com/gfwlist -server=/crosswalk-project.com/127.0.0.1#5335 -ipset=/crosswalk-project.com/gfwlist -server=/bmwusaservice.com/127.0.0.1#5335 -ipset=/bmwusaservice.com/gfwlist -server=/beatdrdres.com/127.0.0.1#5335 -ipset=/beatdrdres.com/gfwlist -server=/vmwareidentity.com/127.0.0.1#5335 -ipset=/vmwareidentity.com/gfwlist -server=/paypalhere.org/127.0.0.1#5335 -ipset=/paypalhere.org/gfwlist -server=/intel.az/127.0.0.1#5335 -ipset=/intel.az/gfwlist -server=/intel.at/127.0.0.1#5335 -ipset=/intel.at/gfwlist -server=/businessinsider.my/127.0.0.1#5335 -ipset=/businessinsider.my/gfwlist -server=/intel.ai/127.0.0.1#5335 -ipset=/intel.ai/gfwlist -server=/click-url.com/127.0.0.1#5335 -ipset=/click-url.com/gfwlist -server=/intel.ag/127.0.0.1#5335 -ipset=/intel.ag/gfwlist -server=/69vj.com/127.0.0.1#5335 -ipset=/69vj.com/gfwlist -server=/bnef.com/127.0.0.1#5335 -ipset=/bnef.com/gfwlist -server=/pycon.org/127.0.0.1#5335 -ipset=/pycon.org/gfwlist -server=/intel.ae/127.0.0.1#5335 -ipset=/intel.ae/gfwlist -server=/gettyimages.ca/127.0.0.1#5335 -ipset=/gettyimages.ca/gfwlist -server=/beatsbydrecheaponlinesales.com/127.0.0.1#5335 -ipset=/beatsbydrecheaponlinesales.com/gfwlist -server=/s81c.com/127.0.0.1#5335 -ipset=/s81c.com/gfwlist -server=/pinterest.mx/127.0.0.1#5335 -ipset=/pinterest.mx/gfwlist -server=/webofknowledge.com/127.0.0.1#5335 -ipset=/webofknowledge.com/gfwlist -server=/mastercardmoments.com/127.0.0.1#5335 -ipset=/mastercardmoments.com/gfwlist -server=/applemasters.info/127.0.0.1#5335 -ipset=/applemasters.info/gfwlist -server=/bestbuystores.com/127.0.0.1#5335 -ipset=/bestbuystores.com/gfwlist -server=/justdoit.us/127.0.0.1#5335 -ipset=/justdoit.us/gfwlist -server=/pearsoned.com/127.0.0.1#5335 -ipset=/pearsoned.com/gfwlist -server=/ibm.eu/127.0.0.1#5335 -ipset=/ibm.eu/gfwlist -server=/pugpig-dev.com/127.0.0.1#5335 -ipset=/pugpig-dev.com/gfwlist -server=/xoom-experience.com/127.0.0.1#5335 -ipset=/xoom-experience.com/gfwlist -server=/e-bay.com/127.0.0.1#5335 -ipset=/e-bay.com/gfwlist -server=/visa.co.cr/127.0.0.1#5335 -ipset=/visa.co.cr/gfwlist -server=/blpcareers.com/127.0.0.1#5335 -ipset=/blpcareers.com/gfwlist -server=/dowjoneson.com/127.0.0.1#5335 -ipset=/dowjoneson.com/gfwlist -server=/strepsils.hr/127.0.0.1#5335 -ipset=/strepsils.hr/gfwlist -server=/lolclub.org/127.0.0.1#5335 -ipset=/lolclub.org/gfwlist -server=/foxtel.com/127.0.0.1#5335 -ipset=/foxtel.com/gfwlist -server=/hpstore.corpmerchandise.com/127.0.0.1#5335 -ipset=/hpstore.corpmerchandise.com/gfwlist -server=/pros.ee/127.0.0.1#5335 -ipset=/pros.ee/gfwlist -server=/www8-hp.com/127.0.0.1#5335 -ipset=/www8-hp.com/gfwlist -server=/verisign.fr/127.0.0.1#5335 -ipset=/verisign.fr/gfwlist -server=/strepsils.ch/127.0.0.1#5335 -ipset=/strepsils.ch/gfwlist -server=/touchsmartpc.org/127.0.0.1#5335 -ipset=/touchsmartpc.org/gfwlist -server=/singtao.com/127.0.0.1#5335 -ipset=/singtao.com/gfwlist -server=/beats-headphones-buy-cheap.com/127.0.0.1#5335 -ipset=/beats-headphones-buy-cheap.com/gfwlist -server=/mystrikingly.com/127.0.0.1#5335 -ipset=/mystrikingly.com/gfwlist -server=/serviceshp.com/127.0.0.1#5335 -ipset=/serviceshp.com/gfwlist -server=/realclearmarkets.com/127.0.0.1#5335 -ipset=/realclearmarkets.com/gfwlist -server=/ebay.org/127.0.0.1#5335 -ipset=/ebay.org/gfwlist -server=/printspots.net/127.0.0.1#5335 -ipset=/printspots.net/gfwlist -server=/paylike.com/127.0.0.1#5335 -ipset=/paylike.com/gfwlist -server=/printspots.com/127.0.0.1#5335 -ipset=/printspots.com/gfwlist -server=/custombeatsforcheap.com/127.0.0.1#5335 -ipset=/custombeatsforcheap.com/gfwlist -server=/epochmall.com/127.0.0.1#5335 -ipset=/epochmall.com/gfwlist -server=/printersetupsupport.com/127.0.0.1#5335 -ipset=/printersetupsupport.com/gfwlist -server=/leavinghpinc.com/127.0.0.1#5335 -ipset=/leavinghpinc.com/gfwlist -server=/videopress.com/127.0.0.1#5335 -ipset=/videopress.com/gfwlist -server=/instantink.com/127.0.0.1#5335 -ipset=/instantink.com/gfwlist -server=/ieeesmc.org/127.0.0.1#5335 -ipset=/ieeesmc.org/gfwlist -server=/inkchoice.com/127.0.0.1#5335 -ipset=/inkchoice.com/gfwlist -server=/i-123-hp.com/127.0.0.1#5335 -ipset=/i-123-hp.com/gfwlist -server=/bmwofannapolis.com/127.0.0.1#5335 -ipset=/bmwofannapolis.com/gfwlist -server=/powerofresolve.ca/127.0.0.1#5335 -ipset=/powerofresolve.ca/gfwlist -server=/powersunitedvr.com/127.0.0.1#5335 -ipset=/powersunitedvr.com/gfwlist -server=/hpwallart.com/127.0.0.1#5335 -ipset=/hpwallart.com/gfwlist -server=/amazon-launchpad.com/127.0.0.1#5335 -ipset=/amazon-launchpad.com/gfwlist -server=/startupschool.org/127.0.0.1#5335 -ipset=/startupschool.org/gfwlist -server=/paypal-retail.com/127.0.0.1#5335 -ipset=/paypal-retail.com/gfwlist -server=/needforspeedeliminator.com/127.0.0.1#5335 -ipset=/needforspeedeliminator.com/gfwlist -server=/cheapbeatsbydreoutlets2013.com/127.0.0.1#5335 -ipset=/cheapbeatsbydreoutlets2013.com/gfwlist -server=/parstream.org/127.0.0.1#5335 -ipset=/parstream.org/gfwlist -server=/hpveer.com/127.0.0.1#5335 -ipset=/hpveer.com/gfwlist -server=/panasonic.jp/127.0.0.1#5335 -ipset=/panasonic.jp/gfwlist -server=/anigema.jp/127.0.0.1#5335 -ipset=/anigema.jp/gfwlist -server=/yahoo.ge/127.0.0.1#5335 -ipset=/yahoo.ge/gfwlist -server=/hptrainingcenter.com/127.0.0.1#5335 -ipset=/hptrainingcenter.com/gfwlist -server=/yahoo.dm/127.0.0.1#5335 -ipset=/yahoo.dm/gfwlist -server=/telegram.space/127.0.0.1#5335 -ipset=/telegram.space/gfwlist -server=/duckduckgo.co/127.0.0.1#5335 -ipset=/duckduckgo.co/gfwlist -server=/pearson.ch/127.0.0.1#5335 -ipset=/pearson.ch/gfwlist -server=/cbsi.video/127.0.0.1#5335 -ipset=/cbsi.video/gfwlist -server=/standardsuniversity.org/127.0.0.1#5335 -ipset=/standardsuniversity.org/gfwlist -server=/ebaysocial.com/127.0.0.1#5335 -ipset=/ebaysocial.com/gfwlist -server=/hpsprocket.com/127.0.0.1#5335 -ipset=/hpsprocket.com/gfwlist -server=/googlee.com/127.0.0.1#5335 -ipset=/googlee.com/gfwlist -server=/pearsonclinical.com.br/127.0.0.1#5335 -ipset=/pearsonclinical.com.br/gfwlist -server=/beatsbydresingapores.com/127.0.0.1#5335 -ipset=/beatsbydresingapores.com/gfwlist -server=/epochtimes.eu/127.0.0.1#5335 -ipset=/epochtimes.eu/gfwlist -server=/bmw-yachtsport.com/127.0.0.1#5335 -ipset=/bmw-yachtsport.com/gfwlist -server=/bmw.in/127.0.0.1#5335 -ipset=/bmw.in/gfwlist -server=/applestore.co.jp/127.0.0.1#5335 -ipset=/applestore.co.jp/gfwlist -server=/hpsmartupdate.com/127.0.0.1#5335 -ipset=/hpsmartupdate.com/gfwlist -server=/hpsmartstage.com/127.0.0.1#5335 -ipset=/hpsmartstage.com/gfwlist -server=/hpsmarts.com/127.0.0.1#5335 -ipset=/hpsmarts.com/gfwlist -server=/foxfdm.com/127.0.0.1#5335 -ipset=/foxfdm.com/gfwlist -server=/hpshopping.hk/127.0.0.1#5335 -ipset=/hpshopping.hk/gfwlist -server=/bmw-special-sales.com/127.0.0.1#5335 -ipset=/bmw-special-sales.com/gfwlist -server=/hpshoping.com/127.0.0.1#5335 -ipset=/hpshoping.com/gfwlist -server=/visa.ro/127.0.0.1#5335 -ipset=/visa.ro/gfwlist -server=/hpshop.com/127.0.0.1#5335 -ipset=/hpshop.com/gfwlist -server=/verisign.jobs/127.0.0.1#5335 -ipset=/verisign.jobs/gfwlist -server=/myfoxlubbock.com/127.0.0.1#5335 -ipset=/myfoxlubbock.com/gfwlist -server=/xoom.io/127.0.0.1#5335 -ipset=/xoom.io/gfwlist -server=/apple.ch/127.0.0.1#5335 -ipset=/apple.ch/gfwlist -server=/hpserver.com/127.0.0.1#5335 -ipset=/hpserver.com/gfwlist -server=/hpsalescentral.com/127.0.0.1#5335 -ipset=/hpsalescentral.com/gfwlist -server=/pvp.tv/127.0.0.1#5335 -ipset=/pvp.tv/gfwlist -server=/hpprintersupplies.com/127.0.0.1#5335 -ipset=/hpprintersupplies.com/gfwlist -server=/google.mu/127.0.0.1#5335 -ipset=/google.mu/gfwlist -server=/youtube.iq/127.0.0.1#5335 -ipset=/youtube.iq/gfwlist -server=/playhearthstone.com/127.0.0.1#5335 -ipset=/playhearthstone.com/gfwlist -server=/nikefootballcleats.com/127.0.0.1#5335 -ipset=/nikefootballcleats.com/gfwlist -server=/disneychannelroadtrip.com/127.0.0.1#5335 -ipset=/disneychannelroadtrip.com/gfwlist -server=/hpprinterdrivers.com/127.0.0.1#5335 -ipset=/hpprinterdrivers.com/gfwlist -server=/bmw.com.mt/127.0.0.1#5335 -ipset=/bmw.com.mt/gfwlist -server=/hpphotoscanners.com/127.0.0.1#5335 -ipset=/hpphotoscanners.com/gfwlist -server=/beatscustomblackfriday.com/127.0.0.1#5335 -ipset=/beatscustomblackfriday.com/gfwlist -server=/hppavillionlaptop.com/127.0.0.1#5335 -ipset=/hppavillionlaptop.com/gfwlist -server=/appleonline.com/127.0.0.1#5335 -ipset=/appleonline.com/gfwlist -server=/rentaride.com/127.0.0.1#5335 -ipset=/rentaride.com/gfwlist -server=/ipod.co.nz/127.0.0.1#5335 -ipset=/ipod.co.nz/gfwlist -server=/ccna5.net/127.0.0.1#5335 -ipset=/ccna5.net/gfwlist -server=/hpmicrcartridge.com/127.0.0.1#5335 -ipset=/hpmicrcartridge.com/gfwlist -server=/hpmemorychips.com/127.0.0.1#5335 -ipset=/hpmemorychips.com/gfwlist -server=/hplipopensource.com/127.0.0.1#5335 -ipset=/hplipopensource.com/gfwlist -server=/pinterest.ie/127.0.0.1#5335 -ipset=/pinterest.ie/gfwlist -server=/beatsbydresolohdonline-canada.com/127.0.0.1#5335 -ipset=/beatsbydresolohdonline-canada.com/gfwlist -server=/instagramphoto.com/127.0.0.1#5335 -ipset=/instagramphoto.com/gfwlist -server=/sohcradio.com/127.0.0.1#5335 -ipset=/sohcradio.com/gfwlist -server=/beatsbydre-studio.com/127.0.0.1#5335 -ipset=/beatsbydre-studio.com/gfwlist -server=/zsh.org/127.0.0.1#5335 -ipset=/zsh.org/gfwlist -server=/hpkeyboard.com/127.0.0.1#5335 -ipset=/hpkeyboard.com/gfwlist -server=/bnetshopus.akamaized.net/127.0.0.1#5335 -ipset=/bnetshopus.akamaized.net/gfwlist -server=/foxrichmond.com/127.0.0.1#5335 -ipset=/foxrichmond.com/gfwlist -server=/hpinstantink.ca/127.0.0.1#5335 -ipset=/hpinstantink.ca/gfwlist -server=/hpinkjet.com/127.0.0.1#5335 -ipset=/hpinkjet.com/gfwlist -server=/ebay.ph/127.0.0.1#5335 -ipset=/ebay.ph/gfwlist -server=/hpinc.net/127.0.0.1#5335 -ipset=/hpinc.net/gfwlist -server=/hpinc.info/127.0.0.1#5335 -ipset=/hpinc.info/gfwlist -server=/hpiie.org/127.0.0.1#5335 -ipset=/hpiie.org/gfwlist -server=/javdove8.xyz/127.0.0.1#5335 -ipset=/javdove8.xyz/gfwlist -server=/hpgpas.com/127.0.0.1#5335 -ipset=/hpgpas.com/gfwlist -server=/imoviegallery.com/127.0.0.1#5335 -ipset=/imoviegallery.com/gfwlist -server=/yahoo.vg/127.0.0.1#5335 -ipset=/yahoo.vg/gfwlist -server=/hpeprint.com/127.0.0.1#5335 -ipset=/hpeprint.com/gfwlist -server=/hpengage.com/127.0.0.1#5335 -ipset=/hpengage.com/gfwlist -server=/miitomo.com/127.0.0.1#5335 -ipset=/miitomo.com/gfwlist -server=/aibaobei.me/127.0.0.1#5335 -ipset=/aibaobei.me/gfwlist -server=/hpdrivers.org/127.0.0.1#5335 -ipset=/hpdrivers.org/gfwlist -server=/paypalprepagata.com/127.0.0.1#5335 -ipset=/paypalprepagata.com/gfwlist -server=/hpdreamcolor.com/127.0.0.1#5335 -ipset=/hpdreamcolor.com/gfwlist -server=/hpdesignjetl25500.com/127.0.0.1#5335 -ipset=/hpdesignjetl25500.com/gfwlist -server=/graphengine.io/127.0.0.1#5335 -ipset=/graphengine.io/gfwlist -server=/alivevue.com/127.0.0.1#5335 -ipset=/alivevue.com/gfwlist -server=/hpdaas.com/127.0.0.1#5335 -ipset=/hpdaas.com/gfwlist -server=/speedtest.com.hk/127.0.0.1#5335 -ipset=/speedtest.com.hk/gfwlist -server=/needforspeedshowdown.com/127.0.0.1#5335 -ipset=/needforspeedshowdown.com/gfwlist -server=/miniargentina.com/127.0.0.1#5335 -ipset=/miniargentina.com/gfwlist -server=/heptio.com/127.0.0.1#5335 -ipset=/heptio.com/gfwlist -server=/hpcustomersupport.com/127.0.0.1#5335 -ipset=/hpcustomersupport.com/gfwlist -server=/loanbuilder.com/127.0.0.1#5335 -ipset=/loanbuilder.com/gfwlist -server=/bmw-motorrad.com.mx/127.0.0.1#5335 -ipset=/bmw-motorrad.com.mx/gfwlist -server=/attinternetservice.com/127.0.0.1#5335 -ipset=/attinternetservice.com/gfwlist -server=/hpcu.org/127.0.0.1#5335 -ipset=/hpcu.org/gfwlist -server=/mobileinternational.com/127.0.0.1#5335 -ipset=/mobileinternational.com/gfwlist -server=/mini-connected.fr/127.0.0.1#5335 -ipset=/mini-connected.fr/gfwlist -server=/volvoce.com/127.0.0.1#5335 -ipset=/volvoce.com/gfwlist -server=/staticflickr.com/127.0.0.1#5335 -ipset=/staticflickr.com/gfwlist -server=/hpconnectedstage.com/127.0.0.1#5335 -ipset=/hpconnectedstage.com/gfwlist -server=/api-priconne-redive.cygames.jp/127.0.0.1#5335 -ipset=/api-priconne-redive.cygames.jp/gfwlist -server=/linuxfoundation.org/127.0.0.1#5335 -ipset=/linuxfoundation.org/gfwlist -server=/nativeincolour.com.au/127.0.0.1#5335 -ipset=/nativeincolour.com.au/gfwlist -server=/alphabet.no/127.0.0.1#5335 -ipset=/alphabet.no/gfwlist -server=/nbcuniversal.com/127.0.0.1#5335 -ipset=/nbcuniversal.com/gfwlist -server=/hpconnected.org/127.0.0.1#5335 -ipset=/hpconnected.org/gfwlist -server=/pinterest.jp/127.0.0.1#5335 -ipset=/pinterest.jp/gfwlist -server=/ebayanunsios.net/127.0.0.1#5335 -ipset=/ebayanunsios.net/gfwlist -server=/hpcomputerservices.com/127.0.0.1#5335 -ipset=/hpcomputerservices.com/gfwlist -server=/hpcomputers.com/127.0.0.1#5335 -ipset=/hpcomputers.com/gfwlist -server=/fecbooc.com/127.0.0.1#5335 -ipset=/fecbooc.com/gfwlist -server=/bmw.com.br/127.0.0.1#5335 -ipset=/bmw.com.br/gfwlist -server=/hpcmw.net/127.0.0.1#5335 -ipset=/hpcmw.net/gfwlist -server=/wifi-mx.com/127.0.0.1#5335 -ipset=/wifi-mx.com/gfwlist -server=/rpmfusion.org/127.0.0.1#5335 -ipset=/rpmfusion.org/gfwlist -server=/icloud.se/127.0.0.1#5335 -ipset=/icloud.se/gfwlist -server=/eastweek.com.hk/127.0.0.1#5335 -ipset=/eastweek.com.hk/gfwlist -server=/hpccp.com/127.0.0.1#5335 -ipset=/hpccp.com/gfwlist -server=/hpbluecarpet.net/127.0.0.1#5335 -ipset=/hpbluecarpet.net/gfwlist -server=/applepaycash.net/127.0.0.1#5335 -ipset=/applepaycash.net/gfwlist -server=/hpbluecarpet.com/127.0.0.1#5335 -ipset=/hpbluecarpet.com/gfwlist -server=/cybermondaybeats4sale.com/127.0.0.1#5335 -ipset=/cybermondaybeats4sale.com/gfwlist -server=/hpbestbuy.com/127.0.0.1#5335 -ipset=/hpbestbuy.com/gfwlist -server=/line-scdn.net/127.0.0.1#5335 -ipset=/line-scdn.net/gfwlist -server=/bitbank.cc/127.0.0.1#5335 -ipset=/bitbank.cc/gfwlist -server=/iphoto.no/127.0.0.1#5335 -ipset=/iphoto.no/gfwlist -server=/hp3dmetals.com/127.0.0.1#5335 -ipset=/hp3dmetals.com/gfwlist -server=/hp.io/127.0.0.1#5335 -ipset=/hp.io/gfwlist -server=/nikegolf.ca/127.0.0.1#5335 -ipset=/nikegolf.ca/gfwlist -server=/hp.company/127.0.0.1#5335 -ipset=/hp.company/gfwlist -server=/applepay.rs/127.0.0.1#5335 -ipset=/applepay.rs/gfwlist -server=/hp-ww.com/127.0.0.1#5335 -ipset=/hp-ww.com/gfwlist -server=/hp-mns.com/127.0.0.1#5335 -ipset=/hp-mns.com/gfwlist -server=/hp-invent.info/127.0.0.1#5335 -ipset=/hp-invent.info/gfwlist -server=/verizon.net/127.0.0.1#5335 -ipset=/verizon.net/gfwlist -server=/hp-infolab.com/127.0.0.1#5335 -ipset=/hp-infolab.com/gfwlist -server=/nextmag.com.tw/127.0.0.1#5335 -ipset=/nextmag.com.tw/gfwlist -server=/hp-imagine.com/127.0.0.1#5335 -ipset=/hp-imagine.com/gfwlist -server=/splatoon2tournament.com/127.0.0.1#5335 -ipset=/splatoon2tournament.com/gfwlist -server=/tvbanywhere.com.sg/127.0.0.1#5335 -ipset=/tvbanywhere.com.sg/gfwlist -server=/gnu.org/127.0.0.1#5335 -ipset=/gnu.org/gfwlist -server=/paypa1.org/127.0.0.1#5335 -ipset=/paypa1.org/gfwlist -server=/alterauserforum.com/127.0.0.1#5335 -ipset=/alterauserforum.com/gfwlist -server=/battlefieldv.com/127.0.0.1#5335 -ipset=/battlefieldv.com/gfwlist -server=/livingyourambition.com/127.0.0.1#5335 -ipset=/livingyourambition.com/gfwlist -server=/zoho.eu/127.0.0.1#5335 -ipset=/zoho.eu/gfwlist -server=/demoprint.com/127.0.0.1#5335 -ipset=/demoprint.com/gfwlist -server=/google.com.vn/127.0.0.1#5335 -ipset=/google.com.vn/gfwlist -server=/david-laserscanner.com/127.0.0.1#5335 -ipset=/david-laserscanner.com/gfwlist -server=/compaq.org/127.0.0.1#5335 -ipset=/compaq.org/gfwlist -server=/oneworldmanystories.com/127.0.0.1#5335 -ipset=/oneworldmanystories.com/gfwlist -server=/thesun.co.uk/127.0.0.1#5335 -ipset=/thesun.co.uk/gfwlist -server=/campushp.com/127.0.0.1#5335 -ipset=/campushp.com/gfwlist -server=/as-hp.ca/127.0.0.1#5335 -ipset=/as-hp.ca/gfwlist -server=/8008206616.com/127.0.0.1#5335 -ipset=/8008206616.com/gfwlist -server=/123hplaserjet.com/127.0.0.1#5335 -ipset=/123hplaserjet.com/gfwlist -server=/123-hp.com/127.0.0.1#5335 -ipset=/123-hp.com/gfwlist -server=/mysimsracing.com/127.0.0.1#5335 -ipset=/mysimsracing.com/gfwlist -server=/jos.com/127.0.0.1#5335 -ipset=/jos.com/gfwlist -server=/hkbnes.net/127.0.0.1#5335 -ipset=/hkbnes.net/gfwlist -server=/hkbn.com.hk/127.0.0.1#5335 -ipset=/hkbn.com.hk/gfwlist -server=/csifund.org/127.0.0.1#5335 -ipset=/csifund.org/gfwlist -server=/youporn.com/127.0.0.1#5335 -ipset=/youporn.com/gfwlist -server=/disney.fr/127.0.0.1#5335 -ipset=/disney.fr/gfwlist -server=/appleid.com/127.0.0.1#5335 -ipset=/appleid.com/gfwlist -server=/googlecode.com/127.0.0.1#5335 -ipset=/googlecode.com/gfwlist -server=/dicela.com/127.0.0.1#5335 -ipset=/dicela.com/gfwlist -server=/huffingtonpost.de/127.0.0.1#5335 -ipset=/huffingtonpost.de/gfwlist -server=/travelex.com.om/127.0.0.1#5335 -ipset=/travelex.com.om/gfwlist -server=/fcacebook.com/127.0.0.1#5335 -ipset=/fcacebook.com/gfwlist -server=/disney.pl/127.0.0.1#5335 -ipset=/disney.pl/gfwlist -server=/xda-developers.com/127.0.0.1#5335 -ipset=/xda-developers.com/gfwlist -server=/xn--gogl-0nd52e.com/127.0.0.1#5335 -ipset=/xn--gogl-0nd52e.com/gfwlist -server=/xn--ggle-55da.com/127.0.0.1#5335 -ipset=/xn--ggle-55da.com/gfwlist -server=/xn--flw351e.com/127.0.0.1#5335 -ipset=/xn--flw351e.com/gfwlist -server=/scholar.google.co.il/127.0.0.1#5335 -ipset=/scholar.google.co.il/gfwlist -server=/xn--9trs65b.com/127.0.0.1#5335 -ipset=/xn--9trs65b.com/gfwlist -server=/gfotolia.com/127.0.0.1#5335 -ipset=/gfotolia.com/gfwlist -server=/ieeer10.org/127.0.0.1#5335 -ipset=/ieeer10.org/gfwlist -server=/atlassian.com/127.0.0.1#5335 -ipset=/atlassian.com/gfwlist -server=/filipino-music.net/127.0.0.1#5335 -ipset=/filipino-music.net/gfwlist -server=/withgoogle.com/127.0.0.1#5335 -ipset=/withgoogle.com/gfwlist -server=/bmw.com.do/127.0.0.1#5335 -ipset=/bmw.com.do/gfwlist -server=/jsbridgestone.com/127.0.0.1#5335 -ipset=/jsbridgestone.com/gfwlist -server=/miniso.ie/127.0.0.1#5335 -ipset=/miniso.ie/gfwlist -server=/alphabet.co.hu/127.0.0.1#5335 -ipset=/alphabet.co.hu/gfwlist -server=/webappfieldguide.com/127.0.0.1#5335 -ipset=/webappfieldguide.com/gfwlist -server=/waze.com/127.0.0.1#5335 -ipset=/waze.com/gfwlist -server=/waymo.com/127.0.0.1#5335 -ipset=/waymo.com/gfwlist -server=/ministeagathe.com/127.0.0.1#5335 -ipset=/ministeagathe.com/gfwlist -server=/verilystudywatch.org/127.0.0.1#5335 -ipset=/verilystudywatch.org/gfwlist -server=/ebayit.com/127.0.0.1#5335 -ipset=/ebayit.com/gfwlist -server=/volvotrucks.am/127.0.0.1#5335 -ipset=/volvotrucks.am/gfwlist -server=/verilystudyhub.com/127.0.0.1#5335 -ipset=/verilystudyhub.com/gfwlist -server=/appsonebay.net/127.0.0.1#5335 -ipset=/appsonebay.net/gfwlist -server=/volvobuses.ph/127.0.0.1#5335 -ipset=/volvobuses.ph/gfwlist -server=/google.lu/127.0.0.1#5335 -ipset=/google.lu/gfwlist -server=/starbucks.ph/127.0.0.1#5335 -ipset=/starbucks.ph/gfwlist -server=/unfiltered.news/127.0.0.1#5335 -ipset=/unfiltered.news/gfwlist -server=/thinkquarterly.com/127.0.0.1#5335 -ipset=/thinkquarterly.com/gfwlist -server=/iosinthecar.com/127.0.0.1#5335 -ipset=/iosinthecar.com/gfwlist -server=/tensorflow.org/127.0.0.1#5335 -ipset=/tensorflow.org/gfwlist -server=/nintendonyc.com/127.0.0.1#5335 -ipset=/nintendonyc.com/gfwlist -server=/synergyse.com/127.0.0.1#5335 -ipset=/synergyse.com/gfwlist -server=/animezilla.com/127.0.0.1#5335 -ipset=/animezilla.com/gfwlist -server=/stxmosquitoproject.com/127.0.0.1#5335 -ipset=/stxmosquitoproject.com/gfwlist -server=/tribler.org/127.0.0.1#5335 -ipset=/tribler.org/gfwlist -server=/bmw-grouparchives.com/127.0.0.1#5335 -ipset=/bmw-grouparchives.com/gfwlist -server=/zencoder.com/127.0.0.1#5335 -ipset=/zencoder.com/gfwlist -server=/freedomplatform.tv/127.0.0.1#5335 -ipset=/freedomplatform.tv/gfwlist -server=/ninemediaroom.com.au/127.0.0.1#5335 -ipset=/ninemediaroom.com.au/gfwlist -server=/dilcdn.com/127.0.0.1#5335 -ipset=/dilcdn.com/gfwlist -server=/gfx.ms/127.0.0.1#5335 -ipset=/gfx.ms/gfwlist -server=/brazzers.com/127.0.0.1#5335 -ipset=/brazzers.com/gfwlist -server=/stcroixmosquitoproject.com/127.0.0.1#5335 -ipset=/stcroixmosquitoproject.com/gfwlist -server=/bbgwatch.com/127.0.0.1#5335 -ipset=/bbgwatch.com/gfwlist -server=/stcroixmosquito.com/127.0.0.1#5335 -ipset=/stcroixmosquito.com/gfwlist -server=/adobestock.com/127.0.0.1#5335 -ipset=/adobestock.com/gfwlist -server=/blogspot.co.nz/127.0.0.1#5335 -ipset=/blogspot.co.nz/gfwlist -server=/enfamil.es/127.0.0.1#5335 -ipset=/enfamil.es/gfwlist -server=/aorus.com/127.0.0.1#5335 -ipset=/aorus.com/gfwlist -server=/illianacomputerrecycling.com/127.0.0.1#5335 -ipset=/illianacomputerrecycling.com/gfwlist -server=/ebay-25-assets.s3-us-west-1.amazonaws.com/127.0.0.1#5335 -ipset=/ebay-25-assets.s3-us-west-1.amazonaws.com/gfwlist -server=/apole.com/127.0.0.1#5335 -ipset=/apole.com/gfwlist -server=/solveforx.com/127.0.0.1#5335 -ipset=/solveforx.com/gfwlist -server=/screenwisetrendspanel.com/127.0.0.1#5335 -ipset=/screenwisetrendspanel.com/gfwlist -server=/screenwisetrends.com/127.0.0.1#5335 -ipset=/screenwisetrends.com/gfwlist -server=/mastercard.es/127.0.0.1#5335 -ipset=/mastercard.es/gfwlist -server=/easports.jp/127.0.0.1#5335 -ipset=/easports.jp/gfwlist -server=/jwpltx.com/127.0.0.1#5335 -ipset=/jwpltx.com/gfwlist -server=/finishinfo.com/127.0.0.1#5335 -ipset=/finishinfo.com/gfwlist -server=/login-paypal.info/127.0.0.1#5335 -ipset=/login-paypal.info/gfwlist -server=/sfx.ms/127.0.0.1#5335 -ipset=/sfx.ms/gfwlist -server=/run.app/127.0.0.1#5335 -ipset=/run.app/gfwlist -server=/huffingtonpost.com/127.0.0.1#5335 -ipset=/huffingtonpost.com/gfwlist -server=/fontshop.com/127.0.0.1#5335 -ipset=/fontshop.com/gfwlist -server=/cnivogue.com.au/127.0.0.1#5335 -ipset=/cnivogue.com.au/gfwlist -server=/ridepenguin.com/127.0.0.1#5335 -ipset=/ridepenguin.com/gfwlist -server=/m12.vc/127.0.0.1#5335 -ipset=/m12.vc/gfwlist -server=/esbeatsbydrebuy.com/127.0.0.1#5335 -ipset=/esbeatsbydrebuy.com/gfwlist -server=/quiksee.com/127.0.0.1#5335 -ipset=/quiksee.com/gfwlist -server=/happymeal.co.nz/127.0.0.1#5335 -ipset=/happymeal.co.nz/gfwlist -server=/questvisual.com/127.0.0.1#5335 -ipset=/questvisual.com/gfwlist -server=/paypalindia.com/127.0.0.1#5335 -ipset=/paypalindia.com/gfwlist -server=/foxrobots.com/127.0.0.1#5335 -ipset=/foxrobots.com/gfwlist -server=/dtci.co/127.0.0.1#5335 -ipset=/dtci.co/gfwlist -server=/projectara.com/127.0.0.1#5335 -ipset=/projectara.com/gfwlist -server=/adobess.com/127.0.0.1#5335 -ipset=/adobess.com/gfwlist -server=/bmwmagazine.de/127.0.0.1#5335 -ipset=/bmwmagazine.de/gfwlist -server=/privacysandbox.com/127.0.0.1#5335 -ipset=/privacysandbox.com/gfwlist -server=/news.net.au/127.0.0.1#5335 -ipset=/news.net.au/gfwlist -server=/pixate.com/127.0.0.1#5335 -ipset=/pixate.com/gfwlist -server=/kindleoasis.us/127.0.0.1#5335 -ipset=/kindleoasis.us/gfwlist -server=/bmw-authority-vehicles.com/127.0.0.1#5335 -ipset=/bmw-authority-vehicles.com/gfwlist -server=/picasaweb.com/127.0.0.1#5335 -ipset=/picasaweb.com/gfwlist -server=/amerikaninsesi.org/127.0.0.1#5335 -ipset=/amerikaninsesi.org/gfwlist -server=/connectionslearning.com/127.0.0.1#5335 -ipset=/connectionslearning.com/gfwlist -server=/ebay-us.com/127.0.0.1#5335 -ipset=/ebay-us.com/gfwlist -server=/panoramio.com/127.0.0.1#5335 -ipset=/panoramio.com/gfwlist -server=/pageview.mobi/127.0.0.1#5335 -ipset=/pageview.mobi/gfwlist -server=/brand-protection-team.com/127.0.0.1#5335 -ipset=/brand-protection-team.com/gfwlist -server=/pagespeedmobilizer.com/127.0.0.1#5335 -ipset=/pagespeedmobilizer.com/gfwlist -server=/vfsco.ca/127.0.0.1#5335 -ipset=/vfsco.ca/gfwlist -server=/geek-squad.org/127.0.0.1#5335 -ipset=/geek-squad.org/gfwlist -server=/colorprotechnology.com/127.0.0.1#5335 -ipset=/colorprotechnology.com/gfwlist -server=/beatsdrdreneon.com/127.0.0.1#5335 -ipset=/beatsdrdreneon.com/gfwlist -server=/mini-tahiti.com/127.0.0.1#5335 -ipset=/mini-tahiti.com/gfwlist -server=/youav.com/127.0.0.1#5335 -ipset=/youav.com/gfwlist -server=/blackfridaydrebeatsnew.com/127.0.0.1#5335 -ipset=/blackfridaydrebeatsnew.com/gfwlist -server=/monsterheadphone.net/127.0.0.1#5335 -ipset=/monsterheadphone.net/gfwlist -server=/thegeorgiascene.com/127.0.0.1#5335 -ipset=/thegeorgiascene.com/gfwlist -server=/shopbmwusa.com/127.0.0.1#5335 -ipset=/shopbmwusa.com/gfwlist -server=/on2.com/127.0.0.1#5335 -ipset=/on2.com/gfwlist -server=/towerauction.com/127.0.0.1#5335 -ipset=/towerauction.com/gfwlist -server=/on.here/127.0.0.1#5335 -ipset=/on.here/gfwlist -server=/drdrebeatsretail2013.com/127.0.0.1#5335 -ipset=/drdrebeatsretail2013.com/gfwlist -server=/fury.help/127.0.0.1#5335 -ipset=/fury.help/gfwlist -server=/azureiotcentral.com/127.0.0.1#5335 -ipset=/azureiotcentral.com/gfwlist -server=/near.by/127.0.0.1#5335 -ipset=/near.by/gfwlist -server=/mobileview.page/127.0.0.1#5335 -ipset=/mobileview.page/gfwlist -server=/itunes.co/127.0.0.1#5335 -ipset=/itunes.co/gfwlist -server=/meet.new/127.0.0.1#5335 -ipset=/meet.new/gfwlist -server=/gettyimages.com.au/127.0.0.1#5335 -ipset=/gettyimages.com.au/gfwlist -server=/m-power.com/127.0.0.1#5335 -ipset=/m-power.com/gfwlist -server=/material.io/127.0.0.1#5335 -ipset=/material.io/gfwlist -server=/workplace.com/127.0.0.1#5335 -ipset=/workplace.com/gfwlist -server=/nikefree.com/127.0.0.1#5335 -ipset=/nikefree.com/gfwlist -server=/canon.com.by/127.0.0.1#5335 -ipset=/canon.com.by/gfwlist -server=/madewithcode.com/127.0.0.1#5335 -ipset=/madewithcode.com/gfwlist -server=/like.com/127.0.0.1#5335 -ipset=/like.com/gfwlist -server=/lanternal.com/127.0.0.1#5335 -ipset=/lanternal.com/gfwlist -server=/veet.dk/127.0.0.1#5335 -ipset=/veet.dk/gfwlist -server=/jibemobile.com/127.0.0.1#5335 -ipset=/jibemobile.com/gfwlist -server=/bmw-motorrad.cz/127.0.0.1#5335 -ipset=/bmw-motorrad.cz/gfwlist -server=/setapp.com/127.0.0.1#5335 -ipset=/setapp.com/gfwlist -server=/renovacionoffice.com/127.0.0.1#5335 -ipset=/renovacionoffice.com/gfwlist -server=/enfagrow.com.ph/127.0.0.1#5335 -ipset=/enfagrow.com.ph/gfwlist -server=/akamai-platform.net/127.0.0.1#5335 -ipset=/akamai-platform.net/gfwlist -server=/cloudcone.com/127.0.0.1#5335 -ipset=/cloudcone.com/gfwlist -server=/youtube.at/127.0.0.1#5335 -ipset=/youtube.at/gfwlist -server=/gvt9.com/127.0.0.1#5335 -ipset=/gvt9.com/gfwlist -server=/gannett.com/127.0.0.1#5335 -ipset=/gannett.com/gfwlist -server=/gvt6.com/127.0.0.1#5335 -ipset=/gvt6.com/gfwlist -server=/beatsbydreus.com/127.0.0.1#5335 -ipset=/beatsbydreus.com/gfwlist -server=/binoculus.com/127.0.0.1#5335 -ipset=/binoculus.com/gfwlist -server=/pricelessaruba.com/127.0.0.1#5335 -ipset=/pricelessaruba.com/gfwlist -server=/momo5188.com/127.0.0.1#5335 -ipset=/momo5188.com/gfwlist -server=/scholar.google.co.id/127.0.0.1#5335 -ipset=/scholar.google.co.id/gfwlist -server=/gvt1.com/127.0.0.1#5335 -ipset=/gvt1.com/gfwlist -server=/gvt0.com/127.0.0.1#5335 -ipset=/gvt0.com/gfwlist -server=/veetcentroamerica.com/127.0.0.1#5335 -ipset=/veetcentroamerica.com/gfwlist -server=/bwh88.net/127.0.0.1#5335 -ipset=/bwh88.net/gfwlist -server=/gsuite.com/127.0.0.1#5335 -ipset=/gsuite.com/gfwlist -server=/gstatic.com/127.0.0.1#5335 -ipset=/gstatic.com/gfwlist -server=/ggsrv.com/127.0.0.1#5335 -ipset=/ggsrv.com/gfwlist -server=/bumpshare.com/127.0.0.1#5335 -ipset=/bumpshare.com/gfwlist -server=/visa.dk/127.0.0.1#5335 -ipset=/visa.dk/gfwlist -server=/aboutamazon.de/127.0.0.1#5335 -ipset=/aboutamazon.de/gfwlist -server=/szwinnertechnology.com/127.0.0.1#5335 -ipset=/szwinnertechnology.com/gfwlist -server=/gooogle.com/127.0.0.1#5335 -ipset=/gooogle.com/gfwlist -server=/sony.com.ar/127.0.0.1#5335 -ipset=/sony.com.ar/gfwlist -server=/googlr.com/127.0.0.1#5335 -ipset=/googlr.com/gfwlist -server=/pinterest.pt/127.0.0.1#5335 -ipset=/pinterest.pt/gfwlist -server=/scholarpedia.org/127.0.0.1#5335 -ipset=/scholarpedia.org/gfwlist -server=/capitalgames.com/127.0.0.1#5335 -ipset=/capitalgames.com/gfwlist -server=/nurofen.no/127.0.0.1#5335 -ipset=/nurofen.no/gfwlist -server=/googlesverige.com/127.0.0.1#5335 -ipset=/googlesverige.com/gfwlist -server=/googlesource.com/127.0.0.1#5335 -ipset=/googlesource.com/gfwlist -server=/visa.co.za/127.0.0.1#5335 -ipset=/visa.co.za/gfwlist -server=/finish.pt/127.0.0.1#5335 -ipset=/finish.pt/gfwlist -server=/amazonpay.com/127.0.0.1#5335 -ipset=/amazonpay.com/gfwlist -server=/googleplay.com/127.0.0.1#5335 -ipset=/googleplay.com/gfwlist -server=/futureshop.ca/127.0.0.1#5335 -ipset=/futureshop.ca/gfwlist -server=/googlephotos.com/127.0.0.1#5335 -ipset=/googlephotos.com/gfwlist -server=/googlepagecreator.com/127.0.0.1#5335 -ipset=/googlepagecreator.com/gfwlist -server=/srebrenica360.com/127.0.0.1#5335 -ipset=/srebrenica360.com/gfwlist -server=/googlemaps.com/127.0.0.1#5335 -ipset=/googlemaps.com/gfwlist -server=/visaluxuryhotels.com/127.0.0.1#5335 -ipset=/visaluxuryhotels.com/gfwlist -server=/yale.edu/127.0.0.1#5335 -ipset=/yale.edu/gfwlist -server=/googlefiber.net/127.0.0.1#5335 -ipset=/googlefiber.net/gfwlist -server=/hpsoftware.com/127.0.0.1#5335 -ipset=/hpsoftware.com/gfwlist -server=/ecoforme.jp/127.0.0.1#5335 -ipset=/ecoforme.jp/gfwlist -server=/minisothailand.com/127.0.0.1#5335 -ipset=/minisothailand.com/gfwlist -server=/applemusic.wang/127.0.0.1#5335 -ipset=/applemusic.wang/gfwlist -server=/w.wiki/127.0.0.1#5335 -ipset=/w.wiki/gfwlist -server=/localbitcoinschain.com/127.0.0.1#5335 -ipset=/localbitcoinschain.com/gfwlist -server=/macintosh.eu/127.0.0.1#5335 -ipset=/macintosh.eu/gfwlist -server=/microsoftsiteselection.com/127.0.0.1#5335 -ipset=/microsoftsiteselection.com/gfwlist -server=/googlebot.com/127.0.0.1#5335 -ipset=/googlebot.com/gfwlist -server=/newisiknowledge.com/127.0.0.1#5335 -ipset=/newisiknowledge.com/gfwlist -server=/edninfo.com/127.0.0.1#5335 -ipset=/edninfo.com/gfwlist -server=/vaginacontest.com/127.0.0.1#5335 -ipset=/vaginacontest.com/gfwlist -server=/intheknow.com.au/127.0.0.1#5335 -ipset=/intheknow.com.au/gfwlist -server=/etwealth.com/127.0.0.1#5335 -ipset=/etwealth.com/gfwlist -server=/facebookinc.com/127.0.0.1#5335 -ipset=/facebookinc.com/gfwlist -server=/beatsblackfridaydeals.net/127.0.0.1#5335 -ipset=/beatsblackfridaydeals.net/gfwlist -server=/pornhd.com/127.0.0.1#5335 -ipset=/pornhd.com/gfwlist -server=/strepsils.com.co/127.0.0.1#5335 -ipset=/strepsils.com.co/gfwlist -server=/google.net/127.0.0.1#5335 -ipset=/google.net/gfwlist -server=/google.dev/127.0.0.1#5335 -ipset=/google.dev/gfwlist -server=/youtubego.in/127.0.0.1#5335 -ipset=/youtubego.in/gfwlist -server=/vanish.no/127.0.0.1#5335 -ipset=/vanish.no/gfwlist -server=/google.co.bw/127.0.0.1#5335 -ipset=/google.co.bw/gfwlist -server=/faceboook.com/127.0.0.1#5335 -ipset=/faceboook.com/gfwlist -server=/goo.gl/127.0.0.1#5335 -ipset=/goo.gl/gfwlist -server=/microsoftreactor.net/127.0.0.1#5335 -ipset=/microsoftreactor.net/gfwlist -server=/gonglchuangl.net/127.0.0.1#5335 -ipset=/gonglchuangl.net/gfwlist -server=/gogle.com/127.0.0.1#5335 -ipset=/gogle.com/gfwlist -server=/gmodules.com/127.0.0.1#5335 -ipset=/gmodules.com/gfwlist -server=/gmail.com/127.0.0.1#5335 -ipset=/gmail.com/gfwlist -server=/volvosaatio.fi/127.0.0.1#5335 -ipset=/volvosaatio.fi/gfwlist -server=/dettol.co.ke/127.0.0.1#5335 -ipset=/dettol.co.ke/gfwlist -server=/umagazine.com.hk/127.0.0.1#5335 -ipset=/umagazine.com.hk/gfwlist -server=/gipscorp.com/127.0.0.1#5335 -ipset=/gipscorp.com/gfwlist -server=/volvotrucks.co.il/127.0.0.1#5335 -ipset=/volvotrucks.co.il/gfwlist -server=/directvdsl.tv/127.0.0.1#5335 -ipset=/directvdsl.tv/gfwlist -server=/getbumptop.com/127.0.0.1#5335 -ipset=/getbumptop.com/gfwlist -server=/gerritcodereview.com/127.0.0.1#5335 -ipset=/gerritcodereview.com/gfwlist -server=/gcr.io/127.0.0.1#5335 -ipset=/gcr.io/gfwlist -server=/gateway.dev/127.0.0.1#5335 -ipset=/gateway.dev/gfwlist -server=/thomsonreuters.co.uk/127.0.0.1#5335 -ipset=/thomsonreuters.co.uk/gfwlist -server=/google.co.cr/127.0.0.1#5335 -ipset=/google.co.cr/gfwlist -server=/g-tun.com/127.0.0.1#5335 -ipset=/g-tun.com/gfwlist -server=/ghcr.io/127.0.0.1#5335 -ipset=/ghcr.io/gfwlist -server=/fuchsia.dev/127.0.0.1#5335 -ipset=/fuchsia.dev/gfwlist -server=/entermediadb.org/127.0.0.1#5335 -ipset=/entermediadb.org/gfwlist -server=/gettyimages.nl/127.0.0.1#5335 -ipset=/gettyimages.nl/gfwlist -server=/shadowsocks.org/127.0.0.1#5335 -ipset=/shadowsocks.org/gfwlist -server=/pieceofplastic.com/127.0.0.1#5335 -ipset=/pieceofplastic.com/gfwlist -server=/deepmind.com/127.0.0.1#5335 -ipset=/deepmind.com/gfwlist -server=/rakuten.ne.jp/127.0.0.1#5335 -ipset=/rakuten.ne.jp/gfwlist -server=/beatsbydrdre-officials5.com/127.0.0.1#5335 -ipset=/beatsbydrdre-officials5.com/gfwlist -server=/dombosco.com.br/127.0.0.1#5335 -ipset=/dombosco.com.br/gfwlist -server=/foofle.com/127.0.0.1#5335 -ipset=/foofle.com/gfwlist -server=/iamakamai.com/127.0.0.1#5335 -ipset=/iamakamai.com/gfwlist -server=/directvonline.com/127.0.0.1#5335 -ipset=/directvonline.com/gfwlist -server=/firebaseapp.com/127.0.0.1#5335 -ipset=/firebaseapp.com/gfwlist -server=/amazon-lantern.com/127.0.0.1#5335 -ipset=/amazon-lantern.com/gfwlist -server=/visa.de/127.0.0.1#5335 -ipset=/visa.de/gfwlist -server=/redditmail.com/127.0.0.1#5335 -ipset=/redditmail.com/gfwlist -server=/episodic.com/127.0.0.1#5335 -ipset=/episodic.com/gfwlist -server=/nikechosen.com/127.0.0.1#5335 -ipset=/nikechosen.com/gfwlist -server=/dialogflow.com/127.0.0.1#5335 -ipset=/dialogflow.com/gfwlist -server=/corporatecashpassport.com/127.0.0.1#5335 -ipset=/corporatecashpassport.com/gfwlist -server=/devsitetest.how/127.0.0.1#5335 -ipset=/devsitetest.how/gfwlist -server=/blogspot.co.ke/127.0.0.1#5335 -ipset=/blogspot.co.ke/gfwlist -server=/vcanedge.com/127.0.0.1#5335 -ipset=/vcanedge.com/gfwlist -server=/linemobile.com/127.0.0.1#5335 -ipset=/linemobile.com/gfwlist -server=/dataliberation.org/127.0.0.1#5335 -ipset=/dataliberation.org/gfwlist -server=/dartsearch.net/127.0.0.1#5335 -ipset=/dartsearch.net/gfwlist -server=/crr.com/127.0.0.1#5335 -ipset=/crr.com/gfwlist -server=/dotmac.de/127.0.0.1#5335 -ipset=/dotmac.de/gfwlist -server=/coova.org/127.0.0.1#5335 -ipset=/coova.org/gfwlist -server=/media.prod.mdn.mozit.cloud/127.0.0.1#5335 -ipset=/media.prod.mdn.mozit.cloud/gfwlist -server=/coova.com/127.0.0.1#5335 -ipset=/coova.com/gfwlist -server=/sciencedirect.com/127.0.0.1#5335 -ipset=/sciencedirect.com/gfwlist -server=/azure-test.net/127.0.0.1#5335 -ipset=/azure-test.net/gfwlist -server=/oculusrift.com/127.0.0.1#5335 -ipset=/oculusrift.com/gfwlist -server=/codespot.com/127.0.0.1#5335 -ipset=/codespot.com/gfwlist -server=/cobrasearch.com/127.0.0.1#5335 -ipset=/cobrasearch.com/gfwlist -server=/bestbuyus.com/127.0.0.1#5335 -ipset=/bestbuyus.com/gfwlist -server=/chronicle.security/127.0.0.1#5335 -ipset=/chronicle.security/gfwlist -server=/4beatsbydre.com/127.0.0.1#5335 -ipset=/4beatsbydre.com/gfwlist -server=/chromecast.com/127.0.0.1#5335 -ipset=/chromecast.com/gfwlist -server=/caijinglengyan.com/127.0.0.1#5335 -ipset=/caijinglengyan.com/gfwlist -server=/cheapbeatsbydrestudioutlet.com/127.0.0.1#5335 -ipset=/cheapbeatsbydrestudioutlet.com/gfwlist -server=/softbankmobile.net/127.0.0.1#5335 -ipset=/softbankmobile.net/gfwlist -server=/bloombergapps.com/127.0.0.1#5335 -ipset=/bloombergapps.com/gfwlist -server=/t21.nikkei.co.jp/127.0.0.1#5335 -ipset=/t21.nikkei.co.jp/gfwlist -server=/buyaple.com/127.0.0.1#5335 -ipset=/buyaple.com/gfwlist -server=/12diasdepresentesdeitunes.com/127.0.0.1#5335 -ipset=/12diasdepresentesdeitunes.com/gfwlist -server=/bumptunes.com/127.0.0.1#5335 -ipset=/bumptunes.com/gfwlist -server=/bumptop.com/127.0.0.1#5335 -ipset=/bumptop.com/gfwlist -server=/sing68.com/127.0.0.1#5335 -ipset=/sing68.com/gfwlist -server=/bmwcenternet.com/127.0.0.1#5335 -ipset=/bmwcenternet.com/gfwlist -server=/amazondevicesupport.com/127.0.0.1#5335 -ipset=/amazondevicesupport.com/gfwlist -server=/bumptop.ca/127.0.0.1#5335 -ipset=/bumptop.ca/gfwlist -server=/fanatical.com/127.0.0.1#5335 -ipset=/fanatical.com/gfwlist -server=/bmw-mdrivetour.com/127.0.0.1#5335 -ipset=/bmw-mdrivetour.com/gfwlist -server=/blogblog.com/127.0.0.1#5335 -ipset=/blogblog.com/gfwlist -server=/billpoint.tv/127.0.0.1#5335 -ipset=/billpoint.tv/gfwlist -server=/stateofthemap.com/127.0.0.1#5335 -ipset=/stateofthemap.com/gfwlist -server=/google.ch/127.0.0.1#5335 -ipset=/google.ch/gfwlist -server=/appl-e.com/127.0.0.1#5335 -ipset=/appl-e.com/gfwlist -server=/thomsonreuters.in/127.0.0.1#5335 -ipset=/thomsonreuters.in/gfwlist -server=/visa.co.ni/127.0.0.1#5335 -ipset=/visa.co.ni/gfwlist -server=/ibooksauthor.com/127.0.0.1#5335 -ipset=/ibooksauthor.com/gfwlist -server=/baselinestudy.org/127.0.0.1#5335 -ipset=/baselinestudy.org/gfwlist -server=/bandpage.com/127.0.0.1#5335 -ipset=/bandpage.com/gfwlist -server=/gumtree.sg/127.0.0.1#5335 -ipset=/gumtree.sg/gfwlist -server=/paypal-comunidad.com/127.0.0.1#5335 -ipset=/paypal-comunidad.com/gfwlist -server=/appleoriginalproductions.com/127.0.0.1#5335 -ipset=/appleoriginalproductions.com/gfwlist -server=/apture.com/127.0.0.1#5335 -ipset=/apture.com/gfwlist -server=/carcare-and-tireshop.jp/127.0.0.1#5335 -ipset=/carcare-and-tireshop.jp/gfwlist -server=/appbridge.it/127.0.0.1#5335 -ipset=/appbridge.it/gfwlist -server=/appbridge.io/127.0.0.1#5335 -ipset=/appbridge.io/gfwlist -server=/firestonecomercial.co.cr/127.0.0.1#5335 -ipset=/firestonecomercial.co.cr/gfwlist -server=/custombeatsny.com/127.0.0.1#5335 -ipset=/custombeatsny.com/gfwlist -server=/api.ai/127.0.0.1#5335 -ipset=/api.ai/gfwlist -server=/yande.re/127.0.0.1#5335 -ipset=/yande.re/gfwlist -server=/angulardart.org/127.0.0.1#5335 -ipset=/angulardart.org/gfwlist -server=/visaitalia.com/127.0.0.1#5335 -ipset=/visaitalia.com/gfwlist -server=/adgoogle.net/127.0.0.1#5335 -ipset=/adgoogle.net/gfwlist -server=/abc.xyz/127.0.0.1#5335 -ipset=/abc.xyz/gfwlist -server=/verisign.de/127.0.0.1#5335 -ipset=/verisign.de/gfwlist -server=/yahoo.ps/127.0.0.1#5335 -ipset=/yahoo.ps/gfwlist -server=/monstercasquebeatspascher.net/127.0.0.1#5335 -ipset=/monstercasquebeatspascher.net/gfwlist -server=/dlercloud.org/127.0.0.1#5335 -ipset=/dlercloud.org/gfwlist -server=/akamai-staging.net/127.0.0.1#5335 -ipset=/akamai-staging.net/gfwlist -server=/google.ws/127.0.0.1#5335 -ipset=/google.ws/gfwlist -server=/microsoftiotcentral.com/127.0.0.1#5335 -ipset=/microsoftiotcentral.com/gfwlist -server=/google.to/127.0.0.1#5335 -ipset=/google.to/gfwlist -server=/flutterapp.com/127.0.0.1#5335 -ipset=/flutterapp.com/gfwlist -server=/google.sr/127.0.0.1#5335 -ipset=/google.sr/gfwlist -server=/google.so/127.0.0.1#5335 -ipset=/google.so/gfwlist -server=/google.sk/127.0.0.1#5335 -ipset=/google.sk/gfwlist -server=/facebook30.com/127.0.0.1#5335 -ipset=/facebook30.com/gfwlist -server=/google.si/127.0.0.1#5335 -ipset=/google.si/gfwlist -server=/theman.in/127.0.0.1#5335 -ipset=/theman.in/gfwlist -server=/google.sh/127.0.0.1#5335 -ipset=/google.sh/gfwlist -server=/google.se/127.0.0.1#5335 -ipset=/google.se/gfwlist -server=/my20dc.com/127.0.0.1#5335 -ipset=/my20dc.com/gfwlist -server=/itunes.com/127.0.0.1#5335 -ipset=/itunes.com/gfwlist -server=/google.pt/127.0.0.1#5335 -ipset=/google.pt/gfwlist -server=/visa.com.hn/127.0.0.1#5335 -ipset=/visa.com.hn/gfwlist -server=/google.ps/127.0.0.1#5335 -ipset=/google.ps/gfwlist -server=/google.nl/127.0.0.1#5335 -ipset=/google.nl/gfwlist -server=/drdre-beats.com/127.0.0.1#5335 -ipset=/drdre-beats.com/gfwlist -server=/alchemysynth.com/127.0.0.1#5335 -ipset=/alchemysynth.com/gfwlist -server=/klik.me/127.0.0.1#5335 -ipset=/klik.me/gfwlist -server=/google.mv/127.0.0.1#5335 -ipset=/google.mv/gfwlist -server=/fireside.fm/127.0.0.1#5335 -ipset=/fireside.fm/gfwlist -server=/beatsbydre-club.com/127.0.0.1#5335 -ipset=/beatsbydre-club.com/gfwlist -server=/cisconetapp.com/127.0.0.1#5335 -ipset=/cisconetapp.com/gfwlist -server=/google.mn/127.0.0.1#5335 -ipset=/google.mn/gfwlist -server=/google.ml/127.0.0.1#5335 -ipset=/google.ml/gfwlist -server=/google.mg/127.0.0.1#5335 -ipset=/google.mg/gfwlist -server=/nextmedia.com.tw/127.0.0.1#5335 -ipset=/nextmedia.com.tw/gfwlist -server=/cpan.org/127.0.0.1#5335 -ipset=/cpan.org/gfwlist -server=/foxest.com/127.0.0.1#5335 -ipset=/foxest.com/gfwlist -server=/apple.no/127.0.0.1#5335 -ipset=/apple.no/gfwlist -server=/bollywoodlife.com/127.0.0.1#5335 -ipset=/bollywoodlife.com/gfwlist -server=/verilylifesciences.com/127.0.0.1#5335 -ipset=/verilylifesciences.com/gfwlist -server=/google.lt/127.0.0.1#5335 -ipset=/google.lt/gfwlist -server=/nikebetterworld.info/127.0.0.1#5335 -ipset=/nikebetterworld.info/gfwlist -server=/bookmybridgestonetyre.com/127.0.0.1#5335 -ipset=/bookmybridgestonetyre.com/gfwlist -server=/google.kz/127.0.0.1#5335 -ipset=/google.kz/gfwlist -server=/google.ki/127.0.0.1#5335 -ipset=/google.ki/gfwlist -server=/duckduckgo.pl/127.0.0.1#5335 -ipset=/duckduckgo.pl/gfwlist -server=/drdrebeatsdesale.com/127.0.0.1#5335 -ipset=/drdrebeatsdesale.com/gfwlist -server=/monsterbeatssales.com/127.0.0.1#5335 -ipset=/monsterbeatssales.com/gfwlist -server=/google.jo/127.0.0.1#5335 -ipset=/google.jo/gfwlist -server=/google.is/127.0.0.1#5335 -ipset=/google.is/gfwlist -server=/niketraining.com/127.0.0.1#5335 -ipset=/niketraining.com/gfwlist -server=/ebay.co.za/127.0.0.1#5335 -ipset=/ebay.co.za/gfwlist -server=/minilaval.ca/127.0.0.1#5335 -ipset=/minilaval.ca/gfwlist -server=/besthentaitube.com/127.0.0.1#5335 -ipset=/besthentaitube.com/gfwlist -server=/historyofdota.org/127.0.0.1#5335 -ipset=/historyofdota.org/gfwlist -server=/scholar.google.cz/127.0.0.1#5335 -ipset=/scholar.google.cz/gfwlist -server=/google.iq/127.0.0.1#5335 -ipset=/google.iq/gfwlist -server=/nikefoampositeshoes.com/127.0.0.1#5335 -ipset=/nikefoampositeshoes.com/gfwlist -server=/dvdstudiopro.us/127.0.0.1#5335 -ipset=/dvdstudiopro.us/gfwlist -server=/google.im/127.0.0.1#5335 -ipset=/google.im/gfwlist -server=/google.ie/127.0.0.1#5335 -ipset=/google.ie/gfwlist -server=/google.hu/127.0.0.1#5335 -ipset=/google.hu/gfwlist -server=/minisojordan.com/127.0.0.1#5335 -ipset=/minisojordan.com/gfwlist -server=/nikeshoesgroup.com/127.0.0.1#5335 -ipset=/nikeshoesgroup.com/gfwlist -server=/pocketbiketrader.com/127.0.0.1#5335 -ipset=/pocketbiketrader.com/gfwlist -server=/google.hr/127.0.0.1#5335 -ipset=/google.hr/gfwlist -server=/pinterest.ca/127.0.0.1#5335 -ipset=/pinterest.ca/gfwlist -server=/akamqi.com/127.0.0.1#5335 -ipset=/akamqi.com/gfwlist -server=/google.gl/127.0.0.1#5335 -ipset=/google.gl/gfwlist -server=/f8.com/127.0.0.1#5335 -ipset=/f8.com/gfwlist -server=/verisign.com/127.0.0.1#5335 -ipset=/verisign.com/gfwlist -server=/ebayla.org/127.0.0.1#5335 -ipset=/ebayla.org/gfwlist -server=/google.gg/127.0.0.1#5335 -ipset=/google.gg/gfwlist -server=/ntdtv.jp/127.0.0.1#5335 -ipset=/ntdtv.jp/gfwlist -server=/google.ge/127.0.0.1#5335 -ipset=/google.ge/gfwlist -server=/foxandfriends.com/127.0.0.1#5335 -ipset=/foxandfriends.com/gfwlist -server=/beatsbydre-sell.com/127.0.0.1#5335 -ipset=/beatsbydre-sell.com/gfwlist -server=/fotolia-noticias.com/127.0.0.1#5335 -ipset=/fotolia-noticias.com/gfwlist -server=/google.es/127.0.0.1#5335 -ipset=/google.es/gfwlist -server=/google.ee/127.0.0.1#5335 -ipset=/google.ee/gfwlist -server=/google.dz/127.0.0.1#5335 -ipset=/google.dz/gfwlist -server=/nytco.com/127.0.0.1#5335 -ipset=/nytco.com/gfwlist -server=/z5.com/127.0.0.1#5335 -ipset=/z5.com/gfwlist -server=/francecasquebeatssolde.com/127.0.0.1#5335 -ipset=/francecasquebeatssolde.com/gfwlist -server=/visa.co.ve/127.0.0.1#5335 -ipset=/visa.co.ve/gfwlist -server=/bcovlive-a.akamaihd.net/127.0.0.1#5335 -ipset=/bcovlive-a.akamaihd.net/gfwlist -server=/google.dj/127.0.0.1#5335 -ipset=/google.dj/gfwlist -server=/google.com.vc/127.0.0.1#5335 -ipset=/google.com.vc/gfwlist -server=/ciscoinvestments.com/127.0.0.1#5335 -ipset=/ciscoinvestments.com/gfwlist -server=/cnnpolitics.com/127.0.0.1#5335 -ipset=/cnnpolitics.com/gfwlist -server=/google.com.tr/127.0.0.1#5335 -ipset=/google.com.tr/gfwlist -server=/cowboom.com/127.0.0.1#5335 -ipset=/cowboom.com/gfwlist -server=/google.com.na/127.0.0.1#5335 -ipset=/google.com.na/gfwlist -server=/iphone.pt/127.0.0.1#5335 -ipset=/iphone.pt/gfwlist -server=/nytchina.com/127.0.0.1#5335 -ipset=/nytchina.com/gfwlist -server=/egghead.io/127.0.0.1#5335 -ipset=/egghead.io/gfwlist -server=/edx.org/127.0.0.1#5335 -ipset=/edx.org/gfwlist -server=/google.com.qa/127.0.0.1#5335 -ipset=/google.com.qa/gfwlist -server=/regiongold.com/127.0.0.1#5335 -ipset=/regiongold.com/gfwlist -server=/google.com.pr/127.0.0.1#5335 -ipset=/google.com.pr/gfwlist -server=/google.com.pk/127.0.0.1#5335 -ipset=/google.com.pk/gfwlist -server=/greatfire.org/127.0.0.1#5335 -ipset=/greatfire.org/gfwlist -server=/free-sns.com/127.0.0.1#5335 -ipset=/free-sns.com/gfwlist -server=/google.com.ph/127.0.0.1#5335 -ipset=/google.com.ph/gfwlist -server=/githubusercontent.com/127.0.0.1#5335 -ipset=/githubusercontent.com/gfwlist -server=/google.com.pg/127.0.0.1#5335 -ipset=/google.com.pg/gfwlist -server=/books.com.tw/127.0.0.1#5335 -ipset=/books.com.tw/gfwlist -server=/bmwworld.net/127.0.0.1#5335 -ipset=/bmwworld.net/gfwlist -server=/cloudflare.com/127.0.0.1#5335 -ipset=/cloudflare.com/gfwlist -server=/google.com.pe/127.0.0.1#5335 -ipset=/google.com.pe/gfwlist -server=/google.com.pa/127.0.0.1#5335 -ipset=/google.com.pa/gfwlist -server=/google.com.ng/127.0.0.1#5335 -ipset=/google.com.ng/gfwlist -server=/visa.com.hr/127.0.0.1#5335 -ipset=/visa.com.hr/gfwlist -server=/facebooktv.org/127.0.0.1#5335 -ipset=/facebooktv.org/gfwlist -server=/google.com.mm/127.0.0.1#5335 -ipset=/google.com.mm/gfwlist -server=/securepaypal.info/127.0.0.1#5335 -ipset=/securepaypal.info/gfwlist -server=/google.com.lb/127.0.0.1#5335 -ipset=/google.com.lb/gfwlist -server=/facebookvacation.com/127.0.0.1#5335 -ipset=/facebookvacation.com/gfwlist -server=/mastercard.pl/127.0.0.1#5335 -ipset=/mastercard.pl/gfwlist -server=/google.com.jm/127.0.0.1#5335 -ipset=/google.com.jm/gfwlist -server=/facebookdevelopergarage.com/127.0.0.1#5335 -ipset=/facebookdevelopergarage.com/gfwlist -server=/scholar.google.it/127.0.0.1#5335 -ipset=/scholar.google.it/gfwlist -server=/google.com.gi/127.0.0.1#5335 -ipset=/google.com.gi/gfwlist -server=/google.com.fj/127.0.0.1#5335 -ipset=/google.com.fj/gfwlist -server=/google.com.et/127.0.0.1#5335 -ipset=/google.com.et/gfwlist -server=/careerfundas.com/127.0.0.1#5335 -ipset=/careerfundas.com/gfwlist -server=/google.com.ec/127.0.0.1#5335 -ipset=/google.com.ec/gfwlist -server=/douwriteright.com/127.0.0.1#5335 -ipset=/douwriteright.com/gfwlist -server=/google.com.do/127.0.0.1#5335 -ipset=/google.com.do/gfwlist -server=/beatthatquote.com/127.0.0.1#5335 -ipset=/beatthatquote.com/gfwlist -server=/foxnewshealth.com/127.0.0.1#5335 -ipset=/foxnewshealth.com/gfwlist -server=/google.com.co/127.0.0.1#5335 -ipset=/google.com.co/gfwlist -server=/ikea.net/127.0.0.1#5335 -ipset=/ikea.net/gfwlist -server=/mdialog.com/127.0.0.1#5335 -ipset=/mdialog.com/gfwlist -server=/google.com.bn/127.0.0.1#5335 -ipset=/google.com.bn/gfwlist -server=/images-amazon.com/127.0.0.1#5335 -ipset=/images-amazon.com/gfwlist -server=/fosebook.com/127.0.0.1#5335 -ipset=/fosebook.com/gfwlist -server=/psiphon3.com/127.0.0.1#5335 -ipset=/psiphon3.com/gfwlist -server=/google.com.ai/127.0.0.1#5335 -ipset=/google.com.ai/gfwlist -server=/google.com.ag/127.0.0.1#5335 -ipset=/google.com.ag/gfwlist -server=/engineeringvillage.com/127.0.0.1#5335 -ipset=/engineeringvillage.com/gfwlist -server=/mini.co.me/127.0.0.1#5335 -ipset=/mini.co.me/gfwlist -server=/worldsfastestgamer.net/127.0.0.1#5335 -ipset=/worldsfastestgamer.net/gfwlist -server=/google.co.zw/127.0.0.1#5335 -ipset=/google.co.zw/gfwlist -server=/google.co.zm/127.0.0.1#5335 -ipset=/google.co.zm/gfwlist -server=/google.co.za/127.0.0.1#5335 -ipset=/google.co.za/gfwlist -server=/google.co.vi/127.0.0.1#5335 -ipset=/google.co.vi/gfwlist -server=/google.co.ve/127.0.0.1#5335 -ipset=/google.co.ve/gfwlist -server=/beatssaleus.com/127.0.0.1#5335 -ipset=/beatssaleus.com/gfwlist -server=/google.co.ug/127.0.0.1#5335 -ipset=/google.co.ug/gfwlist -server=/geodesummit.com/127.0.0.1#5335 -ipset=/geodesummit.com/gfwlist -server=/google.co.th/127.0.0.1#5335 -ipset=/google.co.th/gfwlist -server=/jable.tv/127.0.0.1#5335 -ipset=/jable.tv/gfwlist -server=/google.co.nz/127.0.0.1#5335 -ipset=/google.co.nz/gfwlist -server=/google.co.mz/127.0.0.1#5335 -ipset=/google.co.mz/gfwlist -server=/netflixdnstest1.com/127.0.0.1#5335 -ipset=/netflixdnstest1.com/gfwlist -server=/bingworld.com/127.0.0.1#5335 -ipset=/bingworld.com/gfwlist -server=/nypost.com/127.0.0.1#5335 -ipset=/nypost.com/gfwlist -server=/pokemonletsgopikachu.com/127.0.0.1#5335 -ipset=/pokemonletsgopikachu.com/gfwlist -server=/google.co.ls/127.0.0.1#5335 -ipset=/google.co.ls/gfwlist -server=/google.co.kr/127.0.0.1#5335 -ipset=/google.co.kr/gfwlist -server=/instagmania.com/127.0.0.1#5335 -ipset=/instagmania.com/gfwlist -server=/google.co.ke/127.0.0.1#5335 -ipset=/google.co.ke/gfwlist -server=/google.co.in/127.0.0.1#5335 -ipset=/google.co.in/gfwlist -server=/airav.cc/127.0.0.1#5335 -ipset=/airav.cc/gfwlist -server=/stlouisbmw.net/127.0.0.1#5335 -ipset=/stlouisbmw.net/gfwlist -server=/g.page/127.0.0.1#5335 -ipset=/g.page/gfwlist -server=/barrons-advisor.com/127.0.0.1#5335 -ipset=/barrons-advisor.com/gfwlist -server=/asproex.com/127.0.0.1#5335 -ipset=/asproex.com/gfwlist -server=/bluefootcms.com/127.0.0.1#5335 -ipset=/bluefootcms.com/gfwlist -server=/javhdfree.net/127.0.0.1#5335 -ipset=/javhdfree.net/gfwlist -server=/loli.net/127.0.0.1#5335 -ipset=/loli.net/gfwlist -server=/google.cm/127.0.0.1#5335 -ipset=/google.cm/gfwlist -server=/google.ci/127.0.0.1#5335 -ipset=/google.ci/gfwlist -server=/volvotrucks.com.co/127.0.0.1#5335 -ipset=/volvotrucks.com.co/gfwlist -server=/dierectv.com/127.0.0.1#5335 -ipset=/dierectv.com/gfwlist -server=/google.com.cy/127.0.0.1#5335 -ipset=/google.com.cy/gfwlist -server=/google.cd/127.0.0.1#5335 -ipset=/google.cd/gfwlist -server=/google.bt/127.0.0.1#5335 -ipset=/google.bt/gfwlist -server=/womensnikeshox.com/127.0.0.1#5335 -ipset=/womensnikeshox.com/gfwlist -server=/google.bs/127.0.0.1#5335 -ipset=/google.bs/gfwlist -server=/beatsbydre-outletstore.com/127.0.0.1#5335 -ipset=/beatsbydre-outletstore.com/gfwlist -server=/bmw-connecteddrive.co.uk/127.0.0.1#5335 -ipset=/bmw-connecteddrive.co.uk/gfwlist -server=/tvbanywhere.com/127.0.0.1#5335 -ipset=/tvbanywhere.com/gfwlist -server=/google.bj/127.0.0.1#5335 -ipset=/google.bj/gfwlist -server=/google.bi/127.0.0.1#5335 -ipset=/google.bi/gfwlist -server=/pashtovoa.com/127.0.0.1#5335 -ipset=/pashtovoa.com/gfwlist -server=/google.bg/127.0.0.1#5335 -ipset=/google.bg/gfwlist -server=/google.bf/127.0.0.1#5335 -ipset=/google.bf/gfwlist -server=/google.ba/127.0.0.1#5335 -ipset=/google.ba/gfwlist -server=/google.am/127.0.0.1#5335 -ipset=/google.am/gfwlist -server=/swisssigner.com/127.0.0.1#5335 -ipset=/swisssigner.com/gfwlist -server=/google.al/127.0.0.1#5335 -ipset=/google.al/gfwlist -server=/applepremiumreseller.com.au/127.0.0.1#5335 -ipset=/applepremiumreseller.com.au/gfwlist -server=/ibook.eu/127.0.0.1#5335 -ipset=/ibook.eu/gfwlist -server=/uux68.com/127.0.0.1#5335 -ipset=/uux68.com/gfwlist -server=/google.ad/127.0.0.1#5335 -ipset=/google.ad/gfwlist -server=/blizzak-juken.jp/127.0.0.1#5335 -ipset=/blizzak-juken.jp/gfwlist -server=/youtubekids.com/127.0.0.1#5335 -ipset=/youtubekids.com/gfwlist -server=/youtubei.googleapis.com/127.0.0.1#5335 -ipset=/youtubei.googleapis.com/gfwlist -server=/beats-bydreoutletssale.net/127.0.0.1#5335 -ipset=/beats-bydreoutletssale.net/gfwlist -server=/texttobuy.org/127.0.0.1#5335 -ipset=/texttobuy.org/gfwlist -server=/vaultify.info/127.0.0.1#5335 -ipset=/vaultify.info/gfwlist -server=/appstore.co.id/127.0.0.1#5335 -ipset=/appstore.co.id/gfwlist -server=/ieee-region6.org/127.0.0.1#5335 -ipset=/ieee-region6.org/gfwlist -server=/youtubego.com/127.0.0.1#5335 -ipset=/youtubego.com/gfwlist -server=/zee5.com/127.0.0.1#5335 -ipset=/zee5.com/gfwlist -server=/japanknowledge.com/127.0.0.1#5335 -ipset=/japanknowledge.com/gfwlist -server=/wiisportsresort.com/127.0.0.1#5335 -ipset=/wiisportsresort.com/gfwlist -server=/freebs.com/127.0.0.1#5335 -ipset=/freebs.com/gfwlist -server=/binancezh.com/127.0.0.1#5335 -ipset=/binancezh.com/gfwlist -server=/youtubegaming.com/127.0.0.1#5335 -ipset=/youtubegaming.com/gfwlist -server=/riotpin.com/127.0.0.1#5335 -ipset=/riotpin.com/gfwlist -server=/youtubeeducation.com/127.0.0.1#5335 -ipset=/youtubeeducation.com/gfwlist -server=/facebooik.org/127.0.0.1#5335 -ipset=/facebooik.org/gfwlist -server=/youtube.ug/127.0.0.1#5335 -ipset=/youtube.ug/gfwlist -server=/adobetcstrialdvd.com/127.0.0.1#5335 -ipset=/adobetcstrialdvd.com/gfwlist -server=/leagueoflegends.org/127.0.0.1#5335 -ipset=/leagueoflegends.org/gfwlist -server=/monsterbeats8beatsbydre.com/127.0.0.1#5335 -ipset=/monsterbeats8beatsbydre.com/gfwlist -server=/paypal-login.info/127.0.0.1#5335 -ipset=/paypal-login.info/gfwlist -server=/youtube.tn/127.0.0.1#5335 -ipset=/youtube.tn/gfwlist -server=/findercdn.me/127.0.0.1#5335 -ipset=/findercdn.me/gfwlist -server=/computer.org/127.0.0.1#5335 -ipset=/computer.org/gfwlist -server=/iphone.host/127.0.0.1#5335 -ipset=/iphone.host/gfwlist -server=/visaeurope.ch/127.0.0.1#5335 -ipset=/visaeurope.ch/gfwlist -server=/foxnews.cc/127.0.0.1#5335 -ipset=/foxnews.cc/gfwlist -server=/youtube.co/127.0.0.1#5335 -ipset=/youtube.co/gfwlist -server=/youtube.sn/127.0.0.1#5335 -ipset=/youtube.sn/gfwlist -server=/beatsbydrdre-onsale.com/127.0.0.1#5335 -ipset=/beatsbydrdre-onsale.com/gfwlist -server=/youtube.sk/127.0.0.1#5335 -ipset=/youtube.sk/gfwlist -server=/blogspot.com.ar/127.0.0.1#5335 -ipset=/blogspot.com.ar/gfwlist -server=/dropboxforum.com/127.0.0.1#5335 -ipset=/dropboxforum.com/gfwlist -server=/forbes.com/127.0.0.1#5335 -ipset=/forbes.com/gfwlist -server=/debugproject.com/127.0.0.1#5335 -ipset=/debugproject.com/gfwlist -server=/globalsign.eu/127.0.0.1#5335 -ipset=/globalsign.eu/gfwlist -server=/youtube.pr/127.0.0.1#5335 -ipset=/youtube.pr/gfwlist -server=/youtube.pl/127.0.0.1#5335 -ipset=/youtube.pl/gfwlist -server=/swissstick.com/127.0.0.1#5335 -ipset=/swissstick.com/gfwlist -server=/volvotruckcenter.fi/127.0.0.1#5335 -ipset=/volvotruckcenter.fi/gfwlist -server=/youtube.ph/127.0.0.1#5335 -ipset=/youtube.ph/gfwlist -server=/youtube.nl/127.0.0.1#5335 -ipset=/youtube.nl/gfwlist -server=/youtube.ma/127.0.0.1#5335 -ipset=/youtube.ma/gfwlist -server=/youtube.lv/127.0.0.1#5335 -ipset=/youtube.lv/gfwlist -server=/youtube.lk/127.0.0.1#5335 -ipset=/youtube.lk/gfwlist -server=/pearsoneducationbooks.com/127.0.0.1#5335 -ipset=/pearsoneducationbooks.com/gfwlist -server=/youtube.la/127.0.0.1#5335 -ipset=/youtube.la/gfwlist -server=/mini.com.br/127.0.0.1#5335 -ipset=/mini.com.br/gfwlist -server=/applestor.com/127.0.0.1#5335 -ipset=/applestor.com/gfwlist -server=/google.com.bh/127.0.0.1#5335 -ipset=/google.com.bh/gfwlist -server=/buyshoponly.com/127.0.0.1#5335 -ipset=/buyshoponly.com/gfwlist -server=/dcard.tw/127.0.0.1#5335 -ipset=/dcard.tw/gfwlist -server=/blogspot.co.za/127.0.0.1#5335 -ipset=/blogspot.co.za/gfwlist -server=/battlefield5.com/127.0.0.1#5335 -ipset=/battlefield5.com/gfwlist -server=/youtube.kr/127.0.0.1#5335 -ipset=/youtube.kr/gfwlist -server=/youtube.soy/127.0.0.1#5335 -ipset=/youtube.soy/gfwlist -server=/youtube.ie/127.0.0.1#5335 -ipset=/youtube.ie/gfwlist -server=/tokyomotion.net/127.0.0.1#5335 -ipset=/tokyomotion.net/gfwlist -server=/akafms.net/127.0.0.1#5335 -ipset=/akafms.net/gfwlist -server=/youtube.gr/127.0.0.1#5335 -ipset=/youtube.gr/gfwlist -server=/youtube.ge/127.0.0.1#5335 -ipset=/youtube.ge/gfwlist -server=/ikea.com/127.0.0.1#5335 -ipset=/ikea.com/gfwlist -server=/youtube.fi/127.0.0.1#5335 -ipset=/youtube.fi/gfwlist -server=/canon.pl/127.0.0.1#5335 -ipset=/canon.pl/gfwlist -server=/itsoc.org/127.0.0.1#5335 -ipset=/itsoc.org/gfwlist -server=/kijjiji.ca/127.0.0.1#5335 -ipset=/kijjiji.ca/gfwlist -server=/repswing.com/127.0.0.1#5335 -ipset=/repswing.com/gfwlist -server=/craigslist.org/127.0.0.1#5335 -ipset=/craigslist.org/gfwlist -server=/sahabatsetiasmartone.com/127.0.0.1#5335 -ipset=/sahabatsetiasmartone.com/gfwlist -server=/applepay.com.tw/127.0.0.1#5335 -ipset=/applepay.com.tw/gfwlist -server=/youtube.dk/127.0.0.1#5335 -ipset=/youtube.dk/gfwlist -server=/youtube.de/127.0.0.1#5335 -ipset=/youtube.de/gfwlist -server=/brilliant.org/127.0.0.1#5335 -ipset=/brilliant.org/gfwlist -server=/facebook-texas-holdem.net/127.0.0.1#5335 -ipset=/facebook-texas-holdem.net/gfwlist -server=/youtube.cr/127.0.0.1#5335 -ipset=/youtube.cr/gfwlist -server=/youtube.com.tw/127.0.0.1#5335 -ipset=/youtube.com.tw/gfwlist -server=/youtube.com.tr/127.0.0.1#5335 -ipset=/youtube.com.tr/gfwlist -server=/samsungdm.com/127.0.0.1#5335 -ipset=/samsungdm.com/gfwlist -server=/visa.com.ec/127.0.0.1#5335 -ipset=/visa.com.ec/gfwlist -server=/bmw-motorrad.ru/127.0.0.1#5335 -ipset=/bmw-motorrad.ru/gfwlist -server=/directtv-deals.tv/127.0.0.1#5335 -ipset=/directtv-deals.tv/gfwlist -server=/identrust.co.uk/127.0.0.1#5335 -ipset=/identrust.co.uk/gfwlist -server=/sony.ru/127.0.0.1#5335 -ipset=/sony.ru/gfwlist -server=/youtube.com.pt/127.0.0.1#5335 -ipset=/youtube.com.pt/gfwlist -server=/pugetsoundmini.com/127.0.0.1#5335 -ipset=/pugetsoundmini.com/gfwlist -server=/technologyandsociety.org/127.0.0.1#5335 -ipset=/technologyandsociety.org/gfwlist -server=/google.com.sg/127.0.0.1#5335 -ipset=/google.com.sg/gfwlist -server=/googleanalytics.com/127.0.0.1#5335 -ipset=/googleanalytics.com/gfwlist -server=/youtube.com.pe/127.0.0.1#5335 -ipset=/youtube.com.pe/gfwlist -server=/directvdeals.com/127.0.0.1#5335 -ipset=/directvdeals.com/gfwlist -server=/youtube.com.pa/127.0.0.1#5335 -ipset=/youtube.com.pa/gfwlist -server=/voakorea.com/127.0.0.1#5335 -ipset=/voakorea.com/gfwlist -server=/youtube.com.om/127.0.0.1#5335 -ipset=/youtube.com.om/gfwlist -server=/successwithteams.com/127.0.0.1#5335 -ipset=/successwithteams.com/gfwlist -server=/youtube.com.mx/127.0.0.1#5335 -ipset=/youtube.com.mx/gfwlist -server=/paypal-database.com/127.0.0.1#5335 -ipset=/paypal-database.com/gfwlist -server=/youtube.com.mt/127.0.0.1#5335 -ipset=/youtube.com.mt/gfwlist -server=/youtube.com.mk/127.0.0.1#5335 -ipset=/youtube.com.mk/gfwlist -server=/youtube.com.lv/127.0.0.1#5335 -ipset=/youtube.com.lv/gfwlist -server=/youtube.com.lb/127.0.0.1#5335 -ipset=/youtube.com.lb/gfwlist -server=/youtube.com.kw/127.0.0.1#5335 -ipset=/youtube.com.kw/gfwlist -server=/barrons.com/127.0.0.1#5335 -ipset=/barrons.com/gfwlist -server=/youtube.com.jo/127.0.0.1#5335 -ipset=/youtube.com.jo/gfwlist -server=/pinterest.com.bo/127.0.0.1#5335 -ipset=/pinterest.com.bo/gfwlist -server=/paypalme.com/127.0.0.1#5335 -ipset=/paypalme.com/gfwlist -server=/news.co.uk/127.0.0.1#5335 -ipset=/news.co.uk/gfwlist -server=/youtube.com.jm/127.0.0.1#5335 -ipset=/youtube.com.jm/gfwlist -server=/myfoxtwincities.com/127.0.0.1#5335 -ipset=/myfoxtwincities.com/gfwlist -server=/o365weve-ppe.com/127.0.0.1#5335 -ipset=/o365weve-ppe.com/gfwlist -server=/youtube.com.hk/127.0.0.1#5335 -ipset=/youtube.com.hk/gfwlist -server=/cosmosdb.net/127.0.0.1#5335 -ipset=/cosmosdb.net/gfwlist -server=/youtube.com.gr/127.0.0.1#5335 -ipset=/youtube.com.gr/gfwlist -server=/youtube.com.eg/127.0.0.1#5335 -ipset=/youtube.com.eg/gfwlist -server=/moov.hk/127.0.0.1#5335 -ipset=/moov.hk/gfwlist -server=/youtube.com.ee/127.0.0.1#5335 -ipset=/youtube.com.ee/gfwlist -server=/youtube.com.do/127.0.0.1#5335 -ipset=/youtube.com.do/gfwlist -server=/youtube.com.by/127.0.0.1#5335 -ipset=/youtube.com.by/gfwlist -server=/tiktok.com/127.0.0.1#5335 -ipset=/tiktok.com/gfwlist -server=/yogify.com/127.0.0.1#5335 -ipset=/yogify.com/gfwlist -server=/youtube.com.bo/127.0.0.1#5335 -ipset=/youtube.com.bo/gfwlist -server=/wii-u.com/127.0.0.1#5335 -ipset=/wii-u.com/gfwlist -server=/youtube.com.bd/127.0.0.1#5335 -ipset=/youtube.com.bd/gfwlist -server=/moneywithfacebook.com/127.0.0.1#5335 -ipset=/moneywithfacebook.com/gfwlist -server=/youtube.com.au/127.0.0.1#5335 -ipset=/youtube.com.au/gfwlist -server=/nikestyles.com/127.0.0.1#5335 -ipset=/nikestyles.com/gfwlist -server=/routledgehandbooks.com/127.0.0.1#5335 -ipset=/routledgehandbooks.com/gfwlist -server=/dailymailonline.com/127.0.0.1#5335 -ipset=/dailymailonline.com/gfwlist -server=/ajtalk.com/127.0.0.1#5335 -ipset=/ajtalk.com/gfwlist -server=/verizondigitalmedia.com/127.0.0.1#5335 -ipset=/verizondigitalmedia.com/gfwlist -server=/youtube.co.za/127.0.0.1#5335 -ipset=/youtube.co.za/gfwlist -server=/bestbuys.com/127.0.0.1#5335 -ipset=/bestbuys.com/gfwlist -server=/youtube.co.tz/127.0.0.1#5335 -ipset=/youtube.co.tz/gfwlist -server=/vsphere.com/127.0.0.1#5335 -ipset=/vsphere.com/gfwlist -server=/youtube.co.nz/127.0.0.1#5335 -ipset=/youtube.co.nz/gfwlist -server=/12diasderegalosdeitunes.gt/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.gt/gfwlist -server=/squarecapital.com/127.0.0.1#5335 -ipset=/squarecapital.com/gfwlist -server=/attnetclient.com/127.0.0.1#5335 -ipset=/attnetclient.com/gfwlist -server=/youtube.co.kr/127.0.0.1#5335 -ipset=/youtube.co.kr/gfwlist -server=/whatsappbrand.com/127.0.0.1#5335 -ipset=/whatsappbrand.com/gfwlist -server=/ebay.pk/127.0.0.1#5335 -ipset=/ebay.pk/gfwlist -server=/youtube.co.il/127.0.0.1#5335 -ipset=/youtube.co.il/gfwlist -server=/mcdonalds.hk/127.0.0.1#5335 -ipset=/mcdonalds.hk/gfwlist -server=/ppaypal.com/127.0.0.1#5335 -ipset=/ppaypal.com/gfwlist -server=/stackpath.com/127.0.0.1#5335 -ipset=/stackpath.com/gfwlist -server=/bittrex.com/127.0.0.1#5335 -ipset=/bittrex.com/gfwlist -server=/youtube.co.ae/127.0.0.1#5335 -ipset=/youtube.co.ae/gfwlist -server=/youtube.ch/127.0.0.1#5335 -ipset=/youtube.ch/gfwlist -server=/airtunes.info/127.0.0.1#5335 -ipset=/airtunes.info/gfwlist -server=/castro.fm/127.0.0.1#5335 -ipset=/castro.fm/gfwlist -server=/youtube.by/127.0.0.1#5335 -ipset=/youtube.by/gfwlist -server=/youtube.am/127.0.0.1#5335 -ipset=/youtube.am/gfwlist -server=/ggpht.com/127.0.0.1#5335 -ipset=/ggpht.com/gfwlist -server=/bmw.co.jp/127.0.0.1#5335 -ipset=/bmw.co.jp/gfwlist -server=/get.page/127.0.0.1#5335 -ipset=/get.page/gfwlist -server=/get.dev/127.0.0.1#5335 -ipset=/get.dev/gfwlist -server=/instagtram.com/127.0.0.1#5335 -ipset=/instagtram.com/gfwlist -server=/registry.google/127.0.0.1#5335 -ipset=/registry.google/gfwlist -server=/airwick.ro/127.0.0.1#5335 -ipset=/airwick.ro/gfwlist -server=/googleadservices.com/127.0.0.1#5335 -ipset=/googleadservices.com/gfwlist -server=/googleadapis.com/127.0.0.1#5335 -ipset=/googleadapis.com/gfwlist -server=/google-analytics.com/127.0.0.1#5335 -ipset=/google-analytics.com/gfwlist -server=/bmw-motorrad.ro/127.0.0.1#5335 -ipset=/bmw-motorrad.ro/gfwlist -server=/facvebook.com/127.0.0.1#5335 -ipset=/facvebook.com/gfwlist -server=/doubleclick.com/127.0.0.1#5335 -ipset=/doubleclick.com/gfwlist -server=/app-measurement.com/127.0.0.1#5335 -ipset=/app-measurement.com/gfwlist -server=/db.tt/127.0.0.1#5335 -ipset=/db.tt/gfwlist -server=/foxaffiliateportal.com/127.0.0.1#5335 -ipset=/foxaffiliateportal.com/gfwlist -server=/whatsapp.org/127.0.0.1#5335 -ipset=/whatsapp.org/gfwlist -server=/slack-edge.com/127.0.0.1#5335 -ipset=/slack-edge.com/gfwlist -server=/manorama.com/127.0.0.1#5335 -ipset=/manorama.com/gfwlist -server=/vimeocdn.com/127.0.0.1#5335 -ipset=/vimeocdn.com/gfwlist -server=/microsoft.ro/127.0.0.1#5335 -ipset=/microsoft.ro/gfwlist -server=/cbs.com/127.0.0.1#5335 -ipset=/cbs.com/gfwlist -server=/customdrdrebeats.com/127.0.0.1#5335 -ipset=/customdrdrebeats.com/gfwlist -server=/intercomassets.com/127.0.0.1#5335 -ipset=/intercomassets.com/gfwlist -server=/monsterbeatsbydrefactory.com/127.0.0.1#5335 -ipset=/monsterbeatsbydrefactory.com/gfwlist -server=/blogspot.ru/127.0.0.1#5335 -ipset=/blogspot.ru/gfwlist -server=/blogspot.rs/127.0.0.1#5335 -ipset=/blogspot.rs/gfwlist -server=/blogspot.re/127.0.0.1#5335 -ipset=/blogspot.re/gfwlist -server=/monstersbeatbydres.com/127.0.0.1#5335 -ipset=/monstersbeatbydres.com/gfwlist -server=/beatbydre2013.com/127.0.0.1#5335 -ipset=/beatbydre2013.com/gfwlist -server=/nexpart.com/127.0.0.1#5335 -ipset=/nexpart.com/gfwlist -server=/ehgt.org/127.0.0.1#5335 -ipset=/ehgt.org/gfwlist -server=/mastercard.co.kr/127.0.0.1#5335 -ipset=/mastercard.co.kr/gfwlist -server=/beatsmonstersales.com/127.0.0.1#5335 -ipset=/beatsmonstersales.com/gfwlist -server=/blogspot.pe/127.0.0.1#5335 -ipset=/blogspot.pe/gfwlist -server=/visa.com.ru/127.0.0.1#5335 -ipset=/visa.com.ru/gfwlist -server=/blogspot.no/127.0.0.1#5335 -ipset=/blogspot.no/gfwlist -server=/opencollective.com/127.0.0.1#5335 -ipset=/opencollective.com/gfwlist -server=/goldnikeclub.com/127.0.0.1#5335 -ipset=/goldnikeclub.com/gfwlist -server=/slackb.com/127.0.0.1#5335 -ipset=/slackb.com/gfwlist -server=/fr-beatsbydrestore.com/127.0.0.1#5335 -ipset=/fr-beatsbydrestore.com/gfwlist -server=/m.me/127.0.0.1#5335 -ipset=/m.me/gfwlist -server=/blogspot.md/127.0.0.1#5335 -ipset=/blogspot.md/gfwlist -server=/blogspot.lu/127.0.0.1#5335 -ipset=/blogspot.lu/gfwlist -server=/fptolia.com/127.0.0.1#5335 -ipset=/fptolia.com/gfwlist -server=/gitlab-assets.oss-cn-hongkong.aliyuncs.com/127.0.0.1#5335 -ipset=/gitlab-assets.oss-cn-hongkong.aliyuncs.com/gfwlist -server=/blogspot.ie/127.0.0.1#5335 -ipset=/blogspot.ie/gfwlist -server=/blogspot.hk/127.0.0.1#5335 -ipset=/blogspot.hk/gfwlist -server=/blogspot.gr/127.0.0.1#5335 -ipset=/blogspot.gr/gfwlist -server=/blogspot.fr/127.0.0.1#5335 -ipset=/blogspot.fr/gfwlist -server=/blogspot.fi/127.0.0.1#5335 -ipset=/blogspot.fi/gfwlist -server=/ebayvietnam.net/127.0.0.1#5335 -ipset=/ebayvietnam.net/gfwlist -server=/iphoneimessage.com/127.0.0.1#5335 -ipset=/iphoneimessage.com/gfwlist -server=/blogspot.dk/127.0.0.1#5335 -ipset=/blogspot.dk/gfwlist -server=/blogspot.de/127.0.0.1#5335 -ipset=/blogspot.de/gfwlist -server=/blogspot.cz/127.0.0.1#5335 -ipset=/blogspot.cz/gfwlist -server=/digitalid.ch/127.0.0.1#5335 -ipset=/digitalid.ch/gfwlist -server=/akamai-thailand.com/127.0.0.1#5335 -ipset=/akamai-thailand.com/gfwlist -server=/gwktravelex.nl/127.0.0.1#5335 -ipset=/gwktravelex.nl/gfwlist -server=/blogspot.com.uy/127.0.0.1#5335 -ipset=/blogspot.com.uy/gfwlist -server=/blogspot.com.tr/127.0.0.1#5335 -ipset=/blogspot.com.tr/gfwlist -server=/pixnet.cc/127.0.0.1#5335 -ipset=/pixnet.cc/gfwlist -server=/bestbuy.ca/127.0.0.1#5335 -ipset=/bestbuy.ca/gfwlist -server=/direcpath.com/127.0.0.1#5335 -ipset=/direcpath.com/gfwlist -server=/t.me/127.0.0.1#5335 -ipset=/t.me/gfwlist -server=/blogspot.com.eg/127.0.0.1#5335 -ipset=/blogspot.com.eg/gfwlist -server=/disney.in/127.0.0.1#5335 -ipset=/disney.in/gfwlist -server=/canon.fr/127.0.0.1#5335 -ipset=/canon.fr/gfwlist -server=/blogspot.com.cy/127.0.0.1#5335 -ipset=/blogspot.com.cy/gfwlist -server=/blogspot.com.br/127.0.0.1#5335 -ipset=/blogspot.com.br/gfwlist -server=/blogspot.com.au/127.0.0.1#5335 -ipset=/blogspot.com.au/gfwlist -server=/youtube.si/127.0.0.1#5335 -ipset=/youtube.si/gfwlist -server=/tandberg-china.com/127.0.0.1#5335 -ipset=/tandberg-china.com/gfwlist -server=/blogspot.co.il/127.0.0.1#5335 -ipset=/blogspot.co.il/gfwlist -server=/blogspot.cl/127.0.0.1#5335 -ipset=/blogspot.cl/gfwlist -server=/go-disneyworldgo.com/127.0.0.1#5335 -ipset=/go-disneyworldgo.com/gfwlist -server=/mini.tm/127.0.0.1#5335 -ipset=/mini.tm/gfwlist -server=/blogspot.ch/127.0.0.1#5335 -ipset=/blogspot.ch/gfwlist -server=/directvpomise.com/127.0.0.1#5335 -ipset=/directvpomise.com/gfwlist -server=/ao3.org/127.0.0.1#5335 -ipset=/ao3.org/gfwlist -server=/needforspeedboost.com/127.0.0.1#5335 -ipset=/needforspeedboost.com/gfwlist -server=/blogspot.ba/127.0.0.1#5335 -ipset=/blogspot.ba/gfwlist -server=/sundanceignite2016.com/127.0.0.1#5335 -ipset=/sundanceignite2016.com/gfwlist -server=/gobuyonlinestore.net/127.0.0.1#5335 -ipset=/gobuyonlinestore.net/gfwlist -server=/pornhub.com/127.0.0.1#5335 -ipset=/pornhub.com/gfwlist -server=/bmw-connecteddrive.sg/127.0.0.1#5335 -ipset=/bmw-connecteddrive.sg/gfwlist -server=/blogspot.am/127.0.0.1#5335 -ipset=/blogspot.am/gfwlist -server=/binance.charity/127.0.0.1#5335 -ipset=/binance.charity/gfwlist -server=/blogspot.ae/127.0.0.1#5335 -ipset=/blogspot.ae/gfwlist -server=/geforce.com/127.0.0.1#5335 -ipset=/geforce.com/gfwlist -server=/dtv2009offers.com/127.0.0.1#5335 -ipset=/dtv2009offers.com/gfwlist -server=/sa78gs.wpc.edgecastcdn.net/127.0.0.1#5335 -ipset=/sa78gs.wpc.edgecastcdn.net/gfwlist -server=/nexcat.com/127.0.0.1#5335 -ipset=/nexcat.com/gfwlist -server=/gigabyte2.azureedge.net/127.0.0.1#5335 -ipset=/gigabyte2.azureedge.net/gfwlist -server=/udfs.com/127.0.0.1#5335 -ipset=/udfs.com/gfwlist -server=/gigabyte.com/127.0.0.1#5335 -ipset=/gigabyte.com/gfwlist -server=/wal-mart.com/127.0.0.1#5335 -ipset=/wal-mart.com/gfwlist -server=/c-spanvideo.org/127.0.0.1#5335 -ipset=/c-spanvideo.org/gfwlist -server=/vanish.cl/127.0.0.1#5335 -ipset=/vanish.cl/gfwlist -server=/workplaceusecases.com/127.0.0.1#5335 -ipset=/workplaceusecases.com/gfwlist -server=/zuckerberg.net/127.0.0.1#5335 -ipset=/zuckerberg.net/gfwlist -server=/zuckerberg.com/127.0.0.1#5335 -ipset=/zuckerberg.com/gfwlist -server=/wwwfacebook.com/127.0.0.1#5335 -ipset=/wwwfacebook.com/gfwlist -server=/bmwhk.com/127.0.0.1#5335 -ipset=/bmwhk.com/gfwlist -server=/bmw.com.pa/127.0.0.1#5335 -ipset=/bmw.com.pa/gfwlist -server=/singtaola.com/127.0.0.1#5335 -ipset=/singtaola.com/gfwlist -server=/2013beatshdcybermonday.com/127.0.0.1#5335 -ipset=/2013beatshdcybermonday.com/gfwlist -server=/cdn77.scoreuniverse.com/127.0.0.1#5335 -ipset=/cdn77.scoreuniverse.com/gfwlist -server=/supportfacebook.com/127.0.0.1#5335 -ipset=/supportfacebook.com/gfwlist -server=/sportstream.com/127.0.0.1#5335 -ipset=/sportstream.com/gfwlist -server=/sportsfacebook.com/127.0.0.1#5335 -ipset=/sportsfacebook.com/gfwlist -server=/shopfacebook.com/127.0.0.1#5335 -ipset=/shopfacebook.com/gfwlist -server=/fcebook.com/127.0.0.1#5335 -ipset=/fcebook.com/gfwlist -server=/nextstop.com/127.0.0.1#5335 -ipset=/nextstop.com/gfwlist -server=/visa.so/127.0.0.1#5335 -ipset=/visa.so/gfwlist -server=/youtube.com.az/127.0.0.1#5335 -ipset=/youtube.com.az/gfwlist -server=/wwwdecide.com/127.0.0.1#5335 -ipset=/wwwdecide.com/gfwlist -server=/mastercard.rs/127.0.0.1#5335 -ipset=/mastercard.rs/gfwlist -server=/uun86.com/127.0.0.1#5335 -ipset=/uun86.com/gfwlist -server=/mobilefacebook.com/127.0.0.1#5335 -ipset=/mobilefacebook.com/gfwlist -server=/bmw-int1.com/127.0.0.1#5335 -ipset=/bmw-int1.com/gfwlist -server=/nflxsearch.net/127.0.0.1#5335 -ipset=/nflxsearch.net/gfwlist -server=/disney.fi/127.0.0.1#5335 -ipset=/disney.fi/gfwlist -server=/disney.io/127.0.0.1#5335 -ipset=/disney.io/gfwlist -server=/swtor.com/127.0.0.1#5335 -ipset=/swtor.com/gfwlist -server=/midentsolutions.com/127.0.0.1#5335 -ipset=/midentsolutions.com/gfwlist -server=/markzuckerberg.com/127.0.0.1#5335 -ipset=/markzuckerberg.com/gfwlist -server=/scholar.google.com/127.0.0.1#5335 -ipset=/scholar.google.com/gfwlist -server=/canon-europa.com/127.0.0.1#5335 -ipset=/canon-europa.com/gfwlist -server=/vimeoondemand.com/127.0.0.1#5335 -ipset=/vimeoondemand.com/gfwlist -server=/singpao.com.hk/127.0.0.1#5335 -ipset=/singpao.com.hk/gfwlist -server=/oxfordhandbooks.com/127.0.0.1#5335 -ipset=/oxfordhandbooks.com/gfwlist -server=/repsneakermall.com/127.0.0.1#5335 -ipset=/repsneakermall.com/gfwlist -server=/liverail.tv/127.0.0.1#5335 -ipset=/liverail.tv/gfwlist -server=/mastercard.sk/127.0.0.1#5335 -ipset=/mastercard.sk/gfwlist -server=/facebookportal.com/127.0.0.1#5335 -ipset=/facebookportal.com/gfwlist -server=/ecapi-pchome.cdn.hinet.net/127.0.0.1#5335 -ipset=/ecapi-pchome.cdn.hinet.net/gfwlist -server=/internet.org/127.0.0.1#5335 -ipset=/internet.org/gfwlist -server=/apple.cl/127.0.0.1#5335 -ipset=/apple.cl/gfwlist -server=/howtohackfacebook-account.com/127.0.0.1#5335 -ipset=/howtohackfacebook-account.com/gfwlist -server=/hifacebook.info/127.0.0.1#5335 -ipset=/hifacebook.info/gfwlist -server=/bmwmagazine.com/127.0.0.1#5335 -ipset=/bmwmagazine.com/gfwlist -server=/monsterbydrebeat.com/127.0.0.1#5335 -ipset=/monsterbydrebeat.com/gfwlist -server=/groups.com/127.0.0.1#5335 -ipset=/groups.com/gfwlist -server=/leaguehighschool.com/127.0.0.1#5335 -ipset=/leaguehighschool.com/gfwlist -server=/volvotrucks.qa/127.0.0.1#5335 -ipset=/volvotrucks.qa/gfwlist -server=/gfacecbook.com/127.0.0.1#5335 -ipset=/gfacecbook.com/gfwlist -server=/dettol.pt/127.0.0.1#5335 -ipset=/dettol.pt/gfwlist -server=/veet.com/127.0.0.1#5335 -ipset=/veet.com/gfwlist -server=/yahoo.co.vi/127.0.0.1#5335 -ipset=/yahoo.co.vi/gfwlist -server=/fundraisingwithfacebook.com/127.0.0.1#5335 -ipset=/fundraisingwithfacebook.com/gfwlist -server=/spore.com/127.0.0.1#5335 -ipset=/spore.com/gfwlist -server=/applenews.hamburg/127.0.0.1#5335 -ipset=/applenews.hamburg/gfwlist -server=/friendfeed.com/127.0.0.1#5335 -ipset=/friendfeed.com/gfwlist -server=/friendfeed-media.com/127.0.0.1#5335 -ipset=/friendfeed-media.com/gfwlist -server=/friendfeed-api.com/127.0.0.1#5335 -ipset=/friendfeed-api.com/gfwlist -server=/dot.net/127.0.0.1#5335 -ipset=/dot.net/gfwlist -server=/friendfed.com/127.0.0.1#5335 -ipset=/friendfed.com/gfwlist -server=/viacomcbs.com/127.0.0.1#5335 -ipset=/viacomcbs.com/gfwlist -server=/amerikaovozi.com/127.0.0.1#5335 -ipset=/amerikaovozi.com/gfwlist -server=/firestonecompleteautocare.com/127.0.0.1#5335 -ipset=/firestonecompleteautocare.com/gfwlist -server=/freefacebookads.net/127.0.0.1#5335 -ipset=/freefacebookads.net/gfwlist -server=/epochstories.com/127.0.0.1#5335 -ipset=/epochstories.com/gfwlist -server=/potenza.jp/127.0.0.1#5335 -ipset=/potenza.jp/gfwlist -server=/swisstsa.li/127.0.0.1#5335 -ipset=/swisstsa.li/gfwlist -server=/wiremoneytoirelandwithxoomeasierandcheaper.com/127.0.0.1#5335 -ipset=/wiremoneytoirelandwithxoomeasierandcheaper.com/gfwlist -server=/youtubego.co.in/127.0.0.1#5335 -ipset=/youtubego.co.in/gfwlist -server=/freefacebook.net/127.0.0.1#5335 -ipset=/freefacebook.net/gfwlist -server=/freeb.com/127.0.0.1#5335 -ipset=/freeb.com/gfwlist -server=/hulunetwork.com/127.0.0.1#5335 -ipset=/hulunetwork.com/gfwlist -server=/mini-connected.ch/127.0.0.1#5335 -ipset=/mini-connected.ch/gfwlist -server=/shopbeatsdre.com/127.0.0.1#5335 -ipset=/shopbeatsdre.com/gfwlist -server=/kk.stream/127.0.0.1#5335 -ipset=/kk.stream/gfwlist -server=/myfoxhurricane.com/127.0.0.1#5335 -ipset=/myfoxhurricane.com/gfwlist -server=/bbyintl.com/127.0.0.1#5335 -ipset=/bbyintl.com/gfwlist -server=/fracebook.com/127.0.0.1#5335 -ipset=/fracebook.com/gfwlist -server=/google.com.bd/127.0.0.1#5335 -ipset=/google.com.bd/gfwlist -server=/leaguesharp.info/127.0.0.1#5335 -ipset=/leaguesharp.info/gfwlist -server=/yjcontentdelivery.com/127.0.0.1#5335 -ipset=/yjcontentdelivery.com/gfwlist -server=/shotwithgeforce.com/127.0.0.1#5335 -ipset=/shotwithgeforce.com/gfwlist -server=/fescebook.com/127.0.0.1#5335 -ipset=/fescebook.com/gfwlist -server=/uun95.com/127.0.0.1#5335 -ipset=/uun95.com/gfwlist -server=/ferabook.com/127.0.0.1#5335 -ipset=/ferabook.com/gfwlist -server=/fececbook.com/127.0.0.1#5335 -ipset=/fececbook.com/gfwlist -server=/feceboox.com/127.0.0.1#5335 -ipset=/feceboox.com/gfwlist -server=/azure.net/127.0.0.1#5335 -ipset=/azure.net/gfwlist -server=/mcdonalds.com.hk/127.0.0.1#5335 -ipset=/mcdonalds.com.hk/gfwlist -server=/heyzo.com/127.0.0.1#5335 -ipset=/heyzo.com/gfwlist -server=/beatsbydre2081.com/127.0.0.1#5335 -ipset=/beatsbydre2081.com/gfwlist -server=/hpcodewarsbcn.com/127.0.0.1#5335 -ipset=/hpcodewarsbcn.com/gfwlist -server=/fecbbok.com/127.0.0.1#5335 -ipset=/fecbbok.com/gfwlist -server=/dmm-extension.com/127.0.0.1#5335 -ipset=/dmm-extension.com/gfwlist -server=/vmglobal.net/127.0.0.1#5335 -ipset=/vmglobal.net/gfwlist -server=/bmw-m.com/127.0.0.1#5335 -ipset=/bmw-m.com/gfwlist -server=/akamaiphillipines.net/127.0.0.1#5335 -ipset=/akamaiphillipines.net/gfwlist -server=/cheapestbeatsdrdre.com/127.0.0.1#5335 -ipset=/cheapestbeatsdrdre.com/gfwlist -server=/nextechafrica.net/127.0.0.1#5335 -ipset=/nextechafrica.net/gfwlist -server=/visa-atm.com/127.0.0.1#5335 -ipset=/visa-atm.com/gfwlist -server=/fdacebook.info/127.0.0.1#5335 -ipset=/fdacebook.info/gfwlist -server=/gcrtires.com/127.0.0.1#5335 -ipset=/gcrtires.com/gfwlist -server=/fcebookk.com/127.0.0.1#5335 -ipset=/fcebookk.com/gfwlist -server=/online-deals.net/127.0.0.1#5335 -ipset=/online-deals.net/gfwlist -server=/linegame.jp/127.0.0.1#5335 -ipset=/linegame.jp/gfwlist -server=/xn--gogl-1nd42e.com/127.0.0.1#5335 -ipset=/xn--gogl-1nd42e.com/gfwlist -server=/bmw.com.mo/127.0.0.1#5335 -ipset=/bmw.com.mo/gfwlist -server=/parstream.com/127.0.0.1#5335 -ipset=/parstream.com/gfwlist -server=/fbworkmail.com/127.0.0.1#5335 -ipset=/fbworkmail.com/gfwlist -server=/bloomberglaw.com/127.0.0.1#5335 -ipset=/bloomberglaw.com/gfwlist -server=/ieee-ecce.org/127.0.0.1#5335 -ipset=/ieee-ecce.org/gfwlist -server=/nurofen.ie/127.0.0.1#5335 -ipset=/nurofen.ie/gfwlist -server=/faccebook.com/127.0.0.1#5335 -ipset=/faccebook.com/gfwlist -server=/ssl-certificate.ch/127.0.0.1#5335 -ipset=/ssl-certificate.ch/gfwlist -server=/volvotruckcenter.se/127.0.0.1#5335 -ipset=/volvotruckcenter.se/gfwlist -server=/qualcomm.com/127.0.0.1#5335 -ipset=/qualcomm.com/gfwlist -server=/fbsbx.com/127.0.0.1#5335 -ipset=/fbsbx.com/gfwlist -server=/faacebok.com/127.0.0.1#5335 -ipset=/faacebok.com/gfwlist -server=/duckduckgo.com/127.0.0.1#5335 -ipset=/duckduckgo.com/gfwlist -server=/fbreg.com/127.0.0.1#5335 -ipset=/fbreg.com/gfwlist -server=/paypal-search.com/127.0.0.1#5335 -ipset=/paypal-search.com/gfwlist -server=/nvidia.com.tw/127.0.0.1#5335 -ipset=/nvidia.com.tw/gfwlist -server=/attexperts.com/127.0.0.1#5335 -ipset=/attexperts.com/gfwlist -server=/soundofhope.org/127.0.0.1#5335 -ipset=/soundofhope.org/gfwlist -server=/swissign.com/127.0.0.1#5335 -ipset=/swissign.com/gfwlist -server=/fbinnovation.com/127.0.0.1#5335 -ipset=/fbinnovation.com/gfwlist -server=/12diasderegalosdeitunes.com.hn/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.com.hn/gfwlist -server=/wwwebay.net/127.0.0.1#5335 -ipset=/wwwebay.net/gfwlist -server=/thawte.de/127.0.0.1#5335 -ipset=/thawte.de/gfwlist -server=/fbfeedback.com/127.0.0.1#5335 -ipset=/fbfeedback.com/gfwlist -server=/mairbeats.com/127.0.0.1#5335 -ipset=/mairbeats.com/gfwlist -server=/vmwaredemandcenter.com/127.0.0.1#5335 -ipset=/vmwaredemandcenter.com/gfwlist -server=/fbboostyourbusiness.com/127.0.0.1#5335 -ipset=/fbboostyourbusiness.com/gfwlist -server=/motionpictureser.com/127.0.0.1#5335 -ipset=/motionpictureser.com/gfwlist -server=/paisapay.cc/127.0.0.1#5335 -ipset=/paisapay.cc/gfwlist -server=/bloombergspace.com/127.0.0.1#5335 -ipset=/bloombergspace.com/gfwlist -server=/statics-marketingsites-eus-ms-com.akamaized.net/127.0.0.1#5335 -ipset=/statics-marketingsites-eus-ms-com.akamaized.net/gfwlist -server=/lghvacstory.com/127.0.0.1#5335 -ipset=/lghvacstory.com/gfwlist -server=/blzddistkr1-a.akamaihd.net/127.0.0.1#5335 -ipset=/blzddistkr1-a.akamaihd.net/gfwlist -server=/newsmaxtv.com/127.0.0.1#5335 -ipset=/newsmaxtv.com/gfwlist -server=/bowsersinsidestory.com/127.0.0.1#5335 -ipset=/bowsersinsidestory.com/gfwlist -server=/fb.careers/127.0.0.1#5335 -ipset=/fb.careers/gfwlist -server=/instagram-press.com/127.0.0.1#5335 -ipset=/instagram-press.com/gfwlist -server=/theepochtimessubscribe.com/127.0.0.1#5335 -ipset=/theepochtimessubscribe.com/gfwlist -server=/intel.tf/127.0.0.1#5335 -ipset=/intel.tf/gfwlist -server=/fasebokk.com/127.0.0.1#5335 -ipset=/fasebokk.com/gfwlist -server=/faicbooc.com/127.0.0.1#5335 -ipset=/faicbooc.com/gfwlist -server=/ntnews.com.au/127.0.0.1#5335 -ipset=/ntnews.com.au/gfwlist -server=/unlocklimitlesslearning.com/127.0.0.1#5335 -ipset=/unlocklimitlesslearning.com/gfwlist -server=/minidealernet.com/127.0.0.1#5335 -ipset=/minidealernet.com/gfwlist -server=/mastercard.jo/127.0.0.1#5335 -ipset=/mastercard.jo/gfwlist -server=/monsterbeatsitaly.com/127.0.0.1#5335 -ipset=/monsterbeatsitaly.com/gfwlist -server=/fadebook.com/127.0.0.1#5335 -ipset=/fadebook.com/gfwlist -server=/facxebook.com/127.0.0.1#5335 -ipset=/facxebook.com/gfwlist -server=/facwebook.com/127.0.0.1#5335 -ipset=/facwebook.com/gfwlist -server=/doubleclick.net/127.0.0.1#5335 -ipset=/doubleclick.net/gfwlist -server=/biomedcentral.com/127.0.0.1#5335 -ipset=/biomedcentral.com/gfwlist -server=/facrbook.com/127.0.0.1#5335 -ipset=/facrbook.com/gfwlist -server=/bmw-art-journey.com/127.0.0.1#5335 -ipset=/bmw-art-journey.com/gfwlist -server=/hulugo.com/127.0.0.1#5335 -ipset=/hulugo.com/gfwlist -server=/fackebook.com/127.0.0.1#5335 -ipset=/fackebook.com/gfwlist -server=/getdropbox.com/127.0.0.1#5335 -ipset=/getdropbox.com/gfwlist -server=/facewook.com/127.0.0.1#5335 -ipset=/facewook.com/gfwlist -server=/icloud.pt/127.0.0.1#5335 -ipset=/icloud.pt/gfwlist -server=/facewbook.co/127.0.0.1#5335 -ipset=/facewbook.co/gfwlist -server=/huffingtonpost.ca/127.0.0.1#5335 -ipset=/huffingtonpost.ca/gfwlist -server=/facevbook.com/127.0.0.1#5335 -ipset=/facevbook.com/gfwlist -server=/muji.com.hk/127.0.0.1#5335 -ipset=/muji.com.hk/gfwlist -server=/facetook.com/127.0.0.1#5335 -ipset=/facetook.com/gfwlist -server=/facesounds.com/127.0.0.1#5335 -ipset=/facesounds.com/gfwlist -server=/facesbooc.com/127.0.0.1#5335 -ipset=/facesbooc.com/gfwlist -server=/faceobook.com/127.0.0.1#5335 -ipset=/faceobook.com/gfwlist -server=/vmwarecloud.com/127.0.0.1#5335 -ipset=/vmwarecloud.com/gfwlist -server=/sharepoint.com/127.0.0.1#5335 -ipset=/sharepoint.com/gfwlist -server=/facegbok.com/127.0.0.1#5335 -ipset=/facegbok.com/gfwlist -server=/faceebot.com/127.0.0.1#5335 -ipset=/faceebot.com/gfwlist -server=/faceebook.com/127.0.0.1#5335 -ipset=/faceebook.com/gfwlist -server=/monsterbeatshere.com/127.0.0.1#5335 -ipset=/monsterbeatshere.com/gfwlist -server=/disneytvajobs.com/127.0.0.1#5335 -ipset=/disneytvajobs.com/gfwlist -server=/facedbook.com/127.0.0.1#5335 -ipset=/facedbook.com/gfwlist -server=/facecook.org/127.0.0.1#5335 -ipset=/facecook.org/gfwlist -server=/secretchina.com/127.0.0.1#5335 -ipset=/secretchina.com/gfwlist -server=/foxredeem.com/127.0.0.1#5335 -ipset=/foxredeem.com/gfwlist -server=/archlinux.org/127.0.0.1#5335 -ipset=/archlinux.org/gfwlist -server=/revolv.com/127.0.0.1#5335 -ipset=/revolv.com/gfwlist -server=/facebopk.com/127.0.0.1#5335 -ipset=/facebopk.com/gfwlist -server=/faceboot.com/127.0.0.1#5335 -ipset=/faceboot.com/gfwlist -server=/applestorepro.eu/127.0.0.1#5335 -ipset=/applestorepro.eu/gfwlist -server=/googel.com/127.0.0.1#5335 -ipset=/googel.com/gfwlist -server=/faceboom.com/127.0.0.1#5335 -ipset=/faceboom.com/gfwlist -server=/facebooll.com/127.0.0.1#5335 -ipset=/facebooll.com/gfwlist -server=/huffingtonpost.kr/127.0.0.1#5335 -ipset=/huffingtonpost.kr/gfwlist -server=/facebookw.com/127.0.0.1#5335 -ipset=/facebookw.com/gfwlist -server=/google.com.mt/127.0.0.1#5335 -ipset=/google.com.mt/gfwlist -server=/pre-bmwgroup.jobs/127.0.0.1#5335 -ipset=/pre-bmwgroup.jobs/gfwlist -server=/facebooktv.net/127.0.0.1#5335 -ipset=/facebooktv.net/gfwlist -server=/custombeatssbydreus.com/127.0.0.1#5335 -ipset=/custombeatssbydreus.com/gfwlist -server=/realclearpolitics.com/127.0.0.1#5335 -ipset=/realclearpolitics.com/gfwlist -server=/calgon.com/127.0.0.1#5335 -ipset=/calgon.com/gfwlist -server=/facebooksuppliers.com/127.0.0.1#5335 -ipset=/facebooksuppliers.com/gfwlist -server=/sourcingforebay.tv/127.0.0.1#5335 -ipset=/sourcingforebay.tv/gfwlist -server=/hketgroup.com/127.0.0.1#5335 -ipset=/hketgroup.com/gfwlist -server=/simility.com/127.0.0.1#5335 -ipset=/simility.com/gfwlist -server=/facebooksupplier.com/127.0.0.1#5335 -ipset=/facebooksupplier.com/gfwlist -server=/facebookstudios.net/127.0.0.1#5335 -ipset=/facebookstudios.net/gfwlist -server=/facebookstories.com/127.0.0.1#5335 -ipset=/facebookstories.com/gfwlist -server=/facebooksafety.com/127.0.0.1#5335 -ipset=/facebooksafety.com/gfwlist -server=/nintendo.at/127.0.0.1#5335 -ipset=/nintendo.at/gfwlist -server=/evernote.com/127.0.0.1#5335 -ipset=/evernote.com/gfwlist -server=/facebooks.com/127.0.0.1#5335 -ipset=/facebooks.com/gfwlist -server=/facebookporno.net/127.0.0.1#5335 -ipset=/facebookporno.net/gfwlist -server=/facebookporn.org/127.0.0.1#5335 -ipset=/facebookporn.org/gfwlist -server=/speeddreamride.com/127.0.0.1#5335 -ipset=/speeddreamride.com/gfwlist -server=/ebaydlassifieds.com/127.0.0.1#5335 -ipset=/ebaydlassifieds.com/gfwlist -server=/disney.my/127.0.0.1#5335 -ipset=/disney.my/gfwlist -server=/facebookpoke.org/127.0.0.1#5335 -ipset=/facebookpoke.org/gfwlist -server=/instagranm.com/127.0.0.1#5335 -ipset=/instagranm.com/gfwlist -server=/facebookpoke.net/127.0.0.1#5335 -ipset=/facebookpoke.net/gfwlist -server=/bridgestone.co.th/127.0.0.1#5335 -ipset=/bridgestone.co.th/gfwlist -server=/amazonworkdocs.com/127.0.0.1#5335 -ipset=/amazonworkdocs.com/gfwlist -server=/facebookphonenumber.net/127.0.0.1#5335 -ipset=/facebookphonenumber.net/gfwlist -server=/minicooper.ca/127.0.0.1#5335 -ipset=/minicooper.ca/gfwlist -server=/facebookook.com/127.0.0.1#5335 -ipset=/facebookook.com/gfwlist -server=/xn--yt8h.la/127.0.0.1#5335 -ipset=/xn--yt8h.la/gfwlist -server=/disney.se/127.0.0.1#5335 -ipset=/disney.se/gfwlist -server=/bml.info/127.0.0.1#5335 -ipset=/bml.info/gfwlist -server=/duckduckgo.de/127.0.0.1#5335 -ipset=/duckduckgo.de/gfwlist -server=/ebaysoho.com/127.0.0.1#5335 -ipset=/ebaysoho.com/gfwlist -server=/itunes-radio.net/127.0.0.1#5335 -ipset=/itunes-radio.net/gfwlist -server=/facebooknfl.com/127.0.0.1#5335 -ipset=/facebooknfl.com/gfwlist -server=/rgpub.io/127.0.0.1#5335 -ipset=/rgpub.io/gfwlist -server=/savethedate.foo/127.0.0.1#5335 -ipset=/savethedate.foo/gfwlist -server=/icloud.ie/127.0.0.1#5335 -ipset=/icloud.ie/gfwlist -server=/facebookmarketing.info/127.0.0.1#5335 -ipset=/facebookmarketing.info/gfwlist -server=/facebookmanager.info/127.0.0.1#5335 -ipset=/facebookmanager.info/gfwlist -server=/ipadair.fr/127.0.0.1#5335 -ipset=/ipadair.fr/gfwlist -server=/facebookmail.tv/127.0.0.1#5335 -ipset=/facebookmail.tv/gfwlist -server=/nikeairmaxs.com/127.0.0.1#5335 -ipset=/nikeairmaxs.com/gfwlist -server=/fox35orlando.com/127.0.0.1#5335 -ipset=/fox35orlando.com/gfwlist -server=/kijijiautos.ca/127.0.0.1#5335 -ipset=/kijijiautos.ca/gfwlist -server=/headphoneshome.com/127.0.0.1#5335 -ipset=/headphoneshome.com/gfwlist -server=/facebooklogin.com/127.0.0.1#5335 -ipset=/facebooklogin.com/gfwlist -server=/appleipodsettlement.com/127.0.0.1#5335 -ipset=/appleipodsettlement.com/gfwlist -server=/cdngarenanow-a.akamaihd.net/127.0.0.1#5335 -ipset=/cdngarenanow-a.akamaihd.net/gfwlist -server=/facebooki.com/127.0.0.1#5335 -ipset=/facebooki.com/gfwlist -server=/facebookhub.com/127.0.0.1#5335 -ipset=/facebookhub.com/gfwlist -server=/visa.pt/127.0.0.1#5335 -ipset=/visa.pt/gfwlist -server=/mastercard.co.za/127.0.0.1#5335 -ipset=/mastercard.co.za/gfwlist -server=/ebayheels.com/127.0.0.1#5335 -ipset=/ebayheels.com/gfwlist -server=/facebookhome.cc/127.0.0.1#5335 -ipset=/facebookhome.cc/gfwlist -server=/paypal-innovationlab.com/127.0.0.1#5335 -ipset=/paypal-innovationlab.com/gfwlist -server=/ebayoncampus.com/127.0.0.1#5335 -ipset=/ebayoncampus.com/gfwlist -server=/facebookgraphsearch.com/127.0.0.1#5335 -ipset=/facebookgraphsearch.com/gfwlist -server=/facebookcoronavirus.com/127.0.0.1#5335 -ipset=/facebookcoronavirus.com/gfwlist -server=/facebookconsultant.org/127.0.0.1#5335 -ipset=/facebookconsultant.org/gfwlist -server=/facebookcom.com/127.0.0.1#5335 -ipset=/facebookcom.com/gfwlist -server=/frescolib.org/127.0.0.1#5335 -ipset=/frescolib.org/gfwlist -server=/facebookclub.com/127.0.0.1#5335 -ipset=/facebookclub.com/gfwlist -server=/facebookbrand.net/127.0.0.1#5335 -ipset=/facebookbrand.net/gfwlist -server=/gettyimages.com.mx/127.0.0.1#5335 -ipset=/gettyimages.com.mx/gfwlist -server=/facebookadvertisingsecrets.com/127.0.0.1#5335 -ipset=/facebookadvertisingsecrets.com/gfwlist -server=/facebook.us/127.0.0.1#5335 -ipset=/facebook.us/gfwlist -server=/facebook.shop/127.0.0.1#5335 -ipset=/facebook.shop/gfwlist -server=/disqus.com/127.0.0.1#5335 -ipset=/disqus.com/gfwlist -server=/wixapps.net/127.0.0.1#5335 -ipset=/wixapps.net/gfwlist -server=/facebook.nl/127.0.0.1#5335 -ipset=/facebook.nl/gfwlist -server=/fecebook.net/127.0.0.1#5335 -ipset=/fecebook.net/gfwlist -server=/huobigroup.com/127.0.0.1#5335 -ipset=/huobigroup.com/gfwlist -server=/vidmpreview.com/127.0.0.1#5335 -ipset=/vidmpreview.com/gfwlist -server=/facebook.hu/127.0.0.1#5335 -ipset=/facebook.hu/gfwlist -server=/facebook.net/127.0.0.1#5335 -ipset=/facebook.net/gfwlist -server=/canon.com/127.0.0.1#5335 -ipset=/canon.com/gfwlist -server=/facebook.br/127.0.0.1#5335 -ipset=/facebook.br/gfwlist -server=/paypal-prepagata.com/127.0.0.1#5335 -ipset=/paypal-prepagata.com/gfwlist -server=/terapeack.com/127.0.0.1#5335 -ipset=/terapeack.com/gfwlist -server=/facebook-texas-holdem.com/127.0.0.1#5335 -ipset=/facebook-texas-holdem.com/gfwlist -server=/nyt.net/127.0.0.1#5335 -ipset=/nyt.net/gfwlist -server=/oculusbrand.com/127.0.0.1#5335 -ipset=/oculusbrand.com/gfwlist -server=/facebook-pmdcenter.net/127.0.0.1#5335 -ipset=/facebook-pmdcenter.net/gfwlist -server=/curseforge.com/127.0.0.1#5335 -ipset=/curseforge.com/gfwlist -server=/francemail.com/127.0.0.1#5335 -ipset=/francemail.com/gfwlist -server=/shopcustomizedbeats.com/127.0.0.1#5335 -ipset=/shopcustomizedbeats.com/gfwlist -server=/storesense.com/127.0.0.1#5335 -ipset=/storesense.com/gfwlist -server=/vfsco.se/127.0.0.1#5335 -ipset=/vfsco.se/gfwlist -server=/facebook-newsroom.com/127.0.0.1#5335 -ipset=/facebook-newsroom.com/gfwlist -server=/facebook-forum.com/127.0.0.1#5335 -ipset=/facebook-forum.com/gfwlist -server=/easic.com/127.0.0.1#5335 -ipset=/easic.com/gfwlist -server=/easportsfootball.com/127.0.0.1#5335 -ipset=/easportsfootball.com/gfwlist -server=/miniworkshop.com/127.0.0.1#5335 -ipset=/miniworkshop.com/gfwlist -server=/nike-org.com/127.0.0.1#5335 -ipset=/nike-org.com/gfwlist -server=/facebook-corp.com/127.0.0.1#5335 -ipset=/facebook-corp.com/gfwlist -server=/microsoft.cz/127.0.0.1#5335 -ipset=/microsoft.cz/gfwlist -server=/faceboock.com/127.0.0.1#5335 -ipset=/faceboock.com/gfwlist -server=/paypal-business.org/127.0.0.1#5335 -ipset=/paypal-business.org/gfwlist -server=/visa.com.sg/127.0.0.1#5335 -ipset=/visa.com.sg/gfwlist -server=/bmw.com.ph/127.0.0.1#5335 -ipset=/bmw.com.ph/gfwlist -server=/bookclubcorner.com/127.0.0.1#5335 -ipset=/bookclubcorner.com/gfwlist -server=/faceboobok.com/127.0.0.1#5335 -ipset=/faceboobok.com/gfwlist -server=/beatswirelesscuffie.com/127.0.0.1#5335 -ipset=/beatswirelesscuffie.com/gfwlist -server=/faceboo.com/127.0.0.1#5335 -ipset=/faceboo.com/gfwlist -server=/betternike.com/127.0.0.1#5335 -ipset=/betternike.com/gfwlist -server=/facebomok.com/127.0.0.1#5335 -ipset=/facebomok.com/gfwlist -server=/fteproxy.org/127.0.0.1#5335 -ipset=/fteproxy.org/gfwlist -server=/attuverseonline.com/127.0.0.1#5335 -ipset=/attuverseonline.com/gfwlist -server=/braintreeps.com/127.0.0.1#5335 -ipset=/braintreeps.com/gfwlist -server=/renovacionxboxlive.com/127.0.0.1#5335 -ipset=/renovacionxboxlive.com/gfwlist -server=/facebokok.com/127.0.0.1#5335 -ipset=/facebokok.com/gfwlist -server=/facebokk.com/127.0.0.1#5335 -ipset=/facebokk.com/gfwlist -server=/canonproprinters.com/127.0.0.1#5335 -ipset=/canonproprinters.com/gfwlist -server=/beatsbydreonlines-ireland.com/127.0.0.1#5335 -ipset=/beatsbydreonlines-ireland.com/gfwlist -server=/facebokc.com/127.0.0.1#5335 -ipset=/facebokc.com/gfwlist -server=/facebokbook.com/127.0.0.1#5335 -ipset=/facebokbook.com/gfwlist -server=/facebocke.com/127.0.0.1#5335 -ipset=/facebocke.com/gfwlist -server=/faceboak.com/127.0.0.1#5335 -ipset=/faceboak.com/gfwlist -server=/google.co.uk/127.0.0.1#5335 -ipset=/google.co.uk/gfwlist -server=/drebeats-singapore.net/127.0.0.1#5335 -ipset=/drebeats-singapore.net/gfwlist -server=/facebkkk.com/127.0.0.1#5335 -ipset=/facebkkk.com/gfwlist -server=/desktopmovies.net/127.0.0.1#5335 -ipset=/desktopmovies.net/gfwlist -server=/botstop.com/127.0.0.1#5335 -ipset=/botstop.com/gfwlist -server=/arphic.com/127.0.0.1#5335 -ipset=/arphic.com/gfwlist -server=/facebdok.com/127.0.0.1#5335 -ipset=/facebdok.com/gfwlist -server=/dailymail.co.uk/127.0.0.1#5335 -ipset=/dailymail.co.uk/gfwlist -server=/ext-twitch.tv/127.0.0.1#5335 -ipset=/ext-twitch.tv/gfwlist -server=/facebboook.com/127.0.0.1#5335 -ipset=/facebboook.com/gfwlist -server=/facebbook.com/127.0.0.1#5335 -ipset=/facebbook.com/gfwlist -server=/faceabook.com/127.0.0.1#5335 -ipset=/faceabook.com/gfwlist -server=/volvotrucks.sg/127.0.0.1#5335 -ipset=/volvotrucks.sg/gfwlist -server=/face-book.com/127.0.0.1#5335 -ipset=/face-book.com/gfwlist -server=/vct.news/127.0.0.1#5335 -ipset=/vct.news/gfwlist -server=/facdebook.com/127.0.0.1#5335 -ipset=/facdebook.com/gfwlist -server=/cashbycashapp.com/127.0.0.1#5335 -ipset=/cashbycashapp.com/gfwlist -server=/newton.com/127.0.0.1#5335 -ipset=/newton.com/gfwlist -server=/beats-headphones.us/127.0.0.1#5335 -ipset=/beats-headphones.us/gfwlist -server=/firestonecomercial.com.mx/127.0.0.1#5335 -ipset=/firestonecomercial.com.mx/gfwlist -server=/facbool.com/127.0.0.1#5335 -ipset=/facbool.com/gfwlist -server=/alphera.co.in/127.0.0.1#5335 -ipset=/alphera.co.in/gfwlist -server=/facbook.com/127.0.0.1#5335 -ipset=/facbook.com/gfwlist -server=/facbeok.com/127.0.0.1#5335 -ipset=/facbeok.com/gfwlist -server=/youtube.co.zw/127.0.0.1#5335 -ipset=/youtube.co.zw/gfwlist -server=/faacebook.com/127.0.0.1#5335 -ipset=/faacebook.com/gfwlist -server=/dotfacebook.net/127.0.0.1#5335 -ipset=/dotfacebook.net/gfwlist -server=/webex.co.uk/127.0.0.1#5335 -ipset=/webex.co.uk/gfwlist -server=/adobesign.com/127.0.0.1#5335 -ipset=/adobesign.com/gfwlist -server=/bmw-connecteddrive.hu/127.0.0.1#5335 -ipset=/bmw-connecteddrive.hu/gfwlist -server=/como-hackearfacebook.com/127.0.0.1#5335 -ipset=/como-hackearfacebook.com/gfwlist -server=/china-facebook.com/127.0.0.1#5335 -ipset=/china-facebook.com/gfwlist -server=/celebgramme.com/127.0.0.1#5335 -ipset=/celebgramme.com/gfwlist -server=/careersatfb.com/127.0.0.1#5335 -ipset=/careersatfb.com/gfwlist -server=/fbf8.com/127.0.0.1#5335 -ipset=/fbf8.com/gfwlist -server=/reactjs.org/127.0.0.1#5335 -ipset=/reactjs.org/gfwlist -server=/atlasdmt.com/127.0.0.1#5335 -ipset=/atlasdmt.com/gfwlist -server=/youtube.hu/127.0.0.1#5335 -ipset=/youtube.hu/gfwlist -server=/canon.be/127.0.0.1#5335 -ipset=/canon.be/gfwlist -server=/alphabet.asia/127.0.0.1#5335 -ipset=/alphabet.asia/gfwlist -server=/bloombergbriefs.com/127.0.0.1#5335 -ipset=/bloombergbriefs.com/gfwlist -server=/epicbrowser.com/127.0.0.1#5335 -ipset=/epicbrowser.com/gfwlist -server=/myrewardzone.com/127.0.0.1#5335 -ipset=/myrewardzone.com/gfwlist -server=/beautyandthebeastmusical.co.uk/127.0.0.1#5335 -ipset=/beautyandthebeastmusical.co.uk/gfwlist -server=/beatsbydreboxingdayca.com/127.0.0.1#5335 -ipset=/beatsbydreboxingdayca.com/gfwlist -server=/acebooik.com/127.0.0.1#5335 -ipset=/acebooik.com/gfwlist -server=/youtube.co.jp/127.0.0.1#5335 -ipset=/youtube.co.jp/gfwlist -server=/admob.com/127.0.0.1#5335 -ipset=/admob.com/gfwlist -server=/whatsapp.net/127.0.0.1#5335 -ipset=/whatsapp.net/gfwlist -server=/paypal-plaza.com/127.0.0.1#5335 -ipset=/paypal-plaza.com/gfwlist -server=/whatsapp.info/127.0.0.1#5335 -ipset=/whatsapp.info/gfwlist -server=/rakuten.tw/127.0.0.1#5335 -ipset=/rakuten.tw/gfwlist -server=/verisign.info/127.0.0.1#5335 -ipset=/verisign.info/gfwlist -server=/typekit.net/127.0.0.1#5335 -ipset=/typekit.net/gfwlist -server=/vfsco.com.br/127.0.0.1#5335 -ipset=/vfsco.com.br/gfwlist -server=/whatsapp.cc/127.0.0.1#5335 -ipset=/whatsapp.cc/gfwlist -server=/blizzcon-a.akamaihd.net/127.0.0.1#5335 -ipset=/blizzcon-a.akamaihd.net/gfwlist -server=/nsimg.net/127.0.0.1#5335 -ipset=/nsimg.net/gfwlist -server=/oculusvr.com/127.0.0.1#5335 -ipset=/oculusvr.com/gfwlist -server=/visa.lt/127.0.0.1#5335 -ipset=/visa.lt/gfwlist -server=/rbbusinessshop.com/127.0.0.1#5335 -ipset=/rbbusinessshop.com/gfwlist -server=/wwwpaypass.com/127.0.0.1#5335 -ipset=/wwwpaypass.com/gfwlist -server=/steamgames.com/127.0.0.1#5335 -ipset=/steamgames.com/gfwlist -server=/gbnews.uk/127.0.0.1#5335 -ipset=/gbnews.uk/gfwlist -server=/maskedsingerfox.com/127.0.0.1#5335 -ipset=/maskedsingerfox.com/gfwlist -server=/facebook-pmdcenter.org/127.0.0.1#5335 -ipset=/facebook-pmdcenter.org/gfwlist -server=/oculus.com/127.0.0.1#5335 -ipset=/oculus.com/gfwlist -server=/gvt3.com/127.0.0.1#5335 -ipset=/gvt3.com/gfwlist -server=/nbabot.net/127.0.0.1#5335 -ipset=/nbabot.net/gfwlist -server=/bmw.tt/127.0.0.1#5335 -ipset=/bmw.tt/gfwlist -server=/directvlosangeles.com/127.0.0.1#5335 -ipset=/directvlosangeles.com/gfwlist -server=/epochtimes.pl/127.0.0.1#5335 -ipset=/epochtimes.pl/gfwlist -server=/web-instagram.net/127.0.0.1#5335 -ipset=/web-instagram.net/gfwlist -server=/online-instagram.com/127.0.0.1#5335 -ipset=/online-instagram.com/gfwlist -server=/facebhook.com/127.0.0.1#5335 -ipset=/facebhook.com/gfwlist -server=/theinstagramhack.com/127.0.0.1#5335 -ipset=/theinstagramhack.com/gfwlist -server=/volvopenta.nl/127.0.0.1#5335 -ipset=/volvopenta.nl/gfwlist -server=/lnstagram-help.com/127.0.0.1#5335 -ipset=/lnstagram-help.com/gfwlist -server=/canon-emea.com/127.0.0.1#5335 -ipset=/canon-emea.com/gfwlist -server=/bmwm.com/127.0.0.1#5335 -ipset=/bmwm.com/gfwlist -server=/kingstagram.com/127.0.0.1#5335 -ipset=/kingstagram.com/gfwlist -server=/instgram.com/127.0.0.1#5335 -ipset=/instgram.com/gfwlist -server=/instastyle.tv/127.0.0.1#5335 -ipset=/instastyle.tv/gfwlist -server=/vhxqa1.com/127.0.0.1#5335 -ipset=/vhxqa1.com/gfwlist -server=/blzmedia-a.akamaihd.net/127.0.0.1#5335 -ipset=/blzmedia-a.akamaihd.net/gfwlist -server=/gopivotal.com/127.0.0.1#5335 -ipset=/gopivotal.com/gfwlist -server=/braintreepayments.org/127.0.0.1#5335 -ipset=/braintreepayments.org/gfwlist -server=/instanttelegram.com/127.0.0.1#5335 -ipset=/instanttelegram.com/gfwlist -server=/tvmedia.net.au/127.0.0.1#5335 -ipset=/tvmedia.net.au/gfwlist -server=/21centuryaccess.com/127.0.0.1#5335 -ipset=/21centuryaccess.com/gfwlist -server=/volvobuses.com.ar/127.0.0.1#5335 -ipset=/volvobuses.com.ar/gfwlist -server=/geeksquad.com/127.0.0.1#5335 -ipset=/geeksquad.com/gfwlist -server=/time.gov/127.0.0.1#5335 -ipset=/time.gov/gfwlist -server=/amplifyframework.com/127.0.0.1#5335 -ipset=/amplifyframework.com/gfwlist -server=/sundayready.com/127.0.0.1#5335 -ipset=/sundayready.com/gfwlist -server=/instagrem.com/127.0.0.1#5335 -ipset=/instagrem.com/gfwlist -server=/licensebuttons.net/127.0.0.1#5335 -ipset=/licensebuttons.net/gfwlist -server=/thomsonreuters.com.br/127.0.0.1#5335 -ipset=/thomsonreuters.com.br/gfwlist -server=/instagramtips.com/127.0.0.1#5335 -ipset=/instagramtips.com/gfwlist -server=/zeronet.io/127.0.0.1#5335 -ipset=/zeronet.io/gfwlist -server=/aanaan.com/127.0.0.1#5335 -ipset=/aanaan.com/gfwlist -server=/hplatexknowledgecenter.com/127.0.0.1#5335 -ipset=/hplatexknowledgecenter.com/gfwlist -server=/pypl.tv/127.0.0.1#5335 -ipset=/pypl.tv/gfwlist -server=/riotforgegames.com/127.0.0.1#5335 -ipset=/riotforgegames.com/gfwlist -server=/instagramdi.com/127.0.0.1#5335 -ipset=/instagramdi.com/gfwlist -server=/sourcingforebay.net/127.0.0.1#5335 -ipset=/sourcingforebay.net/gfwlist -server=/zeenews-fonts.s3.amazonaws.com/127.0.0.1#5335 -ipset=/zeenews-fonts.s3.amazonaws.com/gfwlist -server=/instagramm.com/127.0.0.1#5335 -ipset=/instagramm.com/gfwlist -server=/drdrebeatsuk.com/127.0.0.1#5335 -ipset=/drdrebeatsuk.com/gfwlist -server=/paypalbeacon.com/127.0.0.1#5335 -ipset=/paypalbeacon.com/gfwlist -server=/instagramkusu.com/127.0.0.1#5335 -ipset=/instagramkusu.com/gfwlist -server=/mray.club/127.0.0.1#5335 -ipset=/mray.club/gfwlist -server=/origin.com/127.0.0.1#5335 -ipset=/origin.com/gfwlist -server=/icloud.vn/127.0.0.1#5335 -ipset=/icloud.vn/gfwlist -server=/thinkdifferent.us/127.0.0.1#5335 -ipset=/thinkdifferent.us/gfwlist -server=/instagramcn.com/127.0.0.1#5335 -ipset=/instagramcn.com/gfwlist -server=/instagramci.com/127.0.0.1#5335 -ipset=/instagramci.com/gfwlist -server=/pixiv.net/127.0.0.1#5335 -ipset=/pixiv.net/gfwlist -server=/pokemonvgc.com/127.0.0.1#5335 -ipset=/pokemonvgc.com/gfwlist -server=/apple.pl/127.0.0.1#5335 -ipset=/apple.pl/gfwlist -server=/canon.com.cy/127.0.0.1#5335 -ipset=/canon.com.cy/gfwlist -server=/vanish.ch/127.0.0.1#5335 -ipset=/vanish.ch/gfwlist -server=/booking.com/127.0.0.1#5335 -ipset=/booking.com/gfwlist -server=/payypal.com/127.0.0.1#5335 -ipset=/payypal.com/gfwlist -server=/workers.dev/127.0.0.1#5335 -ipset=/workers.dev/gfwlist -server=/intel.sy/127.0.0.1#5335 -ipset=/intel.sy/gfwlist -server=/instagda.com/127.0.0.1#5335 -ipset=/instagda.com/gfwlist -server=/foxsportsneworleans.com/127.0.0.1#5335 -ipset=/foxsportsneworleans.com/gfwlist -server=/instafallow.com/127.0.0.1#5335 -ipset=/instafallow.com/gfwlist -server=/steemit.com/127.0.0.1#5335 -ipset=/steemit.com/gfwlist -server=/foxsportssupports.com/127.0.0.1#5335 -ipset=/foxsportssupports.com/gfwlist -server=/instachecker.com/127.0.0.1#5335 -ipset=/instachecker.com/gfwlist -server=/instaadder.com/127.0.0.1#5335 -ipset=/instaadder.com/gfwlist -server=/scholar.google.si/127.0.0.1#5335 -ipset=/scholar.google.si/gfwlist -server=/dnsvisa.com/127.0.0.1#5335 -ipset=/dnsvisa.com/gfwlist -server=/igtv.com/127.0.0.1#5335 -ipset=/igtv.com/gfwlist -server=/igsonar.com/127.0.0.1#5335 -ipset=/igsonar.com/gfwlist -server=/yahoo.com.om/127.0.0.1#5335 -ipset=/yahoo.com.om/gfwlist -server=/volvobuses.se/127.0.0.1#5335 -ipset=/volvobuses.se/gfwlist -server=/google.dk/127.0.0.1#5335 -ipset=/google.dk/gfwlist -server=/ebuyheadphones.com/127.0.0.1#5335 -ipset=/ebuyheadphones.com/gfwlist -server=/cdninstagram.com/127.0.0.1#5335 -ipset=/cdninstagram.com/gfwlist -server=/applepremiumresellers.com.au/127.0.0.1#5335 -ipset=/applepremiumresellers.com.au/gfwlist -server=/palestineremix.com/127.0.0.1#5335 -ipset=/palestineremix.com/gfwlist -server=/acheterdesfollowersinstagram.com/127.0.0.1#5335 -ipset=/acheterdesfollowersinstagram.com/gfwlist -server=/achat-followers-instagram.com/127.0.0.1#5335 -ipset=/achat-followers-instagram.com/gfwlist -server=/globaledu.org/127.0.0.1#5335 -ipset=/globaledu.org/gfwlist -server=/battlefront2.com/127.0.0.1#5335 -ipset=/battlefront2.com/gfwlist -server=/swisssign-group.com/127.0.0.1#5335 -ipset=/swisssign-group.com/gfwlist -server=/amebaownd.com/127.0.0.1#5335 -ipset=/amebaownd.com/gfwlist -server=/thomsonreuters.com.ar/127.0.0.1#5335 -ipset=/thomsonreuters.com.ar/gfwlist -server=/airwatchqa.com/127.0.0.1#5335 -ipset=/airwatchqa.com/gfwlist -server=/s2stagehance.com/127.0.0.1#5335 -ipset=/s2stagehance.com/gfwlist -server=/airwatchexpress.com/127.0.0.1#5335 -ipset=/airwatchexpress.com/gfwlist -server=/air-watch.com/127.0.0.1#5335 -ipset=/air-watch.com/gfwlist -server=/vsphere.net/127.0.0.1#5335 -ipset=/vsphere.net/gfwlist -server=/foxuv.com/127.0.0.1#5335 -ipset=/foxuv.com/gfwlist -server=/paragon.com/127.0.0.1#5335 -ipset=/paragon.com/gfwlist -server=/miniofmonrovia.com/127.0.0.1#5335 -ipset=/miniofmonrovia.com/gfwlist -server=/wireguard.com/127.0.0.1#5335 -ipset=/wireguard.com/gfwlist -server=/aliverewind.com/127.0.0.1#5335 -ipset=/aliverewind.com/gfwlist -server=/aliveitsm.com/127.0.0.1#5335 -ipset=/aliveitsm.com/gfwlist -server=/hpcustomersupport.net/127.0.0.1#5335 -ipset=/hpcustomersupport.net/gfwlist -server=/nyansa.com/127.0.0.1#5335 -ipset=/nyansa.com/gfwlist -server=/kubeapps.com/127.0.0.1#5335 -ipset=/kubeapps.com/gfwlist -server=/durex.cl/127.0.0.1#5335 -ipset=/durex.cl/gfwlist -server=/cloudhealthtech.com/127.0.0.1#5335 -ipset=/cloudhealthtech.com/gfwlist -server=/dockerizer.com/127.0.0.1#5335 -ipset=/dockerizer.com/gfwlist -server=/mastercard.com.ph/127.0.0.1#5335 -ipset=/mastercard.com.ph/gfwlist -server=/bitnamiapp.com/127.0.0.1#5335 -ipset=/bitnamiapp.com/gfwlist -server=/shopee.com/127.0.0.1#5335 -ipset=/shopee.com/gfwlist -server=/badaas.com/127.0.0.1#5335 -ipset=/badaas.com/gfwlist -server=/bronto.com/127.0.0.1#5335 -ipset=/bronto.com/gfwlist -server=/officialbeatsbydrestore.com/127.0.0.1#5335 -ipset=/officialbeatsbydrestore.com/gfwlist -server=/sway-cdn.com/127.0.0.1#5335 -ipset=/sway-cdn.com/gfwlist -server=/vnware.net/127.0.0.1#5335 -ipset=/vnware.net/gfwlist -server=/cyber-bay.org/127.0.0.1#5335 -ipset=/cyber-bay.org/gfwlist -server=/sonydesign.com/127.0.0.1#5335 -ipset=/sonydesign.com/gfwlist -server=/forzaracingchampionship.com/127.0.0.1#5335 -ipset=/forzaracingchampionship.com/gfwlist -server=/vmworld2010.com/127.0.0.1#5335 -ipset=/vmworld2010.com/gfwlist -server=/vmwlearningplatform.com/127.0.0.1#5335 -ipset=/vmwlearningplatform.com/gfwlist -server=/vmwgcomms.com/127.0.0.1#5335 -ipset=/vmwgcomms.com/gfwlist -server=/vmwarestuff.com/127.0.0.1#5335 -ipset=/vmwarestuff.com/gfwlist -server=/vmwarelearningplatform.com/127.0.0.1#5335 -ipset=/vmwarelearningplatform.com/gfwlist -server=/vmwaregrid.com/127.0.0.1#5335 -ipset=/vmwaregrid.com/gfwlist -server=/tvb.com/127.0.0.1#5335 -ipset=/tvb.com/gfwlist -server=/streamable.com/127.0.0.1#5335 -ipset=/streamable.com/gfwlist -server=/foxkansas.com/127.0.0.1#5335 -ipset=/foxkansas.com/gfwlist -server=/fbcdn.com/127.0.0.1#5335 -ipset=/fbcdn.com/gfwlist -server=/awsautoscaling.com/127.0.0.1#5335 -ipset=/awsautoscaling.com/gfwlist -server=/casquebeatsfracheter.com/127.0.0.1#5335 -ipset=/casquebeatsfracheter.com/gfwlist -server=/vmwareausnews.com/127.0.0.1#5335 -ipset=/vmwareausnews.com/gfwlist -server=/pickshoesclothes.com/127.0.0.1#5335 -ipset=/pickshoesclothes.com/gfwlist -server=/hcaptchastatus.com/127.0.0.1#5335 -ipset=/hcaptchastatus.com/gfwlist -server=/dettol.pk/127.0.0.1#5335 -ipset=/dettol.pk/gfwlist -server=/scholar.google.co.nz/127.0.0.1#5335 -ipset=/scholar.google.co.nz/gfwlist -server=/realitykings.com/127.0.0.1#5335 -ipset=/realitykings.com/gfwlist -server=/hulupurchase.com/127.0.0.1#5335 -ipset=/hulupurchase.com/gfwlist -server=/drebeatsbydreoutlet.com/127.0.0.1#5335 -ipset=/drebeatsbydreoutlet.com/gfwlist -server=/shops-disney.com/127.0.0.1#5335 -ipset=/shops-disney.com/gfwlist -server=/spoti.fi/127.0.0.1#5335 -ipset=/spoti.fi/gfwlist -server=/foxnewsradio.com/127.0.0.1#5335 -ipset=/foxnewsradio.com/gfwlist -server=/e-hentai.org/127.0.0.1#5335 -ipset=/e-hentai.org/gfwlist -server=/firestonecomercial.com.br/127.0.0.1#5335 -ipset=/firestonecomercial.com.br/gfwlist -server=/sonypicturesstudios.com/127.0.0.1#5335 -ipset=/sonypicturesstudios.com/gfwlist -server=/feacebook.com/127.0.0.1#5335 -ipset=/feacebook.com/gfwlist -server=/ampproject.org/127.0.0.1#5335 -ipset=/ampproject.org/gfwlist -server=/virsto.com/127.0.0.1#5335 -ipset=/virsto.com/gfwlist -server=/vfabric.net/127.0.0.1#5335 -ipset=/vfabric.net/gfwlist -server=/dcard.io/127.0.0.1#5335 -ipset=/dcard.io/gfwlist -server=/youtube.sa/127.0.0.1#5335 -ipset=/youtube.sa/gfwlist -server=/ssdevrd.com/127.0.0.1#5335 -ipset=/ssdevrd.com/gfwlist -server=/snapvolumes.com/127.0.0.1#5335 -ipset=/snapvolumes.com/gfwlist -server=/mini-connected.be/127.0.0.1#5335 -ipset=/mini-connected.be/gfwlist -server=/steamcommunity-a.akamaihd.net/127.0.0.1#5335 -ipset=/steamcommunity-a.akamaihd.net/gfwlist -server=/facfacebook.com/127.0.0.1#5335 -ipset=/facfacebook.com/gfwlist -server=/itfromtheinside.com/127.0.0.1#5335 -ipset=/itfromtheinside.com/gfwlist -server=/hwslabs.com/127.0.0.1#5335 -ipset=/hwslabs.com/gfwlist -server=/greenplum.net/127.0.0.1#5335 -ipset=/greenplum.net/gfwlist -server=/foxlexington.com/127.0.0.1#5335 -ipset=/foxlexington.com/gfwlist -server=/iphone.com.gr/127.0.0.1#5335 -ipset=/iphone.com.gr/gfwlist -server=/udtrucksmeena.com/127.0.0.1#5335 -ipset=/udtrucksmeena.com/gfwlist -server=/getboxer.com/127.0.0.1#5335 -ipset=/getboxer.com/gfwlist -server=/9to5toys.com/127.0.0.1#5335 -ipset=/9to5toys.com/gfwlist -server=/mastercard.co.id/127.0.0.1#5335 -ipset=/mastercard.co.id/gfwlist -server=/xamarin.com/127.0.0.1#5335 -ipset=/xamarin.com/gfwlist -server=/starbucks.de/127.0.0.1#5335 -ipset=/starbucks.de/gfwlist -server=/mini-clubs-international.com/127.0.0.1#5335 -ipset=/mini-clubs-international.com/gfwlist -server=/gemfire.net/127.0.0.1#5335 -ipset=/gemfire.net/gfwlist -server=/dvh30n.vip/127.0.0.1#5335 -ipset=/dvh30n.vip/gfwlist -server=/property.com.au/127.0.0.1#5335 -ipset=/property.com.au/gfwlist -server=/dat.foundation/127.0.0.1#5335 -ipset=/dat.foundation/gfwlist -server=/bbycontent.com/127.0.0.1#5335 -ipset=/bbycontent.com/gfwlist -server=/disney.ch/127.0.0.1#5335 -ipset=/disney.ch/gfwlist -server=/fbacebook.com/127.0.0.1#5335 -ipset=/fbacebook.com/gfwlist -server=/play4free.com/127.0.0.1#5335 -ipset=/play4free.com/gfwlist -server=/businessinsider.sg/127.0.0.1#5335 -ipset=/businessinsider.sg/gfwlist -server=/cpedge.com/127.0.0.1#5335 -ipset=/cpedge.com/gfwlist -server=/slack-msgs.com/127.0.0.1#5335 -ipset=/slack-msgs.com/gfwlist -server=/javcc.cc/127.0.0.1#5335 -ipset=/javcc.cc/gfwlist -server=/barefootnetworks.com/127.0.0.1#5335 -ipset=/barefootnetworks.com/gfwlist -server=/cfblob.com/127.0.0.1#5335 -ipset=/cfblob.com/gfwlist -server=/cloudcone.net/127.0.0.1#5335 -ipset=/cloudcone.net/gfwlist -server=/paypal.info/127.0.0.1#5335 -ipset=/paypal.info/gfwlist -server=/howtogetmo.co.uk/127.0.0.1#5335 -ipset=/howtogetmo.co.uk/gfwlist -server=/google.ne/127.0.0.1#5335 -ipset=/google.ne/gfwlist -server=/cisco.evergage.com/127.0.0.1#5335 -ipset=/cisco.evergage.com/gfwlist -server=/rethink.net/127.0.0.1#5335 -ipset=/rethink.net/gfwlist -server=/tailf.com/127.0.0.1#5335 -ipset=/tailf.com/gfwlist -server=/scholar.google.com.co/127.0.0.1#5335 -ipset=/scholar.google.com.co/gfwlist -server=/cloudflareresolve.com/127.0.0.1#5335 -ipset=/cloudflareresolve.com/gfwlist -server=/webex.fr/127.0.0.1#5335 -ipset=/webex.fr/gfwlist -server=/merakigo.com/127.0.0.1#5335 -ipset=/merakigo.com/gfwlist -server=/oxfordlawtrove.com/127.0.0.1#5335 -ipset=/oxfordlawtrove.com/gfwlist -server=/stackpath.dev/127.0.0.1#5335 -ipset=/stackpath.dev/gfwlist -server=/svpply.com/127.0.0.1#5335 -ipset=/svpply.com/gfwlist -server=/spyjinx.com/127.0.0.1#5335 -ipset=/spyjinx.com/gfwlist -server=/collector.xhamster.com/127.0.0.1#5335 -ipset=/collector.xhamster.com/gfwlist -server=/dukgo.com/127.0.0.1#5335 -ipset=/dukgo.com/gfwlist -server=/ettrade.com.hk/127.0.0.1#5335 -ipset=/ettrade.com.hk/gfwlist -server=/bmw-connecteddrive.com.br/127.0.0.1#5335 -ipset=/bmw-connecteddrive.com.br/gfwlist -server=/pokemonswordshield.com/127.0.0.1#5335 -ipset=/pokemonswordshield.com/gfwlist -server=/kicksnike1.com/127.0.0.1#5335 -ipset=/kicksnike1.com/gfwlist -server=/fbthirdpartypixel.org/127.0.0.1#5335 -ipset=/fbthirdpartypixel.org/gfwlist -server=/steamcdn-a.akamaihd.net/127.0.0.1#5335 -ipset=/steamcdn-a.akamaihd.net/gfwlist -server=/gmoney.org/127.0.0.1#5335 -ipset=/gmoney.org/gfwlist -server=/youtube.com.pk/127.0.0.1#5335 -ipset=/youtube.com.pk/gfwlist -server=/fox46charlotte.com/127.0.0.1#5335 -ipset=/fox46charlotte.com/gfwlist -server=/apple-store.wang/127.0.0.1#5335 -ipset=/apple-store.wang/gfwlist -server=/phprcdn.com/127.0.0.1#5335 -ipset=/phprcdn.com/gfwlist -server=/nintendo.co.za/127.0.0.1#5335 -ipset=/nintendo.co.za/gfwlist -server=/kindleproject.com/127.0.0.1#5335 -ipset=/kindleproject.com/gfwlist -server=/sagepub.com/127.0.0.1#5335 -ipset=/sagepub.com/gfwlist -server=/itunes.hk/127.0.0.1#5335 -ipset=/itunes.hk/gfwlist -server=/hpofficejetprinter.com/127.0.0.1#5335 -ipset=/hpofficejetprinter.com/gfwlist -server=/bbyurl.us/127.0.0.1#5335 -ipset=/bbyurl.us/gfwlist -server=/monsterbeatsbydre2015.com/127.0.0.1#5335 -ipset=/monsterbeatsbydre2015.com/gfwlist -server=/mac.eu/127.0.0.1#5335 -ipset=/mac.eu/gfwlist -server=/unbrandedproducts.com/127.0.0.1#5335 -ipset=/unbrandedproducts.com/gfwlist -server=/videochampion.com/127.0.0.1#5335 -ipset=/videochampion.com/gfwlist -server=/bmw-motorrad.sk/127.0.0.1#5335 -ipset=/bmw-motorrad.sk/gfwlist -server=/beddit.tv/127.0.0.1#5335 -ipset=/beddit.tv/gfwlist -server=/convrgencegame.com/127.0.0.1#5335 -ipset=/convrgencegame.com/gfwlist -server=/starwarsbattlefront2.com/127.0.0.1#5335 -ipset=/starwarsbattlefront2.com/gfwlist -server=/gettyimages.at/127.0.0.1#5335 -ipset=/gettyimages.at/gfwlist -server=/tandberg.com/127.0.0.1#5335 -ipset=/tandberg.com/gfwlist -server=/aaagradeheadphones.com/127.0.0.1#5335 -ipset=/aaagradeheadphones.com/gfwlist -server=/static-cisco.com/127.0.0.1#5335 -ipset=/static-cisco.com/gfwlist -server=/bmwgroupfs.com/127.0.0.1#5335 -ipset=/bmwgroupfs.com/gfwlist -server=/blogspot.it/127.0.0.1#5335 -ipset=/blogspot.it/gfwlist -server=/applestore.qa/127.0.0.1#5335 -ipset=/applestore.qa/gfwlist -server=/strepsils.co.kr/127.0.0.1#5335 -ipset=/strepsils.co.kr/gfwlist -server=/obsrvbl.com/127.0.0.1#5335 -ipset=/obsrvbl.com/gfwlist -server=/anthemthegame.com/127.0.0.1#5335 -ipset=/anthemthegame.com/gfwlist -server=/mini101.ca/127.0.0.1#5335 -ipset=/mini101.ca/gfwlist -server=/observable.net/127.0.0.1#5335 -ipset=/observable.net/gfwlist -server=/applestore.kr/127.0.0.1#5335 -ipset=/applestore.kr/gfwlist -server=/minimotoringschool.com/127.0.0.1#5335 -ipset=/minimotoringschool.com/gfwlist -server=/bbthat.com/127.0.0.1#5335 -ipset=/bbthat.com/gfwlist -server=/adobetag.com/127.0.0.1#5335 -ipset=/adobetag.com/gfwlist -server=/londonmithraeum.com/127.0.0.1#5335 -ipset=/londonmithraeum.com/gfwlist -server=/mybridgestoneeducation.com/127.0.0.1#5335 -ipset=/mybridgestoneeducation.com/gfwlist -server=/kingkong.com.tw/127.0.0.1#5335 -ipset=/kingkong.com.tw/gfwlist -server=/zb.io/127.0.0.1#5335 -ipset=/zb.io/gfwlist -server=/huluinstantmessenger.com/127.0.0.1#5335 -ipset=/huluinstantmessenger.com/gfwlist -server=/bmwgroup-werke.com/127.0.0.1#5335 -ipset=/bmwgroup-werke.com/gfwlist -server=/mysdn.net/127.0.0.1#5335 -ipset=/mysdn.net/gfwlist -server=/mysdn.info/127.0.0.1#5335 -ipset=/mysdn.info/gfwlist -server=/onedrive.net/127.0.0.1#5335 -ipset=/onedrive.net/gfwlist -server=/multiplydiversity.com/127.0.0.1#5335 -ipset=/multiplydiversity.com/gfwlist -server=/redditmedia.com/127.0.0.1#5335 -ipset=/redditmedia.com/gfwlist -server=/alphabet.lu/127.0.0.1#5335 -ipset=/alphabet.lu/gfwlist -server=/mastercard.be/127.0.0.1#5335 -ipset=/mastercard.be/gfwlist -server=/foxnewsgo.tv/127.0.0.1#5335 -ipset=/foxnewsgo.tv/gfwlist -server=/ipodtouch.co/127.0.0.1#5335 -ipset=/ipodtouch.co/gfwlist -server=/apple.tw/127.0.0.1#5335 -ipset=/apple.tw/gfwlist -server=/fonts.net/127.0.0.1#5335 -ipset=/fonts.net/gfwlist -server=/visa.hu/127.0.0.1#5335 -ipset=/visa.hu/gfwlist -server=/applecomputerinc.info/127.0.0.1#5335 -ipset=/applecomputerinc.info/gfwlist -server=/froogle.com/127.0.0.1#5335 -ipset=/froogle.com/gfwlist -server=/paypal-security.org/127.0.0.1#5335 -ipset=/paypal-security.org/gfwlist -server=/nordstrom.com/127.0.0.1#5335 -ipset=/nordstrom.com/gfwlist -server=/nikehightops.com/127.0.0.1#5335 -ipset=/nikehightops.com/gfwlist -server=/volvogroup.be/127.0.0.1#5335 -ipset=/volvogroup.be/gfwlist -server=/solarcity.com/127.0.0.1#5335 -ipset=/solarcity.com/gfwlist -server=/visa.tc/127.0.0.1#5335 -ipset=/visa.tc/gfwlist -server=/100classicbooks.com/127.0.0.1#5335 -ipset=/100classicbooks.com/gfwlist -server=/internetofeverything.com/127.0.0.1#5335 -ipset=/internetofeverything.com/gfwlist -server=/mypearsonenglish.ch/127.0.0.1#5335 -ipset=/mypearsonenglish.ch/gfwlist -server=/thomsonreuters.com.pe/127.0.0.1#5335 -ipset=/thomsonreuters.com.pe/gfwlist -server=/gpstheseries.com/127.0.0.1#5335 -ipset=/gpstheseries.com/gfwlist -server=/volvotrucks.hu/127.0.0.1#5335 -ipset=/volvotrucks.hu/gfwlist -server=/lojaiphone.com.br/127.0.0.1#5335 -ipset=/lojaiphone.com.br/gfwlist -server=/ultimaonline.com/127.0.0.1#5335 -ipset=/ultimaonline.com/gfwlist -server=/finish.ro/127.0.0.1#5335 -ipset=/finish.ro/gfwlist -server=/spaindisney.com/127.0.0.1#5335 -ipset=/spaindisney.com/gfwlist -server=/dnaspaces.io/127.0.0.1#5335 -ipset=/dnaspaces.io/gfwlist -server=/areyoucreditwise.com/127.0.0.1#5335 -ipset=/areyoucreditwise.com/gfwlist -server=/cs.co/127.0.0.1#5335 -ipset=/cs.co/gfwlist -server=/9to5mac.com/127.0.0.1#5335 -ipset=/9to5mac.com/gfwlist -server=/longtailvideo.com/127.0.0.1#5335 -ipset=/longtailvideo.com/gfwlist -server=/minibrossard.ca/127.0.0.1#5335 -ipset=/minibrossard.ca/gfwlist -server=/bmw.co.uk/127.0.0.1#5335 -ipset=/bmw.co.uk/gfwlist -server=/canon.es/127.0.0.1#5335 -ipset=/canon.es/gfwlist -server=/findacard.com/127.0.0.1#5335 -ipset=/findacard.com/gfwlist -server=/cloupia.net/127.0.0.1#5335 -ipset=/cloupia.net/gfwlist -server=/instagy.com/127.0.0.1#5335 -ipset=/instagy.com/gfwlist -server=/appledaily.hk/127.0.0.1#5335 -ipset=/appledaily.hk/gfwlist -server=/nvidia.com.ve/127.0.0.1#5335 -ipset=/nvidia.com.ve/gfwlist -server=/ciscowebseminars.com/127.0.0.1#5335 -ipset=/ciscowebseminars.com/gfwlist -server=/ciscovideo.com/127.0.0.1#5335 -ipset=/ciscovideo.com/gfwlist -server=/ciscoturk.net/127.0.0.1#5335 -ipset=/ciscoturk.net/gfwlist -server=/ciscotr.com/127.0.0.1#5335 -ipset=/ciscotr.com/gfwlist -server=/ciscotaccc.com/127.0.0.1#5335 -ipset=/ciscotaccc.com/gfwlist -server=/nicoseiga.jp/127.0.0.1#5335 -ipset=/nicoseiga.jp/gfwlist -server=/disney.co.il/127.0.0.1#5335 -ipset=/disney.co.il/gfwlist -server=/ciscospark.jp/127.0.0.1#5335 -ipset=/ciscospark.jp/gfwlist -server=/download.91porn005.me/127.0.0.1#5335 -ipset=/download.91porn005.me/gfwlist -server=/69story.com/127.0.0.1#5335 -ipset=/69story.com/gfwlist -server=/microsoftonline-p.com/127.0.0.1#5335 -ipset=/microsoftonline-p.com/gfwlist -server=/icloudo.de/127.0.0.1#5335 -ipset=/icloudo.de/gfwlist -server=/ciscoprice.com/127.0.0.1#5335 -ipset=/ciscoprice.com/gfwlist -server=/geeksquadforums.com/127.0.0.1#5335 -ipset=/geeksquadforums.com/gfwlist -server=/nhentai.net/127.0.0.1#5335 -ipset=/nhentai.net/gfwlist -server=/ciscopowercube.com/127.0.0.1#5335 -ipset=/ciscopowercube.com/gfwlist -server=/softbankbb.com/127.0.0.1#5335 -ipset=/softbankbb.com/gfwlist -server=/foxnetworksinfo.com/127.0.0.1#5335 -ipset=/foxnetworksinfo.com/gfwlist -server=/beatsbydresdanmark.net/127.0.0.1#5335 -ipset=/beatsbydresdanmark.net/gfwlist -server=/login-paypal.com/127.0.0.1#5335 -ipset=/login-paypal.com/gfwlist -server=/ciscopartnermarketing.com/127.0.0.1#5335 -ipset=/ciscopartnermarketing.com/gfwlist -server=/fox28media.com/127.0.0.1#5335 -ipset=/fox28media.com/gfwlist -server=/leagueoflegends.ca/127.0.0.1#5335 -ipset=/leagueoflegends.ca/gfwlist -server=/minitroisrivieres.ca/127.0.0.1#5335 -ipset=/minitroisrivieres.ca/gfwlist -server=/pearsoncred.com/127.0.0.1#5335 -ipset=/pearsoncred.com/gfwlist -server=/imessage.tv/127.0.0.1#5335 -ipset=/imessage.tv/gfwlist -server=/battlebreakers.com/127.0.0.1#5335 -ipset=/battlebreakers.com/gfwlist -server=/makeeu.com/127.0.0.1#5335 -ipset=/makeeu.com/gfwlist -server=/ipple.com/127.0.0.1#5335 -ipset=/ipple.com/gfwlist -server=/nintendo.net/127.0.0.1#5335 -ipset=/nintendo.net/gfwlist -server=/ciscolive.com/127.0.0.1#5335 -ipset=/ciscolive.com/gfwlist -server=/bmw-connecteddrive.tw/127.0.0.1#5335 -ipset=/bmw-connecteddrive.tw/gfwlist -server=/veet.cl/127.0.0.1#5335 -ipset=/veet.cl/gfwlist -server=/sforce.com/127.0.0.1#5335 -ipset=/sforce.com/gfwlist -server=/canon.co.uk/127.0.0.1#5335 -ipset=/canon.co.uk/gfwlist -server=/foftolia.com/127.0.0.1#5335 -ipset=/foftolia.com/gfwlist -server=/bmw.co.nz/127.0.0.1#5335 -ipset=/bmw.co.nz/gfwlist -server=/digitaloceanspaces.com/127.0.0.1#5335 -ipset=/digitaloceanspaces.com/gfwlist -server=/ciscoerate.com/127.0.0.1#5335 -ipset=/ciscoerate.com/gfwlist -server=/epochtimes.co.il/127.0.0.1#5335 -ipset=/epochtimes.co.il/gfwlist -server=/calgon.it/127.0.0.1#5335 -ipset=/calgon.it/gfwlist -server=/paypal-qrshopping.org/127.0.0.1#5335 -ipset=/paypal-qrshopping.org/gfwlist -server=/monsterbeatsbydrdre-nz.com/127.0.0.1#5335 -ipset=/monsterbeatsbydrdre-nz.com/gfwlist -server=/beatsdresale2013.com/127.0.0.1#5335 -ipset=/beatsdresale2013.com/gfwlist -server=/rolls-roycemotorcarsna.com/127.0.0.1#5335 -ipset=/rolls-roycemotorcarsna.com/gfwlist -server=/gravatar.com/127.0.0.1#5335 -ipset=/gravatar.com/gfwlist -server=/ebayuae.net/127.0.0.1#5335 -ipset=/ebayuae.net/gfwlist -server=/persianepochtimes.com/127.0.0.1#5335 -ipset=/persianepochtimes.com/gfwlist -server=/bsw.co.jp/127.0.0.1#5335 -ipset=/bsw.co.jp/gfwlist -server=/etviet.com/127.0.0.1#5335 -ipset=/etviet.com/gfwlist -server=/guambmw.com/127.0.0.1#5335 -ipset=/guambmw.com/gfwlist -server=/oxfordmedicine.com/127.0.0.1#5335 -ipset=/oxfordmedicine.com/gfwlist -server=/cisco-warrantyfinder.com/127.0.0.1#5335 -ipset=/cisco-warrantyfinder.com/gfwlist -server=/ebay.ca/127.0.0.1#5335 -ipset=/ebay.ca/gfwlist -server=/the-tls.co.uk/127.0.0.1#5335 -ipset=/the-tls.co.uk/gfwlist -server=/perl.org/127.0.0.1#5335 -ipset=/perl.org/gfwlist -server=/hpmobile.com/127.0.0.1#5335 -ipset=/hpmobile.com/gfwlist -server=/cciesecuritylabs.com/127.0.0.1#5335 -ipset=/cciesecuritylabs.com/gfwlist -server=/mastercard.cz/127.0.0.1#5335 -ipset=/mastercard.cz/gfwlist -server=/myfoxla.com/127.0.0.1#5335 -ipset=/myfoxla.com/gfwlist -server=/bridgestonecomercial.com.br/127.0.0.1#5335 -ipset=/bridgestonecomercial.com.br/gfwlist -server=/volvogroup.fr/127.0.0.1#5335 -ipset=/volvogroup.fr/gfwlist -server=/spiedigitallibrary.org/127.0.0.1#5335 -ipset=/spiedigitallibrary.org/gfwlist -server=/academynetriders.com/127.0.0.1#5335 -ipset=/academynetriders.com/gfwlist -server=/paypalnetwork.net/127.0.0.1#5335 -ipset=/paypalnetwork.net/gfwlist -server=/881903.com/127.0.0.1#5335 -ipset=/881903.com/gfwlist -server=/yahoo.com.gi/127.0.0.1#5335 -ipset=/yahoo.com.gi/gfwlist -server=/webex.com.br/127.0.0.1#5335 -ipset=/webex.com.br/gfwlist -server=/bmw-connecteddrive.si/127.0.0.1#5335 -ipset=/bmw-connecteddrive.si/gfwlist -server=/foxdeportes.com/127.0.0.1#5335 -ipset=/foxdeportes.com/gfwlist -server=/bbystatic.com/127.0.0.1#5335 -ipset=/bbystatic.com/gfwlist -server=/netflixdnstest9.com/127.0.0.1#5335 -ipset=/netflixdnstest9.com/gfwlist -server=/cloudapp.net/127.0.0.1#5335 -ipset=/cloudapp.net/gfwlist -server=/teslamotors.com/127.0.0.1#5335 -ipset=/teslamotors.com/gfwlist -server=/webex.co.nz/127.0.0.1#5335 -ipset=/webex.co.nz/gfwlist -server=/webex.co.kr/127.0.0.1#5335 -ipset=/webex.co.kr/gfwlist -server=/sony.be/127.0.0.1#5335 -ipset=/sony.be/gfwlist -server=/bmw-saudiarabia.com/127.0.0.1#5335 -ipset=/bmw-saudiarabia.com/gfwlist -server=/myfoxdfw.com/127.0.0.1#5335 -ipset=/myfoxdfw.com/gfwlist -server=/webex.co.it/127.0.0.1#5335 -ipset=/webex.co.it/gfwlist -server=/webex.co.in/127.0.0.1#5335 -ipset=/webex.co.in/gfwlist -server=/madvr.net/127.0.0.1#5335 -ipset=/madvr.net/gfwlist -server=/mmdnn.com/127.0.0.1#5335 -ipset=/mmdnn.com/gfwlist -server=/google.com.sb/127.0.0.1#5335 -ipset=/google.com.sb/gfwlist -server=/gettyimages.co.jp/127.0.0.1#5335 -ipset=/gettyimages.co.jp/gfwlist -server=/canon.ru/127.0.0.1#5335 -ipset=/canon.ru/gfwlist -server=/mini.com.mx/127.0.0.1#5335 -ipset=/mini.com.mx/gfwlist -server=/bmw.ch/127.0.0.1#5335 -ipset=/bmw.ch/gfwlist -server=/europepmc.org/127.0.0.1#5335 -ipset=/europepmc.org/gfwlist -server=/pixfs.net/127.0.0.1#5335 -ipset=/pixfs.net/gfwlist -server=/apple.ru/127.0.0.1#5335 -ipset=/apple.ru/gfwlist -server=/canon.ro/127.0.0.1#5335 -ipset=/canon.ro/gfwlist -server=/miniwidget.ca/127.0.0.1#5335 -ipset=/miniwidget.ca/gfwlist -server=/visa.com.ph/127.0.0.1#5335 -ipset=/visa.com.ph/gfwlist -server=/ieee-npss.org/127.0.0.1#5335 -ipset=/ieee-npss.org/gfwlist -server=/ebaybags.com/127.0.0.1#5335 -ipset=/ebaybags.com/gfwlist -server=/cheapbeatsbydr.com/127.0.0.1#5335 -ipset=/cheapbeatsbydr.com/gfwlist -server=/canon.no/127.0.0.1#5335 -ipset=/canon.no/gfwlist -server=/intel.af/127.0.0.1#5335 -ipset=/intel.af/gfwlist -server=/currently.com/127.0.0.1#5335 -ipset=/currently.com/gfwlist -server=/canon.me/127.0.0.1#5335 -ipset=/canon.me/gfwlist -server=/qualcomm.co.uk/127.0.0.1#5335 -ipset=/qualcomm.co.uk/gfwlist -server=/macbookair.co.kr/127.0.0.1#5335 -ipset=/macbookair.co.kr/gfwlist -server=/cheapbeatsbydrestudioedition.com/127.0.0.1#5335 -ipset=/cheapbeatsbydrestudioedition.com/gfwlist -server=/sinoinsider.com/127.0.0.1#5335 -ipset=/sinoinsider.com/gfwlist -server=/maddenseason.net/127.0.0.1#5335 -ipset=/maddenseason.net/gfwlist -server=/foxnews.com/127.0.0.1#5335 -ipset=/foxnews.com/gfwlist -server=/lovemarca.com/127.0.0.1#5335 -ipset=/lovemarca.com/gfwlist -server=/canon.lu/127.0.0.1#5335 -ipset=/canon.lu/gfwlist -server=/verisign.vn/127.0.0.1#5335 -ipset=/verisign.vn/gfwlist -server=/easportsfootballclub.com/127.0.0.1#5335 -ipset=/easportsfootballclub.com/gfwlist -server=/prepsure.com/127.0.0.1#5335 -ipset=/prepsure.com/gfwlist -server=/intel.com.my/127.0.0.1#5335 -ipset=/intel.com.my/gfwlist -server=/myferrariheadphones.com/127.0.0.1#5335 -ipset=/myferrariheadphones.com/gfwlist -server=/ebay-inc.com/127.0.0.1#5335 -ipset=/ebay-inc.com/gfwlist -server=/bmwjamaica.com/127.0.0.1#5335 -ipset=/bmwjamaica.com/gfwlist -server=/canon.ie/127.0.0.1#5335 -ipset=/canon.ie/gfwlist -server=/cloudvolumes.com/127.0.0.1#5335 -ipset=/cloudvolumes.com/gfwlist -server=/globalsign.be/127.0.0.1#5335 -ipset=/globalsign.be/gfwlist -server=/pricelesshongkong.com/127.0.0.1#5335 -ipset=/pricelesshongkong.com/gfwlist -server=/hkteducation.com/127.0.0.1#5335 -ipset=/hkteducation.com/gfwlist -server=/foxnews.org/127.0.0.1#5335 -ipset=/foxnews.org/gfwlist -server=/ebaystore77.com/127.0.0.1#5335 -ipset=/ebaystore77.com/gfwlist -server=/macbookpros.com/127.0.0.1#5335 -ipset=/macbookpros.com/gfwlist -server=/mini.kz/127.0.0.1#5335 -ipset=/mini.kz/gfwlist -server=/lihkg.com/127.0.0.1#5335 -ipset=/lihkg.com/gfwlist -server=/mini.sk/127.0.0.1#5335 -ipset=/mini.sk/gfwlist -server=/yahoo.com.fj/127.0.0.1#5335 -ipset=/yahoo.com.fj/gfwlist -server=/steam-chat.com/127.0.0.1#5335 -ipset=/steam-chat.com/gfwlist -server=/foxdigitalmovies.com/127.0.0.1#5335 -ipset=/foxdigitalmovies.com/gfwlist -server=/google.com.af/127.0.0.1#5335 -ipset=/google.com.af/gfwlist -server=/nikegadgets.com/127.0.0.1#5335 -ipset=/nikegadgets.com/gfwlist -server=/shopifycloud.com/127.0.0.1#5335 -ipset=/shopifycloud.com/gfwlist -server=/canon.com.tr/127.0.0.1#5335 -ipset=/canon.com.tr/gfwlist -server=/canon.com.my/127.0.0.1#5335 -ipset=/canon.com.my/gfwlist -server=/paypalonline.org/127.0.0.1#5335 -ipset=/paypalonline.org/gfwlist -server=/disneymagicmoments.co.il/127.0.0.1#5335 -ipset=/disneymagicmoments.co.il/gfwlist -server=/rea.io/127.0.0.1#5335 -ipset=/rea.io/gfwlist -server=/bmwcolorado.com/127.0.0.1#5335 -ipset=/bmwcolorado.com/gfwlist -server=/volvotrucks.cl/127.0.0.1#5335 -ipset=/volvotrucks.cl/gfwlist -server=/speedxtra.com/127.0.0.1#5335 -ipset=/speedxtra.com/gfwlist -server=/emojipedia.org/127.0.0.1#5335 -ipset=/emojipedia.org/gfwlist -server=/canon.com.au/127.0.0.1#5335 -ipset=/canon.com.au/gfwlist -server=/instantssl.com/127.0.0.1#5335 -ipset=/instantssl.com/gfwlist -server=/canon.dk/127.0.0.1#5335 -ipset=/canon.dk/gfwlist -server=/iphine.com/127.0.0.1#5335 -ipset=/iphine.com/gfwlist -server=/mastercard.co.jp/127.0.0.1#5335 -ipset=/mastercard.co.jp/gfwlist -server=/itunes.co.th/127.0.0.1#5335 -ipset=/itunes.co.th/gfwlist -server=/foxrad.io/127.0.0.1#5335 -ipset=/foxrad.io/gfwlist -server=/newbemany.com/127.0.0.1#5335 -ipset=/newbemany.com/gfwlist -server=/bmw-sudan.com/127.0.0.1#5335 -ipset=/bmw-sudan.com/gfwlist -server=/facebook.design/127.0.0.1#5335 -ipset=/facebook.design/gfwlist -server=/canon.co.za/127.0.0.1#5335 -ipset=/canon.co.za/gfwlist -server=/x18r.com/127.0.0.1#5335 -ipset=/x18r.com/gfwlist -server=/mini.com.uy/127.0.0.1#5335 -ipset=/mini.com.uy/gfwlist -server=/ingkacentres.com/127.0.0.1#5335 -ipset=/ingkacentres.com/gfwlist -server=/scp-wiki.net/127.0.0.1#5335 -ipset=/scp-wiki.net/gfwlist -server=/i-scmp.com/127.0.0.1#5335 -ipset=/i-scmp.com/gfwlist -server=/bmwi.ca/127.0.0.1#5335 -ipset=/bmwi.ca/gfwlist -server=/thisispolaris.com/127.0.0.1#5335 -ipset=/thisispolaris.com/gfwlist -server=/canon.ca/127.0.0.1#5335 -ipset=/canon.ca/gfwlist -server=/kyurem.com/127.0.0.1#5335 -ipset=/kyurem.com/gfwlist -server=/canon.bg/127.0.0.1#5335 -ipset=/canon.bg/gfwlist -server=/canon.com.hk/127.0.0.1#5335 -ipset=/canon.com.hk/gfwlist -server=/volvotrucks.gr/127.0.0.1#5335 -ipset=/volvotrucks.gr/gfwlist -server=/visadigitalconcierge.com/127.0.0.1#5335 -ipset=/visadigitalconcierge.com/gfwlist -server=/alphera.my/127.0.0.1#5335 -ipset=/alphera.my/gfwlist -server=/foxplus.com/127.0.0.1#5335 -ipset=/foxplus.com/gfwlist -server=/advancediddetection.com/127.0.0.1#5335 -ipset=/advancediddetection.com/gfwlist -server=/intel.co.ae/127.0.0.1#5335 -ipset=/intel.co.ae/gfwlist -server=/ntc.party/127.0.0.1#5335 -ipset=/ntc.party/gfwlist -server=/canon.am/127.0.0.1#5335 -ipset=/canon.am/gfwlist -server=/rbgrads.com/127.0.0.1#5335 -ipset=/rbgrads.com/gfwlist -server=/softbankventuresasia.com/127.0.0.1#5335 -ipset=/softbankventuresasia.com/gfwlist -server=/hkcsl.com/127.0.0.1#5335 -ipset=/hkcsl.com/gfwlist -server=/canon-me.com/127.0.0.1#5335 -ipset=/canon-me.com/gfwlist -server=/voashona.com/127.0.0.1#5335 -ipset=/voashona.com/gfwlist -server=/instagramn.com/127.0.0.1#5335 -ipset=/instagramn.com/gfwlist -server=/google.gy/127.0.0.1#5335 -ipset=/google.gy/gfwlist -server=/canon-europe.com/127.0.0.1#5335 -ipset=/canon-europe.com/gfwlist -server=/mastercardbiz.com/127.0.0.1#5335 -ipset=/mastercardbiz.com/gfwlist -server=/volvotrucks.ae/127.0.0.1#5335 -ipset=/volvotrucks.ae/gfwlist -server=/akamaihd.com/127.0.0.1#5335 -ipset=/akamaihd.com/gfwlist -server=/adobe-aemassets-value.com/127.0.0.1#5335 -ipset=/adobe-aemassets-value.com/gfwlist -server=/login-account.net/127.0.0.1#5335 -ipset=/login-account.net/gfwlist -server=/canon-ebm.com.hk/127.0.0.1#5335 -ipset=/canon-ebm.com.hk/gfwlist -server=/www-facebook.com/127.0.0.1#5335 -ipset=/www-facebook.com/gfwlist -server=/pearsonclinical.dk/127.0.0.1#5335 -ipset=/pearsonclinical.dk/gfwlist -server=/eanordic.com/127.0.0.1#5335 -ipset=/eanordic.com/gfwlist -server=/dynamics.com/127.0.0.1#5335 -ipset=/dynamics.com/gfwlist -server=/bmwshop.ca/127.0.0.1#5335 -ipset=/bmwshop.ca/gfwlist -server=/c-ij.com/127.0.0.1#5335 -ipset=/c-ij.com/gfwlist -server=/couriermail.com.au/127.0.0.1#5335 -ipset=/couriermail.com.au/gfwlist -server=/airmax360.com/127.0.0.1#5335 -ipset=/airmax360.com/gfwlist -server=/bwh8.net/127.0.0.1#5335 -ipset=/bwh8.net/gfwlist -server=/mastercard.ke/127.0.0.1#5335 -ipset=/mastercard.ke/gfwlist -server=/bwh1.net/127.0.0.1#5335 -ipset=/bwh1.net/gfwlist -server=/alibabacloud.com/127.0.0.1#5335 -ipset=/alibabacloud.com/gfwlist -server=/mydirectvchannels.com/127.0.0.1#5335 -ipset=/mydirectvchannels.com/gfwlist -server=/itunesradio.tv/127.0.0.1#5335 -ipset=/itunesradio.tv/gfwlist -server=/lordofultima.com/127.0.0.1#5335 -ipset=/lordofultima.com/gfwlist -server=/flow.dev/127.0.0.1#5335 -ipset=/flow.dev/gfwlist -server=/beats-deal.com/127.0.0.1#5335 -ipset=/beats-deal.com/gfwlist -server=/d29vzk4ow07wi7.cloudfront.net/127.0.0.1#5335 -ipset=/d29vzk4ow07wi7.cloudfront.net/gfwlist -server=/download.i91av.org/127.0.0.1#5335 -ipset=/download.i91av.org/gfwlist -server=/le-direct.tv/127.0.0.1#5335 -ipset=/le-direct.tv/gfwlist -server=/linefriends.com/127.0.0.1#5335 -ipset=/linefriends.com/gfwlist -server=/hddirectv.com/127.0.0.1#5335 -ipset=/hddirectv.com/gfwlist -server=/arewereadyyet.com/127.0.0.1#5335 -ipset=/arewereadyyet.com/gfwlist -server=/adidas.com/127.0.0.1#5335 -ipset=/adidas.com/gfwlist -server=/volvobuses.es/127.0.0.1#5335 -ipset=/volvobuses.es/gfwlist -server=/diretv.com/127.0.0.1#5335 -ipset=/diretv.com/gfwlist -server=/direectv.com/127.0.0.1#5335 -ipset=/direectv.com/gfwlist -server=/telekom.com/127.0.0.1#5335 -ipset=/telekom.com/gfwlist -server=/mini.com.mo/127.0.0.1#5335 -ipset=/mini.com.mo/gfwlist -server=/comodo.com/127.0.0.1#5335 -ipset=/comodo.com/gfwlist -server=/hpstore-china.com/127.0.0.1#5335 -ipset=/hpstore-china.com/gfwlist -server=/directvsports.com/127.0.0.1#5335 -ipset=/directvsports.com/gfwlist -server=/pearsonclinical.nl/127.0.0.1#5335 -ipset=/pearsonclinical.nl/gfwlist -server=/strepsils.com.br/127.0.0.1#5335 -ipset=/strepsils.com.br/gfwlist -server=/mini-bosnia.com/127.0.0.1#5335 -ipset=/mini-bosnia.com/gfwlist -server=/flatmates.com.au/127.0.0.1#5335 -ipset=/flatmates.com.au/gfwlist -server=/directvpromise.com/127.0.0.1#5335 -ipset=/directvpromise.com/gfwlist -server=/powerbook.eu/127.0.0.1#5335 -ipset=/powerbook.eu/gfwlist -server=/bamgrid.com/127.0.0.1#5335 -ipset=/bamgrid.com/gfwlist -server=/mycardbenefits.com/127.0.0.1#5335 -ipset=/mycardbenefits.com/gfwlist -server=/bmwoftulsa.com/127.0.0.1#5335 -ipset=/bmwoftulsa.com/gfwlist -server=/wkap.nl/127.0.0.1#5335 -ipset=/wkap.nl/gfwlist -server=/blogspot.cf/127.0.0.1#5335 -ipset=/blogspot.cf/gfwlist -server=/paypal.com.sg/127.0.0.1#5335 -ipset=/paypal.com.sg/gfwlist -server=/adobeaemcloud.net/127.0.0.1#5335 -ipset=/adobeaemcloud.net/gfwlist -server=/ebaymotorsblog.com/127.0.0.1#5335 -ipset=/ebaymotorsblog.com/gfwlist -server=/breitbart.com/127.0.0.1#5335 -ipset=/breitbart.com/gfwlist -server=/nextfilm.com.hk/127.0.0.1#5335 -ipset=/nextfilm.com.hk/gfwlist -server=/directvnewhampshire.com/127.0.0.1#5335 -ipset=/directvnewhampshire.com/gfwlist -server=/malayalamanorama.com/127.0.0.1#5335 -ipset=/malayalamanorama.com/gfwlist -server=/knoxemm.com/127.0.0.1#5335 -ipset=/knoxemm.com/gfwlist -server=/mastercard-email.com/127.0.0.1#5335 -ipset=/mastercard-email.com/gfwlist -server=/beats-seller.com/127.0.0.1#5335 -ipset=/beats-seller.com/gfwlist -server=/directvmonitoring.com/127.0.0.1#5335 -ipset=/directvmonitoring.com/gfwlist -server=/ebay.com.ph/127.0.0.1#5335 -ipset=/ebay.com.ph/gfwlist -server=/directvmetropolisil.com/127.0.0.1#5335 -ipset=/directvmetropolisil.com/gfwlist -server=/theclasshroom.com/127.0.0.1#5335 -ipset=/theclasshroom.com/gfwlist -server=/bmw.fi/127.0.0.1#5335 -ipset=/bmw.fi/gfwlist -server=/entermediadb.net/127.0.0.1#5335 -ipset=/entermediadb.net/gfwlist -server=/ficeboock.com/127.0.0.1#5335 -ipset=/ficeboock.com/gfwlist -server=/xdsummit.com/127.0.0.1#5335 -ipset=/xdsummit.com/gfwlist -server=/discord.gifts/127.0.0.1#5335 -ipset=/discord.gifts/gfwlist -server=/scholar.google.ch/127.0.0.1#5335 -ipset=/scholar.google.ch/gfwlist -server=/directvkentucky.com/127.0.0.1#5335 -ipset=/directvkentucky.com/gfwlist -server=/directvinternet.com/127.0.0.1#5335 -ipset=/directvinternet.com/gfwlist -server=/bmwmotorrad.com.ph/127.0.0.1#5335 -ipset=/bmwmotorrad.com.ph/gfwlist -server=/bestbuyethics.com/127.0.0.1#5335 -ipset=/bestbuyethics.com/gfwlist -server=/visceralgames.com/127.0.0.1#5335 -ipset=/visceralgames.com/gfwlist -server=/apnews.com/127.0.0.1#5335 -ipset=/apnews.com/gfwlist -server=/volvotrucks.com.tw/127.0.0.1#5335 -ipset=/volvotrucks.com.tw/gfwlist -server=/paypalnet.org/127.0.0.1#5335 -ipset=/paypalnet.org/gfwlist -server=/skyassets.com/127.0.0.1#5335 -ipset=/skyassets.com/gfwlist -server=/bmwmuseum.net/127.0.0.1#5335 -ipset=/bmwmuseum.net/gfwlist -server=/bmw-arts-design.com/127.0.0.1#5335 -ipset=/bmw-arts-design.com/gfwlist -server=/dettol.cz/127.0.0.1#5335 -ipset=/dettol.cz/gfwlist -server=/gettyimages.se/127.0.0.1#5335 -ipset=/gettyimages.se/gfwlist -server=/paypal-activate.info/127.0.0.1#5335 -ipset=/paypal-activate.info/gfwlist -server=/disney.co.th/127.0.0.1#5335 -ipset=/disney.co.th/gfwlist -server=/ebay.com.sg/127.0.0.1#5335 -ipset=/ebay.com.sg/gfwlist -server=/icloud.sk/127.0.0.1#5335 -ipset=/icloud.sk/gfwlist -server=/mini.rs/127.0.0.1#5335 -ipset=/mini.rs/gfwlist -server=/starbucks.es/127.0.0.1#5335 -ipset=/starbucks.es/gfwlist -server=/directvdealer.com/127.0.0.1#5335 -ipset=/directvdealer.com/gfwlist -server=/google.ae/127.0.0.1#5335 -ipset=/google.ae/gfwlist -server=/nike-us.com/127.0.0.1#5335 -ipset=/nike-us.com/gfwlist -server=/elite.com/127.0.0.1#5335 -ipset=/elite.com/gfwlist -server=/tesla.com/127.0.0.1#5335 -ipset=/tesla.com/gfwlist -server=/niken7.com/127.0.0.1#5335 -ipset=/niken7.com/gfwlist -server=/appstore.my/127.0.0.1#5335 -ipset=/appstore.my/gfwlist -server=/ipod.com/127.0.0.1#5335 -ipset=/ipod.com/gfwlist -server=/ebay.it/127.0.0.1#5335 -ipset=/ebay.it/gfwlist -server=/hpallinoneprinter.com/127.0.0.1#5335 -ipset=/hpallinoneprinter.com/gfwlist -server=/directvbusiness.com/127.0.0.1#5335 -ipset=/directvbusiness.com/gfwlist -server=/adguard-vpn.com/127.0.0.1#5335 -ipset=/adguard-vpn.com/gfwlist -server=/scmp.com/127.0.0.1#5335 -ipset=/scmp.com/gfwlist -server=/iphonexs.tv/127.0.0.1#5335 -ipset=/iphonexs.tv/gfwlist -server=/voanouvel.com/127.0.0.1#5335 -ipset=/voanouvel.com/gfwlist -server=/imgix.net/127.0.0.1#5335 -ipset=/imgix.net/gfwlist -server=/xbox360.com/127.0.0.1#5335 -ipset=/xbox360.com/gfwlist -server=/directvboston.com/127.0.0.1#5335 -ipset=/directvboston.com/gfwlist -server=/beatsbydretoutlet.com/127.0.0.1#5335 -ipset=/beatsbydretoutlet.com/gfwlist -server=/directvadsales.com/127.0.0.1#5335 -ipset=/directvadsales.com/gfwlist -server=/directv-newyork.com/127.0.0.1#5335 -ipset=/directv-newyork.com/gfwlist -server=/abc.com/127.0.0.1#5335 -ipset=/abc.com/gfwlist -server=/bbc.com/127.0.0.1#5335 -ipset=/bbc.com/gfwlist -server=/applestore.wang/127.0.0.1#5335 -ipset=/applestore.wang/gfwlist -server=/cashpassport.co.za/127.0.0.1#5335 -ipset=/cashpassport.co.za/gfwlist -server=/directtvdeals.tv/127.0.0.1#5335 -ipset=/directtvdeals.tv/gfwlist -server=/shopping-days.net/127.0.0.1#5335 -ipset=/shopping-days.net/gfwlist -server=/directtv.net/127.0.0.1#5335 -ipset=/directtv.net/gfwlist -server=/mypearsonshop.mx/127.0.0.1#5335 -ipset=/mypearsonshop.mx/gfwlist -server=/dkrecttv.com/127.0.0.1#5335 -ipset=/dkrecttv.com/gfwlist -server=/eu-consumer-empowerment.com/127.0.0.1#5335 -ipset=/eu-consumer-empowerment.com/gfwlist -server=/tailwindtraders.com/127.0.0.1#5335 -ipset=/tailwindtraders.com/gfwlist -server=/mastercard.kz/127.0.0.1#5335 -ipset=/mastercard.kz/gfwlist -server=/paypalcredit.com/127.0.0.1#5335 -ipset=/paypalcredit.com/gfwlist -server=/pinterest.co.in/127.0.0.1#5335 -ipset=/pinterest.co.in/gfwlist -server=/blogspot.com.es/127.0.0.1#5335 -ipset=/blogspot.com.es/gfwlist -server=/squarecloudservices.com/127.0.0.1#5335 -ipset=/squarecloudservices.com/gfwlist -server=/braveux.com/127.0.0.1#5335 -ipset=/braveux.com/gfwlist -server=/developer.microsoft.com/127.0.0.1#5335 -ipset=/developer.microsoft.com/gfwlist -server=/videolan.org/127.0.0.1#5335 -ipset=/videolan.org/gfwlist -server=/nginx.com/127.0.0.1#5335 -ipset=/nginx.com/gfwlist -server=/softether-download.com/127.0.0.1#5335 -ipset=/softether-download.com/gfwlist -server=/nbc.com/127.0.0.1#5335 -ipset=/nbc.com/gfwlist -server=/facebookgraphsearch.info/127.0.0.1#5335 -ipset=/facebookgraphsearch.info/gfwlist -server=/ebay.com.my/127.0.0.1#5335 -ipset=/ebay.com.my/gfwlist -server=/nurofengel.com/127.0.0.1#5335 -ipset=/nurofengel.com/gfwlist -server=/audiencenetwork.tv/127.0.0.1#5335 -ipset=/audiencenetwork.tv/gfwlist -server=/bmw-motorrad.hu/127.0.0.1#5335 -ipset=/bmw-motorrad.hu/gfwlist -server=/xboxone.co/127.0.0.1#5335 -ipset=/xboxone.co/gfwlist -server=/audiencenetwork.com/127.0.0.1#5335 -ipset=/audiencenetwork.com/gfwlist -server=/leaguoflegends.com/127.0.0.1#5335 -ipset=/leaguoflegends.com/gfwlist -server=/guardianapis.com/127.0.0.1#5335 -ipset=/guardianapis.com/gfwlist -server=/attdns.com/127.0.0.1#5335 -ipset=/attdns.com/gfwlist -server=/att-idns.net/127.0.0.1#5335 -ipset=/att-idns.net/gfwlist -server=/vfsco.us/127.0.0.1#5335 -ipset=/vfsco.us/gfwlist -server=/beats-dre-us.com/127.0.0.1#5335 -ipset=/beats-dre-us.com/gfwlist -server=/bmwworld.com/127.0.0.1#5335 -ipset=/bmwworld.com/gfwlist -server=/darwinsource.com/127.0.0.1#5335 -ipset=/darwinsource.com/gfwlist -server=/tvpromise.com/127.0.0.1#5335 -ipset=/tvpromise.com/gfwlist -server=/newsnowfox.com/127.0.0.1#5335 -ipset=/newsnowfox.com/gfwlist -server=/synaptic.net/127.0.0.1#5335 -ipset=/synaptic.net/gfwlist -server=/travelex.com.my/127.0.0.1#5335 -ipset=/travelex.com.my/gfwlist -server=/instagrm.com/127.0.0.1#5335 -ipset=/instagrm.com/gfwlist -server=/mini-connected.pl/127.0.0.1#5335 -ipset=/mini-connected.pl/gfwlist -server=/newsconcierge.com.au/127.0.0.1#5335 -ipset=/newsconcierge.com.au/gfwlist -server=/airwick.hu/127.0.0.1#5335 -ipset=/airwick.hu/gfwlist -server=/bmw-motorrad.com/127.0.0.1#5335 -ipset=/bmw-motorrad.com/gfwlist -server=/beatsbydreforsalesonline.com/127.0.0.1#5335 -ipset=/beatsbydreforsalesonline.com/gfwlist -server=/vmwarecertificationvideos.com/127.0.0.1#5335 -ipset=/vmwarecertificationvideos.com/gfwlist -server=/itcanwait.com/127.0.0.1#5335 -ipset=/itcanwait.com/gfwlist -server=/chinapower.csis.org/127.0.0.1#5335 -ipset=/chinapower.csis.org/gfwlist -server=/enterprisepaging.com/127.0.0.1#5335 -ipset=/enterprisepaging.com/gfwlist -server=/bmw-motorrad.si/127.0.0.1#5335 -ipset=/bmw-motorrad.si/gfwlist -server=/vmwservices.com/127.0.0.1#5335 -ipset=/vmwservices.com/gfwlist -server=/currently.net/127.0.0.1#5335 -ipset=/currently.net/gfwlist -server=/miniusatires.com/127.0.0.1#5335 -ipset=/miniusatires.com/gfwlist -server=/canon.net/127.0.0.1#5335 -ipset=/canon.net/gfwlist -server=/geforce.com.tw/127.0.0.1#5335 -ipset=/geforce.com.tw/gfwlist -server=/paypalshopping.com/127.0.0.1#5335 -ipset=/paypalshopping.com/gfwlist -server=/omghk.com/127.0.0.1#5335 -ipset=/omghk.com/gfwlist -server=/vod-abematv.akamaized.net/127.0.0.1#5335 -ipset=/vod-abematv.akamaized.net/gfwlist -server=/costco-static.com/127.0.0.1#5335 -ipset=/costco-static.com/gfwlist -server=/budatt.com/127.0.0.1#5335 -ipset=/budatt.com/gfwlist -server=/csis.org/127.0.0.1#5335 -ipset=/csis.org/gfwlist -server=/librarylovefest.com/127.0.0.1#5335 -ipset=/librarylovefest.com/gfwlist -server=/scnshop.cc/127.0.0.1#5335 -ipset=/scnshop.cc/gfwlist -server=/baicaonetwork.com/127.0.0.1#5335 -ipset=/baicaonetwork.com/gfwlist -server=/attwirelessonline.com/127.0.0.1#5335 -ipset=/attwirelessonline.com/gfwlist -server=/intel.mx/127.0.0.1#5335 -ipset=/intel.mx/gfwlist -server=/lexuemei.com/127.0.0.1#5335 -ipset=/lexuemei.com/gfwlist -server=/appbridge.ca/127.0.0.1#5335 -ipset=/appbridge.ca/gfwlist -server=/yahoo.com.bo/127.0.0.1#5335 -ipset=/yahoo.com.bo/gfwlist -server=/ebaylocal.net/127.0.0.1#5335 -ipset=/ebaylocal.net/gfwlist -server=/ogp.me/127.0.0.1#5335 -ipset=/ogp.me/gfwlist -server=/disneystreaming.com/127.0.0.1#5335 -ipset=/disneystreaming.com/gfwlist -server=/intelplay.com/127.0.0.1#5335 -ipset=/intelplay.com/gfwlist -server=/attwifi.com/127.0.0.1#5335 -ipset=/attwifi.com/gfwlist -server=/bestrecipes.com.au/127.0.0.1#5335 -ipset=/bestrecipes.com.au/gfwlist -server=/visa.com.my/127.0.0.1#5335 -ipset=/visa.com.my/gfwlist -server=/travelex.co.uk/127.0.0.1#5335 -ipset=/travelex.co.uk/gfwlist -server=/mega.nz/127.0.0.1#5335 -ipset=/mega.nz/gfwlist -server=/sysinternals.com/127.0.0.1#5335 -ipset=/sysinternals.com/gfwlist -server=/foxsoccerplus.net/127.0.0.1#5335 -ipset=/foxsoccerplus.net/gfwlist -server=/attuverseoffers.com/127.0.0.1#5335 -ipset=/attuverseoffers.com/gfwlist -server=/goduckgo.com/127.0.0.1#5335 -ipset=/goduckgo.com/gfwlist -server=/scholar.google.lv/127.0.0.1#5335 -ipset=/scholar.google.lv/gfwlist -server=/bmw.kz/127.0.0.1#5335 -ipset=/bmw.kz/gfwlist -server=/scholar.google.com.bo/127.0.0.1#5335 -ipset=/scholar.google.com.bo/gfwlist -server=/yahoo.com.af/127.0.0.1#5335 -ipset=/yahoo.com.af/gfwlist -server=/attpublicpolicy.com/127.0.0.1#5335 -ipset=/attpublicpolicy.com/gfwlist -server=/youtube.co.ma/127.0.0.1#5335 -ipset=/youtube.co.ma/gfwlist -server=/firestone.cl/127.0.0.1#5335 -ipset=/firestone.cl/gfwlist -server=/usatoday.com/127.0.0.1#5335 -ipset=/usatoday.com/gfwlist -server=/tver.jp/127.0.0.1#5335 -ipset=/tver.jp/gfwlist -server=/attjoy.com/127.0.0.1#5335 -ipset=/attjoy.com/gfwlist -server=/nicovideo.jp/127.0.0.1#5335 -ipset=/nicovideo.jp/gfwlist -server=/pise.pw/127.0.0.1#5335 -ipset=/pise.pw/gfwlist -server=/attglobal.net/127.0.0.1#5335 -ipset=/attglobal.net/gfwlist -server=/pearson.pl/127.0.0.1#5335 -ipset=/pearson.pl/gfwlist -server=/zeplin.dev/127.0.0.1#5335 -ipset=/zeplin.dev/gfwlist -server=/attcollaborate.com/127.0.0.1#5335 -ipset=/attcollaborate.com/gfwlist -server=/akamii.com/127.0.0.1#5335 -ipset=/akamii.com/gfwlist -server=/tearapeak.com/127.0.0.1#5335 -ipset=/tearapeak.com/gfwlist -server=/fox26.com/127.0.0.1#5335 -ipset=/fox26.com/gfwlist -server=/foxsports.com.ar/127.0.0.1#5335 -ipset=/foxsports.com.ar/gfwlist -server=/mylcloud.net/127.0.0.1#5335 -ipset=/mylcloud.net/gfwlist -server=/foxfaq.com/127.0.0.1#5335 -ipset=/foxfaq.com/gfwlist -server=/naver.net/127.0.0.1#5335 -ipset=/naver.net/gfwlist -server=/onejav.com/127.0.0.1#5335 -ipset=/onejav.com/gfwlist -server=/beats-bydreoutletsale.net/127.0.0.1#5335 -ipset=/beats-bydreoutletsale.net/gfwlist -server=/attinnovationspace.com/127.0.0.1#5335 -ipset=/attinnovationspace.com/gfwlist -server=/ebayinc.net/127.0.0.1#5335 -ipset=/ebayinc.net/gfwlist -server=/disneymagicmoments.co.uk/127.0.0.1#5335 -ipset=/disneymagicmoments.co.uk/gfwlist -server=/att.jobs/127.0.0.1#5335 -ipset=/att.jobs/gfwlist -server=/launchpadlibrarian.org/127.0.0.1#5335 -ipset=/launchpadlibrarian.org/gfwlist -server=/pogo.com/127.0.0.1#5335 -ipset=/pogo.com/gfwlist -server=/att-promotions.com/127.0.0.1#5335 -ipset=/att-promotions.com/gfwlist -server=/oreilly.com/127.0.0.1#5335 -ipset=/oreilly.com/gfwlist -server=/arxiv.org/127.0.0.1#5335 -ipset=/arxiv.org/gfwlist -server=/ak1.net/127.0.0.1#5335 -ipset=/ak1.net/gfwlist -server=/google.com.my/127.0.0.1#5335 -ipset=/google.com.my/gfwlist -server=/att-mail.com/127.0.0.1#5335 -ipset=/att-mail.com/gfwlist -server=/directvcookevilletn.com/127.0.0.1#5335 -ipset=/directvcookevilletn.com/gfwlist -server=/microsoftaffiliates.com/127.0.0.1#5335 -ipset=/microsoftaffiliates.com/gfwlist -server=/accbusiness.com/127.0.0.1#5335 -ipset=/accbusiness.com/gfwlist -server=/cyber-bay.info/127.0.0.1#5335 -ipset=/cyber-bay.info/gfwlist -server=/e-bay.net/127.0.0.1#5335 -ipset=/e-bay.net/gfwlist -server=/bitbucket.org/127.0.0.1#5335 -ipset=/bitbucket.org/gfwlist -server=/miniso.pk/127.0.0.1#5335 -ipset=/miniso.pk/gfwlist -server=/mini.com.gt/127.0.0.1#5335 -ipset=/mini.com.gt/gfwlist -server=/pinterest.id/127.0.0.1#5335 -ipset=/pinterest.id/gfwlist -server=/foxnewsgo.net/127.0.0.1#5335 -ipset=/foxnewsgo.net/gfwlist -server=/amazon.jp/127.0.0.1#5335 -ipset=/amazon.jp/gfwlist -server=/womenwill.in/127.0.0.1#5335 -ipset=/womenwill.in/gfwlist -server=/mastercard.co.th/127.0.0.1#5335 -ipset=/mastercard.co.th/gfwlist -server=/pchome.com.tw/127.0.0.1#5335 -ipset=/pchome.com.tw/gfwlist -server=/xbox.com/127.0.0.1#5335 -ipset=/xbox.com/gfwlist -server=/nintendodsi.com/127.0.0.1#5335 -ipset=/nintendodsi.com/gfwlist -server=/cfna.com/127.0.0.1#5335 -ipset=/cfna.com/gfwlist -server=/ntdtv.co.kr/127.0.0.1#5335 -ipset=/ntdtv.co.kr/gfwlist -server=/mortein.co.za/127.0.0.1#5335 -ipset=/mortein.co.za/gfwlist -server=/xn--hxtr4rozx.xn--czr694b/127.0.0.1#5335 -ipset=/xn--hxtr4rozx.xn--czr694b/gfwlist -server=/bmw-yemen.com/127.0.0.1#5335 -ipset=/bmw-yemen.com/gfwlist -server=/thawte.com/127.0.0.1#5335 -ipset=/thawte.com/gfwlist -server=/xn--gtvz22d.xn--hxt814e/127.0.0.1#5335 -ipset=/xn--gtvz22d.xn--hxt814e/gfwlist -server=/attdns.net/127.0.0.1#5335 -ipset=/attdns.net/gfwlist -server=/apple.lv/127.0.0.1#5335 -ipset=/apple.lv/gfwlist -server=/dealsbeatsblackfriday.com/127.0.0.1#5335 -ipset=/dealsbeatsblackfriday.com/gfwlist -server=/fbredex.com/127.0.0.1#5335 -ipset=/fbredex.com/gfwlist -server=/xindelu.com/127.0.0.1#5335 -ipset=/xindelu.com/gfwlist -server=/epochmediagroup.com/127.0.0.1#5335 -ipset=/epochmediagroup.com/gfwlist -server=/bmw.mu/127.0.0.1#5335 -ipset=/bmw.mu/gfwlist -server=/bmw.is/127.0.0.1#5335 -ipset=/bmw.is/gfwlist -server=/scholar.google.com.tr/127.0.0.1#5335 -ipset=/scholar.google.com.tr/gfwlist -server=/radian6.com/127.0.0.1#5335 -ipset=/radian6.com/gfwlist -server=/audible.com/127.0.0.1#5335 -ipset=/audible.com/gfwlist -server=/volvogroup.nl/127.0.0.1#5335 -ipset=/volvogroup.nl/gfwlist -server=/account-paypal.net/127.0.0.1#5335 -ipset=/account-paypal.net/gfwlist -server=/mini-connected.es/127.0.0.1#5335 -ipset=/mini-connected.es/gfwlist -server=/amazonimages.com/127.0.0.1#5335 -ipset=/amazonimages.com/gfwlist -server=/wwapple.net/127.0.0.1#5335 -ipset=/wwapple.net/gfwlist -server=/1010.com.hk/127.0.0.1#5335 -ipset=/1010.com.hk/gfwlist -server=/localizestatus.com/127.0.0.1#5335 -ipset=/localizestatus.com/gfwlist -server=/bidbay.com/127.0.0.1#5335 -ipset=/bidbay.com/gfwlist -server=/codei.sh/127.0.0.1#5335 -ipset=/codei.sh/gfwlist -server=/webobjects.eu/127.0.0.1#5335 -ipset=/webobjects.eu/gfwlist -server=/voaafaanoromoo.com/127.0.0.1#5335 -ipset=/voaafaanoromoo.com/gfwlist -server=/softbankbb.net/127.0.0.1#5335 -ipset=/softbankbb.net/gfwlist -server=/mings-fashion.com/127.0.0.1#5335 -ipset=/mings-fashion.com/gfwlist -server=/webobjects.de/127.0.0.1#5335 -ipset=/webobjects.de/gfwlist -server=/nikelives.com/127.0.0.1#5335 -ipset=/nikelives.com/gfwlist -server=/touchid.tv/127.0.0.1#5335 -ipset=/touchid.tv/gfwlist -server=/latamvmwareforum.com/127.0.0.1#5335 -ipset=/latamvmwareforum.com/gfwlist -server=/spektral.cc/127.0.0.1#5335 -ipset=/spektral.cc/gfwlist -server=/nintendo.fi/127.0.0.1#5335 -ipset=/nintendo.fi/gfwlist -server=/siri.com/127.0.0.1#5335 -ipset=/siri.com/gfwlist -server=/eamobile.com/127.0.0.1#5335 -ipset=/eamobile.com/gfwlist -server=/steamstatic.com/127.0.0.1#5335 -ipset=/steamstatic.com/gfwlist -server=/nintendonetwork.net/127.0.0.1#5335 -ipset=/nintendonetwork.net/gfwlist -server=/vfsco.pe/127.0.0.1#5335 -ipset=/vfsco.pe/gfwlist -server=/bmwmotorrad.com.au/127.0.0.1#5335 -ipset=/bmwmotorrad.com.au/gfwlist -server=/macbooksale.com/127.0.0.1#5335 -ipset=/macbooksale.com/gfwlist -server=/quicktime.com.au/127.0.0.1#5335 -ipset=/quicktime.com.au/gfwlist -server=/fox32chicago.com/127.0.0.1#5335 -ipset=/fox32chicago.com/gfwlist -server=/xn--4vq475g.com/127.0.0.1#5335 -ipset=/xn--4vq475g.com/gfwlist -server=/pullstring.net/127.0.0.1#5335 -ipset=/pullstring.net/gfwlist -server=/macrumors.com/127.0.0.1#5335 -ipset=/macrumors.com/gfwlist -server=/googlesyndication.com/127.0.0.1#5335 -ipset=/googlesyndication.com/gfwlist -server=/facdbook.com/127.0.0.1#5335 -ipset=/facdbook.com/gfwlist -server=/api.news/127.0.0.1#5335 -ipset=/api.news/gfwlist -server=/youtube.ua/127.0.0.1#5335 -ipset=/youtube.ua/gfwlist -server=/foxbusiness.com/127.0.0.1#5335 -ipset=/foxbusiness.com/gfwlist -server=/wixmp.com/127.0.0.1#5335 -ipset=/wixmp.com/gfwlist -server=/paxful.com/127.0.0.1#5335 -ipset=/paxful.com/gfwlist -server=/macreach.net/127.0.0.1#5335 -ipset=/macreach.net/gfwlist -server=/mini-vietnam.com/127.0.0.1#5335 -ipset=/mini-vietnam.com/gfwlist -server=/macpazar.com/127.0.0.1#5335 -ipset=/macpazar.com/gfwlist -server=/bridgestoneperformance.com/127.0.0.1#5335 -ipset=/bridgestoneperformance.com/gfwlist -server=/myfoxaustin.com/127.0.0.1#5335 -ipset=/myfoxaustin.com/gfwlist -server=/aka-ai.com/127.0.0.1#5335 -ipset=/aka-ai.com/gfwlist -server=/macossierra.com/127.0.0.1#5335 -ipset=/macossierra.com/gfwlist -server=/bmwlifestyle.ca/127.0.0.1#5335 -ipset=/bmwlifestyle.ca/gfwlist -server=/macos.com.au/127.0.0.1#5335 -ipset=/macos.com.au/gfwlist -server=/scholar.google.pt/127.0.0.1#5335 -ipset=/scholar.google.pt/gfwlist -server=/discord.co/127.0.0.1#5335 -ipset=/discord.co/gfwlist -server=/macmini.com/127.0.0.1#5335 -ipset=/macmini.com/gfwlist -server=/khanacademy.org/127.0.0.1#5335 -ipset=/khanacademy.org/gfwlist -server=/beatsheadphonesdealer.com/127.0.0.1#5335 -ipset=/beatsheadphonesdealer.com/gfwlist -server=/scholar.google.com.au/127.0.0.1#5335 -ipset=/scholar.google.com.au/gfwlist -server=/beatsheadphones2u.com/127.0.0.1#5335 -ipset=/beatsheadphones2u.com/gfwlist -server=/cloudflarestream.com/127.0.0.1#5335 -ipset=/cloudflarestream.com/gfwlist -server=/macintoshsoftware.com/127.0.0.1#5335 -ipset=/macintoshsoftware.com/gfwlist -server=/ethereum.foundation/127.0.0.1#5335 -ipset=/ethereum.foundation/gfwlist -server=/verizonmedia.com/127.0.0.1#5335 -ipset=/verizonmedia.com/gfwlist -server=/apple.jo/127.0.0.1#5335 -ipset=/apple.jo/gfwlist -server=/machos.net/127.0.0.1#5335 -ipset=/machos.net/gfwlist -server=/ulol.com/127.0.0.1#5335 -ipset=/ulol.com/gfwlist -server=/ebay-inc.org/127.0.0.1#5335 -ipset=/ebay-inc.org/gfwlist -server=/blpevents.com/127.0.0.1#5335 -ipset=/blpevents.com/gfwlist -server=/swisssign.org/127.0.0.1#5335 -ipset=/swisssign.org/gfwlist -server=/slashdot.org/127.0.0.1#5335 -ipset=/slashdot.org/gfwlist -server=/mktroute.com/127.0.0.1#5335 -ipset=/mktroute.com/gfwlist -server=/macboxset.com/127.0.0.1#5335 -ipset=/macboxset.com/gfwlist -server=/stxmosquitoproject.net/127.0.0.1#5335 -ipset=/stxmosquitoproject.net/gfwlist -server=/easylist.to/127.0.0.1#5335 -ipset=/easylist.to/gfwlist -server=/battlefieldheroes.com/127.0.0.1#5335 -ipset=/battlefieldheroes.com/gfwlist -server=/ebaymainstreet.com/127.0.0.1#5335 -ipset=/ebaymainstreet.com/gfwlist -server=/mac.com/127.0.0.1#5335 -ipset=/mac.com/gfwlist -server=/cqcorea.com/127.0.0.1#5335 -ipset=/cqcorea.com/gfwlist -server=/ssx3.com/127.0.0.1#5335 -ipset=/ssx3.com/gfwlist -server=/chinapress.com.my/127.0.0.1#5335 -ipset=/chinapress.com.my/gfwlist -server=/bmwusa.com/127.0.0.1#5335 -ipset=/bmwusa.com/gfwlist -server=/pivotalinitiative.com/127.0.0.1#5335 -ipset=/pivotalinitiative.com/gfwlist -server=/iwork.wang/127.0.0.1#5335 -ipset=/iwork.wang/gfwlist -server=/firestone.com.ar/127.0.0.1#5335 -ipset=/firestone.com.ar/gfwlist -server=/minicaribbean.com/127.0.0.1#5335 -ipset=/minicaribbean.com/gfwlist -server=/cheapbeats.us/127.0.0.1#5335 -ipset=/cheapbeats.us/gfwlist -server=/cisconetspace.com/127.0.0.1#5335 -ipset=/cisconetspace.com/gfwlist -server=/thegooglestore.com/127.0.0.1#5335 -ipset=/thegooglestore.com/gfwlist -server=/adidas.ru/127.0.0.1#5335 -ipset=/adidas.ru/gfwlist -server=/yahoo.at/127.0.0.1#5335 -ipset=/yahoo.at/gfwlist -server=/badgen.net/127.0.0.1#5335 -ipset=/badgen.net/gfwlist -server=/archlinuxarm.org/127.0.0.1#5335 -ipset=/archlinuxarm.org/gfwlist -server=/bluemix.com/127.0.0.1#5335 -ipset=/bluemix.com/gfwlist -server=/ilife.gr/127.0.0.1#5335 -ipset=/ilife.gr/gfwlist -server=/huffingtonpost.fr/127.0.0.1#5335 -ipset=/huffingtonpost.fr/gfwlist -server=/superuser.com/127.0.0.1#5335 -ipset=/superuser.com/gfwlist -server=/bmw.co.th/127.0.0.1#5335 -ipset=/bmw.co.th/gfwlist -server=/vfsco.sk/127.0.0.1#5335 -ipset=/vfsco.sk/gfwlist -server=/bmw-diplomatic-sales.com/127.0.0.1#5335 -ipset=/bmw-diplomatic-sales.com/gfwlist -server=/kindleoasis.com/127.0.0.1#5335 -ipset=/kindleoasis.com/gfwlist -server=/mini.com.mk/127.0.0.1#5335 -ipset=/mini.com.mk/gfwlist -server=/playparagon.com/127.0.0.1#5335 -ipset=/playparagon.com/gfwlist -server=/cheapbeatsbydre-au.com/127.0.0.1#5335 -ipset=/cheapbeatsbydre-au.com/gfwlist -server=/paypal-photocard.com/127.0.0.1#5335 -ipset=/paypal-photocard.com/gfwlist -server=/apple.co.cr/127.0.0.1#5335 -ipset=/apple.co.cr/gfwlist -server=/micstl.com/127.0.0.1#5335 -ipset=/micstl.com/gfwlist -server=/vaultify.net/127.0.0.1#5335 -ipset=/vaultify.net/gfwlist -server=/finalcutpro.com/127.0.0.1#5335 -ipset=/finalcutpro.com/gfwlist -server=/pearson-studium.ch/127.0.0.1#5335 -ipset=/pearson-studium.ch/gfwlist -server=/facetime.net/127.0.0.1#5335 -ipset=/facetime.net/gfwlist -server=/bmw-abudhabi.com/127.0.0.1#5335 -ipset=/bmw-abudhabi.com/gfwlist -server=/advertiserscommunity.com/127.0.0.1#5335 -ipset=/advertiserscommunity.com/gfwlist -server=/aple.com/127.0.0.1#5335 -ipset=/aple.com/gfwlist -server=/bmwfilms.com/127.0.0.1#5335 -ipset=/bmwfilms.com/gfwlist -server=/eworld.com/127.0.0.1#5335 -ipset=/eworld.com/gfwlist -server=/momoshop.com.tw/127.0.0.1#5335 -ipset=/momoshop.com.tw/gfwlist -server=/zencdn.net/127.0.0.1#5335 -ipset=/zencdn.net/gfwlist -server=/bcsecure01-a.akamaihd.net/127.0.0.1#5335 -ipset=/bcsecure01-a.akamaihd.net/gfwlist -server=/soasta-dswb.com/127.0.0.1#5335 -ipset=/soasta-dswb.com/gfwlist -server=/directvconnect.com/127.0.0.1#5335 -ipset=/directvconnect.com/gfwlist -server=/githubapp.com/127.0.0.1#5335 -ipset=/githubapp.com/gfwlist -server=/serverlesslibrary.net/127.0.0.1#5335 -ipset=/serverlesslibrary.net/gfwlist -server=/volvobuses.ca/127.0.0.1#5335 -ipset=/volvobuses.ca/gfwlist -server=/ecgapp.net/127.0.0.1#5335 -ipset=/ecgapp.net/gfwlist -server=/volvotrucks.ps/127.0.0.1#5335 -ipset=/volvotrucks.ps/gfwlist -server=/earpod.net/127.0.0.1#5335 -ipset=/earpod.net/gfwlist -server=/huobi.sc/127.0.0.1#5335 -ipset=/huobi.sc/gfwlist -server=/dokusho-ojikan.jp/127.0.0.1#5335 -ipset=/dokusho-ojikan.jp/gfwlist -server=/tubetubetube.com/127.0.0.1#5335 -ipset=/tubetubetube.com/gfwlist -server=/airgonetworks.com/127.0.0.1#5335 -ipset=/airgonetworks.com/gfwlist -server=/sony.lv/127.0.0.1#5335 -ipset=/sony.lv/gfwlist -server=/dvdstudiopro.biz/127.0.0.1#5335 -ipset=/dvdstudiopro.biz/gfwlist -server=/iphonecases5.com/127.0.0.1#5335 -ipset=/iphonecases5.com/gfwlist -server=/digitalhub.com/127.0.0.1#5335 -ipset=/digitalhub.com/gfwlist -server=/bridgestone.com.sg/127.0.0.1#5335 -ipset=/bridgestone.com.sg/gfwlist -server=/yahoo.so/127.0.0.1#5335 -ipset=/yahoo.so/gfwlist -server=/oninstagram.com/127.0.0.1#5335 -ipset=/oninstagram.com/gfwlist -server=/buymeacoff.ee/127.0.0.1#5335 -ipset=/buymeacoff.ee/gfwlist -server=/ebaycareers.com/127.0.0.1#5335 -ipset=/ebaycareers.com/gfwlist -server=/sulwerphoto.com/127.0.0.1#5335 -ipset=/sulwerphoto.com/gfwlist -server=/intel.mt/127.0.0.1#5335 -ipset=/intel.mt/gfwlist -server=/sm.ms/127.0.0.1#5335 -ipset=/sm.ms/gfwlist -server=/yahoo.fi/127.0.0.1#5335 -ipset=/yahoo.fi/gfwlist -server=/joox.com/127.0.0.1#5335 -ipset=/joox.com/gfwlist -server=/test-ipv6.com/127.0.0.1#5335 -ipset=/test-ipv6.com/gfwlist -server=/dajiyuan.com/127.0.0.1#5335 -ipset=/dajiyuan.com/gfwlist -server=/coreml.net/127.0.0.1#5335 -ipset=/coreml.net/gfwlist -server=/chomp.com/127.0.0.1#5335 -ipset=/chomp.com/gfwlist -server=/volvobrandshop.com/127.0.0.1#5335 -ipset=/volvobrandshop.com/gfwlist -server=/volvo-truck.nl/127.0.0.1#5335 -ipset=/volvo-truck.nl/gfwlist -server=/camelspaceeffect.com/127.0.0.1#5335 -ipset=/camelspaceeffect.com/gfwlist -server=/mushymush.tv/127.0.0.1#5335 -ipset=/mushymush.tv/gfwlist -server=/termius.com/127.0.0.1#5335 -ipset=/termius.com/gfwlist -server=/buyaapl.com/127.0.0.1#5335 -ipset=/buyaapl.com/gfwlist -server=/degruyter.com/127.0.0.1#5335 -ipset=/degruyter.com/gfwlist -server=/fontsinuse.com/127.0.0.1#5335 -ipset=/fontsinuse.com/gfwlist -server=/alphabet.biz/127.0.0.1#5335 -ipset=/alphabet.biz/gfwlist -server=/googleusercontent.com/127.0.0.1#5335 -ipset=/googleusercontent.com/gfwlist -server=/cepacol.ca/127.0.0.1#5335 -ipset=/cepacol.ca/gfwlist -server=/ebay-fashion.com/127.0.0.1#5335 -ipset=/ebay-fashion.com/gfwlist -server=/swiftbank.us/127.0.0.1#5335 -ipset=/swiftbank.us/gfwlist -server=/isiknowledge.com/127.0.0.1#5335 -ipset=/isiknowledge.com/gfwlist -server=/cnpmjs.org/127.0.0.1#5335 -ipset=/cnpmjs.org/gfwlist -server=/cheapheadphonessale.com/127.0.0.1#5335 -ipset=/cheapheadphonessale.com/gfwlist -server=/visa.co.th/127.0.0.1#5335 -ipset=/visa.co.th/gfwlist -server=/buckbuild.com/127.0.0.1#5335 -ipset=/buckbuild.com/gfwlist -server=/applle.com/127.0.0.1#5335 -ipset=/applle.com/gfwlist -server=/wwwhuluplus.com/127.0.0.1#5335 -ipset=/wwwhuluplus.com/gfwlist -server=/applezh.com/127.0.0.1#5335 -ipset=/applezh.com/gfwlist -server=/paypal-knowledge.com/127.0.0.1#5335 -ipset=/paypal-knowledge.com/gfwlist -server=/amazonfctours.com/127.0.0.1#5335 -ipset=/amazonfctours.com/gfwlist -server=/appleweb.net/127.0.0.1#5335 -ipset=/appleweb.net/gfwlist -server=/cheapbeatsbydre99.com/127.0.0.1#5335 -ipset=/cheapbeatsbydre99.com/gfwlist -server=/eater.com/127.0.0.1#5335 -ipset=/eater.com/gfwlist -server=/bmw.com.bo/127.0.0.1#5335 -ipset=/bmw.com.bo/gfwlist -server=/appletaiwan.com/127.0.0.1#5335 -ipset=/appletaiwan.com/gfwlist -server=/mastercard.at/127.0.0.1#5335 -ipset=/mastercard.at/gfwlist -server=/appleshop.co.uk/127.0.0.1#5335 -ipset=/appleshop.co.uk/gfwlist -server=/microsoftedge.com/127.0.0.1#5335 -ipset=/microsoftedge.com/gfwlist -server=/mini-kuwait.com/127.0.0.1#5335 -ipset=/mini-kuwait.com/gfwlist -server=/awseducate.org/127.0.0.1#5335 -ipset=/awseducate.org/gfwlist -server=/calvappd.me/127.0.0.1#5335 -ipset=/calvappd.me/gfwlist -server=/fundpaypal.com/127.0.0.1#5335 -ipset=/fundpaypal.com/gfwlist -server=/nikeinstock.com/127.0.0.1#5335 -ipset=/nikeinstock.com/gfwlist -server=/apples-msk.ru/127.0.0.1#5335 -ipset=/apples-msk.ru/gfwlist -server=/feceboock.com/127.0.0.1#5335 -ipset=/feceboock.com/gfwlist -server=/futhead.com/127.0.0.1#5335 -ipset=/futhead.com/gfwlist -server=/realcleareducation.com/127.0.0.1#5335 -ipset=/realcleareducation.com/gfwlist -server=/carstagram.com/127.0.0.1#5335 -ipset=/carstagram.com/gfwlist -server=/mastercardezsavings.com/127.0.0.1#5335 -ipset=/mastercardezsavings.com/gfwlist -server=/directvlebanontn.com/127.0.0.1#5335 -ipset=/directvlebanontn.com/gfwlist -server=/bangbros.com/127.0.0.1#5335 -ipset=/bangbros.com/gfwlist -server=/ieee-edusociety.org/127.0.0.1#5335 -ipset=/ieee-edusociety.org/gfwlist -server=/uwpcommunitytoolkit.com/127.0.0.1#5335 -ipset=/uwpcommunitytoolkit.com/gfwlist -server=/clearlinux.org/127.0.0.1#5335 -ipset=/clearlinux.org/gfwlist -server=/jamanetwork.com/127.0.0.1#5335 -ipset=/jamanetwork.com/gfwlist -server=/chinadigitaltimes.net/127.0.0.1#5335 -ipset=/chinadigitaltimes.net/gfwlist -server=/taboola.com/127.0.0.1#5335 -ipset=/taboola.com/gfwlist -server=/google.lk/127.0.0.1#5335 -ipset=/google.lk/gfwlist -server=/mirrorsedge2d.com/127.0.0.1#5335 -ipset=/mirrorsedge2d.com/gfwlist -server=/appleonline.net/127.0.0.1#5335 -ipset=/appleonline.net/gfwlist -server=/hponlineprinting.com/127.0.0.1#5335 -ipset=/hponlineprinting.com/gfwlist -server=/media-amazon.com/127.0.0.1#5335 -ipset=/media-amazon.com/gfwlist -server=/steamuserimages-a.akamaihd.net/127.0.0.1#5335 -ipset=/steamuserimages-a.akamaihd.net/gfwlist -server=/bmw-bahrain.com/127.0.0.1#5335 -ipset=/bmw-bahrain.com/gfwlist -server=/u.nu/127.0.0.1#5335 -ipset=/u.nu/gfwlist -server=/wariowarediy.com/127.0.0.1#5335 -ipset=/wariowarediy.com/gfwlist -server=/pximg.net/127.0.0.1#5335 -ipset=/pximg.net/gfwlist -server=/kobbeatssbydredk.com/127.0.0.1#5335 -ipset=/kobbeatssbydredk.com/gfwlist -server=/facebooklivestaging.net/127.0.0.1#5335 -ipset=/facebooklivestaging.net/gfwlist -server=/sony.pt/127.0.0.1#5335 -ipset=/sony.pt/gfwlist -server=/ebay.co.nz/127.0.0.1#5335 -ipset=/ebay.co.nz/gfwlist -server=/visa.gp/127.0.0.1#5335 -ipset=/visa.gp/gfwlist -server=/crates.io/127.0.0.1#5335 -ipset=/crates.io/gfwlist -server=/paypal-sptam.com/127.0.0.1#5335 -ipset=/paypal-sptam.com/gfwlist -server=/mozilla.community/127.0.0.1#5335 -ipset=/mozilla.community/gfwlist -server=/applecomputers.co.nz/127.0.0.1#5335 -ipset=/applecomputers.co.nz/gfwlist -server=/pxt.io/127.0.0.1#5335 -ipset=/pxt.io/gfwlist -server=/testonfox.com/127.0.0.1#5335 -ipset=/testonfox.com/gfwlist -server=/applecomputerimac.com/127.0.0.1#5335 -ipset=/applecomputerimac.com/gfwlist -server=/homephoneplus.com/127.0.0.1#5335 -ipset=/homephoneplus.com/gfwlist -server=/applecomputer.hu/127.0.0.1#5335 -ipset=/applecomputer.hu/gfwlist -server=/nike-dunksb.com/127.0.0.1#5335 -ipset=/nike-dunksb.com/gfwlist -server=/applecomputer.com.tw/127.0.0.1#5335 -ipset=/applecomputer.com.tw/gfwlist -server=/applecomputer.co.nz/127.0.0.1#5335 -ipset=/applecomputer.co.nz/gfwlist -server=/wordpress.org/127.0.0.1#5335 -ipset=/wordpress.org/gfwlist -server=/careerjournal.com/127.0.0.1#5335 -ipset=/careerjournal.com/gfwlist -server=/bmw.vn/127.0.0.1#5335 -ipset=/bmw.vn/gfwlist -server=/applecomputer-imac.com/127.0.0.1#5335 -ipset=/applecomputer-imac.com/gfwlist -server=/privatemarketplaces.net/127.0.0.1#5335 -ipset=/privatemarketplaces.net/gfwlist -server=/beatsbydrerealstore.com/127.0.0.1#5335 -ipset=/beatsbydrerealstore.com/gfwlist -server=/applecom.com/127.0.0.1#5335 -ipset=/applecom.com/gfwlist -server=/emcs.org/127.0.0.1#5335 -ipset=/emcs.org/gfwlist -server=/hayabusa.media/127.0.0.1#5335 -ipset=/hayabusa.media/gfwlist -server=/appleclub.com.hk/127.0.0.1#5335 -ipset=/appleclub.com.hk/gfwlist -server=/paypass.net/127.0.0.1#5335 -ipset=/paypass.net/gfwlist -server=/zee5.tv/127.0.0.1#5335 -ipset=/zee5.tv/gfwlist -server=/applecentre.com.au/127.0.0.1#5335 -ipset=/applecentre.com.au/gfwlist -server=/ghostgames.com/127.0.0.1#5335 -ipset=/ghostgames.com/gfwlist -server=/eaplay.com/127.0.0.1#5335 -ipset=/eaplay.com/gfwlist -server=/applecentar.rs/127.0.0.1#5335 -ipset=/applecentar.rs/gfwlist -server=/globalsign.com.au/127.0.0.1#5335 -ipset=/globalsign.com.au/gfwlist -server=/bitwarden.com/127.0.0.1#5335 -ipset=/bitwarden.com/gfwlist -server=/oculusconnect.com/127.0.0.1#5335 -ipset=/oculusconnect.com/gfwlist -server=/beatsjoy.com/127.0.0.1#5335 -ipset=/beatsjoy.com/gfwlist -server=/dropboxapi.com/127.0.0.1#5335 -ipset=/dropboxapi.com/gfwlist -server=/facebooklogin.info/127.0.0.1#5335 -ipset=/facebooklogin.info/gfwlist -server=/dice.se/127.0.0.1#5335 -ipset=/dice.se/gfwlist -server=/appleaustralia.com.au/127.0.0.1#5335 -ipset=/appleaustralia.com.au/gfwlist -server=/appleafrica.com/127.0.0.1#5335 -ipset=/appleafrica.com/gfwlist -server=/grss-ieee.org/127.0.0.1#5335 -ipset=/grss-ieee.org/gfwlist -server=/apple-inc.net/127.0.0.1#5335 -ipset=/apple-inc.net/gfwlist -server=/apple-hk.com/127.0.0.1#5335 -ipset=/apple-hk.com/gfwlist -server=/braintreegateway.tv/127.0.0.1#5335 -ipset=/braintreegateway.tv/gfwlist -server=/bmw-corporate-sales.com/127.0.0.1#5335 -ipset=/bmw-corporate-sales.com/gfwlist -server=/bestmallawards.com/127.0.0.1#5335 -ipset=/bestmallawards.com/gfwlist -server=/ipodnano.com/127.0.0.1#5335 -ipset=/ipodnano.com/gfwlist -server=/apple-dns.com/127.0.0.1#5335 -ipset=/apple-dns.com/gfwlist -server=/mini.com.ar/127.0.0.1#5335 -ipset=/mini.com.ar/gfwlist -server=/elsevier-ae.com/127.0.0.1#5335 -ipset=/elsevier-ae.com/gfwlist -server=/apple-darwin.org/127.0.0.1#5335 -ipset=/apple-darwin.org/gfwlist -server=/apple-darwin.net/127.0.0.1#5335 -ipset=/apple-darwin.net/gfwlist -server=/ebay.com.hk/127.0.0.1#5335 -ipset=/ebay.com.hk/gfwlist -server=/verisign.org/127.0.0.1#5335 -ipset=/verisign.org/gfwlist -server=/huluplus.com/127.0.0.1#5335 -ipset=/huluplus.com/gfwlist -server=/apple-darwin.com/127.0.0.1#5335 -ipset=/apple-darwin.com/gfwlist -server=/nextplus.com.hk/127.0.0.1#5335 -ipset=/nextplus.com.hk/gfwlist -server=/joinclubhouse.com/127.0.0.1#5335 -ipset=/joinclubhouse.com/gfwlist -server=/line-beta.me/127.0.0.1#5335 -ipset=/line-beta.me/gfwlist -server=/appl4e.com/127.0.0.1#5335 -ipset=/appl4e.com/gfwlist -server=/paypal-activate.com/127.0.0.1#5335 -ipset=/paypal-activate.com/gfwlist -server=/rprimelab.com/127.0.0.1#5335 -ipset=/rprimelab.com/gfwlist -server=/bdn.dev/127.0.0.1#5335 -ipset=/bdn.dev/gfwlist -server=/packagist.org/127.0.0.1#5335 -ipset=/packagist.org/gfwlist -server=/bmw.com.mk/127.0.0.1#5335 -ipset=/bmw.com.mk/gfwlist -server=/miniitalianjob.com/127.0.0.1#5335 -ipset=/miniitalianjob.com/gfwlist -server=/flickr.com/127.0.0.1#5335 -ipset=/flickr.com/gfwlist -server=/volvobuses.com.kw/127.0.0.1#5335 -ipset=/volvobuses.com.kw/gfwlist -server=/ap0le.com/127.0.0.1#5335 -ipset=/ap0le.com/gfwlist -server=/epochtimes.jp/127.0.0.1#5335 -ipset=/epochtimes.jp/gfwlist -server=/iphonegermany.com/127.0.0.1#5335 -ipset=/iphonegermany.com/gfwlist -server=/vipshoes2.com/127.0.0.1#5335 -ipset=/vipshoes2.com/gfwlist -server=/forgecdn.net/127.0.0.1#5335 -ipset=/forgecdn.net/gfwlist -server=/1to1computing.com.au/127.0.0.1#5335 -ipset=/1to1computing.com.au/gfwlist -server=/pearson-anaya.com/127.0.0.1#5335 -ipset=/pearson-anaya.com/gfwlist -server=/prostores.com/127.0.0.1#5335 -ipset=/prostores.com/gfwlist -server=/appleone.host/127.0.0.1#5335 -ipset=/appleone.host/gfwlist -server=/volvobuses.co.uk/127.0.0.1#5335 -ipset=/volvobuses.co.uk/gfwlist -server=/ilife.wang/127.0.0.1#5335 -ipset=/ilife.wang/gfwlist -server=/bmwmotorrad.co.kr/127.0.0.1#5335 -ipset=/bmwmotorrad.co.kr/gfwlist -server=/jfrog.org/127.0.0.1#5335 -ipset=/jfrog.org/gfwlist -server=/directv-4-you.com/127.0.0.1#5335 -ipset=/directv-4-you.com/gfwlist -server=/ingka.dev/127.0.0.1#5335 -ipset=/ingka.dev/gfwlist -server=/myfoxphoenix.com/127.0.0.1#5335 -ipset=/myfoxphoenix.com/gfwlist -server=/appleone.blog/127.0.0.1#5335 -ipset=/appleone.blog/gfwlist -server=/dropbox.com/127.0.0.1#5335 -ipset=/dropbox.com/gfwlist -server=/appleone.audio/127.0.0.1#5335 -ipset=/appleone.audio/gfwlist -server=/appletv.wang/127.0.0.1#5335 -ipset=/appletv.wang/gfwlist -server=/flic.kr/127.0.0.1#5335 -ipset=/flic.kr/gfwlist -server=/thomsonreuters.ca/127.0.0.1#5335 -ipset=/thomsonreuters.ca/gfwlist -server=/ipod.is/127.0.0.1#5335 -ipset=/ipod.is/gfwlist -server=/youtube.com.sg/127.0.0.1#5335 -ipset=/youtube.com.sg/gfwlist -server=/visa.mq/127.0.0.1#5335 -ipset=/visa.mq/gfwlist -server=/signalprocessingsociety.org/127.0.0.1#5335 -ipset=/signalprocessingsociety.org/gfwlist -server=/apple-pay.rs/127.0.0.1#5335 -ipset=/apple-pay.rs/gfwlist -server=/appletv.com/127.0.0.1#5335 -ipset=/appletv.com/gfwlist -server=/mini.bg/127.0.0.1#5335 -ipset=/mini.bg/gfwlist -server=/kindle4rss.com/127.0.0.1#5335 -ipset=/kindle4rss.com/gfwlist -server=/duckduckhack.com/127.0.0.1#5335 -ipset=/duckduckhack.com/gfwlist -server=/appleid.berlin/127.0.0.1#5335 -ipset=/appleid.berlin/gfwlist -server=/appleid-uk.us/127.0.0.1#5335 -ipset=/appleid-uk.us/gfwlist -server=/verizonenterprise.com/127.0.0.1#5335 -ipset=/verizonenterprise.com/gfwlist -server=/appleid-applemx.us/127.0.0.1#5335 -ipset=/appleid-applemx.us/gfwlist -server=/hibdontire.com/127.0.0.1#5335 -ipset=/hibdontire.com/gfwlist -server=/bmwmperformance.com/127.0.0.1#5335 -ipset=/bmwmperformance.com/gfwlist -server=/bmwmotorrad.com.sg/127.0.0.1#5335 -ipset=/bmwmotorrad.com.sg/gfwlist -server=/meadjohnson.net/127.0.0.1#5335 -ipset=/meadjohnson.net/gfwlist -server=/uo.com/127.0.0.1#5335 -ipset=/uo.com/gfwlist -server=/learnwithleague.com/127.0.0.1#5335 -ipset=/learnwithleague.com/gfwlist -server=/appleinsider.com/127.0.0.1#5335 -ipset=/appleinsider.com/gfwlist -server=/squarefoot.com.hk/127.0.0.1#5335 -ipset=/squarefoot.com.hk/gfwlist -server=/steamunlocked.net/127.0.0.1#5335 -ipset=/steamunlocked.net/gfwlist -server=/volvotrucks.fi/127.0.0.1#5335 -ipset=/volvotrucks.fi/gfwlist -server=/mini.ro/127.0.0.1#5335 -ipset=/mini.ro/gfwlist -server=/beatsshopstore.com/127.0.0.1#5335 -ipset=/beatsshopstore.com/gfwlist -server=/scholar.google.is/127.0.0.1#5335 -ipset=/scholar.google.is/gfwlist -server=/akaeai.com/127.0.0.1#5335 -ipset=/akaeai.com/gfwlist -server=/sneaker666.com/127.0.0.1#5335 -ipset=/sneaker666.com/gfwlist -server=/verisign.biz/127.0.0.1#5335 -ipset=/verisign.biz/gfwlist -server=/getws1.com/127.0.0.1#5335 -ipset=/getws1.com/gfwlist -server=/shadowcomplex.com/127.0.0.1#5335 -ipset=/shadowcomplex.com/gfwlist -server=/go.com/127.0.0.1#5335 -ipset=/go.com/gfwlist -server=/dailymail.com/127.0.0.1#5335 -ipset=/dailymail.com/gfwlist -server=/hbfile.net/127.0.0.1#5335 -ipset=/hbfile.net/gfwlist -server=/bmw.cz/127.0.0.1#5335 -ipset=/bmw.cz/gfwlist -server=/venmo.com/127.0.0.1#5335 -ipset=/venmo.com/gfwlist -server=/visiontimesjp.com/127.0.0.1#5335 -ipset=/visiontimesjp.com/gfwlist -server=/app-store.wang/127.0.0.1#5335 -ipset=/app-store.wang/gfwlist -server=/marketodesigner.com/127.0.0.1#5335 -ipset=/marketodesigner.com/gfwlist -server=/premiumfs.de/127.0.0.1#5335 -ipset=/premiumfs.de/gfwlist -server=/change.org/127.0.0.1#5335 -ipset=/change.org/gfwlist -server=/alphera-finance.co.in/127.0.0.1#5335 -ipset=/alphera-finance.co.in/gfwlist -server=/tidalhifi.com/127.0.0.1#5335 -ipset=/tidalhifi.com/gfwlist -server=/bazel.build/127.0.0.1#5335 -ipset=/bazel.build/gfwlist -server=/aws-iot-hackathon.com/127.0.0.1#5335 -ipset=/aws-iot-hackathon.com/gfwlist -server=/20thcenturystudios.jp/127.0.0.1#5335 -ipset=/20thcenturystudios.jp/gfwlist -server=/wp.com/127.0.0.1#5335 -ipset=/wp.com/gfwlist -server=/nimg.jp/127.0.0.1#5335 -ipset=/nimg.jp/gfwlist -server=/ibook.com/127.0.0.1#5335 -ipset=/ibook.com/gfwlist -server=/bridgestone-brand.com/127.0.0.1#5335 -ipset=/bridgestone-brand.com/gfwlist -server=/twitch.tv/127.0.0.1#5335 -ipset=/twitch.tv/gfwlist -server=/mastercard.co.il/127.0.0.1#5335 -ipset=/mastercard.co.il/gfwlist -server=/imac.co.nz/127.0.0.1#5335 -ipset=/imac.co.nz/gfwlist -server=/applewallet.com/127.0.0.1#5335 -ipset=/applewallet.com/gfwlist -server=/xn--4vq477m.com/127.0.0.1#5335 -ipset=/xn--4vq477m.com/gfwlist -server=/metcams.com/127.0.0.1#5335 -ipset=/metcams.com/gfwlist -server=/applepaysupplies.tv/127.0.0.1#5335 -ipset=/applepaysupplies.tv/gfwlist -server=/applepaysupplies.info/127.0.0.1#5335 -ipset=/applepaysupplies.info/gfwlist -server=/applepaysupplies.com/127.0.0.1#5335 -ipset=/applepaysupplies.com/gfwlist -server=/applepaycash.tv/127.0.0.1#5335 -ipset=/applepaycash.tv/gfwlist -server=/kindle.it/127.0.0.1#5335 -ipset=/kindle.it/gfwlist -server=/womenwill.mx/127.0.0.1#5335 -ipset=/womenwill.mx/gfwlist -server=/googlecapital.com/127.0.0.1#5335 -ipset=/googlecapital.com/gfwlist -server=/hp.com/127.0.0.1#5335 -ipset=/hp.com/gfwlist -server=/dreprofy.com/127.0.0.1#5335 -ipset=/dreprofy.com/gfwlist -server=/glyphsapp.com/127.0.0.1#5335 -ipset=/glyphsapp.com/gfwlist -server=/nikelunarglide.com/127.0.0.1#5335 -ipset=/nikelunarglide.com/gfwlist -server=/mastercard.fr/127.0.0.1#5335 -ipset=/mastercard.fr/gfwlist -server=/iphone.wang/127.0.0.1#5335 -ipset=/iphone.wang/gfwlist -server=/applepay.info/127.0.0.1#5335 -ipset=/applepay.info/gfwlist -server=/wirelessgroup.co.uk/127.0.0.1#5335 -ipset=/wirelessgroup.co.uk/gfwlist -server=/miniusa.com/127.0.0.1#5335 -ipset=/miniusa.com/gfwlist -server=/ebay-inc.net/127.0.0.1#5335 -ipset=/ebay-inc.net/gfwlist -server=/gettyimages.dk/127.0.0.1#5335 -ipset=/gettyimages.dk/gfwlist -server=/wixstatic.com/127.0.0.1#5335 -ipset=/wixstatic.com/gfwlist -server=/albeats.com/127.0.0.1#5335 -ipset=/albeats.com/gfwlist -server=/apple-pay.com/127.0.0.1#5335 -ipset=/apple-pay.com/gfwlist -server=/thesims3.com/127.0.0.1#5335 -ipset=/thesims3.com/gfwlist -server=/womenwill.com/127.0.0.1#5335 -ipset=/womenwill.com/gfwlist -server=/whosthehost.com/127.0.0.1#5335 -ipset=/whosthehost.com/gfwlist -server=/paypal-community.net/127.0.0.1#5335 -ipset=/paypal-community.net/gfwlist -server=/gvt5.com/127.0.0.1#5335 -ipset=/gvt5.com/gfwlist -server=/fox5atlanta.com/127.0.0.1#5335 -ipset=/fox5atlanta.com/gfwlist -server=/coreduo.com/127.0.0.1#5335 -ipset=/coreduo.com/gfwlist -server=/iwork.com/127.0.0.1#5335 -ipset=/iwork.com/gfwlist -server=/apple.news/127.0.0.1#5335 -ipset=/apple.news/gfwlist -server=/aboutamazon.com/127.0.0.1#5335 -ipset=/aboutamazon.com/gfwlist -server=/beatshopuk.com/127.0.0.1#5335 -ipset=/beatshopuk.com/gfwlist -server=/itun.es/127.0.0.1#5335 -ipset=/itun.es/gfwlist -server=/visa.mn/127.0.0.1#5335 -ipset=/visa.mn/gfwlist -server=/musickit.net/127.0.0.1#5335 -ipset=/musickit.net/gfwlist -server=/tidal.com/127.0.0.1#5335 -ipset=/tidal.com/gfwlist -server=/googledanmark.com/127.0.0.1#5335 -ipset=/googledanmark.com/gfwlist -server=/applemusic.hamburg/127.0.0.1#5335 -ipset=/applemusic.hamburg/gfwlist -server=/bmw.ps/127.0.0.1#5335 -ipset=/bmw.ps/gfwlist -server=/youtube.gt/127.0.0.1#5335 -ipset=/youtube.gt/gfwlist -server=/hm.com/127.0.0.1#5335 -ipset=/hm.com/gfwlist -server=/kraken.com/127.0.0.1#5335 -ipset=/kraken.com/gfwlist -server=/adobetechcommdemo.com/127.0.0.1#5335 -ipset=/adobetechcommdemo.com/gfwlist -server=/applemusic.com/127.0.0.1#5335 -ipset=/applemusic.com/gfwlist -server=/bloombergenvironment.com/127.0.0.1#5335 -ipset=/bloombergenvironment.com/gfwlist -server=/line-cdn.net/127.0.0.1#5335 -ipset=/line-cdn.net/gfwlist -server=/heydoga.com/127.0.0.1#5335 -ipset=/heydoga.com/gfwlist -server=/applemusic.berlin/127.0.0.1#5335 -ipset=/applemusic.berlin/gfwlist -server=/pinterest.nl/127.0.0.1#5335 -ipset=/pinterest.nl/gfwlist -server=/deluxe.com.hk/127.0.0.1#5335 -ipset=/deluxe.com.hk/gfwlist -server=/bmw.dk/127.0.0.1#5335 -ipset=/bmw.dk/gfwlist -server=/zohomeetups.com/127.0.0.1#5335 -ipset=/zohomeetups.com/gfwlist -server=/volvobuses.hk/127.0.0.1#5335 -ipset=/volvobuses.hk/gfwlist -server=/applewatch.wang/127.0.0.1#5335 -ipset=/applewatch.wang/gfwlist -server=/114av.xyz/127.0.0.1#5335 -ipset=/114av.xyz/gfwlist -server=/volvogrouptruckcenter.nl/127.0.0.1#5335 -ipset=/volvogrouptruckcenter.nl/gfwlist -server=/nbcudigitaladops.com/127.0.0.1#5335 -ipset=/nbcudigitaladops.com/gfwlist -server=/monsterbeatspascher.net/127.0.0.1#5335 -ipset=/monsterbeatspascher.net/gfwlist -server=/globalsign.com.hk/127.0.0.1#5335 -ipset=/globalsign.com.hk/gfwlist -server=/itunesparty.com/127.0.0.1#5335 -ipset=/itunesparty.com/gfwlist -server=/appl.com/127.0.0.1#5335 -ipset=/appl.com/gfwlist -server=/macbookpro.us/127.0.0.1#5335 -ipset=/macbookpro.us/gfwlist -server=/durex.jp/127.0.0.1#5335 -ipset=/durex.jp/gfwlist -server=/ipod.gr/127.0.0.1#5335 -ipset=/ipod.gr/gfwlist -server=/beatspromotions.com/127.0.0.1#5335 -ipset=/beatspromotions.com/gfwlist -server=/macbookair.net/127.0.0.1#5335 -ipset=/macbookair.net/gfwlist -server=/wwwitunes.com/127.0.0.1#5335 -ipset=/wwwitunes.com/gfwlist -server=/dev-guardianapis.com/127.0.0.1#5335 -ipset=/dev-guardianapis.com/gfwlist -server=/minidowntown.ca/127.0.0.1#5335 -ipset=/minidowntown.ca/gfwlist -server=/handbags-nike.com/127.0.0.1#5335 -ipset=/handbags-nike.com/gfwlist -server=/macbookair.kr/127.0.0.1#5335 -ipset=/macbookair.kr/gfwlist -server=/visa.com.ua/127.0.0.1#5335 -ipset=/visa.com.ua/gfwlist -server=/nintendo.dk/127.0.0.1#5335 -ipset=/nintendo.dk/gfwlist -server=/macbookair.hk/127.0.0.1#5335 -ipset=/macbookair.hk/gfwlist -server=/macbookair.com.au/127.0.0.1#5335 -ipset=/macbookair.com.au/gfwlist -server=/cheapbeatsdrestudios.com/127.0.0.1#5335 -ipset=/cheapbeatsdrestudios.com/gfwlist -server=/macbookair.com/127.0.0.1#5335 -ipset=/macbookair.com/gfwlist -server=/mailonsunday.ie/127.0.0.1#5335 -ipset=/mailonsunday.ie/gfwlist -server=/macbook.hk/127.0.0.1#5335 -ipset=/macbook.hk/gfwlist -server=/digital-rb.com/127.0.0.1#5335 -ipset=/digital-rb.com/gfwlist -server=/hopstop.tv/127.0.0.1#5335 -ipset=/hopstop.tv/gfwlist -server=/ymail.com/127.0.0.1#5335 -ipset=/ymail.com/gfwlist -server=/citylab.com/127.0.0.1#5335 -ipset=/citylab.com/gfwlist -server=/bootstrapcdn.com/127.0.0.1#5335 -ipset=/bootstrapcdn.com/gfwlist -server=/mastercard.ro/127.0.0.1#5335 -ipset=/mastercard.ro/gfwlist -server=/bridgestonewx.com/127.0.0.1#5335 -ipset=/bridgestonewx.com/gfwlist -server=/nintendoswitch.com/127.0.0.1#5335 -ipset=/nintendoswitch.com/gfwlist -server=/firestone.com.mx/127.0.0.1#5335 -ipset=/firestone.com.mx/gfwlist -server=/hulurussia.com/127.0.0.1#5335 -ipset=/hulurussia.com/gfwlist -server=/offrezdesipods.com/127.0.0.1#5335 -ipset=/offrezdesipods.com/gfwlist -server=/myipod.net/127.0.0.1#5335 -ipset=/myipod.net/gfwlist -server=/coinbase.com/127.0.0.1#5335 -ipset=/coinbase.com/gfwlist -server=/realclearpolicy.com/127.0.0.1#5335 -ipset=/realclearpolicy.com/gfwlist -server=/eafootballworld.com/127.0.0.1#5335 -ipset=/eafootballworld.com/gfwlist -server=/hptechventures.com/127.0.0.1#5335 -ipset=/hptechventures.com/gfwlist -server=/cloudflareok.com/127.0.0.1#5335 -ipset=/cloudflareok.com/gfwlist -server=/scholar.google.ae/127.0.0.1#5335 -ipset=/scholar.google.ae/gfwlist -server=/pricelesstoronto.ca/127.0.0.1#5335 -ipset=/pricelesstoronto.ca/gfwlist -server=/intelforchange.com/127.0.0.1#5335 -ipset=/intelforchange.com/gfwlist -server=/mastercard.co.ke/127.0.0.1#5335 -ipset=/mastercard.co.ke/gfwlist -server=/rimg.com.tw/127.0.0.1#5335 -ipset=/rimg.com.tw/gfwlist -server=/orbitera.com/127.0.0.1#5335 -ipset=/orbitera.com/gfwlist -server=/ipodrip.ca/127.0.0.1#5335 -ipset=/ipodrip.ca/gfwlist -server=/foxnewsaroundtheworld.com/127.0.0.1#5335 -ipset=/foxnewsaroundtheworld.com/gfwlist -server=/ipodprices.com/127.0.0.1#5335 -ipset=/ipodprices.com/gfwlist -server=/thecompaqstore.com/127.0.0.1#5335 -ipset=/thecompaqstore.com/gfwlist -server=/apple-enews.com/127.0.0.1#5335 -ipset=/apple-enews.com/gfwlist -server=/approvedusedbmw.com/127.0.0.1#5335 -ipset=/approvedusedbmw.com/gfwlist -server=/netname.com.br/127.0.0.1#5335 -ipset=/netname.com.br/gfwlist -server=/ipodcentre.nl/127.0.0.1#5335 -ipset=/ipodcentre.nl/gfwlist -server=/vmmark.com/127.0.0.1#5335 -ipset=/vmmark.com/gfwlist -server=/gravitytank.com/127.0.0.1#5335 -ipset=/gravitytank.com/gfwlist -server=/discord.com/127.0.0.1#5335 -ipset=/discord.com/gfwlist -server=/ipod.ru/127.0.0.1#5335 -ipset=/ipod.ru/gfwlist -server=/disneymeetingsandevents.com/127.0.0.1#5335 -ipset=/disneymeetingsandevents.com/gfwlist -server=/bridgestone-business-service.jp/127.0.0.1#5335 -ipset=/bridgestone-business-service.jp/gfwlist -server=/huffingtonpost.co.za/127.0.0.1#5335 -ipset=/huffingtonpost.co.za/gfwlist -server=/ipod.rs/127.0.0.1#5335 -ipset=/ipod.rs/gfwlist -server=/ipod.net/127.0.0.1#5335 -ipset=/ipod.net/gfwlist -server=/visa.com.bz/127.0.0.1#5335 -ipset=/visa.com.bz/gfwlist -server=/rt.com/127.0.0.1#5335 -ipset=/rt.com/gfwlist -server=/element.io/127.0.0.1#5335 -ipset=/element.io/gfwlist -server=/stark-verlag.ch/127.0.0.1#5335 -ipset=/stark-verlag.ch/gfwlist -server=/razersupport.com/127.0.0.1#5335 -ipset=/razersupport.com/gfwlist -server=/bestbuycharityclassic.com/127.0.0.1#5335 -ipset=/bestbuycharityclassic.com/gfwlist -server=/ipod.hk/127.0.0.1#5335 -ipset=/ipod.hk/gfwlist -server=/battlefrontii.com/127.0.0.1#5335 -ipset=/battlefrontii.com/gfwlist -server=/javfinder.sh/127.0.0.1#5335 -ipset=/javfinder.sh/gfwlist -server=/instagram-engineering.com/127.0.0.1#5335 -ipset=/instagram-engineering.com/gfwlist -server=/ipod.fr/127.0.0.1#5335 -ipset=/ipod.fr/gfwlist -server=/bmw.de/127.0.0.1#5335 -ipset=/bmw.de/gfwlist -server=/amp.akamaized.net/127.0.0.1#5335 -ipset=/amp.akamaized.net/gfwlist -server=/kidgrid.tv/127.0.0.1#5335 -ipset=/kidgrid.tv/gfwlist -server=/funnyordie.com/127.0.0.1#5335 -ipset=/funnyordie.com/gfwlist -server=/ipod.es/127.0.0.1#5335 -ipset=/ipod.es/gfwlist -server=/nikerunner.com/127.0.0.1#5335 -ipset=/nikerunner.com/gfwlist -server=/microsoft.md/127.0.0.1#5335 -ipset=/microsoft.md/gfwlist -server=/ipod.com.au/127.0.0.1#5335 -ipset=/ipod.com.au/gfwlist -server=/9nation.com.au/127.0.0.1#5335 -ipset=/9nation.com.au/gfwlist -server=/wionews.com/127.0.0.1#5335 -ipset=/wionews.com/gfwlist -server=/microsoftready.com/127.0.0.1#5335 -ipset=/microsoftready.com/gfwlist -server=/fox6now.com/127.0.0.1#5335 -ipset=/fox6now.com/gfwlist -server=/getbraintree.com/127.0.0.1#5335 -ipset=/getbraintree.com/gfwlist -server=/ipod.cm/127.0.0.1#5335 -ipset=/ipod.cm/gfwlist -server=/akamai-thailand.net/127.0.0.1#5335 -ipset=/akamai-thailand.net/gfwlist -server=/bmw-motorrad.tw/127.0.0.1#5335 -ipset=/bmw-motorrad.tw/gfwlist -server=/cambridgedigital.net/127.0.0.1#5335 -ipset=/cambridgedigital.net/gfwlist -server=/ebay.us/127.0.0.1#5335 -ipset=/ebay.us/gfwlist -server=/realclearpublicaffairs.com/127.0.0.1#5335 -ipset=/realclearpublicaffairs.com/gfwlist -server=/beatsdresalestore.com/127.0.0.1#5335 -ipset=/beatsdresalestore.com/gfwlist -server=/signal.org/127.0.0.1#5335 -ipset=/signal.org/gfwlist -server=/ieee-pes.org/127.0.0.1#5335 -ipset=/ieee-pes.org/gfwlist -server=/appleclassicipod.com/127.0.0.1#5335 -ipset=/appleclassicipod.com/gfwlist -server=/realclearscience.com/127.0.0.1#5335 -ipset=/realclearscience.com/gfwlist -server=/volvodefense.com/127.0.0.1#5335 -ipset=/volvodefense.com/gfwlist -server=/paypalhere.com/127.0.0.1#5335 -ipset=/paypalhere.com/gfwlist -server=/bmw.ie/127.0.0.1#5335 -ipset=/bmw.ie/gfwlist -server=/imacapplecomputer.com/127.0.0.1#5335 -ipset=/imacapplecomputer.com/gfwlist -server=/youtube.com/127.0.0.1#5335 -ipset=/youtube.com/gfwlist -server=/vhxqa4.com/127.0.0.1#5335 -ipset=/vhxqa4.com/gfwlist -server=/bmwgroup.com/127.0.0.1#5335 -ipset=/bmwgroup.com/gfwlist -server=/yahoo.sr/127.0.0.1#5335 -ipset=/yahoo.sr/gfwlist -server=/cygwin.com/127.0.0.1#5335 -ipset=/cygwin.com/gfwlist -server=/manoramayearbook.in/127.0.0.1#5335 -ipset=/manoramayearbook.in/gfwlist -server=/airtunes.com/127.0.0.1#5335 -ipset=/airtunes.com/gfwlist -server=/iphoneclaro.com.br/127.0.0.1#5335 -ipset=/iphoneclaro.com.br/gfwlist -server=/mini.de/127.0.0.1#5335 -ipset=/mini.de/gfwlist -server=/targetimg1.com/127.0.0.1#5335 -ipset=/targetimg1.com/gfwlist -server=/beats-sale.com/127.0.0.1#5335 -ipset=/beats-sale.com/gfwlist -server=/elderscrolls.com/127.0.0.1#5335 -ipset=/elderscrolls.com/gfwlist -server=/stripecdn.com/127.0.0.1#5335 -ipset=/stripecdn.com/gfwlist -server=/uun96.com/127.0.0.1#5335 -ipset=/uun96.com/gfwlist -server=/hbabit.com/127.0.0.1#5335 -ipset=/hbabit.com/gfwlist -server=/adobe-audience-finder.com/127.0.0.1#5335 -ipset=/adobe-audience-finder.com/gfwlist -server=/gettyimages.es/127.0.0.1#5335 -ipset=/gettyimages.es/gfwlist -server=/beatsoutletonlines.com/127.0.0.1#5335 -ipset=/beatsoutletonlines.com/gfwlist -server=/bybeatsdre.com/127.0.0.1#5335 -ipset=/bybeatsdre.com/gfwlist -server=/qualcomm-email.com/127.0.0.1#5335 -ipset=/qualcomm-email.com/gfwlist -server=/paypal-online.org/127.0.0.1#5335 -ipset=/paypal-online.org/gfwlist -server=/bmwmotorsport.com/127.0.0.1#5335 -ipset=/bmwmotorsport.com/gfwlist -server=/nikebuy.com/127.0.0.1#5335 -ipset=/nikebuy.com/gfwlist -server=/bmw-grouparchiv.de/127.0.0.1#5335 -ipset=/bmw-grouparchiv.de/gfwlist -server=/applemx-icloud.com/127.0.0.1#5335 -ipset=/applemx-icloud.com/gfwlist -server=/disney.ph/127.0.0.1#5335 -ipset=/disney.ph/gfwlist -server=/tr.com/127.0.0.1#5335 -ipset=/tr.com/gfwlist -server=/iphonecase2013.com/127.0.0.1#5335 -ipset=/iphonecase2013.com/gfwlist -server=/iphone5s5case.com/127.0.0.1#5335 -ipset=/iphone5s5case.com/gfwlist -server=/mini-dubai.com/127.0.0.1#5335 -ipset=/mini-dubai.com/gfwlist -server=/electronjs.org/127.0.0.1#5335 -ipset=/electronjs.org/gfwlist -server=/paypal-scoop.com/127.0.0.1#5335 -ipset=/paypal-scoop.com/gfwlist -server=/monsterbeats-solo.com/127.0.0.1#5335 -ipset=/monsterbeats-solo.com/gfwlist -server=/google.com.sv/127.0.0.1#5335 -ipset=/google.com.sv/gfwlist -server=/macappsto.re/127.0.0.1#5335 -ipset=/macappsto.re/gfwlist -server=/nintendo.ch/127.0.0.1#5335 -ipset=/nintendo.ch/gfwlist -server=/kijijii.ca/127.0.0.1#5335 -ipset=/kijijii.ca/gfwlist -server=/beatsbydredr.com/127.0.0.1#5335 -ipset=/beatsbydredr.com/gfwlist -server=/faasbook.com/127.0.0.1#5335 -ipset=/faasbook.com/gfwlist -server=/iphone-vip3.com/127.0.0.1#5335 -ipset=/iphone-vip3.com/gfwlist -server=/ipodrocks.com.au/127.0.0.1#5335 -ipset=/ipodrocks.com.au/gfwlist -server=/apple.bg/127.0.0.1#5335 -ipset=/apple.bg/gfwlist -server=/sunglassessale2014.com/127.0.0.1#5335 -ipset=/sunglassessale2014.com/gfwlist -server=/ebayca.org/127.0.0.1#5335 -ipset=/ebayca.org/gfwlist -server=/amazon.sg/127.0.0.1#5335 -ipset=/amazon.sg/gfwlist -server=/nflxext.com/127.0.0.1#5335 -ipset=/nflxext.com/gfwlist -server=/iphone-vip1.com/127.0.0.1#5335 -ipset=/iphone-vip1.com/gfwlist -server=/mastercard.co.ve/127.0.0.1#5335 -ipset=/mastercard.co.ve/gfwlist -server=/zert.ch/127.0.0.1#5335 -ipset=/zert.ch/gfwlist -server=/mastercard.com.my/127.0.0.1#5335 -ipset=/mastercard.com.my/gfwlist -server=/iphone-cn.com/127.0.0.1#5335 -ipset=/iphone-cn.com/gfwlist -server=/ovid.com/127.0.0.1#5335 -ipset=/ovid.com/gfwlist -server=/iphone-cd.com/127.0.0.1#5335 -ipset=/iphone-cd.com/gfwlist -server=/icloudmusic.net/127.0.0.1#5335 -ipset=/icloudmusic.net/gfwlist -server=/osm.org/127.0.0.1#5335 -ipset=/osm.org/gfwlist -server=/drdremonsterdre.com/127.0.0.1#5335 -ipset=/drdremonsterdre.com/gfwlist -server=/dditsadn.com/127.0.0.1#5335 -ipset=/dditsadn.com/gfwlist -server=/accountpaypal.org/127.0.0.1#5335 -ipset=/accountpaypal.org/gfwlist -server=/starbucks.bg/127.0.0.1#5335 -ipset=/starbucks.bg/gfwlist -server=/beats-bydreoutletonline.com/127.0.0.1#5335 -ipset=/beats-bydreoutletonline.com/gfwlist -server=/designeriphonescases.com/127.0.0.1#5335 -ipset=/designeriphonescases.com/gfwlist -server=/visa.es/127.0.0.1#5335 -ipset=/visa.es/gfwlist -server=/fox-corporation.com/127.0.0.1#5335 -ipset=/fox-corporation.com/gfwlist -server=/webex.com.au/127.0.0.1#5335 -ipset=/webex.com.au/gfwlist -server=/swoosh.tv/127.0.0.1#5335 -ipset=/swoosh.tv/gfwlist -server=/bestiphonestuff.com/127.0.0.1#5335 -ipset=/bestiphonestuff.com/gfwlist -server=/linetv.tw/127.0.0.1#5335 -ipset=/linetv.tw/gfwlist -server=/intelnet.component/127.0.0.1#5335 -ipset=/intelnet.component/gfwlist -server=/applestore.cm/127.0.0.1#5335 -ipset=/applestore.cm/gfwlist -server=/mastercardbiz.ca/127.0.0.1#5335 -ipset=/mastercardbiz.ca/gfwlist -server=/kijijiauto.ca/127.0.0.1#5335 -ipset=/kijijiauto.ca/gfwlist -server=/beatsheadphones1.com/127.0.0.1#5335 -ipset=/beatsheadphones1.com/gfwlist -server=/ipadair.jp/127.0.0.1#5335 -ipset=/ipadair.jp/gfwlist -server=/bejeweledstars.com/127.0.0.1#5335 -ipset=/bejeweledstars.com/gfwlist -server=/patreon.com/127.0.0.1#5335 -ipset=/patreon.com/gfwlist -server=/travelex.com.hk/127.0.0.1#5335 -ipset=/travelex.com.hk/gfwlist -server=/vod-dash-ww-live.akamaized.net/127.0.0.1#5335 -ipset=/vod-dash-ww-live.akamaized.net/gfwlist -server=/ubuntu.com/127.0.0.1#5335 -ipset=/ubuntu.com/gfwlist -server=/fixtracking.com/127.0.0.1#5335 -ipset=/fixtracking.com/gfwlist -server=/applecare.cc/127.0.0.1#5335 -ipset=/applecare.cc/gfwlist -server=/ipadair.cm/127.0.0.1#5335 -ipset=/ipadair.cm/gfwlist -server=/ipadair.cl/127.0.0.1#5335 -ipset=/ipadair.cl/gfwlist -server=/ipad3.com/127.0.0.1#5335 -ipset=/ipad3.com/gfwlist -server=/pearsoncanada.ca/127.0.0.1#5335 -ipset=/pearsoncanada.ca/gfwlist -server=/privilege.tw/127.0.0.1#5335 -ipset=/privilege.tw/gfwlist -server=/ebayforeclosure.org/127.0.0.1#5335 -ipset=/ebayforeclosure.org/gfwlist -server=/scholar.google.com.uy/127.0.0.1#5335 -ipset=/scholar.google.com.uy/gfwlist -server=/paypal-security.net/127.0.0.1#5335 -ipset=/paypal-security.net/gfwlist -server=/alphera.net/127.0.0.1#5335 -ipset=/alphera.net/gfwlist -server=/paypal.me/127.0.0.1#5335 -ipset=/paypal.me/gfwlist -server=/dremonsterbeatsoutlets.com/127.0.0.1#5335 -ipset=/dremonsterbeatsoutlets.com/gfwlist -server=/fox2news.com/127.0.0.1#5335 -ipset=/fox2news.com/gfwlist -server=/beatsnzsale.com/127.0.0.1#5335 -ipset=/beatsnzsale.com/gfwlist -server=/webpkgcache.com/127.0.0.1#5335 -ipset=/webpkgcache.com/gfwlist -server=/ebookforipad.com/127.0.0.1#5335 -ipset=/ebookforipad.com/gfwlist -server=/uun79.com/127.0.0.1#5335 -ipset=/uun79.com/gfwlist -server=/volvobuses.jo/127.0.0.1#5335 -ipset=/volvobuses.jo/gfwlist -server=/foxsports.com.mx/127.0.0.1#5335 -ipset=/foxsports.com.mx/gfwlist -server=/verisign.us/127.0.0.1#5335 -ipset=/verisign.us/gfwlist -server=/quicktime.com/127.0.0.1#5335 -ipset=/quicktime.com/gfwlist -server=/rarbg.to/127.0.0.1#5335 -ipset=/rarbg.to/gfwlist -server=/volvobuses.sg/127.0.0.1#5335 -ipset=/volvobuses.sg/gfwlist -server=/paypal-business.com/127.0.0.1#5335 -ipset=/paypal-business.com/gfwlist -server=/imac.eu/127.0.0.1#5335 -ipset=/imac.eu/gfwlist -server=/apple-imac.com/127.0.0.1#5335 -ipset=/apple-imac.com/gfwlist -server=/tvappstore.net/127.0.0.1#5335 -ipset=/tvappstore.net/gfwlist -server=/ebaybenefits.com/127.0.0.1#5335 -ipset=/ebaybenefits.com/gfwlist -server=/kindle.fr/127.0.0.1#5335 -ipset=/kindle.fr/gfwlist -server=/applestore.com.pt/127.0.0.1#5335 -ipset=/applestore.com.pt/gfwlist -server=/google.co.ma/127.0.0.1#5335 -ipset=/google.co.ma/gfwlist -server=/starbucks.ie/127.0.0.1#5335 -ipset=/starbucks.ie/gfwlist -server=/applestoreonline.com/127.0.0.1#5335 -ipset=/applestoreonline.com/gfwlist -server=/facebook-covid-19.com/127.0.0.1#5335 -ipset=/facebook-covid-19.com/gfwlist -server=/veetbangladesh.com/127.0.0.1#5335 -ipset=/veetbangladesh.com/gfwlist -server=/nintendo.it/127.0.0.1#5335 -ipset=/nintendo.it/gfwlist -server=/hinet.net/127.0.0.1#5335 -ipset=/hinet.net/gfwlist -server=/applestore.net/127.0.0.1#5335 -ipset=/applestore.net/gfwlist -server=/ysm.yahoo.com/127.0.0.1#5335 -ipset=/ysm.yahoo.com/gfwlist -server=/line-apps-beta.com/127.0.0.1#5335 -ipset=/line-apps-beta.com/gfwlist -server=/disneyarena.com/127.0.0.1#5335 -ipset=/disneyarena.com/gfwlist -server=/globalvoicesonline.org/127.0.0.1#5335 -ipset=/globalvoicesonline.org/gfwlist -server=/kijij.ca/127.0.0.1#5335 -ipset=/kijij.ca/gfwlist -server=/volvotrucks.my/127.0.0.1#5335 -ipset=/volvotrucks.my/gfwlist -server=/applestore.com.sn/127.0.0.1#5335 -ipset=/applestore.com.sn/gfwlist -server=/pricelesssurprises.com/127.0.0.1#5335 -ipset=/pricelesssurprises.com/gfwlist -server=/volvotrucks.by/127.0.0.1#5335 -ipset=/volvotrucks.by/gfwlist -server=/quiz.directory/127.0.0.1#5335 -ipset=/quiz.directory/gfwlist -server=/biorxiv.org/127.0.0.1#5335 -ipset=/biorxiv.org/gfwlist -server=/applestore.com.ro/127.0.0.1#5335 -ipset=/applestore.com.ro/gfwlist -server=/appstore.hk/127.0.0.1#5335 -ipset=/appstore.hk/gfwlist -server=/sandisk.co.jp/127.0.0.1#5335 -ipset=/sandisk.co.jp/gfwlist -server=/minikelowna.ca/127.0.0.1#5335 -ipset=/minikelowna.ca/gfwlist -server=/bmw.sk/127.0.0.1#5335 -ipset=/bmw.sk/gfwlist -server=/applestore.com.pl/127.0.0.1#5335 -ipset=/applestore.com.pl/gfwlist -server=/applestore.com.my/127.0.0.1#5335 -ipset=/applestore.com.my/gfwlist -server=/skillshare.com/127.0.0.1#5335 -ipset=/skillshare.com/gfwlist -server=/sony-olympus-medical.com/127.0.0.1#5335 -ipset=/sony-olympus-medical.com/gfwlist -server=/bmw-motorrad.cr/127.0.0.1#5335 -ipset=/bmw-motorrad.cr/gfwlist -server=/appye.com/127.0.0.1#5335 -ipset=/appye.com/gfwlist -server=/applestore.com.hr/127.0.0.1#5335 -ipset=/applestore.com.hr/gfwlist -server=/bag-glasses1.com/127.0.0.1#5335 -ipset=/bag-glasses1.com/gfwlist -server=/applestore.com.gr/127.0.0.1#5335 -ipset=/applestore.com.gr/gfwlist -server=/simplyipod.com/127.0.0.1#5335 -ipset=/simplyipod.com/gfwlist -server=/bill-safe.com/127.0.0.1#5335 -ipset=/bill-safe.com/gfwlist -server=/priceless.com/127.0.0.1#5335 -ipset=/priceless.com/gfwlist -server=/newhampshirebmw.com/127.0.0.1#5335 -ipset=/newhampshirebmw.com/gfwlist -server=/volvobuses.pk/127.0.0.1#5335 -ipset=/volvobuses.pk/gfwlist -server=/vjav.com/127.0.0.1#5335 -ipset=/vjav.com/gfwlist -server=/google.com.sa/127.0.0.1#5335 -ipset=/google.com.sa/gfwlist -server=/hpsupport.com/127.0.0.1#5335 -ipset=/hpsupport.com/gfwlist -server=/applestore.com/127.0.0.1#5335 -ipset=/applestore.com/gfwlist -server=/cixp.net/127.0.0.1#5335 -ipset=/cixp.net/gfwlist -server=/bridgestonemerchandise.com/127.0.0.1#5335 -ipset=/bridgestonemerchandise.com/gfwlist -server=/fox247.com/127.0.0.1#5335 -ipset=/fox247.com/gfwlist -server=/ethereum.org/127.0.0.1#5335 -ipset=/ethereum.org/gfwlist -server=/ebayfashion.com/127.0.0.1#5335 -ipset=/ebayfashion.com/gfwlist -server=/oxfordre.com/127.0.0.1#5335 -ipset=/oxfordre.com/gfwlist -server=/battlelog.com/127.0.0.1#5335 -ipset=/battlelog.com/gfwlist -server=/sarajevopodopsadom.com/127.0.0.1#5335 -ipset=/sarajevopodopsadom.com/gfwlist -server=/danemarket.com/127.0.0.1#5335 -ipset=/danemarket.com/gfwlist -server=/gv.com/127.0.0.1#5335 -ipset=/gv.com/gfwlist -server=/esm.run/127.0.0.1#5335 -ipset=/esm.run/gfwlist -server=/netflixdnstest4.com/127.0.0.1#5335 -ipset=/netflixdnstest4.com/gfwlist -server=/aplestore.com/127.0.0.1#5335 -ipset=/aplestore.com/gfwlist -server=/apple.xn--czr694b/127.0.0.1#5335 -ipset=/apple.xn--czr694b/gfwlist -server=/aplleipods.com/127.0.0.1#5335 -ipset=/aplleipods.com/gfwlist -server=/ebayfashion.net/127.0.0.1#5335 -ipset=/ebayfashion.net/gfwlist -server=/vimeo-staging2.com/127.0.0.1#5335 -ipset=/vimeo-staging2.com/gfwlist -server=/apple.so/127.0.0.1#5335 -ipset=/apple.so/gfwlist -server=/apple.sa/127.0.0.1#5335 -ipset=/apple.sa/gfwlist -server=/soundcloud.com/127.0.0.1#5335 -ipset=/soundcloud.com/gfwlist -server=/canon.rs/127.0.0.1#5335 -ipset=/canon.rs/gfwlist -server=/ebaycdn.net/127.0.0.1#5335 -ipset=/ebaycdn.net/gfwlist -server=/instagram.com/127.0.0.1#5335 -ipset=/instagram.com/gfwlist -server=/mastercard.ca/127.0.0.1#5335 -ipset=/mastercard.ca/gfwlist -server=/foxnewslatino.com/127.0.0.1#5335 -ipset=/foxnewslatino.com/gfwlist -server=/google.md/127.0.0.1#5335 -ipset=/google.md/gfwlist -server=/simcity.com/127.0.0.1#5335 -ipset=/simcity.com/gfwlist -server=/excitebots.com/127.0.0.1#5335 -ipset=/excitebots.com/gfwlist -server=/visaconciergelac.com/127.0.0.1#5335 -ipset=/visaconciergelac.com/gfwlist -server=/marvelspotlightplays.com/127.0.0.1#5335 -ipset=/marvelspotlightplays.com/gfwlist -server=/beatssaustraliabuy.com/127.0.0.1#5335 -ipset=/beatssaustraliabuy.com/gfwlist -server=/apple.net/127.0.0.1#5335 -ipset=/apple.net/gfwlist -server=/ebay.fr/127.0.0.1#5335 -ipset=/ebay.fr/gfwlist -server=/researchkit.net/127.0.0.1#5335 -ipset=/researchkit.net/gfwlist -server=/youtube.fr/127.0.0.1#5335 -ipset=/youtube.fr/gfwlist -server=/apple.lt/127.0.0.1#5335 -ipset=/apple.lt/gfwlist -server=/apple.lk/127.0.0.1#5335 -ipset=/apple.lk/gfwlist -server=/apple.kr/127.0.0.1#5335 -ipset=/apple.kr/gfwlist -server=/facebookswagstore.com/127.0.0.1#5335 -ipset=/facebookswagstore.com/gfwlist -server=/netflix.ca/127.0.0.1#5335 -ipset=/netflix.ca/gfwlist -server=/shopmonsterbeats.com/127.0.0.1#5335 -ipset=/shopmonsterbeats.com/gfwlist -server=/cafr.ca/127.0.0.1#5335 -ipset=/cafr.ca/gfwlist -server=/zerohedge.com/127.0.0.1#5335 -ipset=/zerohedge.com/gfwlist -server=/nordstrommedia.com/127.0.0.1#5335 -ipset=/nordstrommedia.com/gfwlist -server=/apple.hr/127.0.0.1#5335 -ipset=/apple.hr/gfwlist -server=/static-nike.com/127.0.0.1#5335 -ipset=/static-nike.com/gfwlist -server=/nikestares.com/127.0.0.1#5335 -ipset=/nikestares.com/gfwlist -server=/instagram-brand.com/127.0.0.1#5335 -ipset=/instagram-brand.com/gfwlist -server=/maxgo.com/127.0.0.1#5335 -ipset=/maxgo.com/gfwlist -server=/mini-connected.it/127.0.0.1#5335 -ipset=/mini-connected.it/gfwlist -server=/apple.eu/127.0.0.1#5335 -ipset=/apple.eu/gfwlist -server=/blzddist1-a.akamaihd.net/127.0.0.1#5335 -ipset=/blzddist1-a.akamaihd.net/gfwlist -server=/beatsbydre4usales.com/127.0.0.1#5335 -ipset=/beatsbydre4usales.com/gfwlist -server=/industrialtoys.com/127.0.0.1#5335 -ipset=/industrialtoys.com/gfwlist -server=/bloombergbna.com/127.0.0.1#5335 -ipset=/bloombergbna.com/gfwlist -server=/apple.es/127.0.0.1#5335 -ipset=/apple.es/gfwlist -server=/twitterstat.us/127.0.0.1#5335 -ipset=/twitterstat.us/gfwlist -server=/disney.com/127.0.0.1#5335 -ipset=/disney.com/gfwlist -server=/apple.cz/127.0.0.1#5335 -ipset=/apple.cz/gfwlist -server=/apexlegends.com/127.0.0.1#5335 -ipset=/apexlegends.com/gfwlist -server=/vfsforgit.org/127.0.0.1#5335 -ipset=/vfsforgit.org/gfwlist -server=/apple.co.uk/127.0.0.1#5335 -ipset=/apple.co.uk/gfwlist -server=/pinterest.pe/127.0.0.1#5335 -ipset=/pinterest.pe/gfwlist -server=/foxnewsgo.org/127.0.0.1#5335 -ipset=/foxnewsgo.org/gfwlist -server=/apple.co.th/127.0.0.1#5335 -ipset=/apple.co.th/gfwlist -server=/12diasderegalosdeitunes.hn/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.hn/gfwlist -server=/apple.co.mz/127.0.0.1#5335 -ipset=/apple.co.mz/gfwlist -server=/pypl.com/127.0.0.1#5335 -ipset=/pypl.com/gfwlist -server=/guangming.com.my/127.0.0.1#5335 -ipset=/guangming.com.my/gfwlist -server=/beatssingapores.com/127.0.0.1#5335 -ipset=/beatssingapores.com/gfwlist -server=/headphonesol.com/127.0.0.1#5335 -ipset=/headphonesol.com/gfwlist -server=/volvogroup.mx/127.0.0.1#5335 -ipset=/volvogroup.mx/gfwlist -server=/viacom.com/127.0.0.1#5335 -ipset=/viacom.com/gfwlist -server=/vfsco.ro/127.0.0.1#5335 -ipset=/vfsco.ro/gfwlist -server=/hsfacebook.com/127.0.0.1#5335 -ipset=/hsfacebook.com/gfwlist -server=/bmw-motorrad.co.id/127.0.0.1#5335 -ipset=/bmw-motorrad.co.id/gfwlist -server=/riot.net/127.0.0.1#5335 -ipset=/riot.net/gfwlist -server=/bmw-motorrad.com.br/127.0.0.1#5335 -ipset=/bmw-motorrad.com.br/gfwlist -server=/x-art.com/127.0.0.1#5335 -ipset=/x-art.com/gfwlist -server=/pricelessbeijing.com/127.0.0.1#5335 -ipset=/pricelessbeijing.com/gfwlist -server=/pinterest.com.ec/127.0.0.1#5335 -ipset=/pinterest.com.ec/gfwlist -server=/ebaymall.com/127.0.0.1#5335 -ipset=/ebaymall.com/gfwlist -server=/xn--qoq462m.com/127.0.0.1#5335 -ipset=/xn--qoq462m.com/gfwlist -server=/bmwsports.com/127.0.0.1#5335 -ipset=/bmwsports.com/gfwlist -server=/apple.ca/127.0.0.1#5335 -ipset=/apple.ca/gfwlist -server=/vip-beats.com/127.0.0.1#5335 -ipset=/vip-beats.com/gfwlist -server=/thismon.ee/127.0.0.1#5335 -ipset=/thismon.ee/gfwlist -server=/mastercard.md/127.0.0.1#5335 -ipset=/mastercard.md/gfwlist -server=/apple.ae/127.0.0.1#5335 -ipset=/apple.ae/gfwlist -server=/mini-antilles.fr/127.0.0.1#5335 -ipset=/mini-antilles.fr/gfwlist -server=/yahoo.it/127.0.0.1#5335 -ipset=/yahoo.it/gfwlist -server=/iutunes.com/127.0.0.1#5335 -ipset=/iutunes.com/gfwlist -server=/winticket.jp/127.0.0.1#5335 -ipset=/winticket.jp/gfwlist -server=/businessinsider.in/127.0.0.1#5335 -ipset=/businessinsider.in/gfwlist -server=/kfs.io/127.0.0.1#5335 -ipset=/kfs.io/gfwlist -server=/btt804.com/127.0.0.1#5335 -ipset=/btt804.com/gfwlist -server=/itunesradio.rio/127.0.0.1#5335 -ipset=/itunesradio.rio/gfwlist -server=/mucinexprofessional.com/127.0.0.1#5335 -ipset=/mucinexprofessional.com/gfwlist -server=/onionshare.org/127.0.0.1#5335 -ipset=/onionshare.org/gfwlist -server=/road-crew.com/127.0.0.1#5335 -ipset=/road-crew.com/gfwlist -server=/dollarfotoclub.com/127.0.0.1#5335 -ipset=/dollarfotoclub.com/gfwlist -server=/globalvoices.org/127.0.0.1#5335 -ipset=/globalvoices.org/gfwlist -server=/indazn.com/127.0.0.1#5335 -ipset=/indazn.com/gfwlist -server=/foxsports.com.bo/127.0.0.1#5335 -ipset=/foxsports.com.bo/gfwlist -server=/itunes.us/127.0.0.1#5335 -ipset=/itunes.us/gfwlist -server=/itunes.rio/127.0.0.1#5335 -ipset=/itunes.rio/gfwlist -server=/jinnaju.com/127.0.0.1#5335 -ipset=/jinnaju.com/gfwlist -server=/monsterbeatssalg.com/127.0.0.1#5335 -ipset=/monsterbeatssalg.com/gfwlist -server=/google.ro/127.0.0.1#5335 -ipset=/google.ro/gfwlist -server=/bmw-eg.com/127.0.0.1#5335 -ipset=/bmw-eg.com/gfwlist -server=/shorturl.at/127.0.0.1#5335 -ipset=/shorturl.at/gfwlist -server=/pearsonvue.net/127.0.0.1#5335 -ipset=/pearsonvue.net/gfwlist -server=/miniso-au.com/127.0.0.1#5335 -ipset=/miniso-au.com/gfwlist -server=/gtv1.org/127.0.0.1#5335 -ipset=/gtv1.org/gfwlist -server=/12joursdecadeauxdeitunes.com/127.0.0.1#5335 -ipset=/12joursdecadeauxdeitunes.com/gfwlist -server=/hanime1.me/127.0.0.1#5335 -ipset=/hanime1.me/gfwlist -server=/nikeoutletstore.com/127.0.0.1#5335 -ipset=/nikeoutletstore.com/gfwlist -server=/imstagram.com/127.0.0.1#5335 -ipset=/imstagram.com/gfwlist -server=/github-cloud.s3.amazonaws.com/127.0.0.1#5335 -ipset=/github-cloud.s3.amazonaws.com/gfwlist -server=/stackapps.com/127.0.0.1#5335 -ipset=/stackapps.com/gfwlist -server=/statsmakemecry.com/127.0.0.1#5335 -ipset=/statsmakemecry.com/gfwlist -server=/fflick.com/127.0.0.1#5335 -ipset=/fflick.com/gfwlist -server=/billpointnewzealand.com/127.0.0.1#5335 -ipset=/billpointnewzealand.com/gfwlist -server=/zopim.com/127.0.0.1#5335 -ipset=/zopim.com/gfwlist -server=/12diasderegalosdeitunes.com/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.com/gfwlist -server=/bmw-motorrad.at/127.0.0.1#5335 -ipset=/bmw-motorrad.at/gfwlist -server=/12diasderegalosdeitunes.co.ni/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.co.ni/gfwlist -server=/cambridgemaths.org/127.0.0.1#5335 -ipset=/cambridgemaths.org/gfwlist -server=/applecensorship.com/127.0.0.1#5335 -ipset=/applecensorship.com/gfwlist -server=/avatargarenanow-a.akamaihd.net/127.0.0.1#5335 -ipset=/avatargarenanow-a.akamaihd.net/gfwlist -server=/duck.com/127.0.0.1#5335 -ipset=/duck.com/gfwlist -server=/xbox.org/127.0.0.1#5335 -ipset=/xbox.org/gfwlist -server=/star-latam.com/127.0.0.1#5335 -ipset=/star-latam.com/gfwlist -server=/shopee.ph/127.0.0.1#5335 -ipset=/shopee.ph/gfwlist -server=/netflixdnstest6.com/127.0.0.1#5335 -ipset=/netflixdnstest6.com/gfwlist -server=/starcraft.com/127.0.0.1#5335 -ipset=/starcraft.com/gfwlist -server=/volvotrucks.com.ar/127.0.0.1#5335 -ipset=/volvotrucks.com.ar/gfwlist -server=/netlify.com/127.0.0.1#5335 -ipset=/netlify.com/gfwlist -server=/sublimetext.com/127.0.0.1#5335 -ipset=/sublimetext.com/gfwlist -server=/icloudbrowser.net/127.0.0.1#5335 -ipset=/icloudbrowser.net/gfwlist -server=/getbootstrap.com/127.0.0.1#5335 -ipset=/getbootstrap.com/gfwlist -server=/pinterest.th/127.0.0.1#5335 -ipset=/pinterest.th/gfwlist -server=/parkinfo.com/127.0.0.1#5335 -ipset=/parkinfo.com/gfwlist -server=/wwwicloud.com/127.0.0.1#5335 -ipset=/wwwicloud.com/gfwlist -server=/acebook.com/127.0.0.1#5335 -ipset=/acebook.com/gfwlist -server=/pobl-content.com/127.0.0.1#5335 -ipset=/pobl-content.com/gfwlist -server=/now.sh/127.0.0.1#5335 -ipset=/now.sh/gfwlist -server=/harpercollinsadvantage.com/127.0.0.1#5335 -ipset=/harpercollinsadvantage.com/gfwlist -server=/mini-windsor.com/127.0.0.1#5335 -ipset=/mini-windsor.com/gfwlist -server=/icloudsecure.net/127.0.0.1#5335 -ipset=/icloudsecure.net/gfwlist -server=/apple-expo.com/127.0.0.1#5335 -ipset=/apple-expo.com/gfwlist -server=/bmw-connecteddrive.com/127.0.0.1#5335 -ipset=/bmw-connecteddrive.com/gfwlist -server=/ebayauction.com/127.0.0.1#5335 -ipset=/ebayauction.com/gfwlist -server=/akamaitechnologies.com/127.0.0.1#5335 -ipset=/akamaitechnologies.com/gfwlist -server=/icloudo.com/127.0.0.1#5335 -ipset=/icloudo.com/gfwlist -server=/uun89.com/127.0.0.1#5335 -ipset=/uun89.com/gfwlist -server=/icloudpay.net/127.0.0.1#5335 -ipset=/icloudpay.net/gfwlist -server=/reutersagency.cn/127.0.0.1#5335 -ipset=/reutersagency.cn/gfwlist -server=/icloudnet.net/127.0.0.1#5335 -ipset=/icloudnet.net/gfwlist -server=/projectbaseline.com/127.0.0.1#5335 -ipset=/projectbaseline.com/gfwlist -server=/newscommercial.co.uk/127.0.0.1#5335 -ipset=/newscommercial.co.uk/gfwlist -server=/mastercard.com.au/127.0.0.1#5335 -ipset=/mastercard.com.au/gfwlist -server=/geeksquadservices.org/127.0.0.1#5335 -ipset=/geeksquadservices.org/gfwlist -server=/youtube.sg/127.0.0.1#5335 -ipset=/youtube.sg/gfwlist -server=/vanish.ie/127.0.0.1#5335 -ipset=/vanish.ie/gfwlist -server=/android.com/127.0.0.1#5335 -ipset=/android.com/gfwlist -server=/scholar.google.com.ph/127.0.0.1#5335 -ipset=/scholar.google.com.ph/gfwlist -server=/instagramhilecim.com/127.0.0.1#5335 -ipset=/instagramhilecim.com/gfwlist -server=/apple.hamburg/127.0.0.1#5335 -ipset=/apple.hamburg/gfwlist -server=/init.shop/127.0.0.1#5335 -ipset=/init.shop/gfwlist -server=/visa.cl/127.0.0.1#5335 -ipset=/visa.cl/gfwlist -server=/scholar.google.co.uk/127.0.0.1#5335 -ipset=/scholar.google.co.uk/gfwlist -server=/i-cable.com/127.0.0.1#5335 -ipset=/i-cable.com/gfwlist -server=/icloud.org/127.0.0.1#5335 -ipset=/icloud.org/gfwlist -server=/nike.xn--hxt814e/127.0.0.1#5335 -ipset=/nike.xn--hxt814e/gfwlist -server=/icloud.om/127.0.0.1#5335 -ipset=/icloud.om/gfwlist -server=/icloud.lv/127.0.0.1#5335 -ipset=/icloud.lv/gfwlist -server=/facebookmarketingpartner.com/127.0.0.1#5335 -ipset=/facebookmarketingpartner.com/gfwlist -server=/bmwofcentralpa.com/127.0.0.1#5335 -ipset=/bmwofcentralpa.com/gfwlist -server=/paypall.com/127.0.0.1#5335 -ipset=/paypall.com/gfwlist -server=/bitcoin.org/127.0.0.1#5335 -ipset=/bitcoin.org/gfwlist -server=/nike.ci/127.0.0.1#5335 -ipset=/nike.ci/gfwlist -server=/thescottishsun.co.uk/127.0.0.1#5335 -ipset=/thescottishsun.co.uk/gfwlist -server=/bloomberglp.com/127.0.0.1#5335 -ipset=/bloomberglp.com/gfwlist -server=/mini.com/127.0.0.1#5335 -ipset=/mini.com/gfwlist -server=/disneysubscription.com/127.0.0.1#5335 -ipset=/disneysubscription.com/gfwlist -server=/volvobuses.co.nz/127.0.0.1#5335 -ipset=/volvobuses.co.nz/gfwlist -server=/git.io/127.0.0.1#5335 -ipset=/git.io/gfwlist -server=/icloud-content.com/127.0.0.1#5335 -ipset=/icloud-content.com/gfwlist -server=/itripto.com/127.0.0.1#5335 -ipset=/itripto.com/gfwlist -server=/tutanota.com/127.0.0.1#5335 -ipset=/tutanota.com/gfwlist -server=/wholesaleonlinemart.com/127.0.0.1#5335 -ipset=/wholesaleonlinemart.com/gfwlist -server=/wholesalefine.com/127.0.0.1#5335 -ipset=/wholesalefine.com/gfwlist -server=/bmw-connecteddrive.my/127.0.0.1#5335 -ipset=/bmw-connecteddrive.my/gfwlist -server=/iamakamai.net/127.0.0.1#5335 -ipset=/iamakamai.net/gfwlist -server=/mini.com.gr/127.0.0.1#5335 -ipset=/mini.com.gr/gfwlist -server=/5lml.com/127.0.0.1#5335 -ipset=/5lml.com/gfwlist -server=/avinin.com/127.0.0.1#5335 -ipset=/avinin.com/gfwlist -server=/pwnedpasswords.com/127.0.0.1#5335 -ipset=/pwnedpasswords.com/gfwlist -server=/voatour.com/127.0.0.1#5335 -ipset=/voatour.com/gfwlist -server=/bmw-motorrad.nl/127.0.0.1#5335 -ipset=/bmw-motorrad.nl/gfwlist -server=/swisssign.ch/127.0.0.1#5335 -ipset=/swisssign.ch/gfwlist -server=/visa.pl/127.0.0.1#5335 -ipset=/visa.pl/gfwlist -server=/sb.sb/127.0.0.1#5335 -ipset=/sb.sb/gfwlist -server=/nikesportswear.com/127.0.0.1#5335 -ipset=/nikesportswear.com/gfwlist -server=/thebeatsheadphonesale.com/127.0.0.1#5335 -ipset=/thebeatsheadphonesale.com/gfwlist -server=/tteshop.com/127.0.0.1#5335 -ipset=/tteshop.com/gfwlist -server=/stackauth.com/127.0.0.1#5335 -ipset=/stackauth.com/gfwlist -server=/tradevip1.com/127.0.0.1#5335 -ipset=/tradevip1.com/gfwlist -server=/buzzav.com/127.0.0.1#5335 -ipset=/buzzav.com/gfwlist -server=/topbeatsforsale.com/127.0.0.1#5335 -ipset=/topbeatsforsale.com/gfwlist -server=/topbeatsdealer.com/127.0.0.1#5335 -ipset=/topbeatsdealer.com/gfwlist -server=/cdn-terapeak.com/127.0.0.1#5335 -ipset=/cdn-terapeak.com/gfwlist -server=/rolfoundation.org/127.0.0.1#5335 -ipset=/rolfoundation.org/gfwlist -server=/bmw.mq/127.0.0.1#5335 -ipset=/bmw.mq/gfwlist -server=/kodi.wiki/127.0.0.1#5335 -ipset=/kodi.wiki/gfwlist -server=/marvelsuperheroseptember.com/127.0.0.1#5335 -ipset=/marvelsuperheroseptember.com/gfwlist -server=/the-monster-beats.com/127.0.0.1#5335 -ipset=/the-monster-beats.com/gfwlist -server=/hpservices.com/127.0.0.1#5335 -ipset=/hpservices.com/gfwlist -server=/zeriamerikes.com/127.0.0.1#5335 -ipset=/zeriamerikes.com/gfwlist -server=/nintendo.com/127.0.0.1#5335 -ipset=/nintendo.com/gfwlist -server=/apple.us/127.0.0.1#5335 -ipset=/apple.us/gfwlist -server=/myhulu.com/127.0.0.1#5335 -ipset=/myhulu.com/gfwlist -server=/visaeurope.si/127.0.0.1#5335 -ipset=/visaeurope.si/gfwlist -server=/fragrancebay.com/127.0.0.1#5335 -ipset=/fragrancebay.com/gfwlist -server=/szcheapmonsterheadphones.com/127.0.0.1#5335 -ipset=/szcheapmonsterheadphones.com/gfwlist -server=/sustainthesound.com/127.0.0.1#5335 -ipset=/sustainthesound.com/gfwlist -server=/starbuckssummergame.ca/127.0.0.1#5335 -ipset=/starbuckssummergame.ca/gfwlist -server=/awayoutgame.com/127.0.0.1#5335 -ipset=/awayoutgame.com/gfwlist -server=/amazonbusinessblog.com/127.0.0.1#5335 -ipset=/amazonbusinessblog.com/gfwlist -server=/mgo-images.com/127.0.0.1#5335 -ipset=/mgo-images.com/gfwlist -server=/ebay-confirm.com/127.0.0.1#5335 -ipset=/ebay-confirm.com/gfwlist -server=/superearsenjoy.com/127.0.0.1#5335 -ipset=/superearsenjoy.com/gfwlist -server=/swiftcapital.com/127.0.0.1#5335 -ipset=/swiftcapital.com/gfwlist -server=/pixinsight.com.tw/127.0.0.1#5335 -ipset=/pixinsight.com.tw/gfwlist -server=/atlasonepoint.com/127.0.0.1#5335 -ipset=/atlasonepoint.com/gfwlist -server=/billpoint.us/127.0.0.1#5335 -ipset=/billpoint.us/gfwlist -server=/automobile.fr/127.0.0.1#5335 -ipset=/automobile.fr/gfwlist -server=/jitsi.org/127.0.0.1#5335 -ipset=/jitsi.org/gfwlist -server=/miniwholesaleconnect.com/127.0.0.1#5335 -ipset=/miniwholesaleconnect.com/gfwlist -server=/lolshop.co.kr/127.0.0.1#5335 -ipset=/lolshop.co.kr/gfwlist -server=/disney.pt/127.0.0.1#5335 -ipset=/disney.pt/gfwlist -server=/bbycastatic.ca/127.0.0.1#5335 -ipset=/bbycastatic.ca/gfwlist -server=/bowenpress.com/127.0.0.1#5335 -ipset=/bowenpress.com/gfwlist -server=/specialtyheadphones.com/127.0.0.1#5335 -ipset=/specialtyheadphones.com/gfwlist -server=/dlfacebook.com/127.0.0.1#5335 -ipset=/dlfacebook.com/gfwlist -server=/associates-amazon.com/127.0.0.1#5335 -ipset=/associates-amazon.com/gfwlist -server=/secomtrust.net/127.0.0.1#5335 -ipset=/secomtrust.net/gfwlist -server=/predictivetechnologies.com/127.0.0.1#5335 -ipset=/predictivetechnologies.com/gfwlist -server=/browserleaks.com/127.0.0.1#5335 -ipset=/browserleaks.com/gfwlist -server=/appleexpo.info/127.0.0.1#5335 -ipset=/appleexpo.info/gfwlist -server=/sneakerpage.net/127.0.0.1#5335 -ipset=/sneakerpage.net/gfwlist -server=/translatewiki.org/127.0.0.1#5335 -ipset=/translatewiki.org/gfwlist -server=/voanoticias.com/127.0.0.1#5335 -ipset=/voanoticias.com/gfwlist -server=/pricelesstv.com/127.0.0.1#5335 -ipset=/pricelesstv.com/gfwlist -server=/agzy1.com/127.0.0.1#5335 -ipset=/agzy1.com/gfwlist -server=/intel.eu/127.0.0.1#5335 -ipset=/intel.eu/gfwlist -server=/researchkit.hk/127.0.0.1#5335 -ipset=/researchkit.hk/gfwlist -server=/icloudmail.net/127.0.0.1#5335 -ipset=/icloudmail.net/gfwlist -server=/shop-headphones.net/127.0.0.1#5335 -ipset=/shop-headphones.net/gfwlist -server=/bridgestonevan.com/127.0.0.1#5335 -ipset=/bridgestonevan.com/gfwlist -server=/btt904.com/127.0.0.1#5335 -ipset=/btt904.com/gfwlist -server=/shoers.com/127.0.0.1#5335 -ipset=/shoers.com/gfwlist -server=/opentranslatorstothings.org/127.0.0.1#5335 -ipset=/opentranslatorstothings.org/gfwlist -server=/bmwstepconnections.com/127.0.0.1#5335 -ipset=/bmwstepconnections.com/gfwlist -server=/nike.com.br/127.0.0.1#5335 -ipset=/nike.com.br/gfwlist -server=/sanvaras.com/127.0.0.1#5335 -ipset=/sanvaras.com/gfwlist -server=/travelex.co.nz/127.0.0.1#5335 -ipset=/travelex.co.nz/gfwlist -server=/minilaval.com/127.0.0.1#5335 -ipset=/minilaval.com/gfwlist -server=/visa.com.kh/127.0.0.1#5335 -ipset=/visa.com.kh/gfwlist -server=/prostudiobeatscybersale.com/127.0.0.1#5335 -ipset=/prostudiobeatscybersale.com/gfwlist -server=/promonsterbeatsbydre.com/127.0.0.1#5335 -ipset=/promonsterbeatsbydre.com/gfwlist -server=/powerbeatsbydrdre.com/127.0.0.1#5335 -ipset=/powerbeatsbydrdre.com/gfwlist -server=/lol-europe.com/127.0.0.1#5335 -ipset=/lol-europe.com/gfwlist -server=/evise.com/127.0.0.1#5335 -ipset=/evise.com/gfwlist -server=/nikepromax.com/127.0.0.1#5335 -ipset=/nikepromax.com/gfwlist -server=/minivancouver.ca/127.0.0.1#5335 -ipset=/minivancouver.ca/gfwlist -server=/personeelsland.com/127.0.0.1#5335 -ipset=/personeelsland.com/gfwlist -server=/store-bridgestonesports.com/127.0.0.1#5335 -ipset=/store-bridgestonesports.com/gfwlist -server=/cbsi.com/127.0.0.1#5335 -ipset=/cbsi.com/gfwlist -server=/lgsalesportal.com/127.0.0.1#5335 -ipset=/lgsalesportal.com/gfwlist -server=/billpoint.info/127.0.0.1#5335 -ipset=/billpoint.info/gfwlist -server=/volvotrucks.ph/127.0.0.1#5335 -ipset=/volvotrucks.ph/gfwlist -server=/beatsfactorycollection.com/127.0.0.1#5335 -ipset=/beatsfactorycollection.com/gfwlist -server=/xlstudio.com/127.0.0.1#5335 -ipset=/xlstudio.com/gfwlist -server=/bmw-motorrad.bg/127.0.0.1#5335 -ipset=/bmw-motorrad.bg/gfwlist -server=/offerairjordanlebron.com/127.0.0.1#5335 -ipset=/offerairjordanlebron.com/gfwlist -server=/nhncorp.jp/127.0.0.1#5335 -ipset=/nhncorp.jp/gfwlist -server=/sbnation.com/127.0.0.1#5335 -ipset=/sbnation.com/gfwlist -server=/newschristmasshopping.com/127.0.0.1#5335 -ipset=/newschristmasshopping.com/gfwlist -server=/volvobuses.com.tw/127.0.0.1#5335 -ipset=/volvobuses.com.tw/gfwlist -server=/newlysprung.net/127.0.0.1#5335 -ipset=/newlysprung.net/gfwlist -server=/bmwusatires.com/127.0.0.1#5335 -ipset=/bmwusatires.com/gfwlist -server=/newestbeatsbydre.com/127.0.0.1#5335 -ipset=/newestbeatsbydre.com/gfwlist -server=/newbeatsblackfriday.com/127.0.0.1#5335 -ipset=/newbeatsblackfriday.com/gfwlist -server=/negoziomonsterbeats.com/127.0.0.1#5335 -ipset=/negoziomonsterbeats.com/gfwlist -server=/nikebetrue.com/127.0.0.1#5335 -ipset=/nikebetrue.com/gfwlist -server=/abcheadphones.com/127.0.0.1#5335 -ipset=/abcheadphones.com/gfwlist -server=/gamer-cds.cdn.hinet.net/127.0.0.1#5335 -ipset=/gamer-cds.cdn.hinet.net/gfwlist -server=/pdxbmw.com/127.0.0.1#5335 -ipset=/pdxbmw.com/gfwlist -server=/msads.net/127.0.0.1#5335 -ipset=/msads.net/gfwlist -server=/scholar.google.co.jp/127.0.0.1#5335 -ipset=/scholar.google.co.jp/gfwlist -server=/racked.com/127.0.0.1#5335 -ipset=/racked.com/gfwlist -server=/gameon-masters.com/127.0.0.1#5335 -ipset=/gameon-masters.com/gfwlist -server=/globalspec.com/127.0.0.1#5335 -ipset=/globalspec.com/gfwlist -server=/mybeatsbydrestudio.com/127.0.0.1#5335 -ipset=/mybeatsbydrestudio.com/gfwlist -server=/webobjects.co.uk/127.0.0.1#5335 -ipset=/webobjects.co.uk/gfwlist -server=/beatsearbudsheadphoness.com/127.0.0.1#5335 -ipset=/beatsearbudsheadphoness.com/gfwlist -server=/ms4dre.com/127.0.0.1#5335 -ipset=/ms4dre.com/gfwlist -server=/monstersdebea.com/127.0.0.1#5335 -ipset=/monstersdebea.com/gfwlist -server=/blogspot.qa/127.0.0.1#5335 -ipset=/blogspot.qa/gfwlist -server=/monsterproduct.net/127.0.0.1#5335 -ipset=/monsterproduct.net/gfwlist -server=/thomsonreuters.es/127.0.0.1#5335 -ipset=/thomsonreuters.es/gfwlist -server=/kindle.in/127.0.0.1#5335 -ipset=/kindle.in/gfwlist -server=/54647.online/127.0.0.1#5335 -ipset=/54647.online/gfwlist -server=/js.org/127.0.0.1#5335 -ipset=/js.org/gfwlist -server=/worldhack.com/127.0.0.1#5335 -ipset=/worldhack.com/gfwlist -server=/monsterbeatstang.com/127.0.0.1#5335 -ipset=/monsterbeatstang.com/gfwlist -server=/myfoxchicago.com/127.0.0.1#5335 -ipset=/myfoxchicago.com/gfwlist -server=/zohoschools.com/127.0.0.1#5335 -ipset=/zohoschools.com/gfwlist -server=/businessfocus.io/127.0.0.1#5335 -ipset=/businessfocus.io/gfwlist -server=/fortnite.com/127.0.0.1#5335 -ipset=/fortnite.com/gfwlist -server=/v8.dev/127.0.0.1#5335 -ipset=/v8.dev/gfwlist -server=/yahoo.is/127.0.0.1#5335 -ipset=/yahoo.is/gfwlist -server=/alphabet.de/127.0.0.1#5335 -ipset=/alphabet.de/gfwlist -server=/monsterbeatsonlinestoreuk.com/127.0.0.1#5335 -ipset=/monsterbeatsonlinestoreuk.com/gfwlist -server=/bmw.com.ar/127.0.0.1#5335 -ipset=/bmw.com.ar/gfwlist -server=/nikeb.com/127.0.0.1#5335 -ipset=/nikeb.com/gfwlist -server=/monsterbeatsmall.com/127.0.0.1#5335 -ipset=/monsterbeatsmall.com/gfwlist -server=/faebook.com/127.0.0.1#5335 -ipset=/faebook.com/gfwlist -server=/tvmost.com.hk/127.0.0.1#5335 -ipset=/tvmost.com.hk/gfwlist -server=/geforce.co.kr/127.0.0.1#5335 -ipset=/geforce.co.kr/gfwlist -server=/drdrefnac.com/127.0.0.1#5335 -ipset=/drdrefnac.com/gfwlist -server=/venmo.org/127.0.0.1#5335 -ipset=/venmo.org/gfwlist -server=/swag.live/127.0.0.1#5335 -ipset=/swag.live/gfwlist -server=/ebaydts.com/127.0.0.1#5335 -ipset=/ebaydts.com/gfwlist -server=/bestshoesale2014.net/127.0.0.1#5335 -ipset=/bestshoesale2014.net/gfwlist -server=/monsterbeatsbydreshop.com/127.0.0.1#5335 -ipset=/monsterbeatsbydreshop.com/gfwlist -server=/pearsonclinical.in/127.0.0.1#5335 -ipset=/pearsonclinical.in/gfwlist -server=/hulu.us/127.0.0.1#5335 -ipset=/hulu.us/gfwlist -server=/tiburon.com/127.0.0.1#5335 -ipset=/tiburon.com/gfwlist -server=/comodoca4.com/127.0.0.1#5335 -ipset=/comodoca4.com/gfwlist -server=/apple.tt/127.0.0.1#5335 -ipset=/apple.tt/gfwlist -server=/monsterbeatsbydre-usa.com/127.0.0.1#5335 -ipset=/monsterbeatsbydre-usa.com/gfwlist -server=/minispecialoffers.ca/127.0.0.1#5335 -ipset=/minispecialoffers.ca/gfwlist -server=/geek-squads.net/127.0.0.1#5335 -ipset=/geek-squads.net/gfwlist -server=/scholar.google.com.py/127.0.0.1#5335 -ipset=/scholar.google.com.py/gfwlist -server=/ebaycourse.com/127.0.0.1#5335 -ipset=/ebaycourse.com/gfwlist -server=/omscr.com/127.0.0.1#5335 -ipset=/omscr.com/gfwlist -server=/monsterbeatsbydrdre-usa.com/127.0.0.1#5335 -ipset=/monsterbeatsbydrdre-usa.com/gfwlist -server=/leagueoflegends.com/127.0.0.1#5335 -ipset=/leagueoflegends.com/gfwlist -server=/beatsbydrdreoutlet.com/127.0.0.1#5335 -ipset=/beatsbydrdreoutlet.com/gfwlist -server=/coolmonster.net/127.0.0.1#5335 -ipset=/coolmonster.net/gfwlist -server=/ospray.net/127.0.0.1#5335 -ipset=/ospray.net/gfwlist -server=/myfoxcharlotte.com/127.0.0.1#5335 -ipset=/myfoxcharlotte.com/gfwlist -server=/electricluxury.com/127.0.0.1#5335 -ipset=/electricluxury.com/gfwlist -server=/huffingtonpost.es/127.0.0.1#5335 -ipset=/huffingtonpost.es/gfwlist -server=/monsterbeatsau.com/127.0.0.1#5335 -ipset=/monsterbeatsau.com/gfwlist -server=/unravel2.com/127.0.0.1#5335 -ipset=/unravel2.com/gfwlist -server=/bloombergforeducation.com/127.0.0.1#5335 -ipset=/bloombergforeducation.com/gfwlist -server=/islamiccenterofnewlondon.com/127.0.0.1#5335 -ipset=/islamiccenterofnewlondon.com/gfwlist -server=/easportsactiveonline.com/127.0.0.1#5335 -ipset=/easportsactiveonline.com/gfwlist -server=/dungeonkeeper.com.cn/127.0.0.1#5335 -ipset=/dungeonkeeper.com.cn/gfwlist -server=/branchportal.com/127.0.0.1#5335 -ipset=/branchportal.com/gfwlist -server=/microsoftsilverlight.org/127.0.0.1#5335 -ipset=/microsoftsilverlight.org/gfwlist -server=/gfw.press/127.0.0.1#5335 -ipset=/gfw.press/gfwlist -server=/telesell.com/127.0.0.1#5335 -ipset=/telesell.com/gfwlist -server=/monsterbeats-onsale.com/127.0.0.1#5335 -ipset=/monsterbeats-onsale.com/gfwlist -server=/leagueoflegendsscripts.com/127.0.0.1#5335 -ipset=/leagueoflegendsscripts.com/gfwlist -server=/monster-beats-headphones.com/127.0.0.1#5335 -ipset=/monster-beats-headphones.com/gfwlist -server=/facebookhome.com/127.0.0.1#5335 -ipset=/facebookhome.com/gfwlist -server=/paypal-signin.us/127.0.0.1#5335 -ipset=/paypal-signin.us/gfwlist -server=/mmonsterheadphones.net/127.0.0.1#5335 -ipset=/mmonsterheadphones.net/gfwlist -server=/yo1health.com/127.0.0.1#5335 -ipset=/yo1health.com/gfwlist -server=/bcrncdn.com/127.0.0.1#5335 -ipset=/bcrncdn.com/gfwlist -server=/troisrivieresmini.com/127.0.0.1#5335 -ipset=/troisrivieresmini.com/gfwlist -server=/pinterest.com.au/127.0.0.1#5335 -ipset=/pinterest.com.au/gfwlist -server=/beatsdrdre-it.com/127.0.0.1#5335 -ipset=/beatsdrdre-it.com/gfwlist -server=/bmw-welt.tv/127.0.0.1#5335 -ipset=/bmw-welt.tv/gfwlist -server=/cup.com.hk/127.0.0.1#5335 -ipset=/cup.com.hk/gfwlist -server=/voachinese.com/127.0.0.1#5335 -ipset=/voachinese.com/gfwlist -server=/passiontimes.hk/127.0.0.1#5335 -ipset=/passiontimes.hk/gfwlist -server=/marvelsdoubleagent.com/127.0.0.1#5335 -ipset=/marvelsdoubleagent.com/gfwlist -server=/bmw-motorrad.bo/127.0.0.1#5335 -ipset=/bmw-motorrad.bo/gfwlist -server=/adobedtm.com/127.0.0.1#5335 -ipset=/adobedtm.com/gfwlist -server=/facnbook.com/127.0.0.1#5335 -ipset=/facnbook.com/gfwlist -server=/intercamcashpassport.com.mx/127.0.0.1#5335 -ipset=/intercamcashpassport.com.mx/gfwlist -server=/mini.com.tr/127.0.0.1#5335 -ipset=/mini.com.tr/gfwlist -server=/ebaycafe.com/127.0.0.1#5335 -ipset=/ebaycafe.com/gfwlist -server=/cloudflare-ipfs.com/127.0.0.1#5335 -ipset=/cloudflare-ipfs.com/gfwlist -server=/akamaitech.net/127.0.0.1#5335 -ipset=/akamaitech.net/gfwlist -server=/ebayca.com/127.0.0.1#5335 -ipset=/ebayca.com/gfwlist -server=/webrtc.org/127.0.0.1#5335 -ipset=/webrtc.org/gfwlist -server=/nikeusa.com/127.0.0.1#5335 -ipset=/nikeusa.com/gfwlist -server=/pypl.net/127.0.0.1#5335 -ipset=/pypl.net/gfwlist -server=/galegroup.com/127.0.0.1#5335 -ipset=/galegroup.com/gfwlist -server=/nike-uk.com/127.0.0.1#5335 -ipset=/nike-uk.com/gfwlist -server=/v2ray.cool/127.0.0.1#5335 -ipset=/v2ray.cool/gfwlist -server=/foxsports.gt/127.0.0.1#5335 -ipset=/foxsports.gt/gfwlist -server=/bmw-motorrad.ec/127.0.0.1#5335 -ipset=/bmw-motorrad.ec/gfwlist -server=/ibeatsbydre.cc/127.0.0.1#5335 -ipset=/ibeatsbydre.cc/gfwlist -server=/icloud.ch/127.0.0.1#5335 -ipset=/icloud.ch/gfwlist -server=/pinterest.kr/127.0.0.1#5335 -ipset=/pinterest.kr/gfwlist -server=/southfloridamini.com/127.0.0.1#5335 -ipset=/southfloridamini.com/gfwlist -server=/ebay.co.ve/127.0.0.1#5335 -ipset=/ebay.co.ve/gfwlist -server=/hotbeatsonsale.com/127.0.0.1#5335 -ipset=/hotbeatsonsale.com/gfwlist -server=/bmw-jordan.com/127.0.0.1#5335 -ipset=/bmw-jordan.com/gfwlist -server=/gettyimages.hk/127.0.0.1#5335 -ipset=/gettyimages.hk/gfwlist -server=/mastercard.ua/127.0.0.1#5335 -ipset=/mastercard.ua/gfwlist -server=/headset987.com/127.0.0.1#5335 -ipset=/headset987.com/gfwlist -server=/canon.hu/127.0.0.1#5335 -ipset=/canon.hu/gfwlist -server=/veet.co.uk/127.0.0.1#5335 -ipset=/veet.co.uk/gfwlist -server=/topbeatsbydrdreoutlet.com/127.0.0.1#5335 -ipset=/topbeatsbydrdreoutlet.com/gfwlist -server=/microsoft.de/127.0.0.1#5335 -ipset=/microsoft.de/gfwlist -server=/bloombergprep.com/127.0.0.1#5335 -ipset=/bloombergprep.com/gfwlist -server=/minidurham.ca/127.0.0.1#5335 -ipset=/minidurham.ca/gfwlist -server=/headphoneses.com/127.0.0.1#5335 -ipset=/headphoneses.com/gfwlist -server=/aimei133.com/127.0.0.1#5335 -ipset=/aimei133.com/gfwlist -server=/dragonagekeep.com/127.0.0.1#5335 -ipset=/dragonagekeep.com/gfwlist -server=/classicnike.com/127.0.0.1#5335 -ipset=/classicnike.com/gfwlist -server=/freebasics.com/127.0.0.1#5335 -ipset=/freebasics.com/gfwlist -server=/ebayshop.com/127.0.0.1#5335 -ipset=/ebayshop.com/gfwlist -server=/gobeatsye.com/127.0.0.1#5335 -ipset=/gobeatsye.com/gfwlist -server=/openresty.org/127.0.0.1#5335 -ipset=/openresty.org/gfwlist -server=/bmw-albania.com/127.0.0.1#5335 -ipset=/bmw-albania.com/gfwlist -server=/ausbeatsbydrdre.com/127.0.0.1#5335 -ipset=/ausbeatsbydrdre.com/gfwlist -server=/citizenlab.org/127.0.0.1#5335 -ipset=/citizenlab.org/gfwlist -server=/gmnetworks.net/127.0.0.1#5335 -ipset=/gmnetworks.net/gfwlist -server=/alphabet.fr/127.0.0.1#5335 -ipset=/alphabet.fr/gfwlist -server=/dmed.technology/127.0.0.1#5335 -ipset=/dmed.technology/gfwlist -server=/ieeefoundation.org/127.0.0.1#5335 -ipset=/ieeefoundation.org/gfwlist -server=/frcasquesbeats.com/127.0.0.1#5335 -ipset=/frcasquesbeats.com/gfwlist -server=/chickstagram.com/127.0.0.1#5335 -ipset=/chickstagram.com/gfwlist -server=/blogspot.mk/127.0.0.1#5335 -ipset=/blogspot.mk/gfwlist -server=/bloombergvault.com/127.0.0.1#5335 -ipset=/bloombergvault.com/gfwlist -server=/drebeats-france.com/127.0.0.1#5335 -ipset=/drebeats-france.com/gfwlist -server=/haskell.org/127.0.0.1#5335 -ipset=/haskell.org/gfwlist -server=/paypalshopping.net/127.0.0.1#5335 -ipset=/paypalshopping.net/gfwlist -server=/etheadphones.com/127.0.0.1#5335 -ipset=/etheadphones.com/gfwlist -server=/huluusa.com/127.0.0.1#5335 -ipset=/huluusa.com/gfwlist -server=/nikesb.com/127.0.0.1#5335 -ipset=/nikesb.com/gfwlist -server=/mastercard.ba/127.0.0.1#5335 -ipset=/mastercard.ba/gfwlist -server=/drebeatstudio.com/127.0.0.1#5335 -ipset=/drebeatstudio.com/gfwlist -server=/hplip.net/127.0.0.1#5335 -ipset=/hplip.net/gfwlist -server=/bmw.com.uy/127.0.0.1#5335 -ipset=/bmw.com.uy/gfwlist -server=/bmw-motorrad.rs/127.0.0.1#5335 -ipset=/bmw-motorrad.rs/gfwlist -server=/paypal.ca/127.0.0.1#5335 -ipset=/paypal.ca/gfwlist -server=/physiology.org/127.0.0.1#5335 -ipset=/physiology.org/gfwlist -server=/wix.com/127.0.0.1#5335 -ipset=/wix.com/gfwlist -server=/drebeatsforsaleus.com/127.0.0.1#5335 -ipset=/drebeatsforsaleus.com/gfwlist -server=/bestbuycanadaltd.ca/127.0.0.1#5335 -ipset=/bestbuycanadaltd.ca/gfwlist -server=/akamainewzealand.com/127.0.0.1#5335 -ipset=/akamainewzealand.com/gfwlist -server=/lsnzxzy1.com/127.0.0.1#5335 -ipset=/lsnzxzy1.com/gfwlist -server=/chaturbate.com/127.0.0.1#5335 -ipset=/chaturbate.com/gfwlist -server=/lih.kg/127.0.0.1#5335 -ipset=/lih.kg/gfwlist -server=/ebay.jp/127.0.0.1#5335 -ipset=/ebay.jp/gfwlist -server=/nikeclub.com/127.0.0.1#5335 -ipset=/nikeclub.com/gfwlist -server=/kktix.com/127.0.0.1#5335 -ipset=/kktix.com/gfwlist -server=/diddykongracing.com/127.0.0.1#5335 -ipset=/diddykongracing.com/gfwlist -server=/bahamut.com.tw/127.0.0.1#5335 -ipset=/bahamut.com.tw/gfwlist -server=/drebeats-studio.com/127.0.0.1#5335 -ipset=/drebeats-studio.com/gfwlist -server=/amebame.com/127.0.0.1#5335 -ipset=/amebame.com/gfwlist -server=/minigrandriver.com/127.0.0.1#5335 -ipset=/minigrandriver.com/gfwlist -server=/enterprisessl.com/127.0.0.1#5335 -ipset=/enterprisessl.com/gfwlist -server=/drdreheadphonesusstore.com/127.0.0.1#5335 -ipset=/drdreheadphonesusstore.com/gfwlist -server=/pinterest.vn/127.0.0.1#5335 -ipset=/pinterest.vn/gfwlist -server=/instagramlogin.com/127.0.0.1#5335 -ipset=/instagramlogin.com/gfwlist -server=/drdrebeatssale7.com/127.0.0.1#5335 -ipset=/drdrebeatssale7.com/gfwlist -server=/akamaitechnologies.net/127.0.0.1#5335 -ipset=/akamaitechnologies.net/gfwlist -server=/centos.org/127.0.0.1#5335 -ipset=/centos.org/gfwlist -server=/visaglobalfinance.com/127.0.0.1#5335 -ipset=/visaglobalfinance.com/gfwlist -server=/oauthz.com/127.0.0.1#5335 -ipset=/oauthz.com/gfwlist -server=/faesebook.com/127.0.0.1#5335 -ipset=/faesebook.com/gfwlist -server=/v8project.org/127.0.0.1#5335 -ipset=/v8project.org/gfwlist -server=/drdrebeats-headphone.com/127.0.0.1#5335 -ipset=/drdrebeats-headphone.com/gfwlist -server=/discountbeatsstore.com/127.0.0.1#5335 -ipset=/discountbeatsstore.com/gfwlist -server=/bridgestonegz.com/127.0.0.1#5335 -ipset=/bridgestonegz.com/gfwlist -server=/microsoftcloud.com/127.0.0.1#5335 -ipset=/microsoftcloud.com/gfwlist -server=/mach-os.net/127.0.0.1#5335 -ipset=/mach-os.net/gfwlist -server=/azureserviceprofiler.com/127.0.0.1#5335 -ipset=/azureserviceprofiler.com/gfwlist -server=/gannettdigital.com/127.0.0.1#5335 -ipset=/gannettdigital.com/gfwlist -server=/mr-tireman.jp/127.0.0.1#5335 -ipset=/mr-tireman.jp/gfwlist -server=/battlefield.com/127.0.0.1#5335 -ipset=/battlefield.com/gfwlist -server=/gloryofheracles.com/127.0.0.1#5335 -ipset=/gloryofheracles.com/gfwlist -server=/trithucvn.net/127.0.0.1#5335 -ipset=/trithucvn.net/gfwlist -server=/paypalcommunity.com/127.0.0.1#5335 -ipset=/paypalcommunity.com/gfwlist -server=/linefriends.com.tw/127.0.0.1#5335 -ipset=/linefriends.com.tw/gfwlist -server=/azure-dns.info/127.0.0.1#5335 -ipset=/azure-dns.info/gfwlist -server=/vkontakte.ru/127.0.0.1#5335 -ipset=/vkontakte.ru/gfwlist -server=/mingw.org/127.0.0.1#5335 -ipset=/mingw.org/gfwlist -server=/custombeatsdeals.com/127.0.0.1#5335 -ipset=/custombeatsdeals.com/gfwlist -server=/sitepoint.com/127.0.0.1#5335 -ipset=/sitepoint.com/gfwlist -server=/afewmomentswith.com/127.0.0.1#5335 -ipset=/afewmomentswith.com/gfwlist -server=/visa.com.tr/127.0.0.1#5335 -ipset=/visa.com.tr/gfwlist -server=/drdrebeatsdiscount.com/127.0.0.1#5335 -ipset=/drdrebeatsdiscount.com/gfwlist -server=/cuffiesaldi.com/127.0.0.1#5335 -ipset=/cuffiesaldi.com/gfwlist -server=/ibook.net/127.0.0.1#5335 -ipset=/ibook.net/gfwlist -server=/wholecitiesfoundation.org/127.0.0.1#5335 -ipset=/wholecitiesfoundation.org/gfwlist -server=/beatsua.com/127.0.0.1#5335 -ipset=/beatsua.com/gfwlist -server=/cozydrdrebeats.com/127.0.0.1#5335 -ipset=/cozydrdrebeats.com/gfwlist -server=/techliquidators.com/127.0.0.1#5335 -ipset=/techliquidators.com/gfwlist -server=/cmhalq.com/127.0.0.1#5335 -ipset=/cmhalq.com/gfwlist -server=/soccermatchpass.com/127.0.0.1#5335 -ipset=/soccermatchpass.com/gfwlist -server=/nikeshoesmarket.com/127.0.0.1#5335 -ipset=/nikeshoesmarket.com/gfwlist -server=/pixnet.pro/127.0.0.1#5335 -ipset=/pixnet.pro/gfwlist -server=/volvotrucks.ba/127.0.0.1#5335 -ipset=/volvotrucks.ba/gfwlist -server=/mastercard.pt/127.0.0.1#5335 -ipset=/mastercard.pt/gfwlist -server=/nikegenealogy.com/127.0.0.1#5335 -ipset=/nikegenealogy.com/gfwlist -server=/cheapnikeoutlet.com/127.0.0.1#5335 -ipset=/cheapnikeoutlet.com/gfwlist -server=/cbsimg.net/127.0.0.1#5335 -ipset=/cbsimg.net/gfwlist -server=/foxentertainment.com/127.0.0.1#5335 -ipset=/foxentertainment.com/gfwlist -server=/cdnlab.live/127.0.0.1#5335 -ipset=/cdnlab.live/gfwlist -server=/kissjav.com/127.0.0.1#5335 -ipset=/kissjav.com/gfwlist -server=/windy.com/127.0.0.1#5335 -ipset=/windy.com/gfwlist -server=/cheapwirelessbeats.com/127.0.0.1#5335 -ipset=/cheapwirelessbeats.com/gfwlist -server=/adobelogin.com/127.0.0.1#5335 -ipset=/adobelogin.com/gfwlist -server=/cheapshoesvip.com/127.0.0.1#5335 -ipset=/cheapshoesvip.com/gfwlist -server=/sony.lt/127.0.0.1#5335 -ipset=/sony.lt/gfwlist -server=/ntdtvla.com/127.0.0.1#5335 -ipset=/ntdtvla.com/gfwlist -server=/ds-vod-abematv.akamaized.net/127.0.0.1#5335 -ipset=/ds-vod-abematv.akamaized.net/gfwlist -server=/cheapmonsterbeatssale.com/127.0.0.1#5335 -ipset=/cheapmonsterbeatssale.com/gfwlist -server=/buypass.se/127.0.0.1#5335 -ipset=/buypass.se/gfwlist -server=/alpherafs.co.nz/127.0.0.1#5335 -ipset=/alpherafs.co.nz/gfwlist -server=/bestbuysgeeksquad.com/127.0.0.1#5335 -ipset=/bestbuysgeeksquad.com/gfwlist -server=/livephotos.tv/127.0.0.1#5335 -ipset=/livephotos.tv/gfwlist -server=/att-japan.com/127.0.0.1#5335 -ipset=/att-japan.com/gfwlist -server=/ginzasonypark.jp/127.0.0.1#5335 -ipset=/ginzasonypark.jp/gfwlist -server=/cheapheadsetshop.com/127.0.0.1#5335 -ipset=/cheapheadsetshop.com/gfwlist -server=/paypal-survey.org/127.0.0.1#5335 -ipset=/paypal-survey.org/gfwlist -server=/buycheapbeatsbydre.com/127.0.0.1#5335 -ipset=/buycheapbeatsbydre.com/gfwlist -server=/zeit.co/127.0.0.1#5335 -ipset=/zeit.co/gfwlist -server=/cheapbeatsla.com/127.0.0.1#5335 -ipset=/cheapbeatsla.com/gfwlist -server=/cheapbeatsheadphones.us/127.0.0.1#5335 -ipset=/cheapbeatsheadphones.us/gfwlist -server=/mastercard.com.ng/127.0.0.1#5335 -ipset=/mastercard.com.ng/gfwlist -server=/volvotrucks.com.kw/127.0.0.1#5335 -ipset=/volvotrucks.com.kw/gfwlist -server=/unpkg.com/127.0.0.1#5335 -ipset=/unpkg.com/gfwlist -server=/hpvirtualthin.com/127.0.0.1#5335 -ipset=/hpvirtualthin.com/gfwlist -server=/zeitworld.com/127.0.0.1#5335 -ipset=/zeitworld.com/gfwlist -server=/huluim.com/127.0.0.1#5335 -ipset=/huluim.com/gfwlist -server=/monstercheapbeatss.com/127.0.0.1#5335 -ipset=/monstercheapbeatss.com/gfwlist -server=/liberapay.org/127.0.0.1#5335 -ipset=/liberapay.org/gfwlist -server=/visa.com.pa/127.0.0.1#5335 -ipset=/visa.com.pa/gfwlist -server=/guccimuseo.com/127.0.0.1#5335 -ipset=/guccimuseo.com/gfwlist -server=/aweencore.com/127.0.0.1#5335 -ipset=/aweencore.com/gfwlist -server=/ebay-discoveries.com/127.0.0.1#5335 -ipset=/ebay-discoveries.com/gfwlist -server=/news.com.au/127.0.0.1#5335 -ipset=/news.com.au/gfwlist -server=/independentoperatorcn.com/127.0.0.1#5335 -ipset=/independentoperatorcn.com/gfwlist -server=/paypal-prepaid.com/127.0.0.1#5335 -ipset=/paypal-prepaid.com/gfwlist -server=/rakuten-static.com/127.0.0.1#5335 -ipset=/rakuten-static.com/gfwlist -server=/iebay.com/127.0.0.1#5335 -ipset=/iebay.com/gfwlist -server=/alphabet.us/127.0.0.1#5335 -ipset=/alphabet.us/gfwlist -server=/outletbeatsshop.com/127.0.0.1#5335 -ipset=/outletbeatsshop.com/gfwlist -server=/casquemonsterbeats.com/127.0.0.1#5335 -ipset=/casquemonsterbeats.com/gfwlist -server=/casquebeatspascher2013.com/127.0.0.1#5335 -ipset=/casquebeatspascher2013.com/gfwlist -server=/s-bluemix.net/127.0.0.1#5335 -ipset=/s-bluemix.net/gfwlist -server=/casquebeatsmer.net/127.0.0.1#5335 -ipset=/casquebeatsmer.net/gfwlist -server=/ebayinternetsalestax.com/127.0.0.1#5335 -ipset=/ebayinternetsalestax.com/gfwlist -server=/primevideo.tv/127.0.0.1#5335 -ipset=/primevideo.tv/gfwlist -server=/bloombergtaxtech.com/127.0.0.1#5335 -ipset=/bloombergtaxtech.com/gfwlist -server=/foxsports.com.gt/127.0.0.1#5335 -ipset=/foxsports.com.gt/gfwlist -server=/foxsoccer.tv/127.0.0.1#5335 -ipset=/foxsoccer.tv/gfwlist -server=/buybeatsbydre-uk.com/127.0.0.1#5335 -ipset=/buybeatsbydre-uk.com/gfwlist -server=/mini-connected.co.uk/127.0.0.1#5335 -ipset=/mini-connected.co.uk/gfwlist -server=/buy-from-shanghai.com/127.0.0.1#5335 -ipset=/buy-from-shanghai.com/gfwlist -server=/javbus22.com/127.0.0.1#5335 -ipset=/javbus22.com/gfwlist -server=/volvobuses.at/127.0.0.1#5335 -ipset=/volvobuses.at/gfwlist -server=/royalsocietypublishing.org/127.0.0.1#5335 -ipset=/royalsocietypublishing.org/gfwlist -server=/visa.ca/127.0.0.1#5335 -ipset=/visa.ca/gfwlist -server=/fonolia.com/127.0.0.1#5335 -ipset=/fonolia.com/gfwlist -server=/directvhouston.com/127.0.0.1#5335 -ipset=/directvhouston.com/gfwlist -server=/biitii.com/127.0.0.1#5335 -ipset=/biitii.com/gfwlist -server=/tmsnrt.rs/127.0.0.1#5335 -ipset=/tmsnrt.rs/gfwlist -server=/ebayglobalshipping.com/127.0.0.1#5335 -ipset=/ebayglobalshipping.com/gfwlist -server=/beatswholesale.us/127.0.0.1#5335 -ipset=/beatswholesale.us/gfwlist -server=/vtvan.com/127.0.0.1#5335 -ipset=/vtvan.com/gfwlist -server=/beatsshop-uk.com/127.0.0.1#5335 -ipset=/beatsshop-uk.com/gfwlist -server=/x.com/127.0.0.1#5335 -ipset=/x.com/gfwlist -server=/facebo-ok.com/127.0.0.1#5335 -ipset=/facebo-ok.com/gfwlist -server=/airwick.hr/127.0.0.1#5335 -ipset=/airwick.hr/gfwlist -server=/nike.shop/127.0.0.1#5335 -ipset=/nike.shop/gfwlist -server=/spiritclubs.com/127.0.0.1#5335 -ipset=/spiritclubs.com/gfwlist -server=/youtube.ca/127.0.0.1#5335 -ipset=/youtube.ca/gfwlist -server=/beatspromonsterjp.com/127.0.0.1#5335 -ipset=/beatspromonsterjp.com/gfwlist -server=/beatspillnewcolor.com/127.0.0.1#5335 -ipset=/beatspillnewcolor.com/gfwlist -server=/foxsoccerplus.com/127.0.0.1#5335 -ipset=/foxsoccerplus.com/gfwlist -server=/mini.nc/127.0.0.1#5335 -ipset=/mini.nc/gfwlist -server=/beatsoutletanytime.com/127.0.0.1#5335 -ipset=/beatsoutletanytime.com/gfwlist -server=/priceless.org/127.0.0.1#5335 -ipset=/priceless.org/gfwlist -server=/bridgestonerewards.com/127.0.0.1#5335 -ipset=/bridgestonerewards.com/gfwlist -server=/starwarsjedifallenorder.com/127.0.0.1#5335 -ipset=/starwarsjedifallenorder.com/gfwlist -server=/mcisco.com/127.0.0.1#5335 -ipset=/mcisco.com/gfwlist -server=/drebeatsoutletstore.com/127.0.0.1#5335 -ipset=/drebeatsoutletstore.com/gfwlist -server=/yahoo.ca/127.0.0.1#5335 -ipset=/yahoo.ca/gfwlist -server=/vanish.pt/127.0.0.1#5335 -ipset=/vanish.pt/gfwlist -server=/paypal-europe.com/127.0.0.1#5335 -ipset=/paypal-europe.com/gfwlist -server=/picsee.pro/127.0.0.1#5335 -ipset=/picsee.pro/gfwlist -server=/natgeomaps.com/127.0.0.1#5335 -ipset=/natgeomaps.com/gfwlist -server=/eamythic.net/127.0.0.1#5335 -ipset=/eamythic.net/gfwlist -server=/alphabet.com.pl/127.0.0.1#5335 -ipset=/alphabet.com.pl/gfwlist -server=/beatsinsingapore.com/127.0.0.1#5335 -ipset=/beatsinsingapore.com/gfwlist -server=/beatsincanada.com/127.0.0.1#5335 -ipset=/beatsincanada.com/gfwlist -server=/travelex.qa/127.0.0.1#5335 -ipset=/travelex.qa/gfwlist -server=/gfashion.com/127.0.0.1#5335 -ipset=/gfashion.com/gfwlist -server=/visaluxuryhotelcollection.com/127.0.0.1#5335 -ipset=/visaluxuryhotelcollection.com/gfwlist -server=/vimeo.fr/127.0.0.1#5335 -ipset=/vimeo.fr/gfwlist -server=/beatsheadphonesale.com/127.0.0.1#5335 -ipset=/beatsheadphonesale.com/gfwlist -server=/etvonline.hk/127.0.0.1#5335 -ipset=/etvonline.hk/gfwlist -server=/pearson.es/127.0.0.1#5335 -ipset=/pearson.es/gfwlist -server=/yamaxun.com/127.0.0.1#5335 -ipset=/yamaxun.com/gfwlist -server=/mini.com.mt/127.0.0.1#5335 -ipset=/mini.com.mt/gfwlist -server=/bmwdelawarevalley.com/127.0.0.1#5335 -ipset=/bmwdelawarevalley.com/gfwlist -server=/paypal-gift.com/127.0.0.1#5335 -ipset=/paypal-gift.com/gfwlist -server=/muji.eu/127.0.0.1#5335 -ipset=/muji.eu/gfwlist -server=/icloud.hu/127.0.0.1#5335 -ipset=/icloud.hu/gfwlist -server=/ibm.com/127.0.0.1#5335 -ipset=/ibm.com/gfwlist -server=/casquebeatsbydrdresolohd.com/127.0.0.1#5335 -ipset=/casquebeatsbydrdresolohd.com/gfwlist -server=/bridgestonetire.ca/127.0.0.1#5335 -ipset=/bridgestonetire.ca/gfwlist -server=/openssl.org/127.0.0.1#5335 -ipset=/openssl.org/gfwlist -server=/beatselectronic.net/127.0.0.1#5335 -ipset=/beatselectronic.net/gfwlist -server=/telegram.org/127.0.0.1#5335 -ipset=/telegram.org/gfwlist -server=/softbank-telecom.com/127.0.0.1#5335 -ipset=/softbank-telecom.com/gfwlist -server=/icloud.com/127.0.0.1#5335 -ipset=/icloud.com/gfwlist -server=/beatsforcheap-usa.com/127.0.0.1#5335 -ipset=/beatsforcheap-usa.com/gfwlist -server=/ius.io/127.0.0.1#5335 -ipset=/ius.io/gfwlist -server=/amazon.com.au/127.0.0.1#5335 -ipset=/amazon.com.au/gfwlist -server=/abow.jp/127.0.0.1#5335 -ipset=/abow.jp/gfwlist -server=/beatsfactoroutlets.com/127.0.0.1#5335 -ipset=/beatsfactoroutlets.com/gfwlist -server=/beatsfacstore.com/127.0.0.1#5335 -ipset=/beatsfacstore.com/gfwlist -server=/bmw.lt/127.0.0.1#5335 -ipset=/bmw.lt/gfwlist -server=/ebayforcharity.org/127.0.0.1#5335 -ipset=/ebayforcharity.org/gfwlist -server=/flickr.net/127.0.0.1#5335 -ipset=/flickr.net/gfwlist -server=/eracom.com.tw/127.0.0.1#5335 -ipset=/eracom.com.tw/gfwlist -server=/beatsdresolo2013.com/127.0.0.1#5335 -ipset=/beatsdresolo2013.com/gfwlist -server=/thomsonreuters.com.hk/127.0.0.1#5335 -ipset=/thomsonreuters.com.hk/gfwlist -server=/webkit.org/127.0.0.1#5335 -ipset=/webkit.org/gfwlist -server=/yandex.ru/127.0.0.1#5335 -ipset=/yandex.ru/gfwlist -server=/firestonetire.com/127.0.0.1#5335 -ipset=/firestonetire.com/gfwlist -server=/fotiolia.com/127.0.0.1#5335 -ipset=/fotiolia.com/gfwlist -server=/youtube.tv/127.0.0.1#5335 -ipset=/youtube.tv/gfwlist -server=/monsterbeatsbydreaustraliacheap.com/127.0.0.1#5335 -ipset=/monsterbeatsbydreaustraliacheap.com/gfwlist -server=/connaissancesfinancierespratiques.ca/127.0.0.1#5335 -ipset=/connaissancesfinancierespratiques.ca/gfwlist -server=/nikeshoescity.com/127.0.0.1#5335 -ipset=/nikeshoescity.com/gfwlist -server=/beatsdrdre2014.com/127.0.0.1#5335 -ipset=/beatsdrdre2014.com/gfwlist -server=/amazonaws.co.uk/127.0.0.1#5335 -ipset=/amazonaws.co.uk/gfwlist -server=/beatsdanmark2013.com/127.0.0.1#5335 -ipset=/beatsdanmark2013.com/gfwlist -server=/lgappstv.com/127.0.0.1#5335 -ipset=/lgappstv.com/gfwlist -server=/ebayenterprise.tv/127.0.0.1#5335 -ipset=/ebayenterprise.tv/gfwlist -server=/ipadair.com.br/127.0.0.1#5335 -ipset=/ipadair.com.br/gfwlist -server=/hashicorp.com/127.0.0.1#5335 -ipset=/hashicorp.com/gfwlist -server=/accountpaypal.com/127.0.0.1#5335 -ipset=/accountpaypal.com/gfwlist -server=/berkeley.edu/127.0.0.1#5335 -ipset=/berkeley.edu/gfwlist -server=/audiomonsterbeatsonline.com/127.0.0.1#5335 -ipset=/audiomonsterbeatsonline.com/gfwlist -server=/beatsbydrew.com/127.0.0.1#5335 -ipset=/beatsbydrew.com/gfwlist -server=/mastercard.dk/127.0.0.1#5335 -ipset=/mastercard.dk/gfwlist -server=/beatsbydrevipde.com/127.0.0.1#5335 -ipset=/beatsbydrevipde.com/gfwlist -server=/beatsbydreuk.com/127.0.0.1#5335 -ipset=/beatsbydreuk.com/gfwlist -server=/beatsbydresaleonlines-nz.com/127.0.0.1#5335 -ipset=/beatsbydresaleonlines-nz.com/gfwlist -server=/microsoftadc.com/127.0.0.1#5335 -ipset=/microsoftadc.com/gfwlist -server=/worldsecureemail.com/127.0.0.1#5335 -ipset=/worldsecureemail.com/gfwlist -server=/onmanorama.com/127.0.0.1#5335 -ipset=/onmanorama.com/gfwlist -server=/bmw.rs/127.0.0.1#5335 -ipset=/bmw.rs/gfwlist -server=/msftauth.net/127.0.0.1#5335 -ipset=/msftauth.net/gfwlist -server=/beatsbydresingaporesale.com/127.0.0.1#5335 -ipset=/beatsbydresingaporesale.com/gfwlist -server=/foxnewsrundown.com/127.0.0.1#5335 -ipset=/foxnewsrundown.com/gfwlist -server=/akamai-platform-staging.com/127.0.0.1#5335 -ipset=/akamai-platform-staging.com/gfwlist -server=/nokiantyres.com/127.0.0.1#5335 -ipset=/nokiantyres.com/gfwlist -server=/bmw-motorrad.ch/127.0.0.1#5335 -ipset=/bmw-motorrad.ch/gfwlist -server=/beatsbydreshop-uk.com/127.0.0.1#5335 -ipset=/beatsbydreshop-uk.com/gfwlist -server=/mini-connected.fi/127.0.0.1#5335 -ipset=/mini-connected.fi/gfwlist -server=/kamisama-day.jp/127.0.0.1#5335 -ipset=/kamisama-day.jp/gfwlist -server=/natgeokidsbooks.co.uk/127.0.0.1#5335 -ipset=/natgeokidsbooks.co.uk/gfwlist -server=/linearcollider.org/127.0.0.1#5335 -ipset=/linearcollider.org/gfwlist -server=/beatsbydresalesonline-australia.com/127.0.0.1#5335 -ipset=/beatsbydresalesonline-australia.com/gfwlist -server=/intel.uk/127.0.0.1#5335 -ipset=/intel.uk/gfwlist -server=/9to5google.com/127.0.0.1#5335 -ipset=/9to5google.com/gfwlist -server=/coronavirusnow.com/127.0.0.1#5335 -ipset=/coronavirusnow.com/gfwlist -server=/beatsbydreonlinesale-nz.com/127.0.0.1#5335 -ipset=/beatsbydreonlinesale-nz.com/gfwlist -server=/madvr.com/127.0.0.1#5335 -ipset=/madvr.com/gfwlist -server=/youtube.co.at/127.0.0.1#5335 -ipset=/youtube.co.at/gfwlist -server=/youtube.rs/127.0.0.1#5335 -ipset=/youtube.rs/gfwlist -server=/sonyentertainmentnetwork.com/127.0.0.1#5335 -ipset=/sonyentertainmentnetwork.com/gfwlist -server=/beatsbydreofficialdanmark.com/127.0.0.1#5335 -ipset=/beatsbydreofficialdanmark.com/gfwlist -server=/beatsbydrenls.com/127.0.0.1#5335 -ipset=/beatsbydrenls.com/gfwlist -server=/alpherafs.com.my/127.0.0.1#5335 -ipset=/alpherafs.com.my/gfwlist -server=/beatsbydreirelandsale.com/127.0.0.1#5335 -ipset=/beatsbydreirelandsale.com/gfwlist -server=/openvpn.net/127.0.0.1#5335 -ipset=/openvpn.net/gfwlist -server=/beatsbydreireland-sales.com/127.0.0.1#5335 -ipset=/beatsbydreireland-sales.com/gfwlist -server=/beatsbydrehut.com/127.0.0.1#5335 -ipset=/beatsbydrehut.com/gfwlist -server=/graneodin.com.mx/127.0.0.1#5335 -ipset=/graneodin.com.mx/gfwlist -server=/beatsbydrehd.com/127.0.0.1#5335 -ipset=/beatsbydrehd.com/gfwlist -server=/youtube.co.cr/127.0.0.1#5335 -ipset=/youtube.co.cr/gfwlist -server=/akamai-sucks.net/127.0.0.1#5335 -ipset=/akamai-sucks.net/gfwlist -server=/amazonbusiness.org/127.0.0.1#5335 -ipset=/amazonbusiness.org/gfwlist -server=/metartnetwork.com/127.0.0.1#5335 -ipset=/metartnetwork.com/gfwlist -server=/beatsbydrediscountonline.net/127.0.0.1#5335 -ipset=/beatsbydrediscountonline.net/gfwlist -server=/akastream.com/127.0.0.1#5335 -ipset=/akastream.com/gfwlist -server=/beatsbydredealscybermonday.com/127.0.0.1#5335 -ipset=/beatsbydredealscybermonday.com/gfwlist -server=/createspace.com/127.0.0.1#5335 -ipset=/createspace.com/gfwlist -server=/beatsbydredealsblackfriday.com/127.0.0.1#5335 -ipset=/beatsbydredealsblackfriday.com/gfwlist -server=/volvotrucks.nl/127.0.0.1#5335 -ipset=/volvotrucks.nl/gfwlist -server=/visa.com.lk/127.0.0.1#5335 -ipset=/visa.com.lk/gfwlist -server=/beatsbydrecheap-outletstore.com/127.0.0.1#5335 -ipset=/beatsbydrecheap-outletstore.com/gfwlist -server=/metro.co.uk/127.0.0.1#5335 -ipset=/metro.co.uk/gfwlist -server=/beatsbydrecasquesfr.com/127.0.0.1#5335 -ipset=/beatsbydrecasquesfr.com/gfwlist -server=/instagramizlenme.com/127.0.0.1#5335 -ipset=/instagramizlenme.com/gfwlist -server=/bmw-driving-center.co.kr/127.0.0.1#5335 -ipset=/bmw-driving-center.co.kr/gfwlist -server=/digitalocean.com/127.0.0.1#5335 -ipset=/digitalocean.com/gfwlist -server=/earngeek.com/127.0.0.1#5335 -ipset=/earngeek.com/gfwlist -server=/googleapis.com/127.0.0.1#5335 -ipset=/googleapis.com/gfwlist -server=/beatsbydreauofficial.com/127.0.0.1#5335 -ipset=/beatsbydreauofficial.com/gfwlist -server=/protonstatus.com/127.0.0.1#5335 -ipset=/protonstatus.com/gfwlist -server=/beatsbydre411.com/127.0.0.1#5335 -ipset=/beatsbydre411.com/gfwlist -server=/travelcontroller.com/127.0.0.1#5335 -ipset=/travelcontroller.com/gfwlist -server=/beatsbydre-us.com/127.0.0.1#5335 -ipset=/beatsbydre-us.com/gfwlist -server=/sandisk.co.uk/127.0.0.1#5335 -ipset=/sandisk.co.uk/gfwlist -server=/paypal-mobilemoney.com/127.0.0.1#5335 -ipset=/paypal-mobilemoney.com/gfwlist -server=/hpcpi.com/127.0.0.1#5335 -ipset=/hpcpi.com/gfwlist -server=/positivessl.com/127.0.0.1#5335 -ipset=/positivessl.com/gfwlist -server=/paypal-biz.com/127.0.0.1#5335 -ipset=/paypal-biz.com/gfwlist -server=/beatsbydre-chen.com/127.0.0.1#5335 -ipset=/beatsbydre-chen.com/gfwlist -server=/beatsbydre-beatsheadphone.com/127.0.0.1#5335 -ipset=/beatsbydre-beatsheadphone.com/gfwlist -server=/beatsbydrdres.com/127.0.0.1#5335 -ipset=/beatsbydrdres.com/gfwlist -server=/mariobroswii.com/127.0.0.1#5335 -ipset=/mariobroswii.com/gfwlist -server=/ic.ac.uk/127.0.0.1#5335 -ipset=/ic.ac.uk/gfwlist -server=/pearsonassessment.nl/127.0.0.1#5335 -ipset=/pearsonassessment.nl/gfwlist -server=/vgcareers.net/127.0.0.1#5335 -ipset=/vgcareers.net/gfwlist -server=/ciscofax.com/127.0.0.1#5335 -ipset=/ciscofax.com/gfwlist -server=/beatsbydrdre-store.us/127.0.0.1#5335 -ipset=/beatsbydrdre-store.us/gfwlist -server=/netflixdnstest7.com/127.0.0.1#5335 -ipset=/netflixdnstest7.com/gfwlist -server=/akamaitech.com/127.0.0.1#5335 -ipset=/akamaitech.com/gfwlist -server=/hwgo.com/127.0.0.1#5335 -ipset=/hwgo.com/gfwlist -server=/disneycruisebrasil.com/127.0.0.1#5335 -ipset=/disneycruisebrasil.com/gfwlist -server=/nationalgeographicpartners.com/127.0.0.1#5335 -ipset=/nationalgeographicpartners.com/gfwlist -server=/beatsbydrdre-headphones.com/127.0.0.1#5335 -ipset=/beatsbydrdre-headphones.com/gfwlist -server=/disney.id/127.0.0.1#5335 -ipset=/disney.id/gfwlist -server=/vfsco.pl/127.0.0.1#5335 -ipset=/vfsco.pl/gfwlist -server=/briantreepayments.tv/127.0.0.1#5335 -ipset=/briantreepayments.tv/gfwlist -server=/bmw-motorrad.dz/127.0.0.1#5335 -ipset=/bmw-motorrad.dz/gfwlist -server=/beatsbeatsmonster.com/127.0.0.1#5335 -ipset=/beatsbeatsmonster.com/gfwlist -server=/bloombergnext.com/127.0.0.1#5335 -ipset=/bloombergnext.com/gfwlist -server=/beatsbydreoordopjes.com/127.0.0.1#5335 -ipset=/beatsbydreoordopjes.com/gfwlist -server=/beatsaudifonos.com/127.0.0.1#5335 -ipset=/beatsaudifonos.com/gfwlist -server=/beatsallsale.com/127.0.0.1#5335 -ipset=/beatsallsale.com/gfwlist -server=/pugpig.com/127.0.0.1#5335 -ipset=/pugpig.com/gfwlist -server=/beats123.com/127.0.0.1#5335 -ipset=/beats123.com/gfwlist -server=/beatstoreusa.com/127.0.0.1#5335 -ipset=/beatstoreusa.com/gfwlist -server=/dw.com/127.0.0.1#5335 -ipset=/dw.com/gfwlist -server=/touchsmartpc.com/127.0.0.1#5335 -ipset=/touchsmartpc.com/gfwlist -server=/now-ashare.com/127.0.0.1#5335 -ipset=/now-ashare.com/gfwlist -server=/freefblikes.com/127.0.0.1#5335 -ipset=/freefblikes.com/gfwlist -server=/youtubego.id/127.0.0.1#5335 -ipset=/youtubego.id/gfwlist -server=/beatmonstersaustralia.net/127.0.0.1#5335 -ipset=/beatmonstersaustralia.net/gfwlist -server=/appdomain.cloud/127.0.0.1#5335 -ipset=/appdomain.cloud/gfwlist -server=/disneyenconcert.com/127.0.0.1#5335 -ipset=/disneyenconcert.com/gfwlist -server=/beatbydreuk2014.com/127.0.0.1#5335 -ipset=/beatbydreuk2014.com/gfwlist -server=/applecentar.co.rs/127.0.0.1#5335 -ipset=/applecentar.co.rs/gfwlist -server=/oncars.in/127.0.0.1#5335 -ipset=/oncars.in/gfwlist -server=/supplybestjerseys.com/127.0.0.1#5335 -ipset=/supplybestjerseys.com/gfwlist -server=/beatbydremonster.com/127.0.0.1#5335 -ipset=/beatbydremonster.com/gfwlist -server=/flatpak.org/127.0.0.1#5335 -ipset=/flatpak.org/gfwlist -server=/ebayclassifiedsgroup.org/127.0.0.1#5335 -ipset=/ebayclassifiedsgroup.org/gfwlist -server=/beatbd.com/127.0.0.1#5335 -ipset=/beatbd.com/gfwlist -server=/kindleoasis.info/127.0.0.1#5335 -ipset=/kindleoasis.info/gfwlist -server=/awetv.com/127.0.0.1#5335 -ipset=/awetv.com/gfwlist -server=/anfutong.com/127.0.0.1#5335 -ipset=/anfutong.com/gfwlist -server=/fontshop-prod-responsive-images.s3.amazonaws.com/127.0.0.1#5335 -ipset=/fontshop-prod-responsive-images.s3.amazonaws.com/gfwlist -server=/ntd.com/127.0.0.1#5335 -ipset=/ntd.com/gfwlist -server=/auricularesbeatsmarkt.com/127.0.0.1#5335 -ipset=/auricularesbeatsmarkt.com/gfwlist -server=/auricularesbeatsbaratosshop.com/127.0.0.1#5335 -ipset=/auricularesbeatsbaratosshop.com/gfwlist -server=/llnw.net/127.0.0.1#5335 -ipset=/llnw.net/gfwlist -server=/audiobeatsau.com/127.0.0.1#5335 -ipset=/audiobeatsau.com/gfwlist -server=/vfsco.ie/127.0.0.1#5335 -ipset=/vfsco.ie/gfwlist -server=/newsmax.com/127.0.0.1#5335 -ipset=/newsmax.com/gfwlist -server=/aucheapbeats.com/127.0.0.1#5335 -ipset=/aucheapbeats.com/gfwlist -server=/applepay.berlin/127.0.0.1#5335 -ipset=/applepay.berlin/gfwlist -server=/verisign.com.tw/127.0.0.1#5335 -ipset=/verisign.com.tw/gfwlist -server=/cnnmoneystream.com/127.0.0.1#5335 -ipset=/cnnmoneystream.com/gfwlist -server=/instagramq.com/127.0.0.1#5335 -ipset=/instagramq.com/gfwlist -server=/hpshooping.com/127.0.0.1#5335 -ipset=/hpshooping.com/gfwlist -server=/bridgestonetire.com/127.0.0.1#5335 -ipset=/bridgestonetire.com/gfwlist -server=/5beatsbydre.com/127.0.0.1#5335 -ipset=/5beatsbydre.com/gfwlist -server=/chromium.org/127.0.0.1#5335 -ipset=/chromium.org/gfwlist -server=/2drdrebeats.com/127.0.0.1#5335 -ipset=/2drdrebeats.com/gfwlist -server=/av1688.cc/127.0.0.1#5335 -ipset=/av1688.cc/gfwlist -server=/2013pascherbeatsbydre.com/127.0.0.1#5335 -ipset=/2013pascherbeatsbydre.com/gfwlist -server=/mini-bahrain.com/127.0.0.1#5335 -ipset=/mini-bahrain.com/gfwlist -server=/bloomberg.com.br/127.0.0.1#5335 -ipset=/bloomberg.com.br/gfwlist -server=/2013beatsbydreshop.com/127.0.0.1#5335 -ipset=/2013beatsbydreshop.com/gfwlist -server=/telebay.com/127.0.0.1#5335 -ipset=/telebay.com/gfwlist -server=/adidas.ie/127.0.0.1#5335 -ipset=/adidas.ie/gfwlist -server=/bingagencyawards.com/127.0.0.1#5335 -ipset=/bingagencyawards.com/gfwlist -server=/vaultify.com/127.0.0.1#5335 -ipset=/vaultify.com/gfwlist -server=/accuweather.com/127.0.0.1#5335 -ipset=/accuweather.com/gfwlist -server=/thebeatsbydre.com/127.0.0.1#5335 -ipset=/thebeatsbydre.com/gfwlist -server=/artstationmedia.com/127.0.0.1#5335 -ipset=/artstationmedia.com/gfwlist -server=/volvo.com/127.0.0.1#5335 -ipset=/volvo.com/gfwlist -server=/facebookmsn.com/127.0.0.1#5335 -ipset=/facebookmsn.com/gfwlist -server=/ssl-images-amazon.com/127.0.0.1#5335 -ipset=/ssl-images-amazon.com/gfwlist -server=/bmw-connecteddrive.pt/127.0.0.1#5335 -ipset=/bmw-connecteddrive.pt/gfwlist -server=/easyanticheat.net/127.0.0.1#5335 -ipset=/easyanticheat.net/gfwlist -server=/globalsign.net/127.0.0.1#5335 -ipset=/globalsign.net/gfwlist -server=/billmelater.com/127.0.0.1#5335 -ipset=/billmelater.com/gfwlist -server=/nikeonlinestore.com/127.0.0.1#5335 -ipset=/nikeonlinestore.com/gfwlist -server=/primeday.info/127.0.0.1#5335 -ipset=/primeday.info/gfwlist -server=/4ebaytraders.com/127.0.0.1#5335 -ipset=/4ebaytraders.com/gfwlist -server=/youtube.kz/127.0.0.1#5335 -ipset=/youtube.kz/gfwlist -server=/bmw-dubai.com/127.0.0.1#5335 -ipset=/bmw-dubai.com/gfwlist -server=/gdansk-amazon.com/127.0.0.1#5335 -ipset=/gdansk-amazon.com/gfwlist -server=/rentaride.de/127.0.0.1#5335 -ipset=/rentaride.de/gfwlist -server=/google.com.br/127.0.0.1#5335 -ipset=/google.com.br/gfwlist -server=/solostudioksale.com/127.0.0.1#5335 -ipset=/solostudioksale.com/gfwlist -server=/bmw-asia.com/127.0.0.1#5335 -ipset=/bmw-asia.com/gfwlist -server=/scholar.google.lt/127.0.0.1#5335 -ipset=/scholar.google.lt/gfwlist -server=/pixiv.org/127.0.0.1#5335 -ipset=/pixiv.org/gfwlist -server=/dropboxcaptcha.com/127.0.0.1#5335 -ipset=/dropboxcaptcha.com/gfwlist -server=/downloadsforipod.com/127.0.0.1#5335 -ipset=/downloadsforipod.com/gfwlist -server=/akamai-access.net/127.0.0.1#5335 -ipset=/akamai-access.net/gfwlist -server=/alphabet.lv/127.0.0.1#5335 -ipset=/alphabet.lv/gfwlist -server=/amazonsdi.com/127.0.0.1#5335 -ipset=/amazonsdi.com/gfwlist -server=/amazonpay.in/127.0.0.1#5335 -ipset=/amazonpay.in/gfwlist -server=/ieee-cas.org/127.0.0.1#5335 -ipset=/ieee-cas.org/gfwlist -server=/scholar.google.com.ar/127.0.0.1#5335 -ipset=/scholar.google.com.ar/gfwlist -server=/free-aa.com/127.0.0.1#5335 -ipset=/free-aa.com/gfwlist -server=/bmw-kuwait.com/127.0.0.1#5335 -ipset=/bmw-kuwait.com/gfwlist -server=/paypalservice.com/127.0.0.1#5335 -ipset=/paypalservice.com/gfwlist -server=/cbspressexpress.com/127.0.0.1#5335 -ipset=/cbspressexpress.com/gfwlist -server=/huanyuju.com/127.0.0.1#5335 -ipset=/huanyuju.com/gfwlist -server=/mearki.com/127.0.0.1#5335 -ipset=/mearki.com/gfwlist -server=/bloombergbeta.com/127.0.0.1#5335 -ipset=/bloombergbeta.com/gfwlist -server=/raspberrypi.org/127.0.0.1#5335 -ipset=/raspberrypi.org/gfwlist -server=/eaassets-a.akamaihd.net/127.0.0.1#5335 -ipset=/eaassets-a.akamaihd.net/gfwlist -server=/titanfall.com/127.0.0.1#5335 -ipset=/titanfall.com/gfwlist -server=/itunes12days.com/127.0.0.1#5335 -ipset=/itunes12days.com/gfwlist -server=/playartifact.com/127.0.0.1#5335 -ipset=/playartifact.com/gfwlist -server=/ebaystatic.com/127.0.0.1#5335 -ipset=/ebaystatic.com/gfwlist -server=/my45.com/127.0.0.1#5335 -ipset=/my45.com/gfwlist -server=/pricelessarabia.com/127.0.0.1#5335 -ipset=/pricelessarabia.com/gfwlist -server=/directvcinema.com/127.0.0.1#5335 -ipset=/directvcinema.com/gfwlist -server=/skyoceanrescue.it/127.0.0.1#5335 -ipset=/skyoceanrescue.it/gfwlist -server=/appledarwin.net/127.0.0.1#5335 -ipset=/appledarwin.net/gfwlist -server=/volvotrucks.co.ao/127.0.0.1#5335 -ipset=/volvotrucks.co.ao/gfwlist -server=/bioware.com/127.0.0.1#5335 -ipset=/bioware.com/gfwlist -server=/openapiservice.com/127.0.0.1#5335 -ipset=/openapiservice.com/gfwlist -server=/amazon.it/127.0.0.1#5335 -ipset=/amazon.it/gfwlist -server=/amazon.fr/127.0.0.1#5335 -ipset=/amazon.fr/gfwlist -server=/amazon.com/127.0.0.1#5335 -ipset=/amazon.com/gfwlist -server=/facebookappcenter.org/127.0.0.1#5335 -ipset=/facebookappcenter.org/gfwlist -server=/cam4.com/127.0.0.1#5335 -ipset=/cam4.com/gfwlist -server=/12diasderegalosdeitunes.co.cr/127.0.0.1#5335 -ipset=/12diasderegalosdeitunes.co.cr/gfwlist -server=/book.com.tw/127.0.0.1#5335 -ipset=/book.com.tw/gfwlist -server=/thegatewaypundit.com/127.0.0.1#5335 -ipset=/thegatewaypundit.com/gfwlist -server=/nikecompany.com/127.0.0.1#5335 -ipset=/nikecompany.com/gfwlist -server=/amazon.co.uk/127.0.0.1#5335 -ipset=/amazon.co.uk/gfwlist -server=/amazon.ca/127.0.0.1#5335 -ipset=/amazon.ca/gfwlist -server=/amazon.ae/127.0.0.1#5335 -ipset=/amazon.ae/gfwlist -server=/paily.org/127.0.0.1#5335 -ipset=/paily.org/gfwlist -server=/bmw.si/127.0.0.1#5335 -ipset=/bmw.si/gfwlist -server=/amazonauthorinsights.com/127.0.0.1#5335 -ipset=/amazonauthorinsights.com/gfwlist -server=/bitly.com/127.0.0.1#5335 -ipset=/bitly.com/gfwlist -server=/amaaozn.com/127.0.0.1#5335 -ipset=/amaaozn.com/gfwlist -server=/aboutamazon.pl/127.0.0.1#5335 -ipset=/aboutamazon.pl/gfwlist -server=/paypalx.com/127.0.0.1#5335 -ipset=/paypalx.com/gfwlist -server=/webtype.com/127.0.0.1#5335 -ipset=/webtype.com/gfwlist -server=/fortuneinsight.com/127.0.0.1#5335 -ipset=/fortuneinsight.com/gfwlist -server=/xn--fiqs8sxootzz.xn--hxt814e/127.0.0.1#5335 -ipset=/xn--fiqs8sxootzz.xn--hxt814e/gfwlist -server=/nintendowii.com/127.0.0.1#5335 -ipset=/nintendowii.com/gfwlist -server=/oculusforbusiness.com/127.0.0.1#5335 -ipset=/oculusforbusiness.com/gfwlist -server=/aboutamazon.fr/127.0.0.1#5335 -ipset=/aboutamazon.fr/gfwlist -server=/azure.com/127.0.0.1#5335 -ipset=/azure.com/gfwlist -server=/carebay.com/127.0.0.1#5335 -ipset=/carebay.com/gfwlist -server=/a2z.com/127.0.0.1#5335 -ipset=/a2z.com/gfwlist -server=/myfoxlosangeles.com/127.0.0.1#5335 -ipset=/myfoxlosangeles.com/gfwlist -server=/vanish.com.co/127.0.0.1#5335 -ipset=/vanish.com.co/gfwlist -server=/primevideo.com/127.0.0.1#5335 -ipset=/primevideo.com/gfwlist -server=/beatsstudiosite.com/127.0.0.1#5335 -ipset=/beatsstudiosite.com/gfwlist -server=/comodoca3.com/127.0.0.1#5335 -ipset=/comodoca3.com/gfwlist -server=/bextbuy.com/127.0.0.1#5335 -ipset=/bextbuy.com/gfwlist -server=/foxcincy.com/127.0.0.1#5335 -ipset=/foxcincy.com/gfwlist -server=/accountpaypal.net/127.0.0.1#5335 -ipset=/accountpaypal.net/gfwlist -server=/riotgames.co.kr/127.0.0.1#5335 -ipset=/riotgames.co.kr/gfwlist -server=/facebookatschool.com/127.0.0.1#5335 -ipset=/facebookatschool.com/gfwlist -server=/alphera-finance.com.hk/127.0.0.1#5335 -ipset=/alphera-finance.com.hk/gfwlist -server=/ikids.com/127.0.0.1#5335 -ipset=/ikids.com/gfwlist -server=/applexpo.net/127.0.0.1#5335 -ipset=/applexpo.net/gfwlist -server=/justmysocks1.net/127.0.0.1#5335 -ipset=/justmysocks1.net/gfwlist -server=/fox247.tv/127.0.0.1#5335 -ipset=/fox247.tv/gfwlist -server=/bmwsafari.com/127.0.0.1#5335 -ipset=/bmwsafari.com/gfwlist -server=/weeklytimesnow.com.au/127.0.0.1#5335 -ipset=/weeklytimesnow.com.au/gfwlist -server=/kindle.com/127.0.0.1#5335 -ipset=/kindle.com/gfwlist -server=/elasticbeanstalk.com/127.0.0.1#5335 -ipset=/elasticbeanstalk.com/gfwlist -server=/minisovietam.vn/127.0.0.1#5335 -ipset=/minisovietam.vn/gfwlist -server=/pixplug.in/127.0.0.1#5335 -ipset=/pixplug.in/gfwlist -server=/iaablog.com/127.0.0.1#5335 -ipset=/iaablog.com/gfwlist -server=/verygoodnike.com/127.0.0.1#5335 -ipset=/verygoodnike.com/gfwlist -server=/isexlove.tw/127.0.0.1#5335 -ipset=/isexlove.tw/gfwlist -server=/containersonaws.com/127.0.0.1#5335 -ipset=/containersonaws.com/gfwlist -server=/moreheadphones.com/127.0.0.1#5335 -ipset=/moreheadphones.com/gfwlist -server=/usa-beatsbydreheadphonesonsale.net/127.0.0.1#5335 -ipset=/usa-beatsbydreheadphonesonsale.net/gfwlist -server=/mingpaotor.com/127.0.0.1#5335 -ipset=/mingpaotor.com/gfwlist -server=/ebaychina.net/127.0.0.1#5335 -ipset=/ebaychina.net/gfwlist -server=/paypal-hrsystem.com/127.0.0.1#5335 -ipset=/paypal-hrsystem.com/gfwlist -server=/cloudfront.net/127.0.0.1#5335 -ipset=/cloudfront.net/gfwlist -server=/awstrust.com/127.0.0.1#5335 -ipset=/awstrust.com/gfwlist -server=/awsedstart.com/127.0.0.1#5335 -ipset=/awsedstart.com/gfwlist -server=/akahost.net/127.0.0.1#5335 -ipset=/akahost.net/gfwlist -server=/cabletv.com.hk/127.0.0.1#5335 -ipset=/cabletv.com.hk/gfwlist -server=/awsautopilot.com/127.0.0.1#5335 -ipset=/awsautopilot.com/gfwlist -server=/mythicentertainment.net/127.0.0.1#5335 -ipset=/mythicentertainment.net/gfwlist -server=/ehtracker.org/127.0.0.1#5335 -ipset=/ehtracker.org/gfwlist -server=/instagramium.com/127.0.0.1#5335 -ipset=/instagramium.com/gfwlist -server=/heroku.me/127.0.0.1#5335 -ipset=/heroku.me/gfwlist -server=/amazonaws.tv/127.0.0.1#5335 -ipset=/amazonaws.tv/gfwlist -server=/bluemix.net/127.0.0.1#5335 -ipset=/bluemix.net/gfwlist -server=/airwick.de/127.0.0.1#5335 -ipset=/airwick.de/gfwlist -server=/durex.cz/127.0.0.1#5335 -ipset=/durex.cz/gfwlist -server=/kirbysepicyarn.com/127.0.0.1#5335 -ipset=/kirbysepicyarn.com/gfwlist -server=/alicloud.com/127.0.0.1#5335 -ipset=/alicloud.com/gfwlist -server=/alibabacloud.com.sg/127.0.0.1#5335 -ipset=/alibabacloud.com.sg/gfwlist -server=/alibabacloud.com.hk/127.0.0.1#5335 -ipset=/alibabacloud.com.hk/gfwlist -server=/half.tv/127.0.0.1#5335 -ipset=/half.tv/gfwlist -server=/microsoftadvertising.com/127.0.0.1#5335 -ipset=/microsoftadvertising.com/gfwlist -server=/toutapp.com/127.0.0.1#5335 -ipset=/toutapp.com/gfwlist -server=/digital-id.ch/127.0.0.1#5335 -ipset=/digital-id.ch/gfwlist -server=/spacex.com/127.0.0.1#5335 -ipset=/spacex.com/gfwlist -server=/volvotrucks.com/127.0.0.1#5335 -ipset=/volvotrucks.com/gfwlist -server=/ogameblog.com/127.0.0.1#5335 -ipset=/ogameblog.com/gfwlist -server=/yimg.com/127.0.0.1#5335 -ipset=/yimg.com/gfwlist -server=/oxfordartonline.com/127.0.0.1#5335 -ipset=/oxfordartonline.com/gfwlist -server=/magento.net/127.0.0.1#5335 -ipset=/magento.net/gfwlist -server=/s.team/127.0.0.1#5335 -ipset=/s.team/gfwlist -server=/google.co.ck/127.0.0.1#5335 -ipset=/google.co.ck/gfwlist -server=/mastercard.cl/127.0.0.1#5335 -ipset=/mastercard.cl/gfwlist -server=/westerndigital.com/127.0.0.1#5335 -ipset=/westerndigital.com/gfwlist -server=/quipelements.com/127.0.0.1#5335 -ipset=/quipelements.com/gfwlist -server=/nikefrance.com/127.0.0.1#5335 -ipset=/nikefrance.com/gfwlist -server=/justduckit.com/127.0.0.1#5335 -ipset=/justduckit.com/gfwlist -server=/beijingnike.com/127.0.0.1#5335 -ipset=/beijingnike.com/gfwlist -server=/bmw-drivingexperience.com/127.0.0.1#5335 -ipset=/bmw-drivingexperience.com/gfwlist -server=/bypasscensorship.org/127.0.0.1#5335 -ipset=/bypasscensorship.org/gfwlist -server=/motolia.com/127.0.0.1#5335 -ipset=/motolia.com/gfwlist -server=/x.team/127.0.0.1#5335 -ipset=/x.team/gfwlist -server=/bmw-motorrad.de/127.0.0.1#5335 -ipset=/bmw-motorrad.de/gfwlist -server=/google.fi/127.0.0.1#5335 -ipset=/google.fi/gfwlist -server=/faceboks.com/127.0.0.1#5335 -ipset=/faceboks.com/gfwlist -server=/heroku.com/127.0.0.1#5335 -ipset=/heroku.com/gfwlist -server=/ffotolia.com/127.0.0.1#5335 -ipset=/ffotolia.com/gfwlist -server=/zoho.in/127.0.0.1#5335 -ipset=/zoho.in/gfwlist -server=/newslicensing.co.uk/127.0.0.1#5335 -ipset=/newslicensing.co.uk/gfwlist -server=/o365weve-dev.com/127.0.0.1#5335 -ipset=/o365weve-dev.com/gfwlist -server=/etpress.com.hk/127.0.0.1#5335 -ipset=/etpress.com.hk/gfwlist -server=/warp.plus/127.0.0.1#5335 -ipset=/warp.plus/gfwlist -server=/disneyworld-go.com/127.0.0.1#5335 -ipset=/disneyworld-go.com/gfwlist -server=/faciometrics.com/127.0.0.1#5335 -ipset=/faciometrics.com/gfwlist -server=/sonypicturesanimation.com/127.0.0.1#5335 -ipset=/sonypicturesanimation.com/gfwlist -server=/ebayclassifieds.tv/127.0.0.1#5335 -ipset=/ebayclassifieds.tv/gfwlist -server=/bmw.pt/127.0.0.1#5335 -ipset=/bmw.pt/gfwlist -server=/mastercard.no/127.0.0.1#5335 -ipset=/mastercard.no/gfwlist -server=/enablementadobe.com/127.0.0.1#5335 -ipset=/enablementadobe.com/gfwlist -server=/disneymagicmomentsme.com/127.0.0.1#5335 -ipset=/disneymagicmomentsme.com/gfwlist -server=/maddenchampionship.com/127.0.0.1#5335 -ipset=/maddenchampionship.com/gfwlist -server=/ozvoice.org/127.0.0.1#5335 -ipset=/ozvoice.org/gfwlist -server=/longman.ch/127.0.0.1#5335 -ipset=/longman.ch/gfwlist -server=/thedailysnkr.com/127.0.0.1#5335 -ipset=/thedailysnkr.com/gfwlist -server=/adobespark.com/127.0.0.1#5335 -ipset=/adobespark.com/gfwlist -server=/pricelesssydney.com/127.0.0.1#5335 -ipset=/pricelesssydney.com/gfwlist -server=/adobeplatinumclub.com/127.0.0.1#5335 -ipset=/adobeplatinumclub.com/gfwlist -server=/finishinfo.it/127.0.0.1#5335 -ipset=/finishinfo.it/gfwlist -server=/akamai-regression.net/127.0.0.1#5335 -ipset=/akamai-regression.net/gfwlist -server=/adobelanding.com/127.0.0.1#5335 -ipset=/adobelanding.com/gfwlist -server=/akamaimagicmath.net/127.0.0.1#5335 -ipset=/akamaimagicmath.net/gfwlist -server=/americasvoice.news/127.0.0.1#5335 -ipset=/americasvoice.news/gfwlist -server=/redis.io/127.0.0.1#5335 -ipset=/redis.io/gfwlist -server=/tiktokcdn.com/127.0.0.1#5335 -ipset=/tiktokcdn.com/gfwlist -server=/deadspacegame.com/127.0.0.1#5335 -ipset=/deadspacegame.com/gfwlist -server=/adobe.ly/127.0.0.1#5335 -ipset=/adobe.ly/gfwlist -server=/pearsonelt.ch/127.0.0.1#5335 -ipset=/pearsonelt.ch/gfwlist -server=/weiyuksj.com/127.0.0.1#5335 -ipset=/weiyuksj.com/gfwlist -server=/10xfotolia.com/127.0.0.1#5335 -ipset=/10xfotolia.com/gfwlist -server=/typekit.com/127.0.0.1#5335 -ipset=/typekit.com/gfwlist -server=/xn--ruq8a011kt6y.xn--hxt814e/127.0.0.1#5335 -ipset=/xn--ruq8a011kt6y.xn--hxt814e/gfwlist -server=/needforspeed.com/127.0.0.1#5335 -ipset=/needforspeed.com/gfwlist -server=/liverail.com/127.0.0.1#5335 -ipset=/liverail.com/gfwlist -server=/postgresql.org/127.0.0.1#5335 -ipset=/postgresql.org/gfwlist -server=/azure-dns.com/127.0.0.1#5335 -ipset=/azure-dns.com/gfwlist -server=/contest.com/127.0.0.1#5335 -ipset=/contest.com/gfwlist -server=/githubassets.com/127.0.0.1#5335 -ipset=/githubassets.com/gfwlist -server=/openai.com/127.0.0.1#5335 -ipset=/openai.com/gfwlist -server=/notepad-plus-plus.org/127.0.0.1#5335 -ipset=/notepad-plus-plus.org/gfwlist -server=/pahabicilemezsurprizler.com/127.0.0.1#5335 -ipset=/pahabicilemezsurprizler.com/gfwlist -server=/verisign.dk/127.0.0.1#5335 -ipset=/verisign.dk/gfwlist -server=/lua.org/127.0.0.1#5335 -ipset=/lua.org/gfwlist -server=/bridgestonesyb.com/127.0.0.1#5335 -ipset=/bridgestonesyb.com/gfwlist -server=/jupyter.org/127.0.0.1#5335 -ipset=/jupyter.org/gfwlist -server=/swissign.li/127.0.0.1#5335 -ipset=/swissign.li/gfwlist -server=/mastercardservices.com/127.0.0.1#5335 -ipset=/mastercardservices.com/gfwlist -server=/nvidia.nl/127.0.0.1#5335 -ipset=/nvidia.nl/gfwlist -server=/iphoneplus.wang/127.0.0.1#5335 -ipset=/iphoneplus.wang/gfwlist -server=/doi.org/127.0.0.1#5335 -ipset=/doi.org/gfwlist -server=/ituneslogin.net/127.0.0.1#5335 -ipset=/ituneslogin.net/gfwlist -server=/instituteofwar.org/127.0.0.1#5335 -ipset=/instituteofwar.org/gfwlist -server=/53worldsweeps.com/127.0.0.1#5335 -ipset=/53worldsweeps.com/gfwlist -server=/nikesellorder.com/127.0.0.1#5335 -ipset=/nikesellorder.com/gfwlist -server=/apache.org/127.0.0.1#5335 -ipset=/apache.org/gfwlist -server=/msnbc.com/127.0.0.1#5335 -ipset=/msnbc.com/gfwlist -server=/whimn.com.au/127.0.0.1#5335 -ipset=/whimn.com.au/gfwlist -server=/volvobuses.in/127.0.0.1#5335 -ipset=/volvobuses.in/gfwlist -server=/blogebay.com/127.0.0.1#5335 -ipset=/blogebay.com/gfwlist -server=/xda-cdn.com/127.0.0.1#5335 -ipset=/xda-cdn.com/gfwlist -server=/volvotrucks.kg/127.0.0.1#5335 -ipset=/volvotrucks.kg/gfwlist -server=/r-project.org/127.0.0.1#5335 -ipset=/r-project.org/gfwlist -server=/watch-ebay.org/127.0.0.1#5335 -ipset=/watch-ebay.org/gfwlist -server=/visa.co.jp/127.0.0.1#5335 -ipset=/visa.co.jp/gfwlist -server=/ted.com/127.0.0.1#5335 -ipset=/ted.com/gfwlist -server=/swisssign.com/127.0.0.1#5335 -ipset=/swisssign.com/gfwlist -server=/swjedifallenorder.com/127.0.0.1#5335 -ipset=/swjedifallenorder.com/gfwlist -server=/itunesstore.co/127.0.0.1#5335 -ipset=/itunesstore.co/gfwlist -server=/unity3d.com/127.0.0.1#5335 -ipset=/unity3d.com/gfwlist -server=/vfsco.es/127.0.0.1#5335 -ipset=/vfsco.es/gfwlist -server=/hkheadline.com/127.0.0.1#5335 -ipset=/hkheadline.com/gfwlist -server=/uplay.com/127.0.0.1#5335 -ipset=/uplay.com/gfwlist -server=/outletnike.com/127.0.0.1#5335 -ipset=/outletnike.com/gfwlist -server=/jquery.com/127.0.0.1#5335 -ipset=/jquery.com/gfwlist -server=/beatssales.com/127.0.0.1#5335 -ipset=/beatssales.com/gfwlist -server=/mini.tn/127.0.0.1#5335 -ipset=/mini.tn/gfwlist -server=/ampproject.com/127.0.0.1#5335 -ipset=/ampproject.com/gfwlist -server=/volvotrucks.pk/127.0.0.1#5335 -ipset=/volvotrucks.pk/gfwlist -server=/nke6.com/127.0.0.1#5335 -ipset=/nke6.com/gfwlist -server=/adobeprojectm.com/127.0.0.1#5335 -ipset=/adobeprojectm.com/gfwlist -server=/amp.dev/127.0.0.1#5335 -ipset=/amp.dev/gfwlist -server=/microsoft.lu/127.0.0.1#5335 -ipset=/microsoft.lu/gfwlist -server=/pearsonassessment.no/127.0.0.1#5335 -ipset=/pearsonassessment.no/gfwlist -server=/ebayclassifieds.org/127.0.0.1#5335 -ipset=/ebayclassifieds.org/gfwlist -server=/finenike.com/127.0.0.1#5335 -ipset=/finenike.com/gfwlist -server=/sstatic.net/127.0.0.1#5335 -ipset=/sstatic.net/gfwlist -server=/mastercard.com.ge/127.0.0.1#5335 -ipset=/mastercard.com.ge/gfwlist -server=/mini.ma/127.0.0.1#5335 -ipset=/mini.ma/gfwlist -server=/fonts.com/127.0.0.1#5335 -ipset=/fonts.com/gfwlist -server=/mathoverflow.net/127.0.0.1#5335 -ipset=/mathoverflow.net/gfwlist -server=/disney.ca/127.0.0.1#5335 -ipset=/disney.ca/gfwlist -server=/remirepo.net/127.0.0.1#5335 -ipset=/remirepo.net/gfwlist -server=/redislabs.com/127.0.0.1#5335 -ipset=/redislabs.com/gfwlist -server=/playapex.com/127.0.0.1#5335 -ipset=/playapex.com/gfwlist -server=/mit.net/127.0.0.1#5335 -ipset=/mit.net/gfwlist -server=/javfull.net/127.0.0.1#5335 -ipset=/javfull.net/gfwlist -server=/pythonhosted.org/127.0.0.1#5335 -ipset=/pythonhosted.org/gfwlist -server=/huluad.com/127.0.0.1#5335 -ipset=/huluad.com/gfwlist -server=/golos-ameriki.ru/127.0.0.1#5335 -ipset=/golos-ameriki.ru/gfwlist -server=/bmwspecialoffers.ca/127.0.0.1#5335 -ipset=/bmwspecialoffers.ca/gfwlist -server=/apple.ie/127.0.0.1#5335 -ipset=/apple.ie/gfwlist -server=/abema.io/127.0.0.1#5335 -ipset=/abema.io/gfwlist -server=/metacpan.org/127.0.0.1#5335 -ipset=/metacpan.org/gfwlist -server=/pearson.fr/127.0.0.1#5335 -ipset=/pearson.fr/gfwlist -server=/yahoo.mw/127.0.0.1#5335 -ipset=/yahoo.mw/gfwlist -server=/askfacebook.org/127.0.0.1#5335 -ipset=/askfacebook.org/gfwlist -server=/bmw-fleet.net/127.0.0.1#5335 -ipset=/bmw-fleet.net/gfwlist -server=/bandcamp.com/127.0.0.1#5335 -ipset=/bandcamp.com/gfwlist -server=/dtlgalleryint.cloudapp.net/127.0.0.1#5335 -ipset=/dtlgalleryint.cloudapp.net/gfwlist -server=/hkgolden.media/127.0.0.1#5335 -ipset=/hkgolden.media/gfwlist -server=/fury.io/127.0.0.1#5335 -ipset=/fury.io/gfwlist -server=/foxla.tv/127.0.0.1#5335 -ipset=/foxla.tv/gfwlist -server=/visualstudio.eu/127.0.0.1#5335 -ipset=/visualstudio.eu/gfwlist -server=/visualstudio.co/127.0.0.1#5335 -ipset=/visualstudio.co/gfwlist -server=/sqlserveronlinux.com/127.0.0.1#5335 -ipset=/sqlserveronlinux.com/gfwlist -server=/talentlens.com/127.0.0.1#5335 -ipset=/talentlens.com/gfwlist -server=/kindleoasis.org/127.0.0.1#5335 -ipset=/kindleoasis.org/gfwlist -server=/sankie.net/127.0.0.1#5335 -ipset=/sankie.net/gfwlist -server=/nugettest.org/127.0.0.1#5335 -ipset=/nugettest.org/gfwlist -server=/appleinclegal.com/127.0.0.1#5335 -ipset=/appleinclegal.com/gfwlist -server=/nintendo.se/127.0.0.1#5335 -ipset=/nintendo.se/gfwlist -server=/apple.co.nz/127.0.0.1#5335 -ipset=/apple.co.nz/gfwlist -server=/hulupremium.com/127.0.0.1#5335 -ipset=/hulupremium.com/gfwlist -server=/nike-usa.com/127.0.0.1#5335 -ipset=/nike-usa.com/gfwlist -server=/bmw-group.net/127.0.0.1#5335 -ipset=/bmw-group.net/gfwlist -server=/leagueoflegends.info/127.0.0.1#5335 -ipset=/leagueoflegends.info/gfwlist -server=/msdn.com/127.0.0.1#5335 -ipset=/msdn.com/gfwlist -server=/microsoftreactor.org/127.0.0.1#5335 -ipset=/microsoftreactor.org/gfwlist -server=/att.net/127.0.0.1#5335 -ipset=/att.net/gfwlist -server=/bmw.lk/127.0.0.1#5335 -ipset=/bmw.lk/gfwlist -server=/epigeum.com/127.0.0.1#5335 -ipset=/epigeum.com/gfwlist -server=/nextdigital.com.hk/127.0.0.1#5335 -ipset=/nextdigital.com.hk/gfwlist -server=/appcenter.ms/127.0.0.1#5335 -ipset=/appcenter.ms/gfwlist -server=/hhvm.com/127.0.0.1#5335 -ipset=/hhvm.com/gfwlist -server=/guccitimeless.com/127.0.0.1#5335 -ipset=/guccitimeless.com/gfwlist -server=/acpica.com/127.0.0.1#5335 -ipset=/acpica.com/gfwlist -server=/snap-telemetry.io/127.0.0.1#5335 -ipset=/snap-telemetry.io/gfwlist -server=/openvinotoolkit.org/127.0.0.1#5335 -ipset=/openvinotoolkit.org/gfwlist -server=/protonmail.ch/127.0.0.1#5335 -ipset=/protonmail.ch/gfwlist -server=/intellinuxgraphics.net/127.0.0.1#5335 -ipset=/intellinuxgraphics.net/gfwlist -server=/binance.vision/127.0.0.1#5335 -ipset=/binance.vision/gfwlist -server=/epochtimes.de/127.0.0.1#5335 -ipset=/epochtimes.de/gfwlist -server=/bmw-connecteddrive.kr/127.0.0.1#5335 -ipset=/bmw-connecteddrive.kr/gfwlist -server=/golang.org/127.0.0.1#5335 -ipset=/golang.org/gfwlist -server=/go.dev/127.0.0.1#5335 -ipset=/go.dev/gfwlist -server=/go-lang.org/127.0.0.1#5335 -ipset=/go-lang.org/gfwlist -server=/scholar.google.lu/127.0.0.1#5335 -ipset=/scholar.google.lu/gfwlist -server=/gitlab-static.net/127.0.0.1#5335 -ipset=/gitlab-static.net/gfwlist -server=/findyourlimits.com/127.0.0.1#5335 -ipset=/findyourlimits.com/gfwlist -server=/eastore.com/127.0.0.1#5335 -ipset=/eastore.com/gfwlist -server=/whisolutions.com/127.0.0.1#5335 -ipset=/whisolutions.com/gfwlist -server=/expertmaker.com/127.0.0.1#5335 -ipset=/expertmaker.com/gfwlist -server=/akamah.com/127.0.0.1#5335 -ipset=/akamah.com/gfwlist -server=/mini-ksa.com/127.0.0.1#5335 -ipset=/mini-ksa.com/gfwlist -server=/github.dev/127.0.0.1#5335 -ipset=/github.dev/gfwlist -server=/page.link/127.0.0.1#5335 -ipset=/page.link/gfwlist -server=/npmjs.org/127.0.0.1#5335 -ipset=/npmjs.org/gfwlist -server=/gputechconf.com.au/127.0.0.1#5335 -ipset=/gputechconf.com.au/gfwlist -server=/oath.cloud/127.0.0.1#5335 -ipset=/oath.cloud/gfwlist -server=/youtube.pk/127.0.0.1#5335 -ipset=/youtube.pk/gfwlist -server=/paypal-apps.com/127.0.0.1#5335 -ipset=/paypal-apps.com/gfwlist -server=/terapeak.ca/127.0.0.1#5335 -ipset=/terapeak.ca/gfwlist -server=/google.tn/127.0.0.1#5335 -ipset=/google.tn/gfwlist -server=/flutter.dev/127.0.0.1#5335 -ipset=/flutter.dev/gfwlist -server=/newenergyfinance.com/127.0.0.1#5335 -ipset=/newenergyfinance.com/gfwlist -server=/pearsonvue.com/127.0.0.1#5335 -ipset=/pearsonvue.com/gfwlist -server=/fedoraproject.org/127.0.0.1#5335 -ipset=/fedoraproject.org/gfwlist -server=/simplify.com/127.0.0.1#5335 -ipset=/simplify.com/gfwlist -server=/hpconnected.us/127.0.0.1#5335 -ipset=/hpconnected.us/gfwlist -server=/identrust.com/127.0.0.1#5335 -ipset=/identrust.com/gfwlist -server=/volvobuses.com.pt/127.0.0.1#5335 -ipset=/volvobuses.com.pt/gfwlist -server=/reactjs.com/127.0.0.1#5335 -ipset=/reactjs.com/gfwlist -server=/react.com/127.0.0.1#5335 -ipset=/react.com/gfwlist -server=/airwick.es/127.0.0.1#5335 -ipset=/airwick.es/gfwlist -server=/blogspot.bg/127.0.0.1#5335 -ipset=/blogspot.bg/gfwlist -server=/nomadproject.io/127.0.0.1#5335 -ipset=/nomadproject.io/gfwlist -server=/ebayhots.com/127.0.0.1#5335 -ipset=/ebayhots.com/gfwlist -server=/partylikeits1986.org/127.0.0.1#5335 -ipset=/partylikeits1986.org/gfwlist -server=/google.ht/127.0.0.1#5335 -ipset=/google.ht/gfwlist -server=/finlitsummit.org/127.0.0.1#5335 -ipset=/finlitsummit.org/gfwlist -server=/bridgestonerapiddelivery.com/127.0.0.1#5335 -ipset=/bridgestonerapiddelivery.com/gfwlist -server=/botorch.org/127.0.0.1#5335 -ipset=/botorch.org/gfwlist -server=/bmw-powertrain.com/127.0.0.1#5335 -ipset=/bmw-powertrain.com/gfwlist -server=/atscaleconference.com/127.0.0.1#5335 -ipset=/atscaleconference.com/gfwlist -server=/yahoo.com.sa/127.0.0.1#5335 -ipset=/yahoo.com.sa/gfwlist -server=/disneyinternational.com/127.0.0.1#5335 -ipset=/disneyinternational.com/gfwlist -server=/dotdeb.org/127.0.0.1#5335 -ipset=/dotdeb.org/gfwlist -server=/masterintelligence.com/127.0.0.1#5335 -ipset=/masterintelligence.com/gfwlist -server=/wimpmusic.com/127.0.0.1#5335 -ipset=/wimpmusic.com/gfwlist -server=/xn--q41am8x.com/127.0.0.1#5335 -ipset=/xn--q41am8x.com/gfwlist -server=/eac-cdn.com/127.0.0.1#5335 -ipset=/eac-cdn.com/gfwlist -server=/deepl.com/127.0.0.1#5335 -ipset=/deepl.com/gfwlist -server=/slack-imgs.com/127.0.0.1#5335 -ipset=/slack-imgs.com/gfwlist -server=/ubuntuforums.org/127.0.0.1#5335 -ipset=/ubuntuforums.org/gfwlist -server=/paypal-team.com/127.0.0.1#5335 -ipset=/paypal-team.com/gfwlist -server=/officialbeatsbydreshop.com/127.0.0.1#5335 -ipset=/officialbeatsbydreshop.com/gfwlist -server=/instagramtakiphilesi.com/127.0.0.1#5335 -ipset=/instagramtakiphilesi.com/gfwlist -server=/ubuntu.net/127.0.0.1#5335 -ipset=/ubuntu.net/gfwlist -server=/durex.com.au/127.0.0.1#5335 -ipset=/durex.com.au/gfwlist -server=/yahoo.com.py/127.0.0.1#5335 -ipset=/yahoo.com.py/gfwlist -server=/bmw.nc/127.0.0.1#5335 -ipset=/bmw.nc/gfwlist -server=/apple.me/127.0.0.1#5335 -ipset=/apple.me/gfwlist -server=/afpforum.com/127.0.0.1#5335 -ipset=/afpforum.com/gfwlist -server=/park-now.com/127.0.0.1#5335 -ipset=/park-now.com/gfwlist -server=/appleiphone.hu/127.0.0.1#5335 -ipset=/appleiphone.hu/gfwlist -server=/macruby.net/127.0.0.1#5335 -ipset=/macruby.net/gfwlist -server=/webflow.com/127.0.0.1#5335 -ipset=/webflow.com/gfwlist -server=/swift.org/127.0.0.1#5335 -ipset=/swift.org/gfwlist -server=/fantv.hk/127.0.0.1#5335 -ipset=/fantv.hk/gfwlist -server=/singtaousa.com/127.0.0.1#5335 -ipset=/singtaousa.com/gfwlist -server=/foxsports.com.uy/127.0.0.1#5335 -ipset=/foxsports.com.uy/gfwlist -server=/mytvsuper.com/127.0.0.1#5335 -ipset=/mytvsuper.com/gfwlist -server=/zohouniversity.com/127.0.0.1#5335 -ipset=/zohouniversity.com/gfwlist -server=/scholar.google.de/127.0.0.1#5335 -ipset=/scholar.google.de/gfwlist -server=/serverfault.com/127.0.0.1#5335 -ipset=/serverfault.com/gfwlist -server=/zohostatic.com/127.0.0.1#5335 -ipset=/zohostatic.com/gfwlist -server=/tasteofpremium.jp/127.0.0.1#5335 -ipset=/tasteofpremium.jp/gfwlist -server=/disneyinternationalhd.com/127.0.0.1#5335 -ipset=/disneyinternationalhd.com/gfwlist -server=/zohomerchandise.com/127.0.0.1#5335 -ipset=/zohomerchandise.com/gfwlist -server=/epochtimes.co.uk/127.0.0.1#5335 -ipset=/epochtimes.co.uk/gfwlist -server=/shopee.sg/127.0.0.1#5335 -ipset=/shopee.sg/gfwlist -server=/minneapolisbmw.com/127.0.0.1#5335 -ipset=/minneapolisbmw.com/gfwlist -server=/cloudflareinsights.com/127.0.0.1#5335 -ipset=/cloudflareinsights.com/gfwlist -server=/pokemongoldsilver.com/127.0.0.1#5335 -ipset=/pokemongoldsilver.com/gfwlist -server=/pin.it/127.0.0.1#5335 -ipset=/pin.it/gfwlist -server=/bmw.no/127.0.0.1#5335 -ipset=/bmw.no/gfwlist -server=/wpvip.com/127.0.0.1#5335 -ipset=/wpvip.com/gfwlist -server=/hpdriver.com/127.0.0.1#5335 -ipset=/hpdriver.com/gfwlist -server=/akamai-access.com/127.0.0.1#5335 -ipset=/akamai-access.com/gfwlist -server=/webofscience.com/127.0.0.1#5335 -ipset=/webofscience.com/gfwlist -server=/huobi.com/127.0.0.1#5335 -ipset=/huobi.com/gfwlist -server=/veet.jp/127.0.0.1#5335 -ipset=/veet.jp/gfwlist -server=/hkopentv.com/127.0.0.1#5335 -ipset=/hkopentv.com/gfwlist -server=/nikebbn.com/127.0.0.1#5335 -ipset=/nikebbn.com/gfwlist -server=/valvesoftware.com/127.0.0.1#5335 -ipset=/valvesoftware.com/gfwlist -server=/rsshub.app/127.0.0.1#5335 -ipset=/rsshub.app/gfwlist -server=/softbank-robotics.com/127.0.0.1#5335 -ipset=/softbank-robotics.com/gfwlist -server=/jstor.org/127.0.0.1#5335 -ipset=/jstor.org/gfwlist -server=/realclearlife.com/127.0.0.1#5335 -ipset=/realclearlife.com/gfwlist -server=/cheapsalemonster.com/127.0.0.1#5335 -ipset=/cheapsalemonster.com/gfwlist -server=/attbusiness.net/127.0.0.1#5335 -ipset=/attbusiness.net/gfwlist -server=/shopify.dev/127.0.0.1#5335 -ipset=/shopify.dev/gfwlist -server=/xn--74q035i.xn--hxt814e/127.0.0.1#5335 -ipset=/xn--74q035i.xn--hxt814e/gfwlist -server=/calendarserver.org/127.0.0.1#5335 -ipset=/calendarserver.org/gfwlist -server=/zeit-world.net/127.0.0.1#5335 -ipset=/zeit-world.net/gfwlist -server=/scholar.google.com.sv/127.0.0.1#5335 -ipset=/scholar.google.com.sv/gfwlist -server=/getprintersupports.com/127.0.0.1#5335 -ipset=/getprintersupports.com/gfwlist -server=/tinyurl.com/127.0.0.1#5335 -ipset=/tinyurl.com/gfwlist -server=/miktex.org/127.0.0.1#5335 -ipset=/miktex.org/gfwlist -server=/github-avatars.oss-cn-hongkong.aliyuncs.com/127.0.0.1#5335 -ipset=/github-avatars.oss-cn-hongkong.aliyuncs.com/gfwlist -server=/dditscdn.com/127.0.0.1#5335 -ipset=/dditscdn.com/gfwlist -server=/pinterest.ec/127.0.0.1#5335 -ipset=/pinterest.ec/gfwlist -server=/d2anahhhmp1ffz.cloudfront.net/127.0.0.1#5335 -ipset=/d2anahhhmp1ffz.cloudfront.net/gfwlist -server=/vk-cdn.net/127.0.0.1#5335 -ipset=/vk-cdn.net/gfwlist -server=/forzarc.com/127.0.0.1#5335 -ipset=/forzarc.com/gfwlist -server=/fontexplorerx.com/127.0.0.1#5335 -ipset=/fontexplorerx.com/gfwlist -server=/discordstatus.com/127.0.0.1#5335 -ipset=/discordstatus.com/gfwlist -server=/foxsoccershop.com/127.0.0.1#5335 -ipset=/foxsoccershop.com/gfwlist -server=/bridgestone.co.id/127.0.0.1#5335 -ipset=/bridgestone.co.id/gfwlist -server=/fbhome.com/127.0.0.1#5335 -ipset=/fbhome.com/gfwlist -server=/travelex.com/127.0.0.1#5335 -ipset=/travelex.com/gfwlist -server=/nintendo.es/127.0.0.1#5335 -ipset=/nintendo.es/gfwlist -server=/terapeak.info/127.0.0.1#5335 -ipset=/terapeak.info/gfwlist -server=/rb.gy/127.0.0.1#5335 -ipset=/rb.gy/gfwlist -server=/privatemarketplaces.us/127.0.0.1#5335 -ipset=/privatemarketplaces.us/gfwlist -server=/kindle.es/127.0.0.1#5335 -ipset=/kindle.es/gfwlist -server=/egmontbooks.co.uk/127.0.0.1#5335 -ipset=/egmontbooks.co.uk/gfwlist -server=/quip.com/127.0.0.1#5335 -ipset=/quip.com/gfwlist -server=/typenetwork.com/127.0.0.1#5335 -ipset=/typenetwork.com/gfwlist -server=/sony.hu/127.0.0.1#5335 -ipset=/sony.hu/gfwlist -server=/volvotrucks.sk/127.0.0.1#5335 -ipset=/volvotrucks.sk/gfwlist -server=/pse.is/127.0.0.1#5335 -ipset=/pse.is/gfwlist -server=/foxbusinessgo.com/127.0.0.1#5335 -ipset=/foxbusinessgo.com/gfwlist -server=/mpv.io/127.0.0.1#5335 -ipset=/mpv.io/gfwlist -server=/madvrlabs.llc/127.0.0.1#5335 -ipset=/madvrlabs.llc/gfwlist -server=/secure-paypal.info/127.0.0.1#5335 -ipset=/secure-paypal.info/gfwlist -server=/freefacebook.com/127.0.0.1#5335 -ipset=/freefacebook.com/gfwlist -server=/garena.ph/127.0.0.1#5335 -ipset=/garena.ph/gfwlist -server=/visa-news.jp/127.0.0.1#5335 -ipset=/visa-news.jp/gfwlist -server=/liberapay.com/127.0.0.1#5335 -ipset=/liberapay.com/gfwlist -server=/codeish.co/127.0.0.1#5335 -ipset=/codeish.co/gfwlist -server=/swjfo.com/127.0.0.1#5335 -ipset=/swjfo.com/gfwlist -server=/mini.co.za/127.0.0.1#5335 -ipset=/mini.co.za/gfwlist -server=/mastercard.co.nz/127.0.0.1#5335 -ipset=/mastercard.co.nz/gfwlist -server=/xdty.org/127.0.0.1#5335 -ipset=/xdty.org/gfwlist -server=/ebaynow.com/127.0.0.1#5335 -ipset=/ebaynow.com/gfwlist -server=/card.io/127.0.0.1#5335 -ipset=/card.io/gfwlist -server=/bayareabmw.com/127.0.0.1#5335 -ipset=/bayareabmw.com/gfwlist -server=/mini-lebanon.com/127.0.0.1#5335 -ipset=/mini-lebanon.com/gfwlist -server=/hitun.io/127.0.0.1#5335 -ipset=/hitun.io/gfwlist -server=/guim.co.uk/127.0.0.1#5335 -ipset=/guim.co.uk/gfwlist -server=/paradisehotelquizfox.com/127.0.0.1#5335 -ipset=/paradisehotelquizfox.com/gfwlist -server=/duckgo.com/127.0.0.1#5335 -ipset=/duckgo.com/gfwlist -server=/peerj.com/127.0.0.1#5335 -ipset=/peerj.com/gfwlist -server=/universitypressscholarship.com/127.0.0.1#5335 -ipset=/universitypressscholarship.com/gfwlist -server=/duckduckgo.nl/127.0.0.1#5335 -ipset=/duckduckgo.nl/gfwlist -server=/businessinsider.jp/127.0.0.1#5335 -ipset=/businessinsider.jp/gfwlist -server=/duckduckgo.co.uk/127.0.0.1#5335 -ipset=/duckduckgo.co.uk/gfwlist -server=/vod-thumb-ww-live.akamaized.net/127.0.0.1#5335 -ipset=/vod-thumb-ww-live.akamaized.net/gfwlist -server=/internationalconnectionsacademy.com/127.0.0.1#5335 -ipset=/internationalconnectionsacademy.com/gfwlist -server=/www-paypal.info/127.0.0.1#5335 -ipset=/www-paypal.info/gfwlist -server=/joinmaidez.com/127.0.0.1#5335 -ipset=/joinmaidez.com/gfwlist -server=/braintreepayments.com/127.0.0.1#5335 -ipset=/braintreepayments.com/gfwlist -server=/cispaletter.org/127.0.0.1#5335 -ipset=/cispaletter.org/gfwlist -server=/vuvuzela.io/127.0.0.1#5335 -ipset=/vuvuzela.io/gfwlist -server=/demdex.net/127.0.0.1#5335 -ipset=/demdex.net/gfwlist -server=/softbank.tv/127.0.0.1#5335 -ipset=/softbank.tv/gfwlist -server=/contentful.com/127.0.0.1#5335 -ipset=/contentful.com/gfwlist -server=/akadns6.net/127.0.0.1#5335 -ipset=/akadns6.net/gfwlist -server=/cloudconvert.com/127.0.0.1#5335 -ipset=/cloudconvert.com/gfwlist -server=/adidas.nl/127.0.0.1#5335 -ipset=/adidas.nl/gfwlist -server=/vanish.ro/127.0.0.1#5335 -ipset=/vanish.ro/gfwlist -server=/myconstructionworld.net/127.0.0.1#5335 -ipset=/myconstructionworld.net/gfwlist -server=/epochtimes.com.br/127.0.0.1#5335 -ipset=/epochtimes.com.br/gfwlist -server=/xtube.com/127.0.0.1#5335 -ipset=/xtube.com/gfwlist -server=/bmw.co.il/127.0.0.1#5335 -ipset=/bmw.co.il/gfwlist -server=/harperapps.com/127.0.0.1#5335 -ipset=/harperapps.com/gfwlist -server=/thtmod1.com/127.0.0.1#5335 -ipset=/thtmod1.com/gfwlist -server=/customnikeshoes.com/127.0.0.1#5335 -ipset=/customnikeshoes.com/gfwlist -server=/volvotruckcenter.kr/127.0.0.1#5335 -ipset=/volvotruckcenter.kr/gfwlist -server=/wwwmacbookair.com/127.0.0.1#5335 -ipset=/wwwmacbookair.com/gfwlist -server=/monsterbeatsfactory.net/127.0.0.1#5335 -ipset=/monsterbeatsfactory.net/gfwlist -server=/clubhouseapi.com/127.0.0.1#5335 -ipset=/clubhouseapi.com/gfwlist -server=/directvrichmond.com/127.0.0.1#5335 -ipset=/directvrichmond.com/gfwlist -server=/tbr.tangbr.net/127.0.0.1#5335 -ipset=/tbr.tangbr.net/gfwlist -server=/t66y.com/127.0.0.1#5335 -ipset=/t66y.com/gfwlist -server=/babble.com/127.0.0.1#5335 -ipset=/babble.com/gfwlist -server=/mozilla.org/127.0.0.1#5335 -ipset=/mozilla.org/gfwlist -server=/bmw-motorcycle.com/127.0.0.1#5335 -ipset=/bmw-motorcycle.com/gfwlist -server=/ipodtouch.com/127.0.0.1#5335 -ipset=/ipodtouch.com/gfwlist -server=/visa.lv/127.0.0.1#5335 -ipset=/visa.lv/gfwlist -server=/verisign.name/127.0.0.1#5335 -ipset=/verisign.name/gfwlist -server=/akamai.net/127.0.0.1#5335 -ipset=/akamai.net/gfwlist -server=/prime-video.com/127.0.0.1#5335 -ipset=/prime-video.com/gfwlist -server=/foxsports-world.com/127.0.0.1#5335 -ipset=/foxsports-world.com/gfwlist -server=/oculuscasino.net/127.0.0.1#5335 -ipset=/oculuscasino.net/gfwlist -server=/adobeawards.com/127.0.0.1#5335 -ipset=/adobeawards.com/gfwlist -server=/canon.ge/127.0.0.1#5335 -ipset=/canon.ge/gfwlist -server=/osakamotion.net/127.0.0.1#5335 -ipset=/osakamotion.net/gfwlist -server=/visaluxuryhotels.com.ar/127.0.0.1#5335 -ipset=/visaluxuryhotels.com.ar/gfwlist -server=/volvotrucks.tm/127.0.0.1#5335 -ipset=/volvotrucks.tm/gfwlist -server=/readthedocs.org/127.0.0.1#5335 -ipset=/readthedocs.org/gfwlist -server=/openmaps.org/127.0.0.1#5335 -ipset=/openmaps.org/gfwlist -server=/durex.dk/127.0.0.1#5335 -ipset=/durex.dk/gfwlist -server=/javhd.com/127.0.0.1#5335 -ipset=/javhd.com/gfwlist -server=/theinitium.com/127.0.0.1#5335 -ipset=/theinitium.com/gfwlist -server=/isexomega.tw/127.0.0.1#5335 -ipset=/isexomega.tw/gfwlist -server=/iijav.com/127.0.0.1#5335 -ipset=/iijav.com/gfwlist -server=/dmm.com/127.0.0.1#5335 -ipset=/dmm.com/gfwlist -server=/gouri.xyz/127.0.0.1#5335 -ipset=/gouri.xyz/gfwlist -server=/bridgestoneamericas.com/127.0.0.1#5335 -ipset=/bridgestoneamericas.com/gfwlist -server=/fanhaodian.com/127.0.0.1#5335 -ipset=/fanhaodian.com/gfwlist -server=/verisign.tw/127.0.0.1#5335 -ipset=/verisign.tw/gfwlist -server=/zoho.com/127.0.0.1#5335 -ipset=/zoho.com/gfwlist -server=/paipal.com/127.0.0.1#5335 -ipset=/paipal.com/gfwlist -server=/cheapbeatsbydrenz.net/127.0.0.1#5335 -ipset=/cheapbeatsbydrenz.net/gfwlist -server=/520aa.tv/127.0.0.1#5335 -ipset=/520aa.tv/gfwlist -server=/ebay-sales.com/127.0.0.1#5335 -ipset=/ebay-sales.com/gfwlist -server=/pc.com/127.0.0.1#5335 -ipset=/pc.com/gfwlist -server=/dmgmediaprivacy.co.uk/127.0.0.1#5335 -ipset=/dmgmediaprivacy.co.uk/gfwlist -server=/nintendo.eu/127.0.0.1#5335 -ipset=/nintendo.eu/gfwlist -server=/gettyimages.com.br/127.0.0.1#5335 -ipset=/gettyimages.com.br/gfwlist -server=/terapeak.com/127.0.0.1#5335 -ipset=/terapeak.com/gfwlist -server=/uun92.com/127.0.0.1#5335 -ipset=/uun92.com/gfwlist -server=/paypal-here.com/127.0.0.1#5335 -ipset=/paypal-here.com/gfwlist -server=/cheapbeatsbus.com/127.0.0.1#5335 -ipset=/cheapbeatsbus.com/gfwlist -server=/uun87.com/127.0.0.1#5335 -ipset=/uun87.com/gfwlist -server=/bestbuy-jobs.com/127.0.0.1#5335 -ipset=/bestbuy-jobs.com/gfwlist -server=/imac.one/127.0.0.1#5335 -ipset=/imac.one/gfwlist -server=/pinterest.hu/127.0.0.1#5335 -ipset=/pinterest.hu/gfwlist -server=/p3.csgfnmdb.com/127.0.0.1#5335 -ipset=/p3.csgfnmdb.com/gfwlist -server=/press.vin/127.0.0.1#5335 -ipset=/press.vin/gfwlist -server=/viewpointsfromfacebook.com/127.0.0.1#5335 -ipset=/viewpointsfromfacebook.com/gfwlist -server=/dlmobilegarena-a.akamaihd.net/127.0.0.1#5335 -ipset=/dlmobilegarena-a.akamaihd.net/gfwlist -server=/achievementanalytics.com/127.0.0.1#5335 -ipset=/achievementanalytics.com/gfwlist -server=/latex-project.org/127.0.0.1#5335 -ipset=/latex-project.org/gfwlist -server=/javwide.com/127.0.0.1#5335 -ipset=/javwide.com/gfwlist -server=/pureapk.com/127.0.0.1#5335 -ipset=/pureapk.com/gfwlist -server=/ucla.edu/127.0.0.1#5335 -ipset=/ucla.edu/gfwlist -server=/fxn.ws/127.0.0.1#5335 -ipset=/fxn.ws/gfwlist -server=/verisign.com.au/127.0.0.1#5335 -ipset=/verisign.com.au/gfwlist -server=/epochtimes.com.au/127.0.0.1#5335 -ipset=/epochtimes.com.au/gfwlist -server=/yourtv.com.au/127.0.0.1#5335 -ipset=/yourtv.com.au/gfwlist -server=/alphabet.cz/127.0.0.1#5335 -ipset=/alphabet.cz/gfwlist -server=/adguard.com/127.0.0.1#5335 -ipset=/adguard.com/gfwlist -server=/facebook-pmdcenter.com/127.0.0.1#5335 -ipset=/facebook-pmdcenter.com/gfwlist -server=/visa.com.tt/127.0.0.1#5335 -ipset=/visa.com.tt/gfwlist -server=/yahoo.com.sb/127.0.0.1#5335 -ipset=/yahoo.com.sb/gfwlist -server=/airitilibrary.com/127.0.0.1#5335 -ipset=/airitilibrary.com/gfwlist -server=/atypi.org/127.0.0.1#5335 -ipset=/atypi.org/gfwlist -server=/blogspot.sg/127.0.0.1#5335 -ipset=/blogspot.sg/gfwlist -server=/osmfoundation.org/127.0.0.1#5335 -ipset=/osmfoundation.org/gfwlist -server=/postini.com/127.0.0.1#5335 -ipset=/postini.com/gfwlist -server=/hutpromos.com/127.0.0.1#5335 -ipset=/hutpromos.com/gfwlist -server=/creativecommons.engineering/127.0.0.1#5335 -ipset=/creativecommons.engineering/gfwlist -server=/ccstatic.org/127.0.0.1#5335 -ipset=/ccstatic.org/gfwlist -server=/scholar.google.bg/127.0.0.1#5335 -ipset=/scholar.google.bg/gfwlist -server=/bmw-motorrad.com.my/127.0.0.1#5335 -ipset=/bmw-motorrad.com.my/gfwlist -server=/unwire.hk/127.0.0.1#5335 -ipset=/unwire.hk/gfwlist -server=/nikeselling.com/127.0.0.1#5335 -ipset=/nikeselling.com/gfwlist -server=/ssl-lvlt.cdn.ea.com/127.0.0.1#5335 -ipset=/ssl-lvlt.cdn.ea.com/gfwlist -server=/alphera.com.hk/127.0.0.1#5335 -ipset=/alphera.com.hk/gfwlist -server=/rsf.org/127.0.0.1#5335 -ipset=/rsf.org/gfwlist -server=/ieeeusa.org/127.0.0.1#5335 -ipset=/ieeeusa.org/gfwlist -server=/mingpaomonthly.com/127.0.0.1#5335 -ipset=/mingpaomonthly.com/gfwlist -server=/foxsports.info/127.0.0.1#5335 -ipset=/foxsports.info/gfwlist -server=/embed.ly/127.0.0.1#5335 -ipset=/embed.ly/gfwlist -server=/businessinsider.nl/127.0.0.1#5335 -ipset=/businessinsider.nl/gfwlist -server=/supermario.com/127.0.0.1#5335 -ipset=/supermario.com/gfwlist -server=/starbucks.com.tr/127.0.0.1#5335 -ipset=/starbucks.com.tr/gfwlist -server=/sonypicturesmuseum.com/127.0.0.1#5335 -ipset=/sonypicturesmuseum.com/gfwlist -server=/volvospares.com/127.0.0.1#5335 -ipset=/volvospares.com/gfwlist -server=/mini.hu/127.0.0.1#5335 -ipset=/mini.hu/gfwlist -server=/cheapheadsetmall.com/127.0.0.1#5335 -ipset=/cheapheadsetmall.com/gfwlist -server=/bloombergbreakaway.com/127.0.0.1#5335 -ipset=/bloombergbreakaway.com/gfwlist -server=/chrome.com/127.0.0.1#5335 -ipset=/chrome.com/gfwlist -server=/wd.com/127.0.0.1#5335 -ipset=/wd.com/gfwlist -server=/bmw.se/127.0.0.1#5335 -ipset=/bmw.se/gfwlist -server=/iphoneunlockimei.com/127.0.0.1#5335 -ipset=/iphoneunlockimei.com/gfwlist -server=/travelex.fr/127.0.0.1#5335 -ipset=/travelex.fr/gfwlist -server=/ebayauthenticate.com.cn/127.0.0.1#5335 -ipset=/ebayauthenticate.com.cn/gfwlist -server=/scholar.google.ru/127.0.0.1#5335 -ipset=/scholar.google.ru/gfwlist -server=/dotcernpilot.info/127.0.0.1#5335 -ipset=/dotcernpilot.info/gfwlist -server=/minimotorsport.com/127.0.0.1#5335 -ipset=/minimotorsport.com/gfwlist -server=/fflnk.net/127.0.0.1#5335 -ipset=/fflnk.net/gfwlist -server=/lolesports.com/127.0.0.1#5335 -ipset=/lolesports.com/gfwlist -server=/foxcreativeuniversity.com/127.0.0.1#5335 -ipset=/foxcreativeuniversity.com/gfwlist -server=/ea.tt.omtrdc.net/127.0.0.1#5335 -ipset=/ea.tt.omtrdc.net/gfwlist -server=/indiancolleges.com/127.0.0.1#5335 -ipset=/indiancolleges.com/gfwlist -server=/mariokart7.com/127.0.0.1#5335 -ipset=/mariokart7.com/gfwlist -server=/mastercardcenter.com/127.0.0.1#5335 -ipset=/mastercardcenter.com/gfwlist -server=/bestbuyrewardzone.ca/127.0.0.1#5335 -ipset=/bestbuyrewardzone.ca/gfwlist -server=/zaobao.com.sg/127.0.0.1#5335 -ipset=/zaobao.com.sg/gfwlist -server=/theguardiandns.com/127.0.0.1#5335 -ipset=/theguardiandns.com/gfwlist -server=/managed-pki.de/127.0.0.1#5335 -ipset=/managed-pki.de/gfwlist -server=/ox.ac.uk/127.0.0.1#5335 -ipset=/ox.ac.uk/gfwlist -server=/nytstyle.com/127.0.0.1#5335 -ipset=/nytstyle.com/gfwlist -server=/vox-cdn.com/127.0.0.1#5335 -ipset=/vox-cdn.com/gfwlist -server=/visa.com.co/127.0.0.1#5335 -ipset=/visa.com.co/gfwlist -server=/bmwi.jp/127.0.0.1#5335 -ipset=/bmwi.jp/gfwlist -server=/polygon.com/127.0.0.1#5335 -ipset=/polygon.com/gfwlist -server=/foxtelevisionstations.com/127.0.0.1#5335 -ipset=/foxtelevisionstations.com/gfwlist -server=/yours-customised.mini.com/127.0.0.1#5335 -ipset=/yours-customised.mini.com/gfwlist -server=/voazimbabwe.com/127.0.0.1#5335 -ipset=/voazimbabwe.com/gfwlist -server=/runningnike.com/127.0.0.1#5335 -ipset=/runningnike.com/gfwlist -server=/voatibetan.com/127.0.0.1#5335 -ipset=/voatibetan.com/gfwlist -server=/vfsco.co.uk/127.0.0.1#5335 -ipset=/vfsco.co.uk/gfwlist -server=/voanews.eu/127.0.0.1#5335 -ipset=/voanews.eu/gfwlist -server=/0plkijj.vip/127.0.0.1#5335 -ipset=/0plkijj.vip/gfwlist -server=/shopspeedtv.com/127.0.0.1#5335 -ipset=/shopspeedtv.com/gfwlist -server=/billmelater.info/127.0.0.1#5335 -ipset=/billmelater.info/gfwlist -server=/sipriyearbook.org/127.0.0.1#5335 -ipset=/sipriyearbook.org/gfwlist -server=/addison-wesley.ch/127.0.0.1#5335 -ipset=/addison-wesley.ch/gfwlist -server=/naver.com/127.0.0.1#5335 -ipset=/naver.com/gfwlist -server=/battle.net/127.0.0.1#5335 -ipset=/battle.net/gfwlist -server=/voaafrique.com/127.0.0.1#5335 -ipset=/voaafrique.com/gfwlist -server=/amerikaninsesi.com/127.0.0.1#5335 -ipset=/amerikaninsesi.com/gfwlist -server=/intel.us/127.0.0.1#5335 -ipset=/intel.us/gfwlist -server=/livrariart.com.br/127.0.0.1#5335 -ipset=/livrariart.com.br/gfwlist -server=/psg-int-centralus.cloudapp.net/127.0.0.1#5335 -ipset=/psg-int-centralus.cloudapp.net/gfwlist -server=/mini.gp/127.0.0.1#5335 -ipset=/mini.gp/gfwlist -server=/fb.com/127.0.0.1#5335 -ipset=/fb.com/gfwlist -server=/visa.com.do/127.0.0.1#5335 -ipset=/visa.com.do/gfwlist -server=/passport.net/127.0.0.1#5335 -ipset=/passport.net/gfwlist -server=/hplaptop.com/127.0.0.1#5335 -ipset=/hplaptop.com/gfwlist -server=/skyoceanrescue.com/127.0.0.1#5335 -ipset=/skyoceanrescue.com/gfwlist -server=/easttouch.com.hk/127.0.0.1#5335 -ipset=/easttouch.com.hk/gfwlist -server=/facebooc.com/127.0.0.1#5335 -ipset=/facebooc.com/gfwlist -server=/bmw.com.tr/127.0.0.1#5335 -ipset=/bmw.com.tr/gfwlist -server=/facebolk.com/127.0.0.1#5335 -ipset=/facebolk.com/gfwlist -server=/telekom.de/127.0.0.1#5335 -ipset=/telekom.de/gfwlist -server=/bandag.cc/127.0.0.1#5335 -ipset=/bandag.cc/gfwlist -server=/realclearhistory.com/127.0.0.1#5335 -ipset=/realclearhistory.com/gfwlist -server=/realclearfoundation.org/127.0.0.1#5335 -ipset=/realclearfoundation.org/gfwlist -server=/airwick.jp/127.0.0.1#5335 -ipset=/airwick.jp/gfwlist -server=/ea.com/127.0.0.1#5335 -ipset=/ea.com/gfwlist -server=/jtvnw.net/127.0.0.1#5335 -ipset=/jtvnw.net/gfwlist -server=/voxcreative.com/127.0.0.1#5335 -ipset=/voxcreative.com/gfwlist -server=/volvopenta.it/127.0.0.1#5335 -ipset=/volvopenta.it/gfwlist -server=/youtube.com.ph/127.0.0.1#5335 -ipset=/youtube.com.ph/gfwlist -server=/andysparis.com/127.0.0.1#5335 -ipset=/andysparis.com/gfwlist -server=/zb.com/127.0.0.1#5335 -ipset=/zb.com/gfwlist -server=/harpercollins.com/127.0.0.1#5335 -ipset=/harpercollins.com/gfwlist -server=/volvopenta.com.br/127.0.0.1#5335 -ipset=/volvopenta.com.br/gfwlist -server=/9to5terminal.com/127.0.0.1#5335 -ipset=/9to5terminal.com/gfwlist -server=/nikedunksshoes.com/127.0.0.1#5335 -ipset=/nikedunksshoes.com/gfwlist -server=/placemyad.com.au/127.0.0.1#5335 -ipset=/placemyad.com.au/gfwlist -server=/mylogiclab.com/127.0.0.1#5335 -ipset=/mylogiclab.com/gfwlist -server=/microsoft.pl/127.0.0.1#5335 -ipset=/microsoft.pl/gfwlist -server=/youtube.co.in/127.0.0.1#5335 -ipset=/youtube.co.in/gfwlist -server=/newsapi.com.au/127.0.0.1#5335 -ipset=/newsapi.com.au/gfwlist -server=/farfetch.net/127.0.0.1#5335 -ipset=/farfetch.net/gfwlist -server=/thewonderful101.com/127.0.0.1#5335 -ipset=/thewonderful101.com/gfwlist -server=/llnwi.net/127.0.0.1#5335 -ipset=/llnwi.net/gfwlist -server=/newcastlenewslocal.com.au/127.0.0.1#5335 -ipset=/newcastlenewslocal.com.au/gfwlist -server=/geelongadvertiser.com.au/127.0.0.1#5335 -ipset=/geelongadvertiser.com.au/gfwlist -server=/officecdn-microsoft-com.akamaized.net/127.0.0.1#5335 -ipset=/officecdn-microsoft-com.akamaized.net/gfwlist -server=/scholar.google.be/127.0.0.1#5335 -ipset=/scholar.google.be/gfwlist -server=/lawdata.com.tw/127.0.0.1#5335 -ipset=/lawdata.com.tw/gfwlist -server=/volvobuses.be/127.0.0.1#5335 -ipset=/volvobuses.be/gfwlist -server=/bossae.com/127.0.0.1#5335 -ipset=/bossae.com/gfwlist -server=/nikeby.com/127.0.0.1#5335 -ipset=/nikeby.com/gfwlist -server=/nikeprice.com/127.0.0.1#5335 -ipset=/nikeprice.com/gfwlist -server=/nypostreprints.com/127.0.0.1#5335 -ipset=/nypostreprints.com/gfwlist -server=/nbcsports.com/127.0.0.1#5335 -ipset=/nbcsports.com/gfwlist -server=/connectedcommerce.tv/127.0.0.1#5335 -ipset=/connectedcommerce.tv/gfwlist -server=/rbdigitalab.com/127.0.0.1#5335 -ipset=/rbdigitalab.com/gfwlist -server=/bmw-yeg.ca/127.0.0.1#5335 -ipset=/bmw-yeg.ca/gfwlist -server=/minimontroyal.com/127.0.0.1#5335 -ipset=/minimontroyal.com/gfwlist -server=/akami.net/127.0.0.1#5335 -ipset=/akami.net/gfwlist -server=/paypalnetwork.org/127.0.0.1#5335 -ipset=/paypalnetwork.org/gfwlist -server=/chips.com/127.0.0.1#5335 -ipset=/chips.com/gfwlist -server=/banned.video/127.0.0.1#5335 -ipset=/banned.video/gfwlist -server=/bmw-world.tv/127.0.0.1#5335 -ipset=/bmw-world.tv/gfwlist -server=/facebookworld.com/127.0.0.1#5335 -ipset=/facebookworld.com/gfwlist -server=/adcommerce.tv/127.0.0.1#5335 -ipset=/adcommerce.tv/gfwlist -server=/my13la.com/127.0.0.1#5335 -ipset=/my13la.com/gfwlist -server=/16fhgdty.xyz/127.0.0.1#5335 -ipset=/16fhgdty.xyz/gfwlist -server=/developers.facebook.com/127.0.0.1#5335 -ipset=/developers.facebook.com/gfwlist -server=/camelotherald.com/127.0.0.1#5335 -ipset=/camelotherald.com/gfwlist -server=/yandex.ua/127.0.0.1#5335 -ipset=/yandex.ua/gfwlist -server=/hket.com/127.0.0.1#5335 -ipset=/hket.com/gfwlist -server=/wmcloud.org/127.0.0.1#5335 -ipset=/wmcloud.org/gfwlist -server=/tegrazone.co/127.0.0.1#5335 -ipset=/tegrazone.co/gfwlist -server=/gvt7.com/127.0.0.1#5335 -ipset=/gvt7.com/gfwlist -server=/hulustream.com/127.0.0.1#5335 -ipset=/hulustream.com/gfwlist -server=/whatthefox.com/127.0.0.1#5335 -ipset=/whatthefox.com/gfwlist -server=/scholar.google.sk/127.0.0.1#5335 -ipset=/scholar.google.sk/gfwlist -server=/indiaipad.com/127.0.0.1#5335 -ipset=/indiaipad.com/gfwlist -server=/bridgestonecomercial.cl/127.0.0.1#5335 -ipset=/bridgestonecomercial.cl/gfwlist -server=/discountbeatsbydre-us.com/127.0.0.1#5335 -ipset=/discountbeatsbydre-us.com/gfwlist -server=/scholar.l.google.com/127.0.0.1#5335 -ipset=/scholar.l.google.com/gfwlist -server=/historyofdota.com/127.0.0.1#5335 -ipset=/historyofdota.com/gfwlist -server=/alpherafs.ie/127.0.0.1#5335 -ipset=/alpherafs.ie/gfwlist -server=/finishkilpailu.fi/127.0.0.1#5335 -ipset=/finishkilpailu.fi/gfwlist -server=/myfoxorlando.com/127.0.0.1#5335 -ipset=/myfoxorlando.com/gfwlist -server=/ch9.ms/127.0.0.1#5335 -ipset=/ch9.ms/gfwlist -server=/my20houston.com/127.0.0.1#5335 -ipset=/my20houston.com/gfwlist -server=/google.rw/127.0.0.1#5335 -ipset=/google.rw/gfwlist -server=/bentobox.tv/127.0.0.1#5335 -ipset=/bentobox.tv/gfwlist -server=/vfsco.jp/127.0.0.1#5335 -ipset=/vfsco.jp/gfwlist -server=/fssta.com/127.0.0.1#5335 -ipset=/fssta.com/gfwlist -server=/ieeeoes.org/127.0.0.1#5335 -ipset=/ieeeoes.org/gfwlist -server=/ebaylocationsdevacances.com/127.0.0.1#5335 -ipset=/ebaylocationsdevacances.com/gfwlist -server=/alivevm.com/127.0.0.1#5335 -ipset=/alivevm.com/gfwlist -server=/aranzadi.es/127.0.0.1#5335 -ipset=/aranzadi.es/gfwlist -server=/foxsports.net.br/127.0.0.1#5335 -ipset=/foxsports.net.br/gfwlist -server=/paypal-cardcash.com/127.0.0.1#5335 -ipset=/paypal-cardcash.com/gfwlist -server=/yahoo.com/127.0.0.1#5335 -ipset=/yahoo.com/gfwlist -server=/foxcareers.com/127.0.0.1#5335 -ipset=/foxcareers.com/gfwlist -server=/nikebetterworld.org/127.0.0.1#5335 -ipset=/nikebetterworld.org/gfwlist -server=/ipod.co/127.0.0.1#5335 -ipset=/ipod.co/gfwlist -server=/me.com/127.0.0.1#5335 -ipset=/me.com/gfwlist -server=/drdrebeats-usa.com/127.0.0.1#5335 -ipset=/drdrebeats-usa.com/gfwlist -server=/mastercard.com.br/127.0.0.1#5335 -ipset=/mastercard.com.br/gfwlist -server=/privacysimplified.com/127.0.0.1#5335 -ipset=/privacysimplified.com/gfwlist -server=/javbus.com/127.0.0.1#5335 -ipset=/javbus.com/gfwlist -server=/nebay.net/127.0.0.1#5335 -ipset=/nebay.net/gfwlist -server=/paypal-business.net/127.0.0.1#5335 -ipset=/paypal-business.net/gfwlist -server=/headphonesbeatsaudio.com/127.0.0.1#5335 -ipset=/headphonesbeatsaudio.com/gfwlist -server=/blogspot.td/127.0.0.1#5335 -ipset=/blogspot.td/gfwlist -server=/volvogroup.se/127.0.0.1#5335 -ipset=/volvogroup.se/gfwlist -server=/epochtimes.nl/127.0.0.1#5335 -ipset=/epochtimes.nl/gfwlist -server=/volvotrucks.az/127.0.0.1#5335 -ipset=/volvotrucks.az/gfwlist -server=/r10s.jp/127.0.0.1#5335 -ipset=/r10s.jp/gfwlist -server=/bmw.cl/127.0.0.1#5335 -ipset=/bmw.cl/gfwlist -server=/ciscopress.ch/127.0.0.1#5335 -ipset=/ciscopress.ch/gfwlist -server=/canon.co.il/127.0.0.1#5335 -ipset=/canon.co.il/gfwlist -server=/youtube.jo/127.0.0.1#5335 -ipset=/youtube.jo/gfwlist -server=/anm.co.uk/127.0.0.1#5335 -ipset=/anm.co.uk/gfwlist -server=/kijijiraps.ca/127.0.0.1#5335 -ipset=/kijijiraps.ca/gfwlist -server=/ebayads.com/127.0.0.1#5335 -ipset=/ebayads.com/gfwlist -server=/playstation.net/127.0.0.1#5335 -ipset=/playstation.net/gfwlist -server=/geek-squad.net/127.0.0.1#5335 -ipset=/geek-squad.net/gfwlist -server=/gettyimages.pt/127.0.0.1#5335 -ipset=/gettyimages.pt/gfwlist -server=/applemagickeyboard.com/127.0.0.1#5335 -ipset=/applemagickeyboard.com/gfwlist -server=/easynike.com/127.0.0.1#5335 -ipset=/easynike.com/gfwlist -server=/slackcertified.com/127.0.0.1#5335 -ipset=/slackcertified.com/gfwlist -server=/volvogroup.com/127.0.0.1#5335 -ipset=/volvogroup.com/gfwlist -server=/neweconomyforum.com/127.0.0.1#5335 -ipset=/neweconomyforum.com/gfwlist -server=/microsoft.uz/127.0.0.1#5335 -ipset=/microsoft.uz/gfwlist -server=/pinterest.com.vn/127.0.0.1#5335 -ipset=/pinterest.com.vn/gfwlist -server=/volvotruckcenter.no/127.0.0.1#5335 -ipset=/volvotruckcenter.no/gfwlist -server=/paypal-center.net/127.0.0.1#5335 -ipset=/paypal-center.net/gfwlist -server=/paypa1.com/127.0.0.1#5335 -ipset=/paypa1.com/gfwlist -server=/diablo3.com/127.0.0.1#5335 -ipset=/diablo3.com/gfwlist -server=/visasignaturehotels.com/127.0.0.1#5335 -ipset=/visasignaturehotels.com/gfwlist -server=/gfw.report/127.0.0.1#5335 -ipset=/gfw.report/gfwlist -server=/thetread.com/127.0.0.1#5335 -ipset=/thetread.com/gfwlist -server=/texture.com/127.0.0.1#5335 -ipset=/texture.com/gfwlist -server=/swoosh.com/127.0.0.1#5335 -ipset=/swoosh.com/gfwlist -server=/next.hk/127.0.0.1#5335 -ipset=/next.hk/gfwlist -server=/creditcardsbay.com/127.0.0.1#5335 -ipset=/creditcardsbay.com/gfwlist -server=/vtsociety.org/127.0.0.1#5335 -ipset=/vtsociety.org/gfwlist -server=/thisav.com/127.0.0.1#5335 -ipset=/thisav.com/gfwlist -server=/visaeurope.lu/127.0.0.1#5335 -ipset=/visaeurope.lu/gfwlist -server=/oreilly.review/127.0.0.1#5335 -ipset=/oreilly.review/gfwlist -server=/nineentertainmentco.com.au/127.0.0.1#5335 -ipset=/nineentertainmentco.com.au/gfwlist -server=/mini.co.cr/127.0.0.1#5335 -ipset=/mini.co.cr/gfwlist -server=/paypal-learning.com/127.0.0.1#5335 -ipset=/paypal-learning.com/gfwlist -server=/minilondon.co/127.0.0.1#5335 -ipset=/minilondon.co/gfwlist -server=/makeitopen.com/127.0.0.1#5335 -ipset=/makeitopen.com/gfwlist -server=/pokemonletsgoeevee.com/127.0.0.1#5335 -ipset=/pokemonletsgoeevee.com/gfwlist -server=/mini.com.hr/127.0.0.1#5335 -ipset=/mini.com.hr/gfwlist -server=/customizedbeatbydre.com/127.0.0.1#5335 -ipset=/customizedbeatbydre.com/gfwlist -server=/weverse.io/127.0.0.1#5335 -ipset=/weverse.io/gfwlist -server=/bitmex.com/127.0.0.1#5335 -ipset=/bitmex.com/gfwlist -server=/dynacw.com/127.0.0.1#5335 -ipset=/dynacw.com/gfwlist -server=/lede-project.org/127.0.0.1#5335 -ipset=/lede-project.org/gfwlist -server=/oculuscdn.com/127.0.0.1#5335 -ipset=/oculuscdn.com/gfwlist -server=/realamericanstories.net/127.0.0.1#5335 -ipset=/realamericanstories.net/gfwlist -server=/beatsbydresonline-nz.com/127.0.0.1#5335 -ipset=/beatsbydresonline-nz.com/gfwlist -server=/wwe9.com/127.0.0.1#5335 -ipset=/wwe9.com/gfwlist -server=/volvotrucks.id/127.0.0.1#5335 -ipset=/volvotrucks.id/gfwlist -server=/pearsonclinical.fr/127.0.0.1#5335 -ipset=/pearsonclinical.fr/gfwlist -server=/cloudflareapps.com/127.0.0.1#5335 -ipset=/cloudflareapps.com/gfwlist -server=/beatsbydresalemall2013.com/127.0.0.1#5335 -ipset=/beatsbydresalemall2013.com/gfwlist -server=/disneymagicmoments.it/127.0.0.1#5335 -ipset=/disneymagicmoments.it/gfwlist -server=/paypalprepagata.net/127.0.0.1#5335 -ipset=/paypalprepagata.net/gfwlist -server=/geti2p.net/127.0.0.1#5335 -ipset=/geti2p.net/gfwlist -server=/rakuten.ca/127.0.0.1#5335 -ipset=/rakuten.ca/gfwlist -server=/scholar.google.com.mx/127.0.0.1#5335 -ipset=/scholar.google.com.mx/gfwlist -server=/graph.org/127.0.0.1#5335 -ipset=/graph.org/gfwlist -server=/bisq.io/127.0.0.1#5335 -ipset=/bisq.io/gfwlist -server=/opgg-static.akamaized.net/127.0.0.1#5335 -ipset=/opgg-static.akamaized.net/gfwlist -server=/ttvnw.net/127.0.0.1#5335 -ipset=/ttvnw.net/gfwlist -server=/desktopmovie.net/127.0.0.1#5335 -ipset=/desktopmovie.net/gfwlist -server=/ioffergift.com/127.0.0.1#5335 -ipset=/ioffergift.com/gfwlist -server=/internationalsaimoe.com/127.0.0.1#5335 -ipset=/internationalsaimoe.com/gfwlist -server=/idservice.inc/127.0.0.1#5335 -ipset=/idservice.inc/gfwlist -server=/beatsbydreblackfridaypro.com/127.0.0.1#5335 -ipset=/beatsbydreblackfridaypro.com/gfwlist -server=/squirrelgroup.net/127.0.0.1#5335 -ipset=/squirrelgroup.net/gfwlist -server=/volvotrucks.dk/127.0.0.1#5335 -ipset=/volvotrucks.dk/gfwlist -server=/blogspot.sk/127.0.0.1#5335 -ipset=/blogspot.sk/gfwlist -server=/alphabet.ch/127.0.0.1#5335 -ipset=/alphabet.ch/gfwlist -server=/paypal-pages.com/127.0.0.1#5335 -ipset=/paypal-pages.com/gfwlist -server=/microsoft.ua/127.0.0.1#5335 -ipset=/microsoft.ua/gfwlist -server=/cnn.it/127.0.0.1#5335 -ipset=/cnn.it/gfwlist -server=/bmw-motorrad.com.do/127.0.0.1#5335 -ipset=/bmw-motorrad.com.do/gfwlist -server=/ieeecss.org/127.0.0.1#5335 -ipset=/ieeecss.org/gfwlist -server=/rsg.sc/127.0.0.1#5335 -ipset=/rsg.sc/gfwlist -server=/mini-grouparchive.com/127.0.0.1#5335 -ipset=/mini-grouparchive.com/gfwlist -server=/paypal.hk/127.0.0.1#5335 -ipset=/paypal.hk/gfwlist -server=/intel.jo/127.0.0.1#5335 -ipset=/intel.jo/gfwlist -server=/takegoto.com/127.0.0.1#5335 -ipset=/takegoto.com/gfwlist -server=/sb-mobile.jp/127.0.0.1#5335 -ipset=/sb-mobile.jp/gfwlist -server=/scholar.google.ro/127.0.0.1#5335 -ipset=/scholar.google.ro/gfwlist -server=/fox10phoenix.com/127.0.0.1#5335 -ipset=/fox10phoenix.com/gfwlist -server=/socalbmw.com/127.0.0.1#5335 -ipset=/socalbmw.com/gfwlist -server=/eubluecardvisa.com/127.0.0.1#5335 -ipset=/eubluecardvisa.com/gfwlist -server=/tiendabestbuy.com/127.0.0.1#5335 -ipset=/tiendabestbuy.com/gfwlist -server=/bloomberg.com/127.0.0.1#5335 -ipset=/bloomberg.com/gfwlist -server=/moviesanywhere.com/127.0.0.1#5335 -ipset=/moviesanywhere.com/gfwlist -server=/bmwtampabay.com/127.0.0.1#5335 -ipset=/bmwtampabay.com/gfwlist -server=/mini.md/127.0.0.1#5335 -ipset=/mini.md/gfwlist -server=/appleantilles.com/127.0.0.1#5335 -ipset=/appleantilles.com/gfwlist -server=/hpprinterinstalls.com/127.0.0.1#5335 -ipset=/hpprinterinstalls.com/gfwlist -server=/disney-studio.net/127.0.0.1#5335 -ipset=/disney-studio.net/gfwlist -server=/verisign.com.hk/127.0.0.1#5335 -ipset=/verisign.com.hk/gfwlist -server=/ebayparts.com/127.0.0.1#5335 -ipset=/ebayparts.com/gfwlist -server=/visa.com.uy/127.0.0.1#5335 -ipset=/visa.com.uy/gfwlist -server=/disney.de/127.0.0.1#5335 -ipset=/disney.de/gfwlist -server=/mastercard.com.ve/127.0.0.1#5335 -ipset=/mastercard.com.ve/gfwlist -server=/intercom.com/127.0.0.1#5335 -ipset=/intercom.com/gfwlist -server=/stripe.com/127.0.0.1#5335 -ipset=/stripe.com/gfwlist -server=/paypalobjects.com/127.0.0.1#5335 -ipset=/paypalobjects.com/gfwlist -server=/alphabet.info/127.0.0.1#5335 -ipset=/alphabet.info/gfwlist -server=/bmw.ua/127.0.0.1#5335 -ipset=/bmw.ua/gfwlist -server=/nikehelp.com/127.0.0.1#5335 -ipset=/nikehelp.com/gfwlist -server=/adidas.hu/127.0.0.1#5335 -ipset=/adidas.hu/gfwlist -server=/verisign.com.sg/127.0.0.1#5335 -ipset=/verisign.com.sg/gfwlist -server=/cdn77.org/127.0.0.1#5335 -ipset=/cdn77.org/gfwlist -server=/ea-anz-press.com/127.0.0.1#5335 -ipset=/ea-anz-press.com/gfwlist -server=/xbox.co/127.0.0.1#5335 -ipset=/xbox.co/gfwlist -server=/vk.link/127.0.0.1#5335 -ipset=/vk.link/gfwlist -server=/squirrelvpn.com/127.0.0.1#5335 -ipset=/squirrelvpn.com/gfwlist -server=/molesports.com/127.0.0.1#5335 -ipset=/molesports.com/gfwlist -server=/stheadline.com/127.0.0.1#5335 -ipset=/stheadline.com/gfwlist -server=/gettyimages.be/127.0.0.1#5335 -ipset=/gettyimages.be/gfwlist -server=/irribay.com/127.0.0.1#5335 -ipset=/irribay.com/gfwlist -server=/walmart.pharmacy/127.0.0.1#5335 -ipset=/walmart.pharmacy/gfwlist -server=/bmw-connecteddrive.fi/127.0.0.1#5335 -ipset=/bmw-connecteddrive.fi/gfwlist -server=/handbagsoutletebay.com/127.0.0.1#5335 -ipset=/handbagsoutletebay.com/gfwlist -server=/terrapeak.com/127.0.0.1#5335 -ipset=/terrapeak.com/gfwlist -server=/travelexmoneycard.com/127.0.0.1#5335 -ipset=/travelexmoneycard.com/gfwlist -server=/paypal-dynamic.com/127.0.0.1#5335 -ipset=/paypal-dynamic.com/gfwlist -server=/dealtree.org/127.0.0.1#5335 -ipset=/dealtree.org/gfwlist -server=/thepaypalshop.com/127.0.0.1#5335 -ipset=/thepaypalshop.com/gfwlist -server=/dreambmw.ca/127.0.0.1#5335 -ipset=/dreambmw.ca/gfwlist -server=/bmw-connecteddrive.ca/127.0.0.1#5335 -ipset=/bmw-connecteddrive.ca/gfwlist -server=/softbankworld.com/127.0.0.1#5335 -ipset=/softbankworld.com/gfwlist -server=/bastropfirestone.com/127.0.0.1#5335 -ipset=/bastropfirestone.com/gfwlist -server=/buypass-ssl.com/127.0.0.1#5335 -ipset=/buypass-ssl.com/gfwlist -server=/geeksquad.tv/127.0.0.1#5335 -ipset=/geeksquad.tv/gfwlist -server=/disney.co.kr/127.0.0.1#5335 -ipset=/disney.co.kr/gfwlist -server=/proquest.com/127.0.0.1#5335 -ipset=/proquest.com/gfwlist -server=/mini.ua/127.0.0.1#5335 -ipset=/mini.ua/gfwlist -server=/bestbuycoffeemakers.com/127.0.0.1#5335 -ipset=/bestbuycoffeemakers.com/gfwlist -server=/bmw-m-safetycar.com/127.0.0.1#5335 -ipset=/bmw-m-safetycar.com/gfwlist -server=/apple.is/127.0.0.1#5335 -ipset=/apple.is/gfwlist -server=/pinterest.co.nz/127.0.0.1#5335 -ipset=/pinterest.co.nz/gfwlist -server=/finishbrasil.com.br/127.0.0.1#5335 -ipset=/finishbrasil.com.br/gfwlist -server=/surflite.co/127.0.0.1#5335 -ipset=/surflite.co/gfwlist -server=/mastercard.com.co/127.0.0.1#5335 -ipset=/mastercard.com.co/gfwlist -server=/paypalhere.net/127.0.0.1#5335 -ipset=/paypalhere.net/gfwlist -server=/psyccareers.com/127.0.0.1#5335 -ipset=/psyccareers.com/gfwlist -server=/microsoft.ee/127.0.0.1#5335 -ipset=/microsoft.ee/gfwlist -server=/vfsco.in/127.0.0.1#5335 -ipset=/vfsco.in/gfwlist -server=/bmw.gp/127.0.0.1#5335 -ipset=/bmw.gp/gfwlist diff --git a/luci-app-ssr-plus/root/etc/ssrplus/netflix.list b/luci-app-ssr-plus/root/etc/ssrplus/netflix.list deleted file mode 100644 index f98f711b..00000000 --- a/luci-app-ssr-plus/root/etc/ssrplus/netflix.list +++ /dev/null @@ -1,25 +0,0 @@ -amazonaws.com -aws.amazon.com -awsstatic.com -fast.com -netflix.com -netflix.net -nflxext.com -nflximg.net -nflxso.net -nflxvideo.net -netflixdnstest0.com -netflixdnstest1.com -netflixdnstest2.com -netflixdnstest3.com -netflixdnstest4.com -netflixdnstest5.com -netflixdnstest6.com -netflixdnstest7.com -netflixdnstest8.com -netflixdnstest9.com -hulu.com -huluim.com -hbonow.com -hbogo.com -hbo.com diff --git a/luci-app-ssr-plus/root/etc/ssrplus/netflixip.list b/luci-app-ssr-plus/root/etc/ssrplus/netflixip.list deleted file mode 100644 index 54057996..00000000 --- a/luci-app-ssr-plus/root/etc/ssrplus/netflixip.list +++ /dev/null @@ -1,15 +0,0 @@ -23.246.0.0/18 -37.77.184.0/21 -38.72.126.0/24 -45.57.0.0/17 -64.120.128.0/17 -66.197.128.0/17 -69.53.224.0/19 -103.87.204.0/22 -108.175.32.0/20 -185.2.220.0/22 -185.9.188.0/22 -192.173.64.0/18 -198.38.96.0/19 -198.45.48.0/20 -208.75.76.0/22 diff --git a/luci-app-ssr-plus/root/etc/ssrplus/oversea_list.conf b/luci-app-ssr-plus/root/etc/ssrplus/oversea_list.conf deleted file mode 100644 index ae50fb90..00000000 --- a/luci-app-ssr-plus/root/etc/ssrplus/oversea_list.conf +++ /dev/null @@ -1,192 +0,0 @@ -server=/v.youku.com/127.0.0.1#5335 -server=/api.youku.com/127.0.0.1#5335 -server=/v2.tudou.com/127.0.0.1#5335 -server=/www.tudou.com/127.0.0.1#5335 -server=/s.plcloud.music.qq.com/127.0.0.1#5335 -server=/i.y.qq.com/127.0.0.1#5335 -server=/hot.vrs.sohu.com/127.0.0.1#5335 -server=/live.tv.sohu.com/127.0.0.1#5335 -server=/pad.tv.sohu.com/127.0.0.1#5335 -server=/my.tv.sohu.com/127.0.0.1#5335 -server=/hot.vrs.letv.com/127.0.0.1#5335 -server=/data.video.qiyi.com/127.0.0.1#5335 -server=/cache.video.qiyi.com/127.0.0.1#5335 -server=/cache.vip.qiyi.com/127.0.0.1#5335 -server=/vv.video.qq.com/127.0.0.1#5335 -server=/tt.video.qq.com/127.0.0.1#5335 -server=/ice.video.qq.com/127.0.0.1#5335 -server=/tjsa.video.qq.com/127.0.0.1#5335 -server=/a10.video.qq.com/127.0.0.1#5335 -server=/xyy.video.qq.com/127.0.0.1#5335 -server=/vcq.video.qq.com/127.0.0.1#5335 -server=/vsh.video.qq.com/127.0.0.1#5335 -server=/vbj.video.qq.com/127.0.0.1#5335 -server=/bobo.video.qq.com/127.0.0.1#5335 -server=/flvs.video.qq.com/127.0.0.1#5335 -server=/bkvv.video.qq.com/127.0.0.1#5335 -server=/info.zb.qq.com/127.0.0.1#5335 -server=/geo.js.kankan.xunlei.com/127.0.0.1#5335 -server=/web-play.pptv.com/127.0.0.1#5335 -server=/web-play.pplive.cn/127.0.0.1#5335 -server=/dyn.ugc.pps.tv/127.0.0.1#5335 -server=/v.pps.tv/127.0.0.1#5335 -server=/inner.kandian.com/127.0.0.1#5335 -server=/ipservice.163.com/127.0.0.1#5335 -server=/so.open.163.com/127.0.0.1#5335 -server=/zb.s.qq.com/127.0.0.1#5335 -server=/ip.kankan.xunlei.com/127.0.0.1#5335 -server=/vxml.56.com/127.0.0.1#5335 -server=/music.sina.com.cn/127.0.0.1#5335 -server=/play.baidu.com/127.0.0.1#5335 -server=/v.iask.com/127.0.0.1#5335 -server=/tv.weibo.com/127.0.0.1#5335 -server=/wtv.v.iask.com/127.0.0.1#5335 -server=/video.sina.com.cn/127.0.0.1#5335 -server=/www.yinyuetai.com/127.0.0.1#5335 -server=/api.letv.com/127.0.0.1#5335 -server=/live.gslb.letv.com/127.0.0.1#5335 -server=/static.itv.letv.com/127.0.0.1#5335 -server=/ip.apps.cntv.cn/127.0.0.1#5335 -server=/vdn.apps.cntv.cn/127.0.0.1#5335 -server=/vdn.live.cntv.cn/127.0.0.1#5335 -server=/vip.sports.cntv.cn/127.0.0.1#5335 -server=/a.play.api.3g.youku.com/127.0.0.1#5335 -server=/i.play.api.3g.youku.com/127.0.0.1#5335 -server=/api.3g.youku.com/127.0.0.1#5335 -server=/tv.api.3g.youku.com/127.0.0.1#5335 -server=/play.api.3g.youku.com/127.0.0.1#5335 -server=/play.api.3g.tudou.com/127.0.0.1#5335 -server=/tv.api.3g.tudou.com/127.0.0.1#5335 -server=/api.3g.tudou.com/127.0.0.1#5335 -server=/api.tv.sohu.com/127.0.0.1#5335 -server=/access.tv.sohu.com/127.0.0.1#5335 -server=/iface.iqiyi.com/127.0.0.1#5335 -server=/iface2.iqiyi.com/127.0.0.1#5335 -server=/cache.m.iqiyi.com/127.0.0.1#5335 -server=/dynamic.app.m.letv.com/127.0.0.1#5335 -server=/dynamic.meizi.app.m.letv.com/127.0.0.1#5335 -server=/dynamic.search.app.m.letv.com/127.0.0.1#5335 -server=/dynamic.live.app.m.letv.com/127.0.0.1#5335 -server=/listso.m.areainfo.ppstream.com/127.0.0.1#5335 -server=/epg.api.pptv.com/127.0.0.1#5335 -server=/play.api.pptv.com/127.0.0.1#5335 -server=/m.letv.com/127.0.0.1#5335 -server=/interface.bilibili.com/127.0.0.1#5335 -server=/3g.music.qq.com/127.0.0.1#5335 -server=/mqqplayer.3g.qq.com/127.0.0.1#5335 -server=/proxy.music.qq.com/127.0.0.1#5335 -server=/proxymc.qq.com/127.0.0.1#5335 -server=/ip2.kugou.com/127.0.0.1#5335 -server=/ip.kugou.com/127.0.0.1#5335 -server=/client.api.ttpod.com/127.0.0.1#5335 -server=/mobi.kuwo.cn/127.0.0.1#5335 -server=/mobilefeedback.kugou.com/127.0.0.1#5335 -server=/tingapi.ting.baidu.com/127.0.0.1#5335 -server=/music.baidu.com/127.0.0.1#5335 -server=/serviceinfo.sdk.duomi.com/127.0.0.1#5335 -server=/music.163.com/127.0.0.1#5335 -server=/www.xiami.com/127.0.0.1#5335 -server=/spark.api.xiami.com/127.0.0.1#5335 -server=/iplocation.geo.qiyi.com/127.0.0.1#5335 -server=/sns.video.qq.com/127.0.0.1#5335 -server=/v5.pc.duomi.com/127.0.0.1#5335 -server=/tms.is.ysten.com/127.0.0.1#5335 -server=/internal.check.duokanbox.com/127.0.0.1#5335 -server=/openapi.youku.com/127.0.0.1#5335 -server=/y.qq.com/127.0.0.1#5335 -ipset=/v.youku.com/oversea -ipset=/api.youku.com/oversea -ipset=/v2.tudou.com/oversea -ipset=/www.tudou.com/oversea -ipset=/s.plcloud.music.qq.com/oversea -ipset=/i.y.qq.com/oversea -ipset=/hot.vrs.sohu.com/oversea -ipset=/live.tv.sohu.com/oversea -ipset=/pad.tv.sohu.com/oversea -ipset=/my.tv.sohu.com/oversea -ipset=/hot.vrs.letv.com/oversea -ipset=/data.video.qiyi.com/oversea -ipset=/cache.video.qiyi.com/oversea -ipset=/cache.vip.qiyi.com/oversea -ipset=/vv.video.qq.com/oversea -ipset=/tt.video.qq.com/oversea -ipset=/ice.video.qq.com/oversea -ipset=/tjsa.video.qq.com/oversea -ipset=/a10.video.qq.com/oversea -ipset=/xyy.video.qq.com/oversea -ipset=/vcq.video.qq.com/oversea -ipset=/vsh.video.qq.com/oversea -ipset=/vbj.video.qq.com/oversea -ipset=/bobo.video.qq.com/oversea -ipset=/flvs.video.qq.com/oversea -ipset=/bkvv.video.qq.com/oversea -ipset=/info.zb.qq.com/oversea -ipset=/geo.js.kankan.xunlei.com/oversea -ipset=/web-play.pptv.com/oversea -ipset=/web-play.pplive.cn/oversea -ipset=/dyn.ugc.pps.tv/oversea -ipset=/v.pps.tv/oversea -ipset=/inner.kandian.com/oversea -ipset=/ipservice.163.com/oversea -ipset=/so.open.163.com/oversea -ipset=/zb.s.qq.com/oversea -ipset=/ip.kankan.xunlei.com/oversea -ipset=/vxml.56.com/oversea -ipset=/music.sina.com.cn/oversea -ipset=/play.baidu.com/oversea -ipset=/v.iask.com/oversea -ipset=/tv.weibo.com/oversea -ipset=/wtv.v.iask.com/oversea -ipset=/video.sina.com.cn/oversea -ipset=/www.yinyuetai.com/oversea -ipset=/api.letv.com/oversea -ipset=/live.gslb.letv.com/oversea -ipset=/static.itv.letv.com/oversea -ipset=/ip.apps.cntv.cn/oversea -ipset=/vdn.apps.cntv.cn/oversea -ipset=/vdn.live.cntv.cn/oversea -ipset=/vip.sports.cntv.cn/oversea -ipset=/a.play.api.3g.youku.com/oversea -ipset=/i.play.api.3g.youku.com/oversea -ipset=/api.3g.youku.com/oversea -ipset=/tv.api.3g.youku.com/oversea -ipset=/play.api.3g.youku.com/oversea -ipset=/play.api.3g.tudou.com/oversea -ipset=/tv.api.3g.tudou.com/oversea -ipset=/api.3g.tudou.com/oversea -ipset=/api.tv.sohu.com/oversea -ipset=/access.tv.sohu.com/oversea -ipset=/iface.iqiyi.com/oversea -ipset=/iface2.iqiyi.com/oversea -ipset=/cache.m.iqiyi.com/oversea -ipset=/dynamic.app.m.letv.com/oversea -ipset=/dynamic.meizi.app.m.letv.com/oversea -ipset=/dynamic.search.app.m.letv.com/oversea -ipset=/dynamic.live.app.m.letv.com/oversea -ipset=/listso.m.areainfo.ppstream.com/oversea -ipset=/epg.api.pptv.com/oversea -ipset=/play.api.pptv.com/oversea -ipset=/m.letv.com/oversea -ipset=/interface.bilibili.com/oversea -ipset=/3g.music.qq.com/oversea -ipset=/mqqplayer.3g.qq.com/oversea -ipset=/proxy.music.qq.com/oversea -ipset=/proxymc.qq.com/oversea -ipset=/ip2.kugou.com/oversea -ipset=/ip.kugou.com/oversea -ipset=/client.api.ttpod.com/oversea -ipset=/mobi.kuwo.cn/oversea -ipset=/mobilefeedback.kugou.com/oversea -ipset=/tingapi.ting.baidu.com/oversea -ipset=/music.baidu.com/oversea -ipset=/serviceinfo.sdk.duomi.com/oversea -ipset=/music.163.com/oversea -ipset=/www.xiami.com/oversea -ipset=/spark.api.xiami.com/oversea -ipset=/iplocation.geo.qiyi.com/oversea -ipset=/sns.video.qq.com/oversea -ipset=/v5.pc.duomi.com/oversea -ipset=/tms.is.ysten.com/oversea -ipset=/internal.check.duokanbox.com/oversea -ipset=/openapi.youku.com/oversea -ipset=/y.qq.com/oversea diff --git a/luci-app-ssr-plus/root/etc/ssrplus/white.list b/luci-app-ssr-plus/root/etc/ssrplus/white.list deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus b/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus deleted file mode 100755 index 3ff99ae4..00000000 --- a/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -uci -q batch <<-EOF >/dev/null -delete ucitrack.@shadowsocksr[-1] -add ucitrack shadowsocksr -set ucitrack.@shadowsocksr[-1].init=shadowsocksr -commit ucitrack -delete firewall.shadowsocksr -set firewall.shadowsocksr=include -set firewall.shadowsocksr.type=script -set firewall.shadowsocksr.path=/var/etc/shadowsocksr.include -set firewall.shadowsocksr.reload=1 -commit firewall -EOF -rm -rf /etc/config/shadowsocksr-opkg /etc/ssrplus/*opkg -touch /etc/ssrplus/china_ssr.txt -touch /etc/ssrplus/deny.list -touch /etc/ssrplus/white.list -touch /etc/ssrplus/black.list -touch /etc/ssrplus/netflix.list -touch /etc/ssrplus/netflixip.list -touch /etc/ssrplus/gfw_base.conf -touch /etc/ssrplus/gfw_list.conf -touch /etc/ssrplus/oversea_list.conf -touch /etc/ssrplus/ad.conf -touch /etc/config/shadowsocksr -if [ ! -s "/etc/config/shadowsocksr" ]; then -/etc/init.d/shadowsocksr reset -fi -sed -i "s/option type 'vmess'"/"option type 'v2ray'\n\toption v2ray_protocol 'vmess'/g" /etc/config/shadowsocksr -sed -i "s/option type 'vless'"/"option type 'v2ray'\n\toption v2ray_protocol 'vless'/g" /etc/config/shadowsocksr -if [ -s "/etc/uwsgi/vassals/luci-webui.ini" ];then - limit=$(cat /etc/uwsgi/vassals/luci-webui.ini | grep -Eo "limit-as.*"|grep -Eo "[0-9]+") - [ $limit -lt 5000 ] && sed -i '/limit-as/c\limit-as = 5000' /etc/uwsgi/vassals/luci-webui.ini && \ - /etc/init.d/uwsgi restart -fi -rm -rf /tmp/luci-modulecache /tmp/luci-indexcache -exit 0 diff --git a/luci-app-ssr-plus/root/usr/bin/ssr-monitor b/luci-app-ssr-plus/root/usr/bin/ssr-monitor deleted file mode 100755 index b84d8550..00000000 --- a/luci-app-ssr-plus/root/usr/bin/ssr-monitor +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2017 openwrt-ssr -# Copyright (C) 2017 yushi studio -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# -. $IPKG_INSTROOT/etc/init.d/shadowsocksr -LOCK_FILE="/var/lock/ssr-monitor.lock" -[ -f "$LOCK_FILE" ] && exit 2 -touch "$LOCK_FILE" -server_process_count=$1 -redir_tcp_process=$2 -redir_udp_process=$3 -kcp_process=$4 -local_process=$5 -pdnsd_process=$6 -if [ -z "$pdnsd_process" ]; then - pdnsd_process=0 -fi -i=0 -GLOBAL_SERVER=$(uci_get_by_type global global_server) -server=$(uci_get_by_name $GLOBAL_SERVER server) -kcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port) -server_port=$(uci_get_by_name $GLOBAL_SERVER server_port) -password=$(uci_get_by_name $GLOBAL_SERVER kcp_password) -kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param) -[ "$password" != "" ] && password="--key "${password} - -while [ "1" == "1" ]; do #死循环 - sleep 000030s - #redir tcp - if [ "$redir_tcp_process" -gt 0 ]; then - icount=$(busybox ps -w | grep ssr-retcp | grep -v grep | wc -l) - if [ "$icount" == 0 ]; then - logger -t "$NAME" "ssrplus redir tcp error.restart!" - echolog "ssrplus redir tcp error.restart!" - /etc/init.d/shadowsocksr restart - exit 0 - fi - fi - #redir udp - if [ "$redir_udp_process" -gt 0 ]; then - icount=$(busybox ps -w | grep ssr-reudp | grep -v grep | wc -l) - if [ "$icount" == 0 ]; then - logger -t "$NAME" "ssrplus redir udp error.restart!" - echolog "ssrplus redir udp error.restart!" - /etc/init.d/shadowsocksr restart - exit 0 - fi - fi - #server - if [ "$server_process_count" -gt 0 ]; then - icount=$(busybox ps -w | grep ssr-server | grep -v grep | wc -l) - if [ "$icount" -lt "$server_process_count" ]; then #如果进程挂掉就重启它 - logger -t "$NAME" "ssrplus server error.restart!" - echolog "ssrplus server error.restart!" - kill -9 $(busybox ps -w | grep ssr-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - /etc/init.d/shadowsocksr restart - exit 0 - fi - fi - #kcptun - if [ "$kcp_process" -gt 0 ]; then - icount=$(busybox ps -w | grep kcptun-client | grep -v grep | wc -l) - if [ "$icount" -lt "$kcp_process" ]; then #如果进程挂掉就重启它 - logger -t "$NAME" "ssrplus kcptun error.restart!" - echolog "ssrplus kcptun error.restart!" - killall -q -9 kcptun-client - (/usr/bin/kcptun-client -r $server:$kcp_port -l :$server_port $password $kcp_param &) - fi - fi - #localsocks - if [ "$local_process" -gt 0 ]; then - icount=$(busybox ps -w | grep ssr-local | grep -v grep | wc -l) - if [ "$icount" -lt "$local_process" ]; then #如果进程挂掉就重启它 - logger -t "$NAME" "global socks server error.restart!" - echolog "global socks server error.restart!" - kill -9 $(busybox ps -w | grep ssr-local | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - /etc/init.d/shadowsocksr restart - exit 0 - fi - fi - #pdnsd - if [ "$pdnsd_process" -eq 1 ]; then - icount=$(busybox ps -w | grep $TMP_BIN_PATH/pdnsd | grep -v grep | wc -l) - if [ "$icount" -lt "$pdnsd_process" ]; then #如果进程挂掉就重启它 - logger -t "$NAME" "pdnsd tunnel error.restart!" - echolog "pdnsd tunnel error.restart!" - if [ -f /var/run/pdnsd.pid ]; then - kill $(cat /var/run/pdnsd.pid) >/dev/null 2>&1 - else - kill -9 $(ps | grep $TMP_PATH/pdnsd.conf | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - fi - ln_start_bin $(first_type pdnsd) pdnsd -c $TMP_PATH/pdnsd.conf - fi - fi - #dns2socks - if [ "$pdnsd_process" -eq 2 ]; then - icount=$(busybox ps -w | grep -e ssrplus-dns -e "dns2socks 127.0.0.1 $tmp_dns_port" | grep -v grep | wc -l) - if [ "$icount" -lt 2 ]; then #如果进程挂掉就重启它 - logger -t "$NAME" "dns2socks $dnsstr tunnel error.restart!" - echolog "dns2socks $dnsstr tunnel error.restart!" - dnsstr=$(uci_get_by_type global tunnel_forward 8.8.4.4:53) - dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}') - dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}') - kill -9 $(busybox ps -w | grep ssrplus-dns | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - kill -9 $(busybox ps -w | grep "dns2socks 127.0.0.1 $tmp_dns_port" | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - ln_start_bin $(first_type microsocks) microsocks -i 127.0.0.1 -p $tmp_dns_port ssrplus-dns - ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_dns_port $dnsserver:$dnsport 127.0.0.1:$dns_port -q - fi - fi -done diff --git a/luci-app-ssr-plus/root/usr/bin/ssr-rules b/luci-app-ssr-plus/root/usr/bin/ssr-rules deleted file mode 100755 index 06aa942b..00000000 --- a/luci-app-ssr-plus/root/usr/bin/ssr-rules +++ /dev/null @@ -1,424 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2017 openwrt-ssr -# Copyright (C) 2017 yushi studio -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# -TAG="_SS_SPEC_RULE_" # comment tag -IPT="iptables -t nat" # alias of iptables -FWI=$(uci get firewall.shadowsocksr.path 2>/dev/null) # firewall include file -usage() { - cat <<-EOF - Usage: ssr-rules [options] - - Valid options are: - - -s ip address of shadowsocksr remote server - -l port number of shadowsocksr local server - -S ip address of shadowsocksr remote UDP server - -L port number of shadowsocksr local UDP server - -i a file content is bypassed ip list - -a lan ip of access control, need a prefix to - define access control mode - -b wan ip of will be bypassed - -w wan ip of will be forwarded - -B lan ip of will be bypassed proxy - -p lan ip of will be global proxy - -G lan ip of will be game mode proxy - -D proxy ports - -F shunt mode - -N shunt server IP - -M shunt proxy mode - -m Interface name - -I a file content is bypassed shunt ip list - -e extra options for iptables - -o apply the rules to the OUTPUT chain - -O apply the global rules to the OUTPUT chain - -u enable udprelay mode, TPROXY is required - -U enable udprelay mode, using different IP - and ports for TCP and UDP - -f flush the rules - -g gfwlist mode - -r router mode - -c oversea mode - -z all mode - -h show this help message and exit - EOF - exit $1 -} - -loger() { - # 1.alert 2.crit 3.err 4.warn 5.notice 6.info 7.debug - logger -st ssr-rules[$$] -p$1 $2 -} - -flush_r() { - flush_iptables() { - local ipt="iptables -t $1" - local DAT=$(iptables-save -t $1) - eval $(echo "$DAT" | grep "$TAG" | sed -e 's/^-A/$ipt -D/' -e 's/$/;/') - for chain in $(echo "$DAT" | awk '/^:SS_SPEC/{print $1}'); do - $ipt -F ${chain:1} 2>/dev/null && $ipt -X ${chain:1} - done - } - flush_iptables nat - flush_iptables mangle - ip rule del fwmark 0x01/0x01 table 100 2>/dev/null - ip route del local 0.0.0.0/0 dev lo table 100 2>/dev/null - ipset -X ss_spec_lan_ac 2>/dev/null - ipset -X ss_spec_wan_ac 2>/dev/null - ipset -X ssr_gen_router 2>/dev/null - ipset -X fplan 2>/dev/null - ipset -X bplan 2>/dev/null - ipset -X gmlan 2>/dev/null - ipset -X oversea 2>/dev/null - ipset -X whitelist 2>/dev/null - ipset -X blacklist 2>/dev/null - ipset -X netflix 2>/dev/null - [ -n "$FWI" ] && echo '#!/bin/sh' >$FWI - return 0 -} - -ipset_r() { - [ -f "$IGNORE_LIST" ] && /usr/share/shadowsocksr/chinaipset.sh $IGNORE_LIST - $IPT -N SS_SPEC_WAN_AC - $IPT -I SS_SPEC_WAN_AC -p tcp ! --dport 53 -d $server -j RETURN - ipset -N gmlan hash:net 2>/dev/null - for ip in $LAN_GM_IP; do ipset -! add gmlan $ip; done - case "$RUNMODE" in - router) - ipset -! -R <<-EOF || return 1 - create ss_spec_wan_ac hash:net - $(gen_spec_iplist | sed -e "s/^/add ss_spec_wan_ac /") - EOF - $IPT -A SS_SPEC_WAN_AC -m set --match-set ss_spec_wan_ac dst -j RETURN - $IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j RETURN - $IPT -A SS_SPEC_WAN_AC -m set --match-set gmlan src -m set ! --match-set china dst -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW - ;; - gfw) - ipset -N gfwlist hash:net 2>/dev/null - $IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j RETURN - $IPT -A SS_SPEC_WAN_AC -m set --match-set gfwlist dst -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -m set --match-set gmlan src -m set ! --match-set china dst -j SS_SPEC_WAN_FW - ;; - oversea) - ipset -N oversea hash:net 2>/dev/null - $IPT -I SS_SPEC_WAN_AC -m set --match-set oversea dst -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -m set --match-set gmlan src -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j SS_SPEC_WAN_FW - ;; - all) - $IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW - ;; - esac - ipset -N fplan hash:net 2>/dev/null - for ip in $LAN_FP_IP; do ipset -! add fplan $ip; done - $IPT -I SS_SPEC_WAN_AC -m set --match-set fplan src -j SS_SPEC_WAN_FW - ipset -N bplan hash:net 2>/dev/null - for ip in $LAN_BP_IP; do ipset -! add bplan $ip; done - $IPT -I SS_SPEC_WAN_AC -m set --match-set bplan src -j RETURN - ipset -N whitelist hash:net 2>/dev/null - ipset -N blacklist hash:net 2>/dev/null - $IPT -I SS_SPEC_WAN_AC -m set --match-set blacklist dst -j SS_SPEC_WAN_FW - $IPT -I SS_SPEC_WAN_AC -m set --match-set whitelist dst -j RETURN - if [ $(ipset list music -name -quiet | grep music) ]; then - $IPT -I SS_SPEC_WAN_AC -m set --match-set music dst -j RETURN 2>/dev/null - fi - for ip in $WAN_BP_IP; do ipset -! add whitelist $ip; done - for ip in $WAN_FW_IP; do ipset -! add blacklist $ip; done - if [ "$SHUNT_PORT" != "0" ]; then - ipset -N netflix hash:net 2>/dev/null - for ip in $(cat ${SHUNT_LIST:=/dev/null} 2>/dev/null); do ipset -! add netflix $ip; done - case "$SHUNT_PORT" in - 0) ;; - 1) - $IPT -I SS_SPEC_WAN_AC -p tcp -m set --match-set netflix dst -j REDIRECT --to-ports $local_port - ;; - *) - $IPT -I SS_SPEC_WAN_AC -p tcp -m set --match-set netflix dst -j REDIRECT --to-ports $SHUNT_PORT - if [ "$SHUNT_PROXY" == "1" ]; then - $IPT -I SS_SPEC_WAN_AC -p tcp -d $SHUNT_IP -j REDIRECT --to-ports $local_port - else - ipset -! add whitelist $SHUNT_IP - fi - ;; - esac - fi - return $? -} - -fw_rule() { - $IPT -N SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_FW -d 0.0.0.0/8 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 10.0.0.0/8 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 127.0.0.0/8 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 169.254.0.0/16 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 172.16.0.0/12 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 192.168.0.0/16 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 224.0.0.0/4 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 240.0.0.0/4 -j RETURN - $IPT -A SS_SPEC_WAN_FW -p tcp $PROXY_PORTS -j REDIRECT --to-ports $local_port 2>/dev/null || { - loger 3 "Can't redirect, please check the iptables." - exit 1 - } - return $? -} - -ac_rule() { - if [ -n "$LAN_AC_IP" ]; then - case "${LAN_AC_IP:0:1}" in - w | W) - MATCH_SET="-m set --match-set ss_spec_lan_ac src" - ;; - b | B) - MATCH_SET="-m set ! --match-set ss_spec_lan_ac src" - ;; - *) - loger 3 "Bad argument \`-a $LAN_AC_IP\`." - return 2 - ;; - esac - fi - ipset -! -R <<-EOF || return 1 - create ss_spec_lan_ac hash:net - $(for ip in ${LAN_AC_IP:1}; do echo "add ss_spec_lan_ac $ip"; done) - EOF - if [ -z "$Interface" ]; then - $IPT -I PREROUTING 1 -p tcp $EXT_ARGS $MATCH_SET -m comment --comment "$TAG" -j SS_SPEC_WAN_AC - else - for name in $Interface; do - local IFNAME=$(uci -P /var/state get network.$name.ifname 2>/dev/null) - [ -n "$IFNAME" ] && $IPT -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p tcp $EXT_ARGS $MATCH_SET -m comment --comment "$TAG" -j SS_SPEC_WAN_AC - done - fi - - case "$OUTPUT" in - 1) - $IPT -I OUTPUT 1 -p tcp $EXT_ARGS -m comment --comment "$TAG" -j SS_SPEC_WAN_AC - ;; - 2) - ipset -! -R <<-EOF || return 1 - create ssr_gen_router hash:net - $(gen_spec_iplist | sed -e "s/^/add ssr_gen_router /") - EOF - $IPT -N SS_SPEC_ROUTER && \ - $IPT -A SS_SPEC_ROUTER -m set --match-set ssr_gen_router dst -j RETURN && \ - $IPT -A SS_SPEC_ROUTER -j SS_SPEC_WAN_FW - $IPT -I OUTPUT 1 -p tcp -m comment --comment "$TAG" -j SS_SPEC_ROUTER - ;; - esac - return $? -} - -tp_rule() { - [ -n "$TPROXY" ] || return 0 - ip rule add fwmark 0x01/0x01 table 100 - ip route add local 0.0.0.0/0 dev lo table 100 - local ipt="iptables -t mangle" - $ipt -N SS_SPEC_TPROXY - $ipt -A SS_SPEC_TPROXY -p udp --dport 53 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 0.0.0.0/8 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 10.0.0.0/8 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 127.0.0.0/8 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 169.254.0.0/16 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 172.16.0.0/12 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 192.168.0.0/16 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 224.0.0.0/4 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 240.0.0.0/4 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp ! --dport 53 -d $SERVER -j RETURN - [ "$server" != "$SERVER" ] && ipset -! add whitelist $SERVER - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set bplan src -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set fplan src -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - case "$RUNMODE" in - router) - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set ss_spec_wan_ac dst -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set china dst -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp --dport 443 -j DROP - $ipt -A SS_SPEC_TPROXY -p udp --dport 80 -j DROP - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set gmlan src -m set ! --match-set china dst -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set ! --match-set ss_spec_wan_ac dst -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - ;; - gfw) - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set china dst -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp --dport 443 -j DROP - $ipt -A SS_SPEC_TPROXY -p udp --dport 80 -j DROP - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set gfwlist dst -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set gmlan src -m set ! --match-set china dst -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - ;; - oversea) - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set oversea src -m dst -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set gmlan src -m set -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set china dst -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - ;; - all) - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - ;; - esac - if [ -z "$Interface" ]; then - $ipt -I PREROUTING 1 -p udp $EXT_ARGS $MATCH_SET -m comment --comment "$TAG" -j SS_SPEC_TPROXY - else - for name in $Interface; do - local IFNAME=$(uci -P /var/state get network.$name.ifname 2>/dev/null) - [ -n "$IFNAME" ] && $ipt -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p udp $EXT_ARGS $MATCH_SET -m comment --comment "$TAG" -j SS_SPEC_TPROXY - done - fi - return $? -} - -get_wan_ip() { - cat <<-EOF | grep -E "^([0-9]{1,3}\.){3}[0-9]{1,3}" - $server - $SERVER - $WAN_BP_IP - EOF -} - -gen_spec_iplist() { - cat <<-EOF - 0.0.0.0/8 - 10.0.0.0/8 - 100.64.0.0/10 - 127.0.0.0/8 - 169.254.0.0/16 - 172.16.0.0/12 - 192.0.0.0/24 - 192.0.2.0/24 - 192.88.99.0/24 - 192.168.0.0/16 - 198.18.0.0/15 - 198.51.100.0/24 - 203.0.113.0/24 - 224.0.0.0/4 - 240.0.0.0/4 - 255.255.255.255 - $(get_wan_ip) - EOF -} - -gen_include() { - [ -n "$FWI" ] || return 0 - extract_rules() { - echo "*$1" - iptables-save -t $1 | grep SS_SPEC_ | sed -e "s/^-A \(OUTPUT\|PREROUTING\)/-I \1 1/" - echo 'COMMIT' - } - cat <<-EOF >>$FWI - iptables-save -c | grep -v "SS_SPEC" | iptables-restore -c - iptables-restore -n <<-EOT - $(extract_rules nat) - $(extract_rules mangle) - EOT - EOF - return 0 -} - -while getopts ":m:s:l:S:L:i:e:a:B:b:w:p:G:D:F:N:M:I:oOuUfgrczh" arg; do - case "$arg" in - m) - Interface=$OPTARG - ;; - s) - server=$OPTARG - ;; - l) - local_port=$OPTARG - ;; - S) - SERVER=$OPTARG - ;; - L) - LOCAL_PORT=$OPTARG - ;; - i) - IGNORE_LIST=$OPTARG - ;; - e) - EXT_ARGS=$OPTARG - ;; - a) - LAN_AC_IP=$OPTARG - ;; - B) - LAN_BP_IP=$OPTARG - ;; - b) - WAN_BP_IP=$(for ip in $OPTARG; do echo $ip; done) - ;; - w) - WAN_FW_IP=$OPTARG - ;; - p) - LAN_FP_IP=$OPTARG - ;; - G) - LAN_GM_IP=$OPTARG - ;; - D) - PROXY_PORTS=$OPTARG - ;; - F) - SHUNT_PORT=$OPTARG - ;; - N) - SHUNT_IP=$OPTARG - ;; - M) - SHUNT_PROXY=$OPTARG - ;; - I) - SHUNT_LIST=$OPTARG - ;; - o) - OUTPUT=1 - ;; - O) - OUTPUT=2 - ;; - u) - TPROXY=1 - ;; - U) - TPROXY=2 - ;; - g) - RUNMODE=gfw - ;; - r) - RUNMODE=router - ;; - c) - RUNMODE=oversea - ;; - z) - RUNMODE=all - ;; - f) - flush_r - exit 0 - ;; - h) usage 0 ;; - esac -done - -if [ -z "$server" -o -z "$local_port" ]; then - usage 2 -fi - -case "$TPROXY" in -1) - SERVER=$server - LOCAL_PORT=$local_port - ;; -2) - : ${SERVER:?"You must assign an ip for the udp relay server."} - : ${LOCAL_PORT:?"You must assign a port for the udp relay server."} - ;; -esac - -flush_r && fw_rule && ipset_r && ac_rule && tp_rule && gen_include -RET=$? -[ "$RET" = 0 ] || loger 3 "Start failed!" -exit $RET diff --git a/luci-app-ssr-plus/root/usr/bin/ssr-switch b/luci-app-ssr-plus/root/usr/bin/ssr-switch deleted file mode 100755 index 5a2a3709..00000000 --- a/luci-app-ssr-plus/root/usr/bin/ssr-switch +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/sh /etc/rc.common -# -# Copyright (C) 2017 openwrt-ssr -# Copyright (C) 2017 yushi studio -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -. $IPKG_INSTROOT/etc/init.d/shadowsocksr -LOCK_FILE="/var/lock/ssr-switch.lock" -[ -f "$LOCK_FILE" ] && exit 2 -touch "$LOCK_FILE" -LOG_FILE=/var/log/ssrplus.log - -cycle_time=60 -switch_time=3 -normal_flag=0 -server_locate=0 -server_count=0 -ENABLE_SERVER=nil -[ -n "$1" ] && cycle_time=$1 -[ -n "$2" ] && switch_time=$2 -DEFAULT_SERVER=$(uci_get_by_type global global_server) -CURRENT_SERVER=$DEFAULT_SERVER - -#判断代理是否正常 -check_proxy() { - local result=0 - local try_count=$(uci_get_by_type global switch_try_count 3) - for i in $(seq 1 $try_count); do - /usr/bin/ssr-check www.google.com 80 $switch_time 1 - if [ "$?" == "0" ]; then - # echolog "Check Google Proxy Success, count=$i" - result=0 - break - else - # echolog "Check Google Proxy Fail, count=$i" - /usr/bin/ssr-check www.baidu.com 80 $switch_time 1 - if [ "$?" == "0" ]; then - result=1 - else - result=2 - fi - fi - sleep 1 - done - return $result -} - -test_proxy() { - local servername=$(uci_get_by_name $1 server) - local serverport=$(uci_get_by_name $1 server_port) - ipset add whitelist $servername 2>/dev/null - tcping -q -c 3 -i 1 -t 2 -p $serverport $servername - if [ "$?" -gt "0" ]; then - ipset del whitelist $servername 2>/dev/null - return 1 - fi - /usr/bin/ssr-check $servername $serverport $switch_time - local ret=$? - ipset del whitelist $servername 2>/dev/null - if [ "$ret" == "0" ]; then - return 0 - else - return 1 - fi -} - -search_proxy() { - let server_count=server_count+1 - [ "$normal_flag" == "1" -a "$server_count" -le "$server_locate" ] && return 0 - [ "$(uci_get_by_name $1 switch_enable 0)" != "1" ] && return 1 - [ $ENABLE_SERVER != nil ] && return 0 - [ "$1" == "$CURRENT_SERVER" ] && return 0 - local servername=$(uci_get_by_name $1 server) - local serverport=$(uci_get_by_name $1 server_port) - ipset add whitelist $servername 2>/dev/null - /usr/bin/ssr-check $servername $serverport $switch_time - local ret=$? - ipset del whitelist $servername 2>/dev/null - if [ "$ret" == "0" ]; then - server_locate=$server_count - ENABLE_SERVER=$1 - return 0 - else - return 1 - fi -} - -#选择可用的代理 -select_proxy() { - config_load $NAME - ENABLE_SERVER=nil - mkdir -p /var/run /var/etc - server_count=0 - config_foreach search_proxy servers -} - -#切换代理 -switch_proxy() { - /etc/init.d/shadowsocksr restart $1 - return 0 -} - -start() { - #不支持kcptun启用时的切换 - [ $(uci_get_by_name $DEFAULT_SERVER kcp_enable) = "1" ] && return 1 - while [ "1" == "1" ]; do #死循环 - sleep 0000$cycle_time - LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") - #判断当前代理是否为缺省服务器 - if [ "$CURRENT_SERVER" != "$DEFAULT_SERVER" ]; then - #echo "not default proxy" - echolog "Current server is not default Main server, try to switch back." - #检查缺省服务器是否正常 - if test_proxy $DEFAULT_SERVER; then - #echo "switch to default proxy" - echolog "Main server is avilable." - #缺省服务器正常,切换回来 - CURRENT_SERVER=$DEFAULT_SERVER - switch_proxy $CURRENT_SERVER - echolog "switch to default "$(uci_get_by_name $CURRENT_SERVER alias)" proxy!" - else - echolog "Main server is NOT avilable.Continue using current server." - fi - fi - #判断当前代理是否正常 - #echolog "Start checking if the current server is available." - check_proxy - current_ret=$? - if [ "$current_ret" == "1" ]; then - #当前代理错误,判断有无可用的服务器 - #echo "current error" - echolog "Current server error, try to switch another server." - select_proxy - if [ "$ENABLE_SERVER" != nil ]; then - #有其他服务器可用,进行切换 - #echo $(uci_get_by_name $new_proxy server) - echolog "Another server is avilable, now switching server." - CURRENT_SERVER=$ENABLE_SERVER - switch_proxy $CURRENT_SERVER - normal_flag=1 - echolog "Switch to "$(uci_get_by_name $CURRENT_SERVER alias)" proxy!" - else - switch_proxy $CURRENT_SERVER - normal_flag=1 - echolog "Try restart current server." - fi - else - normal_flag=0 - # echolog "ShadowsocksR No Problem." - fi - done -} diff --git a/luci-app-ssr-plus/root/usr/share/rpcd/acl.d/luci-app-ssr-plus.json b/luci-app-ssr-plus/root/usr/share/rpcd/acl.d/luci-app-ssr-plus.json deleted file mode 100644 index 2c381259..00000000 --- a/luci-app-ssr-plus/root/usr/share/rpcd/acl.d/luci-app-ssr-plus.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-ssr-plus": { - "description": "Grant UCI access for luci-app-ssr-plus", - "read": { - "uci": ["shadowsocksr"] - }, - "write": { - "uci": ["shadowsocksr"] - } - } -} \ No newline at end of file diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh b/luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh deleted file mode 100755 index 4015644f..00000000 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -[ -f "$1" ] && china_ip=$1 -ipset -! flush china 2>/dev/null -ipset -! -R <<-EOF || exit 1 - create china hash:net - $(cat ${china_ip:=/etc/ssrplus/china_ssr.txt} | sed -e "s/^/add china /") -EOF diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua deleted file mode 100755 index dce590e0..00000000 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua +++ /dev/null @@ -1,284 +0,0 @@ -local ucursor = require"luci.model.uci".cursor() -local json = require "luci.jsonc" -local server_section = arg[1] -local proto = arg[2] -local local_port = arg[3] or "0" -local socks_port = arg[4] or "0" -local server = ucursor:get_all("shadowsocksr", server_section) -local outbound_settings = nil -function vmess_vless() - outbound_settings = { - vnext = { - { - address = server.server, - port = tonumber(server.server_port), - users = { - { - id = server.vmess_id, - security = (server.v2ray_protocol == "vmess" or not server.v2ray_protocol) and server.security or nil, - encryption = (server.v2ray_protocol == "vless") and server.vless_encryption or nil, - flow = (server.xtls == '1') and (server.vless_flow and server.vless_flow or "xtls-rprx-splice") or nil - } - } - } - } - } -end -function trojan_shadowsocks() - outbound_settings = { - servers = { - { - address = server.server, - port = tonumber(server.server_port), - password = server.password, - method = (server.v2ray_protocol == "shadowsocks") and server.encrypt_method_v2ray_ss or nil, - flow = (server.v2ray_protocol == "trojan") and (server.xtls == '1') and (server.vless_flow and server.vless_flow or "xtls-rprx-splice") or nil, - ivCheck = (server.v2ray_protocol == "shadowsocks") and (server.ivCheck == '1') or nil - } - } - } -end -function socks_http() - outbound_settings = { - servers = { - { - address = server.server, - port = tonumber(server.server_port), - users = (server.auth_enable == "1") and { - { - user = server.username, - pass = server.password - } - } or nil - } - } - } -end -local outbound = {} -function outbound:new(o) - o = o or {} - setmetatable(o, self) - self.__index = self - return o -end -function outbound:handleIndex(index) - local switch = { - vmess = function() - vmess_vless() - end, - vless = function() - vmess_vless() - end, - trojan = function() - trojan_shadowsocks() - end, - shadowsocks = function() - trojan_shadowsocks() - end, - socks = function() - socks_http() - end, - http = function() - socks_http() - end - } - if switch[index] then - switch[index]() - end -end -local settings = outbound:new() -settings:handleIndex(server.v2ray_protocol) -local Xray = { - log = { - -- error = "/var/ssrplus.log", - loglevel = "warning" - }, - -- 传入连接 - inbound = (local_port ~= "0") and { - -- listening - port = tonumber(local_port), - protocol = "dokodemo-door", - settings = {network = proto, followRedirect = true}, - sniffing = {enabled = true, destOverride = {"http", "tls"}} - } or nil, - -- 开启 socks 代理 - inboundDetour = (proto:find("tcp") and socks_port ~= "0") and { - { - -- socks - protocol = "socks", - port = tonumber(socks_port), - settings = {auth = "noauth", udp = true} - } - } or nil, - -- 传出连接 - outbound = { - protocol = server.v2ray_protocol, - settings = outbound_settings, - -- 底层传输配置 - streamSettings = { - network = server.transport or "tcp", - security = (server.xtls == '1') and "xtls" or (server.tls == '1') and "tls" or nil, - tlsSettings = (server.tls == '1' and (server.insecure == "1" or server.tls_host or server.fingerprint)) and { - -- tls - fingerprint = server.fingerprint, - allowInsecure = (server.insecure == "1") and true or nil, - serverName = server.tls_host - } or nil, - xtlsSettings = (server.xtls == '1' and (server.insecure == "1" or server.tls_host)) and { - -- xtls - allowInsecure = (server.insecure == "1") and true or nil, - serverName = server.tls_host - } or nil, - tcpSettings = (server.transport == "tcp" and server.tcp_guise == "http") and { - -- tcp - header = { - type = server.tcp_guise, - request = { - -- request - path = {server.http_path} or {"/"}, - headers = {Host = {server.http_host} or {}} - } - } - } or nil, - kcpSettings = (server.transport == "kcp") and { - mtu = tonumber(server.mtu), - tti = tonumber(server.tti), - uplinkCapacity = tonumber(server.uplink_capacity), - downlinkCapacity = tonumber(server.downlink_capacity), - congestion = (server.congestion == "1") and true or false, - readBufferSize = tonumber(server.read_buffer_size), - writeBufferSize = tonumber(server.write_buffer_size), - header = {type = server.kcp_guise}, - seed = server.seed or nil - } or nil, - wsSettings = (server.transport == "ws") and (server.ws_path or server.ws_host or server.tls_host) and { - -- ws - path = server.ws_path, - headers = (server.ws_host or server.tls_host) and { - -- headers - Host = server.ws_host or server.tls_host - } or nil - } or nil, - httpSettings = (server.transport == "h2") and { - -- h2 - path = server.h2_path or "", - host = {server.h2_host} or nil, - read_idle_timeout = tonumber(server.read_idle_timeout) or nil, - health_check_timeout = tonumber(server.health_check_timeout) or nil - } or nil, - quicSettings = (server.transport == "quic") and { - -- quic - security = server.quic_security, - key = server.quic_key, - header = {type = server.quic_guise} - } or nil, - grpcSettings = (server.transport == "grpc") and { - -- grpc - serviceName = server.serviceName or "", - multiMode = (server.mux == "1") and true or false, - idle_timeout = tonumber(server.idle_timeout) or nil, - health_check_timeout = tonumber(server.health_check_timeout) or nil, - permit_without_stream = (server.permit_without_stream == "1") and true or nil, - initial_windows_size = tonumber(server.initial_windows_size) or nil - } or nil - }, - mux = (server.mux == "1" and server.xtls ~= "1" and server.transport ~= "grpc") and { - -- mux - enabled = true, - concurrency = tonumber(server.concurrency) - } or nil - } or nil -} -local cipher = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA" -local cipher13 = "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384" -local trojan = { - log_level = 3, - run_type = (proto == "nat" or proto == "tcp") and "nat" or "client", - local_addr = "0.0.0.0", - local_port = tonumber(local_port), - remote_addr = server.server, - remote_port = tonumber(server.server_port), - udp_timeout = 60, - -- 传入连接 - password = {server.password}, - -- 传出连接 - ssl = { - verify = (server.insecure == "0") and true or false, - verify_hostname = (server.tls == "1") and true or false, - cert = (server.certificate) and server.certpath or nil, - cipher = cipher, - cipher_tls13 = cipher13, - sni = server.tls_host, - alpn = {"h2", "http/1.1"}, - curve = "", - reuse_session = true, - session_ticket = (server.tls_sessionTicket == "1") and true or false - }, - udp_timeout = 60, - tcp = { - -- tcp - no_delay = true, - keep_alive = true, - reuse_port = true, - fast_open = (server.fast_open == "1") and true or false, - fast_open_qlen = 20 - } -} -local naiveproxy = { - proxy = (server.username and server.password and server.server and server.server_port) and "https://" .. server.username .. ":" .. server.password .. "@" .. server.server .. ":" .. server.server_port, - listen = (proto == "redir") and "redir" .. "://0.0.0.0:" .. tonumber(local_port) or "socks" .. "://0.0.0.0:" .. tonumber(local_port), - ["insecure-concurrency"] = (socks_port ~= "0") and tonumber(socks_port) or "1" -} -local ss = { - server = (server.kcp_enable == "1") and "127.0.0.1" or server.server, - server_port = tonumber(server.server_port), - local_address = "0.0.0.0", - local_port = tonumber(local_port), - mode = (proto == "tcp,udp") and "tcp_and_udp" or proto .. "_only", - password = server.password, - method = server.encrypt_method_ss, - timeout = tonumber(server.timeout), - fast_open = (server.fast_open == "1") and true or false, - reuse_port = true -} -local config = {} -function config:new(o) - o = o or {} - setmetatable(o, self) - self.__index = self - return o -end -function config:handleIndex(index) - local switch = { - ss = function() - ss.protocol = socks_port - if server.plugin and server.plugin ~= "none" then - ss.plugin = server.plugin - ss.plugin_opts = server.plugin_opts or nil - end - print(json.stringify(ss, 1)) - end, - ssr = function() - ss.protocol = server.protocol - ss.protocol_param = server.protocol_param - ss.method = server.encrypt_method - ss.obfs = server.obfs - ss.obfs_param = server.obfs_param - print(json.stringify(ss, 1)) - end, - v2ray = function() - print(json.stringify(Xray, 1)) - end, - trojan = function() - print(json.stringify(trojan, 1)) - end, - naiveproxy = function() - print(json.stringify(naiveproxy, 1)) - end - } - if switch[index] then - switch[index]() - end -end -local f = config:new() -f:handleIndex(server.type) diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/genred2config.sh b/luci-app-ssr-plus/root/usr/share/shadowsocksr/genred2config.sh deleted file mode 100755 index 3750d3f9..00000000 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/genred2config.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -argv1=$1 -argv2=$2 -argv3=$3 -argv4=$4 -argv5=$5 -argv6=$6 -argv7=$7 -argv8=$8 -argv9=$9 -cat <<-EOF >$argv1 - base { - log_debug = off; - log_info = off; - log = stderr; - daemon = on; - redirector = iptables; - reuseport = on; - } -EOF -tcp() { - if [ "$argv7" == "0" ]; then - cat <<-EOF >>$argv1 - redsocks { - bind = "0.0.0.0:$argv4"; - relay = "$argv5:$argv6"; - type = socks5; - autoproxy = 0; - timeout = 10; - } - EOF - else - cat <<-EOF >>$argv1 - redsocks { - bind = "0.0.0.0:$argv4"; - relay = "$argv5:$argv6"; - type = socks5; - autoproxy = 0; - timeout = 10; - login = "$argv8"; - password = "$argv9"; - } - EOF - fi -} -udp() { - if [ "$argv7" == "0" ]; then - cat <<-EOF >>$argv1 - redudp { - bind = "0.0.0.0:$argv4"; - relay = "$argv5:$argv6"; - type = socks5; - udp_timeout = 10; - } - EOF - else - cat <<-EOF >>$argv1 - redudp { - bind = "0.0.0.0:$argv4"; - relay = "$argv5:$argv6"; - type = socks5; - udp_timeout = 10; - login = "$argv8"; - password = "$argv9"; - } - EOF - fi -} -case "$argv2" in -socks5) - case "$argv3" in - tcp) - tcp - ;; - udp) - udp - ;; - *) - tcp - udp - ;; - esac - ;; -*) - cat <<-EOF >>$argv1 - redsocks { - bind = "0.0.0.0:$argv4"; - type = direct; - interface = $argv3; - autoproxy = 0; - timeout = 10; - } - EOF - ;; -esac diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh deleted file mode 100755 index 66d2b255..00000000 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -. $IPKG_INSTROOT/etc/init.d/shadowsocksr -netflix() { - if [ -f "$TMP_DNSMASQ_PATH/gfw_list.conf" ]; then - for line in $(cat /etc/ssrplus/netflix.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_list.conf; done - for line in $(cat /etc/ssrplus/netflix.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_base.conf; done - fi - cat /etc/ssrplus/netflix.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1#$1\nipset=\/&\/netflix/" >$TMP_DNSMASQ_PATH/netflix_forward.conf -} -mkdir -p $TMP_DNSMASQ_PATH -if [ "$(uci_get_by_type global run_mode router)" == "oversea" ]; then - cp -rf /etc/ssrplus/oversea_list.conf $TMP_DNSMASQ_PATH/ -else - cp -rf /etc/ssrplus/gfw_list.conf $TMP_DNSMASQ_PATH/ - cp -rf /etc/ssrplus/gfw_base.conf $TMP_DNSMASQ_PATH/ -fi -case "$(uci_get_by_type global netflix_server nil)" in -nil) - rm -f $TMP_DNSMASQ_PATH/netflix_forward.conf - ;; -$(uci_get_by_type global global_server nil) | $switch_server | same) - netflix $dns_port - ;; -*) - netflix $tmp_shunt_dns_port - ;; -esac -for line in $(cat /etc/ssrplus/black.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_list.conf; done -for line in $(cat /etc/ssrplus/black.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_base.conf; done -for line in $(cat /etc/ssrplus/white.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_list.conf; done -for line in $(cat /etc/ssrplus/white.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_base.conf; done -for line in $(cat /etc/ssrplus/deny.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_list.conf; done -for line in $(cat /etc/ssrplus/deny.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_base.conf; done -cat /etc/ssrplus/black.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1#$dns_port\nipset=\/&\/blacklist/" >$TMP_DNSMASQ_PATH/blacklist_forward.conf -cat /etc/ssrplus/white.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1\nipset=\/&\/whitelist/" >$TMP_DNSMASQ_PATH/whitelist_forward.conf -cat /etc/ssrplus/deny.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/address=\/&\//" >$TMP_DNSMASQ_PATH/denylist.conf -if [ "$(uci_get_by_type global adblock 0)" == "1" ]; then - cp -f /etc/ssrplus/ad.conf $TMP_DNSMASQ_PATH/ - if [ -f "$TMP_DNSMASQ_PATH/ad.conf" ]; then - for line in $(cat /etc/ssrplus/black.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done - for line in $(cat /etc/ssrplus/white.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done - for line in $(cat /etc/ssrplus/deny.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done - for line in $(cat /etc/ssrplus/netflix.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done - fi -else - rm -f $TMP_DNSMASQ_PATH/ad.conf -fi diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh b/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh deleted file mode 100755 index 9424cfac..00000000 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -/usr/bin/lua /usr/share/shadowsocksr/update.lua -sleep 2s -/usr/share/shadowsocksr/chinaipset.sh /var/etc/ssrplus/china_ssr.txt -sleep 2s -/usr/bin/lua /usr/share/shadowsocksr/subscribe.lua diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua deleted file mode 100755 index 0fd7c5f1..00000000 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua +++ /dev/null @@ -1,634 +0,0 @@ -#!/usr/bin/lua - ------------------------------------------------- --- This file is part of the luci-app-ssr-plus subscribe.lua --- @author William Chan ------------------------------------------------- -require "luci.model.uci" -require "nixio" -require "luci.util" -require "luci.sys" -require "luci.jsonc" --- these global functions are accessed all the time by the event handler --- so caching them is worth the effort -local tinsert = table.insert -local ssub, slen, schar, sbyte, sformat, sgsub = string.sub, string.len, string.char, string.byte, string.format, string.gsub -local jsonParse, jsonStringify = luci.jsonc.parse, luci.jsonc.stringify -local b64decode = nixio.bin.b64decode -local cache = {} -local nodeResult = setmetatable({}, {__index = cache}) -- update result -local name = 'shadowsocksr' -local uciType = 'servers' -local ucic = luci.model.uci.cursor() -local proxy = ucic:get_first(name, 'server_subscribe', 'proxy', '0') -local switch = ucic:get_first(name, 'server_subscribe', 'switch', '1') -local subscribe_url = ucic:get_first(name, 'server_subscribe', 'subscribe_url', {}) -local filter_words = ucic:get_first(name, 'server_subscribe', 'filter_words', '过期时间/剩余流量') -local save_words = ucic:get_first(name, 'server_subscribe', 'save_words', '') -local v2_ss = luci.sys.exec('type -t -p ss-redir sslocal') ~= "" and "ss" or "v2ray" -local v2_tj = luci.sys.exec('type -t -p trojan') ~= "" and "trojan" or "v2ray" -local log = function(...) - print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({...}, " ")) -end -local encrypt_methods_ss = { - -- aead - "aes-128-gcm", - "aes-192-gcm", - "aes-256-gcm", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305" - --[[ stream - "table", - "rc4", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "salsa20", - "chacha20", - "chacha20-ietf" ]] -} --- 分割字符串 -local function split(full, sep) - full = full:gsub("%z", "") -- 这里不是很清楚 有时候结尾带个\0 - local off, result = 1, {} - while true do - local nStart, nEnd = full:find(sep, off) - if not nEnd then - local res = ssub(full, off, slen(full)) - if #res > 0 then -- 过滤掉 \0 - tinsert(result, res) - end - break - else - tinsert(result, ssub(full, off, nStart - 1)) - off = nEnd + 1 - end - end - return result -end --- urlencode -local function get_urlencode(c) - return sformat("%%%02X", sbyte(c)) -end - -local function urlEncode(szText) - local str = szText:gsub("([^0-9a-zA-Z ])", get_urlencode) - str = str:gsub(" ", "+") - return str -end - -local function get_urldecode(h) - return schar(tonumber(h, 16)) -end -local function UrlDecode(szText) - return szText:gsub("+", " "):gsub("%%(%x%x)", get_urldecode) -end - --- trim -local function trim(text) - if not text or text == "" then - return "" - end - return (sgsub(text, "^%s*(.-)%s*$", "%1")) -end --- md5 -local function md5(content) - local stdout = luci.sys.exec('echo \"' .. urlEncode(content) .. '\" | md5sum | cut -d \" \" -f1') - -- assert(nixio.errno() == 0) - return trim(stdout) -end --- base64 -local function base64Decode(text) - local raw = text - if not text then - return '' - end - text = text:gsub("%z", "") - text = text:gsub("_", "/") - text = text:gsub("-", "+") - local mod4 = #text % 4 - text = text .. string.sub('====', mod4 + 1) - local result = b64decode(text) - if result then - return result:gsub("%z", "") - else - return raw - end -end --- 检查数组(table)中是否存在某个字符值 --- https://www.04007.cn/article/135.html -local function checkTabValue(tab) - local revtab = {} - for k,v in pairs(tab) do - revtab[v] = true - end - return revtab -end --- 处理数据 -local function processData(szType, content) - local result = {type = szType, local_port = 1234, kcp_param = '--nocomp'} - if szType == 'ssr' then - local dat = split(content, "/%?") - local hostInfo = split(dat[1], ':') - result.server = hostInfo[1] - result.server_port = hostInfo[2] - result.protocol = hostInfo[3] - result.encrypt_method = hostInfo[4] - result.obfs = hostInfo[5] - result.password = base64Decode(hostInfo[6]) - local params = {} - for _, v in pairs(split(dat[2], '&')) do - local t = split(v, '=') - params[t[1]] = t[2] - end - result.obfs_param = base64Decode(params.obfsparam) - result.protocol_param = base64Decode(params.protoparam) - local group = base64Decode(params.group) - if group then - result.alias = "[" .. group .. "] " - end - result.alias = result.alias .. base64Decode(params.remarks) - elseif szType == 'vmess' then - local info = jsonParse(content) - result.type = 'v2ray' - result.v2ray_protocol = 'vmess' - result.server = info.add - result.server_port = info.port - result.transport = info.net - result.vmess_id = info.id - result.alias = info.ps - -- result.mux = 1 - -- result.concurrency = 8 - if info.net == 'ws' then - result.ws_host = info.host - result.ws_path = info.path - end - if info.net == 'h2' then - result.h2_host = info.host - result.h2_path = info.path - end - if info.net == 'tcp' then - if info.type and info.type ~= "http" then - info.type = "none" - end - result.tcp_guise = info.type - result.http_host = info.host - result.http_path = info.path - end - if info.net == 'kcp' then - result.kcp_guise = info.type - result.mtu = 1350 - result.tti = 50 - result.uplink_capacity = 5 - result.downlink_capacity = 20 - result.read_buffer_size = 2 - result.write_buffer_size = 2 - end - if info.net == 'quic' then - result.quic_guise = info.type - result.quic_key = info.key - result.quic_security = info.securty - end - if info.security then - result.security = info.security - end - if info.tls == "tls" or info.tls == "1" then - result.tls = "1" - result.tls_host = info.host - result.insecure = 1 - else - result.tls = "0" - end - elseif szType == "ss" then - local idx_sp = 0 - local alias = "" - if content:find("#") then - idx_sp = content:find("#") - alias = content:sub(idx_sp + 1, -1) - end - local info = content:sub(1, idx_sp - 1) - local hostInfo = split(base64Decode(info), "@") - local host = split(hostInfo[2], ":") - local userinfo = base64Decode(hostInfo[1]) - local method = userinfo:sub(1, userinfo:find(":") - 1) - local password = userinfo:sub(userinfo:find(":") + 1, #userinfo) - result.alias = UrlDecode(alias) - result.type = v2_ss - result.password = password - result.server = host[1] - if host[2]:find("/%?") then - local query = split(host[2], "/%?") - result.server_port = query[1] - local params = {} - for _, v in pairs(split(query[2], '&')) do - local t = split(v, '=') - params[t[1]] = t[2] - end - if params.plugin then - local plugin_info = UrlDecode(params.plugin) - local idx_pn = plugin_info:find(";") - if idx_pn then - result.plugin = plugin_info:sub(1, idx_pn - 1) - result.plugin_opts = plugin_info:sub(idx_pn + 1, #plugin_info) - else - result.plugin = plugin_info - end - -- 部分机场下发的插件名为 simple-obfs,这里应该改为 obfs-local - if result.plugin == "simple-obfs" then - result.plugin = "obfs-local" - end - end - else - result.server_port = host[2]:gsub("/","") - end - if not checkTabValue(encrypt_methods_ss)[method] then - -- 1202 年了还不支持 SS AEAD 的屑机场 - result.server = nil - elseif v2_ss == "v2ray" then - result.v2ray_protocol = "shadowsocks" - result.encrypt_method_v2ray_ss = method - else - result.encrypt_method_ss = method - end - elseif szType == "sip008" then - result.type = v2_ss - result.server = content.server - result.server_port = content.server_port - result.password = content.password - result.plugin = content.plugin - result.plugin_opts = content.plugin_opts - result.alias = content.remarks - if not checkTabValue(encrypt_methods_ss)[content.method] then - result.server = nil - elseif v2_ss == "v2ray" then - result.v2ray_protocol = "shadowsocks" - result.encrypt_method_v2ray_ss = content.method - else - result.encrypt_method_ss = content.method - end - elseif szType == "ssd" then - result.type = v2_ss - result.server = content.server - result.server_port = content.port - result.password = content.password - result.plugin_opts = content.plugin_options - result.alias = "[" .. content.airport .. "] " .. content.remarks - if content.plugin == "simple-obfs" then - result.plugin = "obfs-local" - else - result.plugin = content.plugin - end - if not checkTabValue(encrypt_methods_ss)[content.encryption] then - result.server = nil - elseif v2_ss == "v2ray" then - result.v2ray_protocol = "shadowsocks" - result.encrypt_method_v2ray_ss = content.method - else - result.encrypt_method_ss = content.method - end - elseif szType == "trojan" then - local idx_sp = 0 - local alias = "" - if content:find("#") then - idx_sp = content:find("#") - alias = content:sub(idx_sp + 1, -1) - end - local info = content:sub(1, idx_sp - 1) - local hostInfo = split(info, "@") - local host = split(hostInfo[2], ":") - local userinfo = hostInfo[1] - local password = userinfo - result.alias = UrlDecode(alias) - result.type = v2_tj - result.v2ray_protocol = "trojan" - result.server = host[1] - -- 按照官方的建议 默认验证ssl证书 - result.insecure = "0" - result.tls = "1" - if host[2]:find("?") then - local query = split(host[2], "?") - result.server_port = query[1] - local params = {} - for _, v in pairs(split(query[2], '&')) do - local t = split(v, '=') - params[t[1]] = t[2] - end - if params.sni then - -- 未指定peer(sni)默认使用remote addr - result.tls_host = params.sni - end - else - result.server_port = host[2] - end - result.password = password - elseif szType == "vless" then - local idx_sp = 0 - local alias = "" - if content:find("#") then - idx_sp = content:find("#") - alias = content:sub(idx_sp + 1, -1) - end - local info = content:sub(1, idx_sp - 1) - local hostInfo = split(info, "@") - local host = split(hostInfo[2], ":") - local uuid = hostInfo[1] - if host[2]:find("?") then - local query = split(host[2], "?") - local params = {} - for _, v in pairs(split(UrlDecode(query[2]), '&')) do - local t = split(v, '=') - params[t[1]] = t[2] - end - result.alias = UrlDecode(alias) - result.type = 'v2ray' - result.v2ray_protocol = 'vless' - result.server = host[1] - result.server_port = query[1] - result.vmess_id = uuid - result.vless_encryption = params.encryption or "none" - result.transport = params.type and (params.type == 'http' and 'h2' or params.type) or "tcp" - if not params.type or params.type == "tcp" then - if params.security == "xtls" then - result.xtls = "1" - result.tls_host = params.sni - result.vless_flow = params.flow - else - result.xtls = "0" - end - end - if params.type == 'ws' then - result.ws_host = params.host - result.ws_path = params.path or "/" - end - if params.type == 'http' then - result.h2_host = params.host - result.h2_path = params.path or "/" - end - if params.type == 'kcp' then - result.kcp_guise = params.headerType or "none" - result.mtu = 1350 - result.tti = 50 - result.uplink_capacity = 5 - result.downlink_capacity = 20 - result.read_buffer_size = 2 - result.write_buffer_size = 2 - result.seed = params.seed - end - if params.type == 'quic' then - result.quic_guise = params.headerType or "none" - result.quic_key = params.key - result.quic_security = params.quicSecurity or "none" - end - if params.type == 'grpc' then - result.serviceName = params.serviceName - end - if params.security == "tls" then - result.tls = "1" - result.tls_host = params.sni - else - result.tls = "0" - end - else - result.server_port = host[2] - end - end - if not result.alias then - if result.server and result.server_port then - result.alias = result.server .. ':' .. result.server_port - else - result.alias = "NULL" - end - end - -- alias 不参与 hashkey 计算 - local alias = result.alias - result.alias = nil - local switch_enable = result.switch_enable - result.switch_enable = nil - result.hashkey = md5(jsonStringify(result)) - result.alias = alias - result.switch_enable = switch_enable - return result -end --- wget -local function wget(url) - local stdout = luci.sys.exec('uclient-fetch -q --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" --no-check-certificate -O- "' .. url .. '"') - return trim(stdout) -end - -local function check_filer(result) - do - -- 过滤的关键词列表 - local filter_word = split(filter_words, "/") - -- 保留的关键词列表 - local check_save = false - if save_words ~= nil and save_words ~= "" and save_words ~= "NULL" then - check_save = true - end - local save_word = split(save_words, "/") - - -- 检查结果 - local filter_result = false - local save_result = true - - -- 检查是否存在过滤关键词 - for i, v in pairs(filter_word) do - if tostring(result.alias):find(v) then - filter_result = true - end - end - - -- 检查是否打开了保留关键词检查,并且进行过滤 - if check_save == true then - for i, v in pairs(save_word) do - if tostring(result.alias):find(v) then - save_result = false - end - end - else - save_result = false - end - - -- 不等时返回 - if filter_result == true or save_result == true then - return true - else - return false - end - end -end - -local execute = function() - -- exec - do - if proxy == '0' then -- 不使用代理更新的话先暂停 - log('服务正在暂停') - luci.sys.init.stop(name) - end - for k, url in ipairs(subscribe_url) do - local raw = wget(url) - if #raw > 0 then - local nodes, szType - local groupHash = md5(url) - cache[groupHash] = {} - tinsert(nodeResult, {}) - local index = #nodeResult - -- SSD 似乎是这种格式 ssd:// 开头的 - if raw:find('ssd://') then - szType = 'ssd' - local nEnd = select(2, raw:find('ssd://')) - nodes = base64Decode(raw:sub(nEnd + 1, #raw)) - nodes = jsonParse(nodes) - local extra = {airport = nodes.airport, port = nodes.port, encryption = nodes.encryption, password = nodes.password} - local servers = {} - -- SS里面包着 干脆直接这样 - for _, server in ipairs(nodes.servers) do - tinsert(servers, setmetatable(server, {__index = extra})) - end - nodes = servers - -- SS SIP008 直接使用 Json 格式 - elseif jsonParse(raw) then - nodes = jsonParse(raw).servers or jsonParse(raw) - if nodes[1].server and nodes[1].method then - szType = 'sip008' - end - else - -- ssd 外的格式 - nodes = split(base64Decode(raw):gsub(" ", "_"), "\n") - end - for _, v in ipairs(nodes) do - if v then - local result - if szType then - result = processData(szType, v) - elseif not szType then - local node = trim(v) - local dat = split(node, "://") - if dat and dat[1] and dat[2] then - local dat3 = "" - if dat[3] then - dat3 = "://" .. dat[3] - end - if dat[1] == 'ss' or dat[1] == 'trojan' then - result = processData(dat[1], dat[2] .. dat3) - else - result = processData(dat[1], base64Decode(dat[2])) - end - end - else - log('跳过未知类型: ' .. szType) - end - -- log(result) - if result then - -- 中文做地址的 也没有人拿中文域名搞,就算中文域也有Puny Code SB 机场 - if not result.server or not result.server_port or result.alias == "NULL" or check_filer(result) or result.server:match("[^0-9a-zA-Z%-%.%s]") or cache[groupHash][result.hashkey] then - log('丢弃无效节点: ' .. result.type .. ' 节点, ' .. result.alias) - else - -- log('成功解析: ' .. result.type ..' 节点, ' .. result.alias) - result.grouphashkey = groupHash - tinsert(nodeResult[index], result) - cache[groupHash][result.hashkey] = nodeResult[index][#nodeResult[index]] - end - end - end - end - log('成功解析节点数量: ' .. #nodes) - else - log(url .. ': 获取内容为空') - end - end - end - -- diff - do - if next(nodeResult) == nil then - log("更新失败,没有可用的节点信息") - if proxy == '0' then - luci.sys.init.start(name) - log('订阅失败, 恢复服务') - end - return - end - local add, del = 0, 0 - ucic:foreach(name, uciType, function(old) - if old.grouphashkey or old.hashkey then -- 没有 hash 的不参与删除 - if not nodeResult[old.grouphashkey] or not nodeResult[old.grouphashkey][old.hashkey] then - ucic:delete(name, old['.name']) - del = del + 1 - else - local dat = nodeResult[old.grouphashkey][old.hashkey] - ucic:tset(name, old['.name'], dat) - -- 标记一下 - setmetatable(nodeResult[old.grouphashkey][old.hashkey], {__index = {_ignore = true}}) - end - else - if not old.alias then - if old.server or old.server_port then - old.alias = old.server .. ':' .. old.server_port - log('忽略手动添加的节点: ' .. old.alias) - else - ucic:delete(name, old['.name']) - end - else - log('忽略手动添加的节点: ' .. old.alias) - end - end - end) - for k, v in ipairs(nodeResult) do - for kk, vv in ipairs(v) do - if not vv._ignore then - local section = ucic:add(name, uciType) - ucic:tset(name, section, vv) - ucic:set(name, section, "switch_enable", switch) - add = add + 1 - end - end - end - ucic:commit(name) - -- 如果原有服务器节点已经不见了就尝试换为第一个节点 - local globalServer = ucic:get_first(name, 'global', 'global_server', '') - if globalServer ~= "nil" then - local firstServer = ucic:get_first(name, uciType) - if firstServer then - if not ucic:get(name, globalServer) then - luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &") - ucic:commit(name) - ucic:set(name, ucic:get_first(name, 'global'), 'global_server', ucic:get_first(name, uciType)) - ucic:commit(name) - log('当前主服务器节点已被删除,正在自动更换为第一个节点。') - luci.sys.call("/etc/init.d/" .. name .. " start > /dev/null 2>&1 &") - else - log('维持当前主服务器节点。') - luci.sys.call("/etc/init.d/" .. name .. " restart > /dev/null 2>&1 &") - end - else - log('没有服务器节点了,停止服务') - luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &") - end - end - log('新增节点数量: ' .. add, '删除节点数量: ' .. del) - log('订阅更新成功') - end -end - -if subscribe_url and #subscribe_url > 0 then - xpcall(execute, function(e) - log(e) - log(debug.traceback()) - log('发生错误, 正在恢复服务') - local firstServer = ucic:get_first(name, uciType) - if firstServer then - luci.sys.call("/etc/init.d/" .. name .. " restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早 - log('重启服务成功') - else - luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早 - log('停止服务成功') - end - end) -end diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua deleted file mode 100755 index 3e832712..00000000 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/lua - ------------------------------------------------- --- This file is part of the luci-app-ssr-plus update.lua --- By Mattraks ------------------------------------------------- -require "luci.sys" -require "luci.model.uci" -local icount = 0 -local args = arg[1] -local uci = luci.model.uci.cursor() -local TMP_DNSMASQ_PATH = "/tmp/dnsmasq.d/dnsmasq-ssrplus.d" -local TMP_PATH = "/var/etc/ssrplus" --- match comments/title/whitelist/ip address/excluded_domain -local comment_pattern = "^[!\\[@]+" -local ip_pattern = "^%d+%.%d+%.%d+%.%d+" -local domain_pattern = "([%w%-%_]+%.[%w%.%-%_]+)[%/%*]*" -local excluded_domain = {"apple.com", "sina.cn", "sina.com.cn", "baidu.com", "byr.cn", "jlike.com", "weibo.com", "zhongsou.com", "youdao.com", "sogou.com", "so.com", "soso.com", "aliyun.com", "taobao.com", "jd.com", "qq.com"} --- gfwlist parameter -local mydnsip = '127.0.0.1' -local mydnsport = '5335' -local ipsetname = 'gfwlist' -local bc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' --- base64decoding -local function base64_dec(data) - data = string.gsub(data, '[^' .. bc .. '=]', '') - return (data:gsub('.', function(x) - if (x == '=') then - return '' - end - local r, f = '', (bc:find(x) - 1) - for i = 6, 1, -1 do - r = r .. (f % 2 ^ i - f % 2 ^ (i - 1) > 0 and '1' or '0') - end - return r; - end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) - if (#x ~= 8) then - return '' - end - local c = 0 - for i = 1, 8 do - c = c + (x:sub(i, i) == '1' and 2 ^ (8 - i) or 0) - end - return string.char(c) - end)) -end --- check excluded domain -local function check_excluded_domain(value) - for k, v in ipairs(excluded_domain) do - if value:find(v) then - return true - end - end -end --- gfwlist转码至dnsmasq格式 -local function generate_gfwlist(type) - local domains = {} - local out = io.open("/tmp/ssr-update." .. type, "w") - for line in io.lines("/tmp/ssr-update.tmp") do - if not (string.find(line, comment_pattern) or string.find(line, ip_pattern) or check_excluded_domain(line)) then - local start, finish, match = string.find(line, domain_pattern) - if (start) then - domains[match] = true - end - end - end - for k, v in pairs(domains) do - out:write(string.format("server=/%s/%s#%s\n", k, mydnsip, mydnsport)) - out:write(string.format("ipset=/%s/%s\n", k, ipsetname)) - end - out:close() - os.remove("/tmp/ssr-update.tmp") -end - --- adblock转码至dnsmasq格式 -local function generate_adblock(type) - local domains = {} - local out = io.open("/tmp/ssr-update." .. type, "w") - for line in io.lines("/tmp/ssr-update.tmp") do - if not (string.find(line, comment_pattern)) then - local start, finish, match = string.find(line, domain_pattern) - if (start) then - domains[match] = true - end - end - end - for k, v in pairs(domains) do - out:write(string.format("address=/%s/\n", k)) - end - out:close() - os.remove("/tmp/ssr-update.tmp") -end - -local log = function(...) - if args then - print("{ret=" .. table.concat({...}, ",retcount=") .. "}") - else - print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({...}, " ")) - end -end - -local function update(url, file, type, file2) - local Num = 1 - local refresh_cmd = "uclient-fetch --no-check-certificate -q -O /tmp/ssr-update." .. type .. " " .. url - local sret = luci.sys.call(refresh_cmd) - if sret == 0 then - if type == "gfw_data" then - local gfwlist = io.open("/tmp/ssr-update." .. type, "r") - local decode = gfwlist:read("*a") - if not decode:find("google") then - decode = base64_dec(decode) - end - gfwlist:close() - -- 写回gfwlist - gfwlist = io.open("/tmp/ssr-update.tmp", "w") - gfwlist:write(decode) - gfwlist:close() - generate_gfwlist(type) - Num = 2 - end - if type == "ad_data" then - local adblock = io.open("/tmp/ssr-update." .. type, "r") - local decode = adblock:read("*a") - if decode:find("address=") then - adblock:close() - else - adblock:close() - -- 写回adblock - adblock = io.open("/tmp/ssr-update.tmp", "w") - adblock:write(decode) - adblock:close() - generate_adblock(type) - end - end - local new_md5 = luci.sys.exec("echo -n $([ -f '/tmp/ssr-update." .. type .. "' ] && md5sum /tmp/ssr-update." .. type .. " | awk '{print $1}')") - local old_md5 = luci.sys.exec("echo -n $([ -f '" .. file .. "' ] && md5sum " .. file .. " | awk '{print $1}')") - if new_md5 == old_md5 then - if args then - log(1) - else - log("你已经是最新数据,无需更新!") - end - else - icount = luci.sys.exec("cat /tmp/ssr-update." .. type .. " | wc -l") - luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file) - if file2 then - luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file2) - end - if type == "gfw_data" or type == "ad_data" then - luci.sys.call("/usr/share/shadowsocksr/gfw2ipset.sh") - else - luci.sys.call("/usr/share/shadowsocksr/chinaipset.sh " .. TMP_PATH .. "/china_ssr.txt") - end - if args then - log(0, tonumber(icount) / Num) - else - log("更新成功! 新的总纪录数:" .. tostring(tonumber(icount) / Num)) - end - end - else - if args then - log(-1) - else - log("更新失败!") - end - end - os.remove("/tmp/ssr-update." .. type) -end - -if args then - if args == "gfw_data" then - update(uci:get_first("shadowsocksr", "global", "gfwlist_url"), "/etc/ssrplus/gfw_list.conf", args, TMP_DNSMASQ_PATH .. "/gfw_list.conf") - os.exit(0) - end - if args == "ip_data" then - update(uci:get_first("shadowsocksr", "global", "chnroute_url"), "/etc/ssrplus/china_ssr.txt", args, TMP_PATH .. "/china_ssr.txt") - os.exit(0) - end - if args == "ad_data" then - update(uci:get_first("shadowsocksr", "global", "adblock_url"), "/etc/ssrplus/ad.conf", args, TMP_DNSMASQ_PATH .. "/ad.conf") - os.exit(0) - end - if args == "nfip_data" then - update(uci:get_first("shadowsocksr", "global", "nfip_url"), "/etc/ssrplus/netflixip.list", args) - os.exit(0) - end -else - log("正在更新【GFW列表】数据库") - update(uci:get_first("shadowsocksr", "global", "gfwlist_url"), "/etc/ssrplus/gfw_list.conf", "gfw_data", TMP_DNSMASQ_PATH .. "/gfw_list.conf") - log("正在更新【国内IP段】数据库") - update(uci:get_first("shadowsocksr", "global", "chnroute_url"), "/etc/ssrplus/china_ssr.txt", "ip_data", TMP_PATH .. "/china_ssr.txt") - if uci:get_first("shadowsocksr", "global", "adblock", "0") == "1" then - log("正在更新【广告屏蔽】数据库") - update(uci:get_first("shadowsocksr", "global", "adblock_url"), "/etc/ssrplus/ad.conf", "ad_data", TMP_DNSMASQ_PATH .. "/ad.conf") - end - -- log("正在更新【Netflix IP段】数据库") - -- update(uci:get_first("shadowsocksr", "global", "nfip_url"), "/etc/ssrplus/netflixip.list", "nfip_data") -end diff --git a/luci-app-supervisord/Makefile b/luci-app-supervisord/Makefile deleted file mode 100644 index b960fb10..00000000 --- a/luci-app-supervisord/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (C) 2016 Openwrt.org -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI support for NginxManager From sundaqiang -LUCI_PKGARCH:=all -PKG_MAINTAINER:=sundaqiang - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-supervisord/README.md b/luci-app-supervisord/README.md deleted file mode 100644 index ad0fdde8..00000000 --- a/luci-app-supervisord/README.md +++ /dev/null @@ -1,27 +0,0 @@ - -# luci-app-supervisord̹ - -һLuciļ򵥵 [supervisord](https://github.com/ochinchina/supervisord) - -### -- һ̹pm2 -- ҪDzֲǵĿijƷٵʵԼظҲ -- nodejspythonijҲУǰ̼Ѿбnodejspython -- ûļһʹҪֱӵ㰴ť¡ʧܣȥĿضļ -- ļ˵: - -```ini -;Ҫļ·ļ||ָ -;backupfile=/usr/bin/xxxxx||/etc/yyyyy -backupfile= - -;ȡ汾 -;getversions=xxxxx version -getversions= -``` -### Чչʾ -![supervisord-1][1] -![supervisord-2][2] - - [1]: https://raw.githubusercontent.com/sundaqiang/openwrt-packages/master/img/supervisord-1.png - [2]: https://raw.githubusercontent.com/sundaqiang/openwrt-packages/master/img/supervisord-2.png \ No newline at end of file diff --git a/luci-app-supervisord/luasrc/controller/supervisord.lua b/luci-app-supervisord/luasrc/controller/supervisord.lua deleted file mode 100644 index d6f05a94..00000000 --- a/luci-app-supervisord/luasrc/controller/supervisord.lua +++ /dev/null @@ -1,239 +0,0 @@ -module("luci.controller.supervisord", package.seeall) -function index() - if not nixio.fs.access("/etc/config/supervisord") then return end - entry({"admin", "services", "supervisord"}, cbi("supervisord"), _("Supervisord"), 95).dependent = true - entry({"admin", "services", "supervisord", "status"}, call("status")).leaf = true - entry({"admin", "services", "supervisord", "getver"}, call("getver")).leaf = true - entry({"admin", "services", "supervisord", "update"}, call("update")).leaf = true - entry({"admin", "services", "supervisord", "gettask"}, call("gettask")).leaf = true - entry({"admin", "services", "supervisord", "starttask"}, call("starttask")).leaf = true - entry({"admin", "services", "supervisord", "restarttask"}, call("restarttask")).leaf = true - entry({"admin", "services", "supervisord", "stoptask"}, call("stoptask")).leaf = true - entry({"admin", "services", "supervisord", "removetask"}, call("removetask")).leaf = true - entry({"admin", "services", "supervisord", "addtask"}, call("addtask")).leaf = true - entry({"admin", "services", "supervisord", "savetask"}, call("savetask")).leaf = true - entry({"admin", "services", "supervisord", "getlog"}, call("getlog")).leaf = true -end - -function Split(str, delim, maxNb) - -- Eliminate bad cases... - if string.find(str, delim) == nil then - return { str } - end - if maxNb == nil or maxNb < 1 then - maxNb = 0 -- No limit - end - local result = {} - local pat = "(.-)" .. delim .. "()" - local nb = 0 - local lastPos - for part, pos in string.gfind(str, pat) do - nb = nb + 1 - result[nb] = part - lastPos = pos - if nb == maxNb then break end - end - -- Handle the last field - if nb ~= maxNb then - result[nb + 1] = string.sub(str, lastPos) - end - return result -end - -function status() - local e = {} - e.running = luci.sys.call("ps | grep supervisord | grep -v grep >/dev/null") == 0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function getver() - local e = {} - local c=luci.model.uci.cursor() - local d=c:get("supervisord", "main", "filepath") - e.nowver=luci.sys.exec(d .. " version") - e.newver=luci.sys.exec("uclient-fetch -qO- 'https://api.github.com/repos/ochinchina/supervisord/releases/latest' | jsonfilter -e '@.tag_name'") - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function update() - local e = {} - local c=luci.model.uci.cursor() - local d=c:get("supervisord", "main", "filepath") - local version = luci.http.formvalue('version') - local arch = nixio.uname().machine or "" - version = version:gsub("\n", "") - if nixio.fs.access("/usr/lib/os-release") then - LEDE_BOARD = luci.sys.exec("echo -n $(grep 'LEDE_BOARD' /usr/lib/os-release | awk -F '[\\042\\047]' '{print $2}')") - end - if nixio.fs.access("/etc/openwrt_release") then - DISTRIB_TARGET = luci.sys.exec("echo -n $(grep 'DISTRIB_TARGET' /etc/openwrt_release | awk -F '[\\042\\047]' '{print $2}')") - end - arch=luci.util.trim(arch) - if arch == "x86_64" then - arch = "64-bit" - end - filename = "supervisord_" .. version:gsub("v", "") .. "_Linux_" .. arch .. ".tar.gz" - nixio.fs.remove("/tmp/" .. filename) - u=c:get("supervisord", "main", "usechinamirror") - if u then - u="https://ghproxy.com/" - else - u="" - end - e.error=luci.sys.call("uclient-fetch -qO- -O '/tmp/" .. filename .. "' '" .. u .. "https://github.com/ochinchina/supervisord/releases/download/" .. version .. "/" .. filename .. "'") - if e.error == 0 then - e.error=luci.sys.exec("tar -xzvf '/tmp/" .. filename .. "' -C /tmp") - if e.error then - e.error=nixio.fs.mover("/tmp/" .. filename:gsub(".tar.gz", "") .. "/supervisord", d) - if e.error then - e.error=0 - sysupgrade=nixio.fs.readfile("/etc/sysupgrade.conf") - if not sysupgrade:find(d) then - sysupgrade=sysupgrade .. '\n' .. d - nixio.fs.writefile ("/etc/sysupgrade.conf", sysupgrade) - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) - end - else - luci.http.prepare_content("application/json") - luci.http.write_json(e) - end - else - luci.http.prepare_content("application/json") - luci.http.write_json(e) - end -end - -function gettask() - local e = {} - local name = luci.http.formvalue('name') - local data = luci.sys.exec("supervisord ctl status " .. name) - e.status=string.gsub(string.sub(data, 34, 50), " ", "") - e.description=string.sub(data, 51) - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function starttask() - local e = {} - local name = luci.http.formvalue('name') - local data = luci.sys.exec("supervisord ctl start " .. name) - if string.find(data,"started") ~= nil then - e.code=1 - else - e.code=0 - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function restarttask() - local e = {} - local name = luci.http.formvalue('name') - local data = luci.sys.exec("supervisord ctl stop " .. name .. " && supervisord ctl start " .. name) - if string.find(data,"started") ~= nil then - e.code=1 - else - e.code=0 - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function stoptask() - local e = {} - local name = luci.http.formvalue('name') - local data = luci.sys.exec("supervisord ctl stop " .. name) - if string.find(data,"stopped") ~= nil then - e.code=1 - else - e.code=0 - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function removetask() - local e = {} - local name = luci.http.formvalue('name') - e.code=nixio.fs.remove('/etc/supervisord/program/' .. name .. '.ini') - if e.code then - luci.sys.call("supervisord ctl reload") - e.code=1 - else - e.code=0 - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function addtask() - local e = {} - local name = luci.http.formvalue('name') - if nixio.fs.access('/etc/supervisord/program/' .. name .. '.ini') then - e.code=2 - luci.http.prepare_content("application/json") - luci.http.write_json(e) - return - end - file=nixio.fs.readfile("/etc/supervisord/program/templates") - file=file:gsub("demo", name) - e.code=nixio.fs.writefile('/etc/supervisord/program/' .. name .. '.ini', file) - if e.code then - luci.sys.call("supervisord ctl reload") - e.code=1 - e.data=file - else - e.code=0 - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function savetask() - local e = {} - local name = luci.http.formvalue('name') - local data = luci.http.formvalue('data') - data = data:gsub("\r\n?", "\n") - file = '/etc/supervisord/program/' .. name .. '.ini' - e.code=nixio.fs.writefile (file, data) - if e.code then - sysupgrade=nixio.fs.readfile("/etc/sysupgrade.conf") - if not sysupgrade:find(file) then - sysupgrade=sysupgrade .. '\n' .. file - end - backupfile=data:match("backupfile=([%a%d%p]+)") - backupfile=Split(backupfile, "||") - for k, v in ipairs(backupfile) do - if not sysupgrade:find(v:gsub("%p", "%%%1")) then - sysupgrade=sysupgrade .. '\n' .. v - end - end - nixio.fs.writefile ("/etc/sysupgrade.conf", sysupgrade) - luci.sys.call("supervisord ctl reload") - e.code=1 - else - e.code=0 - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function getlog() - local e = {} - local name = luci.http.formvalue('name') - if name=="main" then - local data = nixio.fs.readfile ('/etc/supervisord/supervisord.conf') - data = string.match(data, "logfile=([%a%d%p]+)") - e.data=nixio.fs.readfile (data) - else - local data = nixio.fs.readfile ('/etc/supervisord/program/' .. name .. '.ini') - data = string.match(data, "stdout_logfile=([%a%d%p]+)") - e.data=nixio.fs.readfile (data) - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end \ No newline at end of file diff --git a/luci-app-supervisord/luasrc/model/cbi/supervisord.lua b/luci-app-supervisord/luasrc/model/cbi/supervisord.lua deleted file mode 100644 index cb005b0a..00000000 --- a/luci-app-supervisord/luasrc/model/cbi/supervisord.lua +++ /dev/null @@ -1,70 +0,0 @@ -local fs = require "nixio.fs" -local sys = require "luci.sys" - -local m = Map("supervisord",translate("Supervisord"), translate("A golang development process management") .. [[

Powered by sundaqiang]]) -m:section(SimpleSection).template = "supervisord/index" - -s = m:section(TypedSection, "supervisord") -s.addremove = false -s.anonymous = true -s:tab("general", translate("General Settings")) -s:tab("advanced", translate("Configuration File")) -s:tab("list", translate("Task List")) -s:tab("log", translate("Log List")) - -f = s:taboption("general", Flag, "enabled", translate("Enabled")) -f.rmempty = false -v = s:taboption("general", Value, "filepath", translate("File Path")) -v.rmempty = false -v = s:taboption("general", Flag, "usechinamirror", translate("Use China Mirror")) -v.rmempty = false -b = s:taboption("general", Button, "") -b.template = "supervisord/version" - -file=s:taboption("advanced", TextValue, "") -file.template = "cbi/tvalue" -file.rows = 15 -file.wrap = "off" -file.rmempty = false - -l=s:taboption("list", DummyValue, "") -l.template = "supervisord/list" -l.list={} -index=1 -for filelist in fs.dir("/etc/supervisord/program") do - if filelist:find(".ini$") ~= nil then - name=fs.readfile("/etc/supervisord/program/" .. filelist) - l.list[index]={} - l.list[index][1]=name:match("program:(%a+)") - l.list[index][2]="/etc/supervisord/program/" .. filelist - local cmd=name:match("directory=([%a%d%p ]+)") .. "/" .. name:match("getversions=([%a%d%p ]+)") - l.list[index][3]=sys.exec(cmd) - index=index+1 - end -end - -g=s:taboption("log", DummyValue, "") -g.template = "supervisord/log" -g.list=l.list - -function s.create(self,section) - return TypedSection.create(self,section) -end -function s.remove(self,section) - return TypedSection.remove(self,section) -end -function sync_value_to_file(self, section, value, file) - value = value:gsub("\r\n?", "\n") - local old_value = fs.readfile(file) - if value ~= old_value then - fs.writefile(file, value) - self.map:set(section, "amend", "1") - end -end -function file.cfgvalue(self,section) - return fs.readfile("/etc/supervisord/supervisord.conf") or "" -end -function file.write(self, section, value) - sync_value_to_file(self, section, value, "/etc/supervisord/supervisord.conf") -end -return m \ No newline at end of file diff --git a/luci-app-supervisord/luasrc/view/supervisord/index.htm b/luci-app-supervisord/luasrc/view/supervisord/index.htm deleted file mode 100644 index b51d5131..00000000 --- a/luci-app-supervisord/luasrc/view/supervisord/index.htm +++ /dev/null @@ -1,21 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
\ No newline at end of file diff --git a/luci-app-supervisord/luasrc/view/supervisord/list.htm b/luci-app-supervisord/luasrc/view/supervisord/list.htm deleted file mode 100644 index f2c96829..00000000 --- a/luci-app-supervisord/luasrc/view/supervisord/list.htm +++ /dev/null @@ -1,163 +0,0 @@ -<%local fs = require "nixio.fs"%> -<%+cbi/valueheader%> -
- - - - - - - - - - - <% for _,item in pairs(self.list) do %> - -main"> - - - - - - - - <% end %> - -
<%:Name%><%:Versions%><%:Status%><%:Description%><%:Configuration File%><%:Action%>
- <%=item[1]%> - - <%=item[3]%> - - - - - - - - - - -
-
- - -
-
- -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-supervisord/luasrc/view/supervisord/log.htm b/luci-app-supervisord/luasrc/view/supervisord/log.htm deleted file mode 100644 index fe2a4941..00000000 --- a/luci-app-supervisord/luasrc/view/supervisord/log.htm +++ /dev/null @@ -1,35 +0,0 @@ -<%local fs = require "nixio.fs"%> -<%+cbi/valueheader%> -
- -
- -
-
- - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-supervisord/luasrc/view/supervisord/version.htm b/luci-app-supervisord/luasrc/view/supervisord/version.htm deleted file mode 100644 index 139a39fe..00000000 --- a/luci-app-supervisord/luasrc/view/supervisord/version.htm +++ /dev/null @@ -1,56 +0,0 @@ -<%+cbi/valueheader%> - -
- -
- 帮助 - <%:If repeated failures occur, you can download the binaries for the corresponding schemas at the following url.%> -
     - <%:https://github.com/ochinchina/supervisord/releases%> -
     - <%:Unpack the package and place it in the top path.%> -
     - <%:The author binary version number may not have changed.%> -
     - <%:If you successfully update, the refresh page is still lower than the latest version.%> -
     - <%:This is normal.%> -
-
- -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/luci-app-supervisord/po/zh-cn/supervisord.po b/luci-app-supervisord/po/zh-cn/supervisord.po deleted file mode 100644 index 3f139312..00000000 --- a/luci-app-supervisord/po/zh-cn/supervisord.po +++ /dev/null @@ -1,80 +0,0 @@ -msgid "Supervisord" -msgstr "进程管理器" - -msgid "A golang development process management" -msgstr "一款golang开发的进程管理" - -msgid "General Settings" -msgstr "基础设置" - -msgid "Configuration File" -msgstr "配置文件" - -msgid "Task List" -msgstr "任务列表" - -msgid "Log List" -msgstr "日志列表" - -msgid "Enabled" -msgstr "启用" - -msgid "File Path" -msgstr "文件路径" - -msgid "Use China Mirror" -msgstr "使用中国镜像" - -msgid "Update the core" -msgstr "更新核心" - -msgid "If repeated failures occur, you can download the binaries for the corresponding schemas at the following url." -msgstr "如果重复失败,您可以从以下url下载对应模式的二进制文件。" - -msgid "Unpack the package and place it in the top path." -msgstr "解压后并将其放置在上方设置的路径中。" - -msgid "The author binary version number may not have changed." -msgstr "作者二进制版本号可能没有改变。" - -msgid "If you successfully update, the refresh page is still lower than the latest version." -msgstr "如果更新成功,刷新页面仍然低于最新版本。" - -msgid "This is normal." -msgstr "这是正常的。" - -msgid "Local version is" -msgstr "本地版本是" - -msgid ", New version is" -msgstr ",最新版本是" - -msgid "The check failed. Please try again" -msgstr "检查失败。请再试一次" - -msgid "The update failed. Please try again" -msgstr "更新失败。请再试一次" - -msgid "Versions" -msgstr "版本" - -msgid "Only letters can be used for names!" -msgstr "只有字母可以用来命名!" - -msgid "Cannot exceed 20 characters!" -msgstr "不能超过20个字符!" - -msgid "Creation failed. Please try again!" -msgstr "创建失败了。请再试一次!" - -msgid "A task with this name already exists!" -msgstr "已经存在此名称的任务!" - -msgid "Save success!" -msgstr "保存成功!" - -msgid "Save failed!" -msgstr "保存失败!" - -msgid "Are you sure you want to delete this task?" -msgstr "您确定要删除该任务吗?" \ No newline at end of file diff --git a/luci-app-supervisord/po/zh_Hans b/luci-app-supervisord/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-supervisord/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-supervisord/root/etc/config/supervisord b/luci-app-supervisord/root/etc/config/supervisord deleted file mode 100644 index 542b577c..00000000 --- a/luci-app-supervisord/root/etc/config/supervisord +++ /dev/null @@ -1,6 +0,0 @@ - -config supervisord 'main' - option filepath '/usr/bin/supervisord' - option enabled '1' - option amend '0' - diff --git a/luci-app-supervisord/root/etc/init.d/supervisord b/luci-app-supervisord/root/etc/init.d/supervisord deleted file mode 100755 index e18d63fe..00000000 --- a/luci-app-supervisord/root/etc/init.d/supervisord +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh /etc/rc.common -# Copyright (C) 2015 OpenWrt.org - -START=90 - -get_config() { - config_get_bool enabled $1 enabled 0 - config_get_bool amend $1 amend 0 - config_get filepath $1 filepath /usr/bin/supervisord -} - -start() { - config_load supervisord - config_foreach get_config supervisord - [ $enabled -eq 0 ] && exit 0 - $filepath -c /etc/supervisord/supervisord.conf -d -} - -stop() { - config_load supervisord - config_foreach get_config supervisord - $filepath ctl shutdown -} - -reload() { - config_load supervisord - config_foreach get_config supervisord - [ $enabled -eq 0 ] && logger -t supervisord disabled to stop && stop && exit 0 - status=$(ps | grep supervisord | grep -v grep | grep -v luci | grep -v init | grep -v version | wc -l) - [ $status -eq 0 ] && logger -t supervisord unstarted to start && start && exit 0 - if [ $amend -eq 1 ]; then - logger -t supervisord amend to restart - stop - sleep 1 - uci set supervisord.main.amend=0 - uci commit supervisord - start - else - logger -t supervisord fixed to reload - $filepath ctl reload - fi -} diff --git a/luci-app-supervisord/root/etc/supervisord/program/templates b/luci-app-supervisord/root/etc/supervisord/program/templates deleted file mode 100644 index edbc79a8..00000000 --- a/luci-app-supervisord/root/etc/supervisord/program/templates +++ /dev/null @@ -1,60 +0,0 @@ -;更多参数查看https://github.com/ochinchina/supervisord/ - -;程序名称,没事别乱改 -[program:demo] - -;程序启动命令,必须 -;command=xxxxx -command= - -;执行命令的路径,必须 -;directory=/usr/bin -directory= - -;需要备份文件的完整路径,多个文件以||分割,必须 -;backupfile=/usr/bin/xxxxx||/etc/yyyyy -backupfile= - -;获取版本号命令,必须 -;getversions=xxxxx version -getversions= - -;在supervisord启动的时候也自动启动 -autostart=true - -;启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 -startsecs=10 - -;程序退出后自动重启,可选值:[unexpected,true,false] -;默认为unexpected,表示进程意外杀死后才重启 -autorestart=true - -;启动失败自动重试次数,默认是3 -startretries=3 - -;用哪个用户启动进程,默认是root -user=root - -;进程启动优先级,默认999,值小的优先启动 -priority=999 - -;把stderr重定向到stdout,默认false -redirect_stderr=true - -;stdout日志文件大小,默认1MB -stdout_logfile_maxbytes=1MB - -;stdout日志文件备份数,默认是10 -stdout_logfile_backups=10 - -;stdout日志文件,需要注意当指定目录不存在时无法正常启动,所以需手动创建目录 -stdout_logfile=/var/log/demo.log - -;日志的级别 -loglevel=info - -;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 -stopasgroup=false - -;默认为false,向进程组发送kill信号,包括子进程 -killasgroup=false diff --git a/luci-app-supervisord/root/etc/supervisord/supervisord.conf b/luci-app-supervisord/root/etc/supervisord/supervisord.conf deleted file mode 100644 index 120000b9..00000000 --- a/luci-app-supervisord/root/etc/supervisord/supervisord.conf +++ /dev/null @@ -1,40 +0,0 @@ -;更多参数查看https://github.com/ochinchina/supervisord/ -[supervisord] - -;主日志文件;默认路径是$CWD/supervisord.log -logfile=/var/log/supervisord.log - -;最大主日志文件尺寸;默认3MB -logfile_maxbytes=3MB - -;主日志文件备份的数量;默认10 -logfile_backups=10 - -;日志等级;默认info;其他:debug,warn,trace -loglevel=debug - -;supervisord的pid文件;默认supervisord.pid -pidfile=/var/run/supervisord.pid - -;如果为true,从前台开始;默认false -nodaemon=false - -;最小效用启动文件描述符;默认1024 -minfds=1024 - -;最小效用过程描述符;默认200 -minprocs=200 - -;启用web界面,默认仅本地访问且不设置密码 -[inet_http_server] -port=127.0.0.1:9001 -;username=admin -;password=admin - -;启用命令行操作任务,需启用web界面且未设置密码 -[supervisorctl] -serverurl=http://127.0.0.1:9001 - -;加载任务配置文件 -[include] -files = /etc/supervisord/program/*.ini \ No newline at end of file diff --git a/luci-app-supervisord/root/etc/uci-defaults/luci-supervisord b/luci-app-supervisord/root/etc/uci-defaults/luci-supervisord deleted file mode 100644 index 4e3b200c..00000000 --- a/luci-app-supervisord/root/etc/uci-defaults/luci-supervisord +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@supervisord[-1] - add ucitrack supervisord - set ucitrack.@supervisord[-1].init=supervisord - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/luci-app-supervisord/root/usr/share/rpcd/acl.d/luci-app-supervisord.json b/luci-app-supervisord/root/usr/share/rpcd/acl.d/luci-app-supervisord.json deleted file mode 100644 index a79cc5e0..00000000 --- a/luci-app-supervisord/root/usr/share/rpcd/acl.d/luci-app-supervisord.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-supervisord": { - "description": "Grant UCI access for luci-app-supervisord", - "read": { - "uci": [ "supervisord" ] - }, - "write": { - "uci": [ "supervisord" ] - } - } -} diff --git a/luci-app-tencentcloud-cos/.gitignore b/luci-app-tencentcloud-cos/.gitignore deleted file mode 100644 index 496ee2ca..00000000 --- a/luci-app-tencentcloud-cos/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.DS_Store \ No newline at end of file diff --git a/luci-app-tencentcloud-cos/Makefile b/luci-app-tencentcloud-cos/Makefile deleted file mode 100644 index ff76bb3c..00000000 --- a/luci-app-tencentcloud-cos/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -include $(TOPDIR)/rules.mk - - -PKG_NAME:=luci-app-tencentcloud-cos -PKG_VERSION=1.0 - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/luci/luci.mk - -define Package/luci-app-tencentcloud-cos - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=COSFS Client for LuCI - PKGARCH:=all - DEPENDS=+vsftpd-alt -endef - -define Package/luci-app-tencentcloud-cos/description - This package contains LuCI configuration pages for 腾讯云COS. -endef - -define Build/Prepare -endef - -define Build/Configure -endef - -define Build/Compile -endef - -define Package/luci-app-tencentcloud-cos/install - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_DIR) $(1)/etc - $(INSTALL_DIR) $(1)/etc/uci-defaults - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller - - $(INSTALL_CONF) ./files/root/etc/config/cosclient $(1)/etc/config/cosclient - $(INSTALL_CONF) ./files/root/etc/passwd-cosfs $(1)/etc/passwd-cosfs - $(INSTALL_BIN) ./files/root/etc/init.d/cosclient $(1)/etc/init.d/cosclient - $(INSTALL_BIN) ./files/root/etc/uploadData $(1)/etc/uploadData - $(INSTALL_BIN) ./files/root/etc/uci-defaults/cosclient $(1)/etc/uci-defaults/cosclient - $(INSTALL_DATA) ./files/root/usr/lib/lua/luci/model/cbi/cosclient.lua $(1)/usr/lib/lua/luci/model/cbi/cosclient.lua - $(INSTALL_DATA) ./files/root/usr/lib/lua/luci/controller/cosclient.lua $(1)/usr/lib/lua/luci/controller/cosclient.lua -endef - -$(eval $(call BuildPackage,luci-app-tencentcloud-cos)) diff --git a/luci-app-tencentcloud-cos/files/root/etc/config/cosclient b/luci-app-tencentcloud-cos/files/root/etc/config/cosclient deleted file mode 100644 index 7ea3d0ab..00000000 --- a/luci-app-tencentcloud-cos/files/root/etc/config/cosclient +++ /dev/null @@ -1,9 +0,0 @@ -config cosclient - option secretid '' - option secretkey '' - option bucket '' - option region '' - option sharename '' - option folder 'cos' - option siteid '' - diff --git a/luci-app-tencentcloud-cos/files/root/etc/init.d/cosclient b/luci-app-tencentcloud-cos/files/root/etc/init.d/cosclient deleted file mode 100644 index 578f51e2..00000000 --- a/luci-app-tencentcloud-cos/files/root/etc/init.d/cosclient +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh /etc/rc.common -START=100 - -run_cos() -{ - local enable - config_get_bool enable $1 enable - - if [ $enable ]; then - local bucket - local region - local folder - local secretid - local secretkey - local requestAddrPre="http://cos." - local requestAddrEnd=".myqcloud.com" - - config_get bucket $1 bucket - config_get region $1 region - config_get folder $1 folder - config_get secretid $1 secretid - config_get secretkey $1 secretkey - local flodername="/home/ftp/"$folder - if [ ! -d "$flodername" ];then - mkdir $flodername - fi - echo $bucket":"$secretid":"$secretkey > /etc/passwd-cosfs - uci set vsftpd.@anonymous[-1].enable=1 - uci set vsftpd.@anonymous[-1].enable=1 - uci set vsftpd.@anonymous[-1].enable=1 - uci set vsftpd.@anonymous[-1].enable=1 - uci commit vsftpd - /etc/init.d/vsftpd restart - cosfs $bucket $flodername -ourl=$requestAddrPre$region$requestAddrEnd -odbglevel=info -onoxattr -oallow_other - echo "COSFS Client has started." - fi -} - -start() -{ - count=`mount -v | grep fuse.cosfs | awk '{print $3}' | wc -l` - if [ "$count" -ge 1 ]; then - mount -v | grep fuse.cosfs | awk '{print $3}' | xargs umount - fi - config_load cosclient - config_foreach run_cos cosclient -} -stop(){ - echo "STOP" -} - diff --git a/luci-app-tencentcloud-cos/files/root/etc/passwd-cosfs b/luci-app-tencentcloud-cos/files/root/etc/passwd-cosfs deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-tencentcloud-cos/files/root/etc/uci-defaults/cosclient b/luci-app-tencentcloud-cos/files/root/etc/uci-defaults/cosclient deleted file mode 100644 index 31fc34c2..00000000 --- a/luci-app-tencentcloud-cos/files/root/etc/uci-defaults/cosclient +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@cosclient[-1] - add ucitrack cosclient - set ucitrack.@cosclient[-1].init=cosclient - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/luci-app-tencentcloud-cos/files/root/etc/uploadData b/luci-app-tencentcloud-cos/files/root/etc/uploadData deleted file mode 100644 index 6c4c4b5b..00000000 --- a/luci-app-tencentcloud-cos/files/root/etc/uploadData +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -runflag=$1 -if [[ $1 -eq 1 ]]; then - enabled=$2 - secretId=$3 - secretKey=$4 - bucket=$5 - region=$6 - uin=`/etc/openw $3 $4` - siteid=`uci get cosclient.@cosclient[-1].siteid` - siteurl="openwrt" - siteapp="openwrt" - plugintype="cos" - if [[ ! $siteid ]]; then - $siteid="openwrt_"$(rand 1 50) - `uci set cosclient.@cosclient[-1].sitid=$siteid` - `uci commit cosclient` - fi - . /usr/share/libubox/jshn.sh - json_init - json_add_string "action" "save_config" - json_add_string "plugin_type" "cos" - json_add_object "data" - json_add_string "site_id" $siteid - json_add_string "site_url" $siteurl - json_add_string "site_app" $siteapp - json_add_string "uin" $uin - json_add_string "cust_sec_on" "2" - json_add_object "others" - json_add_string "cos_bucket" $bucket - json_add_string "cos_region" $region - - - postdata=`json_dump` - `curl -X POST https://openapp.qq.com/api/public/index.php/upload -H "Content-Type: application/json" -d "$postdata"` -fi - -function rand(){ - min=$1 - max=$(($2-$min+1)) - num=$(date +%s%N) - echo $(($num%$max+$min)) -} \ No newline at end of file diff --git a/luci-app-tencentcloud-cos/files/root/usr/lib/lua/luci/controller/cosclient.lua b/luci-app-tencentcloud-cos/files/root/usr/lib/lua/luci/controller/cosclient.lua deleted file mode 100644 index 91cc5def..00000000 --- a/luci-app-tencentcloud-cos/files/root/usr/lib/lua/luci/controller/cosclient.lua +++ /dev/null @@ -1,6 +0,0 @@ -module("luci.controller.cosclient", package.seeall) - -function index() - entry({"admin", "tencentcloud"}, firstchild(), "腾讯云设置", 30).dependent=false - entry({"admin", "tencentcloud", "cosclient"}, cbi("cosclient"), _("对象存储(COS)"), 1) - end \ No newline at end of file diff --git a/luci-app-tencentcloud-cos/files/root/usr/lib/lua/luci/model/cbi/cosclient.lua b/luci-app-tencentcloud-cos/files/root/usr/lib/lua/luci/model/cbi/cosclient.lua deleted file mode 100644 index 3c44ebdc..00000000 --- a/luci-app-tencentcloud-cos/files/root/usr/lib/lua/luci/model/cbi/cosclient.lua +++ /dev/null @@ -1,57 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface - -Copyright 2010 Jo-Philipp Wich - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 -]]-- - -require("luci.sys") - -m = Map("cosclient", translate("COSFS Client"), translate("Configure COSFS Client.")) - -s = m:section(TypedSection, "cosclient", "") -s.addremove = false -s.anonymous = true - -enable = s:option(Flag, "enable", translate("EnableCos")) -secretid = s:option(Value, "secretid", translate("secretId")) -secretkey = s:option(Value, "secretkey", translate("secretKey")) -bucket = s:option(Value, "bucket", translate("BucketName")) -region = s:option(Value, "region", translate("Region")) -folder = s:option(Value, "folder", translate("FolderName")) - -local apply=luci.http.formvalue("cbi.apply") -if apply then -local key, val -local Enable -local Secretid -local Secretkey -local Bucket -local Region -for key, val in pairs(luci.http.formvalue()) do - if(string.find(key,"enable")) - then - Enable=val - elseif(string.find(key,"secretid")) - then - Secretid=val - elseif(string.find(key,"secretkey")) - then - Secretkey=val - elseif(string.find(key,"bucket")) - then - Bucket=val - elseif(string.find(key,"region")) - then - Region=val - end -end - luci.sys.call("/etc/uploadData 1 "..Enable.." "..Secretid.." "..Secretkey.." "..Bucket.." "..Region.." > /dev/null") -end - -return m diff --git a/luci-app-tencentddns/LICENSE b/luci-app-tencentddns/LICENSE deleted file mode 100644 index 989e2c59..00000000 --- a/luci-app-tencentddns/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/luci-app-tencentddns/Makefile b/luci-app-tencentddns/Makefile deleted file mode 100644 index 923d7d58..00000000 --- a/luci-app-tencentddns/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -# -# Copyright (C) 2020 tencentcloud -# -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-tencentddns -PKG_VERSION:=0.1.0 -PKG_RELEASE:= - -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=tencentcloud - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/luci-app-tencentddns - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=LuCI Support for tencentddns - PKGARCH:=all - DEPENDS:=+openssl-util +curl -endef - -define Package/luci-app-tencentddns/description - LuCI Support for TencentDDNS. -endef - -define Build/Prepare - $(foreach po,$(wildcard ${CURDIR}/files/luci/i18n/*.po), \ - po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));) -endef - -define Build/Configure -endef - -define Build/Compile -endef - -define Package/luci-app-tencentddns/postinst -#!/bin/sh -if [ -z "$${IPKG_INSTROOT}" ]; then - if [ -f /etc/uci-defaults/luci-tencentddns ]; then - ( . /etc/uci-defaults/luci-tencentddns ) && \ - rm -f /etc/uci-defaults/luci-tencentddns - fi - rm -rf /tmp/luci-indexcache /tmp/luci-modulecache -fi -exit 0 -endef - -define Package/luci-app-tencentddns/prerm -#!/bin/sh -/etc/init.d/tencentddns stop -exit 0 -endef - -define Package/luci-app-tencentddns/conffiles -/etc/config/tencentddns -endef - -define Package/luci-app-tencentddns/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - $(INSTALL_DATA) $(PKG_BUILD_DIR)/tencentddns.*.lmo $(1)/usr/lib/lua/luci/i18n/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller - $(INSTALL_DATA) ./files/luci/controller/*.lua $(1)/usr/lib/lua/luci/controller/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/tencentddns - $(INSTALL_DATA) ./files/luci/model/cbi/*.lua $(1)/usr/lib/lua/luci/model/cbi/ - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_DATA) ./files/root/etc/config/tencentddns $(1)/etc/config/tencentddns - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/root/etc/init.d/tencentddns $(1)/etc/init.d/tencentddns - $(INSTALL_DIR) $(1)/etc/uci-defaults - $(INSTALL_BIN) ./files/root/etc/uci-defaults/luci-tencentddns $(1)/etc/uci-defaults/luci-tencentddns - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) ./files/root/usr/sbin/tencentddns $(1)/usr/sbin/tencentddns - $(INSTALL_DIR) $(1)/etc - $(INSTALL_BIN) ./files/root/etc/tencentddnsupload $(1)/etc/tencentddnsupload -endef - -$(eval $(call BuildPackage,luci-app-tencentddns)) diff --git a/luci-app-tencentddns/files/luci/controller/tencentddns.lua b/luci-app-tencentddns/files/luci/controller/tencentddns.lua deleted file mode 100644 index 39bd044e..00000000 --- a/luci-app-tencentddns/files/luci/controller/tencentddns.lua +++ /dev/null @@ -1,5 +0,0 @@ -module("luci.controller.tencentddns",package.seeall) -function index() -entry({"admin", "tencentcloud"}, firstchild(), "腾讯云设置", 30).dependent=false -entry({"admin", "tencentcloud", "tencentddns"},cbi("tencentddns"),_("TencentDDNS"),2) -end diff --git a/luci-app-tencentddns/files/luci/i18n/tencentddns.zh-cn.po b/luci-app-tencentddns/files/luci/i18n/tencentddns.zh-cn.po deleted file mode 100644 index 412b6065..00000000 --- a/luci-app-tencentddns/files/luci/i18n/tencentddns.zh-cn.po +++ /dev/null @@ -1,60 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "TencentDDNS" -msgstr "腾讯云DDNS" - -msgid "enable" -msgstr "启用" - -msgid "Clean Before Update" -msgstr "清除所有同名记录" - -msgid "Clean Before Update mean" -msgstr "如果有相同的域名的A解析记录,DDNS会将其覆盖" - -msgid "Base" -msgstr "基本设置" - -msgid "Key ID" -msgstr "密钥ID" - -msgid "Key ID Mean" -msgstr "DNSPod后台密钥管理中的ID" - -msgid "Key Token" -msgstr "密钥Token" - -msgid "Key Token Mean" -msgstr "DNSPod后台密钥管理中的Token" - - -msgid "WAN-IP Source" -msgstr "WAN-IP来源" - -msgid "Select WAN-IP Source" -msgstr "选择WAN-IP来源" - -msgid "Select the WAN-IP Source for TencentDDNS, like wan/internet" -msgstr "动态域名的IP来源,如wan/internet" - -msgid "Main Domain" -msgstr "主域名" - -msgid "Sub Domain" -msgstr "子域名" - -msgid "For example: test.github.com -> github.com" -msgstr "例如: test.github.com 则填: github.com" - -msgid "For example: test.github.com -> test" -msgstr "例如: test.github.com, 则填: test" - -msgid "Inspection Time" -msgstr "检查时间" - -msgid "Unit: Minute, Range: 1-59" -msgstr "域名检查间隔时间,单位分钟,范围1-59" - -msgid "Update Log" -msgstr "更新记录" diff --git a/luci-app-tencentddns/files/luci/model/cbi/tencentddns.lua b/luci-app-tencentddns/files/luci/model/cbi/tencentddns.lua deleted file mode 100644 index 52af23ae..00000000 --- a/luci-app-tencentddns/files/luci/model/cbi/tencentddns.lua +++ /dev/null @@ -1,83 +0,0 @@ -local a=require"luci.sys" -local e=luci.model.uci.cursor() -local e=require"nixio.fs" -require("luci.sys") -local t,e,o - -t=Map("tencentddns",translate("TencentDDNS")) - -e=t:section(TypedSection,"base",translate("Base")) -e.anonymous=true - -enable=e:option(Flag,"enable",translate("enable")) -enable.rmempty=false - -enable=e:option(Flag,"clean",translate("Clean Before Update"),translate("Clean Before Update mean")) -enable.rmempty=false - -token=e:option(Value,"key_id",translate("Key ID"),translate("Key ID Mean")) -email=e:option(Value,"key_token",translate("Key Token"),translate("Key Token Mean")) -email.password = true - -iface=e:option(ListValue,"interface",translate("WAN-IP Source"),translate("Select the WAN-IP Source for TencentDDNS, like wan/internet")) -iface:value("",translate("Select WAN-IP Source")) -iface:value("internet") -iface:value("wan") - -iface.rmempty=false -main=e:option(Value,"main_domain",translate("Main Domain"),translate("For example: test.github.com -> github.com")) -main.rmempty=false -sub=e:option(Value,"sub_domain",translate("Sub Domain"),translate("For example: test.github.com -> test")) -sub.rmempty=false -time=e:option(Value,"time",translate("Inspection Time"),translate("Unit: Minute, Range: 1-59")) -time.rmempty=false - -e=t:section(TypedSection,"base",translate("Update Log")) -e.anonymous=true -local a="/var/log/tencentddns.log" -tvlog=e:option(TextValue,"sylogtext") -tvlog.rows=16 -tvlog.readonly="readonly" -tvlog.wrap="off" - -function tvlog.cfgvalue(e,e) - sylogtext="" - if a and nixio.fs.access(a) then - sylogtext=luci.sys.exec("tail -n 100 %s"%a) - end - return sylogtext -end - - -tvlog.write=function(e,e,e) -end -local e=luci.http.formvalue("cbi.apply") -if e then - local key, val - local Enable - local Keyid - local Keytoken - local Domain - local Subdomian - for key, val in pairs(luci.http.formvalue()) do - if(string.find(key,"enable")) - then - Enable=val - elseif(string.find(key,"key_id")) - then - Keyid=val - elseif(string.find(key,"key_token")) - then - Keytoken=val - elseif(string.find(key,"main_domain")) - then - Domain=val - elseif(string.find(key,"sub_domain")) - then - Subdomian=val - end - end - io.popen("/etc/tencentddnsupload 1 "..Keyid.." "..Domain.." "..Subdomian.." > /dev/null") - io.popen("/etc/init.d/tencentddns restart") -end -return t diff --git a/luci-app-tencentddns/files/root/etc/config/tencentddns b/luci-app-tencentddns/files/root/etc/config/tencentddns deleted file mode 100644 index 8a5496a2..00000000 --- a/luci-app-tencentddns/files/root/etc/config/tencentddns +++ /dev/null @@ -1,5 +0,0 @@ - -config base 'base' - option enable '0' - option time '10' - option siteid '' diff --git a/luci-app-tencentddns/files/root/etc/init.d/tencentddns b/luci-app-tencentddns/files/root/etc/init.d/tencentddns deleted file mode 100644 index 7f9767f7..00000000 --- a/luci-app-tencentddns/files/root/etc/init.d/tencentddns +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=80 -NAME=tencentddns - -NE_TIPS='TencentDDNS NOT ENABLED' - -restart() { - start -} - -uci_get_by_name() { - local ret=$(uci get $NAME.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_bool_by_name() { - case "$(uci_get_by_name $1 $2)" in - 1|on|true|yes|enabled) return 0;; - esac - return 1 -} - -add_hotplug() { - cat < "/etc/hotplug.d/iface/${START}-${NAME}" -#!/bin/sh /etc/rc.common - -[ "Z\$ACTION" = "Zifup" -a "Z\$INTERFACE" = "Zwan" ] || exit 0 - -DATE=\$(date +'%Y-%m-%d %H:%M:%S') -( sleep 10 && ( echo "\$DATE IFUP-WAN" && /usr/sbin/tencentddns ) >> /var/log/tencentddns.log 2>&1 ) & - -exit 0 -EOF - chmod +x "/etc/hotplug.d/iface/${START}-${NAME}" -} - -start() { - $(uci_bool_by_name base enable) || { - stop - return 0 - } - - add_hotplug - - sed -i "/${NE_TIPS}/d" /var/log/tencentddns.log - - time=$(uci_get_by_name base time 10) - [ 0 -lt $time -a $time -lt 60 ] || time=10 - - [ -f /etc/crontabs/root ] || mkdir -p /etc/crontabs && touch /etc/crontabs/root - sed -i '/tencentddns/d' /etc/crontabs/root - echo "*/$time * * * * /usr/sbin/tencentddns >> /var/log/tencentddns.log 2>&1" >> /etc/crontabs/root - /etc/init.d/cron restart - - ( /usr/sbin/tencentddns >> /var/log/tencentddns.log 2>&1 ) & -} - -stop() { - rm -rf "/etc/hotplug.d/iface/${START}-${NAME}" - sed -i '/tencentddns/d' /etc/crontabs/root >/dev/null 2>&1 - /etc/init.d/cron restart - echo "${NE_TIPS}" > /var/log/tencentddns.log -} - diff --git a/luci-app-tencentddns/files/root/etc/tencentddnsupload b/luci-app-tencentddns/files/root/etc/tencentddnsupload deleted file mode 100644 index 48b70470..00000000 --- a/luci-app-tencentddns/files/root/etc/tencentddnsupload +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -function rand(){ - min=$1 - max=$(($2-$min+1)) - num=$(date +%s%N) - echo $(($num%$max+$min)) -} - -runflag=$1 -if [[ $1 -eq 1 ]]; then - uin=$2 - domain=$3 - subdomain=$4 - siteid=`uci get tencentddns.base.siteid` - siteurl="openwrt" - siteapp="openwrt" - plugintype="ddns" - if [[ ! $siteid ]]; then - siteid="openwrt_"$(rand 1 50) - uci set tencentddns.base.siteid=$siteid - uci commit tencentddns - fi - . /usr/share/libubox/jshn.sh - json_init - json_add_string "action" "save_config" - json_add_string "plugin_type" "ddns" - json_add_object "data" - json_add_string "site_id" $siteid - json_add_string "site_url" $siteurl - json_add_string "site_app" $siteapp - json_add_string "uin" $uin - json_add_string "cust_sec_on" "2" - json_add_object "others" - json_add_string "domain" $domain - json_add_string "sub_domain" $subdomain - - - postdata=`json_dump` - `curl -X POST https://openapp.qq.com/api/public/index.php/upload -H "Content-Type: application/json" --data-raw "$postdata"` -fi \ No newline at end of file diff --git a/luci-app-tencentddns/files/root/etc/uci-defaults/luci-tencentddns b/luci-app-tencentddns/files/root/etc/uci-defaults/luci-tencentddns deleted file mode 100644 index 1062f429..00000000 --- a/luci-app-tencentddns/files/root/etc/uci-defaults/luci-tencentddns +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@tencentddns[-1] - add ucitrack tencentddns - set ucitrack.@tencentddns[-1].init=tencentddns - commit ucitrack -EOF - -exit 0 diff --git a/luci-app-tencentddns/files/root/usr/sbin/tencentddns b/luci-app-tencentddns/files/root/usr/sbin/tencentddns deleted file mode 100755 index e29fdfdb..00000000 --- a/luci-app-tencentddns/files/root/usr/sbin/tencentddns +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/sh - -NAME=tencentddns -log_file=/var/log/$NAME.log - -uci_get_by_name() { - local ret=$(uci get $NAME.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_bool_by_name() { - case "$(uci_get_by_name $1 $2)" in - 1|on|true|yes|enabled) return 0;; - esac - return 1 -} - -intelnetip() { - tmp_ip=`curl -sL --connect-timeout 3 ns1.dnspod.net:6666` - if [ "Z$tmp_ip" == "Z" ]; then - tmp_ip=`curl -sL --connect-timeout 3 members.3322.org/dyndns/getip` - fi - if [ "Z$tmp_ip" == "Z" ]; then - tmp_ip=`curl -sL --connect-timeout 3 14.215.150.17:6666` - fi - if [ "Z$tmp_ip" == "Z" ]; then - tmp_ip=`curl -sL --connect-timeout 3 whatismyip.akamai.com` - fi - echo -n $tmp_ip -} - -resolve2ip() { - # resolve2ip domain - domain=$1 - tmp_ip=`nslookup $domain f1g1ns1.dnspod.net 2>/dev/null | sed '/^Server/d; /#53$/d' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | tail -n1` - if [ "Z$tmp_ip" == "Z" ]; then - tmp_ip=`nslookup $domain f1g1ns2.dnspod.net 2>/dev/null | sed '/^Server/d; /#53$/d' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | tail -n1` - fi - if [ "Z$tmp_ip" == "Z" ]; then - tmp_ip=`nslookup $domain 114.114.115.115 2>/dev/null | sed '/^Server/d; /#53$/d' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | tail -n1` - fi - if [ "Z$tmp_ip" == "Z" ]; then - tmp_ip=`curl -sL --connect-timeout 3 "119.29.29.29/d?dn=$domain"` - fi - echo -n $tmp_ip -} - -check_tencentddns() { - echo "$DATE WAN-IP: ${ip}" - if [ "Z$ip" == "Z" ]; then - echo "$DATE ERROR, cant get WAN-IP..." - return 0 - fi - current_ip=$(resolve2ip "$sub_dm.$main_dm") - if [ "Z$current_ip" == "Z" ]; then - rrid='' # NO Resolve IP Means new Record_ID - fi - echo "$DATE DOMAIN-IP: ${current_ip}" - if [ "Z$ip" == "Z$current_ip" ]; then - echo "$DATE IP dont need UPDATE..." - return 0 - else - echo "$DATE UPDATING..." - return 1 - fi -} - -urlencode() { - # urlencode url - out='' - for c in $(echo -n $1 | sed 's/[^\n]/&\n/g'); do - case $c in - [a-zA-Z0-9._-]) out="$out$c" ;; - *) out="$out$(printf '%%%02X' "'$c")" ;; - esac - done - echo -n $out -} - -send_request() { - curl -s -X POST https://dnsapi.cn/$1 -d "login_token=$ak_id,$ak_token&format=json&"$2 -} - -get_recordid() { - sed 's/"records"/\n/g' | sed -n '2p' | sed 's/ttl/\n/g' | sed -n 's/.*"id[^0-9]*\([0-9]*\).*/\1\n/p' | sort -ru | sed /^$/d -} - - -get_recordid2() { - sed 's/"record"/\n/g' | sed -n '2p' | sed -n 's/.*"id[^0-9]*\([0-9]*\).*/\1\n/p' | sort -ru | sed /^$/d -} - -query_recordid() { - send_request "Record.List" "domain=$main_dm&sub_domain=$sub_dm&record_type=A" -} - -update_record() { - send_request "Record.Modify" "domain=$main_dm&sub_domain=$sub_dm&record_id=$1&record_type=A&record_line=%e9%bb%98%e8%ae%a4&value=$ip" -} - -add_record() { - send_request "Record.Create" "domain=$main_dm&sub_domain=$sub_dm&record_type=A&record_line=%e9%bb%98%e8%ae%a4&value=$ip" -} - -del_record() { - send_request "Record.Remove" "domain=$main_dm&record_id=$1" -} - -do_ddns_record() { - if uci_bool_by_name base clean ; then - query_recordid | get_recordid | while read rr; do - echo "$DATE Clean record $sub_dm.$main_dm: $rr" - del_record $rr >/dev/null - timestamp=$(date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ") - done - rrid='' - fi - if [ "Z$rrid" == "Z" ]; then - rrid=`query_recordid | get_recordid` - fi - if [ "Z$rrid" == "Z" ]; then - rrid=`add_record | get_recordid2` - echo "$DATE ADD record $rrid" - else - update_record $rrid >/dev/null 2>&1 - echo "$DATE UPDATE record $rrid" - fi - if [ "Z$rrid" == "Z" ]; then - # failed - echo "$DATE # ERROR, Please Check Config/Time" - else - # save rrid - uci set tencentddns.base.record_id=$rrid - uci commit tencentddns - echo "$DATE # UPDATED($ip)" - fi -} - -clean_log() { - if [ $(cat $log_file 2>/dev/null | wc -l) -ge 16 ]; then - rm -f $log_file && touch $log_file - echo "$DATE Log Cleaned" - fi -} - -[ -x /usr/bin/openssl -a -x /usr/bin/curl -a -x /bin/sed ] || - ( echo "Need [ openssl + curl + sed ]" && exit 1 ) - -ak_id=$(uci_get_by_name base key_id) -ak_token=$(uci_get_by_name base key_token) -rrid=$(uci_get_by_name base record_id) -main_dm=$(uci_get_by_name base main_domain) -sub_dm=$(uci_get_by_name base sub_domain) - -iface=$(uci_get_by_name base interface) -if [ "Z$iface" == "Zinternet" -o "Z$iface" == "Z" ]; then - ip=$(intelnetip) -else - ip=$(ubus call network.interface.$iface status | grep '"address"' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1) -fi - -DATE=$(date +'%Y-%m-%d %H:%M:%S') -timestamp=$(date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ") - -clean_log -check_tencentddns || do_ddns_record diff --git a/luci-app-tencentddns/tools/po2lmo/Makefile b/luci-app-tencentddns/tools/po2lmo/Makefile deleted file mode 100644 index ad2c1332..00000000 --- a/luci-app-tencentddns/tools/po2lmo/Makefile +++ /dev/null @@ -1,12 +0,0 @@ - -INSTALL = install -PREFIX = /usr/bin - -po2lmo: src/po2lmo.o src/template_lmo.o - $(CC) $(LDFLAGS) -o src/po2lmo src/po2lmo.o src/template_lmo.o - -install: - $(INSTALL) -m 755 src/po2lmo $(PREFIX) - -clean: - $(RM) src/po2lmo src/*.o diff --git a/luci-app-tencentddns/tools/po2lmo/src/po2lmo.c b/luci-app-tencentddns/tools/po2lmo/src/po2lmo.c deleted file mode 100644 index 0da792b6..00000000 --- a/luci-app-tencentddns/tools/po2lmo/src/po2lmo.c +++ /dev/null @@ -1,247 +0,0 @@ -/* - * lmo - Lua Machine Objects - PO to LMO conversion tool - * - * Copyright (C) 2009-2012 Jo-Philipp Wich - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "template_lmo.h" - -static void die(const char *msg) -{ - fprintf(stderr, "Error: %s\n", msg); - exit(1); -} - -static void usage(const char *name) -{ - fprintf(stderr, "Usage: %s input.po output.lmo\n", name); - exit(1); -} - -static void print(const void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - if( fwrite(ptr, size, nmemb, stream) == 0 ) - die("Failed to write stdout"); -} - -static int extract_string(const char *src, char *dest, int len) -{ - int pos = 0; - int esc = 0; - int off = -1; - - for( pos = 0; (pos < strlen(src)) && (pos < len); pos++ ) - { - if( (off == -1) && (src[pos] == '"') ) - { - off = pos + 1; - } - else if( off >= 0 ) - { - if( esc == 1 ) - { - switch (src[pos]) - { - case '"': - case '\\': - off++; - break; - } - dest[pos-off] = src[pos]; - esc = 0; - } - else if( src[pos] == '\\' ) - { - dest[pos-off] = src[pos]; - esc = 1; - } - else if( src[pos] != '"' ) - { - dest[pos-off] = src[pos]; - } - else - { - dest[pos-off] = '\0'; - break; - } - } - } - - return (off > -1) ? strlen(dest) : -1; -} - -static int cmp_index(const void *a, const void *b) -{ - uint32_t x = ((const lmo_entry_t *)a)->key_id; - uint32_t y = ((const lmo_entry_t *)b)->key_id; - - if (x < y) - return -1; - else if (x > y) - return 1; - - return 0; -} - -static void print_uint32(uint32_t x, FILE *out) -{ - uint32_t y = htonl(x); - print(&y, sizeof(uint32_t), 1, out); -} - -static void print_index(void *array, int n, FILE *out) -{ - lmo_entry_t *e; - - qsort(array, n, sizeof(*e), cmp_index); - - for (e = array; n > 0; n--, e++) - { - print_uint32(e->key_id, out); - print_uint32(e->val_id, out); - print_uint32(e->offset, out); - print_uint32(e->length, out); - } -} - -int main(int argc, char *argv[]) -{ - char line[4096]; - char key[4096]; - char val[4096]; - char tmp[4096]; - int state = 0; - int offset = 0; - int length = 0; - int n_entries = 0; - void *array = NULL; - lmo_entry_t *entry = NULL; - uint32_t key_id, val_id; - - FILE *in; - FILE *out; - - if( (argc != 3) || ((in = fopen(argv[1], "r")) == NULL) || ((out = fopen(argv[2], "w")) == NULL) ) - usage(argv[0]); - - memset(line, 0, sizeof(key)); - memset(key, 0, sizeof(val)); - memset(val, 0, sizeof(val)); - - while( (NULL != fgets(line, sizeof(line), in)) || (state >= 2 && feof(in)) ) - { - if( state == 0 && strstr(line, "msgid \"") == line ) - { - switch(extract_string(line, key, sizeof(key))) - { - case -1: - die("Syntax error in msgid"); - case 0: - state = 1; - break; - default: - state = 2; - } - } - else if( state == 1 || state == 2 ) - { - if( strstr(line, "msgstr \"") == line || state == 2 ) - { - switch(extract_string(line, val, sizeof(val))) - { - case -1: - state = 4; - break; - default: - state = 3; - } - } - else - { - switch(extract_string(line, tmp, sizeof(tmp))) - { - case -1: - state = 2; - break; - default: - strcat(key, tmp); - } - } - } - else if( state == 3 ) - { - switch(extract_string(line, tmp, sizeof(tmp))) - { - case -1: - state = 4; - break; - default: - strcat(val, tmp); - } - } - - if( state == 4 ) - { - if( strlen(key) > 0 && strlen(val) > 0 ) - { - key_id = sfh_hash(key, strlen(key)); - val_id = sfh_hash(val, strlen(val)); - - if( key_id != val_id ) - { - n_entries++; - array = realloc(array, n_entries * sizeof(lmo_entry_t)); - entry = (lmo_entry_t *)array + n_entries - 1; - - if (!array) - die("Out of memory"); - - entry->key_id = key_id; - entry->val_id = val_id; - entry->offset = offset; - entry->length = strlen(val); - - length = strlen(val) + ((4 - (strlen(val) % 4)) % 4); - - print(val, length, 1, out); - offset += length; - } - } - - state = 0; - memset(key, 0, sizeof(key)); - memset(val, 0, sizeof(val)); - } - - memset(line, 0, sizeof(line)); - } - - print_index(array, n_entries, out); - - if( offset > 0 ) - { - print_uint32(offset, out); - fsync(fileno(out)); - fclose(out); - } - else - { - fclose(out); - unlink(argv[2]); - } - - fclose(in); - return(0); -} diff --git a/luci-app-tencentddns/tools/po2lmo/src/template_lmo.c b/luci-app-tencentddns/tools/po2lmo/src/template_lmo.c deleted file mode 100644 index 27205a72..00000000 --- a/luci-app-tencentddns/tools/po2lmo/src/template_lmo.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * lmo - Lua Machine Objects - Base functions - * - * Copyright (C) 2009-2010 Jo-Philipp Wich - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "template_lmo.h" - -/* - * Hash function from http://www.azillionmonkeys.com/qed/hash.html - * Copyright (C) 2004-2008 by Paul Hsieh - */ - -uint32_t sfh_hash(const char *data, int len) -{ - uint32_t hash = len, tmp; - int rem; - - if (len <= 0 || data == NULL) return 0; - - rem = len & 3; - len >>= 2; - - /* Main loop */ - for (;len > 0; len--) { - hash += sfh_get16(data); - tmp = (sfh_get16(data+2) << 11) ^ hash; - hash = (hash << 16) ^ tmp; - data += 2*sizeof(uint16_t); - hash += hash >> 11; - } - - /* Handle end cases */ - switch (rem) { - case 3: hash += sfh_get16(data); - hash ^= hash << 16; - hash ^= data[sizeof(uint16_t)] << 18; - hash += hash >> 11; - break; - case 2: hash += sfh_get16(data); - hash ^= hash << 11; - hash += hash >> 17; - break; - case 1: hash += *data; - hash ^= hash << 10; - hash += hash >> 1; - } - - /* Force "avalanching" of final 127 bits */ - hash ^= hash << 3; - hash += hash >> 5; - hash ^= hash << 4; - hash += hash >> 17; - hash ^= hash << 25; - hash += hash >> 6; - - return hash; -} - -uint32_t lmo_canon_hash(const char *str, int len) -{ - char res[4096]; - char *ptr, prev; - int off; - - if (!str || len >= sizeof(res)) - return 0; - - for (prev = ' ', ptr = res, off = 0; off < len; prev = *str, off++, str++) - { - if (isspace(*str)) - { - if (!isspace(prev)) - *ptr++ = ' '; - } - else - { - *ptr++ = *str; - } - } - - if ((ptr > res) && isspace(*(ptr-1))) - ptr--; - - return sfh_hash(res, ptr - res); -} - -lmo_archive_t * lmo_open(const char *file) -{ - int in = -1; - uint32_t idx_offset = 0; - struct stat s; - - lmo_archive_t *ar = NULL; - - if (stat(file, &s) == -1) - goto err; - - if ((in = open(file, O_RDONLY)) == -1) - goto err; - - if ((ar = (lmo_archive_t *)malloc(sizeof(*ar))) != NULL) - { - memset(ar, 0, sizeof(*ar)); - - ar->fd = in; - ar->size = s.st_size; - - fcntl(ar->fd, F_SETFD, fcntl(ar->fd, F_GETFD) | FD_CLOEXEC); - - if ((ar->mmap = mmap(NULL, ar->size, PROT_READ, MAP_SHARED, ar->fd, 0)) == MAP_FAILED) - goto err; - - idx_offset = ntohl(*((const uint32_t *) - (ar->mmap + ar->size - sizeof(uint32_t)))); - - if (idx_offset >= ar->size) - goto err; - - ar->index = (lmo_entry_t *)(ar->mmap + idx_offset); - ar->length = (ar->size - idx_offset - sizeof(uint32_t)) / sizeof(lmo_entry_t); - ar->end = ar->mmap + ar->size; - - return ar; - } - -err: - if (in > -1) - close(in); - - if (ar != NULL) - { - if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) - munmap(ar->mmap, ar->size); - - free(ar); - } - - return NULL; -} - -void lmo_close(lmo_archive_t *ar) -{ - if (ar != NULL) - { - if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) - munmap(ar->mmap, ar->size); - - close(ar->fd); - free(ar); - - ar = NULL; - } -} - - -lmo_catalog_t *_lmo_catalogs = NULL; -lmo_catalog_t *_lmo_active_catalog = NULL; - -int lmo_load_catalog(const char *lang, const char *dir) -{ - DIR *dh = NULL; - char pattern[16]; - char path[PATH_MAX]; - struct dirent *de = NULL; - - lmo_archive_t *ar = NULL; - lmo_catalog_t *cat = NULL; - - if (!lmo_change_catalog(lang)) - return 0; - - if (!dir || !(dh = opendir(dir))) - goto err; - - if (!(cat = malloc(sizeof(*cat)))) - goto err; - - memset(cat, 0, sizeof(*cat)); - - snprintf(cat->lang, sizeof(cat->lang), "%s", lang); - snprintf(pattern, sizeof(pattern), "*.%s.lmo", lang); - - while ((de = readdir(dh)) != NULL) - { - if (!fnmatch(pattern, de->d_name, 0)) - { - snprintf(path, sizeof(path), "%s/%s", dir, de->d_name); - ar = lmo_open(path); - - if (ar) - { - ar->next = cat->archives; - cat->archives = ar; - } - } - } - - closedir(dh); - - cat->next = _lmo_catalogs; - _lmo_catalogs = cat; - - if (!_lmo_active_catalog) - _lmo_active_catalog = cat; - - return 0; - -err: - if (dh) closedir(dh); - if (cat) free(cat); - - return -1; -} - -int lmo_change_catalog(const char *lang) -{ - lmo_catalog_t *cat; - - for (cat = _lmo_catalogs; cat; cat = cat->next) - { - if (!strncmp(cat->lang, lang, sizeof(cat->lang))) - { - _lmo_active_catalog = cat; - return 0; - } - } - - return -1; -} - -static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash) -{ - unsigned int m, l, r; - uint32_t k; - - l = 0; - r = ar->length - 1; - - while (1) - { - m = l + ((r - l) / 2); - - if (r < l) - break; - - k = ntohl(ar->index[m].key_id); - - if (k == hash) - return &ar->index[m]; - - if (k > hash) - { - if (!m) - break; - - r = m - 1; - } - else - { - l = m + 1; - } - } - - return NULL; -} - -int lmo_translate(const char *key, int keylen, char **out, int *outlen) -{ - uint32_t hash; - lmo_entry_t *e; - lmo_archive_t *ar; - - if (!key || !_lmo_active_catalog) - return -2; - - hash = lmo_canon_hash(key, keylen); - - for (ar = _lmo_active_catalog->archives; ar; ar = ar->next) - { - if ((e = lmo_find_entry(ar, hash)) != NULL) - { - *out = ar->mmap + ntohl(e->offset); - *outlen = ntohl(e->length); - return 0; - } - } - - return -1; -} - -void lmo_close_catalog(const char *lang) -{ - lmo_archive_t *ar, *next; - lmo_catalog_t *cat, *prev; - - for (prev = NULL, cat = _lmo_catalogs; cat; prev = cat, cat = cat->next) - { - if (!strncmp(cat->lang, lang, sizeof(cat->lang))) - { - if (prev) - prev->next = cat->next; - else - _lmo_catalogs = cat->next; - - for (ar = cat->archives; ar; ar = next) - { - next = ar->next; - lmo_close(ar); - } - - free(cat); - break; - } - } -} diff --git a/luci-app-tencentddns/tools/po2lmo/src/template_lmo.h b/luci-app-tencentddns/tools/po2lmo/src/template_lmo.h deleted file mode 100644 index 57f59aa5..00000000 --- a/luci-app-tencentddns/tools/po2lmo/src/template_lmo.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * lmo - Lua Machine Objects - General header - * - * Copyright (C) 2009-2012 Jo-Philipp Wich - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _TEMPLATE_LMO_H_ -#define _TEMPLATE_LMO_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if (defined(__GNUC__) && defined(__i386__)) -#define sfh_get16(d) (*((const uint16_t *) (d))) -#else -#define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ - +(uint32_t)(((const uint8_t *)(d))[0]) ) -#endif - - -struct lmo_entry { - uint32_t key_id; - uint32_t val_id; - uint32_t offset; - uint32_t length; -} __attribute__((packed)); - -typedef struct lmo_entry lmo_entry_t; - - -struct lmo_archive { - int fd; - int length; - uint32_t size; - lmo_entry_t *index; - char *mmap; - char *end; - struct lmo_archive *next; -}; - -typedef struct lmo_archive lmo_archive_t; - - -struct lmo_catalog { - char lang[6]; - struct lmo_archive *archives; - struct lmo_catalog *next; -}; - -typedef struct lmo_catalog lmo_catalog_t; - - -uint32_t sfh_hash(const char *data, int len); -uint32_t lmo_canon_hash(const char *data, int len); - -lmo_archive_t * lmo_open(const char *file); -void lmo_close(lmo_archive_t *ar); - - -extern lmo_catalog_t *_lmo_catalogs; -extern lmo_catalog_t *_lmo_active_catalog; - -int lmo_load_catalog(const char *lang, const char *dir); -int lmo_change_catalog(const char *lang); -int lmo_translate(const char *key, int keylen, char **out, int *outlen); -void lmo_close_catalog(const char *lang); - -#endif diff --git a/luci-app-wifidog b/luci-app-wifidog deleted file mode 160000 index 76ad5687..00000000 --- a/luci-app-wifidog +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 76ad568776479e3d7ccc2deb928f24ab7e00ddc4 diff --git a/luci-app-wolplus/Makefile b/luci-app-wolplus/Makefile deleted file mode 100644 index 4e238c54..00000000 --- a/luci-app-wolplus/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) 2016 Openwrt.org -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI support for wolplus From sundaqiang -LUCI_DEPENDS:=+etherwake -LUCI_PKGARCH:=all -PKG_MAINTAINER:=sundaqiang - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-wolplus/README.md b/luci-app-wolplus/README.md deleted file mode 100644 index 31db0764..00000000 --- a/luci-app-wolplus/README.md +++ /dev/null @@ -1,9 +0,0 @@ - -# luci-app-wolplus绽++ - -һĻ豸IJ - -### Чչʾ -![wolplus][1] - - [1]: https://raw.githubusercontent.com/sundaqiang/openwrt-packages/master/img/wolplus.png \ No newline at end of file diff --git a/luci-app-wolplus/luasrc/controller/wolplus.lua b/luci-app-wolplus/luasrc/controller/wolplus.lua deleted file mode 100644 index f5eb1a2f..00000000 --- a/luci-app-wolplus/luasrc/controller/wolplus.lua +++ /dev/null @@ -1,33 +0,0 @@ -module("luci.controller.wolplus", package.seeall) -local t, a -local x = luci.model.uci.cursor() - -function index() - if not nixio.fs.access("/etc/config/wolplus") then return end - entry({"admin", "services", "wolplus"}, cbi("wolplus"), _("wolplus"), 95).dependent = true - entry( {"admin", "services", "wolplus", "awake"}, post("awake") ).leaf = true -end - -function awake(sections) - lan = x:get("wolplus",sections,"maceth") - mac = x:get("wolplus",sections,"macaddr") - local e = {} - cmd = "/usr/bin/etherwake -D -i " .. lan .. " -b " .. mac .. " 2>&1" - local p = io.popen(cmd) - local msg = "" - if p then - while true do - local l = p:read("*l") - if l then - if #l > 100 then l = l:sub(1, 100) .. "..." end - msg = msg .. l - else - break - end - end - p:close() - end - e["data"] = msg - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/luci-app-wolplus/luasrc/model/cbi/wolplus.lua b/luci-app-wolplus/luasrc/model/cbi/wolplus.lua deleted file mode 100644 index e7c89b1c..00000000 --- a/luci-app-wolplus/luasrc/model/cbi/wolplus.lua +++ /dev/null @@ -1,35 +0,0 @@ -local i = require "luci.sys" -local t, e -t = Map("wolplus", translate("wolplus"), translate("Wake up your LAN device") .. [[

Powered by sundaqiang]]) -t.template = "wolplus/index" -e = t:section(TypedSection, "macclient", translate("macclient")) -e.template = "cbi/tblsection" -e.anonymous = true -e.addremove = true -a = e:option(Value, "name", translate("name")) -a.optional = false -nolimit_mac = e:option(Value, "macaddr", translate("macaddr")) -nolimit_mac.rmempty = false -i.net.mac_hints(function(e, t) nolimit_mac:value(e, "%s (%s)" % {e, t}) end) -nolimit_eth = e:option(Value, "maceth", translate("maceth")) -nolimit_eth.rmempty = false -for t, e in ipairs(i.net.devices()) do if e ~= "lo" then nolimit_eth:value(e) end end -btn = e:option(Button, "_awake",translate("awake")) -btn.inputtitle = translate("awake") -btn.inputstyle = "apply" -btn.disabled = false -btn.template = "wolplus/awake" -function gen_uuid(format) - local uuid = i.exec("echo -n $(cat /proc/sys/kernel/random/uuid)") - if format == nil then - uuid = string.gsub(uuid, "-", "") - end - return uuid -end -function e.create(e, t) - local uuid = gen_uuid() - t = uuid - TypedSection.create(e, t) -end - -return t diff --git a/luci-app-wolplus/luasrc/view/wolplus/awake.htm b/luci-app-wolplus/luasrc/view/wolplus/awake.htm deleted file mode 100644 index 91cd71b1..00000000 --- a/luci-app-wolplus/luasrc/view/wolplus/awake.htm +++ /dev/null @@ -1,3 +0,0 @@ -<%+cbi/valueheader%> - " style="font-size: 100%;" type="button" onclick="onclick_awake(this.id)" <%=attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle)%> /> -<%+cbi/valuefooter%> diff --git a/luci-app-wolplus/luasrc/view/wolplus/index.htm b/luci-app-wolplus/luasrc/view/wolplus/index.htm deleted file mode 100644 index 2991f946..00000000 --- a/luci-app-wolplus/luasrc/view/wolplus/index.htm +++ /dev/null @@ -1,22 +0,0 @@ -<% include("cbi/map") %> - - diff --git a/luci-app-wolplus/po/zh-cn/wolplus.po b/luci-app-wolplus/po/zh-cn/wolplus.po deleted file mode 100644 index 06808dc5..00000000 --- a/luci-app-wolplus/po/zh-cn/wolplus.po +++ /dev/null @@ -1,23 +0,0 @@ -msgid "wolplus" -msgstr "网络唤醒++" - -msgid "Wake up your LAN device" -msgstr "唤醒你的局域网设备" - -msgid "macclient" -msgstr "设备列表" - -msgid "name" -msgstr "名称" - -msgid "macaddr" -msgstr "客户端MAC" - -msgid "maceth" -msgstr "网络接口" - -msgid "awake" -msgstr "唤醒" - -msgid "Please [Save & Apply] your changes first" -msgstr "请先保存并应用您的设置" diff --git a/luci-app-wolplus/po/zh_Hans b/luci-app-wolplus/po/zh_Hans deleted file mode 120000 index 41451e4a..00000000 --- a/luci-app-wolplus/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-wolplus/root/etc/config/wolplus b/luci-app-wolplus/root/etc/config/wolplus deleted file mode 100644 index e69de29b..00000000 diff --git a/luci-app-wolplus/root/etc/uci-defaults/luci-app-wolplus b/luci-app-wolplus/root/etc/uci-defaults/luci-app-wolplus deleted file mode 100644 index 61c4b1e5..00000000 --- a/luci-app-wolplus/root/etc/uci-defaults/luci-app-wolplus +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@wolplus[-1] - add ucitrack wolplus - set ucitrack.@wolplus[-1].init=wolplus - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/luci-app-wolplus/root/usr/share/rpcd/acl.d/luci-app-wolplus.json b/luci-app-wolplus/root/usr/share/rpcd/acl.d/luci-app-wolplus.json deleted file mode 100644 index 3aed4cad..00000000 --- a/luci-app-wolplus/root/usr/share/rpcd/acl.d/luci-app-wolplus.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-wolplus": { - "description": "Grant UCI access for luci-app-wolplus", - "read": { - "uci": [ "wolplus" ] - }, - "write": { - "uci": [ "wolplus" ] - } - } -} diff --git a/luci-theme-argon b/luci-theme-argon deleted file mode 160000 index 46906ac8..00000000 --- a/luci-theme-argon +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 46906ac8ab96e63b8e2a5fc2f349a6961f5ef136 diff --git a/microsocks/Makefile b/microsocks/Makefile deleted file mode 100644 index ae90244f..00000000 --- a/microsocks/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=microsocks -PKG_VERSION=1.0.2 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/rofl0r/microsocks/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=5ece77c283e71f73b9530da46302fdb4f72a0ae139aa734c07fe532407a6211a - -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=COPYING -PKG_MAINTAINER:=lean - -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/microsocks - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=Tiny, portable SOCKS5 server - URL:=https://github.com/rofl0r/microsocks - DEPENDS:=+libpthread -endef - -define Package/microsocks/description - A SOCKS5 service that you can run on your remote boxes to tunnel connections - through them, if for some reason SSH doesn't cut it for you. -endef - -define Package/microsocks/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/local/bin/microsocks $(1)/usr/bin/microsocks -endef - -$(eval $(call BuildPackage,microsocks)) diff --git a/naiveproxy/Makefile b/naiveproxy/Makefile deleted file mode 100644 index a861e7ea..00000000 --- a/naiveproxy/Makefile +++ /dev/null @@ -1,131 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=naiveproxy -PKG_VERSION:=97.0.4692.71-2 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/klzgrad/naiveproxy/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=10535dac472243ac55d709a185434c72cde976143809c9bac213b6a4a5f521a1 - -PKG_LICENSE:=BSD 3-Clause -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Tianling Shen - -PKG_BUILD_DEPENDS:=python3/host -ifneq ($(wildcard $(TOPDIR)/feeds/packages/devel/ninja/ninja.mk),) -PKG_BUILD_DEPENDS+= ninja/host -endif -PKG_USE_MIPS16:=0 -PKG_BUILD_PARALLEL:=1 - -ifneq ($(CONFIG_CPU_TYPE)," ") - CPU_TYPE:=$(word 1, $(subst +," ,$(CONFIG_CPU_TYPE))) - CPU_SUBTYPE:=$(word 2, $(subst +, ",$(CONFIG_CPU_TYPE))) - ifeq ($(CPU_SUBTYPE),) - CPU_SUBTYPE:="" - endif -else - CPU_TYPE:="" - CPU_SUBTYPE:="" -endif - -include $(INCLUDE_DIR)/package.mk - -define Package/naiveproxy - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - URL:=https://github.com/klzgrad/naiveproxy - TITLE:=Make a fortune quietly - DEPENDS:=@!(arc||(arm&&TARGET_gemini)||armeb||mips||mips64||powerpc) +libatomic -endef - -define Package/naiveproxy/description - NaïveProxy uses Chrome's network stack to camouflage traffic with strong - censorship resistance and low detectability. Reusing Chrome's stack also - ensures best practices in performance and security. -endef - -ifneq ($(CONFIG_CCACHE),) - export CCACHE_SLOPPINESS=time_macros - export CCACHE_BASEDIR=$(PKG_BUILD_DIR)/src - export CCACHE_CPP2=yes - export naive_ccache_flags=cc_wrapper="$(CCACHE)" -endif - -CLANG_VER:=14-init-8033-gabb2a91b-2 -CLANG_FILE:=clang-llvmorg-$(CLANG_VER).tgz -define Download/CLANG - URL:=https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64 - URL_FILE:=$(CLANG_FILE) - FILE:=$(CLANG_FILE) - HASH:=720e10810f0005a4a8640728e72f06c283d4c51362f2889b513c6d6c3a136582 -endef - -GN_VER:=90294ccdcf9334ed25a76ac9b67689468e506342 -GN_FILE:=gn-git_revision-$(GN_VER).zip -define Download/GN_TOOL - URL:=https://chrome-infra-packages.appspot.com/dl/gn/gn/linux-amd64/+ - URL_FILE:=git_revision:$(GN_VER) - FILE:=$(GN_FILE) - HASH:=9cbfd56953d415a88dfae616191c0c37612a41f7fb09830d2952b8b5a59c7dec -endef - -PGO_VER:=4692-1640701189-f21838a98aa9a4bd13520a4261d2d77cbab9c3f3 -PGO_FILE:=chrome-linux-$(PGO_VER).profdata -define Download/PGO_PROF - URL:=https://storage.googleapis.com.cnpmjs.org/chromium-optimization-profiles/pgo_profiles \ - https://storage.googleapis.com/chromium-optimization-profiles/pgo_profiles - URL_FILE:=$(PGO_FILE) - FILE:=$(PGO_FILE) - HASH:=8830cc810cdd1c4812a3cd009206bbf52f7c33a67b3280f62dd60cb684300e0f -endef - -define Build/Prepare - $(call Build/Prepare/Default) - - ( \ - cd $(PKG_BUILD_DIR)/src ; \ - mkdir -p "chrome/build/pgo_profiles" ; \ - $(CP) "$(DL_DIR)/$(PGO_FILE)" "chrome/build/pgo_profiles" ; \ - mkdir -p "third_party/llvm-build/Release+Asserts" ; \ - $(TAR) -xzf "$(DL_DIR)/$(CLANG_FILE)" -C "third_party/llvm-build/Release+Asserts" ; \ - mkdir -p "gn/out" ; \ - unzip -o "$(DL_DIR)/$(GN_FILE)" -d "gn/out" ; \ - ) -endef - -ifeq ($(NINJA),) -NINJA = \ - MAKEFLAGS="$(MAKE_JOBSERVER)" \ - $(STAGING_DIR_HOSTPKG)/bin/ninja \ - $(if $(findstring c,$(OPENWRT_VERBOSE)),-v) \ - $(if $(MAKE_JOBSERVER),,-j1) -endif - -define Build/Compile - ( \ - cd "$(PKG_BUILD_DIR)/src" ; \ - . ../init_env.sh "$(ARCH)" $(CPU_TYPE) $(CPU_SUBTYPE) "$(TOOLCHAIN_DIR)" ; \ - export naive_flags+=" $$$${naive_ccache_flags}" ; \ - mkdir -p "out" ; \ - ./gn/out/gn gen "out/Release" --args="$$$${naive_flags}" --script-executable="$(PYTHON)" ; \ - ) - +$(NINJA) -C "$(PKG_BUILD_DIR)/src/out/Release" naive -endef - -define Package/naiveproxy/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/out/Release/naive $(1)/usr/bin/naive -endef - -$(eval $(call Download,CLANG)) -$(eval $(call Download,GN_TOOL)) -$(eval $(call Download,PGO_PROF)) - -$(eval $(call BuildPackage,naiveproxy)) diff --git a/naiveproxy/src/init_env.sh b/naiveproxy/src/init_env.sh deleted file mode 100755 index de65b1e2..00000000 --- a/naiveproxy/src/init_env.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org -# -------------------------------------------------------- -# Init build dependencies for naiveproxy - -# Read args from shell -target_arch="$1" -cpu_type="$2" -cpu_subtype="$3" -toolchain_dir="$4" - -# Set arch info -case "${target_arch}" in -"aarch64") - naive_arch="arm64" - ;; -"i386") - naive_arch="x86" - ;; -"x86_64") - naive_arch="x64" - ;; -*) - naive_arch="${target_arch}" - ;; -esac - -# OS detection -[ "$(uname)" != "Linux" -o "$(uname -m)" != "x86_64" ] && { echo -e "Support Linux AMD64 only."; exit 1; } - -# Create TMP dir -mkdir -p "$PWD/tmp" -export TMPDIR="$PWD/tmp" - -# Set ENV -export DEPOT_TOOLS_WIN_TOOLCHAIN=0 -export naive_flags=" -is_official_build=true -exclude_unwind_tables=true -enable_resource_allowlist_generation=false -symbol_level=0 -is_clang=true -use_sysroot=false - -use_allocator=\"none\" -use_allocator_shim=false -use_partition_alloc=false - -fatal_linker_warnings=false -treat_warnings_as_errors=false - -enable_base_tracing=false -use_udev=false -use_aura=false -use_ozone=false -use_x11=false -use_gio=false -use_platform_icu_alternatives=true -use_glib=false - -disable_file_support=true -enable_websockets=false -use_kerberos=false -enable_mdns=false -enable_reporting=false -include_transport_security_state_preload_list=false - -target_os=\"openwrt\" -target_cpu=\"${naive_arch}\" -target_sysroot=\"${toolchain_dir}\"" - -case "${target_arch}" in -"arm") - naive_flags+=" arm_version=0 arm_cpu=\"${cpu_type}\"" - if [ -n "${cpu_subtype}" ]; then - if grep -q "neon" <<< "${cpu_subtype}"; then - neon_flag="arm_use_neon=true" - else - neon_flag="arm_use_neon=false" - fi - naive_flags+=" arm_fpu=\"${cpu_subtype}\" arm_float_abi=\"hard\" ${neon_flag}" - else - naive_flags+=" arm_float_abi=\"soft\" arm_use_neon=false" - fi - case "${cpu_type}" in - "arm1176jzf-s"|"arm926ej-s"|"mpcore"|"xscale") - naive_flags+=" arm_use_thumb=false" - ;; - esac - ;; -"mipsel"|"mips64el") - naive_flags+=" use_gold=false use_thin_lto=false use_lld=false chrome_pgo_phase=0 mips_arch_variant=\"r2\"" - [ "${target_arch}" == "mipsel" ] && naive_flags+=" mips_float_abi=\"soft\" mips_tune=\"${cpu_type}\"" - ;; -esac diff --git a/pdnsd-alt/Makefile b/pdnsd-alt/Makefile deleted file mode 100644 index 9fb5f8dc..00000000 --- a/pdnsd-alt/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=pdnsd -PKG_VERSION:=1.2.9b-par -PKG_RELEASE:= - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/shadowsocks/pdnsd.git -PKG_SOURCE_DATE:=2012-04-26 -PKG_SOURCE_VERSION:=a8e46ccba7b0fa2230d6c42ab6dcd92926f6c21d -PKG_MIRROR_HASH:=e3e9c56cf91b12d8db73def2c247be2f726a052bed012f7a1e48946375f8e478 - -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/pdnsd-alt - SECTION:=net - CATEGORY:=Network - SUBMENU:=IP Addresses and Names - TITLE:=Proxy DNS Server - DEPENDS:=+libpthread -endef - -define Package/pdnsd-alt/description - pdnsd, is an IPv6 capable proxy DNS server with permanent caching (the cache - contents are written to hard disk on exit) that is designed to cope with - unreachable or down DNS servers (for example in dial-in networking). - - pdnsd can be used with applications that do dns lookups, eg on startup, and - can't be configured to change that behaviour, to prevent the often - minute-long hangs (or even crashes) that result from stalled dns queries. -endef - -TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include - -CONFIGURE_ARGS += \ - --with-cachedir=/var/pdnsd \ - --with-target=Linux - -define Package/pdnsd-alt/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/pdnsd $(1)/usr/sbin/pdnsd - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/pdnsd-ctl $(1)/usr/sbin/pdnsd-ctl - - #$(INSTALL_DIR) $(1)/etc - #$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/pdnsd.conf.sample $(1)/etc/pdnsd.conf - #$(INSTALL_DIR) $(1)/etc/init.d - #$(INSTALL_BIN) ./files/pdnsd.init $(1)/etc/init.d/pdnsd -endef - -$(eval $(call BuildPackage,pdnsd-alt)) diff --git a/pdnsd-alt/files/pdnsd.init b/pdnsd-alt/files/pdnsd.init deleted file mode 100644 index e678d8d6..00000000 --- a/pdnsd-alt/files/pdnsd.init +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=65 -NAME=pdnsd -DESC="proxy DNS server" - -DAEMON=/usr/sbin/pdnsd -PID_FILE=/var/run/$NAME.pid -CACHEDIR=/var/pdnsd -CACHE=$CACHEDIR/pdnsd.cache - -USER=nobody -GROUP=nogroup - -start() { - echo -n "Starting $DESC: $NAME" - - gen_cache - - $DAEMON --daemon -p $PID_FILE - echo " ." -} - -stop() { - echo -n "Stopping $DESC: $NAME" - kill `cat $PID_FILE` > /dev/null 2>&1 - rm -rf $PID_FILE - echo " ." -} - -restart() { - echo "Restarting $DESC: $NAME... " - stop - sleep 2 - start -} - -gen_cache() -{ - if ! test -f "$CACHE"; then - mkdir -p `dirname $CACHE` - dd if=/dev/zero of="$CACHE" bs=1 count=4 2> /dev/null - chown -R $USER.$GROUP $CACHEDIR - fi -} - diff --git a/pdnsd-alt/patches/002-fix-pdnsd-alt-build-error-within-kernel_5.15.patch b/pdnsd-alt/patches/002-fix-pdnsd-alt-build-error-within-kernel_5.15.patch deleted file mode 100644 index d24521c4..00000000 --- a/pdnsd-alt/patches/002-fix-pdnsd-alt-build-error-within-kernel_5.15.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 09171eef574503a82342a8b23d4a55b8a5286724 Mon Sep 17 00:00:00 2001 -From: W_Y_CPP <383152993@qq.com> -Date: Sat, 1 Jan 2022 13:05:37 +0900 -Subject: [PATCH] fix pdnsd alt build error with kernel_5.15 - ---- - src/conff.h | 2 +- - src/dns.h | 2 +- - src/netdev.c | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/conff.h b/src/conff.h -index a07b1561b..c66d210aa 100644 ---- a/src/conff.h -+++ b/src/conff.h -@@ -32,7 +32,7 @@ - #include - #include - #include --#include -+#include - #include "ipvers.h" - #include "list.h" - -diff --git a/src/dns.h b/src/dns.h -index 0f6a4ac1e..ecc9680b2 100644 ---- a/src/dns.h -+++ b/src/dns.h -@@ -27,7 +27,7 @@ - #include - #include - #include --#include -+#include - #include - #include - #include "rr_types.h" -diff --git a/src/netdev.c b/src/netdev.c -index bd5f8c451..bfd5046df 100644 ---- a/src/netdev.c -+++ b/src/netdev.c -@@ -59,7 +59,7 @@ - #include "ipvers.h" - #include - #include --#include -+#include - #include - #include - #include --- -2.17.1 diff --git a/pdnsd-alt/patches/10-filter-aaaa.patch b/pdnsd-alt/patches/10-filter-aaaa.patch deleted file mode 100644 index ff3b8ed2..00000000 --- a/pdnsd-alt/patches/10-filter-aaaa.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/src/dns_answer.c -+++ b/src/dns_answer.c -@@ -567,6 +567,7 @@ static int add_rrset(dns_msg_t **ans, size_t *sz, size_t *allocsz, - if (rnd_recs) b=first=randrr(crrset->rrs); - - while (b) { -+ if (tp==T_AAAA) goto add_rrset_next; - if (!add_rr(ans, sz, allocsz, rrn, tp, ans_ttl(crrset,queryts), - b->rdlen, b->data, S_ANSWER, udp, cb)) - return 0; -@@ -584,6 +585,7 @@ static int add_rrset(dns_msg_t **ans, size_t *sz, size_t *allocsz, - break; - } - } -+add_rrset_next: - b=b->next; - if (rnd_recs) { - if(!b) b=crrset->rrs; /* wraparound */ diff --git a/qBittorrent/files/ipfilter.dat b/qBittorrent/files/ipfilter.dat deleted file mode 100644 index a4935de6..00000000 --- a/qBittorrent/files/ipfilter.dat +++ /dev/null @@ -1,293 +0,0 @@ -14.17.29.0 - 14.17.44.255 , 0 , Tencent Offline -14.17.101.0 - 14.17.101.255 , 0 , Baidu Offline -14.29.92.0 - 14.29.92.255 , 0 , Xunlei Offline -14.215.177.0 - 14.215.177.255 , 0 , Baidu Offline -23.3.68.0 - 23.3.68.255 , 0 , Tencent Offline -27.221.20.0 - 27.221.21.255 , 0 , 360 -27.221.36.0 - 27.221.38.255 , 0 , Baidu Offline -36.110.198.0 - 36.110.198.255 , 0 , Baidu Offline -36.248.6.0 - 36.248.6.255 , 0 , Baidu Offline -36.250.0.0 - 36.250.0.255 , 0 , Baidu Offline -36.251.188.0 - 36.251.188.255 , 0 , Baidu Offline -42.56.64.0 - 42.56.65.255 , 0 , Tencent Offline -42.236.4.0 - 42.236.7.255 , 0 , Baidu Offline -45.113.68.0 - 45.113.71.255 , 0 , Tencent Offline -49.4.0.0 - 49.4.127.255 , 0 , HUAWEI -49.51.0.0 - 49.51.31.255 , 0 , Tencent Offline -58.48.212.0 - 58.48.212.255 , 0 , Tencent Offline -58.51.144.0 - 58.51.144.255 , 0 , Xunlei Offline -58.61.39.0 - 58.61.152.255 , 0 , Xunlei Offline -58.67.137.0 - 58.67.137.255 , 0 , Xunlei Offline -58.198.42.0 - 58.198.42.255 , 0 , Tencent Offline -58.215.118.0 - 58.215.123.255 , 0 , Baidu Offline -58.217.200.0 - 58.217.222.255 , 0 , Baidu Offline -58.220.12.0 - 58.220.12.255 , 0 , Xunlei Offline -58.222.18.0 - 58.222.25.255 , 0 , Baidu Offline -58.251.57.0 - 58.251.61.255 , 0 , Xunlei Offline -58.252.209.0 - 58.252.209.255 , 0 , Xunlei Offline -58.254.134.0 - 58.254.134.255 , 0 , Xunlei Offline -58.255.249.0 - 58.255.253.255 , 0 , Xunlei Offline -59.45.75.0 - 59.45.75.255 , 0 , Baidu Offline -59.51.81.0 - 59.51.81.255 , 0 , Baidu Offline -59.53.69.0 - 59.53.69.255 , 0 , Baidu Offline -59.53.86.0 - 59.53.86.255 , 0 , Tencent Offline -59.74.44.0 - 59.74.45.255 , 0 , Tencent Offline -60.2.237.0 - 60.2.237.255 , 0 , Tencent Offline -60.18.146.0 - 60.18.147.255 , 0 , Xunlei Offline -60.19.64.0 - 60.19.64.255 , 0 , Xunlei Offline -60.21.219.0 - 60.21.219.255 , 0 , Xunlei Offline -60.28.9.0 - 60.28.22.255 , 0 , Baidu Offline -60.160.190.0 - 60.160.190.255 , 0 , Xunlei Offline -60.211.226.0 - 60.211.226.255 , 0 , Baidu Offline -60.214.64.0 - 60.214.64.255 , 0 , Xunlei Offline -60.217.235.0 - 60.217.236.255 , 0 , Xunlei Offline -60.220.197.0 - 60.220.197.255 , 0 , Xunlei Offline -60.221.254.0 - 60.221.254.255 , 0 , Xunlei Offline -61.54.12.0 - 61.54.24.255 , 0 , Xunlei Offline -61.54.47.0 - 61.54.47.255 , 0 , Baidu Offline -61.132.226.0 - 61.132.226.255 , 0 , Baidu Offline -61.135.145.0 - 61.135.191.255 , 0 , Baidu Offline -61.137.90.0 - 61.137.90.255 , 0 , MNDISK Offline -61.137.191.0 - 61.137.191.255 , 0 , Xunlei Offline -61.138.131.0 - 61.138.131.255 , 0 , Tencent Offline -61.138.177.0 - 61.138.177.255 , 0 , Xunlei Offline -61.139.103.0 - 61.139.103.255 , 0 , Xunlei Offline -61.147.76.0 - 61.147.94.255 , 0 , Xunlei Offline -61.152.105.0 - 61.152.105.255 , 0 , Xunlei Offline -61.153.56.0 - 61.153.56.255 , 0 , Baidu Offline -61.155.149.0 - 61.155.165.255 , 0 , Baidu Offline -61.155.183.0 - 61.155.183.255 , 0 , Xunlei Offline -61.155.220.0 - 61.155.220.255 , 0 , Tencent Offline -61.160.224.0 - 61.160.224.255 , 0 , 360 -61.160.230.0 - 61.160.231.255 , 0 , Tencent Offline -61.160.253.0 - 61.160.253.255 , 0 , Tencent Offline -61.164.120.0 - 61.164.120.255 , 0 , Tencent Offline -61.164.155.0 - 61.164.155.255 , 0 , Baidu Offline -61.173.85.0 - 61.173.85.255 , 0 , Xunlei Offline -61.178.227.0 - 61.178.227.255 , 0 , Xunlei Offline -61.179.109.0 - 61.179.109.255 , 0 , Baidu Offline -61.182.137.0 - 61.182.137.255 , 0 , Baidu Offline -61.183.55.0 - 61.183.55.255 , 0 , Xunlei Offline -61.188.190.0 - 61.188.190.255 , 0 , Xunlei Offline -61.235.71.0 - 61.235.71.255 , 0 , Xunlei Offline -61.240.144.0 - 61.240.144.255 , 0 , 360 -64.251.96.0 - 64.251.111.255 , 0 , 360 -101.4.60.0 - 101.4.61.255 , 0 , 360 -101.64.181.0 - 101.64.181.255 , 0 , Baidu Offline -101.69.162.0 - 101.69.162.255 , 0 , Baidu Offline -101.71.56.0 - 101.71.56.255 , 0 , Baidu Offline -101.198.0.0 - 101.199.255.255 , 0 , 360 -101.226.4.0 - 101.226.4.255 , 0 , 360 -101.226.63.0 - 101.226.76.255 , 0 , Tencent Offline -101.226.180.0 - 101.226.180.255 , 0 , Xunlei Offline -101.227.130.0 - 101.227.143.255 , 0 , Tencent Offline -103.7.28.0 - 103.7.31.255 , 0 , Tencent Offline -103.28.8.0 - 103.28.11.255 , 0 , 360 -103.31.200.0 - 103.31.203.255 , 0 , HUAWEI -106.38.179.0 - 106.38.179.255 , 0 , Baidu Offline -106.120.159.0 - 106.120.159.255 , 0 , Baidu Offline -110.18.246.0 - 110.18.246.255 , 0 , Baidu Offline -110.188.3.0 - 110.188.3.255 , 0 , Tencent Offline -111.13.12.0 - 111.13.113.255 , 0 , Baidu Offline -111.30.135.0 - 111.30.135.255 , 0 , Tencent Offline -111.161.24.0 - 111.161.24.255 , 0 , Xunlei Offline -111.206.36.0 - 111.206.76.255 , 0 , Baidu Offline -112.25.34.0 - 112.25.34.255 , 0 , 115 Offline -112.25.60.0 - 112.25.60.255 , 0 , 360 -112.80.23.0 - 112.80.23.255 , 0 , Xunlei Offline -112.80.248.0 - 112.80.255.255 , 0 , Baidu Offline -112.87.43.0 - 112.87.43.227 , 0 , Xunlei Offline -112.90.17.0 - 112.90.17.255 , 0 , Xunlei Offline -112.117.217.0 - 112.117.217.255 , 0 , Xunlei Offline -112.253.12.0 - 112.253.12.255 , 0 , Baidu Offline -113.105.143.0 - 113.105.143.255 , 0 , 115 Offline -113.105.148.81 - 113.105.148.255 , 0 , Baidu Offline -113.107.248.0 - 113.107.248.255 , 0 , Baidu Offline -113.108.29.0 - 113.108.29.255 , 0 , Tencent Offline -113.115.10.0 - 113.115.10.255 , 0 , Tencent Offline -113.142.0.0 - 113.142.31.255 , 0 , Tencent Offline -113.200.90.0 - 113.200.90.255 , 0 , Tencent Offline -114.80.183.0 - 114.80.255.255 , 0 , Xunlei Offline -114.112.202.0 - 114.112.202.255 , 0 , Xunlei Offline -115.159.0.0 - 115.159.255.255 , 0 , Tencent Offline -115.231.38.0 - 115.231.45.255 , 0 , Xunlei Offline -115.236.96.0 - 115.236.153.255 , 0 , Tencent Offline -115.238.230.0 - 115.238.243.255 , 0 , UC Offline -115.239.210.0 - 115.239.212.255 , 0 , Baidu Offline -116.10.186.0 - 116.10.186.255 , 0 , Xunlei Offline -116.31.127.0 - 116.31.127.255 , 0 , Baidu Offline -116.55.230.0 - 116.55.255.255 , 0 , Xunlei Offline -116.57.183.0 - 116.57.255.255 , 0 , Tencent Offline -116.211.117.0 - 116.211.117.255 , 0 , Baidu Offline -116.253.190.0 - 116.253.190.255 , 0 , Tencent Offline -117.21.185.0 - 117.21.185.255 , 0 , Tencent Offline -117.25.132.0 - 117.25.132.255 , 0 , Tencent Offline -117.27.148.0 - 117.27.149.255 , 0 , Baidu Offline -117.34.6.0 - 117.34.6.255 , 0 , Tencent Offline -117.34.28.0 - 117.34.37.255 , 0 , Baidu Offline -117.34.91.0 - 117.34.91.255 , 0 , Xunlei Offline -117.34.112.0 - 117.34.112.255 , 0 , Baidu Offline -117.78.0.0 - 117.78.23.255 , 0 , HUAWEI -118.122.36.0 - 118.122.88.255 , 0 , Xunlei Offline -118.123.97.0 - 118.123.97.255 , 0 , Tencent Offline -118.123.116.0 - 118.123.223.255 , 0 , Baidu Offline -118.180.6.0 - 118.180.6.255 , 0 , Baidu Offline -119.75.208.0 - 119.75.223.255 , 0 , Baidu Offline -119.84.11.0 - 119.84.11.255 , 0 , Xunlei Offline -119.84.72.0 - 119.84.72.255 , 0 , Tencent Offline -119.84.110.0 - 119.84.114.255 , 0 , Xunlei Offline -119.97.178.0 - 119.97.183.255 , 0 , Xunlei Offline -119.120.94.0 - 119.120.94.255 , 0 , Xunlei Offline -119.134.253.0 - 119.134.253.255 , 0 , Baidu Offline -119.144.9.0 - 119.144.9.255 , 0 , Xunlei Offline -119.147.15.0 - 119.147.41.255 , 0 , Tencent Offline -119.147.99.0 - 119.147.249.255 , 0 , 115 Offline -119.167.241.0 - 119.167.241.255 , 0 , Tencent Offline -119.167.246.0 - 119.167.246.255 , 0 , Baidu Offline -119.178.12.0 - 119.178.12.255 , 0 , Xunlei Offline -119.188.11.0 - 119.188.132.255 , 0 , Xunlei Offline -119.189.1.0 - 119.189.1.255 , 0 , Xunlei Offline -120.52.114.0 - 120.52.114.255 , 0 , Baidu Offline -121.9.209.0 - 121.9.255.255 , 0 , Xunlei Offline -121.10.24.0 - 121.10.137.255 , 0 , Xunlei Offline -121.11.68.0 - 121.11.68.255 , 0 , Tencent Offline -121.12.94.0 - 121.12.94.255 , 0 , Baidu Offline -121.14.35.0 - 121.14.35.255 , 0 , Baidu Offline -121.14.82.0 - 121.14.97.255 , 0 , Xunlei Offline -121.14.131.0 - 121.14.131.255 , 0 , Tencent Offline -121.14.222.0 - 121.14.228.255 , 0 , Xunlei Offline -122.70.142.0 - 122.70.142.255 , 0 , Baidu Offline -122.136.46.0 - 122.136.46.255 , 0 , Baidu Offline -122.141.227.0 - 122.141.235.255 , 0 , Xunlei Offline -122.143.1.0 - 122.143.6.255 , 0 , Xunlei Offline -122.143.15.0 - 122.143.15.255 , 0 , 360 -122.192.32.0 - 122.192.32.255 , 0 , Tencent Offline -122.193.41.0 - 122.193.41.255 , 0 , Baidu Offline -122.224.10.0 - 122.224.10.255 , 0 , Baidu Offline -122.227.15.0 - 122.227.15.255 , 0 , Tencent Offline -122.228.218.0 - 122.228.234.255 , 0 , Baidu Offline -122.228.241.0 - 122.228.255.255 , 0 , Xunlei Offline -123.66.33.0 - 123.66.33.255 , 0 , Xunlei Offline -123.125.64.0 - 123.125.115.255 , 0 , Baidu Offline -123.125.160.0 - 123.125.161.255 , 0 , 360 -123.129.219.0 - 123.129.255.255 , 0 , Xunlei Offline -123.138.102.0 - 123.138.239.255 , 0 , Tencent Offline -123.151.44.0 - 123.151.138.255 , 0 , Tencent Offline -123.162.190.0 - 123.162.191.255 , 0 , Xunlei Offline -123.183.223.0 - 123.183.223.255 , 0 , Xunlei Offline -124.89.102.0 - 124.89.103.255 , 0 , Tencent Offline -124.95.156.0 - 124.95.174.255 , 0 , Xunlei Offline -124.115.1.0 - 124.115.14.255 , 0 , Tencent Offline -124.115.215.0 - 124.115.215.255 , 0 , Baidu Offline -124.160.163.0 - 124.160.171.255 , 0 , Tencent Offline -124.161.23.0 - 124.161.23.255 , 0 , Tencent Offline -124.165.216.0 - 124.165.216.255 , 0 , Baidu Offline -124.193.227.0 - 124.193.227.255 , 0 , Baidu Offline -124.225.122.0 - 124.225.122.255 , 0 , Tencent Offline -124.228.42.0 - 124.228.42.255 , 0 , Tencent Offline -124.232.148.0 - 124.232.148.255 , 0 , Xunlei Offline -124.238.238.0 - 124.238.238.255 , 0 , Baidu Offline -125.39.72.0 - 125.39.79.255 , 0 , Xunlei Offline -125.39.126.0 - 125.39.255.255 , 0 , Tencent Offline -125.46.42.0 - 125.46.42.255 , 0 , Xunlei Offline -125.78.242.0 - 125.78.247.255 , 0 , Xunlei Offline -125.218.29.0 - 125.218.29.255 , 0 , Tencent Offline -125.221.46.0 - 125.221.46.255 , 0 , Xunlei Offline -140.206.165.0 - 140.206.165.255 , 0 , Tencent Offline -159.226.50.0 - 159.226.50.255 , 0 , Baidu Offline -162.105.207.0 - 162.105.207.255 , 0 , Baidu Offline -171.111.152.0 - 171.112.96.255 , 0 , Baidu Offline -175.155.115.0 - 175.155.116.255 , 0 , Tencent Offline -180.76.0.0 - 180.76.255.255 , 0 , Baidu Offline -180.96.0.0 - 180.96.1.255 , 0 , Tencent Offline -180.97.7.0 - 180.97.7.255 , 0 , Tencent Offline -180.97.33.0 - 180.97.34.255 , 0 , Baidu Offline -180.97.151.0 - 180.97.152.255 , 0 , Xunlei Offline -180.149.131.0 - 180.149.145.255 , 0 , Baidu Offline -180.153.91.0 - 180.153.115.255 , 0 , Xunlei Offline -180.153.235.0 - 180.153.235.255 , 0 , 360 -182.86.197.0 - 182.86.197.255 , 0 , Baidu Offline -182.118.13.0 - 182.118.125.255 , 0 , Xunlei Offline -182.130.10.0 - 182.130.11.255 , 0 , Tencent Offline -182.131.8.0 - 182.131.11.255 , 0 , Tencent Offline -182.140.134.0 - 182.140.177.255 , 0 , Tencent Offline -182.140.227.0 - 182.140.227.255 , 0 , 360 -182.150.1.0 - 182.150.1.255 , 0 , Baidu Offline -182.247.251.0 - 182.247.251.255 , 0 , Xunlei Offline -182.254.0.0 - 182.254.255.255 , 0 , Tencent Offline -183.60.15.0 - 183.60.15.255 , 0 , Tencent Offline -183.60.131.0 - 183.60.131.255 , 0 , Baidu Offline -183.60.139.0 - 183.60.139.255 , 0 , 115 Offline -183.60.208.0 - 183.60.209.255 , 0 , Xunlei Offline -183.60.211.0 - 183.60.211.255 , 0 , 360 -183.60.235.0 - 183.60.235.255 , 0 , Baidu Offline -183.61.49.0 - 183.61.49.255 , 0 , Tencent Offline -183.61.133.0 - 183.61.133.255 , 0 , Baidu Offline -183.63.33.0 - 183.63.33.255 , 0 , Xunlei Offline -183.94.216.0 - 183.94.239.255 , 0 , Xunlei Offline -183.131.32.0 - 183.131.39.255 , 0 , Baidu Offline -183.136.133.0 - 183.136.133.255 , 0 , 360 -183.136.156.0 - 183.136.158.255 , 0 , Xunlei Offline -183.136.218.0 - 183.136.218.255 , 0 , Baidu Offline -183.157.36.0 - 183.157.36.255 , 0 , Xunlei Offline -183.221.245.0 - 183.221.245.255 , 0 , Baidu Offline -183.232.22.0 - 183.232.22.255 , 0 , Baidu Offline -202.38.194.0 - 202.38.194.255 , 0 , Tencent Offline -202.100.78.0 - 202.100.78.255 , 0 , Tencent Offline -202.105.139.0 - 202.105.139.255 , 0 , Xunlei Offline -202.105.182.0 - 202.105.182.255 , 0 , Tencent Offline -202.108.11.0 - 202.108.250.255 , 0 , Baidu Offline -203.195.64.0 - 203.195.95.255 , 0 , Tencent Offline -203.195.128.0 - 203.195.255.255 , 0 , Tencent Offline -203.205.128.0 - 203.205.255.255 , 0 , Tencent Offline -210.38.3.0 - 210.38.3.255 , 0 , Tencent Offline -210.39.2.0 - 210.39.2.255 , 0 , Tencent Offline -211.90.25.0 - 211.90.25.255 , 0 , Baidu Offline -211.98.168.0 - 211.98.171.255 , 0 , Xunlei Offline -211.137.100.0 - 211.137.100.255 , 0 , Xunlei Offline -211.151.210.0 - 211.151.210.255 , 0 , 115 Offline -211.162.73.0 - 211.162.73.255 , 0 , Xunlei Offline -218.6.13.0 - 218.6.13.255 , 0 , Xunlei Offline -218.8.242.0 - 218.8.242.255 , 0 , Tencent Offline -218.21.68.0 - 218.21.68.255 , 0 , Xunlei Offline -218.22.90.0 - 218.22.90.255 , 0 , Tencent Offline -218.26.232.0 - 218.26.232.255 , 0 , Xunlei Offline -218.30.73.0 - 218.30.73.255 , 0 , Tencent Offline -218.59.144.0 - 218.59.144.255 , 0 , Xunlei Offline -218.60.11.0 - 218.60.11.255 , 0 , Tencent Offline -218.75.140.0 - 218.75.140.255 , 0 , Baidu Offline -218.75.172.0 - 218.75.172.255 , 0 , Xunlei Offline -218.199.46.0 - 218.199.46.255 , 0 , Tencent Offline -219.129.83.0 - 219.129.83.255 , 0 , Xunlei Offline -219.134.132.0 - 219.134.132.255 , 0 , Xunlei Offline -219.151.4.0 - 219.151.4.255 , 0 , Tencent Offline -219.159.248.0 - 219.159.248.255 , 0 , MNDISK Offline -220.113.9.0 - 220.113.9.255 , 0 , Xunlei Offline -220.115.240.0 - 220.115.240.255 , 0 , Xunlei Offline -220.161.209.0 - 220.161.209.255 , 0 , Baidu Offline -220.170.192.0 - 220.170.192.255 , 0 , Tencent Offline -220.181.5.0 - 220.181.167.255 , 0 , Baidu Offline -220.249.103.0 - 220.249.103.255 , 0 , Xunlei Offline -221.4.246.0 - 221.4.246.255 , 0 , Xunlei Offline -221.5.8.0 - 221.5.8.255 , 0 , Xunlei Offline -221.203.176.0 - 221.204.232.255 , 0 , Xunlei Offline -221.215.87.0 - 221.215.87.255 , 0 , Xunlei Offline -221.233.79.0 - 221.233.79.255 , 0 , Baidu Offline -221.235.189.0 - 221.235.205.255 , 0 , Xunlei Offline -221.236.21.0 - 221.236.30.255 , 0 , Tencent Offline -221.238.25.0 - 221.238.25.255 , 0 , Xunlei Offline -222.24.133.0 - 222.24.133.255 , 0 , Tencent Offline -222.28.155.0 - 222.28.155.255 , 0 , Tencent Offline -222.73.49.0 - 222.73.133.255 , 0 , Xunlei Offline -222.73.183.0 - 222.73.183.255 , 0 , Tencent Offline -222.133.46.0 - 222.133.46.255 , 0 , Baidu Offline -222.141.53.0 - 222.141.53.255 , 0 , Xunlei Offline -222.141.220.0 - 222.141.220.255 , 0 , Tencent Offline -222.161.212.0 - 222.161.255.255 , 0 , Xunlei Offline -222.186.17.0 - 222.186.19.255 , 0 , Xunlei Offline -222.186.55.0 - 222.186.55.255 , 0 , Baidu Offline -222.199.144.0 - 222.199.191.255 , 0 , Baidu Offline -222.211.64.0 - 222.211.64.255 , 0 , Baidu Offline -222.215.119.0 - 222.215.119.255 , 0 , Tencent Offline -222.216.190.0 - 222.216.190.255 , 0 , Baidu Offline -222.218.45.0 - 222.218.45.255 , 0 , Baidu Offline diff --git a/shadowsocks-rust/Makefile b/shadowsocks-rust/Makefile deleted file mode 100644 index 41ec2f22..00000000 --- a/shadowsocks-rust/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2017-2020 Yousong Zhou -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=shadowsocks-rust -PKG_VERSION:=1.13.1 -PKG_RELEASE:= - -PKG_SOURCE_HEADER:=shadowsocks-v$(PKG_VERSION) -PKG_SOURCE_BODY:=unknown-linux-musl -PKG_SOURCE_FOOTER:=tar.xz -PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-rust/releases/download/v$(PKG_VERSION)/ - -ifeq ($(ARCH),aarch64) - PKG_SOURCE:=$(PKG_SOURCE_HEADER).aarch64-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=61f65c067986e322f7befebb8d330c65c0777f4bcd8938384bf1ad3e3dcdabfd -else ifeq ($(ARCH),arm) - # Referred to golang/golang-values.mk - ARM_CPU_FEATURES:=$(word 2,$(subst +,$(space),$(call qstrip,$(CONFIG_CPU_TYPE)))) - ifeq ($(ARM_CPU_FEATURES),) - PKG_SOURCE:=$(PKG_SOURCE_HEADER).arm-$(PKG_SOURCE_BODY)eabi.$(PKG_SOURCE_FOOTER) - PKG_HASH:=f14618c10605a1422f2dfea640968393ec28017960c31d80cd658850acb2dcb0 - else - PKG_SOURCE:=$(PKG_SOURCE_HEADER).arm-$(PKG_SOURCE_BODY)eabihf.$(PKG_SOURCE_FOOTER) - PKG_HASH:=f2a0c5ccce9464d9db5018f49062f584727902ae0471cfa8f9bafd5ed271f9d7 - endif -else ifeq ($(ARCH),i386) - PKG_SOURCE:=$(PKG_SOURCE_HEADER).i686-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=52adb3231cfc4e0e2f92ffe862338a848ea5404026ebcdb2f95f3dc4e730553c -else ifeq ($(ARCH),mips) - PKG_SOURCE:=$(PKG_SOURCE_HEADER).mips-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=9df8c9f215dd2bb204172fcfec9be6c0e38eb75dbcb691392c057015b1dc82d2 -else ifeq ($(ARCH),mipsel) - PKG_SOURCE:=$(PKG_SOURCE_HEADER).mipsel-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=9aecb004f0b82271d295a0ba342f7bb590b6f29883ee7b417f9e0537471311f1 -else ifeq ($(ARCH),x86_64) - PKG_SOURCE:=$(PKG_SOURCE_HEADER).x86_64-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=5d288ffaf7c58492ec5f3986c3f1edfd800dadf322289676e4ff8c8081c57cd5 -# Set the default value to make OpenWrt Package Checker happy -else - PKG_SOURCE:=dummy - PKG_HASH:=dummy -endif - -PKG_MAINTAINER:=Tianling Shen -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE - -include $(INCLUDE_DIR)/package.mk - -TAR_CMD:=$(HOST_TAR) -C $(PKG_BUILD_DIR) $(TAR_OPTIONS) - -define Package/shadowsocks-rust/Default - define Package/shadowsocks-rust-$(1) - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=shadowsocks-rust $(1) - URL:=https://github.com/shadowsocks/shadowsocks-rust - DEPENDS:=@USE_MUSL @(aarch64||arm||i386||mips||mipsel||x86_64) @!(TARGET_x86_geode||TARGET_x86_legacy) - endef - - define Package/shadowsocks-rust-$(1)/install - $$(INSTALL_DIR) $$(1)/usr/bin - $$(INSTALL_BIN) $$(PKG_BUILD_DIR)/$(1) $$(1)/usr/bin - endef -endef - -SHADOWSOCKS_COMPONENTS:=sslocal ssmanager ssserver ssurl ssservice -define shadowsocks-rust/templates - $(foreach component,$(SHADOWSOCKS_COMPONENTS), - $(call Package/shadowsocks-rust/Default,$(component)) - ) -endef -$(eval $(call shadowsocks-rust/templates)) - -define Build/Compile -endef - -$(foreach component,$(SHADOWSOCKS_COMPONENTS), \ - $(eval $(call BuildPackage,shadowsocks-rust-$(component))) \ -) diff --git a/shadowsocksr-libev/Makefile b/shadowsocksr-libev/Makefile deleted file mode 100644 index 81ef76ec..00000000 --- a/shadowsocksr-libev/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# -# Copyright (C) 2017-2020 Yousong Zhou -# Copyright (C) 2018 Lean -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=shadowsocksr-libev -PKG_VERSION:=2.5.6 -PKG_RELEASE:= - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/shadowsocksrr/shadowsocksr-libev -PKG_SOURCE_DATE:=2018-03-07 -PKG_SOURCE_VERSION:=d63ff863800a5645aca4309d5dd5962bd1e95543 -PKG_MIRROR_HASH:=34308ed827a5dd4f4e35619914102d55b00604faa44fda051d1d25fb4a319325 - -PKG_LICENSE:=GPL-3.0 -PKG_LICENSE_FILES:=LICENSE - -PKG_FIXUP:=autoreconf -PKG_USE_MIPS16:=0 -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/shadowsocksr-libev/Default - define Package/shadowsocksr-libev-ssr-$(1) - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=shadowsocksr-libev ssr-$(1) - URL:=https://github.com/shadowsocksrr/shadowsocksr-libev - DEPENDS:=+libev +libsodium +libopenssl +libpthread +libpcre +libudns +zlib - endef - - define Package/shadowsocksr-libev-ssr-$(1)/install - $$(INSTALL_DIR) $$(1)/usr/bin - $$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/usr/bin/ss-$(1) $$(1)/usr/bin/ssr-$(1) - endef -endef - -SHADOWSOCKSR_COMPONENTS:=check local nat redir server -define shadowsocksr-libev/templates - $(foreach component,$(SHADOWSOCKSR_COMPONENTS), - $(call Package/shadowsocksr-libev/Default,$(component)) - ) -endef -$(eval $(call shadowsocksr-libev/templates)) - -CONFIGURE_ARGS += \ - --disable-documentation \ - --disable-ssp \ - --disable-assert \ - --enable-system-shared-lib - -TARGET_CFLAGS += -flto -TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed - -$(foreach component,$(SHADOWSOCKSR_COMPONENTS), \ - $(eval $(call BuildPackage,shadowsocksr-libev-ssr-$(component))) \ -) diff --git a/shadowsocksr-libev/patches/0001-Add-ss-server-and-ss-check.patch b/shadowsocksr-libev/patches/0001-Add-ss-server-and-ss-check.patch deleted file mode 100644 index 290ede54..00000000 --- a/shadowsocksr-libev/patches/0001-Add-ss-server-and-ss-check.patch +++ /dev/null @@ -1,397 +0,0 @@ ---- a/.gitignore -+++ b/.gitignore -@@ -2,6 +2,7 @@ build/ - .deps/ - /Makefile - src/Makefile -+server/Makefile - libev/Makefile - libudns/Makefile - libcork/Makefile ---- a/Makefile.am -+++ b/Makefile.am -@@ -1,7 +1,7 @@ - if USE_SYSTEM_SHARED_LIB --SUBDIRS = libcork libipset src -+SUBDIRS = libcork libipset src server - else --SUBDIRS = libsodium libcork libipset libudns libev src -+SUBDIRS = libsodium libcork libipset libudns libev src server - endif - - if ENABLE_DOCUMENTATION ---- a/Makefile.in -+++ b/Makefile.in -@@ -195,7 +195,7 @@ am__define_uniq_tagged_files = \ - ETAGS = etags - CTAGS = ctags - CSCOPE = cscope --DIST_SUBDIRS = libsodium libcork libipset libudns libev src doc -+DIST_SUBDIRS = libsodium libcork libipset libudns libev src server doc - am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(srcdir)/shadowsocks-libev.pc.in $(top_srcdir)/auto/ar-lib \ - $(top_srcdir)/auto/compile $(top_srcdir)/auto/config.guess \ -@@ -377,8 +377,9 @@ top_build_prefix = @top_build_prefix@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ - @USE_SYSTEM_SHARED_LIB_FALSE@SUBDIRS = libsodium libcork libipset \ --@USE_SYSTEM_SHARED_LIB_FALSE@ libudns libev src $(am__append_1) --@USE_SYSTEM_SHARED_LIB_TRUE@SUBDIRS = libcork libipset src \ -+@USE_SYSTEM_SHARED_LIB_FALSE@ libudns libev src server \ -+@USE_SYSTEM_SHARED_LIB_FALSE@ $(am__append_1) -+@USE_SYSTEM_SHARED_LIB_TRUE@SUBDIRS = libcork libipset src server \ - @USE_SYSTEM_SHARED_LIB_TRUE@ $(am__append_1) - ACLOCAL_AMFLAGS = -I m4 - pkgconfiglibdir = $(libdir)/pkgconfig ---- a/configure -+++ b/configure -@@ -649,7 +649,6 @@ PTHREAD_CC - ax_pthread_config - INET_NTOP_LIB - MV --RM - GZIP - XMLTO - ASCIIDOC -@@ -757,6 +756,7 @@ infodir - docdir - oldincludedir - includedir -+runstatedir - localstatedir - sharedstatedir - sysconfdir -@@ -857,6 +857,7 @@ datadir='${datarootdir}' - sysconfdir='${prefix}/etc' - sharedstatedir='${prefix}/com' - localstatedir='${prefix}/var' -+runstatedir='${localstatedir}/run' - includedir='${prefix}/include' - oldincludedir='/usr/include' - docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -@@ -1109,6 +1110,15 @@ do - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - -+ -runstatedir | --runstatedir | --runstatedi | --runstated \ -+ | --runstate | --runstat | --runsta | --runst | --runs \ -+ | --run | --ru | --r) -+ ac_prev=runstatedir ;; -+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ -+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ -+ | --run=* | --ru=* | --r=*) -+ runstatedir=$ac_optarg ;; -+ - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ -@@ -1246,7 +1256,7 @@ fi - for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ -- libdir localedir mandir -+ libdir localedir mandir runstatedir - do - eval ac_val=\$$ac_var - # Remove trailing slashes. -@@ -1399,6 +1409,7 @@ Fine tuning of the installation director - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] -+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] -@@ -2472,8 +2483,8 @@ ac_configure="$SHELL $ac_aux_dir/configu - - - --# expand $ac_aux_dir to an absolute path --am_aux_dir=`cd $ac_aux_dir && pwd` -+# Expand $ac_aux_dir to an absolute path. -+am_aux_dir=`cd "$ac_aux_dir" && pwd` - - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' -@@ -3783,7 +3794,7 @@ $as_echo "$ac_cv_safe_to_define___extens - - - --am__api_version='1.14' -+am__api_version='1.15' - - # Find a good install program. We prefer a C program (faster), - # so one script is as good as another. But avoid the broken or -@@ -3972,7 +3983,7 @@ else - $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} - fi - --if test x"${install_sh}" != xset; then -+if test x"${install_sh+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; -@@ -4363,8 +4374,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}ma - # - mkdir_p='$(MKDIR_P)' - --# We need awk for the "check" target. The system "awk" is bad on --# some platforms. -+# We need awk for the "check" target (and possibly the TAP driver). The -+# system "awk" is bad on some platforms. - # Always define AMTAR for backward compatibility. Yes, it's still used - # in the wild :-( We should find a proper way to deprecate it ... - AMTAR='$${TAR-tar}' -@@ -4549,6 +4560,7 @@ END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi - fi -+ - if test -n "$ac_tool_prefix"; then - for ac_prog in ar lib "link -lib" - do -@@ -12494,47 +12506,6 @@ $as_echo "no" >&6; } - fi - - -- # Extract the first word of "rm", so it can be a program name with args. --set dummy rm; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 --$as_echo_n "checking for $ac_word... " >&6; } --if ${ac_cv_path_RM+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- case $RM in -- [\\/]* | ?:[\\/]*) -- ac_cv_path_RM="$RM" # Let the user override the test with a path. -- ;; -- *) -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done -- done --IFS=$as_save_IFS -- -- test -z "$ac_cv_path_RM" && ac_cv_path_RM="rm" -- ;; --esac --fi --RM=$ac_cv_path_RM --if test -n "$RM"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 --$as_echo "$RM" >&6; } --else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } --fi -- -- - # Extract the first word of "mv", so it can be a program name with args. - set dummy mv; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -@@ -16204,15 +16175,162 @@ $as_echo "#define HAVE_IPv6 1" >>confdef - - - if test -z "$USE_SYSTEM_SHARED_LIB_TRUE"; then : -- else -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sodium_init in -lsodium" >&5 -+$as_echo_n "checking for sodium_init in -lsodium... " >&6; } -+if ${ac_cv_lib_sodium_sodium_init+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ ac_check_lib_save_LIBS=$LIBS -+LIBS="-lsodium $LIBS" -+cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ -+#ifdef __cplusplus -+extern "C" -+#endif -+char sodium_init (); -+int -+main () -+{ -+return sodium_init (); -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_link "$LINENO"; then : -+ ac_cv_lib_sodium_sodium_init=yes -+else -+ ac_cv_lib_sodium_sodium_init=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+LIBS=$ac_check_lib_save_LIBS -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sodium_sodium_init" >&5 -+$as_echo "$ac_cv_lib_sodium_sodium_init" >&6; } -+if test "x$ac_cv_lib_sodium_sodium_init" = xyes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_LIBSODIUM 1 -+_ACEOF -+ -+ LIBS="-lsodium $LIBS" -+ -+else -+ -+ as_fn_error $? "Couldn't find libsodium. Try installing libsodium-dev[el]." "$LINENO" 5 -+ -+fi -+ -+ -+else - subdirs="$subdirs libsodium" - - fi - --ac_config_files="$ac_config_files shadowsocks-libev.pc Makefile libcork/Makefile libipset/Makefile src/Makefile" -+ac_config_files="$ac_config_files shadowsocks-libev.pc Makefile libcork/Makefile libipset/Makefile src/Makefile server/Makefile" - - if test -z "$USE_SYSTEM_SHARED_LIB_TRUE"; then : -- else -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dns_dnlen in -ludns" >&5 -+$as_echo_n "checking for dns_dnlen in -ludns... " >&6; } -+if ${ac_cv_lib_udns_dns_dnlen+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ ac_check_lib_save_LIBS=$LIBS -+LIBS="-ludns $LIBS" -+cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ -+#ifdef __cplusplus -+extern "C" -+#endif -+char dns_dnlen (); -+int -+main () -+{ -+return dns_dnlen (); -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_link "$LINENO"; then : -+ ac_cv_lib_udns_dns_dnlen=yes -+else -+ ac_cv_lib_udns_dns_dnlen=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+LIBS=$ac_check_lib_save_LIBS -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_udns_dns_dnlen" >&5 -+$as_echo "$ac_cv_lib_udns_dns_dnlen" >&6; } -+if test "x$ac_cv_lib_udns_dns_dnlen" = xyes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_LIBUDNS 1 -+_ACEOF -+ -+ LIBS="-ludns $LIBS" -+ -+else -+ as_fn_error $? "Couldn't find libudns. Try installing libudns-dev or udns-devel." "$LINENO" 5 -+fi -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ev_loop_destroy in -lev" >&5 -+$as_echo_n "checking for ev_loop_destroy in -lev... " >&6; } -+if ${ac_cv_lib_ev_ev_loop_destroy+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ ac_check_lib_save_LIBS=$LIBS -+LIBS="-lev $LIBS" -+cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+/* Override any GCC internal prototype to avoid an error. -+ Use char because int might match the return type of a GCC -+ builtin and then its argument prototype would still apply. */ -+#ifdef __cplusplus -+extern "C" -+#endif -+char ev_loop_destroy (); -+int -+main () -+{ -+return ev_loop_destroy (); -+ ; -+ return 0; -+} -+_ACEOF -+if ac_fn_c_try_link "$LINENO"; then : -+ ac_cv_lib_ev_ev_loop_destroy=yes -+else -+ ac_cv_lib_ev_ev_loop_destroy=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+LIBS=$ac_check_lib_save_LIBS -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ev_ev_loop_destroy" >&5 -+$as_echo "$ac_cv_lib_ev_ev_loop_destroy" >&6; } -+if test "x$ac_cv_lib_ev_ev_loop_destroy" = xyes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_LIBEV 1 -+_ACEOF -+ -+ LIBS="-lev $LIBS" -+ -+else -+ as_fn_error $? "Couldn't find libev. Try installing libev-dev[el]." "$LINENO" 5 -+fi -+ -+ -+else - ac_config_files="$ac_config_files libudns/Makefile libev/Makefile" - - fi -@@ -17258,6 +17376,7 @@ do - "libcork/Makefile") CONFIG_FILES="$CONFIG_FILES libcork/Makefile" ;; - "libipset/Makefile") CONFIG_FILES="$CONFIG_FILES libipset/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; -+ "server/Makefile") CONFIG_FILES="$CONFIG_FILES server/Makefile" ;; - "libudns/Makefile") CONFIG_FILES="$CONFIG_FILES libudns/Makefile" ;; - "libev/Makefile") CONFIG_FILES="$CONFIG_FILES libev/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; -@@ -17958,8 +18077,8 @@ $as_echo X"$file" | - fi - - cfgfile="${ofile}T" -- trap "$RM -f \"$cfgfile\"; exit 1" 1 2 15 -- $RM -f "$cfgfile" -+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15 -+ $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" - #! $SHELL ---- a/configure.ac -+++ b/configure.ac -@@ -315,7 +315,8 @@ AC_CONFIG_FILES([ shadowsocks-libev.pc - Makefile - libcork/Makefile - libipset/Makefile -- src/Makefile]) -+ src/Makefile -+ server/Makefile]) - AM_COND_IF([USE_SYSTEM_SHARED_LIB],[ - AC_CHECK_LIB([udns], [dns_dnlen], ,[AC_MSG_ERROR([Couldn't find libudns. Try installing libudns-dev or udns-devel.])]) - AC_CHECK_LIB([ev], [ev_loop_destroy], ,[AC_MSG_ERROR([Couldn't find libev. Try installing libev-dev@<:@el@:>@.])]) diff --git a/shadowsocksr-libev/patches/0002-Revert-verify_simple-and-auth_simple.patch b/shadowsocksr-libev/patches/0002-Revert-verify_simple-and-auth_simple.patch deleted file mode 100644 index 0f811465..00000000 --- a/shadowsocksr-libev/patches/0002-Revert-verify_simple-and-auth_simple.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/src/obfs/obfs.c -+++ b/src/obfs/obfs.c -@@ -88,7 +88,7 @@ obfs_class *new_obfs_class(const char *p - plugin->client_decode = tls12_ticket_auth_client_decode; - - return plugin; -- /*} else if (strcmp(plugin_name, "verify_simple") == 0) { -+ } else if (strcmp(plugin_name, "verify_simple") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs_class)); - plugin->init_data = init_data; - plugin->new_obfs = verify_simple_new_obfs; -@@ -115,7 +115,7 @@ obfs_class *new_obfs_class(const char *p - plugin->client_udp_pre_encrypt = NULL; - plugin->client_udp_post_decrypt = NULL; - -- return plugin;*/ -+ return plugin; - } else if (strcmp(plugin_name, "auth_sha1") == 0) { - obfs_class *plugin = (obfs_class *) malloc(sizeof(obfs_class)); - plugin->init_data = auth_simple_init_data; diff --git a/shadowsocksr-libev/patches/0003-Refine-Usage.patch b/shadowsocksr-libev/patches/0003-Refine-Usage.patch deleted file mode 100644 index dd44f585..00000000 --- a/shadowsocksr-libev/patches/0003-Refine-Usage.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- a/src/utils.c -+++ b/src/utils.c -@@ -258,8 +258,6 @@ usage() - { - printf("\n"); - printf("shadowsocks-libev %s with %s\n\n", VERSION, USING_CRYPTO); -- printf( -- " maintained by Max Lv and Linus Yang \n\n"); - printf(" usage:\n\n"); - #ifdef MODULE_LOCAL - printf(" ss-local\n"); -@@ -299,6 +297,25 @@ usage() - " The default cipher is rc4-md5.\n"); - printf("\n"); - printf( -+ " -o Obfs of your remote server: plain,\n"); -+ printf( -+ " http_simple, http_post and tls1.2_ticket_auth.\n"); -+ printf( -+ " -g Obfs-Param of your remote server.\n"); -+ printf( -+ " -O Protocol of your remote server: orgin,\n"); -+ printf( -+ " auth_sha1, auth_sha1_v2, auth_sha1_v4,\n"); -+ printf( -+ " auth_aes128_md5, auth_aes128_sha1,\n"); -+ printf( -+ " auth_chain_a, auth_chain_b, auth_chain_c,\n"); -+ printf( -+ " auth_chain_d, auth_chain_e and auth_chain_f.\n"); -+ printf( -+ " -G Protocol-Param of your remote server.\n"); -+ printf("\n"); -+ printf( - " [-a ] Run as another user.\n"); - printf( - " [-f ] The file path to store pid.\n"); diff --git a/shadowsocksr-libev/patches/100-fix-gcc-10.patch b/shadowsocksr-libev/patches/100-fix-gcc-10.patch deleted file mode 100644 index 1049fc2f..00000000 --- a/shadowsocksr-libev/patches/100-fix-gcc-10.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/src/http.h -+++ b/src/http.h -@@ -29,6 +29,6 @@ - #include - #include "protocol.h" - --const protocol_t *const http_protocol; -+extern const protocol_t *const http_protocol; - - #endif ---- a/src/tls.h -+++ b/src/tls.h -@@ -28,6 +28,6 @@ - - #include "protocol.h" - --const protocol_t *const tls_protocol; -+extern const protocol_t *const tls_protocol; - - #endif diff --git a/shadowsocksr-libev/patches/101-Fix-Werror-sizeof-pointer-memaccess.patch b/shadowsocksr-libev/patches/101-Fix-Werror-sizeof-pointer-memaccess.patch deleted file mode 100644 index 1db501aa..00000000 --- a/shadowsocksr-libev/patches/101-Fix-Werror-sizeof-pointer-memaccess.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/src/local.c -+++ b/src/local.c -@@ -718,7 +718,7 @@ server_recv_cb(EV_P_ ev_io *w, int reven - - ss_free(hostname); - } else { -- strncpy(host, ip, sizeof(ip)); -+ strncpy(host, ip, INET6_ADDRSTRLEN); - } - } - diff --git a/shadowsocksr-libev/patches/102-Read-listening-mode-from-config.patch b/shadowsocksr-libev/patches/102-Read-listening-mode-from-config.patch deleted file mode 100644 index 57f6f76d..00000000 --- a/shadowsocksr-libev/patches/102-Read-listening-mode-from-config.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/src/jconf.c -+++ b/src/jconf.c -@@ -259,6 +259,19 @@ read_jconf(const char *file) - conf.server_legacy.obfs = to_string(value); - } else if (strcmp(name, "obfs_param") == 0) { // SSR - conf.server_legacy.obfs_param = to_string(value); -+ } else if (strcmp(name, "mode") == 0) { -+ char *mode_str = to_string(value); -+ -+ if (strcmp(mode_str, "tcp_only") == 0) -+ conf.mode = TCP_ONLY; -+ else if (strcmp(mode_str, "tcp_and_udp") == 0) -+ conf.mode = TCP_AND_UDP; -+ else if (strcmp(mode_str, "udp_only") == 0) -+ conf.mode = UDP_ONLY; -+ else -+ LOGI("ignore unknown mode: %s, use tcp_only as fallback", -+ mode_str); -+ ss_free(mode_str); - } else { - match = 0; - } ---- a/src/redir.c -+++ b/src/redir.c -@@ -1252,6 +1252,9 @@ main(int argc, char **argv) - if (user == NULL) { - user = conf->user; - } -+ if (mode == TCP_ONLY) { -+ mode = conf->mode; -+ } - if (mtu == 0) { - mtu = conf->mtu; - } diff --git a/shadowsocksr-libev/patches/999-tcp-tproxy.patch b/shadowsocksr-libev/patches/999-tcp-tproxy.patch deleted file mode 100644 index c73536d7..00000000 --- a/shadowsocksr-libev/patches/999-tcp-tproxy.patch +++ /dev/null @@ -1,154 +0,0 @@ ---- a/completions/bash/ss-redir -+++ b/completions/bash/ss-redir -@@ -2,7 +2,7 @@ - { - local cur prev opts ciphers - ciphers='rc4-md5 table rc4 aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr bf-cfb camellia-128-cfb camellia-192-cfb camellia-256-cfb cast5-cfb des-cfb idea-cfb rc2-cfb seed-cfb salsa20 chacha20 and chacha20-ietf' -- opts='-s -b -p -k -f -t -m -c -a -n -u -U -v -h -A --mtu --help --mptcp -l' -+ opts='-s -b -p -k -f -t -m -c -a -n -u -U -T -v -h -A --mtu --help --mptcp -l' - cur=${COMP_WORDS[COMP_CWORD]} - prev="${COMP_WORDS[COMP_CWORD-1]}" - case "$prev" in ---- a/src/jconf.c -+++ b/src/jconf.c -@@ -338,7 +338,11 @@ - check_json_value_type(value, json_boolean, - "invalid config file: option 'ipv6_first' must be a boolean"); - conf.ipv6_first = value->u.boolean; -- } -+ } else if (strcmp(name, "tcp_tproxy") == 0) { -+ check_json_value_type(value, json_boolean, -+ "invalid config file: option 'tcp_tproxy' must be a boolean"); -+ conf.tcp_tproxy = value->u.boolean; -+ } - } - } - } else { ---- a/src/jconf.h -+++ b/src/jconf.h -@@ -105,6 +105,7 @@ - int mtu; - int mptcp; - int ipv6_first; -+ int tcp_tproxy; - } jconf_t; - - jconf_t *read_jconf(const char *file); ---- a/src/redir.c -+++ b/src/redir.c -@@ -71,6 +71,14 @@ - #define IP6T_SO_ORIGINAL_DST 80 - #endif - -+#ifndef IP_TRANSPARENT -+#define IP_TRANSPARENT 19 -+#endif -+ -+#ifndef IPV6_TRANSPARENT -+#define IPV6_TRANSPARENT 75 -+#endif -+ - #include "includeobfs.h" // I don't want to modify makefile - #include "jconf.h" - -@@ -101,18 +109,28 @@ - static listen_ctx_t *current_profile; - static struct cork_dllist all_connections; - -+static int tcp_tproxy = 0; /* use tproxy instead of redirect (for tcp) */ -+ - int - getdestaddr(int fd, struct sockaddr_storage *destaddr) - { - socklen_t socklen = sizeof(*destaddr); - int error = 0; - -- error = getsockopt(fd, SOL_IPV6, IP6T_SO_ORIGINAL_DST, destaddr, &socklen); -- if (error) { // Didn't find a proper way to detect IP version. -- error = getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, destaddr, &socklen); -- if (error) { -- return -1; -- } -+ if (tcp_tproxy) { -+ error = getsockname(fd, (void *)destaddr, &socklen); -+ } else { -+ error = getsockopt(fd, SOL_IPV6, IP6T_SO_ORIGINAL_DST, destaddr, &socklen); -+ if (error) { // Didn't find a proper way to detect IP version. -+ error = getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, destaddr, &socklen); -+ if (error) { -+ return -1; -+ } -+ } -+ } -+ -+ if (error) { -+ return -1; - } - return 0; - } -@@ -164,6 +182,23 @@ - if (err == 0) { - LOGI("tcp port reuse enabled"); - } -+ -+ if (tcp_tproxy) { -+ int level = 0, optname = 0; -+ if (rp->ai_family == AF_INET) { -+ level = IPPROTO_IP; -+ optname = IP_TRANSPARENT; -+ } else { -+ level = IPPROTO_IPV6; -+ optname = IPV6_TRANSPARENT; -+ } -+ -+ if (setsockopt(listen_sock, level, optname, &opt, sizeof(opt)) != 0) { -+ ERROR("setsockopt IP_TRANSPARENT"); -+ exit(EXIT_FAILURE); -+ } -+ LOGI("tcp tproxy mode enabled"); -+ } - - s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen); - if (s == 0) { -@@ -1094,7 +1129,7 @@ - - USE_TTY(); - -- while ((c = getopt_long(argc, argv, "f:s:p:l:k:t:m:c:b:a:n:huUvA6" -+ while ((c = getopt_long(argc, argv, "f:s:p:l:k:t:m:c:b:a:n:huUTvA6" - "O:o:G:g:", - long_options, &option_index)) != -1) { - switch (c) { -@@ -1169,6 +1204,9 @@ - case 'U': - mode = UDP_ONLY; - break; -+ case 'T': -+ tcp_tproxy = 1; -+ break; - case 'v': - verbose = 1; - break; -@@ -1255,6 +1293,9 @@ - if (mode == TCP_ONLY) { - mode = conf->mode; - } -+ if (tcp_tproxy == 0) { -+ tcp_tproxy = conf->tcp_tproxy; -+ } - if (mtu == 0) { - mtu = conf->mtu; - } ---- a/src/utils.c -+++ b/src/utils.c -@@ -342,6 +342,10 @@ - #endif - printf( - " [-U] Enable UDP relay and disable TCP relay.\n"); -+#ifdef MODULE_REDIR -+ printf( -+ " [-T] Use tproxy instead of redirect (for tcp).\n"); -+#endif - #ifdef MODULE_REMOTE - printf( - " [-6] Resovle hostname to IPv6 address first.\n"); diff --git a/shadowsocksr-libev/src/server/Makefile.am b/shadowsocksr-libev/src/server/Makefile.am deleted file mode 100644 index 3ae8bc27..00000000 --- a/shadowsocksr-libev/src/server/Makefile.am +++ /dev/null @@ -1,55 +0,0 @@ -VERSION_INFO = 2:0:0 - -AM_CFLAGS = -g -O2 -Wall -Werror -Wno-deprecated-declarations -fno-strict-aliasing -std=gnu99 -D_GNU_SOURCE -AM_CFLAGS += $(PTHREAD_CFLAGS) -if !USE_SYSTEM_SHARED_LIB -AM_CFLAGS += -I$(top_srcdir)/libev -AM_CFLAGS += -I$(top_srcdir)/libudns -AM_CFLAGS += -I$(top_srcdir)/libsodium/src/libsodium/include -endif -AM_CFLAGS += -I$(top_srcdir)/libipset/include -AM_CFLAGS += -I$(top_srcdir)/libcork/include -AM_CFLAGS += $(LIBPCRE_CFLAGS) - -SS_COMMON_LIBS = $(top_builddir)/libipset/libipset.la \ - $(top_builddir)/libcork/libcork.la \ - $(INET_NTOP_LIB) $(LIBPCRE_LIBS) -if USE_SYSTEM_SHARED_LIB -SS_COMMON_LIBS += -lev -lsodium -lm -else -SS_COMMON_LIBS += $(top_builddir)/libev/libev.la \ - $(top_builddir)/libsodium/src/libsodium/libsodium.la -endif - -bin_PROGRAMS = ss-server ss-check - -sni_src = http.c \ - tls.c \ - rule.c - -ss_check_SOURCES = check.c - -ss_server_SOURCES = utils.c \ - netutils.c \ - jconf.c \ - json.c \ - encrypt.c \ - udprelay.c \ - cache.c \ - acl.c \ - resolv.c \ - server.c \ - $(sni_src) - - -ss_check_LDADD = $(SS_COMMON_LIBS) -ss_server_LDADD = $(SS_COMMON_LIBS) - -if USE_SYSTEM_SHARED_LIB -ss_server_LDADD += -ludns -else -ss_server_LDADD += $(top_builddir)/libudns/libudns.la -endif - -ss_check_CFLAGS = $(AM_CFLAGS) -ss_server_CFLAGS = $(AM_CFLAGS) -DMODULE_REMOTE diff --git a/shadowsocksr-libev/src/server/Makefile.in b/shadowsocksr-libev/src/server/Makefile.in deleted file mode 100644 index 3bfa53ea..00000000 --- a/shadowsocksr-libev/src/server/Makefile.in +++ /dev/null @@ -1,919 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -@USE_SYSTEM_SHARED_LIB_FALSE@am__append_1 = -I$(top_srcdir)/libev \ -@USE_SYSTEM_SHARED_LIB_FALSE@ -I$(top_srcdir)/libudns \ -@USE_SYSTEM_SHARED_LIB_FALSE@ -I$(top_srcdir)/libsodium/src/libsodium/include -@USE_SYSTEM_SHARED_LIB_TRUE@am__append_2 = -lev -lsodium -lm -@USE_SYSTEM_SHARED_LIB_FALSE@am__append_3 = $(top_builddir)/libev/libev.la \ -@USE_SYSTEM_SHARED_LIB_FALSE@ $(top_builddir)/libsodium/src/libsodium/libsodium.la - -bin_PROGRAMS = ss-server$(EXEEXT) ss-check$(EXEEXT) -@USE_SYSTEM_SHARED_LIB_TRUE@am__append_4 = -ludns -@USE_SYSTEM_SHARED_LIB_FALSE@am__append_5 = $(top_builddir)/libudns/libudns.la -subdir = server -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/inet_ntop.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mbedtls.m4 \ - $(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/pcre.m4 \ - $(top_srcdir)/m4/polarssl.m4 \ - $(top_srcdir)/m4/stack-protector.m4 $(top_srcdir)/m4/zlib.m4 \ - $(top_srcdir)/libev/libev.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) -am_ss_check_OBJECTS = ss_check-check.$(OBJEXT) -ss_check_OBJECTS = $(am_ss_check_OBJECTS) -am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = $(top_builddir)/libipset/libipset.la \ - $(top_builddir)/libcork/libcork.la $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__append_3) -ss_check_DEPENDENCIES = $(am__DEPENDENCIES_2) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -ss_check_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_check_CFLAGS) \ - $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -am__objects_1 = ss_server-http.$(OBJEXT) ss_server-tls.$(OBJEXT) \ - ss_server-rule.$(OBJEXT) -am_ss_server_OBJECTS = ss_server-utils.$(OBJEXT) \ - ss_server-netutils.$(OBJEXT) ss_server-jconf.$(OBJEXT) \ - ss_server-json.$(OBJEXT) ss_server-encrypt.$(OBJEXT) \ - ss_server-udprelay.$(OBJEXT) ss_server-cache.$(OBJEXT) \ - ss_server-acl.$(OBJEXT) ss_server-resolv.$(OBJEXT) \ - ss_server-server.$(OBJEXT) $(am__objects_1) -ss_server_OBJECTS = $(am_ss_server_OBJECTS) -ss_server_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ - $(am__append_5) -ss_server_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_server_CFLAGS) \ - $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/auto/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(ss_check_SOURCES) $(ss_server_SOURCES) -DIST_SOURCES = $(ss_check_SOURCES) $(ss_server_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/auto/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -ASCIIDOC = @ASCIIDOC@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -GZIP = @GZIP@ -INET_NTOP_LIB = @INET_NTOP_LIB@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPCRE = @LIBPCRE@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MV = @MV@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PCRE_CONFIG = @PCRE_CONFIG@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -XMLTO = @XMLTO@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pcre_pcreh = @pcre_pcreh@ -pcreh = @pcreh@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -VERSION_INFO = 2:0:0 -AM_CFLAGS = -g -O2 -Wall -Werror -Wno-deprecated-declarations \ - -fno-strict-aliasing -std=gnu99 -D_GNU_SOURCE \ - $(PTHREAD_CFLAGS) $(am__append_1) \ - -I$(top_srcdir)/libipset/include \ - -I$(top_srcdir)/libcork/include $(LIBPCRE_CFLAGS) -SS_COMMON_LIBS = $(top_builddir)/libipset/libipset.la \ - $(top_builddir)/libcork/libcork.la $(INET_NTOP_LIB) \ - $(LIBPCRE_LIBS) $(am__append_2) $(am__append_3) -sni_src = http.c \ - tls.c \ - rule.c - -ss_check_SOURCES = check.c -ss_server_SOURCES = utils.c \ - netutils.c \ - jconf.c \ - json.c \ - encrypt.c \ - udprelay.c \ - cache.c \ - acl.c \ - resolv.c \ - server.c \ - $(sni_src) - -ss_check_LDADD = $(SS_COMMON_LIBS) -ss_server_LDADD = $(SS_COMMON_LIBS) $(am__append_4) $(am__append_5) -ss_check_CFLAGS = $(AM_CFLAGS) -ss_server_CFLAGS = $(AM_CFLAGS) -DMODULE_REMOTE -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign server/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign server/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - || test -f $$p1 \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -ss-check$(EXEEXT): $(ss_check_OBJECTS) $(ss_check_DEPENDENCIES) $(EXTRA_ss_check_DEPENDENCIES) - @rm -f ss-check$(EXEEXT) - $(AM_V_CCLD)$(ss_check_LINK) $(ss_check_OBJECTS) $(ss_check_LDADD) $(LIBS) - -ss-server$(EXEEXT): $(ss_server_OBJECTS) $(ss_server_DEPENDENCIES) $(EXTRA_ss_server_DEPENDENCIES) - @rm -f ss-server$(EXEEXT) - $(AM_V_CCLD)$(ss_server_LINK) $(ss_server_OBJECTS) $(ss_server_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_check-check.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-acl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-cache.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-encrypt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-http.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-jconf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-json.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-netutils.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-resolv.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-rule.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-server.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-tls.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-udprelay.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-utils.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -ss_check-check.o: check.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_check_CFLAGS) $(CFLAGS) -MT ss_check-check.o -MD -MP -MF $(DEPDIR)/ss_check-check.Tpo -c -o ss_check-check.o `test -f 'check.c' || echo '$(srcdir)/'`check.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_check-check.Tpo $(DEPDIR)/ss_check-check.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='check.c' object='ss_check-check.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_check_CFLAGS) $(CFLAGS) -c -o ss_check-check.o `test -f 'check.c' || echo '$(srcdir)/'`check.c - -ss_check-check.obj: check.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_check_CFLAGS) $(CFLAGS) -MT ss_check-check.obj -MD -MP -MF $(DEPDIR)/ss_check-check.Tpo -c -o ss_check-check.obj `if test -f 'check.c'; then $(CYGPATH_W) 'check.c'; else $(CYGPATH_W) '$(srcdir)/check.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_check-check.Tpo $(DEPDIR)/ss_check-check.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='check.c' object='ss_check-check.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_check_CFLAGS) $(CFLAGS) -c -o ss_check-check.obj `if test -f 'check.c'; then $(CYGPATH_W) 'check.c'; else $(CYGPATH_W) '$(srcdir)/check.c'; fi` - -ss_server-utils.o: utils.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-utils.o -MD -MP -MF $(DEPDIR)/ss_server-utils.Tpo -c -o ss_server-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-utils.Tpo $(DEPDIR)/ss_server-utils.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utils.c' object='ss_server-utils.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c - -ss_server-utils.obj: utils.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-utils.obj -MD -MP -MF $(DEPDIR)/ss_server-utils.Tpo -c -o ss_server-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-utils.Tpo $(DEPDIR)/ss_server-utils.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utils.c' object='ss_server-utils.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi` - -ss_server-netutils.o: netutils.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-netutils.o -MD -MP -MF $(DEPDIR)/ss_server-netutils.Tpo -c -o ss_server-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-netutils.Tpo $(DEPDIR)/ss_server-netutils.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netutils.c' object='ss_server-netutils.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c - -ss_server-netutils.obj: netutils.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-netutils.obj -MD -MP -MF $(DEPDIR)/ss_server-netutils.Tpo -c -o ss_server-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-netutils.Tpo $(DEPDIR)/ss_server-netutils.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netutils.c' object='ss_server-netutils.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi` - -ss_server-jconf.o: jconf.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-jconf.o -MD -MP -MF $(DEPDIR)/ss_server-jconf.Tpo -c -o ss_server-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-jconf.Tpo $(DEPDIR)/ss_server-jconf.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jconf.c' object='ss_server-jconf.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c - -ss_server-jconf.obj: jconf.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-jconf.obj -MD -MP -MF $(DEPDIR)/ss_server-jconf.Tpo -c -o ss_server-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-jconf.Tpo $(DEPDIR)/ss_server-jconf.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jconf.c' object='ss_server-jconf.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi` - -ss_server-json.o: json.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-json.o -MD -MP -MF $(DEPDIR)/ss_server-json.Tpo -c -o ss_server-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-json.Tpo $(DEPDIR)/ss_server-json.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='json.c' object='ss_server-json.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c - -ss_server-json.obj: json.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-json.obj -MD -MP -MF $(DEPDIR)/ss_server-json.Tpo -c -o ss_server-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-json.Tpo $(DEPDIR)/ss_server-json.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='json.c' object='ss_server-json.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi` - -ss_server-encrypt.o: encrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-encrypt.o -MD -MP -MF $(DEPDIR)/ss_server-encrypt.Tpo -c -o ss_server-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-encrypt.Tpo $(DEPDIR)/ss_server-encrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='encrypt.c' object='ss_server-encrypt.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c - -ss_server-encrypt.obj: encrypt.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-encrypt.obj -MD -MP -MF $(DEPDIR)/ss_server-encrypt.Tpo -c -o ss_server-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-encrypt.Tpo $(DEPDIR)/ss_server-encrypt.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='encrypt.c' object='ss_server-encrypt.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi` - -ss_server-udprelay.o: udprelay.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-udprelay.o -MD -MP -MF $(DEPDIR)/ss_server-udprelay.Tpo -c -o ss_server-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-udprelay.Tpo $(DEPDIR)/ss_server-udprelay.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='udprelay.c' object='ss_server-udprelay.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c - -ss_server-udprelay.obj: udprelay.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-udprelay.obj -MD -MP -MF $(DEPDIR)/ss_server-udprelay.Tpo -c -o ss_server-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-udprelay.Tpo $(DEPDIR)/ss_server-udprelay.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='udprelay.c' object='ss_server-udprelay.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi` - -ss_server-cache.o: cache.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-cache.o -MD -MP -MF $(DEPDIR)/ss_server-cache.Tpo -c -o ss_server-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-cache.Tpo $(DEPDIR)/ss_server-cache.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cache.c' object='ss_server-cache.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c - -ss_server-cache.obj: cache.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-cache.obj -MD -MP -MF $(DEPDIR)/ss_server-cache.Tpo -c -o ss_server-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-cache.Tpo $(DEPDIR)/ss_server-cache.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cache.c' object='ss_server-cache.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi` - -ss_server-acl.o: acl.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-acl.o -MD -MP -MF $(DEPDIR)/ss_server-acl.Tpo -c -o ss_server-acl.o `test -f 'acl.c' || echo '$(srcdir)/'`acl.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-acl.Tpo $(DEPDIR)/ss_server-acl.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acl.c' object='ss_server-acl.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-acl.o `test -f 'acl.c' || echo '$(srcdir)/'`acl.c - -ss_server-acl.obj: acl.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-acl.obj -MD -MP -MF $(DEPDIR)/ss_server-acl.Tpo -c -o ss_server-acl.obj `if test -f 'acl.c'; then $(CYGPATH_W) 'acl.c'; else $(CYGPATH_W) '$(srcdir)/acl.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-acl.Tpo $(DEPDIR)/ss_server-acl.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acl.c' object='ss_server-acl.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-acl.obj `if test -f 'acl.c'; then $(CYGPATH_W) 'acl.c'; else $(CYGPATH_W) '$(srcdir)/acl.c'; fi` - -ss_server-resolv.o: resolv.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-resolv.o -MD -MP -MF $(DEPDIR)/ss_server-resolv.Tpo -c -o ss_server-resolv.o `test -f 'resolv.c' || echo '$(srcdir)/'`resolv.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-resolv.Tpo $(DEPDIR)/ss_server-resolv.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='resolv.c' object='ss_server-resolv.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-resolv.o `test -f 'resolv.c' || echo '$(srcdir)/'`resolv.c - -ss_server-resolv.obj: resolv.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-resolv.obj -MD -MP -MF $(DEPDIR)/ss_server-resolv.Tpo -c -o ss_server-resolv.obj `if test -f 'resolv.c'; then $(CYGPATH_W) 'resolv.c'; else $(CYGPATH_W) '$(srcdir)/resolv.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-resolv.Tpo $(DEPDIR)/ss_server-resolv.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='resolv.c' object='ss_server-resolv.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-resolv.obj `if test -f 'resolv.c'; then $(CYGPATH_W) 'resolv.c'; else $(CYGPATH_W) '$(srcdir)/resolv.c'; fi` - -ss_server-server.o: server.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-server.o -MD -MP -MF $(DEPDIR)/ss_server-server.Tpo -c -o ss_server-server.o `test -f 'server.c' || echo '$(srcdir)/'`server.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-server.Tpo $(DEPDIR)/ss_server-server.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='server.c' object='ss_server-server.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-server.o `test -f 'server.c' || echo '$(srcdir)/'`server.c - -ss_server-server.obj: server.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-server.obj -MD -MP -MF $(DEPDIR)/ss_server-server.Tpo -c -o ss_server-server.obj `if test -f 'server.c'; then $(CYGPATH_W) 'server.c'; else $(CYGPATH_W) '$(srcdir)/server.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-server.Tpo $(DEPDIR)/ss_server-server.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='server.c' object='ss_server-server.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-server.obj `if test -f 'server.c'; then $(CYGPATH_W) 'server.c'; else $(CYGPATH_W) '$(srcdir)/server.c'; fi` - -ss_server-http.o: http.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-http.o -MD -MP -MF $(DEPDIR)/ss_server-http.Tpo -c -o ss_server-http.o `test -f 'http.c' || echo '$(srcdir)/'`http.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-http.Tpo $(DEPDIR)/ss_server-http.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='http.c' object='ss_server-http.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-http.o `test -f 'http.c' || echo '$(srcdir)/'`http.c - -ss_server-http.obj: http.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-http.obj -MD -MP -MF $(DEPDIR)/ss_server-http.Tpo -c -o ss_server-http.obj `if test -f 'http.c'; then $(CYGPATH_W) 'http.c'; else $(CYGPATH_W) '$(srcdir)/http.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-http.Tpo $(DEPDIR)/ss_server-http.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='http.c' object='ss_server-http.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-http.obj `if test -f 'http.c'; then $(CYGPATH_W) 'http.c'; else $(CYGPATH_W) '$(srcdir)/http.c'; fi` - -ss_server-tls.o: tls.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-tls.o -MD -MP -MF $(DEPDIR)/ss_server-tls.Tpo -c -o ss_server-tls.o `test -f 'tls.c' || echo '$(srcdir)/'`tls.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-tls.Tpo $(DEPDIR)/ss_server-tls.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls.c' object='ss_server-tls.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-tls.o `test -f 'tls.c' || echo '$(srcdir)/'`tls.c - -ss_server-tls.obj: tls.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-tls.obj -MD -MP -MF $(DEPDIR)/ss_server-tls.Tpo -c -o ss_server-tls.obj `if test -f 'tls.c'; then $(CYGPATH_W) 'tls.c'; else $(CYGPATH_W) '$(srcdir)/tls.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-tls.Tpo $(DEPDIR)/ss_server-tls.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tls.c' object='ss_server-tls.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-tls.obj `if test -f 'tls.c'; then $(CYGPATH_W) 'tls.c'; else $(CYGPATH_W) '$(srcdir)/tls.c'; fi` - -ss_server-rule.o: rule.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-rule.o -MD -MP -MF $(DEPDIR)/ss_server-rule.Tpo -c -o ss_server-rule.o `test -f 'rule.c' || echo '$(srcdir)/'`rule.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-rule.Tpo $(DEPDIR)/ss_server-rule.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rule.c' object='ss_server-rule.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-rule.o `test -f 'rule.c' || echo '$(srcdir)/'`rule.c - -ss_server-rule.obj: rule.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-rule.obj -MD -MP -MF $(DEPDIR)/ss_server-rule.Tpo -c -o ss_server-rule.obj `if test -f 'rule.c'; then $(CYGPATH_W) 'rule.c'; else $(CYGPATH_W) '$(srcdir)/rule.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-rule.Tpo $(DEPDIR)/ss_server-rule.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rule.c' object='ss_server-rule.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-rule.obj `if test -f 'rule.c'; then $(CYGPATH_W) 'rule.c'; else $(CYGPATH_W) '$(srcdir)/rule.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: - for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am uninstall-binPROGRAMS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/shadowsocksr-libev/src/server/README.md b/shadowsocksr-libev/src/server/README.md deleted file mode 100644 index ef6a20e3..00000000 --- a/shadowsocksr-libev/src/server/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# server - -`ss-server` and `ss-check` from https://github.com/ywb94/shadowsocks-libev diff --git a/shadowsocksr-libev/src/server/acl.c b/shadowsocksr-libev/src/server/acl.c deleted file mode 100644 index 60d4b727..00000000 --- a/shadowsocksr-libev/src/server/acl.c +++ /dev/null @@ -1,597 +0,0 @@ -/* - * acl.c - Manage the ACL (Access Control List) - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#include -#include - -#include "rule.h" -#include "utils.h" -#include "cache.h" -#include "acl.h" - -static struct ip_set white_list_ipv4; -static struct ip_set white_list_ipv6; - -static struct ip_set black_list_ipv4; -static struct ip_set black_list_ipv6; - -static struct cork_dllist black_list_rules; -static struct cork_dllist white_list_rules; - -static int acl_mode = BLACK_LIST; - -static struct cache *block_list; - -static struct ip_set outbound_block_list_ipv4; -static struct ip_set outbound_block_list_ipv6; -static struct cork_dllist outbound_block_list_rules; - -#ifdef __linux__ - -#include -#include - -#define NO_FIREWALL_MODE 0 -#define IPTABLES_MODE 1 -#define FIREWALLD_MODE 2 - -static FILE *shell_stdin; -static int mode = NO_FIREWALL_MODE; - -static char chain_name[64]; -static char *iptables_init_chain = - "iptables -N %s; iptables -F %s; iptables -A OUTPUT -p tcp --tcp-flags RST RST -j %s"; -static char *iptables_remove_chain = - "iptables -D OUTPUT -p tcp --tcp-flags RST RST -j %s; iptables -F %s; iptables -X %s"; -static char *iptables_add_rule = "iptables -A %s -d %s -j DROP"; -static char *iptables_remove_rule = "iptables -D %s -d %s -j DROP"; - -static char *ip6tables_init_chain = - "ip6tables -N %s; ip6tables -F %s; ip6tables -A OUTPUT -p tcp --tcp-flags RST RST -j %s"; -static char *ip6tables_remove_chain = - "ip6tables -D OUTPUT -p tcp --tcp-flags RST RST -j %s; ip6tables -F %s; ip6tables -X %s"; -static char *ip6tables_add_rule = "ip6tables -A %s -d %s -j DROP"; -static char *ip6tables_remove_rule = "ip6tables -D %s -d %s -j DROP"; - -static char *firewalld_init_chain = - "firewall-cmd --direct --add-chain ipv4 filter %s; \ - firewall-cmd --direct --passthrough ipv4 -F %s; \ - firewall-cmd --direct --passthrough ipv4 -A OUTPUT -p tcp --tcp-flags RST RST -j %s"; -static char *firewalld_remove_chain = - "firewall-cmd --direct --passthrough ipv4 -D OUTPUT -p tcp --tcp-flags RST RST -j %s; \ - firewall-cmd --direct --passthrough ipv4 -F %s; \ - firewall-cmd --direct --remove-chain ipv4 filter %s"; -static char *firewalld_add_rule = "firewall-cmd --direct --passthrough ipv4 -A %s -d %s -j DROP"; -static char *firewalld_remove_rule = "firewall-cmd --direct --passthrough ipv4 -D %s -d %s -j DROP"; - -static char *firewalld6_init_chain = - "firewall-cmd --direct --add-chain ipv6 filter %s; \ - firewall-cmd --direct --passthrough ipv6 -F %s; \ - firewall-cmd --direct --passthrough ipv6 -A OUTPUT -p tcp --tcp-flags RST RST -j %s"; -static char *firewalld6_remove_chain = - "firewall-cmd --direct --passthrough ipv6 -D OUTPUT -p tcp --tcp-flags RST RST -j %s; \ - firewall-cmd --direct --passthrough ipv6 -F %s; \ - firewall-cmd --direct --remove-chain ipv6 filter %s"; -static char *firewalld6_add_rule = "firewall-cmd --direct --passthrough ipv6 -A %s -d %s -j DROP"; -static char *firewalld6_remove_rule = "firewall-cmd --direct --passthrough ipv6 -D %s -d %s -j DROP"; - -static int -run_cmd(const char *cmd) -{ - int ret = 0; - char cmdstring[256]; - - sprintf(cmdstring, "%s\n", cmd); - size_t len = strlen(cmdstring); - - if (shell_stdin != NULL) { - ret = fwrite(cmdstring, 1, len, shell_stdin); - fflush(shell_stdin); - } - - return ret == len; -} - -static int -init_firewall() -{ - int ret = 0; - char cli[256]; - FILE *fp; - - if (getuid() != 0) - return -1; - - sprintf(cli, "firewall-cmd --version 2>&1"); - fp = popen(cli, "r"); - - if (fp == NULL) - return -1; - - if (pclose(fp) == 0) { - mode = FIREWALLD_MODE; - } else { - /* Check whether we have permission to operate iptables. - * Note that checking `iptables --version` is insufficient: - * eg, running within a child user namespace. - */ - sprintf(cli, "iptables -L 2>&1"); - fp = popen(cli, "r"); - if (fp == NULL) - return -1; - if (pclose(fp) == 0) - mode = IPTABLES_MODE; - } - - sprintf(chain_name, "SHADOWSOCKS_LIBEV_%d", getpid()); - - if (mode == FIREWALLD_MODE) { - sprintf(cli, firewalld6_init_chain, chain_name, chain_name, chain_name); - ret |= system(cli); - sprintf(cli, firewalld_init_chain, chain_name, chain_name, chain_name); - ret |= system(cli); - } else if (mode == IPTABLES_MODE) { - sprintf(cli, ip6tables_init_chain, chain_name, chain_name, chain_name); - ret |= system(cli); - sprintf(cli, iptables_init_chain, chain_name, chain_name, chain_name); - ret |= system(cli); - } - - shell_stdin = popen("/bin/sh", "w"); - - return ret; -} - -static int -reset_firewall() -{ - int ret = 0; - char cli[256]; - - if (getuid() != 0) - return -1; - - if (mode == IPTABLES_MODE) { - sprintf(cli, ip6tables_remove_chain, chain_name, chain_name, chain_name); - ret |= system(cli); - sprintf(cli, iptables_remove_chain, chain_name, chain_name, chain_name); - ret |= system(cli); - } else if (mode == FIREWALLD_MODE) { - sprintf(cli, firewalld6_remove_chain, chain_name, chain_name, chain_name); - ret |= system(cli); - sprintf(cli, firewalld_remove_chain, chain_name, chain_name, chain_name); - ret |= system(cli); - } - - if (shell_stdin != NULL) { - run_cmd("exit 0"); - pclose(shell_stdin); - } - - return ret; -} - -static int -set_firewall_rule(char *addr, int add) -{ - char cli[256]; - struct cork_ip ip; - - if (getuid() != 0) - return -1; - - if (cork_ip_init(&ip, addr)) - return -1; - - if (add) { - if (mode == IPTABLES_MODE) - sprintf(cli, ip.version == 4 ? iptables_add_rule : ip6tables_add_rule, - chain_name, addr); - else if (mode == FIREWALLD_MODE) - sprintf(cli, ip.version == 4 ? firewalld_add_rule : firewalld6_add_rule, - chain_name, addr); - return run_cmd(cli); - } else { - if (mode == IPTABLES_MODE) - sprintf(cli, ip.version == 4 ? iptables_remove_rule : ip6tables_remove_rule, - chain_name, addr); - else if (mode == FIREWALLD_MODE) - sprintf(cli, ip.version == 4 ? firewalld_remove_rule : firewalld6_remove_rule, - chain_name, addr); - return run_cmd(cli); - } - - return 0; -} - -static void -free_firewall_rule(void *key, void *element) -{ - if (key == NULL) - return; - char *addr = (char *)key; - set_firewall_rule(addr, 0); - ss_free(element); -} - -#endif - -void -init_block_list(int firewall) -{ - // Initialize cache -#ifdef __linux__ - if (firewall) - init_firewall(); - else - mode = NO_FIREWALL_MODE; - cache_create(&block_list, 256, free_firewall_rule); -#else - cache_create(&block_list, 256, NULL); -#endif -} - -void -free_block_list() -{ -#ifdef __linux__ - if (mode != NO_FIREWALL_MODE) - reset_firewall(); -#endif - cache_clear(block_list, 0); // Remove all items -} - -int -remove_from_block_list(char *addr) -{ - size_t addr_len = strlen(addr); - return cache_remove(block_list, addr, addr_len); -} - -void -clear_block_list() -{ - cache_clear(block_list, 3600); // Clear items older than 1 hour -} - -int -check_block_list(char *addr) -{ - size_t addr_len = strlen(addr); - - if (cache_key_exist(block_list, addr, addr_len)) { - int *count = NULL; - cache_lookup(block_list, addr, addr_len, &count); - - if (count != NULL && *count > MAX_TRIES) - return 1; - } - - return 0; -} - -int -update_block_list(char *addr, int err_level) -{ - size_t addr_len = strlen(addr); - - if (cache_key_exist(block_list, addr, addr_len)) { - int *count = NULL; - cache_lookup(block_list, addr, addr_len, &count); - if (count != NULL) { - if (*count > MAX_TRIES) - return 1; - (*count) += err_level; - } - } else if (err_level > 0) { - int *count = (int *)ss_malloc(sizeof(int)); - *count = 1; - cache_insert(block_list, addr, addr_len, count); -#ifdef __linux__ - if (mode != NO_FIREWALL_MODE) - set_firewall_rule(addr, 1); -#endif - } - - return 0; -} - -static void -parse_addr_cidr(const char *str, char *host, int *cidr) -{ - int ret = -1, n = 0; - char *pch; - - pch = strchr(str, '/'); - while (pch != NULL) { - n++; - ret = pch - str; - pch = strchr(pch + 1, '/'); - } - if (ret == -1) { - strcpy(host, str); - *cidr = -1; - } else { - memcpy(host, str, ret); - host[ret] = '\0'; - *cidr = atoi(str + ret + 1); - } -} - -char * -trimwhitespace(char *str) -{ - char *end; - - // Trim leading space - while (isspace(*str)) - str++; - - if (*str == 0) // All spaces? - return str; - - // Trim trailing space - end = str + strlen(str) - 1; - while (end > str && isspace(*end)) - end--; - - // Write new null terminator - *(end + 1) = 0; - - return str; -} - -int -init_acl(const char *path) -{ - // initialize ipset - ipset_init_library(); - - ipset_init(&white_list_ipv4); - ipset_init(&white_list_ipv6); - ipset_init(&black_list_ipv4); - ipset_init(&black_list_ipv6); - ipset_init(&outbound_block_list_ipv4); - ipset_init(&outbound_block_list_ipv6); - - cork_dllist_init(&black_list_rules); - cork_dllist_init(&white_list_rules); - cork_dllist_init(&outbound_block_list_rules); - - struct ip_set *list_ipv4 = &black_list_ipv4; - struct ip_set *list_ipv6 = &black_list_ipv6; - struct cork_dllist *rules = &black_list_rules; - - FILE *f = fopen(path, "r"); - if (f == NULL) { - LOGE("Invalid acl path."); - return -1; - } - - char buf[257]; - while (!feof(f)) - if (fgets(buf, 256, f)) { - // Trim the newline - int len = strlen(buf); - if (len > 0 && buf[len - 1] == '\n') { - buf[len - 1] = '\0'; - } - - char *line = trimwhitespace(buf); - - // Skip comments - if (line[0] == '#') { - continue; - } - - if (strlen(line) == 0) { - continue; - } - - if (strcmp(line, "[outbound_block_list]") == 0) { - list_ipv4 = &outbound_block_list_ipv4; - list_ipv6 = &outbound_block_list_ipv6; - rules = &outbound_block_list_rules; - continue; - } else if (strcmp(line, "[black_list]") == 0 - || strcmp(line, "[bypass_list]") == 0) { - list_ipv4 = &black_list_ipv4; - list_ipv6 = &black_list_ipv6; - rules = &black_list_rules; - continue; - } else if (strcmp(line, "[white_list]") == 0 - || strcmp(line, "[proxy_list]") == 0) { - list_ipv4 = &white_list_ipv4; - list_ipv6 = &white_list_ipv6; - rules = &white_list_rules; - continue; - } else if (strcmp(line, "[reject_all]") == 0 - || strcmp(line, "[bypass_all]") == 0) { - acl_mode = WHITE_LIST; - continue; - } else if (strcmp(line, "[accept_all]") == 0 - || strcmp(line, "[proxy_all]") == 0) { - acl_mode = BLACK_LIST; - continue; - } - - char host[257]; - int cidr; - parse_addr_cidr(line, host, &cidr); - - struct cork_ip addr; - int err = cork_ip_init(&addr, host); - if (!err) { - if (addr.version == 4) { - if (cidr >= 0) { - ipset_ipv4_add_network(list_ipv4, &(addr.ip.v4), cidr); - } else { - ipset_ipv4_add(list_ipv4, &(addr.ip.v4)); - } - } else if (addr.version == 6) { - if (cidr >= 0) { - ipset_ipv6_add_network(list_ipv6, &(addr.ip.v6), cidr); - } else { - ipset_ipv6_add(list_ipv6, &(addr.ip.v6)); - } - } - } else { - rule_t *rule = new_rule(); - accept_rule_arg(rule, line); - init_rule(rule); - add_rule(rules, rule); - } - } - - fclose(f); - - return 0; -} - -void -free_rules(struct cork_dllist *rules) -{ - struct cork_dllist_item *iter; - while ((iter = cork_dllist_head(rules)) != NULL) { - rule_t *rule = cork_container_of(iter, rule_t, entries); - remove_rule(rule); - } -} - -void -free_acl(void) -{ - ipset_done(&black_list_ipv4); - ipset_done(&black_list_ipv6); - ipset_done(&white_list_ipv4); - ipset_done(&white_list_ipv6); - - free_rules(&black_list_rules); - free_rules(&white_list_rules); -} - -int -get_acl_mode(void) -{ - return acl_mode; -} - -/* - * Return 0, if not match. - * Return 1, if match black list. - * Return -1, if match white list. - */ -int -acl_match_host(const char *host) -{ - struct cork_ip addr; - int ret = 0; - int err = cork_ip_init(&addr, host); - - if (err) { - int host_len = strlen(host); - if (lookup_rule(&black_list_rules, host, host_len) != NULL) - ret = 1; - else if (lookup_rule(&white_list_rules, host, host_len) != NULL) - ret = -1; - return ret; - } - - if (addr.version == 4) { - if (ipset_contains_ipv4(&black_list_ipv4, &(addr.ip.v4))) - ret = 1; - else if (ipset_contains_ipv4(&white_list_ipv4, &(addr.ip.v4))) - ret = -1; - } else if (addr.version == 6) { - if (ipset_contains_ipv6(&black_list_ipv6, &(addr.ip.v6))) - ret = 1; - else if (ipset_contains_ipv6(&white_list_ipv6, &(addr.ip.v6))) - ret = -1; - } - - return ret; -} - -int -acl_add_ip(const char *ip) -{ - struct cork_ip addr; - int err = cork_ip_init(&addr, ip); - if (err) { - return -1; - } - - if (addr.version == 4) { - ipset_ipv4_add(&black_list_ipv4, &(addr.ip.v4)); - } else if (addr.version == 6) { - ipset_ipv6_add(&black_list_ipv6, &(addr.ip.v6)); - } - - return 0; -} - -int -acl_remove_ip(const char *ip) -{ - struct cork_ip addr; - int err = cork_ip_init(&addr, ip); - if (err) { - return -1; - } - - if (addr.version == 4) { - ipset_ipv4_remove(&black_list_ipv4, &(addr.ip.v4)); - } else if (addr.version == 6) { - ipset_ipv6_remove(&black_list_ipv6, &(addr.ip.v6)); - } - - return 0; -} - -/* - * Return 0, if not match. - * Return 1, if match black list. - */ -int -outbound_block_match_host(const char *host) -{ - struct cork_ip addr; - int ret = 0; - int err = cork_ip_init(&addr, host); - - if (err) { - int host_len = strlen(host); - if (lookup_rule(&outbound_block_list_rules, host, host_len) != NULL) - ret = 1; - return ret; - } - - if (addr.version == 4) { - if (ipset_contains_ipv4(&outbound_block_list_ipv4, &(addr.ip.v4))) - ret = 1; - } else if (addr.version == 6) { - if (ipset_contains_ipv6(&outbound_block_list_ipv6, &(addr.ip.v6))) - ret = 1; - } - - return ret; -} diff --git a/shadowsocksr-libev/src/server/acl.h b/shadowsocksr-libev/src/server/acl.h deleted file mode 100644 index d6f18b80..00000000 --- a/shadowsocksr-libev/src/server/acl.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * acl.h - Define the ACL interface - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifndef _ACL_H -#define _ACL_H - -#define BLACK_LIST 0 -#define WHITE_LIST 1 - -#define MAX_TRIES 64 -#define MALICIOUS 8 -#define SUSPICIOUS 4 -#define BAD 2 -#define MALFORMED 1 - -int init_acl(const char *path); -void free_acl(void); -void clear_block_list(void); - -int acl_match_host(const char *ip); -int acl_add_ip(const char *ip); -int acl_remove_ip(const char *ip); - -int get_acl_mode(void); - -void init_block_list(int firewall); -void free_block_list(); -int check_block_list(char *addr); -int update_block_list(char *addr, int err_level); -int remove_from_block_list(char *addr); - -int outbound_block_match_host(const char *host); - -#endif // _ACL_H diff --git a/shadowsocksr-libev/src/server/auth.c b/shadowsocksr-libev/src/server/auth.c deleted file mode 100644 index a36257a9..00000000 --- a/shadowsocksr-libev/src/server/auth.c +++ /dev/null @@ -1,993 +0,0 @@ - -#include "auth.h" - -static int auth_simple_pack_unit_size = 2000; -typedef int (*hmac_with_key_func)(char *auth, char *msg, int msg_len, uint8_t *auth_key, int key_len); -typedef int (*hash_func)(char *auth, char *msg, int msg_len); - -typedef struct auth_simple_global_data { - uint8_t local_client_id[8]; - uint32_t connection_id; -}auth_simple_global_data; - -typedef struct auth_simple_local_data { - int has_sent_header; - char * recv_buffer; - int recv_buffer_size; - uint32_t recv_id; - uint32_t pack_id; - char * salt; - uint8_t * user_key; - char uid[4]; - int user_key_len; - hmac_with_key_func hmac; - hash_func hash; - int hash_len; -}auth_simple_local_data; - -void auth_simple_local_data_init(auth_simple_local_data* local) { - local->has_sent_header = 0; - local->recv_buffer = (char*)malloc(16384); - local->recv_buffer_size = 0; - local->recv_id = 1; - local->pack_id = 1; - local->salt = ""; - local->user_key = 0; - local->user_key_len = 0; - local->hmac = 0; - local->hash = 0; - local->hash_len = 0; - local->salt = ""; -} - -void * auth_simple_init_data() { - auth_simple_global_data *global = (auth_simple_global_data*)malloc(sizeof(auth_simple_global_data)); - rand_bytes(global->local_client_id, 8); - rand_bytes((uint8_t*)&global->connection_id, 4); - global->connection_id &= 0xFFFFFF; - return global; -} - -obfs * auth_simple_new_obfs() { - obfs * self = new_obfs(); - self->l_data = malloc(sizeof(auth_simple_local_data)); - auth_simple_local_data_init((auth_simple_local_data*)self->l_data); - return self; -} - -obfs * auth_aes128_md5_new_obfs() { - obfs * self = new_obfs(); - self->l_data = malloc(sizeof(auth_simple_local_data)); - auth_simple_local_data_init((auth_simple_local_data*)self->l_data); - ((auth_simple_local_data*)self->l_data)->hmac = ss_md5_hmac_with_key; - ((auth_simple_local_data*)self->l_data)->hash = ss_md5_hash_func; - ((auth_simple_local_data*)self->l_data)->hash_len = 16; - ((auth_simple_local_data*)self->l_data)->salt = "auth_aes128_md5"; - return self; -} - -obfs * auth_aes128_sha1_new_obfs() { - obfs * self = new_obfs(); - self->l_data = malloc(sizeof(auth_simple_local_data)); - auth_simple_local_data_init((auth_simple_local_data*)self->l_data); - ((auth_simple_local_data*)self->l_data)->hmac = ss_sha1_hmac_with_key; - ((auth_simple_local_data*)self->l_data)->hash = ss_sha1_hash_func; - ((auth_simple_local_data*)self->l_data)->hash_len = 20; - ((auth_simple_local_data*)self->l_data)->salt = "auth_aes128_sha1"; - return self; -} - -void auth_simple_dispose(obfs *self) { - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - if (local->recv_buffer != NULL) { - free(local->recv_buffer); - local->recv_buffer = NULL; - } - if (local->user_key != NULL) { - free(local->user_key); - local->user_key = NULL; - } - free(local); - self->l_data = NULL; - dispose_obfs(self); -} - -int auth_simple_pack_data(char *data, int datalength, char *outdata) { - unsigned char rand_len = (xorshift128plus() & 0xF) + 1; - int out_size = rand_len + datalength + 6; - outdata[0] = out_size >> 8; - outdata[1] = out_size; - outdata[2] = rand_len; - memmove(outdata + rand_len + 2, data, datalength); - fillcrc32((unsigned char *)outdata, out_size); - return out_size; -} - -void memintcopy_lt(void *mem, uint32_t val) { - ((uint8_t *)mem)[0] = val; - ((uint8_t *)mem)[1] = val >> 8; - ((uint8_t *)mem)[2] = val >> 16; - ((uint8_t *)mem)[3] = val >> 24; -} - -int auth_simple_pack_auth_data(auth_simple_global_data *global, char *data, int datalength, char *outdata) { - unsigned char rand_len = (xorshift128plus() & 0xF) + 1; - int out_size = rand_len + datalength + 6 + 12; - outdata[0] = out_size >> 8; - outdata[1] = out_size; - outdata[2] = rand_len; - ++global->connection_id; - if (global->connection_id > 0xFF000000) { - rand_bytes(global->local_client_id, 8); - rand_bytes((uint8_t*)&global->connection_id, 4); - global->connection_id &= 0xFFFFFF; - } - time_t t = time(NULL); - memintcopy_lt(outdata + rand_len + 2, t); - memmove(outdata + rand_len + 2 + 4, global->local_client_id, 4); - memintcopy_lt(outdata + rand_len + 2 + 8, global->connection_id); - memmove(outdata + rand_len + 2 + 12, data, datalength); - fillcrc32((unsigned char *)outdata, out_size); - return out_size; -} - -int auth_simple_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - char * out_buffer = (char*)malloc(datalength * 2 + 64); - char * buffer = out_buffer; - char * data = plaindata; - int len = datalength; - int pack_len; - if (len > 0 && local->has_sent_header == 0) { - int head_size = get_head_size(plaindata, datalength, 30); - if (head_size > datalength) - head_size = datalength; - pack_len = auth_simple_pack_auth_data((auth_simple_global_data *)self->server.g_data, data, head_size, buffer); - buffer += pack_len; - data += head_size; - len -= head_size; - local->has_sent_header = 1; - } - while ( len > auth_simple_pack_unit_size ) { - pack_len = auth_simple_pack_data(data, auth_simple_pack_unit_size, buffer); - buffer += pack_len; - data += auth_simple_pack_unit_size; - len -= auth_simple_pack_unit_size; - } - if (len > 0) { - pack_len = auth_simple_pack_data(data, len, buffer); - buffer += pack_len; - } - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int auth_simple_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - uint8_t * recv_buffer = (uint8_t *)local->recv_buffer; - if (local->recv_buffer_size + datalength > 16384) - return -1; - memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength); - local->recv_buffer_size += datalength; - - char * out_buffer = (char*)malloc(local->recv_buffer_size); - char * buffer = out_buffer; - while (local->recv_buffer_size > 2) { - int length = ((int)recv_buffer[0] << 8) | recv_buffer[1]; - if (length >= 8192 || length < 7) { - free(out_buffer); - local->recv_buffer_size = 0; - return -1; - } - if (length > local->recv_buffer_size) - break; - - int crc = crc32((unsigned char*)recv_buffer, length); - if (crc != -1) { - free(out_buffer); - local->recv_buffer_size = 0; - return -1; - } - int data_size = length - recv_buffer[2] - 6; - memmove(buffer, recv_buffer + 2 + recv_buffer[2], data_size); - buffer += data_size; - memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length); - } - int len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - - -int auth_sha1_pack_data(char *data, int datalength, char *outdata) { - unsigned char rand_len = (xorshift128plus() & 0xF) + 1; - int out_size = rand_len + datalength + 6; - outdata[0] = out_size >> 8; - outdata[1] = out_size; - outdata[2] = rand_len; - memmove(outdata + rand_len + 2, data, datalength); - filladler32((unsigned char *)outdata, out_size); - return out_size; -} - -int auth_sha1_pack_auth_data(auth_simple_global_data *global, server_info *server, char *data, int datalength, char *outdata) { - unsigned char rand_len = (xorshift128plus() & 0x7F) + 1; - int data_offset = rand_len + 4 + 2; - int out_size = data_offset + datalength + 12 + OBFS_HMAC_SHA1_LEN; - fillcrc32to((unsigned char *)server->key, server->key_len, (unsigned char *)outdata); - outdata[4] = out_size >> 8; - outdata[5] = out_size; - outdata[6] = rand_len; - ++global->connection_id; - if (global->connection_id > 0xFF000000) { - rand_bytes(global->local_client_id, 8); - rand_bytes((uint8_t*)&global->connection_id, 4); - global->connection_id &= 0xFFFFFF; - } - time_t t = time(NULL); - memintcopy_lt(outdata + data_offset, t); - memmove(outdata + data_offset + 4, global->local_client_id, 4); - memintcopy_lt(outdata + data_offset + 8, global->connection_id); - memmove(outdata + data_offset + 12, data, datalength); - char hash[ONETIMEAUTH_BYTES * 2]; - ss_sha1_hmac(hash, outdata, out_size - OBFS_HMAC_SHA1_LEN, server->iv); - memcpy(outdata + out_size - OBFS_HMAC_SHA1_LEN, hash, OBFS_HMAC_SHA1_LEN); - return out_size; -} - -int auth_sha1_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - char * out_buffer = (char*)malloc(datalength * 2 + 256); - char * buffer = out_buffer; - char * data = plaindata; - int len = datalength; - int pack_len; - if (len > 0 && local->has_sent_header == 0) { - int head_size = get_head_size(plaindata, datalength, 30); - if (head_size > datalength) - head_size = datalength; - pack_len = auth_sha1_pack_auth_data((auth_simple_global_data *)self->server.g_data, &self->server, data, head_size, buffer); - buffer += pack_len; - data += head_size; - len -= head_size; - local->has_sent_header = 1; - } - while ( len > auth_simple_pack_unit_size ) { - pack_len = auth_sha1_pack_data(data, auth_simple_pack_unit_size, buffer); - buffer += pack_len; - data += auth_simple_pack_unit_size; - len -= auth_simple_pack_unit_size; - } - if (len > 0) { - pack_len = auth_sha1_pack_data(data, len, buffer); - buffer += pack_len; - } - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int auth_sha1_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - uint8_t * recv_buffer = (uint8_t *)local->recv_buffer; - if (local->recv_buffer_size + datalength > 16384) - return -1; - memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength); - local->recv_buffer_size += datalength; - - char * out_buffer = (char*)malloc(local->recv_buffer_size); - char * buffer = out_buffer; - while (local->recv_buffer_size > 2) { - int length = ((int)recv_buffer[0] << 8) | recv_buffer[1]; - if (length >= 8192 || length < 7) { - free(out_buffer); - local->recv_buffer_size = 0; - return -1; - } - if (length > local->recv_buffer_size) - break; - - if (checkadler32((unsigned char*)recv_buffer, length) == 0) { - free(out_buffer); - local->recv_buffer_size = 0; - return -1; - } - int pos = recv_buffer[2] + 2; - int data_size = length - pos - 4; - memmove(buffer, recv_buffer + pos, data_size); - buffer += data_size; - memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length); - } - int len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int auth_sha1_v2_pack_data(char *data, int datalength, char *outdata) { - unsigned int rand_len = (datalength > 1300 ? 0 : datalength > 400 ? (xorshift128plus() & 0x7F) : (xorshift128plus() & 0x3FF)) + 1; - int out_size = rand_len + datalength + 6; - outdata[0] = out_size >> 8; - outdata[1] = out_size; - if (rand_len < 128) - { - outdata[2] = rand_len; - } - else - { - outdata[2] = 0xFF; - outdata[3] = rand_len >> 8; - outdata[4] = rand_len; - } - memmove(outdata + rand_len + 2, data, datalength); - filladler32((unsigned char *)outdata, out_size); - return out_size; -} - -int auth_sha1_v2_pack_auth_data(auth_simple_global_data *global, server_info *server, char *data, int datalength, char *outdata) { - unsigned int rand_len = (datalength > 1300 ? 0 : datalength > 400 ? (xorshift128plus() & 0x7F) : (xorshift128plus() & 0x3FF)) + 1; - int data_offset = rand_len + 4 + 2; - int out_size = data_offset + datalength + 12 + OBFS_HMAC_SHA1_LEN; - const char* salt = "auth_sha1_v2"; - int salt_len = strlen(salt); - unsigned char *crc_salt = (unsigned char*)malloc(salt_len + server->key_len); - memcpy(crc_salt, salt, salt_len); - memcpy(crc_salt + salt_len, server->key, server->key_len); - fillcrc32to(crc_salt, salt_len + server->key_len, (unsigned char *)outdata); - free(crc_salt); - outdata[4] = out_size >> 8; - outdata[5] = out_size; - if (rand_len < 128) - { - outdata[6] = rand_len; - } - else - { - outdata[6] = 0xFF; - outdata[7] = rand_len >> 8; - outdata[8] = rand_len; - } - ++global->connection_id; - if (global->connection_id > 0xFF000000) { - rand_bytes(global->local_client_id, 8); - rand_bytes((uint8_t*)&global->connection_id, 4); - global->connection_id &= 0xFFFFFF; - } - memmove(outdata + data_offset, global->local_client_id, 8); - memintcopy_lt(outdata + data_offset + 8, global->connection_id); - memmove(outdata + data_offset + 12, data, datalength); - char hash[ONETIMEAUTH_BYTES * 2]; - ss_sha1_hmac(hash, outdata, out_size - OBFS_HMAC_SHA1_LEN, server->iv); - memcpy(outdata + out_size - OBFS_HMAC_SHA1_LEN, hash, OBFS_HMAC_SHA1_LEN); - return out_size; -} - -int auth_sha1_v2_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - char * out_buffer = (char*)malloc(datalength * 2 + 4096); - char * buffer = out_buffer; - char * data = plaindata; - int len = datalength; - int pack_len; - if (len > 0 && local->has_sent_header == 0) { - int head_size = get_head_size(plaindata, datalength, 30); - if (head_size > datalength) - head_size = datalength; - pack_len = auth_sha1_v2_pack_auth_data((auth_simple_global_data *)self->server.g_data, &self->server, data, head_size, buffer); - buffer += pack_len; - data += head_size; - len -= head_size; - local->has_sent_header = 1; - } - while ( len > auth_simple_pack_unit_size ) { - pack_len = auth_sha1_v2_pack_data(data, auth_simple_pack_unit_size, buffer); - buffer += pack_len; - data += auth_simple_pack_unit_size; - len -= auth_simple_pack_unit_size; - } - if (len > 0) { - pack_len = auth_sha1_v2_pack_data(data, len, buffer); - buffer += pack_len; - } - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int auth_sha1_v2_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - uint8_t * recv_buffer = (uint8_t *)local->recv_buffer; - if (local->recv_buffer_size + datalength > 16384) - return -1; - memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength); - local->recv_buffer_size += datalength; - - char * out_buffer = (char*)malloc(local->recv_buffer_size); - char * buffer = out_buffer; - char error = 0; - while (local->recv_buffer_size > 2) { - int length = ((int)recv_buffer[0] << 8) | recv_buffer[1]; - if (length >= 8192 || length < 7) { - local->recv_buffer_size = 0; - error = 1; - break; - } - if (length > local->recv_buffer_size) - break; - - if (checkadler32((unsigned char*)recv_buffer, length) == 0) { - local->recv_buffer_size = 0; - error = 1; - break; - } - int pos = recv_buffer[2]; - if (pos < 255) - { - pos += 2; - } - else - { - pos = ((recv_buffer[3] << 8) | recv_buffer[4]) + 2; - } - int data_size = length - pos - 4; - memmove(buffer, recv_buffer + pos, data_size); - buffer += data_size; - memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length); - } - int len; - if (error == 0) { - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - } else { - len = -1; - } - free(out_buffer); - return len; -} - -int auth_sha1_v4_pack_data(char *data, int datalength, char *outdata) { - unsigned int rand_len = (datalength > 1300 ? 0 : datalength > 400 ? (xorshift128plus() & 0x7F) : (xorshift128plus() & 0x3FF)) + 1; - int out_size = rand_len + datalength + 8; - outdata[0] = out_size >> 8; - outdata[1] = out_size; - uint32_t crc_val = crc32((unsigned char*)outdata, 2); - outdata[2] = crc_val; - outdata[3] = crc_val >> 8; - if (rand_len < 128) - { - outdata[4] = rand_len; - } - else - { - outdata[4] = 0xFF; - outdata[5] = rand_len >> 8; - outdata[6] = rand_len; - } - memmove(outdata + rand_len + 4, data, datalength); - filladler32((unsigned char *)outdata, out_size); - return out_size; -} - -int auth_sha1_v4_pack_auth_data(auth_simple_global_data *global, server_info *server, char *data, int datalength, char *outdata) { - unsigned int rand_len = (datalength > 1300 ? 0 : datalength > 400 ? (xorshift128plus() & 0x7F) : (xorshift128plus() & 0x3FF)) + 1; - int data_offset = rand_len + 4 + 2; - int out_size = data_offset + datalength + 12 + OBFS_HMAC_SHA1_LEN; - const char* salt = "auth_sha1_v4"; - int salt_len = strlen(salt); - unsigned char *crc_salt = (unsigned char*)malloc(salt_len + server->key_len + 2); - crc_salt[0] = outdata[0] = out_size >> 8; - crc_salt[1] = outdata[1] = out_size; - - memcpy(crc_salt + 2, salt, salt_len); - memcpy(crc_salt + salt_len + 2, server->key, server->key_len); - fillcrc32to(crc_salt, salt_len + server->key_len + 2, (unsigned char *)outdata + 2); - free(crc_salt); - if (rand_len < 128) - { - outdata[6] = rand_len; - } - else - { - outdata[6] = 0xFF; - outdata[7] = rand_len >> 8; - outdata[8] = rand_len; - } - ++global->connection_id; - if (global->connection_id > 0xFF000000) { - rand_bytes(global->local_client_id, 8); - rand_bytes((uint8_t*)&global->connection_id, 4); - global->connection_id &= 0xFFFFFF; - } - time_t t = time(NULL); - memintcopy_lt(outdata + data_offset, t); - memmove(outdata + data_offset + 4, global->local_client_id, 4); - memintcopy_lt(outdata + data_offset + 8, global->connection_id); - memmove(outdata + data_offset + 12, data, datalength); - char hash[ONETIMEAUTH_BYTES * 2]; - ss_sha1_hmac(hash, outdata, out_size - OBFS_HMAC_SHA1_LEN, server->iv); - memcpy(outdata + out_size - OBFS_HMAC_SHA1_LEN, hash, OBFS_HMAC_SHA1_LEN); - return out_size; -} - -int auth_sha1_v4_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - char * out_buffer = (char*)malloc(datalength * 2 + 4096); - char * buffer = out_buffer; - char * data = plaindata; - int len = datalength; - int pack_len; - if (len > 0 && local->has_sent_header == 0) { - int head_size = get_head_size(plaindata, datalength, 30); - if (head_size > datalength) - head_size = datalength; - pack_len = auth_sha1_v4_pack_auth_data((auth_simple_global_data *)self->server.g_data, &self->server, data, head_size, buffer); - buffer += pack_len; - data += head_size; - len -= head_size; - local->has_sent_header = 1; - } - while ( len > auth_simple_pack_unit_size ) { - pack_len = auth_sha1_v4_pack_data(data, auth_simple_pack_unit_size, buffer); - buffer += pack_len; - data += auth_simple_pack_unit_size; - len -= auth_simple_pack_unit_size; - } - if (len > 0) { - pack_len = auth_sha1_v4_pack_data(data, len, buffer); - buffer += pack_len; - } - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int auth_sha1_v4_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - uint8_t * recv_buffer = (uint8_t *)local->recv_buffer; - if (local->recv_buffer_size + datalength > 16384) - return -1; - memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength); - local->recv_buffer_size += datalength; - - char * out_buffer = (char*)malloc(local->recv_buffer_size); - char * buffer = out_buffer; - char error = 0; - while (local->recv_buffer_size > 4) { - uint32_t crc_val = crc32((unsigned char*)recv_buffer, 2); - if ((((uint32_t)recv_buffer[3] << 8) | recv_buffer[2]) != (crc_val & 0xffff)) { - local->recv_buffer_size = 0; - error = 1; - break; - } - int length = ((int)recv_buffer[0] << 8) | recv_buffer[1]; - if (length >= 8192 || length < 7) { - local->recv_buffer_size = 0; - error = 1; - break; - } - if (length > local->recv_buffer_size) - break; - - if (checkadler32((unsigned char*)recv_buffer, length) == 0) { - local->recv_buffer_size = 0; - error = 1; - break; - } - int pos = recv_buffer[4]; - if (pos < 255) - { - pos += 4; - } - else - { - pos = (((int)recv_buffer[5] << 8) | recv_buffer[6]) + 4; - } - int data_size = length - pos - 4; - memmove(buffer, recv_buffer + pos, data_size); - buffer += data_size; - memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length); - } - int len; - if (error == 0) { - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - } else { - len = -1; - } - free(out_buffer); - return len; -} - - -int auth_aes128_sha1_pack_data(char *data, int datalength, char *outdata, auth_simple_local_data *local, server_info *server) { - unsigned int rand_len = (datalength > 1200 ? 0 : local->pack_id > 4 ? (xorshift128plus() & 0x20) : datalength > 900 ? (xorshift128plus() & 0x80) : (xorshift128plus() & 0x200)) + 1; - int out_size = rand_len + datalength + 8; - memcpy(outdata + rand_len + 4, data, datalength); - outdata[0] = out_size; - outdata[1] = out_size >> 8; - uint8_t key_len = local->user_key_len + 4; - uint8_t *key = (uint8_t*)malloc(key_len); - memcpy(key, local->user_key, local->user_key_len); - memintcopy_lt(key + key_len - 4, local->pack_id); - - { - uint8_t rnd_data[rand_len]; - rand_bytes(rnd_data, rand_len); - memcpy(outdata + 4, rnd_data, rand_len); - } - - { - char hash[20]; - local->hmac(hash, outdata, 2, key, key_len); - memcpy(outdata + 2, hash, 2); - } - - if (rand_len < 128) - { - outdata[4] = rand_len; - } - else - { - outdata[4] = 0xFF; - outdata[5] = rand_len; - outdata[6] = rand_len >> 8; - } - ++local->pack_id; - - { - char hash[20]; - local->hmac(hash, outdata, out_size - 4, key, key_len); - memcpy(outdata + out_size - 4, hash, 4); - } - free(key); - - return out_size; -} - -int auth_aes128_sha1_pack_auth_data(auth_simple_global_data *global, server_info *server, auth_simple_local_data *local, char *data, int datalength, char *outdata) { - unsigned int rand_len = (datalength > 400 ? (xorshift128plus() & 0x200) : (xorshift128plus() & 0x400)); - int data_offset = rand_len + 16 + 4 + 4 + 7; - int out_size = data_offset + datalength + 4; - - char encrypt[24]; - char encrypt_data[16]; - - uint8_t *key = (uint8_t*)malloc(server->iv_len + server->key_len); - uint8_t key_len = server->iv_len + server->key_len; - memcpy(key, server->iv, server->iv_len); - memcpy(key + server->iv_len, server->key, server->key_len); - - { - uint8_t rnd_data[rand_len]; - rand_bytes(rnd_data, rand_len); - memcpy(outdata + data_offset - rand_len, rnd_data, rand_len); - } - - ++global->connection_id; - if (global->connection_id > 0xFF000000) { - rand_bytes(global->local_client_id, 8); - rand_bytes((uint8_t*)&global->connection_id, 4); - global->connection_id &= 0xFFFFFF; - } - time_t t = time(NULL); - memintcopy_lt(encrypt, t); - memcpy(encrypt + 4, global->local_client_id, 4); - memintcopy_lt(encrypt + 8, global->connection_id); - encrypt[12] = out_size; - encrypt[13] = out_size >> 8; - encrypt[14] = rand_len; - encrypt[15] = rand_len >> 8; - - { - - if (local->user_key == NULL) { - if(server->param != NULL && server->param[0] != 0) { - char *param = server->param; - char *delim = strchr(param, ':'); - if(delim != NULL) { - char uid_str[16] = {}; - strncpy(uid_str, param, delim - param); - char key_str[128]; - strcpy(key_str, delim + 1); - long uid_long = strtol(uid_str, NULL, 10); - memintcopy_lt(local->uid, uid_long); - - char hash[21] = {0}; - local->hash(hash, key_str, strlen(key_str)); - - local->user_key_len = local->hash_len; - local->user_key = (uint8_t*)malloc(local->user_key_len); - memcpy(local->user_key, hash, local->hash_len); - } - } - if (local->user_key == NULL) { - rand_bytes((uint8_t *)local->uid, 4); - - local->user_key_len = server->key_len; - local->user_key = (uint8_t*)malloc(local->user_key_len); - memcpy(local->user_key, server->key, local->user_key_len); - } - } - - char encrypt_key_base64[256] = {0}; - unsigned char encrypt_key[local->user_key_len]; - memcpy(encrypt_key, local->user_key, local->user_key_len); - base64_encode(encrypt_key, local->user_key_len, encrypt_key_base64); - - int base64_len; - base64_len = (local->user_key_len + 2) / 3 * 4; - memcpy(encrypt_key_base64 + base64_len, local->salt, strlen(local->salt)); - - char enc_key[16]; - int enc_key_len = base64_len + strlen(local->salt); - bytes_to_key_with_size(encrypt_key_base64, enc_key_len, (uint8_t*)enc_key, 16); - ss_aes_128_cbc(encrypt, encrypt_data, enc_key); - memcpy(encrypt + 4, encrypt_data, 16); - memcpy(encrypt, local->uid, 4); - } - - { - char hash[20]; - local->hmac(hash, encrypt, 20, key, key_len); - memcpy(encrypt + 20, hash, 4); - } - - { - uint8_t rnd[1]; - rand_bytes(rnd, 1); - memcpy(outdata, rnd, 1); - char hash[20]; - local->hmac(hash, (char *)rnd, 1, key, key_len); - memcpy(outdata + 1, hash, 6); - } - - memcpy(outdata + 7, encrypt, 24); - memcpy(outdata + data_offset, data, datalength); - - { - char hash[20]; - local->hmac(hash, outdata, out_size - 4, local->user_key, local->user_key_len); - memmove(outdata + out_size - 4, hash, 4); - } - free(key); - - return out_size; -} - -int auth_aes128_sha1_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - char * out_buffer = (char*)malloc(datalength * 2 + 4096); - char * buffer = out_buffer; - char * data = plaindata; - int len = datalength; - int pack_len; - if (len > 0 && local->has_sent_header == 0) { - int head_size = 1200; - if (head_size > datalength) - head_size = datalength; - pack_len = auth_aes128_sha1_pack_auth_data((auth_simple_global_data *)self->server.g_data, &self->server, local, data, head_size, buffer); - buffer += pack_len; - data += head_size; - len -= head_size; - local->has_sent_header = 1; - } - while ( len > auth_simple_pack_unit_size ) { - pack_len = auth_aes128_sha1_pack_data(data, auth_simple_pack_unit_size, buffer, local, &self->server); - buffer += pack_len; - data += auth_simple_pack_unit_size; - len -= auth_simple_pack_unit_size; - } - if (len > 0) { - pack_len = auth_aes128_sha1_pack_data(data, len, buffer, local, &self->server); - buffer += pack_len; - } - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int auth_aes128_sha1_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - //server_info *server = (server_info*)&self->server; - uint8_t * recv_buffer = (uint8_t *)local->recv_buffer; - if (local->recv_buffer_size + datalength > 16384) - return -1; - memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength); - local->recv_buffer_size += datalength; - - int key_len = local->user_key_len + 4; - uint8_t *key = (uint8_t*)malloc(key_len); - memcpy(key, local->user_key, local->user_key_len); - - char * out_buffer = (char*)malloc(local->recv_buffer_size); - char * buffer = out_buffer; - char error = 0; - while (local->recv_buffer_size > 4) { - memintcopy_lt(key + key_len - 4, local->recv_id); - - { - char hash[20]; - local->hmac(hash, (char*)recv_buffer, 2, key, key_len); - - if (memcmp(hash, recv_buffer + 2, 2)) { - local->recv_buffer_size = 0; - error = 1; - break; - } - } - - int length = ((int)recv_buffer[1] << 8) + recv_buffer[0]; - if (length >= 8192 || length < 8) { - local->recv_buffer_size = 0; - error = 1; - break; - } - if (length > local->recv_buffer_size) - break; - - { - char hash[20]; - local->hmac(hash, (char *)recv_buffer, length - 4, key, key_len); - if (memcmp(hash, recv_buffer + length - 4, 4)) - { - local->recv_buffer_size = 0; - error = 1; - break; - } - } - - ++local->recv_id; - int pos = recv_buffer[4]; - if (pos < 255) - { - pos += 4; - } - else - { - pos = (((int)recv_buffer[6] << 8) | recv_buffer[5]) + 4; - } - int data_size = length - pos - 4; - memmove(buffer, recv_buffer + pos, data_size); - buffer += data_size; - memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length); - } - int len; - if (error == 0) { - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - } else { - len = -1; - } - free(out_buffer); - free(key); - return len; -} - -int auth_aes128_sha1_client_udp_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - char * out_buffer = (char*)malloc(datalength + 8); - - if (local->user_key == NULL) { - if(self->server.param != NULL && self->server.param[0] != 0) { - char *param = self->server.param; - char *delim = strchr(param, ':'); - if(delim != NULL) { - char uid_str[16] = {}; - strncpy(uid_str, param, delim - param); - char key_str[128]; - strcpy(key_str, delim + 1); - long uid_long = strtol(uid_str, NULL, 10); - memintcopy_lt(local->uid, uid_long); - - char hash[21] = {0}; - local->hash(hash, key_str, strlen(key_str)); - - local->user_key_len = local->hash_len; - local->user_key = (uint8_t*)malloc(local->user_key_len); - memcpy(local->user_key, hash, local->hash_len); - } - } - if (local->user_key == NULL) { - rand_bytes((uint8_t *)local->uid, 4); - - local->user_key_len = self->server.key_len; - local->user_key = (uint8_t*)malloc(local->user_key_len); - memcpy(local->user_key, self->server.key, local->user_key_len); - } - } - - int outlength = datalength + 8; - memmove(out_buffer, plaindata, datalength); - memmove(out_buffer + datalength, local->uid, 4); - - { - char hash[20]; - local->hmac(hash, out_buffer, outlength - 4, local->user_key, local->user_key_len); - memmove(out_buffer + outlength - 4, hash, 4); - } - - if (*capacity < outlength) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = outlength * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, outlength); - - free(out_buffer); - return outlength; -} - -int auth_aes128_sha1_client_udp_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) { - if (datalength <= 4) - return 0; - - char *plaindata = *pplaindata; - auth_simple_local_data *local = (auth_simple_local_data*)self->l_data; - - char hash[20]; - local->hmac(hash, plaindata, datalength - 4, self->server.key, self->server.key_len); - - if (memcmp(hash, plaindata + datalength - 4, 4)) - { - return 0; - } - - return datalength - 4; -} diff --git a/shadowsocksr-libev/src/server/auth.h b/shadowsocksr-libev/src/server/auth.h deleted file mode 100644 index f7730df5..00000000 --- a/shadowsocksr-libev/src/server/auth.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * auth.h - Define shadowsocksR server's buffers and callbacks - * - * Copyright (C) 2015 - 2016, Break Wa11 - */ - -#ifndef _AUTH_H -#define _AUTH_H - -void * auth_simple_init_data(); -obfs * auth_simple_new_obfs(); -void auth_simple_dispose(obfs *self); - -int auth_simple_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); -int auth_simple_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); - - -int auth_sha1_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); -int auth_sha1_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); - -int auth_sha1_v2_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); -int auth_sha1_v2_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); - -int auth_sha1_v4_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); -int auth_sha1_v4_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); - -int auth_aes128_sha1_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); -int auth_aes128_sha1_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); - -#endif // _AUTH_H diff --git a/shadowsocksr-libev/src/server/base64.c b/shadowsocksr-libev/src/server/base64.c deleted file mode 100644 index 7cf9552f..00000000 --- a/shadowsocksr-libev/src/server/base64.c +++ /dev/null @@ -1,119 +0,0 @@ -#include "base64.h" - -/* BASE 64 encode table */ -static const char base64en[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -#define BASE64_PAD '=' - -#define BASE64DE_FIRST '+' -#define BASE64DE_LAST 'z' - -/* ASCII order for BASE 64 decode, -1 in unused character */ -static const signed char base64de[] = { - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - /* '+', ',', '-', '.', '/', */ - -1, -1, -1, 62, -1, -1, -1, 63, - /* '0', '1', '2', '3', '4', '5', '6', '7', */ - 52, 53, 54, 55, 56, 57, 58, 59, - /* '8', '9', ':', ';', '<', '=', '>', '?', */ - 60, 61, -1, -1, -1, -1, -1, -1, - /* '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', */ - -1, 0, 1, 2, 3, 4, 5, 6, - /* 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', */ - 7, 8, 9, 10, 11, 12, 13, 14, - /* 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', */ - 15, 16, 17, 18, 19, 20, 21, 22, - /* 'X', 'Y', 'Z', '[', '\', ']', '^', '_', */ - 23, 24, 25, -1, -1, -1, -1, -1, - /* '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', */ - -1, 26, 27, 28, 29, 30, 31, 32, - /* 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', */ - 33, 34, 35, 36, 37, 38, 39, 40, - /* 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', */ - 41, 42, 43, 44, 45, 46, 47, 48, - /* 'x', 'y', 'z', */ - 49, 50, 51, -}; - -int -base64_encode(const unsigned char *in, unsigned int inlen, char *out) -{ - unsigned int i, j; - - for (i = j = 0; i < inlen; i++) { - int s = i % 3; /* from 6/gcd(6, 8) */ - - switch (s) { - case 0: - out[j++] = base64en[(in[i] >> 2) & 0x3F]; - continue; - case 1: - out[j++] = base64en[((in[i-1] & 0x3) << 4) + ((in[i] >> 4) & 0xF)]; - continue; - case 2: - out[j++] = base64en[((in[i-1] & 0xF) << 2) + ((in[i] >> 6) & 0x3)]; - out[j++] = base64en[in[i] & 0x3F]; - } - } - - /* move back */ - i -= 1; - - /* check the last and add padding */ - if ((i % 3) == 0) { - out[j++] = base64en[(in[i] & 0x3) << 4]; - out[j++] = BASE64_PAD; - out[j++] = BASE64_PAD; - } else if ((i % 3) == 1) { - out[j++] = base64en[(in[i] & 0xF) << 2]; - out[j++] = BASE64_PAD; - } - - return BASE64_OK; -} - -int -base64_decode(const char *in, unsigned int inlen, unsigned char *out) -{ - unsigned int i, j; - - for (i = j = 0; i < inlen; i++) { - int c; - int s = i % 4; /* from 8/gcd(6, 8) */ - - if (in[i] == '=') - return BASE64_OK; - - if (in[i] < BASE64DE_FIRST || in[i] > BASE64DE_LAST || - (c = base64de[(int)in[i]]) == -1) - return BASE64_INVALID; - - switch (s) { - case 0: - out[j] = ((unsigned int)c << 2) & 0xFF; - continue; - case 1: - out[j++] += ((unsigned int)c >> 4) & 0x3; - - /* if not last char with padding */ - if (i < (inlen - 3) || in[inlen - 2] != '=') - out[j] = ((unsigned int)c & 0xF) << 4; - continue; - case 2: - out[j++] += ((unsigned int)c >> 2) & 0xF; - - /* if not last char with padding */ - if (i < (inlen - 2) || in[inlen - 1] != '=') - out[j] = ((unsigned int)c & 0x3) << 6; - continue; - case 3: - out[j++] += (unsigned char)c; - } - } - - return BASE64_OK; -} diff --git a/shadowsocksr-libev/src/server/base64.h b/shadowsocksr-libev/src/server/base64.h deleted file mode 100644 index 6432ba37..00000000 --- a/shadowsocksr-libev/src/server/base64.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef __BASE64_H__ -#define __BASE64_H__ - -enum {BASE64_OK = 0, BASE64_INVALID}; - -#define BASE64_ENCODE_OUT_SIZE(s) (((s) + 2) / 3 * 4) -#define BASE64_DECODE_OUT_SIZE(s) (((s)) / 4 * 3) - -int -base64_encode(const unsigned char *in, unsigned int inlen, char *out); - -int -base64_decode(const char *in, unsigned int inlen, unsigned char *out); - - -#endif /* __BASE64_H__ */ diff --git a/shadowsocksr-libev/src/server/cache.c b/shadowsocksr-libev/src/server/cache.c deleted file mode 100644 index c1a2995b..00000000 --- a/shadowsocksr-libev/src/server/cache.c +++ /dev/null @@ -1,308 +0,0 @@ -/* - * cache.c - Manage the connection cache for UDPRELAY - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -/* - * Original Author: Oliver Lorenz (ol), olli@olorenz.org, https://olorenz.org - * License: This is licensed under the same terms as uthash itself - */ - -#include -#include - -#include "cache.h" -#include "utils.h" - -#ifdef __MINGW32__ -#include "win32.h" -#endif - -/** Creates a new cache object - * - * @param dst - * Where the newly allocated cache object will be stored in - * - * @param capacity - * The maximum number of elements this cache object can hold - * - * @return EINVAL if dst is NULL, ENOMEM if malloc fails, 0 otherwise - */ -int -cache_create(struct cache **dst, const size_t capacity, - void (*free_cb)(void *key, void *element)) -{ - struct cache *new = NULL; - - if (!dst) { - return EINVAL; - } - - if ((new = malloc(sizeof(*new))) == NULL) { - return ENOMEM; - } - - new->max_entries = capacity; - new->entries = NULL; - new->free_cb = free_cb; - *dst = new; - return 0; -} - -/** Frees an allocated cache object - * - * @param cache - * The cache object to free - * - * @param keep_data - * Whether to free contained data or just delete references to it - * - * @return EINVAL if cache is NULL, 0 otherwise - */ -int -cache_delete(struct cache *cache, int keep_data) -{ - struct cache_entry *entry, *tmp; - - if (!cache) { - return EINVAL; - } - - if (keep_data) { - HASH_CLEAR(hh, cache->entries); - } else { - HASH_ITER(hh, cache->entries, entry, tmp){ - HASH_DEL(cache->entries, entry); - if (entry->data != NULL) { - if (cache->free_cb) { - cache->free_cb(entry->key, entry->data); - } else { - ss_free(entry->data); - } - } - ss_free(entry->key); - ss_free(entry); - } - } - - ss_free(cache); - return 0; -} - -/** Clear old cache object - * - * @param cache - * The cache object to clear - * - * @param age - * Clear only objects older than the age (sec) - * - * @return EINVAL if cache is NULL, 0 otherwise - */ -int -cache_clear(struct cache *cache, ev_tstamp age) -{ - struct cache_entry *entry, *tmp; - - if (!cache) { - return EINVAL; - } - - ev_tstamp now = ev_time(); - - HASH_ITER(hh, cache->entries, entry, tmp){ - if (now - entry->ts > age) { - HASH_DEL(cache->entries, entry); - if (entry->data != NULL) { - if (cache->free_cb) { - cache->free_cb(entry->key, entry->data); - } else { - ss_free(entry->data); - } - } - ss_free(entry->key); - ss_free(entry); - } - } - - return 0; -} - -/** Removes a cache entry - * - * @param cache - * The cache object - * - * @param key - * The key of the entry to remove - * - * @param key_len - * The length of key - * - * @return EINVAL if cache is NULL, 0 otherwise - */ -int -cache_remove(struct cache *cache, char *key, size_t key_len) -{ - struct cache_entry *tmp; - - if (!cache || !key) { - return EINVAL; - } - - HASH_FIND(hh, cache->entries, key, key_len, tmp); - - if (tmp) { - HASH_DEL(cache->entries, tmp); - if (tmp->data != NULL) { - if (cache->free_cb) { - cache->free_cb(tmp->key, tmp->data); - } else { - ss_free(tmp->data); - } - } - ss_free(tmp->key); - ss_free(tmp); - } - - return 0; -} - -/** Checks if a given key is in the cache - * - * @param cache - * The cache object - * - * @param key - * The key to look-up - * - * @param key_len - * The length of key - * - * @param result - * Where to store the result if key is found. - * - * A warning: Even though result is just a pointer, - * you have to call this function with a **ptr, - * otherwise this will blow up in your face. - * - * @return EINVAL if cache is NULL, 0 otherwise - */ -int -cache_lookup(struct cache *cache, char *key, size_t key_len, void *result) -{ - struct cache_entry *tmp = NULL; - char **dirty_hack = result; - - if (!cache || !key || !result) { - return EINVAL; - } - - HASH_FIND(hh, cache->entries, key, key_len, tmp); - if (tmp) { - HASH_DELETE(hh, cache->entries, tmp); - tmp->ts = ev_time(); - HASH_ADD_KEYPTR(hh, cache->entries, tmp->key, key_len, tmp); - *dirty_hack = tmp->data; - } else { - *dirty_hack = result = NULL; - } - - return 0; -} - -int -cache_key_exist(struct cache *cache, char *key, size_t key_len) -{ - struct cache_entry *tmp = NULL; - - if (!cache || !key) { - return 0; - } - - HASH_FIND(hh, cache->entries, key, key_len, tmp); - if (tmp) { - HASH_DELETE(hh, cache->entries, tmp); - tmp->ts = ev_time(); - HASH_ADD_KEYPTR(hh, cache->entries, tmp->key, key_len, tmp); - return 1; - } else { - return 0; - } - - return 0; -} - -/** Inserts a given pair into the cache - * - * @param cache - * The cache object - * - * @param key - * The key that identifies - * - * @param key_len - * The length of key - * - * @param data - * Data associated with - * - * @return EINVAL if cache is NULL, ENOMEM if malloc fails, 0 otherwise - */ -int -cache_insert(struct cache *cache, char *key, size_t key_len, void *data) -{ - struct cache_entry *entry = NULL; - struct cache_entry *tmp_entry = NULL; - - if (!cache) { - return EINVAL; - } - - if ((entry = malloc(sizeof(*entry))) == NULL) { - return ENOMEM; - } - - entry->key = ss_malloc(key_len + 1); - memcpy(entry->key, key, key_len); - entry->key[key_len] = 0; - - entry->data = data; - entry->ts = ev_time(); - HASH_ADD_KEYPTR(hh, cache->entries, entry->key, key_len, entry); - - if (HASH_COUNT(cache->entries) >= cache->max_entries) { - HASH_ITER(hh, cache->entries, entry, tmp_entry){ - HASH_DELETE(hh, cache->entries, entry); - if (entry->data != NULL) { - if (cache->free_cb) { - cache->free_cb(entry->key, entry->data); - } else { - ss_free(entry->data); - } - } - ss_free(entry->key); - ss_free(entry); - break; - } - } - - return 0; -} diff --git a/shadowsocksr-libev/src/server/cache.h b/shadowsocksr-libev/src/server/cache.h deleted file mode 100644 index 0ec98f55..00000000 --- a/shadowsocksr-libev/src/server/cache.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * cache.h - Define the cache manager interface - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -/* - * Original Author: Oliver Lorenz (ol), olli@olorenz.org, https://olorenz.org - * License: This is licensed under the same terms as uthash itself - */ - -#ifndef _CACHE_ -#define _CACHE_ - -#include "uthash.h" -#include "ev.h" - -/** - * A cache entry - */ -struct cache_entry { - char *key; /** -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//#define __DEBUG__ -#ifdef __DEBUG__ -#define DEBUG(format,...) printf("File: "__FILE__", Line: %05d: "format"/n", __LINE__, ##__VA_ARGS__) -#else -#define DEBUG(format,...) -#endif - -static sigjmp_buf jmpbuf; -static void alarm_func() -{ - siglongjmp(jmpbuf, 1); -} - -static struct hostent *timeGethostbyname(const char *domain, int timeout) -{ - struct hostent *ipHostent = NULL; - signal(SIGALRM, alarm_func); - if(sigsetjmp(jmpbuf, 1) != 0) - { - alarm(0);//timout - signal(SIGALRM, SIG_IGN); - return NULL; - } - alarm(timeout);//setting alarm - ipHostent = gethostbyname(domain); - signal(SIGALRM, SIG_IGN); - return ipHostent; -} - - -#define MY_HTTP_DEFAULT_PORT 80 -#define BUFFER_SIZE 1024 -#define HTTP_POST "POST /%s HTTP/1.1\r\nHOST: %s:%d\r\nAccept: */*\r\n"\ - "Content-Type:application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n%s" -#define HTTP_GET "GET /%s HTTP/1.1\r\nHOST: %s:%d\r\nAccept: */*\r\n\r\n" - -static int http_parse_url(const char *url,char *host,char *file,int *port) -{ - char *ptr1,*ptr2; - int len = 0; - if(!url || !host || !file || !port){ - return 1; - } - - ptr1 = (char *)url; - - if(!strncmp(ptr1,"http://",strlen("http://"))){ - ptr1 += strlen("http://"); - }else{ - return 1; - } - - ptr2 = strchr(ptr1,'/'); - if(ptr2){ - len = strlen(ptr1) - strlen(ptr2); - memcpy(host,ptr1,len); - host[len] = '\0'; - if(*(ptr2 + 1)){ - memcpy(file,ptr2 + 1,strlen(ptr2) - 1 ); - file[strlen(ptr2) - 1] = '\0'; - } - }else{ - memcpy(host,ptr1,strlen(ptr1)); - host[strlen(ptr1)] = '\0'; - } - //get host and ip - ptr1 = strchr(host,':'); - if(ptr1){ - *ptr1++ = '\0'; - *port = atoi(ptr1); - }else{ - *port = MY_HTTP_DEFAULT_PORT; - } - - return 0; -} - - -static int http_tcpclient_recv(int socket,char *lpbuff){ - int recvnum = 0; - - recvnum = recv(socket, lpbuff,BUFFER_SIZE*4,0); - - return recvnum; -} - -static int http_tcpclient_send(int socket,char *buff,int size){ - int sent=0,tmpres=0; - - while(sent < size){ - tmpres = send(socket,buff+sent,size-sent,0); - if(tmpres == -1){ - return 1; - } - sent += tmpres; - } - return sent; -} - - - - - -int http_get(const char *url,int socket_fd) -{ - char lpbuf[BUFFER_SIZE*4] = {'\0'}; - - char host_addr[BUFFER_SIZE] = {'\0'}; - char file[BUFFER_SIZE] = {'\0'}; - int port = 0; - - - if(!url){ - DEBUG(" failed!\n"); - return 1; - } - - if(http_parse_url(url,host_addr,file,&port)){ - DEBUG("http_parse_url failed!\n"); - return 1; - } - DEBUG("url: %s\thost_addr : %s\tfile:%s\t,%d\n",url,host_addr,file,port); - - - if(socket_fd < 0){ - DEBUG("http_tcpclient_create failed\n"); - return 1; - } - - sprintf(lpbuf,HTTP_GET,file,host_addr,port); - - if(http_tcpclient_send(socket_fd,lpbuf,strlen(lpbuf)) < 0){ - DEBUG("http_tcpclient_send failed..\n"); - return 1; - } - DEBUG("request:\n%s\n",lpbuf); - - if(http_tcpclient_recv(socket_fd,lpbuf) <= 0){ - DEBUG("http_tcpclient_recv failed\n"); - close(socket_fd); - return 1; - } - DEBUG("rec:\n%s\n",lpbuf); - close(socket_fd); - - //return http_parse_result(lpbuf); -return 0; -} - - - -int main(int argc, char *argv[]) -{ - int fd,http_flag=0,http_ret=1; - struct sockaddr_in addr; - struct hostent *host; - struct timeval timeo = {3, 0}; - socklen_t len = sizeof(timeo); - - char http_url[100]="http://"; - - - - fd = socket(AF_INET, SOCK_STREAM, 0); - if (argc >= 4) - timeo.tv_sec = atoi(argv[3]); - if (argc>=5) - http_flag=1; - - if((host=timeGethostbyname(argv[1],timeo.tv_sec)) == NULL) { - DEBUG("gethostbyname err\n"); - return 1; - } - if (setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo, len) == -1) - { - - DEBUG("setsockopt send err\n"); - return 1; - } - - if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeo, len) == -1) - { - - DEBUG("setsockopt recv err\n"); - return 1; - } - - addr.sin_family = AF_INET; - addr.sin_addr = *((struct in_addr *)host->h_addr); - //addr.sin_addr.s_addr = inet_addr(argv[1]); - addr.sin_port = htons(atoi(argv[2])); -if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) - { - if (errno == EINPROGRESS) - { - DEBUG("timeout err\n"); - return 1; - } - DEBUG("connect err\n"); - return 1; - } -if(http_flag==0) -{ - close(fd); - return 0; -} -strcat(http_url,argv[1]); -http_ret=http_get(http_url,fd); -if(http_ret==1) -{ -DEBUG("recv err"); - return 1; -} -else -{ -DEBUG("recv ok"); - - return 0; -} - -} \ No newline at end of file diff --git a/shadowsocksr-libev/src/server/common.h b/shadowsocksr-libev/src/server/common.h deleted file mode 100644 index 000f084e..00000000 --- a/shadowsocksr-libev/src/server/common.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * common.h - Provide global definitions - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifndef _COMMON_H -#define _COMMON_H - -#define DEFAULT_CONF_PATH "/etc/shadowsocks-libev/config.json" - -#ifndef SOL_TCP -#define SOL_TCP IPPROTO_TCP -#endif - -#if defined(MODULE_TUNNEL) || defined(MODULE_REDIR) -#define MODULE_LOCAL -#endif - -int init_udprelay(const char *server_host, const char *server_port, -#ifdef MODULE_LOCAL - const struct sockaddr *remote_addr, const int remote_addr_len, -#ifdef MODULE_TUNNEL - const ss_addr_t tunnel_addr, -#endif -#endif - int mtu, int method, int auth, int timeout, const char *iface, const char *protocol, const char *protocol_param); - -void free_udprelay(void); - -#ifdef ANDROID -int protect_socket(int fd); -int send_traffic_stat(uint64_t tx, uint64_t rx); -#endif - -#define STAGE_ERROR -1 /* Error detected */ -#define STAGE_INIT 0 /* Initial stage */ -#define STAGE_HANDSHAKE 1 /* Handshake with client */ -#define STAGE_PARSE 2 /* Parse the header */ -#define STAGE_RESOLVE 4 /* Resolve the hostname */ -#define STAGE_STREAM 5 /* Stream between client and server */ - -#endif // _COMMON_H diff --git a/shadowsocksr-libev/src/server/crc32.c b/shadowsocksr-libev/src/server/crc32.c deleted file mode 100644 index 6d328d23..00000000 --- a/shadowsocksr-libev/src/server/crc32.c +++ /dev/null @@ -1,97 +0,0 @@ -static uint32_t crc32_table[256] = {0}; - -void init_crc32_table(void) { - uint32_t c, i, j; - if (crc32_table[0] == 0) { - for (i = 0; i < 256; i++) { - c = i; - for (j = 0; j < 8; j++) { - if (c & 1) - c = 0xedb88320L ^ (c >> 1); - else - c = c >> 1; - } - crc32_table[i] = c; - } - } -} - -uint32_t crc32(unsigned char *buffer, unsigned int size) { - uint32_t crc = 0xFFFFFFFF; - unsigned int i; - for (i = 0; i < size; i++) { - crc = crc32_table[(crc ^ buffer[i]) & 0xFF] ^ (crc >> 8); - } - return crc ^ 0xFFFFFFFF; -} - -void fillcrc32to(unsigned char *buffer, unsigned int size, unsigned char *outbuffer) { - uint32_t crc = 0xFFFFFFFF; - unsigned int i; - for (i = 0; i < size; i++) { - crc = crc32_table[(crc ^ buffer[i]) & 0xff] ^ (crc >> 8); - } - crc ^= 0xFFFFFFFF; - outbuffer[0] = crc; - outbuffer[1] = crc >> 8; - outbuffer[2] = crc >> 16; - outbuffer[3] = crc >> 24; -} - -void fillcrc32(unsigned char *buffer, unsigned int size) { - uint32_t crc = 0xFFFFFFFF; - unsigned int i; - size -= 4; - for (i = 0; i < size; i++) { - crc = crc32_table[(crc ^ buffer[i]) & 0xff] ^ (crc >> 8); - } - buffer += size; - buffer[0] = crc; - buffer[1] = crc >> 8; - buffer[2] = crc >> 16; - buffer[3] = crc >> 24; -} - -void adler32_short(unsigned char *buffer, unsigned int size, uint32_t *a, uint32_t *b) { - for (int i = 0; i < size; i++) { - *a += buffer[i]; - *b += *a; - } - *a %= 65521; - *b %= 65521; -} - -#define NMAX 5552 -uint32_t adler32(unsigned char *buffer, unsigned int size) { - uint32_t a = 1; - uint32_t b = 0; - while ( size >= NMAX ) { - adler32_short(buffer, NMAX, &a, &b); - buffer += NMAX; - size -= NMAX; - } - adler32_short(buffer, size, &a, &b); - return (b << 16) + a; -} -#undef NMAX - -void filladler32(unsigned char *buffer, unsigned int size) { - size -= 4; - uint32_t checksum = adler32(buffer, size); - buffer += size; - buffer[0] = checksum; - buffer[1] = checksum >> 8; - buffer[2] = checksum >> 16; - buffer[3] = checksum >> 24; -} - -int checkadler32(unsigned char *buffer, unsigned int size) { - size -= 4; - uint32_t checksum = adler32(buffer, size); - buffer += size; - return checksum == (((uint32_t)buffer[3] << 24) - | ((uint32_t)buffer[2] << 16) - | ((uint32_t)buffer[1] << 8) - | (uint32_t)buffer[0]); -} - diff --git a/shadowsocksr-libev/src/server/encrypt.c b/shadowsocksr-libev/src/server/encrypt.c deleted file mode 100644 index 37dd5cdf..00000000 --- a/shadowsocksr-libev/src/server/encrypt.c +++ /dev/null @@ -1,1645 +0,0 @@ -/* - * encrypt.c - Manage the global encryptor - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#include - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#if defined(USE_CRYPTO_OPENSSL) - -#include -#include -#include -#include - -#elif defined(USE_CRYPTO_POLARSSL) - -#include -#include -#include -#include -#include -#include -#define CIPHER_UNSUPPORTED "unsupported" - -#include -#ifdef _WIN32 -#include -#include -#else -#include -#endif - -#elif defined(USE_CRYPTO_MBEDTLS) - -#include -#include -#include -#include -#include -#define CIPHER_UNSUPPORTED "unsupported" - -#include -#ifdef _WIN32 -#include -#include -#else -#include -#endif - -#endif - -#include - -#ifndef __MINGW32__ -#include -#endif - -#include "cache.h" -#include "encrypt.h" -#include "utils.h" - -#define OFFSET_ROL(p, o) ((uint64_t)(*(p + o)) << (8 * o)) - -static uint8_t *enc_table; -static uint8_t *dec_table; -static uint8_t enc_key[MAX_KEY_LENGTH]; -static int enc_key_len; -static int enc_iv_len; -static int enc_method; - -static struct cache *iv_cache; - -#ifdef DEBUG -static void -dump(char *tag, char *text, int len) -{ - int i; - printf("%s: ", tag); - for (i = 0; i < len; i++) - printf("0x%02x ", (uint8_t)text[i]); - printf("\n"); -} - -#endif - -static const char *supported_ciphers[CIPHER_NUM] = { - "table", - "rc4", - "rc4-md5-6", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf" -}; - -#ifdef USE_CRYPTO_POLARSSL -static const char *supported_ciphers_polarssl[CIPHER_NUM] = { - "table", - "ARC4-128", - "ARC4-128", - "ARC4-128", - "AES-128-CFB128", - "AES-192-CFB128", - "AES-256-CFB128", - "AES-128-CTR", - "AES-192-CTR", - "AES-256-CTR", - "BLOWFISH-CFB64", - "CAMELLIA-128-CFB128", - "CAMELLIA-192-CFB128", - "CAMELLIA-256-CFB128", - CIPHER_UNSUPPORTED, - CIPHER_UNSUPPORTED, - CIPHER_UNSUPPORTED, - CIPHER_UNSUPPORTED, - CIPHER_UNSUPPORTED, - "salsa20", - "chacha20", - "chacha20-ietf" -}; -#endif - -#ifdef USE_CRYPTO_MBEDTLS -static const char *supported_ciphers_mbedtls[CIPHER_NUM] = { - "table", - "ARC4-128", - "ARC4-128", - "ARC4-128", - "AES-128-CFB128", - "AES-192-CFB128", - "AES-256-CFB128", - "AES-128-CTR", - "AES-192-CTR", - "AES-256-CTR", - "BLOWFISH-CFB64", - "CAMELLIA-128-CFB128", - "CAMELLIA-192-CFB128", - "CAMELLIA-256-CFB128", - CIPHER_UNSUPPORTED, - CIPHER_UNSUPPORTED, - CIPHER_UNSUPPORTED, - CIPHER_UNSUPPORTED, - CIPHER_UNSUPPORTED, - "salsa20", - "chacha20", - "chacha20-ietf" -}; -#endif - -#ifdef USE_CRYPTO_APPLECC -static const CCAlgorithm supported_ciphers_applecc[CIPHER_NUM] = { - kCCAlgorithmInvalid, - kCCAlgorithmRC4, - kCCAlgorithmRC4, - kCCAlgorithmRC4, - kCCAlgorithmAES, - kCCAlgorithmAES, - kCCAlgorithmAES, - kCCAlgorithmAES, - kCCAlgorithmAES, - kCCAlgorithmAES, - kCCAlgorithmBlowfish, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCAlgorithmCAST, - kCCAlgorithmDES, - kCCAlgorithmInvalid, - kCCAlgorithmRC2, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid -}; - -static const CCMode supported_modes_applecc[CIPHER_NUM] = { - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCModeRC4, - kCCModeRC4, - kCCModeCFB, - kCCModeCFB, - kCCModeCFB, - kCCModeCTR, - kCCModeCTR, - kCCModeCTR, - kCCModeCFB, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCModeCFB, - kCCModeCFB, - kCCModeCFB, - kCCModeCFB, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid, - kCCAlgorithmInvalid -}; -#endif - -static const int supported_ciphers_iv_size[CIPHER_NUM] = { - 0, 0, 6, 16, 16, 16, 16, 16, 16, 16, 8, 16, 16, 16, 8, 8, 8, 8, 16, 8, 8, 12 -}; - -static const int supported_ciphers_key_size[CIPHER_NUM] = { - 0, 16, 16, 16, 16, 24, 32, 16, 24, 32, 16, 16, 24, 32, 16, 8, 16, 16, 16, 32, 32, 32 -}; - -static int -safe_memcmp(const void *s1, const void *s2, size_t n) -{ - const unsigned char *_s1 = (const unsigned char *)s1; - const unsigned char *_s2 = (const unsigned char *)s2; - int ret = 0; - size_t i; - for (i = 0; i < n; i++) - ret |= _s1[i] ^ _s2[i]; - return !!ret; -} - -int -balloc(buffer_t *ptr, size_t capacity) -{ - sodium_memzero(ptr, sizeof(buffer_t)); - ptr->array = ss_malloc(capacity); - ptr->capacity = capacity; - return capacity; -} - -int -brealloc(buffer_t *ptr, size_t len, size_t capacity) -{ - if (ptr == NULL) - return -1; - size_t real_capacity = max(len, capacity); - if (ptr->capacity < real_capacity) { - ptr->array = ss_realloc(ptr->array, real_capacity); - ptr->capacity = real_capacity; - } - return real_capacity; -} - -void -bfree(buffer_t *ptr) -{ - if (ptr == NULL) - return; - ptr->idx = 0; - ptr->len = 0; - ptr->capacity = 0; - if (ptr->array != NULL) { - ss_free(ptr->array); - } -} - -static int -crypto_stream_xor_ic(uint8_t *c, const uint8_t *m, uint64_t mlen, - const uint8_t *n, uint64_t ic, const uint8_t *k, - int method) -{ - switch (method) { - case SALSA20: - return crypto_stream_salsa20_xor_ic(c, m, mlen, n, ic, k); - case CHACHA20: - return crypto_stream_chacha20_xor_ic(c, m, mlen, n, ic, k); - case CHACHA20IETF: - return crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, n, (uint32_t)ic, k); - } - // always return 0 - return 0; -} - -static int -random_compare(const void *_x, const void *_y, uint32_t i, - uint64_t a) -{ - uint8_t x = *((uint8_t *)_x); - uint8_t y = *((uint8_t *)_y); - return a % (x + i) - a % (y + i); -} - -static void -merge(uint8_t *left, int llength, uint8_t *right, - int rlength, uint32_t salt, uint64_t key) -{ - uint8_t *ltmp = (uint8_t *)malloc(llength * sizeof(uint8_t)); - uint8_t *rtmp = (uint8_t *)malloc(rlength * sizeof(uint8_t)); - - uint8_t *ll = ltmp; - uint8_t *rr = rtmp; - - uint8_t *result = left; - - memcpy(ltmp, left, llength * sizeof(uint8_t)); - memcpy(rtmp, right, rlength * sizeof(uint8_t)); - - while (llength > 0 && rlength > 0) { - if (random_compare(ll, rr, salt, key) <= 0) { - *result = *ll; - ++ll; - --llength; - } else { - *result = *rr; - ++rr; - --rlength; - } - ++result; - } - - if (llength > 0) { - while (llength > 0) { - *result = *ll; - ++result; - ++ll; - --llength; - } - } else { - while (rlength > 0) { - *result = *rr; - ++result; - ++rr; - --rlength; - } - } - - ss_free(ltmp); - ss_free(rtmp); -} - -static void -merge_sort(uint8_t array[], int length, - uint32_t salt, uint64_t key) -{ - uint8_t middle; - uint8_t *left, *right; - int llength; - - if (length <= 1) { - return; - } - - middle = length / 2; - - llength = length - middle; - - left = array; - right = array + llength; - - merge_sort(left, llength, salt, key); - merge_sort(right, middle, salt, key); - merge(left, llength, right, middle, salt, key); -} - -int -enc_get_iv_len() -{ - return enc_iv_len; -} - -uint8_t* enc_get_key() -{ - return enc_key; -} - -int enc_get_key_len() -{ - return enc_key_len; -} - -unsigned char *enc_md5(const unsigned char *d, size_t n, unsigned char *md) -{ -#if defined(USE_CRYPTO_OPENSSL) - return MD5(d, n, md); -#elif defined(USE_CRYPTO_POLARSSL) - static unsigned char m[16]; - if (md == NULL) { - md = m; - } - md5(d, n, md); - return md; -#elif defined(USE_CRYPTO_MBEDTLS) - static unsigned char m[16]; - if (md == NULL) { - md = m; - } - mbedtls_md5(d, n, md); - return md; -#endif -} - -void -enc_table_init(const char *pass) -{ - uint32_t i; - uint64_t key = 0; - uint8_t *digest; - - enc_table = ss_malloc(256); - dec_table = ss_malloc(256); - - digest = enc_md5((const uint8_t *)pass, strlen(pass), NULL); - - for (i = 0; i < 8; i++) - key += OFFSET_ROL(digest, i); - - for (i = 0; i < 256; ++i) - enc_table[i] = i; - for (i = 1; i < 1024; ++i) - merge_sort(enc_table, 256, i, key); - for (i = 0; i < 256; ++i) - // gen decrypt table from encrypt table - dec_table[enc_table[i]] = i; -} - -int -cipher_iv_size(const cipher_t *cipher) -{ -#if defined(USE_CRYPTO_OPENSSL) - if (cipher->info == NULL) - return cipher->iv_len; - else - return EVP_CIPHER_iv_length(cipher->info); -#elif defined(USE_CRYPTO_POLARSSL) || defined(USE_CRYPTO_MBEDTLS) - if (cipher == NULL) { - return 0; - } - return cipher->info->iv_size; -#endif -} - -int -cipher_key_size(const cipher_t *cipher) -{ -#if defined(USE_CRYPTO_OPENSSL) - if (cipher->info == NULL) - return cipher->key_len; - else - return EVP_CIPHER_key_length(cipher->info); -#elif defined(USE_CRYPTO_POLARSSL) - if (cipher == NULL) { - return 0; - } - /* Override PolarSSL 32 bit default key size with sane 128 bit default */ - if (cipher->info->base != NULL && POLARSSL_CIPHER_ID_BLOWFISH == - cipher->info->base->cipher) { - return 128 / 8; - } - return cipher->info->key_length / 8; -#elif defined(USE_CRYPTO_MBEDTLS) - /* - * Semi-API changes (technically public, morally private) - * Renamed a few headers to include _internal in the name. Those headers are - * not supposed to be included by users. - * Changed md_info_t into an opaque structure (use md_get_xxx() accessors). - * Changed pk_info_t into an opaque structure. - * Changed cipher_base_t into an opaque structure. - */ - if (cipher == NULL) { - return 0; - } - /* From Version 1.2.7 released 2013-04-13 Default Blowfish keysize is now 128-bits */ - return cipher->info->key_bitlen / 8; -#endif -} - -void -bytes_to_key_with_size(const char *pass, size_t len, uint8_t *md, size_t md_size) -{ - uint8_t result[128]; - enc_md5((const unsigned char *)pass, len, result); - memcpy(md, result, 16); - int i = 16; - for (; i < md_size; i += 16) { - memcpy(result + 16, pass, len); - enc_md5(result, 16 + len, result); - memcpy(md + i, result, 16); - } -} - -int -bytes_to_key(const cipher_t *cipher, const digest_type_t *md, - const uint8_t *pass, uint8_t *key) -{ - size_t datal; - datal = strlen((const char *)pass); - -#if defined(USE_CRYPTO_OPENSSL) - - MD5_CTX c; - unsigned char md_buf[MAX_MD_SIZE]; - int nkey; - int addmd; - unsigned int i, j, mds; - - mds = 16; - nkey = cipher_key_size(cipher); - if (pass == NULL) - return nkey; - memset(&c, 0, sizeof(MD5_CTX)); - - for (j = 0, addmd = 0; j < nkey; addmd++) { - MD5_Init(&c); - if (addmd) { - MD5_Update(&c, md_buf, mds); - } - MD5_Update(&c, pass, datal); - MD5_Final(md_buf, &c); - - for (i = 0; i < mds; i++, j++) { - if (j >= nkey) - break; - key[j] = md_buf[i]; - } - } - - return nkey; - -#elif defined(USE_CRYPTO_POLARSSL) - md_context_t c; - unsigned char md_buf[MAX_MD_SIZE]; - int nkey; - int addmd; - unsigned int i, j, mds; - - nkey = cipher_key_size(cipher); - mds = md_get_size(md); - memset(&c, 0, sizeof(md_context_t)); - - if (pass == NULL) - return nkey; - if (md_init_ctx(&c, md)) - return 0; - - for (j = 0, addmd = 0; j < nkey; addmd++) { - md_starts(&c); - if (addmd) { - md_update(&c, md_buf, mds); - } - md_update(&c, pass, datal); - md_finish(&c, md_buf); - - for (i = 0; i < mds; i++, j++) { - if (j >= nkey) - break; - key[j] = md_buf[i]; - } - } - - md_free_ctx(&c); - return nkey; - -#elif defined(USE_CRYPTO_MBEDTLS) - - mbedtls_md_context_t c; - unsigned char md_buf[MAX_MD_SIZE]; - int nkey; - int addmd; - unsigned int i, j, mds; - - nkey = cipher_key_size(cipher); - mds = mbedtls_md_get_size(md); - memset(&c, 0, sizeof(mbedtls_md_context_t)); - - if (pass == NULL) - return nkey; - if (mbedtls_md_setup(&c, md, 1)) - return 0; - - for (j = 0, addmd = 0; j < nkey; addmd++) { - mbedtls_md_starts(&c); - if (addmd) { - mbedtls_md_update(&c, md_buf, mds); - } - mbedtls_md_update(&c, pass, datal); - mbedtls_md_finish(&c, &(md_buf[0])); - - for (i = 0; i < mds; i++, j++) { - if (j >= nkey) - break; - key[j] = md_buf[i]; - } - } - - mbedtls_md_free(&c); - return nkey; -#endif -} - -int -rand_bytes(uint8_t *output, int len) -{ - randombytes_buf(output, len); - // always return success - return 0; -} - -const cipher_kt_t * -get_cipher_type(int method) -{ - if (method <= TABLE || method >= CIPHER_NUM) { - LOGE("get_cipher_type(): Illegal method"); - return NULL; - } - - if (method == RC4_MD5 || method == RC4_MD5_6) { - method = RC4; - } - - if (method >= SALSA20) { - return NULL; - } - - const char *ciphername = supported_ciphers[method]; -#if defined(USE_CRYPTO_OPENSSL) - return EVP_get_cipherbyname(ciphername); -#elif defined(USE_CRYPTO_POLARSSL) - const char *polarname = supported_ciphers_polarssl[method]; - if (strcmp(polarname, CIPHER_UNSUPPORTED) == 0) { - LOGE("Cipher %s currently is not supported by PolarSSL library", - ciphername); - return NULL; - } - return cipher_info_from_string(polarname); -#elif defined(USE_CRYPTO_MBEDTLS) - const char *mbedtlsname = supported_ciphers_mbedtls[method]; - if (strcmp(mbedtlsname, CIPHER_UNSUPPORTED) == 0) { - LOGE("Cipher %s currently is not supported by mbed TLS library", - ciphername); - return NULL; - } - return mbedtls_cipher_info_from_string(mbedtlsname); -#endif -} - -const digest_type_t * -get_digest_type(const char *digest) -{ - if (digest == NULL) { - LOGE("get_digest_type(): Digest name is null"); - return NULL; - } - -#if defined(USE_CRYPTO_OPENSSL) - return EVP_get_digestbyname(digest); -#elif defined(USE_CRYPTO_POLARSSL) - return md_info_from_string(digest); -#elif defined(USE_CRYPTO_MBEDTLS) - return mbedtls_md_info_from_string(digest); -#endif -} - -void -cipher_context_init(cipher_ctx_t *ctx, int method, int enc) -{ - if (method <= TABLE || method >= CIPHER_NUM) { - LOGE("cipher_context_init(): Illegal method"); - return; - } - - if (method >= SALSA20) { - enc_iv_len = supported_ciphers_iv_size[method]; - return; - } - - const char *ciphername = supported_ciphers[method]; -#if defined(USE_CRYPTO_APPLECC) - cipher_cc_t *cc = &ctx->cc; - cc->cryptor = NULL; - cc->cipher = supported_ciphers_applecc[method]; - if (cc->cipher == kCCAlgorithmInvalid) { - cc->valid = kCCContextInvalid; - } else { - cc->valid = kCCContextValid; - if (cc->cipher == kCCAlgorithmRC4) { - cc->mode = supported_modes_applecc[method]; - cc->padding = ccNoPadding; - } else { - cc->mode = supported_modes_applecc[method]; - if (cc->mode == kCCModeCTR) { - cc->padding = ccNoPadding; - } else { - cc->padding = ccPKCS7Padding; - } - } - return; - } -#endif - - const cipher_kt_t *cipher = get_cipher_type(method); - -#if defined(USE_CRYPTO_OPENSSL) - ctx->evp = EVP_CIPHER_CTX_new(); - cipher_evp_t *evp = ctx->evp; - - if (cipher == NULL) { - LOGE("Cipher %s not found in OpenSSL library", ciphername); - FATAL("Cannot initialize cipher"); - } - if (!EVP_CipherInit_ex(evp, cipher, NULL, NULL, NULL, enc)) { - LOGE("Cannot initialize cipher %s", ciphername); - exit(EXIT_FAILURE); - } - if (!EVP_CIPHER_CTX_set_key_length(evp, enc_key_len)) { - EVP_CIPHER_CTX_cleanup(evp); - LOGE("Invalid key length: %d", enc_key_len); - exit(EXIT_FAILURE); - } - if (method > RC4_MD5) { - EVP_CIPHER_CTX_set_padding(evp, 1); - } -#elif defined(USE_CRYPTO_POLARSSL) - ctx->evp = (cipher_evp_t *)ss_malloc(sizeof(cipher_evp_t)); - cipher_evp_t *evp = ctx->evp; - - if (cipher == NULL) { - LOGE("Cipher %s not found in PolarSSL library", ciphername); - FATAL("Cannot initialize PolarSSL cipher"); - } - if (cipher_init_ctx(evp, cipher) != 0) { - FATAL("Cannot initialize PolarSSL cipher context"); - } -#elif defined(USE_CRYPTO_MBEDTLS) - ctx->evp = (cipher_evp_t *)ss_malloc(sizeof(cipher_evp_t)); - cipher_evp_t *evp = ctx->evp; - - if (cipher == NULL) { - LOGE("Cipher %s not found in mbed TLS library", ciphername); - FATAL("Cannot initialize mbed TLS cipher"); - } - mbedtls_cipher_init(evp); - if (mbedtls_cipher_setup(evp, cipher) != 0) { - FATAL("Cannot initialize mbed TLS cipher context"); - } -#endif -} - -void -cipher_context_set_iv(cipher_ctx_t *ctx, uint8_t *iv, size_t iv_len, - int enc) -{ - const unsigned char *true_key; - - if (iv == NULL) { - LOGE("cipher_context_set_iv(): IV is null"); - return; - } - - if (!enc) { - memcpy(ctx->iv, iv, iv_len); - } - - if (enc_method >= SALSA20) { - return; - } - - if (enc_method == RC4_MD5 || enc_method == RC4_MD5_6) { - unsigned char key_iv[32]; - memcpy(key_iv, enc_key, 16); - memcpy(key_iv + 16, iv, iv_len); - true_key = enc_md5(key_iv, 16 + iv_len, NULL); - iv_len = 0; - } else { - true_key = enc_key; - } - -#ifdef USE_CRYPTO_APPLECC - cipher_cc_t *cc = &ctx->cc; - if (cc->valid == kCCContextValid) { - memcpy(cc->iv, iv, iv_len); - memcpy(cc->key, true_key, enc_key_len); - cc->iv_len = iv_len; - cc->key_len = enc_key_len; - cc->encrypt = enc ? kCCEncrypt : kCCDecrypt; - if (cc->cryptor != NULL) { - CCCryptorRelease(cc->cryptor); - cc->cryptor = NULL; - } - - CCCryptorStatus ret; - ret = CCCryptorCreateWithMode( - cc->encrypt, - cc->mode, - cc->cipher, - cc->padding, - cc->iv, cc->key, cc->key_len, - NULL, 0, 0, kCCModeOptionCTR_BE, - &cc->cryptor); - if (ret != kCCSuccess) { - if (cc->cryptor != NULL) { - CCCryptorRelease(cc->cryptor); - cc->cryptor = NULL; - } - FATAL("Cannot set CommonCrypto key and IV"); - } - return; - } -#endif - - cipher_evp_t *evp = ctx->evp; - if (evp == NULL) { - LOGE("cipher_context_set_iv(): Cipher context is null"); - return; - } -#if defined(USE_CRYPTO_OPENSSL) - if (!EVP_CipherInit_ex(evp, NULL, NULL, true_key, iv, enc)) { - EVP_CIPHER_CTX_cleanup(evp); - FATAL("Cannot set key and IV"); - } -#elif defined(USE_CRYPTO_POLARSSL) - // XXX: PolarSSL 1.3.11: cipher_free_ctx deprecated, Use cipher_free() instead. - if (cipher_setkey(evp, true_key, enc_key_len * 8, enc) != 0) { - cipher_free_ctx(evp); - FATAL("Cannot set PolarSSL cipher key"); - } -#if POLARSSL_VERSION_NUMBER >= 0x01030000 - if (cipher_set_iv(evp, iv, iv_len) != 0) { - cipher_free_ctx(evp); - FATAL("Cannot set PolarSSL cipher IV"); - } - if (cipher_reset(evp) != 0) { - cipher_free_ctx(evp); - FATAL("Cannot finalize PolarSSL cipher context"); - } -#else - if (cipher_reset(evp, iv) != 0) { - cipher_free_ctx(evp); - FATAL("Cannot set PolarSSL cipher IV"); - } -#endif -#elif defined(USE_CRYPTO_MBEDTLS) - if (mbedtls_cipher_setkey(evp, true_key, enc_key_len * 8, enc) != 0) { - mbedtls_cipher_free(evp); - FATAL("Cannot set mbed TLS cipher key"); - } - - if (mbedtls_cipher_set_iv(evp, iv, iv_len) != 0) { - mbedtls_cipher_free(evp); - FATAL("Cannot set mbed TLS cipher IV"); - } - if (mbedtls_cipher_reset(evp) != 0) { - mbedtls_cipher_free(evp); - FATAL("Cannot finalize mbed TLS cipher context"); - } -#endif - -#ifdef DEBUG - dump("IV", (char *)iv, iv_len); -#endif -} - -void -cipher_context_release(cipher_ctx_t *ctx) -{ - if (enc_method >= SALSA20) { - return; - } - -#ifdef USE_CRYPTO_APPLECC - cipher_cc_t *cc = &ctx->cc; - if (cc->cryptor != NULL) { - CCCryptorRelease(cc->cryptor); - cc->cryptor = NULL; - } - if (cc->valid == kCCContextValid) { - return; - } -#endif - -#if defined(USE_CRYPTO_OPENSSL) - EVP_CIPHER_CTX_free(ctx->evp); -#elif defined(USE_CRYPTO_POLARSSL) -// NOTE: cipher_free_ctx deprecated in PolarSSL 1.3.11 - cipher_free_ctx(ctx->evp); - ss_free(ctx->evp); -#elif defined(USE_CRYPTO_MBEDTLS) -// NOTE: cipher_free_ctx deprecated - mbedtls_cipher_free(ctx->evp); - ss_free(ctx->evp); -#endif -} - -static int -cipher_context_update(cipher_ctx_t *ctx, uint8_t *output, size_t *olen, - const uint8_t *input, size_t ilen) -{ -#ifdef USE_CRYPTO_APPLECC - cipher_cc_t *cc = &ctx->cc; - if (cc->valid == kCCContextValid) { - CCCryptorStatus ret; - ret = CCCryptorUpdate(cc->cryptor, input, ilen, output, - ilen, olen); - return (ret == kCCSuccess) ? 1 : 0; - } -#endif - cipher_evp_t *evp = ctx->evp; -#if defined(USE_CRYPTO_OPENSSL) - int err = 0, tlen = *olen; - err = EVP_CipherUpdate(evp, (uint8_t *)output, &tlen, - (const uint8_t *)input, ilen); - *olen = tlen; - return err; -#elif defined(USE_CRYPTO_POLARSSL) - return !cipher_update(evp, (const uint8_t *)input, ilen, - (uint8_t *)output, olen); -#elif defined(USE_CRYPTO_MBEDTLS) - return !mbedtls_cipher_update(evp, (const uint8_t *)input, ilen, - (uint8_t *)output, olen); -#endif -} -int ss_md5_hmac(char *auth, char *msg, int msg_len, uint8_t *iv) -{ - uint8_t hash[MD5_BYTES]; - uint8_t auth_key[MAX_IV_LENGTH + MAX_KEY_LENGTH]; - memcpy(auth_key, iv, enc_iv_len); - memcpy(auth_key + enc_iv_len, enc_key, enc_key_len); - -#if defined(USE_CRYPTO_OPENSSL) - HMAC(EVP_md5(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash, NULL); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_MD5), auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash); -#else - md5_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash); -#endif - - memcpy(auth, hash, MD5_BYTES); - - return 0; -} - -int ss_md5_hmac_with_key(char *auth, char *msg, int msg_len, uint8_t *auth_key, int key_len) -{ - uint8_t hash[MD5_BYTES]; - -#if defined(USE_CRYPTO_OPENSSL) - HMAC(EVP_md5(), auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash, NULL); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_MD5), auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash); -#else - md5_hmac(auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash); -#endif - - memcpy(auth, hash, MD5_BYTES); - - return 0; -} - -int ss_md5_hash_func(char *auth, char *msg, int msg_len) -{ - uint8_t hash[MD5_BYTES]; - -#if defined(USE_CRYPTO_OPENSSL) - MD5((uint8_t *)msg, msg_len, (uint8_t *)hash); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md(mbedtls_md_info_from_type(MBEDTLS_MD_MD5), (uint8_t *)msg, msg_len, (uint8_t *)hash); -#else - md5((uint8_t *)msg, msg_len, (uint8_t *)hash); -#endif - - memcpy(auth, hash, MD5_BYTES); - - return 0; -} - -int ss_sha1_hmac(char *auth, char *msg, int msg_len, uint8_t *iv) -{ - uint8_t hash[SHA1_BYTES]; - uint8_t auth_key[MAX_IV_LENGTH + MAX_KEY_LENGTH]; - memcpy(auth_key, iv, enc_iv_len); - memcpy(auth_key + enc_iv_len, enc_key, enc_key_len); - -#if defined(USE_CRYPTO_OPENSSL) - HMAC(EVP_sha1(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash, NULL); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash); -#else - sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash); -#endif - - memcpy(auth, hash, SHA1_BYTES); - - return 0; -} - -int ss_sha1_hmac_with_key(char *auth, char *msg, int msg_len, uint8_t *auth_key, int key_len) -{ - uint8_t hash[SHA1_BYTES]; - -#if defined(USE_CRYPTO_OPENSSL) - HMAC(EVP_sha1(), auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash, NULL); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash); -#else - sha1_hmac(auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash); -#endif - - memcpy(auth, hash, SHA1_BYTES); - - return 0; -} - -int ss_sha1_hash_func(char *auth, char *msg, int msg_len) -{ - uint8_t hash[SHA1_BYTES]; -#if defined(USE_CRYPTO_OPENSSL) - SHA1((uint8_t *)msg, msg_len, (uint8_t *)hash); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md(mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), (uint8_t *)msg, msg_len, (uint8_t *)hash); -#else - sha1((uint8_t *)msg, msg_len, (uint8_t *)hash); -#endif - - memcpy(auth, hash, SHA1_BYTES); - - return 0; -} - -int ss_aes_128_cbc(char *encrypt, char *out_data, char *key) -{ - unsigned char iv[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - -#if defined(USE_CRYPTO_OPENSSL) - AES_KEY aes; - AES_set_encrypt_key((unsigned char*)key, 128, &aes); - AES_cbc_encrypt((const unsigned char *)encrypt, (unsigned char *)out_data, 16, &aes, iv, AES_ENCRYPT); - -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_aes_context aes; - - unsigned char output[16]; - - mbedtls_aes_setkey_enc( &aes, (unsigned char *)key, 128 ); - mbedtls_aes_crypt_cbc( &aes, MBEDTLS_AES_ENCRYPT, 16, iv, (unsigned char *)encrypt, output ); - - memcpy(out_data, output, 16); -#else - - aes_context aes; - - unsigned char output[16]; - - aes_setkey_enc( &aes, (unsigned char *)key, 128 ); - aes_crypt_cbc( &aes, AES_ENCRYPT, 16, iv, (unsigned char *)encrypt, output ); - - memcpy(out_data, output, 16); -#endif - - return 0; -} - -int ss_onetimeauth(buffer_t *buf, uint8_t *iv, size_t capacity) -{ - uint8_t hash[ONETIMEAUTH_BYTES * 2]; - uint8_t auth_key[MAX_IV_LENGTH + MAX_KEY_LENGTH]; - memcpy(auth_key, iv, enc_iv_len); - memcpy(auth_key + enc_iv_len, enc_key, enc_key_len); - - brealloc(buf, ONETIMEAUTH_BYTES + buf->len, capacity); - -#if defined(USE_CRYPTO_OPENSSL) - HMAC(EVP_sha1(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, buf->len, (uint8_t *)hash, NULL); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md_hmac(mbedtls_md_info_from_type( - MBEDTLS_MD_SHA1), auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, buf->len, - (uint8_t *)hash); -#else - sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, buf->len, (uint8_t *)hash); -#endif - - memcpy(buf->array + buf->len, hash, ONETIMEAUTH_BYTES); - buf->len += ONETIMEAUTH_BYTES; - - return 0; -} - -int -ss_onetimeauth_verify(buffer_t *buf, uint8_t *iv) -{ - uint8_t hash[ONETIMEAUTH_BYTES * 2]; - uint8_t auth_key[MAX_IV_LENGTH + MAX_KEY_LENGTH]; - memcpy(auth_key, iv, enc_iv_len); - memcpy(auth_key + enc_iv_len, enc_key, enc_key_len); - size_t len = buf->len - ONETIMEAUTH_BYTES; - -#if defined(USE_CRYPTO_OPENSSL) - HMAC(EVP_sha1(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, len, hash, NULL); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md_hmac(mbedtls_md_info_from_type( - MBEDTLS_MD_SHA1), auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, len, hash); -#else - sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, len, hash); -#endif - - return safe_memcmp(buf->array + len, hash, ONETIMEAUTH_BYTES); -} - -int -ss_encrypt_all(buffer_t *plain, int method, int auth, size_t capacity) -{ - if (method > TABLE) { - cipher_ctx_t evp; - cipher_context_init(&evp, method, 1); - - size_t iv_len = enc_iv_len; - int err = 1; - - static buffer_t tmp = { 0, 0, 0, NULL }; - brealloc(&tmp, iv_len + plain->len, capacity); - buffer_t *cipher = &tmp; - cipher->len = plain->len; - - uint8_t iv[MAX_IV_LENGTH]; - - rand_bytes(iv, iv_len); - cipher_context_set_iv(&evp, iv, iv_len, 1); - memcpy(cipher->array, iv, iv_len); - - if (auth) { - ss_onetimeauth(plain, iv, capacity); - cipher->len = plain->len; - } - - if (method >= SALSA20) { - crypto_stream_xor_ic((uint8_t *)(cipher->array + iv_len), - (const uint8_t *)plain->array, (uint64_t)(plain->len), - (const uint8_t *)iv, - 0, enc_key, method); - } else { - err = cipher_context_update(&evp, (uint8_t *)(cipher->array + iv_len), - &cipher->len, (const uint8_t *)plain->array, - plain->len); - } - - if (!err) { - bfree(plain); - cipher_context_release(&evp); - return -1; - } - -#ifdef DEBUG - dump("PLAIN", plain->array, plain->len); - dump("CIPHER", cipher->array + iv_len, cipher->len); -#endif - - cipher_context_release(&evp); - - brealloc(plain, iv_len + cipher->len, capacity); - memcpy(plain->array, cipher->array, iv_len + cipher->len); - plain->len = iv_len + cipher->len; - - return 0; - } else { - char *begin = plain->array; - char *ptr = plain->array; - while (ptr < begin + plain->len) { - *ptr = (char)enc_table[(uint8_t)*ptr]; - ptr++; - } - return 0; - } -} - -int -ss_encrypt(buffer_t *plain, enc_ctx_t *ctx, size_t capacity) -{ - if (ctx != NULL) { - static buffer_t tmp = { 0, 0, 0, NULL }; - - int err = 1; - size_t iv_len = 0; - if (!ctx->init) { - iv_len = enc_iv_len; - } - - brealloc(&tmp, iv_len + plain->len, capacity); - buffer_t *cipher = &tmp; - cipher->len = plain->len; - - if (!ctx->init) { - cipher_context_set_iv(&ctx->evp, ctx->evp.iv, iv_len, 1); - memcpy(cipher->array, ctx->evp.iv, iv_len); - ctx->counter = 0; - ctx->init = 1; - } - - if (enc_method >= SALSA20) { - int padding = ctx->counter % SODIUM_BLOCK_SIZE; - brealloc(cipher, iv_len + (padding + cipher->len) * 2, capacity); - if (padding) { - brealloc(plain, plain->len + padding, capacity); - memmove(plain->array + padding, plain->array, plain->len); - sodium_memzero(plain->array, padding); - } - crypto_stream_xor_ic((uint8_t *)(cipher->array + iv_len), - (const uint8_t *)plain->array, - (uint64_t)(plain->len + padding), - (const uint8_t *)ctx->evp.iv, - ctx->counter / SODIUM_BLOCK_SIZE, enc_key, - enc_method); - ctx->counter += plain->len; - if (padding) { - memmove(cipher->array + iv_len, - cipher->array + iv_len + padding, cipher->len); - } - } else { - err = - cipher_context_update(&ctx->evp, - (uint8_t *)(cipher->array + iv_len), - &cipher->len, (const uint8_t *)plain->array, - plain->len); - if (!err) { - return -1; - } - } - -#ifdef DEBUG - dump("PLAIN", plain->array, plain->len); - dump("CIPHER", cipher->array + iv_len, cipher->len); -#endif - - brealloc(plain, iv_len + cipher->len, capacity); - memcpy(plain->array, cipher->array, iv_len + cipher->len); - plain->len = iv_len + cipher->len; - - return 0; - } else { - char *begin = plain->array; - char *ptr = plain->array; - while (ptr < begin + plain->len) { - *ptr = (char)enc_table[(uint8_t)*ptr]; - ptr++; - } - return 0; - } -} - -int -ss_decrypt_all(buffer_t *cipher, int method, int auth, size_t capacity) -{ - if (method > TABLE) { - size_t iv_len = enc_iv_len; - int ret = 1; - - if (cipher->len <= iv_len) { - return -1; - } - - cipher_ctx_t evp; - cipher_context_init(&evp, method, 0); - - static buffer_t tmp = { 0, 0, 0, NULL }; - brealloc(&tmp, cipher->len, capacity); - buffer_t *plain = &tmp; - plain->len = cipher->len - iv_len; - - uint8_t iv[MAX_IV_LENGTH]; - memcpy(iv, cipher->array, iv_len); - cipher_context_set_iv(&evp, iv, iv_len, 0); - - if (method >= SALSA20) { - crypto_stream_xor_ic((uint8_t *)plain->array, - (const uint8_t *)(cipher->array + iv_len), - (uint64_t)(cipher->len - iv_len), - (const uint8_t *)iv, 0, enc_key, method); - } else { - ret = cipher_context_update(&evp, (uint8_t *)plain->array, &plain->len, - (const uint8_t *)(cipher->array + iv_len), - cipher->len - iv_len); - } - - if (auth || (plain->array[0] & ONETIMEAUTH_FLAG)) { - if (plain->len > ONETIMEAUTH_BYTES) { - ret = !ss_onetimeauth_verify(plain, iv); - if (ret) { - plain->len -= ONETIMEAUTH_BYTES; - } - } else { - ret = 0; - } - } - - if (!ret) { - bfree(cipher); - cipher_context_release(&evp); - return -1; - } - -#ifdef DEBUG - dump("PLAIN", plain->array, plain->len); - dump("CIPHER", cipher->array + iv_len, cipher->len - iv_len); -#endif - - cipher_context_release(&evp); - - brealloc(cipher, plain->len, capacity); - memcpy(cipher->array, plain->array, plain->len); - cipher->len = plain->len; - - return 0; - } else { - char *begin = cipher->array; - char *ptr = cipher->array; - while (ptr < begin + cipher->len) { - *ptr = (char)dec_table[(uint8_t)*ptr]; - ptr++; - } - return 0; - } -} - -int -ss_decrypt(buffer_t *cipher, enc_ctx_t *ctx, size_t capacity) -{ - if (ctx != NULL) { - static buffer_t tmp = { 0, 0, 0, NULL }; - - size_t iv_len = 0; - int err = 1; - - brealloc(&tmp, cipher->len, capacity); - buffer_t *plain = &tmp; - plain->len = cipher->len; - - if (!ctx->init) { - uint8_t iv[MAX_IV_LENGTH]; - iv_len = enc_iv_len; - plain->len -= iv_len; - - memcpy(iv, cipher->array, iv_len); - cipher_context_set_iv(&ctx->evp, iv, iv_len, 0); - ctx->counter = 0; - ctx->init = 1; - - if (enc_method > RC4) { - if (cache_key_exist(iv_cache, (char *)iv, iv_len)) { - bfree(cipher); - return -1; - } else { - cache_insert(iv_cache, (char *)iv, iv_len, NULL); - } - } - } - - if (enc_method >= SALSA20) { - int padding = ctx->counter % SODIUM_BLOCK_SIZE; - brealloc(plain, (plain->len + padding) * 2, capacity); - - if (padding) { - brealloc(cipher, cipher->len + padding, capacity); - memmove(cipher->array + iv_len + padding, cipher->array + iv_len, - cipher->len - iv_len); - sodium_memzero(cipher->array + iv_len, padding); - } - crypto_stream_xor_ic((uint8_t *)plain->array, - (const uint8_t *)(cipher->array + iv_len), - (uint64_t)(cipher->len - iv_len + padding), - (const uint8_t *)ctx->evp.iv, - ctx->counter / SODIUM_BLOCK_SIZE, enc_key, - enc_method); - ctx->counter += cipher->len - iv_len; - if (padding) { - memmove(plain->array, plain->array + padding, plain->len); - } - } else { - err = cipher_context_update(&ctx->evp, (uint8_t *)plain->array, &plain->len, - (const uint8_t *)(cipher->array + iv_len), - cipher->len - iv_len); - } - - if (!err) { - bfree(cipher); - return -1; - } - -#ifdef DEBUG - dump("PLAIN", plain->array, plain->len); - dump("CIPHER", cipher->array + iv_len, cipher->len - iv_len); -#endif - - brealloc(cipher, plain->len, capacity); - memcpy(cipher->array, plain->array, plain->len); - cipher->len = plain->len; - - return 0; - } else { - char *begin = cipher->array; - char *ptr = cipher->array; - while (ptr < begin + cipher->len) { - *ptr = (char)dec_table[(uint8_t)*ptr]; - ptr++; - } - return 0; - } -} - -void -enc_ctx_init(int method, enc_ctx_t *ctx, int enc) -{ - sodium_memzero(ctx, sizeof(enc_ctx_t)); - cipher_context_init(&ctx->evp, method, enc); - - if (enc) { - rand_bytes(ctx->evp.iv, enc_iv_len); - } -} - -void -enc_key_init(int method, const char *pass) -{ - if (method <= TABLE || method >= CIPHER_NUM) { - LOGE("enc_key_init(): Illegal method"); - return; - } - - // Initialize cache - cache_create(&iv_cache, 256, NULL); - -#if defined(USE_CRYPTO_OPENSSL) - OpenSSL_add_all_algorithms(); -#else - cipher_kt_t cipher_info; -#endif - - cipher_t cipher; - memset(&cipher, 0, sizeof(cipher_t)); - - // Initialize sodium for random generator - if (sodium_init() == -1) { - FATAL("Failed to initialize sodium"); - } - - if (method == SALSA20 || method == CHACHA20 || method == CHACHA20IETF) { -#if defined(USE_CRYPTO_OPENSSL) - cipher.info = NULL; - cipher.key_len = supported_ciphers_key_size[method]; - cipher.iv_len = supported_ciphers_iv_size[method]; -#endif -#if defined(USE_CRYPTO_POLARSSL) - cipher.info = &cipher_info; - cipher.info->base = NULL; - cipher.info->key_length = supported_ciphers_key_size[method] * 8; - cipher.info->iv_size = supported_ciphers_iv_size[method]; -#endif -#if defined(USE_CRYPTO_MBEDTLS) - // XXX: key_length changed to key_bitlen in mbed TLS 2.0.0 - cipher.info = &cipher_info; - cipher.info->base = NULL; - cipher.info->key_bitlen = supported_ciphers_key_size[method] * 8; - cipher.info->iv_size = supported_ciphers_iv_size[method]; -#endif - } else { - cipher.info = (cipher_kt_t *)get_cipher_type(method); - } - - if (cipher.info == NULL && cipher.key_len == 0) { - do { -#if defined(USE_CRYPTO_POLARSSL) && defined(USE_CRYPTO_APPLECC) - if (supported_ciphers_applecc[method] != kCCAlgorithmInvalid) { - cipher_info.base = NULL; - cipher_info.key_length = supported_ciphers_key_size[method] * 8; - cipher_info.iv_size = supported_ciphers_iv_size[method]; - cipher.info = (cipher_kt_t *)&cipher_info; - break; - } -#endif -#if defined(USE_CRYPTO_MBEDTLS) && defined(USE_CRYPTO_APPLECC) - // XXX: key_length changed to key_bitlen in mbed TLS 2.0.0 - if (supported_ciphers_applecc[method] != kCCAlgorithmInvalid) { - cipher_info.base = NULL; - cipher_info.key_bitlen = supported_ciphers_key_size[method] * 8; - cipher_info.iv_size = supported_ciphers_iv_size[method]; - cipher.info = (cipher_kt_t *)&cipher_info; - break; - } -#endif - LOGE("Cipher %s not found in crypto library", supported_ciphers[method]); - FATAL("Cannot initialize cipher"); - } while (0); - } - - const digest_type_t *md = get_digest_type("MD5"); - if (md == NULL) { - FATAL("MD5 Digest not found in crypto library"); - } - - enc_key_len = bytes_to_key(&cipher, md, (const uint8_t *)pass, enc_key); - - if (enc_key_len == 0) { - FATAL("Cannot generate key and IV"); - } - if (method == RC4_MD5 || method == RC4_MD5_6) { - enc_iv_len = supported_ciphers_iv_size[method]; - } else { - enc_iv_len = cipher_iv_size(&cipher); - } - enc_method = method; -} - -int -enc_init(const char *pass, const char *method) -{ - int m = TABLE; - if (method != NULL) { - for (m = TABLE; m < CIPHER_NUM; m++) - if (strcmp(method, supported_ciphers[m]) == 0) { - break; - } - if (m >= CIPHER_NUM) { - LOGE("Invalid cipher name: %s, use rc4-md5 instead", method); - m = RC4_MD5; - } - } - if (m == TABLE) { - enc_table_init(pass); - } else { - enc_key_init(m, pass); - } - return m; -} - -int -ss_check_hash(buffer_t *buf, chunk_t *chunk, enc_ctx_t *ctx, size_t capacity) -{ - int i, j, k; - ssize_t blen = buf->len; - uint32_t cidx = chunk->idx; - - brealloc(chunk->buf, chunk->len + blen, capacity); - brealloc(buf, chunk->len + blen, capacity); - - for (i = 0, j = 0, k = 0; i < blen; i++) { - chunk->buf->array[cidx++] = buf->array[k++]; - - if (cidx == CLEN_BYTES) { - uint16_t clen = ntohs(*((uint16_t *)chunk->buf->array)); - brealloc(chunk->buf, clen + AUTH_BYTES, capacity); - chunk->len = clen; - } - - if (cidx == chunk->len + AUTH_BYTES) { - // Compare hash - uint8_t hash[ONETIMEAUTH_BYTES * 2]; - uint8_t key[MAX_IV_LENGTH + sizeof(uint32_t)]; - - uint32_t c = htonl(chunk->counter); - memcpy(key, ctx->evp.iv, enc_iv_len); - memcpy(key + enc_iv_len, &c, sizeof(uint32_t)); -#if defined(USE_CRYPTO_OPENSSL) - HMAC(EVP_sha1(), key, enc_iv_len + sizeof(uint32_t), - (uint8_t *)chunk->buf->array + AUTH_BYTES, chunk->len, hash, NULL); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), key, enc_iv_len + sizeof(uint32_t), - (uint8_t *)chunk->buf->array + AUTH_BYTES, chunk->len, hash); -#else - sha1_hmac(key, enc_iv_len + sizeof(uint32_t), - (uint8_t *)chunk->buf->array + AUTH_BYTES, chunk->len, hash); -#endif - - if (safe_memcmp(hash, chunk->buf->array + CLEN_BYTES, ONETIMEAUTH_BYTES) != 0) { - return 0; - } - - // Copy chunk back to buffer - memmove(buf->array + j + chunk->len, buf->array + k, blen - i - 1); - memcpy(buf->array + j, chunk->buf->array + AUTH_BYTES, chunk->len); - - // Reset the base offset - j += chunk->len; - k = j; - cidx = 0; - chunk->counter++; - } - } - - buf->len = j; - chunk->idx = cidx; - return 1; -} - -int -ss_gen_hash(buffer_t *buf, uint32_t *counter, enc_ctx_t *ctx, size_t capacity) -{ - ssize_t blen = buf->len; - uint16_t chunk_len = htons((uint16_t)blen); - uint8_t hash[ONETIMEAUTH_BYTES * 2]; - uint8_t key[MAX_IV_LENGTH + sizeof(uint32_t)]; - uint32_t c = htonl(*counter); - - brealloc(buf, AUTH_BYTES + blen, capacity); - memcpy(key, ctx->evp.iv, enc_iv_len); - memcpy(key + enc_iv_len, &c, sizeof(uint32_t)); -#if defined(USE_CRYPTO_OPENSSL) - HMAC(EVP_sha1(), key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf->array, blen, hash, NULL); -#elif defined(USE_CRYPTO_MBEDTLS) - mbedtls_md_hmac(mbedtls_md_info_from_type( - MBEDTLS_MD_SHA1), key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf->array, blen, hash); -#else - sha1_hmac(key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf->array, blen, hash); -#endif - - memmove(buf->array + AUTH_BYTES, buf->array, blen); - memcpy(buf->array + CLEN_BYTES, hash, ONETIMEAUTH_BYTES); - memcpy(buf->array, &chunk_len, CLEN_BYTES); - - *counter = *counter + 1; - buf->len = blen + AUTH_BYTES; - - return 0; -} diff --git a/shadowsocksr-libev/src/server/encrypt.h b/shadowsocksr-libev/src/server/encrypt.h deleted file mode 100644 index 3bb7940a..00000000 --- a/shadowsocksr-libev/src/server/encrypt.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * encrypt.h - Define the enryptor's interface - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifndef _ENCRYPT_H -#define _ENCRYPT_H - -#ifndef __MINGW32__ -#include -#else - -#ifdef max -#undef max -#endif - -#ifdef min -#undef min -#endif - -#endif - -#include -#include -#include -#include - -#if defined(USE_CRYPTO_OPENSSL) - -#include -#include -#include -typedef EVP_CIPHER cipher_kt_t; -typedef EVP_CIPHER_CTX cipher_evp_t; -typedef EVP_MD digest_type_t; -#define MAX_KEY_LENGTH EVP_MAX_KEY_LENGTH -#define MAX_IV_LENGTH EVP_MAX_IV_LENGTH -#define MAX_MD_SIZE EVP_MAX_MD_SIZE - -#elif defined(USE_CRYPTO_POLARSSL) - -#include -#include -typedef cipher_info_t cipher_kt_t; -typedef cipher_context_t cipher_evp_t; -typedef md_info_t digest_type_t; -#define MAX_KEY_LENGTH 64 -#define MAX_IV_LENGTH POLARSSL_MAX_IV_LENGTH -#define MAX_MD_SIZE POLARSSL_MD_MAX_SIZE - -#elif defined(USE_CRYPTO_MBEDTLS) - -#include -#include -typedef mbedtls_cipher_info_t cipher_kt_t; -typedef mbedtls_cipher_context_t cipher_evp_t; -typedef mbedtls_md_info_t digest_type_t; -#define MAX_KEY_LENGTH 64 -#define MAX_IV_LENGTH MBEDTLS_MAX_IV_LENGTH -#define MAX_MD_SIZE MBEDTLS_MD_MAX_SIZE - -/* we must have MBEDTLS_CIPHER_MODE_CFB defined */ -#if !defined(MBEDTLS_CIPHER_MODE_CFB) -#error Cipher Feedback mode a.k.a CFB not supported by your mbed TLS. -#endif - -#endif - -#ifdef USE_CRYPTO_APPLECC - -#include - -#define kCCAlgorithmInvalid UINT32_MAX -#define kCCContextValid 0 -#define kCCContextInvalid -1 - -typedef struct { - CCCryptorRef cryptor; - int valid; - CCOperation encrypt; - CCAlgorithm cipher; - CCMode mode; - CCPadding padding; - uint8_t iv[MAX_IV_LENGTH]; - uint8_t key[MAX_KEY_LENGTH]; - size_t iv_len; - size_t key_len; -} cipher_cc_t; - -#endif - -typedef struct { - cipher_evp_t *evp; -#ifdef USE_CRYPTO_APPLECC - cipher_cc_t cc; -#endif - uint8_t iv[MAX_IV_LENGTH]; -} cipher_ctx_t; - -typedef struct { - cipher_kt_t *info; - size_t iv_len; - size_t key_len; -} cipher_t; - -#ifdef HAVE_STDINT_H -#include -#elif HAVE_INTTYPES_H -#include -#endif - -#define SODIUM_BLOCK_SIZE 64 - -enum crpher_index { - NONE = -1, - TABLE = 0, - RC4, - RC4_MD5_6, - RC4_MD5, - AES_128_CFB, - AES_192_CFB, - AES_256_CFB, - AES_128_CTR, - AES_192_CTR, - AES_256_CTR, - BF_CFB, - CAMELLIA_128_CFB, - CAMELLIA_192_CFB, - CAMELLIA_256_CFB, - CAST5_CFB, - DES_CFB, - IDEA_CFB, - RC2_CFB, - SEED_CFB, - SALSA20, - CHACHA20, - CHACHA20IETF, - CIPHER_NUM, -}; - -#define ONETIMEAUTH_FLAG 0x10 -#define ADDRTYPE_MASK 0xEF - -#define ONETIMEAUTH_BYTES 10U -#define MD5_BYTES 16U -#define SHA1_BYTES 20U -#define CLEN_BYTES 2U -#define AUTH_BYTES (ONETIMEAUTH_BYTES + CLEN_BYTES) - -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -typedef struct buffer { - size_t idx; - size_t len; - size_t capacity; - char *array; -} buffer_t; - -typedef struct chunk { - uint32_t idx; - uint32_t len; - uint32_t counter; - buffer_t *buf; -} chunk_t; - -typedef struct enc_ctx { - uint8_t init; - uint64_t counter; - cipher_ctx_t evp; -} enc_ctx_t; - -void bytes_to_key_with_size(const char *pass, size_t len, uint8_t *md, size_t md_size); - -int ss_encrypt_all(buffer_t *plaintext, int method, int auth, size_t capacity); -int ss_decrypt_all(buffer_t *ciphertext, int method, int auth, size_t capacity); -int ss_encrypt(buffer_t *plaintext, enc_ctx_t *ctx, size_t capacity); -int ss_decrypt(buffer_t *ciphertext, enc_ctx_t *ctx, size_t capacity); - -void enc_ctx_init(int method, enc_ctx_t *ctx, int enc); -int enc_init(const char *pass, const char *method); -int enc_get_iv_len(void); -uint8_t* enc_get_key(void); -int enc_get_key_len(void); -void cipher_context_release(cipher_ctx_t *evp); -unsigned char *enc_md5(const unsigned char *d, size_t n, unsigned char *md); - -int ss_md5_hmac(char *auth, char *msg, int msg_len, uint8_t *iv); -int ss_md5_hmac_with_key(char *auth, char *msg, int msg_len, uint8_t *auth_key, int key_len); -int ss_md5_hash_func(char *auth, char *msg, int msg_len); -int ss_sha1_hmac(char *auth, char *msg, int msg_len, uint8_t *iv); -int ss_sha1_hmac_with_key(char *auth, char *msg, int msg_len, uint8_t *auth_key, int key_len); -int ss_sha1_hash_func(char *auth, char *msg, int msg_len); -int ss_aes_128_cbc(char *encrypt, char *out_data, char *key); -int ss_onetimeauth(buffer_t *buf, uint8_t *iv, size_t capacity); -int ss_onetimeauth_verify(buffer_t *buf, uint8_t *iv); - -int ss_check_hash(buffer_t *buf, chunk_t *chunk, enc_ctx_t *ctx, size_t capacity); -int ss_gen_hash(buffer_t *buf, uint32_t *counter, enc_ctx_t *ctx, size_t capacity); - -int balloc(buffer_t *ptr, size_t capacity); -int brealloc(buffer_t *ptr, size_t len, size_t capacity); -void bfree(buffer_t *ptr); - -#endif // _ENCRYPT_H diff --git a/shadowsocksr-libev/src/server/http.c b/shadowsocksr-libev/src/server/http.c deleted file mode 100644 index 3bd4a322..00000000 --- a/shadowsocksr-libev/src/server/http.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) 2011 and 2012, Dustin Lundquist - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* malloc() */ -#include /* strncpy() */ -#include /* strncasecmp() */ -#include /* isblank() */ - -#include "http.h" -#include "protocol.h" - -#define SERVER_NAME_LEN 256 - -static int parse_http_header(const char *, size_t, char **); -static int get_header(const char *, const char *, int, char **); -static int next_header(const char **, int *); - -static const protocol_t http_protocol_st = { - .default_port = 80, - .parse_packet = &parse_http_header, -}; -const protocol_t *const http_protocol = &http_protocol_st; - -/* - * Parses a HTTP request for the Host: header - * - * Returns: - * >=0 - length of the hostname and updates *hostname - * caller is responsible for freeing *hostname - * -1 - Incomplete request - * -2 - No Host header included in this request - * -3 - Invalid hostname pointer - * -4 - malloc failure - * < -4 - Invalid HTTP request - * - */ -static int -parse_http_header(const char *data, size_t data_len, char **hostname) -{ - int result, i; - - if (hostname == NULL) - return -3; - - if (data_len == 0) - return -1; - - result = get_header("Host:", data, data_len, hostname); - if (result < 0) - return result; - - /* - * if the user specifies the port in the request, it is included here. - * Host: example.com:80 - * so we trim off port portion - */ - for (i = result - 1; i >= 0; i--) - if ((*hostname)[i] == ':') { - (*hostname)[i] = '\0'; - result = i; - break; - } - - return result; -} - -static int -get_header(const char *header, const char *data, int data_len, char **value) -{ - int len, header_len; - - header_len = strlen(header); - - /* loop through headers stopping at first blank line */ - while ((len = next_header(&data, &data_len)) != 0) - if (len > header_len && strncasecmp(header, data, header_len) == 0) { - /* Eat leading whitespace */ - while (header_len < len && isblank(data[header_len])) - header_len++; - - *value = malloc(len - header_len + 1); - if (*value == NULL) - return -4; - - strncpy(*value, data + header_len, len - header_len); - (*value)[len - header_len] = '\0'; - - return len - header_len; - } - - /* If there is no data left after reading all the headers then we do not - * have a complete HTTP request, there must be a blank line */ - if (data_len == 0) - return -1; - - return -2; -} - -static int -next_header(const char **data, int *len) -{ - int header_len; - - /* perhaps we can optimize this to reuse the value of header_len, rather - * than scanning twice. - * Walk our data stream until the end of the header */ - while (*len > 2 && (*data)[0] != '\r' && (*data)[1] != '\n') { - (*len)--; - (*data)++; - } - - /* advanced past the pair */ - *data += 2; - *len -= 2; - - /* Find the length of the next header */ - header_len = 0; - while (*len > header_len + 1 - && (*data)[header_len] != '\r' - && (*data)[header_len + 1] != '\n') - header_len++; - - return header_len; -} diff --git a/shadowsocksr-libev/src/server/http.h b/shadowsocksr-libev/src/server/http.h deleted file mode 100644 index 914815ae..00000000 --- a/shadowsocksr-libev/src/server/http.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2011 and 2012, Dustin Lundquist - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef HTTP_H -#define HTTP_H - -#include -#include "protocol.h" - -const protocol_t *const http_protocol; - -#endif diff --git a/shadowsocksr-libev/src/server/http_simple.c b/shadowsocksr-libev/src/server/http_simple.c deleted file mode 100644 index c1e34eee..00000000 --- a/shadowsocksr-libev/src/server/http_simple.c +++ /dev/null @@ -1,625 +0,0 @@ - -#include "http_simple.h" - -static char* g_useragent[] = { - "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0", - "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/44.0", - "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/11.10 Chromium/27.0.1453.93 Chrome/27.0.1453.93 Safari/537.36", - "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0", - "Mozilla/5.0 (compatible; WOW64; MSIE 10.0; Windows NT 6.2)", - "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", - "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C)", - "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko", - "Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/BuildID) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36", - "Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3", - "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3", -}; - -static int g_useragent_index = -1; - -typedef struct http_simple_local_data { - int has_sent_header; - int has_recv_header; - char *encode_buffer; - int host_matched; - char *recv_buffer; - int recv_buffer_size; -}http_simple_local_data; - -void http_simple_local_data_init(http_simple_local_data* local) { - local->has_sent_header = 0; - local->has_recv_header = 0; - local->encode_buffer = NULL; - - local->recv_buffer = malloc(0); - local->recv_buffer_size = 0; - - local->host_matched = 0; - - if (g_useragent_index == -1) { - g_useragent_index = xorshift128plus() % (sizeof(g_useragent) / sizeof(*g_useragent)); - } -} - -obfs * http_simple_new_obfs() { - obfs * self = new_obfs(); - self->l_data = malloc(sizeof(http_simple_local_data)); - http_simple_local_data_init((http_simple_local_data*)self->l_data); - return self; -} - -void http_simple_dispose(obfs *self) { - http_simple_local_data *local = (http_simple_local_data*)self->l_data; - if (local->encode_buffer != NULL) { - free(local->encode_buffer); - local->encode_buffer = NULL; - } - free(local); - dispose_obfs(self); -} - -char http_simple_hex(char c) { - if (c < 10) return c + '0'; - return c - 10 + 'a'; -} - -int get_data_from_http_header(char *data, char **outdata) { - char *delim = "\r\n"; - char *delim_hex = "%"; - int outlength = 0; - - char *buf = *outdata; - char *p_line; - p_line = strtok(data, delim); - - //while(p_line) - { - char *p_hex; - - p_hex = strtok(p_line, delim_hex); - - while((p_hex = strtok(NULL, delim_hex))) - { - char hex = 0; - - if(strlen(p_hex) <= 0) - { - continue; - } - - if(strlen(p_hex) > 2) - { - char *c_hex = (char*)malloc(2); - memcpy(c_hex, p_hex, 2); - hex = (char)strtol(c_hex, NULL, 16); - free(c_hex); - } - else - { - hex = (char)strtol(p_hex, NULL, 16); - } - - outlength += 1; - buf = (char*)realloc(buf, outlength); - buf[outlength - 1] = hex; - } - - //p_line = strtok(p_line, delim); - } - return outlength; -} - -void get_host_from_http_header(char *data, char **host) { - char* data_begin = strstr(data, "Host: "); - - if(data_begin == NULL) - { - return; - } - - data_begin += 6; - char* data_end = strstr(data_begin, "\r\n"); - char* data_end_port = strstr(data_begin, ":"); - - int host_length = 0; - - if(data_end_port != NULL) - { - host_length = data_end_port - data_begin; - } - else - { - host_length = data_end - data_begin; - } - - if(host_length <= 0) - { - return; - } - - memset(*host, 0x00, 1024); - memcpy(*host, data_begin, host_length); -} - -void http_simple_encode_head(http_simple_local_data *local, char *data, int datalength) { - if (local->encode_buffer == NULL) { - local->encode_buffer = (char*)malloc(datalength * 3 + 1); - } - int pos = 0; - for (; pos < datalength; ++pos) { - local->encode_buffer[pos * 3] = '%'; - local->encode_buffer[pos * 3 + 1] = http_simple_hex(((unsigned char)data[pos] >> 4)); - local->encode_buffer[pos * 3 + 2] = http_simple_hex(data[pos] & 0xF); - } - local->encode_buffer[pos * 3] = 0; -} - -int http_simple_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity) { - char *encryptdata = *pencryptdata; - http_simple_local_data *local = (http_simple_local_data*)self->l_data; - if (local->has_sent_header) { - return datalength; - } - char hosts[1024]; - char * phost[128]; - int host_num = 0; - int pos; - char hostport[128]; - int head_size = self->server.head_len + (xorshift128plus() & 0x3F); - int outlength; - char * out_buffer = (char*)malloc(datalength + 2048); - char * body_buffer = NULL; - if (head_size > datalength) - head_size = datalength; - http_simple_encode_head(local, encryptdata, head_size); - if (self->server.param && strlen(self->server.param) == 0) - self->server.param = NULL; - strncpy(hosts, self->server.param ? self->server.param : self->server.host, sizeof hosts); - phost[host_num++] = hosts; - for (pos = 0; hosts[pos]; ++pos) { - if (hosts[pos] == ',') { - phost[host_num++] = &hosts[pos + 1]; - hosts[pos] = 0; - } else if (hosts[pos] == '#') { - char * body_pointer = &hosts[pos + 1]; - char * p; - int trans_char = 0; - p = body_buffer = (char*)malloc(2048); - for ( ; *body_pointer; ++body_pointer) { - if (*body_pointer == '\\') { - trans_char = 1; - continue; - } else if (*body_pointer == '\n') { - *p = '\r'; - *++p = '\n'; - continue; - } - if (trans_char) { - if (*body_pointer == '\\' ) { - *p = '\\'; - } else if (*body_pointer == 'n' ) { - *p = '\r'; - *++p = '\n'; - } else { - *p = '\\'; - *p = *body_pointer; - } - trans_char = 0; - } else { - *p = *body_pointer; - } - ++p; - } - *p = 0; - hosts[pos] = 0; - break; - } - } - host_num = xorshift128plus() % host_num; - if (self->server.port == 80) - sprintf(hostport, "%s", phost[host_num]); - else - sprintf(hostport, "%s:%d", phost[host_num], self->server.port); - if (body_buffer) { - sprintf(out_buffer, - "GET /%s HTTP/1.1\r\n" - "Host: %s\r\n" - "%s\r\n\r\n", - local->encode_buffer, - hostport, - body_buffer); - } else { - sprintf(out_buffer, - "GET /%s HTTP/1.1\r\n" - "Host: %s\r\n" - "User-Agent: %s\r\n" - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" - "Accept-Language: en-US,en;q=0.8\r\n" - "Accept-Encoding: gzip, deflate\r\n" - "DNT: 1\r\n" - "Connection: keep-alive\r\n" - "\r\n", - local->encode_buffer, - hostport, - g_useragent[g_useragent_index] - ); - } - //LOGI("http header: %s", out_buffer); - outlength = strlen(out_buffer); - memmove(out_buffer + outlength, encryptdata + head_size, datalength - head_size); - outlength += datalength - head_size; - local->has_sent_header = 1; - if (*capacity < outlength) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = outlength * 2); - encryptdata = *pencryptdata; - } - memmove(encryptdata, out_buffer, outlength); - free(out_buffer); - if (body_buffer != NULL) - free(body_buffer); - if (local->encode_buffer != NULL) { - free(local->encode_buffer); - local->encode_buffer = NULL; - } - return outlength; -} - -int http_simple_server_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity) { - char *encryptdata = *pencryptdata; - http_simple_local_data *local = (http_simple_local_data*)self->l_data; - if (local->has_sent_header) { - return datalength; - } - int outlength; - char * out_buffer = (char*)malloc(datalength + 2048); - - time_t now; - struct tm *tm_now; - char datetime[200]; - - time(&now); - tm_now = localtime(&now); - strftime(datetime, 200, "%a, %d %b %Y %H:%M:%S GMT", tm_now); - - sprintf(out_buffer, - "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nContent-Encoding: gzip\r\nContent-Type: text/html\r\nDate: " - "%s" - "\r\nServer: nginx\r\nVary: Accept-Encoding\r\n\r\n", - datetime); - - outlength = strlen(out_buffer); - memmove(out_buffer + outlength, encryptdata, datalength); - outlength += datalength; - - local->has_sent_header = 1; - if (*capacity < outlength) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = outlength * 2); - encryptdata = *pencryptdata; - } - memmove(encryptdata, out_buffer, outlength); - free(out_buffer); - return outlength; -} - -int http_simple_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback) { - char *encryptdata = *pencryptdata; - http_simple_local_data *local = (http_simple_local_data*)self->l_data; - *needsendback = 0; - if (local->has_recv_header) { - return datalength; - } - char* data_begin = strstr(encryptdata, "\r\n\r\n"); - if (data_begin) { - int outlength; - data_begin += 4; - local->has_recv_header = 1; - outlength = datalength - (data_begin - encryptdata); - memmove(encryptdata, data_begin, outlength); - return outlength; - } else { - return 0; - } -} - -int http_simple_server_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback) { - char *encryptdata = *pencryptdata; - http_simple_local_data *local = (http_simple_local_data*)self->l_data; - *needsendback = 0; - if (local->has_recv_header) { - return datalength; - } - - if(datalength != 0) - { - local->recv_buffer = (char*)realloc(local->recv_buffer, local->recv_buffer_size + datalength); - memmove(local->recv_buffer + local->recv_buffer_size, encryptdata, datalength); - local->recv_buffer_size += datalength; - - int outlength = local->recv_buffer_size; - if (*capacity < outlength) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = outlength * 2); - encryptdata = *pencryptdata; - } - memcpy(encryptdata, local->recv_buffer, local->recv_buffer_size); - } - - if(local->recv_buffer_size > 10) - { - if(strstr(local->recv_buffer, "GET /") == local->recv_buffer || strstr(local->recv_buffer, "POST /") == local->recv_buffer) - { - if(local->recv_buffer_size > 65536) - { - free(local->recv_buffer); - local->recv_buffer = malloc(0); - local->recv_buffer_size = 0; - local->has_sent_header = 1; - local->has_recv_header = 1; - LOGE("http_simple: over size"); - return -1; - } - } - else - { - free(local->recv_buffer); - local->recv_buffer = malloc(0); - local->recv_buffer_size = 0; - local->has_sent_header = 1; - local->has_recv_header = 1; - LOGE("http_simple: not match begin"); - return -1; - } - } - else - { - LOGE("http_simple: too short"); - local->has_sent_header = 1; - local->has_recv_header = 1; - return -1; - } - - char* data_begin = strstr(encryptdata, "\r\n\r\n"); - if (data_begin) { - int outlength; - char *ret_buf = (char*)malloc(*capacity); - memset(ret_buf, 0x00, *capacity); - int ret_buf_len = 0; - ret_buf_len = get_data_from_http_header(encryptdata, &ret_buf); - - if (self->server.param && strlen(self->server.param) == 0) - { - self->server.param = NULL; - } - else - { - if(local->host_matched == 0) - { - char *host = (char*)malloc(1024); - get_host_from_http_header(local->recv_buffer, &host); - char hosts[1024]; - char * phost[128]; - int host_num = 0; - int pos = 0; - int is_match = 0; - char * body_buffer = NULL; - strncpy(hosts, self->server.param, sizeof hosts); - phost[host_num++] = hosts; - - for (pos = 0; hosts[pos]; ++pos) { - if (hosts[pos] == ',') { - phost[host_num++] = &hosts[pos + 1]; - hosts[pos] = 0; - } else if (hosts[pos] == '#') { - char * body_pointer = &hosts[pos + 1]; - char * p; - int trans_char = 0; - p = body_buffer = (char*)malloc(2048); - for ( ; *body_pointer; ++body_pointer) { - if (*body_pointer == '\\') { - trans_char = 1; - continue; - } else if (*body_pointer == '\n') { - *p = '\r'; - *++p = '\n'; - continue; - } - if (trans_char) { - if (*body_pointer == '\\' ) { - *p = '\\'; - } else if (*body_pointer == 'n' ) { - *p = '\r'; - *++p = '\n'; - } else { - *p = '\\'; - *p = *body_pointer; - } - trans_char = 0; - } else { - *p = *body_pointer; - } - ++p; - } - *p = 0; - hosts[pos] = 0; - break; - } - } - - - for(pos = 0; pos < host_num; pos++) - { - if(strcmp(phost[pos], host) == 0) - { - is_match = 1; - local->host_matched = 1; - } - } - - if(is_match == 0) - { - free(local->recv_buffer); - local->recv_buffer = malloc(0); - local->recv_buffer_size = 0; - local->has_sent_header = 1; - local->has_recv_header = 1; - LOGE("http_simple: not match host, host: %s", host); - return -1; - } - - free(host); - } - } - - if(ret_buf_len <= 0) - { - return -1; - } - - data_begin += 4; - local->has_recv_header = 1; - - ret_buf = (char*)realloc(ret_buf, ret_buf_len + datalength - (data_begin - encryptdata)); - outlength = ret_buf_len + datalength - (data_begin - encryptdata); - - memcpy(ret_buf + ret_buf_len, data_begin, datalength - (data_begin - encryptdata)); - - if (*capacity < outlength) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = outlength * 2); - encryptdata = *pencryptdata; - } - - memcpy(encryptdata, ret_buf, outlength); - free(ret_buf); - return outlength; - } else { - return 0; - } -} - -void boundary(char result[]) -{ - char *str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - int i,lstr; - char ss[3] = {0}; - lstr = strlen(str); - srand((unsigned int)time((time_t *)NULL)); - for(i = 0; i < 32; ++i) - { - sprintf(ss, "%c", str[(rand()%lstr)]); - strcat(result, ss); - } -} - -int http_post_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity) { - char *encryptdata = *pencryptdata; - http_simple_local_data *local = (http_simple_local_data*)self->l_data; - if (local->has_sent_header) { - return datalength; - } - char hosts[1024]; - char * phost[128]; - int host_num = 0; - int pos; - char hostport[128]; - int head_size = self->server.head_len + (xorshift128plus() & 0x3F); - int outlength; - char * out_buffer = (char*)malloc(datalength + 2048); - char * body_buffer = NULL; - if (head_size > datalength) - head_size = datalength; - http_simple_encode_head(local, encryptdata, head_size); - if (self->server.param && strlen(self->server.param) == 0) - self->server.param = NULL; - strncpy(hosts, self->server.param ? self->server.param : self->server.host, sizeof hosts); - phost[host_num++] = hosts; - for (pos = 0; hosts[pos]; ++pos) { - if (hosts[pos] == ',') { - phost[host_num++] = &hosts[pos + 1]; - hosts[pos] = 0; - } else if (hosts[pos] == '#') { - char * body_pointer = &hosts[pos + 1]; - char * p; - int trans_char = 0; - p = body_buffer = (char*)malloc(2048); - for ( ; *body_pointer; ++body_pointer) { - if (*body_pointer == '\\') { - trans_char = 1; - continue; - } else if (*body_pointer == '\n') { - *p = '\r'; - *++p = '\n'; - continue; - } - if (trans_char) { - if (*body_pointer == '\\' ) { - *p = '\\'; - } else if (*body_pointer == 'n' ) { - *p = '\r'; - *++p = '\n'; - } else { - *p = '\\'; - *p = *body_pointer; - } - trans_char = 0; - } else { - *p = *body_pointer; - } - ++p; - } - *p = 0; - hosts[pos] = 0; - break; - } - } - host_num = xorshift128plus() % host_num; - if (self->server.port == 80) - sprintf(hostport, "%s", phost[host_num]); - else - sprintf(hostport, "%s:%d", phost[host_num], self->server.port); - if (body_buffer) { - sprintf(out_buffer, - "POST /%s HTTP/1.1\r\n" - "Host: %s\r\n" - "%s\r\n\r\n", - local->encode_buffer, - hostport, - body_buffer); - } else { - char result[33] = {0}; - boundary(result); - sprintf(out_buffer, - "POST /%s HTTP/1.1\r\n" - "Host: %s\r\n" - "User-Agent: %s\r\n" - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" - "Accept-Language: en-US,en;q=0.8\r\n" - "Accept-Encoding: gzip, deflate\r\n" - "Content-Type: multipart/form-data; boundary=%s\r\n" - "DNT: 1\r\n" - "Connection: keep-alive\r\n" - "\r\n", - local->encode_buffer, - hostport, - g_useragent[g_useragent_index], - result - ); - } - //LOGI("http header: %s", out_buffer); - outlength = strlen(out_buffer); - memmove(out_buffer + outlength, encryptdata + head_size, datalength - head_size); - outlength += datalength - head_size; - local->has_sent_header = 1; - if (*capacity < outlength) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = outlength * 2); - encryptdata = *pencryptdata; - } - memmove(encryptdata, out_buffer, outlength); - free(out_buffer); - if (body_buffer != NULL) - free(body_buffer); - if (local->encode_buffer != NULL) { - free(local->encode_buffer); - local->encode_buffer = NULL; - } - return outlength; -} diff --git a/shadowsocksr-libev/src/server/http_simple.h b/shadowsocksr-libev/src/server/http_simple.h deleted file mode 100644 index cce24cc1..00000000 --- a/shadowsocksr-libev/src/server/http_simple.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * http_simple.h - Define shadowsocksR server's buffers and callbacks - * - * Copyright (C) 2015 - 2016, Break Wa11 - */ - -#ifndef _HTTP_SIMPLE_H -#define _HTTP_SIMPLE_H - -obfs * http_simple_new_obfs(); -void http_simple_dispose(obfs *self); - -int http_simple_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity); -int http_simple_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback); - -int http_post_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity); - -int http_simple_server_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity); -int http_simple_server_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback); - -#endif // _HTTP_SIMPLE_H diff --git a/shadowsocksr-libev/src/server/jconf.c b/shadowsocksr-libev/src/server/jconf.c deleted file mode 100644 index 494aa5f4..00000000 --- a/shadowsocksr-libev/src/server/jconf.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * jconf.c - Parse the JSON format config file - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#include -#include -#include -#include -#include - -#include "utils.h" -#include "jconf.h" -#include "json.h" -#include "string.h" - -#include - -#define check_json_value_type(value, expected_type, message) \ - do { \ - if ((value)->type != (expected_type)) \ - FATAL((message)); \ - } while(0) - -static char * -to_string(const json_value *value) -{ - if (value->type == json_string) { - return ss_strndup(value->u.string.ptr, value->u.string.length); - } else if (value->type == json_integer) { - return strdup(ss_itoa(value->u.integer)); - } else if (value->type == json_null) { - return "null"; - } else { - LOGE("%d", value->type); - FATAL("Invalid config format."); - } - return 0; -} - -void -free_addr(ss_addr_t *addr) -{ - ss_free(addr->host); - ss_free(addr->port); -} - -void -parse_addr(const char *str, ss_addr_t *addr) -{ - int ipv6 = 0, ret = -1, n = 0; - char *pch; - - struct cork_ip ip; - if (cork_ip_init(&ip, str) != -1) { - addr->host = strdup(str); - addr->port = NULL; - return; - } - - pch = strchr(str, ':'); - while (pch != NULL) { - n++; - ret = pch - str; - pch = strchr(pch + 1, ':'); - } - if (n > 1) { - ipv6 = 1; - if (str[ret - 1] != ']') { - ret = -1; - } - } - - if (ret == -1) { - if (ipv6) { - addr->host = ss_strndup(str + 1, strlen(str) - 2); - } else { - addr->host = strdup(str); - } - addr->port = NULL; - } else { - if (ipv6) { - addr->host = ss_strndup(str + 1, ret - 2); - } else { - addr->host = ss_strndup(str, ret); - } - addr->port = strdup(str + ret + 1); - } -} - -jconf_t * -read_jconf(const char *file) -{ - static jconf_t conf; - - memset(&conf, 0, sizeof(jconf_t)); - - char *buf; - json_value *obj; - - FILE *f = fopen(file, "rb"); - if (f == NULL) { - FATAL("Invalid config path."); - } - - fseek(f, 0, SEEK_END); - long pos = ftell(f); - fseek(f, 0, SEEK_SET); - - if (pos >= MAX_CONF_SIZE) { - FATAL("Too large config file."); - } - - buf = ss_malloc(pos + 1); - if (buf == NULL) { - FATAL("No enough memory."); - } - - int nread = fread(buf, pos, 1, f); - if (!nread) { - FATAL("Failed to read the config file."); - } - fclose(f); - - buf[pos] = '\0'; // end of string - - json_settings settings = { 0UL, 0, NULL, NULL, NULL }; - char error_buf[512]; - obj = json_parse_ex(&settings, buf, pos, error_buf); - - if (obj == NULL) { - FATAL(error_buf); - } - - if (obj->type == json_object) { - unsigned int i, j; - for (i = 0; i < obj->u.object.length; i++) { - char *name = obj->u.object.values[i].name; - json_value *value = obj->u.object.values[i].value; - if (strcmp(name, "server") == 0) { - if (value->type == json_array) { - for (j = 0; j < value->u.array.length; j++) { - if (j >= MAX_REMOTE_NUM) { - break; - } - json_value *v = value->u.array.values[j]; - char *addr_str = to_string(v); - parse_addr(addr_str, conf.remote_addr + j); - ss_free(addr_str); - conf.remote_num = j + 1; - } - } else if (value->type == json_string) { - conf.remote_addr[0].host = to_string(value); - conf.remote_addr[0].port = NULL; - conf.remote_num = 1; - } - } else if (strcmp(name, "port_password") == 0) { - if (value->type == json_object) { - for (j = 0; j < value->u.object.length; j++) { - if (j >= MAX_PORT_NUM) { - break; - } - json_value *v = value->u.object.values[j].value; - if (v->type == json_string) { - conf.port_password[j].port = ss_strndup(value->u.object.values[j].name, - value->u.object.values[j].name_length); - conf.port_password[j].password = to_string(v); - conf.port_password_num = j + 1; - } - } - } - } else if (strcmp(name, "server_port") == 0) { - conf.remote_port = to_string(value); - } else if (strcmp(name, "local_address") == 0) { - conf.local_addr = to_string(value); - } else if (strcmp(name, "local_port") == 0) { - conf.local_port = to_string(value); - } else if (strcmp(name, "password") == 0) { - conf.password = to_string(value); - } else if (strcmp(name, "protocol") == 0) { // SSR - conf.protocol = to_string(value); - } else if (strcmp(name, "protocol_param") == 0) { // SSR - conf.protocol_param = to_string(value); - } else if (strcmp(name, "method") == 0) { - conf.method = to_string(value); - } else if (strcmp(name, "obfs") == 0) { // SSR - conf.obfs = to_string(value); - } else if (strcmp(name, "obfs_param") == 0) { // SSR - conf.obfs_param = to_string(value); - } else if (strcmp(name, "timeout") == 0) { - conf.timeout = to_string(value); - } else if (strcmp(name, "user") == 0) { - conf.user = to_string(value); - } else if (strcmp(name, "fast_open") == 0) { - check_json_value_type(value, json_boolean, - "invalid config file: option 'fast_open' must be a boolean"); - conf.fast_open = value->u.boolean; - } else if (strcmp(name, "auth") == 0) { - check_json_value_type(value, json_boolean, - "invalid config file: option 'auth' must be a boolean"); - conf.auth = value->u.boolean; - } else if (strcmp(name, "nofile") == 0) { - check_json_value_type(value, json_integer, - "invalid config file: option 'nofile' must be an integer"); - conf.nofile = value->u.integer; - } else if (strcmp(name, "nameserver") == 0) { - conf.nameserver = to_string(value); - } else if (strcmp(name, "tunnel_address") == 0) { - conf.tunnel_address = to_string(value); - } else if (strcmp(name, "mode") == 0) { - char *mode_str = to_string(value); - - if (strcmp(mode_str, "tcp_only") == 0) - conf.mode = TCP_ONLY; - else if (strcmp(mode_str, "tcp_and_udp") == 0) - conf.mode = TCP_AND_UDP; - else if (strcmp(mode_str, "udp_only") == 0) - conf.mode = UDP_ONLY; - else - LOGI("ignore unknown mode: %s, use tcp_only as fallback", - mode_str); - ss_free(mode_str); - } else if (strcmp(name, "mtu") == 0) { - check_json_value_type(value, json_integer, - "invalid config file: option 'mtu' must be an integer"); - conf.mtu = value->u.integer; - } else if (strcmp(name, "mptcp") == 0) { - check_json_value_type(value, json_boolean, - "invalid config file: option 'mptcp' must be a boolean"); - conf.mptcp = value->u.boolean; - } else if (strcmp(name, "ipv6_first") == 0) { - check_json_value_type(value, json_boolean, - "invalid config file: option 'ipv6_first' must be a boolean"); - conf.ipv6_first = value->u.boolean; - } - } - } else { - FATAL("Invalid config file"); - } - - ss_free(buf); - json_value_free(obj); - return &conf; -} diff --git a/shadowsocksr-libev/src/server/jconf.h b/shadowsocksr-libev/src/server/jconf.h deleted file mode 100644 index 9a7e5e33..00000000 --- a/shadowsocksr-libev/src/server/jconf.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * jconf.h - Define the config data structure - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifndef _JCONF_H -#define _JCONF_H - -#define MAX_PORT_NUM 1024 -#define MAX_REMOTE_NUM 10 -#define MAX_CONF_SIZE 128 * 1024 -#define MAX_DNS_NUM 4 -#define MAX_CONNECT_TIMEOUT 10 -#define MAX_REQUEST_TIMEOUT 60 -#define MIN_UDP_TIMEOUT 10 - -#define TCP_ONLY 0 -#define TCP_AND_UDP 1 -#define UDP_ONLY 3 - -typedef struct { - char *host; - char *port; -} ss_addr_t; - -typedef struct { - char *port; - char *password; -} ss_port_password_t; - -typedef struct { - int remote_num; - ss_addr_t remote_addr[MAX_REMOTE_NUM]; - int port_password_num; - ss_port_password_t port_password[MAX_PORT_NUM]; - char *remote_port; - char *local_addr; - char *local_port; - char *password; - char *protocol; // SSR - char *protocol_param; // SSR - char *method; - char *obfs; // SSR - char *obfs_param; // SSR - char *timeout; - char *user; - int auth; - int fast_open; - int nofile; - char *nameserver; - char *tunnel_address; - int mode; - int mtu; - int mptcp; - int ipv6_first; -} jconf_t; - -jconf_t *read_jconf(const char *file); -void parse_addr(const char *str, ss_addr_t *addr); -void free_addr(ss_addr_t *addr); - -#endif // _JCONF_H diff --git a/shadowsocksr-libev/src/server/json.c b/shadowsocksr-libev/src/server/json.c deleted file mode 100644 index 18e95ef7..00000000 --- a/shadowsocksr-libev/src/server/json.c +++ /dev/null @@ -1,1002 +0,0 @@ -/* vim: set et ts=3 sw=3 sts=3 ft=c: - * - * Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. - * https://github.com/udp/json-parser - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include "json.h" -#include "utils.h" - -#ifdef _MSC_VER -#ifndef _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_WARNINGS -#endif -#endif - -#ifdef __cplusplus -const struct _json_value json_value_none; /* zero-d by ctor */ -#else -const struct _json_value json_value_none = { NULL, 0, { 0 }, { NULL } }; -#endif - -#include -#include -#include -#include - -typedef unsigned short json_uchar; - -static unsigned char -hex_value(json_char c) -{ - if (isdigit((uint8_t)c)) { - return c - '0'; - } - - switch (c) { - case 'a': - case 'A': - return 0x0A; - case 'b': - case 'B': - return 0x0B; - case 'c': - case 'C': - return 0x0C; - case 'd': - case 'D': - return 0x0D; - case 'e': - case 'E': - return 0x0E; - case 'f': - case 'F': - return 0x0F; - default: - return 0xFF; - } -} - -typedef struct { - unsigned long used_memory; - - unsigned int uint_max; - unsigned long ulong_max; - - json_settings settings; - int first_pass; -} json_state; - -static void * -default_alloc(size_t size, int zero, void *user_data) -{ - return zero ? calloc(1, size) : ss_malloc(size); -} - -static void -default_free(void *ptr, void *user_data) -{ - ss_free(ptr); -} - -static void * -json_alloc(json_state *state, unsigned long size, int zero) -{ - if ((state->ulong_max - state->used_memory) < size) { - return 0; - } - - if (state->settings.max_memory - && (state->used_memory += size) > state->settings.max_memory) { - return 0; - } - - return state->settings.mem_alloc(size, zero, state->settings.user_data); -} - -static int -new_value(json_state *state, json_value **top, json_value **root, - json_value **alloc, json_type type) -{ - json_value *value; - int values_size; - - if (!state->first_pass) { - value = *top = *alloc; - *alloc = (*alloc)->_reserved.next_alloc; - - if (!*root) { - *root = value; - } - - switch (value->type) { - case json_array: - - if (!(value->u.array.values = (json_value **)json_alloc - (state, value->u.array.length * - sizeof(json_value *), 0))) { - return 0; - } - - value->u.array.length = 0; - break; - - case json_object: - - values_size = sizeof(*value->u.object.values) * - value->u.object.length; - - if (!((*(void **)&value->u.object.values) = json_alloc - (state, - values_size + - ((size_t)value->u. - object.values), - 0))) { - return 0; - } - - value->_reserved.object_mem = (*(char **)&value->u.object.values) + - values_size; - - value->u.object.length = 0; - break; - - case json_string: - - if (!(value->u.string.ptr = (json_char *)json_alloc - (state, - (value->u.string.length + - 1) * sizeof(json_char), 0))) { - return 0; - } - - value->u.string.length = 0; - break; - - default: - break; - } - - return 1; - } - - value = (json_value *)json_alloc(state, sizeof(json_value), 1); - - if (!value) { - return 0; - } - - if (!*root) { - *root = value; - } - - value->type = type; - value->parent = *top; - - if (*alloc) { - (*alloc)->_reserved.next_alloc = value; - } - - *alloc = *top = value; - - return 1; -} - -#define e_off \ - ((int)(i - cur_line_begin)) - -#define whitespace \ -case '\n': \ - ++cur_line; cur_line_begin = i; \ -case ' ': \ -case '\t': \ -case '\r' - -#define string_add(b) \ - do { if (!state.first_pass) { string[string_length] = b; \ - } ++string_length; } while (0) - -static const long - flag_next = 1 << 0, - flag_reproc = 1 << 1, - flag_need_comma = 1 << 2, - flag_seek_value = 1 << 3, - flag_escaped = 1 << 4, - flag_string = 1 << 5, - flag_need_colon = 1 << 6, - flag_done = 1 << 7, - flag_num_negative = 1 << 8, - flag_num_zero = 1 << 9, - flag_num_e = 1 << 10, - flag_num_e_got_sign = 1 << 11, - flag_num_e_negative = 1 << 12, - flag_line_comment = 1 << 13, - flag_block_comment = 1 << 14; - -json_value * -json_parse_ex(json_settings *settings, - const json_char *json, - size_t length, - char *error_buf) -{ - json_char error[json_error_max]; - int cur_line; - const json_char *cur_line_begin, *i, *end; - json_value *top, *root, *alloc = 0; - json_state state = { 0UL, 0U, 0UL, { 0UL, 0, NULL, NULL, NULL }, 0 }; - long flags; - long num_digits = 0, num_e = 0; - json_int_t num_fraction = 0; - - /* Skip UTF-8 BOM - */ - if (length >= 3 && ((unsigned char)json[0]) == 0xEF - && ((unsigned char)json[1]) == 0xBB - && ((unsigned char)json[2]) == 0xBF) { - json += 3; - length -= 3; - } - - error[0] = '\0'; - end = (json + length); - - memcpy(&state.settings, settings, sizeof(json_settings)); - - if (!state.settings.mem_alloc) { - state.settings.mem_alloc = default_alloc; - } - - if (!state.settings.mem_free) { - state.settings.mem_free = default_free; - } - - memset(&state.uint_max, 0xFF, sizeof(state.uint_max)); - memset(&state.ulong_max, 0xFF, sizeof(state.ulong_max)); - - state.uint_max -= 8; /* limit of how much can be added before next check */ - state.ulong_max -= 8; - - for (state.first_pass = 1; state.first_pass >= 0; --state.first_pass) { - json_uchar uchar; - unsigned char uc_b1, uc_b2, uc_b3, uc_b4; - json_char *string = 0; - unsigned int string_length = 0; - - top = root = 0; - flags = flag_seek_value; - - cur_line = 1; - cur_line_begin = json; - - for (i = json;; ++i) { - json_char b = (i == end ? 0 : *i); - - if (flags & flag_string) { - if (!b) { - sprintf(error, "Unexpected EOF in string (at %d:%d)", - cur_line, e_off); - goto e_failed; - } - - if (string_length > state.uint_max) { - goto e_overflow; - } - - if (flags & flag_escaped) { - flags &= ~flag_escaped; - - switch (b) { - case 'b': - string_add('\b'); - break; - case 'f': - string_add('\f'); - break; - case 'n': - string_add('\n'); - break; - case 'r': - string_add('\r'); - break; - case 't': - string_add('\t'); - break; - case 'u': - - if (end - i < 4 || - (uc_b1 = hex_value(*++i)) == 0xFF || - (uc_b2 = hex_value(*++i)) == 0xFF - || (uc_b3 = hex_value(*++i)) == 0xFF || - (uc_b4 = hex_value(*++i)) == 0xFF) { - sprintf(error, - "Invalid character value `%c` (at %d:%d)", - b, cur_line, e_off); - goto e_failed; - } - - uc_b1 = uc_b1 * 16 + uc_b2; - uc_b2 = uc_b3 * 16 + uc_b4; - - uchar = ((json_char)uc_b1) * 256 + uc_b2; - - if (sizeof(json_char) >= sizeof(json_uchar) || - (uc_b1 == 0 && uc_b2 <= 0x7F)) { - string_add((json_char)uchar); - break; - } - - if (uchar <= 0x7FF) { - if (state.first_pass) { - string_length += 2; - } else { - string[string_length++] = 0xC0 | - ((uc_b2 & - 0xC0) >> - 6) | - ((uc_b1 & 0x7) << 2); - string[string_length++] = 0x80 | - (uc_b2 & 0x3F); - } - - break; - } - - if (state.first_pass) { - string_length += 3; - } else { - string[string_length++] = 0xE0 | - ((uc_b1 & 0xF0) >> 4); - string[string_length++] = 0x80 | - ((uc_b1 & - 0xF) << - 2) | - ((uc_b2 & 0xC0) >> 6); - string[string_length++] = 0x80 | (uc_b2 & 0x3F); - } - - break; - - default: - string_add(b); - } - - continue; - } - - if (b == '\\') { - flags |= flag_escaped; - continue; - } - - if (b == '"') { - if (!state.first_pass) { - string[string_length] = 0; - } - - flags &= ~flag_string; - string = 0; - - switch (top->type) { - case json_string: - - top->u.string.length = string_length; - flags |= flag_next; - - break; - - case json_object: - - if (state.first_pass) { - (*(json_char **)&top->u.object.values) += - string_length + 1; - } else { - top->u.object.values[top->u.object.length].name - = (json_char *)top->_reserved.object_mem; - - top->u.object.values[top->u.object.length]. - name_length - = string_length; - - (*(json_char **)&top->_reserved.object_mem) += - string_length + 1; - } - - flags |= flag_seek_value | flag_need_colon; - continue; - - default: - break; - } - } else { - string_add(b); - continue; - } - } - - if (state.settings.settings & json_enable_comments) { - if (flags & (flag_line_comment | flag_block_comment)) { - if (flags & flag_line_comment) { - if (b == '\r' || b == '\n' || !b) { - flags &= ~flag_line_comment; - --i; /* so null can be reproc'd */ - } - - continue; - } - - if (flags & flag_block_comment) { - if (!b) { - sprintf(error, - "%d:%d: Unexpected EOF in block comment", - cur_line, e_off); - goto e_failed; - } - - if (b == '*' && i < (end - 1) && i[1] == '/') { - flags &= ~flag_block_comment; - ++i; /* skip closing sequence */ - } - - continue; - } - } else if (b == '/') { - if (!(flags & (flag_seek_value | flag_done)) && top->type != - json_object) { - sprintf(error, "%d:%d: Comment not allowed here", - cur_line, e_off); - goto e_failed; - } - - if (++i == end) { - sprintf(error, "%d:%d: EOF unexpected", cur_line, - e_off); - goto e_failed; - } - - switch (b = *i) { - case '/': - flags |= flag_line_comment; - continue; - - case '*': - flags |= flag_block_comment; - continue; - - default: - sprintf(error, - "%d:%d: Unexpected `%c` in comment opening sequence", cur_line, e_off, - b); - goto e_failed; - } - } - } - - if (flags & flag_done) { - if (!b) { - break; - } - - switch (b) { -whitespace: - continue; - - default: - sprintf(error, "%d:%d: Trailing garbage: `%c`", cur_line, - e_off, b); - goto e_failed; - } - } - - if (flags & flag_seek_value) { - switch (b) { -whitespace: - continue; - - case ']': - - if (top->type == json_array) { - flags = - (flags & - ~(flag_need_comma | flag_seek_value)) | flag_next; - } else { - sprintf(error, "%d:%d: Unexpected ]", cur_line, e_off); - goto e_failed; - } - - break; - - default: - - if (flags & flag_need_comma) { - if (b == ',') { - flags &= ~flag_need_comma; - continue; - } else { - sprintf(error, "%d:%d: Expected , before %c", - cur_line, e_off, b); - goto e_failed; - } - } - - if (flags & flag_need_colon) { - if (b == ':') { - flags &= ~flag_need_colon; - continue; - } else { - sprintf(error, "%d:%d: Expected : before %c", - cur_line, e_off, b); - goto e_failed; - } - } - - flags &= ~flag_seek_value; - - switch (b) { - case '{': - - if (!new_value(&state, &top, &root, &alloc, - json_object)) { - goto e_alloc_failure; - } - - continue; - - case '[': - - if (!new_value(&state, &top, &root, &alloc, - json_array)) { - goto e_alloc_failure; - } - - flags |= flag_seek_value; - continue; - - case '"': - - if (!new_value(&state, &top, &root, &alloc, - json_string)) { - goto e_alloc_failure; - } - - flags |= flag_string; - - string = top->u.string.ptr; - string_length = 0; - - continue; - - case 't': - - if ((end - i) < 3 || *(++i) != 'r' || *(++i) != 'u' || - *(++i) != 'e') { - goto e_unknown_value; - } - - if (!new_value(&state, &top, &root, &alloc, - json_boolean)) { - goto e_alloc_failure; - } - - top->u.boolean = 1; - - flags |= flag_next; - break; - - case 'f': - - if ((end - i) < 4 || *(++i) != 'a' || *(++i) != 'l' || - *(++i) != 's' || *(++i) != 'e') { - goto e_unknown_value; - } - - if (!new_value(&state, &top, &root, &alloc, - json_boolean)) { - goto e_alloc_failure; - } - - flags |= flag_next; - break; - - case 'n': - - if ((end - i) < 3 || *(++i) != 'u' || *(++i) != 'l' || - *(++i) != 'l') { - goto e_unknown_value; - } - - if (!new_value(&state, &top, &root, &alloc, - json_null)) { - goto e_alloc_failure; - } - - flags |= flag_next; - break; - - default: - - if (isdigit((uint8_t)b) || b == '-') { - if (!new_value(&state, &top, &root, &alloc, - json_integer)) { - goto e_alloc_failure; - } - - if (!state.first_pass) { - while (isdigit((uint8_t)b) || b == '+' || b == - '-' - || b == 'e' || b == 'E' || b == '.') { - if ((++i) == end) { - b = 0; - break; - } - - b = *i; - } - - flags |= flag_next | flag_reproc; - break; - } - - flags &= ~(flag_num_negative | flag_num_e | - flag_num_e_got_sign | - flag_num_e_negative | - flag_num_zero); - - num_digits = 0; - num_fraction = 0; - num_e = 0; - - if (b != '-') { - flags |= flag_reproc; - break; - } - - flags |= flag_num_negative; - continue; - } else { - sprintf(error, - "%d:%d: Unexpected %c when seeking value", - cur_line, e_off, b); - goto e_failed; - } - } - } - } else { - switch (top->type) { - case json_object: - - switch (b) { -whitespace: - continue; - - case '"': - - if (flags & flag_need_comma) { - sprintf(error, "%d:%d: Expected , before \"", - cur_line, e_off); - goto e_failed; - } - - flags |= flag_string; - - string = (json_char *)top->_reserved.object_mem; - string_length = 0; - - break; - - case '}': - - flags = (flags & ~flag_need_comma) | flag_next; - break; - - case ',': - - if (flags & flag_need_comma) { - flags &= ~flag_need_comma; - break; - } - - default: - - sprintf(error, "%d:%d: Unexpected `%c` in object", - cur_line, e_off, b); - goto e_failed; - } - - break; - - case json_integer: - case json_double: - - if (isdigit((uint8_t)b)) { - ++num_digits; - - if (top->type == json_integer || flags & flag_num_e) { - if (!(flags & flag_num_e)) { - if (flags & flag_num_zero) { - sprintf(error, - "%d:%d: Unexpected `0` before `%c`", - cur_line, e_off, b); - goto e_failed; - } - - if (num_digits == 1 && b == '0') { - flags |= flag_num_zero; - } - } else { - flags |= flag_num_e_got_sign; - num_e = (num_e * 10) + (b - '0'); - continue; - } - - top->u.integer = (top->u.integer * 10) + (b - '0'); - continue; - } - - num_fraction = (num_fraction * 10) + (b - '0'); - continue; - } - - if (b == '+' || b == '-') { - if ((flags & flag_num_e) && - !(flags & flag_num_e_got_sign)) { - flags |= flag_num_e_got_sign; - - if (b == '-') { - flags |= flag_num_e_negative; - } - - continue; - } - } else if (b == '.' && top->type == json_integer) { - if (!num_digits) { - sprintf(error, "%d:%d: Expected digit before `.`", - cur_line, e_off); - goto e_failed; - } - - top->type = json_double; - top->u.dbl = (double)top->u.integer; - - num_digits = 0; - continue; - } - - if (!(flags & flag_num_e)) { - if (top->type == json_double) { - if (!num_digits) { - sprintf(error, - "%d:%d: Expected digit after `.`", - cur_line, e_off); - goto e_failed; - } - - top->u.dbl += ((double)num_fraction) / - (pow(10, (double)num_digits)); - } - - if (b == 'e' || b == 'E') { - flags |= flag_num_e; - - if (top->type == json_integer) { - top->type = json_double; - top->u.dbl = (double)top->u.integer; - } - - num_digits = 0; - flags &= ~flag_num_zero; - - continue; - } - } else { - if (!num_digits) { - sprintf(error, "%d:%d: Expected digit after `e`", - cur_line, e_off); - goto e_failed; - } - - top->u.dbl *= - pow(10, - (double)((flags & - flag_num_e_negative) ? -num_e : num_e)); - } - - if (flags & flag_num_negative) { - if (top->type == json_integer) { - top->u.integer = -top->u.integer; - } else { - top->u.dbl = -top->u.dbl; - } - } - - flags |= flag_next | flag_reproc; - break; - - default: - break; - } - } - - if (flags & flag_reproc) { - flags &= ~flag_reproc; - --i; - } - - if (flags & flag_next) { - flags = (flags & ~flag_next) | flag_need_comma; - - if (!top->parent) { - /* root value done */ - - flags |= flag_done; - continue; - } - - if (top->parent->type == json_array) { - flags |= flag_seek_value; - } - - if (!state.first_pass) { - json_value *parent = top->parent; - - switch (parent->type) { - case json_object: - - parent->u.object.values - [parent->u.object.length].value = top; - - break; - - case json_array: - - parent->u.array.values - [parent->u.array.length] = top; - - break; - - default: - break; - } - } - - if ((++top->parent->u.array.length) > state.uint_max) { - goto e_overflow; - } - - top = top->parent; - - continue; - } - } - - alloc = root; - } - - return root; - -e_unknown_value: - - sprintf(error, "%d:%d: Unknown value", cur_line, e_off); - goto e_failed; - -e_alloc_failure: - - strcpy(error, "Memory allocation failure"); - goto e_failed; - -e_overflow: - - sprintf(error, "%d:%d: Too long (caught overflow)", cur_line, e_off); - goto e_failed; - -e_failed: - - if (error_buf) { - if (*error) { - strcpy(error_buf, error); - } else { - strcpy(error_buf, "Unknown error"); - } - } - - if (state.first_pass) { - alloc = root; - } - - while (alloc) { - top = alloc->_reserved.next_alloc; - state.settings.mem_free(alloc, state.settings.user_data); - alloc = top; - } - - if (!state.first_pass) { - json_value_free_ex(&state.settings, root); - } - - return 0; -} - -json_value * -json_parse(const json_char *json, size_t length) -{ - json_settings settings = { 0UL, 0, NULL, NULL, NULL }; - return json_parse_ex(&settings, json, length, 0); -} - -void -json_value_free_ex(json_settings *settings, json_value *value) -{ - json_value *cur_value; - - if (!value) { - return; - } - - value->parent = 0; - - while (value) { - switch (value->type) { - case json_array: - - if (!value->u.array.length) { - settings->mem_free(value->u.array.values, settings->user_data); - break; - } - - value = value->u.array.values[--value->u.array.length]; - continue; - - case json_object: - - if (!value->u.object.length) { - settings->mem_free(value->u.object.values, settings->user_data); - break; - } - - value = value->u.object.values[--value->u.object.length].value; - continue; - - case json_string: - - settings->mem_free(value->u.string.ptr, settings->user_data); - break; - - default: - break; - } - - cur_value = value; - value = value->parent; - settings->mem_free(cur_value, settings->user_data); - } -} - -void -json_value_free(json_value *value) -{ - json_settings settings = { 0UL, 0, NULL, NULL, NULL }; - settings.mem_free = default_free; - json_value_free_ex(&settings, value); -} diff --git a/shadowsocksr-libev/src/server/json.h b/shadowsocksr-libev/src/server/json.h deleted file mode 100644 index 016fc5a7..00000000 --- a/shadowsocksr-libev/src/server/json.h +++ /dev/null @@ -1,249 +0,0 @@ -/* vim: set et ts=3 sw=3 sts=3 ft=c: - * - * Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. - * https://github.com/udp/json-parser - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef _JSON_H -#define _JSON_H - -#ifndef json_char -#define json_char char -#endif - -#ifndef json_int_t -#ifndef _MSC_VER -#include -#define json_int_t int64_t -#else -#define json_int_t __int64 -#endif -#endif - -#include - -#ifdef __cplusplus - -#include - -extern "C" -{ -#endif - -typedef struct { - unsigned long max_memory; - int settings; - - /* Custom allocator support (leave null to use malloc/free) - */ - - void * (*mem_alloc)(size_t, int zero, void *user_data); - void (*mem_free)(void *, void *user_data); - - void *user_data; /* will be passed to mem_alloc and mem_free */ -} json_settings; - -#define json_enable_comments 0x01 - -typedef enum { - json_none, - json_object, - json_array, - json_integer, - json_double, - json_string, - json_boolean, - json_null -} json_type; - -extern const struct _json_value json_value_none; - -typedef struct _json_value { - struct _json_value *parent; - - json_type type; - - union { - int boolean; - json_int_t integer; - double dbl; - - struct { - unsigned int length; - json_char *ptr; /* null terminated */ - } string; - - struct { - unsigned int length; - - struct { - json_char *name; - unsigned int name_length; - - struct _json_value *value; - } *values; - -#if defined(__cplusplus) && __cplusplus >= 201103L - decltype(values) begin() const - { - return values; - } - decltype(values) end() const - { - return values + length; - } -#endif - } object; - - struct { - unsigned int length; - struct _json_value **values; - -#if defined(__cplusplus) && __cplusplus >= 201103L - decltype(values) begin() const - { - return values; - } - decltype(values) end() const - { - return values + length; - } -#endif - } array; - } u; - - union { - struct _json_value *next_alloc; - void *object_mem; - } _reserved; - - /* Some C++ operator sugar */ - -#ifdef __cplusplus - -public: - - inline _json_value(){ - memset(this, 0, sizeof(_json_value)); - } - - inline const struct _json_value &operator [] (int index) const { - if (type != json_array || index < 0 - || ((unsigned int)index) >= u.array.length) { - return json_value_none; - } - - return *u.array.values[index]; - } - - inline const struct _json_value &operator [] (const char *index) const { - if (type != json_object) { - return json_value_none; - } - - for (unsigned int i = 0; i < u.object.length; ++i) - if (!strcmp(u.object.values[i].name, index)) { - return *u.object.values[i].value; - } - - return json_value_none; - } - - inline operator const char * () const - { - switch (type) { - case json_string: - return u.string.ptr; - - default: - return ""; - } - } - - inline operator - json_int_t() const - { - switch (type) { - case json_integer: - return u.integer; - - case json_double: - return (json_int_t)u.dbl; - - default: - return 0; - } - } - - inline operator - bool() const - { - if (type != json_boolean) { - return false; - } - - return u.boolean != 0; - } - - inline operator double () const - { - switch (type) { - case json_integer: - return (double)u.integer; - - case json_double: - return u.dbl; - - default: - return 0; - } - } - -#endif -} json_value; - -json_value *json_parse(const json_char *json, - size_t length); - -#define json_error_max 128 -json_value *json_parse_ex(json_settings *settings, - const json_char *json, - size_t length, - char *error); - -void json_value_free(json_value *); - -/* Not usually necessary, unless you used a custom mem_alloc and now want to - * use a custom mem_free. - */ -void json_value_free_ex(json_settings *settings, - json_value *); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/shadowsocksr-libev/src/server/list.c b/shadowsocksr-libev/src/server/list.c deleted file mode 100644 index dde085d8..00000000 --- a/shadowsocksr-libev/src/server/list.c +++ /dev/null @@ -1,370 +0,0 @@ -#include "list.h" - -/// 文件:list_impl.c -/// 功能:实现链表的基本操作 -/// 作者:bluewind -/// 完成时间:2011.5.29 -/// 修改时间:2011.5.31, 2011.7.2 -/// 修改备注:在头节点处添加一个空节点,可以优化添加、删除节点代码 -/// 再次修改,链表增加节点数据data_size,限制数据大小,修改了 -/// 添加复制数据代码,修正重复添加节点后释放节点的Bug,添加了前 -/// 插、排序和遍历功能,7.3 添加tail尾指针,改进后插法性能,并改名 -/// -------------------------------------------------------------- - -void swap_data(Node n1, Node n2); - -/// -------------------------------------------------------------- -// 函数名:list_init -// 功能: 链表初始化 -// 参数: 无 -// 返回值:已初始化链表指针 -// 备注: 链表本身动态分配,由list_destroy函数管理释放 -/// -------------------------------------------------------------- -List list_init(unsigned int data_size) -{ - List list = (List) malloc(sizeof(struct clist)); - if(list != NULL) //内存分配成功 - { - list->head = (Node) malloc(sizeof(node)); //为头节点分配内存 - if(list->head) //内存分配成功 - { - list->head->data = NULL; //初始化头节点 - list->head->next = NULL; - list->data_size = data_size; - list->tail = list->head; - list->size = 0; - - list->add_back = list_add_back; //初始化成员函数 - list->add_front = list_add_front; - list->delete_node = list_delete_node; - list->delete_at = list_delete_at; - list->modify_at = list_modify_at; - list->have_same = list_have_same; - list->have_same_cmp = list_have_same_cmp; - list->foreach = list_foreach; - list->clear = list_clear; - list->sort = list_sort; - list->destroy = list_destroy; - } - } - return list; -} - -/// -------------------------------------------------------------- -// 函数名:list_add_back -// 功能: 添加链表结点 (后插法) -// 参数: l--链表指针,data--链表数据指针,可为任意类型 -// 返回值:int型,为1表示添加成功,为0表示添加失败 -// 备注: 如果链表本身为空或是分配节点内存失败,将返回0 -/// -------------------------------------------------------------- -int list_add_back(List l, void *data) -{ - Node new_node = (Node) malloc(sizeof(node)); - - if(l != NULL && new_node != NULL) //链表本身不为空,且内存申请成功 - { - new_node->data = malloc(l->data_size); - memcpy(new_node->data, data, l->data_size); - new_node->next = NULL; - - l->tail->next = new_node; //添加节点 - l->tail = new_node; //记录尾节点位置 - l->size ++; //链表元素总数加1 - - return 1; - } - - return 0; -} - -/// -------------------------------------------------------------- -// 函数名:list_add_front -// 功能: 添加链表结点 (前插法) -// 参数: l--链表指针,data--链表数据指针,可为任意类型 -// 返回值:int型,为1表示添加成功,为0表示添加失败 -// 备注: 如果链表本身为空或是分配节点内存失败,将返回0 -/// -------------------------------------------------------------- -int list_add_front(List l, void *data) -{ - Node new_node = (Node) malloc(sizeof(node)); - - if(l != NULL && new_node != NULL) - { - new_node->data = malloc(l->data_size); - memcpy(new_node->data, data, l->data_size); - new_node->next = l->head->next; - - l->head->next = new_node; - if(!l->size) //记录尾指针位置 - l->tail = new_node; - l->size ++; - - return 1; - } - - return 0; -} - -/// -------------------------------------------------------------- -// 函数名:list_delete_node -// 功能:删除链表结点 -// 参数:l--链表指针,data--链表数据指针,可为任意类型 -// *pfunc为指向一个数据类型比较的函数指针 -// 返回值:int型,为1表示删除成功,为0表示没有找到匹配数据 -// 备注:*pfunc函数接口参数ndata为节点数据,data为比较数据,返回为真表示匹配数据 -/// -------------------------------------------------------------- -int list_delete_node(List l, void *data, int (*pfunc)(void *ndata, void *data)) -{ - if(l != NULL) - { - Node prev = l->head; //前一个节点 - Node curr = l->head->next; //当前节点 - - while(curr != NULL) - { - if(pfunc(curr->data, data)) //如果找到匹配数据 - { - if(curr == l->tail) //如果是删除尾节点 - l->tail = prev; - - prev->next = prev->next->next; //修改前节点next指针指向下下个节点 - - free(curr->data); //释放节点数据 - free(curr); //释放节点 - - l->size--; //链表元素总数减1 - return 1; //返回真值 - } - prev = prev->next; //没有找到匹配时移动前节点和当前节点 - curr = curr->next; - } - } - - return 0; //没有找到匹配数据 -} - -/// -------------------------------------------------------------- -// 函数名:list_delete_at -// 功能: 修改链表节点元素值 -// 参数: l--链表指针,index--索引值, 范围(0 -- size-1) -// 返回值:int型,为1表示删除成功,为0表示删除失败 -// 备注: 如果链表本身为空或是index为非法值,将返回0 -/// -------------------------------------------------------------- -int list_delete_at(List l, unsigned int index) -{ - unsigned int cindex = 0; - - if(l != NULL && index >= 0 && index < l->size) - { - Node prev = l->head; //前一个节点 - Node curr = l->head->next; //当前节点 - - while(cindex != index) - { - prev = prev->next; - curr = curr->next; - cindex ++; - } - - if(index == (l->size) - 1) - l->tail = prev; - - prev->next = prev->next->next; - free(curr->data); - free(curr); - l->size --; - - return 1; - } - - return 0; -} - -/// -------------------------------------------------------------- -// 函数名:list_modify_at -// 功能: 修改链表节点元素值 -// 参数: l--链表指针,index--索引值, 范围(0 -- size-1) -// data--链表数据指针 -// 返回值:int型,为1表示修改成功,为0表示修改失败 -// 备注: 如果链表本身为空或是index为非法值,将返回0 -/// -------------------------------------------------------------- -int list_modify_at(List l, unsigned int index, void *new_data) -{ - unsigned int cindex = 0; - - if(l != NULL && index >= 0 && index < l->size ) //非空链表,并且index值合法 - { - Node curr = l->head->next; - while(cindex != index) - { - curr = curr->next; - cindex ++; - } - memcpy(curr->data, new_data, l->data_size); - return 1; - } - - return 0; -} - -/// -------------------------------------------------------------- -// 函数名:list_sort -// 功能: 链表排序 -// 参数: l--链表指针,*pfunc为指向一个数据类型比较的函数指针 -// 返回值:无 -// 备注: 使用简单选择排序法,相比冒泡法每次交换,效率高一点 -/// -------------------------------------------------------------- -void list_sort(List l, compare pfunc) -{ - if(l != NULL) - { - Node min, icurr, jcurr; - - icurr = l->head->next; - while(icurr) - { - min = icurr; //记录最小值 - jcurr = icurr->next; //内循环指向下一个节点 - while(jcurr) - { - if(pfunc(min->data, jcurr->data)) //如果找到n+1到最后一个元素最小值 - min = jcurr; //记录下最小值的位置 - - jcurr = jcurr->next; - } - - if(min != icurr) //当最小值位置和n+1元素位置不相同时 - { - swap_data(min, icurr); //才进行交换,减少交换次数 - } - - icurr = icurr->next; - } - } -} - -void swap_data(Node n1, Node n2) -{ - void *temp; - - temp = n2->data; - n2->data = n1->data; - n1->data = temp; -} - - -int list_have_same(List l, void *data, int (*pfunc)(void *ndata, void *data)) -{ - if(l != NULL) - { - Node curr; - - for(curr = l->head->next; curr != NULL; curr = curr->next) - { - if(pfunc(curr->data, data)) - { - return 1; - } - } - } - - return 0; -} - -int list_have_same_cmp(List l, void *data) -{ - if(l != NULL) - { - Node curr; - - for(curr = l->head->next; curr != NULL; curr = curr->next) - { - if(memcmp(curr->data, data, l->data_size)) - { - return 1; - } - } - } - - return 0; -} - -/// -------------------------------------------------------------- -// 函数名:list_foreach -// 功能: 遍历链表元素 -// 参数: l--链表指针,doit为指向一个处理数据的函数指针 -// 返回值:无 -// 备注: doit申明为void (*dofunc)(void *ndata)原型 -/// -------------------------------------------------------------- -void list_foreach(List l, dofunc doit) -{ - if(l != NULL) - { - Node curr; - - for(curr = l->head->next; curr != NULL; curr = curr->next) - { - doit(curr->data); - } - } -} - -/// -------------------------------------------------------------- -// 函数名:list_clear -// 功能: 清空链表元素 -// 参数: l--链表指针 -// 返回值:无 -// 备注: 没有使用先Destroy再Init链表的办法,直接实现 -/// -------------------------------------------------------------- -void list_clear(List l) -{ - if(l != NULL) - { - Node temp; - Node curr = l->head->next; - - while(curr != NULL) - { - temp = curr->next; - - free(curr->data); //释放节点和数据 - free(curr); - - curr = temp; - } - - l->size = 0; //重置链表数据 - l->head->next = NULL; - l->tail = l->head; - } -} - -/// -------------------------------------------------------------- -// 函数名:list_destroy -// 功能: 释放链表 -// 参数: l--链表指针 -// 返回值:空链表指针 -/// -------------------------------------------------------------- -List list_destroy(List l) -{ - if(l != NULL) - { - Node temp; - - while(l->head) - { - temp = l->head->next; - - if(l->head->data != NULL) //如果是头节点就不释放数据空间 - free(l->head->data); //先释放节点数据(但是节点数据里也有指针?) - free(l->head); //再释放节点 - - l->head = temp; - } - - free(l); //释放链表本身占用空间 - l = NULL; - } - - return l; -} diff --git a/shadowsocksr-libev/src/server/list.h b/shadowsocksr-libev/src/server/list.h deleted file mode 100644 index ab49720a..00000000 --- a/shadowsocksr-libev/src/server/list.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef LIST_H_H -#define LIST_H_H - -#include -#include -#include - -typedef struct clist *List; - -typedef int (*compare)(void *ndata, void *data); -typedef void (*dofunc)(void *ndata); - -typedef int (*lpf0)(List l, void *data); -typedef int (*lpf1)(List l, void *data, compare pfunc); -typedef List (*lpf2)(List l); -typedef void (*lpf3)(List l); -typedef void (*lpf4)(List l, dofunc pfunc); -typedef int (*lpf5)(List l, unsigned int index, void *new_data); -typedef void (*lpf6)(List l, compare pfunc); -typedef int (*lpf7)(List l, unsigned int index); - -typedef struct cnode -{ - void *data; - struct cnode *next; -}node, *Node; - -typedef struct clist -{ - Node head; - Node tail; - unsigned int size; - unsigned int data_size; - lpf0 add_back; - lpf0 add_front; - lpf1 delete_node; - lpf1 have_same; - lpf0 have_same_cmp; - lpf4 foreach; - lpf3 clear; - lpf2 destroy; - lpf5 modify_at; - lpf6 sort; - lpf7 delete_at; -}list; - -//初始化链表 -List list_init(unsigned int data_size); -int list_add_back(List l, void *data); -int list_add_front(List l, void *data); -int list_delete_node(List l, void *data, compare pfunc); -int list_delete_at(List l, unsigned int index); -int list_modify_at(List l, unsigned int index, void *new_data); -int list_have_same(List l, void *data, compare pfunc); -int list_have_same_cmp(List l, void *data); -void list_foreach(List l, dofunc doit); -void list_sort(List l, compare pfunc); -void list_clear(List l); -//释放链表 -List list_destroy(List l); -#endif diff --git a/shadowsocksr-libev/src/server/netutils.c b/shadowsocksr-libev/src/server/netutils.c deleted file mode 100644 index 3a32b4d0..00000000 --- a/shadowsocksr-libev/src/server/netutils.c +++ /dev/null @@ -1,297 +0,0 @@ -/* - * netutils.c - Network utilities - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#include - -#include -#include - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef __MINGW32__ -#include "win32.h" -#define sleep(n) Sleep(1000 * (n)) -#else -#include -#include -#include -#include -#endif - -#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__) -#include -#include -#define SET_INTERFACE -#endif - -#include "netutils.h" -#include "utils.h" - -#ifndef SO_REUSEPORT -#define SO_REUSEPORT 15 -#endif - -extern int verbose; - -static const char valid_label_bytes[] = - "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"; - -#if defined(MODULE_LOCAL) -extern int keep_resolving; -#endif - -int -set_reuseport(int socket) -{ - int opt = 1; - return setsockopt(socket, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt)); -} - -size_t -get_sockaddr_len(struct sockaddr *addr) -{ - if (addr->sa_family == AF_INET) { - return sizeof(struct sockaddr_in); - } else if (addr->sa_family == AF_INET6) { - return sizeof(struct sockaddr_in6); - } - return 0; -} - -#ifdef SET_INTERFACE -int -setinterface(int socket_fd, const char *interface_name) -{ - struct ifreq interface; - memset(&interface, 0, sizeof(struct ifreq)); - strncpy(interface.ifr_name, interface_name, IFNAMSIZ); - int res = setsockopt(socket_fd, SOL_SOCKET, SO_BINDTODEVICE, &interface, - sizeof(struct ifreq)); - return res; -} - -#endif - -int -bind_to_address(int socket_fd, const char *host) -{ - if (host != NULL) { - struct cork_ip ip; - struct sockaddr_storage storage; - memset(&storage, 0, sizeof(struct sockaddr_storage)); - if (cork_ip_init(&ip, host) != -1) { - if (ip.version == 4) { - struct sockaddr_in *addr = (struct sockaddr_in *)&storage; - dns_pton(AF_INET, host, &addr->sin_addr); - addr->sin_family = AF_INET; - return bind(socket_fd, (struct sockaddr *)addr, sizeof(struct sockaddr_in)); - } else if (ip.version == 6) { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&storage; - dns_pton(AF_INET6, host, &addr->sin6_addr); - addr->sin6_family = AF_INET6; - return bind(socket_fd, (struct sockaddr *)addr, sizeof(struct sockaddr_in6)); - } - } - } - return -1; -} - -ssize_t -get_sockaddr(char *host, char *port, - struct sockaddr_storage *storage, int block, - int ipv6first) -{ - struct cork_ip ip; - if (cork_ip_init(&ip, host) != -1) { - if (ip.version == 4) { - struct sockaddr_in *addr = (struct sockaddr_in *)storage; - addr->sin_family = AF_INET; - dns_pton(AF_INET, host, &(addr->sin_addr)); - if (port != NULL) { - addr->sin_port = htons(atoi(port)); - } - } else if (ip.version == 6) { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)storage; - addr->sin6_family = AF_INET6; - dns_pton(AF_INET6, host, &(addr->sin6_addr)); - if (port != NULL) { - addr->sin6_port = htons(atoi(port)); - } - } - return 0; - } else { - struct addrinfo hints; - struct addrinfo *result, *rp; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; /* Return IPv4 and IPv6 choices */ - hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */ - - int err, i; - - for (i = 1; i < 8; i++) { - err = getaddrinfo(host, port, &hints, &result); -#if defined(MODULE_LOCAL) - if (!keep_resolving) - break; -#endif - if ((!block || !err)) { - break; - } else { - sleep(pow(2, i)); - LOGE("failed to resolve server name, wait %.0f seconds", pow(2, i)); - } - } - - if (err != 0) { - LOGE("getaddrinfo: %s", gai_strerror(err)); - return -1; - } - - int prefer_af = ipv6first ? AF_INET6 : AF_INET; - for (rp = result; rp != NULL; rp = rp->ai_next) - if (rp->ai_family == prefer_af) { - if (rp->ai_family == AF_INET) - memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in)); - else if (rp->ai_family == AF_INET6) - memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in6)); - break; - } - - if (rp == NULL) { - for (rp = result; rp != NULL; rp = rp->ai_next) { - if (rp->ai_family == AF_INET) - memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in)); - else if (rp->ai_family == AF_INET6) - memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in6)); - break; - } - } - - if (rp == NULL) { - LOGE("failed to resolve remote addr"); - return -1; - } - - freeaddrinfo(result); - return 0; - } - - return -1; -} - -int -sockaddr_cmp(struct sockaddr_storage *addr1, - struct sockaddr_storage *addr2, socklen_t len) -{ - struct sockaddr_in *p1_in = (struct sockaddr_in *)addr1; - struct sockaddr_in *p2_in = (struct sockaddr_in *)addr2; - struct sockaddr_in6 *p1_in6 = (struct sockaddr_in6 *)addr1; - struct sockaddr_in6 *p2_in6 = (struct sockaddr_in6 *)addr2; - if (p1_in->sin_family < p2_in->sin_family) - return -1; - if (p1_in->sin_family > p2_in->sin_family) - return 1; - /* compare ip4 */ - if (p1_in->sin_family == AF_INET) { - /* just order it, ntohs not required */ - if (p1_in->sin_port < p2_in->sin_port) - return -1; - if (p1_in->sin_port > p2_in->sin_port) - return 1; - return memcmp(&p1_in->sin_addr, &p2_in->sin_addr, INET_SIZE); - } else if (p1_in6->sin6_family == AF_INET6) { - /* just order it, ntohs not required */ - if (p1_in6->sin6_port < p2_in6->sin6_port) - return -1; - if (p1_in6->sin6_port > p2_in6->sin6_port) - return 1; - return memcmp(&p1_in6->sin6_addr, &p2_in6->sin6_addr, - INET6_SIZE); - } else { - /* eek unknown type, perform this comparison for sanity. */ - return memcmp(addr1, addr2, len); - } -} - -int -sockaddr_cmp_addr(struct sockaddr_storage *addr1, - struct sockaddr_storage *addr2, socklen_t len) -{ - struct sockaddr_in *p1_in = (struct sockaddr_in *)addr1; - struct sockaddr_in *p2_in = (struct sockaddr_in *)addr2; - struct sockaddr_in6 *p1_in6 = (struct sockaddr_in6 *)addr1; - struct sockaddr_in6 *p2_in6 = (struct sockaddr_in6 *)addr2; - if (p1_in->sin_family < p2_in->sin_family) - return -1; - if (p1_in->sin_family > p2_in->sin_family) - return 1; - /* compare ip4 */ - if (p1_in->sin_family == AF_INET) { - return memcmp(&p1_in->sin_addr, &p2_in->sin_addr, INET_SIZE); - } else if (p1_in6->sin6_family == AF_INET6) { - return memcmp(&p1_in6->sin6_addr, &p2_in6->sin6_addr, - INET6_SIZE); - } else { - /* eek unknown type, perform this comparison for sanity. */ - return memcmp(addr1, addr2, len); - } -} - -int -validate_hostname(const char *hostname, const int hostname_len) -{ - if (hostname == NULL) - return 0; - - if (hostname_len < 1 || hostname_len > 255) - return 0; - - if (hostname[0] == '.') - return 0; - - const char *label = hostname; - while (label < hostname + hostname_len) { - size_t label_len = hostname_len - (label - hostname); - char *next_dot = strchr(label, '.'); - if (next_dot != NULL) - label_len = next_dot - label; - - if (label + label_len > hostname + hostname_len) - return 0; - - if (label_len > 63 || label_len < 1) - return 0; - - if (label[0] == '-' || label[label_len - 1] == '-') - return 0; - - if (strspn(label, valid_label_bytes) < label_len) - return 0; - - label += label_len + 1; - } - - return 1; -} diff --git a/shadowsocksr-libev/src/server/netutils.h b/shadowsocksr-libev/src/server/netutils.h deleted file mode 100644 index 07255923..00000000 --- a/shadowsocksr-libev/src/server/netutils.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * netutils.h - Network utilities - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifndef _NETUTILS_H -#define _NETUTILS_H - -#if defined(__linux__) -#include -#elif !defined(__MINGW32__) -#include -#endif - -// only enable TCP_FASTOPEN on linux -#if defined(__linux__) -#include -/* conditional define for TCP_FASTOPEN */ -#ifndef TCP_FASTOPEN -#define TCP_FASTOPEN 23 -#endif -/* conditional define for MSG_FASTOPEN */ -#ifndef MSG_FASTOPEN -#define MSG_FASTOPEN 0x20000000 -#endif -#elif !defined(__APPLE__) -#ifdef TCP_FASTOPEN -#undef TCP_FASTOPEN -#endif -#endif - -/* Backward compatibility for MPTCP_ENABLED between kernel 3 & 4 */ -#ifndef MPTCP_ENABLED -#ifdef TCP_CC_INFO -#define MPTCP_ENABLED 42 -#else -#define MPTCP_ENABLED 26 -#endif -#endif - -/** byte size of ip4 address */ -#define INET_SIZE 4 -/** byte size of ip6 address */ -#define INET6_SIZE 16 - -size_t get_sockaddr_len(struct sockaddr *addr); -ssize_t get_sockaddr(char *host, char *port, - struct sockaddr_storage *storage, int block, - int ipv6first); -int set_reuseport(int socket); - -#ifdef SET_INTERFACE -int setinterface(int socket_fd, const char *interface_name); -#endif - -int bind_to_address(int socket_fd, const char *address); - -/** - * Compare two sockaddrs. Imposes an ordering on the addresses. - * Compares address and port. - * @param addr1: address 1. - * @param addr2: address 2. - * @param len: lengths of addr. - * @return: 0 if addr1 == addr2. -1 if addr1 is smaller, +1 if larger. - */ -int sockaddr_cmp(struct sockaddr_storage *addr1, - struct sockaddr_storage *addr2, socklen_t len); - -/** - * Compare two sockaddrs. Compares address, not the port. - * @param addr1: address 1. - * @param addr2: address 2. - * @param len: lengths of addr. - * @return: 0 if addr1 == addr2. -1 if addr1 is smaller, +1 if larger. - */ -int sockaddr_cmp_addr(struct sockaddr_storage *addr1, - struct sockaddr_storage *addr2, socklen_t len); - -int validate_hostname(const char *hostname, const int hostname_len); - -#endif diff --git a/shadowsocksr-libev/src/server/obfs.c b/shadowsocksr-libev/src/server/obfs.c deleted file mode 100644 index 5c885bfe..00000000 --- a/shadowsocksr-libev/src/server/obfs.c +++ /dev/null @@ -1,205 +0,0 @@ -#include -#include - -#include "utils.h" -#include "obfs.h" - -int rand_bytes(uint8_t *output, int len); -#define OBFS_HMAC_SHA1_LEN 10 - -#include "obfsutil.c" -#include "crc32.c" -#include "base64.c" -#include "http_simple.c" -#include "tls1.2_ticket.c" -#include "verify.c" -#include "auth.c" - -void * init_data() { - return malloc(1); -} - -obfs * new_obfs() { - obfs * self = (obfs*)malloc(sizeof(obfs)); - self->l_data = NULL; - return self; -} - -void set_server_info(obfs *self, server_info *server) { - memmove(&self->server, server, sizeof(server_info)); -} - -void get_server_info(obfs *self, server_info *server) { - memmove(server, &self->server, sizeof(server_info)); -} - -void dispose_obfs(obfs *self) { - free(self); -} - -obfs_class * new_obfs_class(char *plugin_name) -{ - if (plugin_name == NULL) - return NULL; - if (strcmp(plugin_name, "origin") == 0) - return NULL; - if (strcmp(plugin_name, "plain") == 0) - return NULL; - init_crc32_table(); - init_shift128plus(); - if (strcmp(plugin_name, "http_simple") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = init_data; - plugin->new_obfs = http_simple_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = http_simple_dispose; - - plugin->client_encode = http_simple_client_encode; - plugin->client_decode = http_simple_client_decode; - - plugin->server_encode = http_simple_server_encode; - plugin->server_decode = http_simple_server_decode; - - return plugin; - } else if (strcmp(plugin_name, "http_post") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = init_data; - plugin->new_obfs = http_simple_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = http_simple_dispose; - - plugin->client_encode = http_post_client_encode; - plugin->client_decode = http_simple_client_decode; - - plugin->server_encode = http_simple_server_encode; - plugin->server_decode = http_simple_server_decode; - - return plugin; - } else if (strcmp(plugin_name, "tls1.2_ticket_auth") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = tls12_ticket_auth_init_data; - plugin->new_obfs = tls12_ticket_auth_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = tls12_ticket_auth_dispose; - - plugin->client_encode = tls12_ticket_auth_client_encode; - plugin->client_decode = tls12_ticket_auth_client_decode; - - plugin->server_encode = tls12_ticket_auth_server_encode; - plugin->server_decode = tls12_ticket_auth_server_decode; - - return plugin; - } else if (strcmp(plugin_name, "verify_simple") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = init_data; - plugin->new_obfs = verify_simple_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = verify_simple_dispose; - - plugin->client_pre_encrypt = verify_simple_client_pre_encrypt; - plugin->client_post_decrypt = verify_simple_client_post_decrypt; - plugin->client_udp_pre_encrypt = NULL; - plugin->client_udp_post_decrypt = NULL; - - plugin->server_pre_encrypt = verify_simple_server_pre_encrypt; - plugin->server_post_decrypt = verify_simple_server_post_decrypt; - plugin->server_udp_pre_encrypt = NULL; - plugin->server_udp_post_decrypt = NULL; - - return plugin; - } else if (strcmp(plugin_name, "auth_simple") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = auth_simple_init_data; - plugin->new_obfs = auth_simple_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = auth_simple_dispose; - - plugin->client_pre_encrypt = auth_simple_client_pre_encrypt; - plugin->client_post_decrypt = auth_simple_client_post_decrypt; - plugin->client_udp_pre_encrypt = NULL; - plugin->client_udp_post_decrypt = NULL; - - return plugin; - } else if (strcmp(plugin_name, "auth_sha1") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = auth_simple_init_data; - plugin->new_obfs = auth_simple_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = auth_simple_dispose; - - plugin->client_pre_encrypt = auth_sha1_client_pre_encrypt; - plugin->client_post_decrypt = auth_sha1_client_post_decrypt; - plugin->client_udp_pre_encrypt = NULL; - plugin->client_udp_post_decrypt = NULL; - - return plugin; - } else if (strcmp(plugin_name, "auth_sha1_v2") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = auth_simple_init_data; - plugin->new_obfs = auth_simple_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = auth_simple_dispose; - - plugin->client_pre_encrypt = auth_sha1_v2_client_pre_encrypt; - plugin->client_post_decrypt = auth_sha1_v2_client_post_decrypt; - plugin->client_udp_pre_encrypt = NULL; - plugin->client_udp_post_decrypt = NULL; - - return plugin; - } else if (strcmp(plugin_name, "auth_sha1_v4") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = auth_simple_init_data; - plugin->new_obfs = auth_simple_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = auth_simple_dispose; - - plugin->client_pre_encrypt = auth_sha1_v4_client_pre_encrypt; - plugin->client_post_decrypt = auth_sha1_v4_client_post_decrypt; - plugin->client_udp_pre_encrypt = NULL; - plugin->client_udp_post_decrypt = NULL; - - return plugin; - } else if (strcmp(plugin_name, "auth_aes128_md5") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = auth_simple_init_data; - plugin->new_obfs = auth_aes128_md5_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = auth_simple_dispose; - - plugin->client_pre_encrypt = auth_aes128_sha1_client_pre_encrypt; - plugin->client_post_decrypt = auth_aes128_sha1_client_post_decrypt; - plugin->client_udp_pre_encrypt = auth_aes128_sha1_client_udp_pre_encrypt; - plugin->client_udp_post_decrypt = auth_aes128_sha1_client_udp_post_decrypt; - - return plugin; - } else if (strcmp(plugin_name, "auth_aes128_sha1") == 0) { - obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs)); - plugin->init_data = auth_simple_init_data; - plugin->new_obfs = auth_aes128_sha1_new_obfs; - plugin->get_server_info = get_server_info; - plugin->set_server_info = set_server_info; - plugin->dispose = auth_simple_dispose; - - plugin->client_pre_encrypt = auth_aes128_sha1_client_pre_encrypt; - plugin->client_post_decrypt = auth_aes128_sha1_client_post_decrypt; - plugin->client_udp_pre_encrypt = auth_aes128_sha1_client_udp_pre_encrypt; - plugin->client_udp_post_decrypt = auth_aes128_sha1_client_udp_post_decrypt; - - return plugin; - } - LOGE("Load obfs '%s' failed", plugin_name); - return NULL; -} - -void free_obfs_class(obfs_class *plugin) { - free(plugin); -} diff --git a/shadowsocksr-libev/src/server/obfs.h b/shadowsocksr-libev/src/server/obfs.h deleted file mode 100644 index 74c60c9a..00000000 --- a/shadowsocksr-libev/src/server/obfs.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * obfs.h - Define shadowsocksR server's buffers and callbacks - * - * Copyright (C) 2015 - 2016, Break Wa11 - */ - -#ifndef _OBFS_H -#define _OBFS_H - -#include -#include - -typedef struct server_info { - char host[64]; - uint16_t port; - char *param; - void *g_data; - uint8_t *iv; - size_t iv_len; - uint8_t *recv_iv; - size_t recv_iv_len; - uint8_t *key; - size_t key_len; - int head_len; - size_t tcp_mss; -}server_info; - -typedef struct obfs { - server_info server; - void *l_data; -}obfs; - -typedef struct obfs_class { - void * (*init_data)(); - obfs * (*new_obfs)(); - void (*get_server_info)(obfs *self, server_info *server); - void (*set_server_info)(obfs *self, server_info *server); - void (*dispose)(obfs *self); - - int (*client_pre_encrypt)(obfs *self, - char **pplaindata, - int datalength, - size_t* capacity); - int (*client_encode)(obfs *self, - char **pencryptdata, - int datalength, - size_t* capacity); - int (*client_decode)(obfs *self, - char **pencryptdata, - int datalength, - size_t* capacity, - int *needsendback); - int (*client_post_decrypt)(obfs *self, - char **pplaindata, - int datalength, - size_t* capacity); - int (*client_udp_pre_encrypt)(obfs *self, - char **pplaindata, - int datalength, - size_t* capacity); - int (*client_udp_post_decrypt)(obfs *self, - char **pplaindata, - int datalength, - size_t* capacity); - int (*server_pre_encrypt)(obfs *self, - char **pplaindata, - int datalength, - size_t* capacity); - int (*server_post_decrypt)(obfs *self, - char **pplaindata, - int datalength, - size_t* capacity); - int (*server_udp_pre_encrypt)(obfs *self, - char **pplaindata, - int datalength, - size_t* capacity); - int (*server_udp_post_decrypt)(obfs *self, - char **pplaindata, - int datalength, - size_t* capacity); - int (*server_encode)(obfs *self, - char **pencryptdata, - int datalength, - size_t* capacity); - int (*server_decode)(obfs *self, - char **pencryptdata, - int datalength, - size_t* capacity, - int *needsendback); -}obfs_class; - -obfs_class * new_obfs_class(char *plugin_name); -void free_obfs_class(obfs_class *plugin); - -void set_server_info(obfs *self, server_info *server); -void get_server_info(obfs *self, server_info *server); -obfs * new_obfs(); -void dispose_obfs(obfs *self); - -#endif // _OBFS_H diff --git a/shadowsocksr-libev/src/server/obfsutil.c b/shadowsocksr-libev/src/server/obfsutil.c deleted file mode 100644 index d00959b9..00000000 --- a/shadowsocksr-libev/src/server/obfsutil.c +++ /dev/null @@ -1,36 +0,0 @@ -int get_head_size(char *plaindata, int size, int def_size) { - if (plaindata == NULL || size < 2) - return def_size; - int head_type = plaindata[0] & 0x7; - if (head_type == 1) - return 7; - if (head_type == 4) - return 19; - if (head_type == 3) - return 4 + plaindata[1]; - return def_size; -} - -static int shift128plus_init_flag = 0; -static uint64_t shift128plus_s[2] = {0x10000000, 0xFFFFFFFF}; - -void init_shift128plus(void) { - if (shift128plus_init_flag == 0) { - shift128plus_init_flag = 1; - uint32_t seed = time(NULL); - shift128plus_s[0] = seed | 0x100000000L; - shift128plus_s[1] = ((uint64_t)seed << 32) | 0x1; - } -} - -uint64_t xorshift128plus(void) { - uint64_t x = shift128plus_s[0]; - uint64_t const y = shift128plus_s[1]; - shift128plus_s[0] = y; - x ^= x << 23; // a - x ^= x >> 17; // b - x ^= y ^ (y >> 26); // c - shift128plus_s[1] = x; - return x + y; -} - diff --git a/shadowsocksr-libev/src/server/protocol.h b/shadowsocksr-libev/src/server/protocol.h deleted file mode 100644 index eaa866e7..00000000 --- a/shadowsocksr-libev/src/server/protocol.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2014, Dustin Lundquist - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef PROTOCOL_H -#define PROTOCOL_H - -typedef struct protocol { - const int default_port; - int(*const parse_packet)(const char *, size_t, char **); -} protocol_t; - -#endif diff --git a/shadowsocksr-libev/src/server/resolv.c b/shadowsocksr-libev/src/server/resolv.c deleted file mode 100644 index f580d06d..00000000 --- a/shadowsocksr-libev/src/server/resolv.c +++ /dev/null @@ -1,444 +0,0 @@ -/* - * Copyright (c) 2014, Dustin Lundquist - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#include - -#ifdef __MINGW32__ -#include "win32.h" -#else -#include -#include -#include -#include -#endif - -#include "resolv.h" -#include "utils.h" -#include "netutils.h" - -/* - * Implement DNS resolution interface using libudns - */ - -struct ResolvQuery { - void (*client_cb)(struct sockaddr *, void *); - void (*client_free_cb)(void *); - void *client_cb_data; - struct dns_query *queries[2]; - size_t response_count; - struct sockaddr **responses; - uint16_t port; -}; - -extern int verbose; - -static struct ev_io resolv_io_watcher; -static struct ev_timer resolv_timeout_watcher; -static const int MODE_IPV4_ONLY = 0; -static const int MODE_IPV6_ONLY = 1; -static const int MODE_IPV4_FIRST = 2; -static const int MODE_IPV6_FIRST = 3; -static int resolv_mode = 0; - -static void resolv_sock_cb(struct ev_loop *, struct ev_io *, int); -static void resolv_timeout_cb(struct ev_loop *, struct ev_timer *, int); -static void dns_query_v4_cb(struct dns_ctx *, struct dns_rr_a4 *, void *); -static void dns_query_v6_cb(struct dns_ctx *, struct dns_rr_a6 *, void *); -static void dns_timer_setup_cb(struct dns_ctx *, int, void *); -static void process_client_callback(struct ResolvQuery *); -static inline int all_queries_are_null(struct ResolvQuery *); -static struct sockaddr *choose_ipv4_first(struct ResolvQuery *); -static struct sockaddr *choose_ipv6_first(struct ResolvQuery *); -static struct sockaddr *choose_any(struct ResolvQuery *); - -int -resolv_init(struct ev_loop *loop, char **nameservers, int nameserver_num, int ipv6first) -{ - if (ipv6first) - resolv_mode = MODE_IPV6_FIRST; - else - resolv_mode = MODE_IPV4_FIRST; - - struct dns_ctx *ctx = &dns_defctx; - if (nameservers == NULL) { - /* Nameservers not specified, use system resolver config */ - dns_init(ctx, 0); - } else { - dns_reset(ctx); - - for (int i = 0; i < nameserver_num; i++) { - char *server = nameservers[i]; - dns_add_serv(ctx, server); - } - } - - int sockfd = dns_open(ctx); - if (sockfd < 0) { - FATAL("Failed to open DNS resolver socket"); - } - - if (nameserver_num == 1 && nameservers != NULL) { - if (strncmp("127.0.0.1", nameservers[0], 9) == 0 - || strncmp("::1", nameservers[0], 3) == 0) { - if (verbose) { - LOGI("bind UDP resolver to %s", nameservers[0]); - } - if (bind_to_address(sockfd, nameservers[0]) == -1) - ERROR("bind_to_address"); - } - } - -#ifdef __MINGW32__ - setnonblocking(sockfd); -#else - int flags = fcntl(sockfd, F_GETFL, 0); - fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); -#endif - - ev_io_init(&resolv_io_watcher, resolv_sock_cb, sockfd, EV_READ); - resolv_io_watcher.data = ctx; - - ev_io_start(loop, &resolv_io_watcher); - - ev_timer_init(&resolv_timeout_watcher, resolv_timeout_cb, 0.0, 0.0); - resolv_timeout_watcher.data = ctx; - - dns_set_tmcbck(ctx, dns_timer_setup_cb, loop); - - return sockfd; -} - -void -resolv_shutdown(struct ev_loop *loop) -{ - struct dns_ctx *ctx = (struct dns_ctx *)resolv_io_watcher.data; - - ev_io_stop(loop, &resolv_io_watcher); - - if (ev_is_active(&resolv_timeout_watcher)) { - ev_timer_stop(loop, &resolv_timeout_watcher); - } - - dns_close(ctx); -} - -struct ResolvQuery * -resolv_query(const char *hostname, void (*client_cb)(struct sockaddr *, void *), - void (*client_free_cb)(void *), void *client_cb_data, - uint16_t port) -{ - struct dns_ctx *ctx = (struct dns_ctx *)resolv_io_watcher.data; - - /* - * Wrap udns's call back in our own - */ - struct ResolvQuery *cb_data = ss_malloc(sizeof(struct ResolvQuery)); - if (cb_data == NULL) { - LOGE("Failed to allocate memory for DNS query callback data."); - return NULL; - } - memset(cb_data, 0, sizeof(struct ResolvQuery)); - - cb_data->client_cb = client_cb; - cb_data->client_free_cb = client_free_cb; - cb_data->client_cb_data = client_cb_data; - memset(cb_data->queries, 0, sizeof(cb_data->queries)); - cb_data->response_count = 0; - cb_data->responses = NULL; - cb_data->port = port; - - /* Submit A and AAAA queries */ - if (resolv_mode != MODE_IPV6_ONLY) { - cb_data->queries[0] = dns_submit_a4(ctx, - hostname, 0, - dns_query_v4_cb, cb_data); - if (cb_data->queries[0] == NULL) { - LOGE("Failed to submit DNS query: %s", - dns_strerror(dns_status(ctx))); - } - } - - if (resolv_mode != MODE_IPV4_ONLY) { - cb_data->queries[1] = dns_submit_a6(ctx, - hostname, 0, - dns_query_v6_cb, cb_data); - if (cb_data->queries[1] == NULL) { - LOGE("Failed to submit DNS query: %s", - dns_strerror(dns_status(ctx))); - } - } - - if (all_queries_are_null(cb_data)) { - if (cb_data->client_free_cb != NULL) { - cb_data->client_free_cb(cb_data->client_cb_data); - } - ss_free(cb_data); - } - - return cb_data; -} - -void -resolv_cancel(struct ResolvQuery *query_handle) -{ - struct ResolvQuery *cb_data = (struct ResolvQuery *)query_handle; - struct dns_ctx *ctx = (struct dns_ctx *)resolv_io_watcher.data; - - for (int i = 0; i < sizeof(cb_data->queries) / sizeof(cb_data->queries[0]); - i++) - if (cb_data->queries[i] != NULL) { - dns_cancel(ctx, cb_data->queries[i]); - ss_free(cb_data->queries[i]); - } - - if (cb_data->client_free_cb != NULL) { - cb_data->client_free_cb(cb_data->client_cb_data); - } - - ss_free(cb_data); -} - -/* - * DNS UDP socket activity callback - */ -static void -resolv_sock_cb(struct ev_loop *loop, struct ev_io *w, int revents) -{ - struct dns_ctx *ctx = (struct dns_ctx *)w->data; - - if (revents & EV_READ) { - dns_ioevent(ctx, ev_now(loop)); - } -} - -/* - * Wrapper for client callback we provide to udns - */ -static void -dns_query_v4_cb(struct dns_ctx *ctx, struct dns_rr_a4 *result, void *data) -{ - struct ResolvQuery *cb_data = (struct ResolvQuery *)data; - - if (result == NULL) { - if (verbose) { - LOGI("IPv4 resolv: %s", dns_strerror(dns_status(ctx))); - } - } else if (result->dnsa4_nrr > 0) { - struct sockaddr **new_responses = ss_realloc(cb_data->responses, - (cb_data->response_count + - result->dnsa4_nrr) * - sizeof(struct sockaddr *)); - if (new_responses == NULL) { - LOGE("Failed to allocate memory for additional DNS responses"); - } else { - cb_data->responses = new_responses; - - for (int i = 0; i < result->dnsa4_nrr; i++) { - struct sockaddr_in *sa = - (struct sockaddr_in *)ss_malloc(sizeof(struct sockaddr_in)); - sa->sin_family = AF_INET; - sa->sin_port = cb_data->port; - sa->sin_addr = result->dnsa4_addr[i]; - - cb_data->responses[cb_data->response_count] = - (struct sockaddr *)sa; - if (cb_data->responses[cb_data->response_count] == NULL) { - LOGE( - "Failed to allocate memory for DNS query result address"); - } else { - cb_data->response_count++; - } - } - } - } - - ss_free(result); - cb_data->queries[0] = NULL; /* mark A query as being completed */ - - /* Once all queries have completed, call client callback */ - if (all_queries_are_null(cb_data)) { - return process_client_callback(cb_data); - } -} - -static void -dns_query_v6_cb(struct dns_ctx *ctx, struct dns_rr_a6 *result, void *data) -{ - struct ResolvQuery *cb_data = (struct ResolvQuery *)data; - - if (result == NULL) { - if (verbose) { - LOGI("IPv6 resolv: %s", dns_strerror(dns_status(ctx))); - } - } else if (result->dnsa6_nrr > 0) { - struct sockaddr **new_responses = ss_realloc(cb_data->responses, - (cb_data->response_count + - result->dnsa6_nrr) * - sizeof(struct sockaddr *)); - if (new_responses == NULL) { - LOGE("Failed to allocate memory for additional DNS responses"); - } else { - cb_data->responses = new_responses; - - for (int i = 0; i < result->dnsa6_nrr; i++) { - struct sockaddr_in6 *sa = - (struct sockaddr_in6 *)ss_malloc(sizeof(struct sockaddr_in6)); - sa->sin6_family = AF_INET6; - sa->sin6_port = cb_data->port; - sa->sin6_addr = result->dnsa6_addr[i]; - - cb_data->responses[cb_data->response_count] = - (struct sockaddr *)sa; - if (cb_data->responses[cb_data->response_count] == NULL) { - LOGE( - "Failed to allocate memory for DNS query result address"); - } else { - cb_data->response_count++; - } - } - } - } - - ss_free(result); - cb_data->queries[1] = NULL; /* mark AAAA query as being completed */ - - /* Once all queries have completed, call client callback */ - if (all_queries_are_null(cb_data)) { - return process_client_callback(cb_data); - } -} - -/* - * Called once all queries have been completed - */ -static void -process_client_callback(struct ResolvQuery *cb_data) -{ - struct sockaddr *best_address = NULL; - - if (resolv_mode == MODE_IPV4_FIRST) { - best_address = choose_ipv4_first(cb_data); - } else if (resolv_mode == MODE_IPV6_FIRST) { - best_address = choose_ipv6_first(cb_data); - } else { - best_address = choose_any(cb_data); - } - - cb_data->client_cb(best_address, cb_data->client_cb_data); - - for (int i = 0; i < cb_data->response_count; i++) - ss_free(cb_data->responses[i]); - - ss_free(cb_data->responses); - if (cb_data->client_free_cb != NULL) { - cb_data->client_free_cb(cb_data->client_cb_data); - } - ss_free(cb_data); -} - -static struct sockaddr * -choose_ipv4_first(struct ResolvQuery *cb_data) -{ - for (int i = 0; i < cb_data->response_count; i++) - if (cb_data->responses[i]->sa_family == AF_INET) { - return cb_data->responses[i]; - } - - return choose_any(cb_data); -} - -static struct sockaddr * -choose_ipv6_first(struct ResolvQuery *cb_data) -{ - for (int i = 0; i < cb_data->response_count; i++) - if (cb_data->responses[i]->sa_family == AF_INET6) { - return cb_data->responses[i]; - } - - return choose_any(cb_data); -} - -static struct sockaddr * -choose_any(struct ResolvQuery *cb_data) -{ - if (cb_data->response_count >= 1) { - return cb_data->responses[0]; - } - - return NULL; -} - -/* - * DNS timeout callback - */ -static void -resolv_timeout_cb(struct ev_loop *loop, struct ev_timer *w, int revents) -{ - struct dns_ctx *ctx = (struct dns_ctx *)w->data; - - if (revents & EV_TIMER) { - dns_timeouts(ctx, 30, ev_now(loop)); - } -} - -/* - * Callback to setup DNS timeout callback - */ -static void -dns_timer_setup_cb(struct dns_ctx *ctx, int timeout, void *data) -{ - struct ev_loop *loop = (struct ev_loop *)data; - - if (ev_is_active(&resolv_timeout_watcher)) { - ev_timer_stop(loop, &resolv_timeout_watcher); - } - - if (ctx != NULL && timeout >= 0) { - ev_timer_set(&resolv_timeout_watcher, timeout, 0.0); - ev_timer_start(loop, &resolv_timeout_watcher); - } -} - -static inline int -all_queries_are_null(struct ResolvQuery *cb_data) -{ - int result = 1; - - for (int i = 0; i < sizeof(cb_data->queries) / sizeof(cb_data->queries[0]); - i++) - result = result && cb_data->queries[i] == NULL; - - return result; -} diff --git a/shadowsocksr-libev/src/server/resolv.h b/shadowsocksr-libev/src/server/resolv.h deleted file mode 100644 index 05529223..00000000 --- a/shadowsocksr-libev/src/server/resolv.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2014, Dustin Lundquist - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef RESOLV_H -#define RESOLV_H - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#ifdef __MINGW32__ -#include "win32.h" -#else -#include -#endif - -struct ResolvQuery; - -int resolv_init(struct ev_loop *, char **, int, int); -struct ResolvQuery *resolv_query(const char *, void (*)(struct sockaddr *, - void *), void (*)( - void *), void *, uint16_t); -void resolv_cancel(struct ResolvQuery *); -void resolv_shutdown(struct ev_loop *); - -#endif diff --git a/shadowsocksr-libev/src/server/rule.c b/shadowsocksr-libev/src/server/rule.c deleted file mode 100644 index 8aae04ea..00000000 --- a/shadowsocksr-libev/src/server/rule.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2011 and 2012, Dustin Lundquist - * Copyright (c) 2011 Manuel Kasper - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#ifdef __MINGW32__ -extern void ss_error(const char *s); -#endif - -#include "rule.h" -#include "utils.h" - -static void free_rule(rule_t *); - -rule_t * -new_rule() -{ - rule_t *rule; - - rule = calloc(1, sizeof(rule_t)); - if (rule == NULL) { - ERROR("malloc"); - return NULL; - } - - return rule; -} - -int -accept_rule_arg(rule_t *rule, const char *arg) -{ - if (rule->pattern == NULL) { - rule->pattern = strdup(arg); - if (rule->pattern == NULL) { - ERROR("strdup failed"); - return -1; - } - } else { - LOGE("Unexpected table rule argument: %s", arg); - return -1; - } - - return 1; -} - -void -add_rule(struct cork_dllist *rules, rule_t *rule) -{ - cork_dllist_add(rules, &rule->entries); -} - -int -init_rule(rule_t *rule) -{ - if (rule->pattern_re == NULL) { - const char *reerr; - int reerroffset; - - rule->pattern_re = - pcre_compile(rule->pattern, 0, &reerr, &reerroffset, NULL); - if (rule->pattern_re == NULL) { - LOGE("Regex compilation of \"%s\" failed: %s, offset %d", - rule->pattern, reerr, reerroffset); - return 0; - } - } - - return 1; -} - -rule_t * -lookup_rule(const struct cork_dllist *rules, const char *name, size_t name_len) -{ - struct cork_dllist_item *curr, *next; - - if (name == NULL) { - name = ""; - name_len = 0; - } - - cork_dllist_foreach_void(rules, curr, next) { - rule_t *rule = cork_container_of(curr, rule_t, entries); - if (pcre_exec(rule->pattern_re, NULL, - name, name_len, 0, 0, NULL, 0) >= 0) - return rule; - } - - return NULL; -} - -void -remove_rule(rule_t *rule) -{ - cork_dllist_remove(&rule->entries); - free_rule(rule); -} - -static void -free_rule(rule_t *rule) -{ - if (rule == NULL) - return; - - ss_free(rule->pattern); - if (rule->pattern_re != NULL) - pcre_free(rule->pattern_re); - ss_free(rule); -} diff --git a/shadowsocksr-libev/src/server/rule.h b/shadowsocksr-libev/src/server/rule.h deleted file mode 100644 index 015bc42b..00000000 --- a/shadowsocksr-libev/src/server/rule.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2011 and 2012, Dustin Lundquist - * Copyright (c) 2011 Manuel Kasper - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef RULE_H -#define RULE_H - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#ifdef HAVE_PCRE_H -#include -#elif HAVE_PCRE_PCRE_H -#include -#endif - -typedef struct rule { - char *pattern; - - /* Runtime fields */ - pcre *pattern_re; - - struct cork_dllist_item entries; -} rule_t; - -void add_rule(struct cork_dllist *, rule_t *); -int init_rule(rule_t *); -rule_t *lookup_rule(const struct cork_dllist *, const char *, size_t); -void remove_rule(rule_t *); -rule_t *new_rule(); -int accept_rule_arg(rule_t *, const char *); - -#endif diff --git a/shadowsocksr-libev/src/server/server.c b/shadowsocksr-libev/src/server/server.c deleted file mode 100644 index 65b0e42a..00000000 --- a/shadowsocksr-libev/src/server/server.c +++ /dev/null @@ -1,2209 +0,0 @@ -/* - * server.c - Provide shadowsocks service - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef __MINGW32__ -#include -#include -#include -#include -#include -#include -#endif - -#include -#include - -#ifdef __MINGW32__ -#include "win32.h" -#endif - -#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__) -#include -#include -#define SET_INTERFACE -#endif - -#include "netutils.h" -#include "utils.h" -#include "acl.h" -#include "server.h" - -#include "obfs.c" // I don't want to modify makefile - -#ifndef EAGAIN -#define EAGAIN EWOULDBLOCK -#endif - -#ifndef EWOULDBLOCK -#define EWOULDBLOCK EAGAIN -#endif - -#ifndef BUF_SIZE -#define BUF_SIZE 2048 -#endif - -#ifndef SSMAXCONN -#define SSMAXCONN 1024 -#endif - -#ifndef UPDATE_INTERVAL -#define UPDATE_INTERVAL 30 -#endif - -static void signal_cb(EV_P_ ev_signal *w, int revents); -static void accept_cb(EV_P_ ev_io *w, int revents); -static void server_send_cb(EV_P_ ev_io *w, int revents); -static void server_recv_cb(EV_P_ ev_io *w, int revents); -static void remote_recv_cb(EV_P_ ev_io *w, int revents); -static void remote_send_cb(EV_P_ ev_io *w, int revents); -static void server_timeout_cb(EV_P_ ev_timer *watcher, int revents); -static void block_list_clear_cb(EV_P_ ev_timer *watcher, int revents); - -static remote_t *new_remote(int fd); -static server_t *new_server(int fd, listen_ctx_t *listener); -static remote_t *connect_to_remote(EV_P_ struct addrinfo *res, - server_t *server); - -static void free_remote(remote_t *remote); -static void close_and_free_remote(EV_P_ remote_t *remote); -static void free_server(server_t *server); -static void close_and_free_server(EV_P_ server_t *server); -static void server_resolve_cb(struct sockaddr *addr, void *data); -static void query_free_cb(void *data); - -static size_t parse_header_len(const char atyp, const char *data, size_t offset); -static int is_header_complete(const buffer_t *buf); - -int verbose = 0; - -static int acl = 0; -static int mode = TCP_ONLY; -static int auth = 0; -static int ipv6first = 0; - -static int protocol_compatible = 0;//SSR -static int obfs_compatible = 0;//SSR - -static int fast_open = 0; -#ifdef HAVE_SETRLIMIT -static int nofile = 0; -#endif -static int remote_conn = 0; -static int server_conn = 0; - -static char *bind_address = NULL; -static char *server_port = NULL; -static char *manager_address = NULL; -uint64_t tx = 0; -uint64_t rx = 0; -ev_timer stat_update_watcher; -ev_timer block_list_watcher; - -static struct cork_dllist connections; - -static void -stat_update_cb(EV_P_ ev_timer *watcher, int revents) -{ - struct sockaddr_un svaddr, claddr; - int sfd = -1; - size_t msgLen; - char resp[BUF_SIZE]; - - if (verbose) { - LOGI("update traffic stat: tx: %" PRIu64 " rx: %" PRIu64 "", tx, rx); - } - - snprintf(resp, BUF_SIZE, "stat: {\"%s\":%" PRIu64 "}", server_port, tx + rx); - msgLen = strlen(resp) + 1; - - ss_addr_t ip_addr = { .host = NULL, .port = NULL }; - parse_addr(manager_address, &ip_addr); - - if (ip_addr.host == NULL || ip_addr.port == NULL) { - sfd = socket(AF_UNIX, SOCK_DGRAM, 0); - if (sfd == -1) { - ERROR("stat_socket"); - return; - } - - memset(&claddr, 0, sizeof(struct sockaddr_un)); - claddr.sun_family = AF_UNIX; - snprintf(claddr.sun_path, sizeof(claddr.sun_path), "/tmp/shadowsocks.%s", server_port); - - unlink(claddr.sun_path); - - if (bind(sfd, (struct sockaddr *)&claddr, sizeof(struct sockaddr_un)) == -1) { - ERROR("stat_bind"); - close(sfd); - return; - } - - memset(&svaddr, 0, sizeof(struct sockaddr_un)); - svaddr.sun_family = AF_UNIX; - strncpy(svaddr.sun_path, manager_address, sizeof(svaddr.sun_path) - 1); - - if (sendto(sfd, resp, strlen(resp) + 1, 0, (struct sockaddr *)&svaddr, - sizeof(struct sockaddr_un)) != msgLen) { - ERROR("stat_sendto"); - close(sfd); - return; - } - - unlink(claddr.sun_path); - } else { - struct sockaddr_storage storage; - memset(&storage, 0, sizeof(struct sockaddr_storage)); - if (get_sockaddr(ip_addr.host, ip_addr.port, &storage, 0, ipv6first) == -1) { - ERROR("failed to parse the manager addr"); - return; - } - - sfd = socket(storage.ss_family, SOCK_DGRAM, 0); - - if (sfd == -1) { - ERROR("stat_socket"); - return; - } - - size_t addr_len = get_sockaddr_len((struct sockaddr *)&storage); - if (sendto(sfd, resp, strlen(resp) + 1, 0, (struct sockaddr *)&storage, - addr_len) != msgLen) { - ERROR("stat_sendto"); - close(sfd); - return; - } - } - - close(sfd); -} - -static void -free_connections(struct ev_loop *loop) -{ - struct cork_dllist_item *curr, *next; - cork_dllist_foreach_void(&connections, curr, next) { - server_t *server = cork_container_of(curr, server_t, entries); - remote_t *remote = server->remote; - close_and_free_server(loop, server); - close_and_free_remote(loop, remote); - } -} - -static size_t -parse_header_len(const char atyp, const char *data, size_t offset) -{ - size_t len = 0; - if ((atyp & ADDRTYPE_MASK) == 1) { - // IP V4 - len += sizeof(struct in_addr); - } else if ((atyp & ADDRTYPE_MASK) == 3) { - // Domain name - uint8_t name_len = *(uint8_t *)(data + offset); - len += name_len + 1; - } else if ((atyp & ADDRTYPE_MASK) == 4) { - // IP V6 - len += sizeof(struct in6_addr); - } else { - return 0; - } - len += 2; - return len; -} - -static int -is_header_complete(const buffer_t *buf) -{ - size_t header_len = 0; - size_t buf_len = buf->len; - - char atyp = buf->array[header_len]; - - // 1 byte for atyp - header_len++; - - if ((atyp & ADDRTYPE_MASK) == 1) { - // IP V4 - header_len += sizeof(struct in_addr); - } else if ((atyp & ADDRTYPE_MASK) == 3) { - // Domain name - // domain len + len of domain - if (buf_len < header_len + 1) - return 0; - uint8_t name_len = *(uint8_t *)(buf->array + header_len); - header_len += name_len + 1; - } else if ((atyp & ADDRTYPE_MASK) == 4) { - // IP V6 - header_len += sizeof(struct in6_addr); - } else { - return -1; - } - - // len of port - header_len += 2; - - // size of ONETIMEAUTH_BYTES - if (auth || (atyp & ONETIMEAUTH_FLAG)) { - header_len += ONETIMEAUTH_BYTES; - } - - return buf_len >= header_len ? 1 : 0; -} - -static char * -get_peer_name(int fd) -{ - static char peer_name[INET6_ADDRSTRLEN] = { 0 }; - struct sockaddr_storage addr; - socklen_t len = sizeof(struct sockaddr_storage); - memset(&addr, 0, len); - memset(peer_name, 0, INET6_ADDRSTRLEN); - int err = getpeername(fd, (struct sockaddr *)&addr, &len); - if (err == 0) { - if (addr.ss_family == AF_INET) { - struct sockaddr_in *s = (struct sockaddr_in *)&addr; - dns_ntop(AF_INET, &s->sin_addr, peer_name, INET_ADDRSTRLEN); - } else if (addr.ss_family == AF_INET6) { - struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr; - dns_ntop(AF_INET6, &s->sin6_addr, peer_name, INET6_ADDRSTRLEN); - } - } else { - return NULL; - } - return peer_name; -} - -#ifdef __linux__ -static void -set_linger(int fd) -{ - struct linger so_linger; - memset(&so_linger, 0, sizeof(struct linger)); - so_linger.l_onoff = 1; - so_linger.l_linger = 0; - setsockopt(fd, SOL_SOCKET, SO_LINGER, &so_linger, sizeof so_linger); -} -#endif - -static void -reset_addr(int fd) -{ - char *peer_name; - peer_name = get_peer_name(fd); - if (peer_name != NULL) { - remove_from_block_list(peer_name); - } -} - -static void -report_addr(int fd, int err_level) -{ -#ifdef __linux__ - set_linger(fd); -#endif - - char *peer_name; - peer_name = get_peer_name(fd); - if (peer_name != NULL) { - LOGE("failed to handshake with %s", peer_name); - update_block_list(peer_name, err_level); - } -} - -int -setfastopen(int fd) -{ - int s = 0; -#ifdef TCP_FASTOPEN - if (fast_open) { -#ifdef __APPLE__ - int opt = 1; -#else - int opt = 5; -#endif - s = setsockopt(fd, IPPROTO_TCP, TCP_FASTOPEN, &opt, sizeof(opt)); - - if (s == -1) { - if (errno == EPROTONOSUPPORT || errno == ENOPROTOOPT) { - LOGE("fast open is not supported on this platform"); - fast_open = 0; - } else { - ERROR("setsockopt"); - } - } - } -#endif - return s; -} - -#ifndef __MINGW32__ -int -setnonblocking(int fd) -{ - int flags; - if (-1 == (flags = fcntl(fd, F_GETFL, 0))) { - flags = 0; - } - return fcntl(fd, F_SETFL, flags | O_NONBLOCK); -} - -#endif - -int -create_and_bind(const char *host, const char *port, int mptcp) -{ - struct addrinfo hints; - struct addrinfo *result, *rp, *ipv4v6bindall; - int s, listen_sock; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; /* Return IPv4 and IPv6 choices */ - hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */ - hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG; /* For wildcard IP address */ - hints.ai_protocol = IPPROTO_TCP; - - for (int i = 1; i < 8; i++) { - s = getaddrinfo(host, port, &hints, &result); - if (s == 0) { - break; - } else { - sleep(pow(2, i)); - LOGE("failed to resolve server name, wait %.0f seconds", pow(2, i)); - } - } - - if (s != 0) { - LOGE("getaddrinfo: %s", gai_strerror(s)); - return -1; - } - - rp = result; - - /* - * On Linux, with net.ipv6.bindv6only = 0 (the default), getaddrinfo(NULL) with - * AI_PASSIVE returns 0.0.0.0 and :: (in this order). AI_PASSIVE was meant to - * return a list of addresses to listen on, but it is impossible to listen on - * 0.0.0.0 and :: at the same time, if :: implies dualstack mode. - */ - if (!host) { - ipv4v6bindall = result; - - /* Loop over all address infos found until a IPV6 address is found. */ - while (ipv4v6bindall) { - if (ipv4v6bindall->ai_family == AF_INET6) { - rp = ipv4v6bindall; /* Take first IPV6 address available */ - break; - } - ipv4v6bindall = ipv4v6bindall->ai_next; /* Get next address info, if any */ - } - } - - for (/*rp = result*/; rp != NULL; rp = rp->ai_next) { - listen_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (listen_sock == -1) { - continue; - } - - if (rp->ai_family == AF_INET6) { - int ipv6only = host ? 1 : 0; - setsockopt(listen_sock, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6only, sizeof(ipv6only)); - } - - int opt = 1; - setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); -#ifdef SO_NOSIGPIPE - setsockopt(listen_sock, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt)); -#endif - int err = set_reuseport(listen_sock); - if (err == 0) { - LOGI("tcp port reuse enabled"); - } - - if (mptcp == 1) { - int err = setsockopt(listen_sock, SOL_TCP, MPTCP_ENABLED, &opt, sizeof(opt)); - if (err == -1) { - ERROR("failed to enable multipath TCP"); - } - } - - s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen); - if (s == 0) { - /* We managed to bind successfully! */ - break; - } else { - ERROR("bind"); - } - - close(listen_sock); - } - - if (rp == NULL) { - LOGE("Could not bind"); - return -1; - } - - freeaddrinfo(result); - - return listen_sock; -} - -static remote_t * -connect_to_remote(EV_P_ struct addrinfo *res, - server_t *server) -{ - int sockfd; -#ifdef SET_INTERFACE - const char *iface = server->listen_ctx->iface; -#endif - - if (acl) { - char ipstr[INET6_ADDRSTRLEN]; - memset(ipstr, 0, INET6_ADDRSTRLEN); - - if (res->ai_addr->sa_family == AF_INET) { - struct sockaddr_in *s = (struct sockaddr_in *)res->ai_addr; - dns_ntop(AF_INET, &s->sin_addr, ipstr, INET_ADDRSTRLEN); - } else if (res->ai_addr->sa_family == AF_INET6) { - struct sockaddr_in6 *s = (struct sockaddr_in6 *)res->ai_addr; - dns_ntop(AF_INET6, &s->sin6_addr, ipstr, INET6_ADDRSTRLEN); - } - - if (outbound_block_match_host(ipstr) == 1) { - if (verbose) - LOGI("outbound blocked %s", ipstr); - return NULL; - } - } - - // initialize remote socks - sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); - if (sockfd == -1) { - ERROR("socket"); - close(sockfd); - return NULL; - } - - int opt = 1; - setsockopt(sockfd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt)); -#ifdef SO_NOSIGPIPE - setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt)); -#endif - setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); - - // setup remote socks - - if (setnonblocking(sockfd) == -1) - ERROR("setnonblocking"); - - if (bind_address != NULL) - if (bind_to_address(sockfd, bind_address) == -1) { - ERROR("bind_to_address"); - close(sockfd); - return NULL; - } - -#ifdef SET_INTERFACE - if (iface) { - if (setinterface(sockfd, iface) == -1) { - ERROR("setinterface"); - close(sockfd); - return NULL; - } - } -#endif - - remote_t *remote = new_remote(sockfd); - -#ifdef TCP_FASTOPEN - if (fast_open) { -#ifdef __APPLE__ - ((struct sockaddr_in *)(res->ai_addr))->sin_len = sizeof(struct sockaddr_in); - sa_endpoints_t endpoints; - memset((char *)&endpoints, 0, sizeof(endpoints)); - endpoints.sae_dstaddr = res->ai_addr; - endpoints.sae_dstaddrlen = res->ai_addrlen; - - struct iovec iov; - iov.iov_base = server->buf->array + server->buf->idx; - iov.iov_len = server->buf->len; - size_t len; - int s = connectx(sockfd, &endpoints, SAE_ASSOCID_ANY, CONNECT_DATA_IDEMPOTENT, - &iov, 1, &len, NULL); - if (s == 0) { - s = len; - } -#else - ssize_t s = sendto(sockfd, server->buf->array + server->buf->idx, - server->buf->len, MSG_FASTOPEN, res->ai_addr, - res->ai_addrlen); -#endif - if (s == -1) { - if (errno == CONNECT_IN_PROGRESS || errno == EAGAIN - || errno == EWOULDBLOCK) { - // The remote server doesn't support tfo or it's the first connection to the server. - // It will automatically fall back to conventional TCP. - } else if (errno == EOPNOTSUPP || errno == EPROTONOSUPPORT || - errno == ENOPROTOOPT) { - // Disable fast open as it's not supported - fast_open = 0; - LOGE("fast open is not supported on this platform"); - } else { - ERROR("sendto"); - } - } else if (s <= server->buf->len) { - server->buf->idx += s; - server->buf->len -= s; - } else { - server->buf->idx = 0; - server->buf->len = 0; - } - } -#endif - - if (!fast_open) { - int r = connect(sockfd, res->ai_addr, res->ai_addrlen); - - if (r == -1 && errno != CONNECT_IN_PROGRESS) { - ERROR("connect"); - close_and_free_remote(EV_A_ remote); - return NULL; - } - } - - return remote; -} - -static void -server_recv_cb(EV_P_ ev_io *w, int revents) -{ - server_ctx_t *server_recv_ctx = (server_ctx_t *)w; - server_t *server = server_recv_ctx->server; - remote_t *remote = NULL; - - int len = server->buf->len; - buffer_t *buf = server->buf; - - if (server->stage > STAGE_PARSE) { - remote = server->remote; - buf = remote->buf; - len = 0; - - ev_timer_again(EV_A_ & server->recv_ctx->watcher); - } - - if (len > BUF_SIZE) { - ERROR("out of recv buffer"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - - ssize_t r = recv(server->fd, buf->array + len, BUF_SIZE - len, 0); - - if (r == 0) { - // connection closed - if (verbose) { - LOGI("server_recv close the connection"); - } - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } else if (r == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK) { - // no data - // continue to wait for recv - return; - } else { - ERROR("server recv"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } - - tx += r; - - if (server->stage == STAGE_ERROR) { - server->buf->len = 0; - server->buf->idx = 0; - return; - } - - // handle incomplete header part 1 - if (server->stage == STAGE_INIT) { - buf->len += r; - if (buf->len <= enc_get_iv_len() + 1) { - // wait for more - return; - } - } else { - buf->len = r; - } - - // SSR beg - - if (server->obfs_plugin) { - obfs_class *obfs_plugin = server->obfs_plugin; - if (obfs_plugin->server_decode) { - int needsendback = 0; - - if(obfs_compatible == 1) - { - char *back_buf = (char*)malloc(sizeof(buffer_t)); - memcpy(back_buf, buf, sizeof(buffer_t)); - buf->len = obfs_plugin->server_decode(server->obfs, &buf->array, buf->len, &buf->capacity, &needsendback); - - if ((int)buf->len < 0) - { - LOGE("obfs_compatible"); - memcpy(buf, back_buf, sizeof(buffer_t)); - free(back_buf); - server->obfs_compatible_state = 1; - } - } - else - { - buf->len = obfs_plugin->server_decode(server->obfs, &buf->array, buf->len, &buf->capacity, &needsendback); - if ((int)buf->len < 0) { - LOGE("server_decode"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } - - if (needsendback) { - size_t capacity = BUF_SIZE; - char *sendback_buf = (char*)malloc(capacity); - obfs_class *obfs_plugin = server->obfs_plugin; - if (obfs_plugin->server_encode) { - int len = obfs_plugin->server_encode(server->obfs, &sendback_buf, 0, &capacity); - send(server->fd, sendback_buf, len, 0); - } - free(sendback_buf); - return; - } - } - } - - int err = ss_decrypt(buf, server->d_ctx, BUF_SIZE); - - if (err) { - report_addr(server->fd, MALICIOUS); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - - if (server->protocol_plugin) { - obfs_class *protocol_plugin = server->protocol_plugin; - if (protocol_plugin->server_post_decrypt) { - - if(protocol_compatible == 1) - { - char *back_buf = (char*)malloc(sizeof(buffer_t)); - memcpy(back_buf, buf, sizeof(buffer_t)); - buf->len = protocol_plugin->server_post_decrypt(server->protocol, &buf->array, buf->len, &buf->capacity); - - if ((int)buf->len < 0) { - LOGE("protocol_compatible"); - memcpy(buf, back_buf, sizeof(buffer_t)); - free(back_buf); - server->protocol_compatible_state = 1; - } - if ( buf->len == 0 ) - { - LOGE("protocol_compatible"); - memcpy(buf, back_buf, sizeof(buffer_t)); - free(back_buf); - server->protocol_compatible_state = 1; - } - } - else - { - buf->len = protocol_plugin->server_post_decrypt(server->protocol, &buf->array, buf->len, &buf->capacity); - if ((int)buf->len < 0) { - LOGE("server_post_decrypt"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - if ( buf->len == 0 ) - { - LOGE("server_post_decrypt"); - return; - } - } - } - } - // SSR end - - // handle incomplete header part 2 - if (server->stage == STAGE_INIT) { - int ret = is_header_complete(server->buf); - if (ret == 1) { - bfree(server->header_buf); - ss_free(server->header_buf); - server->stage = STAGE_PARSE; - } else if (ret == -1) { - server->stage = STAGE_ERROR; - report_addr(server->fd, MALFORMED); - server->buf->len = 0; - server->buf->idx = 0; - return; - } else { - server->stage = STAGE_HANDSHAKE; - } - } - - if (server->stage == STAGE_HANDSHAKE) { - size_t header_len = server->header_buf->len; - brealloc(server->header_buf, server->buf->len + header_len, BUF_SIZE); - memcpy(server->header_buf->array + header_len, - server->buf->array, server->buf->len); - server->header_buf->len = server->buf->len + header_len; - - int ret = is_header_complete(server->buf); - - if (ret == 1) { - brealloc(server->buf, server->header_buf->len, BUF_SIZE); - memcpy(server->buf->array, server->header_buf->array, server->header_buf->len); - server->buf->len = server->header_buf->len; - bfree(server->header_buf); - ss_free(server->header_buf); - server->stage = STAGE_PARSE; - } else { - if (ret == -1) - server->stage = STAGE_ERROR; - server->buf->len = 0; - server->buf->idx = 0; - return; - } - } - - // handshake and transmit data - if (server->stage == STAGE_STREAM) { - if (server->auth && !ss_check_hash(remote->buf, server->chunk, server->d_ctx, BUF_SIZE)) { - LOGE("hash error"); - report_addr(server->fd, BAD); - close_and_free_server(EV_A_ server); - close_and_free_remote(EV_A_ remote); - return; - } - - int s = send(remote->fd, remote->buf->array, remote->buf->len, 0); - if (s == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK) { - // no data, wait for send - remote->buf->idx = 0; - ev_io_stop(EV_A_ & server_recv_ctx->io); - ev_io_start(EV_A_ & remote->send_ctx->io); - } else { - ERROR("server_recv_send"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - } - } else if (s < remote->buf->len) { - remote->buf->len -= s; - remote->buf->idx = s; - ev_io_stop(EV_A_ & server_recv_ctx->io); - ev_io_start(EV_A_ & remote->send_ctx->io); - } - return; - } else if (server->stage == STAGE_PARSE) { - /* - * Shadowsocks TCP Relay Header: - * - * +------+----------+----------+----------------+ - * | ATYP | DST.ADDR | DST.PORT | HMAC-SHA1 | - * +------+----------+----------+----------------+ - * | 1 | Variable | 2 | 10 | - * +------+----------+----------+----------------+ - * - * If ATYP & ONETIMEAUTH_FLAG(0x10) != 0, Authentication (HMAC-SHA1) is enabled. - * - * The key of HMAC-SHA1 is (IV + KEY) and the input is the whole header. - * The output of HMAC-SHA is truncated to 10 bytes (leftmost bits). - */ - - /* - * Shadowsocks Request's Chunk Authentication for TCP Relay's payload - * (No chunk authentication for response's payload): - * - * +------+-----------+-------------+------+ - * | LEN | HMAC-SHA1 | DATA | ... - * +------+-----------+-------------+------+ - * | 2 | 10 | Variable | ... - * +------+-----------+-------------+------+ - * - * The key of HMAC-SHA1 is (IV + CHUNK ID) - * The output of HMAC-SHA is truncated to 10 bytes (leftmost bits). - */ - - int offset = 0; - int need_query = 0; - char atyp = server->buf->array[offset++]; - char host[257] = { 0 }; - uint16_t port = 0; - struct addrinfo info; - struct sockaddr_storage storage; - memset(&info, 0, sizeof(struct addrinfo)); - memset(&storage, 0, sizeof(struct sockaddr_storage)); - - if (auth || (atyp & ONETIMEAUTH_FLAG)) { - size_t header_len = parse_header_len(atyp, server->buf->array, offset); - size_t len = server->buf->len; - - if (header_len == 0 || len < offset + header_len + ONETIMEAUTH_BYTES) { - report_addr(server->fd, MALFORMED); - close_and_free_server(EV_A_ server); - return; - } - - server->buf->len = offset + header_len + ONETIMEAUTH_BYTES; - if (ss_onetimeauth_verify(server->buf, server->d_ctx->evp.iv)) { - report_addr(server->fd, BAD); - close_and_free_server(EV_A_ server); - return; - } - - server->buf->len = len; - server->auth = 1; - } - - // get remote addr and port - if ((atyp & ADDRTYPE_MASK) == 1) { - // IP V4 - struct sockaddr_in *addr = (struct sockaddr_in *)&storage; - size_t in_addr_len = sizeof(struct in_addr); - addr->sin_family = AF_INET; - if (server->buf->len >= in_addr_len + 3) { - addr->sin_addr = *(struct in_addr *)(server->buf->array + offset); - dns_ntop(AF_INET, (const void *)(server->buf->array + offset), - host, INET_ADDRSTRLEN); - offset += in_addr_len; - } else { - LOGE("invalid header with addr type %d", atyp); - report_addr(server->fd, MALFORMED); - close_and_free_server(EV_A_ server); - return; - } - addr->sin_port = *(uint16_t *)(server->buf->array + offset); - info.ai_family = AF_INET; - info.ai_socktype = SOCK_STREAM; - info.ai_protocol = IPPROTO_TCP; - info.ai_addrlen = sizeof(struct sockaddr_in); - info.ai_addr = (struct sockaddr *)addr; - } else if ((atyp & ADDRTYPE_MASK) == 3) { - // Domain name - uint8_t name_len = *(uint8_t *)(server->buf->array + offset); - if (name_len + 4 <= server->buf->len) { - memcpy(host, server->buf->array + offset + 1, name_len); - offset += name_len + 1; - } else { - LOGE("invalid name length: %d", name_len); - report_addr(server->fd, MALFORMED); - close_and_free_server(EV_A_ server); - return; - } - if (acl && outbound_block_match_host(host) == 1) { - if (verbose) - LOGI("outbound blocked %s", host); - close_and_free_server(EV_A_ server); - return; - } - struct cork_ip ip; - if (cork_ip_init(&ip, host) != -1) { - info.ai_socktype = SOCK_STREAM; - info.ai_protocol = IPPROTO_TCP; - if (ip.version == 4) { - struct sockaddr_in *addr = (struct sockaddr_in *)&storage; - dns_pton(AF_INET, host, &(addr->sin_addr)); - addr->sin_port = *(uint16_t *)(server->buf->array + offset); - addr->sin_family = AF_INET; - info.ai_family = AF_INET; - info.ai_addrlen = sizeof(struct sockaddr_in); - info.ai_addr = (struct sockaddr *)addr; - } else if (ip.version == 6) { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&storage; - dns_pton(AF_INET6, host, &(addr->sin6_addr)); - addr->sin6_port = *(uint16_t *)(server->buf->array + offset); - addr->sin6_family = AF_INET6; - info.ai_family = AF_INET6; - info.ai_addrlen = sizeof(struct sockaddr_in6); - info.ai_addr = (struct sockaddr *)addr; - } - } else { - if (!validate_hostname(host, name_len)) { - LOGE("invalid host name"); - report_addr(server->fd, MALFORMED); - close_and_free_server(EV_A_ server); - return; - } - need_query = 1; - } - } else if ((atyp & ADDRTYPE_MASK) == 4) { - // IP V6 - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&storage; - size_t in6_addr_len = sizeof(struct in6_addr); - addr->sin6_family = AF_INET6; - if (server->buf->len >= in6_addr_len + 3) { - addr->sin6_addr = *(struct in6_addr *)(server->buf->array + offset); - dns_ntop(AF_INET6, (const void *)(server->buf->array + offset), - host, INET6_ADDRSTRLEN); - offset += in6_addr_len; - } else { - LOGE("invalid header with addr type %d", atyp); - report_addr(server->fd, MALFORMED); - close_and_free_server(EV_A_ server); - return; - } - addr->sin6_port = *(uint16_t *)(server->buf->array + offset); - info.ai_family = AF_INET6; - info.ai_socktype = SOCK_STREAM; - info.ai_protocol = IPPROTO_TCP; - info.ai_addrlen = sizeof(struct sockaddr_in6); - info.ai_addr = (struct sockaddr *)addr; - } - - if (offset == 1) { - LOGE("invalid header with addr type %d", atyp); - report_addr(server->fd, MALFORMED); - close_and_free_server(EV_A_ server); - return; - } - - port = (*(uint16_t *)(server->buf->array + offset)); - - offset += 2; - - if (server->auth) { - offset += ONETIMEAUTH_BYTES; - } - - if (server->buf->len < offset) { - report_addr(server->fd, MALFORMED); - close_and_free_server(EV_A_ server); - return; - } else { - server->buf->len -= offset; - memmove(server->buf->array, server->buf->array + offset, server->buf->len); - } - - if (verbose) { - if ((atyp & ADDRTYPE_MASK) == 4) - LOGI("connect to [%s]:%d", host, ntohs(port)); - else - LOGI("connect to %s:%d", host, ntohs(port)); - } - - if (server->auth && !ss_check_hash(server->buf, server->chunk, server->d_ctx, BUF_SIZE)) { - LOGE("hash error"); - report_addr(server->fd, BAD); - close_and_free_server(EV_A_ server); - return; - } - - - if (!need_query) { - remote_t *remote = connect_to_remote(EV_A_ &info, server); - - if (remote == NULL) { - LOGE("connect error"); - close_and_free_server(EV_A_ server); - return; - } else { - server->remote = remote; - remote->server = server; - - // XXX: should handle buffer carefully - if (server->buf->len > 0) { - memcpy(remote->buf->array, server->buf->array, server->buf->len); - remote->buf->len = server->buf->len; - remote->buf->idx = 0; - server->buf->len = 0; - server->buf->idx = 0; - } - - // waiting on remote connected event - ev_io_stop(EV_A_ & server_recv_ctx->io); - ev_io_start(EV_A_ & remote->send_ctx->io); - } - } else { - query_t *query = (query_t *)ss_malloc(sizeof(query_t)); - query->server = server; - snprintf(query->hostname, 256, "%s", host); - - server->stage = STAGE_RESOLVE; - server->query = resolv_query(host, server_resolve_cb, - query_free_cb, query, port); - - ev_io_stop(EV_A_ & server_recv_ctx->io); - } - - return; - } - // should not reach here - FATAL("server context error"); -} - -static void -server_send_cb(EV_P_ ev_io *w, int revents) -{ - server_ctx_t *server_send_ctx = (server_ctx_t *)w; - server_t *server = server_send_ctx->server; - remote_t *remote = server->remote; - - if (remote == NULL) { - LOGE("invalid server"); - close_and_free_server(EV_A_ server); - return; - } - - if (server->buf->len == 0) { - // close and free - if (verbose) { - LOGI("server_send close the connection"); - } - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } else { - // has data to send - ssize_t s = send(server->fd, server->buf->array + server->buf->idx, - server->buf->len, 0); - if (s == -1) { - if (errno != EAGAIN && errno != EWOULDBLOCK) { - ERROR("server_send_send"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - } - return; - } else if (s < server->buf->len) { - // partly sent, move memory, wait for the next time to send - server->buf->len -= s; - server->buf->idx += s; - return; - } else { - // all sent out, wait for reading - server->buf->len = 0; - server->buf->idx = 0; - ev_io_stop(EV_A_ & server_send_ctx->io); - if (remote != NULL) { - ev_io_start(EV_A_ & remote->recv_ctx->io); - return; - } else { - LOGE("invalid remote"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } - } -} - -static void -block_list_clear_cb(EV_P_ ev_timer *watcher, int revents) -{ - clear_block_list(); -} - -static void -server_timeout_cb(EV_P_ ev_timer *watcher, int revents) -{ - server_ctx_t *server_ctx - = cork_container_of(watcher, server_ctx_t, watcher); - server_t *server = server_ctx->server; - remote_t *remote = server->remote; - - if (verbose) { - LOGI("TCP connection timeout"); - } - - if (server->stage < STAGE_PARSE) { - if (verbose) { - size_t len = server->stage ? - server->header_buf->len : server->buf->len; -#ifdef __MINGW32__ - LOGI("incomplete header: %u", len); -#else - LOGI("incomplete header: %zu", len); -#endif - } - report_addr(server->fd, SUSPICIOUS); - } - - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); -} - -static void -query_free_cb(void *data) -{ - if (data != NULL) { - ss_free(data); - } -} - -static void -server_resolve_cb(struct sockaddr *addr, void *data) -{ - query_t *query = (query_t *)data; - server_t *server = query->server; - struct ev_loop *loop = server->listen_ctx->loop; - - server->query = NULL; - - if (addr == NULL) { - LOGE("unable to resolve %s", query->hostname); - close_and_free_server(EV_A_ server); - } else { - if (verbose) { - LOGI("successfully resolved %s", query->hostname); - } - - struct addrinfo info; - memset(&info, 0, sizeof(struct addrinfo)); - info.ai_socktype = SOCK_STREAM; - info.ai_protocol = IPPROTO_TCP; - info.ai_addr = addr; - - if (addr->sa_family == AF_INET) { - info.ai_family = AF_INET; - info.ai_addrlen = sizeof(struct sockaddr_in); - } else if (addr->sa_family == AF_INET6) { - info.ai_family = AF_INET6; - info.ai_addrlen = sizeof(struct sockaddr_in6); - } - - remote_t *remote = connect_to_remote(EV_A_ &info, server); - - if (remote == NULL) { - close_and_free_server(EV_A_ server); - } else { - server->remote = remote; - remote->server = server; - - // XXX: should handle buffer carefully - if (server->buf->len > 0) { - memcpy(remote->buf->array, server->buf->array + server->buf->idx, - server->buf->len); - remote->buf->len = server->buf->len; - remote->buf->idx = 0; - server->buf->len = 0; - server->buf->idx = 0; - } - - // listen to remote connected event - ev_io_start(EV_A_ & remote->send_ctx->io); - } - } -} - -static void -remote_recv_cb(EV_P_ ev_io *w, int revents) -{ - remote_ctx_t *remote_recv_ctx = (remote_ctx_t *)w; - remote_t *remote = remote_recv_ctx->remote; - server_t *server = remote->server; - - if (server == NULL) { - LOGE("invalid server"); - close_and_free_remote(EV_A_ remote); - return; - } - - ev_timer_again(EV_A_ & server->recv_ctx->watcher); - - ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0); - - if (r == 0) { - // connection closed - if (verbose) { - LOGI("remote_recv close the connection"); - } - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } else if (r == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK) { - // no data - // continue to wait for recv - return; - } else { - ERROR("remote recv"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } - - rx += r; - - server->buf->len = r; - - // SSR beg - server_info _server_info; - if (server->obfs_plugin) { - server->obfs_plugin->get_server_info(server->obfs, &_server_info); - _server_info.head_len = get_head_size(server->buf->array, server->buf->len, 30); - server->obfs_plugin->set_server_info(server->obfs, &_server_info); - } - - if (server->protocol_plugin && server->obfs_compatible_state == 0) { - obfs_class *protocol_plugin = server->protocol_plugin; - if (protocol_plugin->server_pre_encrypt) { - server->buf->len = protocol_plugin->server_pre_encrypt(server->protocol, &server->buf->array, server->buf->len, &server->buf->capacity); - } - } - - int err = ss_encrypt(server->buf, server->e_ctx, BUF_SIZE); - - if (err) { - LOGE("invalid password or cipher"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - - if (server->obfs_plugin && server->obfs_compatible_state == 0) { - obfs_class *obfs_plugin = server->obfs_plugin; - if (obfs_plugin->server_encode) { - server->buf->len = obfs_plugin->server_encode(server->obfs, &server->buf->array, server->buf->len, &server->buf->capacity); - } - } - // SSR end - - int s = send(server->fd, server->buf->array, server->buf->len, 0); - - if (s == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK) { - // no data, wait for send - server->buf->idx = 0; - ev_io_stop(EV_A_ & remote_recv_ctx->io); - ev_io_start(EV_A_ & server->send_ctx->io); - } else { - ERROR("remote_recv_send"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } else if (s < server->buf->len) { - server->buf->len -= s; - server->buf->idx = s; - ev_io_stop(EV_A_ & remote_recv_ctx->io); - ev_io_start(EV_A_ & server->send_ctx->io); - } - - // Disable TCP_NODELAY after the first response are sent - if (!remote->recv_ctx->connected) { - int opt = 0; - setsockopt(server->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt)); - setsockopt(remote->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt)); - remote->recv_ctx->connected = 1; - } -} - -static void -remote_send_cb(EV_P_ ev_io *w, int revents) -{ - remote_ctx_t *remote_send_ctx = (remote_ctx_t *)w; - remote_t *remote = remote_send_ctx->remote; - server_t *server = remote->server; - - if (server == NULL) { - LOGE("invalid server"); - close_and_free_remote(EV_A_ remote); - return; - } - - if (!remote_send_ctx->connected) { - struct sockaddr_storage addr; - socklen_t len = sizeof(struct sockaddr_storage); - memset(&addr, 0, len); - int r = getpeername(remote->fd, (struct sockaddr *)&addr, &len); - if (r == 0) { - if (verbose) { - LOGI("remote connected"); - } - remote_send_ctx->connected = 1; - - // Clear the state of this address in the block list - reset_addr(server->fd); - - if (remote->buf->len == 0) { - server->stage = STAGE_STREAM; - ev_io_stop(EV_A_ & remote_send_ctx->io); - ev_io_start(EV_A_ & server->recv_ctx->io); - ev_io_start(EV_A_ & remote->recv_ctx->io); - return; - } - } else { - ERROR("getpeername"); - // not connected - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } - - if (remote->buf->len == 0) { - // close and free - if (verbose) { - LOGI("remote_send close the connection"); - } - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } else { - // has data to send - ssize_t s = send(remote->fd, remote->buf->array + remote->buf->idx, - remote->buf->len, 0); - if (s == -1) { - if (errno != EAGAIN && errno != EWOULDBLOCK) { - ERROR("remote_send_send"); - // close and free - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - } - return; - } else if (s < remote->buf->len) { - // partly sent, move memory, wait for the next time to send - remote->buf->len -= s; - remote->buf->idx += s; - return; - } else { - // all sent out, wait for reading - remote->buf->len = 0; - remote->buf->idx = 0; - ev_io_stop(EV_A_ & remote_send_ctx->io); - if (server != NULL) { - ev_io_start(EV_A_ & server->recv_ctx->io); - if (server->stage != STAGE_STREAM) { - server->stage = STAGE_STREAM; - ev_io_start(EV_A_ & remote->recv_ctx->io); - } - } else { - LOGE("invalid server"); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - } - return; - } - } -} - -static remote_t * -new_remote(int fd) -{ - if (verbose) { - remote_conn++; - } - - remote_t *remote; - - remote = ss_malloc(sizeof(remote_t)); - remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t)); - remote->send_ctx = ss_malloc(sizeof(remote_ctx_t)); - remote->buf = ss_malloc(sizeof(buffer_t)); - remote->fd = fd; - remote->recv_ctx->remote = remote; - remote->recv_ctx->connected = 0; - remote->send_ctx->remote = remote; - remote->send_ctx->connected = 0; - remote->server = NULL; - - ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ); - ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE); - - balloc(remote->buf, BUF_SIZE); - - return remote; -} - -static void -free_remote(remote_t *remote) -{ - if (remote->server != NULL) { - remote->server->remote = NULL; - } - if (remote->buf != NULL) { - bfree(remote->buf); - ss_free(remote->buf); - } - ss_free(remote->recv_ctx); - ss_free(remote->send_ctx); - ss_free(remote); -} - -static void -close_and_free_remote(EV_P_ remote_t *remote) -{ - if (remote != NULL) { - ev_io_stop(EV_A_ & remote->send_ctx->io); - ev_io_stop(EV_A_ & remote->recv_ctx->io); - close(remote->fd); - free_remote(remote); - if (verbose) { - remote_conn--; - LOGI("current remote connection: %d", remote_conn); - } - } -} - -static server_t * -new_server(int fd, listen_ctx_t *listener) -{ - if (verbose) { - server_conn++; - } - - server_t *server; - server = ss_malloc(sizeof(server_t)); - - memset(server, 0, sizeof(server_t)); - - server->recv_ctx = ss_malloc(sizeof(server_ctx_t)); - server->send_ctx = ss_malloc(sizeof(server_ctx_t)); - server->buf = ss_malloc(sizeof(buffer_t)); - server->header_buf = ss_malloc(sizeof(buffer_t)); - server->fd = fd; - server->recv_ctx->server = server; - server->recv_ctx->connected = 0; - server->send_ctx->server = server; - server->send_ctx->connected = 0; - server->stage = STAGE_INIT; - server->query = NULL; - server->listen_ctx = listener; - server->remote = NULL; - - if (listener->method) { - server->e_ctx = ss_malloc(sizeof(enc_ctx_t)); - server->d_ctx = ss_malloc(sizeof(enc_ctx_t)); - enc_ctx_init(listener->method, server->e_ctx, 1); - enc_ctx_init(listener->method, server->d_ctx, 0); - } else { - server->e_ctx = NULL; - server->d_ctx = NULL; - } - - int request_timeout = min(MAX_REQUEST_TIMEOUT, listener->timeout) - + rand() % MAX_REQUEST_TIMEOUT; - - ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ); - ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE); - ev_timer_init(&server->recv_ctx->watcher, server_timeout_cb, - request_timeout, listener->timeout); - - balloc(server->buf, BUF_SIZE); - balloc(server->header_buf, BUF_SIZE); - - server->chunk = (chunk_t *)malloc(sizeof(chunk_t)); - memset(server->chunk, 0, sizeof(chunk_t)); - server->chunk->buf = ss_malloc(sizeof(buffer_t)); - memset(server->chunk->buf, 0, sizeof(buffer_t)); - - cork_dllist_add(&connections, &server->entries); - - return server; -} - -static void -free_server(server_t *server) -{ - cork_dllist_remove(&server->entries); - - if (server->chunk != NULL) { - if (server->chunk->buf != NULL) { - bfree(server->chunk->buf); - ss_free(server->chunk->buf); - } - ss_free(server->chunk); - } - if (server->remote != NULL) { - server->remote->server = NULL; - } - if (server->e_ctx != NULL) { - cipher_context_release(&server->e_ctx->evp); - ss_free(server->e_ctx); - } - if (server->d_ctx != NULL) { - cipher_context_release(&server->d_ctx->evp); - ss_free(server->d_ctx); - } - if (server->buf != NULL) { - bfree(server->buf); - ss_free(server->buf); - } - if (server->header_buf != NULL) { - bfree(server->header_buf); - ss_free(server->header_buf); - } - - ss_free(server->recv_ctx); - ss_free(server->send_ctx); - ss_free(server); -} - -static void -close_and_free_server(EV_P_ server_t *server) -{ - if (server != NULL) { - if (server->query != NULL) { - resolv_cancel(server->query); - server->query = NULL; - } - ev_io_stop(EV_A_ & server->send_ctx->io); - ev_io_stop(EV_A_ & server->recv_ctx->io); - ev_timer_stop(EV_A_ & server->recv_ctx->watcher); - close(server->fd); - free_server(server); - if (verbose) { - server_conn--; - LOGI("current server connection: %d", server_conn); - } - } -} - -static void -signal_cb(EV_P_ ev_signal *w, int revents) -{ - if (revents & EV_SIGNAL) { - switch (w->signum) { - case SIGINT: - case SIGTERM: - ev_unloop(EV_A_ EVUNLOOP_ALL); - } - } -} - -static void -accept_cb(EV_P_ ev_io *w, int revents) -{ - listen_ctx_t *listener = (listen_ctx_t *)w; - int serverfd = accept(listener->fd, NULL, NULL); - if (serverfd == -1) { - ERROR("accept"); - return; - } - - char *peer_name = get_peer_name(serverfd); - if (peer_name != NULL) { - int in_white_list = 0; - if (acl) { - if ((get_acl_mode() == BLACK_LIST && acl_match_host(peer_name) == 1) - || (get_acl_mode() == WHITE_LIST && acl_match_host(peer_name) >= 0)) { - LOGE("Access denied from %s", peer_name); - close(serverfd); - return; - } else if (acl_match_host(peer_name) == -1) { - in_white_list = 1; - } - } - if (!in_white_list && check_block_list(peer_name)) { - LOGE("block all requests from %s", peer_name); -#ifdef __linux__ - set_linger(serverfd); -#endif - close(serverfd); - return; - } - } - - int opt = 1; - setsockopt(serverfd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt)); -#ifdef SO_NOSIGPIPE - setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt)); -#endif - setnonblocking(serverfd); - - if (verbose) { - LOGI("accept a connection"); - } - - server_t *server = new_server(serverfd, listener); - - // SSR beg - server->obfs_plugin = new_obfs_class(server->listen_ctx->obfs_name); - if (server->obfs_plugin) { - server->obfs = server->obfs_plugin->new_obfs(); - server->obfs_compatible_state = 0; - } - server->protocol_plugin = new_obfs_class(server->listen_ctx->protocol_name); - if (server->protocol_plugin) { - server->protocol = server->protocol_plugin->new_obfs(); - server->protocol_compatible_state = 0; - } - server_info _server_info; - memset(&_server_info, 0, sizeof(server_info)); - _server_info.param = server->listen_ctx->obfs_param; - if(server->obfs_plugin) - _server_info.g_data = server->obfs_plugin->init_data(); - _server_info.head_len = 7; - _server_info.iv = server->e_ctx->evp.iv; - _server_info.iv_len = enc_get_iv_len(); - _server_info.key = enc_get_key(); - _server_info.key_len = enc_get_key_len(); - _server_info.tcp_mss = 1460; - - if (server->obfs_plugin) - server->obfs_plugin->set_server_info(server->obfs, &_server_info); - - _server_info.param = server->listen_ctx->protocol_param; - if (server->protocol_plugin) - _server_info.g_data = server->protocol_plugin->init_data(); - - if (server->protocol_plugin) - server->protocol_plugin->set_server_info(server->protocol, &_server_info); - // SSR end - - ev_io_start(EV_A_ & server->recv_ctx->io); - ev_timer_start(EV_A_ & server->recv_ctx->watcher); -} - -int -main(int argc, char **argv) -{ - int i, c; - int pid_flags = 0; - int mptcp = 0; - int firewall = 0; - int mtu = 0; - char *user = NULL; - char *password = NULL; - char *timeout = NULL; - char *protocol = NULL; // SSR - char *protocol_param = NULL; // SSR - char *method = NULL; - char *obfs = NULL; // SSR - char *obfs_param = NULL; // SSR - char *pid_path = NULL; - char *conf_path = NULL; - char *iface = NULL; - - int server_num = 0; - const char *server_host[MAX_REMOTE_NUM]; - - char *nameservers[MAX_DNS_NUM + 1]; - int nameserver_num = 0; - - int option_index = 0; - static struct option long_options[] = { - { "fast-open", no_argument, 0, 0 }, - { "acl", required_argument, 0, 0 }, - { "manager-address", required_argument, 0, 0 }, - { "mtu", required_argument, 0, 0 }, - { "help", no_argument, 0, 0 }, -#ifdef __linux__ - { "mptcp", no_argument, 0, 0 }, - { "firewall", no_argument, 0, 0 }, -#endif - { 0, 0, 0, 0 } - }; - - opterr = 0; - - USE_TTY(); - - while ((c = getopt_long(argc, argv, "f:s:p:l:k:t:m:b:c:i:d:a:n:O:o:G:g:huUvA6", - long_options, &option_index)) != -1) { - switch (c) { - case 0: - if (option_index == 0) { - fast_open = 1; - } else if (option_index == 1) { - LOGI("initializing acl..."); - acl = !init_acl(optarg); - } else if (option_index == 2) { - manager_address = optarg; - } else if (option_index == 3) { - mtu = atoi(optarg); - LOGI("set MTU to %d", mtu); - } else if (option_index == 4) { - usage(); - exit(EXIT_SUCCESS); - } else if (option_index == 5) { - mptcp = 1; - LOGI("enable multipath TCP"); - } else if (option_index == 6) { - firewall = 1; - LOGI("enable firewall rules"); - } - break; - case 's': - if (server_num < MAX_REMOTE_NUM) { - server_host[server_num++] = optarg; - } - break; - case 'b': - bind_address = optarg; - break; - case 'p': - server_port = optarg; - break; - case 'k': - password = optarg; - break; - case 'f': - pid_flags = 1; - pid_path = optarg; - break; - case 't': - timeout = optarg; - break; - // SSR beg - case 'O': - protocol = optarg; - break; - case 'm': - method = optarg; - break; - case 'o': - obfs = optarg; - break; - case 'G': - protocol_param = optarg; - break; - case 'g': - obfs_param = optarg; - break; - // SSR end - case 'c': - conf_path = optarg; - break; - case 'i': - iface = optarg; - break; - case 'd': - if (nameserver_num < MAX_DNS_NUM) { - nameservers[nameserver_num++] = optarg; - } - break; - case 'a': - user = optarg; - break; -#ifdef HAVE_SETRLIMIT - case 'n': - nofile = atoi(optarg); - break; -#endif - case 'u': - mode = TCP_AND_UDP; - break; - case 'U': - mode = UDP_ONLY; - break; - case 'v': - verbose = 1; - break; - case 'h': - usage(); - exit(EXIT_SUCCESS); - case 'A': - auth = 1; - break; - case '6': - ipv6first = 1; - break; - case '?': - // The option character is not recognized. - LOGE("Unrecognized option: %s", optarg); - opterr = 1; - break; - } - } - - if (opterr) { - usage(); - exit(EXIT_FAILURE); - } - - if (argc == 1) { - if (conf_path == NULL) { - conf_path = DEFAULT_CONF_PATH; - } - } - - if (conf_path != NULL) { - jconf_t *conf = read_jconf(conf_path); - if (server_num == 0) { - server_num = conf->remote_num; - for (i = 0; i < server_num; i++) - server_host[i] = conf->remote_addr[i].host; - } - if (server_port == NULL) { - server_port = conf->remote_port; - } - if (password == NULL) { - password = conf->password; - } - // SSR beg - if (protocol == NULL) { - protocol = conf->protocol; - LOGI("protocol %s", protocol); - } - if (protocol_param == NULL) { - protocol_param = conf->protocol_param; - LOGI("protocol_param %s", obfs_param); - } - if (method == NULL) { - method = conf->method; - LOGI("method %s", method); - } - if (obfs == NULL) { - obfs = conf->obfs; - LOGI("obfs %s", obfs); - } - if (obfs_param == NULL) { - obfs_param = conf->obfs_param; - LOGI("obfs_param %s", obfs_param); - } - // SSR end - if (timeout == NULL) { - timeout = conf->timeout; - } - if (user == NULL) { - user = conf->user; - } - if (auth == 0) { - auth = conf->auth; - } - if (mode == TCP_ONLY) { - mode = conf->mode; - } - if (mtu == 0) { - mtu = conf->mtu; - } - if (mptcp == 0) { - mptcp = conf->mptcp; - } -#ifdef TCP_FASTOPEN - if (fast_open == 0) { - fast_open = conf->fast_open; - } -#endif -#ifdef HAVE_SETRLIMIT - if (nofile == 0) { - nofile = conf->nofile; - } -#endif - if (conf->nameserver != NULL) { - nameservers[nameserver_num++] = conf->nameserver; - } - if (ipv6first == 0) { - ipv6first = conf->ipv6_first; - } - } - - //_compatible - if(strlen(protocol)>11) - { - char *text; - text = (char*)malloc(12); - memcpy(text, protocol + strlen(protocol) - 11, 12); - - if(strcmp(text, "_compatible") == 0) - { - free(text); - text = (char*)malloc(strlen(protocol) - 11); - memcpy(text, protocol, strlen(protocol) - 11); - int length = strlen(protocol) - 11; - free(protocol); - obfs = (char*)malloc(length); - memset(protocol, 0x00, length); - memcpy(protocol, text, length); - LOGI("protocol compatible enable, %s", protocol); - free(text); - protocol_compatible = 1; - } - } - - if(strlen(obfs)>11) - { - char *text; - text = (char*)malloc(12); - memcpy(text, obfs + strlen(obfs) - 11, 12); - - if(strcmp(text, "_compatible") == 0) - { - free(text); - text = (char*)malloc(strlen(obfs) - 11); - memcpy(text, obfs, strlen(obfs) - 11); - int length = strlen(obfs) - 11; - free(obfs); - obfs = (char*)malloc(length); - memset(obfs, 0x00, length); - memcpy(obfs, text, length); - LOGI("obfs compatible enable, %s", obfs); - free(text); - obfs_compatible = 1; - } - } - - - if (server_num == 0) { - server_host[server_num++] = NULL; - } - - if (server_num == 0 || server_port == NULL || password == NULL) { - usage(); - exit(EXIT_FAILURE); - } - - if (protocol && strcmp(protocol, "verify_sha1") == 0) { - auth = 1; - protocol = NULL; - } - - if (method == NULL) { - method = "rc4-md5"; - } - - if (timeout == NULL) { - timeout = "60"; - } - -#ifdef HAVE_SETRLIMIT - /* - * no need to check the return value here since we will show - * the user an error message if setrlimit(2) fails - */ - if (nofile > 1024) { - if (verbose) { - LOGI("setting NOFILE to %d", nofile); - } - set_nofile(nofile); - } -#endif - - if (pid_flags) { - USE_SYSLOG(argv[0]); - daemonize(pid_path); - } - - if (ipv6first) { - LOGI("resolving hostname to IPv6 address first"); - } - - if (fast_open == 1) { -#ifdef TCP_FASTOPEN - LOGI("using tcp fast open"); -#else - LOGE("tcp fast open is not supported by this environment"); - fast_open = 0; -#endif - } - - if (auth) { - LOGI("onetime authentication enabled"); - } - - if (mode != TCP_ONLY) { - LOGI("UDP relay enabled"); - } - - if (mode == UDP_ONLY) { - LOGI("TCP relay disabled"); - } - -#ifdef __MINGW32__ - winsock_init(); -#else - // ignore SIGPIPE - signal(SIGPIPE, SIG_IGN); - signal(SIGCHLD, SIG_IGN); - signal(SIGABRT, SIG_IGN); -#endif - - struct ev_signal sigint_watcher; - struct ev_signal sigterm_watcher; - ev_signal_init(&sigint_watcher, signal_cb, SIGINT); - ev_signal_init(&sigterm_watcher, signal_cb, SIGTERM); - ev_signal_start(EV_DEFAULT, &sigint_watcher); - ev_signal_start(EV_DEFAULT, &sigterm_watcher); - - // setup keys - LOGI("initializing ciphers... %s", method); - int m = enc_init(password, method); - - // initialize ev loop - struct ev_loop *loop = EV_DEFAULT; - - // setup udns - if (nameserver_num == 0) { -#ifdef __MINGW32__ - nameservers[nameserver_num++] = "8.8.8.8"; - resolv_init(loop, nameservers, nameserver_num, ipv6first); -#else - resolv_init(loop, NULL, 0, ipv6first); -#endif - } else { - resolv_init(loop, nameservers, nameserver_num, ipv6first); - } - - for (int i = 0; i < nameserver_num; i++) - LOGI("using nameserver: %s", nameservers[i]); - - // initialize listen context - listen_ctx_t listen_ctx_list[server_num]; - - // bind to each interface - while (server_num > 0) { - int index = --server_num; - const char *host = server_host[index]; - - if (mode != UDP_ONLY) { - // Bind to port - int listenfd; - listenfd = create_and_bind(host, server_port, mptcp); - if (listenfd == -1) { - FATAL("bind() error"); - } - if (listen(listenfd, SSMAXCONN) == -1) { - FATAL("listen() error"); - } - setfastopen(listenfd); - setnonblocking(listenfd); - listen_ctx_t *listen_ctx = &listen_ctx_list[index]; - - // Setup proxy context - listen_ctx->timeout = atoi(timeout); - listen_ctx->fd = listenfd; - listen_ctx->method = m; - listen_ctx->iface = iface; - - // SSR beg - listen_ctx->protocol_name = protocol; - listen_ctx->protocol_param = protocol_param; - listen_ctx->method = m; - listen_ctx->obfs_name = obfs; - listen_ctx->obfs_param = obfs_param; - listen_ctx->list_protocol_global = malloc(sizeof(void *)); - listen_ctx->list_obfs_global = malloc(sizeof(void *)); - memset(listen_ctx->list_protocol_global, 0, sizeof(void *)); - memset(listen_ctx->list_obfs_global, 0, sizeof(void *)); - // SSR end - - listen_ctx->loop = loop; - - ev_io_init(&listen_ctx->io, accept_cb, listenfd, EV_READ); - ev_io_start(loop, &listen_ctx->io); - } - - // Setup UDP - if (mode != TCP_ONLY) { - init_udprelay(server_host[index], server_port, mtu, m, - auth, atoi(timeout), iface, protocol, protocol_param); - } - - if (host && strcmp(host, ":") > 0) - LOGI("listening at [%s]:%s", host, server_port); - else - LOGI("listening at %s:%s", host ? host : "*", server_port); - } - - if (manager_address != NULL) { - ev_timer_init(&stat_update_watcher, stat_update_cb, UPDATE_INTERVAL, UPDATE_INTERVAL); - ev_timer_start(EV_DEFAULT, &stat_update_watcher); - } - - ev_timer_init(&block_list_watcher, block_list_clear_cb, UPDATE_INTERVAL, UPDATE_INTERVAL); - ev_timer_start(EV_DEFAULT, &block_list_watcher); - - // setuid - if (user != NULL && ! run_as(user)) { - FATAL("failed to switch user"); - } - -#ifndef __MINGW32__ - if (geteuid() == 0){ - LOGI("running from root user"); - } else if (firewall) { - LOGE("firewall setup requires running from root user"); - exit(-1); - } -#endif - - // init block list - init_block_list(firewall); - - // Init connections - cork_dllist_init(&connections); - - // start ev loop - ev_run(loop, 0); - - if (verbose) { - LOGI("closed gracefully"); - } - - // Free block list - free_block_list(); - - if (manager_address != NULL) { - ev_timer_stop(EV_DEFAULT, &stat_update_watcher); - } - ev_timer_stop(EV_DEFAULT, &block_list_watcher); - - // Clean up - for (int i = 0; i <= server_num; i++) { - listen_ctx_t *listen_ctx = &listen_ctx_list[i]; - if (mode != UDP_ONLY) { - ev_io_stop(loop, &listen_ctx->io); - close(listen_ctx->fd); - } - } - - if (mode != UDP_ONLY) { - free_connections(loop); - } - - if (mode != TCP_ONLY) { - free_udprelay(); - } - - resolv_shutdown(loop); - -#ifdef __MINGW32__ - winsock_cleanup(); -#endif - - ev_signal_stop(EV_DEFAULT, &sigint_watcher); - ev_signal_stop(EV_DEFAULT, &sigterm_watcher); - - return 0; -} diff --git a/shadowsocksr-libev/src/server/server.h b/shadowsocksr-libev/src/server/server.h deleted file mode 100644 index 4cd3cf6b..00000000 --- a/shadowsocksr-libev/src/server/server.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * server.h - Define shadowsocks server's buffers and callbacks - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifndef _SERVER_H -#define _SERVER_H - -#include -#include -#include - -#include "encrypt.h" -#include "jconf.h" -#include "resolv.h" -#include "obfs.h" -#include "protocol.h" - -#include "common.h" - -typedef struct listen_ctx { - ev_io io; - int fd; - int timeout; - int method; - char *iface; - struct ev_loop *loop; - - // SSR - char *protocol_name; - char *protocol_param; - char *obfs_name; - char *obfs_param; - void **list_protocol_global; - void **list_obfs_global; -} listen_ctx_t; - -typedef struct server_ctx { - ev_io io; - ev_timer watcher; - int connected; - struct server *server; -} server_ctx_t; - -typedef struct server { - int fd; - int stage; - buffer_t *buf; - ssize_t buf_capacity; - buffer_t *header_buf; - - int auth; - struct chunk *chunk; - - struct enc_ctx *e_ctx; - struct enc_ctx *d_ctx; - struct server_ctx *recv_ctx; - struct server_ctx *send_ctx; - struct listen_ctx *listen_ctx; - struct remote *remote; - - struct ResolvQuery *query; - - struct cork_dllist_item entries; - - // SSR - obfs *protocol; - obfs *obfs; - obfs_class *protocol_plugin; - obfs_class *obfs_plugin; - int obfs_compatible_state; - int protocol_compatible_state; -} server_t; - -typedef struct query { - server_t *server; - char hostname[257]; -} query_t; - -typedef struct remote_ctx { - ev_io io; - int connected; - struct remote *remote; -} remote_ctx_t; - -typedef struct remote { - int fd; - buffer_t *buf; - ssize_t buf_capacity; - struct remote_ctx *recv_ctx; - struct remote_ctx *send_ctx; - struct server *server; - - // SSR - int remote_index; -} remote_t; - -#endif // _SERVER_H diff --git a/shadowsocksr-libev/src/server/tls.c b/shadowsocksr-libev/src/server/tls.c deleted file mode 100644 index 5c422160..00000000 --- a/shadowsocksr-libev/src/server/tls.c +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) 2011 and 2012, Dustin Lundquist - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -/* - * This is a minimal TLS implementation intended only to parse the server name - * extension. This was created based primarily on Wireshark dissection of a - * TLS handshake and RFC4366. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* malloc() */ -#include /* strncpy() */ - -#ifndef __MINGW32__ -#include -#else -#include -#endif - -#include "tls.h" -#include "protocol.h" -#include "utils.h" - -#define SERVER_NAME_LEN 256 -#define TLS_HEADER_LEN 5 -#define TLS_HANDSHAKE_CONTENT_TYPE 0x16 -#define TLS_HANDSHAKE_TYPE_CLIENT_HELLO 0x01 - -#ifndef MIN -#define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) -#endif - -extern int verbose; - -static int parse_tls_header(const char *, size_t, char **); -static int parse_extensions(const char *, size_t, char **); -static int parse_server_name_extension(const char *, size_t, char **); - -static const protocol_t tls_protocol_st = { - .default_port = 443, - .parse_packet = &parse_tls_header, -}; -const protocol_t *const tls_protocol = &tls_protocol_st; - -/* Parse a TLS packet for the Server Name Indication extension in the client - * hello handshake, returning the first servername found (pointer to static - * array) - * - * Returns: - * >=0 - length of the hostname and updates *hostname - * caller is responsible for freeing *hostname - * -1 - Incomplete request - * -2 - No Host header included in this request - * -3 - Invalid hostname pointer - * -4 - malloc failure - * < -4 - Invalid TLS client hello - */ -static int -parse_tls_header(const char *data, size_t data_len, char **hostname) -{ - char tls_content_type; - char tls_version_major; - char tls_version_minor; - size_t pos = TLS_HEADER_LEN; - size_t len; - - if (hostname == NULL) - return -3; - - /* Check that our TCP payload is at least large enough for a TLS header */ - if (data_len < TLS_HEADER_LEN) - return -1; - - /* SSL 2.0 compatible Client Hello - * - * High bit of first byte (length) and content type is Client Hello - * - * See RFC5246 Appendix E.2 - */ - if (data[0] & 0x80 && data[2] == 1) { - if (verbose) - LOGI("Received SSL 2.0 Client Hello which can not support SNI."); - return -2; - } - - tls_content_type = data[0]; - if (tls_content_type != TLS_HANDSHAKE_CONTENT_TYPE) { - if (verbose) - LOGI("Request did not begin with TLS handshake."); - return -5; - } - - tls_version_major = data[1]; - tls_version_minor = data[2]; - if (tls_version_major < 3) { - if (verbose) - LOGI("Received SSL %d.%d handshake which can not support SNI.", - tls_version_major, tls_version_minor); - - return -2; - } - - /* TLS record length */ - len = ((unsigned char)data[3] << 8) + - (unsigned char)data[4] + TLS_HEADER_LEN; - data_len = MIN(data_len, len); - - /* Check we received entire TLS record length */ - if (data_len < len) - return -1; - - /* - * Handshake - */ - if (pos + 1 > data_len) { - return -5; - } - if (data[pos] != TLS_HANDSHAKE_TYPE_CLIENT_HELLO) { - if (verbose) - LOGI("Not a client hello"); - - return -5; - } - - /* Skip past fixed length records: - * 1 Handshake Type - * 3 Length - * 2 Version (again) - * 32 Random - * to Session ID Length - */ - pos += 38; - - /* Session ID */ - if (pos + 1 > data_len) - return -5; - len = (unsigned char)data[pos]; - pos += 1 + len; - - /* Cipher Suites */ - if (pos + 2 > data_len) - return -5; - len = ((unsigned char)data[pos] << 8) + (unsigned char)data[pos + 1]; - pos += 2 + len; - - /* Compression Methods */ - if (pos + 1 > data_len) - return -5; - len = (unsigned char)data[pos]; - pos += 1 + len; - - if (pos == data_len && tls_version_major == 3 && tls_version_minor == 0) { - if (verbose) - LOGI("Received SSL 3.0 handshake without extensions"); - return -2; - } - - /* Extensions */ - if (pos + 2 > data_len) - return -5; - len = ((unsigned char)data[pos] << 8) + (unsigned char)data[pos + 1]; - pos += 2; - - if (pos + len > data_len) - return -5; - return parse_extensions(data + pos, len, hostname); -} - -static int -parse_extensions(const char *data, size_t data_len, char **hostname) -{ - size_t pos = 0; - size_t len; - - /* Parse each 4 bytes for the extension header */ - while (pos + 4 <= data_len) { - /* Extension Length */ - len = ((unsigned char)data[pos + 2] << 8) + - (unsigned char)data[pos + 3]; - - /* Check if it's a server name extension */ - if (data[pos] == 0x00 && data[pos + 1] == 0x00) { - /* There can be only one extension of each type, so we break - * our state and move p to beinnging of the extension here */ - if (pos + 4 + len > data_len) - return -5; - return parse_server_name_extension(data + pos + 4, len, hostname); - } - pos += 4 + len; /* Advance to the next extension header */ - } - /* Check we ended where we expected to */ - if (pos != data_len) - return -5; - - return -2; -} - -static int -parse_server_name_extension(const char *data, size_t data_len, - char **hostname) -{ - size_t pos = 2; /* skip server name list length */ - size_t len; - - while (pos + 3 < data_len) { - len = ((unsigned char)data[pos + 1] << 8) + - (unsigned char)data[pos + 2]; - - if (pos + 3 + len > data_len) - return -5; - - switch (data[pos]) { /* name type */ - case 0x00: /* host_name */ - *hostname = malloc(len + 1); - if (*hostname == NULL) { - ERROR("malloc() failure"); - return -4; - } - - strncpy(*hostname, data + pos + 3, len); - - (*hostname)[len] = '\0'; - - return len; - default: - if (verbose) - LOGI("Unknown server name extension name type: %d", - data[pos]); - } - pos += 3 + len; - } - /* Check we ended where we expected to */ - if (pos != data_len) - return -5; - - return -2; -} diff --git a/shadowsocksr-libev/src/server/tls.h b/shadowsocksr-libev/src/server/tls.h deleted file mode 100644 index 39989131..00000000 --- a/shadowsocksr-libev/src/server/tls.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2011 and 2012, Dustin Lundquist - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef TLS_H -#define TLS_H - -#include "protocol.h" - -const protocol_t *const tls_protocol; - -#endif diff --git a/shadowsocksr-libev/src/server/tls1.2_ticket.c b/shadowsocksr-libev/src/server/tls1.2_ticket.c deleted file mode 100644 index 88970c09..00000000 --- a/shadowsocksr-libev/src/server/tls1.2_ticket.c +++ /dev/null @@ -1,609 +0,0 @@ - -#include "tls1.2_ticket.h" -#include "list.c" - -typedef struct tls12_ticket_auth_global_data { - uint8_t local_client_id[32]; - List client_data; - time_t startup_time; -}tls12_ticket_auth_global_data; - -typedef struct tls12_ticket_auth_local_data { - int handshake_status; - char *send_buffer; - int send_buffer_size; - char *recv_buffer; - int recv_buffer_size; -}tls12_ticket_auth_local_data; - -void tls12_ticket_auth_local_data_init(tls12_ticket_auth_local_data* local) { - local->handshake_status = 0; - local->send_buffer = malloc(0); - local->send_buffer_size = 0; - local->recv_buffer = malloc(0); - local->recv_buffer_size = 0; -} - -void * tls12_ticket_auth_init_data() { - tls12_ticket_auth_global_data *global = (tls12_ticket_auth_global_data*)malloc(sizeof(tls12_ticket_auth_global_data)); - rand_bytes(global->local_client_id, 32); - global->client_data = list_init(22); - global->startup_time = time(NULL); - return global; -} - -obfs * tls12_ticket_auth_new_obfs() { - obfs * self = new_obfs(); - self->l_data = malloc(sizeof(tls12_ticket_auth_local_data)); - tls12_ticket_auth_local_data_init((tls12_ticket_auth_local_data*)self->l_data); - return self; -} - -void tls12_ticket_auth_dispose(obfs *self) { - tls12_ticket_auth_local_data *local = (tls12_ticket_auth_local_data*)self->l_data; - if (local->send_buffer != NULL) { - free(local->send_buffer); - local->send_buffer = NULL; - } - if (local->recv_buffer != NULL) { - free(local->recv_buffer); - local->recv_buffer = NULL; - } - free(local); - dispose_obfs(self); -} - -int tls12_ticket_pack_auth_data(tls12_ticket_auth_global_data *global, server_info *server, char *outdata) { - int out_size = 32; - time_t t = time(NULL); - outdata[0] = t >> 24; - outdata[1] = t >> 16; - outdata[2] = t >> 8; - outdata[3] = t; - rand_bytes((uint8_t*)outdata + 4, 18); - - uint8_t *key = (uint8_t*)malloc(server->key_len + 32); - char hash[ONETIMEAUTH_BYTES * 2]; - memcpy(key, server->key, server->key_len); - memcpy(key + server->key_len, global->local_client_id, 32); - ss_sha1_hmac_with_key(hash, outdata, out_size - OBFS_HMAC_SHA1_LEN, key, server->key_len + 32); - free(key); - memcpy(outdata + out_size - OBFS_HMAC_SHA1_LEN, hash, OBFS_HMAC_SHA1_LEN); - return out_size; -} - -void tls12_ticket_auth_pack_data(char *encryptdata, int datalength, int start, int len, char *out_buffer, int outlength) { - out_buffer[outlength] = 0x17; - out_buffer[outlength + 1] = 0x3; - out_buffer[outlength + 2] = 0x3; - out_buffer[outlength + 3] = len >> 8; - out_buffer[outlength + 4] = len; - memcpy(out_buffer + outlength + 5, encryptdata + start, len); -} - -int tls12_ticket_auth_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity) { - char *encryptdata = *pencryptdata; - tls12_ticket_auth_local_data *local = (tls12_ticket_auth_local_data*)self->l_data; - tls12_ticket_auth_global_data *global = (tls12_ticket_auth_global_data*)self->server.g_data; - char * out_buffer = NULL; - - if (local->handshake_status == 8) { - if (datalength < 1024) { - if (*capacity < datalength + 5) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = (datalength + 5) * 2); - encryptdata = *pencryptdata; - } - memmove(encryptdata + 5, encryptdata, datalength); - encryptdata[0] = 0x17; - encryptdata[1] = 0x3; - encryptdata[2] = 0x3; - encryptdata[3] = datalength >> 8; - encryptdata[4] = datalength; - return datalength + 5; - } else { - out_buffer = (char*)malloc(datalength + 2048); - int start = 0; - int outlength = 0; - int len; - while (datalength - start > 2048) { - len = xorshift128plus() % 4096 + 100; - if (len > datalength - start) - len = datalength - start; - tls12_ticket_auth_pack_data(encryptdata, datalength, start, len, out_buffer, outlength); - outlength += len + 5; - start += len; - } - if (datalength - start > 0) { - len = datalength - start; - tls12_ticket_auth_pack_data(encryptdata, datalength, start, len, out_buffer, outlength); - outlength += len + 5; - } - if (*capacity < outlength) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = outlength * 2); - encryptdata = *pencryptdata; - } - memcpy(encryptdata, out_buffer, outlength); - free(out_buffer); - return outlength; - } - } - local->send_buffer = (char*)realloc(local->send_buffer, local->send_buffer_size + datalength + 5); - memcpy(local->send_buffer + local->send_buffer_size + 5, encryptdata, datalength); - local->send_buffer[local->send_buffer_size] = 0x17; - local->send_buffer[local->send_buffer_size + 1] = 0x3; - local->send_buffer[local->send_buffer_size + 2] = 0x3; - local->send_buffer[local->send_buffer_size + 3] = datalength >> 8; - local->send_buffer[local->send_buffer_size + 4] = datalength; - local->send_buffer_size += datalength + 5; - - if (local->handshake_status == 0) { -#define CSTR_DECL(name, len, str) const char* name = str; const int len = sizeof(str) - 1; - CSTR_DECL(tls_data0, tls_data0_len, "\x00\x1c\xc0\x2b\xc0\x2f\xcc\xa9\xcc\xa8\xcc\x14\xcc\x13\xc0\x0a\xc0\x14\xc0\x09\xc0\x13\x00\x9c\x00\x35\x00\x2f\x00\x0a\x01\x00" - ); - CSTR_DECL(tls_data1, tls_data1_len, "\xff\x01\x00\x01\x00" - ); - CSTR_DECL(tls_data2, tls_data2_len, "\x00\x17\x00\x00\x00\x23\x00\xd0"); - CSTR_DECL(tls_data3, tls_data3_len, "\x00\x0d\x00\x16\x00\x14\x06\x01\x06\x03\x05\x01\x05\x03\x04\x01\x04\x03\x03\x01\x03\x03\x02\x01\x02\x03\x00\x05\x00\x05\x01\x00\x00\x00\x00\x00\x12\x00\x00\x75\x50\x00\x00\x00\x0b\x00\x02\x01\x00\x00\x0a\x00\x06\x00\x04\x00\x17\x00\x18" - //"00150066000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // padding - ); - uint8_t tls_data[2048]; - int tls_data_len = 0; - memcpy(tls_data, tls_data1, tls_data1_len); - tls_data_len += tls_data1_len; - - char hosts[1024]; - char * phost[128]; - int host_num = 0; - int pos; - - char sni[256] = {0}; - if (self->server.param && strlen(self->server.param) == 0) - self->server.param = NULL; - strncpy(hosts, self->server.param ? self->server.param : self->server.host, sizeof hosts); - phost[host_num++] = hosts; - for (pos = 0; hosts[pos]; ++pos) { - if (hosts[pos] == ',') { - phost[host_num++] = &hosts[pos + 1]; - } - } - host_num = xorshift128plus() % host_num; - - sprintf(sni, "%s", phost[host_num]); - int sni_len = strlen(sni); - if (sni_len > 0 && sni[sni_len - 1] >= '0' && sni[sni_len - 1] <= '9') - sni_len = 0; - tls_data[tls_data_len] = '\0'; - tls_data[tls_data_len + 1] = '\0'; - tls_data[tls_data_len + 2] = (sni_len + 5) >> 8; - tls_data[tls_data_len + 3] = (sni_len + 5); - tls_data[tls_data_len + 4] = (sni_len + 3) >> 8; - tls_data[tls_data_len + 5] = (sni_len + 3); - tls_data[tls_data_len + 6] = '\0'; - tls_data[tls_data_len + 7] = sni_len >> 8; - tls_data[tls_data_len + 8] = sni_len; - memcpy(tls_data + tls_data_len + 9, sni, sni_len); - tls_data_len += 9 + sni_len; - memcpy(tls_data + tls_data_len, tls_data2, tls_data2_len); - tls_data_len += tls_data2_len; - rand_bytes(tls_data + tls_data_len, 208); - tls_data_len += 208; - memcpy(tls_data + tls_data_len, tls_data3, tls_data3_len); - tls_data_len += tls_data3_len; - - datalength = 11 + 32 + 1 + 32 + tls_data0_len + 2 + tls_data_len; - out_buffer = (char*)malloc(datalength); - char *pdata = out_buffer + datalength - tls_data_len; - int len = tls_data_len; - memcpy(pdata, tls_data, tls_data_len); - pdata[-1] = tls_data_len; - pdata[-2] = tls_data_len >> 8; - pdata -= 2; len += 2; - memcpy(pdata - tls_data0_len, tls_data0, tls_data0_len); - pdata -= tls_data0_len; len += tls_data0_len; - memcpy(pdata - 32, global->local_client_id, 32); - pdata -= 32; len += 32; - pdata[-1] = 0x20; - pdata -= 1; len += 1; - tls12_ticket_pack_auth_data(global, &self->server, pdata - 32); - pdata -= 32; len += 32; - pdata[-1] = 0x3; - pdata[-2] = 0x3; // tls version - pdata -= 2; len += 2; - pdata[-1] = len; - pdata[-2] = len >> 8; - pdata[-3] = 0; - pdata[-4] = 1; - pdata -= 4; len += 4; - - pdata[-1] = len; - pdata[-2] = len >> 8; - pdata -= 2; len += 2; - pdata[-1] = 0x1; - pdata[-2] = 0x3; // tls version - pdata -= 2; len += 2; - pdata[-1] = 0x16; // tls handshake - pdata -= 1; len += 1; - - local->handshake_status = 1; - } else if (datalength == 0) { - datalength = local->send_buffer_size + 43; - out_buffer = (char*)malloc(datalength); - char *pdata = out_buffer; - memcpy(pdata, "\x14\x03\x03\x00\x01\x01", 6); - pdata += 6; - memcpy(pdata, "\x16\x03\x03\x00\x20", 5); - pdata += 5; - rand_bytes((uint8_t*)pdata, 22); - pdata += 22; - - uint8_t *key = (uint8_t*)malloc(self->server.key_len + 32); - char hash[ONETIMEAUTH_BYTES * 2]; - memcpy(key, self->server.key, self->server.key_len); - memcpy(key + self->server.key_len, global->local_client_id, 32); - ss_sha1_hmac_with_key(hash, out_buffer, pdata - out_buffer, key, self->server.key_len + 32); - free(key); - memcpy(pdata, hash, OBFS_HMAC_SHA1_LEN); - - pdata += OBFS_HMAC_SHA1_LEN; - memcpy(pdata, local->send_buffer, local->send_buffer_size); - free(local->send_buffer); - local->send_buffer = NULL; - - local->handshake_status = 8; - } else { - return 0; - } - if (*capacity < datalength) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = datalength * 2); - encryptdata = *pencryptdata; - } - memmove(encryptdata, out_buffer, datalength); - free(out_buffer); - return datalength; -} - -int tls12_ticket_auth_server_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity) { - char *encryptdata = *pencryptdata; - tls12_ticket_auth_local_data *local = (tls12_ticket_auth_local_data*)self->l_data; - tls12_ticket_auth_global_data *global = (tls12_ticket_auth_global_data*)self->server.g_data; - char * out_buffer = NULL; - - if (local->handshake_status == 8) { - if (datalength < 1024) { - if (*capacity < datalength + 5) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = (datalength + 5) * 2); - encryptdata = *pencryptdata; - } - memmove(encryptdata + 5, encryptdata, datalength); - encryptdata[0] = 0x17; - encryptdata[1] = 0x3; - encryptdata[2] = 0x3; - encryptdata[3] = datalength >> 8; - encryptdata[4] = datalength; - return datalength + 5; - } else { - out_buffer = (char*)malloc(datalength + 2048); - int start = 0; - int outlength = 0; - int len; - while (datalength - start > 2048) { - len = xorshift128plus() % 4096 + 100; - if (len > datalength - start) - len = datalength - start; - tls12_ticket_auth_pack_data(encryptdata, datalength, start, len, out_buffer, outlength); - outlength += len + 5; - start += len; - } - if (datalength - start > 0) { - len = datalength - start; - tls12_ticket_auth_pack_data(encryptdata, datalength, start, len, out_buffer, outlength); - outlength += len + 5; - } - if (*capacity < outlength) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = outlength * 2); - encryptdata = *pencryptdata; - } - memcpy(encryptdata, out_buffer, outlength); - free(out_buffer); - return outlength; - } - } - - local->handshake_status = 3; - - out_buffer = (char*)malloc(43 + 86); - int data_len = 0; - char *p_data = out_buffer + 86; - - memcpy(p_data - 10, "\xc0\x2f\x00\x00\x05\xff\x01\x00\x01\x00", 10); - p_data -= 10;data_len += 10; - - memcpy(p_data - 32, global->local_client_id, 32); - p_data -= 32;data_len += 32; - - p_data[-1] = 0x20; - p_data -= 1;data_len += 1; - - tls12_ticket_pack_auth_data(global, &self->server, p_data - 32); - p_data -= 32;data_len += 32; - - p_data[-1] = 0x3; - p_data[-2] = 0x3; // tls version - p_data -= 2;data_len += 2; - - p_data[-1] = data_len; - p_data[-2] = data_len >> 8; - p_data[-3] = 0x00; - p_data[-4] = 0x02; - p_data -= 4; data_len += 4; - - p_data[-1] = data_len; - p_data[-2] = data_len >> 8; - p_data[-3] = 0x03; - p_data[-4] = 0x03; - p_data[-5] = 0x16; - p_data -= 5; data_len += 5; - - memcpy(out_buffer, p_data, data_len); - char *pdata = out_buffer + 86; - - memcpy(pdata, "\x14\x03\x03\x00\x01\x01", 6); - pdata += 6; - memcpy(pdata, "\x16\x03\x03\x00\x20", 5); - pdata += 5; - rand_bytes((uint8_t*)pdata, 22); - pdata += 22; - - uint8_t *key = (uint8_t*)malloc(self->server.key_len + 32); - char hash[ONETIMEAUTH_BYTES * 2]; - memcpy(key, self->server.key, self->server.key_len); - memcpy(key + self->server.key_len, global->local_client_id, 32); - ss_sha1_hmac_with_key(hash, out_buffer, 43 + 86, key, self->server.key_len + 32); - free(key); - memcpy(pdata, hash, OBFS_HMAC_SHA1_LEN); - - memmove(encryptdata, out_buffer, 43 + 86); - free(out_buffer); - return 43 + 86; -} - -int tls12_ticket_auth_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback) { - char *encryptdata = *pencryptdata; - tls12_ticket_auth_local_data *local = (tls12_ticket_auth_local_data*)self->l_data; - tls12_ticket_auth_global_data *global = (tls12_ticket_auth_global_data*)self->server.g_data; - - *needsendback = 0; - - if (local->handshake_status == 8) { - local->recv_buffer_size += datalength; - local->recv_buffer = (char*)realloc(local->recv_buffer, local->recv_buffer_size); - memcpy(local->recv_buffer + local->recv_buffer_size - datalength, encryptdata, datalength); - datalength = 0; - while (local->recv_buffer_size > 5) { - if (local->recv_buffer[0] != 0x17) - return -1; - int size = ((int)(unsigned char)local->recv_buffer[3] << 8) + (unsigned char)local->recv_buffer[4]; - if (size + 5 > local->recv_buffer_size) - break; - if (*capacity < datalength + size) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = (datalength + size) * 2); - encryptdata = *pencryptdata; - } - memcpy(encryptdata + datalength, local->recv_buffer + 5, size); - datalength += size; - local->recv_buffer_size -= 5 + size; - memmove(local->recv_buffer, local->recv_buffer + 5 + size, local->recv_buffer_size); - } - return datalength; - } - if (datalength < 11 + 32 + 1 + 32) { - return -1; - } - - uint8_t *key = (uint8_t*)malloc(self->server.key_len + 32); - char hash[ONETIMEAUTH_BYTES * 2]; - memcpy(key, self->server.key, self->server.key_len); - memcpy(key + self->server.key_len, global->local_client_id, 32); - ss_sha1_hmac_with_key(hash, encryptdata + 11, 22, key, self->server.key_len + 32); - free(key); - - if (memcmp(encryptdata + 33, hash, OBFS_HMAC_SHA1_LEN)) { - return -1; - } - - *needsendback = 1; - return 0; -} - -int tls12_ticket_auth_server_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback) { - char *encryptdata = *pencryptdata; - tls12_ticket_auth_local_data *local = (tls12_ticket_auth_local_data*)self->l_data; - tls12_ticket_auth_global_data *global = (tls12_ticket_auth_global_data*)self->server.g_data; - - *needsendback = 0; - - if (local->handshake_status == 8) { - if(datalength != 0) - { - local->recv_buffer = (char*)realloc(local->recv_buffer, local->recv_buffer_size + datalength); - memmove(local->recv_buffer + local->recv_buffer_size, encryptdata, datalength); - local->recv_buffer_size += datalength; - } - datalength = 0; - - while (local->recv_buffer_size > 5) { - if (local->recv_buffer[0] != 0x17 || local->recv_buffer[1] != 0x03 || local->recv_buffer[2] != 0x03) - { - LOGE("server_decode data error, wrong tls version 3"); - return -1; - } - int size = ((int)(unsigned char)local->recv_buffer[3] << 8) + (unsigned char)local->recv_buffer[4]; - if (size + 5 > local->recv_buffer_size) - break; - if (*capacity < local->recv_buffer_size + size) { - *pencryptdata = (char*)realloc(*pencryptdata, *capacity = (local->recv_buffer_size + size) * 2); - encryptdata = *pencryptdata; - } - memcpy(encryptdata + datalength, local->recv_buffer + 5, size); - datalength += size; - local->recv_buffer_size -= 5 + size; - memmove(local->recv_buffer, local->recv_buffer + 5 + size, local->recv_buffer_size); - } - return datalength; - } - - if (local->handshake_status == 3) { - - char *verify = encryptdata; - - if(datalength < 43) - { - LOGE("server_decode data error, too short:%d", (int)datalength); - return -1; - } - - if(encryptdata[0] != 0x14 || encryptdata[1] != 0x03 || encryptdata[2] != 0x03 || encryptdata[3] != 0x00 || encryptdata[4] != 0x01 || encryptdata[5] != 0x01) - { - LOGE("server_decode data error, wrong tls version"); - return -1; - } - - encryptdata += 6; - - if(encryptdata[0] != 0x16 || encryptdata[1] != 0x03 || encryptdata[2] != 0x03 || encryptdata[3] != 0x00 || encryptdata[4] != 0x20) - { - LOGE("server_decode data error, wrong tls version 2"); - return -1; - } - - uint8_t *key = (uint8_t*)malloc(self->server.key_len + 32); - char hash[ONETIMEAUTH_BYTES * 2]; - memcpy(key, self->server.key, self->server.key_len); - memcpy(key + self->server.key_len, global->local_client_id, 32); - ss_sha1_hmac_with_key(hash, verify, 33, key, self->server.key_len + 32); - free(key); - - if (memcmp(verify + 33, hash, OBFS_HMAC_SHA1_LEN) != 0) { - LOGE("server_decode data error, hash Mismatch %d",(int)memcmp(verify + 33, hash, OBFS_HMAC_SHA1_LEN)); - return -1; - } - - local->recv_buffer_size = datalength - 43; - local->recv_buffer = (char*)realloc(local->recv_buffer, local->recv_buffer_size); - memmove(local->recv_buffer, encryptdata + 37, datalength - 43); - - local->handshake_status = 8; - return tls12_ticket_auth_server_decode(self, pencryptdata, 0, capacity, needsendback); - } - - local->handshake_status = 2; - if(encryptdata[0] != 0x16 || encryptdata[1] != 0x03 || encryptdata[2] != 0x01) - { - return -1; - } - - encryptdata += 3; - - { - int size = ((int)(unsigned char)encryptdata[0] << 8) + (unsigned char)encryptdata[1]; - if(size != datalength - 5) - { - LOGE("tls_auth wrong tls head size"); - return -1; - } - } - - encryptdata += 2; - - if(encryptdata[0] != 0x01 || encryptdata[1] != 0x00) - { - LOGE("tls_auth not client hello message"); - return -1; - } - - encryptdata += 2; - - { - int size = ((int)(unsigned char)encryptdata[0] << 8) + (unsigned char)encryptdata[1]; - if(size != datalength - 9) - { - LOGE("tls_auth wrong message size"); - return -1; - } - } - - encryptdata += 2; - - if(encryptdata[0] != 0x03 || encryptdata[1] != 0x03) - { - LOGE("tls_auth wrong tls version"); - return -1; - } - - encryptdata += 2; - - char *verifyid = encryptdata; - - encryptdata += 32; - - int sessionid_len = encryptdata[0]; - if(sessionid_len < 32) - { - LOGE("tls_auth wrong sessionid_len"); - return -1; - } - - char *sessionid = encryptdata + 1; - memcpy(global->local_client_id , sessionid, sessionid_len); - - uint8_t *key = (uint8_t*)malloc(self->server.key_len + sessionid_len); - char hash[ONETIMEAUTH_BYTES * 2]; - memcpy(key, self->server.key, self->server.key_len); - memcpy(key + self->server.key_len, global->local_client_id, sessionid_len); - ss_sha1_hmac_with_key(hash, verifyid, 22, key, self->server.key_len + sessionid_len); - free(key); - - encryptdata += (sessionid_len + 1); - - long utc_time = ((int)(unsigned char)verifyid[0] << 24) + ((int)(unsigned char)verifyid[1] << 16) + ((int)(unsigned char)verifyid[2] << 8) + (unsigned char)verifyid[3]; - time_t t = time(NULL); - - - if (self->server.param && strlen(self->server.param) == 0) - { - self->server.param = NULL; - } - - int max_time_dif = 0; - int time_dif = utc_time - t; - if(self->server.param) - { - max_time_dif = atoi(self->server.param); - } - - if(max_time_dif > 0 && (time_dif < -max_time_dif || time_dif > max_time_dif || utc_time - global->startup_time < -max_time_dif / 2)) - { - LOGE("tls_auth wrong time"); - return -1; - } - - if (memcmp(verifyid + 22, hash, OBFS_HMAC_SHA1_LEN)) { - LOGE("tls_auth wrong sha1"); - return -1; - } - - int search_result = global->client_data->have_same_cmp(global->client_data, verifyid); - if(search_result != 0) - { - LOGE("replay attack detect!"); - return -1; - } - - global->client_data->add_back(global->client_data, verifyid); - - encryptdata += 48; - - *needsendback = 1; - - return 0; -} diff --git a/shadowsocksr-libev/src/server/tls1.2_ticket.h b/shadowsocksr-libev/src/server/tls1.2_ticket.h deleted file mode 100644 index 10a57c90..00000000 --- a/shadowsocksr-libev/src/server/tls1.2_ticket.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * http_simple.h - Define shadowsocksR server's buffers and callbacks - * - * Copyright (C) 2015 - 2016, Break Wa11 - */ - -#ifndef _TLS1_2_TICKET_H -#define _TLS1_2_TICKET_H - -void * tls12_ticket_auth_init_data(); -obfs * tls12_ticket_auth_new_obfs(); -void tls12_ticket_auth_dispose(obfs *self); - -int tls12_ticket_auth_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity); -int tls12_ticket_auth_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback); - -int tls12_ticket_auth_server_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity); -int tls12_ticket_auth_server_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback); - -#endif // _TLS1_2_TICKET_H diff --git a/shadowsocksr-libev/src/server/udprelay.c b/shadowsocksr-libev/src/server/udprelay.c deleted file mode 100644 index d9251eea..00000000 --- a/shadowsocksr-libev/src/server/udprelay.c +++ /dev/null @@ -1,1452 +0,0 @@ -/* - * udprelay.c - Setup UDP relay for both client and server - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef __MINGW32__ -#include -#include -#include -#include -#include -#endif - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__) -#include -#include -#define SET_INTERFACE -#endif - -#ifdef __MINGW32__ -#include "win32.h" -#endif - -#include -#include - -#include "utils.h" -#include "netutils.h" -#include "cache.h" -#include "udprelay.h" - -#ifdef MODULE_REMOTE -#define MAX_UDP_CONN_NUM 512 -#else -#define MAX_UDP_CONN_NUM 256 -#endif - -#ifdef MODULE_REMOTE -#ifdef MODULE_ -#error "MODULE_REMOTE and MODULE_LOCAL should not be both defined" -#endif -#endif - -#ifndef EAGAIN -#define EAGAIN EWOULDBLOCK -#endif - -#ifndef EWOULDBLOCK -#define EWOULDBLOCK EAGAIN -#endif - -static void server_recv_cb(EV_P_ ev_io *w, int revents); -static void remote_recv_cb(EV_P_ ev_io *w, int revents); -static void remote_timeout_cb(EV_P_ ev_timer *watcher, int revents); - -static char *hash_key(const int af, const struct sockaddr_storage *addr); -#ifdef MODULE_REMOTE -static void query_resolve_cb(struct sockaddr *addr, void *data); -#endif -static void close_and_free_remote(EV_P_ remote_ctx_t *ctx); -static remote_ctx_t *new_remote(int fd, server_ctx_t *server_ctx); - -#ifdef ANDROID -extern uint64_t tx; -extern uint64_t rx; -extern int vpn; -#endif - -extern int verbose; -#ifdef MODULE_REMOTE -extern uint64_t tx; -extern uint64_t rx; -#endif - -static int packet_size = DEFAULT_PACKET_SIZE; -static int buf_size = DEFAULT_PACKET_SIZE * 2; -static int server_num = 0; -static server_ctx_t *server_ctx_list[MAX_REMOTE_NUM] = { NULL }; - -#ifndef __MINGW32__ -static int -setnonblocking(int fd) -{ - int flags; - if (-1 == (flags = fcntl(fd, F_GETFL, 0))) { - flags = 0; - } - return fcntl(fd, F_SETFL, flags | O_NONBLOCK); -} - -#endif - -#if defined(MODULE_REMOTE) && defined(SO_BROADCAST) -static int -set_broadcast(int socket_fd) -{ - int opt = 1; - return setsockopt(socket_fd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt)); -} - -#endif - -#ifdef SO_NOSIGPIPE -static int -set_nosigpipe(int socket_fd) -{ - int opt = 1; - return setsockopt(socket_fd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt)); -} - -#endif - -#ifdef MODULE_REDIR - -#ifndef IP_TRANSPARENT -#define IP_TRANSPARENT 19 -#endif - -#ifndef IP_RECVORIGDSTADDR -#define IP_RECVORIGDSTADDR 20 -#endif - -static int -get_dstaddr(struct msghdr *msg, struct sockaddr_storage *dstaddr) -{ - struct cmsghdr *cmsg; - - for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) { - if (cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_RECVORIGDSTADDR) { - memcpy(dstaddr, CMSG_DATA(cmsg), sizeof(struct sockaddr_in)); - dstaddr->ss_family = AF_INET; - return 0; - } else if (cmsg->cmsg_level == SOL_IPV6 && cmsg->cmsg_type == IP_RECVORIGDSTADDR) { - memcpy(dstaddr, CMSG_DATA(cmsg), sizeof(struct sockaddr_in6)); - dstaddr->ss_family = AF_INET6; - return 0; - } - } - - return 1; -} - -#endif - -#define HASH_KEY_LEN sizeof(struct sockaddr_storage) + sizeof(int) -static char * -hash_key(const int af, const struct sockaddr_storage *addr) -{ - size_t addr_len = sizeof(struct sockaddr_storage); - static char key[HASH_KEY_LEN]; - - memset(key, 0, HASH_KEY_LEN); - memcpy(key, &af, sizeof(int)); - memcpy(key + sizeof(int), (const uint8_t *)addr, addr_len); - - return key; -} - -#if defined(MODULE_REDIR) || defined(MODULE_REMOTE) -static int -construct_udprealy_header(const struct sockaddr_storage *in_addr, - char *addr_header) -{ - int addr_header_len = 0; - if (in_addr->ss_family == AF_INET) { - struct sockaddr_in *addr = (struct sockaddr_in *)in_addr; - size_t addr_len = sizeof(struct in_addr); - addr_header[addr_header_len++] = 1; - memcpy(addr_header + addr_header_len, &addr->sin_addr, addr_len); - addr_header_len += addr_len; - memcpy(addr_header + addr_header_len, &addr->sin_port, 2); - addr_header_len += 2; - } else if (in_addr->ss_family == AF_INET6) { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)in_addr; - size_t addr_len = sizeof(struct in6_addr); - addr_header[addr_header_len++] = 4; - memcpy(addr_header + addr_header_len, &addr->sin6_addr, addr_len); - addr_header_len += addr_len; - memcpy(addr_header + addr_header_len, &addr->sin6_port, 2); - addr_header_len += 2; - } else { - return 0; - } - return addr_header_len; -} - -#endif - -static int -parse_udprealy_header(const char *buf, const size_t buf_len, - char *host, char *port, struct sockaddr_storage *storage) -{ - const uint8_t atyp = *(uint8_t *)buf; - int offset = 1; - - // get remote addr and port - if ((atyp & ADDRTYPE_MASK) == 1) { - // IP V4 - size_t in_addr_len = sizeof(struct in_addr); - if (buf_len >= in_addr_len + 3) { - if (storage != NULL) { - struct sockaddr_in *addr = (struct sockaddr_in *)storage; - addr->sin_family = AF_INET; - addr->sin_addr = *(struct in_addr *)(buf + offset); - addr->sin_port = *(uint16_t *)(buf + offset + in_addr_len); - } - if (host != NULL) { - dns_ntop(AF_INET, (const void *)(buf + offset), - host, INET_ADDRSTRLEN); - } - offset += in_addr_len; - } - } else if ((atyp & ADDRTYPE_MASK) == 3) { - // Domain name - uint8_t name_len = *(uint8_t *)(buf + offset); - if (name_len + 4 <= buf_len) { - if (storage != NULL) { - char tmp[257] = { 0 }; - struct cork_ip ip; - memcpy(tmp, buf + offset + 1, name_len); - if (cork_ip_init(&ip, tmp) != -1) { - if (ip.version == 4) { - struct sockaddr_in *addr = (struct sockaddr_in *)storage; - dns_pton(AF_INET, tmp, &(addr->sin_addr)); - addr->sin_port = *(uint16_t *)(buf + offset + 1 + name_len); - addr->sin_family = AF_INET; - } else if (ip.version == 6) { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)storage; - dns_pton(AF_INET, tmp, &(addr->sin6_addr)); - addr->sin6_port = *(uint16_t *)(buf + offset + 1 + name_len); - addr->sin6_family = AF_INET6; - } - } - } - if (host != NULL) { - memcpy(host, buf + offset + 1, name_len); - } - offset += 1 + name_len; - } - } else if ((atyp & ADDRTYPE_MASK) == 4) { - // IP V6 - size_t in6_addr_len = sizeof(struct in6_addr); - if (buf_len >= in6_addr_len + 3) { - if (storage != NULL) { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)storage; - addr->sin6_family = AF_INET6; - addr->sin6_addr = *(struct in6_addr *)(buf + offset); - addr->sin6_port = *(uint16_t *)(buf + offset + in6_addr_len); - } - if (host != NULL) { - dns_ntop(AF_INET6, (const void *)(buf + offset), - host, INET6_ADDRSTRLEN); - } - offset += in6_addr_len; - } - } - - if (offset == 1) { - LOGE("[udp] invalid header with addr type %d", atyp); - return 0; - } - - if (port != NULL) { - sprintf(port, "%d", ntohs(*(uint16_t *)(buf + offset))); - } - offset += 2; - - return offset; -} - -static char * -get_addr_str(const struct sockaddr *sa) -{ - static char s[SS_ADDRSTRLEN]; - memset(s, 0, SS_ADDRSTRLEN); - char addr[INET6_ADDRSTRLEN] = { 0 }; - char port[PORTSTRLEN] = { 0 }; - uint16_t p; - - switch (sa->sa_family) { - case AF_INET: - dns_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), - addr, INET_ADDRSTRLEN); - p = ntohs(((struct sockaddr_in *)sa)->sin_port); - sprintf(port, "%d", p); - break; - - case AF_INET6: - dns_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), - addr, INET6_ADDRSTRLEN); - p = ntohs(((struct sockaddr_in *)sa)->sin_port); - sprintf(port, "%d", p); - break; - - default: - strncpy(s, "Unknown AF", SS_ADDRSTRLEN); - } - - int addr_len = strlen(addr); - int port_len = strlen(port); - memcpy(s, addr, addr_len); - memcpy(s + addr_len + 1, port, port_len); - s[addr_len] = ':'; - - return s; -} - -int -create_remote_socket(int ipv6) -{ - int remote_sock; - - if (ipv6) { - // Try to bind IPv6 first - struct sockaddr_in6 addr; - memset(&addr, 0, sizeof(struct sockaddr_in6)); - addr.sin6_family = AF_INET6; - addr.sin6_addr = in6addr_any; - addr.sin6_port = 0; - remote_sock = socket(AF_INET6, SOCK_DGRAM, 0); - if (remote_sock == -1) { - ERROR("[udp] cannot create socket"); - return -1; - } - if (bind(remote_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) { - FATAL("[udp] cannot bind remote"); - return -1; - } - } else { - // Or else bind to IPv4 - struct sockaddr_in addr; - memset(&addr, 0, sizeof(struct sockaddr_in)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; - addr.sin_port = 0; - remote_sock = socket(AF_INET, SOCK_DGRAM, 0); - if (remote_sock == -1) { - ERROR("[udp] cannot create socket"); - return -1; - } - - if (bind(remote_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) { - FATAL("[udp] cannot bind remote"); - return -1; - } - } - return remote_sock; -} - -int -create_server_socket(const char *host, const char *port) -{ - struct addrinfo hints; - struct addrinfo *result, *rp, *ipv4v6bindall; - int s, server_sock; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; /* Return IPv4 and IPv6 choices */ - hints.ai_socktype = SOCK_DGRAM; /* We want a UDP socket */ - hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG; /* For wildcard IP address */ - hints.ai_protocol = IPPROTO_UDP; - - s = getaddrinfo(host, port, &hints, &result); - if (s != 0) { - LOGE("[udp] getaddrinfo: %s", gai_strerror(s)); - return -1; - } - - rp = result; - - /* - * On Linux, with net.ipv6.bindv6only = 0 (the default), getaddrinfo(NULL) with - * AI_PASSIVE returns 0.0.0.0 and :: (in this order). AI_PASSIVE was meant to - * return a list of addresses to listen on, but it is impossible to listen on - * 0.0.0.0 and :: at the same time, if :: implies dualstack mode. - */ - if (!host) { - ipv4v6bindall = result; - - /* Loop over all address infos found until a IPV6 address is found. */ - while (ipv4v6bindall) { - if (ipv4v6bindall->ai_family == AF_INET6) { - rp = ipv4v6bindall; /* Take first IPV6 address available */ - break; - } - ipv4v6bindall = ipv4v6bindall->ai_next; /* Get next address info, if any */ - } - } - - for (/*rp = result*/; rp != NULL; rp = rp->ai_next) { - server_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (server_sock == -1) { - continue; - } - - if (rp->ai_family == AF_INET6) { - int ipv6only = host ? 1 : 0; - setsockopt(server_sock, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6only, sizeof(ipv6only)); - } - - int opt = 1; - setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); -#ifdef SO_NOSIGPIPE - set_nosigpipe(server_sock); -#endif - int err = set_reuseport(server_sock); - if (err == 0) { - LOGI("udp port reuse enabled"); - } -#ifdef IP_TOS - // Set QoS flag - int tos = 46; - setsockopt(server_sock, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)); -#endif - -#ifdef MODULE_REDIR - if (setsockopt(server_sock, SOL_IP, IP_TRANSPARENT, &opt, sizeof(opt))) { - ERROR("[udp] setsockopt IP_TRANSPARENT"); - exit(EXIT_FAILURE); - } - if (setsockopt(server_sock, IPPROTO_IP, IP_RECVORIGDSTADDR, &opt, sizeof(opt))) { - FATAL("[udp] setsockopt IP_RECVORIGDSTADDR"); - } -#endif - - s = bind(server_sock, rp->ai_addr, rp->ai_addrlen); - if (s == 0) { - /* We managed to bind successfully! */ - break; - } else { - ERROR("[udp] bind"); - } - - close(server_sock); - } - - if (rp == NULL) { - LOGE("[udp] cannot bind"); - return -1; - } - - freeaddrinfo(result); - - return server_sock; -} - -remote_ctx_t * -new_remote(int fd, server_ctx_t *server_ctx) -{ - remote_ctx_t *ctx = ss_malloc(sizeof(remote_ctx_t)); - memset(ctx, 0, sizeof(remote_ctx_t)); - - ctx->fd = fd; - ctx->server_ctx = server_ctx; - - ev_io_init(&ctx->io, remote_recv_cb, fd, EV_READ); - ev_timer_init(&ctx->watcher, remote_timeout_cb, server_ctx->timeout, - server_ctx->timeout); - - return ctx; -} - -server_ctx_t * -new_server_ctx(int fd) -{ - server_ctx_t *ctx = ss_malloc(sizeof(server_ctx_t)); - memset(ctx, 0, sizeof(server_ctx_t)); - - ctx->fd = fd; - - ev_io_init(&ctx->io, server_recv_cb, fd, EV_READ); - - return ctx; -} - -#ifdef MODULE_REMOTE -struct query_ctx * -new_query_ctx(char *buf, size_t len) -{ - struct query_ctx *ctx = ss_malloc(sizeof(struct query_ctx)); - memset(ctx, 0, sizeof(struct query_ctx)); - ctx->buf = ss_malloc(sizeof(buffer_t)); - balloc(ctx->buf, len); - memcpy(ctx->buf->array, buf, len); - ctx->buf->len = len; - return ctx; -} - -void -close_and_free_query(EV_P_ struct query_ctx *ctx) -{ - if (ctx != NULL) { - if (ctx->query != NULL) { - resolv_cancel(ctx->query); - ctx->query = NULL; - } - if (ctx->buf != NULL) { - bfree(ctx->buf); - ss_free(ctx->buf); - } - ss_free(ctx); - } -} - -#endif - -void -close_and_free_remote(EV_P_ remote_ctx_t *ctx) -{ - if (ctx != NULL) { - ev_timer_stop(EV_A_ & ctx->watcher); - ev_io_stop(EV_A_ & ctx->io); - close(ctx->fd); - ss_free(ctx); - } -} - -static void -remote_timeout_cb(EV_P_ ev_timer *watcher, int revents) -{ - remote_ctx_t *remote_ctx - = cork_container_of(watcher, remote_ctx_t, watcher); - - if (verbose) { - LOGI("[udp] connection timeout"); - } - - char *key = hash_key(remote_ctx->af, &remote_ctx->src_addr); - cache_remove(remote_ctx->server_ctx->conn_cache, key, HASH_KEY_LEN); -} - -#ifdef MODULE_REMOTE -static void -query_resolve_cb(struct sockaddr *addr, void *data) -{ - struct query_ctx *query_ctx = (struct query_ctx *)data; - struct ev_loop *loop = query_ctx->server_ctx->loop; - - if (verbose) { - LOGI("[udp] udns resolved"); - } - - query_ctx->query = NULL; - - if (addr == NULL) { - LOGE("[udp] udns returned an error"); - } else { - remote_ctx_t *remote_ctx = query_ctx->remote_ctx; - int cache_hit = 0; - - // Lookup in the conn cache - if (remote_ctx == NULL) { - char *key = hash_key(AF_UNSPEC, &query_ctx->src_addr); - cache_lookup(query_ctx->server_ctx->conn_cache, key, HASH_KEY_LEN, (void *)&remote_ctx); - } - - if (remote_ctx == NULL) { - int remotefd = create_remote_socket(addr->sa_family == AF_INET6); - if (remotefd != -1) { - setnonblocking(remotefd); -#ifdef SO_BROADCAST - set_broadcast(remotefd); -#endif -#ifdef SO_NOSIGPIPE - set_nosigpipe(remotefd); -#endif -#ifdef IP_TOS - // Set QoS flag - int tos = 46; - setsockopt(remotefd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)); -#endif -#ifdef SET_INTERFACE - if (query_ctx->server_ctx->iface) { - if (setinterface(remotefd, query_ctx->server_ctx->iface) == -1) - ERROR("setinterface"); - } -#endif - remote_ctx = new_remote(remotefd, query_ctx->server_ctx); - remote_ctx->src_addr = query_ctx->src_addr; - remote_ctx->server_ctx = query_ctx->server_ctx; - remote_ctx->addr_header_len = query_ctx->addr_header_len; - memcpy(remote_ctx->addr_header, query_ctx->addr_header, - query_ctx->addr_header_len); - } else { - ERROR("[udp] bind() error"); - } - } else { - cache_hit = 1; - } - - if (remote_ctx != NULL) { - memcpy(&remote_ctx->dst_addr, addr, sizeof(struct sockaddr_storage)); - - size_t addr_len = get_sockaddr_len(addr); - int s = sendto(remote_ctx->fd, query_ctx->buf->array, query_ctx->buf->len, - 0, addr, addr_len); - - if (s == -1) { - ERROR("[udp] sendto_remote"); - if (!cache_hit) { - close_and_free_remote(EV_A_ remote_ctx); - } - } else { - if (!cache_hit) { - // Add to conn cache - char *key = hash_key(AF_UNSPEC, &remote_ctx->src_addr); - cache_insert(query_ctx->server_ctx->conn_cache, key, HASH_KEY_LEN, (void *)remote_ctx); - ev_io_start(EV_A_ & remote_ctx->io); - ev_timer_start(EV_A_ & remote_ctx->watcher); - } - } - } - } - - // clean up - close_and_free_query(EV_A_ query_ctx); -} - -#endif - -static void -remote_recv_cb(EV_P_ ev_io *w, int revents) -{ - ssize_t r; - remote_ctx_t *remote_ctx = (remote_ctx_t *)w; - server_ctx_t *server_ctx = remote_ctx->server_ctx; - - // server has been closed - if (server_ctx == NULL) { - LOGE("[udp] invalid server"); - close_and_free_remote(EV_A_ remote_ctx); - return; - } - - struct sockaddr_storage src_addr; - socklen_t src_addr_len = sizeof(struct sockaddr_storage); - memset(&src_addr, 0, src_addr_len); - - buffer_t *buf = ss_malloc(sizeof(buffer_t)); - balloc(buf, buf_size); - - // recv - r = recvfrom(remote_ctx->fd, buf->array, buf_size, 0, (struct sockaddr *)&src_addr, &src_addr_len); - - if (r == -1) { - // error on recv - // simply drop that packet - ERROR("[udp] remote_recv_recvfrom"); - goto CLEAN_UP; - } else if (r > packet_size) { - LOGE("[udp] remote_recv_recvfrom fragmentation"); - goto CLEAN_UP; - } - - buf->len = r; - -#ifdef MODULE_LOCAL - int err = ss_decrypt_all(buf, server_ctx->method, 0, buf_size); - if (err) { - // drop the packet silently - goto CLEAN_UP; - } - - //SSR beg - if (server_ctx->protocol_plugin) { - obfs_class *protocol_plugin = server_ctx->protocol_plugin; - if (protocol_plugin->client_udp_post_decrypt) { - buf->len = protocol_plugin->client_udp_post_decrypt(server_ctx->protocol, &buf->array, buf->len, &buf->capacity); - if ((int)buf->len < 0) { - LOGE("client_udp_post_decrypt"); - close_and_free_remote(EV_A_ remote_ctx); - return; - } - if ( buf->len == 0 ) - return; - } - } - // SSR end - -#ifdef MODULE_REDIR - struct sockaddr_storage dst_addr; - memset(&dst_addr, 0, sizeof(struct sockaddr_storage)); - int len = parse_udprealy_header(buf->array, buf->len, NULL, NULL, &dst_addr); - - if (dst_addr.ss_family != AF_INET && dst_addr.ss_family != AF_INET6) { - LOGI("[udp] ss-redir does not support domain name"); - goto CLEAN_UP; - } - - if (verbose) { - char src[SS_ADDRSTRLEN]; - char dst[SS_ADDRSTRLEN]; - strcpy(src, get_addr_str((struct sockaddr *)&src_addr)); - strcpy(dst, get_addr_str((struct sockaddr *)&dst_addr)); - LOGI("[udp] recv %s via %s", dst, src); - } -#else - int len = parse_udprealy_header(buf->array, buf->len, NULL, NULL, NULL); -#endif - - if (len == 0) { - LOGI("[udp] error in parse header"); - // error in parse header - goto CLEAN_UP; - } - - // server may return using a different address type other than the type we - // have used during sending -#if defined(MODULE_TUNNEL) || defined(MODULE_REDIR) - // Construct packet - buf->len -= len; - memmove(buf->array, buf->array + len, buf->len); -#else -#ifdef ANDROID - rx += buf->len; -#endif - // Construct packet - brealloc(buf, buf->len + 3, buf_size); - memmove(buf->array + 3, buf->array, buf->len); - memset(buf->array, 0, 3); - buf->len += 3; -#endif - -#endif - -#ifdef MODULE_REMOTE - - rx += buf->len; - - char addr_header_buf[512]; - char *addr_header = remote_ctx->addr_header; - int addr_header_len = remote_ctx->addr_header_len; - - if (remote_ctx->af == AF_INET || remote_ctx->af == AF_INET6) { - addr_header_len = construct_udprealy_header(&src_addr, addr_header_buf); - addr_header = addr_header_buf; - } - - // Construct packet - brealloc(buf, buf->len + addr_header_len, buf_size); - memmove(buf->array + addr_header_len, buf->array, buf->len); - memcpy(buf->array, addr_header, addr_header_len); - buf->len += addr_header_len; - - int err = ss_encrypt_all(buf, server_ctx->method, 0, buf_size); - if (err) { - // drop the packet silently - goto CLEAN_UP; - } - -#endif - - if (buf->len > packet_size) { - LOGE("[udp] remote_recv_sendto fragmentation"); - goto CLEAN_UP; - } - - size_t remote_src_addr_len = get_sockaddr_len((struct sockaddr *)&remote_ctx->src_addr); - -#ifdef MODULE_REDIR - - size_t remote_dst_addr_len = get_sockaddr_len((struct sockaddr *)&dst_addr); - - int src_fd = socket(remote_ctx->src_addr.ss_family, SOCK_DGRAM, 0); - if (src_fd < 0) { - ERROR("[udp] remote_recv_socket"); - goto CLEAN_UP; - } - int opt = 1; - if (setsockopt(src_fd, SOL_IP, IP_TRANSPARENT, &opt, sizeof(opt))) { - ERROR("[udp] remote_recv_setsockopt"); - close(src_fd); - goto CLEAN_UP; - } - if (setsockopt(src_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) { - ERROR("[udp] remote_recv_setsockopt"); - close(src_fd); - goto CLEAN_UP; - } -#ifdef IP_TOS - // Set QoS flag - int tos = 46; - setsockopt(src_fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)); -#endif - if (bind(src_fd, (struct sockaddr *)&dst_addr, remote_dst_addr_len) != 0) { - ERROR("[udp] remote_recv_bind"); - close(src_fd); - goto CLEAN_UP; - } - - int s = sendto(src_fd, buf->array, buf->len, 0, - (struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len); - if (s == -1) { - ERROR("[udp] remote_recv_sendto"); - close(src_fd); - goto CLEAN_UP; - } - close(src_fd); - -#else - - int s = sendto(server_ctx->fd, buf->array, buf->len, 0, - (struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len); - if (s == -1) { - ERROR("[udp] remote_recv_sendto"); - goto CLEAN_UP; - } - -#endif - - // handle the UDP packet successfully, - // triger the timer - ev_timer_again(EV_A_ & remote_ctx->watcher); - -CLEAN_UP: - - bfree(buf); - ss_free(buf); -} - -static void -server_recv_cb(EV_P_ ev_io *w, int revents) -{ - server_ctx_t *server_ctx = (server_ctx_t *)w; - struct sockaddr_storage src_addr; - memset(&src_addr, 0, sizeof(struct sockaddr_storage)); - - buffer_t *buf = ss_malloc(sizeof(buffer_t)); - balloc(buf, buf_size); - - socklen_t src_addr_len = sizeof(struct sockaddr_storage); - unsigned int offset = 0; - -#ifdef MODULE_REDIR - char control_buffer[64] = { 0 }; - struct msghdr msg; - memset(&msg, 0, sizeof(struct msghdr)); - struct iovec iov[1]; - struct sockaddr_storage dst_addr; - memset(&dst_addr, 0, sizeof(struct sockaddr_storage)); - - msg.msg_name = &src_addr; - msg.msg_namelen = src_addr_len; - msg.msg_control = control_buffer; - msg.msg_controllen = sizeof(control_buffer); - - iov[0].iov_base = buf->array; - iov[0].iov_len = buf_size; - msg.msg_iov = iov; - msg.msg_iovlen = 1; - - buf->len = recvmsg(server_ctx->fd, &msg, 0); - if (buf->len == -1) { - ERROR("[udp] server_recvmsg"); - goto CLEAN_UP; - } else if (buf->len > packet_size) { - ERROR("[udp] UDP server_recv_recvmsg fragmentation"); - goto CLEAN_UP; - } - - if (get_dstaddr(&msg, &dst_addr)) { - LOGE("[udp] unable to get dest addr"); - goto CLEAN_UP; - } - - src_addr_len = msg.msg_namelen; -#else - ssize_t r; - r = recvfrom(server_ctx->fd, buf->array, buf_size, - 0, (struct sockaddr *)&src_addr, &src_addr_len); - - if (r == -1) { - // error on recv - // simply drop that packet - ERROR("[udp] server_recv_recvfrom"); - goto CLEAN_UP; - } else if (r > packet_size) { - ERROR("[udp] server_recv_recvfrom fragmentation"); - goto CLEAN_UP; - } - - buf->len = r; -#endif - -#ifdef MODULE_REMOTE - tx += buf->len; - - int err = ss_decrypt_all(buf, server_ctx->method, server_ctx->auth, buf_size); - if (err) { - // drop the packet silently - goto CLEAN_UP; - } -#endif - -#ifdef MODULE_LOCAL -#if !defined(MODULE_TUNNEL) && !defined(MODULE_REDIR) -#ifdef ANDROID - tx += buf->len; -#endif - uint8_t frag = *(uint8_t *)(buf->array + 2); - offset += 3; -#endif -#endif - - /* - * - * SOCKS5 UDP Request - * +----+------+------+----------+----------+----------+ - * |RSV | FRAG | ATYP | DST.ADDR | DST.PORT | DATA | - * +----+------+------+----------+----------+----------+ - * | 2 | 1 | 1 | Variable | 2 | Variable | - * +----+------+------+----------+----------+----------+ - * - * SOCKS5 UDP Response - * +----+------+------+----------+----------+----------+ - * |RSV | FRAG | ATYP | DST.ADDR | DST.PORT | DATA | - * +----+------+------+----------+----------+----------+ - * | 2 | 1 | 1 | Variable | 2 | Variable | - * +----+------+------+----------+----------+----------+ - * - * shadowsocks UDP Request (before encrypted) - * +------+----------+----------+----------+-------------+ - * | ATYP | DST.ADDR | DST.PORT | DATA | HMAC-SHA1 | - * +------+----------+----------+----------+-------------+ - * | 1 | Variable | 2 | Variable | 10 | - * +------+----------+----------+----------+-------------+ - * - * If ATYP & ONETIMEAUTH_FLAG(0x10) != 0, Authentication (HMAC-SHA1) is enabled. - * - * The key of HMAC-SHA1 is (IV + KEY) and the input is the whole packet. - * The output of HMAC-SHA is truncated to 10 bytes (leftmost bits). - * - * shadowsocks UDP Response (before encrypted) - * +------+----------+----------+----------+ - * | ATYP | DST.ADDR | DST.PORT | DATA | - * +------+----------+----------+----------+ - * | 1 | Variable | 2 | Variable | - * +------+----------+----------+----------+ - * - * shadowsocks UDP Request and Response (after encrypted) - * +-------+--------------+ - * | IV | PAYLOAD | - * +-------+--------------+ - * | Fixed | Variable | - * +-------+--------------+ - * - */ - -#ifdef MODULE_REDIR - if (verbose) { - char src[SS_ADDRSTRLEN]; - char dst[SS_ADDRSTRLEN]; - strcpy(src, get_addr_str((struct sockaddr *)&src_addr)); - strcpy(dst, get_addr_str((struct sockaddr *)&dst_addr)); - LOGI("[udp] redir to %s from %s", dst, src); - } - - char addr_header[512] = { 0 }; - int addr_header_len = construct_udprealy_header(&dst_addr, addr_header); - - if (addr_header_len == 0) { - LOGE("[udp] failed to parse tproxy addr"); - goto CLEAN_UP; - } - - // reconstruct the buffer - brealloc(buf, buf->len + addr_header_len, buf_size); - memmove(buf->array + addr_header_len, buf->array, buf->len); - memcpy(buf->array, addr_header, addr_header_len); - buf->len += addr_header_len; - -#elif MODULE_TUNNEL - - char addr_header[512] = { 0 }; - char *host = server_ctx->tunnel_addr.host; - char *port = server_ctx->tunnel_addr.port; - uint16_t port_num = (uint16_t)atoi(port); - uint16_t port_net_num = htons(port_num); - int addr_header_len = 0; - - struct cork_ip ip; - if (cork_ip_init(&ip, host) != -1) { - if (ip.version == 4) { - // send as IPv4 - struct in_addr host_addr; - memset(&host_addr, 0, sizeof(struct in_addr)); - int host_len = sizeof(struct in_addr); - - if (dns_pton(AF_INET, host, &host_addr) == -1) { - FATAL("IP parser error"); - } - addr_header[addr_header_len++] = 1; - memcpy(addr_header + addr_header_len, &host_addr, host_len); - addr_header_len += host_len; - } else if (ip.version == 6) { - // send as IPv6 - struct in6_addr host_addr; - memset(&host_addr, 0, sizeof(struct in6_addr)); - int host_len = sizeof(struct in6_addr); - - if (dns_pton(AF_INET6, host, &host_addr) == -1) { - FATAL("IP parser error"); - } - addr_header[addr_header_len++] = 4; - memcpy(addr_header + addr_header_len, &host_addr, host_len); - addr_header_len += host_len; - } else { - FATAL("IP parser error"); - } - } else { - // send as domain - int host_len = strlen(host); - - addr_header[addr_header_len++] = 3; - addr_header[addr_header_len++] = host_len; - memcpy(addr_header + addr_header_len, host, host_len); - addr_header_len += host_len; - } - memcpy(addr_header + addr_header_len, &port_net_num, 2); - addr_header_len += 2; - - // reconstruct the buffer - brealloc(buf, buf->len + addr_header_len, buf_size); - memmove(buf->array + addr_header_len, buf->array, buf->len); - memcpy(buf->array, addr_header, addr_header_len); - buf->len += addr_header_len; - -#else - - char host[257] = { 0 }; - char port[64] = { 0 }; - struct sockaddr_storage dst_addr; - memset(&dst_addr, 0, sizeof(struct sockaddr_storage)); - - int addr_header_len = parse_udprealy_header(buf->array + offset, buf->len - offset, - host, port, &dst_addr); - if (addr_header_len == 0) { - // error in parse header - goto CLEAN_UP; - } - - char *addr_header = buf->array + offset; -#endif - -#ifdef MODULE_LOCAL - char *key = hash_key(server_ctx->remote_addr->sa_family, &src_addr); -#else - char *key = hash_key(dst_addr.ss_family, &src_addr); -#endif - - struct cache *conn_cache = server_ctx->conn_cache; - - remote_ctx_t *remote_ctx = NULL; - cache_lookup(conn_cache, key, HASH_KEY_LEN, (void *)&remote_ctx); - - if (remote_ctx != NULL) { - if (sockaddr_cmp(&src_addr, &remote_ctx->src_addr, sizeof(src_addr))) { - remote_ctx = NULL; - } - } - - // reset the timer - if (remote_ctx != NULL) { - ev_timer_again(EV_A_ & remote_ctx->watcher); - } - - if (remote_ctx == NULL) { - if (verbose) { -#ifdef MODULE_REDIR - char src[SS_ADDRSTRLEN]; - char dst[SS_ADDRSTRLEN]; - strcpy(src, get_addr_str((struct sockaddr *)&src_addr)); - strcpy(dst, get_addr_str((struct sockaddr *)&dst_addr)); - LOGI("[udp] cache miss: %s <-> %s", dst, src); -#else - LOGI("[udp] cache miss: %s:%s <-> %s", host, port, - get_addr_str((struct sockaddr *)&src_addr)); -#endif - } - } else { - if (verbose) { -#ifdef MODULE_REDIR - char src[SS_ADDRSTRLEN]; - char dst[SS_ADDRSTRLEN]; - strcpy(src, get_addr_str((struct sockaddr *)&src_addr)); - strcpy(dst, get_addr_str((struct sockaddr *)&dst_addr)); - LOGI("[udp] cache hit: %s <-> %s", dst, src); -#else - LOGI("[udp] cache hit: %s:%s <-> %s", host, port, - get_addr_str((struct sockaddr *)&src_addr)); -#endif - } - } - -#ifdef MODULE_LOCAL - -#if !defined(MODULE_TUNNEL) && !defined(MODULE_REDIR) - if (frag) { - LOGE("[udp] drop a message since frag is not 0, but %d", frag); - goto CLEAN_UP; - } -#endif - - const struct sockaddr *remote_addr = server_ctx->remote_addr; - const int remote_addr_len = server_ctx->remote_addr_len; - - if (remote_ctx == NULL) { - // Bind to any port - int remotefd = create_remote_socket(remote_addr->sa_family == AF_INET6); - if (remotefd < 0) { - ERROR("[udp] udprelay bind() error"); - goto CLEAN_UP; - } - setnonblocking(remotefd); - -#ifdef SO_NOSIGPIPE - set_nosigpipe(remotefd); -#endif -#ifdef IP_TOS - // Set QoS flag - int tos = 46; - setsockopt(remotefd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)); -#endif -#ifdef SET_INTERFACE - if (server_ctx->iface) { - if (setinterface(remotefd, server_ctx->iface) == -1) - ERROR("setinterface"); - } -#endif - -#ifdef ANDROID - if (vpn) { - if (protect_socket(remotefd) == -1) { - ERROR("protect_socket"); - close(remotefd); - goto CLEAN_UP; - } - } -#endif - - // Init remote_ctx - remote_ctx = new_remote(remotefd, server_ctx); - remote_ctx->src_addr = src_addr; - remote_ctx->af = remote_addr->sa_family; - remote_ctx->addr_header_len = addr_header_len; - memcpy(remote_ctx->addr_header, addr_header, addr_header_len); - - // Add to conn cache - cache_insert(conn_cache, key, HASH_KEY_LEN, (void *)remote_ctx); - - // Start remote io - ev_io_start(EV_A_ & remote_ctx->io); - ev_timer_start(EV_A_ & remote_ctx->watcher); - } - - if (offset > 0) { - buf->len -= offset; - memmove(buf->array, buf->array + offset, buf->len); - } - - if (server_ctx->auth) { - buf->array[0] |= ONETIMEAUTH_FLAG; - } - - // SSR beg - if (server_ctx->protocol_plugin) { - obfs_class *protocol_plugin = server_ctx->protocol_plugin; - if (protocol_plugin->client_udp_pre_encrypt) { - buf->len = protocol_plugin->client_udp_pre_encrypt(server_ctx->protocol, &buf->array, buf->len, &buf->capacity); - } - } - //SSR end - - int err = ss_encrypt_all(buf, server_ctx->method, server_ctx->auth, buf->len); - - if (err) { - // drop the packet silently - goto CLEAN_UP; - } - - if (buf->len > packet_size) { - LOGE("[udp] server_recv_sendto fragmentation"); - goto CLEAN_UP; - } - - int s = sendto(remote_ctx->fd, buf->array, buf->len, 0, remote_addr, remote_addr_len); - - if (s == -1) { - ERROR("[udp] server_recv_sendto"); - } - -#else - - int cache_hit = 0; - int need_query = 0; - - if (buf->len - addr_header_len > packet_size) { - LOGE("[udp] server_recv_sendto fragmentation"); - goto CLEAN_UP; - } - - if (remote_ctx != NULL) { - cache_hit = 1; - // detect destination mismatch - if (remote_ctx->addr_header_len != addr_header_len - || memcmp(addr_header, remote_ctx->addr_header, addr_header_len) != 0) { - if (dst_addr.ss_family != AF_INET && dst_addr.ss_family != AF_INET6) { - need_query = 1; - } - } else { - memcpy(&dst_addr, &remote_ctx->dst_addr, sizeof(struct sockaddr_storage)); - } - } else { - if (dst_addr.ss_family == AF_INET || dst_addr.ss_family == AF_INET6) { - int remotefd = create_remote_socket(dst_addr.ss_family == AF_INET6); - if (remotefd != -1) { - setnonblocking(remotefd); -#ifdef SO_BROADCAST - set_broadcast(remotefd); -#endif -#ifdef SO_NOSIGPIPE - set_nosigpipe(remotefd); -#endif -#ifdef IP_TOS - // Set QoS flag - int tos = 46; - setsockopt(remotefd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)); -#endif -#ifdef SET_INTERFACE - if (server_ctx->iface) { - if (setinterface(remotefd, server_ctx->iface) == -1) - ERROR("setinterface"); - } -#endif - remote_ctx = new_remote(remotefd, server_ctx); - remote_ctx->src_addr = src_addr; - remote_ctx->server_ctx = server_ctx; - remote_ctx->addr_header_len = addr_header_len; - memcpy(remote_ctx->addr_header, addr_header, addr_header_len); - memcpy(&remote_ctx->dst_addr, &dst_addr, sizeof(struct sockaddr_storage)); - } else { - ERROR("[udp] bind() error"); - goto CLEAN_UP; - } - } - } - - if (remote_ctx != NULL && !need_query) { - size_t addr_len = get_sockaddr_len((struct sockaddr *)&dst_addr); - int s = sendto(remote_ctx->fd, buf->array + addr_header_len, - buf->len - addr_header_len, 0, - (struct sockaddr *)&dst_addr, addr_len); - - if (s == -1) { - ERROR("[udp] sendto_remote"); - if (!cache_hit) { - close_and_free_remote(EV_A_ remote_ctx); - } - } else { - if (!cache_hit) { - // Add to conn cache - remote_ctx->af = dst_addr.ss_family; - char *key = hash_key(remote_ctx->af, &remote_ctx->src_addr); - cache_insert(server_ctx->conn_cache, key, HASH_KEY_LEN, (void *)remote_ctx); - - ev_io_start(EV_A_ & remote_ctx->io); - ev_timer_start(EV_A_ & remote_ctx->watcher); - } - } - } else { - struct addrinfo hints; - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_DGRAM; - hints.ai_protocol = IPPROTO_UDP; - - struct query_ctx *query_ctx = new_query_ctx(buf->array + addr_header_len, - buf->len - addr_header_len); - query_ctx->server_ctx = server_ctx; - query_ctx->addr_header_len = addr_header_len; - query_ctx->src_addr = src_addr; - memcpy(query_ctx->addr_header, addr_header, addr_header_len); - - if (need_query) { - query_ctx->remote_ctx = remote_ctx; - } - - struct ResolvQuery *query = resolv_query(host, query_resolve_cb, - NULL, query_ctx, htons(atoi(port))); - if (query == NULL) { - ERROR("[udp] unable to create DNS query"); - close_and_free_query(EV_A_ query_ctx); - goto CLEAN_UP; - } - query_ctx->query = query; - } -#endif - -CLEAN_UP: - bfree(buf); - ss_free(buf); -} - -void -free_cb(void *key, void *element) -{ - remote_ctx_t *remote_ctx = (remote_ctx_t *)element; - - if (verbose) { - LOGI("[udp] one connection freed"); - } - - close_and_free_remote(EV_DEFAULT, remote_ctx); -} - -int -init_udprelay(const char *server_host, const char *server_port, -#ifdef MODULE_LOCAL - const struct sockaddr *remote_addr, const int remote_addr_len, -#ifdef MODULE_TUNNEL - const ss_addr_t tunnel_addr, -#endif -#endif - int mtu, int method, int auth, int timeout, const char *iface, const char *protocol, const char *protocol_param) -{ - // Initialize ev loop - struct ev_loop *loop = EV_DEFAULT; - - // Initialize MTU - if (mtu > 0) { - packet_size = mtu - 1 - 28 - 2 - 64; - buf_size = packet_size * 2; - } - - // Initialize cache - struct cache *conn_cache; - cache_create(&conn_cache, MAX_UDP_CONN_NUM, free_cb); - - // //////////////////////////////////////////////// - // Setup server context - - // Bind to port - int serverfd = create_server_socket(server_host, server_port); - if (serverfd < 0) { - FATAL("[udp] bind() error"); - } - setnonblocking(serverfd); - if (protocol != NULL && strcmp(protocol, "verify_sha1") == 0) { - auth = 1; - protocol = NULL; - } - - server_ctx_t *server_ctx = new_server_ctx(serverfd); -#ifdef MODULE_REMOTE - server_ctx->loop = loop; -#endif - server_ctx->auth = auth; - server_ctx->timeout = max(timeout, MIN_UDP_TIMEOUT); - server_ctx->method = method; - server_ctx->iface = iface; - server_ctx->conn_cache = conn_cache; -#ifdef MODULE_LOCAL - server_ctx->remote_addr = remote_addr; - server_ctx->remote_addr_len = remote_addr_len; - //SSR beg - server_ctx->protocol_plugin = new_obfs_class((char *)protocol); - if (server_ctx->protocol_plugin) { - server_ctx->protocol = server_ctx->protocol_plugin->new_obfs(); - server_ctx->protocol_global = server_ctx->protocol_plugin->init_data(); - } - - server_info _server_info; - memset(&_server_info, 0, sizeof(server_info)); - strcpy(_server_info.host, inet_ntoa(((struct sockaddr_in*)remote_addr)->sin_addr)); - _server_info.port = ((struct sockaddr_in*)remote_addr)->sin_port; - _server_info.port = _server_info.port >> 8 | _server_info.port << 8; - _server_info.g_data = server_ctx->protocol_global; - _server_info.param = (char *)protocol_param; - _server_info.key = enc_get_key(); - _server_info.key_len = enc_get_key_len(); - - if (server_ctx->protocol_plugin) - server_ctx->protocol_plugin->set_server_info(server_ctx->protocol, &_server_info); - //SSR end -#ifdef MODULE_TUNNEL - server_ctx->tunnel_addr = tunnel_addr; -#endif -#endif - - ev_io_start(loop, &server_ctx->io); - - server_ctx_list[server_num++] = server_ctx; - - return 0; -} - -void -free_udprelay() -{ - struct ev_loop *loop = EV_DEFAULT; - while (server_num-- > 0) { - server_ctx_t *server_ctx = server_ctx_list[server_num]; - -#ifdef MODULE_LOCAL - //SSR beg - if (server_ctx->protocol_plugin) { - server_ctx->protocol_plugin->dispose(server_ctx->protocol); - server_ctx->protocol = NULL; - free_obfs_class(server_ctx->protocol_plugin); - server_ctx->protocol_plugin = NULL; - } - //SSR end -#endif - - ev_io_stop(loop, &server_ctx->io); - close(server_ctx->fd); - cache_delete(server_ctx->conn_cache, 0); - ss_free(server_ctx); - server_ctx_list[server_num] = NULL; - } -} diff --git a/shadowsocksr-libev/src/server/udprelay.h b/shadowsocksr-libev/src/server/udprelay.h deleted file mode 100644 index 89876d4f..00000000 --- a/shadowsocksr-libev/src/server/udprelay.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * udprelay.h - Define UDP relay's buffers and callbacks - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifndef _UDPRELAY_H -#define _UDPRELAY_H - -#include -#include - -#include "encrypt.h" -#include "jconf.h" -#include "obfs.h" - -#ifdef MODULE_REMOTE -#include "resolv.h" -#endif - -#include "cache.h" - -#include "common.h" - -#define MAX_UDP_PACKET_SIZE (65507) - -#define DEFAULT_PACKET_SIZE 1397 // 1492 - 1 - 28 - 2 - 64 = 1397, the default MTU for UDP relay - -typedef struct server_ctx { - ev_io io; - int fd; - int method; - int auth; - int timeout; - const char *iface; - struct cache *conn_cache; -#ifdef MODULE_LOCAL - const struct sockaddr *remote_addr; - int remote_addr_len; -#ifdef MODULE_TUNNEL - ss_addr_t tunnel_addr; -#endif -#endif -#ifdef MODULE_REMOTE - struct ev_loop *loop; -#endif - // SSR - obfs *protocol; - obfs_class *protocol_plugin; - void *protocol_global; -} server_ctx_t; - -#ifdef MODULE_REMOTE -typedef struct query_ctx { - struct ResolvQuery *query; - struct sockaddr_storage src_addr; - buffer_t *buf; - int addr_header_len; - char addr_header[384]; - struct server_ctx *server_ctx; - struct remote_ctx *remote_ctx; -} query_ctx_t; -#endif - -typedef struct remote_ctx { - ev_io io; - ev_timer watcher; - int af; - int fd; - int addr_header_len; - char addr_header[384]; - struct sockaddr_storage src_addr; -#ifdef MODULE_REMOTE - struct sockaddr_storage dst_addr; -#endif - struct server_ctx *server_ctx; -} remote_ctx_t; - -#endif // _UDPRELAY_H diff --git a/shadowsocksr-libev/src/server/uthash.h b/shadowsocksr-libev/src/server/uthash.h deleted file mode 100644 index 45d1f9fc..00000000 --- a/shadowsocksr-libev/src/server/uthash.h +++ /dev/null @@ -1,1074 +0,0 @@ -/* -Copyright (c) 2003-2016, Troy D. Hanson http://troydhanson.github.com/uthash/ -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef UTHASH_H -#define UTHASH_H - -#define UTHASH_VERSION 2.0.1 - -#include /* memcmp,strlen */ -#include /* ptrdiff_t */ -#include /* exit() */ - -/* These macros use decltype or the earlier __typeof GNU extension. - As decltype is only available in newer compilers (VS2010 or gcc 4.3+ - when compiling c++ source) this code uses whatever method is needed - or, for VS2008 where neither is available, uses casting workarounds. */ -#if defined(_MSC_VER) /* MS compiler */ -#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ -#define DECLTYPE(x) (decltype(x)) -#else /* VS2008 or older (or VS2010 in C mode) */ -#define NO_DECLTYPE -#define DECLTYPE(x) -#endif -#elif defined(__BORLANDC__) || defined(__LCC__) || defined(__WATCOMC__) -#define NO_DECLTYPE -#define DECLTYPE(x) -#else /* GNU, Sun and other compilers */ -#define DECLTYPE(x) (__typeof(x)) -#endif - -#ifdef NO_DECLTYPE -#define DECLTYPE_ASSIGN(dst,src) \ -do { \ - char **_da_dst = (char**)(&(dst)); \ - *_da_dst = (char*)(src); \ -} while (0) -#else -#define DECLTYPE_ASSIGN(dst,src) \ -do { \ - (dst) = DECLTYPE(dst)(src); \ -} while (0) -#endif - -/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */ -#if defined(_WIN32) -#if defined(_MSC_VER) && _MSC_VER >= 1600 -#include -#elif defined(__WATCOMC__) || defined(__MINGW32__) || defined(__CYGWIN__) -#include -#else -typedef unsigned int uint32_t; -typedef unsigned char uint8_t; -#endif -#elif defined(__GNUC__) && !defined(__VXWORKS__) -#include -#else -typedef unsigned int uint32_t; -typedef unsigned char uint8_t; -#endif - -#ifndef uthash_fatal -#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */ -#endif -#ifndef uthash_malloc -#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ -#endif -#ifndef uthash_free -#define uthash_free(ptr,sz) free(ptr) /* free fcn */ -#endif -#ifndef uthash_strlen -#define uthash_strlen(s) strlen(s) -#endif -#ifndef uthash_memcmp -#define uthash_memcmp(a,b,n) memcmp(a,b,n) -#endif - -#ifndef uthash_noexpand_fyi -#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ -#endif -#ifndef uthash_expand_fyi -#define uthash_expand_fyi(tbl) /* can be defined to log expands */ -#endif - -/* initial number of buckets */ -#define HASH_INITIAL_NUM_BUCKETS 32U /* initial number of buckets */ -#define HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */ -#define HASH_BKT_CAPACITY_THRESH 10U /* expand when bucket count reaches */ - -/* calculate the element whose hash handle address is hhp */ -#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) -/* calculate the hash handle from element address elp */ -#define HH_FROM_ELMT(tbl,elp) ((UT_hash_handle *)(((char*)(elp)) + ((tbl)->hho))) - -#define HASH_VALUE(keyptr,keylen,hashv) \ -do { \ - HASH_FCN(keyptr, keylen, hashv); \ -} while (0) - -#define HASH_FIND_BYHASHVALUE(hh,head,keyptr,keylen,hashval,out) \ -do { \ - (out) = NULL; \ - if (head) { \ - unsigned _hf_bkt; \ - HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _hf_bkt); \ - if (HASH_BLOOM_TEST((head)->hh.tbl, hashval) != 0) { \ - HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], keyptr, keylen, hashval, out); \ - } \ - } \ -} while (0) - -#define HASH_FIND(hh,head,keyptr,keylen,out) \ -do { \ - unsigned _hf_hashv; \ - HASH_VALUE(keyptr, keylen, _hf_hashv); \ - HASH_FIND_BYHASHVALUE(hh, head, keyptr, keylen, _hf_hashv, out); \ -} while (0) - -#ifdef HASH_BLOOM -#define HASH_BLOOM_BITLEN (1UL << HASH_BLOOM) -#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8UL) + (((HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL) -#define HASH_BLOOM_MAKE(tbl) \ -do { \ - (tbl)->bloom_nbits = HASH_BLOOM; \ - (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ - if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \ - memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \ - (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ -} while (0) - -#define HASH_BLOOM_FREE(tbl) \ -do { \ - uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ -} while (0) - -#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U))) -#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U))) - -#define HASH_BLOOM_ADD(tbl,hashv) \ - HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1U))) - -#define HASH_BLOOM_TEST(tbl,hashv) \ - HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1U))) - -#else -#define HASH_BLOOM_MAKE(tbl) -#define HASH_BLOOM_FREE(tbl) -#define HASH_BLOOM_ADD(tbl,hashv) -#define HASH_BLOOM_TEST(tbl,hashv) (1) -#define HASH_BLOOM_BYTELEN 0U -#endif - -#define HASH_MAKE_TABLE(hh,head) \ -do { \ - (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \ - sizeof(UT_hash_table)); \ - if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \ - memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \ - (head)->hh.tbl->tail = &((head)->hh); \ - (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ - (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ - (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ - (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ - HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ - if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \ - memset((head)->hh.tbl->buckets, 0, \ - HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ - HASH_BLOOM_MAKE((head)->hh.tbl); \ - (head)->hh.tbl->signature = HASH_SIGNATURE; \ -} while (0) - -#define HASH_REPLACE_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,replaced,cmpfcn) \ -do { \ - (replaced) = NULL; \ - HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \ - if (replaced) { \ - HASH_DELETE(hh, head, replaced); \ - } \ - HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn); \ -} while (0) - -#define HASH_REPLACE_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add,replaced) \ -do { \ - (replaced) = NULL; \ - HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \ - if (replaced) { \ - HASH_DELETE(hh, head, replaced); \ - } \ - HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add); \ -} while (0) - -#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \ -do { \ - unsigned _hr_hashv; \ - HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \ - HASH_REPLACE_BYHASHVALUE(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced); \ -} while (0) - -#define HASH_REPLACE_INORDER(hh,head,fieldname,keylen_in,add,replaced,cmpfcn) \ -do { \ - unsigned _hr_hashv; \ - HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \ - HASH_REPLACE_BYHASHVALUE_INORDER(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced, cmpfcn); \ -} while (0) - -#define HASH_APPEND_LIST(hh, head, add) \ -do { \ - (add)->hh.next = NULL; \ - (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ - (head)->hh.tbl->tail->next = (add); \ - (head)->hh.tbl->tail = &((add)->hh); \ -} while (0) - -#define HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh,head,keyptr,keylen_in,hashval,add,cmpfcn) \ -do { \ - unsigned _ha_bkt; \ - (add)->hh.hashv = (hashval); \ - (add)->hh.key = (char*) (keyptr); \ - (add)->hh.keylen = (unsigned) (keylen_in); \ - if (!(head)) { \ - (add)->hh.next = NULL; \ - (add)->hh.prev = NULL; \ - (head) = (add); \ - HASH_MAKE_TABLE(hh, head); \ - } else { \ - struct UT_hash_handle *_hs_iter = &(head)->hh; \ - (add)->hh.tbl = (head)->hh.tbl; \ - do { \ - if (cmpfcn(DECLTYPE(head) ELMT_FROM_HH((head)->hh.tbl, _hs_iter), add) > 0) \ - break; \ - } while ((_hs_iter = _hs_iter->next)); \ - if (_hs_iter) { \ - (add)->hh.next = _hs_iter; \ - if (((add)->hh.prev = _hs_iter->prev)) { \ - HH_FROM_ELMT((head)->hh.tbl, _hs_iter->prev)->next = (add); \ - } else { \ - (head) = (add); \ - } \ - _hs_iter->prev = (add); \ - } else { \ - HASH_APPEND_LIST(hh, head, add); \ - } \ - } \ - (head)->hh.tbl->num_items++; \ - HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \ - HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], &(add)->hh); \ - HASH_BLOOM_ADD((head)->hh.tbl, hashval); \ - HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \ - HASH_FSCK(hh, head); \ -} while (0) - -#define HASH_ADD_KEYPTR_INORDER(hh,head,keyptr,keylen_in,add,cmpfcn) \ -do { \ - unsigned _hs_hashv; \ - HASH_VALUE(keyptr, keylen_in, _hs_hashv); \ - HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, keyptr, keylen_in, _hs_hashv, add, cmpfcn); \ -} while (0) - -#define HASH_ADD_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,cmpfcn) \ - HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn) - -#define HASH_ADD_INORDER(hh,head,fieldname,keylen_in,add,cmpfcn) \ - HASH_ADD_KEYPTR_INORDER(hh, head, &((add)->fieldname), keylen_in, add, cmpfcn) - -#define HASH_ADD_KEYPTR_BYHASHVALUE(hh,head,keyptr,keylen_in,hashval,add) \ -do { \ - unsigned _ha_bkt; \ - (add)->hh.hashv = (hashval); \ - (add)->hh.key = (char*) (keyptr); \ - (add)->hh.keylen = (unsigned) (keylen_in); \ - if (!(head)) { \ - (add)->hh.next = NULL; \ - (add)->hh.prev = NULL; \ - (head) = (add); \ - HASH_MAKE_TABLE(hh, head); \ - } else { \ - (add)->hh.tbl = (head)->hh.tbl; \ - HASH_APPEND_LIST(hh, head, add); \ - } \ - (head)->hh.tbl->num_items++; \ - HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \ - HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], &(add)->hh); \ - HASH_BLOOM_ADD((head)->hh.tbl, hashval); \ - HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \ - HASH_FSCK(hh, head); \ -} while (0) - -#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ -do { \ - unsigned _ha_hashv; \ - HASH_VALUE(keyptr, keylen_in, _ha_hashv); \ - HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, keyptr, keylen_in, _ha_hashv, add); \ -} while (0) - -#define HASH_ADD_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add) \ - HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add) - -#define HASH_ADD(hh,head,fieldname,keylen_in,add) \ - HASH_ADD_KEYPTR(hh, head, &((add)->fieldname), keylen_in, add) - -#define HASH_TO_BKT(hashv,num_bkts,bkt) \ -do { \ - bkt = ((hashv) & ((num_bkts) - 1U)); \ -} while (0) - -/* delete "delptr" from the hash table. - * "the usual" patch-up process for the app-order doubly-linked-list. - * The use of _hd_hh_del below deserves special explanation. - * These used to be expressed using (delptr) but that led to a bug - * if someone used the same symbol for the head and deletee, like - * HASH_DELETE(hh,users,users); - * We want that to work, but by changing the head (users) below - * we were forfeiting our ability to further refer to the deletee (users) - * in the patch-up process. Solution: use scratch space to - * copy the deletee pointer, then the latter references are via that - * scratch pointer rather than through the repointed (users) symbol. - */ -#define HASH_DELETE(hh,head,delptr) \ -do { \ - struct UT_hash_handle *_hd_hh_del; \ - if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \ - uthash_free((head)->hh.tbl->buckets, \ - (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ - HASH_BLOOM_FREE((head)->hh.tbl); \ - uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ - head = NULL; \ - } else { \ - unsigned _hd_bkt; \ - _hd_hh_del = &((delptr)->hh); \ - if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \ - (head)->hh.tbl->tail = \ - (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ - (head)->hh.tbl->hho); \ - } \ - if ((delptr)->hh.prev != NULL) { \ - ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ - (head)->hh.tbl->hho))->next = (delptr)->hh.next; \ - } else { \ - DECLTYPE_ASSIGN(head,(delptr)->hh.next); \ - } \ - if (_hd_hh_del->next != NULL) { \ - ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \ - (head)->hh.tbl->hho))->prev = \ - _hd_hh_del->prev; \ - } \ - HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ - HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ - (head)->hh.tbl->num_items--; \ - } \ - HASH_FSCK(hh,head); \ -} while (0) - - -/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ -#define HASH_FIND_STR(head,findstr,out) \ - HASH_FIND(hh,head,findstr,(unsigned)uthash_strlen(findstr),out) -#define HASH_ADD_STR(head,strfield,add) \ - HASH_ADD(hh,head,strfield[0],(unsigned)uthash_strlen(add->strfield),add) -#define HASH_REPLACE_STR(head,strfield,add,replaced) \ - HASH_REPLACE(hh,head,strfield[0],(unsigned)uthash_strlen(add->strfield),add,replaced) -#define HASH_FIND_INT(head,findint,out) \ - HASH_FIND(hh,head,findint,sizeof(int),out) -#define HASH_ADD_INT(head,intfield,add) \ - HASH_ADD(hh,head,intfield,sizeof(int),add) -#define HASH_REPLACE_INT(head,intfield,add,replaced) \ - HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced) -#define HASH_FIND_PTR(head,findptr,out) \ - HASH_FIND(hh,head,findptr,sizeof(void *),out) -#define HASH_ADD_PTR(head,ptrfield,add) \ - HASH_ADD(hh,head,ptrfield,sizeof(void *),add) -#define HASH_REPLACE_PTR(head,ptrfield,add,replaced) \ - HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced) -#define HASH_DEL(head,delptr) \ - HASH_DELETE(hh,head,delptr) - -/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. - * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. - */ -#ifdef HASH_DEBUG -#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0) -#define HASH_FSCK(hh,head) \ -do { \ - struct UT_hash_handle *_thh; \ - if (head) { \ - unsigned _bkt_i; \ - unsigned _count; \ - char *_prev; \ - _count = 0; \ - for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \ - unsigned _bkt_count = 0; \ - _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ - _prev = NULL; \ - while (_thh) { \ - if (_prev != (char*)(_thh->hh_prev)) { \ - HASH_OOPS("invalid hh_prev %p, actual %p\n", \ - _thh->hh_prev, _prev ); \ - } \ - _bkt_count++; \ - _prev = (char*)(_thh); \ - _thh = _thh->hh_next; \ - } \ - _count += _bkt_count; \ - if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ - HASH_OOPS("invalid bucket count %u, actual %u\n", \ - (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ - } \ - } \ - if (_count != (head)->hh.tbl->num_items) { \ - HASH_OOPS("invalid hh item count %u, actual %u\n", \ - (head)->hh.tbl->num_items, _count ); \ - } \ - /* traverse hh in app order; check next/prev integrity, count */ \ - _count = 0; \ - _prev = NULL; \ - _thh = &(head)->hh; \ - while (_thh) { \ - _count++; \ - if (_prev !=(char*)(_thh->prev)) { \ - HASH_OOPS("invalid prev %p, actual %p\n", \ - _thh->prev, _prev ); \ - } \ - _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ - _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \ - (head)->hh.tbl->hho) : NULL ); \ - } \ - if (_count != (head)->hh.tbl->num_items) { \ - HASH_OOPS("invalid app item count %u, actual %u\n", \ - (head)->hh.tbl->num_items, _count ); \ - } \ - } \ -} while (0) -#else -#define HASH_FSCK(hh,head) -#endif - -/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to - * the descriptor to which this macro is defined for tuning the hash function. - * The app can #include to get the prototype for write(2). */ -#ifdef HASH_EMIT_KEYS -#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ -do { \ - unsigned _klen = fieldlen; \ - write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ - write(HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \ -} while (0) -#else -#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) -#endif - -/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */ -#ifdef HASH_FUNCTION -#define HASH_FCN HASH_FUNCTION -#else -#define HASH_FCN HASH_JEN -#endif - -/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */ -#define HASH_BER(key,keylen,hashv) \ -do { \ - unsigned _hb_keylen=(unsigned)keylen; \ - const unsigned char *_hb_key=(const unsigned char*)(key); \ - (hashv) = 0; \ - while (_hb_keylen-- != 0U) { \ - (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; \ - } \ -} while (0) - - -/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at - * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ -#define HASH_SAX(key,keylen,hashv) \ -do { \ - unsigned _sx_i; \ - const unsigned char *_hs_key=(const unsigned char*)(key); \ - hashv = 0; \ - for(_sx_i=0; _sx_i < keylen; _sx_i++) { \ - hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ - } \ -} while (0) -/* FNV-1a variation */ -#define HASH_FNV(key,keylen,hashv) \ -do { \ - unsigned _fn_i; \ - const unsigned char *_hf_key=(const unsigned char*)(key); \ - hashv = 2166136261U; \ - for(_fn_i=0; _fn_i < keylen; _fn_i++) { \ - hashv = hashv ^ _hf_key[_fn_i]; \ - hashv = hashv * 16777619U; \ - } \ -} while (0) - -#define HASH_OAT(key,keylen,hashv) \ -do { \ - unsigned _ho_i; \ - const unsigned char *_ho_key=(const unsigned char*)(key); \ - hashv = 0; \ - for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ - hashv += _ho_key[_ho_i]; \ - hashv += (hashv << 10); \ - hashv ^= (hashv >> 6); \ - } \ - hashv += (hashv << 3); \ - hashv ^= (hashv >> 11); \ - hashv += (hashv << 15); \ -} while (0) - -#define HASH_JEN_MIX(a,b,c) \ -do { \ - a -= b; a -= c; a ^= ( c >> 13 ); \ - b -= c; b -= a; b ^= ( a << 8 ); \ - c -= a; c -= b; c ^= ( b >> 13 ); \ - a -= b; a -= c; a ^= ( c >> 12 ); \ - b -= c; b -= a; b ^= ( a << 16 ); \ - c -= a; c -= b; c ^= ( b >> 5 ); \ - a -= b; a -= c; a ^= ( c >> 3 ); \ - b -= c; b -= a; b ^= ( a << 10 ); \ - c -= a; c -= b; c ^= ( b >> 15 ); \ -} while (0) - -#define HASH_JEN(key,keylen,hashv) \ -do { \ - unsigned _hj_i,_hj_j,_hj_k; \ - unsigned const char *_hj_key=(unsigned const char*)(key); \ - hashv = 0xfeedbeefu; \ - _hj_i = _hj_j = 0x9e3779b9u; \ - _hj_k = (unsigned)(keylen); \ - while (_hj_k >= 12U) { \ - _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ - + ( (unsigned)_hj_key[2] << 16 ) \ - + ( (unsigned)_hj_key[3] << 24 ) ); \ - _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ - + ( (unsigned)_hj_key[6] << 16 ) \ - + ( (unsigned)_hj_key[7] << 24 ) ); \ - hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ - + ( (unsigned)_hj_key[10] << 16 ) \ - + ( (unsigned)_hj_key[11] << 24 ) ); \ - \ - HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ - \ - _hj_key += 12; \ - _hj_k -= 12U; \ - } \ - hashv += (unsigned)(keylen); \ - switch ( _hj_k ) { \ - case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */ \ - case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); /* FALLTHROUGH */ \ - case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); /* FALLTHROUGH */ \ - case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); /* FALLTHROUGH */ \ - case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); /* FALLTHROUGH */ \ - case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); /* FALLTHROUGH */ \ - case 5: _hj_j += _hj_key[4]; /* FALLTHROUGH */ \ - case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); /* FALLTHROUGH */ \ - case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); /* FALLTHROUGH */ \ - case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); /* FALLTHROUGH */ \ - case 1: _hj_i += _hj_key[0]; \ - } \ - HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ -} while (0) - -/* The Paul Hsieh hash function */ -#undef get16bits -#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ - || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) -#define get16bits(d) (*((const uint16_t *) (d))) -#endif - -#if !defined (get16bits) -#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ - +(uint32_t)(((const uint8_t *)(d))[0]) ) -#endif -#define HASH_SFH(key,keylen,hashv) \ -do { \ - unsigned const char *_sfh_key=(unsigned const char*)(key); \ - uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \ - \ - unsigned _sfh_rem = _sfh_len & 3U; \ - _sfh_len >>= 2; \ - hashv = 0xcafebabeu; \ - \ - /* Main loop */ \ - for (;_sfh_len > 0U; _sfh_len--) { \ - hashv += get16bits (_sfh_key); \ - _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \ - hashv = (hashv << 16) ^ _sfh_tmp; \ - _sfh_key += 2U*sizeof (uint16_t); \ - hashv += hashv >> 11; \ - } \ - \ - /* Handle end cases */ \ - switch (_sfh_rem) { \ - case 3: hashv += get16bits (_sfh_key); \ - hashv ^= hashv << 16; \ - hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \ - hashv += hashv >> 11; \ - break; \ - case 2: hashv += get16bits (_sfh_key); \ - hashv ^= hashv << 11; \ - hashv += hashv >> 17; \ - break; \ - case 1: hashv += *_sfh_key; \ - hashv ^= hashv << 10; \ - hashv += hashv >> 1; \ - } \ - \ - /* Force "avalanching" of final 127 bits */ \ - hashv ^= hashv << 3; \ - hashv += hashv >> 5; \ - hashv ^= hashv << 4; \ - hashv += hashv >> 17; \ - hashv ^= hashv << 25; \ - hashv += hashv >> 6; \ -} while (0) - -#ifdef HASH_USING_NO_STRICT_ALIASING -/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads. - * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error. - * MurmurHash uses the faster approach only on CPU's where we know it's safe. - * - * Note the preprocessor built-in defines can be emitted using: - * - * gcc -m64 -dM -E - < /dev/null (on gcc) - * cc -## a.c (where a.c is a simple test file) (Sun Studio) - */ -#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86)) -#define MUR_GETBLOCK(p,i) p[i] -#else /* non intel */ -#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 3UL) == 0UL) -#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 3UL) == 1UL) -#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 3UL) == 2UL) -#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 3UL) == 3UL) -#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL)) -#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__)) -#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24)) -#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16)) -#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8)) -#else /* assume little endian non-intel */ -#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24)) -#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16)) -#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8)) -#endif -#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \ - (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \ - (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \ - MUR_ONE_THREE(p)))) -#endif -#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) -#define MUR_FMIX(_h) \ -do { \ - _h ^= _h >> 16; \ - _h *= 0x85ebca6bu; \ - _h ^= _h >> 13; \ - _h *= 0xc2b2ae35u; \ - _h ^= _h >> 16; \ -} while (0) - -#define HASH_MUR(key,keylen,hashv) \ -do { \ - const uint8_t *_mur_data = (const uint8_t*)(key); \ - const int _mur_nblocks = (int)(keylen) / 4; \ - uint32_t _mur_h1 = 0xf88D5353u; \ - uint32_t _mur_c1 = 0xcc9e2d51u; \ - uint32_t _mur_c2 = 0x1b873593u; \ - uint32_t _mur_k1 = 0; \ - const uint8_t *_mur_tail; \ - const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \ - int _mur_i; \ - for(_mur_i = -_mur_nblocks; _mur_i!=0; _mur_i++) { \ - _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \ - _mur_k1 *= _mur_c1; \ - _mur_k1 = MUR_ROTL32(_mur_k1,15); \ - _mur_k1 *= _mur_c2; \ - \ - _mur_h1 ^= _mur_k1; \ - _mur_h1 = MUR_ROTL32(_mur_h1,13); \ - _mur_h1 = (_mur_h1*5U) + 0xe6546b64u; \ - } \ - _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4)); \ - _mur_k1=0; \ - switch((keylen) & 3U) { \ - case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \ - case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8; /* FALLTHROUGH */ \ - case 1: _mur_k1 ^= (uint32_t)_mur_tail[0]; \ - _mur_k1 *= _mur_c1; \ - _mur_k1 = MUR_ROTL32(_mur_k1,15); \ - _mur_k1 *= _mur_c2; \ - _mur_h1 ^= _mur_k1; \ - } \ - _mur_h1 ^= (uint32_t)(keylen); \ - MUR_FMIX(_mur_h1); \ - hashv = _mur_h1; \ -} while (0) -#endif /* HASH_USING_NO_STRICT_ALIASING */ - -/* iterate over items in a known bucket to find desired item */ -#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out) \ -do { \ - if ((head).hh_head != NULL) { \ - DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (head).hh_head)); \ - } else { \ - (out) = NULL; \ - } \ - while ((out) != NULL) { \ - if ((out)->hh.hashv == (hashval) && (out)->hh.keylen == (keylen_in)) { \ - if (uthash_memcmp((out)->hh.key, keyptr, keylen_in) == 0) { \ - break; \ - } \ - } \ - if ((out)->hh.hh_next != NULL) { \ - DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (out)->hh.hh_next)); \ - } else { \ - (out) = NULL; \ - } \ - } \ -} while (0) - -/* add an item to a bucket */ -#define HASH_ADD_TO_BKT(head,addhh) \ -do { \ - head.count++; \ - (addhh)->hh_next = head.hh_head; \ - (addhh)->hh_prev = NULL; \ - if (head.hh_head != NULL) { (head).hh_head->hh_prev = (addhh); } \ - (head).hh_head=addhh; \ - if ((head.count >= ((head.expand_mult+1U) * HASH_BKT_CAPACITY_THRESH)) \ - && ((addhh)->tbl->noexpand != 1U)) { \ - HASH_EXPAND_BUCKETS((addhh)->tbl); \ - } \ -} while (0) - -/* remove an item from a given bucket */ -#define HASH_DEL_IN_BKT(hh,head,hh_del) \ - (head).count--; \ - if ((head).hh_head == hh_del) { \ - (head).hh_head = hh_del->hh_next; \ - } \ - if (hh_del->hh_prev) { \ - hh_del->hh_prev->hh_next = hh_del->hh_next; \ - } \ - if (hh_del->hh_next) { \ - hh_del->hh_next->hh_prev = hh_del->hh_prev; \ - } - -/* Bucket expansion has the effect of doubling the number of buckets - * and redistributing the items into the new buckets. Ideally the - * items will distribute more or less evenly into the new buckets - * (the extent to which this is true is a measure of the quality of - * the hash function as it applies to the key domain). - * - * With the items distributed into more buckets, the chain length - * (item count) in each bucket is reduced. Thus by expanding buckets - * the hash keeps a bound on the chain length. This bounded chain - * length is the essence of how a hash provides constant time lookup. - * - * The calculation of tbl->ideal_chain_maxlen below deserves some - * explanation. First, keep in mind that we're calculating the ideal - * maximum chain length based on the *new* (doubled) bucket count. - * In fractions this is just n/b (n=number of items,b=new num buckets). - * Since the ideal chain length is an integer, we want to calculate - * ceil(n/b). We don't depend on floating point arithmetic in this - * hash, so to calculate ceil(n/b) with integers we could write - * - * ceil(n/b) = (n/b) + ((n%b)?1:0) - * - * and in fact a previous version of this hash did just that. - * But now we have improved things a bit by recognizing that b is - * always a power of two. We keep its base 2 log handy (call it lb), - * so now we can write this with a bit shift and logical AND: - * - * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) - * - */ -#define HASH_EXPAND_BUCKETS(tbl) \ -do { \ - unsigned _he_bkt; \ - unsigned _he_bkt_i; \ - struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ - UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ - _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ - 2UL * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ - if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \ - memset(_he_new_buckets, 0, \ - 2UL * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ - tbl->ideal_chain_maxlen = \ - (tbl->num_items >> (tbl->log2_num_buckets+1U)) + \ - (((tbl->num_items & ((tbl->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \ - tbl->nonideal_items = 0; \ - for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \ - { \ - _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \ - while (_he_thh != NULL) { \ - _he_hh_nxt = _he_thh->hh_next; \ - HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2U, _he_bkt); \ - _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \ - if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \ - tbl->nonideal_items++; \ - _he_newbkt->expand_mult = _he_newbkt->count / \ - tbl->ideal_chain_maxlen; \ - } \ - _he_thh->hh_prev = NULL; \ - _he_thh->hh_next = _he_newbkt->hh_head; \ - if (_he_newbkt->hh_head != NULL) { _he_newbkt->hh_head->hh_prev = \ - _he_thh; } \ - _he_newbkt->hh_head = _he_thh; \ - _he_thh = _he_hh_nxt; \ - } \ - } \ - uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ - tbl->num_buckets *= 2U; \ - tbl->log2_num_buckets++; \ - tbl->buckets = _he_new_buckets; \ - tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \ - (tbl->ineff_expands+1U) : 0U; \ - if (tbl->ineff_expands > 1U) { \ - tbl->noexpand=1; \ - uthash_noexpand_fyi(tbl); \ - } \ - uthash_expand_fyi(tbl); \ -} while (0) - - -/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ -/* Note that HASH_SORT assumes the hash handle name to be hh. - * HASH_SRT was added to allow the hash handle name to be passed in. */ -#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) -#define HASH_SRT(hh,head,cmpfcn) \ -do { \ - unsigned _hs_i; \ - unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ - struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ - if (head != NULL) { \ - _hs_insize = 1; \ - _hs_looping = 1; \ - _hs_list = &((head)->hh); \ - while (_hs_looping != 0U) { \ - _hs_p = _hs_list; \ - _hs_list = NULL; \ - _hs_tail = NULL; \ - _hs_nmerges = 0; \ - while (_hs_p != NULL) { \ - _hs_nmerges++; \ - _hs_q = _hs_p; \ - _hs_psize = 0; \ - for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \ - _hs_psize++; \ - _hs_q = (UT_hash_handle*)((_hs_q->next != NULL) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - if (! (_hs_q) ) { break; } \ - } \ - _hs_qsize = _hs_insize; \ - while ((_hs_psize > 0U) || ((_hs_qsize > 0U) && (_hs_q != NULL))) {\ - if (_hs_psize == 0U) { \ - _hs_e = _hs_q; \ - _hs_q = (UT_hash_handle*)((_hs_q->next != NULL) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_qsize--; \ - } else if ( (_hs_qsize == 0U) || (_hs_q == NULL) ) { \ - _hs_e = _hs_p; \ - if (_hs_p != NULL){ \ - _hs_p = (UT_hash_handle*)((_hs_p->next != NULL) ? \ - ((void*)((char*)(_hs_p->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - } \ - _hs_psize--; \ - } else if (( \ - cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \ - DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \ - ) <= 0) { \ - _hs_e = _hs_p; \ - if (_hs_p != NULL){ \ - _hs_p = (UT_hash_handle*)((_hs_p->next != NULL) ? \ - ((void*)((char*)(_hs_p->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - } \ - _hs_psize--; \ - } else { \ - _hs_e = _hs_q; \ - _hs_q = (UT_hash_handle*)((_hs_q->next != NULL) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_qsize--; \ - } \ - if ( _hs_tail != NULL ) { \ - _hs_tail->next = ((_hs_e != NULL) ? \ - ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \ - } else { \ - _hs_list = _hs_e; \ - } \ - if (_hs_e != NULL) { \ - _hs_e->prev = ((_hs_tail != NULL) ? \ - ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \ - } \ - _hs_tail = _hs_e; \ - } \ - _hs_p = _hs_q; \ - } \ - if (_hs_tail != NULL){ \ - _hs_tail->next = NULL; \ - } \ - if ( _hs_nmerges <= 1U ) { \ - _hs_looping=0; \ - (head)->hh.tbl->tail = _hs_tail; \ - DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ - } \ - _hs_insize *= 2U; \ - } \ - HASH_FSCK(hh,head); \ - } \ -} while (0) - -/* This function selects items from one hash into another hash. - * The end result is that the selected items have dual presence - * in both hashes. There is no copy of the items made; rather - * they are added into the new hash through a secondary hash - * hash handle that must be present in the structure. */ -#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ -do { \ - unsigned _src_bkt, _dst_bkt; \ - void *_last_elt=NULL, *_elt; \ - UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ - ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ - if (src != NULL) { \ - for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ - for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ - _src_hh != NULL; \ - _src_hh = _src_hh->hh_next) { \ - _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ - if (cond(_elt)) { \ - _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \ - _dst_hh->key = _src_hh->key; \ - _dst_hh->keylen = _src_hh->keylen; \ - _dst_hh->hashv = _src_hh->hashv; \ - _dst_hh->prev = _last_elt; \ - _dst_hh->next = NULL; \ - if (_last_elt_hh != NULL) { _last_elt_hh->next = _elt; } \ - if (dst == NULL) { \ - DECLTYPE_ASSIGN(dst,_elt); \ - HASH_MAKE_TABLE(hh_dst,dst); \ - } else { \ - _dst_hh->tbl = (dst)->hh_dst.tbl; \ - } \ - HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ - HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \ - (dst)->hh_dst.tbl->num_items++; \ - _last_elt = _elt; \ - _last_elt_hh = _dst_hh; \ - } \ - } \ - } \ - } \ - HASH_FSCK(hh_dst,dst); \ -} while (0) - -#define HASH_CLEAR(hh,head) \ -do { \ - if (head != NULL) { \ - uthash_free((head)->hh.tbl->buckets, \ - (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ - HASH_BLOOM_FREE((head)->hh.tbl); \ - uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ - (head)=NULL; \ - } \ -} while (0) - -#define HASH_OVERHEAD(hh,head) \ - ((head != NULL) ? ( \ - (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \ - ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \ - sizeof(UT_hash_table) + \ - (HASH_BLOOM_BYTELEN))) : 0U) - -#ifdef NO_DECLTYPE -#define HASH_ITER(hh,head,el,tmp) \ -for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \ - (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL))) -#else -#define HASH_ITER(hh,head,el,tmp) \ -for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \ - (el) != NULL; ((el)=(tmp)), ((tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL))) -#endif - -/* obtain a count of items in the hash */ -#define HASH_COUNT(head) HASH_CNT(hh,head) -#define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U) - -typedef struct UT_hash_bucket { - struct UT_hash_handle *hh_head; - unsigned count; - - /* expand_mult is normally set to 0. In this situation, the max chain length - * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If - * the bucket's chain exceeds this length, bucket expansion is triggered). - * However, setting expand_mult to a non-zero value delays bucket expansion - * (that would be triggered by additions to this particular bucket) - * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. - * (The multiplier is simply expand_mult+1). The whole idea of this - * multiplier is to reduce bucket expansions, since they are expensive, in - * situations where we know that a particular bucket tends to be overused. - * It is better to let its chain length grow to a longer yet-still-bounded - * value, than to do an O(n) bucket expansion too often. - */ - unsigned expand_mult; - -} UT_hash_bucket; - -/* random signature used only to find hash tables in external analysis */ -#define HASH_SIGNATURE 0xa0111fe1u -#define HASH_BLOOM_SIGNATURE 0xb12220f2u - -typedef struct UT_hash_table { - UT_hash_bucket *buckets; - unsigned num_buckets, log2_num_buckets; - unsigned num_items; - struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ - ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ - - /* in an ideal situation (all buckets used equally), no bucket would have - * more than ceil(#items/#buckets) items. that's the ideal chain length. */ - unsigned ideal_chain_maxlen; - - /* nonideal_items is the number of items in the hash whose chain position - * exceeds the ideal chain maxlen. these items pay the penalty for an uneven - * hash distribution; reaching them in a chain traversal takes >ideal steps */ - unsigned nonideal_items; - - /* ineffective expands occur when a bucket doubling was performed, but - * afterward, more than half the items in the hash had nonideal chain - * positions. If this happens on two consecutive expansions we inhibit any - * further expansion, as it's not helping; this happens when the hash - * function isn't a good fit for the key domain. When expansion is inhibited - * the hash will still work, albeit no longer in constant time. */ - unsigned ineff_expands, noexpand; - - uint32_t signature; /* used only to find hash tables in external analysis */ -#ifdef HASH_BLOOM - uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ - uint8_t *bloom_bv; - uint8_t bloom_nbits; -#endif - -} UT_hash_table; - -typedef struct UT_hash_handle { - struct UT_hash_table *tbl; - void *prev; /* prev element in app order */ - void *next; /* next element in app order */ - struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ - struct UT_hash_handle *hh_next; /* next hh in bucket order */ - void *key; /* ptr to enclosing struct's key */ - unsigned keylen; /* enclosing struct's key len */ - unsigned hashv; /* result of hash-fcn(key) */ -} UT_hash_handle; - -#endif /* UTHASH_H */ diff --git a/shadowsocksr-libev/src/server/utils.c b/shadowsocksr-libev/src/server/utils.c deleted file mode 100644 index 14a60c7f..00000000 --- a/shadowsocksr-libev/src/server/utils.c +++ /dev/null @@ -1,448 +0,0 @@ -/* - * utils.c - Misc utilities - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#ifndef __MINGW32__ -#include -#include -#endif - -#include -#include - -#include "utils.h" - -#ifdef HAVE_SETRLIMIT -#include -#include -#endif - -#define INT_DIGITS 19 /* enough for 64 bit integer */ - -#ifdef LIB_ONLY -FILE *logfile; -#endif - -#ifdef HAS_SYSLOG -int use_syslog = 0; -#endif - -#ifndef __MINGW32__ -void -ERROR(const char *s) -{ - char *msg = strerror(errno); - LOGE("%s: %s", s, msg); -} - -#endif - -int use_tty = 1; - -char * -ss_itoa(int i) -{ - /* Room for INT_DIGITS digits, - and '\0' */ - static char buf[INT_DIGITS + 2]; - char *p = buf + INT_DIGITS + 1; /* points to terminating '\0' */ - if (i >= 0) { - do { - *--p = '0' + (i % 10); - i /= 10; - } while (i != 0); - return p; - } else { /* i < 0 */ - do { - *--p = '0' - (i % 10); - i /= 10; - } while (i != 0); - *--p = '-'; - } - return p; -} - -int -ss_isnumeric(const char *s) { - if (!s || !*s) - return 0; - while (isdigit(*s)) - ++s; - return *s == '\0'; -} - -/* - * setuid() and setgid() for a specified user. - */ -int -run_as(const char *user) -{ -#ifndef __MINGW32__ - if (user[0]) { - /* Convert user to a long integer if it is a non-negative number. - * -1 means it is a user name. */ - long uid = -1; - if (ss_isnumeric(user)) { - errno = 0; - char *endptr; - uid = strtol(user, &endptr, 10); - if (errno || endptr == user) - uid = -1; - } - -#ifdef HAVE_GETPWNAM_R - struct passwd pwdbuf, *pwd; - memset(&pwdbuf, 0, sizeof(struct passwd)); - size_t buflen; - int err; - - for (buflen = 128;; buflen *= 2) { - char buf[buflen]; /* variable length array */ - - /* Note that we use getpwnam_r() instead of getpwnam(), - * which returns its result in a statically allocated buffer and - * cannot be considered thread safe. */ - err = uid >= 0 ? getpwuid_r((uid_t)uid, &pwdbuf, buf, buflen, &pwd) - : getpwnam_r(user, &pwdbuf, buf, buflen, &pwd); - - if (err == 0 && pwd) { - /* setgid first, because we may not be allowed to do it anymore after setuid */ - if (setgid(pwd->pw_gid) != 0) { - LOGE( - "Could not change group id to that of run_as user '%s': %s", - pwd->pw_name, strerror(errno)); - return 0; - } - - if (initgroups(pwd->pw_name, pwd->pw_gid) == -1) { - LOGE("Could not change supplementary groups for user '%s'.", pwd->pw_name); - return 0; - } - - if (setuid(pwd->pw_uid) != 0) { - LOGE( - "Could not change user id to that of run_as user '%s': %s", - pwd->pw_name, strerror(errno)); - return 0; - } - break; - } else if (err != ERANGE) { - if (err) { - LOGE("run_as user '%s' could not be found: %s", user, - strerror(err)); - } else { - LOGE("run_as user '%s' could not be found.", user); - } - return 0; - } else if (buflen >= 16 * 1024) { - /* If getpwnam_r() seems defective, call it quits rather than - * keep on allocating ever larger buffers until we crash. */ - LOGE( - "getpwnam_r() requires more than %u bytes of buffer space.", - (unsigned)buflen); - return 0; - } - /* Else try again with larger buffer. */ - } -#else - /* No getpwnam_r() :-( We'll use getpwnam() and hope for the best. */ - struct passwd *pwd; - - if (!(pwd = uid >=0 ? getpwuid((uid_t)uid) : getpwnam(user))) { - LOGE("run_as user %s could not be found.", user); - return 0; - } - /* setgid first, because we may not allowed to do it anymore after setuid */ - if (setgid(pwd->pw_gid) != 0) { - LOGE("Could not change group id to that of run_as user '%s': %s", - pwd->pw_name, strerror(errno)); - return 0; - } - if (initgroups(pwd->pw_name, pwd->pw_gid) == -1) { - LOGE("Could not change supplementary groups for user '%s'.", pwd->pw_name); - return 0; - } - if (setuid(pwd->pw_uid) != 0) { - LOGE("Could not change user id to that of run_as user '%s': %s", - pwd->pw_name, strerror(errno)); - return 0; - } -#endif - } - -#endif // __MINGW32__ - return 1; -} - -char * -ss_strndup(const char *s, size_t n) -{ - size_t len = strlen(s); - char *ret; - - if (len <= n) { - return strdup(s); - } - - ret = ss_malloc(n + 1); - strncpy(ret, s, n); - ret[n] = '\0'; - return ret; -} - -void -FATAL(const char *msg) -{ - LOGE("%s", msg); - exit(-1); -} - -void * -ss_malloc(size_t size) -{ - void *tmp = malloc(size); - if (tmp == NULL) - exit(EXIT_FAILURE); - return tmp; -} - -void * -ss_realloc(void *ptr, size_t new_size) -{ - void *new = realloc(ptr, new_size); - if (new == NULL) { - free(ptr); - ptr = NULL; - exit(EXIT_FAILURE); - } - return new; -} - -void -usage() -{ - printf("\n"); - printf("shadowsocks-libev %s with %s\n\n", VERSION, USING_CRYPTO); - printf( - " maintained by Max Lv and Linus Yang \n\n"); - printf(" usage:\n\n"); -#ifdef MODULE_LOCAL - printf(" ss-local\n"); -#elif MODULE_REMOTE - printf(" ss-server\n"); -#elif MODULE_TUNNEL - printf(" ss-tunnel\n"); -#elif MODULE_REDIR - printf(" ss-redir\n"); -#elif MODULE_MANAGER - printf(" ss-manager\n"); -#endif - printf("\n"); - printf( - " -s Host name or IP address of your remote server.\n"); - printf( - " -p Port number of your remote server.\n"); - printf( - " -l Port number of your local server.\n"); - printf( - " -k Password of your remote server.\n"); - printf( - " -m Encrypt method: table, rc4, rc4-md5,\n"); - printf( - " aes-128-cfb, aes-192-cfb, aes-256-cfb,\n"); - printf( - " aes-128-ctr, aes-192-ctr, aes-256-ctr,\n"); - printf( - " bf-cfb, camellia-128-cfb, camellia-192-cfb,\n"); - printf( - " camellia-256-cfb, cast5-cfb, des-cfb,\n"); - printf( - " idea-cfb, rc2-cfb, seed-cfb, salsa20,\n"); - printf( - " chacha20 and chacha20-ietf.\n"); - printf( - " The default cipher is rc4-md5.\n"); - printf("\n"); - printf( - " [-a ] Run as another user.\n"); - printf( - " [-f ] The file path to store pid.\n"); - printf( - " [-t ] Socket timeout in seconds.\n"); - printf( - " [-c ] The path to config file.\n"); -#ifdef HAVE_SETRLIMIT - printf( - " [-n ] Max number of open files.\n"); -#endif -#ifndef MODULE_REDIR - printf( - " [-i ] Network interface to bind.\n"); -#endif - printf( - " [-b ] Local address to bind.\n"); - printf("\n"); - printf( - " [-u] Enable UDP relay.\n"); -#ifdef MODULE_REDIR - printf( - " TPROXY is required in redir mode.\n"); -#endif - printf( - " [-U] Enable UDP relay and disable TCP relay.\n"); - printf( - " [-A] Enable onetime authentication.\n"); -#ifdef MODULE_REMOTE - printf( - " [-6] Resovle hostname to IPv6 address first.\n"); -#endif - printf("\n"); -#ifdef MODULE_TUNNEL - printf( - " [-L :] Destination server address and port\n"); - printf( - " for local port forwarding.\n"); -#endif -#ifdef MODULE_REMOTE - printf( - " [-d ] Name servers for internal DNS resolver.\n"); -#endif -#if defined(MODULE_REMOTE) || defined(MODULE_LOCAL) - printf( - " [--fast-open] Enable TCP fast open.\n"); - printf( - " with Linux kernel > 3.7.0.\n"); - printf( - " [--acl ] Path to ACL (Access Control List).\n"); -#endif -#if defined(MODULE_REMOTE) || defined(MODULE_MANAGER) - printf( - " [--manager-address ] UNIX domain socket address.\n"); -#endif -#ifdef MODULE_MANAGER - printf( - " [--executable ] Path to the executable of ss-server.\n"); -#endif - printf( - " [--mtu ] MTU of your network interface.\n"); -#ifdef __linux__ - printf( - " [--mptcp] Enable Multipath TCP on MPTCP Kernel.\n"); -#ifdef MODULE_REMOTE - printf( - " [--firewall] Setup firewall rules for auto blocking.\n"); -#endif -#endif - printf("\n"); - printf( - " [-v] Verbose mode.\n"); - printf( - " [-h, --help] Print this message.\n"); - printf("\n"); -} - -void -daemonize(const char *path) -{ -#ifndef __MINGW32__ - /* Our process ID and Session ID */ - pid_t pid, sid; - - /* Fork off the parent process */ - pid = fork(); - if (pid < 0) { - exit(EXIT_FAILURE); - } - - /* If we got a good PID, then - * we can exit the parent process. */ - if (pid > 0) { - FILE *file = fopen(path, "w"); - if (file == NULL) { - FATAL("Invalid pid file\n"); - } - - fprintf(file, "%d", (int)pid); - fclose(file); - exit(EXIT_SUCCESS); - } - - /* Change the file mode mask */ - umask(0); - - /* Open any logs here */ - - /* Create a new SID for the child process */ - sid = setsid(); - if (sid < 0) { - /* Log the failure */ - exit(EXIT_FAILURE); - } - - /* Change the current working directory */ - if ((chdir("/")) < 0) { - /* Log the failure */ - exit(EXIT_FAILURE); - } - - /* Close out the standard file descriptors */ - close(STDIN_FILENO); - close(STDOUT_FILENO); - close(STDERR_FILENO); -#endif -} - -#ifdef HAVE_SETRLIMIT -int -set_nofile(int nofile) -{ - struct rlimit limit = { nofile, nofile }; /* set both soft and hard limit */ - - if (nofile <= 0) { - FATAL("nofile must be greater than 0\n"); - } - - if (setrlimit(RLIMIT_NOFILE, &limit) < 0) { - if (errno == EPERM) { - LOGE( - "insufficient permission to change NOFILE, not starting as root?"); - return -1; - } else if (errno == EINVAL) { - LOGE("invalid nofile, decrease nofile and try again"); - return -1; - } else { - LOGE("setrlimit failed: %s", strerror(errno)); - return -1; - } - } - - return 0; -} - -#endif diff --git a/shadowsocksr-libev/src/server/utils.h b/shadowsocksr-libev/src/server/utils.h deleted file mode 100644 index 0fb7f5a2..00000000 --- a/shadowsocksr-libev/src/server/utils.h +++ /dev/null @@ -1,232 +0,0 @@ -/* - * utils.h - Misc utilities - * - * Copyright (C) 2013 - 2016, Max Lv - * - * This file is part of the shadowsocks-libev. - * - * shadowsocks-libev is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * shadowsocks-libev is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with shadowsocks-libev; see the file COPYING. If not, see - * . - */ - -#if defined(USE_CRYPTO_OPENSSL) - -#include -#define USING_CRYPTO OPENSSL_VERSION_TEXT - -#elif defined(USE_CRYPTO_POLARSSL) -#include -#define USING_CRYPTO POLARSSL_VERSION_STRING_FULL - -#elif defined(USE_CRYPTO_MBEDTLS) -#include -#define USING_CRYPTO MBEDTLS_VERSION_STRING_FULL - -#endif - -#ifndef _UTILS_H -#define _UTILS_H - -#include -#include -#include -#include - -#define PORTSTRLEN 16 -#define SS_ADDRSTRLEN (INET6_ADDRSTRLEN + PORTSTRLEN + 1) - -#ifdef ANDROID - -#include - -#define USE_TTY() -#define USE_SYSLOG(ident) -#define LOGI(...) \ - ((void)__android_log_print(ANDROID_LOG_DEBUG, "shadowsocks", \ - __VA_ARGS__)) -#define LOGE(...) \ - ((void)__android_log_print(ANDROID_LOG_ERROR, "shadowsocks", \ - __VA_ARGS__)) - -#else - -#define STR(x) # x -#define TOSTR(x) STR(x) - -#ifdef LIB_ONLY - -extern FILE *logfile; - -#define TIME_FORMAT "%Y-%m-%d %H:%M:%S" - -#define USE_TTY() - -#define USE_SYSLOG(ident) - -#define USE_LOGFILE(ident) \ - do { \ - if (ident != NULL) { logfile = fopen(ident, "w+"); } } \ - while (0) - -#define CLOSE_LOGFILE \ - do { \ - if (logfile != NULL) { fclose(logfile); } } \ - while (0) - -#define LOGI(format, ...) \ - do { \ - if (logfile != NULL) { \ - time_t now = time(NULL); \ - char timestr[20]; \ - strftime(timestr, 20, TIME_FORMAT, localtime(&now)); \ - fprintf(logfile, " %s INFO: " format "\n", timestr, ## __VA_ARGS__); \ - fflush(logfile); } \ - } \ - while (0) - -#define LOGE(format, ...) \ - do { \ - if (logfile != NULL) { \ - time_t now = time(NULL); \ - char timestr[20]; \ - strftime(timestr, 20, TIME_FORMAT, localtime(&now)); \ - fprintf(logfile, " %s ERROR: " format "\n", timestr, \ - ## __VA_ARGS__); \ - fflush(logfile); } \ - } \ - while (0) - -#elif defined(_WIN32) - -#define TIME_FORMAT "%Y-%m-%d %H:%M:%S" - -#define USE_TTY() - -#define USE_SYSLOG(ident) - -#define LOGI(format, ...) \ - do { \ - time_t now = time(NULL); \ - char timestr[20]; \ - strftime(timestr, 20, TIME_FORMAT, localtime(&now)); \ - fprintf(stderr, " %s INFO: " format "\n", timestr, ## __VA_ARGS__); \ - fflush(stderr); } \ - while (0) - -#define LOGE(format, ...) \ - do { \ - time_t now = time(NULL); \ - char timestr[20]; \ - strftime(timestr, 20, TIME_FORMAT, localtime(&now)); \ - fprintf(stderr, " %s ERROR: " format "\n", timestr, ## __VA_ARGS__); \ - fflush(stderr); } \ - while (0) - -#else - -#include - -extern int use_tty; -#define USE_TTY() \ - do { \ - use_tty = isatty(STDERR_FILENO); \ - } while (0) \ - -#define HAS_SYSLOG -extern int use_syslog; - -#define TIME_FORMAT "%F %T" - -#define USE_SYSLOG(ident) \ - do { \ - use_syslog = 1; \ - openlog((ident), LOG_CONS | LOG_PID, 0); } \ - while (0) - -#define LOGI(format, ...) \ - do { \ - if (use_syslog) { \ - syslog(LOG_INFO, format, ## __VA_ARGS__); \ - } else { \ - time_t now = time(NULL); \ - char timestr[20]; \ - strftime(timestr, 20, TIME_FORMAT, localtime(&now)); \ - if (use_tty) { \ - fprintf(stderr, "\e[01;32m %s INFO: \e[0m" format "\n", timestr, \ - ## __VA_ARGS__); \ - } else { \ - fprintf(stderr, " %s INFO: " format "\n", timestr, \ - ## __VA_ARGS__); \ - } \ - } \ - } \ - while (0) - -#define LOGE(format, ...) \ - do { \ - if (use_syslog) { \ - syslog(LOG_ERR, format, ## __VA_ARGS__); \ - } else { \ - time_t now = time(NULL); \ - char timestr[20]; \ - strftime(timestr, 20, TIME_FORMAT, localtime(&now)); \ - if (use_tty) { \ - fprintf(stderr, "\e[01;35m %s ERROR: \e[0m" format "\n", timestr, \ - ## __VA_ARGS__); \ - } else { \ - fprintf(stderr, " %s ERROR: " format "\n", timestr, \ - ## __VA_ARGS__); \ - } \ - } } \ - while (0) - -#endif -/* _WIN32 */ - -#endif - -#ifdef __MINGW32__ - -#ifdef ERROR -#undef ERROR -#endif -#define ERROR(s) ss_error(s) - -#else - -void ERROR(const char *s); - -#endif - -char *ss_itoa(int i); -int ss_isnumeric(const char *s); -int run_as(const char *user); -void FATAL(const char *msg); -void usage(void); -void daemonize(const char *path); -char *ss_strndup(const char *s, size_t n); -#ifdef HAVE_SETRLIMIT -int set_nofile(int nofile); -#endif - -void *ss_malloc(size_t size); -void *ss_realloc(void *ptr, size_t new_size); - -#define ss_free(ptr) \ - do { \ - free(ptr); \ - ptr = NULL; \ - } while (0) - -#endif // _UTILS_H diff --git a/shadowsocksr-libev/src/server/verify.c b/shadowsocksr-libev/src/server/verify.c deleted file mode 100644 index 9e7393dd..00000000 --- a/shadowsocksr-libev/src/server/verify.c +++ /dev/null @@ -1,188 +0,0 @@ - -#include "verify.h" - -static int verify_simple_pack_unit_size = 2000; - -typedef struct verify_simple_local_data { - char * recv_buffer; - int recv_buffer_size; -}verify_simple_local_data; - -void verify_simple_local_data_init(verify_simple_local_data* local) { - local->recv_buffer = (char*)malloc(16384); - local->recv_buffer_size = 0; -} - -obfs * verify_simple_new_obfs() { - obfs * self = new_obfs(); - self->l_data = malloc(sizeof(verify_simple_local_data)); - verify_simple_local_data_init((verify_simple_local_data*)self->l_data); - return self; -} - -void verify_simple_dispose(obfs *self) { - verify_simple_local_data *local = (verify_simple_local_data*)self->l_data; - if (local->recv_buffer != NULL) { - free(local->recv_buffer); - local->recv_buffer = NULL; - } - free(local); - self->l_data = NULL; - dispose_obfs(self); -} - -int verify_simple_pack_data(char *data, int datalength, char *outdata) { - unsigned char rand_len = (xorshift128plus() & 0xF) + 1; - int out_size = rand_len + datalength + 6; - outdata[0] = out_size >> 8; - outdata[1] = out_size; - outdata[2] = rand_len; - memmove(outdata + rand_len + 2, data, datalength); - fillcrc32((unsigned char *)outdata, out_size); - return out_size; -} - -int verify_simple_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t *capacity) { - char *plaindata = *pplaindata; - //verify_simple_local_data *local = (verify_simple_local_data*)self->l_data; - char * out_buffer = (char*)malloc(datalength * 2 + 32); - char * buffer = out_buffer; - char * data = plaindata; - int len = datalength; - int pack_len; - while ( len > verify_simple_pack_unit_size ) { - pack_len = verify_simple_pack_data(data, verify_simple_pack_unit_size, buffer); - buffer += pack_len; - data += verify_simple_pack_unit_size; - len -= verify_simple_pack_unit_size; - } - if (len > 0) { - pack_len = verify_simple_pack_data(data, len, buffer); - buffer += pack_len; - } - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int verify_simple_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t *capacity) { - char *plaindata = *pplaindata; - verify_simple_local_data *local = (verify_simple_local_data*)self->l_data; - uint8_t * recv_buffer = (uint8_t *)local->recv_buffer; - if (local->recv_buffer_size + datalength > 16384) - return -1; - memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength); - local->recv_buffer_size += datalength; - - char * out_buffer = (char*)malloc(local->recv_buffer_size); - char * buffer = out_buffer; - while (local->recv_buffer_size > 2) { - int length = ((int)recv_buffer[0] << 8) | recv_buffer[1]; - if (length >= 8192 || length < 7) { - free(out_buffer); - local->recv_buffer_size = 0; - return -1; - } - if (length > local->recv_buffer_size) - break; - - int crc = crc32((unsigned char*)recv_buffer, length); - if (crc != -1) { - free(out_buffer); - local->recv_buffer_size = 0; - return -1; - } - int data_size = length - recv_buffer[2] - 6; - memmove(buffer, recv_buffer + 2 + recv_buffer[2], data_size); - buffer += data_size; - memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length); - } - int len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int verify_simple_server_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t *capacity) { - char *plaindata = *pplaindata; - //verify_simple_local_data *local = (verify_simple_local_data*)self->l_data; - char * out_buffer = (char*)malloc(datalength * 2 + 32); - char * buffer = out_buffer; - char * data = plaindata; - int len = datalength; - int pack_len; - while ( len > verify_simple_pack_unit_size ) { - pack_len = verify_simple_pack_data(data, verify_simple_pack_unit_size, buffer); - buffer += pack_len; - data += verify_simple_pack_unit_size; - len -= verify_simple_pack_unit_size; - } - if (len > 0) { - pack_len = verify_simple_pack_data(data, len, buffer); - buffer += pack_len; - } - len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} - -int verify_simple_server_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t *capacity) { - char *plaindata = *pplaindata; - verify_simple_local_data *local = (verify_simple_local_data*)self->l_data; - uint8_t * recv_buffer = (uint8_t *)local->recv_buffer; - if (local->recv_buffer_size + datalength > 16384) - { - LOGE("verify_simple: wrong buf length %d", local->recv_buffer_size + datalength); - return -1; - } - memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength); - local->recv_buffer_size += datalength; - - char * out_buffer = (char*)malloc(local->recv_buffer_size); - char * buffer = out_buffer; - while (local->recv_buffer_size > 2) { - int length = ((int)recv_buffer[0] << 8) | recv_buffer[1]; - if (length >= 8192 || length < 7) { - free(out_buffer); - local->recv_buffer_size = 0; - LOGE("verify_simple: wrong length %d", length); - return -1; - } - if (length > local->recv_buffer_size) - break; - - int crc = crc32((unsigned char*)recv_buffer, length); - if (crc != -1) { - free(out_buffer); - local->recv_buffer_size = 0; - LOGE("verify_simple: wrong crc"); - return -1; - } - int data_size = length - recv_buffer[2] - 6; - memmove(buffer, recv_buffer + 2 + recv_buffer[2], data_size); - buffer += data_size; - memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length); - } - int len = buffer - out_buffer; - if (*capacity < len) { - *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2); - plaindata = *pplaindata; - } - memmove(plaindata, out_buffer, len); - free(out_buffer); - return len; -} diff --git a/shadowsocksr-libev/src/server/verify.h b/shadowsocksr-libev/src/server/verify.h deleted file mode 100644 index 57c6ff99..00000000 --- a/shadowsocksr-libev/src/server/verify.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * verify.h - Define shadowsocksR server's buffers and callbacks - * - * Copyright (C) 2015 - 2016, Break Wa11 - */ - -#ifndef _VERIFY_H -#define _VERIFY_H - -obfs * verify_simple_new_obfs(); -void verify_simple_dispose(obfs *self); - -int verify_simple_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); -int verify_simple_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); - -int verify_simple_server_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); -int verify_simple_server_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity); - -#endif // _VERIFY_H diff --git a/simple-obfs/Makefile b/simple-obfs/Makefile deleted file mode 100644 index 0ccd5b68..00000000 --- a/simple-obfs/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -# -# Copyright (C) 2017-2019 Jian Chang -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=simple-obfs -PKG_VERSION:=0.0.5 -PKG_RELEASE:= - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/shadowsocks/simple-obfs.git -PKG_MIRROR_HASH:=ea8f2b9825bbb87d5d860524e29bade265141687338db2dbf7ecd32690cf02fc -PKG_SOURCE_VERSION:=486bebd9208539058e57e23a12f23103016e09b4 -PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION) -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz - -PKG_LICENSE:=GPL-3.0-or-later -PKG_LICENSE_FILES:=COPYING LICENSE -PKG_MAINTAINER:=Jian Chang - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION) - -PKG_INSTALL:=1 -PKG_FIXUP:=autoreconf -PKG_USE_MIPS16:=0 -PKG_BUILD_PARALLEL:=1 -PKG_BUILD_DEPENDS:=libev - -PKG_CONFIG_DEPENDS:= CONFIG_SIMPLE_OBFS_STATIC_LINK - -include $(INCLUDE_DIR)/package.mk - -define Package/simple-obfs - SECTION:=net - CATEGORY:=Network - TITLE:=Simple-obfs - URL:=https://github.com/shadowsocks/simple-obfs - DEPENDS:=+libpthread +!SIMPLE_OBFS_STATIC_LINK:libev -endef - -Package/simple-obfs-server = $(Package/simple-obfs) - -define Package/simple-obfs-server/config -menu "Simple-obfs Compile Configuration" - depends on PACKAGE_simple-obfs || PACKAGE_simple-obfs-server - config SIMPLE_OBFS_STATIC_LINK - bool "enable static link libraries." - default n -endmenu -endef - -define Package/simple-obfs/description -Simple-obfs is a simple obfusacting tool, designed as plugin server of shadowsocks. -endef - -Package/simple-obfs-server/description = $(Package/simple-obfs/description) - -CONFIGURE_ARGS += \ - --disable-ssp \ - --disable-documentation \ - --disable-assert - -ifeq ($(CONFIG_SIMPLE_OBFS_STATIC_LINK),y) - CONFIGURE_ARGS += \ - --with-ev="$(STAGING_DIR)/usr" \ - LDFLAGS="-Wl,-static -static -static-libgcc" -endif - -define Package/simple-obfs/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/obfs-local $(1)/usr/bin -endef - -define Package/simple-obfs-server/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/obfs-server $(1)/usr/bin -endef - -$(eval $(call BuildPackage,simple-obfs)) -$(eval $(call BuildPackage,simple-obfs-server)) diff --git a/ssocks/Makefile b/ssocks/Makefile deleted file mode 100644 index 85ccddac..00000000 --- a/ssocks/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -# -# Copyright (C) 2017-2018 Jian Chang -# -# Copyright (C) 2021 ImmortalWrt -# -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=ssocks -PKG_VERSION:=0.0.14 -PKG_RELEASE:= - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/tostercx/ssocks.git -PKG_SOURCE_DATE:=2020-07-09 -PKG_SOURCE_VERSION:=c2024789c1ee076d171fd6061d7c133302216ea7 -PKG_MIRROR_HASH:=3654e9f1fb54646e1e89c19e7aa3e105b84b2e20b5b634662c21c66691d1d22e - -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Tianling Shen - -PKG_BUILD_PARALLEL:=1 - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/cmake.mk - -define Package/ssocks/template - SECTION:=net - CATEGORY:=Network - TITLE:=sSocks - URL:=https://github.com/tostercx/ssocks - DEPENDS:=+libopenssl -endef - -define Package/ssocks - $(call Package/ssocks/template) - TITLE+= Relay -endef - -define Package/ssocksd - $(call Package/ssocks/template) - TITLE+= Server -endef - -define Package/ssocks/description/template - sSocks is a package which contains: a socks5 server implements RFC 1928 (SOCKS V5) and - RFC 1929 (Authentication for SOCKS V5), a reverse socks server and client, a netcat like tool - and a socks5 relay. -endef - -Package/ssocks/description = $(Package/ssocks/description/template) -Package/ssocksd/description = $(Package/ssocks/description/template) - -define Build/Install - true -endef - -define Package/ssocks/install/template - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(2) $(1)/usr/bin/ -endef - -define Package/ssocks/install - $(call Package/ssocks/install/template,$(1),ssocks) -endef - -define Package/ssocksd/install - $(call Package/ssocks/install/template,$(1),ssocksd) -endef - -$(eval $(call BuildPackage,ssocks)) -$(eval $(call BuildPackage,ssocksd)) diff --git a/ssocks/patches/001-fix.patch b/ssocks/patches/001-fix.patch deleted file mode 100644 index 9e628e8e..00000000 --- a/ssocks/patches/001-fix.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/CMakeLists.txt 2020-09-07 14:23:49.000000000 +0800 -+++ b/CMakeLists.txt 2020-09-07 14:23:24.000000000 +0800 -@@ -11,7 +11,12 @@ - endif(WIN32) - - add_executable(ssocks src/ssocks.c ${AUX}) -+INSTALL(TARGETS ssocks RUNTIME DESTINATION bin) - add_executable(ssocksd src/ssocksd.c ${AUX}) -+INSTALL(TARGETS ssocksd RUNTIME DESTINATION bin) - add_executable(nsocks src/nsocks.c ${AUX}) -+INSTALL(TARGETS nsocks RUNTIME DESTINATION bin) - add_executable(rcsocks src/rcsocks.c ${AUX}) -+INSTALL(TARGETS rcsocks RUNTIME DESTINATION bin) - add_executable(rssocks src/rssocks.c ${AUX}) -+INSTALL(TARGETS rssocks RUNTIME DESTINATION bin) diff --git a/ssocks/patches/002-gcc10.patch b/ssocks/patches/002-gcc10.patch deleted file mode 100644 index 678c821e..00000000 --- a/ssocks/patches/002-gcc10.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/src/configd-util.h 2020-07-09 05:30:54.000000000 +0800 -+++ b/src/configd-util.h 2020-09-08 19:35:11.000000000 +0800 -@@ -33,7 +33,7 @@ - - - --struct globalArgsServer_t { -+static struct globalArgsServer_t { - char fileauth[255]; // -a option - char fileconfig[255]; // -f option - char filelog[255]; // -l option diff --git a/tcping/Makefile b/tcping/Makefile deleted file mode 100644 index 07d7c188..00000000 --- a/tcping/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (C) 2014 OpenWrt-dist -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - - -PKG_NAME:=tcping -PKG_VERSION:=0.3 -PKG_RELEASE:= - -PKG_LICENSE:=GPL-2.0-only -PKG_LICENSE_FILES:=license.txt - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/Lienol/tcping -PKG_MIRROR_HASH:=79414cd8e1d124422a36b8fe36a1f296b7d9bde99807b2c90ad81bbd65e200e0 -PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=db9101834732dac9aaa59dbb7fb9c74612dbf723 -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) - -include $(INCLUDE_DIR)/package.mk - -define Package/tcping - SECTION:=net - CATEGORY:=Network - TITLE:=tcping measures the latency of a tcp-connection - URL:=https://github.com/jlyo/tcping -endef - -define Package/tcping/description -endef - -define Package/tcping/conffiles -endef - -define Package/tcping/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/tcping $(1)/usr/sbin -endef - -$(eval $(call BuildPackage,tcping)) diff --git a/trojan-go/Makefile b/trojan-go/Makefile deleted file mode 100644 index 188f682b..00000000 --- a/trojan-go/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=trojan-go -PKG_VERSION:=0.10.6 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/p4gefau1t/trojan-go/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=925f02647dda944813f1eab0b71eac98b83eb5964ef5a6f63e89bc7eb4486c1f - -PKG_LICENSE:=GPL-3.0-only -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Tianling Shen - -PKG_CONFIG_DEPENDS:= \ - CONFIG_TROJAN_GO_COMPRESS_GOPROXY \ - CONFIG_TROJAN_GO_COMPRESS_UPX - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -GO_PKG:=github.com/p4gefau1t/trojan-go -GO_PKG_BUILD_PKG:=$$(GO_PKG) - -GO_PKG_LDFLAGS:=-s -w -GO_PKG_LDFLAGS_X:= \ - $(GO_PKG)/constant.Version=$(PKG_VERSION) \ - $(GO_PKG)/constant.Commit=v$(PKG_VERSION) -GO_PKG_TAGS:=full - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/trojan-go - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=A Trojan proxy written in Go - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle - URL:=https://p4gefau1t.github.io/trojan-go/ -endef - -define Package/trojan-go/description - Trojan features multiple protocols over TLS to avoid both - active/passive detections and ISP QoS limitations. -endef - -define Package/trojan-go/config -config TROJAN_GO_COMPRESS_GOPROXY - bool "Compiling with GOPROXY proxy" - default n - -config TROJAN_GO_COMPRESS_UPX - bool "Compress executable files with UPX" - depends on !mips64 - default n -endef - -ifeq ($(CONFIG_TROJAN_GO_COMPRESS_GOPROXY),y) - export GO111MODULE=on - export GOPROXY=https://goproxy.baidu.com -endif - -define Build/Compile - $(call GoPackage/Build/Compile) -ifeq ($(CONFIG_TROJAN_GO_COMPRESS_UPX),y) - $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/trojan-go -endif -endef - -$(eval $(call GoBinPackage,trojan-go)) -$(eval $(call BuildPackage,trojan-go)) diff --git a/trojan-plus/Makefile b/trojan-plus/Makefile deleted file mode 100644 index f417912b..00000000 --- a/trojan-plus/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (C) 2018-2019 wongsyrone -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# -include $(TOPDIR)/rules.mk - -PKG_NAME:=trojan-plus -PKG_VERSION:=10.0.3 -PKG_RELEASE:= - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/peter-tank/trojan-plus.git -PKG_SOURCE_DATE:=2020-09-06 -PKG_SOURCE_VERSION:=a6394cdd718669b0c7491493a78e61f6f0f899b3 -PKG_MIRROR_HASH:=2d37d09fe6d39d7981116ad387706f58f2b30b74a34e27fc5608f267dacc9208 - -PKG_BUILD_PARALLEL:=1 -PKG_BUILD_DEPENDS:=openssl - -PKG_LICENSE:=GPL-3.0 -PKG_LICENSE_FILE:=LICENSE -PKG_MAINTAINER:=Trojan-Plus-Group - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/cmake.mk - -TARGET_CXXFLAGS += -Wall -Wextra -TARGET_CXXFLAGS += $(FPIC) - -# LTO -TARGET_CXXFLAGS += -flto -TARGET_LDFLAGS += -flto - -# CXX standard -TARGET_CXXFLAGS += -std=c++11 -TARGET_CXXFLAGS := $(filter-out -O%,$(TARGET_CXXFLAGS)) -O3 -TARGET_CXXFLAGS += -ffunction-sections -fdata-sections -TARGET_LDFLAGS += -Wl,--gc-sections - -CMAKE_OPTIONS += \ - -DENABLE_MYSQL=OFF \ - -DENABLE_NAT=ON \ - -DENABLE_REUSE_PORT=ON \ - -DENABLE_SSL_KEYLOG=ON \ - -DENABLE_TLS13_CIPHERSUITES=ON \ - -DFORCE_TCP_FASTOPEN=OFF \ - -DSYSTEMD_SERVICE=OFF \ - -DOPENSSL_USE_STATIC_LIBS=FALSE \ - -DBoost_DEBUG=ON \ - -DBoost_NO_BOOST_CMAKE=ON - -define Package/trojan-plus - SECTION:=net - CATEGORY:=Network - TITLE:=An unidentifiable mechanism that helps you bypass GFW. It's compatible with original trojan with experimental features. - URL:=https://github.com/Trojan-Plus-Group/trojan-plus - DEPENDS:= \ - +libpthread +libstdcpp +libopenssl \ - +boost +boost-system +boost-program_options -endef - -define Package/trojan-plus/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/trojan $(1)/usr/sbin/trojan-plus -endef - -$(eval $(call BuildPackage,trojan-plus)) diff --git a/trojan/Makefile b/trojan/Makefile deleted file mode 100644 index f6b3ec3c..00000000 --- a/trojan/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright (C) 2018-2019 wongsyrone -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# -include $(TOPDIR)/rules.mk - -PKG_NAME:=trojan -PKG_VERSION:=1.16.0 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/trojan-gfw/trojan/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=86cdb2685bb03a63b62ce06545c41189952f1ec4a0cd9147450312ed70956cbc - -PKG_BUILD_PARALLEL:=1 -PKG_BUILD_DEPENDS:=openssl - -PKG_LICENSE:=GPL-3.0 -PKG_LICENSE_FILE:=LICENSE -PKG_MAINTAINER:=GreaterFire - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/cmake.mk - -TARGET_CXXFLAGS += -Wall -Wextra -TARGET_CXXFLAGS += $(FPIC) - -# LTO -TARGET_CXXFLAGS += -flto -TARGET_LDFLAGS += -flto - -# CXX standard -TARGET_CXXFLAGS += -std=c++11 -TARGET_CXXFLAGS := $(filter-out -O%,$(TARGET_CXXFLAGS)) -O3 -TARGET_CXXFLAGS += -ffunction-sections -fdata-sections -TARGET_LDFLAGS += -Wl,--gc-sections - -CMAKE_OPTIONS += \ - -DENABLE_MYSQL=OFF \ - -DENABLE_NAT=ON \ - -DENABLE_REUSE_PORT=ON \ - -DENABLE_SSL_KEYLOG=ON \ - -DENABLE_TLS13_CIPHERSUITES=ON \ - -DFORCE_TCP_FASTOPEN=OFF \ - -DSYSTEMD_SERVICE=OFF \ - -DOPENSSL_USE_STATIC_LIBS=FALSE \ - -DBoost_DEBUG=ON \ - -DBoost_NO_BOOST_CMAKE=ON - -define Package/trojan - SECTION:=net - CATEGORY:=Network - TITLE:=An unidentifiable mechanism that helps you bypass GFW - URL:=https://github.com/trojan-gfw/trojan - DEPENDS:= \ - +libpthread +libstdcpp +libopenssl \ - +boost +boost-system +boost-program_options +boost-date_time -endef - -define Package/trojan/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/trojan $(1)/usr/sbin/trojan -endef - -$(eval $(call BuildPackage,trojan)) diff --git a/trojan/patches/001-force-openssl-version.patch b/trojan/patches/001-force-openssl-version.patch deleted file mode 100644 index 7ee8f631..00000000 --- a/trojan/patches/001-force-openssl-version.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -43,7 +43,7 @@ if(MSVC) - add_definitions(-DBOOST_DATE_TIME_NO_LIB) - endif() - --find_package(OpenSSL 1.1.0 REQUIRED) -+find_package(OpenSSL 1.1.1 REQUIRED) - include_directories(${OPENSSL_INCLUDE_DIR}) - target_link_libraries(trojan ${OPENSSL_LIBRARIES}) - if(OPENSSL_VERSION VERSION_GREATER_EQUAL 1.1.1) diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile deleted file mode 100644 index b199965e..00000000 --- a/v2ray-core/Makefile +++ /dev/null @@ -1,189 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=v2ray-core -PKG_VERSION:=4.44.0 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/v2fly/v2ray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=d9973bafd3020f60a51fa3495b24ab417b08b3c8f9539a3748d00da6c68d0103 - -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Tianling Shen - -PKG_CONFIG_DEPENDS:= \ - CONFIG_V2RAY_CORE_COMPRESS_GOPROXY \ - CONFIG_V2RAY_CORE_COMPRESS_UPX \ - CONFIG_V2RAY_CTL_COMPRESS_GOPROXY \ - CONFIG_V2RAY_CTL_COMPRESS_UPX - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -GO_PKG:=github.com/v2fly/v2ray-core/v4 -GO_PKG_BUILD_PKG:=github.com/v2fly/v2ray-core/v4/main -GO_PKG_LDFLAGS:=-s -w -GO_PKG_LDFLAGS_X:= \ - $(GO_PKG).build=OpenWrt \ - $(GO_PKG).version=$(PKG_VERSION) - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/v2ray/template - TITLE:=A platform for building proxies to bypass network restrictions - SECTION:=net - CATEGORY:=Network - URL:=https://www.v2fly.org -endef - -define Package/v2ray-core - $(call Package/v2ray/template) - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle -endef - -define Package/v2ray-ctl - $(call Package/v2ray/template) - DEPENDS:=v2ray-core -endef - -define Package/v2ray-example - $(call Package/v2ray/template) - TITLE+= (example configs) - DEPENDS:=v2ray-core - PKGARCH:=all -endef - -define Package/v2ray-extra - $(call Package/v2ray/template) - TITLE+= (extra resources) - DEPENDS:=v2ray-core - PKGARCH:=all -endef - -define Package/v2ray/description - Project V is a set of network tools that help you to build your own computer network. - It secures your network connections and thus protects your privacy. -endef - -define Package/v2ray-core/description - $(call Package/v2ray/description) -endef - -define Package/v2ray-ctl/description - $(call Package/v2ray/description) - - This includes configuration tool for v2ray-core. -endef - -define Package/v2ray-example/description - $(call Package/v2ray/description) - - This includes example configuration files for v2ray-core. -endef - -define Package/v2ray-extra/description - $(call Package/v2ray/description) - - This includes extra resources for v2ray-core. -endef - -define Package/v2ray-core/config -menu "v2ray-core Configuration" - depends on PACKAGE_v2ray-core - -config V2RAY_CORE_COMPRESS_GOPROXY - bool "Compiling with GOPROXY proxy" - default n - -config V2RAY_CORE_COMPRESS_UPX - bool "Compress executable files with UPX" - depends on !mips64 - default n -endmenu -endef - -define Package/v2ray-ctl/config -menu "v2ray-ctl Configuration" - depends on PACKAGE_v2ray-ctl - -config V2RAY_CTL_COMPRESS_GOPROXY - bool "Compiling with GOPROXY proxy" - default n - -config V2RAY_CTL_COMPRESS_UPX - bool "Compress executable files with UPX" - depends on !mips64 - default n -endmenu -endef - -define Package/v2ray-core/conffiles -/etc/config/v2ray -/etc/v2ray/ -endef - -ifneq ($(CONFIG_V2RAY_CORE_COMPRESS_GOPROXY)$(CONFIG_V2RAY_CTL_COMPRESS_GOPROXY),) - export GO111MODULE=on - export GOPROXY=https://goproxy.baidu.com -endif - -define Build/Compile - $(call GoPackage/Build/Compile) - mv $(GO_PKG_BUILD_BIN_DIR)/main $(GO_PKG_BUILD_BIN_DIR)/v2ray -ifneq ($(CONFIG_V2RAY_CORE_COMPRESS_UPX),) - $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/v2ray -endif - -ifneq ($(CONFIG_PACKAGE_v2ray-ctl),) - $(eval GO_PKG_BUILD_PKG:=$(GO_PKG)/infra/control/main) - $(call GoPackage/Build/Compile) - mv $(GO_PKG_BUILD_BIN_DIR)/main $(GO_PKG_BUILD_BIN_DIR)/v2ctl -ifneq ($(CONFIG_V2RAY_CTL_COMPRESS_UPX),) - $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/v2ctl -endif -endif -endef - -define Package/v2ray-core/install - $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR)) - $(INSTALL_DIR) $(1)/usr/bin/ - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/v2ray $(1)/usr/bin/ - - $(INSTALL_DIR) $(1)/etc/v2ray/ - $(INSTALL_DATA) $(PKG_BUILD_DIR)/release/config/config.json $(1)/etc/v2ray/ - - $(INSTALL_DIR) $(1)/etc/config/ - $(INSTALL_CONF) $(CURDIR)/files/v2ray.conf $(1)/etc/config/v2ray - $(INSTALL_DIR) $(1)/etc/init.d/ - $(INSTALL_BIN) $(CURDIR)/files/v2ray.init $(1)/etc/init.d/v2ray -endef - -define Package/v2ray-ctl/install - $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR)) - - $(INSTALL_DIR) $(1)/usr/bin/ - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/v2ctl $(1)/usr/bin/ -endef - -define Package/v2ray-example/install - $(INSTALL_DIR) $(1)/etc/v2ray/ - $(INSTALL_DATA) $(PKG_BUILD_DIR)/release/config/vpoint_socks_vmess.json $(1)/etc/v2ray/ - $(INSTALL_DATA) $(PKG_BUILD_DIR)/release/config/vpoint_vmess_freedom.json $(1)/etc/v2ray/ -endef - -define Package/v2ray-extra/install - $(INSTALL_DIR) $(1)/usr/share/v2ray/ - $(CP) $(PKG_BUILD_DIR)/release/extra/* $(1)/usr/share/v2ray/ -endef - -$(eval $(call BuildPackage,v2ray-core)) -$(eval $(call BuildPackage,v2ray-ctl)) -$(eval $(call BuildPackage,v2ray-example)) -$(eval $(call BuildPackage,v2ray-extra)) diff --git a/v2ray-core/files/v2ray.conf b/v2ray-core/files/v2ray.conf deleted file mode 100644 index 6df1e10f..00000000 --- a/v2ray-core/files/v2ray.conf +++ /dev/null @@ -1,11 +0,0 @@ - -config v2ray 'enabled' - option enabled '0' - -config v2ray 'config' - option confdir '/etc/v2ray' - list conffiles '/etc/v2ray/config.json' - option datadir '/usr/share/v2ray' - option format 'json' - option memconservative '1' - diff --git a/v2ray-core/files/v2ray.init b/v2ray-core/files/v2ray.init deleted file mode 100755 index 4370c7f1..00000000 --- a/v2ray-core/files/v2ray.init +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh /etc/rc.common - -USE_PROCD=1 -START=99 - -CONF="v2ray" -PROG="/usr/bin/v2ray" -CAPA_FILE="/etc/capabilities/v2ray.json" - -start_service() { - config_load "$CONF" - - local enabled - config_get_bool enabled "enabled" "enabled" "0" - [ "$enabled" -eq "0" ] && exit 1 - - local confdir - local conffiles - local datadir - local format - - config_get confdir "config" "confdir" - config_get conffiles "config" "conffiles" - config_get datadir "config" "datadir" "/usr/share/v2ray" - config_get format "config" "format" "json" - config_get_bool memconservative "config" "memconservative" "1" - - procd_open_instance "$CONF" - procd_set_param command "$PROG" run - [ -n "$confdir" ] && procd_append_param command -confdir "$confdir" - [ -n "$conffiles" ] && { - for i in $conffiles - do - procd_append_param command -config "$i" - done - } - [ -n "$format" ] && procd_append_param command -format "$format" - procd_set_param env v2ray.local.asset="$datadir" - [ "$memconservative" -eq "1" ] && procd_append_param env V2RAY_CONF_GEOLOADER="memconservative" - procd_set_param file $conffiles - - procd_set_param stdout 1 - procd_set_param stderr 1 - procd_set_param respawn - - procd_close_instance -} - -reload_service() { - stop - start -} - -service_triggers() { - procd_add_reload_trigger "$CONF" -} diff --git a/v2ray-geodata/Makefile b/v2ray-geodata/Makefile deleted file mode 100644 index 08702fbc..00000000 --- a/v2ray-geodata/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=v2ray-geodata -PKG_RELEASE:= - -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Tianling Shen - -include $(INCLUDE_DIR)/package.mk - -GEOIP_VER:=202112090029 -GEOIP_FILE:=geoip.dat.$(GEOIP_VER) -define Download/geoip - URL:=https://github.com/v2fly/geoip/releases/download/$(GEOIP_VER)/ - URL_FILE:=geoip.dat - FILE:=$(GEOIP_FILE) - HASH:=704c53a30531b74a2c4c51b5ee958340717fc81906335c4342fb7d6ef4243ba9 -endef - -GEOSITE_VER:=20211209100918 -GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) -define Download/geosite - URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ - URL_FILE:=dlc.dat - FILE:=$(GEOSITE_FILE) - HASH:=a39901df0d0f7477d874cda50b045057610837dd0d80f7ff4c51b7ab87d88b18 -endef - -define Package/v2ray-geodata/template - SECTION:=net - CATEGORY:=Network - SUBMENU:=IP Addresses and Names - URL:=https://www.v2fly.org - PKGARCH:=all -endef - -define Package/v2ray-geoip - $(call Package/v2ray-geodata/template) - TITLE:=GeoIP List for V2Ray - VERSION:=$(GEOIP_VER)-$(PKG_RELEASE) - LICENSE:=CC-BY-SA-4.0 -endef - -define Package/v2ray-geosite - $(call Package/v2ray-geodata/template) - TITLE:=Geosite List for V2Ray - VERSION:=$(GEOSITE_VER)-$(PKG_RELEASE) - LICENSE:=MIT -endef - -define Build/Prepare - $(call Build/Prepare/Default) -ifneq ($(CONFIG_PACKAGE_v2ray-geoip),) - $(call Download,geoip) -endif -ifneq ($(CONFIG_PACKAGE_v2ray-geosite),) - $(call Download,geosite) -endif -endef - -define Build/Compile -endef - -define Package/v2ray-geoip/install - $(INSTALL_DIR) $(1)/usr/share/v2ray - $(INSTALL_DATA) $(DL_DIR)/$(GEOIP_FILE) $(1)/usr/share/v2ray/geoip.dat -endef - -define Package/v2ray-geosite/install - $(INSTALL_DIR) $(1)/usr/share/v2ray - $(INSTALL_DATA) $(DL_DIR)/$(GEOSITE_FILE) $(1)/usr/share/v2ray/geosite.dat -endef - -$(eval $(call BuildPackage,v2ray-geoip)) -$(eval $(call BuildPackage,v2ray-geosite)) diff --git a/v2ray-plugin/Makefile b/v2ray-plugin/Makefile deleted file mode 100644 index 2709f48a..00000000 --- a/v2ray-plugin/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2020 SharerMax -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=v2ray-plugin -PKG_VERSION:=5.0.2 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/teddysun/v2ray-plugin/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=f94e8efe879a5300871dd01faec7d6635baaef4dbd39d83f4362802f716d386e - -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=madeye - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -GO_PKG:=github.com/shadowsocks/v2ray-plugin -GO_PKG_LDFLAGS:=-s -w -GO_PKG_LDFLAGS_X:=main.VERSION=v$(PKG_VERSION) - -PKG_CONFIG_DEPENDS := \ - CONFIG_V2RAY_PLUGIN_INCLUDE_GOPROXY \ - CONFIG_V2RAY_PLUGIN_COMPRESS_UPX - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/v2ray-plugin/config -config V2RAY_PLUGIN_INCLUDE_GOPROXY - bool "Compiling with GOPROXY proxy" - default n - -config V2RAY_PLUGIN_COMPRESS_UPX - bool "Compress executable files with UPX" - depends on !mips64 - default n -endef - -ifeq ($(CONFIG_V2RAY_PLUGIN_INCLUDE_GOPROXY),y) -export GO111MODULE=on -export GOPROXY=https://goproxy.io -#export GOPROXY=https://mirrors.aliyun.com/goproxy/ -endif - -define Package/v2ray-plugin - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=SIP003 plugin for shadowsocks, based on v2ray - URL:=https://github.com/teddysun/v2ray-plugin - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle -endef - -define Build/Compile - $(call GoPackage/Build/Compile) -ifneq ($(CONFIG_V2RAY_PLUGIN_COMPRESS_UPX),) - $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/v2ray-plugin -endif -endef - -define Package/v2ray-plugin/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/v2ray-plugin $(1)/usr/bin/v2ray-plugin -endef - -$(eval $(call GoBinPackage,v2ray-plugin)) -$(eval $(call BuildPackage,v2ray-plugin)) diff --git a/xray-core/Makefile b/xray-core/Makefile deleted file mode 100644 index de160e25..00000000 --- a/xray-core/Makefile +++ /dev/null @@ -1,126 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=Xray-core -PKG_VERSION:=1.5.3 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/XTLS/Xray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=4b8d78cc20bdf2e8936c02b05d22f0a3231075155ffdc67508d8448ab8858252 - -#PKG_SOURCE_PROTO:=git -#PKG_SOURCE_URL:=https://github.com/XTLS/xray-core.git -#PKG_MIRROR_HASH:=19f3017d8279acc28d242d18689b95a39ca00a286e72329552d114f04a861ecb -#PKG_SOURCE_VERSION:=c345d4818efa763b07961d6c132afe1cf91845de -#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz - -PKG_MAINTAINER:=Tianling Shen -PKG_LICENSE:=MPL-2.0 -PKG_LICENSE_FILES:=LICENSE - -PKG_CONFIG_DEPENDS:= \ - CONFIG_XRAY_CORE_COMPRESS_GOPROXY \ - CONFIG_XRAY_CORE_COMPRESS_UPX \ - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -GO_PKG:=github.com/xtls/xray-core -GO_PKG_BUILD_PKG:=github.com/xtls/xray-core/main -GO_PKG_LDFLAGS:=-s -w -GO_PKG_LDFLAGS_X:= \ - $(GO_PKG)/core.build=OpenWrt \ - $(GO_PKG)/core.version=$(PKG_VERSION) - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/xray/template - TITLE:=A platform for building proxies to bypass network restrictions - SECTION:=net - CATEGORY:=Network - URL:=https://xtls.github.io -endef - -define Package/xray-core - $(call Package/xray/template) - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle -endef - -define Package/xray-example - $(call Package/xray/template) - TITLE+= (example configs) - DEPENDS:=xray-core - PKGARCH:=all -endef - -define Package/xray/description - Xray, Penetrates Everything. It helps you to build your own computer network. - It secures your network connections and thus protects your privacy. -endef - -define Package/xray-core/description - $(call Package/xray/description) -endef - -define Package/xray-example/description - $(call Package/xray/description) - - This includes example configuration files for xray-core. -endef - -define Package/xray-core/config -menu "Xray-core Configuration" - depends on PACKAGE_xray-core - -config XRAY_CORE_COMPRESS_GOPROXY - bool "Compiling with GOPROXY proxy" - default n - -config XRAY_CORE_COMPRESS_UPX - bool "Compress executable files with UPX" - depends on !mips64 - default n -endmenu -endef - -define Package/xray-core/conffiles -/etc/xray/ -/etc/config/xray -endef - -ifneq ($(CONFIG_XRAY_CORE_COMPRESS_GOPROXY),) - export GO111MODULE=on - export GOPROXY=https://goproxy.baidu.com -endif - -define Build/Compile - $(call GoPackage/Build/Compile) -ifneq ($(CONFIG_XRAY_CORE_COMPRESS_UPX),) - $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/main -endif -endef - -define Package/xray-core/install - $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR)) - $(INSTALL_DIR) $(1)/usr/bin/ - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/main $(1)/usr/bin/xray - - $(INSTALL_DIR) $(1)/etc/xray/ - $(INSTALL_DATA) $(CURDIR)/files/config.json.example $(1)/etc/xray/ - - $(INSTALL_DIR) $(1)/etc/config/ - $(INSTALL_CONF) $(CURDIR)/files/xray.conf $(1)/etc/config/xray - $(INSTALL_DIR) $(1)/etc/init.d/ - $(INSTALL_BIN) $(CURDIR)/files/xray.init $(1)/etc/init.d/xray -endef - -define Package/xray-example/install - $(INSTALL_DIR) $(1)/etc/xray/ - $(INSTALL_DATA) $(CURDIR)/files/vpoint_socks_vmess.json $(1)/etc/xray/ - $(INSTALL_DATA) $(CURDIR)/files/vpoint_vmess_freedom.json $(1)/etc/xray/ -endef - -$(eval $(call BuildPackage,xray-core)) -$(eval $(call BuildPackage,xray-example)) diff --git a/xray-core/files/config.json.example b/xray-core/files/config.json.example deleted file mode 100644 index 710bb1be..00000000 --- a/xray-core/files/config.json.example +++ /dev/null @@ -1,144 +0,0 @@ -// Config file of Xray. This file follows standard JSON format, with comments support. -// Uncomment entries below to satisfy your needs. Also read our manual for more detail at -// https://xtls.github.io/en/config/ -{ - "log": { - // By default, Xray writes access log to stdout. - // "access": "/path/to/access/log/file", - - // By default, Xray write error log to stdout. - // "error": "/path/to/error/log/file", - - // Log level, one of "debug", "info", "warning", "error", "none" - "loglevel": "warning" - }, - // List of inbound proxy configurations. - "inbounds": [{ - // Port to listen on. You may need root access if the value is less than 1024. - "port": 1080, - - // IP address to listen on. Change to "0.0.0.0" to listen on all network interfaces. - "listen": "127.0.0.1", - - // Tag of the inbound proxy. May be used for routing. - "tag": "socks-inbound", - - // Protocol name of inbound proxy. - "protocol": "socks", - - // Settings of the protocol. Varies based on protocol. - "settings": { - "auth": "noauth", - "udp": false, - "ip": "127.0.0.1" - }, - - // Enable sniffing on TCP connection. - "sniffing": { - "enabled": true, - // Target domain will be overriden to the one carried by the connection, if the connection is HTTP or HTTPS. - "destOverride": ["http", "tls"] - } - }], - // List of outbound proxy configurations. - "outbounds": [{ - // Protocol name of the outbound proxy. - "protocol": "freedom", - - // Settings of the protocol. Varies based on protocol. - "settings": {}, - - // Tag of the outbound. May be used for routing. - "tag": "direct" - },{ - "protocol": "blackhole", - "settings": {}, - "tag": "blocked" - }], - - // Transport is for global transport settings. If you have multiple transports with same settings - // (say mKCP), you may put it here, instead of in each individual inbound/outbounds. - //"transport": {}, - - // Routing controls how traffic from inbounds are sent to outbounds. - "routing": { - "domainStrategy": "IPOnDemand", - "rules":[ - { - // Blocks access to private IPs. Remove this if you want to access your router. - "type": "field", - "ip": ["geoip:private"], - "outboundTag": "blocked" - }, - { - // Blocks major ads. - "type": "field", - "domain": ["geosite:category-ads"], - "outboundTag": "blocked" - } - ] - }, - - // Dns settings for domain resolution. - "dns": { - // Static hosts, similar to hosts file. - "hosts": { - // Match v2ray.com to another domain on CloudFlare. This domain will be used when querying IPs for v2ray.com. - "domain:v2ray.com": "www.vicemc.net", - - // The following settings help to eliminate DNS poisoning in mainland China. - // It is safe to comment these out if this is not the case for you. - "domain:github.io": "pages.github.com", - "domain:wikipedia.org": "www.wikimedia.org", - "domain:shadowsocks.org": "electronicsrealm.com" - }, - "servers": [ - "1.1.1.1", - { - "address": "114.114.114.114", - "port": 53, - // List of domains that use this DNS first. - "domains": [ - "geosite:cn" - ] - }, - "8.8.8.8", - "localhost" - ] - }, - - // Policy controls some internal behavior of how Xray handles connections. - // It may be on connection level by user levels in 'levels', or global settings in 'system.' - "policy": { - // Connection policys by user levels - "levels": { - "0": { - "uplinkOnly": 0, - "downlinkOnly": 0 - } - }, - "system": { - "statsInboundUplink": false, - "statsInboundDownlink": false, - "statsOutboundUplink": false, - "statsOutboundDownlink": false - } - }, - - // Stats enables internal stats counter. - // This setting can be used together with Policy and Api. - //"stats":{}, - - // Api enables gRPC APIs for external programs to communicate with Xray instance. - //"api": { - //"tag": "api", - //"services": [ - // "HandlerService", - // "LoggerService", - // "StatsService" - //] - //}, - - // You may add other entries to the configuration, but they will not be recognized by Xray. - "other": {} -} diff --git a/xray-core/files/vpoint_socks_vmess.json b/xray-core/files/vpoint_socks_vmess.json deleted file mode 100644 index 789cd270..00000000 --- a/xray-core/files/vpoint_socks_vmess.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "log": { - "loglevel": "warning" - }, - "inbounds": [{ - "port": 1080, - "listen": "127.0.0.1", - "protocol": "socks", - "settings": { - "auth": "noauth", - "udp": false, - "ip": "127.0.0.1" - } - }], - "outbounds": [{ - "protocol": "freedom", - "settings": {}, - "tag": "direct" - }], - "policy": { - "levels": { - "0": {"uplinkOnly": 0} - } - } -} diff --git a/xray-core/files/vpoint_vmess_freedom.json b/xray-core/files/vpoint_vmess_freedom.json deleted file mode 100644 index 41c7e30f..00000000 --- a/xray-core/files/vpoint_vmess_freedom.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "inbounds": [{ - "port": 10086, - "protocol": "vmess", - "settings": { - "clients": [ - { - "id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297", - "level": 1 - } - ] - } - }], - "outbounds": [{ - "protocol": "freedom", - "settings": {} - },{ - "protocol": "blackhole", - "settings": {}, - "tag": "blocked" - }], - "routing": { - "rules": [ - { - "type": "field", - "ip": ["geoip:private"], - "outboundTag": "blocked" - } - ] - } -} diff --git a/xray-core/files/xray.conf b/xray-core/files/xray.conf deleted file mode 100644 index 362fbac0..00000000 --- a/xray-core/files/xray.conf +++ /dev/null @@ -1,11 +0,0 @@ - -config xray 'enabled' - option enabled '0' - -config xray 'config' - option confdir '/etc/xray' - list conffiles '/etc/xray/config.json' - option datadir '/usr/share/v2ray' - option dialer '' - option format 'json' - diff --git a/xray-core/files/xray.init b/xray-core/files/xray.init deleted file mode 100755 index 1197255c..00000000 --- a/xray-core/files/xray.init +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh /etc/rc.common - -USE_PROCD=1 -START=99 - -CONF="xray" -PROG="/usr/bin/xray" - -start_service() { - config_load "$CONF" - - local enabled - config_get enabled "enabled" "enabled" "0" - [ "$enabled" -eq "0" ] && exit 1 - - local confdir - local conffiles - local datadir - local dialer - local format - - config_get confdir "config" "confdir" - config_get conffiles "config" "conffiles" - config_get datadir "config" "datadir" "/usr/share/v2ray" - config_get dialer "config" "dialer" - config_get format "config" "format" "json" - - procd_open_instance "$CONF" - procd_set_param command "$PROG" run - [ -n "$confdir" ] && procd_append_param command -confdir "$confdir" - [ -n "$conffiles" ] && { - for i in $conffiles - do - procd_append_param command -config "$i" - done - } - [ -n "$format" ] && procd_append_param command -format "$format" - [ -n "$dialer" ] && procd_set_param env XRAY_BROWSER_DIALER="$dialer" - procd_set_param env XRAY_LOCATION_ASSET="$datadir" - procd_set_param file $conffiles - - procd_set_param stdout 1 - procd_set_param stderr 1 - procd_set_param respawn - - procd_close_instance -} - -reload_service() { - stop - start -} - -service_triggers() { - procd_add_reload_trigger "$CONF" -} diff --git a/xray-plugin/Makefile b/xray-plugin/Makefile deleted file mode 100644 index 056e86bb..00000000 --- a/xray-plugin/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2021 ImmortalWrt.org - -include $(TOPDIR)/rules.mk - -PKG_NAME:=xray-plugin -PKG_VERSION:=1.5.3 -PKG_RELEASE:= - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/teddysun/xray-plugin/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=0280e1c7c9c87db13a456be098e42065374066df4108b87c2e1d781337740a73 - -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Tianling Shen - -PKG_CONFIG_DEPENDS:= \ - CONFIG_XRAY_PLUGIN_COMPRESS_GOPROXY \ - CONFIG_XRAY_PLUGIN_COMPRESS_UPX - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -GO_PKG:=github.com/teddysun/xray-plugin -GO_PKG_LDFLAGS:=-s -w - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/xray-plugin/config -config XRAY_PLUGIN_COMPRESS_GOPROXY - bool "Compiling with GOPROXY proxy" - default n - -config XRAY_PLUGIN_COMPRESS_UPX - bool "Compress executable files with UPX" - depends on !mips64 - default n -endef - -ifneq ($(CONFIG_XRAY_PLUGIN_COMPRESS_GOPROXY),) - export GO111MODULE=on - export GOPROXY=https://goproxy.io -endif - -define Package/xray-plugin - SECTION:=net - CATEGORY:=Network - SUBMENU:=Web Servers/Proxies - TITLE:=SIP003 plugin for Shadowsocks, based on Xray - URL:=https://github.com/teddysun/xray-plugin - DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle -endef - -define Build/Compile - $(call GoPackage/Build/Compile) -ifneq ($(CONFIG_XRAY_PLUGIN_COMPRESS_UPX),) - $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/xray-plugin -endif -endef - -define Package/xray-plugin/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/xray-plugin $(1)/usr/bin/xray-plugin -endef - -$(eval $(call GoBinPackage,xray-plugin)) -$(eval $(call BuildPackage,xray-plugin))